fix: 完善开始考试之前的各项检测逻辑
This commit is contained in:
		
							parent
							
								
									6a463d38ee
								
							
						
					
					
						commit
						2d912d4ea3
					
				| @ -27,3 +27,10 @@ export interface QKParamType { | |||||||
|   carNo: string; |   carNo: string; | ||||||
|   placeId: string; |   placeId: string; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | export interface CheckItemType { | ||||||
|  |   index: string; | ||||||
|  |   checkFn: (msgArr: number[]) => boolean; | ||||||
|  |   audio: string; | ||||||
|  |   message: string; | ||||||
|  | } | ||||||
| @ -35,13 +35,13 @@ import { | |||||||
| } from '../model'; | } from '../model'; | ||||||
| import { BusinessError } from '@ohos.base'; | import { BusinessError } from '@ohos.base'; | ||||||
| import { GetSyncData, SqlInsertTable } from '../utils/table/Operation'; | import { GetSyncData, SqlInsertTable } from '../utils/table/Operation'; | ||||||
| import { GetCurrentUserKeyValue, InitializeExamProcessData } from './UserInfo/utils'; | import { CheckSignal, GetCurrentUserKeyValue, InitializeExamProcessData } from './UserInfo/utils'; | ||||||
| import dayTs from '../utils/Date'; | import dayTs from '../utils/Date'; | ||||||
| import { GetCurrentTime, NumberToByteArray } from '../utils/Common'; | import { GetCurrentTime, NumberToByteArray } from '../utils/Common'; | ||||||
| import DB from '../utils/DbSql'; | import DB from '../utils/DbSql'; | ||||||
| import { CenterUDPBusinessInstance } from '../utils/business/CenterUdpBusiness'; | import { CenterUDPBusinessInstance } from '../utils/business/CenterUdpBusiness'; | ||||||
| import { JudgeEmitterInstance } from '../utils/business/UdpEvent'; | import { JudgeEmitterInstance } from '../utils/business/UdpEvent'; | ||||||
| import { JudgeConfig, StartExamTag, UserInfoTag } from '../config'; | import { StartExamTag, UserInfoTag } from '../config'; | ||||||
| import { dConsole } from '../utils/LogWorker'; | import { dConsole } from '../utils/LogWorker'; | ||||||
| import HeaderComponent from './compontents/Header'; | import HeaderComponent from './compontents/Header'; | ||||||
| import AvatarComponent from './UserInfo/Avatar'; | import AvatarComponent from './UserInfo/Avatar'; | ||||||
| @ -49,6 +49,7 @@ import CommTextComponent from './UserInfo/CommText'; | |||||||
| import LabelBlockComponent from './UserInfo/LabelBlock'; | import LabelBlockComponent from './UserInfo/LabelBlock'; | ||||||
| import CarLoadingDialog from './compontents/CarLoading'; | import CarLoadingDialog from './compontents/CarLoading'; | ||||||
| import ConfirmDialog from './compontents/ConfirmDialog'; | import ConfirmDialog from './compontents/ConfirmDialog'; | ||||||
|  | import { DifferentialAndSignal } from '../utils/business/DifferentialAndSignalWorker'; | ||||||
| 
 | 
 | ||||||
