Compare commits
	
		
			No commits in common. "beb6ba1b607b59be3f2f5b6a5dd81970b459eae9" and "ee4d54e8d7c3dbf673f83baf22f850357d4f6461" have entirely different histories.
		
	
	
		
			beb6ba1b60
			...
			ee4d54e8d7
		
	
		
@ -146,4 +146,3 @@ export async function initCarParameter(params: object) {
 | 
				
			|||||||
    xml: false,
 | 
					    xml: false,
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -1,94 +0,0 @@
 | 
				
			|||||||
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/2025_08_22/2025_08_22_17_09_49_9999245520855_654211778346526080_杜兰曼/judge_exam_data.txt',
 | 
					  trajectoryPath: 'logs/2024_10_12/2024_10_12_11_50_10_9999427676823_744299437502336256_隋统/judge_exam_data.txt',
 | 
				
			||||||
  //四合一画面配置
 | 
					  //四合一画面配置
 | 
				
			||||||
  fourInOneScreen: {
 | 
					  fourInOneScreen: {
 | 
				
			||||||
    //gps位数
 | 
					    //gps位数
 | 
				
			||||||
 | 
				
			|||||||
@ -169,8 +169,6 @@ export interface EnvironmentConfigurationType {
 | 
				
			|||||||
  version?: string
 | 
					  version?: string
 | 
				
			||||||
  //   评判版本
 | 
					  //   评判版本
 | 
				
			||||||
  judgeVersion?: string
 | 
					  judgeVersion?: string
 | 
				
			||||||
  //   是否使用网络摄像头
 | 
					 | 
				
			||||||
  isUseNetworkCamera?: string
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//全局配置
 | 
					//全局配置
 | 
				
			||||||
 | 
				
			|||||||
@ -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 { ObtainNetworkCameraImages } from '../api/networkCamera';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Entry
 | 
					@Entry
 | 
				
			||||||
@Component
 | 
					@Component
 | 
				
			||||||
@ -41,7 +40,6 @@ 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(),
 | 
				
			||||||
@ -64,7 +62,6 @@ 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,12 +37,11 @@ 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({
 | 
				
			||||||
@ -51,7 +50,7 @@ export default struct SignalTrajectoryDialog {
 | 
				
			|||||||
          }
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }.height(890)
 | 
					        }.height(890)
 | 
				
			||||||
      // }.width("100%")
 | 
					      }.width("100%")
 | 
				
			||||||
      .height(700)
 | 
					      .height(700)
 | 
				
			||||||
    }.width(1500)
 | 
					    }.width(1500)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -6,9 +6,11 @@ import {
 | 
				
			|||||||
  DefaultJudgeConfigObj,
 | 
					  DefaultJudgeConfigObj,
 | 
				
			||||||
  ExtendType,
 | 
					  ExtendType,
 | 
				
			||||||
  Gps,
 | 
					  Gps,
 | 
				
			||||||
 | 
					  JudgeSound,
 | 
				
			||||||
  LANE,
 | 
					  LANE,
 | 
				
			||||||
  MarkRule,
 | 
					  MarkRule,
 | 
				
			||||||
  PLCType,
 | 
					  PLCType,
 | 
				
			||||||
 | 
					  ProcessDataEnumType,
 | 
				
			||||||
  ProjectInfo,
 | 
					  ProjectInfo,
 | 
				
			||||||
  ProjectInfos,
 | 
					  ProjectInfos,
 | 
				
			||||||
  ProjectRoads,
 | 
					  ProjectRoads,
 | 
				
			||||||
@ -19,6 +21,7 @@ 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';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 中心信号转换
 | 
					// 中心信号转换
 | 
				
			||||||
@ -860,23 +863,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,15 +7,14 @@ 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)
 | 
				
			||||||
@ -187,14 +186,6 @@ 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,
 | 
				
			||||||
@ -212,20 +203,15 @@ struct TerminalInfoPage {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
              })
 | 
					              })
 | 
				
			||||||
              blockComponent({
 | 
					              blockComponent({
 | 
				
			||||||
                label: "开启调试",
 | 
					                label: "开启调试(重启APP)",
 | 
				
			||||||
                type: 6,
 | 
					                type: 6,
 | 
				
			||||||
                value: this.config.isOpenDebugger,
 | 
					                value: this.config.isOpenDebugger,
 | 
				
			||||||
                change: async (value: string) => {
 | 
					                change: (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%")
 | 
				
			||||||
@ -236,6 +222,7 @@ 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) {
 | 
				
			||||||
@ -409,7 +396,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.type === 7 ? this.logList :
 | 
					            this.type === 2 || this.type === 5 || this.type === 6 ? 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 = 150
 | 
					  @State widthNum: number = 130
 | 
				
			||||||
  @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(20)
 | 
					        Text(this.label + ":").fontColor(this.color).fontSize(14)
 | 
				
			||||||
      }.width(this.widthNum).justifyContent(FlexAlign.End)
 | 
					      }.width(this.widthNum).justifyContent(FlexAlign.End)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      Row() {
 | 
					      Row() {
 | 
				
			||||||
        Text(this.value).fontColor(this.color).fontSize(24)
 | 
					        Text(this.value).fontColor(this.color)
 | 
				
			||||||
      }.width(150).justifyContent(FlexAlign.Start).margin({
 | 
					      }.width(80).justifyContent(FlexAlign.Start).margin({
 | 
				
			||||||
        left: 20
 | 
					        left: 20
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -10,13 +10,11 @@ export default struct CoordinateComponent {
 | 
				
			|||||||
  build() {
 | 
					  build() {
 | 
				
			||||||
    Flex({
 | 
					    Flex({
 | 
				
			||||||
      direction: FlexDirection.Column,
 | 
					      direction: FlexDirection.Column,
 | 
				
			||||||
      alignItems: ItemAlign.Center,
 | 
					      alignItems: ItemAlign.Center
 | 
				
			||||||
      justifyContent: FlexAlign.Center
 | 
					 | 
				
			||||||
    }) {
 | 
					    }) {
 | 
				
			||||||
      Row() {
 | 
					      Text("GPS坐标").fontColor("#FFB433").fontSize(20).margin({
 | 
				
			||||||
        Text("GPS坐标").fontColor("#FFB433").fontSize(20)
 | 
					        top: 10
 | 
				
			||||||
      }.height(70)
 | 
					      })
 | 
				
			||||||
 | 
					 | 
				
			||||||
      Flex({
 | 
					      Flex({
 | 
				
			||||||
        wrap: FlexWrap.Wrap,
 | 
					        wrap: FlexWrap.Wrap,
 | 
				
			||||||
        direction: this.isItHorizontal ? FlexDirection.Row : FlexDirection.Column
 | 
					        direction: this.isItHorizontal ? FlexDirection.Row : FlexDirection.Column
 | 
				
			||||||
@ -32,10 +30,7 @@ export default struct CoordinateComponent {
 | 
				
			|||||||
      }.width("100%")
 | 
					      }.width("100%")
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    .width("100%")
 | 
					    .width("100%")
 | 
				
			||||||
    .height(this.isItHorizontal ? 280 : "100%")
 | 
					    .height(this.isItHorizontal ? 210 : "100%")
 | 
				
			||||||
    .backgroundColor("#1A1A1A")
 | 
					    .backgroundColor("#1A1A1A")
 | 
				
			||||||
    .margin({
 | 
					 | 
				
			||||||
      bottom: 20
 | 
					 | 
				
			||||||
    })
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -20,7 +20,6 @@ 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)
 | 
				
			||||||
@ -48,6 +47,7 @@ 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,12 +85,11 @@ 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() {
 | 
				
			||||||
@ -98,28 +97,26 @@ export default struct SignalDisplayComponent {
 | 
				
			|||||||
      Flex({
 | 
					      Flex({
 | 
				
			||||||
        direction: FlexDirection.Column,
 | 
					        direction: FlexDirection.Column,
 | 
				
			||||||
      }) {
 | 
					      }) {
 | 
				
			||||||
        Scroll() {
 | 
					 | 
				
			||||||
        // 信号查看
 | 
					        // 信号查看
 | 
				
			||||||
        if (this.active === 0) {
 | 
					        if (this.active === 0) {
 | 
				
			||||||
            Column() {
 | 
					          // GPS信号展示
 | 
				
			||||||
 | 
					          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%")
 | 
				
			||||||
@ -132,9 +129,8 @@ export default struct SignalDisplayComponent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Component
 | 
					@Component
 | 
				
			||||||
struct CarComponent {
 | 
					struct GPSComponent {
 | 
				
			||||||
  @Prop data: Array<SignalDataType>
 | 
					  @Prop data: Array<string>
 | 
				
			||||||
  @Prop GPSData: Array<string>
 | 
					 | 
				
			||||||
  @State ip: string = ""
 | 
					  @State ip: string = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  aboutToAppear(): void {
 | 
					  aboutToAppear(): void {
 | 
				
			||||||
@ -151,36 +147,35 @@ struct CarComponent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  build() {
 | 
					  build() {
 | 
				
			||||||
    Flex({
 | 
					    Flex({
 | 
				
			||||||
      wrap: FlexWrap.Wrap,
 | 
					      wrap: FlexWrap.Wrap
 | 
				
			||||||
      justifyContent: FlexAlign.Center
 | 
					 | 
				
			||||||
    }) {
 | 
					    }) {
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "发送次数",
 | 
					        label: "发送次数",
 | 
				
			||||||
        value: this.GPSData[49] || "-"
 | 
					        value: this.data[49] || "-"
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "固件版本",
 | 
					        label: "固件版本",
 | 
				
			||||||
        value: this.GPSData[54] || "-"
 | 
					        value: this.data[54] || "-"
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "方向盘类型",
 | 
					        label: "方向盘类型",
 | 
				
			||||||
        value: this.GPSData[50] || "-"
 | 
					        value: this.data[50] || "-"
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "按键数值",
 | 
					        label: "按键数值",
 | 
				
			||||||
        value: this.GPSData[55] || "-"
 | 
					        value: this.data[55] || "-"
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "GPS错误次数",
 | 
					        label: "GPS错误次数",
 | 
				
			||||||
        value: this.GPSData[60] || "-"
 | 
					        value: this.data[60] || "-"
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "汽车类型",
 | 
					        label: "汽车类型",
 | 
				
			||||||
        value: this.GPSData[51] || "-"
 | 
					        value: this.data[51] || "-"
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "GPS板卡类型",
 | 
					        label: "GPS板卡类型",
 | 
				
			||||||
        value: this.GPSData[56] || "-"
 | 
					        value: this.data[56] || "-"
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "本机IP",
 | 
					        label: "本机IP",
 | 
				
			||||||
@ -188,35 +183,47 @@ struct CarComponent {
 | 
				
			|||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "接口心跳",
 | 
					        label: "接口心跳",
 | 
				
			||||||
        value: this.GPSData[52] || "-"
 | 
					        value: this.data[52] || "-"
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "GPS板卡软件版本",
 | 
					        label: "GPS板卡软件版本",
 | 
				
			||||||
        value: this.GPSData[57] || "-"
 | 
					        value: this.data[57] || "-"
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "改正数次数/改正数大小",
 | 
					        label: "改正数次数/改正数大小",
 | 
				
			||||||
        value: this.GPSData[58] || "-"
 | 
					        value: this.data[58] || "-"
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "已工作时长/设定工作时长",
 | 
					        label: "已工作时长/设定工作时长",
 | 
				
			||||||
        value: this.GPSData[61] || "-"
 | 
					        value: this.data[61] || "-"
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "GPS数据次数/数据长度",
 | 
					        label: "GPS数据次数/数据长度",
 | 
				
			||||||
        value: this.GPSData[59] || "-"
 | 
					        value: this.data[59] || "-"
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      BlockComponent({
 | 
					      BlockComponent({
 | 
				
			||||||
        label: "改正数据长度*数据长度-基准站RTCM改正数类型",
 | 
					        label: "改正数据长度*数据长度-基准站RTCM改正数类型",
 | 
				
			||||||
        value: this.GPSData[62] || "-"
 | 
					        value: this.data[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")
 | 
					    }.width("100%").backgroundColor("#282828").height(490)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -168,6 +168,48 @@ 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服务序列号
 | 
				
			||||||
@ -212,6 +254,60 @@ 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 () => {
 | 
				
			||||||
@ -262,47 +358,40 @@ export default class Judge {
 | 
				
			|||||||
    AppStorage.setOrCreate('msgStr', plc)
 | 
					    AppStorage.setOrCreate('msgStr', plc)
 | 
				
			||||||
    return tempData
 | 
					    return tempData
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  // 处理udp plc信号
 | 
					  // 处理轨迹plc信号
 | 
				
			||||||
  handleUdp = async (msg: string) => {
 | 
					  handleTrajectoryUdp = async (strArr: string[]) => {
 | 
				
			||||||
    const stachArr = msg.split(',')
 | 
					    let num = 2;
 | 
				
			||||||
    if (stachArr[0] != '#DN_GD' || this.isUdpEnd) {
 | 
					    const judgeTimer = setInterval(async () => {
 | 
				
			||||||
 | 
					      const msgStr = strArr[num];
 | 
				
			||||||
 | 
					      if (msgStr == '') {
 | 
				
			||||||
 | 
					        dConsole.info(JudgeTag, '模拟数据考试结束')
 | 
				
			||||||
 | 
					        clearInterval(judgeTimer)
 | 
				
			||||||
 | 
					        this.checkExamIsEnd(true)
 | 
				
			||||||
        return
 | 
					        return
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    const gpsPart = msg.split("#END$GPS,")[1];
 | 
					      const msg: PLCType = JSON.parse(strArr[num]);
 | 
				
			||||||
    const gpsStatus = gpsPart.split(",")[0];
 | 
					      num++
 | 
				
			||||||
    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.过程数据
 | 
				
			||||||
    // await this.fileLog?.setExamJudgeData(JSON.stringify(plcData))
 | 
					      this.tempData = msg
 | 
				
			||||||
    dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(plcData))
 | 
					      // this.judgeUI.isDwztRight = (msg?.gps?.dwzt == 4 && msg?.gps?.jdzt == 3);
 | 
				
			||||||
    //检测到有无锡所设备接入,需要发送特定的数据,供检测
 | 
					      this.judgeUI.sd = Math.floor(msg?.gps?.sd * 1.852) + '';
 | 
				
			||||||
    // if (this.usbService.isWXUSBDevice) {
 | 
					      this.judgeUI.dw = Math.floor(msg?.sensor?.dw) + ''
 | 
				
			||||||
    //   const str = await senorToWXDataStr(msg);
 | 
					      this.plcData = msg
 | 
				
			||||||
    //   this.usbService.sendUSB(str)
 | 
					      // this.judgeUI.isDwztRight = msg.gps.dwzt == 4;
 | 
				
			||||||
    // }
 | 
					      AppStorage.setOrCreate('msgStr', '')
 | 
				
			||||||
    const param350: number = Reflect.get(this.judgeUI.judgeConfigObj, '350')
 | 
					      if (msg.method === 'examJudgeArtificialItem') {
 | 
				
			||||||
    this.judgeUI.sd = ((param350 == 0 ? plcData.gps.sd : plcData.sensor.cs) as number * 1.852).toFixed(0) + ''
 | 
					        this.setJudgeItem(msg.itemno, msg.type)
 | 
				
			||||||
    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 (msg.method === 'examJudgeArtificialMark') {
 | 
				
			||||||
    // if (udpIndex % 5 === 0 && !this.isUdpEnd) {
 | 
					        this.setJudgeItem(msg.itemno, msg.serial)
 | 
				
			||||||
    // TODO UPD缺失
 | 
					      }
 | 
				
			||||||
    // const judgeUdp = globalThis.judgeUdp
 | 
					      await examJudgeRealExam(msg)
 | 
				
			||||||
    // const bytes = await this.getMessageHeartbeat(this.isExamEnd);
 | 
					      // const bytes = await this.getMessageHeartbeat();
 | 
				
			||||||
    // judgeUdp.send(bytes)
 | 
					      // bytes && globalThis.judgeUdp.send(bytes)
 | 
				
			||||||
    // }
 | 
					
 | 
				
			||||||
    // AppStorage.setOrCreate('udpIndex', udpIndex++)
 | 
					    }, 200)
 | 
				
			||||||
 | 
					    // TODO 定时器缺失
 | 
				
			||||||
 | 
					    // globalThis.judgeTimer = judgeTimer;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  private isEndTip: boolean = false;
 | 
					  private isEndTip: boolean = false;
 | 
				
			||||||
  //本地轨迹回放地址
 | 
					  //本地轨迹回放地址
 | 
				
			||||||
@ -322,32 +411,6 @@ 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');
 | 
				
			||||||
@ -451,6 +514,32 @@ 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;
 | 
				
			||||||
@ -564,95 +653,6 @@ 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,7 +894,6 @@ 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')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1629,7 +1628,6 @@ 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;
 | 
				
			||||||
@ -1725,7 +1723,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();
 | 
				
			||||||
    dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(initInfo))
 | 
					    // await fileLog?.setExamJudgeData(JSON.stringify(initInfo))
 | 
				
			||||||
    //相关评判初始化只做一次
 | 
					    //相关评判初始化只做一次
 | 
				
			||||||
    if (!isJudgeInitBool) {
 | 
					    if (!isJudgeInitBool) {
 | 
				
			||||||
      dConsole.log(JudgeTag, "评判初始化参数", initInfo)
 | 
					      dConsole.log(JudgeTag, "评判初始化参数", initInfo)
 | 
				
			||||||
@ -1769,7 +1767,6 @@ 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,10 +72,6 @@ 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 { SerialPortTag, WorkerTag } from '../config';
 | 
					import { 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