From 2a32af7fa1ac98e840fa58ffe29cc74097c44a35 Mon Sep 17 00:00:00 2001 From: surenjun Date: Tue, 3 Sep 2024 19:28:07 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E8=AF=84=E5=88=A4=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/api/judgeNew.ts | 10 ++- entry/src/main/ets/common/utils/GlobalUdp.ts | 29 +++++++- entry/src/main/ets/common/utils/UdpEvent.ets | 71 +++++++++++++++++++ entry/src/main/ets/common/utils/request.ts | 7 +- entry/src/main/ets/pages/Index.ets | 11 ++- entry/src/main/ets/pages/UserInfo.ets | 4 +- .../judge/BoardPrePareSetPopup.ets | 12 ++-- .../main/ets/pages/judgeSDK/api/judgeSDK.d.ts | 3 +- entry/src/main/ets/pages/judgeSDK/judge.ts | 18 +++-- .../ets/pages/judgeSDK/utils/judgeCommon.ts | 13 ++-- 10 files changed, 145 insertions(+), 33 deletions(-) create mode 100644 entry/src/main/ets/common/utils/UdpEvent.ets diff --git a/entry/src/main/ets/api/judgeNew.ts b/entry/src/main/ets/api/judgeNew.ts index 5c8682c7..80cb7139 100644 --- a/entry/src/main/ets/api/judgeNew.ts +++ b/entry/src/main/ets/api/judgeNew.ts @@ -32,10 +32,10 @@ export default async function writeObjectOutNew(data,filePath): Promise { fileUtil.editFile(`${filePath}/wuxi_exam_data.txt`,JSON.stringify({ wglb,jkxlh,glbm,jgbh,sjbs, data:params.data, - file:params.file, + file:{...params.file,param:[]}, })); - return await request({ + const temp = await request({ host: globalThis.JGHOST, method: 'post', //是否是新中心 @@ -61,6 +61,12 @@ export default async function writeObjectOutNew(data,filePath): Promise { `, }) + if(filePath){ + const fileUtil = new FileUtil(globalThis.context); + await fileUtil.initFolder(filePath); + fileUtil.editFile(`${filePath}/wuxi_exam_data.txt`,JSON.stringify(temp) +`\n`); + } + return temp } export async function getParams(jkid, drvexam) { diff --git a/entry/src/main/ets/common/utils/GlobalUdp.ts b/entry/src/main/ets/common/utils/GlobalUdp.ts index 6cb7052f..a0c10a90 100644 --- a/entry/src/main/ets/common/utils/GlobalUdp.ts +++ b/entry/src/main/ets/common/utils/GlobalUdp.ts @@ -4,6 +4,7 @@ import { getSyncData } from '../service/initable' import { getChuankouFn } from '../../common/service/indexService' import FileUtil from '../../common/utils/File' import { GlobalConfig } from '../../config/index' +import emitter from '@ohos.events.emitter'; export async function sendMsg(val) { // globalThis.udpClient1&&globalThis.udpClient1.sendMsg(val) @@ -178,6 +179,15 @@ export async function getUDP2(context,errorFlag?) { console.log('getUDPOnmessageByGlobalUDP2Message') if (val.id == '32') { globalThis.signNum = val.body[1] + if(val.body[0] == 5){ + + } + if(val.body[0] == 11){ + globalThis.udpEvent.sendBeginExam() + } + if(val.body[0] == 12){ + globalThis.udpEvent.sendEndExam() + } } else if (val.id == '46') { let tmpList = [] @@ -298,11 +308,18 @@ export async function setJudgeUdp() { if (config && config.udplocalIp) { const {udplocalIp} = config; - const udpClientbyCenter: UdpClientByCenter = new UdpClientByCenter(udplocalIp, '8080', globalThis.carInfo?.udpAddress, 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) => {}) + + //远程监听开始考试、结束考试、扣分指令 + // globalThis.judgeUdpClient = udpClientbyCenter; return { send(bytes) { @@ -315,7 +332,15 @@ export async function setJudgeUdp() { }) currentUdpIndex = udpIndex } - } + }, + + //远程查询扣分项 + //远程确认扣分 + confirmKF(){ + + }, + //远程开始考试 + //远程结束考试 } } diff --git a/entry/src/main/ets/common/utils/UdpEvent.ets b/entry/src/main/ets/common/utils/UdpEvent.ets new file mode 100644 index 00000000..1eafa005 --- /dev/null +++ b/entry/src/main/ets/common/utils/UdpEvent.ets @@ -0,0 +1,71 @@ +import emitter from '@ohos.events.emitter'; + +export const EVENTID = { + //远程扣分处理 + kfEventId:35, + //远程扣分查询 + kfAskEventId:36, + //远程扣分确认 + kfConfirmEventId:37, + //远程开始考试 + beginExamEventId:11, + //远程结束考试 + endExamEventId:12 +} + +export default class JudgeEmitter{ + + private beginExamCallBack:Function = ()=>{} + private endExamCallBack:Function = ()=>{} + + constructor() { + this.init() + } + + init = async ()=>{ + emitter.on({eventId:EVENTID.beginExamEventId}, () => { + this?.beginExamCallBack() + }); + emitter.on({eventId:EVENTID.endExamEventId}, () => { + this?.endExamCallBack() + }); + emitter.on({eventId:EVENTID.kfEventId}, () => { + this?.endExamCallBack() + }); + } + + //监听开始考试 + public onBeginExam = async (callBack?:Function)=>{ + this.beginExamCallBack = callBack + } + + //监听结束考试 + public onEndExam = async (callBack?:Function)=>{ + this.endExamCallBack = callBack + } + + //监听扣分处理 + public onKfExam= async (callBack?:Function)=>{ + this.endExamCallBack = callBack + } + + //开始考试 + public sendBeginExam = async(content)=>{ + emitter.emit({eventId:EVENTID.beginExamEventId}, { + data:{ content } + }); + } + + //结束考试 + public sendEndExam = async(content)=>{ + emitter.emit({eventId:EVENTID.endExamEventId}, { + data:{content} + }); + } + + + + + +} + diff --git a/entry/src/main/ets/common/utils/request.ts b/entry/src/main/ets/common/utils/request.ts index 2439db55..95202eb1 100644 --- a/entry/src/main/ets/common/utils/request.ts +++ b/entry/src/main/ets/common/utils/request.ts @@ -148,7 +148,7 @@ function handleCenterCode(msgXml,isNewCenter){ const msg = JSON.parse(msgXml); const result = msg?.data[0]?.result; if(result){ - const {code,message,keystr} = result + const {code,message,retval} = result if(code != '1'){ const rMessage = decodeURIComponent(message as string) // globalThis.title=rMessage @@ -160,7 +160,7 @@ function handleCenterCode(msgXml,isNewCenter){ }); return {code,message} }else{ - return { code ,keystr} + return { code ,keystr:retval} } } } @@ -168,9 +168,8 @@ function handleCenterCode(msgXml,isNewCenter){ //正则匹配code message字段 const [code,message,keystr] = [/(.*)<\/code>/i,/(.*)<\/message>/i,/(.*)<\/keystr>/i].map(pattern=>{ const patternArr = pattern.exec(msgXml); - return patternArr[1] + return patternArr && patternArr[1] }); - console.info('surenjun =>request-prev',keystr) if(code != '1'){ diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 43beacc4..23e1dbc0 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -18,6 +18,7 @@ import { voiceService } from '../common/service/voiceService'; import errorMsgDialog from './compontents/errorMsgDialog' import { getSyncData } from '../common/service/initable'; import GetDistance from '../common/utils/GetDistance' +import UdpEvent from '../common/utils/UdpEvent' import UIAbility from '@ohos.app.ability.UIAbility'; import { endRecordVideo, getUserAlbumItemByDisplayName, saveStartRecordVideo } from '../common/service/videoService'; @@ -299,9 +300,7 @@ struct Index { this.loading = false globalThis.lsh = '1111111111111' globalThis.errorDialog = this.errorDialog - const distanceClass = new GetDistance(globalThis.context) - await distanceClass.initFolder() - globalThis.distanceClass = distanceClass + globalThis.udpEvent = new UdpEvent(); } async testXMLToJSONInWorker() { @@ -443,6 +442,12 @@ struct Index { getTCP() this.deviceId = globalThis.carInfo.carNo await setCurrentTime(); + if(!globalThis.distanceClass){ + const distanceClass = new GetDistance(globalThis.context) + await distanceClass.initFolder() + globalThis.distanceClass = distanceClass + console.info('surenjun','distanceClass=>初始化完成') + } this.carNum = globalThis.carInfo.plateNo; this.version = globalThis.version; this.hasAuth = globalThis.hasAuth; diff --git a/entry/src/main/ets/pages/UserInfo.ets b/entry/src/main/ets/pages/UserInfo.ets index 98b16f75..cf64e09f 100644 --- a/entry/src/main/ets/pages/UserInfo.ets +++ b/entry/src/main/ets/pages/UserInfo.ets @@ -436,7 +436,7 @@ struct UserInfo { if(that.list.length == 0){ clearInterval(that.interval) that.interval = setInterval(() => { - that.getExaminationStudentInfoFn() + that.getExaminationStudentInfoFn() }, 5000) }else{ that.getExaminationStudentInfoFn() @@ -451,7 +451,7 @@ struct UserInfo { //人脸比对窗口关闭 changeFaceCompareSuccess() { - this.ksksLimit = false + this.ksksLimit = false console.log('this.faceCompareSuces', this.faceCompareSucess, JSON.stringify(this.currentUser)) if (this.faceCompareSucess > 0) { //人脸比对通过 diff --git a/entry/src/main/ets/pages/compontents/judge/BoardPrePareSetPopup.ets b/entry/src/main/ets/pages/compontents/judge/BoardPrePareSetPopup.ets index 5050625d..f0df1d70 100644 --- a/entry/src/main/ets/pages/compontents/judge/BoardPrePareSetPopup.ets +++ b/entry/src/main/ets/pages/compontents/judge/BoardPrePareSetPopup.ets @@ -36,6 +36,7 @@ export default struct DeductedPopup { kfdm: string, markreal: number, markcatalog: string + score:number }[] = [] //开始考试前判绕车一周评判是否开启 @State isOpen: boolean = false @@ -126,7 +127,7 @@ export default struct DeductedPopup { const index = this.currentIndex ? this.currentUniversalPageIndex : this.currentPageIndex; const mark = this.universalMarkRules[index * 7 + this.selectedLine]; const {judgeConfigObj,kssycs,avPlayer,judgeTask} = this; - this.kfdmArr.push({ xmdm: 1, kfdm: mark.markserial, markreal: mark.markreal, markcatalog: mark.markcatalog }) + this.kfdmArr.push({ xmdm: 1, kfdm: mark.markserial, markreal: mark.markreal, markcatalog: mark.markcatalog ,score:mark.score}) const kfdmArr = this.kfdmArr //计算总扣分 @@ -142,17 +143,12 @@ export default struct DeductedPopup { }))) if (judgeConfigObj['418'] == '1' || judgeConfig.kfVoiceOpen) { - avPlayer.playAudio([`voice/${mark.markcatalog}.mp3`], false, () => { + avPlayer.playAudio([`voice/${mark.markcatalog}.mp3`,`voice/mark_${Math.abs(mark.score)}.mp3`], false, () => { this.closePopup(true) }); return } - - if (singlePlay) { - return - } else { - this.closePopup() - } + this.closePopup(); return; if (score < 90) { diff --git a/entry/src/main/ets/pages/judgeSDK/api/judgeSDK.d.ts b/entry/src/main/ets/pages/judgeSDK/api/judgeSDK.d.ts index 1f0a04c3..0ea3fa74 100644 --- a/entry/src/main/ets/pages/judgeSDK/api/judgeSDK.d.ts +++ b/entry/src/main/ets/pages/judgeSDK/api/judgeSDK.d.ts @@ -24,7 +24,8 @@ export interface MarkRule { kfxh?: string onlyoneid?: number nocancelid?: number - gps_sid?: number + gps_sid?: number, + score?:number } export interface KF{ diff --git a/entry/src/main/ets/pages/judgeSDK/judge.ts b/entry/src/main/ets/pages/judgeSDK/judge.ts index b2bfaffb..3a1acc43 100644 --- a/entry/src/main/ets/pages/judgeSDK/judge.ts +++ b/entry/src/main/ets/pages/judgeSDK/judge.ts @@ -14,6 +14,7 @@ import { judgeConfig } from './utils/judgeConfig'; import { uploadExamProgressData, writeObjectOut } from '../../api/judge'; import UsbService from '../../common/service/usbService'; import { LANE,KF } from '../judgeSDK/api/judgeSDK.d'; +import {saveStartRecordVideo,endRecordVideo} from '../../common/service/videoService' import { Array2Byte, convertGpsCoord2, @@ -103,7 +104,7 @@ export default class Judge { //开始评判 private async judging(callBack: Function) { const {judgeUI} = this; - const { name, lsh, idCard} = judgeUI; + const { name, lsh, idCard,kssycs} = judgeUI; const fileLog = new FileLog(judgeUI.context); const filePath = await fileLog.initFileLogo({ name, lsh, idCard @@ -165,6 +166,10 @@ export default class Judge { console.info(judgeTag, '6.开始考试注册完成') avPlayer.playAudio([globalThis.singlePlay ? 'voice/ksks.WAV' : 'voice/监管成功.mp3']) + if(!globalThis.singlePlay){ + this.videoData = await saveStartRecordVideo(`${name}_${kssycs}`) + } + const {examSubject,projectsObj} = this.judgeUI if(examSubject == 3){ //不做模拟灯光,需要做上车准备 =>(请上车准备) @@ -459,7 +464,7 @@ export default class Judge { }); //语音播报 - this.goVoiceAnnounce(event, xmdm, this.kfArr, xmjs, ksjs) + this.goVoiceAnnounce(event, xmdm, this.kfArr, xmjs, ksjs,xmxh) //更新UI if (event == 1 || event == 2 || event == 3 || event == 6) { @@ -469,7 +474,7 @@ export default class Judge { } // 更改考试状态 - goVoiceAnnounce = async (event, xmdm, kf, xmjs, ksjs) => { + goVoiceAnnounce = async (event, xmdm, kf, xmjs, ksjs,xmxh) => { const { beginProject, pointsDedute, @@ -493,7 +498,7 @@ export default class Judge { case 1: const code = projectsObj[xmdm].projectCodeCenter; const isEnd = projectsObj[xmdm].isEnd; - const kmCode = getKmProjectVoice(code, 1, judgeConfigObj, lane) + const kmCode = getKmProjectVoice(code, 1, judgeConfigObj, lane,xmxh) if (!ignoreVoiceCodeArr.includes(code)) { kmCode && avPlayer.playAudio([`voice/${kmCode}.mp3`],true) } @@ -515,7 +520,7 @@ export default class Judge { case 2:{ const endCode = projectsObj[xmdm].projectCodeCenter; const projectIsEnd = projectsObj[xmdm].isEnd; - const endKmCode = getKmProjectVoice(endCode, 2, judgeConfigObj, lane) + const endKmCode = getKmProjectVoice(endCode, 2, judgeConfigObj, lane,xmxh) if (!ignoreVoiceCodeArr.includes(endCode) && examSubject == 3) { endKmCode && avPlayer.playAudio([`voice/${endKmCode}.mp3`]) } @@ -1040,9 +1045,9 @@ export default class Judge { console.info(judgeTag, `考试成绩:${totalScore}`) if(!singlePlay){ + await endRecordVideo(this.videoData) await uploadProgressData(); } - //语音播放扣分项 let score = 0; if (kfArr.length) { @@ -1633,4 +1638,5 @@ export default class Judge { private lane: LANE = { road: '', num: 0, count: 0 } + private videoData:any } \ No newline at end of file diff --git a/entry/src/main/ets/pages/judgeSDK/utils/judgeCommon.ts b/entry/src/main/ets/pages/judgeSDK/utils/judgeCommon.ts index b50c76de..0adf8fb7 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/judgeCommon.ts +++ b/entry/src/main/ets/pages/judgeSDK/utils/judgeCommon.ts @@ -88,16 +88,17 @@ export function getKmProjectVoice( // 1:项目开始 2:项目结束 type: 1 | 2, judgeConfig, - lane + lane, + xmxh ) { const carInfo = globalThis.carInfo; const { examSubject } = carInfo; const param506Str = judgeConfig['506']?.split(',') || []; const param512Str = judgeConfig['512']?.split(',') || []; - const param544Str = judgeConfig['544'] || 0; + const param544Str = judgeConfig['544']?.split(',') || []; const param405Str = judgeConfig['405'] || 0; - const {num,count} = lane + const {num,count,road} = lane if(examSubject == 2){ return projectCode } @@ -120,8 +121,10 @@ export function getKmProjectVoice( : undefined //直线行驶 case 40700 : return type === 1 ? 407001 : undefined - //TODO 通过学校 结束param544Str - case 41100 : return type === 1 ? (param512Str[2] ==3 ? 411001 : undefined):undefined + //通过学校 结束param544Str + case 41100 : return type === 1 + ? (param512Str[2] ==3 ? 411001 : undefined) + : (param544Str.includes(xmxh) ? undefined : 411004) //通过车站 case 41200 : return type === 1 ? (param512Str[2] ==3 ? 412001 : undefined):undefined //通过人行横道