fix: TCP UDP中心优化带阿米
This commit is contained in:
		
							parent
							
								
									0f95021737
								
							
						
					
					
						commit
						46244ac980
					
				| @ -3,7 +3,7 @@ import { CarInfoType, CenterCallBackMsgType, EnvironmentConfigurationType, UDPPa | |||||||
| export interface WorkerMessage { | export interface WorkerMessage { | ||||||
|   config: EnvironmentConfigurationType; |   config: EnvironmentConfigurationType; | ||||||
|   carInfo: CarInfoType; |   carInfo: CarInfoType; | ||||||
|   udpParam?: UDPParamType; |   centerUdpParam?: UDPParamType; | ||||||
|   otherMessage: OtherMessageType; |   otherMessage: OtherMessageType; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -139,25 +139,25 @@ async function obtainSerialNumber(data: string) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| //设置流水号 | //设置流水号 | ||||||
| export async function SetSerialNumber() { | // export async function SetSerialNumber() { | ||||||
|   const data = AppStorage.get<string>("liushuiNo") || ""; | //   const data = AppStorage.get<string>("liushuiNo") || ""; | ||||||
|   const serialNumberTime = AppStorage.get<string>("liushuiDate"); | //   const serialNumberTime = AppStorage.get<string>("liushuiDate"); | ||||||
|   obtainSerialNumber(data); | //   obtainSerialNumber(data); | ||||||
|   const date = dayTs().format('YYYY-MM-DD HH:mm:ss'); | //   const date = dayTs().format('YYYY-MM-DD HH:mm:ss'); | ||||||
| 
 | // | ||||||
|   if (data && serialNumberTime) { | //   if (data && serialNumberTime) { | ||||||
|     const diffDays = dayTs().diff(serialNumberTime, 'day'); | //     const diffDays = dayTs().diff(serialNumberTime, 'day'); | ||||||
|     if (diffDays === 0) { | //     if (diffDays === 0) { | ||||||
|       AppStorage.setOrCreate<string>('liushuiDate', date); | //       AppStorage.setOrCreate<string>('liushuiDate', date); | ||||||
|       AppStorage.setOrCreate<string>('liushuiNo', '0'); | //       AppStorage.setOrCreate<string>('liushuiNo', '0'); | ||||||
|     } else { | //     } else { | ||||||
|       AppStorage.setOrCreate<string>('liushuiNo', (Number(data) + 1).toString()); | //       AppStorage.setOrCreate<string>('liushuiNo', (Number(data) + 1).toString()); | ||||||
|     } | //     } | ||||||
|   } else { | //   } else { | ||||||
|     AppStorage.setOrCreate('liushuiNo', '0'); | //     AppStorage.setOrCreate('liushuiNo', '0'); | ||||||
|     AppStorage.setOrCreate('liushuiDate', date); | //     AppStorage.setOrCreate('liushuiDate', date); | ||||||
|   } | //   } | ||||||
| } | // } | ||||||
| 
 | 
 | ||||||
| export function CreateAlbum(fileHelper: FileHelper) { | export function CreateAlbum(fileHelper: FileHelper) { | ||||||
|   const date = dayTs().format("YYYY-MM-DD") |   const date = dayTs().format("YYYY-MM-DD") | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ import { fillZero, string2Bytes } from '../../pages/judgeSDK/utils/Common'; | |||||||
| import { NumberToByteArray } from '../Common'; | import { NumberToByteArray } from '../Common'; | ||||||
| import UdpClient from '../UdpUtils'; | import UdpClient from '../UdpUtils'; | ||||||
| import { UDPTag } from '../../config'; | import { UDPTag } from '../../config'; | ||||||
| import { SetSerialNumber } from '../../pages/Index/utils'; | import { SerialNumberInstance } from '../SerialNumber'; | ||||||
| 
 | 
 | ||||||
| // 中心UDP业务逻辑 | // 中心UDP业务逻辑 | ||||||
| class CenterUDPBusiness { | class CenterUDPBusiness { | ||||||
| @ -20,8 +20,11 @@ class CenterUDPBusiness { | |||||||
|   private headLength: number = 9 |   private headLength: number = 9 | ||||||
|   private sendId: number = 0 |   private sendId: number = 0 | ||||||
|   private carInfo: CarInfoType = {} |   private carInfo: CarInfoType = {} | ||||||
|  |   // 指令 | ||||||
|   private signNum: number = -1 |   private signNum: number = -1 | ||||||
|  |   // 状态 | ||||||
|   private statue: string = "" |   private statue: string = "" | ||||||
|  |   // 学员流水号 | ||||||
|   private lsh: string = "" |   private lsh: string = "" | ||||||
| 
 | 
 | ||||||
|   constructor() { |   constructor() { | ||||||
| @ -41,11 +44,14 @@ class CenterUDPBusiness { | |||||||
|     console.log("心跳") |     console.log("心跳") | ||||||
|     // 组装消息,一秒发送一次 |     // 组装消息,一秒发送一次 | ||||||
|     this.timer = setInterval(() => { |     this.timer = setInterval(() => { | ||||||
|       SetSerialNumber() |       // 生成流水号 | ||||||
|  |       SerialNumberInstance.generate() | ||||||
|  |       // SetSerialNumber() | ||||||
|       const arr = [this.signNum || 0, this.statue || 1] |       const arr = [this.signNum || 0, this.statue || 1] | ||||||
|       let tmpList: number[] = []; |       let tmpList: number[] = []; | ||||||
|       tmpList.push(NumberToByteArray(Number(arr[0]), 1 * 8)[0]) |       tmpList.push(NumberToByteArray(Number(arr[0]), 1 * 8)[0]) | ||||||
|       tmpList.push(NumberToByteArray(Number(arr[1]), 1 * 8)[0]) |       tmpList.push(NumberToByteArray(Number(arr[1]), 1 * 8)[0]) | ||||||
|  |       // 学员流水号 | ||||||
|       const str = this.lsh || '0000000000000' |       const str = this.lsh || '0000000000000' | ||||||
|       for (let i = 0; i < str.length; i++) { |       for (let i = 0; i < str.length; i++) { | ||||||
|         tmpList.push(NumberToByteArray(str.charCodeAt(i), 1 * 8)[0]) |         tmpList.push(NumberToByteArray(str.charCodeAt(i), 1 * 8)[0]) | ||||||
| @ -70,12 +76,15 @@ class CenterUDPBusiness { | |||||||
|     this.udp.offMsg(cb) |     this.udp.offMsg(cb) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   changeKeyValue(value: OtherMessageType) { | ||||||
|  |     value.signNum && (this.signNum = value.signNum) | ||||||
|  |     value.lsh && (this.lsh = value.lsh) | ||||||
|  |     value.statue && (this.statue = value.statue) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   // 初始化 |   // 初始化 | ||||||
|   async init(config: EnvironmentConfigurationType, carInfo: CarInfoType, otherMessage: OtherMessageType) { |   async init(config: EnvironmentConfigurationType, carInfo: CarInfoType, otherMessage: OtherMessageType) { | ||||||
|     try { |     try { | ||||||
|       // let result: EnvironmentConfigurationType = |  | ||||||
|       //   AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")! |  | ||||||
|       // const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')! |  | ||||||
|       this.signNum = otherMessage.signNum || 0 |       this.signNum = otherMessage.signNum || 0 | ||||||
|       this.statue = otherMessage.statue || '1' |       this.statue = otherMessage.statue || '1' | ||||||
|       this.lsh = otherMessage.lsh || '0000000000000' |       this.lsh = otherMessage.lsh || '0000000000000' | ||||||
| @ -137,8 +146,10 @@ class CenterUDPBusiness { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private setMsgHead(params: UDPParamType) { |   private setMsgHead(params: UDPParamType) { | ||||||
|  |     // 自增流水号 | ||||||
|  |     const lshNo = SerialNumberInstance.get() | ||||||
|     let a = string2Bytes(Number(`${params.id}${fillZero(params.placeId, 3)}`), 2 * 8); |     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 b = string2Bytes(Number(`${fillZero(params.carNo, 4)}${lshNo}`), 4 * 8); | ||||||
|     let c = string2Bytes(params.list.length, 2 * 8); |     let c = string2Bytes(params.list.length, 2 * 8); | ||||||
|     let result: number[] = [] |     let result: number[] = [] | ||||||
|     a?.forEach(item => result.push(item)) |     a?.forEach(item => result.push(item)) | ||||||
|  | |||||||
| @ -1,13 +1,14 @@ | |||||||
| import { CarInfoType, EnvironmentConfigurationType, Gps, Sensor, UDPParamType } from '../../model' | import { CarInfoType, EnvironmentConfigurationType, Gps, Sensor, UDPParamType } from '../../model'; | ||||||
| import { testKm2Items, testKm3Items } from '../../pages/judgeSDK/dataTest'; | import { testKm2Items, testKm3Items } from '../../pages/judgeSDK/dataTest'; | ||||||
| import { fillZero, } from '../../pages/judgeSDK/utils/Common'; | import { fillZero, } from '../../pages/judgeSDK/utils/Common'; | ||||||
| import { JudgeConfig } from "../../config"; | import { JudgeConfig } from '../../config'; | ||||||
| import { FillZero, StringToASCII } from '../Common'; | import { FillZero, StringToASCII } from '../Common'; | ||||||
| import UdpClient from '../UdpUtils' | import UdpClient from '../UdpUtils'; | ||||||
| import { CenterUDPBusinessInstance } from './CenterUdpBusiness'; | import { CenterUDPBusinessInstance } from './CenterUdpBusiness'; | ||||||
| import { ObtainUdpBusinessInstance } from './ObtainUdpBusiness'; | import { ObtainUdpBusinessInstance } from './ObtainUdpBusiness'; | ||||||
| import systemTime from '@ohos.systemDateTime'; | import systemTime from '@ohos.systemDateTime'; | ||||||
| import { examCalcGpsDistance } from '../../pages/judgeSDK/api'; | import { examCalcGpsDistance } from '../../pages/judgeSDK/api'; | ||||||
|  | import { SerialNumberInstance } from '../SerialNumber'; | ||||||
| 
 | 
 | ||||||
| interface PLCDataType { | interface PLCDataType { | ||||||
|   sensor: Sensor, |   sensor: Sensor, | ||||||
| @ -48,9 +49,9 @@ function string2Bytes(num: number | string, len: number) { | |||||||
| 
 | 
 | ||||||
| class JudgeUdpBusiness { | class JudgeUdpBusiness { | ||||||
|   private static instance: JudgeUdpBusiness |   private static instance: JudgeUdpBusiness | ||||||
|  |   public udpIndex = 0; | ||||||
|   private udp: UdpClient = new UdpClient() |   private udp: UdpClient = new UdpClient() | ||||||
|   private currentUdpIndex = 0; |   private currentUdpIndex = 0; | ||||||
|   public udpIndex = 0; |  | ||||||
| 
 | 
 | ||||||
|   constructor() { |   constructor() { | ||||||
|     if (!JudgeUdpBusiness.instance) { |     if (!JudgeUdpBusiness.instance) { | ||||||
| @ -59,181 +60,6 @@ class JudgeUdpBusiness { | |||||||
|     return JudgeUdpBusiness.instance |     return JudgeUdpBusiness.instance | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private setWholeMsg(params: UDPParamType) { |  | ||||||
|     let head: Array<number> = this.setMsgHead(params); |  | ||||||
|     let headJudge = this.setMessageExclusive(head); |  | ||||||
|     let bodyJudge = this.setMessageExclusive(params.list); |  | ||||||
|     let end = [13, 10]; |  | ||||||
|     const arr: Array<number> = [...head, ...headJudge, ...params.list, ...bodyJudge, ...end] |  | ||||||
|     return this.array2Byte(arr).buffer |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   private array2Byte(array: Array<number>) { |  | ||||||
|     const buf = new ArrayBuffer(array.length); |  | ||||||
|     const view = new Uint8Array(buf); |  | ||||||
|     for (let i = 0; i != array.length; ++i) { |  | ||||||
|       view[i] = array[i] & 0xFF; |  | ||||||
|     } |  | ||||||
|     return view; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   private setMsgHead(params: UDPParamType) { |  | ||||||
|     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); |  | ||||||
|     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<number>) { |  | ||||||
|     let result: number = tmpList[0]; |  | ||||||
|     for (let i = 1; i < tmpList.length; i++) { |  | ||||||
|       result = result ^ tmpList[i] |  | ||||||
|     } |  | ||||||
|     return [result]; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   private convertGpsCoord2(num: number) { |  | ||||||
|     const tempNum = Math.floor(num); |  | ||||||
|     const du = Math.floor(tempNum / 100); |  | ||||||
|     const fen = tempNum % 100 + num - tempNum; |  | ||||||
|     return du + fen / 60 |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // 中心plc实时信号转换成字节 |  | ||||||
|   private getTranslateSignals(tempItems: number[]) { |  | ||||||
|     const len = Math.floor(tempItems.length / 8); |  | ||||||
|     const arr: string[] = []; |  | ||||||
|     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]) |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // 中心所有项目转换 |  | ||||||
|   private getTranslateProject(): string[] { |  | ||||||
|     const examSubject = AppStorage.get<string>("examSubject"); |  | ||||||
|     const tempItems: ProjectItemType[] = |  | ||||||
|       (examSubject === '2' ? testKm2Items : testKm3Items).map((code: ProjectDataType) => { |  | ||||||
|         let data: ProjectItemType = { |  | ||||||
|           code, |  | ||||||
|           status: '0' |  | ||||||
|         } |  | ||||||
|         return data |  | ||||||
|       }) |  | ||||||
|     const arr: string[] = []; |  | ||||||
|     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']) |  | ||||||
|       } |  | ||||||
| 
 |  | ||||||
|       arr.push(tempArr.join('')); |  | ||||||
|     } |  | ||||||
|     return arr |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // plc数据转换成对象 |  | ||||||
|   private async getPlcData(plc: string): Promise<PLCDataType> { |  | ||||||
|     const time = await systemTime.getCurrentTime() |  | ||||||
|     let origin = plc.split(",") |  | ||||||
|     let p = origin.map(item => Number(item)) |  | ||||||
|     let sensor: 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: Number(origin[27].split('_')[0]), |  | ||||||
|       //累计脉冲   溜车脉冲   超声波左后     超声波右后     超声波右前     超声波左前    座椅    仪表盘   后视镜   倒车镜   光照  雨量 |  | ||||||
|       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, |  | ||||||
|       yy: 0, |  | ||||||
|       sde: 0, |  | ||||||
|       xhd: '', |  | ||||||
|       rmndg: 0, |  | ||||||
|       wav: 0, |  | ||||||
|       mndg: '' |  | ||||||
|     } |  | ||||||
|     let gps: Gps = { |  | ||||||
|       bklx: p[56], |  | ||||||
|       dwzt: p[83], |  | ||||||
|       jdzt: Number(origin[92].split('-')[0]), |  | ||||||
|       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: Number(origin[92].split('-')[1]) |  | ||||||
|     } |  | ||||||
|     return { |  | ||||||
|       sensor, |  | ||||||
|       gps, |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   private getDwStatusType(dw: number) { |  | ||||||
|     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] |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   async getMessageHeartbeat(msg: string): Promise<number[]> { |   async getMessageHeartbeat(msg: string): Promise<number[]> { | ||||||
|     const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')! |     const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')! | ||||||
|     let gpsDigit = JudgeConfig.fourInOneScreen.gpsDigit |     let gpsDigit = JudgeConfig.fourInOneScreen.gpsDigit | ||||||
| @ -412,6 +238,182 @@ class JudgeUdpBusiness { | |||||||
|       } |       } | ||||||
|     }) |     }) | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   private setWholeMsg(params: UDPParamType) { | ||||||
|  |     let head: Array<number> = this.setMsgHead(params); | ||||||
|  |     let headJudge = this.setMessageExclusive(head); | ||||||
|  |     let bodyJudge = this.setMessageExclusive(params.list); | ||||||
|  |     let end = [13, 10]; | ||||||
|  |     const arr: Array<number> = [...head, ...headJudge, ...params.list, ...bodyJudge, ...end] | ||||||
|  |     return this.array2Byte(arr).buffer | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   private array2Byte(array: Array<number>) { | ||||||
|  |     const buf = new ArrayBuffer(array.length); | ||||||
|  |     const view = new Uint8Array(buf); | ||||||
|  |     for (let i = 0; i != array.length; ++i) { | ||||||
|  |       view[i] = array[i] & 0xFF; | ||||||
|  |     } | ||||||
|  |     return view; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   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 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<number>) { | ||||||
|  |     let result: number = tmpList[0]; | ||||||
|  |     for (let i = 1; i < tmpList.length; i++) { | ||||||
|  |       result = result ^ tmpList[i] | ||||||
|  |     } | ||||||
|  |     return [result]; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   private convertGpsCoord2(num: number) { | ||||||
|  |     const tempNum = Math.floor(num); | ||||||
|  |     const du = Math.floor(tempNum / 100); | ||||||
|  |     const fen = tempNum % 100 + num - tempNum; | ||||||
|  |     return du + fen / 60 | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // 中心plc实时信号转换成字节 | ||||||
|  |   private getTranslateSignals(tempItems: number[]) { | ||||||
|  |     const len = Math.floor(tempItems.length / 8); | ||||||
|  |     const arr: string[] = []; | ||||||
|  |     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]) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // 中心所有项目转换 | ||||||
|  |   private getTranslateProject(): string[] { | ||||||
|  |     const examSubject = AppStorage.get<string>("examSubject"); | ||||||
|  |     const tempItems: ProjectItemType[] = | ||||||
|  |       (examSubject === '2' ? testKm2Items : testKm3Items).map((code: ProjectDataType) => { | ||||||
|  |         let data: ProjectItemType = { | ||||||
|  |           code, | ||||||
|  |           status: '0' | ||||||
|  |         } | ||||||
|  |         return data | ||||||
|  |       }) | ||||||
|  |     const arr: string[] = []; | ||||||
|  |     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']) | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       arr.push(tempArr.join('')); | ||||||
|  |     } | ||||||
|  |     return arr | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // plc数据转换成对象 | ||||||
|  |   private async getPlcData(plc: string): Promise<PLCDataType> { | ||||||
|  |     const time = await systemTime.getCurrentTime() | ||||||
|  |     let origin = plc.split(",") | ||||||
|  |     let p = origin.map(item => Number(item)) | ||||||
|  |     let sensor: 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: Number(origin[27].split('_')[0]), | ||||||
|  |       //累计脉冲   溜车脉冲   超声波左后     超声波右后     超声波右前     超声波左前    座椅    仪表盘   后视镜   倒车镜   光照  雨量 | ||||||
|  |       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, | ||||||
|  |       yy: 0, | ||||||
|  |       sde: 0, | ||||||
|  |       xhd: '', | ||||||
|  |       rmndg: 0, | ||||||
|  |       wav: 0, | ||||||
|  |       mndg: '' | ||||||
|  |     } | ||||||
|  |     let gps: Gps = { | ||||||
|  |       bklx: p[56], | ||||||
|  |       dwzt: p[83], | ||||||
|  |       jdzt: Number(origin[92].split('-')[0]), | ||||||
|  |       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: Number(origin[92].split('-')[1]) | ||||||
|  |     } | ||||||
|  |     return { | ||||||
|  |       sensor, | ||||||
|  |       gps, | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   private getDwStatusType(dw: number) { | ||||||
|  |     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] | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export const JudgeUdpBusinessInstance = new JudgeUdpBusiness() | export const JudgeUdpBusinessInstance = new JudgeUdpBusiness() | ||||||
| @ -1,83 +1,84 @@ | |||||||
| // 处理worker线程的消息tcp拿差分改正数,udp给后置机 | // 处理worker线程的消息tcp拿差分改正数,udp给后置机 | ||||||
| import worker, { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope } from '@ohos.worker'; | import worker, { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope } from '@ohos.worker'; | ||||||
| import { WorkerTag } from '../config'; | import { WorkerTag } from '../config'; | ||||||
| import { WorkerMessage } from '../model'; | import { CenterCallBackMsgType, WorkerBackMessage, WorkerMessage } from '../model'; | ||||||
| import { CenterUDPBusinessInstance } from '../utils/business/CenterUdpBusiness'; | import { CenterUDPBusinessInstance } from '../utils/business/CenterUdpBusiness'; | ||||||
| import { DifferentialSignal } from '../utils/business/DifferentialSignal'; | import { DifferentialSignal } from '../utils/business/DifferentialSignal'; | ||||||
| import { ObtainUdpBusinessInstance } from '../utils/business/ObtainUdpBusiness'; | import { ObtainUdpBusinessInstance } from '../utils/business/ObtainUdpBusiness'; | ||||||
| 
 | 
 | ||||||
| const workerPort: ThreadWorkerGlobalScope = worker.workerPort; | const workerPort: ThreadWorkerGlobalScope = worker.workerPort; | ||||||
| 
 | 
 | ||||||
| /** | 
 | ||||||
|  * Defines the event handler to be called when the worker thread receives a message sent by the host thread. |  | ||||||
|  * The event handler is executed in the worker thread. |  | ||||||
|  * |  | ||||||
|  * @param e message data |  | ||||||
|  */ |  | ||||||
| workerPort.onmessage = (e: MessageEvents) => { | workerPort.onmessage = (e: MessageEvents) => { | ||||||
|   console.log(WorkerTag, `Worker received message: ${e.data}`); |   console.log(WorkerTag, `Worker received message: ${e.data}`); | ||||||
|   const result: WorkerMessage = JSON.parse(e.data); |   const result: WorkerMessage = JSON.parse(e.data); | ||||||
|   // 初始化TCP |   initFn(result) | ||||||
|  |   // TODO 内部已经实现,外部未实现 | ||||||
|  |   // 如果外部有这个值就去更新中心这个值 | ||||||
|  |   if (result.otherMessage) { | ||||||
|  |     CenterUDPBusinessInstance.changeKeyValue(result.otherMessage) | ||||||
|  |   } | ||||||
|  |   // 如果外部有这个消息进来就开始给中心发送,暂时看不需要 | ||||||
|  |   // if (result.centerUdpParam) { | ||||||
|  |   //   CenterUDPBusinessInstance.sendData(result.centerUdpParam); | ||||||
|  |   // } | ||||||
|  |   getDataFn() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // 初始化函数 | ||||||
|  | function initFn(result: WorkerMessage) { | ||||||
|  |   // 初始化差分校正TCP | ||||||
|   DifferentialSignal.init(result.config); |   DifferentialSignal.init(result.config); | ||||||
|  |   // 定时发送TCP消息 | ||||||
|   DifferentialSignal.sendData() |   DifferentialSignal.sendData() | ||||||
|   // 初始化后置机UDP |   // 初始化后置机UDP | ||||||
|   // ObtainUdpBusinessInstance.init(result.config) |   ObtainUdpBusinessInstance.init(result.config) | ||||||
|   // 初始化中心UDP |   // 初始化中心UDP | ||||||
|   CenterUDPBusinessInstance.init(result.config, result.carInfo, result.otherMessage) |   CenterUDPBusinessInstance.init(result.config, result.carInfo, result.otherMessage) | ||||||
|   // 中心心跳 |   // 中心心跳 | ||||||
|   CenterUDPBusinessInstance.startHeartBeat() |   CenterUDPBusinessInstance.startHeartBeat() | ||||||
|   // 如果外部有这个消息进来就开始给中心发送 | } | ||||||
|   // if (result.udpParam) { | 
 | ||||||
|   //   CenterUDPBusinessInstance.sendData(result.udpParam); | function getDataFn() { | ||||||
|   // } |  | ||||||
|   // 获取TCP差分改正数信号 |   // 获取TCP差分改正数信号 | ||||||
|   DifferentialSignal.getData((data: ArrayBuffer) => { |   DifferentialSignal.getData((data: ArrayBuffer) => { | ||||||
|     console.log(WorkerTag, "Received differential signal data:", data.byteLength, "bytes") |     console.log(WorkerTag, "Received differential signal data:", data.byteLength, "bytes") | ||||||
|     // TCP拿到差分改正数发给后置机 |     // TCP拿到差分改正数发给后置机 | ||||||
|     ObtainUdpBusinessInstance.sendData(data) |     ObtainUdpBusinessInstance.sendData(data) | ||||||
|   }) |   }) | ||||||
|   // 监听PLC和GPS信号 |   // 后置机回执PLC和GPS | ||||||
|   // ObtainUdpBusinessInstance.onMsg((data: string) => { |   ObtainUdpBusinessInstance.onMsg((data: string) => { | ||||||
|   //   // TODO |     // TODO | ||||||
|   //   // 需要观察 |     // 需要观察 | ||||||
|   //   console.log(WorkerTag, "后置机消息", data) |     console.log(WorkerTag, "后置机消息", data) | ||||||
|   //   // 收到后置机消息传出去提供给业务,data应该是个string |     // 收到后置机消息传出去提供给业务,data应该是个string | ||||||
|   //   workerPort.postMessage( |     workerPort.postMessage( | ||||||
|   //     JSON.stringify({ |       JSON.stringify({ | ||||||
|   //       type: 'obtainUdpData', |         type: 'obtainUdpData', | ||||||
|   //       data: data |         data: data | ||||||
|   //     } as WorkerBackMessage)) |       } as WorkerBackMessage)) | ||||||
|   // }) |   }) | ||||||
|   // CenterUDPBusinessInstance.onMsg((data: CenterCallBackMsgType) => { |   // 中心UDP回执消息 | ||||||
|   //   // TODO |   CenterUDPBusinessInstance.onMsg((data: CenterCallBackMsgType) => { | ||||||
|   //   // 需要观察 |     // TODO | ||||||
|   //   console.log(WorkerTag, "中心消息", data) |     // 需要观察 | ||||||
|   //   //   收到中心指令发送出去 |     console.log(WorkerTag, "中心消息", data) | ||||||
|   //   workerPort.postMessage( |     //   收到中心指令发送出去 | ||||||
|   //     JSON.stringify({ |     workerPort.postMessage( | ||||||
|   //       type: 'centerUdpData', |       JSON.stringify({ | ||||||
|   //       data: data |         type: 'centerUdpData', | ||||||
|   //     } as WorkerBackMessage) |         data: data | ||||||
|   //   ) |       } as WorkerBackMessage) | ||||||
|   // }) |     ) | ||||||
|  |   }) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | 
 | ||||||
|  * Defines the event handler to be called when the worker receives a message that cannot be deserialized. |  | ||||||
|  * The event handler is executed in the worker thread. |  | ||||||
|  * |  | ||||||
|  * @param e message data |  | ||||||
|  */ |  | ||||||
| workerPort.onmessageerror = (e: MessageEvents) => { | workerPort.onmessageerror = (e: MessageEvents) => { | ||||||
|   console.log(WorkerTag, `Worker received message error: ${e.data}`); |   console.log(WorkerTag, `Worker received message error: ${e.data}`); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | 
 | ||||||
|  * Defines the event handler to be called when an exception occurs during worker execution. |  | ||||||
|  * The event handler is executed in the worker thread. |  | ||||||
|  * |  | ||||||
|  * @param e error message |  | ||||||
|  */ |  | ||||||
| workerPort.onerror = (e: ErrorEvent) => { | workerPort.onerror = (e: ErrorEvent) => { | ||||||
|   console.log(WorkerTag, `Worker error: ${e.message}, filename: ${e.filename}, lineno: ${e.lineno}, colno: ${e.colno}`) |   console.log(WorkerTag, `Worker error: ${e.message}, filename: ${e.filename}, lineno: ${e.lineno}, colno: ${e.colno}`) | ||||||
| } | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user