| @Entry | @Entry | ||||||
| @Component | @Component | ||||||
| @ -166,7 +167,9 @@ struct UserInfoPage { | |||||||
|   //开始考试准备 |   //开始考试准备 | ||||||
|   prePareExam = async () => { |   prePareExam = async () => { | ||||||
|     try { |     try { | ||||||
|       await this.checkSignal() |       // await this.checkSignal() | ||||||
|  |       await CheckSignal(this.systemParam, this.avPlayer) | ||||||
|  |       DifferentialAndSignal.clearMsg() | ||||||
|       this.faceCompareSucess = 0 |       this.faceCompareSucess = 0 | ||||||
|       AppStorage.setOrCreate('statue', 2) |       AppStorage.setOrCreate('statue', 2) | ||||||
|       if (!this.currentUser.xm) { |       if (!this.currentUser.xm) { | ||||||
| @ -354,7 +357,6 @@ struct UserInfoPage { | |||||||
|             params: { |             params: { | ||||||
|               sczb: Number(this.isBoardPrePareSetPopupOpen), |               sczb: Number(this.isBoardPrePareSetPopupOpen), | ||||||
|               kfdm: this.sczbkf, |               kfdm: this.sczbkf, | ||||||
| 
 |  | ||||||
|             } |             } | ||||||
|           }, router.RouterMode.Single); |           }, router.RouterMode.Single); | ||||||
|           return |           return | ||||||
| @ -669,14 +671,6 @@ struct UserInfoPage { | |||||||
|         let dataList: User[] = [] |         let dataList: User[] = [] | ||||||
|         this.list = [] |         this.list = [] | ||||||
| 
 | 
 | ||||||
|         // for (let key in res.getExaminationStudentInfoRsp.body) { |  | ||||||
|         //   const a = res.getExaminationStudentInfoRsp.body[key] |  | ||||||
|         //   if (a instanceof Array) { |  | ||||||
|         //     dataList = a |  | ||||||
|         //   } else { |  | ||||||
|         //     dataList = [a] |  | ||||||
|         //   } |  | ||||||
|         // } |  | ||||||
|         for (const key of Object.keys(res.getExaminationStudentInfoRsp.body)) { |         for (const key of Object.keys(res.getExaminationStudentInfoRsp.body)) { | ||||||
|           const a: User[] | User = Reflect.get(res.getExaminationStudentInfoRsp.body, key); |           const a: User[] | User = Reflect.get(res.getExaminationStudentInfoRsp.body, key); | ||||||
|           if (Array.isArray(a)) { |           if (Array.isArray(a)) { | ||||||
| @ -699,9 +693,6 @@ struct UserInfoPage { | |||||||
|             this.startExam = true |             this.startExam = true | ||||||
|           } |           } | ||||||
|           listData.id = index.toString() |           listData.id = index.toString() | ||||||
|           // for (let i in listData) { |  | ||||||
|           //   listData[i] = decodeURI(listData[i]) |  | ||||||
|           // } |  | ||||||
|           Object.keys(listData).forEach((key) => { |           Object.keys(listData).forEach((key) => { | ||||||
|             Reflect.set(listData, key, decodeURI(Reflect.get(listData, key))); |             Reflect.set(listData, key, decodeURI(Reflect.get(listData, key))); | ||||||
|           }); |           }); | ||||||
| @ -863,7 +854,6 @@ struct UserInfoPage { | |||||||
|       const res = await this.beginExam() |       const res = await this.beginExam() | ||||||
|       dConsole.info('surenjun', '开始考试接口调用结束', JSON.stringify(res)) |       dConsole.info('surenjun', '开始考试接口调用结束', JSON.stringify(res)) | ||||||
|       //TODO code转换 |       //TODO code转换 | ||||||
| 
 |  | ||||||
|       if (res.code != 1) { |       if (res.code != 1) { | ||||||
|         avPlayer.playAudio([res.code == -200 ? 'voice/photo_error.mp3' : 'voice/监管审核未通过.mp3']); |         avPlayer.playAudio([res.code == -200 ? 'voice/photo_error.mp3' : 'voice/监管审核未通过.mp3']); | ||||||
|         this.startExamDialogController.close() |         this.startExamDialogController.close() | ||||||
| @ -897,111 +887,6 @@ struct UserInfoPage { | |||||||
|     }) |     }) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // 检测车门、熄火信号 |  | ||||||
|   async checkSignal(): Promise<boolean> { |  | ||||||
|     const Param803Str = this.systemParam.Param803Str |  | ||||||
|     if (Param803Str === '') { |  | ||||||
|       return true |  | ||||||
|     } |  | ||||||
|     return new Promise((resolve, reject) => { |  | ||||||
|       if (JudgeConfig.isCheckFireOpen) { |  | ||||||
|         resolve(true) |  | ||||||
|         return |  | ||||||
|       } |  | ||||||
|       // TODO UDP缺失 |  | ||||||
|       // let plcValue = globalThis.udpClient.getCurrentMessage(); |  | ||||||
|       let plcValue = ""; |  | ||||||
|       const msgArr = plcValue.split(',').map(Number) || '' |  | ||||||
|       const mkg = msgArr[14]; |  | ||||||
|       const fdjzs = msgArr[25]; |  | ||||||
|       const aqd = msgArr[19]; |  | ||||||
|       const jgd = msgArr[7]; |  | ||||||
|       const ygd = msgArr[8]; |  | ||||||
|       const ssc = msgArr[13]; |  | ||||||
|       const dw = msgArr[28]; |  | ||||||
|       // 开始考试信号检测 |  | ||||||
|       if (Param803Str !== '') { |  | ||||||
|         //安全带 |  | ||||||
|         if (aqd == 1 && Param803Str.includes('1')) { |  | ||||||
|           this.avPlayer.playAudio(['voice/请解开安全带.mp3']) |  | ||||||
|           promptAction.showToast({ |  | ||||||
|             message: '请解开安全带', |  | ||||||
|             duration: 4000 |  | ||||||
|           }) |  | ||||||
|           reject(false) |  | ||||||
|         } |  | ||||||
|         //门开关 |  | ||||||
|         if (mkg == 1 && Param803Str.includes('2')) { |  | ||||||
|           this.avPlayer.playAudio(['voice/关门.mp3']) |  | ||||||
|           promptAction.showToast({ |  | ||||||
|             message: '请关闭车门', |  | ||||||
|             duration: 4000 |  | ||||||
|           }) |  | ||||||
|           reject(false) |  | ||||||
|         } |  | ||||||
|         //远、近光灯 |  | ||||||
|         if ((jgd == 1 || ygd == 1) && Param803Str.includes('3')) { |  | ||||||
|           this.avPlayer.playAudio(['voice/请关闭远近光灯.mp3']) |  | ||||||
|           promptAction.showToast({ |  | ||||||
|             message: '请关闭远近光灯', |  | ||||||
|             duration: 4000 |  | ||||||
|           }) |  | ||||||
|           reject(false) |  | ||||||
|         } |  | ||||||
|         //拉手刹 |  | ||||||
|         if (ssc == 0 && Param803Str.includes('4')) { |  | ||||||
|           this.avPlayer.playAudio(['voice/请拉手刹.mp3']) |  | ||||||
|           promptAction.showToast({ |  | ||||||
|             message: '请拉手刹', |  | ||||||
|             duration: 4000 |  | ||||||
|           }) |  | ||||||
|           reject(false) |  | ||||||
| 
 |  | ||||||
|         } |  | ||||||
|         //请点火 |  | ||||||
|         if (fdjzs <= 0 && Param803Str.includes('5')) { |  | ||||||
|           this.avPlayer.playAudio(['voice/点火.mp3']) |  | ||||||
|           promptAction.showToast({ |  | ||||||
|             message: '请点火', |  | ||||||
|             duration: 4000 |  | ||||||
|           }) |  | ||||||
|           reject(false) |  | ||||||
|         } |  | ||||||
|         //置空档 |  | ||||||
|         if (dw != 0 && Param803Str.includes('6')) { |  | ||||||
|           this.avPlayer.playAudio(['voice/请置空档.mp3']) |  | ||||||
|           promptAction.showToast({ |  | ||||||
|             message: '请置空档', |  | ||||||
|             duration: 4000 |  | ||||||
|           }) |  | ||||||
|           reject(false) |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       //TODO  考前绕车一周信号检测 |  | ||||||
|       // if (isBoardPrePareSetPopupOpen) { |  | ||||||
|       if (false) { |  | ||||||
|         //请熄火 |  | ||||||
|         if (fdjzs > 0) { |  | ||||||
|           this.avPlayer.playAudio(['voice/熄火.mp3']) |  | ||||||
|           promptAction.showToast({ |  | ||||||
|             message: '请熄火', |  | ||||||
|             duration: 4000 |  | ||||||
|           }) |  | ||||||
|           reject(false) |  | ||||||
|         } |  | ||||||
|         if (mkg == 1) { |  | ||||||
|           this.avPlayer.playAudio(['voice/关门.mp3']) |  | ||||||
|           promptAction.showToast({ |  | ||||||
|             message: '请关闭车门', |  | ||||||
|             duration: 4000 |  | ||||||
|           }) |  | ||||||
|           reject(false) |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|       resolve(true) |  | ||||||
|     }) |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   // 开始考试 |   // 开始考试 | ||||||
|   async beginExam(): Promise<BeginExamRequest> { |   async beginExam(): Promise<BeginExamRequest> { | ||||||
|     dConsole.log(StartExamTag, "开始考试") |     dConsole.log(StartExamTag, "开始考试") | ||||||
| @ -1045,7 +930,9 @@ struct UserInfoPage { | |||||||
|   //开始上车准备 |   //开始上车准备 | ||||||
|   prePareSCZB = async () => { |   prePareSCZB = async () => { | ||||||
|     try { |     try { | ||||||
|       await this.checkSignal() |       // await this.checkSignal() | ||||||
|  |       await CheckSignal(this.systemParam, this.avPlayer) | ||||||
|  |       DifferentialAndSignal.clearMsg() | ||||||
|       this.isExamStart = true |       this.isExamStart = true | ||||||
|       this.currentUser.id = '0' |       this.currentUser.id = '0' | ||||||
|       DB.insertData("USER", this.currentUser).then(() => { |       DB.insertData("USER", this.currentUser).then(() => { | ||||||
| @ -1261,7 +1148,7 @@ struct UserInfoPage { | |||||||
|     .backgroundImageSize({ width: '100%', height: '100%' }) |     .backgroundImageSize({ width: '100%', height: '100%' }) | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private onCenterMsg = (val: CenterCallBackMsgType) => { |   onCenterMsg = (val: CenterCallBackMsgType) => { | ||||||
|     if (val.id == 32) { |     if (val.id == 32) { | ||||||
|       AppStorage.setOrCreate('signNum', val.body[1]) |       AppStorage.setOrCreate('signNum', val.body[1]) | ||||||
|       if (val.body[0] == 7) { |       if (val.body[0] == 7) { | ||||||
|  | |||||||
| @ -1,7 +1,10 @@ | |||||||
| import { UserInfoTag } from '../../config'; | import { JudgeConfig, UserInfoTag } from '../../config'; | ||||||
| import { User } from '../../model'; | import { CheckItemType, SystemParamType, User, WorkerBackMessage, WorkerBackMessageType } from '../../model'; | ||||||
|  | import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker'; | ||||||
| import dayTs from '../../utils/Date'; | import dayTs from '../../utils/Date'; | ||||||
| import { dConsole } from '../../utils/LogWorker'; | import { dConsole } from '../../utils/LogWorker'; | ||||||
|  | import VoiceAnnounce from '../judgeSDK/utils/voiceAnnouncements'; | ||||||
|  | import Prompt from '@system.prompt'; | ||||||
| 
 | 
 | ||||||
| export const GetCurrentUserKeyValue = (user: User, key: string): string => { | export const GetCurrentUserKeyValue = (user: User, key: string): string => { | ||||||
|   switch (key) { |   switch (key) { | ||||||
| @ -65,3 +68,263 @@ export const InitializeExamProcessData = (user: User) => { | |||||||
|   dConsole.initExam(examDir) |   dConsole.initExam(examDir) | ||||||
|   dConsole.log("开始考试1") |   dConsole.log("开始考试1") | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // export const CheckSignal = (data: SystemParamType, avPlayer: VoiceAnnounce): Promise<boolean> => { | ||||||
|  | //   return new Promise(async (resolve, reject) => { | ||||||
|  | //     const Param803Str = data.Param803Str | ||||||
|  | //     if (Param803Str === '') { | ||||||
|  | //       resolve(true); | ||||||
|  | //     } | ||||||
|  | //     if (JudgeConfig.isCheckFireOpen) { | ||||||
|  | //       resolve(true) | ||||||
|  | //     } | ||||||
|  | //     const checkItems: CheckItemType[] = [ | ||||||
|  | //       { | ||||||
|  | //         index: '1', | ||||||
|  | //         checkFn: (msgArr: number[]) => msgArr[19] === 1, // 安全带 | ||||||
|  | //         audio: 'voice/请解开安全带.mp3', | ||||||
|  | //         message: '请解开安全带' | ||||||
|  | //       }, | ||||||
|  | //       { | ||||||
|  | //         index: '2', | ||||||
|  | //         checkFn: (msgArr: number[]) => msgArr[14] === 1, // 门开关 | ||||||
|  | //         audio: 'voice/关门.mp3', | ||||||
|  | //         message: '请关闭车门' | ||||||
|  | //       }, | ||||||
|  | //       { | ||||||
|  | //         index: '3', | ||||||
|  | //         checkFn: (msgArr: number[]) => msgArr[7] === 1 || msgArr[8] === 1, // 远近光灯 | ||||||
|  | //         audio: 'voice/请关闭远近光灯.mp3', | ||||||
|  | //         message: '请关闭远近光灯' | ||||||
|  | //       }, | ||||||
|  | //       { | ||||||
|  | //         index: '4', | ||||||
|  | //         checkFn: (msgArr: number[]) => msgArr[13] === 0, // 手刹 | ||||||
|  | //         audio: 'voice/请拉手刹.mp3', | ||||||
|  | //         message: '请拉手刹' | ||||||
|  | //       }, | ||||||
|  | //       { | ||||||
|  | //         index: '5', | ||||||
|  | //         checkFn: (msgArr: number[]) => msgArr[25] <= 0, // 发动机转速 | ||||||
|  | //         audio: 'voice/点火.mp3', | ||||||
|  | //         message: '请点火' | ||||||
|  | //       }, | ||||||
|  | //       { | ||||||
|  | //         index: '6', | ||||||
|  | //         checkFn: (msgArr: number[]) => msgArr[28] !== 0, // 档位 | ||||||
|  | //         audio: 'voice/请置空档.mp3', | ||||||
|  | //         message: '请置空档' | ||||||
|  | //       } | ||||||
|  | //     ] | ||||||
|  | //     // 存储最新数据,避免频繁解析 | ||||||
|  | //     let latestData: number[] | null = null; | ||||||
|  | // | ||||||
|  | //     // 1. 先监听数据变化(只需注册一次) | ||||||
|  | //     const dataHandler = (data: string) => { | ||||||
|  | //       const result: WorkerBackMessage = JSON.parse(data); | ||||||
|  | //       if (result.type === WorkerBackMessageType.ObtainUdpData) { | ||||||
|  | //         let msg = result.data as string; | ||||||
|  | //         latestData = msg.split(',').map(Number); // 缓存最新数据 | ||||||
|  | //       } | ||||||
|  | //     }; | ||||||
|  | //     DifferentialAndSignal.onMsg(dataHandler); | ||||||
|  | //     // 2. 顺序检查每个项目 | ||||||
|  | //     for (const item of checkItems) { | ||||||
|  | //       if (!Param803Str.includes(item.index)) continue; // 跳过未配置项 | ||||||
|  | // | ||||||
|  | //       let passed = false; | ||||||
|  | //       while (!passed) { | ||||||
|  | //         if (!latestData) { | ||||||
|  | //           await new Promise(res => setTimeout(res, 200)); // 等待数据 | ||||||
|  | //           continue; | ||||||
|  | //         } | ||||||
|  | // | ||||||
|  | //         if (item.checkFn(latestData)) { | ||||||
|  | //           // 未通过,播放提示 | ||||||
|  | //           avPlayer.playAudio([item.audio]); | ||||||
|  | //           Prompt.showToast({ | ||||||
|  | //             message: item.message, | ||||||
|  | //             duration: 4000 | ||||||
|  | //           }); | ||||||
|  | //           await new Promise(res => setTimeout(res, 1000)); // 防抖:1秒后再检查 | ||||||
|  | //         } else { | ||||||
|  | //           passed = true; // 通过检查 | ||||||
|  | //         } | ||||||
|  | //       } | ||||||
|  | //     } | ||||||
|  | //     resolve(true) | ||||||
|  | //     // DifferentialAndSignal.onMsg((data: string) => { | ||||||
|  | //     //   const result: WorkerBackMessage = JSON.parse(data) | ||||||
|  | //     //   if (result.type === WorkerBackMessageType.ObtainUdpData) { | ||||||
|  | //     //     let msg = result.data as string; | ||||||
|  | //     //     const msgArr = msg.split(',').map(Number) | ||||||
|  | //     //     const mkg = msgArr[14]; | ||||||
|  | //     //     const fdjzs = msgArr[25]; | ||||||
|  | //     //     const aqd = msgArr[19]; | ||||||
|  | //     //     const jgd = msgArr[7]; | ||||||
|  | //     //     const ygd = msgArr[8]; | ||||||
|  | //     //     const ssc = msgArr[13]; | ||||||
|  | //     //     const dw = msgArr[28]; | ||||||
|  | //     //     //安全带 | ||||||
|  | //     //     if (aqd == 1 && Param803Str.includes('1')) { | ||||||
|  | //     //       avPlayer.playAudio(['voice/请解开安全带.mp3']) | ||||||
|  | //     //       Prompt.showToast({ | ||||||
|  | //     //         message: '请解开安全带', | ||||||
|  | //     //         duration: 4000 | ||||||
|  | //     //       }) | ||||||
|  | //     //       reject(false) | ||||||
|  | //     //     } | ||||||
|  | //     //     //门开关 | ||||||
|  | //     //     if (mkg == 1 && Param803Str.includes('2')) { | ||||||
|  | //     //       avPlayer.playAudio(['voice/关门.mp3']) | ||||||
|  | //     //       Prompt.showToast({ | ||||||
|  | //     //         message: '请关闭车门', | ||||||
|  | //     //         duration: 4000 | ||||||
|  | //     //       }) | ||||||
|  | //     //       reject(false) | ||||||
|  | //     //     } | ||||||
|  | //     //     //远、近光灯 | ||||||
|  | //     //     if ((jgd == 1 || ygd == 1) && Param803Str.includes('3')) { | ||||||
|  | //     //       avPlayer.playAudio(['voice/请关闭远近光灯.mp3']) | ||||||
|  | //     //       Prompt.showToast({ | ||||||
|  | //     //         message: '请关闭远近光灯', | ||||||
|  | //     //         duration: 4000 | ||||||
|  | //     //       }) | ||||||
|  | //     //       reject(false) | ||||||
|  | //     //     } | ||||||
|  | //     //     //拉手刹 | ||||||
|  | //     //     if (ssc == 0 && Param803Str.includes('4')) { | ||||||
|  | //     //       avPlayer.playAudio(['voice/请拉手刹.mp3']) | ||||||
|  | //     //       Prompt.showToast({ | ||||||
|  | //     //         message: '请拉手刹', | ||||||
|  | //     //         duration: 4000 | ||||||
|  | //     //       }) | ||||||
|  | //     //       reject(false) | ||||||
|  | //     //     } | ||||||
|  | //     //     //请点火 | ||||||
|  | //     //     if (fdjzs <= 0 && Param803Str.includes('5')) { | ||||||
|  | //     //       avPlayer.playAudio(['voice/点火.mp3']) | ||||||
|  | //     //       Prompt.showToast({ | ||||||
|  | //     //         message: '请点火', | ||||||
|  | //     //         duration: 4000 | ||||||
|  | //     //       }) | ||||||
|  | //     //       reject(false) | ||||||
|  | //     //     } | ||||||
|  | //     //     //置空档 | ||||||
|  | //     //     if (dw != 0 && Param803Str.includes('6')) { | ||||||
|  | //     //       avPlayer.playAudio(['voice/请置空档.mp3']) | ||||||
|  | //     //       Prompt.showToast({ | ||||||
|  | //     //         message: '请置空档', | ||||||
|  | //     //         duration: 4000 | ||||||
|  | //     //       }) | ||||||
|  | //     //       reject(false) | ||||||
|  | //     //     } | ||||||
|  | //     //     resolve(true); | ||||||
|  | //     //   } | ||||||
|  | //     // }) | ||||||
|  | // | ||||||
|  | //   }) | ||||||
|  | // } | ||||||
|  | export const CheckSignal = (data: SystemParamType, avPlayer: VoiceAnnounce): Promise<boolean> => { | ||||||
|  |   return new Promise(async (resolve) => { | ||||||
|  |     const Param803Str = data.Param803Str; | ||||||
|  | 
 | ||||||
|  |     // 如果不需要检查,直接返回成功 | ||||||
|  |     if (Param803Str === '' || JudgeConfig.isCheckFireOpen) { | ||||||
|  |       resolve(true); | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     const checkItems: CheckItemType[] = [ | ||||||
|  |       { | ||||||
|  |         index: '1', | ||||||
|  |         checkFn: (msgArr: number[]) => msgArr[19] === 1, // 安全带 | ||||||
|  |         audio: 'voice/请解开安全带.mp3', | ||||||
|  |         message: '请解开安全带' | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         index: '2', | ||||||
|  |         checkFn: (msgArr: number[]) => msgArr[14] === 1, // 门开关 | ||||||
|  |         audio: 'voice/关门.mp3', | ||||||
|  |         message: '请关闭车门' | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         index: '3', | ||||||
|  |         checkFn: (msgArr: number[]) => msgArr[7] === 1 || msgArr[8] === 1, // 远近光灯 | ||||||
|  |         audio: 'voice/请关闭远近光灯.mp3', | ||||||
|  |         message: '请关闭远近光灯' | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         index: '4', | ||||||
|  |         checkFn: (msgArr: number[]) => msgArr[13] === 0, // 手刹 | ||||||
|  |         audio: 'voice/请拉手刹.mp3', | ||||||
|  |         message: '请拉手刹' | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         index: '5', | ||||||
|  |         checkFn: (msgArr: number[]) => msgArr[25] <= 0, // 发动机转速 | ||||||
|  |         audio: 'voice/点火.mp3', | ||||||
|  |         message: '请点火' | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         index: '6', | ||||||
|  |         checkFn: (msgArr: number[]) => msgArr[28] !== 0, // 档位 | ||||||
|  |         audio: 'voice/请置空档.mp3', | ||||||
|  |         message: '请置空档' | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     let latestData: number[] | null = null; | ||||||
|  |     let isChecking = true; | ||||||
|  | 
 | ||||||
|  |     // 使用严格类型定义的事件处理器 | ||||||
|  |     const dataHandler = (data: string) => { | ||||||
|  |       try { | ||||||
|  |         const result: WorkerBackMessage = JSON.parse(data); | ||||||
|  |         if (result.type === WorkerBackMessageType.ObtainUdpData) { | ||||||
|  |           let msg = result.data as string | ||||||
|  |           latestData = msg.split(',').map(Number); | ||||||
|  |         } | ||||||
|  |       } catch (error) { | ||||||
|  |         console.error('数据处理错误:', error); | ||||||
|  |       } | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     DifferentialAndSignal.onMsg(dataHandler); | ||||||
|  | 
 | ||||||
|  |     // 创建带明确类型的延迟函数 | ||||||
|  |     const delay = (ms: number): Promise<void> => { | ||||||
|  |       return new Promise<void>(resolve => setTimeout(resolve, ms)); | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     try { | ||||||
|  |       for (const item of checkItems) { | ||||||
|  |         if (!Param803Str.includes(item.index)) continue; | ||||||
|  | 
 | ||||||
|  |         let passed = false; | ||||||
|  |         while (!passed && isChecking) { | ||||||
|  |           if (!latestData) { | ||||||
|  |             await delay(200); | ||||||
|  |             continue; | ||||||
|  |           } | ||||||
|  | 
 | ||||||
|  |           if (item.checkFn(latestData)) { | ||||||
|  |             avPlayer.playAudio([item.audio]); | ||||||
|  |             Prompt.showToast({ | ||||||
|  |               message: item.message, | ||||||
|  |               duration: 4000 | ||||||
|  |             }); | ||||||
|  |             await delay(1000); | ||||||
|  |           } else { | ||||||
|  |             passed = true; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       resolve(true); | ||||||
|  |     } catch (error) { | ||||||
|  |       console.error('检查过程中出错:', error); | ||||||
|  |       resolve(false); | ||||||
|  |     } finally { | ||||||
|  |       DifferentialAndSignal.offMsg(dataHandler); | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | }; | ||||||
| @ -7,7 +7,6 @@ import { | |||||||
|   WorkerBackMessage, |   WorkerBackMessage, | ||||||
|   WorkerBackMessageType |   WorkerBackMessageType | ||||||
| } from '../../model'; | } from '../../model'; | ||||||
| // import apiJudgeSdk from 'libJudgeSdk.so' |  | ||||||
| import apiJudgeSdk from '@ohos.judgesdk'; | import apiJudgeSdk from '@ohos.judgesdk'; | ||||||
| 
 | 
 | ||||||
| import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker'; | import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker'; | ||||||
|  | |||||||
| @ -99,7 +99,6 @@ export async function saveStartRecordVideo(path: string, context: common.UIAbili | |||||||
|         // Reflect.set(record_handle, i, await getFileHandleCode(i, param, date, path, i)); |         // Reflect.set(record_handle, i, await getFileHandleCode(i, param, date, path, i)); | ||||||
|         const data = await startRecordVideo(param, i, context!, date, path, i); |         const data = await startRecordVideo(param, i, context!, date, path, i); | ||||||
|         Reflect.set(record_handle, i, data); |         Reflect.set(record_handle, i, data); | ||||||
| 
 |  | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     resolve(record_handle) |     resolve(record_handle) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user