|  |  |  | @ -230,6 +230,91 @@ export default class Judge { | 
		
	
		
			
				|  |  |  |  |     dConsole.info(JudgeTag, '过程数据文件上传 end') | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   private judgeTask: JudgeTask | 
		
	
		
			
				|  |  |  |  |   // 处理udp plc信号 | 
		
	
		
			
				|  |  |  |  |   handleUdp = async (msg: string) => { | 
		
	
		
			
				|  |  |  |  |     const stachArr = msg.split(',') | 
		
	
		
			
				|  |  |  |  |     if (stachArr[0] != '#DN_GD' || this.isUdpEnd) { | 
		
	
		
			
				|  |  |  |  |       return | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     const plcData = await this.getPlcData(msg); | 
		
	
		
			
				|  |  |  |  |     // 4.过程数据 | 
		
	
		
			
				|  |  |  |  |     await this.fileLog?.setExamJudgeData(JSON.stringify(plcData)) | 
		
	
		
			
				|  |  |  |  |     //检测到有无锡所设备接入,需要发送特定的数据,供检测 | 
		
	
		
			
				|  |  |  |  |     // if (this.usbService.isWXUSBDevice) { | 
		
	
		
			
				|  |  |  |  |     //   const str = await senorToWXDataStr(msg); | 
		
	
		
			
				|  |  |  |  |     //   this.usbService.sendUSB(str) | 
		
	
		
			
				|  |  |  |  |     // } | 
		
	
		
			
				|  |  |  |  |     const param350: number = Reflect.get(this.judgeUI.judgeConfigObj, '350') | 
		
	
		
			
				|  |  |  |  |     this.judgeUI.sd = ((param350 == 0 ? plcData.gps.sd : plcData.sensor.cs) as number * 1.852).toFixed(0) + '' | 
		
	
		
			
				|  |  |  |  |     this.judgeUI.dw = (Math.floor(plcData.sensor.dw as number) || 0) + '' | 
		
	
		
			
				|  |  |  |  |     //TODO 暂时关闭差分检测异常 | 
		
	
		
			
				|  |  |  |  |     // await this.checkDwzt(plcData.gps.dwzt,plcData.gps.jdzt); | 
		
	
		
			
				|  |  |  |  |     if (!this.isExamEnd) { | 
		
	
		
			
				|  |  |  |  |       await examJudgeRealExam(plcData) | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     // let udpIndex = AppStorage.get<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++) | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   // 检测扣分、结束项目时该项目是否开始 | 
		
	
		
			
				|  |  |  |  |   checkProjectIsStart = async (xmdm: number, currentType: 1 | 2, kf?: MarkRule) => { | 
		
	
		
			
				|  |  |  |  |     if (xmdm == 20) { | 
		
	
		
			
				|  |  |  |  |       return true | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     const judgeUI = this.judgeUI; | 
		
	
		
			
				|  |  |  |  |     const judgeTask = this.judgeTask; | 
		
	
		
			
				|  |  |  |  |     const projectsObj: object = this.judgeUI.projectsObj | 
		
	
		
			
				|  |  |  |  |     const currentProject: ProjectInfo = Reflect.get(projectsObj, xmdm) | 
		
	
		
			
				|  |  |  |  |     const isUpload = currentProject.isUpload | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     //如果项目没有开始 | 
		
	
		
			
				|  |  |  |  |     dConsole.info(JudgeTag, 'surenjun isUpload=>', isUpload) | 
		
	
		
			
				|  |  |  |  |     if (!isUpload) { | 
		
	
		
			
				|  |  |  |  |       dConsole.info(JudgeTag, '项目补传开始') | 
		
	
		
			
				|  |  |  |  |       //项目开始补传 | 
		
	
		
			
				|  |  |  |  |       judgeTask.addTask(async () => { | 
		
	
		
			
				|  |  |  |  |         await this.beginProject(xmdm) | 
		
	
		
			
				|  |  |  |  |       }, { | 
		
	
		
			
				|  |  |  |  |         isDelay: true | 
		
	
		
			
				|  |  |  |  |       }) | 
		
	
		
			
				|  |  |  |  |       judgeTask.addTask(async () => { | 
		
	
		
			
				|  |  |  |  |         await this.uploadProgressPhoto(xmdm) | 
		
	
		
			
				|  |  |  |  |       }, { | 
		
	
		
			
				|  |  |  |  |         isDelay: true | 
		
	
		
			
				|  |  |  |  |       }) | 
		
	
		
			
				|  |  |  |  |       currentProject.isUpload = true; | 
		
	
		
			
				|  |  |  |  |       Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject) | 
		
	
		
			
				|  |  |  |  |       //扣分补传 | 
		
	
		
			
				|  |  |  |  |       if (currentType == 2) { | 
		
	
		
			
				|  |  |  |  |         judgeTask.addTask(async () => { | 
		
	
		
			
				|  |  |  |  |           await this.pointsDedute(xmdm, kf!) | 
		
	
		
			
				|  |  |  |  |         }, { | 
		
	
		
			
				|  |  |  |  |           isDelay: true | 
		
	
		
			
				|  |  |  |  |         }) | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       //扣分补传判断是否合格 不合格补传项目结束 | 
		
	
		
			
				|  |  |  |  |       if (currentType == 1 || (currentType == 2 && this.totalScore < judgeUI.passingScore)) { | 
		
	
		
			
				|  |  |  |  |         judgeTask.addTask(async () => { | 
		
	
		
			
				|  |  |  |  |           await this.endProject(xmdm) | 
		
	
		
			
				|  |  |  |  |         }, { | 
		
	
		
			
				|  |  |  |  |           isDelay: true | 
		
	
		
			
				|  |  |  |  |         }) | 
		
	
		
			
				|  |  |  |  |         currentProject.isEnd = true; | 
		
	
		
			
				|  |  |  |  |         Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject) | 
		
	
		
			
				|  |  |  |  |       } | 
		
	
		
			
				|  |  |  |  |       judgeTask.addTask(async () => { | 
		
	
		
			
				|  |  |  |  |         this.checkExamIsEnd() | 
		
	
		
			
				|  |  |  |  |       }) | 
		
	
		
			
				|  |  |  |  |       return false; | 
		
	
		
			
				|  |  |  |  |     } else { | 
		
	
		
			
				|  |  |  |  |       return true | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   private tempData?: PLCType | 
		
	
		
			
				|  |  |  |  |   //实时计算gps经纬度距离 | 
		
	
		
			
				|  |  |  |  |   handDistance = async () => { | 
		
	
	
		
			
				
					
					|  |  |  | @ -253,11 +338,9 @@ export default class Judge { | 
		
	
		
			
				|  |  |  |  |     this.prevWd = tWD; | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   private performInfo?: JudgePerformInfo | 
		
	
		
			
				|  |  |  |  |   private isEndTip: boolean = false; | 
		
	
		
			
				|  |  |  |  |   private deductedPopShowTimer: number = 0; | 
		
	
		
			
				|  |  |  |  |   // 校验考试是否结束 | 
		
	
		
			
				|  |  |  |  |   checkExamIsEnd = | 
		
	
		
			
				|  |  |  |  |     async (isManual?: boolean) => { | 
		
	
		
			
				|  |  |  |  |   checkExamIsEnd = async (isManual?: boolean) => { | 
		
	
		
			
				|  |  |  |  |     dConsole.log(JudgeTag, "校验考试是否结束") | 
		
	
		
			
				|  |  |  |  |     const judgeUI = this.judgeUI | 
		
	
		
			
				|  |  |  |  |     const avPlayer = this.avPlayer | 
		
	
		
			
				|  |  |  |  |     const isExamEnd = this.isExamEnd | 
		
	
	
		
			
				
					
					|  |  |  | @ -268,10 +351,11 @@ export default class Judge { | 
		
	
		
			
				|  |  |  |  |     const totalScore = Number(judgeUI.totalScore) | 
		
	
		
			
				|  |  |  |  |     const judgeConfigObj = judgeUI.judgeConfigObj | 
		
	
		
			
				|  |  |  |  |     const examMileage = Number(judgeUI.examMileage) | 
		
	
		
			
				|  |  |  |  |       const passingScore = Number(judgeUI.examMileage) | 
		
	
		
			
				|  |  |  |  |     const passingScore = Number(judgeUI.passingScore) | 
		
	
		
			
				|  |  |  |  |     const jl = judgeUI.jl | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     if (isExamEnd) { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |       return | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     //及格分 | 
		
	
	
		
			
				
					
					|  |  |  | @ -318,6 +402,7 @@ export default class Judge { | 
		
	
		
			
				|  |  |  |  |           this.isExamEnd = true | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |       } else { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |         //成绩不合格 | 
		
	
		
			
				|  |  |  |  |         if (totalScore < passingGrade) { | 
		
	
		
			
				|  |  |  |  |           //科目三不合格报靠边停车 | 
		
	
	
		
			
				
					
					|  |  |  | @ -393,37 +478,7 @@ export default class Judge { | 
		
	
		
			
				|  |  |  |  |     AppStorage.setOrCreate('msgStr', plc) | 
		
	
		
			
				|  |  |  |  |     return tempData | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   // 处理udp plc信号 | 
		
	
		
			
				|  |  |  |  |   handleUdp = async (msg: string) => { | 
		
	
		
			
				|  |  |  |  |     const stachArr = msg.split(',') | 
		
	
		
			
				|  |  |  |  |     if (stachArr[0] != '#DN_GD' || this.isUdpEnd) { | 
		
	
		
			
				|  |  |  |  |       return | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     const plcData = await this.getPlcData(msg); | 
		
	
		
			
				|  |  |  |  |     // 4.过程数据 | 
		
	
		
			
				|  |  |  |  |     await this.fileLog?.setExamJudgeData(JSON.stringify(plcData)) | 
		
	
		
			
				|  |  |  |  |     //检测到有无锡所设备接入,需要发送特定的数据,供检测 | 
		
	
		
			
				|  |  |  |  |     // if (this.usbService.isWXUSBDevice) { | 
		
	
		
			
				|  |  |  |  |     //   const str = await senorToWXDataStr(msg); | 
		
	
		
			
				|  |  |  |  |     //   this.usbService.sendUSB(str) | 
		
	
		
			
				|  |  |  |  |     // } | 
		
	
		
			
				|  |  |  |  |     const param350: number = Reflect.get(this.judgeUI.judgeConfigObj, '350') | 
		
	
		
			
				|  |  |  |  |     this.judgeUI.sd = ((param350 == 0 ? plcData.gps.sd : plcData.sensor.cs) as number * 1.852).toFixed(0) + '' | 
		
	
		
			
				|  |  |  |  |     this.judgeUI.dw = (Math.floor(plcData.sensor.dw as number) || 0) + '' | 
		
	
		
			
				|  |  |  |  |     //TODO 暂时关闭差分检测异常 | 
		
	
		
			
				|  |  |  |  |     // await this.checkDwzt(plcData.gps.dwzt,plcData.gps.jdzt); | 
		
	
		
			
				|  |  |  |  |     if (!this.isExamEnd) { | 
		
	
		
			
				|  |  |  |  |       await examJudgeRealExam(plcData) | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     // let udpIndex = AppStorage.get<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; | 
		
	
		
			
				|  |  |  |  |   // 处理轨迹plc信号 | 
		
	
		
			
				|  |  |  |  |   handleTrajectoryUdp = async (strArr: string[]) => { | 
		
	
		
			
				|  |  |  |  |     let num = 2; | 
		
	
	
		
			
				
					
					|  |  |  | @ -581,60 +636,7 @@ export default class Judge { | 
		
	
		
			
				|  |  |  |  |     UploadRegulatoryCodeConversion('17C54', temp.code || 0) | 
		
	
		
			
				|  |  |  |  |     dConsole.info(JudgeTag, '上传照片 end') | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   // 检测扣分、结束项目时该项目是否开始 | 
		
	
		
			
				|  |  |  |  |   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 deductedPopShowTimer: number = 0; | 
		
	
		
			
				|  |  |  |  |   private artSubject3ProjectsCodesArr: number[] = [3, 9, 4, 10, 12, 11] | 
		
	
		
			
				|  |  |  |  |   private lane: LANE = { | 
		
	
		
			
				|  |  |  |  |     road: '', num: 0, count: 0 | 
		
	
	
		
			
				
					
					|  |  |  | @ -1059,8 +1061,7 @@ export default class Judge { | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |   // 更改考试状态 | 
		
	
		
			
				|  |  |  |  |   goVoiceAnnounce = | 
		
	
		
			
				|  |  |  |  |     async (event: number, xmdm: number, kf: MarkRule[], xmjs: JudgeXMJS, ksjs: JudgeKSJS, xmxh: string) => { | 
		
	
		
			
				|  |  |  |  |   goVoiceAnnounce = async (event: number, xmdm: number, kf: MarkRule[], xmjs: JudgeXMJS, ksjs: JudgeKSJS, xmxh: string) => { | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  |     const beginProject = this.beginProject | 
		
	
		
			
				|  |  |  |  |     const pointsDedute = this.pointsDedute | 
		
	
	
		
			
				
					
					|  |  |  | @ -1907,7 +1908,7 @@ export default class Judge { | 
		
	
		
			
				|  |  |  |  |     // 2.评判过程回调 | 
		
	
		
			
				|  |  |  |  |     await examJudgeSetRealExamCallback(async (strData: string, len: number) => { | 
		
	
		
			
				|  |  |  |  |       // 评判回调日志 | 
		
	
		
			
				|  |  |  |  |       // await fileLog?.setExamJudgeCallbackData(strData) | 
		
	
		
			
				|  |  |  |  |       await fileLog?.setExamJudgeCallbackData(strData) | 
		
	
		
			
				|  |  |  |  |       dConsole.info(JudgeTag, '评判回调数据', strData) | 
		
	
		
			
				|  |  |  |  |       await this.handleRealExam(strData, callBack) | 
		
	
		
			
				|  |  |  |  |     }) | 
		
	
	
		
			
				
					
					|  |  |  | @ -1963,7 +1964,6 @@ export default class Judge { | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     // 处理实时udp里的plc信号 | 
		
	
		
			
				|  |  |  |  |     DifferentialAndSignal.onMsg((data: string) => { | 
		
	
		
			
				|  |  |  |  |       dConsole.info(JudgeTag, 'socketTag[PLC.UdpClient]', '收到udp回调数据') | 
		
	
		
			
				|  |  |  |  |       const result: WorkerBackMessage = JSON.parse(data) | 
		
	
		
			
				|  |  |  |  |       if (result.type === WorkerBackMessageType.ObtainUdpData) { | 
		
	
		
			
				|  |  |  |  |         handleUdp(result.data as string) | 
		
	
	
		
			
				
					
					|  |  |  | 
 |