diff --git a/entry/src/main/ets/pages/Judge.ets b/entry/src/main/ets/pages/Judge.ets index 129d12b..1d101ad 100644 --- a/entry/src/main/ets/pages/Judge.ets +++ b/entry/src/main/ets/pages/Judge.ets @@ -200,6 +200,7 @@ struct JudgePage { }) async aboutToDisappear() { + this.generateExamRecordsDialogController.close() clearInterval(this.mileageTimer) } diff --git a/entry/src/main/ets/pages/judgeSDK/judge.ets b/entry/src/main/ets/pages/judgeSDK/judge.ets index 5f5f22a..43662ce 100644 --- a/entry/src/main/ets/pages/judgeSDK/judge.ets +++ b/entry/src/main/ets/pages/judgeSDK/judge.ets @@ -261,6 +261,85 @@ export default class Judge { dConsole.info(JudgeTag, '过程数据文件上传 end') } private judgeTask: JudgeTask + // 检测扣分、结束项目时该项目是否开始 + checkProjectIsStart = async (xmdm: number, currentType: 1 | 2, kf?: MarkRule) => { + if (xmdm == 20) { + return true + } + const judgeUI = this.judgeUI; + const judgeTask = this.judgeTask; + const projectsObj: object = this.judgeUI.projectsObj + const currentProject: ProjectInfo = Reflect.get(projectsObj, xmdm) + const isUpload = currentProject.isUpload + + //如果项目没有开始 + dConsole.info(JudgeTag, 'surenjun isUpload=>', isUpload) + if (!isUpload) { + dConsole.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?: PLCType + //实时计算gps经纬度距离 + handDistance = async () => { + const dwzt = this.tempData?.gps?.dwzt || ""; + const jdzt = this.tempData?.gps?.jdzt || ""; + const tJD = ConvertDdmmToDecimalDegrees(this.tempData?.gps?.jd || 0) + const tWD = ConvertDdmmToDecimalDegrees(this.tempData?.gps?.wd || 0) + if (this.prevJd && dwzt == 4 && jdzt == 3) { + const distance = await examCalcGpsDistance({ + jd1: this.prevJd, + wd1: this.prevWd, + jd2: tJD, + wd2: tWD, + h: this.tempData?.gps?.hxj || 1, + }) + // const distanceClass = AppStorage.get('distanceClass') + // distanceClass?.setTimeData(Number(((distance / 100).toFixed(2)))) + DrivingDataStorage.setDrivingProcessData(Number(((distance / 100).toFixed(2)))) + } + this.prevJd = tJD; + this.prevWd = tWD; + } + private performInfo?: JudgePerformInfo + private isEndTip: boolean = false; + private deductedPopShowTimer: number = 0; // 校验考试是否结束 checkExamIsEnd = async (isManual?: boolean) => { @@ -374,85 +453,6 @@ export default class Judge { } } } - private tempData?: PLCType - //实时计算gps经纬度距离 - handDistance = async () => { - const dwzt = this.tempData?.gps?.dwzt || ""; - const jdzt = this.tempData?.gps?.jdzt || ""; - const tJD = ConvertDdmmToDecimalDegrees(this.tempData?.gps?.jd || 0) - const tWD = ConvertDdmmToDecimalDegrees(this.tempData?.gps?.wd || 0) - if (this.prevJd && dwzt == 4 && jdzt == 3) { - const distance = await examCalcGpsDistance({ - jd1: this.prevJd, - wd1: this.prevWd, - jd2: tJD, - wd2: tWD, - h: this.tempData?.gps?.hxj || 1, - }) - // const distanceClass = AppStorage.get('distanceClass') - // distanceClass?.setTimeData(Number(((distance / 100).toFixed(2)))) - DrivingDataStorage.setDrivingProcessData(Number(((distance / 100).toFixed(2)))) - } - this.prevJd = tJD; - this.prevWd = tWD; - } - private performInfo?: JudgePerformInfo - private isEndTip: boolean = false; - private deductedPopShowTimer: number = 0; - // 检测扣分、结束项目时该项目是否开始 - checkProjectIsStart = async (xmdm: number, currentType: 1 | 2, kf?: MarkRule) => { - if (xmdm == 20) { - return true - } - const judgeUI = this.judgeUI; - const judgeTask = this.judgeTask; - const projectsObj: object = this.judgeUI.projectsObj - const currentProject: ProjectInfo = Reflect.get(projectsObj, xmdm) - const isUpload = currentProject.isUpload - - //如果项目没有开始 - dConsole.info(JudgeTag, 'surenjun isUpload=>', isUpload) - if (!isUpload) { - dConsole.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 ksjs?: JudgeKSJS private kfArr?: MarkRule[] //所有的科目考试项目(大车&小车) @@ -1325,6 +1325,7 @@ export default class Judge { public handEndExam = async () => { dConsole.info(JudgeTag, '处理考试结束 handEndExam') // this.judgeUI.loadingPopupVisible = true; + dConsole.log(JudgeTag, ' 打开车辆loading1') this.judgeUI.generateExamRecordsDialogController.open() // this.judgeUI.endPopupVisible = false; this.judgeUI.endExamDialogController.close() @@ -1456,13 +1457,15 @@ export default class Judge { this.isUdpEnd = true; closeAllFiles() // this.judgeUI.loadingPopupVisible = false; + dConsole.log(JudgeTag, ' 关闭车辆loading1') this.judgeUI.generateExamRecordsDialogController.close() return } dConsole.info(JudgeTag, '考试结束 end') const param302: string = Reflect.get(judgeConfigObj, '302') // judgeUI.loadingPopupVisible = true; - judgeUI.generateExamRecordsDialogController.open() + dConsole.log(JudgeTag, ' 打开车辆loading2') + // judgeUI.generateExamRecordsDialogController.open() let currentKssycs = '0'; let voiceURL = '' if (examSubject == '2') { @@ -1563,6 +1566,8 @@ export default class Judge { setTimeout(() => { this.isUdpEnd = true closeAllFiles() + dConsole.log(JudgeTag, ' 关闭车辆loading2') + this.judgeUI.generateExamRecordsDialogController.close() router.back(); }, param302 == '8' ? 3000 : 0) }) diff --git a/entry/src/main/ets/pages/judgeSDK/utils/judgeTask.ets b/entry/src/main/ets/pages/judgeSDK/utils/judgeTask.ets index ebfdccb..ae6e38b 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/judgeTask.ets +++ b/entry/src/main/ets/pages/judgeSDK/utils/judgeTask.ets @@ -13,43 +13,68 @@ interface QUEUE { type GoTask = (currentTask: QUEUE) => Promise export default class JudgeTask { - //执行任务 - goTask: GoTask = async (currentTask: QUEUE) => { - const fn = currentTask.fn; - const delayConfig = currentTask.delayConfig || { - isDelay: false, delayTime: 1000 - } - const isDelay = delayConfig.isDelay - const delayTime = delayConfig.delayTime - - return false - } - private queue?: QUEUE[] = [] - private status: string + private queue: QUEUE[] = []; + private status: string = 'end'; + private isExecuting: boolean = false; + // 改为迭代方式执行队列 executeQueue = async () => { - const queue = this.queue; - const executeQueue = this.executeQueue - if (queue?.length) { - for (const currentTask of queue) { - await this.goTask(currentTask) - this.queue?.shift() - await executeQueue() + if (this.isExecuting) return; + + this.isExecuting = true; + this.status = 'running'; + + while (this.queue.length > 0) { + const currentTask = this.queue[0]; + try { + await this.goTask(currentTask); + } finally { + this.queue.shift(); } - } else { - this.status = 'end' } + + this.status = 'end'; + this.isExecuting = false; } addTask = async (fn: Function, delayConfig?: DelayConfig) => { - this.queue?.push({ - fn, delayConfig + this.queue.push({ + fn, + delayConfig }); - if (this.status == 'end' && this.queue?.length === 1) { + + // 如果当前没有在执行,就启动执行 + if (!this.isExecuting) { await this.executeQueue(); } } constructor() { - this.queue = [] - this.status = 'end' + this.queue = []; + this.status = 'end'; + this.isExecuting = false; } -} + + // 执行任务 + goTask: GoTask = async (currentTask: QUEUE) => { + try { + const fn = currentTask.fn; + const delayConfig = currentTask.delayConfig || { + isDelay: false, delayTime: 1000 + } + + // 实际执行任务函数 + await fn(); + + // 处理延迟逻辑 + if (delayConfig.isDelay && delayConfig.delayTime) { + await new Promise(resolve => { + setTimeout(resolve, delayConfig.delayTime); + }); + } + + return true; + } catch (error) { + console.error(TAG, '任务执行失败:', error); + return false; + } + } +} \ No newline at end of file