From 4e679d1645d0ed34abed550264b75eed75bf3190 Mon Sep 17 00:00:00 2001 From: wangzhongjie Date: Wed, 9 Apr 2025 10:52:42 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E4=B8=AD=E7=9A=84=E4=BB=A3=E7=A0=81=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=92=8C=E7=B1=BB=E5=9E=8B=E5=A3=B0=E6=98=8E=EF=BC=8C?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E4=BB=A3=E7=A0=81=E4=B8=80=E8=87=B4=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/pages/CarCheck.ets | 26 +- entry/src/main/ets/pages/Index.ets | 2 +- entry/src/main/ets/pages/UserInfo.ets | 4 +- .../ets/pages/compontents/errorMsgDialog.ets | 305 +++++++++--------- .../judge/BoardPrePareSetPopup.ets | 2 +- entry/src/main/ets/pages/judgeSDK/judge.ets | 300 +++++++++-------- .../judgeSDK/utils/voiceAnnouncements.ets | 34 +- 7 files changed, 342 insertions(+), 331 deletions(-) diff --git a/entry/src/main/ets/pages/CarCheck.ets b/entry/src/main/ets/pages/CarCheck.ets index d1602a6c..bd87e65e 100644 --- a/entry/src/main/ets/pages/CarCheck.ets +++ b/entry/src/main/ets/pages/CarCheck.ets @@ -4,7 +4,7 @@ import TopLogo from './compontents/TopLogo'; import testNapi from '@ohos.hiserialsdk'; import { DwMapData, PassData, RealNumData, StackValueData, WarnFlagData, WarnFlagTipData } from '../mock'; import { BaseInfoType, RouteParamsType } from '../model/Common'; -import { CarCheckDataType, CarConfigurationParams, CarInfoType, SpzdType } from '../model'; +import { CarCheckDataType, CarConfigurationParams, CarInfoType } from '../model'; import { BusinessError } from '@ohos.base'; import { voiceService } from '../utils/Voice'; import dayTs from '../utils/Date'; @@ -144,7 +144,7 @@ struct Index { const param: CarConfigurationParams = { body: { "carIdString": this.carInfo.carId || "", //考车ID - "deviceNo": baseInfo.deviceNo || "" + "deviceNo": baseInfo?.deviceNo || "" } } @@ -221,8 +221,7 @@ struct Index { } return } - - if (this.warnFlagTip.get(that.index).length > 1) { + if ((this.warnFlagTip.get(that.index) || []).length > 1) { if (that.stachValue[that.index] != that.signArr[that.realNum[that.index]]) { that.warnFlag[that.index] = '2' } @@ -327,9 +326,10 @@ struct Index { // if (!flag) { // that.warnFlag[index] = '2'; // } - const spzd: SpzdType = AppStorage.get('spzd')!; - const hasTruthyValue = Object.values(spzd).some((value: string) => value); - that.warnFlag[index] = hasTruthyValue ? '1' : '2'; + // TODO 视频遮挡 + // const spzd: SpzdType = AppStorage.get('spzd')!; + // const hasTruthyValue = Object.values(spzd).some((value: string) => value); + // that.warnFlag[index] = hasTruthyValue ? '1' : '2'; } else { that.warnFlag[index] = '2' } @@ -346,16 +346,16 @@ struct Index { this.passArray[this.index] = true this.passArray = JSON.parse(JSON.stringify(this.passArray)) this.subFlag = true - let name: string = this.warnFlagTip.get(this.index)[0] - if (this.warnFlagTip.get(this.index).length == 1) { - this.vocObj.playAudio({ + let name: string = this.warnFlagTip.get(this.index)?.[0] || ''; + if (this.warnFlagTip.get(this.index)?.length == 1) { + this.vocObj!.playAudio({ type: 1, name, }) - } else if (this.warnFlagTip.get(this.index).length == 2) { + } else if (this.warnFlagTip.get(this.index)?.length == 2) { if (this.signArr[this.realNum[this.index]] && this.signArr[this.realNum[this.index]] != '0') { - name = this.warnFlagTip.get(this.index)[1] - this.vocObj.playAudio({ + name = this.warnFlagTip.get(this.index)?.[1] || ''; + this.vocObj!.playAudio({ type: 1, name, }) diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 8858543e..95ed1b7a 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -64,7 +64,7 @@ struct Index { private context = getContext(this) as common.UIAbilityContext; async aboutToAppear() { - this.avPlayer = new VoiceAnnounce(); + this.avPlayer = new VoiceAnnounce(this.context); this.ratio = AppStorage.get('ratio') this.initParamFlag = false this.delLoading = false diff --git a/entry/src/main/ets/pages/UserInfo.ets b/entry/src/main/ets/pages/UserInfo.ets index 75320021..91123cb9 100644 --- a/entry/src/main/ets/pages/UserInfo.ets +++ b/entry/src/main/ets/pages/UserInfo.ets @@ -15,7 +15,6 @@ import LoadingPopup from './compontents/judge/LoadingPopup'; import VoiceAnnounce from './judgeSDK/utils/voiceAnnouncements'; import { JudgeConfig } from './judgeSDK/utils/judgeConfig'; // import { initJudgeUdp } from '../common/utils/UdpJudge'; -import errorMsgDialog from './compontents/errorMsgDialog'; import imageBtn from './compontents/imageBtn'; import { CryptoJS } from '@ohos/crypto-js'; @@ -45,6 +44,7 @@ import { GetCurrentTime, NumberToByteArray } from '../utils/Common'; import DB from '../utils/DbSql'; import { CenterUDPClientInstance } from '../utils/business/CenterUdpBusiness'; import { JudgeEmitterInstance } from '../utils/business/UdpEvent'; +import errorMsgDialog from './compontents/errorMsgDialog'; @Entry @Component @@ -210,7 +210,7 @@ struct UserInfo { ] aboutToAppear() { - this.avPlayer = new VoiceAnnounce(); + this.avPlayer = new VoiceAnnounce(this.context); } async onPageShow() { diff --git a/entry/src/main/ets/pages/compontents/errorMsgDialog.ets b/entry/src/main/ets/pages/compontents/errorMsgDialog.ets index e06c1319..d5f61fbe 100644 --- a/entry/src/main/ets/pages/compontents/errorMsgDialog.ets +++ b/entry/src/main/ets/pages/compontents/errorMsgDialog.ets @@ -1,156 +1,173 @@ -import router from '@ohos.router'; +// import router from '@ohos.router'; @CustomDialog export default struct errorMsgDialog { + dialogRatio: number = 0.8 + title?: string + type: string //1 tip 2loading 3Dialog + @State angle: number = 0 private controller?: CustomDialogController cancel: () => void = () => { } confirm: () => void = () => { } - dialogRatio: number = 0.8 - title?: string - type: string //1 tip 2loading 3Dialog - @State angle: number = 0 - - @Styles - commStyle(){ - .width(220 * globalThis.ratio * this.dialogRatio * 0.6) - .height(69 * globalThis.ratio * this.dialogRatio * 0.6) - .backgroundImage($r('app.media.button_nor')) - .backgroundImageSize({ width: '100%', height: '100%' }) - // .margin({ bottom: 12 * this.ratio }) - } build() { - Column() { - if (this.title) { - Text(this.title) - .fontSize(30 * this.dialogRatio) - .margin(120 * this.dialogRatio) - } - if (this.type == '2') { - Image($r('app.media.open_loading')) - .width(200) - .rotate({ angle: this.angle }) - .height(200) - .animation({ - duration: 5000, // 动画时长 - curve: Curve.EaseOut, // 动画曲线 - delay: 500, // 动画延迟 - iterations: -1, // 播放次数 - playMode: PlayMode.Normal, // 动画模式 - }) - .margin(50) - } - if (this.type == '3') { - Row() { - Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { - Text(' 取 消 ') - .fontSize(24 * globalThis.ratio * this.dialogRatio * 0.6) - .fontColor('#fff') - .width(60 * globalThis.ratio * this.dialogRatio) - } - .commStyle() - .onClick(() => { - if (this.controller != undefined) { - const errorCode = AppStorage.Get('errorMsg'); - // const errorCodeFlage=AppStorage.Get('errorCodeFlage'); - // console.log('errorCode',errorCode,errorCodeFlage) - if (errorCode == 0) { - router.replaceUrl({ - url: 'pages/Index', - }, router.RouterMode.Single); - router.clear(); - - } - this.cancel() - this.controller.close() - } - }).margin({ right: 10 * globalThis.ratio * this.dialogRatio }) - - Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { - Text(' 确 定 ') - .fontSize(24 * globalThis.ratio * this.dialogRatio * 0.6) - .fontColor('#fff') - .width(60 * globalThis.ratio * this.dialogRatio) - } - .commStyle() - .onClick(() => { - const errorCode = AppStorage.Get('errorCode'); - const errorCodeFlage = AppStorage.Get('errorCodeFlage'); - console.log('errorCode', errorCode, errorCodeFlage) - if (errorCode == 0 && errorCodeFlage) { - router.replaceUrl({ - url: 'pages/Index', - }, router.RouterMode.Single); - router.clear(); - - } - console.log('errorCode', errorCode, errorCodeFlage) - - if (this.controller != undefined) { - this.confirm() - this.controller.close() - } - } - - ) - } - - .padding({ bottom: 20 }) - } - if (this.type == '4') { - Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { - Text(' 确 定 ') - .fontSize(24 * globalThis.ratio * this.dialogRatio * 0.6) - .fontColor('#fff') - .width(60 * globalThis.ratio * this.dialogRatio) - } - .commStyle() - .onClick(() => { - const errorCode = AppStorage.Get('errorCode'); - const errorCodeFlage = AppStorage.Get('errorCodeFlage'); - console.log('errorCode', errorCode, errorCodeFlage) - if (errorCode == 0 && errorCodeFlage) { - router.replaceUrl({ - url: 'pages/Index', - }, router.RouterMode.Single); - router.clear(); - - } - console.log('errorCode', errorCode, errorCodeFlage) - - if (this.controller != undefined) { - this.confirm() - this.controller.close() - } - } - ) - } - } - .backgroundColor('#E6E3DF') - .borderRadius(19 * globalThis.ratio) - .constraintSize({ minWidth: 520 }) } +} - aboutToAppear() { - AppStorage.SetOrCreate('errorMsg', 0); - setTimeout(() => { - console.log('this.type', this.type, this.angle) - if (this.type == '2') { - this.angle = 360 - } - }, 1000) - if (this.type == '1') { - setTimeout(() => { - this.controller.close() - }, 2000) - } - } - - aboutToDisappear() { - this.title = '' - this.angle = 0 - AppStorage.SetOrCreate('errorCodeFlage', false); - } -} \ No newline at end of file +// +// @CustomDialog +// export default struct errorMsgDialog { +// private controller?: CustomDialogController +// cancel: () => void = () => { +// } +// confirm: () => void = () => { +// } +// dialogRatio: number = 0.8 +// title?: string +// type: string //1 tip 2loading 3Dialog +// @State angle: number = 0 +// +// @Styles +// commStyle(){ +// .width(220 * globalThis.ratio * this.dialogRatio * 0.6) +// .height(69 * globalThis.ratio * this.dialogRatio * 0.6) +// .backgroundImage($r('app.media.button_nor')) +// .backgroundImageSize({ width: '100%', height: '100%' }) +// // .margin({ bottom: 12 * this.ratio }) +// } +// +// build() { +// Column() { +// if (this.title) { +// Text(this.title) +// .fontSize(30 * this.dialogRatio) +// .margin(120 * this.dialogRatio) +// } +// if (this.type == '2') { +// Image($r('app.media.open_loading')) +// .width(200) +// .rotate({ angle: this.angle }) +// .height(200) +// .animation({ +// duration: 5000, // 动画时长 +// curve: Curve.EaseOut, // 动画曲线 +// delay: 500, // 动画延迟 +// iterations: -1, // 播放次数 +// playMode: PlayMode.Normal, // 动画模式 +// }) +// .margin(50) +// } +// if (this.type == '3') { +// Row() { +// Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { +// Text(' 取 消 ') +// .fontSize(24 * globalThis.ratio * this.dialogRatio * 0.6) +// .fontColor('#fff') +// .width(60 * globalThis.ratio * this.dialogRatio) +// } +// .commStyle() +// .onClick(() => { +// if (this.controller != undefined) { +// const errorCode = AppStorage.Get('errorMsg'); +// // const errorCodeFlage=AppStorage.Get('errorCodeFlage'); +// // console.log('errorCode',errorCode,errorCodeFlage) +// if (errorCode == 0) { +// router.replaceUrl({ +// url: 'pages/Index', +// }, router.RouterMode.Single); +// router.clear(); +// +// } +// this.cancel() +// this.controller.close() +// } +// }).margin({ right: 10 * globalThis.ratio * this.dialogRatio }) +// +// Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { +// Text(' 确 定 ') +// .fontSize(24 * globalThis.ratio * this.dialogRatio * 0.6) +// .fontColor('#fff') +// .width(60 * globalThis.ratio * this.dialogRatio) +// } +// .commStyle() +// .onClick(() => { +// const errorCode = AppStorage.Get('errorCode'); +// const errorCodeFlage = AppStorage.Get('errorCodeFlage'); +// console.log('errorCode', errorCode, errorCodeFlage) +// if (errorCode == 0 && errorCodeFlage) { +// router.replaceUrl({ +// url: 'pages/Index', +// }, router.RouterMode.Single); +// router.clear(); +// +// } +// console.log('errorCode', errorCode, errorCodeFlage) +// +// if (this.controller != undefined) { +// this.confirm() +// this.controller.close() +// } +// } +// +// ) +// } +// +// .padding({ bottom: 20 }) +// } +// if (this.type == '4') { +// Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { +// Text(' 确 定 ') +// .fontSize(24 * globalThis.ratio * this.dialogRatio * 0.6) +// .fontColor('#fff') +// .width(60 * globalThis.ratio * this.dialogRatio) +// } +// .commStyle() +// .onClick(() => { +// const errorCode = AppStorage.Get('errorCode'); +// const errorCodeFlage = AppStorage.Get('errorCodeFlage'); +// console.log('errorCode', errorCode, errorCodeFlage) +// if (errorCode == 0 && errorCodeFlage) { +// router.replaceUrl({ +// url: 'pages/Index', +// }, router.RouterMode.Single); +// router.clear(); +// +// } +// console.log('errorCode', errorCode, errorCodeFlage) +// +// if (this.controller != undefined) { +// this.confirm() +// this.controller.close() +// } +// } +// ) +// } +// } +// .backgroundColor('#E6E3DF') +// .borderRadius(19 * globalThis.ratio) +// .constraintSize({ minWidth: 520 }) +// } +// +// aboutToAppear() { +// AppStorage.SetOrCreate('errorMsg', 0); +// setTimeout(() => { +// console.log('this.type', this.type, this.angle) +// if (this.type == '2') { +// this.angle = 360 +// } +// }, 1000) +// if (this.type == '1') { +// setTimeout(() => { +// this.controller.close() +// }, 2000) +// } +// } +// +// aboutToDisappear() { +// this.title = '' +// this.angle = 0 +// AppStorage.SetOrCreate('errorCodeFlage', false); +// } +// } \ No newline at end of file diff --git a/entry/src/main/ets/pages/compontents/judge/BoardPrePareSetPopup.ets b/entry/src/main/ets/pages/compontents/judge/BoardPrePareSetPopup.ets index 479054f7..32bc48ed 100644 --- a/entry/src/main/ets/pages/compontents/judge/BoardPrePareSetPopup.ets +++ b/entry/src/main/ets/pages/compontents/judge/BoardPrePareSetPopup.ets @@ -83,7 +83,7 @@ export default struct DeductedPopup { async aboutToAppear() { this.carInfo = AppStorage.get('carInfo') this.singlePlay = AppStorage.get('singlePlay') - this.avPlayer = new VoiceAnnounce(); + this.avPlayer = new VoiceAnnounce(this.context); this.judgeTask = new JudgeTask(); const mediaTest = new FilePhoto(this.context); this.filePhoto = mediaTest diff --git a/entry/src/main/ets/pages/judgeSDK/judge.ets b/entry/src/main/ets/pages/judgeSDK/judge.ets index dc75b64f..e412b03f 100644 --- a/entry/src/main/ets/pages/judgeSDK/judge.ets +++ b/entry/src/main/ets/pages/judgeSDK/judge.ets @@ -13,13 +13,7 @@ import { JudgeConfig } from './utils/judgeConfig'; import { LANE } from '../judgeSDK/api/judgeSDK.d'; import { GetSyncData, SqlInsertTable } from '../../utils/table/Operation'; -import { - getCarStatus, - getCenterProjectStatus, - plcStrToJson, - plcStrToWXJson, - promptWxCode -} from './utils/judgeCommon'; +import { getCarStatus, getCenterProjectStatus, plcStrToJson, plcStrToWXJson, promptWxCode } from './utils/judgeCommon'; import { examCalcGpsDistance, @@ -53,6 +47,7 @@ import { JudgeBeginObj, JudgeCallBackData, JudgeConfigObj, + JudgeConfigObjKmItems, JudgeEventKf, JudgeInitObj, JudgeKFXM, @@ -64,7 +59,6 @@ import { JudgeXMJS, Km3JudgeInitConfig, KmItem, - JudgeConfigObjKmItems, MarkRule, Plc, ProjectInfo, @@ -185,38 +179,6 @@ export default class Judge { private isExamEnd: boolean // 是否发送udp private isUdpEnd: boolean = false - // 处理udp plc信号 - handleUdp = async (msg: string) => { - console.info('plc信号', msg) - const stachArr = msg.split(',') - if (stachArr[0] != '#DN_GD' || this.isUdpEnd) { - return - } - const plcData = await this.getPlcData(msg); - // 4.过程数据 - await this.fileLog.setExamJudgeData(JSON.stringify(plcData)) - //检测到有无锡所设备接入,需要发送特定的数据,供检测 - // if (this.usbService.isWXUSBDevice) { - // const str = await senorToWXDataStr(msg); - // this.usbService.sendUSB(str) - // } - const param350: number = Reflect.get(this.judgeUI.judgeConfigObj, '350') - this.judgeUI.sd = ((param350 == 0 ? plcData.gps.sd : plcData.sensor.cs) as number * 1.852).toFixed(0) + '' - this.judgeUI.dw = (Math.floor(plcData.sensor.dw as number) || 0) + '' - //TODO 暂时关闭差分检测异常 - // await this.checkDwzt(plcData.gps.dwzt,plcData.gps.jdzt); - if (!this.isExamEnd) { - await examJudgeRealExam(plcData) - } - let udpIndex = AppStorage.get('udpIndex'); - if (udpIndex % 5 === 0 && !this.isUdpEnd) { - // TODO UPD缺失 - // const judgeUdp = globalThis.judgeUdp - // const bytes = await this.getMessageHeartbeat(this.isExamEnd); - // judgeUdp.send(bytes) - } - AppStorage.setOrCreate('udpIndex', udpIndex++) - } //是否手动结束考试 private isManual: boolean //UDP服务序列号 @@ -264,6 +226,60 @@ export default class Judge { console.info(judgeTag, '过程数据文件上传 end') } private judgeTask: JudgeTask + // 检测扣分、结束项目时该项目是否开始 + checkProjectIsStart = async (xmdm: number, currentType: 1 | 2, kf?: JudgeEventKf) => { + if (xmdm == 20) { + return true + } + const judgeUI = this.judgeUI; + const judgeTask = this.judgeTask; + const projectsObj = this.judgeUI.projectsObj + const currentProject: ProjectInfo = Reflect.get(projectsObj, xmdm) + const isUpload = currentProject.isUpload + + //如果项目没有开始 + console.info('surenjun isUpload=>', isUpload) + if (!isUpload) { + console.info(judgeTag, '项目补传开始') + //项目开始补传 + judgeTask.addTask(async () => { + await this.beginProject(xmdm) + }, { + isDelay: true + }) + judgeTask.addTask(async () => { + await this.uploadProgressPhoto(xmdm) + }, { + isDelay: true + }) + currentProject.isUpload = true; + Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject) + //扣分补传 + if (currentType == 2) { + judgeTask.addTask(async () => { + await this.pointsDedute(xmdm, kf) + }, { + isDelay: true + }) + } + //扣分补传判断是否合格 不合格补传项目结束 + if (currentType == 1 || (currentType == 2 && this.totalScore < judgeUI.passingScore)) { + judgeTask.addTask(async () => { + await this.endProject(xmdm) + }, { + isDelay: true + }) + currentProject.isEnd = true; + Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject) + } + judgeTask.addTask(async () => { + this.checkExamIsEnd() + }) + return false; + } else { + return true + } + } private tempData: Plc //实时计算gps经纬度距离 handDistance = async () => { @@ -427,6 +443,38 @@ export default class Judge { AppStorage.setOrCreate('msgStr', plc) return tempData } + // 处理udp plc信号 + handleUdp = async (msg: string) => { + console.info('plc信号', msg) + const stachArr = msg.split(',') + if (stachArr[0] != '#DN_GD' || this.isUdpEnd) { + return + } + const plcData = await this.getPlcData(msg); + // 4.过程数据 + await this.fileLog.setExamJudgeData(JSON.stringify(plcData)) + //检测到有无锡所设备接入,需要发送特定的数据,供检测 + // if (this.usbService.isWXUSBDevice) { + // const str = await senorToWXDataStr(msg); + // this.usbService.sendUSB(str) + // } + const param350: number = Reflect.get(this.judgeUI.judgeConfigObj, '350') + this.judgeUI.sd = ((param350 == 0 ? plcData.gps.sd : plcData.sensor.cs) as number * 1.852).toFixed(0) + '' + this.judgeUI.dw = (Math.floor(plcData.sensor.dw as number) || 0) + '' + //TODO 暂时关闭差分检测异常 + // await this.checkDwzt(plcData.gps.dwzt,plcData.gps.jdzt); + if (!this.isExamEnd) { + await examJudgeRealExam(plcData) + } + let udpIndex = AppStorage.get('udpIndex'); + if (udpIndex % 5 === 0 && !this.isUdpEnd) { + // TODO UPD缺失 + // const judgeUdp = globalThis.judgeUdp + // const bytes = await this.getMessageHeartbeat(this.isExamEnd); + // judgeUdp.send(bytes) + } + AppStorage.setOrCreate('udpIndex', udpIndex++) + } // 处理轨迹plc信号 handleTrajectoryUdp = async (strArr: string[]) => { // const { fileLog, setJudgeItem, setJudgeMark, endExam } = this; @@ -465,9 +513,9 @@ export default class Judge { } //本地轨迹回放地址 private trajectoryPath: string + //当前科目二的考试项目 // private currentKm2ItemsObj: any private isTrajectoryOpen: boolean; - //当前科目二的考试项目 // 调代理接口是否断网了 private isJudgeDisConnect: boolean; // 断网数据补传 @@ -482,67 +530,6 @@ export default class Judge { const code = await writeObjectOut(JSON.parse(examDataStr)); } } - // 考试过程照片 - uploadProgressPhoto = async (ksxm: number) => { - const time = GetCurrentTime(); - const judgeUI = this.judgeUI - const plcData = this.plcData - const photoBase64 = await this.getPhoto(); - const carInfo = AppStorage.get('carInfo'); - - const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, ksxm) - const judgeConfig_305: number = Reflect.get(judgeUI.judgeConfigObj, '305') - const drvexam: DrvexamType = { - lsh: judgeUI.lsh, - kskm: carInfo.examSubject, - ksxm: project.projectCodeCenter, - sfzmhm: judgeUI.idCard, - kchp: encodeURI(carInfo.plateNo), - zpsj: time, - zp: photoBase64, - cs: Math.floor((judgeConfig_305 == 0 ? plcData.gps.sd : plcData.sensor.cs) * 1.852), - ksdd: encodeURI(judgeUI.ksdd) - } - const data: RegulatoryInterfaceParams = { - xtlb: '17', - jkxlh: judgeUI.serialNumber, - jkid: '17C54', - drvexam - }; - const temp: WR = await this.sendWriteObjectOut(data, this.filePath); - if (temp.code === 2300007) { - this.isJudgeDisConnect = true - } - promptWxCode('17C54', temp.code) - console.info(judgeTag, '上传照片 end') - } - private artSubject3ProjectsCodesArr: number[] = [3, 9, 4, 10, 12, 11] - private lane: LANE = { - road: '', num: 0, count: 0 - } - private videoData: RecordHandleType - private disConnectNum: number = 0; - //调用监管接口 - sendWriteObjectOut: SendWriteObjectOut = async (data, filePath) => { - const temp = await writeObjectOut(data, filePath); - console.log("wzj", JSON.stringify(temp)) - //断网&网络超时次数计算 - if (temp.code == 2300007 || temp.code == 2300028) { - this.disConnectNum += 1; - if (this.disConnectNum < 5) { - return await this.sendWriteObjectOut(data, filePath) - } - } - - if (this.disConnectNum >= 5) { - console.info('surenjun', '123') - this.judgeUI.errorMsg = '当前的考试过程信息网络传输异常,程序点击确认将重启!'; - this.judgeUI.disConnectErrorOpen = true - } - - this.disConnectNum = 0 - return temp - } // 项目开始接口同步 beginProject = async (ksxm: number) => { const carInfo = AppStorage.get('carInfo'); @@ -612,66 +599,73 @@ export default class Judge { console.info(judgeTag, '项目结束 end') promptWxCode('17C55', temp.code) } - // 检测扣分、结束项目时该项目是否开始 - checkProjectIsStart = async (xmdm: number, currentType: 1 | 2, kf?: JudgeEventKf) => { - if (xmdm == 20) { - return true + private artSubject3ProjectsCodesArr: number[] = [3, 9, 4, 10, 12, 11] + private lane: LANE = { + road: '', num: 0, count: 0 + } + private videoData: RecordHandleType + private disConnectNum: number = 0; + //调用监管接口 + sendWriteObjectOut: SendWriteObjectOut = async (data, filePath) => { + const temp = await writeObjectOut(data, filePath); + console.log("wzj", JSON.stringify(temp)) + //断网&网络超时次数计算 + if (temp.code == 2300007 || temp.code == 2300028) { + this.disConnectNum += 1; + if (this.disConnectNum < 5) { + return await this.sendWriteObjectOut(data, filePath) + } } - const judgeUI = this.judgeUI; - const judgeTask = this.judgeTask; - const projectsObj = this.judgeUI.projectsObj - const currentProject: ProjectInfo = Reflect.get(projectsObj, xmdm) - const isUpload = currentProject.isUpload - //如果项目没有开始 - console.info('surenjun isUpload=>', isUpload) - if (!isUpload) { - console.info(judgeTag, '项目补传开始') - //项目开始补传 - judgeTask.addTask(async () => { - await this.beginProject(xmdm) - }, { - isDelay: true - }) - judgeTask.addTask(async () => { - await this.uploadProgressPhoto(xmdm) - }, { - isDelay: true - }) - currentProject.isUpload = true; - Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject) - //扣分补传 - if (currentType == 2) { - judgeTask.addTask(async () => { - await this.pointsDedute(xmdm, kf) - }, { - isDelay: true - }) - } - //扣分补传判断是否合格 不合格补传项目结束 - if (currentType == 1 || (currentType == 2 && this.totalScore < judgeUI.passingScore)) { - judgeTask.addTask(async () => { - await this.endProject(xmdm) - }, { - isDelay: true - }) - currentProject.isEnd = true; - Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject) - } - judgeTask.addTask(async () => { - this.checkExamIsEnd() - }) - return false; - } else { - return true + if (this.disConnectNum >= 5) { + console.info('surenjun', '123') + this.judgeUI.errorMsg = '当前的考试过程信息网络传输异常,程序点击确认将重启!'; + this.judgeUI.disConnectErrorOpen = true } + + this.disConnectNum = 0 + return temp + } + // 考试过程照片 + uploadProgressPhoto = async (ksxm: number) => { + const time = GetCurrentTime(); + const judgeUI = this.judgeUI + const plcData = this.plcData + const photoBase64 = await this.getPhoto(); + const carInfo = AppStorage.get('carInfo'); + + const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, ksxm) + const judgeConfig_305: number = Reflect.get(judgeUI.judgeConfigObj, '305') + const drvexam: DrvexamType = { + lsh: judgeUI.lsh, + kskm: carInfo.examSubject, + ksxm: project.projectCodeCenter, + sfzmhm: judgeUI.idCard, + kchp: encodeURI(carInfo.plateNo), + zpsj: time, + zp: photoBase64, + cs: Math.floor((judgeConfig_305 == 0 ? plcData.gps.sd : plcData.sensor.cs) * 1.852), + ksdd: encodeURI(judgeUI.ksdd) + } + const data: RegulatoryInterfaceParams = { + xtlb: '17', + jkxlh: judgeUI.serialNumber, + jkid: '17C54', + drvexam + }; + const temp: WR = await this.sendWriteObjectOut(data, this.filePath); + if (temp.code === 2300007) { + this.isJudgeDisConnect = true + } + promptWxCode('17C54', temp.code) + console.info(judgeTag, '上传照片 end') } constructor(judgeUI: JudgeUI) { this.serialIndex = 1; this.judgeUI = judgeUI //语音播放工具 - this.avPlayer = new VoiceAnnounce(); + this.avPlayer = new VoiceAnnounce(this.context); //模型工具 this.fileModel = new FileModel(judgeUI.context); //文件工具 diff --git a/entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ets b/entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ets index dfadf8a5..0fc678f7 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ets +++ b/entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ets @@ -17,11 +17,11 @@ export default class VoiceAnnounce { //队列时候立马终止 private isStopped: Boolean private queue: Queue[] - private newQueue: Queue[] - private pendingQueue: String[] - private callback: Function; + private newQueue?: Queue[] + private context: common.UIAbilityContext - constructor() { + constructor(context: common.UIAbilityContext) { + this.context = context this.isStopped = false; this.queue = [] } @@ -60,16 +60,17 @@ export default class VoiceAnnounce { const queue = this.queue; const isStopped = this.isStopped; const newQueue = this.newQueue; - const avPlayer = new AVPlayer(); + const avPlayer = new AVPlayer(this.context); if (isStopped) { //清空原来队列 - this.queue = newQueue + this.queue = newQueue ?? [] this.isStopped = false; await go() return } console.info(TAG, '当前播放队列' + JSON.stringify(queue)) - await avPlayer.play(queue[0].url, queue[0].callback); + await avPlayer.play(queue[0].url, queue[0].callback || (() => { + })); this.queue.shift(); console.info(TAG, '当前播放队列播放完成退出'); avPlayer.avPlayerStop(); @@ -84,11 +85,11 @@ export default class VoiceAnnounce { class AVPlayer { public avPlayer?: media.AVPlayer; - private voiceUrl: string[]; - private voiceStatus: 'completed' | 'playing' - private endCallback: Function + private endCallback?: Function + private context: common.UIAbilityContext - constructor() { + constructor(context: common.UIAbilityContext) { + this.context = context } // 以下为使用资源管理接口获取打包在HAP内的媒体资源文件并通过fdSrc属性进行播放示例 @@ -103,14 +104,14 @@ class AVPlayer { // console.info('surenjun fdPath=>',fdPath) console.info(TAG, 'audioPlayer => 准备加载资源播放') audioPlayer.on('dataLoad', () => { - this.voiceStatus = 'playing' + // this.voiceStatus = 'playing' console.info(TAG, 'audioPlayer => 播放资源开始') audioPlayer.play() }) return new Promise(async (resolve) => { audioPlayer.on('finish', () => { console.info(TAG, 'audioPlayer => 播放资源播放') - this.voiceStatus = 'completed' + // this.voiceStatus = 'completed' if (callback) { callback() } @@ -131,8 +132,7 @@ class AVPlayer { resolve(true) }); try { - const context: common.UIAbilityContext = AppStorage.get('context') - this.avPlayer.fdSrc = await context.resourceManager.getRawFd(name); + this.avPlayer.fdSrc = await this.context.resourceManager.getRawFd(name); } catch (e) { Prompt.showToast({ message: `${name}语音文件不存在`, @@ -195,14 +195,14 @@ class AVPlayer { case 'prepared': // prepare调用成功后上报该状态机 console.info(TAG, '播放资源播放') this.avPlayer.play(); - this.voiceStatus = 'playing' + // this.voiceStatus = 'playing' break; case 'playing': // play成功调用后触发该状态机上报 break; case 'paused': // pause成功调用后触发该状态机上报 break; case 'completed': // 播放结束后触发该状态机上报 - this.voiceStatus = 'completed' + // this.voiceStatus = 'completed' this.avPlayer.stop(); //调用播放结束接口 break; case 'stopped': // stop接口成功调用后触发该状态机上报 From a34b4549a92fdf205495d337eb259223f783dcd6 Mon Sep 17 00:00:00 2001 From: wangzhongjie Date: Wed, 9 Apr 2025 11:23:41 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E4=B8=AD=E7=9A=84=E7=B1=BB=E5=9E=8B=E5=A3=B0?= =?UTF-8?q?=E6=98=8E=E5=92=8C=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=B8=80=E8=87=B4=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/pages/Index.ets | 20 +- entry/src/main/ets/pages/Index/utils.ets | 29 +- entry/src/main/ets/pages/Settings.ets | 5 +- entry/src/main/ets/pages/TerminalInfos.ets | 24 +- entry/src/main/ets/pages/UserInfo.ets | 17 +- entry/src/main/ets/pages/VideoConfig.ets | 24 +- .../ets/pages/compontents/errorMsgDialog.ets | 2 +- .../ets/pages/compontents/judge/RealTime.ets | 390 +++++++++--------- .../judgeSDK/utils/voiceAnnouncements.ets | 18 +- entry/src/main/ets/utils/FileHelp.ets | 5 +- entry/src/main/ets/utils/Video.ets | 11 +- 11 files changed, 279 insertions(+), 266 deletions(-) diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 95ed1b7a..7b144943 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -44,7 +44,6 @@ struct Index { @State fd: number = -1; @State carInfo: CarInfoType = {}; @State num: number = 0; - fileHelper: FileHelper = null; errorDialog: CustomDialogController = new CustomDialogController({ builder: errorMsgDialog({ title: AppStorage.get('title'), @@ -58,14 +57,15 @@ struct Index { alignment: DialogAlignment.Center, }, ) + private fileHelper!: FileHelper private interval = -1; - private avPlayer: VoiceAnnounce + private avPlayer!: VoiceAnnounce private timeInfo: TimeSynchronizationRspBody private context = getContext(this) as common.UIAbilityContext; async aboutToAppear() { this.avPlayer = new VoiceAnnounce(this.context); - this.ratio = AppStorage.get('ratio') + this.ratio = AppStorage.get('ratio') || 0 this.initParamFlag = false this.delLoading = false this.dialogVisible = false @@ -88,8 +88,8 @@ struct Index { } async onPageShow(): Promise { - this.singlePlay = AppStorage.get('singlePlay') - this.baseInfo = AppStorage.get('baseInfo') + this.singlePlay = AppStorage.get('singlePlay') || false + this.baseInfo = AppStorage.get('baseInfo')! UseAuth(this.context).then(() => { this.initParams() @@ -153,7 +153,7 @@ struct Index { if (sys.v_no === '854') { AppStorage.setOrCreate('param854Str', sys.v_value) } - if (sys.v_no === '824' && decodeURIComponent(sys.v_value) == '0') { + if (sys.v_no === '824' && decodeURIComponent(sys.v_value || '') == '0') { router.pushUrl({ url: 'pages/CarCheck', params: { @@ -199,7 +199,7 @@ struct Index { } async createAlbum() { - this.fileHelper = new FileHelper(); + this.fileHelper = new FileHelper(this.context); const time = GetCurrentTime() const date = time.split(' ')[0] this.fileHelper.createAlbum('jt') @@ -223,10 +223,10 @@ struct Index { await GetDeviceInfo(this.context) await GetCarInfo() // getTCP() - this.carInfo = AppStorage.get('carInfo') - this.deviceId = this.carInfo.carNo + this.carInfo = AppStorage.get('carInfo')! + this.deviceId = this.carInfo.carNo || "" await SetCurrentTime() - this.timeInfo = AppStorage.get('timeInfo') + this.timeInfo = AppStorage.get('timeInfo')! DrivingDataStorage.init(this.context) DrivingDataStorage.initializeTheDrivingDataFolder() setTimeout(() => { diff --git a/entry/src/main/ets/pages/Index/utils.ets b/entry/src/main/ets/pages/Index/utils.ets index 87e65a36..e0762972 100644 --- a/entry/src/main/ets/pages/Index/utils.ets +++ b/entry/src/main/ets/pages/Index/utils.ets @@ -44,11 +44,11 @@ export async function GetCarInfo() { let date = new Date(); let params: ObtainCarExamInfoParams = { time: dayTs(date).format("YYYY-MM-DD HH:mm:ss"), - deviceNo: AppStorage.get('deviceNo') + deviceNo: AppStorage.get('deviceNo') || "" }; let res: ApiResponseType = await obtainCarExamInfo(params) - if (res.obtainCarExamInfoRsp.body) { - const carInfo: ObtainCarExamInfoRspBody = res?.obtainCarExamInfoRsp?.body + if (res.obtainCarExamInfoRsp && res.obtainCarExamInfoRsp.body) { + const carInfo: ObtainCarExamInfoRspBody = res?.obtainCarExamInfoRsp?.body! carInfo.plateNo = decodeURIComponent(carInfo.plateNo) AppStorage.setOrCreate('carInfo', carInfo) } @@ -82,18 +82,25 @@ export async function UseAuth(context: common.UIAbilityContext): Promise { - let deviceNo: string = AppStorage.get('deviceNo'); - let baseInfo: BaseInfoType = AppStorage.get('baseInfo') + let deviceNo: string = AppStorage.get('deviceNo')!; + let baseInfo: BaseInfoType = AppStorage.get('baseInfo')! let params: TimeSynchronizationParams = { time: dayTs(new Date()).format("YYYY-MM-DD HH:mm:ss"), deviceNo, - version: baseInfo.version, - judgeVersion: baseInfo.judgeVersion + version: baseInfo.version!, + judgeVersion: baseInfo.judgeVersion! } let res: ApiResponseType = await timeSynchronization(params); - AppStorage.setOrCreate('timeInfo', res.timeSynchronizationRsp.body) - let currentTime = res.timeSynchronizationRsp.head.time; - let times = new Date(currentTime).getTime(); + if (res.timeSynchronizationRsp?.body) { + AppStorage.setOrCreate('timeInfo', res.timeSynchronizationRsp.body); + } + let currentTime = res.timeSynchronizationRsp?.head?.time; + let times = 0 + if (currentTime) { + times = new Date(currentTime).getTime(); + } else { + console.error("currentTime is undefined"); + } try { await systemTime.setTime(times) } catch (error) { @@ -129,7 +136,7 @@ async function obtainSerialNumber(data: string) { //设置流水号 export async function SetSerialNumber() { - const data = AppStorage.get("liushuiNo"); + const data = AppStorage.get("liushuiNo") || ""; const serialNumberTime = AppStorage.get("liushuiDate"); obtainSerialNumber(data); const date = dayTs().format('YYYY-MM-DD HH:mm:ss'); diff --git a/entry/src/main/ets/pages/Settings.ets b/entry/src/main/ets/pages/Settings.ets index 1910e3be..76e6d86b 100644 --- a/entry/src/main/ets/pages/Settings.ets +++ b/entry/src/main/ets/pages/Settings.ets @@ -1,5 +1,4 @@ import router from '@ohos.router' -import { CarCheckDataType } from '../model/CarCheck' import { BaseInfoType, CarInfoType } from '../model/Common' import TopLogo from './compontents/TopLogo' @@ -88,8 +87,8 @@ struct Index { aboutToAppear() { // this.vocObj = new voiceService(async (status, val, next) => { // }); - this.carInfo = AppStorage.get('carInfo') - this.baseInfo = AppStorage.get('baseInfo') + this.carInfo = AppStorage.get('carInfo')! + this.baseInfo = AppStorage.get('baseInfo')! } outClick() { diff --git a/entry/src/main/ets/pages/TerminalInfos.ets b/entry/src/main/ets/pages/TerminalInfos.ets index aeb0c3f3..3d919018 100644 --- a/entry/src/main/ets/pages/TerminalInfos.ets +++ b/entry/src/main/ets/pages/TerminalInfos.ets @@ -22,7 +22,7 @@ struct Index { '192.168.7.124', '20022', '192.168.7.170', '20122'] @State @Watch('outClick') outFlag: boolean = false; scroller: Scroller = new Scroller() - private fileUtil: FileUtils + private fileUtil!: FileUtils private context = getContext(this) as common.UIAbilityContext; build() { @@ -145,17 +145,17 @@ struct Index { } else { const result: EnvironmentConfigurationType = JSON.parse(data) AppStorage.setOrCreate("EnvironmentConfiguration", result) - this.inputTextList1[9] = result.udplocalIp - this.inputTextList1[10] = result.udplocalIpPort - this.inputTextList1[7] = result.udpOppositeIp - this.inputTextList1[8] = result.udpOppositeIpPort - this.inputTextList1[0] = result.tcpOppositeIp - this.inputTextList1[1] = result.tcpOppositePort - this.inputTextList1[5] = result.gateway - this.inputTextList1[4] = result.netMask - this.inputTextList1[6] = result.dnsServers - this.inputTextList1[2] = result.centerIp - this.inputTextList1[3] = result.centerPort + this.inputTextList1[9] = result.udplocalIp ?? '' + this.inputTextList1[10] = result.udplocalIpPort ?? '' + this.inputTextList1[7] = result.udpOppositeIp ?? '' + this.inputTextList1[8] = result.udpOppositeIpPort ?? '' + this.inputTextList1[0] = result.tcpOppositeIp ?? '' + this.inputTextList1[1] = result.tcpOppositePort ?? '' + this.inputTextList1[5] = result.gateway ?? '' + this.inputTextList1[4] = result.netMask ?? '' + this.inputTextList1[6] = result.dnsServers ?? '' + this.inputTextList1[2] = result.centerIp ?? '' + this.inputTextList1[3] = result.centerPort ?? '' } ethernet.getIfaceConfig("eth0").then(value => { diff --git a/entry/src/main/ets/pages/UserInfo.ets b/entry/src/main/ets/pages/UserInfo.ets index 91123cb9..f2529a74 100644 --- a/entry/src/main/ets/pages/UserInfo.ets +++ b/entry/src/main/ets/pages/UserInfo.ets @@ -799,7 +799,7 @@ struct UserInfo { const arr = [this.signNum || 0, 1] let tmpList: number[] = []; tmpList.push(NumberToByteArray(arr[0], 1 * 8)[0]) - tmpList.push(NumberToByteArray(arr[1], 1 * 8)[0]) + tmpList.push(NumberToByteArray(arr[1] ?? 0, 1 * 8)[0]) const param: UDPParamType = { id: 43, @@ -809,7 +809,8 @@ struct UserInfo { } CenterUDPClientInstance.sendData(param) // globalThis.udpClient2.sendMsgExt(param, this.context) - if (res.examinationStuAbsentRsp.head.resultCode == '0') { + if (res.examinationStuAbsentRsp && res.examinationStuAbsentRsp.head && + res.examinationStuAbsentRsp.head.resultCode == '0') { this.pageIndex = 0 this.qkFlag = false this.currentUser = EmptyCandidateObject @@ -829,9 +830,9 @@ struct UserInfo { // const { carId, examinationRoomId } = this.carInfo; const examItems = await getExaminationItem({ time: GetCurrentTime() || "", - carId: this.carInfo.carId, + carId: this.carInfo.carId || "", lsh: this.currentUser.lsh || '', - examinationRoomId: this.carInfo.examinationRoomId + examinationRoomId: this.carInfo.examinationRoomId || "" }); if (examItems?.getExaminationItemRsp?.body?.kssycs != 0) { @@ -856,9 +857,9 @@ struct UserInfo { //获取已考项目 examItems = await getExaminationItem({ time: GetCurrentTime(), - carId: this.carInfo.carId, + carId: this.carInfo.carId || "", lsh: this.currentUser.lsh || '', - examinationRoomId: this.carInfo.examinationRoomId + examinationRoomId: this.carInfo.examinationRoomId || "" }); } this.currentUser.id = '1' @@ -1032,7 +1033,7 @@ struct UserInfo { ksxl: this.currentUser.xldm, zp: photoBase64, kssj: dayTs(date).format("YYYY-MM-DD HH:mm:ss") || '', - kchp: decodeURI(this.carInfo.plateNo), + kchp: decodeURI(this.carInfo.plateNo || ""), Ksy2sfzmhm: this.currentUser.ksy2sfzmhm || '' } const param: RegulatoryInterfaceParams = { @@ -1130,7 +1131,7 @@ struct UserInfo { AppStorage.setOrCreate('lsh', item.lsh) setTimeout(() => { this.currentUser = item - this.currentUser.ksy2 = this.examinerLoginInfo.kgxm + this.currentUser.ksy2 = this.examinerLoginInfo.kgxm || "" }, 200) diff --git a/entry/src/main/ets/pages/VideoConfig.ets b/entry/src/main/ets/pages/VideoConfig.ets index cf8dc6f1..14a566e7 100644 --- a/entry/src/main/ets/pages/VideoConfig.ets +++ b/entry/src/main/ets/pages/VideoConfig.ets @@ -37,7 +37,7 @@ struct Index { { key: '第三路' }, { key: '第四路' }, ] - private fileUtil: FileUtils + private fileUtil!: FileUtils private context = getContext(this) as common.UIAbilityContext; private controller1: VideoController = new VideoController() private controller2: VideoController = new VideoController() @@ -240,7 +240,7 @@ struct Index { }.margin({ left: 5 * this.ratio, right: 10 * this.ratio }) Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) - .select(this.param.faceFlag) + .select(this.param.faceFlag || false) .width(22 * this.ratio) .height(22 * this.ratio) .onChange((value: boolean) => { @@ -420,7 +420,7 @@ struct Index { Column() { Row() { Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) - .select(this.param.videoRecord1) + .select(this.param.videoRecord1 || false) .width(22 * this.ratio) .height(22 * this.ratio) .onChange((value: boolean) => { @@ -429,7 +429,7 @@ struct Index { }) Text('一路').fontSize(16 * this.ratio).fontColor('#333333') Checkbox({ name: 'checkbox2', group: 'checkboxGroup' }) - .select(this.param.videoRecord2) + .select(this.param.videoRecord2 || false) .width(22 * this.ratio) .height(22 * this.ratio) .onChange((value: boolean) => { @@ -441,7 +441,7 @@ struct Index { Row() { Checkbox({ name: 'checkbox3', group: 'checkboxGroup' }) - .select(this.param.videoRecord3) + .select(this.param.videoRecord3 || false) .width(22 * this.ratio) .height(22 * this.ratio) .onChange((value: boolean) => { @@ -450,7 +450,7 @@ struct Index { }) Text('三路').fontSize(16 * this.ratio).fontColor('#333333') Checkbox({ name: 'checkbox4', group: 'checkboxGroup' }) - .select(this.param.videoRecord4) + .select(this.param.videoRecord4 || false) .width(22 * this.ratio) .height(22 * this.ratio) .onChange((value: boolean) => { @@ -469,7 +469,7 @@ struct Index { Column() { Row() { Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) - .select(this.param.spzd1) + .select(this.param.spzd1 || false) .width(22 * this.ratio) .height(22 * this.ratio) .onChange((value: boolean) => { @@ -477,7 +477,7 @@ struct Index { }) Text('一路').fontSize(16 * this.ratio).fontColor('#333333') Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) - .select(this.param.spzd2) + .select(this.param.spzd2 || false) .width(22 * this.ratio) .height(22 * this.ratio) .onChange((value: boolean) => { @@ -488,7 +488,7 @@ struct Index { Row() { Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) - .select(this.param.spzd3) + .select(this.param.spzd3 || false) .width(22 * this.ratio) .height(22 * this.ratio) .onChange((value: boolean) => { @@ -496,7 +496,7 @@ struct Index { }) Text('三路').fontSize(16 * this.ratio).fontColor('#333333') Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) - .select(this.param.spzd4) + .select(this.param.spzd4 || false) .width(22 * this.ratio) .height(22 * this.ratio) .onChange((value: boolean) => { @@ -513,7 +513,7 @@ struct Index { Row() { Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) - .select(this.param.shuiying) + .select(this.param.shuiying || false) .width(22 * this.ratio) .height(22 * this.ratio) .onChange((value: boolean) => { @@ -591,7 +591,7 @@ struct Index { aboutToAppear() { // this.ratio = globalThis.ratio - this.ratio = AppStorage.get('ratio') + this.ratio = AppStorage.get('ratio') || 0 this.openFlag = true const fileUtil = new FileUtils(this.context) this.fileUtil = fileUtil diff --git a/entry/src/main/ets/pages/compontents/errorMsgDialog.ets b/entry/src/main/ets/pages/compontents/errorMsgDialog.ets index d5f61fbe..a483248d 100644 --- a/entry/src/main/ets/pages/compontents/errorMsgDialog.ets +++ b/entry/src/main/ets/pages/compontents/errorMsgDialog.ets @@ -4,7 +4,7 @@ export default struct errorMsgDialog { dialogRatio: number = 0.8 title?: string - type: string //1 tip 2loading 3Dialog + type?: string @State angle: number = 0 private controller?: CustomDialogController cancel: () => void = () => { diff --git a/entry/src/main/ets/pages/compontents/judge/RealTime.ets b/entry/src/main/ets/pages/compontents/judge/RealTime.ets index 24891848..6bc47ee0 100644 --- a/entry/src/main/ets/pages/compontents/judge/RealTime.ets +++ b/entry/src/main/ets/pages/compontents/judge/RealTime.ets @@ -1,198 +1,204 @@ -import apiJudgeSdk from 'libJudgeSdk.so'; -import Judge from '../../judgeSDK/utils/judgeReal'; -import { MarkRule, Project, ProjectObj } from '../../judgeSDK/api/judgeSDK.d'; -import common from '@ohos.app.ability.common'; -import { - examJudgeMapSetScaling -} from '../../judgeSDK/api' - -interface RoadDataType { - name: string, - key: string | string[] -} - +// import apiJudgeSdk from 'libJudgeSdk.so'; +// import Judge from '../../judgeSDK/utils/judgeReal'; +// import { MarkRule, Project, ProjectObj } from '../../judgeSDK/api/judgeSDK.d'; +// import common from '@ohos.app.ability.common'; +// import { +// examJudgeMapSetScaling +// } from '../../judgeSDK/api' +// +// interface RoadDataType { +// name: string, +// key: string | string[] +// } @Component export default struct RealTime { - @State message: string = '开始绘制' - // 控制XComponent组件的创建和销毁 - @State draw: boolean = false - //监管接口序列号 - @State serialNumber: number = 0 - //模拟考试项目 - @State projects: Project[] = [] - @State projectsObj: ProjectObj = {} - @State markRuleListObj: MarkRule = {} - @State scaleNum: number = 100 - @State gpsActive: number = 1 - private widthNumber: string | number | Resource = 0 - private heightNumber: string | number | Resource = 0 - private context = getContext(this) as common.UIAbilityContext; - @State ratio: number = 1 - @State lane: Object = {} - @State timer:number = 0 - - constructor() { - super() - } - - // xcomponentController: XComponentController = new XComponentController() - build() { - Row() { - Column() { - Row() { - Text('车道信息').fontColor(this.gpsActive == 0 ? '#2D3C5A' : '#fff').fontSize(20) - } - .width('100%') - .height(37) - .backgroundColor(this.gpsActive == 0 ? '#fff' : '#1A1A1A') - .margin({ top: 10 * this.ratio, right: 10 }) - .justifyContent(FlexAlign.Center) - - Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Start }) { - ForEach(this.RoadData, (item) => { - Column() { - Text(`${item.name}:${this.getValues(item)}`) - .fontSize(20) - .lineHeight(30) - .fontColor('#fff') - }.height(30).justifyContent(FlexAlign.Start).width('100%') - }) - }.margin({top:5}) - - }.width(168 * 1.5) - .height(this.heightNumber) - .backgroundColor('#282828') - .margin({ top: 6 * this.ratio, }) - - Column() { - if (this.draw) { - XComponent({ - id: 'duolun_plugin_id_draw', //显示轨迹窗口id名称,注意这个ID要和C++侧一致,不能变 - type: 'surface', - libraryname: 'JudgeSdk' - // libraryname: 'judgesdk' - }) - .width(this.widthNumber) - .height(this.heightNumber) - .onLoad(() => { - apiJudgeSdk.examJudgeMapSetDrawing(true); //停止绘制地图轨迹,false:表示结束绘制 - }) - .onDestroy(() => { - apiJudgeSdk.examJudgeMapSetDrawing(false); //停止绘制地图轨迹,false:表示结束绘制 - this.draw = false; - }) - } else { - Column() { - } - .width(this.widthNumber) - .height(this.heightNumber) - } - } - .width('100%') - .backgroundColor('#fff') - - Row(){ - Image($rawfile('judge/big.png')).width(60).onClick(()=>{ - this.scaleFn( -this.getScaleNum() ) - }) - Image($rawfile('judge/small.png')).width(60).onClick(()=>{ - this.scaleFn( this.getScaleNum() ) - }).margin({left:20}) - }.position({x:'32%',y:60}) - } - .height('100%') } - - async aboutToDisappear() { - clearInterval(this.timer) - } - async aboutToAppear() { - const judge = new Judge(this) - let timer = setInterval(()=>{ - this.lane = AppStorage.get('laneData'); - },1000) - this.timer = timer - } - - getScaleNum = ()=>{ - const scaleNum = this.scaleNum; - if(scaleNum < 200){ - return 10 - } - if(scaleNum >= 200 && scaleNum < 400){ - return 30 - } - - if(scaleNum >= 400 && scaleNum < 600){ - return 50 - } - - if(scaleNum >= 600 && scaleNum < 800){ - return 70 - } - - if(scaleNum >= 800 && scaleNum < 1000){ - return 100 - } - - if(scaleNum >= 1000 && scaleNum < 2000){ - return 500 - } - if(scaleNum >= 2000 && scaleNum <= 5000){ - return 1000 - } - - return 1000 - } - - getValues(roadColumn) { - const lane = this.lane || {}; - let key = roadColumn.key; - let str = '' - if (Array.isArray(key)) { - key.forEach((k, index) => { - str += (lane[k] === undefined ? '' : lane[k]) + (index == key.length - 1 ? '' : '/') - }) - } else { - str = lane[key] === undefined ? '' : lane[key] - } - return str - } - - private RoadData: Array = [ - { name: '路段组号', key: 'MapRoad_Code_No' }, - { name: '路段编码', key: 'MapRoad_Name' }, - { name: '车轮压线', key: ['TouchLineType', 'TouchDir'] }, - { name: '车身碰线', key: ['TouchLineTypeCS', 'TouchLineDirCS'] }, - { name: '基准车道', key: ['BasePointInLaneNo', 'BaseLaneCount'] }, - { name: '前点车道', key: ['FrontPointLaneNo', 'FrontPointLaneCount'] }, - { name: '后车点道', key: ['BackPointLaneNo','BackPointLaneCount'] }, - { name: '左前/后车身距离', key: ['Body_LF_ToLeftEdge', 'Body_LB_ToLeftEdge'] }, - { name: '右前/后车身距离', key: ['Body_RF_ToRightEdge', 'Body_RB_ToRightEdge'] }, - { name: '右前/后车身边线', key: ['Body_RF_ToBaseLine','Body_RB_ToBaseLine'] }, - { name: '右前/后轮距离', key: ['Wheel_RF_ToRightEdge', 'Wheel_RB_ToRightEdge'] }, - { name: '右前/后轮边线', key: ['Wheel_RF_ToBaseLine', 'Wheel_RB_ToBaseLine'] }, - { name: '左前/后轮距离', key: ['Wheel_LF_ToRightEdge', 'Wheel_LB_ToRightEdge'] }, - { name: '左前/后轮边线', key: ['Wheel_LF_ToBaseLine', 'Wheel_LB_ToBaseLine'] }, - { name: '车道属性', key: ['BasePointInLaneDir', 'CrossLineAttr','DirInverse'] }, - { name: '形状', key: ['InShapeAttr', 'ShapeNo','ShapeNoWheel'] }, - { name: '路段点', key: ['CrossPointNo'] }, - ] - - scaleFn = async (num)=>{ - const scaleNum = this.scaleNum - if(scaleNum >0 && scaleNum < 5000){ - this.scaleNum += num; - } - if(scaleNum === 0 && num > 0){ - this.scaleNum += num; - } - if(scaleNum > 5000 && num < 0){ - this.scaleNum += num; - } - await examJudgeMapSetScaling(this.scaleNum); - } - } +// +// @Component +// export default struct RealTime { +// @State message: string = '开始绘制' +// // 控制XComponent组件的创建和销毁 +// @State draw: boolean = false +// //监管接口序列号 +// @State serialNumber: number = 0 +// //模拟考试项目 +// @State projects: Project[] = [] +// @State projectsObj: ProjectObj = {} +// @State markRuleListObj: MarkRule = {} +// @State scaleNum: number = 100 +// @State gpsActive: number = 1 +// private widthNumber: string | number | Resource = 0 +// private heightNumber: string | number | Resource = 0 +// private context = getContext(this) as common.UIAbilityContext; +// @State ratio: number = 1 +// @State lane: Object = {} +// @State timer:number = 0 +// +// constructor() { +// super() +// } +// +// // xcomponentController: XComponentController = new XComponentController() +// +// build() { +// Row() { +// Column() { +// Row() { +// Text('车道信息').fontColor(this.gpsActive == 0 ? '#2D3C5A' : '#fff').fontSize(20) +// } +// .width('100%') +// .height(37) +// .backgroundColor(this.gpsActive == 0 ? '#fff' : '#1A1A1A') +// .margin({ top: 10 * this.ratio, right: 10 }) +// .justifyContent(FlexAlign.Center) +// +// Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Start }) { +// ForEach(this.RoadData, (item) => { +// Column() { +// Text(`${item.name}:${this.getValues(item)}`) +// .fontSize(20) +// .lineHeight(30) +// .fontColor('#fff') +// }.height(30).justifyContent(FlexAlign.Start).width('100%') +// }) +// }.margin({top:5}) +// +// }.width(168 * 1.5) +// .height(this.heightNumber) +// .backgroundColor('#282828') +// .margin({ top: 6 * this.ratio, }) +// +// Column() { +// if (this.draw) { +// XComponent({ +// id: 'duolun_plugin_id_draw', //显示轨迹窗口id名称,注意这个ID要和C++侧一致,不能变 +// type: 'surface', +// libraryname: 'JudgeSdk' +// // libraryname: 'judgesdk' +// }) +// .width(this.widthNumber) +// .height(this.heightNumber) +// .onLoad(() => { +// apiJudgeSdk.examJudgeMapSetDrawing(true); //停止绘制地图轨迹,false:表示结束绘制 +// }) +// .onDestroy(() => { +// apiJudgeSdk.examJudgeMapSetDrawing(false); //停止绘制地图轨迹,false:表示结束绘制 +// this.draw = false; +// }) +// } else { +// Column() { +// } +// .width(this.widthNumber) +// .height(this.heightNumber) +// } +// } +// .width('100%') +// .backgroundColor('#fff') +// +// Row(){ +// Image($rawfile('judge/big.png')).width(60).onClick(()=>{ +// this.scaleFn( -this.getScaleNum() ) +// }) +// Image($rawfile('judge/small.png')).width(60).onClick(()=>{ +// this.scaleFn( this.getScaleNum() ) +// }).margin({left:20}) +// }.position({x:'32%',y:60}) +// } +// .height('100%') +// } +// +// async aboutToDisappear() { +// clearInterval(this.timer) +// } +// async aboutToAppear() { +// const judge = new Judge(this) +// let timer = setInterval(()=>{ +// this.lane = AppStorage.get('laneData'); +// },1000) +// this.timer = timer +// } +// +// getScaleNum = ()=>{ +// const scaleNum = this.scaleNum; +// if(scaleNum < 200){ +// return 10 +// } +// if(scaleNum >= 200 && scaleNum < 400){ +// return 30 +// } +// +// if(scaleNum >= 400 && scaleNum < 600){ +// return 50 +// } +// +// if(scaleNum >= 600 && scaleNum < 800){ +// return 70 +// } +// +// if(scaleNum >= 800 && scaleNum < 1000){ +// return 100 +// } +// +// if(scaleNum >= 1000 && scaleNum < 2000){ +// return 500 +// } +// if(scaleNum >= 2000 && scaleNum <= 5000){ +// return 1000 +// } +// +// return 1000 +// } +// +// getValues(roadColumn) { +// const lane = this.lane || {}; +// let key = roadColumn.key; +// let str = '' +// if (Array.isArray(key)) { +// key.forEach((k, index) => { +// str += (lane[k] === undefined ? '' : lane[k]) + (index == key.length - 1 ? '' : '/') +// }) +// } else { +// str = lane[key] === undefined ? '' : lane[key] +// } +// return str +// } +// +// private RoadData: Array = [ +// { name: '路段组号', key: 'MapRoad_Code_No' }, +// { name: '路段编码', key: 'MapRoad_Name' }, +// { name: '车轮压线', key: ['TouchLineType', 'TouchDir'] }, +// { name: '车身碰线', key: ['TouchLineTypeCS', 'TouchLineDirCS'] }, +// { name: '基准车道', key: ['BasePointInLaneNo', 'BaseLaneCount'] }, +// { name: '前点车道', key: ['FrontPointLaneNo', 'FrontPointLaneCount'] }, +// { name: '后车点道', key: ['BackPointLaneNo','BackPointLaneCount'] }, +// { name: '左前/后车身距离', key: ['Body_LF_ToLeftEdge', 'Body_LB_ToLeftEdge'] }, +// { name: '右前/后车身距离', key: ['Body_RF_ToRightEdge', 'Body_RB_ToRightEdge'] }, +// { name: '右前/后车身边线', key: ['Body_RF_ToBaseLine','Body_RB_ToBaseLine'] }, +// { name: '右前/后轮距离', key: ['Wheel_RF_ToRightEdge', 'Wheel_RB_ToRightEdge'] }, +// { name: '右前/后轮边线', key: ['Wheel_RF_ToBaseLine', 'Wheel_RB_ToBaseLine'] }, +// { name: '左前/后轮距离', key: ['Wheel_LF_ToRightEdge', 'Wheel_LB_ToRightEdge'] }, +// { name: '左前/后轮边线', key: ['Wheel_LF_ToBaseLine', 'Wheel_LB_ToBaseLine'] }, +// { name: '车道属性', key: ['BasePointInLaneDir', 'CrossLineAttr','DirInverse'] }, +// { name: '形状', key: ['InShapeAttr', 'ShapeNo','ShapeNoWheel'] }, +// { name: '路段点', key: ['CrossPointNo'] }, +// ] +// +// scaleFn = async (num)=>{ +// const scaleNum = this.scaleNum +// if(scaleNum >0 && scaleNum < 5000){ +// this.scaleNum += num; +// } +// if(scaleNum === 0 && num > 0){ +// this.scaleNum += num; +// } +// if(scaleNum > 5000 && num < 0){ +// this.scaleNum += num; +// } +// await examJudgeMapSetScaling(this.scaleNum); +// } +// +// } +// diff --git a/entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ets b/entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ets index 0fc678f7..0017a107 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ets +++ b/entry/src/main/ets/pages/judgeSDK/utils/voiceAnnouncements.ets @@ -132,7 +132,9 @@ class AVPlayer { resolve(true) }); try { - this.avPlayer.fdSrc = await this.context.resourceManager.getRawFd(name); + if (this.avPlayer) { + this.avPlayer.fdSrc = await this.context.resourceManager.getRawFd(name); + } } catch (e) { Prompt.showToast({ message: `${name}语音文件不存在`, @@ -164,7 +166,7 @@ class AVPlayer { //音频播放队列 public releasePlayer() { - this.avPlayer.release(); + this.avPlayer!.release(); } avPlayerStop = () => { @@ -175,7 +177,7 @@ class AVPlayer { // 注册avplayer回调函数 setAVPlayerCallback(callBack: Function) { - this.avPlayer.on('error', (err: BusinessError) => { + this.avPlayer!.on('error', (err: BusinessError) => { console.log(TAG, '播放器错误', JSON.stringify(err)) this.avPlayer && this.avPlayer.stop() this.avPlayer && this.avPlayer.reset() @@ -184,17 +186,17 @@ class AVPlayer { let num = 0; // 状态机变化回调函数 - this.avPlayer.on('stateChange', async (state, reason) => { + this.avPlayer!.on('stateChange', async (state, reason) => { const endCallback = this.endCallback; switch (state) { case 'idle': // 成功调用reset接口后触发该状态机上报 break; case 'initialized': // avplayer 设置播放源后触发该状态上报 - this.avPlayer.prepare() + this.avPlayer!.prepare() break; case 'prepared': // prepare调用成功后上报该状态机 console.info(TAG, '播放资源播放') - this.avPlayer.play(); + this.avPlayer!.play(); // this.voiceStatus = 'playing' break; case 'playing': // play成功调用后触发该状态机上报 @@ -203,10 +205,10 @@ class AVPlayer { break; case 'completed': // 播放结束后触发该状态机上报 // this.voiceStatus = 'completed' - this.avPlayer.stop(); //调用播放结束接口 + this.avPlayer!.stop(); //调用播放结束接口 break; case 'stopped': // stop接口成功调用后触发该状态机上报 - this.avPlayer.reset(); // 调用reset接口初始化avplayer状态 + this.avPlayer!.reset(); // 调用reset接口初始化avplayer状态 console.info(TAG, '播放资源释放') if (endCallback) { endCallback() diff --git a/entry/src/main/ets/utils/FileHelp.ets b/entry/src/main/ets/utils/FileHelp.ets index 6673601c..7189cc9c 100644 --- a/entry/src/main/ets/utils/FileHelp.ets +++ b/entry/src/main/ets/utils/FileHelp.ets @@ -23,10 +23,9 @@ export class FileHelper { photoAccessHelper.PhotoKeys.DATE_TRASHED, photoAccessHelper.PhotoKeys.HIDDEN ]; - private userFileMgr: photoAccessHelper.PhotoAccessHelper = undefined; + private userFileMgr!: photoAccessHelper.PhotoAccessHelper - constructor() { - const context: common.UIAbilityContext = AppStorage.get('context') + constructor(context: common.UIAbilityContext) { this.userFileMgr = photoAccessHelper.getPhotoAccessHelper(context); } diff --git a/entry/src/main/ets/utils/Video.ets b/entry/src/main/ets/utils/Video.ets index c6d93ed4..446ee300 100644 --- a/entry/src/main/ets/utils/Video.ets +++ b/entry/src/main/ets/utils/Video.ets @@ -81,7 +81,7 @@ export async function endRecordVideo(record_handleObj: RecordHandleType) { export async function saveStartRecordVideo(path: string, context?: common.UIAbilityContext): Promise { return new Promise(async (resolve, reject) => { const fileUtil = new FileUtils(context) - const fileHelper = new FileHelper(); + const fileHelper = new FileHelper(context); // const date = dateFormat(new Date).split(' ')[0] const date = dayTs().format('YYYY-MM-DD HH:mm:ss').split(' ')[0] fileHelper.createAlbum(date); @@ -97,7 +97,7 @@ export async function saveStartRecordVideo(path: string, context?: common.UIAbil for (let i = 1; i <= 4; i++) { if (Reflect.get(param, 'videoRecord' + 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); } @@ -129,7 +129,6 @@ interface takePhotoParam { * @param callback * @returns */ -const fileHelper = new FileHelper(); export async function delPic(day: number, type: number, context?: common.UIAbilityContext) { let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context); @@ -150,7 +149,7 @@ export async function delPic(day: number, type: number, context?: common.UIAbili for (let i = 0; i <= albums.length; i++) { let albumName = albums[i].albumName if (IsDaysAgo(albumName, day) && albumName != 'jt' && albumName != 'pz') { - deleteAllFileByPiC(albumName, type) + deleteAllFileByPiC(albumName, type, context) } } } @@ -196,8 +195,8 @@ export async function takePhoto(param: VideoConfig, context: common.UIAbilityCon //type:1 是图片 2是视频 -export async function deleteAllFileByPiC(dirName: string, type = 1) { - // const fileHelper = new FileHelper(); +export async function deleteAllFileByPiC(dirName: string, type = 1, context: common.UIAbilityContext) { + const fileHelper = new FileHelper(context); fileHelper.deleteFileOfAlbum(dirName, type); } From b1264c19e825c68f6793ad5f0aa681149c192fed Mon Sep 17 00:00:00 2001 From: wangzhongjie Date: Wed, 9 Apr 2025 11:27:55 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E4=B8=AD=E7=9A=84=E7=B1=BB=E5=9E=8B=E5=A3=B0?= =?UTF-8?q?=E6=98=8E=E5=92=8C=E9=80=BB=E8=BE=91=EF=BC=8C=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=B8=80=E8=87=B4=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/pages/ExaminerLogin.ets | 2 +- .../ets/pages/compontents/FaceCompare.ets | 51 ++++++++++--------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/entry/src/main/ets/pages/ExaminerLogin.ets b/entry/src/main/ets/pages/ExaminerLogin.ets index b9c82267..0f014f77 100644 --- a/entry/src/main/ets/pages/ExaminerLogin.ets +++ b/entry/src/main/ets/pages/ExaminerLogin.ets @@ -94,7 +94,7 @@ struct Index { if (this.limit) { return } - const carInfo: CarInfoType = AppStorage.get('carInfo') + const carInfo: CarInfoType = AppStorage.get('carInfo')! let password: string = CryptoJS.MD5(this.inputTextArr[1]).toString(); const param: UserLoginType = { carId: carInfo.carId as string, diff --git a/entry/src/main/ets/pages/compontents/FaceCompare.ets b/entry/src/main/ets/pages/compontents/FaceCompare.ets index 52299dd0..aefbf692 100644 --- a/entry/src/main/ets/pages/compontents/FaceCompare.ets +++ b/entry/src/main/ets/pages/compontents/FaceCompare.ets @@ -41,9 +41,9 @@ export default struct FaceCompare { @State carInfo: CarInfoType = {}; @State param: VideoConfig = VideoConfigData private times = 1; //人脸比对失败次数, 超过3次将不会自动比对,需要点击重新打开重新触发 - private vocObj: voiceService = null; + private vocObj!: voiceService; private controller: VideoController = new VideoController() - private fileUtil: FileUtils + private fileUtil!: FileUtils private interval: number = -1 private context = getContext(this) as common.UIAbilityContext; @@ -175,7 +175,7 @@ export default struct FaceCompare { async aboutToAppear() { const fileUtil = new FileUtils(this.context) - this.carInfo = AppStorage.get('carInfo') + this.carInfo = AppStorage.get('carInfo')! this.fileUtil = fileUtil this.getVideoConfig() } @@ -195,13 +195,13 @@ export default struct FaceCompare { faceCompare({ sfzh: this.sfzh, firstImage: this.firstImage.substr(22), - secondImage: data.base64, + secondImage: data.base64 || "", type: "2", verifyType: "1" }) .then(res => { console.log('mmmmm8', JSON.stringify(res)) - if (res.imageCompareRsp.head.resultCode == '0') { + if (res.imageCompareRsp?.head?.resultCode == '0') { this.controller.stop() this.showFaceCompare = !this.showFaceCompare this.showFaceCompareFlag = !this.showFaceCompareFlag @@ -231,7 +231,9 @@ export default struct FaceCompare { const str = this.lsh console.log('this.lshbitbit', this.lsh, this.carInfo.carNo, this.carInfo.examinationRoomId) for (let i = 0; i < str.length; i++) { - tmpList.push(NumberToByteArray(str.charCodeAt(i), 1 * 8)[0]) + if (str && str.charCodeAt(i) !== undefined) { + tmpList.push(NumberToByteArray(str.charCodeAt(i), 1 * 8)[0]); + } } const param: UDPParamType = { id: 46, @@ -282,34 +284,33 @@ export default struct FaceCompare { async getVideoConfig() { console.log('faceEnterIn') - this.vocObj = new voiceService(async (status: string, val: string) => { + this.vocObj = new voiceService(async (status: string, val?: string) => { if (status == 'idle') { - if (val == 'face_check.mp3' || val == 'face_fail.mp3') { + if (val === 'face_check.mp3' || val === 'face_fail.mp3') { if (this.times >= 3) { - AppStorage.setOrCreate('statue', 3) + AppStorage.setOrCreate('statue', 3); this.faceCompareSucess = -1; this.vocObj && this.vocObj.playAudio({ type: 1, - name: 'face_checking.wav' - }) - this.heartMsg() + name: 'face_checking.wav', + }); + this.heartMsg(); } else { setTimeout(() => { - this.faceComparFn() - }, 2000) + this.faceComparFn(); + }, 2000); } - } else if (val == 'yzcg.wav') { - this.showFaceCompare = !this.showFaceCompare - this.showFaceCompareFlag = !this.showFaceCompareFlag - AppStorage.setOrCreate('statue', 4) + } else if (val === 'yzcg.wav') { + this.showFaceCompare = !this.showFaceCompare; + this.showFaceCompareFlag = !this.showFaceCompareFlag; + AppStorage.setOrCreate('statue', 4); this.faceCompareSucess = 1; - this.vocObj && this.vocObj.releasePlayer() - - } else if (val == 'face_chekc_fail.wav') { - this.vocObj && this.vocObj.releasePlayer() - this.faceCompareSucess = -1 - this.showFaceCompare = !this.showFaceCompare - this.showFaceCompareFlag = !this.showFaceCompareFlag + this.vocObj && this.vocObj.releasePlayer(); + } else if (val === 'face_chekc_fail.wav') { + this.vocObj && this.vocObj.releasePlayer(); + this.faceCompareSucess = -1; + this.showFaceCompare = !this.showFaceCompare; + this.showFaceCompareFlag = !this.showFaceCompareFlag; } } }, this.context);