新评判重构
This commit is contained in:
		
							parent
							
								
									9617c63ebb
								
							
						
					
					
						commit
						33459e85ec
					
				| @ -1,5 +1,5 @@ | ||||
| { | ||||
|   "lockfileVersion": 2, | ||||
|   "lockfileVersion": 1, | ||||
|   "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", | ||||
|   "specifiers": {}, | ||||
|   "packages": {} | ||||
|  | ||||
| @ -104,6 +104,8 @@ export interface RouteParamsType { | ||||
|   kString?: string; | ||||
|   examItems?: string; | ||||
|   fromIndex?: boolean; | ||||
|   mode?: number | ||||
|   score?: number | ||||
| } | ||||
| 
 | ||||
| // 车辆信息 | ||||
|  | ||||
| @ -2,28 +2,29 @@ import { | ||||
|   JudgeConfigObjKmItems, | ||||
|   JudgeKSJS, | ||||
|   JudgePerformInfo, | ||||
|   JudgeUI, | ||||
|   LANE, | ||||
|   MarkRule, | ||||
|   PLCType, | ||||
|   ProcessDataEnumType, | ||||
|   RecordHandleType, | ||||
|   WorkerBackMessage, | ||||
|   WorkerBackMessageType | ||||
|   WorkerBackMessageType, | ||||
|   RouteParamsType | ||||
| } from '../../model' | ||||
| import FileUtils from '../../utils/FileUtils' | ||||
| import VoiceAnnounce from '../judgeSDK/utils/voiceAnnouncements' | ||||
| import common from '@ohos.app.ability.common' | ||||
| import { LargeJudge, RouterParam, SmallJudge } from './JudgeStart' | ||||
| import { LargeJudge } from './LargeJudgeBusiness' | ||||
| import { SmallJudge } from './SmallJudgeBusiness' | ||||
| import { dConsole } from '../../utils/LogWorker' | ||||
| import { JudgeTag } from '../../config' | ||||
| import { examJudgeRealExam } from './JudgeSDKUtils' | ||||
| import { JudgingFn, SetJudgeItem } from './JudgeIng' | ||||
| import { SetJudgeItem } from './JudgeIng' | ||||
| import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker' | ||||
| import { PlcStrToJson, PlcStrToWXJson } from './utils' | ||||
| import { JudgeEndFn } from './JudgeEnd' | ||||
| import { BaseJudge } from './Typing' | ||||
| import router from '@ohos.router' | ||||
| import { JudgePage } from '../Judge'; | ||||
| 
 | ||||
| export default class JudgeBusiness { | ||||
|   public mndgStr: string | undefined | ||||
| @ -58,13 +59,13 @@ export default class JudgeBusiness { | ||||
|   public carztStr: string | ||||
|   public ksjs?: JudgeKSJS | ||||
|   public plcData?: PLCType | ||||
|   private judgeUI: JudgeUI | ||||
|   private judgeUI: JudgePage | ||||
|   private tempData?: PLCType | ||||
|   // 是否发送udp | ||||
|   private isUdpEnd: boolean = false | ||||
|   judgeBusiness: BaseJudge | ||||
|   private judgeBusiness: BaseJudge | ||||
| 
 | ||||
|   constructor(judgeUI: JudgeUI) { | ||||
|   constructor(judgeUI: JudgePage) { | ||||
|     this.judgeUI = judgeUI | ||||
|     this.fileUtil = new FileUtils(judgeUI.context) | ||||
|     this.avPlayer = new VoiceAnnounce(this.context); | ||||
| @ -106,7 +107,7 @@ export default class JudgeBusiness { | ||||
|   } | ||||
| 
 | ||||
|   public async JudgeInit() { | ||||
|     let currentParams: RouterParam = router.getParams() as RouterParam; | ||||
|     let currentParams: RouteParamsType = router.getParams() as RouteParamsType; | ||||
|     this.judgeBusiness.JudgeInit(currentParams.mode, this.judgeUI.carName) | ||||
|   } | ||||
| 
 | ||||
| @ -129,12 +130,12 @@ export default class JudgeBusiness { | ||||
| 
 | ||||
|   // 考试过程 callback优化 | ||||
|   public async Judging(strData: string, callBack: Function) { | ||||
|     JudgingFn(strData, callBack, this.judgeUI, this) | ||||
|     this.judgeBusiness.Judging(strData, callBack, this.judgeUI, this) | ||||
|   } | ||||
| 
 | ||||
|   // 结束考试 | ||||
|   public JudgeEnd(isManual?: boolean) { | ||||
|     JudgeEndFn(this.judgeUI, this, isManual) | ||||
|     this.judgeBusiness.JudgeEnd(this.judgeUI, this, isManual) | ||||
|   } | ||||
| 
 | ||||
|   // 处理PLC数据 | ||||
|  | ||||
| @ -1,110 +0,0 @@ | ||||
| import { JudgeTag } from '../../config' | ||||
| import { JudgeUI } from '../../model' | ||||
| import { dConsole } from '../../utils/LogWorker' | ||||
| import JudgeBusiness from './JudgeBusiness' | ||||
| import { examJudgeEndExam } from './JudgeSDKUtils' | ||||
| 
 | ||||
| export const JudgeEndFn = async (judgeUI: JudgeUI, that: JudgeBusiness, isManual?: boolean) => { | ||||
|   const isAllProjectsEnd = judgeUI.isAllProjectsEnd | ||||
|   const examSubject = judgeUI.examSubject | ||||
|   const singlePlay = judgeUI.singlePlay | ||||
|   const totalScore = Number(judgeUI.totalScore) | ||||
|   const judgeConfigObj = judgeUI.judgeConfigObj | ||||
|   const examMileage = Number(judgeUI.examMileage) | ||||
|   const passingScore = Number(judgeUI.passingScore) | ||||
|   const jl = judgeUI.jl | ||||
|   if (that.isExamEnd) { | ||||
|     return | ||||
|   } | ||||
|   if (isManual) { | ||||
|     // 考试不合格 | ||||
|     await examJudgeEndExam() | ||||
|     that.isExamEnd = true | ||||
|     that.isManual = true | ||||
|   } else { | ||||
|     const param302: number = Reflect.get(judgeConfigObj, '302') | ||||
|     const param342: number = Reflect.get(judgeConfigObj, '342') | ||||
|     const param512: number[] = (Reflect.get(judgeConfigObj, '512') || '').split(','); | ||||
| 
 | ||||
|     //单机模式 | ||||
|     if (singlePlay) { | ||||
|       dConsole.info(JudgeTag + ' 单机模式结束 => ', isAllProjectsEnd) | ||||
|       if (isAllProjectsEnd && jl >= examMileage) { | ||||
|         //成绩合格 | ||||
|         if (totalScore >= passingScore && !that.isEndTip) { | ||||
|           if (examSubject == '3' && (param342 == 0 || param342 == 2) && | ||||
|             (param302 != 6 && param302 != 7 && param302 != 8)) { | ||||
|             if (param512[7] != 0) { | ||||
|               clearTimeout(that.deductedPopShowTimer) | ||||
|               that.avPlayer?.playAudio(['voice/综合评判.mp3']) | ||||
|               judgeUI.isDeductedPopShow = true | ||||
|               judgeUI.defaultTabIndex = 1 | ||||
|               that.isEndTip = true | ||||
|               return | ||||
|             } | ||||
|           } else { | ||||
|             await examJudgeEndExam() | ||||
|             that.isExamEnd = true | ||||
|             return | ||||
|           } | ||||
|         } else { | ||||
|           if (examSubject == '3' && (param302 == 4 || param302 == 5 || param302 == 7 || param302 == 8)) { | ||||
|             await examJudgeEndExam() | ||||
|             that.isExamEnd = true | ||||
|             return | ||||
|           } | ||||
|         } | ||||
|         await examJudgeEndExam() | ||||
|         that.isExamEnd = true | ||||
|       } | ||||
|     } else { | ||||
|       //成绩不合格 | ||||
|       if (totalScore < passingScore) { | ||||
|         //科目三不合格报靠边停车 | ||||
|         if (examSubject == '3' && param302 == 1) { | ||||
|           that.avPlayer?.playAudio([`voice/考试结束.mp3`]); | ||||
|           return | ||||
|         } | ||||
|         await examJudgeEndExam() | ||||
|         that.isExamEnd = true | ||||
|         return | ||||
|       } | ||||
| 
 | ||||
|       //成绩合格 | ||||
|       if (isAllProjectsEnd && totalScore >= passingScore && !that.isEndTip) { | ||||
|         if (examSubject == '2') { | ||||
|           await examJudgeEndExam() | ||||
|           that.isExamEnd = true | ||||
|           return | ||||
|         } | ||||
| 
 | ||||
|         //考试里程判断 | ||||
|         if (examSubject == '3' && jl < examMileage) { | ||||
|           return | ||||
|         } | ||||
| 
 | ||||
|         //考试合格自动退出 | ||||
|         if (examSubject == '3' && (param302 == 4 || param302 == 7) || param302 == 8) { | ||||
|           await examJudgeEndExam() | ||||
|           that.isExamEnd = true | ||||
|           return | ||||
|         } | ||||
| 
 | ||||
|         if (examSubject == '3' && (param342 == 0 || param342 == 2) && | ||||
|           (param302 != 6 && param302 != 7 && param302 != 8)) { | ||||
|           if (param512[7] != 0) { | ||||
|             clearTimeout(that.deductedPopShowTimer) | ||||
|             judgeUI.isDeductedPopShow = false | ||||
|             that.avPlayer?.playAudio(['voice/综合评判.mp3']) | ||||
|             judgeUI.isDeductedPopShow = true | ||||
|             judgeUI.defaultTabIndex = 1 | ||||
|             that.isEndTip = true | ||||
|           } | ||||
|         } else { | ||||
|           await examJudgeEndExam() | ||||
|           that.isExamEnd = true | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -1,4 +1,3 @@ | ||||
| //开始评判 | ||||
| import { JudgeConfig, JudgeTag } from '../../config'; | ||||
| import { | ||||
|   BaseInfoType, | ||||
| @ -12,7 +11,6 @@ import { | ||||
|   JudgeInitObj, | ||||
|   JudgeKFXM, | ||||
|   JudgeKSXM, | ||||
|   JudgeUI, | ||||
|   Km3JudgeInitConfig, | ||||
|   MAPITEMPOINTITEM, | ||||
|   MAPPOINT, | ||||
| @ -42,227 +40,11 @@ import { GetModelData } from './utils'; | ||||
| import { BaseJudge, GetSysSetResult } from './Typing'; | ||||
| import { GetSyncData } from '../../utils/table/Operation'; | ||||
| import promptAction from '@ohos.promptAction'; | ||||
| import { JudgePage } from '../Judge'; | ||||
| 
 | ||||
| 
 | ||||
| export  interface RouterParam { | ||||
|   mode: number | ||||
|   score: number | ||||
|   kString: string | ||||
|   wayno: number | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| export class SmallJudge implements BaseJudge { | ||||
|   public async JudgeInit(mode: number, carName: string): Promise<GetSysSetResult> { | ||||
|     const systemParams = await GetSyncData<SYSTEM_PARAM>('MA_SYSTEMPARM') | ||||
|     let currentParams: RouterParam = router.getParams() as RouterParam; | ||||
|     let totalScore: number | ||||
|     let wayno: number | ||||
|     let mockLight: boolean | ||||
|     let carlist: string | ||||
|     let passingScore: number | ||||
|     let examMileage: string | ||||
|     let projectsObj: Array<Project> | ||||
|     let projectsCenterObj: Array<String> | ||||
|     let ddxkKsxmArr: Array<string> | ||||
|     let singlePlay: boolean = AppStorage.get("singlePlay") | ||||
|     let systemparmArr: Array<SYSTEM_PARAM> = [] | ||||
|     let projects: Array<Project> = [] | ||||
|     let examSubject: string = "" | ||||
|     if (mode === 2) { | ||||
|       totalScore = Number(currentParams.score) || totalScore | ||||
|     } | ||||
|     if (singlePlay) { | ||||
|       wayno = currentParams.wayno || 1; | ||||
|     } | ||||
|     if (singlePlay) { | ||||
|       wayno = Number(currentParams.wayno) || 1; | ||||
|     } | ||||
|     //真实监管下发的项目 | ||||
|     let kStringArr: string[] = (currentParams.kString?.split(',') || []).filter(item => item); | ||||
|     let isInExam = kStringArr.length > 0; | ||||
|     let carNo: number, allItems: string[] = []; | ||||
|     systemParams.forEach((systemParam) => { | ||||
|       if (JudgeConfig.isTrajectoryOpen) { | ||||
|         systemParam.no1 = systemParam.NO1!; | ||||
|         systemParam.no2 = systemParam.NO2!; | ||||
|         systemParam.no3 = systemParam.NO3!; | ||||
|         systemParam.txt1 = systemParam.TXT1!; | ||||
|         systemParam.txt2 = systemParam.TXT2!; | ||||
|         systemParam.txt3 = systemParam.TXT3!; | ||||
|       } | ||||
|       const txt1 = decodeURI(systemParam.txt1 || "") | ||||
|       const txt2 = decodeURI(systemParam.txt2 || "") | ||||
| 
 | ||||
|       const no1 = systemParam.no1; | ||||
|       const no2 = systemParam.no2; | ||||
|       const no3 = systemParam.no3; | ||||
| 
 | ||||
|       //获取当前考车的no2 | ||||
|       if (no1 == 3 && no3 == 1) { | ||||
|         if (txt1 === carName) { | ||||
|           carNo = no2 | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       //获取及格分数线 | ||||
|       if (no1 == 3 && no3 == 3 && carNo === no2) { | ||||
|         passingScore = Number(txt1) || 0; | ||||
|       } | ||||
|       //根据车型获取应行驶里程数 | ||||
|       if (no1 == 3 && no3 == 15 && carNo === no2) { | ||||
|         examMileage = ((decodeURI(systemParam.txt1 || "")) || '').split('^')[0]; | ||||
|       } | ||||
|       //获取当前考车的考试项目 | ||||
|       if (carNo && no1 === 3 && no2 == carNo && no3 === 10) { | ||||
|         allItems = decodeURIComponent(systemParam.txt1 || "").split(',').filter(txt => txt !== '') | ||||
|         dConsole.info(JudgeTag, '考试项目', allItems) | ||||
|       } | ||||
|       if ( | ||||
|       //科目二获取项目 | ||||
|         (examSubject == "2" && allItems.length && no1 === 6 && allItems.includes(no2 + "" || "")) | ||||
|           || | ||||
|           //科目三获取项目 | ||||
|           (examSubject == "3" && no1 === 6) | ||||
|       ) { | ||||
|         const name = decodeURI(systemParam.txt1 || "") | ||||
|         //小车过滤掉 夜间模拟行驶 | ||||
|         if (name === '夜间行驶') { | ||||
|           return | ||||
|         } | ||||
|         const currentProject: Project = { | ||||
|           name, | ||||
|           abbreviation: decodeURI(systemParam.txt3 || ""), | ||||
|           projectCode: no2 + '', | ||||
|           projectCodeCenter: txt2, | ||||
|           //是否是必考  加减档设置成非必考 | ||||
|           isRequired: no2 === 14 ? false : allItems.includes(no2 + ''), | ||||
|           //是否考过了 | ||||
|           isEnd: false, | ||||
|           //项目开始数据是否上传过 | ||||
|           isUpload: false, | ||||
|         } | ||||
|         const no2Num = Number(no2) | ||||
|         //真实监管下发考试项目 | ||||
|         if (isInExam && !(kStringArr.includes(txt2) || kStringArr.includes(no2 + ''))) { | ||||
|           dConsole.info(JudgeTag, 'surenjun =>', txt2) | ||||
|           dConsole.info(JudgeTag, 'surenjun => no2', no2) | ||||
|           currentProject.type = '3' | ||||
|           currentProject.isUpload = true | ||||
|           currentProject.isEnd = true | ||||
|           ddxkKsxmArr.push(txt2) | ||||
|         } | ||||
|         Reflect.set(projectsObj, no2Num, currentProject) | ||||
|         Reflect.set(projectsCenterObj, txt2, currentProject) | ||||
|         projects.push(currentProject); | ||||
|       } | ||||
|       systemparmArr.push({ | ||||
|         NO1: Number(no1), | ||||
|         NO2: Number(no2), | ||||
|         NO3: Number(no3), | ||||
|         TXT1: decodeURIComponent(systemParam.txt1 || ""), | ||||
|         TXT2: decodeURIComponent(systemParam.txt2 || ""), | ||||
|         TXT3: decodeURIComponent(systemParam.txt3 || ""), | ||||
|       }) | ||||
|     }) | ||||
|     if (!projects.length) { | ||||
|       promptAction.showToast({ | ||||
|         message: '读取数据库信息失败,请重新联网更新!', | ||||
|         duration: 8000 | ||||
|       }); | ||||
|       dConsole.log(JudgeTag, "router back3") | ||||
|       router.back(); | ||||
|     } | ||||
|     return { | ||||
|       totalScore, | ||||
|       wayno, | ||||
|       mockLight, | ||||
|       carlist, | ||||
|       passingScore, | ||||
|       examMileage, | ||||
|       projectsObj, | ||||
|       projectsCenterObj, | ||||
|       ddxkKsxmArr, | ||||
|       singlePlay, | ||||
|       systemparmArr, | ||||
|       projects, | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   public async JudgeStart(callBack: Function, judgeUI: JudgeUI, that: JudgeBusiness) { | ||||
|     const name = judgeUI.name | ||||
|     const kssycs = judgeUI.kssycs | ||||
|     const manualMarkRules = judgeUI.manualMarkRules | ||||
|     // 处理单机模式 | ||||
|     const isTrajectoryOpen = JudgeConfig.isTrajectoryOpen; | ||||
|     const isJudgeInitBool = AppStorage.get<boolean>('isJudgeInitBool'); | ||||
|     const trajectoryPath = JudgeConfig.trajectoryPath; | ||||
|     let strArr: string[] = []; | ||||
|     if (isTrajectoryOpen) { | ||||
|       const folderPath = await that.fileUtil.initFolder(trajectoryPath); | ||||
|       const str: string = await that.fileUtil.readFile(folderPath) | ||||
|       strArr = str.split('\n') | ||||
|     } | ||||
|     //日志回调 | ||||
|     dConsole.info(JudgeTag, '1.进入评判入口') | ||||
|     await examJudgeSetLogCallback(6, async (level: number, info: string, len: number) => { | ||||
|       dConsole.log(JudgeTag, '评判日志:' + info) | ||||
|       dConsole.writeProcessData(ProcessDataEnumType.JudgeLogData, info) | ||||
|     }) | ||||
| 
 | ||||
|     dConsole.info(JudgeTag, '2.注册日志回调完成') | ||||
| 
 | ||||
|     let initInfo: JudgeInitObj = isTrajectoryOpen ? JSON.parse(strArr[0]) : await this.GetJudgeInitData(judgeUI.context, judgeUI.markRuleListObj, judgeUI.carType, judgeUI.carName, judgeUI.systemparmArr, judgeUI.carinfoArr, judgeUI.examSubject, judgeUI.itemInfoObj, judgeUI.judgeConfig, judgeUI.carlist, judgeUI.mapPointArr, judgeUI.mapPointItemArr); | ||||
|     //相关评判初始化只做一次 | ||||
|     if (!isJudgeInitBool) { | ||||
|       dConsole.log(JudgeTag, "评判初始化参数", initInfo) | ||||
|       await examJudgeInit(initInfo); | ||||
|       AppStorage.setOrCreate('isJudgeInitBool', true) | ||||
|       dConsole.info(JudgeTag, '4.评判初始化完成') | ||||
|     } | ||||
|     AppStorage.setOrCreate('isJudge', true) | ||||
|     // 2.评判过程回调 | ||||
|     await examJudgeSetRealExamCallback(async (strData: string, len: number) => { | ||||
|       // 评判回调日志 | ||||
|       dConsole.writeProcessData(ProcessDataEnumType.JudgeProgressCallbackData, strData) | ||||
|       dConsole.info(JudgeTag, '评判回调数据', strData) | ||||
|       await that.Judging(strData, callBack) | ||||
|     }) | ||||
|     await examJudgeSetPerformCallback(async (info: string) => { | ||||
|       dConsole.info('评判实时数据', info) | ||||
|       that.performInfo = JSON.parse(info) | ||||
|       const jl = Math.floor((that.performInfo.qjjl + that.performInfo.dcjl) / 100); | ||||
|       if (jl > Number(judgeUI.examMileage)) { | ||||
|         that.JudgeEnd() | ||||
|       } | ||||
|       judgeUI.jl = jl | ||||
|       judgeUI.laneSignal = that.performInfo.lane | ||||
|     }) | ||||
|     let beginExamInfo: JudgeBeginObj | undefined = undefined | ||||
|     // 3.开始考试 | ||||
|     if (isTrajectoryOpen) { | ||||
|       beginExamInfo = JSON.parse(strArr[1]) | ||||
|       beginExamInfo && (beginExamInfo.replay = 1) | ||||
|     } else { | ||||
|       beginExamInfo = await this.GetJudgeBeginData(judgeUI.projects, judgeUI.carType, judgeUI.kssycs, judgeUI.isDdxk, judgeUI.ddxkTime, judgeUI.projectsCenterObj, judgeUI.ddxkKsxmArr, judgeUI.ddxkKfArr, judgeUI.passingScore, judgeUI.wayno, judgeUI.name, judgeUI.lsh, judgeUI.idCard, that.isExam) | ||||
|     } | ||||
|     if (beginExamInfo) { | ||||
|       await examJudgeBeginExam(beginExamInfo); | ||||
|     } | ||||
|     dConsole.info(JudgeTag, '6.开始考试注册完成') | ||||
|     that.avPlayer?.playAudio([judgeUI.singlePlay ? 'voice/ksks.wav' : 'voice/监管成功.mp3']) | ||||
|     if (!judgeUI.singlePlay) { | ||||
|       that.videoData = await saveStartRecordVideo(`${name}_${kssycs}`, that.context) | ||||
|     } | ||||
|     judgeUI.draw = true | ||||
|     // 处理单机泡轨迹模式 | ||||
|     if (isTrajectoryOpen) { | ||||
|       that.SingleMachineTrajectory(strArr) | ||||
|       return | ||||
|     } | ||||
|   }; | ||||
| 
 | ||||
|   public async GetJudgeBeginData(projects: ProjectInfo[], carType: string, kssycs: string, isDdxk: boolean, ddxkTime: number, projectsCenterObj: Object, ddxkKsxmArr: string[], ddxkKfArr: string[], passingScore: number, wayno: number, name: string, lsh: string, idCard: string, isExam: boolean) { | ||||
| export class LargeJudge implements BaseJudge { | ||||
|   private async GetJudgeBeginData(projects: Project[], carType: string, kssycs: string, isDdxk: boolean, ddxkTime: number, projectsCenterObj: Object, ddxkKsxmArr: string[], ddxkKfArr: string[], passingScore: number, wayno: number, name: string, lsh: string, idCard: string, isExam: boolean) { | ||||
|     const examinerInfo = AppStorage.get<ExaminerInfoType>('examinerInfo') | ||||
|     const examinerName = examinerInfo?.name || "" | ||||
|     let currentParams: RouteParamsType = router.getParams() as RouteParamsType; | ||||
| @ -322,7 +104,7 @@ export class SmallJudge implements BaseJudge { | ||||
|     return beginInfo | ||||
|   }; | ||||
| 
 | ||||
|   public async GetJudgeInitData(context: common.UIAbilityContext, markRuleListObj: object, carType: string, carName: string, systemparmArr: SYSTEM_PARAM[], carinfoArr: CAR_INFO[], examSubject: string, itemInfoObj: ItemInfos, judgeConfig: SyssetConfig[], carlist: string, mapPointArr: MAPPOINT[], mapPointItemArr: MAPITEMPOINTITEM[]) { | ||||
|   private async GetJudgeInitData(context: common.UIAbilityContext, markRuleListObj: object, carType: string, carName: string, systemparmArr: SYSTEM_PARAM[], carinfoArr: CAR_INFO[], examSubject: string, itemInfoObj: ItemInfos, judgeConfig: SyssetConfig[], carlist: string, mapPointArr: MAPPOINT[], mapPointItemArr: MAPITEMPOINTITEM[]) { | ||||
|     const carInfo = AppStorage.get<CarInfoType>('carInfo'); | ||||
|     const examType = carInfo?.examSubject == '2' ? 'km2' : 'km3' | ||||
| 
 | ||||
| @ -384,13 +166,10 @@ export class SmallJudge implements BaseJudge { | ||||
|     dConsole.info(JudgeTag, '3.获取评判初始化数据完成') | ||||
|     return initInfo | ||||
|   }; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| export class LargeJudge implements BaseJudge { | ||||
|   public async JudgeInit(mode: number, carName: string): Promise<GetSysSetResult> { | ||||
|     const systemParams = await GetSyncData<SYSTEM_PARAM>('MA_SYSTEMPARM') | ||||
|     let currentParams: RouterParam = router.getParams() as RouterParam; | ||||
|     let currentParams: RouteParamsType = router.getParams() as RouteParamsType; | ||||
|     let totalScore: number | ||||
|     let wayno: number | ||||
|     let mockLight: boolean | ||||
| @ -407,7 +186,7 @@ export class LargeJudge implements BaseJudge { | ||||
|       totalScore = Number(currentParams.score) || totalScore | ||||
|     } | ||||
|     if (singlePlay) { | ||||
|       wayno = currentParams.wayno || 1; | ||||
|       wayno = Number(currentParams.wayno) || 1; | ||||
|     } | ||||
|     //真实监管下发的项目 | ||||
|     let kStringArr: string[] = (currentParams.kString?.split(',') || []).filter(item => item); | ||||
| @ -563,7 +342,7 @@ export class LargeJudge implements BaseJudge { | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   public async JudgeStart(callBack: Function, judgeUI: JudgeUI, that: JudgeBusiness) { | ||||
|   public async JudgeStart(callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) { | ||||
|     const name = judgeUI.name | ||||
|     const kssycs = judgeUI.kssycs | ||||
|     // 处理远程扣分使用 | ||||
| @ -637,126 +416,11 @@ export class LargeJudge implements BaseJudge { | ||||
|     } | ||||
|   }; | ||||
| 
 | ||||
|   public async GetJudgeBeginData(projects: ProjectInfo[], carType: string, kssycs: string, isDdxk: boolean, ddxkTime: number, projectsCenterObj: Object, ddxkKsxmArr: string[], ddxkKfArr: string[], passingScore: number, wayno: number, name: string, lsh: string, idCard: string, isExam: boolean) { | ||||
|     const examinerInfo = AppStorage.get<ExaminerInfoType>('examinerInfo') | ||||
|     const examinerName = examinerInfo?.name || "" | ||||
|     let currentParams: RouteParamsType = router.getParams() as RouteParamsType; | ||||
|     const sczb = currentParams.sczb; | ||||
|     const kfdm = currentParams.kfdm; | ||||
|     const ksxm: JudgeKSXM[] = projects.map(project => { | ||||
|       const temp: JudgeKSXM = { | ||||
|         xmdm: Number(project.projectCode), xmxh: '' | ||||
|       } | ||||
|       return temp | ||||
|     }) | ||||
|     const ykxm: number[] = (ddxkKsxmArr?.map(projectCenterCode => { | ||||
|       const currentProject: ProjectInfo = Reflect.get(projectsCenterObj, projectCenterCode) | ||||
|       return Number(currentProject.projectCode) | ||||
|     })) || []; | ||||
|     const kfxm: JudgeKFXM[] = isDdxk ? (ddxkKfArr?.map(kf => { | ||||
|       return { | ||||
|         xmdm: Number(kf.split(',')[0]), kfdm: kf.split(',')[1] | ||||
|       } as JudgeKFXM | ||||
|     })) : [] | ||||
|     const beginInfo: JudgeBeginObj = { | ||||
|       kgid: '012', | ||||
|       kgxm: decodeURI(examinerName || ''), | ||||
|       exam: isExam ? 1 : 0, | ||||
|       //是否回放 | ||||
|       replay: 0, | ||||
|       //生成的轨迹文件 | ||||
|       track: '', | ||||
|       xm: name, | ||||
|       sex: 0, | ||||
|       kslsh: lsh, | ||||
|       sfzmhm: idCard, | ||||
|       ksyy: '', | ||||
|       kscx: carType, | ||||
|       kkcs: Number(kssycs) || 2, | ||||
|       sfyk: 0, | ||||
|       ykkkcs: 1, | ||||
|       wayno: Number(wayno), | ||||
|       czlx: 0, | ||||
|       kskssj: await systemTime.getCurrentTime(), | ||||
|       passing: Number(passingScore), | ||||
|       ksxm, | ||||
|       //断点续考 | ||||
|       ddxk: isDdxk ? 1 : 0, | ||||
|       ddkssj: ddxkTime || 0, | ||||
|       ykxm, | ||||
|       kfxm, | ||||
|       yklc: 0, | ||||
|       special: [], | ||||
|       sczb: (sczb === undefined || sczb == '0') ? 0 : 1, | ||||
|       sczbkf: kfdm, | ||||
|       dmndg: false, | ||||
|       mfxx: false, | ||||
|       mfxxn: false | ||||
|     } | ||||
|     dConsole.info(JudgeTag, '5.获取开始考试数据完成') | ||||
|     return beginInfo | ||||
|   }; | ||||
|   public async Judging(strData: string, callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) { | ||||
| 
 | ||||
|   public async GetJudgeInitData(context: common.UIAbilityContext, markRuleListObj: object, carType: string, carName: string, systemparmArr: SYSTEM_PARAM[], carinfoArr: CAR_INFO[], examSubject: string, itemInfoObj: ItemInfos, judgeConfig: SyssetConfig[], carlist: string, mapPointArr: MAPPOINT[], mapPointItemArr: MAPITEMPOINTITEM[]) { | ||||
|     const carInfo = AppStorage.get<CarInfoType>('carInfo'); | ||||
|     const examType = carInfo?.examSubject == '2' ? 'km2' : 'km3' | ||||
|   } | ||||
| 
 | ||||
|     let allitems: ItemInfo[] = []; | ||||
|     if (examSubject == '2' && itemInfoObj) { | ||||
|       allitems = Reflect.ownKeys(itemInfoObj).map(cdsbKey => { | ||||
|         const cdsb: CDSBInfo = Reflect.get(itemInfoObj, cdsbKey); | ||||
|         const model = GetModelData(`${examType}/${cdsb.modelKey}.txt`, context) | ||||
|         const temp: ItemInfo = { | ||||
|           xmdm: cdsb?.xmdm || 0, | ||||
|           xmxh: cdsb?.xmxh || "", | ||||
|           model: model || "" | ||||
|         } | ||||
|         return temp | ||||
|       }) | ||||
|     } | ||||
|   public async JudgeEnd(judgeUI: JudgePage, that: JudgeBusiness, isManual?: boolean) { | ||||
| 
 | ||||
|     //获取版本号 | ||||
|     const mark: MarkRule[] = Reflect.ownKeys(markRuleListObj).map(ruleKey => { | ||||
|       const current: MarkRule = Reflect.get(markRuleListObj, ruleKey) | ||||
|       return current | ||||
|     }) | ||||
|     const initInfo: JudgeInitObj = { | ||||
|       sdkver: await examJudgeVersion(), | ||||
|       appver: AppStorage.get<BaseInfoType>('baseInfo')?.version || "", | ||||
|       kskm: Number(carInfo?.examSubject || "2"), | ||||
|       kchp: carInfo?.plateNo || "", | ||||
|       kchm: Number(carInfo?.carId || ""), | ||||
|       kscx: carType, | ||||
|       cxcode: '1', | ||||
|       name: carName, | ||||
|       carmodel: GetModelData(`${examType}/${carType}.txt`, context) || "", | ||||
|       allitems, | ||||
|       iteminfo: [], | ||||
|       systemparm: systemparmArr, | ||||
|       mark, | ||||
|       sysset: judgeConfig, | ||||
|       itemInfoObj, | ||||
|       carlist: carlist, | ||||
|       carinfo: carinfoArr, | ||||
|     }; | ||||
|     let km3Config: Km3JudgeInitConfig = {} | ||||
|     if (examSubject == '3') { | ||||
|       km3Config = { | ||||
|         map_point: mapPointArr, | ||||
|         map_point_item: mapPointItemArr, | ||||
|         //科目三暂时为空 | ||||
|         iteminfo: [], | ||||
|         roads: GetModelData('km3/Roads.txt', context) || "", | ||||
|         sharps: GetModelData('km3/Sharps.txt', context) || "" | ||||
|       }; | ||||
|       initInfo.map_point = km3Config.map_point | ||||
|       initInfo.map_point_item = km3Config.map_point_item | ||||
|       initInfo.iteminfo = km3Config.iteminfo | ||||
|       initInfo.roads = km3Config.roads | ||||
|       initInfo.sharps = km3Config.sharps | ||||
|     } | ||||
|     // 获取科目三的评判配置 | ||||
|     dConsole.info(JudgeTag, '3.获取评判初始化数据完成') | ||||
|     return initInfo | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										486
									
								
								entry/src/main/ets/pages/Judge/SmallJudgeBusiness.ets
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										486
									
								
								entry/src/main/ets/pages/Judge/SmallJudgeBusiness.ets
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,486 @@ | ||||
| import { JudgeConfig, JudgeTag } from '../../config'; | ||||
| import { | ||||
|   BaseInfoType, | ||||
|   CAR_INFO, | ||||
|   CarInfoType, | ||||
|   CDSBInfo, | ||||
|   ExaminerInfoType, | ||||
|   ItemInfo, | ||||
|   ItemInfos, | ||||
|   JudgeBeginObj, | ||||
|   JudgeInitObj, | ||||
|   JudgeKFXM, | ||||
|   JudgeKSXM, | ||||
|   Km3JudgeInitConfig, | ||||
|   MAPITEMPOINTITEM, | ||||
|   MAPPOINT, | ||||
|   MarkRule, | ||||
|   ProcessDataEnumType, | ||||
|   ProjectInfo, | ||||
|   RouteParamsType, | ||||
|   SyssetConfig, | ||||
|   SYSTEM_PARAM, | ||||
|   Project | ||||
| } from '../../model'; | ||||
| import common from '@ohos.app.ability.common'; | ||||
| import { dConsole } from '../../utils/LogWorker'; | ||||
| import { | ||||
|   examJudgeBeginExam, | ||||
|   examJudgeEndExam, | ||||
|   examJudgeInit, | ||||
|   examJudgeSetLogCallback, | ||||
|   examJudgeSetPerformCallback, | ||||
|   examJudgeSetRealExamCallback, | ||||
|   examJudgeVersion | ||||
| } from './JudgeSDKUtils'; | ||||
| import JudgeBusiness from './JudgeBusiness'; | ||||
| import { saveStartRecordVideo } from '../../utils/Video'; | ||||
| import router from '@ohos.router'; | ||||
| import systemTime from '@ohos.systemTime'; | ||||
| import { GetModelData } from './utils'; | ||||
| import { BaseJudge, GetSysSetResult } from './Typing'; | ||||
| import { GetSyncData } from '../../utils/table/Operation'; | ||||
| import promptAction from '@ohos.promptAction'; | ||||
| import { JudgePage } from '../Judge'; | ||||
| 
 | ||||
| 
 | ||||
| export class SmallJudge implements BaseJudge { | ||||
|   public async GetJudgeBeginData(projects: Project[], carType: string, kssycs: string, isDdxk: boolean, ddxkTime: number, projectsCenterObj: Object, ddxkKsxmArr: string[], ddxkKfArr: string[], passingScore: number, wayno: number, name: string, lsh: string, idCard: string, isExam: boolean) { | ||||
|     const examinerInfo = AppStorage.get<ExaminerInfoType>('examinerInfo') | ||||
|     const examinerName = examinerInfo?.name || "" | ||||
|     let currentParams: RouteParamsType = router.getParams() as RouteParamsType; | ||||
|     const sczb = currentParams.sczb; | ||||
|     const kfdm = currentParams.kfdm; | ||||
|     const ksxm: JudgeKSXM[] = projects.map(project => { | ||||
|       const temp: JudgeKSXM = { | ||||
|         xmdm: Number(project.projectCode), xmxh: '' | ||||
|       } | ||||
|       return temp | ||||
|     }) | ||||
|     const ykxm: number[] = (ddxkKsxmArr?.map(projectCenterCode => { | ||||
|       const currentProject: ProjectInfo = Reflect.get(projectsCenterObj, projectCenterCode) | ||||
|       return Number(currentProject.projectCode) | ||||
|     })) || []; | ||||
|     const kfxm: JudgeKFXM[] = isDdxk ? (ddxkKfArr?.map(kf => { | ||||
|       return { | ||||
|         xmdm: Number(kf.split(',')[0]), kfdm: kf.split(',')[1] | ||||
|       } as JudgeKFXM | ||||
|     })) : [] | ||||
|     const beginInfo: JudgeBeginObj = { | ||||
|       kgid: '012', | ||||
|       kgxm: decodeURI(examinerName || ''), | ||||
|       exam: isExam ? 1 : 0, | ||||
|       //是否回放 | ||||
|       replay: 0, | ||||
|       //生成的轨迹文件 | ||||
|       track: '', | ||||
|       xm: name, | ||||
|       sex: 0, | ||||
|       kslsh: lsh, | ||||
|       sfzmhm: idCard, | ||||
|       ksyy: '', | ||||
|       kscx: carType, | ||||
|       kkcs: Number(kssycs) || 2, | ||||
|       sfyk: 0, | ||||
|       ykkkcs: 1, | ||||
|       wayno: Number(wayno), | ||||
|       czlx: 0, | ||||
|       kskssj: await systemTime.getCurrentTime(), | ||||
|       passing: Number(passingScore), | ||||
|       ksxm, | ||||
|       //断点续考 | ||||
|       ddxk: isDdxk ? 1 : 0, | ||||
|       ddkssj: ddxkTime || 0, | ||||
|       ykxm, | ||||
|       kfxm, | ||||
|       yklc: 0, | ||||
|       special: [], | ||||
|       sczb: (sczb === undefined || sczb == '0') ? 0 : 1, | ||||
|       sczbkf: kfdm, | ||||
|       dmndg: false, | ||||
|       mfxx: false, | ||||
|       mfxxn: false | ||||
|     } | ||||
|     dConsole.info(JudgeTag, '5.获取开始考试数据完成') | ||||
|     return beginInfo | ||||
|   }; | ||||
| 
 | ||||
|   public async GetJudgeInitData(context: common.UIAbilityContext, markRuleListObj: object, carType: string, carName: string, systemparmArr: SYSTEM_PARAM[], carinfoArr: CAR_INFO[], examSubject: string, itemInfoObj: ItemInfos, judgeConfig: SyssetConfig[], carlist: string, mapPointArr: MAPPOINT[], mapPointItemArr: MAPITEMPOINTITEM[]) { | ||||
|     const carInfo = AppStorage.get<CarInfoType>('carInfo'); | ||||
|     const examType = carInfo?.examSubject == '2' ? 'km2' : 'km3' | ||||
| 
 | ||||
|     let allitems: ItemInfo[] = []; | ||||
|     if (examSubject == '2' && itemInfoObj) { | ||||
|       allitems = Reflect.ownKeys(itemInfoObj).map(cdsbKey => { | ||||
|         const cdsb: CDSBInfo = Reflect.get(itemInfoObj, cdsbKey); | ||||
|         const model = GetModelData(`${examType}/${cdsb.modelKey}.txt`, context) | ||||
|         const temp: ItemInfo = { | ||||
|           xmdm: cdsb?.xmdm || 0, | ||||
|           xmxh: cdsb?.xmxh || "", | ||||
|           model: model || "" | ||||
|         } | ||||
|         return temp | ||||
|       }) | ||||
|     } | ||||
| 
 | ||||
|     //获取版本号 | ||||
|     const mark: MarkRule[] = Reflect.ownKeys(markRuleListObj).map(ruleKey => { | ||||
|       const current: MarkRule = Reflect.get(markRuleListObj, ruleKey) | ||||
|       return current | ||||
|     }) | ||||
|     const initInfo: JudgeInitObj = { | ||||
|       sdkver: await examJudgeVersion(), | ||||
|       appver: AppStorage.get<BaseInfoType>('baseInfo')?.version || "", | ||||
|       kskm: Number(carInfo?.examSubject || "2"), | ||||
|       kchp: carInfo?.plateNo || "", | ||||
|       kchm: Number(carInfo?.carId || ""), | ||||
|       kscx: carType, | ||||
|       cxcode: '1', | ||||
|       name: carName, | ||||
|       carmodel: GetModelData(`${examType}/${carType}.txt`, context) || "", | ||||
|       allitems, | ||||
|       iteminfo: [], | ||||
|       systemparm: systemparmArr, | ||||
|       mark, | ||||
|       sysset: judgeConfig, | ||||
|       itemInfoObj, | ||||
|       carlist: carlist, | ||||
|       carinfo: carinfoArr, | ||||
|     }; | ||||
|     let km3Config: Km3JudgeInitConfig = {} | ||||
|     if (examSubject == '3') { | ||||
|       km3Config = { | ||||
|         map_point: mapPointArr, | ||||
|         map_point_item: mapPointItemArr, | ||||
|         //科目三暂时为空 | ||||
|         iteminfo: [], | ||||
|         roads: GetModelData('km3/Roads.txt', context) || "", | ||||
|         sharps: GetModelData('km3/Sharps.txt', context) || "" | ||||
|       }; | ||||
|       initInfo.map_point = km3Config.map_point | ||||
|       initInfo.map_point_item = km3Config.map_point_item | ||||
|       initInfo.iteminfo = km3Config.iteminfo | ||||
|       initInfo.roads = km3Config.roads | ||||
|       initInfo.sharps = km3Config.sharps | ||||
|     } | ||||
|     // 获取科目三的评判配置 | ||||
|     dConsole.info(JudgeTag, '3.获取评判初始化数据完成') | ||||
|     return initInfo | ||||
|   }; | ||||
| 
 | ||||
|   public async JudgeInit(mode: number, carName: string): Promise<GetSysSetResult> { | ||||
|     const systemParams = await GetSyncData<SYSTEM_PARAM>('MA_SYSTEMPARM') | ||||
|     let currentParams: RouteParamsType = router.getParams() as RouteParamsType; | ||||
|     let totalScore: number | ||||
|     let wayno: number | ||||
|     let mockLight: boolean | ||||
|     let carlist: string | ||||
|     let passingScore: number | ||||
|     let examMileage: string | ||||
|     let projectsObj: Array<Project> | ||||
|     let projectsCenterObj: Array<String> | ||||
|     let ddxkKsxmArr: Array<string> | ||||
|     let singlePlay: boolean = AppStorage.get("singlePlay") | ||||
|     let systemparmArr: Array<SYSTEM_PARAM> = [] | ||||
|     let projects: Array<Project> = [] | ||||
|     let examSubject: string = "" | ||||
|     if (mode === 2) { | ||||
|       totalScore = Number(currentParams.score) || totalScore | ||||
|     } | ||||
|     if (singlePlay) { | ||||
|       wayno = Number(currentParams.wayno) || 1; | ||||
|     } | ||||
|     //真实监管下发的项目 | ||||
|     let kStringArr: string[] = (currentParams.kString?.split(',') || []).filter(item => item); | ||||
|     let isInExam = kStringArr.length > 0; | ||||
|     let carNo: number, allItems: string[] = []; | ||||
|     systemParams.forEach((systemParam) => { | ||||
|       if (JudgeConfig.isTrajectoryOpen) { | ||||
|         systemParam.no1 = systemParam.NO1!; | ||||
|         systemParam.no2 = systemParam.NO2!; | ||||
|         systemParam.no3 = systemParam.NO3!; | ||||
|         systemParam.txt1 = systemParam.TXT1!; | ||||
|         systemParam.txt2 = systemParam.TXT2!; | ||||
|         systemParam.txt3 = systemParam.TXT3!; | ||||
|       } | ||||
|       const txt1 = decodeURI(systemParam.txt1 || "") | ||||
|       const txt2 = decodeURI(systemParam.txt2 || "") | ||||
| 
 | ||||
|       const no1 = systemParam.no1; | ||||
|       const no2 = systemParam.no2; | ||||
|       const no3 = systemParam.no3; | ||||
| 
 | ||||
|       //获取当前考车的no2 | ||||
|       if (no1 == 3 && no3 == 1) { | ||||
|         if (txt1 === carName) { | ||||
|           carNo = no2 | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       //获取及格分数线 | ||||
|       if (no1 == 3 && no3 == 3 && carNo === no2) { | ||||
|         passingScore = Number(txt1) || 0; | ||||
|       } | ||||
|       //根据车型获取应行驶里程数 | ||||
|       if (no1 == 3 && no3 == 15 && carNo === no2) { | ||||
|         examMileage = ((decodeURI(systemParam.txt1 || "")) || '').split('^')[0]; | ||||
|       } | ||||
|       //获取当前考车的考试项目 | ||||
|       if (carNo && no1 === 3 && no2 == carNo && no3 === 10) { | ||||
|         allItems = decodeURIComponent(systemParam.txt1 || "").split(',').filter(txt => txt !== '') | ||||
|         dConsole.info(JudgeTag, '考试项目', allItems) | ||||
|       } | ||||
|       if ( | ||||
|       //科目二获取项目 | ||||
|         (examSubject == "2" && allItems.length && no1 === 6 && allItems.includes(no2 + "" || "")) | ||||
|           || | ||||
|           //科目三获取项目 | ||||
|           (examSubject == "3" && no1 === 6) | ||||
|       ) { | ||||
|         const name = decodeURI(systemParam.txt1 || "") | ||||
|         //小车过滤掉 夜间模拟行驶 | ||||
|         if (name === '夜间行驶') { | ||||
|           return | ||||
|         } | ||||
|         const currentProject: Project = { | ||||
|           name, | ||||
|           abbreviation: decodeURI(systemParam.txt3 || ""), | ||||
|           projectCode: no2 + '', | ||||
|           projectCodeCenter: txt2, | ||||
|           //是否是必考  加减档设置成非必考 | ||||
|           isRequired: no2 === 14 ? false : allItems.includes(no2 + ''), | ||||
|           //是否考过了 | ||||
|           isEnd: false, | ||||
|           //项目开始数据是否上传过 | ||||
|           isUpload: false, | ||||
|         } | ||||
|         const no2Num = Number(no2) | ||||
|         //真实监管下发考试项目 | ||||
|         if (isInExam && !(kStringArr.includes(txt2) || kStringArr.includes(no2 + ''))) { | ||||
|           dConsole.info(JudgeTag, 'surenjun =>', txt2) | ||||
|           dConsole.info(JudgeTag, 'surenjun => no2', no2) | ||||
|           currentProject.type = '3' | ||||
|           currentProject.isUpload = true | ||||
|           currentProject.isEnd = true | ||||
|           ddxkKsxmArr.push(txt2) | ||||
|         } | ||||
|         Reflect.set(projectsObj, no2Num, currentProject) | ||||
|         Reflect.set(projectsCenterObj, txt2, currentProject) | ||||
|         projects.push(currentProject); | ||||
|       } | ||||
|       systemparmArr.push({ | ||||
|         NO1: Number(no1), | ||||
|         NO2: Number(no2), | ||||
|         NO3: Number(no3), | ||||
|         TXT1: decodeURIComponent(systemParam.txt1 || ""), | ||||
|         TXT2: decodeURIComponent(systemParam.txt2 || ""), | ||||
|         TXT3: decodeURIComponent(systemParam.txt3 || ""), | ||||
|       }) | ||||
|     }) | ||||
|     if (!projects.length) { | ||||
|       promptAction.showToast({ | ||||
|         message: '读取数据库信息失败,请重新联网更新!', | ||||
|         duration: 8000 | ||||
|       }); | ||||
|       dConsole.log(JudgeTag, "router back3") | ||||
|       router.back(); | ||||
|     } | ||||
|     return { | ||||
|       totalScore, | ||||
|       wayno, | ||||
|       mockLight, | ||||
|       carlist, | ||||
|       passingScore, | ||||
|       examMileage, | ||||
|       projectsObj, | ||||
|       projectsCenterObj, | ||||
|       ddxkKsxmArr, | ||||
|       singlePlay, | ||||
|       systemparmArr, | ||||
|       projects, | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   public async JudgeStart(callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) { | ||||
|     const name = judgeUI.name | ||||
|     const kssycs = judgeUI.kssycs | ||||
|     const manualMarkRules = judgeUI.manualMarkRules | ||||
|     // 处理单机模式 | ||||
|     const isTrajectoryOpen = JudgeConfig.isTrajectoryOpen; | ||||
|     const isJudgeInitBool = AppStorage.get<boolean>('isJudgeInitBool'); | ||||
|     const trajectoryPath = JudgeConfig.trajectoryPath; | ||||
|     let strArr: string[] = []; | ||||
|     if (isTrajectoryOpen) { | ||||
|       const folderPath = await that.fileUtil.initFolder(trajectoryPath); | ||||
|       const str: string = await that.fileUtil.readFile(folderPath) | ||||
|       strArr = str.split('\n') | ||||
|     } | ||||
|     //日志回调 | ||||
|     dConsole.info(JudgeTag, '1.进入评判入口') | ||||
|     await examJudgeSetLogCallback(6, async (level: number, info: string, len: number) => { | ||||
|       dConsole.log(JudgeTag, '评判日志:' + info) | ||||
|       dConsole.writeProcessData(ProcessDataEnumType.JudgeLogData, info) | ||||
|     }) | ||||
| 
 | ||||
|     dConsole.info(JudgeTag, '2.注册日志回调完成') | ||||
| 
 | ||||
|     let initInfo: JudgeInitObj = isTrajectoryOpen ? JSON.parse(strArr[0]) : await this.GetJudgeInitData(judgeUI.context, judgeUI.markRuleListObj, judgeUI.carType, judgeUI.carName, judgeUI.systemparmArr, judgeUI.carinfoArr, judgeUI.examSubject, judgeUI.itemInfoObj, judgeUI.judgeConfig, judgeUI.carlist, judgeUI.mapPointArr, judgeUI.mapPointItemArr); | ||||
|     //相关评判初始化只做一次 | ||||
|     if (!isJudgeInitBool) { | ||||
|       dConsole.log(JudgeTag, "评判初始化参数", initInfo) | ||||
|       await examJudgeInit(initInfo); | ||||
|       AppStorage.setOrCreate('isJudgeInitBool', true) | ||||
|       dConsole.info(JudgeTag, '4.评判初始化完成') | ||||
|     } | ||||
|     AppStorage.setOrCreate('isJudge', true) | ||||
|     // 2.评判过程回调 | ||||
|     await examJudgeSetRealExamCallback(async (strData: string, len: number) => { | ||||
|       // 评判回调日志 | ||||
|       dConsole.writeProcessData(ProcessDataEnumType.JudgeProgressCallbackData, strData) | ||||
|       dConsole.info(JudgeTag, '评判回调数据', strData) | ||||
|       await that.Judging(strData, callBack) | ||||
|     }) | ||||
|     await examJudgeSetPerformCallback(async (info: string) => { | ||||
|       dConsole.info('评判实时数据', info) | ||||
|       that.performInfo = JSON.parse(info) | ||||
|       const jl = Math.floor((that.performInfo.qjjl + that.performInfo.dcjl) / 100); | ||||
|       if (jl > Number(judgeUI.examMileage)) { | ||||
|         that.JudgeEnd() | ||||
|       } | ||||
|       judgeUI.jl = jl | ||||
|       judgeUI.laneSignal = that.performInfo.lane | ||||
|     }) | ||||
|     let beginExamInfo: JudgeBeginObj | undefined = undefined | ||||
|     // 3.开始考试 | ||||
|     if (isTrajectoryOpen) { | ||||
|       beginExamInfo = JSON.parse(strArr[1]) | ||||
|       beginExamInfo && (beginExamInfo.replay = 1) | ||||
|     } else { | ||||
|       beginExamInfo = await this.GetJudgeBeginData(judgeUI.projects, judgeUI.carType, judgeUI.kssycs, judgeUI.isDdxk, judgeUI.ddxkTime, judgeUI.projectsCenterObj, judgeUI.ddxkKsxmArr, judgeUI.ddxkKfArr, judgeUI.passingScore, judgeUI.wayno, judgeUI.name, judgeUI.lsh, judgeUI.idCard, that.isExam) | ||||
|     } | ||||
|     if (beginExamInfo) { | ||||
|       await examJudgeBeginExam(beginExamInfo); | ||||
|     } | ||||
|     dConsole.info(JudgeTag, '6.开始考试注册完成') | ||||
|     that.avPlayer?.playAudio([judgeUI.singlePlay ? 'voice/ksks.wav' : 'voice/监管成功.mp3']) | ||||
|     if (!judgeUI.singlePlay) { | ||||
|       that.videoData = await saveStartRecordVideo(`${name}_${kssycs}`, that.context) | ||||
|     } | ||||
|     judgeUI.draw = true | ||||
|     // 处理单机泡轨迹模式 | ||||
|     if (isTrajectoryOpen) { | ||||
|       that.SingleMachineTrajectory(strArr) | ||||
|       return | ||||
|     } | ||||
|   }; | ||||
| 
 | ||||
|   public async Judging(strData: string, callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) { | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|   public async JudgeEnd(judgeUI: JudgePage, that: JudgeBusiness, isManual?: boolean) { | ||||
|     const isAllProjectsEnd = judgeUI.isAllProjectsEnd | ||||
|     const examSubject = judgeUI.examSubject | ||||
|     const singlePlay = judgeUI.singlePlay | ||||
|     const totalScore = Number(judgeUI.totalScore) | ||||
|     const judgeConfigObj = judgeUI.judgeConfigObj | ||||
|     const examMileage = Number(judgeUI.examMileage) | ||||
|     const passingScore = Number(judgeUI.passingScore) | ||||
|     const jl = judgeUI.jl | ||||
|     if (that.isExamEnd) { | ||||
|       return | ||||
|     } | ||||
|     if (isManual) { | ||||
|       // 考试不合格 | ||||
|       await examJudgeEndExam() | ||||
|       that.isExamEnd = true | ||||
|       that.isManual = true | ||||
|     } else { | ||||
|       const param302: number = Reflect.get(judgeConfigObj, '302') | ||||
|       const param342: number = Reflect.get(judgeConfigObj, '342') | ||||
|       const param512: number[] = (Reflect.get(judgeConfigObj, '512') || '').split(','); | ||||
| 
 | ||||
|       //单机模式 | ||||
|       if (singlePlay) { | ||||
|         dConsole.info(JudgeTag + ' 单机模式结束 => ', isAllProjectsEnd) | ||||
|         if (isAllProjectsEnd && jl >= examMileage) { | ||||
|           //成绩合格 | ||||
|           if (totalScore >= passingScore && !that.isEndTip) { | ||||
|             if (examSubject == '3' && (param342 == 0 || param342 == 2) && | ||||
|               (param302 != 6 && param302 != 7 && param302 != 8)) { | ||||
|               if (param512[7] != 0) { | ||||
|                 clearTimeout(that.deductedPopShowTimer) | ||||
|                 that.avPlayer?.playAudio(['voice/综合评判.mp3']) | ||||
|                 judgeUI.isDeductedPopShow = true | ||||
|                 judgeUI.defaultTabIndex = 1 | ||||
|                 that.isEndTip = true | ||||
|                 return | ||||
|               } | ||||
|             } else { | ||||
|               await examJudgeEndExam() | ||||
|               that.isExamEnd = true | ||||
|               return | ||||
|             } | ||||
|           } else { | ||||
|             if (examSubject == '3' && (param302 == 4 || param302 == 5 || param302 == 7 || param302 == 8)) { | ||||
|               await examJudgeEndExam() | ||||
|               that.isExamEnd = true | ||||
|               return | ||||
|             } | ||||
|           } | ||||
|           await examJudgeEndExam() | ||||
|           that.isExamEnd = true | ||||
|         } | ||||
|       } else { | ||||
|         //成绩不合格 | ||||
|         if (totalScore < passingScore) { | ||||
|           //科目三不合格报靠边停车 | ||||
|           if (examSubject == '3' && param302 == 1) { | ||||
|             that.avPlayer?.playAudio([`voice/考试结束.mp3`]); | ||||
|             return | ||||
|           } | ||||
|           await examJudgeEndExam() | ||||
|           that.isExamEnd = true | ||||
|           return | ||||
|         } | ||||
| 
 | ||||
|         //成绩合格 | ||||
|         if (isAllProjectsEnd && totalScore >= passingScore && !that.isEndTip) { | ||||
|           if (examSubject == '2') { | ||||
|             await examJudgeEndExam() | ||||
|             that.isExamEnd = true | ||||
|             return | ||||
|           } | ||||
| 
 | ||||
|           //考试里程判断 | ||||
|           if (examSubject == '3' && jl < examMileage) { | ||||
|             return | ||||
|           } | ||||
| 
 | ||||
|           //考试合格自动退出 | ||||
|           if (examSubject == '3' && (param302 == 4 || param302 == 7) || param302 == 8) { | ||||
|             await examJudgeEndExam() | ||||
|             that.isExamEnd = true | ||||
|             return | ||||
|           } | ||||
| 
 | ||||
|           if (examSubject == '3' && (param342 == 0 || param342 == 2) && | ||||
|             (param302 != 6 && param302 != 7 && param302 != 8)) { | ||||
|             if (param512[7] != 0) { | ||||
|               clearTimeout(that.deductedPopShowTimer) | ||||
|               judgeUI.isDeductedPopShow = false | ||||
|               that.avPlayer?.playAudio(['voice/综合评判.mp3']) | ||||
|               judgeUI.isDeductedPopShow = true | ||||
|               judgeUI.defaultTabIndex = 1 | ||||
|               that.isEndTip = true | ||||
|             } | ||||
|           } else { | ||||
|             await examJudgeEndExam() | ||||
|             that.isExamEnd = true | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   }; | ||||
| } | ||||
| @ -1,8 +1,9 @@ | ||||
| import { JudgeUI, Project, SYSTEM_PARAM, } from '../../model' | ||||
| import { Project, SYSTEM_PARAM, } from '../../model' | ||||
| import JudgeBusiness from './JudgeBusiness' | ||||
| import { JudgePage } from "../Judge" | ||||
| 
 | ||||
| 
 | ||||
| export  interface GetSysSetResult { | ||||
| export interface GetSysSetResult { | ||||
|   totalScore: number | ||||
|   wayno: number | ||||
|   mockLight: boolean | ||||
| @ -19,5 +20,7 @@ export  interface GetSysSetResult { | ||||
| 
 | ||||
| export interface BaseJudge { | ||||
|   JudgeInit: (mode: number, carName: string) => Promise<GetSysSetResult> | ||||
|   JudgeStart: (callBack: Function, judgeUI: JudgeUI, that: JudgeBusiness) => void | ||||
|   JudgeStart: (callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) => void | ||||
|   Judging: (strData: string, callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) => void | ||||
|   JudgeEnd: (judgeUI: JudgePage, that: JudgeBusiness, isManual?: boolean) => void | ||||
| } | ||||
| @ -1,20 +1,18 @@ | ||||
| { | ||||
|   "lockfileVersion": 2, | ||||
|   "lockfileVersion": 1, | ||||
|   "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", | ||||
|   "specifiers": { | ||||
|     "@ohos/crypto-js@2.0.3": "@ohos/crypto-js@2.0.3", | ||||
|     "@ohos/hypium@1.0.19": "@ohos/hypium@1.0.19" | ||||
|   }, | ||||
|   "packages": { | ||||
|     "@ohos/hypium@1.0.19": { | ||||
|       "resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/hypium/-/hypium-1.0.19.har", | ||||
|       "integrity": "sha512-cEjDgLFCm3cWZDeRXk7agBUkPqjWxUo6AQeiu0gEkb3J8ESqlduQLSIXeo3cCsm8U/asL7iKjF85ZyOuufAGSQ==", | ||||
|       "registryType": "ohpm" | ||||
|     }, | ||||
|     "@ohos/crypto-js@2.0.3": { | ||||
|       "resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/crypto-js/-/crypto-js-2.0.3.har", | ||||
|       "integrity": "sha512-LuHaR1kD5PxnOXnuR1fWvPwGtbed9Q/QGzk6JOh8y5Wdzvi8brPesODZiaWf9scOVRHsbTPOtZw91vWB35p1vQ==", | ||||
|       "registryType": "ohpm" | ||||
|       "integrity": "sha512-LuHaR1kD5PxnOXnuR1fWvPwGtbed9Q/QGzk6JOh8y5Wdzvi8brPesODZiaWf9scOVRHsbTPOtZw91vWB35p1vQ==" | ||||
|     }, | ||||
|     "@ohos/hypium@1.0.19": { | ||||
|       "resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/hypium/-/hypium-1.0.19.har", | ||||
|       "integrity": "sha512-cEjDgLFCm3cWZDeRXk7agBUkPqjWxUo6AQeiu0gEkb3J8ESqlduQLSIXeo3cCsm8U/asL7iKjF85ZyOuufAGSQ==" | ||||
|     } | ||||
|   } | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user