Compare commits
	
		
			6 Commits
		
	
	
		
			ee4d54e8d7
			...
			beb6ba1b60
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | beb6ba1b60 | ||
|  | 2321052cc1 | ||
|  | 19d409cf54 | ||
|  | 7e7900a124 | ||
|  | d64d951f1e | ||
|  | e6a75028c5 | 
| @ -146,3 +146,4 @@ export async function initCarParameter(params: object) { | |||||||
|     xml: false, |     xml: false, | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | |||||||
							
								
								
									
										94
									
								
								entry/src/main/ets/api/networkCamera.ets
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								entry/src/main/ets/api/networkCamera.ets
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,94 @@ | |||||||
|  | import http from '@ohos.net.http'; | ||||||
|  | import buffer from '@ohos.buffer'; | ||||||
|  | import image from '@ohos.multimedia.image'; | ||||||
|  | 
 | ||||||
|  | const TAG = 'CameraService'; | ||||||
|  | 
 | ||||||
|  | export async function ObtainNetworkCameraImages(): Promise<string | null> { | ||||||
|  |   const url = "http://192.168.1.125/snapshot.cgi?stream=1&username=admin&password=123456"; | ||||||
|  |   let httpRequest = http.createHttp(); | ||||||
|  | 
 | ||||||
|  |   try { | ||||||
|  |     console.info(TAG, 'Starting image request...'); | ||||||
|  |     const response = await httpRequest.request(url, { | ||||||
|  |       method: http.RequestMethod.GET, | ||||||
|  |       connectTimeout: 10000, | ||||||
|  |       readTimeout: 10000, | ||||||
|  |       expectDataType: http.HttpDataType.ARRAY_BUFFER, | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     if (response.responseCode === 200) { | ||||||
|  |       let arrayBuffer = response.result as ArrayBuffer; | ||||||
|  | 
 | ||||||
|  |       // 裁剪左半部分 | ||||||
|  |       const croppedBase64 = await cropLeftHalf(arrayBuffer); | ||||||
|  | 
 | ||||||
|  |       return croppedBase64; | ||||||
|  |     } else { | ||||||
|  |       console.error(TAG, `HTTP Error: ${response.responseCode}`); | ||||||
|  |       return null; | ||||||
|  |     } | ||||||
|  |   } catch (error) { | ||||||
|  |     console.error(TAG, 'An error occurred while fetching the image.', JSON.stringify(error)); | ||||||
|  |     return null; | ||||||
|  |   } finally { | ||||||
|  |     httpRequest.destroy(); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | async function cropLeftHalf(arrayBuffer: ArrayBuffer): Promise<string> { | ||||||
|  |   let imageSource: image.ImageSource | null = null; | ||||||
|  |   let pixelMap: image.PixelMap | null = null; | ||||||
|  | 
 | ||||||
|  |   try { | ||||||
|  |     // 1. 创建ImageSource | ||||||
|  |     imageSource = image.createImageSource(arrayBuffer); | ||||||
|  | 
 | ||||||
|  |     // 2. 获取图片信息 | ||||||
|  |     const imageInfo = await imageSource.getImageInfo(); | ||||||
|  |     console.info(TAG, `Original image size: ${imageInfo.size.width}x${imageInfo.size.height}`); | ||||||
|  | 
 | ||||||
|  |     // 3. 计算并定义左半部分的裁剪区域 | ||||||
|  |     const leftHalfWidth = Math.floor(imageInfo.size.width / 2); | ||||||
|  |     const cropRegion: image.Region = { | ||||||
|  |       size: { | ||||||
|  |         width: leftHalfWidth, | ||||||
|  |         height: imageInfo.size.height | ||||||
|  |       }, | ||||||
|  |       x: 0, | ||||||
|  |       y: 0 | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     // 创建解码选项,并将裁剪区域放入其中 | ||||||
|  |     const decodingOptions: image.DecodingOptions = { | ||||||
|  |       desiredRegion: cropRegion | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     // 4. 创建像素映射并进行裁剪 | ||||||
|  |     pixelMap = await imageSource.createPixelMap(decodingOptions); | ||||||
|  | 
 | ||||||
|  |     // 5. 将裁剪后的PixelMap转换为ArrayBuffer | ||||||
|  |     const imagePacker = image.createImagePacker(); | ||||||
|  |     const packedData = await imagePacker.packing(pixelMap, { | ||||||
|  |       format: "image/jpeg", | ||||||
|  |       quality: 90 | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     // 6. 转换为Base64 | ||||||
|  |     const buf = buffer.from(packedData); | ||||||
|  |     const base64 = buf.toString('base64'); | ||||||
|  | 
 | ||||||
|  |     const result = `data:image/jpeg;base64,${base64}`; | ||||||
|  |     console.info(TAG, `Left half cropped successfully. Size: ${leftHalfWidth}x${imageInfo.size.height}`); | ||||||
|  | 
 | ||||||
|  |     return result; | ||||||
|  | 
 | ||||||
|  |   } catch (error) { | ||||||
|  |     console.error(TAG, 'Image cropping failed:', JSON.stringify(error)); | ||||||
|  |     return ""; | ||||||
|  |   } finally { | ||||||
|  |     // 7. 在 finally 块中安全地释放资源 | ||||||
|  |     imageSource?.release(); | ||||||
|  |     pixelMap?.release(); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -26,7 +26,7 @@ export const JudgeConfig: JudgeConfigType = { | |||||||
|   // 本地模型地址 |   // 本地模型地址 | ||||||
|   modelPath: 'models/model_enc', |   modelPath: 'models/model_enc', | ||||||
|   // 济南科目三 |   // 济南科目三 | ||||||
|   trajectoryPath: 'logs/2024_10_12/2024_10_12_11_50_10_9999427676823_744299437502336256_隋统/judge_exam_data.txt', |   trajectoryPath: 'logs/2025_08_22/2025_08_22_17_09_49_9999245520855_654211778346526080_杜兰曼/judge_exam_data.txt', | ||||||
|   //四合一画面配置 |   //四合一画面配置 | ||||||
|   fourInOneScreen: { |   fourInOneScreen: { | ||||||
|     //gps位数 |     //gps位数 | ||||||
|  | |||||||
| @ -169,6 +169,8 @@ export interface EnvironmentConfigurationType { | |||||||
|   version?: string |   version?: string | ||||||
|   //   评判版本 |   //   评判版本 | ||||||
|   judgeVersion?: string |   judgeVersion?: string | ||||||
|  |   //   是否使用网络摄像头 | ||||||
|  |   isUseNetworkCamera?: string | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| //全局配置 | //全局配置 | ||||||
|  | |||||||
| @ -19,6 +19,7 @@ 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 { ObtainNetworkCameraImages } from '../api/networkCamera'; | ||||||
| 
 | 
 | ||||||
| @Entry | @Entry | ||||||
| @Component | @Component | ||||||
| @ -40,6 +41,7 @@ struct Index { | |||||||
|   @State isPlay: boolean = false; |   @State isPlay: boolean = false; | ||||||
|   @State initWork: boolean = false |   @State initWork: boolean = false | ||||||
|   @State status: string = "开始" |   @State status: string = "开始" | ||||||
|  |   @State base64Img: string = "" | ||||||
|   // 请求网络表等待弹窗 |   // 请求网络表等待弹窗 | ||||||
|   customDialogController: CustomDialogController = new CustomDialogController({ |   customDialogController: CustomDialogController = new CustomDialogController({ | ||||||
|     builder: CarLoadingComponent(), |     builder: CarLoadingComponent(), | ||||||
| @ -62,6 +64,7 @@ struct Index { | |||||||
| 
 | 
 | ||||||
|   async aboutToAppear() { |   async aboutToAppear() { | ||||||
|     dConsole.log("权限首页 aboutToAppear") |     dConsole.log("权限首页 aboutToAppear") | ||||||
|  |     this.base64Img = await ObtainNetworkCameraImages() || "" | ||||||
|     this.ratio = AppStorage.get<BaseInfoType>('baseInfo')?.ratio || 1.4 |     this.ratio = AppStorage.get<BaseInfoType>('baseInfo')?.ratio || 1.4 | ||||||
|     this.angle = 0 |     this.angle = 0 | ||||||
|     AppStorage.set('lsh', '1111111111111') |     AppStorage.set('lsh', '1111111111111') | ||||||
|  | |||||||
| @ -37,11 +37,12 @@ export default struct SignalTrajectoryDialog { | |||||||
|         }) |         }) | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       Scroll() { |       // Scroll() { | ||||||
|       Column() { |       Column() { | ||||||
|         if (this.active !== 2) { |         if (this.active !== 2) { | ||||||
|           SignalDisplayComponent({ |           SignalDisplayComponent({ | ||||||
|             active: this.active, |             active: this.active, | ||||||
|  |             heightNum: 1500 | ||||||
|           }) |           }) | ||||||
|         } else { |         } else { | ||||||
|           TrajectoryViewComponent({ |           TrajectoryViewComponent({ | ||||||
| @ -50,7 +51,7 @@ export default struct SignalTrajectoryDialog { | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|       }.height(890) |       }.height(890) | ||||||
|       }.width("100%") |       // }.width("100%") | ||||||
|       .height(700) |       .height(700) | ||||||
|     }.width(1500) |     }.width(1500) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -6,11 +6,9 @@ import { | |||||||
|   DefaultJudgeConfigObj, |   DefaultJudgeConfigObj, | ||||||
|   ExtendType, |   ExtendType, | ||||||
|   Gps, |   Gps, | ||||||
|   JudgeSound, |  | ||||||
|   LANE, |   LANE, | ||||||
|   MarkRule, |   MarkRule, | ||||||
|   PLCType, |   PLCType, | ||||||
|   ProcessDataEnumType, |  | ||||||
|   ProjectInfo, |   ProjectInfo, | ||||||
|   ProjectInfos, |   ProjectInfos, | ||||||
|   ProjectRoads, |   ProjectRoads, | ||||||
| @ -21,7 +19,6 @@ 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 VoiceAnnounce from '../judgeSDK/utils/voiceAnnouncements'; | import VoiceAnnounce from '../judgeSDK/utils/voiceAnnouncements'; | ||||||
| import { examJudgeSoundEnd } from './JudgeSDKUtils'; |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| // 中心信号转换 | // 中心信号转换 | ||||||
| @ -863,23 +860,23 @@ export const CurrentProjectConversion = (code: number, projectsObj: object): str | |||||||
|  * @param sound - 评判音频对象 |  * @param sound - 评判音频对象 | ||||||
|  * @param avPlayer - 语音播放器实例 |  * @param avPlayer - 语音播放器实例 | ||||||
|  */ |  */ | ||||||
| export function PlayJudgeVoice(sound: JudgeSound, avPlayer: VoiceAnnounce) { | // export function PlayJudgeVoice(sound: JudgeSound, avPlayer: VoiceAnnounce) { | ||||||
|   if (sound.type == 1) { | //   if (sound.type == 1) { | ||||||
|     avPlayer?.playAudio([`voice/${sound.code[0]}.mp3`], false, () => { | //     avPlayer?.playAudio([`voice/${sound.code[0]}.mp3`], false, () => { | ||||||
|       examJudgeSoundEnd({ | //       examJudgeSoundEnd({ | ||||||
|         xmdm: sound.xmdm, code: sound.code[0], type: sound.type | //         xmdm: sound.xmdm, code: sound.code[0], type: sound.type | ||||||
|       }); | //       }); | ||||||
|       dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify({ | //       dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify({ | ||||||
|         method: 'examJudgeSoundEnd', | //         method: 'examJudgeSoundEnd', | ||||||
|         itemno: sound.xmdm, | //         itemno: sound.xmdm, | ||||||
|         code: sound.code[0], | //         code: sound.code[0], | ||||||
|         type: sound.type, | //         type: sound.type, | ||||||
|       })); | //       })); | ||||||
|     }); | //     }); | ||||||
|   } else { | //   } else { | ||||||
|     avPlayer?.playAudio([`voice/${sound.code[0]}.mp3`]); | //     avPlayer?.playAudio([`voice/${sound.code[0]}.mp3`]); | ||||||
|   } | //   } | ||||||
| } | // } | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * 检查差分 |  * 检查差分 | ||||||
|  | |||||||
| @ -7,14 +7,15 @@ import ethernet from '@ohos.net.ethernet'; | |||||||
| import { BusinessError } from '@ohos.base'; | import { BusinessError } from '@ohos.base'; | ||||||
| import Prompt from '@system.prompt'; | import Prompt from '@system.prompt'; | ||||||
| import { dConsole } from '../utils/LogWorker'; | import { dConsole } from '../utils/LogWorker'; | ||||||
|  | import window from '@ohos.window'; | ||||||
| 
 | 
 | ||||||
| @Entry | @Entry | ||||||
| @Component | @Component | ||||||
| struct TerminalInfoPage { | struct TerminalInfoPage { | ||||||
|   @State config: EnvironmentConfigurationType = {} |   @State config: EnvironmentConfigurationType = {} | ||||||
|  |   @State isProcessing: boolean = false; | ||||||
|   private fileUtil!: FileUtils |   private fileUtil!: FileUtils | ||||||
|   private context = getContext(this) as common.UIAbilityContext; |   private context = getContext(this) as common.UIAbilityContext; | ||||||
|   @State isProcessing: boolean = false; |  | ||||||
| 
 | 
 | ||||||
|   async aboutToAppear() { |   async aboutToAppear() { | ||||||
|     this.fileUtil = new FileUtils(this.context) |     this.fileUtil = new FileUtils(this.context) | ||||||
| @ -186,6 +187,14 @@ struct TerminalInfoPage { | |||||||
|                   this.config.isOpenFiniteDifference = value; |                   this.config.isOpenFiniteDifference = value; | ||||||
|                 } |                 } | ||||||
|               }) |               }) | ||||||
|  |               blockComponent({ | ||||||
|  |                 label: "开启网络摄像头", | ||||||
|  |                 type: 7, | ||||||
|  |                 value: this.config.isUseNetworkCamera, | ||||||
|  |                 change: (value: string) => { | ||||||
|  |                   this.config.isUseNetworkCamera = value; | ||||||
|  |                 } | ||||||
|  |               }) | ||||||
|               blockComponent({ |               blockComponent({ | ||||||
|                 label: "是否开启日志", |                 label: "是否开启日志", | ||||||
|                 type: 2, |                 type: 2, | ||||||
| @ -203,15 +212,20 @@ struct TerminalInfoPage { | |||||||
|                 } |                 } | ||||||
|               }) |               }) | ||||||
|               blockComponent({ |               blockComponent({ | ||||||
|                 label: "开启调试(重启APP)", |                 label: "开启调试", | ||||||
|                 type: 6, |                 type: 6, | ||||||
|                 value: this.config.isOpenDebugger, |                 value: this.config.isOpenDebugger, | ||||||
|                 change: (value: string) => { |                 change: async (value: string) => { | ||||||
|                   this.config.isOpenDebugger = value; |                   this.config.isOpenDebugger = value; | ||||||
|  |                   const win = await window.getLastWindow(this.context); | ||||||
|  |                   if (value === "1") { | ||||||
|  |                     win.setWindowSystemBarEnable(['status', 'navigation']) | ||||||
|  |                   } else { | ||||||
|  |                     win.setWindowSystemBarEnable([]) | ||||||
|  |                   } | ||||||
|                 } |                 } | ||||||
|               }) |               }) | ||||||
|             }.margin(20) |             }.margin(20) | ||||||
| 
 |  | ||||||
|           } |           } | ||||||
|           .height(650) |           .height(650) | ||||||
|           .width("100%") |           .width("100%") | ||||||
| @ -222,7 +236,6 @@ struct TerminalInfoPage { | |||||||
|             top: 10 |             top: 10 | ||||||
|           }) |           }) | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|           Row() { |           Row() { | ||||||
|             Image($r('app.media.bc')).height(80).objectFit(ImageFit.Contain).onClick(() => { |             Image($r('app.media.bc')).height(80).objectFit(ImageFit.Contain).onClick(() => { | ||||||
|               if (this.isProcessing) { |               if (this.isProcessing) { | ||||||
| @ -396,7 +409,7 @@ struct blockComponent { | |||||||
|             }) |             }) | ||||||
|         } else { |         } else { | ||||||
|           ForEach(this.type === 1 ? this.rearMachineModelList : |           ForEach(this.type === 1 ? this.rearMachineModelList : | ||||||
|             this.type === 2 || this.type === 5 || this.type === 6 ? this.logList : |             this.type === 2 || this.type === 5 || this.type === 6 || this.type === 7 ? this.logList : | ||||||
|               this.type === 3 ? this.boardList : this.carTypeList, (item: CommonListType, index) => { |               this.type === 3 ? this.boardList : this.carTypeList, (item: CommonListType, index) => { | ||||||
|             Radio({ value: item.label, group: 'terRadioGroup' + this.type }) |             Radio({ value: item.label, group: 'terRadioGroup' + this.type }) | ||||||
|               .borderColor('#E5CBA1') |               .borderColor('#E5CBA1') | ||||||
|  | |||||||
| @ -2,19 +2,19 @@ | |||||||
| export default struct BlockComponent { | export default struct BlockComponent { | ||||||
|   @State label: string = "发送次数" |   @State label: string = "发送次数" | ||||||
|   @Prop value: string = "1" |   @Prop value: string = "1" | ||||||
|   @State widthNum: number = 130 |   @State widthNum: number = 150 | ||||||
|   @State heightNum: number = 70 |   @State heightNum: number = 70 | ||||||
|   @State color: string = "#FDF5E7" |   @State color: string = "#FDF5E7" | ||||||
| 
 | 
 | ||||||
|   build() { |   build() { | ||||||
|     Row() { |     Row() { | ||||||
|       Row() { |       Row() { | ||||||
|         Text(this.label + ":").fontColor(this.color).fontSize(14) |         Text(this.label + ":").fontColor(this.color).fontSize(20) | ||||||
|       }.width(this.widthNum).justifyContent(FlexAlign.End) |       }.width(this.widthNum).justifyContent(FlexAlign.End) | ||||||
| 
 | 
 | ||||||
|       Row() { |       Row() { | ||||||
|         Text(this.value).fontColor(this.color) |         Text(this.value).fontColor(this.color).fontSize(24) | ||||||
|       }.width(80).justifyContent(FlexAlign.Start).margin({ |       }.width(150).justifyContent(FlexAlign.Start).margin({ | ||||||
|         left: 20 |         left: 20 | ||||||
|       }) |       }) | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -10,11 +10,13 @@ export default struct CoordinateComponent { | |||||||
|   build() { |   build() { | ||||||
|     Flex({ |     Flex({ | ||||||
|       direction: FlexDirection.Column, |       direction: FlexDirection.Column, | ||||||
|       alignItems: ItemAlign.Center |       alignItems: ItemAlign.Center, | ||||||
|  |       justifyContent: FlexAlign.Center | ||||||
|     }) { |     }) { | ||||||
|       Text("GPS坐标").fontColor("#FFB433").fontSize(20).margin({ |       Row() { | ||||||
|         top: 10 |         Text("GPS坐标").fontColor("#FFB433").fontSize(20) | ||||||
|       }) |       }.height(70) | ||||||
|  | 
 | ||||||
|       Flex({ |       Flex({ | ||||||
|         wrap: FlexWrap.Wrap, |         wrap: FlexWrap.Wrap, | ||||||
|         direction: this.isItHorizontal ? FlexDirection.Row : FlexDirection.Column |         direction: this.isItHorizontal ? FlexDirection.Row : FlexDirection.Column | ||||||
| @ -30,7 +32,10 @@ export default struct CoordinateComponent { | |||||||
|       }.width("100%") |       }.width("100%") | ||||||
|     } |     } | ||||||
|     .width("100%") |     .width("100%") | ||||||
|     .height(this.isItHorizontal ? 210 : "100%") |     .height(this.isItHorizontal ? 280 : "100%") | ||||||
|     .backgroundColor("#1A1A1A") |     .backgroundColor("#1A1A1A") | ||||||
|  |     .margin({ | ||||||
|  |       bottom: 20 | ||||||
|  |     }) | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @ -20,6 +20,7 @@ export default struct SignalDisplayComponent { | |||||||
|   @Prop active: number = 0 |   @Prop active: number = 0 | ||||||
|   // 原始数据 |   // 原始数据 | ||||||
|   @State rawData: string = "$GPS,,,,,,,,,,,,,,,,,,,,,,,,,,,,," |   @State rawData: string = "$GPS,,,,,,,,,,,,,,,,,,,,,,,,,,,,," | ||||||
|  |   @State heightNum: number = 1200 | ||||||
| 
 | 
 | ||||||
|   aboutToAppear(): void { |   aboutToAppear(): void { | ||||||
|     DifferentialAndSignal.onMsg(this.getMsg) |     DifferentialAndSignal.onMsg(this.getMsg) | ||||||
| @ -47,7 +48,6 @@ export default struct SignalDisplayComponent { | |||||||
|     for (let i = 0; i <= 12; i++) { |     for (let i = 0; i <= 12; i++) { | ||||||
|       this.vehicleSignal[i].value = this.signArr[i+2] |       this.vehicleSignal[i].value = this.signArr[i+2] | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
|     this.vehicleSignal[13].value = this.signArr[17] |     this.vehicleSignal[13].value = this.signArr[17] | ||||||
|     this.vehicleSignal[14].value = this.signArr[18] |     this.vehicleSignal[14].value = this.signArr[18] | ||||||
|     this.vehicleSignal[15].value = this.signArr[19] |     this.vehicleSignal[15].value = this.signArr[19] | ||||||
| @ -85,11 +85,12 @@ export default struct SignalDisplayComponent { | |||||||
|       this.signArr[93] = str2 + str1 + str0 |       this.signArr[93] = str2 + str1 + str0 | ||||||
|     } |     } | ||||||
|     this.GPSColum[10].value = this.signArr[93] |     this.GPSColum[10].value = this.signArr[93] | ||||||
| 
 |  | ||||||
|     // this.signArr[53]=192.168.7.170' |  | ||||||
|     this.vehicleSignal = JSON.parse(JSON.stringify((this.vehicleSignal))) |     this.vehicleSignal = JSON.parse(JSON.stringify((this.vehicleSignal))) | ||||||
|     this.signArr = JSON.parse(JSON.stringify((this.signArr))) |     this.signArr = JSON.parse(JSON.stringify((this.signArr))) | ||||||
|     this.GPSColum = JSON.parse(JSON.stringify((this.GPSColum))) |     this.GPSColum = JSON.parse(JSON.stringify((this.GPSColum))) | ||||||
|  |     // this.vehicleSignal = this.vehicleSignal.slice() | ||||||
|  |     // this.signArr = this.signArr.slice() | ||||||
|  |     // this.GPSColum = this.GPSColum.slice() | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   build() { |   build() { | ||||||
| @ -97,26 +98,28 @@ export default struct SignalDisplayComponent { | |||||||
|       Flex({ |       Flex({ | ||||||
|         direction: FlexDirection.Column, |         direction: FlexDirection.Column, | ||||||
|       }) { |       }) { | ||||||
|  |         Scroll() { | ||||||
|           // 信号查看 |           // 信号查看 | ||||||
|           if (this.active === 0) { |           if (this.active === 0) { | ||||||
|           // GPS信号展示 |             Column() { | ||||||
|           GPSComponent({ |  | ||||||
|             data: this.signArr |  | ||||||
|           }) |  | ||||||
|               //   车载信号以及车载坐标 |               //   车载信号以及车载坐标 | ||||||
|               CarComponent({ |               CarComponent({ | ||||||
|             data: this.vehicleSignal |                 data: this.vehicleSignal, | ||||||
|  |                 GPSData: this.signArr | ||||||
|               }) |               }) | ||||||
|               CoordinateComponent({ |               CoordinateComponent({ | ||||||
|                 data: this.GPSColum |                 data: this.GPSColum | ||||||
|               }) |               }) | ||||||
| 
 |             }.height(this.heightNum).padding({ | ||||||
|  |               bottom: 20 | ||||||
|  |             }) | ||||||
|           } else if (this.active === 1) { |           } else if (this.active === 1) { | ||||||
|             // 原始数据 |             // 原始数据 | ||||||
|             Column() { |             Column() { | ||||||
|               Text(this.rawData).fontSize(20).fontColor("#fff") |               Text(this.rawData).fontSize(20).fontColor("#fff") | ||||||
|             }.backgroundColor("#282828").width("100%").height("100%") |             }.backgroundColor("#282828").width("100%").height("100%") | ||||||
|           } |           } | ||||||
|  |         }.height("100%").backgroundColor("#1A1A1A") | ||||||
|       } |       } | ||||||
|       .width("100%") |       .width("100%") | ||||||
|       .height("100%") |       .height("100%") | ||||||
| @ -129,8 +132,9 @@ export default struct SignalDisplayComponent { | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @Component | @Component | ||||||
| struct GPSComponent { | struct CarComponent { | ||||||
|   @Prop data: Array<string> |   @Prop data: Array<SignalDataType> | ||||||
|  |   @Prop GPSData: Array<string> | ||||||
|   @State ip: string = "" |   @State ip: string = "" | ||||||
| 
 | 
 | ||||||
|   aboutToAppear(): void { |   aboutToAppear(): void { | ||||||
| @ -147,35 +151,36 @@ struct GPSComponent { | |||||||
| 
 | 
 | ||||||
|   build() { |   build() { | ||||||
|     Flex({ |     Flex({ | ||||||
|       wrap: FlexWrap.Wrap |       wrap: FlexWrap.Wrap, | ||||||
|  |       justifyContent: FlexAlign.Center | ||||||
|     }) { |     }) { | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "发送次数", |         label: "发送次数", | ||||||
|         value: this.data[49] || "-" |         value: this.GPSData[49] || "-" | ||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "固件版本", |         label: "固件版本", | ||||||
|         value: this.data[54] || "-" |         value: this.GPSData[54] || "-" | ||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "方向盘类型", |         label: "方向盘类型", | ||||||
|         value: this.data[50] || "-" |         value: this.GPSData[50] || "-" | ||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "按键数值", |         label: "按键数值", | ||||||
|         value: this.data[55] || "-" |         value: this.GPSData[55] || "-" | ||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "GPS错误次数", |         label: "GPS错误次数", | ||||||
|         value: this.data[60] || "-" |         value: this.GPSData[60] || "-" | ||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "汽车类型", |         label: "汽车类型", | ||||||
|         value: this.data[51] || "-" |         value: this.GPSData[51] || "-" | ||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "GPS板卡类型", |         label: "GPS板卡类型", | ||||||
|         value: this.data[56] || "-" |         value: this.GPSData[56] || "-" | ||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "本机IP", |         label: "本机IP", | ||||||
| @ -183,47 +188,35 @@ struct GPSComponent { | |||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "接口心跳", |         label: "接口心跳", | ||||||
|         value: this.data[52] || "-" |         value: this.GPSData[52] || "-" | ||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "GPS板卡软件版本", |         label: "GPS板卡软件版本", | ||||||
|         value: this.data[57] || "-" |         value: this.GPSData[57] || "-" | ||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "改正数次数/改正数大小", |         label: "改正数次数/改正数大小", | ||||||
|         value: this.data[58] || "-" |         value: this.GPSData[58] || "-" | ||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "已工作时长/设定工作时长", |         label: "已工作时长/设定工作时长", | ||||||
|         value: this.data[61] || "-" |         value: this.GPSData[61] || "-" | ||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "GPS数据次数/数据长度", |         label: "GPS数据次数/数据长度", | ||||||
|         value: this.data[59] || "-" |         value: this.GPSData[59] || "-" | ||||||
|       }) |       }) | ||||||
|       BlockComponent({ |       BlockComponent({ | ||||||
|         label: "改正数据长度*数据长度-基准站RTCM改正数类型", |         label: "改正数据长度*数据长度-基准站RTCM改正数类型", | ||||||
|         value: this.data[62] || "-" |         value: this.GPSData[62] || "-" | ||||||
|       }) |       }) | ||||||
|     }.backgroundColor("#282828").width("100%").height(140) |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| @Component |  | ||||||
| struct CarComponent { |  | ||||||
|   @Prop data: Array<SignalDataType> |  | ||||||
| 
 |  | ||||||
|   build() { |  | ||||||
|     Flex({ |  | ||||||
|       wrap: FlexWrap.Wrap |  | ||||||
|     }) { |  | ||||||
|       ForEach(this.data, (item: SignalDataType) => { |       ForEach(this.data, (item: SignalDataType) => { | ||||||
|         BlockComponent({ |         BlockComponent({ | ||||||
|           label: item.key, |           label: item.key, | ||||||
|           value: item.value |           value: item.value | ||||||
|         }) |         }) | ||||||
|       }) |       }) | ||||||
|     }.width("100%").backgroundColor("#282828").height(490) |     }.width("100%").backgroundColor("#282828") | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -168,48 +168,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服务序列号 | ||||||
| @ -254,60 +212,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 () => { | ||||||
| @ -358,40 +262,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]; |  | ||||||
|       if (msgStr == '') { |  | ||||||
|         dConsole.info(JudgeTag, '模拟数据考试结束') |  | ||||||
|         clearInterval(judgeTimer) |  | ||||||
|         this.checkExamIsEnd(true) |  | ||||||
|       return |       return | ||||||
|     } |     } | ||||||
|       const msg: PLCType = JSON.parse(strArr[num]); |     const gpsPart = msg.split("#END$GPS,")[1]; | ||||||
|       num++ |     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.过程数据 |     // 4.过程数据 | ||||||
|       this.tempData = msg |     // await this.fileLog?.setExamJudgeData(JSON.stringify(plcData)) | ||||||
|       // this.judgeUI.isDwztRight = (msg?.gps?.dwzt == 4 && msg?.gps?.jdzt == 3); |     dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(plcData)) | ||||||
|       this.judgeUI.sd = Math.floor(msg?.gps?.sd * 1.852) + ''; |     //检测到有无锡所设备接入,需要发送特定的数据,供检测 | ||||||
|       this.judgeUI.dw = Math.floor(msg?.sensor?.dw) + '' |     // if (this.usbService.isWXUSBDevice) { | ||||||
|       this.plcData = msg |     //   const str = await senorToWXDataStr(msg); | ||||||
|       // this.judgeUI.isDwztRight = msg.gps.dwzt == 4; |     //   this.usbService.sendUSB(str) | ||||||
|       AppStorage.setOrCreate('msgStr', '') |     // } | ||||||
|       if (msg.method === 'examJudgeArtificialItem') { |     const param350: number = Reflect.get(this.judgeUI.judgeConfigObj, '350') | ||||||
|         this.setJudgeItem(msg.itemno, msg.type) |     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) | ||||||
|     } |     } | ||||||
|       if (msg.method === 'examJudgeArtificialMark') { |     // let udpIndex = AppStorage.get<number>('udpIndex') || 0; | ||||||
|         this.setJudgeItem(msg.itemno, msg.serial) |     // if (udpIndex % 5 === 0 && !this.isUdpEnd) { | ||||||
|       } |     // TODO UPD缺失 | ||||||
|       await examJudgeRealExam(msg) |     // const judgeUdp = globalThis.judgeUdp | ||||||
|       // const bytes = await this.getMessageHeartbeat(); |     // const bytes = await this.getMessageHeartbeat(this.isExamEnd); | ||||||
|       // bytes && globalThis.judgeUdp.send(bytes) |     // judgeUdp.send(bytes) | ||||||
| 
 |     // } | ||||||
|     }, 200) |     // AppStorage.setOrCreate('udpIndex', udpIndex++) | ||||||
|     // TODO 定时器缺失 |  | ||||||
|     // globalThis.judgeTimer = judgeTimer; |  | ||||||
|   } |   } | ||||||
|   private isEndTip: boolean = false; |   private isEndTip: boolean = false; | ||||||
|   //本地轨迹回放地址 |   //本地轨迹回放地址 | ||||||
| @ -411,6 +322,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'); | ||||||
| @ -514,32 +451,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; | ||||||
| @ -653,6 +564,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; | ||||||
| @ -894,6 +894,7 @@ export default class Judge { | |||||||
|     //项目结束 |     //项目结束 | ||||||
|       case 2: { |       case 2: { | ||||||
|         const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm) |         const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm) | ||||||
|  |         dConsole.log(JudgeTag, "项目结束判定", xmdm, project) | ||||||
|         const xmmcCode = project.projectCodeCenter || ""; |         const xmmcCode = project.projectCodeCenter || ""; | ||||||
|         project.type = (xmjs.xmhg === 0 ? '4' : '3') |         project.type = (xmjs.xmhg === 0 ? '4' : '3') | ||||||
| 
 | 
 | ||||||
| @ -1628,6 +1629,7 @@ export default class Judge { | |||||||
|   } |   } | ||||||
|   // 统计必考项目、所有项目、已考数量 |   // 统计必考项目、所有项目、已考数量 | ||||||
|   setCountItems = async () => { |   setCountItems = async () => { | ||||||
|  |     dConsole.log(JudgeTag, "项目结束判定,统计考试项目") | ||||||
|     const projectsObj: object = this.judgeUI.projectsObj; |     const projectsObj: object = this.judgeUI.projectsObj; | ||||||
|     //必考项目数量       必考项目已考数量 |     //必考项目数量       必考项目已考数量 | ||||||
|     let projectNum = 0, endProjectsNum = 0; |     let projectNum = 0, endProjectsNum = 0; | ||||||
| @ -1723,7 +1725,7 @@ export default class Judge { | |||||||
|     dConsole.info(JudgeTag, '2.注册日志回调完成') |     dConsole.info(JudgeTag, '2.注册日志回调完成') | ||||||
| 
 | 
 | ||||||
|     let initInfo: JudgeInitObj = isTrajectoryOpen ? JSON.parse(strArr[0]) : await this.getJudgeInitData(); |     let initInfo: JudgeInitObj = isTrajectoryOpen ? JSON.parse(strArr[0]) : await this.getJudgeInitData(); | ||||||
|     // await fileLog?.setExamJudgeData(JSON.stringify(initInfo)) |     dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(initInfo)) | ||||||
|     //相关评判初始化只做一次 |     //相关评判初始化只做一次 | ||||||
|     if (!isJudgeInitBool) { |     if (!isJudgeInitBool) { | ||||||
|       dConsole.log(JudgeTag, "评判初始化参数", initInfo) |       dConsole.log(JudgeTag, "评判初始化参数", initInfo) | ||||||
| @ -1767,6 +1769,7 @@ export default class Judge { | |||||||
|     } else { |     } else { | ||||||
|       beginExamInfo = await getJudgeBeginData() |       beginExamInfo = await getJudgeBeginData() | ||||||
|     } |     } | ||||||
|  |     dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(beginExamInfo)) | ||||||
|     if (beginExamInfo) { |     if (beginExamInfo) { | ||||||
|       await examJudgeBeginExam(beginExamInfo); |       await examJudgeBeginExam(beginExamInfo); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -72,6 +72,10 @@ class serialPortService { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   offMsg() { | ||||||
|  |     this.events = []; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   async closed() { |   async closed() { | ||||||
|     const res = await CancelReceiveSerialPortData(this.fd); |     const res = await CancelReceiveSerialPortData(this.fd); | ||||||
|     this.events = []; |     this.events = []; | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| // 处理worker线程的消息tcp拿差分改正数,udp给后置机 | // 处理worker线程的消息tcp拿差分改正数,udp给后置机 | ||||||
| import worker, { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope } from '@ohos.worker'; | import worker, { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope } from '@ohos.worker'; | ||||||
| import { WorkerTag } from '../config'; | import { SerialPortTag, WorkerTag } from '../config'; | ||||||
| import { | import { | ||||||
|   CenterCallBackMsgType, |   CenterCallBackMsgType, | ||||||
|   EnvironmentConfigurationType, |   EnvironmentConfigurationType, | ||||||
| @ -68,7 +68,7 @@ function getDataFn(config: EnvironmentConfigurationType) { | |||||||
|     if (data !== "" && config.carType !== "2") { |     if (data !== "" && config.carType !== "2") { | ||||||
|       // TODO |       // TODO | ||||||
|       // 需要观察 |       // 需要观察 | ||||||
|       // console.log(WorkerTag, "后置机消息", data) |       console.log(WorkerTag, "后置机消息", data) | ||||||
|       const res = await SerialPortService.getData() |       const res = await SerialPortService.getData() | ||||||
|       if (res.length > 0) { |       if (res.length > 0) { | ||||||
|         const dataArray = data.split(","); |         const dataArray = data.split(","); | ||||||
| @ -76,7 +76,7 @@ function getDataFn(config: EnvironmentConfigurationType) { | |||||||
|         dataArray[28] = res[9].toString(); |         dataArray[28] = res[9].toString(); | ||||||
|         data = dataArray.join(","); |         data = dataArray.join(","); | ||||||
|       } |       } | ||||||
|       // console.log(SerialPortTag, "处理完的档位信号", data) |       console.log(SerialPortTag, "处理完的档位信号", data) | ||||||
|       workerPort.postMessage( |       workerPort.postMessage( | ||||||
|         JSON.stringify({ |         JSON.stringify({ | ||||||
|           type: WorkerBackMessageType.ObtainUdpData, |           type: WorkerBackMessageType.ObtainUdpData, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user