diff --git a/entry/src/main/ets/api/judge.ets b/entry/src/main/ets/api/judge.ets index fdae613f..d7b5ded3 100644 --- a/entry/src/main/ets/api/judge.ets +++ b/entry/src/main/ets/api/judge.ets @@ -136,7 +136,7 @@ export async function uploadExamProgressData(params: UploadExamProgressDataParam if (singlePlay) { return } - return request({ + return request({ url: '/der2/services/exam/uploadExamDataFile.ws', data: ` diff --git a/entry/src/main/ets/api/userInfo.ets b/entry/src/main/ets/api/userInfo.ets index e9c0340d..a67c3f0c 100644 --- a/entry/src/main/ets/api/userInfo.ets +++ b/entry/src/main/ets/api/userInfo.ets @@ -108,7 +108,7 @@ interface GetPhotosForOtherParams { //参数下发读表接口 export async function getPhotosForOther(params: GetPhotosForOtherParams) { - return request({ + return request({ url: '/der2/services/third/getPhotosForOther.ws', data: `${params.sfzmhm}2${params.zptype}${params.ksrq}`, method: http.RequestMethod.POST, @@ -118,7 +118,7 @@ export async function getPhotosForOther(params: GetPhotosForOtherParams) { } export async function setVideoText() { - return request({ + return request({ url: 'http://admin:12345qwe@192.168.36.94/PSIA/Custom/SelfExt/OSD/channels/2/textOverlay', data: ` 1true0012222true0022223false004false005false006false007false008false00`, diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index eee134d3..1bfb86ed 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -9,7 +9,6 @@ import DB from '../utils/DbSql'; import { DrivingDataStorage } from '../utils/business/DrivingDataStorage'; import { InitTable } from '../utils/table/Operation'; import FileUtils from '../utils/FileUtils'; -import { lightUDPClient } from '../utils/UdpUtils'; export default class EntryAbility extends UIAbility { async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { @@ -33,7 +32,7 @@ export default class EntryAbility extends UIAbility { onDestroy() { const arrClose = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00] // TODO UDP缺失 - lightUDPClient.sendMsg(new Uint8Array(arrClose).buffer) + // lightUDPClient.sendMsg(new Uint8Array(arrClose).buffer) DrivingDataStorage.close() hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); } diff --git a/entry/src/main/ets/model/Judge.ets b/entry/src/main/ets/model/Judge.ets index 7a0f8809..e5c183c7 100644 --- a/entry/src/main/ets/model/Judge.ets +++ b/entry/src/main/ets/model/Judge.ets @@ -34,10 +34,10 @@ export interface AmplifyItem { /** UDP 通信参数 */ export interface UDPParamType { - id?: number; - list?: number[]; - carNo?: string; - placeId?: string; + id: number; + list: number[]; + carNo: string; + placeId: string; sendCallback?: () => void; } diff --git a/entry/src/main/ets/utils/Common.ets b/entry/src/main/ets/utils/Common.ets index 887d9d8d..e59ccdd3 100644 --- a/entry/src/main/ets/utils/Common.ets +++ b/entry/src/main/ets/utils/Common.ets @@ -74,11 +74,11 @@ export function ArrayToByteArray(array: number[]): Uint8Array { * @param len 字节数 * @returns 返回字节数组 */ -export function NumberToByteArray(number: number, len: number): number[] | undefined { +export function NumberToByteArray(number: number, len: number): number[] { let str = Math.floor(number).toString(2); if (str.length > len) { console.log('数据长度不对~~'); - return; + return []; } const byteString = FillZero(str, len); diff --git a/entry/src/main/ets/utils/Request.ets b/entry/src/main/ets/utils/Request.ets index 0d99c2ec..9725f8d6 100644 --- a/entry/src/main/ets/utils/Request.ets +++ b/entry/src/main/ets/utils/Request.ets @@ -35,6 +35,10 @@ function xmlToJSON(target: string): object { return transfer(result['_elements']) } +function setObj(target: Record, key: string, value: object) { + target[key] = value +} + function transfer(target: Array, name?: string): object { const result: object = new Object() @@ -44,7 +48,7 @@ function transfer(target: Array, name?: string): object { if (_elements === undefined) { return } - const jsonObj: object = result[el['_name']] + const jsonObj: Record = result[el['_name']] as Record const handleCommonArray = (obj: object) => { if (Array.isArray(jsonObj)) { result[el['_name']].push(obj) @@ -57,16 +61,18 @@ function transfer(target: Array, name?: string): object { if (jsonObj) { handleCommonArray(_elements[0]['_text']) } else { - jsonObj[el['_name']] = _elements[0]["_text"] + setObj(jsonObj, el['_name'], _elements[0]["_text"]) + // jsonObj[el['_name'] as string] = _elements[0]["_text"] as object } } else { if (jsonObj) { handleCommonArray(transfer(el['_elements'], el['_name'])) } else { - jsonObj[el['_name']] = transfer(el['_elements'], el['_name']) + setObj(jsonObj, el['_name'], transfer(el['_elements'], el['_name'])) + // jsonObj[el['_name'] as string] = transfer(el['_elements'], el['_name']) } } - } else if (el['_attributes']) { + } else if (el['_attributes'] && name) { result[name] = { value: el['_text'], attributes: el['__attributes'] @@ -82,7 +88,7 @@ interface CenterCodeResult { keystr?: string } -function dealCenterCode(message: string, isNewCenter: boolean): CenterCodeResult { +function dealCenterCode(message: string, isNewCenter: boolean = false): CenterCodeResult | undefined { if (isNewCenter) { const msg: object = JSON.parse(message); const result: object = msg?.['data'][0]?.result; @@ -107,9 +113,12 @@ function dealCenterCode(message: string, isNewCenter: boolean): CenterCodeResult } } } + return undefined } -export default function Request(options: RequestOption): Promise { +type RequestResult = Object | object | string | CenterCodeResult + +export default function Request(options: RequestOption): Promise { return new Promise((resolve, reject) => { const instance = http.createHttp() const baseURL = options.host || base @@ -123,11 +132,11 @@ export default function Request(options: RequestOption): Promise readTimeout: options.timeout || 30 * 1000 }).then(async data => { let result = options.xml ? xmlToJSON(data.result as string) : data.result - let resObj: object + let resObj: object = new Object() if (typeof result === 'string') { result = JSON.parse(result) } - if (result['Envelope']) { + if (result['Envelope'] !== undefined) { const msgXml: string = result['Envelope']['Body']['writeObjectOutResponse']['return']; resolve(dealCenterCode(msgXml, options.isNewCenter) as T) return diff --git a/entry/src/main/ets/utils/UdpUtils.ets b/entry/src/main/ets/utils/UdpUtils.ets index 6f5fcfa3..b847f43b 100644 --- a/entry/src/main/ets/utils/UdpUtils.ets +++ b/entry/src/main/ets/utils/UdpUtils.ets @@ -4,6 +4,7 @@ import { CarInfoType, EnvironmentConfigurationType } from '../model' import { UDPTag } from '../config' import { BusinessError } from '@ohos.base' import { FillZero, StringToBytes, StringToASCII } from './Common' +import { CenterUDPClientInstance } from './business/CenterUdpBusiness' interface MsgExt { id: number, @@ -36,19 +37,19 @@ export default class UdpClient { private localIpPort: string = '' private oppositeIp: string = '' private oppositeIpPort: string = '' - protected udp: socket.UDPSocket = null + protected udp: socket.UDPSocket | null = null private messageEvents: Array = [] private errorEvents: Array = [] - private dealMethod: DealMethod + private dealMethod?: DealMethod private bindEvent() { this.udp?.on("message", value => { - let result = this.dealMethod(value.message) + let result = this.dealMethod?.(value.message) this.messageEvents.forEach(cb => { cb(result) }) }) - this.udp.on("error", (err) => { + this.udp?.on("error", (err) => { console.log(UDPTag, 'udp error', JSON.stringify(err)) this.errorEvents.forEach(cb => { cb(err) @@ -57,8 +58,8 @@ export default class UdpClient { } - bindUdp(): Promise { - return this.udp.bind({ + bindUdp(): Promise | undefined { + return this.udp?.bind({ address: this.localIp, port: parseInt(this.localIpPort), family: 1 }) } @@ -70,10 +71,10 @@ export default class UdpClient { await this.bindUdp() } - close(): Promise { + close(): Promise | undefined { this.messageEvents = [] this.errorEvents = [] - this.dealMethod = null + this.dealMethod = undefined this.udp?.off("message") this.udp?.off("error") return this.udp?.close() @@ -83,8 +84,8 @@ export default class UdpClient { this.dealMethod = fun } - sendMsg(data: ArrayBuffer | string): Promise { - return this.udp.send({ + sendMsg(data: ArrayBuffer | string): Promise | undefined { + return this.udp?.send({ data, address: { address: this.oppositeIp, port: parseInt(this.oppositeIpPort), family: 1 @@ -134,179 +135,3 @@ export default class UdpClient { } } -// 获取后置机信号 -class ObjUdpClient extends UdpClient { - private static instance: ObjUdpClient - - constructor() { - super() - if (!ObjUdpClient.instance) { - ObjUdpClient.instance = this - } - return ObjUdpClient.instance - } - - async init(): Promise { - return new Promise((resolve, reject) => { - try { - let result: EnvironmentConfigurationType = - AppStorage.get("EnvironmentConfiguration") - if (result) { - this.create(result.udplocalIp, result.udplocalIpPort, result.udpOppositeIp, result.udpOppositeIpPort) - .then(resolve) - .catch(reject) - } - } catch (e) { - promptAction.showToast({ - message: "初始化obj udp失败" - }) - } - }) - - } -} - -// 中心 -class CenterUDPClient extends UdpClient { - private static instance: CenterUDPClient - - constructor() { - super() - if (!CenterUDPClient.instance) { - CenterUDPClient.instance = this - } - return CenterUDPClient.instance - } - - async init(): Promise { - return new Promise((resolve, reject) => { - try { - let result: EnvironmentConfigurationType = - AppStorage.get("EnvironmentConfiguration") - const carInfo: CarInfoType = AppStorage.get('carInfo') - if (result) { - this.create(result.udplocalIp, '8800', carInfo?.udpAddress, carInfo?.messagePort).then(resolve).catch(reject) - } - } catch (e) { - reject(e) - promptAction.showToast({ - message: "初始化中心 udp失败" - }) - } - }) - } -} - -// 顶灯 -class LightUDPClient extends UdpClient { - private static instance: LightUDPClient - - constructor() { - super() - if (!LightUDPClient.instance) { - LightUDPClient.instance = this - } - return LightUDPClient.instance - } - - async init(): Promise { - return new Promise((resolve, reject) => { - try { - let result: EnvironmentConfigurationType = - AppStorage.get("EnvironmentConfiguration") - if (result) { - this.create(result.udplocalIp, '55509', result.udpOppositeIp, result.udpOppositeIpPort) - .then(resolve) - .catch(reject) - } - } catch (e) { - reject(e) - promptAction.showToast({ - message: "初始化灯光 udp失败" - }) - } - }) - } -} - -// 评判udp -class JudgeUdpClient extends UdpClient { - private udpIndex = 0; - private currentUdpIndex = 0; - private static instance: JudgeUdpClient - - constructor() { - super() - if (!JudgeUdpClient.instance) { - JudgeUdpClient.instance = this - } - return JudgeUdpClient.instance - } - - async init(): Promise { - return new Promise((resolve, reject) => { - try { - let result: EnvironmentConfigurationType = - AppStorage.get("EnvironmentConfiguration") - const carInfo: CarInfoType = AppStorage.get('carInfo') - if (result) { - this.create(result.udplocalIp, '8080', carInfo.udpAddress, carInfo.hintPort).then(resolve).catch(reject) - setInterval(() => { - this.udpIndex += 1 - }, 1000) - } - } catch (e) { - reject(e) - } - }) - } - - send(bytes: number[]) { - const carInfo: CarInfoType = AppStorage.get('carInfo') - if (this.udpIndex > this.currentUdpIndex) { - this.sendMsgExt({ - id: 45, - list: bytes, - carNo: carInfo.carNo, - placeId: carInfo.examinationRoomId - }) - this.currentUdpIndex = this.udpIndex - } - } - - //申请远程扣分查询 - askKf(directives: number) { - const carInfo: CarInfoType = AppStorage.get('carInfo') - centerUDPClient.sendMsgExt({ - id: 35, - list: [directives], - carNo: carInfo.carNo, - placeId: carInfo.examinationRoomId, - }) - console.info('surenjun', `考车查询扣分项目内容,请求指令为:${directives}`) - } - - //确定远程扣分 - confirmKf(directives: number, code: number) { - const carInfo: CarInfoType = AppStorage.get('carInfo') - centerUDPClient.sendMsgExt({ - id: 37, - list: [directives, code], - carNo: carInfo.carNo, - placeId: carInfo.examinationRoomId - }) - console.info('surenjun', `考车发送确定扣分指令,指令为:${directives}`) - } -} - -// obj -export const objUDPClient = new ObjUdpClient() - -// 中心 -export const centerUDPClient = new CenterUDPClient() - -// 灯光 -export const lightUDPClient = new LightUDPClient() - -// 评判 -export const judgeUDPClient = new JudgeUdpClient() diff --git a/entry/src/main/ets/utils/business/CenterUdpBusiness.ets b/entry/src/main/ets/utils/business/CenterUdpBusiness.ets index c1d0d1ae..899a2e49 100644 --- a/entry/src/main/ets/utils/business/CenterUdpBusiness.ets +++ b/entry/src/main/ets/utils/business/CenterUdpBusiness.ets @@ -8,13 +8,13 @@ import { UDPTag } from '../../config'; // 中心UDP业务逻辑 class CenterUDPBusiness { private static instance: CenterUDPBusiness - private udp: UdpClient + private udp: UdpClient = new UdpClient() private timer: number = -1 private headLength: number = 9 private sendId: number = 0 constructor() { - if (!CenterUDPBusiness.instance) { + if (CenterUDPBusiness.instance) { CenterUDPBusiness.instance = this } return CenterUDPBusiness.instance @@ -45,14 +45,19 @@ class CenterUDPBusiness { let headJudge = this.setMessageExclusive(head); let bodyJudge = this.setMessageExclusive(params.list); let end = [13, 10]; - const arr: Array = [...head, ...headJudge, ...params.list, ...bodyJudge, ...end] + const arr: number[] = [] + head.forEach(item => arr.push(item)) + headJudge.forEach(item => arr.push(item)) + params.list?.forEach(item => arr.push(item)) + bodyJudge.forEach(item => arr.push(item)) + end.forEach(item => arr.push(item)) return this.array2Byte(arr).buffer } private array2Byte(array: Array) { const buf = new ArrayBuffer(array.length); const view = new Uint8Array(buf); - for (let i = 0; i != array.length; ++i) { + for (let i = 0; i = array.length; ++i) { view[i] = array[i] & 0xFF; } return view; @@ -62,7 +67,11 @@ class CenterUDPBusiness { let a = string2Bytes(Number(`${params.id}${fillZero(params.placeId, 3)}`), 2 * 8); let b = string2Bytes(Number(`${fillZero(params.carNo, 4)}${AppStorage.get('lshNo')}`), 4 * 8); let c = string2Bytes(params.list.length, 2 * 8); - return [...a, ...b, ...c]; + let result: number[] = [] + a?.forEach(item => result.push(item)) + b?.forEach(item => result.push(item)) + c?.forEach(item => result.push(item)) + return result; } private setMessageExclusive(tmpList: Array) { @@ -93,12 +102,12 @@ class CenterUDPBusiness { for (let i = 0; i < str.length; i++) { tmpList.push(NumberToByteArray(str.charCodeAt(i), 1 * 8)[0]) } - const carInfo = AppStorage.get('carInfo') + const carInfo = AppStorage.get('carInfo')! const data: UDPParamType = { id: 31, list: tmpList, - carNo: carInfo.carNo, - placeId: carInfo.examinationRoomId + carNo: carInfo.carNo!, + placeId: carInfo.examinationRoomId! } const param = this.setWholeMsg(data) this.udp.sendMsg(param); @@ -117,9 +126,9 @@ class CenterUDPBusiness { return new Promise((resolve, reject) => { try { let result: EnvironmentConfigurationType = - AppStorage.get("EnvironmentConfiguration") - const carInfo: CarInfoType = AppStorage.get('carInfo') - this.udp.create(result.udplocalIp, '8800', carInfo?.udpAddress, carInfo?.messagePort) + AppStorage.get("EnvironmentConfiguration")! + const carInfo: CarInfoType = AppStorage.get('carInfo')! + this.udp.create(result.udplocalIp!, '8800', carInfo.udpAddress!, carInfo.messagePort!) .then(resolve) .catch(reject) this.udp.setDealMethod(this.dealMsg) diff --git a/entry/src/main/ets/utils/business/DrivingDataStorage.ets b/entry/src/main/ets/utils/business/DrivingDataStorage.ets index 2375cfb0..de8b7eb7 100644 --- a/entry/src/main/ets/utils/business/DrivingDataStorage.ets +++ b/entry/src/main/ets/utils/business/DrivingDataStorage.ets @@ -24,7 +24,7 @@ class drivingDataStorage { this.totalTime = 0; this.fd = await this.fileUtil!.editFile( `${folderPath}/${this.date}.txt`, - `程序启动时间:${this.time} 累计行驶距离:${this.totalDistance}m 累计运行时常:${this.totalTime}min`) + `程序启动时间:${this.time} 累计行驶距离:${this.totalDistance}m 累计运行时常:${this.totalTime}min`)! return folderPath } diff --git a/entry/src/main/ets/utils/business/JudgeUdpBusiness.ets b/entry/src/main/ets/utils/business/JudgeUdpBusiness.ets index fa0f2856..74488dcd 100644 --- a/entry/src/main/ets/utils/business/JudgeUdpBusiness.ets +++ b/entry/src/main/ets/utils/business/JudgeUdpBusiness.ets @@ -28,7 +28,7 @@ function string2Bytes(num: number | string, len: number) { let str = (Math.floor(Number(num))).toString(2); if (str.length > len) { console.log('数据长度不对~~'); - return + return [] } let byteString = FillZero(str, len); @@ -48,7 +48,7 @@ function string2Bytes(num: number | string, len: number) { class JudgeUdpBusiness { private static instance: JudgeUdpBusiness - private udp: UdpClient + private udp: UdpClient = new UdpClient() private currentUdpIndex = 0; public udpIndex = 0; @@ -81,7 +81,11 @@ class JudgeUdpBusiness { let a = string2Bytes(Number(`${params.id}${fillZero(params.placeId, 3)}`), 2 * 8); let b = string2Bytes(Number(`${fillZero(params.carNo, 4)}${AppStorage.get('lshNo')}`), 4 * 8); let c = string2Bytes(params.list.length, 2 * 8); - return [...a, ...b, ...c]; + let result: number[] = [] + a?.forEach(item => result.push(item)) + b?.forEach(item => result.push(item)) + c?.forEach(item => result.push(item)) + return result; } private setMessageExclusive(tmpList: Array) { @@ -231,7 +235,7 @@ class JudgeUdpBusiness { } async getMessageHeartbeat(msg: string): Promise { - const carInfo: CarInfoType = AppStorage.get('carInfo') + const carInfo: CarInfoType = AppStorage.get('carInfo')! let gpsDigit = JudgeConfig.fourInOneScreen.gpsDigit const asclshArr = StringToASCII(FillZero( AppStorage.get("singlePlay") @@ -240,7 +244,7 @@ class JudgeUdpBusiness { 13)); const ascksyhArr = StringToASCII(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]) => { @@ -328,13 +332,13 @@ class JudgeUdpBusiness { } sendData(bytes: number[]) { - const carInfo: CarInfoType = AppStorage.get('carInfo') + 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: carInfo.carNo!, + placeId: carInfo.examinationRoomId! }) this.currentUdpIndex = this.udpIndex } @@ -342,24 +346,24 @@ class JudgeUdpBusiness { //申请远程扣分查询 askKf(directives: number) { - const carInfo: CarInfoType = AppStorage.get('carInfo') + const carInfo: CarInfoType = AppStorage.get('carInfo')! CenterUDPClientInstance.sendData({ id: 35, list: [directives], - carNo: carInfo.carNo, - placeId: carInfo.examinationRoomId, + carNo: carInfo.carNo!, + placeId: carInfo.examinationRoomId!, }) console.info('surenjun', `考车查询扣分项目内容,请求指令为:${directives}`) } //确定远程扣分 confirmKf(directives: number, code: number) { - const carInfo: CarInfoType = AppStorage.get('carInfo') + const carInfo: CarInfoType = AppStorage.get('carInfo')! CenterUDPClientInstance.sendData({ id: 37, list: [directives, code], - carNo: carInfo.carNo, - placeId: carInfo.examinationRoomId + carNo: carInfo.carNo!, + placeId: carInfo.examinationRoomId! }) console.info('surenjun', `考车发送确定扣分指令,指令为:${directives}`) } @@ -368,9 +372,9 @@ class JudgeUdpBusiness { 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) + AppStorage.get("EnvironmentConfiguration")! + const carInfo: CarInfoType = AppStorage.get('carInfo')! + this.udp.create(result.udplocalIp!, '8080', carInfo.udpAddress!, carInfo.hintPort!).then(resolve).catch(reject) ObtainUdpBusinessInstance.onMsg(async (msg: string) => { let prevJd = 0, preWd = 0 @@ -378,8 +382,8 @@ class JudgeUdpBusiness { if (stashArr[0] != '#DN_GD') { return } - const udpIndex = AppStorage.get("udpIndex"); - const isJudge = AppStorage.get("isJudge"); + const udpIndex = AppStorage.get("udpIndex")!; + const isJudge = AppStorage.get("isJudge")!; if (udpIndex % 5 === 0 && !isJudge) { const bytes = await this.getMessageHeartbeat(msg); const msgArr: string[] = msg.split(','); diff --git a/entry/src/main/ets/utils/business/UdpEvent.ets b/entry/src/main/ets/utils/business/UdpEvent.ets index 7e6949fc..fc9cd6db 100644 --- a/entry/src/main/ets/utils/business/UdpEvent.ets +++ b/entry/src/main/ets/utils/business/UdpEvent.ets @@ -1,5 +1,5 @@ import emitter from '@ohos.events.emitter'; -import { judgeUDPClient } from '../UdpUtils'; +import { JudgeUdpBusinessInstance } from './JudgeUdpBusiness'; enum EventId { //远程扣分处理 @@ -21,22 +21,22 @@ class JudgeEmitter { } private kfContent: Function = () => { } - private directives: string + private directives: string = '' //监听开始考试 - public onBeginExam(callBack?: Function) { + public onBeginExam(callBack: Function) { console.info('surenjun', '注册远程开始考试事件') this.beginExamCallBack = callBack } //监听结束考试 - public onEndExam(callBack?: Function) { + public onEndExam(callBack: Function) { console.info('surenjun', '注册远程结束考试事件') this.endExamCallBack = callBack } //监听扣分处理 - public onKfExam(callBack?: Function) { + public onKfExam(callBack: Function) { console.info('surenjun', '注册远程扣分考试事件') this.kfContent = callBack } @@ -80,7 +80,7 @@ class JudgeEmitter { //监听扣分指令 public sendOnKf(directives: string) { this.directives = directives - judgeUDPClient.askKf(Number(directives)) + JudgeUdpBusinessInstance.askKf(Number(directives)) } // 获取扣分项目编号