fix: 重构评判
This commit is contained in:
		
							parent
							
								
									2fed7549d6
								
							
						
					
					
						commit
						d56b107cbf
					
				| @ -41,7 +41,6 @@ export interface UDPParamType { | |||||||
| 
 | 
 | ||||||
| /** 扣分代码项 */ | /** 扣分代码项 */ | ||||||
| export interface KfdmType { | export interface KfdmType { | ||||||
| 
 |  | ||||||
|   xmmcStr: string |   xmmcStr: string | ||||||
|   xmdm: number |   xmdm: number | ||||||
|   desc: string |   desc: string | ||||||
| @ -451,7 +450,7 @@ export interface JudgeUI { | |||||||
|   systemparmArr: SYSTEMPARMARR[] |   systemparmArr: SYSTEMPARMARR[] | ||||||
|   carinfoArr: CARINFO[] |   carinfoArr: CARINFO[] | ||||||
|   kfArr: MarkRule[] |   kfArr: MarkRule[] | ||||||
|   judgeConfigObj: object |   judgeConfigObj: DefaultJudgeConfigObj | ||||||
|   judgeConfig: SyssetConfig[] |   judgeConfig: SyssetConfig[] | ||||||
|   projectsObj: ESObject |   projectsObj: ESObject | ||||||
|   projects: ProjectInfo[] |   projects: ProjectInfo[] | ||||||
| @ -656,11 +655,19 @@ export interface JudgeXMJS { | |||||||
|   xmhg: 0 | 1 |   xmhg: 0 | 1 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | export interface DeductionProjectConversionType { | ||||||
|  |   desc: string | ||||||
|  |   score: number | ||||||
|  |   markcatalog: string | ||||||
|  |   markserial: string | ||||||
|  |   kfxh: string | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export interface JudgeKf { | export interface JudgeKf { | ||||||
|   xmdm: number |   xmdm: number | ||||||
|   kfdm?: string |   kfdm?: string | ||||||
|   markcatalog: string |   markcatalog: string | ||||||
|   type: 0 | 1 | 2 | 3 |   type?: 0 | 1 | 2 | 3 | ||||||
|   xmmcStr?: string |   xmmcStr?: string | ||||||
|   desc?: string |   desc?: string | ||||||
|   score?: number |   score?: number | ||||||
|  | |||||||
| @ -19,7 +19,6 @@ import Prompt from '@system.prompt'; | |||||||
| import { DifferentialAndSignal } from '../utils/business/DifferentialAndSignalWorker'; | import { DifferentialAndSignal } from '../utils/business/DifferentialAndSignalWorker'; | ||||||
| import { dConsole } from '../utils/LogWorker'; | import { dConsole } from '../utils/LogWorker'; | ||||||
| import CarLoadingComponent from './Index/Loading'; | import CarLoadingComponent from './Index/Loading'; | ||||||
| import { CreateFile } from '../utils/Common'; |  | ||||||
| 
 | 
 | ||||||
| @Entry | @Entry | ||||||
| @Component | @Component | ||||||
| @ -78,7 +77,6 @@ struct Index { | |||||||
| 
 | 
 | ||||||
|   async onPageShow(): Promise<void> { |   async onPageShow(): Promise<void> { | ||||||
|     dConsole.log("权限首页 onPageShow2") |     dConsole.log("权限首页 onPageShow2") | ||||||
|     CreateFile("/mnt/hmdfs/100/account/device_view/local/files/duolun/logs/test.text") |  | ||||||
|     if (!this.isPlay) { |     if (!this.isPlay) { | ||||||
|       this.avPlayer.playAudio(['welcome.wav']) |       this.avPlayer.playAudio(['welcome.wav']) | ||||||
|       this.isPlay = true |       this.isPlay = true | ||||||
| @ -218,7 +216,6 @@ struct Index { | |||||||
|       HeaderComponent({ |       HeaderComponent({ | ||||||
|         shortLogo: false |         shortLogo: false | ||||||
|       }) |       }) | ||||||
| 
 |  | ||||||
|       CardComponent({ |       CardComponent({ | ||||||
|         isSingle: this.singlePlay, |         isSingle: this.singlePlay, | ||||||
|         singleClick: () => { |         singleClick: () => { | ||||||
|  | |||||||
| @ -141,4 +141,3 @@ export function CreateAlbum(fileHelper: FileHelper) { | |||||||
|   fileHelper.createAlbum(date); |   fileHelper.createAlbum(date); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|  | |||||||
| @ -396,6 +396,7 @@ struct JudgePage { | |||||||
|         Reflect.set(this.projectsObj, 1, project_1) |         Reflect.set(this.projectsObj, 1, project_1) | ||||||
|       } |       } | ||||||
|       Reflect.set(this.judgeConfigObj, sys.v_no!, value) |       Reflect.set(this.judgeConfigObj, sys.v_no!, value) | ||||||
|  |       dConsole.log("寻找", this.judgeConfigObj) | ||||||
|     }); |     }); | ||||||
|     this.judgeConfig = syssetJudgeConfigArr; |     this.judgeConfig = syssetJudgeConfigArr; | ||||||
|   } |   } | ||||||
|  | |||||||
							
								
								
									
										160
									
								
								entry/src/main/ets/pages/Judge/JudgeBusiness.ets
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								entry/src/main/ets/pages/Judge/JudgeBusiness.ets
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,160 @@ | |||||||
|  | import { | ||||||
|  |   JudgeConfigObjKmItems, | ||||||
|  |   JudgePerformInfo, | ||||||
|  |   JudgeUI, | ||||||
|  |   MarkRule, | ||||||
|  |   PLCType, | ||||||
|  |   ProcessDataEnumType, | ||||||
|  |   RecordHandleType, | ||||||
|  |   WorkerBackMessage, | ||||||
|  |   WorkerBackMessageType | ||||||
|  | } from '../../model' | ||||||
|  | import FileUtils from '../../utils/FileUtils' | ||||||
|  | import VoiceAnnounce from '../judgeSDK/utils/voiceAnnouncements' | ||||||
|  | import common from '@ohos.app.ability.common' | ||||||
|  | import { JudgeStartFn } from './JudgeStart' | ||||||
|  | import { dConsole } from '../../utils/LogWorker' | ||||||
|  | import { JudgeTag } from '../../config' | ||||||
|  | import { examJudgeRealExam } from './JudgeSDKUtils' | ||||||
|  | import { JudgingFn, SetJudgeItem } from './JudgeIng' | ||||||
|  | import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker' | ||||||
|  | import { PlcStrToJson, PlcStrToWXJson } from './utils' | ||||||
|  | import { JudgeEndFn } from './JudgeEnd' | ||||||
|  | 
 | ||||||
|  | export default class JudgeBusiness { | ||||||
|  |   public fileUtil: FileUtils | ||||||
|  |   public avPlayer?: VoiceAnnounce | ||||||
|  |   public performInfo?: JudgePerformInfo | ||||||
|  |   public context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; | ||||||
|  |   //考试是否结束了 | ||||||
|  |   public isExamEnd: boolean | ||||||
|  |   public isEndTip: boolean = false; | ||||||
|  |   //是否手动结束考试 | ||||||
|  |   public isManual: boolean = false | ||||||
|  |   public deductedPopShowTimer: number = 0; | ||||||
|  |   public videoData?: RecordHandleType | ||||||
|  |   //是否是考试模式 | ||||||
|  |   public isExam: boolean | ||||||
|  |   // PLC原始数据 | ||||||
|  |   public plcStr: string = "" | ||||||
|  |   public rmndg: 0 | 1 = 0 | ||||||
|  |   //所有的科目考试项目(大车&小车) | ||||||
|  |   public kmItems: JudgeConfigObjKmItems | ||||||
|  |   public xmmcStr: string = "" | ||||||
|  |   public xmmcCode: string = "" | ||||||
|  |   public xmmcSingleCode: string = "" | ||||||
|  |   public xmmcEndCode?: string | ||||||
|  |   public xmdm: string | number = "" | ||||||
|  |   public xmxh: string = "" | ||||||
|  |   public kfArr?: MarkRule[] | ||||||
|  |   public carztStr: string | ||||||
|  |   private judgeUI: JudgeUI | ||||||
|  |   private tempData?: PLCType | ||||||
|  |   private plcData?: PLCType | ||||||
|  |   // 是否发送udp | ||||||
|  |   private isUdpEnd: boolean = false | ||||||
|  |   private mndgStr: string | undefined | ||||||
|  | 
 | ||||||
|  |   constructor(judgeUI: JudgeUI) { | ||||||
|  |     this.judgeUI = judgeUI | ||||||
|  |     this.fileUtil = new FileUtils(judgeUI.context) | ||||||
|  |     this.avPlayer = new VoiceAnnounce(this.context); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // 单机轨迹模式 | ||||||
|  |   public async SingleMachineTrajectory(strArr: string[]) { | ||||||
|  |     let num = 2 | ||||||
|  |     const judgeTimer = setInterval(async () => { | ||||||
|  |       const msgStr = strArr[num] | ||||||
|  |       if (msgStr == '') { | ||||||
|  |         dConsole.info(JudgeTag, '模拟数据考试结束') | ||||||
|  |         clearInterval(judgeTimer) | ||||||
|  |         this.JudgeEnd(true) | ||||||
|  |         return | ||||||
|  |       } | ||||||
|  |       const msg: PLCType = JSON.parse(strArr[num]); | ||||||
|  |       num++ | ||||||
|  |       // 4.过程数据 | ||||||
|  |       this.tempData = msg | ||||||
|  |       this.judgeUI.sd = Math.floor(msg?.gps?.sd * 1.852) + ''; | ||||||
|  |       this.judgeUI.dw = Math.floor(msg?.sensor?.dw) + '' | ||||||
|  |       this.plcData = msg | ||||||
|  |       AppStorage.setOrCreate('msgStr', '') | ||||||
|  |       if (msg.method === 'examJudgeArtificialItem') { | ||||||
|  |         SetJudgeItem(msg.itemno, msg.type) | ||||||
|  |       } | ||||||
|  |       if (msg.method === 'examJudgeArtificialMark') { | ||||||
|  |         SetJudgeItem(msg.itemno, msg.serial) | ||||||
|  |       } | ||||||
|  |       await examJudgeRealExam(msg) | ||||||
|  |     }, 200) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // 开始考试 | ||||||
|  |   public async JudgeStart(callBack: Function) { | ||||||
|  |     //   处理考试前需要做的业务 | ||||||
|  |     //   调用开始考试 | ||||||
|  |     JudgeStartFn(callBack, this.judgeUI, this) | ||||||
|  |     //   处理PLC数据 | ||||||
|  |     // 处理实时udp里的plc信号 | ||||||
|  |     DifferentialAndSignal.onMsg((data: string) => { | ||||||
|  |       const result: WorkerBackMessage = JSON.parse(data) | ||||||
|  |       if (result.type === WorkerBackMessageType.ObtainUdpData) { | ||||||
|  |         this.HandlePLCData(result.data as string) | ||||||
|  |         dConsole.writeProcessData(ProcessDataEnumType.PlcData, result.data as string) | ||||||
|  |       } | ||||||
|  |     }) | ||||||
|  |     this.JudgeEnd() | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // 考试过程 callback优化 | ||||||
|  |   public async Judging(strData: string, callBack: Function) { | ||||||
|  |     JudgingFn(strData, callBack, this.judgeUI, this) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // 结束考试 | ||||||
|  |   public JudgeEnd(isManual?: boolean) { | ||||||
|  |     JudgeEndFn(this.judgeUI, this, isManual) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   // 处理PLC数据 | ||||||
|  |   private async HandlePLCData(msg: string) { | ||||||
|  |     const plcArr = msg.split(',') | ||||||
|  |     if (plcArr[0] != '#DN_GD' || this.isUdpEnd) { | ||||||
|  |       return | ||||||
|  |     } | ||||||
|  |     const gpsPart = msg.split("#END$GPS,")[1]; | ||||||
|  |     const gpsStatus = gpsPart.split(",")[0]; | ||||||
|  |     if (gpsStatus === "4") { | ||||||
|  |       dConsole.log(JudgeTag, "差分状态正常", gpsStatus) | ||||||
|  |       this.judgeUI.isDwztRight = true | ||||||
|  |     } else { | ||||||
|  |       dConsole.log(JudgeTag, "差分状态异常", gpsStatus) | ||||||
|  |       this.judgeUI.isDwztRight = false | ||||||
|  |     } | ||||||
|  |     // 记录原始PLC数据 | ||||||
|  |     dConsole.writeProcessData(ProcessDataEnumType.PlcData, msg) | ||||||
|  |     const tempData = await PlcStrToJson(msg); | ||||||
|  |     tempData.sensor.rmndg = this.rmndg; | ||||||
|  |     tempData.sensor.mndg = this.mndgStr || ""; | ||||||
|  |     const wuXiDataStr = await PlcStrToWXJson(msg) | ||||||
|  |     // 无锡所数据记录 | ||||||
|  |     dConsole.writeProcessData(ProcessDataEnumType.WuxiProgressData, wuXiDataStr) | ||||||
|  |     this.plcData = tempData | ||||||
|  |     this.tempData = tempData | ||||||
|  |     this.plcStr = msg; | ||||||
|  |     this.mndgStr = ''; | ||||||
|  |     this.rmndg = 0; | ||||||
|  |     AppStorage.setOrCreate('msgStr', msg) | ||||||
|  |     // 4.过程数据 | ||||||
|  |     dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(this.plcData)) | ||||||
|  |     const param350: number = Reflect.get(this.judgeUI.judgeConfigObj, '350') | ||||||
|  |     this.judgeUI.sd = ((param350 == 0 ? this.plcData.gps.sd : this.plcData.sensor.cs) as number * 1.852).toFixed(0) + '' | ||||||
|  |     this.judgeUI.dw = (Math.floor(this.plcData.sensor.dw as number) || 0) + '' | ||||||
|  |     if (!this.isExamEnd) { | ||||||
|  |       await examJudgeRealExam(this.plcData) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
							
								
								
									
										110
									
								
								entry/src/main/ets/pages/Judge/JudgeEnd.ets
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								entry/src/main/ets/pages/Judge/JudgeEnd.ets
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,110 @@ | |||||||
|  | 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 | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										154
									
								
								entry/src/main/ets/pages/Judge/JudgeIng.ets
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								entry/src/main/ets/pages/Judge/JudgeIng.ets
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,154 @@ | |||||||
|  | import { JudgeTag } from '../../config'; | ||||||
|  | import { JudgeCallBackData, JudgeUI, KmItem, MarkRule, ProcessDataEnumType, ProjectInfo } from '../../model'; | ||||||
|  | import { dConsole } from '../../utils/LogWorker'; | ||||||
|  | import JudgeBusiness from './JudgeBusiness'; | ||||||
|  | import { examJudgeArtificialItem } from './JudgeSDKUtils'; | ||||||
|  | import { CurrentProjectConversion, DeductionProjectConversion } from './utils'; | ||||||
|  | 
 | ||||||
|  | export const JudgingFn = async (strData: string, callBack: Function, judgeUI: JudgeUI, that: JudgeBusiness) => { | ||||||
|  |   let examData: JudgeCallBackData = JSON.parse(strData); | ||||||
|  |   const carzt = examData.carzt | ||||||
|  |   const xmks = examData.xmks | ||||||
|  |   const kf = examData.kf | ||||||
|  |   const event = examData.event | ||||||
|  |   const xmjs = examData.xmjs | ||||||
|  |   const xmqx = examData.xmqx | ||||||
|  |   const ksjs = examData.ksjs | ||||||
|  |   const sound = examData.sound | ||||||
|  |   const mndg = examData.mndg | ||||||
|  |   const lane = examData.lane | ||||||
|  |   const precast = examData.precast | ||||||
|  |   const nongps = examData.nongps | ||||||
|  |   //获取项目结束、项目开始代码 | ||||||
|  |   const xmdm = event == 2 ? xmjs.xmdm : xmks.xmdm | ||||||
|  |   const xmxh = event == 2 ? xmjs.xmxh : xmks.xmxh; | ||||||
|  |   let artSubject3ProjectsCodesArr: number[] = [3, 9, 4, 10, 12, 11] | ||||||
|  |   const isManualProjectIn = artSubject3ProjectsCodesArr.includes(xmdm); | ||||||
|  |   const examSubject = judgeUI.examSubject | ||||||
|  |   const judgeConfigObj = judgeUI.judgeConfigObj | ||||||
|  |   let project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm) | ||||||
|  |   const xmmcCode = project.projectCodeCenter || ""; | ||||||
|  |   const kmItem: KmItem = Reflect.get(that.kmItems, xmmcCode) | ||||||
|  | 
 | ||||||
|  |   switch (event) { | ||||||
|  |   //   项目开始 | ||||||
|  |     case 1: | ||||||
|  |       project.type = '2'; | ||||||
|  |       if (isManualProjectIn) { | ||||||
|  |         //手动项目是否在进行中 | ||||||
|  |         judgeUI.isManualProjectIn = true | ||||||
|  |       } | ||||||
|  |       if (xmdm == 41 && examSubject == '3') { | ||||||
|  |         that.rmndg = 1 | ||||||
|  |       } | ||||||
|  |       judgeUI.currentXmdm = xmdm; | ||||||
|  |       const xmmcStr = project.name || ""; | ||||||
|  |       const xmmcSingleCode = project.projectCode || ""; | ||||||
|  |       kmItem.status = 2; | ||||||
|  |       that.xmmcStr = xmmcStr; | ||||||
|  |       that.xmmcCode = xmmcCode; | ||||||
|  |       that.xmmcSingleCode = xmmcSingleCode | ||||||
|  |       that.xmmcEndCode = xmmcCode | ||||||
|  |       that.xmdm = xmdm; | ||||||
|  |       that.xmxh = xmxh; | ||||||
|  |       judgeUI.isProjectIn = true | ||||||
|  |       Reflect.set(judgeUI.projectsObj, xmdm, project) | ||||||
|  |       Reflect.set(that.kmItems, xmmcCode || 0, kmItem) | ||||||
|  |       break; | ||||||
|  |   //   项目结束 | ||||||
|  |     case 2: | ||||||
|  |       project.type = (xmjs.xmhg === 0 ? '4' : '3') | ||||||
|  |     //计算项目是否全部结束 | ||||||
|  |       judgeUI.isProjectIn = (Reflect.ownKeys(judgeUI.projectsObj).filter((projectKey) => { | ||||||
|  |         const fillProject: ProjectInfo = Reflect.get(judgeUI.projectsObj, projectKey) | ||||||
|  |         return fillProject.type == '2' | ||||||
|  |       }).length) > 0; | ||||||
|  |       if (isManualProjectIn) { | ||||||
|  |         judgeUI.isManualProjectIn = false | ||||||
|  |       } | ||||||
|  |       kmItem.status = 3; | ||||||
|  |     //统计必考项目数量 | ||||||
|  |       that.xmmcStr = '无'; | ||||||
|  |       that.xmmcCode = ''; | ||||||
|  |       that.xmdm = ''; | ||||||
|  |       judgeUI.currentXmdm = undefined; | ||||||
|  |       Reflect.set(judgeUI.projectsObj, xmdm, project) | ||||||
|  |       Reflect.set(that.kmItems, xmmcCode, kmItem) | ||||||
|  |       break; | ||||||
|  |   //   扣分 | ||||||
|  |     case 3: | ||||||
|  |       const thisKf = DeductionProjectConversion(`${kf.xmdm}_${kf.kfdm}`, judgeUI.markRuleListObj) | ||||||
|  |       const kfObj: MarkRule = { | ||||||
|  |         //扣分项目名称 | ||||||
|  |         xmmcStr: CurrentProjectConversion(kf.xmdm, judgeUI.projectsObj), | ||||||
|  |         xmdm: kf.xmdm + "", | ||||||
|  |         //扣分描述 | ||||||
|  |         desc: thisKf.desc, | ||||||
|  |         //扣分分数 | ||||||
|  |         score: thisKf.score, | ||||||
|  |         // 扣分无锡所代码 | ||||||
|  |         markcatalog: thisKf.markcatalog, | ||||||
|  |         markserial: thisKf.markserial, | ||||||
|  |         kfxh: thisKf.kfxh, | ||||||
|  |         //扣分类型 | ||||||
|  |         type: kf.type | ||||||
|  |       } | ||||||
|  |       dConsole.log(JudgeTag, "扣分组装", kfObj) | ||||||
|  |       that.kfArr?.push(kfObj) | ||||||
|  |       dConsole.log(JudgeTag, "扣分类组装", that.kfArr) | ||||||
|  |       judgeUI.totalScore += Number(thisKf?.score); | ||||||
|  |       if (kf.xmdm != 20) { | ||||||
|  |         const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, kf.xmdm) | ||||||
|  |         const type = project.type; | ||||||
|  |         project.type = (type == '3' || type == '4') ? '4' : '5' | ||||||
|  |         Reflect.set(judgeUI.projectsObj, kf.xmdm, project) | ||||||
|  |       } | ||||||
|  |       break; | ||||||
|  |   // 考试状态 | ||||||
|  |     case 4: | ||||||
|  |       break; | ||||||
|  |   //   考试结束 | ||||||
|  |     case 5: | ||||||
|  |       break; | ||||||
|  |   //   项目取消 | ||||||
|  |     case 6: | ||||||
|  |       break; | ||||||
|  |   //   语音播报和提示 | ||||||
|  |     case 7: | ||||||
|  |       break; | ||||||
|  |   //   模拟灯光事件 | ||||||
|  |     case 8: | ||||||
|  |       break; | ||||||
|  |   //   车道和路段变化 | ||||||
|  |     case 9: | ||||||
|  |       break; | ||||||
|  |   //   预进项目事件 | ||||||
|  |     case 10: | ||||||
|  |       break; | ||||||
|  |   //   差分事件 | ||||||
|  |     case 11: | ||||||
|  |       break; | ||||||
|  |     default: | ||||||
|  |       83 | ||||||
|  |       break; | ||||||
|  |   } | ||||||
|  |   await callBack({ | ||||||
|  |     //项目名称   考车状态   扣分arr | ||||||
|  |     xmmcStr: that.xmmcStr, carztStr: that.carztStr, kfArr: that.kfArr | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | export const SetJudgeItem = async (itemno: string, type: 1 | 2) => { | ||||||
|  |   await examJudgeArtificialItem(Number(itemno), type); | ||||||
|  |   const str = JSON.stringify({ | ||||||
|  |     method: 'examJudgeArtificialItem', | ||||||
|  |     itemno: Number(itemno), | ||||||
|  |     type | ||||||
|  |   }) | ||||||
|  |   dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, str) | ||||||
|  |   dConsole.info(JudgeTag, `人工评判${type == 1 ? '进入' : '取消'}项目-${itemno}`) | ||||||
|  | } | ||||||
							
								
								
									
										249
									
								
								entry/src/main/ets/pages/Judge/JudgeStart.ets
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										249
									
								
								entry/src/main/ets/pages/Judge/JudgeStart.ets
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,249 @@ | |||||||
|  | //开始评判 | ||||||
|  | import { JudgeConfig, JudgeTag } from '../../config'; | ||||||
|  | import { | ||||||
|  |   BaseInfoType, | ||||||
|  |   CARINFO, | ||||||
|  |   CarInfoType, | ||||||
|  |   CDSBInfo, | ||||||
|  |   ExaminerInfoType, | ||||||
|  |   ItemInfo, | ||||||
|  |   ItemInfos, | ||||||
|  |   JudgeBeginObj, | ||||||
|  |   JudgeInitObj, | ||||||
|  |   JudgeKFXM, | ||||||
|  |   JudgeKSXM, | ||||||
|  |   JudgeUI, | ||||||
|  |   Km3JudgeInitConfig, | ||||||
|  |   MAPITEMPOINTITEM, | ||||||
|  |   MAPPOINT, | ||||||
|  |   MarkRule, | ||||||
|  |   ProcessDataEnumType, | ||||||
|  |   ProjectInfo, | ||||||
|  |   RouteParamsType, | ||||||
|  |   SyssetConfig, | ||||||
|  |   SYSTEMPARMARR | ||||||
|  | } from '../../model'; | ||||||
|  | import common from '@ohos.app.ability.common'; | ||||||
|  | import { dConsole } from '../../utils/LogWorker'; | ||||||
|  | import { | ||||||
|  |   examJudgeBeginExam, | ||||||
|  |   examJudgeInit, | ||||||
|  |   examJudgeSetLogCallback, | ||||||
|  |   examJudgeSetPerformCallback, | ||||||
|  |   examJudgeSetRealExamCallback, | ||||||
|  |   examJudgeVersion | ||||||
|  | } from './JudgeSDKUtils'; | ||||||
|  | import FileModel from '../judgeSDK/utils/fileModel'; | ||||||
|  | import JudgeBusiness from './JudgeBusiness'; | ||||||
|  | import { saveStartRecordVideo } from '../../utils/Video'; | ||||||
|  | import router from '@ohos.router'; | ||||||
|  | import systemTime from '@ohos.systemTime'; | ||||||
|  | 
 | ||||||
|  | export const JudgeStartFn = async (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 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 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 | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // 获取评判开始考试数据 | ||||||
|  | const GetJudgeBeginData = async (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 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // 获取评判初始化数据 | ||||||
|  | const GetJudgeInitData = async (context: common.UIAbilityContext, markRuleListObj: object, carType: string, carName: string, systemparmArr: SYSTEMPARMARR[], carinfoArr: CARINFO[], 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 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export const GetModelData = (modelName: string, context: common.UIAbilityContext): string => { | ||||||
|  |   try { | ||||||
|  |     return new FileModel(context).getModelContent(JudgeConfig.modelPath, modelName); | ||||||
|  |   } catch (e) { | ||||||
|  |     // 可根据实际需求,返回空字符串或抛出异常 | ||||||
|  |     dConsole.error(JudgeTag, `获取模型数据失败: ${modelName}`, e.message) | ||||||
|  |     return ''; | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
							
								
								
									
										28
									
								
								entry/src/main/ets/pages/Judge/JudgeVariable.ets
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								entry/src/main/ets/pages/Judge/JudgeVariable.ets
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | |||||||
|  | import { testKm2Items, testKm3Items } from '../../mock'; | ||||||
|  | import { JudgeConfigObjKmItems, ProjectInfo, ProjectInfos } from '../../model'; | ||||||
|  | 
 | ||||||
|  | class judgeVariable { | ||||||
|  |   public rmndg: 0 | 1 = 0 | ||||||
|  |   public kmItems: JudgeConfigObjKmItems = {} | ||||||
|  |   public xmmcStr: string = "" | ||||||
|  |   public xmmcEndCode?: string = "" | ||||||
|  |   public xmxh: string = "" | ||||||
|  |   public status: string = "开始" | ||||||
|  | 
 | ||||||
|  |   constructor() { | ||||||
|  | 
 | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   public initKmItems(examSubject: string, projectsCenterObj: ProjectInfos) { | ||||||
|  |     (examSubject == '2' ? testKm2Items : testKm3Items).forEach(item => { | ||||||
|  |       const projectCenterObj: ProjectInfo = Reflect.get(projectsCenterObj, item.code) | ||||||
|  |       Reflect.set(this.kmItems, item.code, { | ||||||
|  |         code: item.code, | ||||||
|  |         status: projectCenterObj === undefined ? 0 : (projectCenterObj.isEnd ? 3 : 1) | ||||||
|  |       }) | ||||||
|  |     }) | ||||||
|  | 
 | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export const JudgeVariable = new judgeVariable(); | ||||||
| @ -2,25 +2,22 @@ import systemTime from '@ohos.systemDateTime'; | |||||||
| import { TestRealExam } from '../../mock'; | import { TestRealExam } from '../../mock'; | ||||||
| import { | import { | ||||||
|   CarInfoType, |   CarInfoType, | ||||||
|  |   DeductionProjectConversionType, | ||||||
|   DefaultJudgeConfigObj, |   DefaultJudgeConfigObj, | ||||||
|   ExtendType, |   ExtendType, | ||||||
|   Gps, |   Gps, | ||||||
|   LANE, |   LANE, | ||||||
|  |   MarkRule, | ||||||
|   PLCType, |   PLCType, | ||||||
|   ProjectInfo, |   ProjectInfo, | ||||||
|   ProjectInfos, |   ProjectInfos, | ||||||
|   ProjectRoads, |   ProjectRoads, | ||||||
|   Radar, |   Radar, | ||||||
|   VideoConfig, |  | ||||||
|   Vision |   Vision | ||||||
| } from '../../model'; | } from '../../model'; | ||||||
| import { ArrayToByteArray, NumberToByteArray } from '../../utils/Common'; | import { ArrayToByteArray, NumberToByteArray } from '../../utils/Common'; | ||||||
| import dayTs from '../../utils/Date'; | import dayTs from '../../utils/Date'; | ||||||
| import { dConsole } from '../../utils/LogWorker'; | import { dConsole } from '../../utils/LogWorker'; | ||||||
| import common from '@ohos.app.ability.common'; |  | ||||||
| import { JudgeConfig, JudgeTag } from '../../config'; |  | ||||||
| import { takePhoto } from '../../utils/Video'; |  | ||||||
| import Prompt from '@system.prompt'; |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| // 中心信号转换 | // 中心信号转换 | ||||||
| @ -838,3 +835,21 @@ export const GetIsEndManualProject = (index: number, artSubject3Projects: string | |||||||
|   return (type == '3' || type == '4') ? `${projectName}_red` : `${projectName}_green`; |   return (type == '3' || type == '4') ? `${projectName}_red` : `${projectName}_green`; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | //扣分项目转换 | ||||||
|  | export const DeductionProjectConversion = (code: string, markRuleListObj: object): DeductionProjectConversionType => { | ||||||
|  |   const thisMark: MarkRule = Reflect.get(markRuleListObj, code) | ||||||
|  |   return { | ||||||
|  |     desc: thisMark.markshow, | ||||||
|  |     score: thisMark.markreal, | ||||||
|  |     markcatalog: thisMark.markcatalog, | ||||||
|  |     markserial: thisMark.markserial, | ||||||
|  |     kfxh: thisMark.kfxh | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //当前项目转换 | ||||||
|  | export const CurrentProjectConversion = (code: number, projectsObj: object): string => { | ||||||
|  |   const project: ProjectInfo = Reflect.get(projectsObj, code) | ||||||
|  |   return project?.abbreviation || '通用评判' | ||||||
|  | } | ||||||
| @ -3,10 +3,11 @@ import { GPSData } from '../../mock' | |||||||
| import { PerLane, RoadDataType, SignalDataType, WorkerBackMessage, WorkerBackMessageType } from '../../model' | import { PerLane, RoadDataType, SignalDataType, WorkerBackMessage, WorkerBackMessageType } from '../../model' | ||||||
| import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker' | import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker' | ||||||
| import { dConsole } from '../../utils/LogWorker' | import { dConsole } from '../../utils/LogWorker' | ||||||
| import { examJudgeMapSetDrawing, examJudgeMapSetScaling } from '../Judge/JudgeUtils' | import { examJudgeMapSetDrawing, examJudgeMapSetScaling } from '../Judge/JudgeSDKUtils' | ||||||
| import BlockComponent from './Block' | import BlockComponent from './Block' | ||||||
| import CoordinateComponent from './Coordinate' | import CoordinateComponent from './Coordinate' | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| @Component | @Component | ||||||
| export default struct TrajectoryViewComponent { | export default struct TrajectoryViewComponent { | ||||||
|   // GPS信号 |   // GPS信号 | ||||||
|  | |||||||
| @ -66,7 +66,7 @@ import { | |||||||
|   examJudgeSetRealExamCallback, |   examJudgeSetRealExamCallback, | ||||||
|   examJudgeSoundEnd, |   examJudgeSoundEnd, | ||||||
|   examJudgeVersion |   examJudgeVersion | ||||||
| } from '../Judge/JudgeUtils'; | } from '../Judge/JudgeSDKUtils'; | ||||||
| import { | import { | ||||||
|   GetCarStatus, |   GetCarStatus, | ||||||
|   GetCenterProjectStatus, |   GetCenterProjectStatus, | ||||||
| @ -142,7 +142,7 @@ export default class Judge { | |||||||
|     switch (code) { |     switch (code) { | ||||||
|     //结束考试方式 |     //结束考试方式 | ||||||
|       case 306: |       case 306: | ||||||
|         if (judgeConfigObj[code] == 5) { |         if (Reflect.get(judgeConfigObj, code) == 5) { | ||||||
|           //靠边停车 |           //靠边停车 | ||||||
|           avPlayer?.playAudio(['voice/406001.mp3']) |           avPlayer?.playAudio(['voice/406001.mp3']) | ||||||
|         } |         } | ||||||
| @ -170,48 +170,6 @@ export default class Judge { | |||||||
|   private isExamEnd: boolean |   private isExamEnd: boolean | ||||||
|   // 是否发送udp |   // 是否发送udp | ||||||
|   private isUdpEnd: boolean = false |   private isUdpEnd: boolean = false | ||||||
|   // 处理udp plc信号 |  | ||||||
|   handleUdp = async (msg: string) => { |  | ||||||
|     const stachArr = msg.split(',') |  | ||||||
|     if (stachArr[0] != '#DN_GD' || this.isUdpEnd) { |  | ||||||
|       return |  | ||||||
|     } |  | ||||||
|     const gpsPart = msg.split("#END$GPS,")[1]; |  | ||||||
|     const gpsStatus = gpsPart.split(",")[0]; |  | ||||||
|     if (gpsStatus === "4") { |  | ||||||
|       dConsole.log(JudgeTag, "差分状态正常", gpsStatus) |  | ||||||
|       this.judgeUI.isDwztRight = true |  | ||||||
|     } else { |  | ||||||
|       dConsole.log(JudgeTag, "差分状态异常", gpsStatus) |  | ||||||
|       this.judgeUI.isDwztRight = false |  | ||||||
|     } |  | ||||||
|     this.judgeUI.isDwztRight |  | ||||||
|     const plcData = await this.getPlcData(msg); |  | ||||||
|     // 4.过程数据 |  | ||||||
|     // await this.fileLog?.setExamJudgeData(JSON.stringify(plcData)) |  | ||||||
|     dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, 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<number>('udpIndex') || 0; |  | ||||||
|     // 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 = false |   private isManual: boolean = false | ||||||
|   //UDP服务序列号 |   //UDP服务序列号 | ||||||
| @ -256,60 +214,6 @@ export default class Judge { | |||||||
|     dConsole.info(JudgeTag, '过程数据文件上传 end') |     dConsole.info(JudgeTag, '过程数据文件上传 end') | ||||||
|   } |   } | ||||||
|   private judgeTask: JudgeTask |   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 |   private tempData?: PLCType | ||||||
|   //实时计算gps经纬度距离 |   //实时计算gps经纬度距离 | ||||||
|   handDistance = async () => { |   handDistance = async () => { | ||||||
| @ -360,40 +264,47 @@ export default class Judge { | |||||||
|     AppStorage.setOrCreate('msgStr', plc) |     AppStorage.setOrCreate('msgStr', plc) | ||||||
|     return tempData |     return tempData | ||||||
|   } |   } | ||||||
|   // 处理轨迹plc信号 |   // 处理udp plc信号 | ||||||
|   handleTrajectoryUdp = async (strArr: string[]) => { |   handleUdp = async (msg: string) => { | ||||||
|     let num = 2; |     const stachArr = msg.split(',') | ||||||
|     const judgeTimer = setInterval(async () => { |     if (stachArr[0] != '#DN_GD' || this.isUdpEnd) { | ||||||
|       const msgStr = strArr[num]; |       return | ||||||
|       if (msgStr == '') { |     } | ||||||
|         dConsole.info(JudgeTag, '模拟数据考试结束') |     const gpsPart = msg.split("#END$GPS,")[1]; | ||||||
|         clearInterval(judgeTimer) |     const gpsStatus = gpsPart.split(",")[0]; | ||||||
|         this.checkExamIsEnd(true) |     if (gpsStatus === "4") { | ||||||
|         return |       dConsole.log(JudgeTag, "差分状态正常", gpsStatus) | ||||||
|       } |       this.judgeUI.isDwztRight = true | ||||||
|       const msg: PLCType = JSON.parse(strArr[num]); |     } else { | ||||||
|       num++ |       dConsole.log(JudgeTag, "差分状态异常", gpsStatus) | ||||||
|       // 4.过程数据 |       this.judgeUI.isDwztRight = false | ||||||
|       this.tempData = msg |     } | ||||||
|       // this.judgeUI.isDwztRight = (msg?.gps?.dwzt == 4 && msg?.gps?.jdzt == 3); |     this.judgeUI.isDwztRight | ||||||
|       this.judgeUI.sd = Math.floor(msg?.gps?.sd * 1.852) + ''; |     const plcData = await this.getPlcData(msg); | ||||||
|       this.judgeUI.dw = Math.floor(msg?.sensor?.dw) + '' |     // 4.过程数据 | ||||||
|       this.plcData = msg |     // await this.fileLog?.setExamJudgeData(JSON.stringify(plcData)) | ||||||
|       // this.judgeUI.isDwztRight = msg.gps.dwzt == 4; |     dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(plcData)) | ||||||
|       AppStorage.setOrCreate('msgStr', '') |     //检测到有无锡所设备接入,需要发送特定的数据,供检测 | ||||||
|       if (msg.method === 'examJudgeArtificialItem') { |     // if (this.usbService.isWXUSBDevice) { | ||||||
|         this.setJudgeItem(msg.itemno, msg.type) |     //   const str = await senorToWXDataStr(msg); | ||||||
|       } |     //   this.usbService.sendUSB(str) | ||||||
|       if (msg.method === 'examJudgeArtificialMark') { |     // } | ||||||
|         this.setJudgeItem(msg.itemno, msg.serial) |     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) + '' | ||||||
|       await examJudgeRealExam(msg) |     this.judgeUI.dw = (Math.floor(plcData.sensor.dw as number) || 0) + '' | ||||||
|       // const bytes = await this.getMessageHeartbeat(); |     //TODO 暂时关闭差分检测异常 | ||||||
|       // bytes && globalThis.judgeUdp.send(bytes) |     // await this.checkDwzt(plcData.gps.dwzt,plcData.gps.jdzt); | ||||||
| 
 |     if (!this.isExamEnd) { | ||||||
|     }, 200) |       await examJudgeRealExam(plcData) | ||||||
|     // TODO 定时器缺失 |     } | ||||||
|     // globalThis.judgeTimer = judgeTimer; |     // let udpIndex = AppStorage.get<number>('udpIndex') || 0; | ||||||
|  |     // 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 isEndTip: boolean = false; |   private isEndTip: boolean = false; | ||||||
|   //本地轨迹回放地址 |   //本地轨迹回放地址 | ||||||
| @ -413,6 +324,32 @@ export default class Judge { | |||||||
|       const code = await writeObjectOut(JSON.parse(examDataStr), "", this.context); |       const code = await writeObjectOut(JSON.parse(examDataStr), "", this.context); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |   private artSubject3ProjectsCodesArr: number[] = [3, 9, 4, 10, 12, 11] | ||||||
|  |   private lane: LANE = { | ||||||
|  |     road: '', num: 0, count: 0 | ||||||
|  |   } | ||||||
|  |   private disConnectNum: number = 0; | ||||||
|  |   //调用监管接口 | ||||||
|  |   sendWriteObjectOut: SendWriteObjectOut = async (data, filePath) => { | ||||||
|  |     const temp = await writeObjectOut(data, filePath, this.context); | ||||||
|  |     dConsole.log(JudgeTag, "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) { | ||||||
|  |       dConsole.info('surenjun', '123') | ||||||
|  |       this.judgeUI.errorMsg = '当前的考试过程信息网络传输异常,程序点击确认将重启!'; | ||||||
|  |       this.judgeUI.disConnectErrorOpen = true | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     this.disConnectNum = 0 | ||||||
|  |     return temp | ||||||
|  |   } | ||||||
|   // 项目开始接口同步 |   // 项目开始接口同步 | ||||||
|   beginProject = async (ksxm: number) => { |   beginProject = async (ksxm: number) => { | ||||||
|     const carInfo = AppStorage.get<CarInfoType>('carInfo'); |     const carInfo = AppStorage.get<CarInfoType>('carInfo'); | ||||||
| @ -516,32 +453,6 @@ export default class Judge { | |||||||
|     UploadRegulatoryCodeConversion('17C54', temp.code || 0) |     UploadRegulatoryCodeConversion('17C54', temp.code || 0) | ||||||
|     dConsole.info(JudgeTag, '上传照片 end') |     dConsole.info(JudgeTag, '上传照片 end') | ||||||
|   } |   } | ||||||
|   private artSubject3ProjectsCodesArr: number[] = [3, 9, 4, 10, 12, 11] |  | ||||||
|   private lane: LANE = { |  | ||||||
|     road: '', num: 0, count: 0 |  | ||||||
|   } |  | ||||||
|   private disConnectNum: number = 0; |  | ||||||
|   //调用监管接口 |  | ||||||
|   sendWriteObjectOut: SendWriteObjectOut = async (data, filePath) => { |  | ||||||
|     const temp = await writeObjectOut(data, filePath, this.context); |  | ||||||
|     dConsole.log(JudgeTag, "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) { |  | ||||||
|       dConsole.info('surenjun', '123') |  | ||||||
|       this.judgeUI.errorMsg = '当前的考试过程信息网络传输异常,程序点击确认将重启!'; |  | ||||||
|       this.judgeUI.disConnectErrorOpen = true |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     this.disConnectNum = 0 |  | ||||||
|     return temp |  | ||||||
|   } |  | ||||||
|   private videoData?: RecordHandleType |   private videoData?: RecordHandleType | ||||||
|   //当前科目二的考试项目 |   //当前科目二的考试项目 | ||||||
|   private deductedPopShowTimer: number = 0; |   private deductedPopShowTimer: number = 0; | ||||||
| @ -655,6 +566,95 @@ export default class Judge { | |||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |   // 检测扣分、结束项目时该项目是否开始 | ||||||
|  |   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 | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   // 处理轨迹plc信号 | ||||||
|  |   handleTrajectoryUdp = async (strArr: string[]) => { | ||||||
|  |     let num = 2; | ||||||
|  |     const judgeTimer = setInterval(async () => { | ||||||
|  |       const msgStr = strArr[num]; | ||||||
|  |       if (msgStr == '') { | ||||||
|  |         dConsole.info(JudgeTag, '模拟数据考试结束') | ||||||
|  |         clearInterval(judgeTimer) | ||||||
|  |         this.checkExamIsEnd(true) | ||||||
|  |         return | ||||||
|  |       } | ||||||
|  |       const msg: PLCType = JSON.parse(strArr[num]); | ||||||
|  |       num++ | ||||||
|  |       // 4.过程数据 | ||||||
|  |       this.tempData = msg | ||||||
|  |       // this.judgeUI.isDwztRight = (msg?.gps?.dwzt == 4 && msg?.gps?.jdzt == 3); | ||||||
|  |       this.judgeUI.sd = Math.floor(msg?.gps?.sd * 1.852) + ''; | ||||||
|  |       this.judgeUI.dw = Math.floor(msg?.sensor?.dw) + '' | ||||||
|  |       this.plcData = msg | ||||||
|  |       // this.judgeUI.isDwztRight = msg.gps.dwzt == 4; | ||||||
|  |       AppStorage.setOrCreate('msgStr', '') | ||||||
|  |       if (msg.method === 'examJudgeArtificialItem') { | ||||||
|  |         this.setJudgeItem(msg.itemno, msg.type) | ||||||
|  |       } | ||||||
|  |       if (msg.method === 'examJudgeArtificialMark') { | ||||||
|  |         this.setJudgeItem(msg.itemno, msg.serial) | ||||||
|  |       } | ||||||
|  |       await examJudgeRealExam(msg) | ||||||
|  |       // const bytes = await this.getMessageHeartbeat(); | ||||||
|  |       // bytes && globalThis.judgeUdp.send(bytes) | ||||||
|  | 
 | ||||||
|  |     }, 200) | ||||||
|  |     // TODO 定时器缺失 | ||||||
|  |     // globalThis.judgeTimer = judgeTimer; | ||||||
|  |   } | ||||||
| 
 | 
 | ||||||
|   constructor(judgeUI: JudgeUI) { |   constructor(judgeUI: JudgeUI) { | ||||||
|     this.serialIndex = 1; |     this.serialIndex = 1; | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								entry/src/main/resources/rawfile/voice/end_tip.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								entry/src/main/resources/rawfile/voice/end_tip.mp3
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								entry/src/main/resources/rawfile/voice/zhpp.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								entry/src/main/resources/rawfile/voice/zhpp.mp3
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user