diff --git a/entry/src/main/ets/model/Worker.ets b/entry/src/main/ets/model/Worker.ets index f8f0852..7948222 100644 --- a/entry/src/main/ets/model/Worker.ets +++ b/entry/src/main/ets/model/Worker.ets @@ -5,6 +5,7 @@ export interface WorkerMessage { carInfo: CarInfoType; centerUdpParam?: UDPParamType; otherMessage: OtherMessageType; + singlePlay?: boolean } export interface OtherMessageType { diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 799108a..b5896c2 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -11,7 +11,6 @@ import { BusinessError } from '@ohos.base'; import { delPic } from '../utils/Video'; import { FileHelper } from '../utils/FileHelp'; import { DrivingDataStorage } from '../utils/business/DrivingDataStorage'; -import { JudgeUdpBusinessInstance } from '../utils/business/JudgeUdpBusiness'; import { JudgeEmitterInstance } from '../utils/business/UdpEvent'; import HeaderComponent from './compontents/Header'; import CardComponent from './Index/Card'; @@ -184,7 +183,7 @@ struct Index { this.timeInfo = AppStorage.get('timeInfo')! DrivingDataStorage.init(this.context) DrivingDataStorage.initializeTheDrivingDataFolder() - JudgeUdpBusinessInstance.init() + // JudgeUdpBusinessInstance.init() // TODO 摄像头遮挡 // takePhotoFn(this.context) // TODO diff --git a/entry/src/main/ets/utils/Common.ets b/entry/src/main/ets/utils/Common.ets index e59ccdd..76d94a3 100644 --- a/entry/src/main/ets/utils/Common.ets +++ b/entry/src/main/ets/utils/Common.ets @@ -74,8 +74,8 @@ export function ArrayToByteArray(array: number[]): Uint8Array { * @param len 字节数 * @returns 返回字节数组 */ -export function NumberToByteArray(number: number, len: number): number[] { - let str = Math.floor(number).toString(2); +export function NumberToByteArray(number: number | string, len: number): number[] { + let str = Math.floor(Number(number)).toString(2); if (str.length > len) { console.log('数据长度不对~~'); return []; diff --git a/entry/src/main/ets/utils/business/DifferentialAndSignal.ets b/entry/src/main/ets/utils/business/DifferentialAndSignal.ets index 092bb7d..b4f9ffd 100644 --- a/entry/src/main/ets/utils/business/DifferentialAndSignal.ets +++ b/entry/src/main/ets/utils/business/DifferentialAndSignal.ets @@ -24,6 +24,7 @@ class differentialAndSignal { const signNum = AppStorage.get('signNum') const statue = AppStorage.get('statue') const lsh = AppStorage.get('lsh') + const singlePlay = AppStorage.get("singlePlay") const data: WorkerMessage = { config: config, carInfo: carInfo, @@ -31,7 +32,8 @@ class differentialAndSignal { signNum: signNum || 0, statue: statue || "", lsh: lsh || "" - } + }, + singlePlay: singlePlay || false } this.workerInstance.postMessage(JSON.stringify(data)) this.getMessage() diff --git a/entry/src/main/ets/utils/business/JudgeUdpBusiness.ets b/entry/src/main/ets/utils/business/JudgeUdpBusiness.ets index eb70ddd..f1e33dc 100644 --- a/entry/src/main/ets/utils/business/JudgeUdpBusiness.ets +++ b/entry/src/main/ets/utils/business/JudgeUdpBusiness.ets @@ -2,7 +2,7 @@ import { CarInfoType, EnvironmentConfigurationType, Gps, Sensor, UDPParamType } import { testKm2Items, testKm3Items } from '../../pages/judgeSDK/dataTest'; import { fillZero, } from '../../pages/judgeSDK/utils/Common'; import { JudgeConfig } from '../../config'; -import { FillZero, StringToASCII } from '../Common'; +import { FillZero, NumberToByteArray, StringToASCII } from '../Common'; import UdpClient from '../UdpUtils'; import { CenterUDPBusinessInstance } from './CenterUdpBusiness'; import { ObtainUdpBusinessInstance } from './ObtainUdpBusiness'; @@ -25,33 +25,16 @@ interface ProjectItemType { status: string } -function string2Bytes(num: number | string, len: number) { - let str = (Math.floor(Number(num))).toString(2); - if (str.length > len) { - console.log('数据长度不对~~'); - return [] - } - let byteString = FillZero(str, len); - - let arrBytes: number[] = []; - for (let i = byteString.length; i > 0; ) { - let j = i - 8; - if (j < 0) { - j = 0 - } - let s = byteString.slice(j, i); - let v = parseInt(s, 2); - arrBytes.push(v); - i = i - 8 - } - return arrBytes; -} class JudgeUdpBusiness { private static instance: JudgeUdpBusiness public udpIndex = 0; private udp: UdpClient = new UdpClient() private currentUdpIndex = 0; + private carInfo: CarInfoType = {} + private singlePlay: boolean = false + private lsh: string = "" + private serialIndex: number = 0 constructor() { if (!JudgeUdpBusiness.instance) { @@ -61,16 +44,16 @@ class JudgeUdpBusiness { } async getMessageHeartbeat(msg: string): Promise { - const carInfo: CarInfoType = AppStorage.get('carInfo')! let gpsDigit = JudgeConfig.fourInOneScreen.gpsDigit const asclshArr = StringToASCII(FillZero( - AppStorage.get("singlePlay") + this.singlePlay ? '1111111111111' - : AppStorage.get("lsh")!, + : this.lsh, 13)); - const ascksyhArr = StringToASCII(carInfo.examSubject === '2' ? '0000000000000' : '1111111111111') + const ascksyhArr = StringToASCII(this.carInfo.examSubject === '2' ? '0000000000000' : '1111111111111') const ascsbxhArr = StringToASCII('00000000') - const serialIndex = AppStorage.get("serialIndex")! + // const serialIndex = AppStorage.get("serialIndex")! + const plcData = await this.getPlcData(msg); let param: number[] = Object.entries(plcData.sensor) .filter((item: [string, number]) => { @@ -85,70 +68,71 @@ class JudgeUdpBusiness { const translateProject = this.getTranslateProject(); const translateJd = Number(this.convertGpsCoord2(plcData.gps.wd).toFixed(gpsDigit)) * Math.pow(10, gpsDigit); const translateWd = Number(this.convertGpsCoord2(plcData.gps.jd).toFixed(gpsDigit)) * Math.pow(10, gpsDigit) - const translateProjects = translateProject.map(numStr => string2Bytes(parseInt(numStr, 2), 8)[0]) + const translateProjects = translateProject.map(numStr => NumberToByteArray(parseInt(numStr, 2), 8)[0]) let tempSd = Number((plcData.gps.sd * 1.852).toFixed(0)) if (tempSd < 1) { tempSd = 0 } const arr: number[][] = [ //考生号 - asclshArr.map(lsh => string2Bytes(lsh, 8)[0]), + asclshArr.map(lsh => NumberToByteArray(lsh, 8)[0]), //考试员号 - ascksyhArr.map(ksyh => string2Bytes(ksyh, 8)[0]), + ascksyhArr.map(ksyh => NumberToByteArray(ksyh, 8)[0]), //科目类型(0:未考试 1:科目二 2:科目三) + 考试开始时间 - string2Bytes(`${0}${'00:00:000'}`, 4 * 8), + NumberToByteArray(`${0}${'00:00:000'}`, 4 * 8), // 消息序号 - string2Bytes(serialIndex, 2 * 8), + NumberToByteArray(this.serialIndex, 2 * 8), translateSignals, - string2Bytes(tempSd * 100, 2 * 8), - string2Bytes(plcData.sensor.fdjzs / 100, 8), - string2Bytes(translateJd, 4 * 8), - string2Bytes(translateWd, 4 * 8), string2Bytes(1, 8), + NumberToByteArray(tempSd * 100, 2 * 8), + NumberToByteArray(plcData.sensor.fdjzs / 100, 8), + NumberToByteArray(translateJd, 4 * 8), + NumberToByteArray(translateWd, 4 * 8), NumberToByteArray(1, 8), //GPS东向距离 - string2Bytes(0, 4 * 8), + NumberToByteArray(0, 4 * 8), //GPS北向距离 - string2Bytes(0, 4 * 8), + NumberToByteArray(0, 4 * 8), //航向角 - string2Bytes(plcData.gps.hxj * 100, 2 * 8), + NumberToByteArray(plcData.gps.hxj * 100, 2 * 8), //俯仰角 - string2Bytes(plcData.gps.fyj * 100, 2 * 8), + NumberToByteArray(plcData.gps.fyj * 100, 2 * 8), // 高程(海拔) - string2Bytes(plcData.gps.hbg * 100, 4 * 8), + NumberToByteArray(plcData.gps.hbg * 100, 4 * 8), //dddd translateProjects, //当前项目编号 - string2Bytes(0, 8), + NumberToByteArray(0, 8), //场地设备编号 - ascsbxhArr.map(sbxh => string2Bytes(sbxh, 8)[0]), + ascsbxhArr.map(sbxh => NumberToByteArray(sbxh, 8)[0]), //本次考试行驶距离 - string2Bytes(0, 2 * 8), + NumberToByteArray(0, 2 * 8), //扣分值 - string2Bytes(0, 2 * 8), + NumberToByteArray(0, 2 * 8), //扣分数 - string2Bytes(0, 2 * 8), + NumberToByteArray(0, 2 * 8), //扣分项数量 - string2Bytes(0, 8), + NumberToByteArray(0, 8), //n个扣分序号 // [].map(kf => string2Bytes(kf.markcatalog, 8)), [], //牵引车第二gps精度、纬度 - string2Bytes(0, 4 * 8), string2Bytes(0, 4 * 8), + NumberToByteArray(0, 4 * 8), NumberToByteArray(0, 4 * 8), //牵引车第二航向角 - string2Bytes(0, 2 * 8), + NumberToByteArray(0, 2 * 8), //摩托压线 Byte[20], - string2Bytes(0, 20 * 8), + NumberToByteArray(0, 20 * 8), //考试用时 - string2Bytes(FillZero(0, 4), 4 * 8), + NumberToByteArray(FillZero(0, 4), 4 * 8), //项目用时 - string2Bytes(FillZero(0, 2), 2 * 8), + NumberToByteArray(FillZero(0, 2), 2 * 8), //设备信号状态 - string2Bytes(0, 4 * 8), + NumberToByteArray(0, 4 * 8), ] let result: number[] = []; arr.forEach(itemArr => { result = result.concat(itemArr) }) - AppStorage.setOrCreate("serialIndex", 0) + // AppStorage.setOrCreate("serialIndex", 0) + this.serialIndex = 0 return [...new Uint8Array(result)] } @@ -158,13 +142,12 @@ class JudgeUdpBusiness { } sendData(bytes: number[]) { - const carInfo: CarInfoType = AppStorage.get('carInfo')! if (this.udpIndex > this.currentUdpIndex) { this.udp.sendMsgExt({ id: 45, list: bytes, - carNo: carInfo.carNo!, - placeId: carInfo.examinationRoomId! + carNo: this.carInfo.carNo!, + placeId: this.carInfo.examinationRoomId! }) this.currentUdpIndex = this.udpIndex } @@ -172,35 +155,33 @@ class JudgeUdpBusiness { //申请远程扣分查询 askKf(directives: number) { - const carInfo: CarInfoType = AppStorage.get('carInfo')! CenterUDPBusinessInstance.sendData({ id: 35, list: [directives], - carNo: carInfo.carNo!, - placeId: carInfo.examinationRoomId!, + carNo: this.carInfo.carNo!, + placeId: this.carInfo.examinationRoomId!, }) console.info('surenjun', `考车查询扣分项目内容,请求指令为:${directives}`) } //确定远程扣分 confirmKf(directives: number, code: number) { - const carInfo: CarInfoType = AppStorage.get('carInfo')! CenterUDPBusinessInstance.sendData({ id: 37, list: [directives, code], - carNo: carInfo.carNo!, - placeId: carInfo.examinationRoomId! + carNo: this.carInfo.carNo!, + placeId: this.carInfo.examinationRoomId! }) console.info('surenjun', `考车发送确定扣分指令,指令为:${directives}`) } - async init(): Promise { + async init(config: EnvironmentConfigurationType, carInfo: CarInfoType, singlePlay: boolean, lsh: string): Promise { + this.lsh = lsh + this.carInfo = carInfo + this.singlePlay = singlePlay return new Promise((resolve, reject) => { try { - let result: EnvironmentConfigurationType = - AppStorage.get("EnvironmentConfiguration")! - const carInfo: CarInfoType = AppStorage.get('carInfo')! - this.udp.create(result.udplocalIp!, '8080', carInfo.udpAddress!, carInfo.hintPort!).then(resolve).catch(reject) + this.udp.create(config.udplocalIp!, '8080', carInfo.udpAddress!, carInfo.hintPort!).then(resolve).catch(reject) ObtainUdpBusinessInstance.onMsg(async (msg: string) => { let prevJd = 0, preWd = 0 @@ -228,7 +209,7 @@ class JudgeUdpBusiness { prevJd = jd; preWd = wd; } - AppStorage.set("udpIndex", udpIndex + 1) + // AppStorage.setOrCreate("udpIndex", udpIndex + 1) }) setInterval(() => { this.udpIndex += 1 @@ -259,9 +240,9 @@ class JudgeUdpBusiness { private setMsgHead(params: UDPParamType) { const lshNo = SerialNumberInstance.get() - let a = string2Bytes(Number(`${params.id}${fillZero(params.placeId, 3)}`), 2 * 8); - let b = string2Bytes(Number(`${fillZero(params.carNo, 4)}${lshNo}`), 4 * 8); - let c = string2Bytes(params.list.length, 2 * 8); + let a = NumberToByteArray(Number(`${params.id}${fillZero(params.placeId, 3)}`), 2 * 8); + let b = NumberToByteArray(Number(`${fillZero(params.carNo, 4)}${lshNo}`), 4 * 8); + let c = NumberToByteArray(params.list.length, 2 * 8); let result: number[] = [] a?.forEach(item => result.push(item)) b?.forEach(item => result.push(item)) @@ -291,14 +272,14 @@ class JudgeUdpBusiness { for (let i = 0; i < len; i++) { arr.push(tempItems.slice(i * 8, (i + 1) * 8).join('')); } - return arr.map(numStr => parseInt(numStr, 2)).map(item => string2Bytes(item, 8)[0]) + return arr.map(numStr => parseInt(numStr, 2)).map(item => NumberToByteArray(item, 8)[0]) } // 中心所有项目转换 private getTranslateProject(): string[] { - const examSubject = AppStorage.get("examSubject"); + this.carInfo.examSubject const tempItems: ProjectItemType[] = - (examSubject === '2' ? testKm2Items : testKm3Items).map((code: ProjectDataType) => { + (this.carInfo.examSubject === '2' ? testKm2Items : testKm3Items).map((code: ProjectDataType) => { let data: ProjectItemType = { code, status: '0' @@ -310,7 +291,7 @@ class JudgeUdpBusiness { const temp = tempItems.slice(i * 4, (i + 1) * 4); let tempArr = temp.map(item => item.status) if (i === 4) { - tempArr = examSubject === '2' + tempArr = this.carInfo.examSubject === '2' //bit36-bit39保留 ? tempArr.concat(['00', '00']) //bit30-bit39保留 @@ -416,4 +397,5 @@ class JudgeUdpBusiness { } } + export const JudgeUdpBusinessInstance = new JudgeUdpBusiness() \ No newline at end of file diff --git a/entry/src/main/ets/workers/DifferentialCorrection.ets b/entry/src/main/ets/workers/DifferentialCorrection.ets index 6c4180a..5c567c6 100644 --- a/entry/src/main/ets/workers/DifferentialCorrection.ets +++ b/entry/src/main/ets/workers/DifferentialCorrection.ets @@ -4,6 +4,7 @@ import { WorkerTag } from '../config'; import { CenterCallBackMsgType, WorkerBackMessage, WorkerMessage } from '../model'; import { CenterUDPBusinessInstance } from '../utils/business/CenterUdpBusiness'; import { DifferentialSignal } from '../utils/business/DifferentialSignal'; +import { JudgeUdpBusinessInstance } from '../utils/business/JudgeUdpBusiness'; import { ObtainUdpBusinessInstance } from '../utils/business/ObtainUdpBusiness'; const workerPort: ThreadWorkerGlobalScope = worker.workerPort; @@ -37,6 +38,9 @@ function initFn(result: WorkerMessage) { CenterUDPBusinessInstance.init(result.config, result.carInfo, result.otherMessage) // 中心心跳 CenterUDPBusinessInstance.startHeartBeat() + // 初始化考试过程UDP + JudgeUdpBusinessInstance.init(result.config, result.carInfo, result.singlePlay, result.otherMessage.lsh) + } function getDataFn() {