fix: 移除未使用的代码和注释,优化导入格式
This commit is contained in:
parent
6984855346
commit
d4433c3ad9
@ -1,95 +0,0 @@
|
||||
import promptAction from '@ohos.promptAction'
|
||||
import router from '@ohos.router'
|
||||
import { deleteAllFileByPiC, takePhoto } from '../../service/videoService'
|
||||
import {
|
||||
delSyncTable,
|
||||
getDataBaseTable,
|
||||
getMySystemSetTable,
|
||||
upDataZhongxinginitialization,
|
||||
upDateTable
|
||||
} from './initable'
|
||||
import { GlobalConfig } from '../../config/index'
|
||||
import testNapi from '@ohos.hiserialsdk'
|
||||
import fs from '@ohos.file.fs';
|
||||
|
||||
let num = 0
|
||||
|
||||
|
||||
//配置流水号
|
||||
|
||||
|
||||
let interval
|
||||
|
||||
// 判断摄像头是否遮挡
|
||||
|
||||
const devPath = "/dev/ttyS3"
|
||||
let chuankoufd
|
||||
|
||||
function openChuankouFn(callback) {
|
||||
console.log('SerialOpen in indexservice, path=' + devPath)
|
||||
|
||||
//TODO 自动挡车不读取串口
|
||||
testNapi.SerialOpenAsync(devPath, (fd) => {
|
||||
chuankoufd = fd
|
||||
// AppStorage.setOrCreate('fd',fd)
|
||||
// AppStorage.setOrCreate('num',0)
|
||||
let parity = 0x4e; // 'N'
|
||||
let ret = testNapi.SerialSetAsync(chuankoufd, 115200, 0, 8, 1, parity, (ret) => {
|
||||
callback()
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function getChuankouFnMsg() {
|
||||
let timeout = 50000; // 2秒超时
|
||||
let databuff = [0x61, 0xAA, 0x0A, 0X15, 0X00]; // send ABCDE
|
||||
testNapi.SerialSendAsync(chuankoufd, databuff, (ret) => {
|
||||
testNapi.SerialRecvAsync(chuankoufd, timeout, (revTestInfo) => {
|
||||
|
||||
const message = revTestInfo?.recevedBuf?.toString()
|
||||
if (message == '') {
|
||||
// clearInterval(chuankou)
|
||||
testNapi.SerialClose(chuankoufd);
|
||||
chuankoufd = null
|
||||
setTimeout(() => {
|
||||
getChuankouFn()
|
||||
}, 2000)
|
||||
return
|
||||
}
|
||||
const msg = message?.split(',')
|
||||
if (!msg?.length) {
|
||||
|
||||
} else if (msg[0] != '98' || msg[1] != '85' || msg.length < 9) {
|
||||
|
||||
} else if (msg.length < 12) {
|
||||
|
||||
} else {
|
||||
AppStorage.setOrCreate('chuankoMsg', msg[9])
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
getChuankouFnMsg()
|
||||
}, 500)
|
||||
|
||||
// hilog.info(0x0000, 'testTag', 'Test NAPI SerialRecvAsync callback in');
|
||||
// hilog.info(0x0000, 'testTag', 'Test NAPI SerialRecvAsync recevedLen = %{public}d', revTestInfo.recevedLen);
|
||||
// hilog.info(0x0000, 'testTag', 'Test NAPI SerialRecvAsync recevedBuf = %{public}s', revTestInfo.recevedBuf.toString());
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
let chuankou
|
||||
|
||||
export async function getChuankouFn() {
|
||||
if (chuankoufd) {
|
||||
return
|
||||
}
|
||||
openChuankouFn(getChuankouFnMsg)
|
||||
// clearInterval(chuankou)
|
||||
// chuankou=setInterval(()=>{
|
||||
// getChuankouFnMsg()
|
||||
// },1000)
|
||||
|
||||
}
|
||||
@ -1,474 +0,0 @@
|
||||
import { initCenterCache, initCenterCacheByKSPT, initEsModel, initialization } from '../../api/index';
|
||||
import AccountTable from '../database/tables/AccountTable';
|
||||
import MA_MARKRULE from '../constants/MA_MARKRULE';
|
||||
import MA_SYSTEMPARM from '../constants/MA_SYSTEMPARM';
|
||||
import MA_MAP_COLLECT from '../constants/MA_MAP_COLLECT';
|
||||
import MA_MAP_COLLECT_SHAPE from '../constants/MA_MAP_COLLECT_SHAPE';
|
||||
import MA_MAP_ITEMCLASS from '../constants/MA_MAP_ITEMCLASS';
|
||||
import MA_MAP_POINT from '../constants/MA_MAP_POINT';
|
||||
import MA_MAP_POINT_ITEM from '../constants/MA_MAP_POINT_ITEM';
|
||||
import MA_MAP_ROAD from '../constants/MA_MAP_ROAD';
|
||||
import MA_MAP_ROAD_LANE from '../constants/MA_MAP_ROAD_LANE';
|
||||
import MA_MAP_SUBITEM from '../constants/MA_MAP_SUBITEM';
|
||||
import MA_SYSSET from '../constants/MA_SYSSET';
|
||||
import ES_CARINFO from '../constants/ES_CARINFO';
|
||||
import ES_EXAMPOINTDETAIL from '../constants/ES_EXAMPOINTDETAIL';
|
||||
import MA_MARKRULESET from '../constants/MA_MARKRULESET';
|
||||
import MA_CDSBINFO from '../constants/MA_CDSBINFO';
|
||||
import MA_ITEMINFO from '../constants/MA_ITEMINFO';
|
||||
import MA_T_CARPARMSET from '../constants/MA_T_CARPARMSET';
|
||||
import ES_CAR_VIDEO_PARAMETER from '../constants/ES_CAR_VIDEO_PARAMETER';
|
||||
import IpConfigTable from '../constants/IpConfigTable';
|
||||
import CommonConstants from '../constants/CommonConstants';
|
||||
import DeviceInfoTable from '../constants/DeviceInfoTable';
|
||||
import USER from '../constants/USER';
|
||||
import USERLIST from '../constants/USERLIST';
|
||||
import util from '@ohos.util';
|
||||
import FileModel from '../../pages/judgeSDK/utils/fileModel';
|
||||
|
||||
import { GlobalConfig } from '../../config/index';
|
||||
import prompt from '@ohos.promptAction';
|
||||
import DB, { ColumnType } from '../database/DbSql';
|
||||
import FileUtils from '../../utils/FileUtils';
|
||||
import { TimeSynchronizationRspBody } from '../../model';
|
||||
|
||||
//读表
|
||||
//参数平台
|
||||
const map = {
|
||||
'MA_MARKRULE': MA_MARKRULE,
|
||||
'MA_SYSTEMPARM': MA_SYSTEMPARM,
|
||||
'MA_MAP_COLLECT': MA_MAP_COLLECT,
|
||||
'MA_MAP_COLLECT_SHAPE': MA_MAP_COLLECT_SHAPE,
|
||||
'MA_MAP_ITEMCLASS': MA_MAP_ITEMCLASS,
|
||||
'MA_MAP_POINT': MA_MAP_POINT,
|
||||
'MA_MAP_POINT_ITEM': MA_MAP_POINT_ITEM,
|
||||
'MA_MAP_ROAD': MA_MAP_ROAD,
|
||||
'MA_MAP_ROAD_LANE': MA_MAP_ROAD_LANE,
|
||||
'MAP_SUBITEM': MA_MAP_SUBITEM,
|
||||
'MA_MAP_SUBITEM': MA_MAP_SUBITEM,
|
||||
'MA_SYSSET': MA_SYSSET,
|
||||
'ES_CARINFO': ES_CARINFO,
|
||||
'ES_EXAMPOINTDETAIL': ES_EXAMPOINTDETAIL,
|
||||
'MA_MARKRULESET': MA_MARKRULESET,
|
||||
'MA_CDSBINFO': MA_CDSBINFO,
|
||||
'MA_ITEMINFO': MA_ITEMINFO,
|
||||
'MA_T_CARPARMSET': MA_T_CARPARMSET,
|
||||
'ES_CAR_VIDEO_PARAMETER': ES_CAR_VIDEO_PARAMETER,
|
||||
'USER': USER,
|
||||
'USERLIST': USERLIST,
|
||||
'IpConfigTable': IpConfigTable,
|
||||
'DeviceInfoTable': DeviceInfoTable,
|
||||
'CommonConstants': CommonConstants
|
||||
}
|
||||
const centerToMap = {
|
||||
'ItemInfo': MA_ITEMINFO,
|
||||
'MarkRule': MA_MARKRULE,
|
||||
'SystemParm': MA_SYSTEMPARM,
|
||||
'mapCollectList': MA_MAP_COLLECT,
|
||||
'mapCollectshapeList': MA_MAP_COLLECT_SHAPE,
|
||||
'Map_Collect': MA_MAP_COLLECT,
|
||||
'Map_Collect_Shape': MA_MAP_COLLECT_SHAPE,
|
||||
'Map_ItemClass': MA_MAP_ITEMCLASS,
|
||||
'Map_Point': MA_MAP_POINT,
|
||||
'Map_Point_Item': MA_MAP_POINT_ITEM,
|
||||
'Map_Road': MA_MAP_ROAD,
|
||||
'Map_Road_Lane': MA_MAP_ROAD_LANE,
|
||||
'Map_SubItem': MA_MAP_SUBITEM,
|
||||
'Sysset': MA_SYSSET,
|
||||
'CarInfo': ES_CARINFO,
|
||||
'MarkRuleSet': MA_MARKRULE,
|
||||
'Cdsbinfo': MA_CDSBINFO,
|
||||
'T_CarParmSet': MA_T_CARPARMSET,
|
||||
}
|
||||
|
||||
// 建表操作
|
||||
export async function initTable() {
|
||||
console.log("sql inittable")
|
||||
for (let key in map) {
|
||||
await DB.executeSql(map[key].ACCOUNT_TABLE.sqlCreate)
|
||||
}
|
||||
}
|
||||
|
||||
export function sqlInsertCommonFn(tableName, resultArr, delFlag = true) {
|
||||
return new Promise((resolve, reject) => {
|
||||
DB.clearTable(tableName).then((res) => {
|
||||
let INSERT_SQL = "INSERT INTO " + tableName
|
||||
+ " (" + map[tableName].ACCOUNT_TABLE.columns.toString() + ") VALUES "
|
||||
|
||||
resultArr.map((data, i) => {
|
||||
data.id = !delFlag ? `${i + resultArr.length}` : `${i}`
|
||||
let str = '('
|
||||
map[tableName].ACCOUNT_TABLE.columns.map((res, index) => {
|
||||
if (map[tableName].ACCOUNT_TABLE.columns.length - 1 == index) {
|
||||
str += data[res] ? `'${data[res]}'` : 'NULL'
|
||||
} else {
|
||||
str += (data[res] ? `'${data[res]}'` : 'NULL') + ','
|
||||
}
|
||||
})
|
||||
if (i == resultArr.length - 1) {
|
||||
str += ')'
|
||||
} else {
|
||||
str += '),'
|
||||
}
|
||||
INSERT_SQL += str
|
||||
})
|
||||
console.log("sql insert sqlCode", INSERT_SQL)
|
||||
DB.executeSql(INSERT_SQL).then(() => {
|
||||
console.log('sql insert,', res, 'tableName', tableName)
|
||||
resolve(true)
|
||||
}).catch((err) => {
|
||||
console.log('sql insert err,', JSON.stringify(err), 'tableName', tableName)
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
//参数平台
|
||||
export async function getDataBaseTable(params, reqParam) {
|
||||
return new Promise<void>(async (resolve, reject) => {
|
||||
const date = new Date()
|
||||
if (!reqParam?.paraKdid) {
|
||||
prompt.showToast({
|
||||
message: 'paraKdid获取失败',
|
||||
duration: 3000
|
||||
});
|
||||
return
|
||||
}
|
||||
const str = {
|
||||
"head": { "time": dateFormat(date) },
|
||||
"body":
|
||||
{
|
||||
"tableName": params.tableName, // 表名
|
||||
"paraKdid": reqParam.paraKdid, //参数平台kdid
|
||||
"examinationRoomId": reqParam.examinationRoomId, //考试平台kdid
|
||||
"typeRsp": "0" // 赋默认值0,无需改变
|
||||
}
|
||||
}
|
||||
let res: any = await initCenterCache(str, reqParam.centerHost)
|
||||
if (res.body[params.tableName].length == 0) {
|
||||
resolve();
|
||||
return
|
||||
}
|
||||
if (params.tableName == 'MA_SYSSET') {
|
||||
res.body[params.tableName] = res.body[params.tableName].filter(res => {
|
||||
return res['v_no'] < 300 || res['v_no'] > 700
|
||||
})
|
||||
}
|
||||
sqlInsertCommonFn(params.tableName, res.body[params.tableName], reqParam.context).then((val) => {
|
||||
// resolve(val)
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
//依据数组和表名更新sql表
|
||||
export async function upDateTableByArray(tableName, arr) {
|
||||
return new Promise(async (reslove, reject) => {
|
||||
const data = await sqlInsertCommonFn(tableName, arr)
|
||||
reslove(data)
|
||||
})
|
||||
}
|
||||
|
||||
//更新双中心表
|
||||
export async function upDateTable(params, reqParam) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const date = new Date()
|
||||
let paraKdid = reqParam?.paraKdid || ''
|
||||
let examinationRoomId = reqParam?.kdid || ''
|
||||
if (!paraKdid || !examinationRoomId) {
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
|
||||
const str = {
|
||||
"head": { "time": dateFormat(date) },
|
||||
"body":
|
||||
{
|
||||
"tableName": params.tableName, // 表名
|
||||
"paraKdid": reqParam.paraKdid, //参数平台kdid
|
||||
"examinationRoomId": reqParam.kdid, //考试平台kdid
|
||||
"typeRsp": "0" // 赋默认值0,无需改变
|
||||
}
|
||||
}
|
||||
const url = reqParam.centerHost
|
||||
|
||||
initCenterCache(str, url).then(async (res: ESObject) => {
|
||||
if (!res || res == undefined || res == '') {
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
try {
|
||||
const result = await sqlInsertCommonFn(params.tableName, res.body[params.tableName], reqParam.context)
|
||||
resolve(result)
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
//考试平台
|
||||
export async function getMySystemSetTable(params, reqParam) {
|
||||
return new Promise<void>((resolve, reject) => {
|
||||
const date = new Date()
|
||||
if (!reqParam.paraKdid) {
|
||||
prompt.showToast({
|
||||
message: 'paraKdid获取失败',
|
||||
duration: 3000
|
||||
});
|
||||
return
|
||||
}
|
||||
const str = {
|
||||
"head": { "time": dateFormat(date) },
|
||||
"body":
|
||||
{
|
||||
"tableName": params.tableName, // 表名
|
||||
"paraKdid": reqParam?.paraKdid, //参数平台kdid
|
||||
"examinationRoomId": reqParam?.kdid, //考试平台kdid
|
||||
"typeRsp": "0" // 赋默认值0,无需改变
|
||||
}
|
||||
}
|
||||
initCenterCacheByKSPT(str, reqParam.url).then((res: ESObject) => {
|
||||
if (res.body[params.tableName].length == 0) {
|
||||
resolve();
|
||||
return
|
||||
}
|
||||
if (params.tableName == 'MA_SYSSET') {
|
||||
res.body[params.tableName] = res.body[params.tableName].filter(res => {
|
||||
return res['v_no'] >= 300 && res['v_no'] <= 700
|
||||
})
|
||||
}
|
||||
sqlInsertCommonFn(params.tableName, res.body[params.tableName], false).then((result) => {
|
||||
// resolve(result)
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
//依据表名同步获取数据
|
||||
export async function getSyncData(tableName, context?) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const column = map[tableName].ACCOUNT_TABLE.columns.map(res => {
|
||||
return {
|
||||
name: res,
|
||||
columnName: res,
|
||||
type: ColumnType.STRING
|
||||
}
|
||||
})
|
||||
DB.queryListBySql(`select * from ${tableName}`, column).then(res => {
|
||||
console.log("sql MA_SYSSET", JSON.stringify(res))
|
||||
resolve(res)
|
||||
}).catch(err => {
|
||||
console.log("sql err MA_SYSSET", JSON.stringify(err))
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
export async function delSyncTable(tableName, context?) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const accountTable = new AccountTable(() => {
|
||||
const SQL = `DELETE FROM ${tableName};`
|
||||
console.log("sql message 删除操作,表", tableName)
|
||||
accountTable.sqlOperate(SQL, tableName, (val) => {
|
||||
console.log('teststet3', '删除成功')
|
||||
resolve(val)
|
||||
})
|
||||
}, map[tableName], context);
|
||||
|
||||
// accountTable.deleteTableData((ret) => {
|
||||
// console.log('删除成功')
|
||||
// resolve(true)
|
||||
// }, tableName, context)
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
//获取车模、场地模型
|
||||
export async function getEsCarModel(context) {
|
||||
const date = new Date()
|
||||
const timeInfo = AppStorage.get<TimeSynchronizationRspBody>('timeInfo')
|
||||
if (!timeInfo?.paraKdid) {
|
||||
prompt.showToast({
|
||||
message: 'paraKdid获取失败',
|
||||
duration: 3000
|
||||
});
|
||||
return
|
||||
}
|
||||
const carStr = {
|
||||
"head": { "time": dateFormat(date) },
|
||||
"body":
|
||||
{
|
||||
"rtkType": "1", //1:车模 2:场地模型
|
||||
"rspType": "0", //返回类型
|
||||
"paraKdid": timeInfo.paraKdid, //参数平台kdid
|
||||
"examinationRoomId": timeInfo.kdid, //考试平台kdid
|
||||
// "carMac":"MAC-HCPAD-210",
|
||||
"carMac": AppStorage.get<string>('deviceNo')
|
||||
}
|
||||
}
|
||||
const venueStr = {
|
||||
"head": { "time": dateFormat(date) },
|
||||
"body":
|
||||
{
|
||||
"rtkType": "2", //1:车模 2:场地模型
|
||||
"rspType": "0", //返回类型
|
||||
"paraKdid": timeInfo.paraKdid, //参数平台kdid
|
||||
"examinationRoomId": timeInfo.kdid, //考试平台kdid
|
||||
// "carMac":"MAC-HCPAD-210",
|
||||
"carMac": AppStorage.get<string>('deviceNo')
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let carRes: any = await initEsModel(carStr);
|
||||
let venueRes: any = await initEsModel(venueStr);
|
||||
|
||||
const carModel = carRes.body.ES_MODEL[0][1];
|
||||
const venueModel = venueRes.body.ES_MODEL[0][2];
|
||||
|
||||
let tmpBase64Array = carModel.split("\r\n")
|
||||
let newBase64Str: string = '';
|
||||
for (let i = 0; i < tmpBase64Array.length; ++i) {
|
||||
newBase64Str += tmpBase64Array[i];
|
||||
}
|
||||
const base64 = new util.Base64();
|
||||
let result = base64.decodeSync(newBase64Str);
|
||||
const fileModel = new FileModel(context);
|
||||
await fileModel.initFolder()
|
||||
await fileModel.storingFiles(result.buffer)
|
||||
}
|
||||
|
||||
export async function upDataZhongxinginitialization(param) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
console.log('teststet00', JSON.stringify(param))
|
||||
let flag = true
|
||||
if (param.singlePlay) {
|
||||
console.log('teststet0', JSON.stringify(param))
|
||||
const fileUtil = new FileUtils(param.context)
|
||||
const tableList =
|
||||
['MA_SYSSET', 'MA_SYSTEMPARM', 'MA_MARKRULE', 'MA_MARKRULESET', 'ES_CARINFO', 'MA_MAP_ROAD', 'MA_MAP_ROAD_LANE',
|
||||
'MAP_SUBITEM', 'MA_T_CARPARMSET', 'MA_MAP_ITEMCLASS', 'MA_MAP_POINT', 'MA_MAP_POINT_ITEM'];
|
||||
for (let i = 0; i <= tableList.length - 1; i++) {
|
||||
const data =
|
||||
await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + `/config/tableList/${tableList[i]}.txt`);
|
||||
const result = await sqlInsertCommonFn(tableList[i], JSON.parse(data) || [], param.context)
|
||||
|
||||
result ? (flag = true) : (flag = false)
|
||||
}
|
||||
console.log('teststet1', JSON.stringify(param))
|
||||
|
||||
if (!flag) {
|
||||
prompt.showToast({
|
||||
message: '本地文件初始化数据库失败',
|
||||
duration: 3000
|
||||
});
|
||||
}
|
||||
console.log("init table1")
|
||||
resolve(flag)
|
||||
return
|
||||
}
|
||||
if (!param.carId) {
|
||||
console.log("init table2")
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
try {
|
||||
const str = {
|
||||
"carId": param.carId, // 表名
|
||||
"examinationRoomId": param.examinationRoomId, //考试平台kdid
|
||||
videoVersion: '1.0',
|
||||
judgeVersion: param.judgeVersion,
|
||||
shellVersion: param.shellVersion,
|
||||
host: param.host
|
||||
}
|
||||
console.log('daihai2', JSON.stringify(str))
|
||||
|
||||
initialization(str).then(async (res: ESObject) => {
|
||||
console.log('daihai3', JSON.stringify(res))
|
||||
if (!res || res.initializationRsp.head.resultCode == 1) {
|
||||
console.log('daihai34', JSON.stringify(res))
|
||||
console.log("init table3")
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
let flag
|
||||
console.log('resposestart')
|
||||
|
||||
for (let key in res.initializationRsp.body) {
|
||||
if (!centerToMap[key]) {
|
||||
continue
|
||||
}
|
||||
const data = await setSyncCenterSqlData(key, res, param)
|
||||
if (!data) {
|
||||
console.log("init table4")
|
||||
resolve(false)
|
||||
}
|
||||
}
|
||||
resolve(true)
|
||||
}).catch((Error) => {
|
||||
console.log("init table5", JSON.stringify(Error))
|
||||
resolve(false)
|
||||
})
|
||||
} catch (error) {
|
||||
console.log("init table6", JSON.stringify(error))
|
||||
resolve(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function setSyncCenterSqlData(key, res, param) {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
const mapName = {
|
||||
'ItemInfo': 'MA_ITEMINFO',
|
||||
'MarkRule': 'MA_MARKRULE',
|
||||
'SystemParm': 'MA_SYSTEMPARM',
|
||||
'Map_Collect': 'MA_MAP_COLLECT',
|
||||
'Map_Collect_Shape': 'MA_MAP_COLLECT_SHAPE',
|
||||
'Map_ItemClass': 'MA_MAP_ITEMCLASS',
|
||||
'Map_Point': 'MA_MAP_POINT',
|
||||
'Map_Point_Item': 'MA_MAP_POINT_ITEM',
|
||||
'Map_Road': 'MA_MAP_ROAD',
|
||||
'Map_Road_Lane': 'MA_MAP_ROAD_LANE',
|
||||
'Map_SubItem': 'MAP_SUBITEM',
|
||||
'Sysset': 'MA_SYSSET',
|
||||
'CarInfo': 'ES_CARINFO',
|
||||
// 'ES_EXAMPOINTDETAIL':ES_EXAMPOINTDETAIL,
|
||||
'MarkRuleSet': 'MA_MARKRULESET',
|
||||
'Cdsbinfo': 'MA_CDSBINFO',
|
||||
'T_CarParmSet': 'MA_T_CARPARMSET',
|
||||
}
|
||||
let arrList
|
||||
if (res.initializationRsp.body[key].record instanceof Array) {
|
||||
arrList = res.initializationRsp.body[key].record
|
||||
} else {
|
||||
arrList = [res.initializationRsp.body[key].record]
|
||||
}
|
||||
const fileUtil = new FileUtil(param.context)
|
||||
const folderPath = await fileUtil.initFolder(`/config/tableList`);
|
||||
fileUtil.addFile(`${folderPath}/${mapName[key]}.txt`, JSON.stringify(arrList))
|
||||
|
||||
console.log('mapName[key]', mapName[key], key)
|
||||
sqlInsertCommonFn(mapName[key], arrList, param.context).then((result) => {
|
||||
console.log(key, '表建立成功')
|
||||
// writeLog('PLC',{
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:`${key} 表建立成功`,
|
||||
// })
|
||||
if (result) {
|
||||
resolve(true)
|
||||
} else {
|
||||
resolve(false)
|
||||
}
|
||||
}).catch((msg) => {
|
||||
reject(false)
|
||||
console.log(key, '表建立失败')
|
||||
})
|
||||
})
|
||||
|
||||
}
|
||||
@ -1,92 +0,0 @@
|
||||
import TcpClient from './TcpClient';
|
||||
import { GlobalConfig } from '../../config/index';
|
||||
|
||||
let intervalSendmsg
|
||||
|
||||
export async function getTCP(flag = false) {
|
||||
globalThis.getCloseTcp = true
|
||||
const context = AppStorage.get('context')
|
||||
const fileUtil = new FileUtil(context)
|
||||
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
|
||||
if (data === '' || data === undefined) {
|
||||
globalThis.TcpClient = {}
|
||||
globalThis.TcpClient.onMessage = () => {
|
||||
}
|
||||
} else {
|
||||
const result = JSON.parse(data)
|
||||
if (globalThis.TcpClient && globalThis.TcpClient.closeTcp && !flag) {
|
||||
globalThis.TcpClient.closeTcp(async () => {
|
||||
// const tcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort)
|
||||
// globalThis.TcpClient = tcpClient
|
||||
setTimeout(async () => {
|
||||
const tcpClient: TcpClient =
|
||||
new TcpClient(result.tcplocalIp, result.tcplocalIpPort, result.tcpOppositeIp, result.tcpOppositePort)
|
||||
globalThis.TcpClient = tcpClient
|
||||
await globalThis.TcpClient.bindTcp()
|
||||
// await globalThis.TcpClient.rebindTcp(result.tcplocalIp, result.tcplocalIpPort, result.tcpOppositeIp, result.tcpOppositePort)
|
||||
await globalThis.TcpClient.connectTcp()
|
||||
console.log('ttttttt0')
|
||||
// await globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
|
||||
console.log('ttttttt00')
|
||||
|
||||
clearInterval(intervalSendmsg)
|
||||
intervalSendmsg = setInterval(() => {
|
||||
if (!globalThis.getCloseTcp) {
|
||||
globalThis.TcpClient.sendMsg(AppStorage.get('carInfo').carNo) //1002
|
||||
}
|
||||
}, 1000 / 3)
|
||||
globalThis.TcpClient.onError((val) => {
|
||||
setTimeout(() => {
|
||||
getTCP()
|
||||
}, 1000)
|
||||
})
|
||||
await globalThis.TcpClient.onMessage((val) => {
|
||||
setTimeout(() => {
|
||||
if (val) {
|
||||
// const msg=val.substring(5,val.length-1)
|
||||
console.log('socketTag[PLC.UdpClient] status:', globalThis.udpClient.getStatus())
|
||||
globalThis.udpClient?.sendMsg(val)
|
||||
}
|
||||
}, 1000)
|
||||
|
||||
})
|
||||
}, 2000)
|
||||
})
|
||||
|
||||
} else {
|
||||
const tcpClient: TcpClient =
|
||||
new TcpClient(result.tcplocalIp, result.tcplocalIpPort, result.tcpOppositeIp, result.tcpOppositePort)
|
||||
globalThis.TcpClient = tcpClient
|
||||
await globalThis.TcpClient.bindTcp()
|
||||
await globalThis.TcpClient.connectTcp()
|
||||
console.log('ttttttt1')
|
||||
await globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
|
||||
console.log('ttttttt12')
|
||||
|
||||
clearInterval(intervalSendmsg)
|
||||
intervalSendmsg = setInterval(() => {
|
||||
// console.log('getCloseTcp',globalThis.getCloseTcp)
|
||||
if (!globalThis.getCloseTcp) {
|
||||
globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
|
||||
}
|
||||
}, 1000 / 3)
|
||||
globalThis.TcpClient.onError((val) => {
|
||||
setTimeout(() => {
|
||||
getTCP()
|
||||
}, 1000)
|
||||
})
|
||||
await globalThis.TcpClient.onMessage((val) => {
|
||||
setTimeout(() => {
|
||||
if (val && globalThis.udpClient?.sendMsg) {
|
||||
globalThis.udpClient?.sendMsg(val)
|
||||
}
|
||||
}, 1000)
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// globalThis.udpClient.bindUdp()
|
||||
@ -1,258 +0,0 @@
|
||||
//import UdpClient from './UdpClient';
|
||||
import UdpClientByCenter from './UdpClientByCenter';
|
||||
import { getChuankouFn } from '../../common/service/indexService';
|
||||
|
||||
|
||||
export async function sendMsg(val) {
|
||||
// globalThis.udpClient1&&globalThis.udpClient1.sendMsg(val)
|
||||
}
|
||||
|
||||
// obj
|
||||
export async function getUDP(context, errorFlag?) {
|
||||
return new Promise(async (reslove, reject) => {
|
||||
const fileUtil = new FileUtil(context)
|
||||
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
|
||||
console.log('ttttt', data)
|
||||
if (data === '' || data === undefined) {
|
||||
console.log(` getUDP has no IPConfigTable `);
|
||||
globalThis.udpClient = {}
|
||||
|
||||
reslove('')
|
||||
} else {
|
||||
const result = JSON.parse(data)
|
||||
console.log(` getUDP has IPConfigTable `);
|
||||
if (globalThis.udpClient && globalThis.udpClient.closeUdp) {
|
||||
console.log(` getUDP has udclent close and rebind `);
|
||||
globalThis.udpClient.closeUdp(() => {
|
||||
setTimeout(() => {
|
||||
globalThis.udpClient.rebindUdp(result.udplocalIp, result.udplocalIpPort, result.udpOppositeIp,
|
||||
result.udpOppositeIpPort)
|
||||
globalThis.udpClient.sendMsg('111', null)
|
||||
AppStorage.setOrCreate('host', `http://${result.centerIp}:${result.centerPort}`)
|
||||
globalThis.udpClient.onError_Callback(() => {
|
||||
console.log('getUDPgetUDPgetUDP')
|
||||
getUDP(context, true)
|
||||
if (errorFlag && globalThis.udpClient && globalThis.udpClient.onMessage_1) {
|
||||
globalThis.udpClient.onMessage_1 = globalThis.udpClient.onMessage_1
|
||||
}
|
||||
})
|
||||
reslove(`http://${result.centerIp}:${result.centerPort}`)
|
||||
|
||||
// globalThis.udpClient.onError_resend(globalThis.udpClient.onMessage_1?globalThis.udpClient.onMessage_1:()=>{})
|
||||
}, 1000)
|
||||
})
|
||||
|
||||
} else {
|
||||
// 未绑定
|
||||
console.log(` getUDP has no udclent and bind `);
|
||||
console.log('ttttttdata', JSON.stringify(result))
|
||||
const udpClient: UdpClientByCenter =
|
||||
new UdpClientByCenter(result.udplocalIp, result.udplocalIpPort, result.udpOppositeIp,
|
||||
result.udpOppositeIpPort)
|
||||
udpClient.bindUdp()
|
||||
udpClient.sendMsg('111')
|
||||
AppStorage.setOrCreate('host', `http://${result.centerIp}:${result.centerPort}`)
|
||||
globalThis.udpClient = udpClient
|
||||
|
||||
globalThis.udpClient.onMessage_1(() => {
|
||||
console.log('getUDPonMessage_1msgmsgByGloalUdp')
|
||||
|
||||
})
|
||||
globalThis.udpClient.onError_Callback(() => {
|
||||
getUDP(context, true)
|
||||
if (errorFlag && globalThis.udpClient && globalThis.udpClient.onMessage_1) {
|
||||
globalThis.udpClient.onMessage_1 = globalThis.udpClient.onMessage_1
|
||||
}
|
||||
})
|
||||
getChuankouFn()
|
||||
reslove(`http://${result.centerIp}:${result.centerPort}`)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
// 中心
|
||||
export async function getUDP2(context, errorFlag?) {
|
||||
const fileUtil = new FileUtil(context)
|
||||
const carInfo = AppStorage.get('carInfo')
|
||||
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
|
||||
if (data === '' || data === undefined) {
|
||||
globalThis.udpClient2 = {}
|
||||
globalThis.udpClient2.setMsgCallBack = () => {
|
||||
}
|
||||
} else {
|
||||
const result = JSON.parse(data)
|
||||
console.log(` getUDP2 has IPConfigTable `);
|
||||
if (globalThis.udpClient2 && globalThis.udpClient2.closeUdp) {
|
||||
console.log(` getUDP2 has udclent ,close and rebind `);
|
||||
globalThis.udpClient2.closeUdp(async () => {
|
||||
setTimeout(() => {
|
||||
globalThis.udpClient2.rebindUdp(result.udplocalIp, '8800', carInfo?.udpAddress,
|
||||
carInfo?.messagePort)
|
||||
globalThis.udpClient2.onError_Callback(() => {
|
||||
getUDP2(context, true);
|
||||
if (errorFlag && globalThis.udpClient2 && globalThis.udpClient2.onMessage_2) {
|
||||
globalThis.udpClient2.onMessage_2 = globalThis.udpClient2.onMessage_2
|
||||
}
|
||||
})
|
||||
}, 1000)
|
||||
})
|
||||
} else {
|
||||
// 未绑定
|
||||
console.log(` getUDP2 has no udclent and bind `);
|
||||
const udpClient2: UdpClientByCenter =
|
||||
new UdpClientByCenter(result.udplocalIp, '8800', carInfo?.udpAddress,
|
||||
carInfo?.messagePort)
|
||||
console.info('surenjun udp2=> ', carInfo?.messagePort)
|
||||
await udpClient2.bindUdp()
|
||||
await udpClient2.onError_Callback(() => {
|
||||
getUDP2(context, true);
|
||||
if (errorFlag && globalThis.udpClient2 && globalThis.udpClient2.onMessage_2) {
|
||||
globalThis.udpClient2.onMessage_2 = globalThis.udpClient2.onMessage_2
|
||||
}
|
||||
})
|
||||
if (!errorFlag) {
|
||||
await udpClient2.onMessage_2((val) => {
|
||||
if (val.id == '32') {
|
||||
AppStorage.setOrCreate('signNum', val.body[1])
|
||||
if (val.body[0] == 5) {
|
||||
console.info('surenjun', `接收到平台扣分请求,请求指令为:${val.body[1]}`)
|
||||
globalThis.udpEvent.sendOnKf(val.body[1])
|
||||
}
|
||||
if (val.body[0] == 11) {
|
||||
console.info('surenjun', 'GlobalUdp收到beginExam事件')
|
||||
globalThis.udpEvent.sendBeginExam(val.body[1])
|
||||
}
|
||||
if (val.body[0] == 12) {
|
||||
console.info('surenjun', 'GlobalUdp收到endExam事件')
|
||||
globalThis.udpEvent.sendEndExam(val.body[1])
|
||||
}
|
||||
}
|
||||
if (val.id == '36') {
|
||||
//获取远程扣分内容
|
||||
console.info('surenjun', '考车收到远程扣分项目内容,扣分代码:' + val.body[0])
|
||||
globalThis.udpEvent.sendKfContent(val.body[0])
|
||||
} else if (val.id == '46') {
|
||||
let tmpList = []
|
||||
const str = AppStorage.get<string>('lsh')
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0])
|
||||
}
|
||||
const param = {
|
||||
id: 47,
|
||||
list: tmpList,
|
||||
carNo: carInfo.carNo,
|
||||
placeId: carInfo.examinationRoomId
|
||||
}
|
||||
globalThis.udpClient2.send(param)
|
||||
}
|
||||
})
|
||||
}
|
||||
globalThis.udpClient2 = udpClient2
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 灯光
|
||||
export async function setTopLineUdp() {
|
||||
const context = AppStorage.get('context')
|
||||
const fileUtil = new FileUtil(context)
|
||||
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
|
||||
const config = JSON.parse(data)
|
||||
|
||||
// const config = await getSyncData('IpConfigTable');
|
||||
if (config && config.udplocalIp) {
|
||||
const { udplocalIp, udpOppositeIp, udpOppositeIpPort } = config;
|
||||
const udpClient: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '55509', udpOppositeIp, udpOppositeIpPort)
|
||||
udpClient.bindUdp()
|
||||
|
||||
return {
|
||||
send(bytes) {
|
||||
udpClient.sendHeadMsg(bytes)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
let judgeUdpTimer
|
||||
|
||||
// 评判
|
||||
export async function setJudgeUdp() {
|
||||
const context = AppStorage.get('context')
|
||||
const fileUtil = new FileUtil(context)
|
||||
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
|
||||
const config = JSON.parse(data)
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
//
|
||||
// const config = await getSyncData('IpConfigTable');
|
||||
let udpIndex = 0;
|
||||
let currentUdpIndex = 0;
|
||||
clearInterval(judgeUdpTimer)
|
||||
judgeUdpTimer = setInterval(() => {
|
||||
udpIndex += 1;
|
||||
}, 1000);
|
||||
|
||||
if (config && config.udplocalIp) {
|
||||
const { udplocalIp } = config;
|
||||
const udpClientbyCenter: UdpClientByCenter = new UdpClientByCenter(
|
||||
udplocalIp, '8080',
|
||||
carInfo?.udpAddress,
|
||||
carInfo?.hintPort
|
||||
)
|
||||
console.info('surenjun hintPort=> ', carInfo?.hintPort)
|
||||
|
||||
await udpClientbyCenter.onError_Callback(() => {
|
||||
})
|
||||
await udpClientbyCenter.bindUdp()
|
||||
await udpClientbyCenter.onMessage_2((val) => {
|
||||
})
|
||||
|
||||
//远程监听开始考试、结束考试、扣分指令
|
||||
|
||||
// globalThis.judgeUdpClient = udpClientbyCenter;
|
||||
return {
|
||||
send(bytes) {
|
||||
if (udpIndex > currentUdpIndex) {
|
||||
udpClientbyCenter.sendMsgExt({
|
||||
id: 45,
|
||||
list: bytes,
|
||||
carNo: carInfo.carNo,
|
||||
placeId: carInfo.examinationRoomId
|
||||
})
|
||||
currentUdpIndex = udpIndex
|
||||
}
|
||||
},
|
||||
|
||||
//申请远程扣分查询
|
||||
askKf(directives) {
|
||||
globalThis.udpClient2.sendMsgExt({
|
||||
id: 35,
|
||||
list: [directives],
|
||||
carNo: carInfo.carNo,
|
||||
placeId: carInfo.examinationRoomId,
|
||||
})
|
||||
console.info('surenjun', `考车查询扣分项目内容,请求指令为:${directives}`)
|
||||
},
|
||||
|
||||
//确定远程扣分
|
||||
confirmKf(directives, code) {
|
||||
globalThis.udpClient2.sendMsgExt({
|
||||
id: 37,
|
||||
list: Array2Byte([string2Bytes(directives, 8), string2Bytes(code, 8)]),
|
||||
carNo: carInfo.carNo,
|
||||
placeId: carInfo.examinationRoomId
|
||||
})
|
||||
console.info('surenjun', `考车发送确定扣分指令,指令为:${directives}`)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// globalThis.udpClient.bindUdp()
|
||||
@ -1,244 +0,0 @@
|
||||
import socket from '@ohos.net.socket';
|
||||
import hilog from '@ohos.hilog';
|
||||
import { getTCP } from './GlobalTcp';
|
||||
import prompt from '@ohos.prompt';
|
||||
|
||||
import App from '@system.app';
|
||||
|
||||
const TAG = 'socketTag[TcpDemo.TcpClient]'
|
||||
|
||||
export default class TcpClient {
|
||||
private localIp: string = ''
|
||||
private localIpPort: string = ''
|
||||
private oppositeIp: string = ''
|
||||
private oppositeIpPort: string = ''
|
||||
private num: number = 0
|
||||
//重连次数
|
||||
private tcpSendNum: number = 0
|
||||
//重连次数
|
||||
private folderPath
|
||||
|
||||
private tcp: any = null
|
||||
|
||||
constructor(tcplocalIp: string, tcplocalIpPort: string, tcpOppositeIp: string, tcpOppositePort: string) {
|
||||
this.localIp = tcplocalIp
|
||||
this.oppositeIp = tcpOppositeIp
|
||||
this.localIpPort = tcplocalIpPort
|
||||
this.oppositeIpPort = tcpOppositePort
|
||||
console.log(TAG, 'new Tcp', this.localIp, this.localIpPort, this.oppositeIp, this.oppositeIpPort)
|
||||
this.tcp = socket.constructTCPSocketInstance();
|
||||
this.initPath()
|
||||
}
|
||||
|
||||
onError(callback?) {
|
||||
this.tcp.on('error', err => {
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:`${TAG} tcpOnerror ${JSON.stringify(err)}`,
|
||||
// })
|
||||
|
||||
AppStorage.setOrCreate('getCloseTcp', true)
|
||||
|
||||
|
||||
console.log(TAG, 'getCloseTtcpOnerror', JSON.stringify(err))
|
||||
setTimeout(async () => {
|
||||
getTCP()
|
||||
}, 2000)
|
||||
// this.closeUdp(()=>{
|
||||
// this.bindUdp()
|
||||
// })
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
bindTcp() {
|
||||
this.writeLog({
|
||||
time: dateFormat(new Date()),
|
||||
message: `${TAG} tcpbind localIp${this.localIp} ${this.localIpPort}`,
|
||||
})
|
||||
return new Promise((resolve, reject) => {
|
||||
let promise = this.tcp.bind({
|
||||
address: this.localIp, port: parseInt(this.localIpPort), family: 1
|
||||
}, err => {
|
||||
if (err) {
|
||||
this.writeLog({
|
||||
time: dateFormat(new Date()),
|
||||
message: `${TAG} tcpbind error ${JSON.stringify(err)}`,
|
||||
})
|
||||
setTimeout(async () => {
|
||||
getTCP()
|
||||
}, 2000)
|
||||
console.log('getCloseTBinderror');
|
||||
hilog.info(0x0000, 'testTag', "tcpBinderror:" + JSON.stringify(err));
|
||||
resolve(true)
|
||||
return
|
||||
}
|
||||
|
||||
// console.log('testTag tcp bind success');
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:`${TAG} testTag tcp bind success`,
|
||||
// })
|
||||
resolve(false)
|
||||
})
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
connectTcp() {
|
||||
this.writeLog({
|
||||
time: dateFormat(new Date()),
|
||||
message: `${TAG} tcpConnect oppositeIp ${this.oppositeIp} ${this.oppositeIpPort}`,
|
||||
})
|
||||
return new Promise((resolve, reject) => {
|
||||
let promise = this.tcp.connect({
|
||||
address: {
|
||||
address: this.oppositeIp, port: parseInt(this.oppositeIpPort), family: 1
|
||||
}, timeout: 6000
|
||||
});
|
||||
promise.then(() => {
|
||||
this.tcp.setExtraOptions({
|
||||
keepAlive: true,
|
||||
}, err => {
|
||||
if (err) {
|
||||
this.writeLog({
|
||||
time: dateFormat(new Date()),
|
||||
message: `${TAG} TCPconnect error ${JSON.stringify(err)}`,
|
||||
})
|
||||
setTimeout(() => {
|
||||
getTCP()
|
||||
resolve(false)
|
||||
}, 9000)
|
||||
return;
|
||||
}
|
||||
});
|
||||
AppStorage.setOrCreate('getCloseTcp', false)
|
||||
resolve(true)
|
||||
}).catch(err => {
|
||||
console.log('socketTag', 'error')
|
||||
this.writeLog({
|
||||
time: dateFormat(new Date()),
|
||||
message: `${TAG} TCPconnect error2 ${JSON.stringify(err)}`,
|
||||
})
|
||||
|
||||
setTimeout(() => {
|
||||
getTCP()
|
||||
resolve(false)
|
||||
}, 9000)
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:`${TAG} tcp connect error`,
|
||||
// })
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
sendMsg(msg: string) {
|
||||
return new Promise((reslove, reject) => {
|
||||
let promise = this.tcp.send({
|
||||
data: msg
|
||||
});
|
||||
promise.then(() => {
|
||||
reslove(true)
|
||||
}).catch(err => {
|
||||
this.tcpSendNum++
|
||||
if (!AppStorage.get('getCloseTcp') && this.tcpSendNum > 10) {
|
||||
setTimeout(async () => {
|
||||
getTCP(true)
|
||||
}, 3000)
|
||||
this.tcpSendNum = 0
|
||||
return
|
||||
}
|
||||
AppStorage.set('getCloseTcp', true)
|
||||
console.log(`${TAG} TCPsend error ${JSON.stringify(err)}`)
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// message: `${TAG} TCPsend error ${JSON.stringify(err)}`,
|
||||
// })
|
||||
reslove(false)
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
onMessage(callback?) {
|
||||
this.tcp.on('message', value => {
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:`${TAG} Tcponmessage`,
|
||||
// })
|
||||
AppStorage.setOrCreate('tcpUdpError', false)
|
||||
// console.log('messageLengt',,value.message.length))
|
||||
// console.log("on message, message:" + value.message+ ", remoteInfo:" )
|
||||
if (value) {
|
||||
let dataView = new DataView(value.message)
|
||||
// const Arraybuffer=buffer.from(value.message, 5, dataView?.byteLength);
|
||||
const Arraybuffer = value.message.slice(5, dataView?.byteLength);
|
||||
|
||||
callback && callback(Arraybuffer)
|
||||
} else {
|
||||
callback && callback('')
|
||||
}
|
||||
clearInterval(globalThis.intervaltcp)
|
||||
globalThis.intervaltcp = setInterval(() => {
|
||||
//程序断开
|
||||
if (globalThis.tcpUdpError) {
|
||||
console.log(TAG, 'tcp信号丢失')
|
||||
// getTCP()
|
||||
prompt.showToast({
|
||||
message: 'tcp信号丢失',
|
||||
duration: 2000
|
||||
});
|
||||
}
|
||||
this.writeLog({
|
||||
time: dateFormat(new Date()),
|
||||
message: `${TAG} tcp信号丢失`,
|
||||
})
|
||||
AppStorage.setOrCreate('tcpUdpError', true)
|
||||
}, 3000)
|
||||
// callback(value.message)
|
||||
});
|
||||
}
|
||||
|
||||
async writeLog(param) {
|
||||
// const fileUtil = new FileUtil(globalThis.context)
|
||||
// fileUtil.editFile(`${this.folderPath}/plcLog.txt`, JSON.stringify(param)+`\n`)
|
||||
}
|
||||
|
||||
async initPath() {
|
||||
return
|
||||
const fileUtil = new FileUtil(globalThis.context)
|
||||
const date = dateFormat(new Date).split(' ')[0]
|
||||
this.folderPath = await fileUtil.initFolder(`/PLC/${date}`);
|
||||
}
|
||||
|
||||
offTcp(callback) {
|
||||
console.log(TAG, 'tcpofff')
|
||||
this.tcp.off('testTagofmessg', callback);
|
||||
}
|
||||
|
||||
closeTcp(callback) {
|
||||
return new Promise((reslove, reject) => {
|
||||
console.log(TAG, 'tcpClose')
|
||||
let promise = this.tcp.close();
|
||||
promise.then(() => {
|
||||
AppStorage.setOrCreate('getCloseTcp', true)
|
||||
this.writeLog({
|
||||
time: dateFormat(new Date()),
|
||||
message: `${TAG} tcp closeSuccess`,
|
||||
})
|
||||
callback()
|
||||
reslove(true)
|
||||
}).catch(err => {
|
||||
setTimeout(async () => {
|
||||
getTCP(true)
|
||||
}, 9000)
|
||||
this.writeLog({
|
||||
time: dateFormat(new Date()),
|
||||
message: `${TAG} tcpclose error ${JSON.stringify(err)}`,
|
||||
})
|
||||
|
||||
reslove(false)
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1,413 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2022 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// @ts-ignore
|
||||
import socket, { UDPSocket } from '@ohos.net.socket';
|
||||
|
||||
const TAG = '[UdpDemo.UdpClient]'
|
||||
import hilog from '@ohos.hilog';
|
||||
import prompt from '@ohos.prompt'
|
||||
import promptAction from '@ohos.promptAction';
|
||||
import { getUDP } from './GlobalUdp';
|
||||
import { getSyncData } from '../service/initable';
|
||||
import App from '@system.app';
|
||||
|
||||
|
||||
export default class UdpClientByCenter {
|
||||
public currentValue: string = ''
|
||||
private localIp: string = ''
|
||||
private localIpPort: string = ''
|
||||
private oppositeIp: string = ''
|
||||
private oppositeIpPort: string = ''
|
||||
private udpMsg: any = ''
|
||||
private chafenFlag: number = 0
|
||||
private num: number = 0
|
||||
private fileUtil: FileUtil
|
||||
private udp: UDPSocket = null
|
||||
private sendId: any = 0
|
||||
private lsh: string = null
|
||||
private folderPath
|
||||
private stashFn: StashFunction
|
||||
private errorStep: number = 0
|
||||
private messageTimer: number = -1
|
||||
private headLenth: number = 9
|
||||
//消息头长度
|
||||
private isWorking: Boolean = false
|
||||
private plcUdpError = false;
|
||||
private initParam
|
||||
|
||||
constructor(udplocalIp: string, udplocalIpPort: string, udpOppositeIp: string, udpOppositeIpPort: string) {
|
||||
this.localIp = udplocalIp
|
||||
this.oppositeIp = udpOppositeIp
|
||||
this.localIpPort = udplocalIpPort
|
||||
this.oppositeIpPort = udpOppositeIpPort
|
||||
this.stashFn = () => {
|
||||
}
|
||||
this.udp = socket.constructUDPSocketInstance();
|
||||
this.initPath()
|
||||
}
|
||||
|
||||
rebindUdp(localIp: string, localIpPort: string, oppositeIp: string, oppositeIpPort: string) {
|
||||
this.localIp = localIp
|
||||
this.oppositeIp = oppositeIp
|
||||
this.localIpPort = localIpPort
|
||||
this.oppositeIpPort = oppositeIpPort
|
||||
|
||||
let promise = this.udp.bind({
|
||||
// address: '192.168.7.170', port: 20122, family: 1
|
||||
address: this.localIp, port: parseInt(this.localIpPort), family: 1
|
||||
});
|
||||
|
||||
promise.then(() => {
|
||||
this.isWorking = true
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:`${TAG} getUDPudp rebind success`,
|
||||
// })
|
||||
}).catch(err => {
|
||||
this.isWorking = false
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:`${TAG} getUDPudp rebind failed:${JSON.stringify(err)}`,
|
||||
// })
|
||||
console.log(`${TAG} getUDPudp rebind failed:${JSON.stringify(err)}`);
|
||||
});
|
||||
}
|
||||
|
||||
bindUdp() {
|
||||
let promise = this.udp.bind({
|
||||
address: this.localIp, port: parseInt(this.localIpPort), family: 1
|
||||
});
|
||||
promise.then(() => {
|
||||
this.isWorking = true
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:`${TAG} getUDPudp bind success`,
|
||||
// })
|
||||
}).catch(err => {
|
||||
this.isWorking = false
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:`${TAG} getUDPudp bind error${JSON.stringify(err)},localIp:${this.localIpPort},port:${this.localIpPort}`,
|
||||
// })
|
||||
});
|
||||
}
|
||||
|
||||
//异或运算
|
||||
setMessageExclusive(tmpList) {
|
||||
let result = tmpList[0];
|
||||
for (let i = 1; i < tmpList.length; i++) {
|
||||
result = result ^ tmpList[i]
|
||||
}
|
||||
return [result];
|
||||
}
|
||||
|
||||
Array2Byte(array) {
|
||||
var buf = new ArrayBuffer(array.length);
|
||||
var view = new Uint8Array(buf);
|
||||
for (var i = 0; i != array.length; ++i) {
|
||||
view[i] = array[i] & 0xFF;
|
||||
}
|
||||
return view;
|
||||
}
|
||||
|
||||
// {id: 31,list:[0,1,'0000000000000'],carNo:489,placeId:62}
|
||||
setWholeMsg(params) {
|
||||
let head = this.setMsgHead(params);
|
||||
let headJudge = this.setMessageExclusive(head);
|
||||
let body = this.setMsgBody(params);
|
||||
let bodyJudge = this.setMessageExclusive(body);
|
||||
let end = [13, 10];
|
||||
const arr = [...head, ...headJudge, ...body, ...bodyJudge, ...end]
|
||||
return this.Array2Byte(arr).buffer
|
||||
|
||||
}
|
||||
|
||||
//length消息体bufferlength id消息类型id bodyStr消息体string
|
||||
// setMsyBody(id,bodyByte){
|
||||
|
||||
setMsgHead({ id, list, placeId=62, carNo=489 }) {
|
||||
let a = string2Bytes(`${id}${fillZero(placeId, 3)}`, 2 * 8);
|
||||
let b = string2Bytes(`${fillZero(carNo, 4)}${AppStorage.get('lshNo')}`, 4 * 8);
|
||||
let c = string2Bytes(list.length, 2 * 8);
|
||||
return [...a, ...b, ...c];
|
||||
}
|
||||
|
||||
setMsgBody({ id, list }) {
|
||||
let tmpList = []
|
||||
tmpList = list
|
||||
|
||||
return tmpList;
|
||||
|
||||
}
|
||||
|
||||
sendHeadMsg(msgData) {
|
||||
console.log('getUDPsendHeadMsg enter')
|
||||
this.sendMsg(msgData, null)
|
||||
console.log('getUDPsendHeadMsg exit')
|
||||
}
|
||||
|
||||
sendMsg(msg, sendCallback?) {
|
||||
if (!this.isWorking) {
|
||||
// console.log(`${TAG}getUDPudpCLient sendMsg is closed return `);
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:`${TAG}getUDPudpCLient sendMsg is closed return oppositeIp:${this.oppositeIp},oppositeIpPort:${this.oppositeIpPort},localIp:${this.localIp},localIpPort:${this.localIpPort}`,
|
||||
// })
|
||||
if (sendCallback) {
|
||||
sendCallback()
|
||||
}
|
||||
return;
|
||||
}
|
||||
let promise = this.udp.send({
|
||||
data: msg,
|
||||
address: {
|
||||
address: this.oppositeIp,
|
||||
port: parseInt(this.oppositeIpPort),
|
||||
}
|
||||
});
|
||||
promise.then(() => {
|
||||
if (sendCallback) {
|
||||
sendCallback()
|
||||
}
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:`${TAG}getUDPudpCLient udp send success: oppositeIp:${this.oppositeIp},oppositeIpPort:${this.oppositeIpPort},localIp:${this.localIp},localIpPort:${this.localIpPort}`,
|
||||
// })
|
||||
}).catch(err => {
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:`${TAG}getUDPudpCLient udp send fail:oppositeIp${this.oppositeIp},oppositeIpPort:${this.oppositeIpPort},localIp:${this.localIp},localIpPort,${this.localIpPort}${JSON.stringify(err)}`,
|
||||
// })
|
||||
promptAction.showToast({
|
||||
message: `${TAG}getUDPudpCLient udp send fail:oppositeIp${this.oppositeIp},oppositeIpPort:${this.oppositeIpPort},localIp:${this.localIp},localIpPort,${this.localIpPort}`,
|
||||
duration: 4000
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
sendMsgExt(param, context?) {
|
||||
if (context) {
|
||||
this.context = context
|
||||
}
|
||||
this.sendId = param.id
|
||||
const msgData = this.setWholeMsg(param)
|
||||
this.sendMsg(msgData, param.sendCallback)
|
||||
}
|
||||
|
||||
onError_Callback(callback?) {
|
||||
this.udp.on('error', async err => {
|
||||
this.isWorking = false;
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:'getUDPUdpClientByCenter onError err:' + JSON.stringify(err)+this.oppositeIpPort,
|
||||
// })
|
||||
callback && callback()
|
||||
});
|
||||
}
|
||||
|
||||
onError_resend(callback?) {
|
||||
this.udp.on('error', async err => {
|
||||
this.isWorking = false;
|
||||
|
||||
callback && callback()
|
||||
});
|
||||
}
|
||||
|
||||
setMsgCallBack(callback) {
|
||||
this.stashFn = callback ? callback : () => {
|
||||
}
|
||||
}
|
||||
|
||||
//中心udp回执
|
||||
onMessage_2(callback, type?) {
|
||||
this.udp.on('message', (value, remoteInfo) => {
|
||||
let arr = []
|
||||
let dataView = new DataView(value.message)
|
||||
for (let i = 0; i < dataView?.byteLength; ++i) {
|
||||
arr[i] = dataView?.getUint8(i)
|
||||
}
|
||||
let idNum = '0x' + fillZero(arr[1].toString(16), 2) + fillZero(arr[0].toString(16), 2);
|
||||
let id = Math.floor(+idNum / 1000)
|
||||
|
||||
let lengthNum = '0x' + fillZero(arr[7].toString(16), 2) + fillZero(arr[6].toString(16), 2);
|
||||
let length = +lengthNum;
|
||||
let list = []
|
||||
for (let i = this.headLenth; i <= this.headLenth + length - 1; i++) {
|
||||
list.push(arr[i])
|
||||
}
|
||||
this.stashFn({
|
||||
id,
|
||||
length,
|
||||
body: list,
|
||||
sendId: this.sendId
|
||||
})
|
||||
callback({
|
||||
id,
|
||||
length,
|
||||
body: list,
|
||||
sendId: this.sendId
|
||||
})
|
||||
|
||||
|
||||
// this.interval=setInterval(()=>{
|
||||
//
|
||||
// },3000)
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
closeUdp(callback?) {
|
||||
console.log('getUDPUdpClientByCenter enter closeUdp ip:' + this.localIp + ' port:' + this.localIpPort);
|
||||
this.udp.close(err => {
|
||||
if (err) {
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:'getUDPUdpClientByCenter closeUdp err:' + JSON.stringify(err)+this.oppositeIpPort,
|
||||
// })
|
||||
} else {
|
||||
this.isWorking = false
|
||||
if (callback != null) {
|
||||
callback()
|
||||
}
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC:'getUDPUdpClientByCenter closeUdp succeed:' + JSON.stringify(err)+this.oppositeIpPort,
|
||||
// })
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
message_1Fn = (value) => {
|
||||
let callback = this.onMessage_1Callback
|
||||
// 收到的是ArrayBuffer 需要进行转换解析
|
||||
this.plcUdpError = false
|
||||
if (value) {
|
||||
let dataView = new DataView(value.message)
|
||||
let str = ""
|
||||
for (let i = 0; i < dataView?.byteLength; ++i) {
|
||||
let c = String.fromCharCode(dataView?.getUint8(i))
|
||||
if (c !== "\n") {
|
||||
str += c
|
||||
}
|
||||
}
|
||||
|
||||
let strachArr = str.split(',')
|
||||
if (strachArr[0] != '#DN_GD') {
|
||||
return
|
||||
}
|
||||
|
||||
strachArr[28] = AppStorage.get('chuankoMsg') || strachArr[28]
|
||||
|
||||
// this.stashFn(str)
|
||||
const newArr = JSON.parse(JSON.stringify(strachArr))
|
||||
// this.writeLog({
|
||||
// time:dateFormat(new Date()),
|
||||
// PLC: JSON.stringify(newArr.toString()),
|
||||
// })
|
||||
if (strachArr[83] != '4') {
|
||||
console.log('差分状态异常', strachArr[83], strachArr[92])
|
||||
this.writeLog({
|
||||
time: dateFormat(new Date()),
|
||||
PLC: `${TAG}差分状态异常,${strachArr[83]},${strachArr[92]}`,
|
||||
})
|
||||
} else {
|
||||
this.chafenFlag = 0
|
||||
}
|
||||
callback && callback(newArr.toString())
|
||||
this.currentValue = newArr.toString();
|
||||
} else {
|
||||
callback && callback('')
|
||||
}
|
||||
|
||||
this.testIfUdpConnetced(callback)
|
||||
}
|
||||
|
||||
async writeLog(param) {
|
||||
// const fileUtil = new FileUtil(globalThis.context)
|
||||
// fileUtil.editFile(`${this.folderPath}/plcLog.txt`, JSON.stringify(param)+`\n`)
|
||||
}
|
||||
|
||||
async initPath() {
|
||||
// const fileUtil = new FileUtil(globalThis.context)
|
||||
// const date=dateFormat(new Date).split(' ')[0]
|
||||
// this.folderPath = await fileUtil.initFolder(`/PLC/${date}`);
|
||||
}
|
||||
|
||||
//获取当前UDP信号
|
||||
getCurrentMessage = () => {
|
||||
return this.currentValue
|
||||
}
|
||||
|
||||
testIfUdpConnetced(callback) {
|
||||
const arrRed = [0x55, 0xaa, 0x01, 0x01, 0x02, 0x00, 0x03, 0x00];
|
||||
const arrBlue = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00];
|
||||
const arrGreen = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01];
|
||||
const arrBlueBuffer = Array2Byte(arrBlue).buffer
|
||||
const arrRedBuffer = Array2Byte(arrRed).buffer
|
||||
const arrGreenBugger = Array2Byte(arrGreen).buffer
|
||||
let num = 0
|
||||
|
||||
//监听udp是否断开
|
||||
clearInterval(this.messageTimer)
|
||||
this.messageTimer = setInterval(() => {
|
||||
const lightLineUdp = globalThis.lightLineUdp
|
||||
const isJudge = AppStorage.get('isJudge')
|
||||
setTimeout(async () => {
|
||||
//程序断开
|
||||
lightLineUdp?.send(this.plcUdpError ? arrRedBuffer : (isJudge ? arrGreenBugger : arrBlueBuffer));
|
||||
if (this.plcUdpError) {
|
||||
num++
|
||||
this.writeLog({
|
||||
time: dateFormat(new Date()),
|
||||
PLC: 'plc udp信号丢失',
|
||||
})
|
||||
console.log(TAG, 'plc udp信号丢失')
|
||||
if (num == 3) {
|
||||
getUDP(AppStorage.get('context'), true)
|
||||
AppStorage.setOrCreate('title', 'plc udp信号丢失')
|
||||
AppStorage.setOrCreate('type', 3)
|
||||
num = 0
|
||||
}
|
||||
|
||||
prompt.showToast({
|
||||
message: 'plc udp信号丢失',
|
||||
duration: 2000
|
||||
});
|
||||
}
|
||||
|
||||
this.plcUdpError = true;
|
||||
}, 2000)
|
||||
}, 2000)
|
||||
}
|
||||
|
||||
private onMessage_1Callback: Function = () => {
|
||||
}
|
||||
|
||||
// initHeartSendMsg(param,context){
|
||||
// console.log('1111param',JSON.stringify(param))
|
||||
// this.initParam=param
|
||||
// this.context=context
|
||||
// }
|
||||
}
|
||||
|
||||
interface StashFunction {
|
||||
(params: {
|
||||
id: number;
|
||||
length: number;
|
||||
body: any[];
|
||||
sendId: string
|
||||
}): void;
|
||||
}
|
||||
@ -1,130 +0,0 @@
|
||||
import emitter from '@ohos.events.emitter';
|
||||
|
||||
export const EVENTID = {
|
||||
//远程扣分处理
|
||||
kfEventId: 35,
|
||||
//远程扣分查询
|
||||
kfAskEventId: 36,
|
||||
//远程扣分确认
|
||||
kfConfirmEventId: 37,
|
||||
|
||||
//远程开始考试
|
||||
beginExamEventId: 11,
|
||||
//远程结束考试
|
||||
endExamEventId: 12
|
||||
}
|
||||
|
||||
export default class JudgeEmitter {
|
||||
private beginExamCallBack: Function = () => {}
|
||||
private endExamCallBack: Function = () => {}
|
||||
private confirmExamCallBack: Function = () => {}
|
||||
private kfContent: Function = () => {}
|
||||
|
||||
private directives: string
|
||||
|
||||
constructor() {
|
||||
this.init()
|
||||
}
|
||||
|
||||
init = async () => {
|
||||
console.info('surenjun', '开始注册udp事件')
|
||||
emitter.off(EVENTID.beginExamEventId)
|
||||
emitter.off(EVENTID.endExamEventId)
|
||||
emitter.off(EVENTID.kfConfirmEventId)
|
||||
emitter.off(EVENTID.kfEventId)
|
||||
|
||||
emitter.on({
|
||||
eventId: EVENTID.beginExamEventId
|
||||
}, () => {
|
||||
this?.beginExamCallBack()
|
||||
});
|
||||
|
||||
emitter.on({
|
||||
eventId: EVENTID.endExamEventId
|
||||
}, () => {
|
||||
this?.endExamCallBack()
|
||||
});
|
||||
|
||||
emitter.on({
|
||||
eventId: EVENTID.kfEventId
|
||||
}, (data) => {
|
||||
console.info('surenjun EVENTID.kfEvent' + JSON.stringify(data))
|
||||
this?.kfContent(data)
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//监听开始考试
|
||||
public onBeginExam = async (callBack?: Function) => {
|
||||
console.info('surenjun', '注册远程开始考试事件')
|
||||
this.beginExamCallBack = callBack
|
||||
}
|
||||
|
||||
//监听结束考试
|
||||
public onEndExam = async (callBack?: Function) => {
|
||||
console.info('surenjun', '注册远程结束考试事件')
|
||||
this.endExamCallBack = callBack
|
||||
}
|
||||
|
||||
//监听扣分处理
|
||||
public onKfExam = async (callBack?: Function) => {
|
||||
console.info('surenjun', '注册远程扣分考试事件')
|
||||
this.kfContent = callBack
|
||||
}
|
||||
|
||||
//开始考试
|
||||
public sendBeginExam = async (content: string) => {
|
||||
emitter.emit({
|
||||
eventId: EVENTID.beginExamEventId
|
||||
}, {
|
||||
data: {
|
||||
directives: content
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//结束考试
|
||||
public sendEndExam = async (content: string) => {
|
||||
emitter.emit({
|
||||
eventId: EVENTID.endExamEventId
|
||||
}, {
|
||||
data: {
|
||||
directives: content
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//扣分
|
||||
public sendKfContent = async (kfxh: string) => {
|
||||
const directives = this.directives
|
||||
console.info('surenjun', `udpEvent收到扣分事件。kfxh=>${kfxh};directives=>${directives}`)
|
||||
emitter.emit({
|
||||
eventId: EVENTID.kfEventId
|
||||
}, {
|
||||
data: {
|
||||
directives,
|
||||
kfxh
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//监听扣分指令
|
||||
public sendOnKf = async (directives: string) => {
|
||||
//TODO 临时存储指令编号
|
||||
this.directives = directives
|
||||
globalThis.judgeUdp.askKf(directives)
|
||||
}
|
||||
|
||||
// 获取扣分项目编号
|
||||
public onConfirmKf = async (kfxh: string) => {
|
||||
const directives = this.directives;
|
||||
emitter.emit({
|
||||
eventId: EVENTID.kfConfirmEventId
|
||||
}, {
|
||||
data: {
|
||||
kfxh, directives
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,296 +0,0 @@
|
||||
import systemTime from '@ohos.systemDateTime';
|
||||
import { testKm2Items, testKm3Items } from '../../pages/judgeSDK/dataTest/index';
|
||||
import { judgeConfig } from '../../pages/judgeSDK/utils/judgeConfig';
|
||||
import { setJudgeUdp, setTopLineUdp } from './GlobalUdp';
|
||||
import { examCalcGpsDistance } from '../../pages/judgeSDK/api';
|
||||
|
||||
export const initJudgeUdp = async () => {
|
||||
AppStorage.setOrCreate('serialIndex', 0)
|
||||
AppStorage.setOrCreate('udpIndex', 0)
|
||||
const udp = await setJudgeUdp()
|
||||
globalThis.judgeUdp = udp
|
||||
|
||||
const arrBlue = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00];
|
||||
const arrBlueBuffer = Array2Byte(arrBlue).buffer
|
||||
|
||||
const lightLineUdp = await setTopLineUdp();
|
||||
if (lightLineUdp) {
|
||||
lightLineUdp.send(arrBlueBuffer);
|
||||
}
|
||||
globalThis.lightLineUdp = lightLineUdp
|
||||
|
||||
let [prevJd, preWd] = [0, 0]
|
||||
globalThis.udpClient.onMessage_1(async (msg) => {
|
||||
const stachArr = msg.split(',')
|
||||
if (stachArr[0] != '#DN_GD') {
|
||||
return
|
||||
}
|
||||
let udpIndex = AppStorage.get('udpIndex') as number;
|
||||
const isJudge = AppStorage.get('isJudge');
|
||||
if (udpIndex % 5 === 0 && !isJudge) {
|
||||
const bytes = await getMessageHeartbeat(msg);
|
||||
const msgArr = msg.split(',');
|
||||
const jd = convertGpsCoord2(msgArr[96] * 1);
|
||||
const wd = convertGpsCoord2(msgArr[95] * 1 || 0);
|
||||
udp.send(bytes)
|
||||
if (prevJd && msgArr[83] == 4) {
|
||||
const distance = await examCalcGpsDistance({
|
||||
jd1: prevJd,
|
||||
wd1: preWd,
|
||||
jd2: jd,
|
||||
wd2: wd,
|
||||
h: msgArr[90] * 1 || 1,
|
||||
})
|
||||
// globalThis.distanceClass?.setTimeData(((distance / 100).toFixed(2)) * 1)
|
||||
}
|
||||
prevJd = jd;
|
||||
preWd = wd;
|
||||
}
|
||||
AppStorage.setOrCreate('udpIndex', udpIndex++)
|
||||
})
|
||||
}
|
||||
|
||||
export const getMessageHeartbeat = async (msg) => {
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const { examSubject, plateNo } = carInfo;
|
||||
const ksyh = '0000000000000'
|
||||
const { fourInOneScreen:{ gpsDigit } } = judgeConfig
|
||||
const asclshArr = stringToASC(fillZero(
|
||||
AppStorage.get('singlePlay')
|
||||
? '1111111111111'
|
||||
: AppStorage.get('lsh'),
|
||||
13));
|
||||
const ascksyhArr = stringToASC(fillZero(examSubject == 2 ? '0000000000000' : '1111111111111', 13))
|
||||
const ascsbxhArr = stringToASC('00000000')
|
||||
// const ascsbxhArr = stringToASC('153216400880')
|
||||
const serialIndex = AppStorage.get('serialIndex')
|
||||
const tempData = await getPlcData(msg);
|
||||
const examType = examSubject == 2 ? 2 : 3
|
||||
const { sensor, gps } = tempData;
|
||||
const { zfxd, yfxd, shtd, ygd, jgd, skd, dh1, dh2, lhq, jsc, ssc, fsc, lb, mkg, aqd, ygq, cs, fdjzs, dw } = sensor
|
||||
const { jd, wd, hxj, fyj, hbg, sd } = gps
|
||||
const translateSignals = getTranslateSignals(
|
||||
[zfxd, yfxd, shtd, ygd, jgd, skd, dh1, dh2, lhq, jsc, ssc, fsc, lb, mkg, aqd].concat(getDwStatusType(dw))
|
||||
.concat([0, 0, ygq, sensor.wd, 0])
|
||||
)
|
||||
const translateProject = getTranslateProject();
|
||||
const translateJd = convertGpsCoord2(wd).toFixed(gpsDigit) * Math.pow(10, gpsDigit);
|
||||
const translateWd = convertGpsCoord2(jd).toFixed(gpsDigit) * Math.pow(10, gpsDigit)
|
||||
const translateProjects = translateProject.map(numStr => string2Bytes(parseInt(numStr, 2), 8)[0])
|
||||
let tempSd = (sd * 1.852).toFixed(0) * 1
|
||||
if (tempSd < 1) {
|
||||
tempSd = 0
|
||||
}
|
||||
|
||||
const arr = [
|
||||
//考生号
|
||||
asclshArr.map(lsh => string2Bytes(lsh, 8)[0]),
|
||||
//考试员号
|
||||
ascksyhArr.map(ksyh => string2Bytes(ksyh, 8)[0]),
|
||||
//科目类型(0:未考试 1:科目二 2:科目三) + 考试开始时间
|
||||
string2Bytes(`${0}${'00:00:000'}`, 4 * 8),
|
||||
// 消息序号
|
||||
string2Bytes(serialIndex, 2 * 8),
|
||||
translateSignals,
|
||||
string2Bytes(tempSd * 100, 2 * 8), string2Bytes(fdjzs / 100, 8), string2Bytes(translateJd, 4 * 8),
|
||||
string2Bytes(translateWd, 4 * 8), string2Bytes(1, 8),
|
||||
//GPS东向距离
|
||||
string2Bytes(0, 4 * 8),
|
||||
//GPS北向距离
|
||||
string2Bytes(0, 4 * 8),
|
||||
//航向角 俯仰角 高程(海拔)
|
||||
string2Bytes((hxj) * 100, 2 * 8), string2Bytes(fyj * 100, 2 * 8), string2Bytes(hbg * 100, 4 * 8),
|
||||
//dddd
|
||||
translateProjects,
|
||||
//当前项目编号
|
||||
string2Bytes(0, 8),
|
||||
//场地设备编号
|
||||
ascsbxhArr.map(sbxh => string2Bytes(sbxh, 8)[0]),
|
||||
//本次考试行驶距离
|
||||
string2Bytes(0, 2 * 8),
|
||||
//扣分值
|
||||
string2Bytes(0, 2 * 8),
|
||||
//扣分数
|
||||
string2Bytes(0, 2 * 8),
|
||||
//扣分项数量
|
||||
string2Bytes(0, 8),
|
||||
//n个扣分序号
|
||||
[].map(kf => string2Bytes(kf.markcatalog, 8)),
|
||||
//牵引车第二gps精度、纬度
|
||||
string2Bytes(0, 4 * 8), string2Bytes(0, 4 * 8),
|
||||
//牵引车第二航向角
|
||||
string2Bytes(0, 2 * 8),
|
||||
//摩托压线 Byte[20],
|
||||
string2Bytes(0, 20 * 8),
|
||||
//考试用时
|
||||
string2Bytes(fillZero(0 + '', 4), 4 * 8),
|
||||
//项目用时
|
||||
string2Bytes(fillZero(0, 2), 2 * 8),
|
||||
//设备信号状态
|
||||
string2Bytes(0, 4 * 8),
|
||||
]
|
||||
let tempArr = [];
|
||||
arr.forEach(itemArr => {
|
||||
tempArr = tempArr.concat(itemArr)
|
||||
})
|
||||
|
||||
AppStorage.setOrCreate('serialIndex', 0);
|
||||
return Array2Byte(tempArr)
|
||||
}
|
||||
|
||||
// 中心plc实时信号转换成字节
|
||||
const getTranslateSignals = (tempItems) => {
|
||||
const len = Math.floor(tempItems.length / 8);
|
||||
const arr = [];
|
||||
for (let i = 0; i < len; i++) {
|
||||
const temp = tempItems.slice(i * 8, (i + 1) * 8);
|
||||
arr.push(temp.join(''));
|
||||
}
|
||||
const temp = arr.map(numStr => parseInt(numStr, 2))
|
||||
return temp.map(item => string2Bytes(item, 8)[0])
|
||||
}
|
||||
|
||||
// 中心所有项目转换
|
||||
const getTranslateProject = () => {
|
||||
const examSubject = AppStorage.get('examSubject');
|
||||
|
||||
const tempItems = (examSubject == 2 ? testKm2Items : testKm3Items).map(code => {
|
||||
return {
|
||||
code, status: '0'
|
||||
}
|
||||
})
|
||||
const arr = [];
|
||||
for (let i = 0; i <= 4; i++) {
|
||||
const temp = tempItems.slice(i * 4, (i + 1) * 4);
|
||||
let tempArr = temp.map(item => item.status)
|
||||
if (i === 4) {
|
||||
tempArr = examSubject == 2
|
||||
//bit36-bit39保留
|
||||
? tempArr.concat(['00', '00'])
|
||||
//bit30-bit39保留
|
||||
: tempArr.concat(['00', '00', '00'])
|
||||
}
|
||||
// if (i === 3 && examSubject == 3) {
|
||||
// tempArr = tempArr.concat(['00'])
|
||||
// }
|
||||
|
||||
arr.push(tempArr.join(''));
|
||||
}
|
||||
return arr
|
||||
}
|
||||
|
||||
// 中心实时项目状态转换
|
||||
const getCenterProjectStatus = (status) => {
|
||||
switch (status) {
|
||||
//不考
|
||||
case 0:
|
||||
return '00'
|
||||
//未考
|
||||
case 1:
|
||||
return '01'
|
||||
//已考
|
||||
case 2:
|
||||
return '10'
|
||||
}
|
||||
}
|
||||
|
||||
// plc数据转换成对象
|
||||
const getPlcData = async (plc: string) => {
|
||||
const time = await systemTime.getCurrentTime()
|
||||
const p = plc.split(',').map((val, key) => {
|
||||
if (key !== 27 && key !== 92) {
|
||||
return val * 1
|
||||
} else {
|
||||
return val
|
||||
}
|
||||
});
|
||||
|
||||
const tempData = {
|
||||
sensor: {
|
||||
//安全带 车门门开关 手刹 脚刹 副刹 离合器 喇叭 示宽灯 近光灯 远光灯
|
||||
aqd: p[19],
|
||||
mkg: p[14],
|
||||
ssc: p[13],
|
||||
jsc: p[12],
|
||||
fsc: p[18],
|
||||
lhq: p[17],
|
||||
lb: p[4],
|
||||
skd: p[9],
|
||||
jgd: p[7],
|
||||
ygd: p[8],
|
||||
//左方向灯 右方向灯 双跳灯 雾灯 雨刮器 点火1 点火2 发动机转速 档位 车速
|
||||
zfxd: p[2],
|
||||
yfxd: p[3],
|
||||
shtd: p[20],
|
||||
wd: p[10],
|
||||
ygq: p[11],
|
||||
dh1: p[5],
|
||||
dh2: p[6],
|
||||
fdjzs: p[25],
|
||||
dw: p[28],
|
||||
cs: p[23],
|
||||
// 方向盘
|
||||
fxp: p[27].split('_')[0] * 1,
|
||||
//累计脉冲 溜车脉冲 超声波左后 超声波右后 超声波右前 超声波左前 座椅 仪表盘 后视镜 倒车镜 光照 雨量
|
||||
ljmc: p[24],
|
||||
lcmc: 0,
|
||||
csbzh: p[32],
|
||||
csbyh: p[30],
|
||||
csbyq: p[31],
|
||||
csbzq: p[29],
|
||||
zy: 0,
|
||||
tbp: 0,
|
||||
hsj: 0,
|
||||
dcj: 0,
|
||||
gx: 0,
|
||||
yl: 0
|
||||
},
|
||||
gps: {
|
||||
//TODO 办卡类型 定位差分状态
|
||||
bklx: p[56],
|
||||
dwzt: p[83],
|
||||
//角度差分状态
|
||||
jdzt: p[92].split('-')[0] * 1,
|
||||
//TODO gps数据
|
||||
//gps时间 经度 纬度 航向角 俯仰角 海拔高 高度差 速度
|
||||
sj: time,
|
||||
jd: p[96],
|
||||
wd: p[95],
|
||||
hxj: p[90],
|
||||
fyj: p[91],
|
||||
hbg: p[85],
|
||||
gdc: p[86],
|
||||
sd: p[97],
|
||||
//龄期 经度因子 纬度因子 定位搜星数
|
||||
age: p[87],
|
||||
jdyz: p[89],
|
||||
wdyz: p[88],
|
||||
dwsxs: p[84],
|
||||
// 角度搜星数
|
||||
jdsxs: p[92].split('-')[1] * 1
|
||||
},
|
||||
}
|
||||
|
||||
return tempData
|
||||
}
|
||||
|
||||
const getDwStatusType = (dw) => {
|
||||
switch (dw) {
|
||||
case 0:
|
||||
return [0, 0, 0, 0]
|
||||
case 1:
|
||||
return [0, 0, 0, 1]
|
||||
case 2:
|
||||
return [0, 0, 1, 0]
|
||||
case 3:
|
||||
return [0, 0, 1, 1]
|
||||
case 4:
|
||||
return [0, 1, 0, 0]
|
||||
case 5:
|
||||
return [0, 1, 0, 1]
|
||||
case 9:
|
||||
return [1, 0, 0, 1]
|
||||
default:
|
||||
return [0, 0, 0, 0]
|
||||
}
|
||||
}
|
||||
@ -4,7 +4,6 @@ import router from '@ohos.router';
|
||||
import { getEsCarModel, getSyncData, } from '../common/service/initable';
|
||||
import { initJudgeUdp } from '../common/utils/UdpJudge';
|
||||
import { judgeConfig } from './judgeSDK/utils/judgeConfig';
|
||||
import { getTCP } from '../common/utils/GlobalTcp';
|
||||
import promptAction from '@ohos.promptAction';
|
||||
import errorMsgDialog from './compontents/errorMsgDialog';
|
||||
import imageBtn from './compontents/imageBtn';
|
||||
@ -487,7 +486,6 @@ struct Index {
|
||||
}
|
||||
// this.loading = false
|
||||
this.num = 0
|
||||
// const TcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort)
|
||||
AppStorage.setOrCreate('lsh', '1111111111111')
|
||||
}
|
||||
|
||||
@ -515,7 +513,7 @@ struct Index {
|
||||
await GetDeviceInfo(this.context)
|
||||
await GetCarInfo()
|
||||
// await getUDP2(this.context, false)
|
||||
getTCP()
|
||||
// getTCP()
|
||||
this.carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
this.deviceId = this.carInfo.carNo
|
||||
// await setCurrentTime();
|
||||
|
||||
@ -172,7 +172,6 @@ struct UserInfo {
|
||||
}
|
||||
|
||||
}
|
||||
private fileUtil: FileUtils
|
||||
private title = ''
|
||||
private type = '2'
|
||||
errorDialog: CustomDialogController = new CustomDialogController({
|
||||
@ -467,7 +466,6 @@ struct UserInfo {
|
||||
}
|
||||
|
||||
async heartMsg() {
|
||||
// TODO UDP缺失
|
||||
CentralHeartbeat.getData((val: centerCallBackMsgType) => {
|
||||
if (val.id == 32) {
|
||||
AppStorage.setOrCreate('signNum', val.body[1])
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user