diff --git a/entry/src/main/ets/common/service/timeService.ts b/entry/src/main/ets/common/service/timeService.ts index 4b2704af..4ee97cf9 100644 --- a/entry/src/main/ets/common/service/timeService.ts +++ b/entry/src/main/ets/common/service/timeService.ts @@ -24,11 +24,12 @@ export async function setCurrentTime():Promise { let times = new Date(currentTime).getTime(); console.log('jiangsong:times==' + times); try { - systemTime.setTime(times).then(() => { - console.info(`Succeeded in setting time.`); - }).catch((error) => { - console.info(`Failed to set time. message: ${error.message}, code: ${error.code}`); - }); + await systemTime.setTime(times) + // systemTime.setTime(times).then(() => { + // console.info(`Succeeded in setting time.`); + // }).catch((error) => { + // console.info(`Failed to set time. message: ${error.message}, code: ${error.code}`); + // }); } catch(e) { console.info(`Failed to set time. message: ${e.message}, code: ${e.code}`); } diff --git a/entry/src/main/ets/common/utils/GlobalUdp.ts b/entry/src/main/ets/common/utils/GlobalUdp.ts index 24fc9119..6cb7052f 100644 --- a/entry/src/main/ets/common/utils/GlobalUdp.ts +++ b/entry/src/main/ets/common/utils/GlobalUdp.ts @@ -298,7 +298,8 @@ export async function setJudgeUdp() { if (config && config.udplocalIp) { const {udplocalIp} = config; - const udpClientbyCenter: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '8080', globalThis.carInfo?.gpsAddress, globalThis.carInfo?.hintPort) + const udpClientbyCenter: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '8080', globalThis.carInfo?.udpAddress, globalThis.carInfo?.hintPort) + await udpClientbyCenter.onError_Callback(()=>{}) await udpClientbyCenter.bindUdp() await udpClientbyCenter.onMessage_2((val) => {}) diff --git a/entry/src/main/ets/common/utils/UdpJudge.ts b/entry/src/main/ets/common/utils/UdpJudge.ts index d4f70362..0c366bf4 100644 --- a/entry/src/main/ets/common/utils/UdpJudge.ts +++ b/entry/src/main/ets/common/utils/UdpJudge.ts @@ -43,11 +43,8 @@ export const initJudgeUdp = async () => { wd2:wd, h:msgArr[90]*1 || 1, }) - if(distance < 1){ - return - } //@ts-ignore - globalThis.distanceClass.setTimeData(((distance / 100).toFixed(2)) * 1) + globalThis.distanceClass?.setTimeData(((distance / 100).toFixed(2)) * 1) } prevJd = jd; preWd = wd; @@ -66,7 +63,7 @@ export const getMessageHeartbeat = async (msg) => { ? '1111111111111' : globalThis.lsh, 13)); - const ascksyhArr = stringToASC(fillZero('1111111111111', 13)) + const ascksyhArr = stringToASC(fillZero(examSubject == 2 ? '0000000000000':'1111111111111', 13)) const ascsbxhArr = stringToASC('00000000') // const ascsbxhArr = stringToASC('153216400880') const serialIndex = globalThis.serialIndex diff --git a/entry/src/main/ets/common/utils/tools.ts b/entry/src/main/ets/common/utils/tools.ts index 962fcc5d..09dbc35c 100644 --- a/entry/src/main/ets/common/utils/tools.ts +++ b/entry/src/main/ets/common/utils/tools.ts @@ -236,4 +236,16 @@ export function convertGpsCoord2 (num){ const du = Math.floor(tempNum / 100); const fen = tempNum % 100 + num - tempNum; return du + fen / 60 -} \ No newline at end of file +} + +export function debounce(fn, delay){ + // 利用闭包定义定时器id变量存储 + let timer = null; + return () => { + // 如果有值就清除定时器,重新计时 + if (timer) { + clearTimeout(timer) + } + timer = setTimeout(fn, delay); + } +}; \ No newline at end of file diff --git a/entry/src/main/ets/entryability/EntryAbility.ts b/entry/src/main/ets/entryability/EntryAbility.ts index 07c5a93d..b56ff7b0 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ts +++ b/entry/src/main/ets/entryability/EntryAbility.ts @@ -28,12 +28,12 @@ export default class EntryAbility extends UIAbility { globalThis.examinerInfo = {} globalThis.deviceNo = ''; globalThis.hasAuth = false - // globalThis.version = '2022.08.13.01'//洛阳 - // globalThis.judgeVersion = '2022.12.05.1' + globalThis.version = '2022.08.13.01'//洛阳 + globalThis.judgeVersion = '2022.12.05.1' // globalThis.judgeVersion = '2022.12.05.1' // globalThis.version = '2022.08.13.01' - globalThis.version = '2024.11.22.14'//济南 - globalThis.judgeVersion = '2024.11.22.14' + // globalThis.version = '2024.11.22.14'//济南 + // globalThis.judgeVersion = '2024.11.22.14' globalThis.videoVersion= '1.0' // globalThis.version = '2023.12.13.01' // globalThis.judgeVersion = '2023.09.30.1' diff --git a/entry/src/main/ets/pages/Judge.ets b/entry/src/main/ets/pages/Judge.ets index 1ef0283d..a50b8f0f 100644 --- a/entry/src/main/ets/pages/Judge.ets +++ b/entry/src/main/ets/pages/Judge.ets @@ -9,6 +9,8 @@ import Judge from './judgeSDK/judge'; import { defaultJudgeConfigObj } from './judgeSDK/utils//judgeCommon'; import {uploadExamMileage} from '../api/judge' import DwztErrorPopup from './compontents/judge/DwztErrorPopup' +import {debounce} from '../common/utils/tools' + import { CARINFO, CDSBInfo, @@ -28,6 +30,7 @@ import { getSyncData } from '../common/service/initable'; import { judgeConfig } from './judgeSDK/utils/judgeConfig'; import FileUtil from '../common/utils/File'; import SignDisplayCom from './compontents/signDisplayCom'; +import promptAction from '@ohos.promptAction'; @Entry @Component @@ -161,7 +164,8 @@ struct Index { const syssetParams = sysset || await getSyncData('MA_SYSSET') //@ts-ignore const serialNumberArr = syssetParams.filter(sys => sys.v_no === '901'); - this.serialNumber = (serialNumberArr[0] && serialNumberArr[0].v_value) || '123456' + console.info('surenjun serialNumberArr' + JSON.stringify(serialNumberArr)) + this.serialNumber = (serialNumberArr[0] && serialNumberArr[0].v_value) || ''; const {isTrajectoryOpen} = judgeConfig const syssetJudgeConfigArr = [] @@ -294,13 +298,15 @@ struct Index { this.projectsObj[no2*1] = currentProject this.projectsCenterObj[txt2] = currentProject this.projects.push(currentProject); - console.info('surenjun txt2=>',txt2) //真实监管下发考试项目 if(isInExam && !kStringArr.includes(txt2)){ this.projectsObj[no2*1].type = '3' this.projectsObj[no2*1].isUpload = true this.projectsObj[no2*1].isEnd = true + this.projectsCenterObj[txt2].type = '3' + this.projectsCenterObj[txt2].isUpload = true + this.projectsCenterObj[txt2].isEnd = true this.isDdxk = true this.ddxkKsxmArr.push(txt2) } @@ -382,6 +388,8 @@ struct Index { const projectCode = this.projectsCenterObj[xmdm].projectCode if(this.projectsObj[projectCode]){ this.projectsObj[projectCode].type = '3' + this.projectsObj[projectCode].isUpload = true + this.projectsObj[projectCode].isEnd = true } }) this.ddxkKsxmArr = ddxkKsxmArr @@ -846,10 +854,15 @@ struct Index { this.isDeductedPopShow = false; this.defaultTabIndex = 0; }, - confirmMark: async (itemno, serial) => { - const judge = this.judge - await judge.setJudgeMark(itemno, serial); - this.isDeductedPopShow = false + confirmMark: async (itemno, serial)=>{ + clearTimeout(this.popTimer) + this.popTimer = null + this.popTimer = setTimeout(async ()=>{ + const judge = this.judge + await judge.setJudgeMark(itemno, serial); + this.isDeductedPopShow = false + this.popTimer = null; + },500) } }) } @@ -879,10 +892,15 @@ struct Index { if (this.isAmplifyPopShow && this.examSubject == 3) { AmplifyPopup({ amplifyImgIndex: this.amplifiedImgIndex, - confirmAmplify: async (amplify) => { - const judge = this.judge - await judge.setJudgeItem(amplify.projectCode, 1); - this.isAmplifyPopShow = false + confirmAmplify:async (amplify)=>{ + clearTimeout(this.popTimer) + this.popTimer = null + this.popTimer = setTimeout(async ()=>{ + const judge = this.judge + await judge.setJudgeItem(amplify.projectCode, 1); + this.isAmplifyPopShow = false + this.popTimer = null; + },500) }, closeAmplifyPop: () => { this.isAmplifyPopShow = false @@ -1263,4 +1281,5 @@ struct Index { @State mileageTimer: number = 0; @State passingScore: number = 80 @State dwztErrorVisible: boolean = false; + @State popTimer:number =0; } diff --git a/entry/src/main/ets/pages/UserInfo.ets b/entry/src/main/ets/pages/UserInfo.ets index 594f7b5f..8b5daca2 100644 --- a/entry/src/main/ets/pages/UserInfo.ets +++ b/entry/src/main/ets/pages/UserInfo.ets @@ -651,6 +651,7 @@ struct UserInfo { duration: 4000 }) avPlayer.playAudio(['voice/监管审核未通过.mp3']); + this.isLoadingPopupVisible = false return } this.currentUser.id = '0' @@ -800,7 +801,7 @@ struct UserInfo { drvexam, xtlb: '17', //接口序列号 - jkxlh: this.jkxlh || '', + jkxlh: this.jkxlh, //接口标识 jkid: '17C51', } diff --git a/entry/src/main/ets/pages/judgeSDK/judge.ts b/entry/src/main/ets/pages/judgeSDK/judge.ts index a92d4f2b..b2bfaffb 100644 --- a/entry/src/main/ets/pages/judgeSDK/judge.ts +++ b/entry/src/main/ets/pages/judgeSDK/judge.ts @@ -80,14 +80,16 @@ export default class Judge { this.isExam = !this.judgeUI.singlePlay; const {projectsCenterObj,examSubject} = judgeUI; - //科目三待修改 + (examSubject ==2 ? testKm2Items : testKm3Items ).forEach(item => { + const projectCenterObj = projectsCenterObj[item.code] this.testKmItems[item.code] = item; //考试项目存在 this.testKmItems[item.code] = { code: item.code, - status: 1, - // status: projectsCenterObj[item.code]?.isRequired ? 1 : 0 + status: projectCenterObj === undefined + ? 0 + : ( projectCenterObj.isEnd ? 3 : 1 ) } }) console.info(judgeTag+'testKmItems',JSON.stringify(this.testKmItems)) @@ -156,13 +158,25 @@ export default class Judge { let beginExamInfo = isTrajectoryOpen ? { ...JSON.parse(strArr[1]), replay: 1, - ykxm:judgeConfig.ignoreProjects } : await getJudgeBeginData() await fileLog.setExamJudgeData(beginExamInfo) await examJudgeBeginExam(beginExamInfo); console.info(judgeTag, '6.开始考试注册完成') avPlayer.playAudio([globalThis.singlePlay ? 'voice/ksks.WAV' : 'voice/监管成功.mp3']) + + const {examSubject,projectsObj} = this.judgeUI + if(examSubject == 3){ + //不做模拟灯光,需要做上车准备 =>(请上车准备) + if(projectsObj[41]?.type == 3 && projectsObj[1]?.type != 3){ + avPlayer.playAudio(['voice/上车准备.mp3']) + } + //不做模拟灯光,不做上车准备 =>(请起步,完成考试) + if(projectsObj[41]?.type == 3 && projectsObj[1]?.type == 3){ + avPlayer.playAudio(['voice/402001.mp3']) + } + } + this.judgeUI.draw = true // 处理轨迹plc信息 if (isTrajectoryOpen) { @@ -196,7 +210,7 @@ export default class Judge { h:hxj || 1, }) //@ts-ignore - globalThis.distanceClass.setTimeData(((distance / 100).toFixed(2)) * 1) + globalThis.distanceClass?.setTimeData(((distance / 100).toFixed(2)) * 1) } this.prevJd = tJD; this.prevWd = tWD; @@ -628,7 +642,6 @@ export default class Judge { kssj: time } } - console.info(judgeTag +'filePath' , filePath) const {code} = await writeObjectOut(data,filePath) console.info(judgeTag, '项目开始 end') if (code === 2300007) { @@ -970,8 +983,13 @@ export default class Judge { let currentKssycs =0; let voiceURL = '' if (examSubject == 2) { - voiceURL = (totalScore < passingScore ? `voice/unqualified_${kssycs == 1 ? 'one' : 'two'}.wav` : 'voice/qualified.mp3') - switch (voiceURL){ + if (isAllProjectsEnd) { + voiceURL = (totalScore < passingScore ? `voice/unqualified_${kssycs == 1 ? 'one' : 'two'}.wav` : 'voice/qualified.mp3') + }else{ + voiceURL = `voice/unqualified_${kssycs == 1 ? 'one' : 'two'}.wav` + currentKssycs = kssycs == 1 ? 0 : 1 + } + switch (voiceURL){ case 'voice/unqualified_one.wav': currentKssycs = 0; break; @@ -1069,6 +1087,7 @@ export default class Judge { const projectsObj = this.judgeUI.projectsObj return projectsObj[type]?.abbreviation || '通用评判' } + // 扣分项目转换 getKfStr = (code) => { const markRuleListObj = this.judgeUI.markRuleListObj; @@ -1113,7 +1132,7 @@ export default class Judge { const sbxh = getSbxh(xmdm, xmxh) const {carzt,dcjl,qjjl,dxjl,bxjl} = performInfo || {}; const asclshArr = stringToASC( - fillZero((singlePlay ? 1111111111111 : lsh) || 0, 13) + fillZero((singlePlay ? (examSubject == 2 ? '0000000000000':'1111111111111') : lsh) || 0, 13) ); //13不足要补0 const ascksyhArr = stringToASC(fillZero(ksyh || 0, 13)) @@ -1130,7 +1149,6 @@ export default class Judge { //@ts-ignore let tempSd = ((judgeConfigObj['350'] ==0 ? sd : cs) * 1.852).toFixed(0) * 1 - console.info(judgeTag + "prevSD",tempSd); if(tempSd < 1){ tempSd = 0 } @@ -1234,7 +1252,6 @@ export default class Judge { status: getCenterProjectStatus(current.status) } }) - // console.info(judgeTag+'TranslateProject',JSON.stringify(tempItems)); const arr = []; for (let i = 0; i <= 4; i++) { @@ -1282,6 +1299,7 @@ export default class Judge { } //人工操作项目 public setJudgeItem = async (itemno, type: 1 | 2) => { + console.info('surenjun','2') const {fileLog} = this; await examJudgeArtificialItem(itemno * 1, type); await fileLog.setExamJudgeData({ @@ -1398,7 +1416,10 @@ export default class Judge { if (udpIndex % 5 === 0 && !isUdpEnd) { const judgeUdp = globalThis.judgeUdp const bytes = await this.getMessageHeartbeat(isExamEnd); + console.info(judgeTag,JSON.stringify(bytes)) + console.info(judgeTag,'udp-prev-send') judgeUdp.send(bytes) + console.info(judgeTag,'udp-prev-end') } globalThis.udpIndex += 1 } @@ -1450,12 +1471,13 @@ export default class Judge { const msgStr = strArr[num]; if(msgStr == ''){ console.info(judgeTag, '模拟数据考试结束') - // globalThis.windowClass.setWindowSystemBarEnable(['navigation']) + globalThis.windowClass.setWindowSystemBarEnable(['navigation']) clearInterval(judgeTimer) this.checkExamIsEnd(true) return } const msg = JSON.parse(strArr[num]); + num++ // 4.过程数据 this.tempData = msg this.judgeUI.isDwztRight = msg?.gps?.dwzt == 4; @@ -1473,8 +1495,8 @@ export default class Judge { await examJudgeRealExam(msg) const bytes = await this.getMessageHeartbeat(); bytes && globalThis.judgeUdp.send(bytes) - num++ - }, 200) + + }, 50) globalThis.judgeTimer = judgeTimer; } diff --git a/entry/src/main/ets/pages/judgeSDK/utils/judgeConfig.ts b/entry/src/main/ets/pages/judgeSDK/utils/judgeConfig.ts index 81dd9a3f..5ab18a99 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/judgeConfig.ts +++ b/entry/src/main/ets/pages/judgeSDK/utils/judgeConfig.ts @@ -16,7 +16,7 @@ export const judgeConfig = { // 本地模型地址 modelPath: 'models/model_enc', // 济南科目三 - trajectoryPath: 'logs/2024_08_17/2024_08_17_16_51_24_9999282315477_203908531884520064_彭雯季/judge_exam_data.txt', + trajectoryPath: 'logs/2024_08_29/2024_08_29_09_48_08_2230612098578_410311200501058031_闫嘉衡/judge_exam_data.txt', //四合一画面配置 fourInOneScreen:{ //gps位数