Compare commits
	
		
			No commits in common. "3999e1d32b1e51aadd73204c7b011a8c090b9044" and "46244ac980da5685f7993d1adad7f582f6e95047" have entirely different histories.
		
	
	
		
			3999e1d32b
			...
			46244ac980
		
	
		
@ -32,6 +32,3 @@ export const EntryTag = '[Entry]';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
//worker tag
 | 
					//worker tag
 | 
				
			||||||
export const WorkerTag = '[Worker]';
 | 
					export const WorkerTag = '[Worker]';
 | 
				
			||||||
 | 
					 | 
				
			||||||
//中心udp
 | 
					 | 
				
			||||||
export const CenterUdpTag = '[CenterUdpBusiness]'
 | 
					 | 
				
			||||||
@ -1,6 +1,8 @@
 | 
				
			|||||||
import common from '@ohos.app.ability.common';
 | 
					import common from '@ohos.app.ability.common';
 | 
				
			||||||
 | 
					 | 
				
			||||||
// ------------------------------
 | 
					// ------------------------------
 | 
				
			||||||
 | 
					// 基础共用类型
 | 
				
			||||||
 | 
					// ------------------------------
 | 
				
			||||||
 | 
					import { MA_SYSTEMPARMType } from './Table';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** 基础考试字段 */
 | 
					/** 基础考试字段 */
 | 
				
			||||||
interface BaseExamFields {
 | 
					interface BaseExamFields {
 | 
				
			||||||
@ -819,17 +821,4 @@ export interface WuxiExamType {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface PLCDataType {
 | 
					 | 
				
			||||||
  sensor: Sensor,
 | 
					 | 
				
			||||||
  gps: Gps,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface ProjectDataType {
 | 
					 | 
				
			||||||
  code: string
 | 
					 | 
				
			||||||
  status: number
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export interface ProjectItemType {
 | 
					 | 
				
			||||||
  code: ProjectDataType
 | 
					 | 
				
			||||||
  status: string
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -5,7 +5,6 @@ export interface WorkerMessage {
 | 
				
			|||||||
  carInfo: CarInfoType;
 | 
					  carInfo: CarInfoType;
 | 
				
			||||||
  centerUdpParam?: UDPParamType;
 | 
					  centerUdpParam?: UDPParamType;
 | 
				
			||||||
  otherMessage: OtherMessageType;
 | 
					  otherMessage: OtherMessageType;
 | 
				
			||||||
  singlePlay?: boolean
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface OtherMessageType {
 | 
					export interface OtherMessageType {
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,7 @@ import { BusinessError } from '@ohos.base';
 | 
				
			|||||||
import { delPic } from '../utils/Video';
 | 
					import { delPic } from '../utils/Video';
 | 
				
			||||||
import { FileHelper } from '../utils/FileHelp';
 | 
					import { FileHelper } from '../utils/FileHelp';
 | 
				
			||||||
import { DrivingDataStorage } from '../utils/business/DrivingDataStorage';
 | 
					import { DrivingDataStorage } from '../utils/business/DrivingDataStorage';
 | 
				
			||||||
 | 
					import { JudgeUdpBusinessInstance } from '../utils/business/JudgeUdpBusiness';
 | 
				
			||||||
import { JudgeEmitterInstance } from '../utils/business/UdpEvent';
 | 
					import { JudgeEmitterInstance } from '../utils/business/UdpEvent';
 | 
				
			||||||
import HeaderComponent from './compontents/Header';
 | 
					import HeaderComponent from './compontents/Header';
 | 
				
			||||||
import CardComponent from './Index/Card';
 | 
					import CardComponent from './Index/Card';
 | 
				
			||||||
@ -37,7 +38,6 @@ struct Index {
 | 
				
			|||||||
  @State fd: number = -1;
 | 
					  @State fd: number = -1;
 | 
				
			||||||
  @State carInfo: CarInfoType = {};
 | 
					  @State carInfo: CarInfoType = {};
 | 
				
			||||||
  @State num: number = 0;
 | 
					  @State num: number = 0;
 | 
				
			||||||
  @State isPlay: boolean = false;
 | 
					 | 
				
			||||||
  // 请求网络表等待弹窗
 | 
					  // 请求网络表等待弹窗
 | 
				
			||||||
  customDialogController: CustomDialogController = new CustomDialogController({
 | 
					  customDialogController: CustomDialogController = new CustomDialogController({
 | 
				
			||||||
    builder: LoadingComponent(),
 | 
					    builder: LoadingComponent(),
 | 
				
			||||||
@ -78,10 +78,7 @@ struct Index {
 | 
				
			|||||||
  async onPageShow(): Promise<void> {
 | 
					  async onPageShow(): Promise<void> {
 | 
				
			||||||
    console.log("首页 onPageShow")
 | 
					    console.log("首页 onPageShow")
 | 
				
			||||||
    await UseAuth(this.context)
 | 
					    await UseAuth(this.context)
 | 
				
			||||||
    if (!this.isPlay) {
 | 
					 | 
				
			||||||
    this.avPlayer.playAudio(['welcome.wav'])
 | 
					    this.avPlayer.playAudio(['welcome.wav'])
 | 
				
			||||||
      this.isPlay = true
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    this.baseInfo = AppStorage.get<BaseInfoType>('baseInfo')!
 | 
					    this.baseInfo = AppStorage.get<BaseInfoType>('baseInfo')!
 | 
				
			||||||
    this.initParams()
 | 
					    this.initParams()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -187,7 +184,7 @@ struct Index {
 | 
				
			|||||||
    this.timeInfo = AppStorage.get<TimeSynchronizationRspBody>('timeInfo')!
 | 
					    this.timeInfo = AppStorage.get<TimeSynchronizationRspBody>('timeInfo')!
 | 
				
			||||||
    DrivingDataStorage.init(this.context)
 | 
					    DrivingDataStorage.init(this.context)
 | 
				
			||||||
    DrivingDataStorage.initializeTheDrivingDataFolder()
 | 
					    DrivingDataStorage.initializeTheDrivingDataFolder()
 | 
				
			||||||
    // JudgeUdpBusinessInstance.init()
 | 
					    JudgeUdpBusinessInstance.init()
 | 
				
			||||||
    // TODO 摄像头遮挡
 | 
					    // TODO 摄像头遮挡
 | 
				
			||||||
    // takePhotoFn(this.context)
 | 
					    // takePhotoFn(this.context)
 | 
				
			||||||
    // TODO
 | 
					    // TODO
 | 
				
			||||||
 | 
				
			|||||||
@ -43,7 +43,8 @@ import {
 | 
				
			|||||||
} from '../model';
 | 
					} from '../model';
 | 
				
			||||||
import { GetSyncData } from '../utils/table/Operation';
 | 
					import { GetSyncData } from '../utils/table/Operation';
 | 
				
			||||||
import dayTs from '../utils/Date';
 | 
					import dayTs from '../utils/Date';
 | 
				
			||||||
import { CutArray, GetCurrentTime } from '../utils/Common';
 | 
					import { GetCurrentTime } from '../utils/Common';
 | 
				
			||||||
 | 
					import { chunkArr } from './judgeSDK/utils/Common';
 | 
				
			||||||
import FileUtils from '../utils/FileUtils';
 | 
					import FileUtils from '../utils/FileUtils';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -811,7 +812,7 @@ struct Index {
 | 
				
			|||||||
                if (this.examSubject == "2") {
 | 
					                if (this.examSubject == "2") {
 | 
				
			||||||
                  Flex({ wrap: FlexWrap.Wrap, direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween }) {
 | 
					                  Flex({ wrap: FlexWrap.Wrap, direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween }) {
 | 
				
			||||||
                    List({}) {
 | 
					                    List({}) {
 | 
				
			||||||
                      ForEach(CutArray(this.projects, 2), (item: [ProjectInfo, ProjectInfo]) => {
 | 
					                      ForEach(chunkArr(this.projects, 2), (item: [ProjectInfo, ProjectInfo]) => {
 | 
				
			||||||
                        ListItem() {
 | 
					                        ListItem() {
 | 
				
			||||||
                          Row() {
 | 
					                          Row() {
 | 
				
			||||||
                            Row() {
 | 
					                            Row() {
 | 
				
			||||||
 | 
				
			|||||||
@ -28,8 +28,7 @@ export default struct SignalDisplayComponent {
 | 
				
			|||||||
  aboutToAppear(): void {
 | 
					  aboutToAppear(): void {
 | 
				
			||||||
    DifferentialAndSignal.onMsg((data: string) => {
 | 
					    DifferentialAndSignal.onMsg((data: string) => {
 | 
				
			||||||
      const result: WorkerBackMessage = JSON.parse(data)
 | 
					      const result: WorkerBackMessage = JSON.parse(data)
 | 
				
			||||||
      console.log("wzj", data)
 | 
					      if (result.type === "centerUdpData") {
 | 
				
			||||||
      if (result.type === "obtainUdpData") {
 | 
					 | 
				
			||||||
        this.getSignal(result.data as string)
 | 
					        this.getSignal(result.data as string)
 | 
				
			||||||
        this.rawData = result.data as string
 | 
					        this.rawData = result.data as string
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -37,11 +36,11 @@ export default struct SignalDisplayComponent {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getSignal = (msg: string) => {
 | 
					  getSignal = (msg: string) => {
 | 
				
			||||||
    const newArr = msg.split(',')
 | 
					    const strachArr = msg.split(',')
 | 
				
			||||||
    if (newArr[0] != '#DN_GD') {
 | 
					    if (strachArr[0] != '#DN_GD') {
 | 
				
			||||||
      return
 | 
					      return
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    this.signArr = newArr
 | 
					    this.signArr = strachArr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    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]
 | 
				
			||||||
@ -156,7 +155,6 @@ export default struct SignalDisplayComponent {
 | 
				
			|||||||
                CoordinateComponent({
 | 
					                CoordinateComponent({
 | 
				
			||||||
                  isItHorizontal: false,
 | 
					                  isItHorizontal: false,
 | 
				
			||||||
                  heightNum: 40,
 | 
					                  heightNum: 40,
 | 
				
			||||||
                  data: this.GPSColum
 | 
					 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
              }.width("20%")
 | 
					              }.width("20%")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -360,7 +358,7 @@ struct TabItemComponent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@Component
 | 
					@Component
 | 
				
			||||||
struct GPSComponent {
 | 
					struct GPSComponent {
 | 
				
			||||||
  @Prop data: Array<string>
 | 
					  @State data: Array<string> = []
 | 
				
			||||||
  @State ip: string = ""
 | 
					  @State ip: string = ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  aboutToAppear(): void {
 | 
					  aboutToAppear(): void {
 | 
				
			||||||
@ -441,7 +439,7 @@ struct GPSComponent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@Component
 | 
					@Component
 | 
				
			||||||
struct CarComponent {
 | 
					struct CarComponent {
 | 
				
			||||||
  @Prop data: Array<SignalDataType>
 | 
					  @State data: Array<SignalDataType> = SignalData
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  build() {
 | 
					  build() {
 | 
				
			||||||
    Flex({
 | 
					    Flex({
 | 
				
			||||||
@ -459,7 +457,7 @@ struct CarComponent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@Component
 | 
					@Component
 | 
				
			||||||
struct CoordinateComponent {
 | 
					struct CoordinateComponent {
 | 
				
			||||||
  @Prop data: Array<SignalDataType>
 | 
					  @State data: Array<SignalDataType> = GPSData
 | 
				
			||||||
  @State isItHorizontal: boolean = true
 | 
					  @State isItHorizontal: boolean = true
 | 
				
			||||||
  @State heightNum: number = 65
 | 
					  @State heightNum: number = 65
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -492,7 +490,7 @@ struct CoordinateComponent {
 | 
				
			|||||||
@Component
 | 
					@Component
 | 
				
			||||||
struct blockComponent {
 | 
					struct blockComponent {
 | 
				
			||||||
  @State label: string = "发送次数"
 | 
					  @State label: string = "发送次数"
 | 
				
			||||||
  @Prop value: string = "1"
 | 
					  @State value: string = "1"
 | 
				
			||||||
  @State widthNum: number = 130
 | 
					  @State widthNum: number = 130
 | 
				
			||||||
  @State heightNum: number = 65
 | 
					  @State heightNum: number = 65
 | 
				
			||||||
  @State color: string = "#FDF5E7"
 | 
					  @State color: string = "#FDF5E7"
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,7 @@ import FileModel from './utils/fileModel';
 | 
				
			|||||||
import FilePhoto from './utils/filePhoto';
 | 
					import FilePhoto from './utils/filePhoto';
 | 
				
			||||||
import FileLog from './utils/fileLog';
 | 
					import FileLog from './utils/fileLog';
 | 
				
			||||||
import JudgeTask from './utils/judgeTask';
 | 
					import JudgeTask from './utils/judgeTask';
 | 
				
			||||||
import { JudgeConfig } from '../../config';
 | 
					import { JudgeConfig } from "../../config";
 | 
				
			||||||
import { LANE } from '../judgeSDK/api/judgeSDK.d';
 | 
					import { LANE } from '../judgeSDK/api/judgeSDK.d';
 | 
				
			||||||
import { GetSyncData, SqlInsertTable } from '../../utils/table/Operation';
 | 
					import { GetSyncData, SqlInsertTable } from '../../utils/table/Operation';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -33,8 +33,8 @@ import {
 | 
				
			|||||||
import { uploadExamProgressData, writeObjectOut } from '../../api/judge';
 | 
					import { uploadExamProgressData, writeObjectOut } from '../../api/judge';
 | 
				
			||||||
import { endRecordVideo, saveStartRecordVideo } from '../../utils/Video';
 | 
					import { endRecordVideo, saveStartRecordVideo } from '../../utils/Video';
 | 
				
			||||||
import common from '@ohos.app.ability.common';
 | 
					import common from '@ohos.app.ability.common';
 | 
				
			||||||
 | 
					import { convertGpsCoord2, deepClone } from './utils/Common';
 | 
				
			||||||
import { ConvertDdmmToDecimalDegrees, GetCurrentTime,DeepClone } from '../../utils/Common';
 | 
					import { GetCurrentTime } from '../../utils/Common';
 | 
				
			||||||
import UsbService from '../../utils/USB';
 | 
					import UsbService from '../../utils/USB';
 | 
				
			||||||
import FileUtils from '../../utils/FileUtils';
 | 
					import FileUtils from '../../utils/FileUtils';
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
@ -49,6 +49,7 @@ import {
 | 
				
			|||||||
  JudgeCallBackData,
 | 
					  JudgeCallBackData,
 | 
				
			||||||
  JudgeConfigObj,
 | 
					  JudgeConfigObj,
 | 
				
			||||||
  JudgeConfigObjKmItems,
 | 
					  JudgeConfigObjKmItems,
 | 
				
			||||||
 | 
					  JudgeEventKf,
 | 
				
			||||||
  JudgeInitObj,
 | 
					  JudgeInitObj,
 | 
				
			||||||
  JudgeKFXM,
 | 
					  JudgeKFXM,
 | 
				
			||||||
  JudgeKSJS,
 | 
					  JudgeKSJS,
 | 
				
			||||||
@ -263,8 +264,8 @@ export default class Judge {
 | 
				
			|||||||
  handDistance = async () => {
 | 
					  handDistance = async () => {
 | 
				
			||||||
    const dwzt = this.tempData?.gps?.dwzt || "";
 | 
					    const dwzt = this.tempData?.gps?.dwzt || "";
 | 
				
			||||||
    const jdzt = this.tempData?.gps?.jdzt || "";
 | 
					    const jdzt = this.tempData?.gps?.jdzt || "";
 | 
				
			||||||
    const tJD = ConvertDdmmToDecimalDegrees(this.tempData?.gps?.jd || 0)
 | 
					    const tJD = convertGpsCoord2(this.tempData?.gps?.jd || 0)
 | 
				
			||||||
    const tWD = ConvertDdmmToDecimalDegrees(this.tempData?.gps?.wd || 0)
 | 
					    const tWD = convertGpsCoord2(this.tempData?.gps?.wd || 0)
 | 
				
			||||||
    if (this.prevJd && dwzt == 4 && jdzt == 3) {
 | 
					    if (this.prevJd && dwzt == 4 && jdzt == 3) {
 | 
				
			||||||
      const distance = await examCalcGpsDistance({
 | 
					      const distance = await examCalcGpsDistance({
 | 
				
			||||||
        jd1: this.prevJd,
 | 
					        jd1: this.prevJd,
 | 
				
			||||||
@ -1051,7 +1052,7 @@ export default class Judge {
 | 
				
			|||||||
    //更新UI
 | 
					    //更新UI
 | 
				
			||||||
    if (event == 1 || event == 2 || event == 3 || event == 6) {
 | 
					    if (event == 1 || event == 2 || event == 3 || event == 6) {
 | 
				
			||||||
      const copyProjectsObj: object = this.judgeUI.projectsObj;
 | 
					      const copyProjectsObj: object = this.judgeUI.projectsObj;
 | 
				
			||||||
      judgeUI.projectsObj = DeepClone(copyProjectsObj);
 | 
					      judgeUI.projectsObj = deepClone(copyProjectsObj);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  // 更改考试状态
 | 
					  // 更改考试状态
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										83
									
								
								entry/src/main/ets/pages/judgeSDK/utils/Common.ets
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								entry/src/main/ets/pages/judgeSDK/utils/Common.ets
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,83 @@
 | 
				
			|||||||
 | 
					// 根据指定个数分割数组
 | 
				
			||||||
 | 
					export function chunkArr<T>(arr: T[], size: number): T[][] {
 | 
				
			||||||
 | 
					  //判断如果不是数组(就没有length),或者size没有传值,size小于1,就返回空数组
 | 
				
			||||||
 | 
					  if (!arr.length || !size || size < 1) {
 | 
				
			||||||
 | 
					    return []
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  let start = 0
 | 
				
			||||||
 | 
					  let end = 0
 | 
				
			||||||
 | 
					  let result: T[][] = []
 | 
				
			||||||
 | 
					  for (let i = 0; i < Math.ceil(arr.length / size); i++) {
 | 
				
			||||||
 | 
					    start = i * size
 | 
				
			||||||
 | 
					    end = start + size
 | 
				
			||||||
 | 
					    result.push(arr.slice(start, end))
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return result
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//对象深拷贝
 | 
				
			||||||
 | 
					export function deepClone<T extends  Object>(target: T): T {
 | 
				
			||||||
 | 
					  // 如果是对象,且不是原始值null
 | 
				
			||||||
 | 
					  if (typeof target === 'object' && target !== null) {
 | 
				
			||||||
 | 
					    // 创建容器
 | 
				
			||||||
 | 
					    const result: ESObject = Array.isArray(target) ? [] : {};
 | 
				
			||||||
 | 
					    const keys = Object.keys(target) as Array<keyof T>; //注解二
 | 
				
			||||||
 | 
					    keys.forEach(key => {
 | 
				
			||||||
 | 
					      Reflect.set(result, key, deepClone(Reflect.get(target, key)));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    return result;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  // 如果是原始值,则直接返回
 | 
				
			||||||
 | 
					  return target;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function fillZero(str: string | number, len: number): string {
 | 
				
			||||||
 | 
					  if (!str) {
 | 
				
			||||||
 | 
					    return ""
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  str = str.toString();
 | 
				
			||||||
 | 
					  if (str.length >= len || len <= 0) {
 | 
				
			||||||
 | 
					    return str;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  const zeroStr = '0'.repeat(len - str.length);
 | 
				
			||||||
 | 
					  return zeroStr + str;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//经纬度转换
 | 
				
			||||||
 | 
					export function convertGpsCoord2(num: number): number {
 | 
				
			||||||
 | 
					  const tempNum = Math.floor(num);
 | 
				
			||||||
 | 
					  const du = Math.floor(tempNum / 100);
 | 
				
			||||||
 | 
					  const fen = tempNum % 100 + num - tempNum;
 | 
				
			||||||
 | 
					  return du + fen / 60
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function Array2Byte(array: number[]): Uint8Array {
 | 
				
			||||||
 | 
					  const buf = new ArrayBuffer(array.length);
 | 
				
			||||||
 | 
					  const view = new Uint8Array(buf);
 | 
				
			||||||
 | 
					  for (let i = 0; i < array.length; i++) {
 | 
				
			||||||
 | 
					    view[i] = array[i] & 0xFF;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return view;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function string2Bytes(number: number, len: number): number[] | undefined {
 | 
				
			||||||
 | 
					  let str = Math.floor(number).toString(2);
 | 
				
			||||||
 | 
					  if (str.length > len) {
 | 
				
			||||||
 | 
					    console.log('数据长度不对~~');
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  const byteString = fillZero(str, len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const arrBytes: number[] = [];
 | 
				
			||||||
 | 
					  for (let i = byteString.length; i > 0; ) {
 | 
				
			||||||
 | 
					    let j = i - 8;
 | 
				
			||||||
 | 
					    if (j < 0) {
 | 
				
			||||||
 | 
					      j = 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    const s = byteString.slice(j, i);
 | 
				
			||||||
 | 
					    const v = parseInt(s, 2);
 | 
				
			||||||
 | 
					    arrBytes.push(v);
 | 
				
			||||||
 | 
					    i -= 8;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return arrBytes;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,10 +1,10 @@
 | 
				
			|||||||
import { testRealExam } from '../dataTest/index';
 | 
					import { testRealExam } from '../dataTest/index';
 | 
				
			||||||
import { ArrayToByteArray, NumberToByteArray } from '../../../utils/Common';
 | 
					import { NumberToByteArray } from '../../../utils/Common';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import systemTime from '@ohos.systemDateTime';
 | 
					import systemTime from '@ohos.systemDateTime';
 | 
				
			||||||
 | 
					import { Array2Byte } from './Common';
 | 
				
			||||||
import { CarInfoType } from '../../../model';
 | 
					import { CarInfoType } from '../../../model';
 | 
				
			||||||
import { DefaultJudgeConfigObj, Gps, JudgeLane, Plc, Radar, Vision } from '../../../model/Judge';
 | 
					import { DefaultJudgeConfigObj, Gps, JudgeLane, Plc, Radar, Sensor, Vision } from '../../../model/Judge';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface Extend {}
 | 
					interface Extend {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -699,21 +699,21 @@ export const getTimeStr = async () => {
 | 
				
			|||||||
//蓝灯
 | 
					//蓝灯
 | 
				
			||||||
export function sendBlue() {
 | 
					export function sendBlue() {
 | 
				
			||||||
  const arrBlue = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00];
 | 
					  const arrBlue = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00];
 | 
				
			||||||
  const arrBlueBuffer = ArrayToByteArray(arrBlue).buffer
 | 
					  const arrBlueBuffer = Array2Byte(arrBlue).buffer
 | 
				
			||||||
  // globalThis.lightLineUdp.send(arrBlueBuffer);
 | 
					  // globalThis.lightLineUdp.send(arrBlueBuffer);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//绿灯
 | 
					//绿灯
 | 
				
			||||||
export function sendGreen() {
 | 
					export function sendGreen() {
 | 
				
			||||||
  const arrGreen = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01];
 | 
					  const arrGreen = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01];
 | 
				
			||||||
  const arrGreenBuffer = ArrayToByteArray(arrGreen).buffer
 | 
					  const arrGreenBuffer = Array2Byte(arrGreen).buffer
 | 
				
			||||||
  // globalThis.lightLineUdp.send(arrGreenBuffer);
 | 
					  // globalThis.lightLineUdp.send(arrGreenBuffer);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//红灯
 | 
					//红灯
 | 
				
			||||||
export function sendRed() {
 | 
					export function sendRed() {
 | 
				
			||||||
  const arrRed = [0x55, 0xaa, 0x01, 0x01, 0x02, 0x00, 0x03, 0x00];
 | 
					  const arrRed = [0x55, 0xaa, 0x01, 0x01, 0x02, 0x00, 0x03, 0x00];
 | 
				
			||||||
  const arrRedBuffer = ArrayToByteArray(arrRed).buffer
 | 
					  const arrRedBuffer = Array2Byte(arrRed).buffer
 | 
				
			||||||
  // globalThis.lightLineUdp.send(arrRedBuffer);
 | 
					  // globalThis.lightLineUdp.send(arrRedBuffer);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -69,13 +69,13 @@ export function ArrayToByteArray(array: number[]): Uint8Array {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * 数字转字节数组
 | 
					 * 字符串转字节数组
 | 
				
			||||||
 * @param number 要转换的数字
 | 
					 * @param number 要转换的数字
 | 
				
			||||||
 * @param len 字节数
 | 
					 * @param len 字节数
 | 
				
			||||||
 * @returns 返回字节数组
 | 
					 * @returns 返回字节数组
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export function NumberToByteArray(number: number | string, len: number): number[] {
 | 
					export function NumberToByteArray(number: number, len: number): number[]  {
 | 
				
			||||||
  let str = Math.floor(Number(number)).toString(2);
 | 
					  let str = Math.floor(number).toString(2);
 | 
				
			||||||
  if (str.length > len) {
 | 
					  if (str.length > len) {
 | 
				
			||||||
    console.log('数据长度不对~~');
 | 
					    console.log('数据长度不对~~');
 | 
				
			||||||
    return [];
 | 
					    return [];
 | 
				
			||||||
@ -96,12 +96,6 @@ export function NumberToByteArray(number: number | string, len: number): number[
 | 
				
			|||||||
  return arrBytes;
 | 
					  return arrBytes;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
  * 将字符串填充为指定长度的字符串,前面补0
 | 
					 | 
				
			||||||
  * @param str 要填充的字符串或数字
 | 
					 | 
				
			||||||
  * @param len 目标长度
 | 
					 | 
				
			||||||
  * @return 返回填充后的字符串
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
export function FillZero(str: string | number, len: number): string {
 | 
					export function FillZero(str: string | number, len: number): string {
 | 
				
			||||||
  str = str.toString();
 | 
					  str = str.toString();
 | 
				
			||||||
  if (str.length >= len || len <= 0) {
 | 
					  if (str.length >= len || len <= 0) {
 | 
				
			||||||
@ -110,49 +104,3 @@ export function FillZero(str: string | number, len: number): string {
 | 
				
			|||||||
  const zeroStr = '0'.repeat(len - str.length);
 | 
					  const zeroStr = '0'.repeat(len - str.length);
 | 
				
			||||||
  return zeroStr + str;
 | 
					  return zeroStr + str;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * 将数组按指定大小分块
 | 
					 | 
				
			||||||
 * @param arr 原始数组
 | 
					 | 
				
			||||||
 * @param size 每块大小(必须 >= 1)
 | 
					 | 
				
			||||||
 * @returns 分块后的二维数组
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
export function CutArray<T>(arr: readonly T[], size: number): T[][] {
 | 
					 | 
				
			||||||
  if (!Array.isArray(arr) || size < 1) return [];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const result: T[][] = [];
 | 
					 | 
				
			||||||
  for (let i = 0; i < arr.length; i += size) {
 | 
					 | 
				
			||||||
    result.push(arr.slice(i, i + size));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return result;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * 将GPS坐标从度分格式(DDMM.MMMM)转换为十进制度格式
 | 
					 | 
				
			||||||
 * @param ddmm - 度分格式坐标(例如 11630.1234 表示116度30.1234分)
 | 
					 | 
				
			||||||
 * @returns 十进制度格式坐标(例如 116.502056666...)
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
export function ConvertDdmmToDecimalDegrees(ddmm: number): number {
 | 
					 | 
				
			||||||
  // 提取度数部分:除以100后取整
 | 
					 | 
				
			||||||
  const degrees = Math.floor(ddmm / 100);
 | 
					 | 
				
			||||||
  // 提取分数部分(包含小数):对100取模
 | 
					 | 
				
			||||||
  const minutes = ddmm % 100;
 | 
					 | 
				
			||||||
  // 将分数转换为度并相加:1度=60分
 | 
					 | 
				
			||||||
  return degrees + minutes / 60;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//对象深拷贝
 | 
					 | 
				
			||||||
export function DeepClone<T extends Object>(target: T): T {
 | 
					 | 
				
			||||||
  // 如果是对象,且不是原始值null
 | 
					 | 
				
			||||||
  if (typeof target === 'object' && target !== null) {
 | 
					 | 
				
			||||||
    // 创建容器
 | 
					 | 
				
			||||||
    const result: ESObject = Array.isArray(target) ? [] : {};
 | 
					 | 
				
			||||||
    const keys = Object.keys(target) as Array<keyof T>; //注解二
 | 
					 | 
				
			||||||
    keys.forEach(key => {
 | 
					 | 
				
			||||||
      Reflect.set(result, key, DeepClone(Reflect.get(target, key)));
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
    return result;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  // 如果是原始值,则直接返回
 | 
					 | 
				
			||||||
  return target;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -6,9 +6,10 @@ import {
 | 
				
			|||||||
  OtherMessageType,
 | 
					  OtherMessageType,
 | 
				
			||||||
  UDPParamType
 | 
					  UDPParamType
 | 
				
			||||||
} from '../../model';
 | 
					} from '../../model';
 | 
				
			||||||
import { ArrayToByteArray, FillZero, NumberToByteArray } from '../Common';
 | 
					import { fillZero, string2Bytes } from '../../pages/judgeSDK/utils/Common';
 | 
				
			||||||
 | 
					import { NumberToByteArray } from '../Common';
 | 
				
			||||||
import UdpClient from '../UdpUtils';
 | 
					import UdpClient from '../UdpUtils';
 | 
				
			||||||
import { CenterUdpTag, UDPTag } from '../../config';
 | 
					import { UDPTag } from '../../config';
 | 
				
			||||||
import { SerialNumberInstance } from '../SerialNumber';
 | 
					import { SerialNumberInstance } from '../SerialNumber';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 中心UDP业务逻辑
 | 
					// 中心UDP业务逻辑
 | 
				
			||||||
@ -40,33 +41,29 @@ class CenterUDPBusiness {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  startHeartBeat() {
 | 
					  startHeartBeat() {
 | 
				
			||||||
    console.log(CenterUdpTag, "心跳", JSON.stringify(this.carInfo))
 | 
					    console.log("心跳")
 | 
				
			||||||
    // 组装消息,一秒发送一次
 | 
					    // 组装消息,一秒发送一次
 | 
				
			||||||
    this.timer = setInterval(() => {
 | 
					    this.timer = setInterval(() => {
 | 
				
			||||||
      // 生成流水号
 | 
					      // 生成流水号
 | 
				
			||||||
      SerialNumberInstance.generate()
 | 
					      SerialNumberInstance.generate()
 | 
				
			||||||
      console.log(CenterUdpTag, "流水号生成")
 | 
					 | 
				
			||||||
      // SetSerialNumber()
 | 
					      // SetSerialNumber()
 | 
				
			||||||
      const arr = [this.signNum || 0, this.statue || 1]
 | 
					      const arr = [this.signNum || 0, this.statue || 1]
 | 
				
			||||||
      let tmpList: number[] = [];
 | 
					      let tmpList: number[] = [];
 | 
				
			||||||
      tmpList.push(NumberToByteArray(Number(arr[0]), 1 * 8)[0])
 | 
					      tmpList.push(NumberToByteArray(Number(arr[0]), 1 * 8)[0])
 | 
				
			||||||
      tmpList.push(NumberToByteArray(Number(arr[1]), 1 * 8)[0])
 | 
					      tmpList.push(NumberToByteArray(Number(arr[1]), 1 * 8)[0])
 | 
				
			||||||
 | 
					 | 
				
			||||||
      // 学员流水号
 | 
					      // 学员流水号
 | 
				
			||||||
      const str = this.lsh || '0000000000000'
 | 
					      const str = this.lsh || '0000000000000'
 | 
				
			||||||
      for (let i = 0; i < str.length; i++) {
 | 
					      for (let i = 0; i < str.length; i++) {
 | 
				
			||||||
        tmpList.push(NumberToByteArray(str.charCodeAt(i), 1 * 8)[0])
 | 
					        tmpList.push(NumberToByteArray(str.charCodeAt(i), 1 * 8)[0])
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      console.log(CenterUdpTag, "学员流水号", JSON.stringify(tmpList))
 | 
					 | 
				
			||||||
      const data: UDPParamType = {
 | 
					      const data: UDPParamType = {
 | 
				
			||||||
        id: 31,
 | 
					        id: 31,
 | 
				
			||||||
        list: tmpList,
 | 
					        list: tmpList,
 | 
				
			||||||
        carNo: this.carInfo.carNo!,
 | 
					        carNo: this.carInfo.carNo!,
 | 
				
			||||||
        placeId: this.carInfo.examinationRoomId!
 | 
					        placeId: this.carInfo.examinationRoomId!
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      console.log(CenterUdpTag, "查看生成的", JSON.stringify(data))
 | 
					 | 
				
			||||||
      const param = this.setWholeMsg(data)
 | 
					      const param = this.setWholeMsg(data)
 | 
				
			||||||
      console.log(CenterUdpTag, "查看", JSON.stringify(param))
 | 
					      console.log("查看")
 | 
				
			||||||
      this.udp.sendMsg(param);
 | 
					      this.udp.sendMsg(param);
 | 
				
			||||||
    }, 1000);
 | 
					    }, 1000);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -87,16 +84,12 @@ class CenterUDPBusiness {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // 初始化
 | 
					  // 初始化
 | 
				
			||||||
  async init(config: EnvironmentConfigurationType, carInfo: CarInfoType, otherMessage: OtherMessageType) {
 | 
					  async init(config: EnvironmentConfigurationType, carInfo: CarInfoType, otherMessage: OtherMessageType) {
 | 
				
			||||||
    console.log(CenterUdpTag, "初始化", JSON.stringify(otherMessage), JSON.stringify(carInfo))
 | 
					 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      this.signNum = otherMessage.signNum || 0
 | 
					      this.signNum = otherMessage.signNum || 0
 | 
				
			||||||
      this.statue = otherMessage.statue || '1'
 | 
					      this.statue = otherMessage.statue || '1'
 | 
				
			||||||
      this.lsh = otherMessage.lsh || '0000000000000'
 | 
					      this.lsh = otherMessage.lsh || '0000000000000'
 | 
				
			||||||
      this.carInfo = carInfo
 | 
					      this.carInfo = carInfo
 | 
				
			||||||
      // TODO
 | 
					      this.udp.create(config.udplocalIp!, '8800', carInfo.udpAddress!, carInfo.messagePort!)
 | 
				
			||||||
      // this.udp.create(config.udplocalIp!, '8800', carInfo.udpAddress!, carInfo.messagePort!)
 | 
					 | 
				
			||||||
      this.udp.create(config.udplocalIp!, '8800', "112.80.35.83", "11056")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      this.udp.setDealMethod(this.dealMsg)
 | 
					      this.udp.setDealMethod(this.dealMsg)
 | 
				
			||||||
    } catch (e) {
 | 
					    } catch (e) {
 | 
				
			||||||
      console.error(UDPTag, "初始化中心 udp失败")
 | 
					      console.error(UDPTag, "初始化中心 udp失败")
 | 
				
			||||||
@ -115,8 +108,8 @@ class CenterUDPBusiness {
 | 
				
			|||||||
    for (let i = 0; i < dataView?.byteLength; ++i) {
 | 
					    for (let i = 0; i < dataView?.byteLength; ++i) {
 | 
				
			||||||
      arr[i] = dataView?.getUint8(i)
 | 
					      arr[i] = dataView?.getUint8(i)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    let id = Math.floor(Number('0x' + FillZero(arr[1].toString(16), 2) + FillZero(arr[0].toString(16), 2)) / 1000)
 | 
					    let id = Math.floor(Number('0x' + fillZero(arr[1].toString(16), 2) + fillZero(arr[0].toString(16), 2)) / 1000)
 | 
				
			||||||
    let length = Number('0x' + FillZero(arr[7].toString(16), 2) + FillZero(arr[6].toString(16), 2));
 | 
					    let length = Number('0x' + fillZero(arr[7].toString(16), 2) + fillZero(arr[6].toString(16), 2));
 | 
				
			||||||
    let list: number[] = []
 | 
					    let list: number[] = []
 | 
				
			||||||
    for (let i = this.headLength; i <= this.headLength + length - 1; i++) {
 | 
					    for (let i = this.headLength; i <= this.headLength + length - 1; i++) {
 | 
				
			||||||
      list.push(arr[i])
 | 
					      list.push(arr[i])
 | 
				
			||||||
@ -140,15 +133,24 @@ class CenterUDPBusiness {
 | 
				
			|||||||
    params.list?.forEach(item => arr.push(item))
 | 
					    params.list?.forEach(item => arr.push(item))
 | 
				
			||||||
    bodyJudge.forEach(item => arr.push(item))
 | 
					    bodyJudge.forEach(item => arr.push(item))
 | 
				
			||||||
    end.forEach(item => arr.push(item))
 | 
					    end.forEach(item => arr.push(item))
 | 
				
			||||||
    return ArrayToByteArray(arr).buffer
 | 
					    return this.array2Byte(arr).buffer
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private array2Byte(array: Array<number>) {
 | 
				
			||||||
 | 
					    const buf = new ArrayBuffer(array.length);
 | 
				
			||||||
 | 
					    const view = new Uint8Array(buf);
 | 
				
			||||||
 | 
					    for (let i = 0; i = array.length; ++i) {
 | 
				
			||||||
 | 
					      view[i] = array[i] & 0xFF;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return view;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private setMsgHead(params: UDPParamType) {
 | 
					  private setMsgHead(params: UDPParamType) {
 | 
				
			||||||
    // 自增流水号
 | 
					    // 自增流水号
 | 
				
			||||||
    const lshNo = SerialNumberInstance.get()
 | 
					    const lshNo = SerialNumberInstance.get()
 | 
				
			||||||
    let a = NumberToByteArray(Number(`${params.id}${FillZero(params.placeId, 3)}`), 2 * 8);
 | 
					    let a = string2Bytes(Number(`${params.id}${fillZero(params.placeId, 3)}`), 2 * 8);
 | 
				
			||||||
    let b = NumberToByteArray(Number(`${FillZero(params.carNo, 4)}${lshNo}`), 4 * 8);
 | 
					    let b = string2Bytes(Number(`${fillZero(params.carNo, 4)}${lshNo}`), 4 * 8);
 | 
				
			||||||
    let c = NumberToByteArray(params.list.length, 2 * 8);
 | 
					    let c = string2Bytes(params.list.length, 2 * 8);
 | 
				
			||||||
    let result: number[] = []
 | 
					    let result: number[] = []
 | 
				
			||||||
    a?.forEach(item => result.push(item))
 | 
					    a?.forEach(item => result.push(item))
 | 
				
			||||||
    b?.forEach(item => result.push(item))
 | 
					    b?.forEach(item => result.push(item))
 | 
				
			||||||
 | 
				
			|||||||
@ -24,7 +24,6 @@ class differentialAndSignal {
 | 
				
			|||||||
    const signNum = AppStorage.get<number>('signNum')
 | 
					    const signNum = AppStorage.get<number>('signNum')
 | 
				
			||||||
    const statue = AppStorage.get<string>('statue')
 | 
					    const statue = AppStorage.get<string>('statue')
 | 
				
			||||||
    const lsh = AppStorage.get<string>('lsh')
 | 
					    const lsh = AppStorage.get<string>('lsh')
 | 
				
			||||||
    const singlePlay = AppStorage.get<boolean>("singlePlay")
 | 
					 | 
				
			||||||
    const data: WorkerMessage = {
 | 
					    const data: WorkerMessage = {
 | 
				
			||||||
      config: config,
 | 
					      config: config,
 | 
				
			||||||
      carInfo: carInfo,
 | 
					      carInfo: carInfo,
 | 
				
			||||||
@ -32,8 +31,7 @@ class differentialAndSignal {
 | 
				
			|||||||
        signNum: signNum || 0,
 | 
					        signNum: signNum || 0,
 | 
				
			||||||
        statue: statue || "",
 | 
					        statue: statue || "",
 | 
				
			||||||
        lsh: lsh || ""
 | 
					        lsh: lsh || ""
 | 
				
			||||||
      },
 | 
					      }
 | 
				
			||||||
      singlePlay: singlePlay || false
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    this.workerInstance.postMessage(JSON.stringify(data))
 | 
					    this.workerInstance.postMessage(JSON.stringify(data))
 | 
				
			||||||
    this.getMessage()
 | 
					    this.getMessage()
 | 
				
			||||||
 | 
				
			|||||||
@ -1,17 +1,8 @@
 | 
				
			|||||||
import {
 | 
					import { CarInfoType, EnvironmentConfigurationType, Gps, Sensor, UDPParamType } from '../../model';
 | 
				
			||||||
  CarInfoType,
 | 
					 | 
				
			||||||
  EnvironmentConfigurationType,
 | 
					 | 
				
			||||||
  Gps,
 | 
					 | 
				
			||||||
  PLCDataType,
 | 
					 | 
				
			||||||
  ProjectDataType,
 | 
					 | 
				
			||||||
  ProjectItemType,
 | 
					 | 
				
			||||||
  Sensor,
 | 
					 | 
				
			||||||
  UDPParamType
 | 
					 | 
				
			||||||
} from '../../model';
 | 
					 | 
				
			||||||
import { testKm2Items, testKm3Items } from '../../pages/judgeSDK/dataTest';
 | 
					import { testKm2Items, testKm3Items } from '../../pages/judgeSDK/dataTest';
 | 
				
			||||||
 | 
					import { fillZero, } from '../../pages/judgeSDK/utils/Common';
 | 
				
			||||||
import { JudgeConfig } from '../../config';
 | 
					import { JudgeConfig } from '../../config';
 | 
				
			||||||
import { FillZero, NumberToByteArray, StringToASCII } from '../Common';
 | 
					import { FillZero, StringToASCII } from '../Common';
 | 
				
			||||||
import UdpClient from '../UdpUtils';
 | 
					import UdpClient from '../UdpUtils';
 | 
				
			||||||
import { CenterUDPBusinessInstance } from './CenterUdpBusiness';
 | 
					import { CenterUDPBusinessInstance } from './CenterUdpBusiness';
 | 
				
			||||||
import { ObtainUdpBusinessInstance } from './ObtainUdpBusiness';
 | 
					import { ObtainUdpBusinessInstance } from './ObtainUdpBusiness';
 | 
				
			||||||
@ -19,16 +10,48 @@ import systemTime from '@ohos.systemDateTime';
 | 
				
			|||||||
import { examCalcGpsDistance } from '../../pages/judgeSDK/api';
 | 
					import { examCalcGpsDistance } from '../../pages/judgeSDK/api';
 | 
				
			||||||
import { SerialNumberInstance } from '../SerialNumber';
 | 
					import { SerialNumberInstance } from '../SerialNumber';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface PLCDataType {
 | 
				
			||||||
 | 
					  sensor: Sensor,
 | 
				
			||||||
 | 
					  gps: Gps,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface ProjectDataType {
 | 
				
			||||||
 | 
					  code: string
 | 
				
			||||||
 | 
					  status: number
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface ProjectItemType {
 | 
				
			||||||
 | 
					  code: ProjectDataType
 | 
				
			||||||
 | 
					  status: string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function string2Bytes(num: number | string, len: number) {
 | 
				
			||||||
 | 
					  let str = (Math.floor(Number(num))).toString(2);
 | 
				
			||||||
 | 
					  if (str.length > len) {
 | 
				
			||||||
 | 
					    console.log('数据长度不对~~');
 | 
				
			||||||
 | 
					    return []
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  let byteString = FillZero(str, len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  let arrBytes: number[] = [];
 | 
				
			||||||
 | 
					  for (let i = byteString.length; i > 0; ) {
 | 
				
			||||||
 | 
					    let j = i - 8;
 | 
				
			||||||
 | 
					    if (j < 0) {
 | 
				
			||||||
 | 
					      j = 0
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    let s = byteString.slice(j, i);
 | 
				
			||||||
 | 
					    let v = parseInt(s, 2);
 | 
				
			||||||
 | 
					    arrBytes.push(v);
 | 
				
			||||||
 | 
					    i = i - 8
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return arrBytes;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class JudgeUdpBusiness {
 | 
					class JudgeUdpBusiness {
 | 
				
			||||||
  private static instance: JudgeUdpBusiness
 | 
					  private static instance: JudgeUdpBusiness
 | 
				
			||||||
  public udpIndex = 0;
 | 
					  public udpIndex = 0;
 | 
				
			||||||
  private udp: UdpClient = new UdpClient()
 | 
					  private udp: UdpClient = new UdpClient()
 | 
				
			||||||
  private currentUdpIndex = 0;
 | 
					  private currentUdpIndex = 0;
 | 
				
			||||||
  private carInfo: CarInfoType = {}
 | 
					 | 
				
			||||||
  private singlePlay: boolean = false
 | 
					 | 
				
			||||||
  private lsh: string = ""
 | 
					 | 
				
			||||||
  private serialIndex: number = 0
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  constructor() {
 | 
					  constructor() {
 | 
				
			||||||
    if (!JudgeUdpBusiness.instance) {
 | 
					    if (!JudgeUdpBusiness.instance) {
 | 
				
			||||||
@ -38,16 +61,16 @@ class JudgeUdpBusiness {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async getMessageHeartbeat(msg: string): Promise<number[]> {
 | 
					  async getMessageHeartbeat(msg: string): Promise<number[]> {
 | 
				
			||||||
 | 
					    const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')!
 | 
				
			||||||
    let gpsDigit = JudgeConfig.fourInOneScreen.gpsDigit
 | 
					    let gpsDigit = JudgeConfig.fourInOneScreen.gpsDigit
 | 
				
			||||||
    const asclshArr = StringToASCII(FillZero(
 | 
					    const asclshArr = StringToASCII(FillZero(
 | 
				
			||||||
      this.singlePlay
 | 
					      AppStorage.get<boolean>("singlePlay")
 | 
				
			||||||
        ? '1111111111111'
 | 
					        ? '1111111111111'
 | 
				
			||||||
        : this.lsh,
 | 
					        : AppStorage.get<string>("lsh")!,
 | 
				
			||||||
      13));
 | 
					      13));
 | 
				
			||||||
    const ascksyhArr = StringToASCII(this.carInfo.examSubject === '2' ? '0000000000000' : '1111111111111')
 | 
					    const ascksyhArr = StringToASCII(carInfo.examSubject === '2' ? '0000000000000' : '1111111111111')
 | 
				
			||||||
    const ascsbxhArr = StringToASCII('00000000')
 | 
					    const ascsbxhArr = StringToASCII('00000000')
 | 
				
			||||||
    // const serialIndex = AppStorage.get<number>("serialIndex")!
 | 
					    const serialIndex = AppStorage.get<number>("serialIndex")!
 | 
				
			||||||
 | 
					 | 
				
			||||||
    const plcData = await this.getPlcData(msg);
 | 
					    const plcData = await this.getPlcData(msg);
 | 
				
			||||||
    let param: number[] = Object.entries(plcData.sensor)
 | 
					    let param: number[] = Object.entries(plcData.sensor)
 | 
				
			||||||
      .filter((item: [string, number]) => {
 | 
					      .filter((item: [string, number]) => {
 | 
				
			||||||
@ -62,71 +85,70 @@ class JudgeUdpBusiness {
 | 
				
			|||||||
    const translateProject = this.getTranslateProject();
 | 
					    const translateProject = this.getTranslateProject();
 | 
				
			||||||
    const translateJd = Number(this.convertGpsCoord2(plcData.gps.wd).toFixed(gpsDigit)) * Math.pow(10, gpsDigit);
 | 
					    const translateJd = Number(this.convertGpsCoord2(plcData.gps.wd).toFixed(gpsDigit)) * Math.pow(10, gpsDigit);
 | 
				
			||||||
    const translateWd = Number(this.convertGpsCoord2(plcData.gps.jd).toFixed(gpsDigit)) * Math.pow(10, gpsDigit)
 | 
					    const translateWd = Number(this.convertGpsCoord2(plcData.gps.jd).toFixed(gpsDigit)) * Math.pow(10, gpsDigit)
 | 
				
			||||||
    const translateProjects = translateProject.map(numStr => NumberToByteArray(parseInt(numStr, 2), 8)[0])
 | 
					    const translateProjects = translateProject.map(numStr => string2Bytes(parseInt(numStr, 2), 8)[0])
 | 
				
			||||||
    let tempSd = Number((plcData.gps.sd * 1.852).toFixed(0))
 | 
					    let tempSd = Number((plcData.gps.sd * 1.852).toFixed(0))
 | 
				
			||||||
    if (tempSd < 1) {
 | 
					    if (tempSd < 1) {
 | 
				
			||||||
      tempSd = 0
 | 
					      tempSd = 0
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    const arr: number[][] = [
 | 
					    const arr: number[][] = [
 | 
				
			||||||
    //考生号
 | 
					    //考生号
 | 
				
			||||||
      asclshArr.map(lsh => NumberToByteArray(lsh, 8)[0]),
 | 
					      asclshArr.map(lsh => string2Bytes(lsh, 8)[0]),
 | 
				
			||||||
      //考试员号
 | 
					      //考试员号
 | 
				
			||||||
      ascksyhArr.map(ksyh => NumberToByteArray(ksyh, 8)[0]),
 | 
					      ascksyhArr.map(ksyh => string2Bytes(ksyh, 8)[0]),
 | 
				
			||||||
      //科目类型(0:未考试 1:科目二 2:科目三) + 考试开始时间
 | 
					      //科目类型(0:未考试 1:科目二 2:科目三) + 考试开始时间
 | 
				
			||||||
      NumberToByteArray(`${0}${'00:00:000'}`, 4 * 8),
 | 
					      string2Bytes(`${0}${'00:00:000'}`, 4 * 8),
 | 
				
			||||||
      // 消息序号
 | 
					      // 消息序号
 | 
				
			||||||
      NumberToByteArray(this.serialIndex, 2 * 8),
 | 
					      string2Bytes(serialIndex, 2 * 8),
 | 
				
			||||||
      translateSignals,
 | 
					      translateSignals,
 | 
				
			||||||
      NumberToByteArray(tempSd * 100, 2 * 8),
 | 
					      string2Bytes(tempSd * 100, 2 * 8),
 | 
				
			||||||
      NumberToByteArray(plcData.sensor.fdjzs / 100, 8),
 | 
					      string2Bytes(plcData.sensor.fdjzs / 100, 8),
 | 
				
			||||||
      NumberToByteArray(translateJd, 4 * 8),
 | 
					      string2Bytes(translateJd, 4 * 8),
 | 
				
			||||||
      NumberToByteArray(translateWd, 4 * 8), NumberToByteArray(1, 8),
 | 
					      string2Bytes(translateWd, 4 * 8), string2Bytes(1, 8),
 | 
				
			||||||
      //GPS东向距离
 | 
					      //GPS东向距离
 | 
				
			||||||
      NumberToByteArray(0, 4 * 8),
 | 
					      string2Bytes(0, 4 * 8),
 | 
				
			||||||
      //GPS北向距离
 | 
					      //GPS北向距离
 | 
				
			||||||
      NumberToByteArray(0, 4 * 8),
 | 
					      string2Bytes(0, 4 * 8),
 | 
				
			||||||
      //航向角
 | 
					      //航向角
 | 
				
			||||||
      NumberToByteArray(plcData.gps.hxj * 100, 2 * 8),
 | 
					      string2Bytes(plcData.gps.hxj * 100, 2 * 8),
 | 
				
			||||||
      //俯仰角
 | 
					      //俯仰角
 | 
				
			||||||
      NumberToByteArray(plcData.gps.fyj * 100, 2 * 8),
 | 
					      string2Bytes(plcData.gps.fyj * 100, 2 * 8),
 | 
				
			||||||
      // 高程(海拔)
 | 
					      // 高程(海拔)
 | 
				
			||||||
      NumberToByteArray(plcData.gps.hbg * 100, 4 * 8),
 | 
					      string2Bytes(plcData.gps.hbg * 100, 4 * 8),
 | 
				
			||||||
      //dddd
 | 
					      //dddd
 | 
				
			||||||
      translateProjects,
 | 
					      translateProjects,
 | 
				
			||||||
      //当前项目编号
 | 
					      //当前项目编号
 | 
				
			||||||
      NumberToByteArray(0, 8),
 | 
					      string2Bytes(0, 8),
 | 
				
			||||||
      //场地设备编号
 | 
					      //场地设备编号
 | 
				
			||||||
      ascsbxhArr.map(sbxh => NumberToByteArray(sbxh, 8)[0]),
 | 
					      ascsbxhArr.map(sbxh => string2Bytes(sbxh, 8)[0]),
 | 
				
			||||||
      //本次考试行驶距离
 | 
					      //本次考试行驶距离
 | 
				
			||||||
      NumberToByteArray(0, 2 * 8),
 | 
					      string2Bytes(0, 2 * 8),
 | 
				
			||||||
      //扣分值
 | 
					      //扣分值
 | 
				
			||||||
      NumberToByteArray(0, 2 * 8),
 | 
					      string2Bytes(0, 2 * 8),
 | 
				
			||||||
      //扣分数
 | 
					      //扣分数
 | 
				
			||||||
      NumberToByteArray(0, 2 * 8),
 | 
					      string2Bytes(0, 2 * 8),
 | 
				
			||||||
      //扣分项数量
 | 
					      //扣分项数量
 | 
				
			||||||
      NumberToByteArray(0, 8),
 | 
					      string2Bytes(0, 8),
 | 
				
			||||||
      //n个扣分序号
 | 
					      //n个扣分序号
 | 
				
			||||||
      // [].map(kf => string2Bytes(kf.markcatalog, 8)),
 | 
					      // [].map(kf => string2Bytes(kf.markcatalog, 8)),
 | 
				
			||||||
      [],
 | 
					      [],
 | 
				
			||||||
      //牵引车第二gps精度、纬度
 | 
					      //牵引车第二gps精度、纬度
 | 
				
			||||||
      NumberToByteArray(0, 4 * 8), NumberToByteArray(0, 4 * 8),
 | 
					      string2Bytes(0, 4 * 8), string2Bytes(0, 4 * 8),
 | 
				
			||||||
      //牵引车第二航向角
 | 
					      //牵引车第二航向角
 | 
				
			||||||
      NumberToByteArray(0, 2 * 8),
 | 
					      string2Bytes(0, 2 * 8),
 | 
				
			||||||
      //摩托压线 Byte[20],
 | 
					      //摩托压线 Byte[20],
 | 
				
			||||||
      NumberToByteArray(0, 20 * 8),
 | 
					      string2Bytes(0, 20 * 8),
 | 
				
			||||||
      //考试用时
 | 
					      //考试用时
 | 
				
			||||||
      NumberToByteArray(FillZero(0, 4), 4 * 8),
 | 
					      string2Bytes(FillZero(0, 4), 4 * 8),
 | 
				
			||||||
      //项目用时
 | 
					      //项目用时
 | 
				
			||||||
      NumberToByteArray(FillZero(0, 2), 2 * 8),
 | 
					      string2Bytes(FillZero(0, 2), 2 * 8),
 | 
				
			||||||
      //设备信号状态
 | 
					      //设备信号状态
 | 
				
			||||||
      NumberToByteArray(0, 4 * 8),
 | 
					      string2Bytes(0, 4 * 8),
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
    let result: number[] = [];
 | 
					    let result: number[] = [];
 | 
				
			||||||
    arr.forEach(itemArr => {
 | 
					    arr.forEach(itemArr => {
 | 
				
			||||||
      result = result.concat(itemArr)
 | 
					      result = result.concat(itemArr)
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
    // AppStorage.setOrCreate("serialIndex", 0)
 | 
					    AppStorage.setOrCreate("serialIndex", 0)
 | 
				
			||||||
    this.serialIndex = 0
 | 
					 | 
				
			||||||
    return [...new Uint8Array(result)]
 | 
					    return [...new Uint8Array(result)]
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -136,12 +158,13 @@ class JudgeUdpBusiness {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  sendData(bytes: number[]) {
 | 
					  sendData(bytes: number[]) {
 | 
				
			||||||
 | 
					    const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')!
 | 
				
			||||||
    if (this.udpIndex > this.currentUdpIndex) {
 | 
					    if (this.udpIndex > this.currentUdpIndex) {
 | 
				
			||||||
      this.udp.sendMsgExt({
 | 
					      this.udp.sendMsgExt({
 | 
				
			||||||
        id: 45,
 | 
					        id: 45,
 | 
				
			||||||
        list: bytes,
 | 
					        list: bytes,
 | 
				
			||||||
        carNo: this.carInfo.carNo!,
 | 
					        carNo: carInfo.carNo!,
 | 
				
			||||||
        placeId: this.carInfo.examinationRoomId!
 | 
					        placeId: carInfo.examinationRoomId!
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
      this.currentUdpIndex = this.udpIndex
 | 
					      this.currentUdpIndex = this.udpIndex
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -149,34 +172,35 @@ class JudgeUdpBusiness {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  //申请远程扣分查询
 | 
					  //申请远程扣分查询
 | 
				
			||||||
  askKf(directives: number) {
 | 
					  askKf(directives: number) {
 | 
				
			||||||
 | 
					    const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')!
 | 
				
			||||||
    CenterUDPBusinessInstance.sendData({
 | 
					    CenterUDPBusinessInstance.sendData({
 | 
				
			||||||
      id: 35,
 | 
					      id: 35,
 | 
				
			||||||
      list: [directives],
 | 
					      list: [directives],
 | 
				
			||||||
      carNo: this.carInfo.carNo!,
 | 
					      carNo: carInfo.carNo!,
 | 
				
			||||||
      placeId: this.carInfo.examinationRoomId!,
 | 
					      placeId: carInfo.examinationRoomId!,
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
    console.info('surenjun', `考车查询扣分项目内容,请求指令为:${directives}`)
 | 
					    console.info('surenjun', `考车查询扣分项目内容,请求指令为:${directives}`)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  //确定远程扣分
 | 
					  //确定远程扣分
 | 
				
			||||||
  confirmKf(directives: number, code: number) {
 | 
					  confirmKf(directives: number, code: number) {
 | 
				
			||||||
 | 
					    const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')!
 | 
				
			||||||
    CenterUDPBusinessInstance.sendData({
 | 
					    CenterUDPBusinessInstance.sendData({
 | 
				
			||||||
      id: 37,
 | 
					      id: 37,
 | 
				
			||||||
      list: [directives, code],
 | 
					      list: [directives, code],
 | 
				
			||||||
      carNo: this.carInfo.carNo!,
 | 
					      carNo: carInfo.carNo!,
 | 
				
			||||||
      placeId: this.carInfo.examinationRoomId!
 | 
					      placeId: carInfo.examinationRoomId!
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
    console.info('surenjun', `考车发送确定扣分指令,指令为:${directives}`)
 | 
					    console.info('surenjun', `考车发送确定扣分指令,指令为:${directives}`)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // 初始化
 | 
					  async init(): Promise<void> {
 | 
				
			||||||
  async init(config: EnvironmentConfigurationType, carInfo: CarInfoType, singlePlay: boolean, lsh: string): Promise<void> {
 | 
					 | 
				
			||||||
    this.lsh = lsh
 | 
					 | 
				
			||||||
    this.carInfo = carInfo
 | 
					 | 
				
			||||||
    this.singlePlay = singlePlay
 | 
					 | 
				
			||||||
    return new Promise((resolve, reject) => {
 | 
					    return new Promise((resolve, reject) => {
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        this.udp.create(config.udplocalIp!, '8080', carInfo.udpAddress!, carInfo.hintPort!).then(resolve).catch(reject)
 | 
					        let result: EnvironmentConfigurationType =
 | 
				
			||||||
 | 
					          AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")!
 | 
				
			||||||
 | 
					        const carInfo: CarInfoType = AppStorage.get<CarInfoType>('carInfo')!
 | 
				
			||||||
 | 
					        this.udp.create(result.udplocalIp!, '8080', carInfo.udpAddress!, carInfo.hintPort!).then(resolve).catch(reject)
 | 
				
			||||||
        ObtainUdpBusinessInstance.onMsg(async (msg: string) => {
 | 
					        ObtainUdpBusinessInstance.onMsg(async (msg: string) => {
 | 
				
			||||||
          let prevJd = 0, preWd = 0
 | 
					          let prevJd = 0, preWd = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -204,7 +228,7 @@ class JudgeUdpBusiness {
 | 
				
			|||||||
            prevJd = jd;
 | 
					            prevJd = jd;
 | 
				
			||||||
            preWd = wd;
 | 
					            preWd = wd;
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          // AppStorage.setOrCreate("udpIndex", udpIndex + 1)
 | 
					          AppStorage.set("udpIndex", udpIndex + 1)
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        setInterval(() => {
 | 
					        setInterval(() => {
 | 
				
			||||||
          this.udpIndex += 1
 | 
					          this.udpIndex += 1
 | 
				
			||||||
@ -235,9 +259,9 @@ class JudgeUdpBusiness {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  private setMsgHead(params: UDPParamType) {
 | 
					  private setMsgHead(params: UDPParamType) {
 | 
				
			||||||
    const lshNo = SerialNumberInstance.get()
 | 
					    const lshNo = SerialNumberInstance.get()
 | 
				
			||||||
    let a = NumberToByteArray(Number(`${params.id}${FillZero(params.placeId, 3)}`), 2 * 8);
 | 
					    let a = string2Bytes(Number(`${params.id}${fillZero(params.placeId, 3)}`), 2 * 8);
 | 
				
			||||||
    let b = NumberToByteArray(Number(`${FillZero(params.carNo, 4)}${lshNo}`), 4 * 8);
 | 
					    let b = string2Bytes(Number(`${fillZero(params.carNo, 4)}${lshNo}`), 4 * 8);
 | 
				
			||||||
    let c = NumberToByteArray(params.list.length, 2 * 8);
 | 
					    let c = string2Bytes(params.list.length, 2 * 8);
 | 
				
			||||||
    let result: number[] = []
 | 
					    let result: number[] = []
 | 
				
			||||||
    a?.forEach(item => result.push(item))
 | 
					    a?.forEach(item => result.push(item))
 | 
				
			||||||
    b?.forEach(item => result.push(item))
 | 
					    b?.forEach(item => result.push(item))
 | 
				
			||||||
@ -267,14 +291,14 @@ class JudgeUdpBusiness {
 | 
				
			|||||||
    for (let i = 0; i < len; i++) {
 | 
					    for (let i = 0; i < len; i++) {
 | 
				
			||||||
      arr.push(tempItems.slice(i * 8, (i + 1) * 8).join(''));
 | 
					      arr.push(tempItems.slice(i * 8, (i + 1) * 8).join(''));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return arr.map(numStr => parseInt(numStr, 2)).map(item => NumberToByteArray(item, 8)[0])
 | 
					    return arr.map(numStr => parseInt(numStr, 2)).map(item => string2Bytes(item, 8)[0])
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // 中心所有项目转换
 | 
					  // 中心所有项目转换
 | 
				
			||||||
  private getTranslateProject(): string[] {
 | 
					  private getTranslateProject(): string[] {
 | 
				
			||||||
    this.carInfo.examSubject
 | 
					    const examSubject = AppStorage.get<string>("examSubject");
 | 
				
			||||||
    const tempItems: ProjectItemType[] =
 | 
					    const tempItems: ProjectItemType[] =
 | 
				
			||||||
      (this.carInfo.examSubject === '2' ? testKm2Items : testKm3Items).map((code: ProjectDataType) => {
 | 
					      (examSubject === '2' ? testKm2Items : testKm3Items).map((code: ProjectDataType) => {
 | 
				
			||||||
        let data: ProjectItemType = {
 | 
					        let data: ProjectItemType = {
 | 
				
			||||||
          code,
 | 
					          code,
 | 
				
			||||||
          status: '0'
 | 
					          status: '0'
 | 
				
			||||||
@ -286,7 +310,7 @@ class JudgeUdpBusiness {
 | 
				
			|||||||
      const temp = tempItems.slice(i * 4, (i + 1) * 4);
 | 
					      const temp = tempItems.slice(i * 4, (i + 1) * 4);
 | 
				
			||||||
      let tempArr = temp.map(item => item.status)
 | 
					      let tempArr = temp.map(item => item.status)
 | 
				
			||||||
      if (i === 4) {
 | 
					      if (i === 4) {
 | 
				
			||||||
        tempArr = this.carInfo.examSubject === '2'
 | 
					        tempArr = examSubject === '2'
 | 
				
			||||||
          //bit36-bit39保留
 | 
					          //bit36-bit39保留
 | 
				
			||||||
          ? tempArr.concat(['00', '00'])
 | 
					          ? tempArr.concat(['00', '00'])
 | 
				
			||||||
          //bit30-bit39保留
 | 
					          //bit30-bit39保留
 | 
				
			||||||
@ -304,59 +328,34 @@ class JudgeUdpBusiness {
 | 
				
			|||||||
    let origin = plc.split(",")
 | 
					    let origin = plc.split(",")
 | 
				
			||||||
    let p = origin.map(item => Number(item))
 | 
					    let p = origin.map(item => Number(item))
 | 
				
			||||||
    let sensor: Sensor = {
 | 
					    let sensor: Sensor = {
 | 
				
			||||||
      // 安全带
 | 
					 | 
				
			||||||
      aqd: p[19],
 | 
					      aqd: p[19],
 | 
				
			||||||
      // 主驾驶门
 | 
					 | 
				
			||||||
      mkg: p[14],
 | 
					      mkg: p[14],
 | 
				
			||||||
      // 手刹
 | 
					 | 
				
			||||||
      ssc: p[13],
 | 
					      ssc: p[13],
 | 
				
			||||||
      // 脚刹
 | 
					 | 
				
			||||||
      jsc: p[12],
 | 
					      jsc: p[12],
 | 
				
			||||||
      // 副刹车
 | 
					 | 
				
			||||||
      fsc: p[18],
 | 
					      fsc: p[18],
 | 
				
			||||||
      // 离合
 | 
					 | 
				
			||||||
      lhq: p[17],
 | 
					      lhq: p[17],
 | 
				
			||||||
      // 喇叭
 | 
					 | 
				
			||||||
      lb: p[4],
 | 
					      lb: p[4],
 | 
				
			||||||
      // 示廓灯
 | 
					 | 
				
			||||||
      skd: p[9],
 | 
					      skd: p[9],
 | 
				
			||||||
      // 近光灯
 | 
					 | 
				
			||||||
      jgd: p[7],
 | 
					      jgd: p[7],
 | 
				
			||||||
      // 远光灯
 | 
					 | 
				
			||||||
      ygd: p[8],
 | 
					      ygd: p[8],
 | 
				
			||||||
      //左方向灯
 | 
					      //左方向灯   右方向灯     双跳灯      雾灯        雨刮器      点火1     点火2      发动机转速     档位       车速
 | 
				
			||||||
      zfxd: p[2],
 | 
					      zfxd: p[2],
 | 
				
			||||||
      // 右方向灯
 | 
					 | 
				
			||||||
      yfxd: p[3],
 | 
					      yfxd: p[3],
 | 
				
			||||||
      // 双跳灯
 | 
					 | 
				
			||||||
      shtd: p[20],
 | 
					      shtd: p[20],
 | 
				
			||||||
      // 雾灯
 | 
					 | 
				
			||||||
      wd: p[10],
 | 
					      wd: p[10],
 | 
				
			||||||
      // 雨刮器
 | 
					 | 
				
			||||||
      ygq: p[11],
 | 
					      ygq: p[11],
 | 
				
			||||||
      // 点火1
 | 
					 | 
				
			||||||
      dh1: p[5],
 | 
					      dh1: p[5],
 | 
				
			||||||
      // 点火2
 | 
					 | 
				
			||||||
      dh2: p[6],
 | 
					      dh2: p[6],
 | 
				
			||||||
      // 发动机转速
 | 
					 | 
				
			||||||
      fdjzs: p[25],
 | 
					      fdjzs: p[25],
 | 
				
			||||||
      // 档位
 | 
					 | 
				
			||||||
      dw: p[28],
 | 
					      dw: p[28],
 | 
				
			||||||
      // 车速
 | 
					 | 
				
			||||||
      cs: p[23],
 | 
					      cs: p[23],
 | 
				
			||||||
      // 方向盘角度
 | 
					 | 
				
			||||||
      fxp: Number(origin[27].split('_')[0]),
 | 
					      fxp: Number(origin[27].split('_')[0]),
 | 
				
			||||||
      //累计脉冲
 | 
					      //累计脉冲   溜车脉冲   超声波左后     超声波右后     超声波右前     超声波左前    座椅    仪表盘   后视镜   倒车镜   光照  雨量
 | 
				
			||||||
      ljmc: p[24],
 | 
					      ljmc: p[24],
 | 
				
			||||||
      // 溜车脉冲
 | 
					 | 
				
			||||||
      lcmc: 0,
 | 
					      lcmc: 0,
 | 
				
			||||||
      // 超声波4 左后
 | 
					 | 
				
			||||||
      csbzh: p[32],
 | 
					      csbzh: p[32],
 | 
				
			||||||
      // 超声波2 右后
 | 
					 | 
				
			||||||
      csbyh: p[30],
 | 
					      csbyh: p[30],
 | 
				
			||||||
      // 超声波3 右前
 | 
					 | 
				
			||||||
      csbyq: p[31],
 | 
					      csbyq: p[31],
 | 
				
			||||||
      // 超声波1 左前
 | 
					 | 
				
			||||||
      csbzq: p[29],
 | 
					      csbzq: p[29],
 | 
				
			||||||
      zy: 0,
 | 
					      zy: 0,
 | 
				
			||||||
      tbp: 0,
 | 
					      tbp: 0,
 | 
				
			||||||
@ -372,34 +371,20 @@ class JudgeUdpBusiness {
 | 
				
			|||||||
      mndg: ''
 | 
					      mndg: ''
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    let gps: Gps = {
 | 
					    let gps: Gps = {
 | 
				
			||||||
      // GPS板卡类型
 | 
					 | 
				
			||||||
      bklx: p[56],
 | 
					      bklx: p[56],
 | 
				
			||||||
      // GPS状态
 | 
					 | 
				
			||||||
      dwzt: p[83],
 | 
					      dwzt: p[83],
 | 
				
			||||||
      //航向角状态-收星数
 | 
					 | 
				
			||||||
      jdzt: Number(origin[92].split('-')[0]),
 | 
					      jdzt: Number(origin[92].split('-')[0]),
 | 
				
			||||||
      sj: time,
 | 
					      sj: time,
 | 
				
			||||||
      // 纬度
 | 
					 | 
				
			||||||
      jd: p[96],
 | 
					      jd: p[96],
 | 
				
			||||||
      // 经度
 | 
					 | 
				
			||||||
      wd: p[95],
 | 
					      wd: p[95],
 | 
				
			||||||
      // 航向角
 | 
					 | 
				
			||||||
      hxj: p[90],
 | 
					      hxj: p[90],
 | 
				
			||||||
      // 俯仰角
 | 
					 | 
				
			||||||
      fyj: p[91],
 | 
					      fyj: p[91],
 | 
				
			||||||
      // 海拔高
 | 
					 | 
				
			||||||
      hbg: p[85],
 | 
					      hbg: p[85],
 | 
				
			||||||
      // 高度差
 | 
					 | 
				
			||||||
      gdc: p[86],
 | 
					      gdc: p[86],
 | 
				
			||||||
      // 速度
 | 
					 | 
				
			||||||
      sd: p[97],
 | 
					      sd: p[97],
 | 
				
			||||||
      // 龄期
 | 
					 | 
				
			||||||
      age: p[87],
 | 
					      age: p[87],
 | 
				
			||||||
      // 经度因子
 | 
					 | 
				
			||||||
      jdyz: p[89],
 | 
					      jdyz: p[89],
 | 
				
			||||||
      // 维度因子
 | 
					 | 
				
			||||||
      wdyz: p[88],
 | 
					      wdyz: p[88],
 | 
				
			||||||
      // 收星数
 | 
					 | 
				
			||||||
      dwsxs: p[84],
 | 
					      dwsxs: p[84],
 | 
				
			||||||
      jdsxs: Number(origin[92].split('-')[1])
 | 
					      jdsxs: Number(origin[92].split('-')[1])
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -431,5 +416,4 @@ class JudgeUdpBusiness {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
export const JudgeUdpBusinessInstance = new JudgeUdpBusiness()
 | 
					export const JudgeUdpBusinessInstance = new JudgeUdpBusiness()
 | 
				
			||||||
@ -37,9 +37,6 @@ function initFn(result: WorkerMessage) {
 | 
				
			|||||||
  CenterUDPBusinessInstance.init(result.config, result.carInfo, result.otherMessage)
 | 
					  CenterUDPBusinessInstance.init(result.config, result.carInfo, result.otherMessage)
 | 
				
			||||||
  // 中心心跳
 | 
					  // 中心心跳
 | 
				
			||||||
  CenterUDPBusinessInstance.startHeartBeat()
 | 
					  CenterUDPBusinessInstance.startHeartBeat()
 | 
				
			||||||
  // 初始化考试过程UDP
 | 
					 | 
				
			||||||
  // JudgeUdpBusinessInstance.init(result.config, result.carInfo, result?.singlePlay || false, result.otherMessage.lsh)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function getDataFn() {
 | 
					function getDataFn() {
 | 
				
			||||||
@ -47,7 +44,7 @@ function getDataFn() {
 | 
				
			|||||||
  DifferentialSignal.getData((data: ArrayBuffer) => {
 | 
					  DifferentialSignal.getData((data: ArrayBuffer) => {
 | 
				
			||||||
    console.log(WorkerTag, "Received differential signal data:", data.byteLength, "bytes")
 | 
					    console.log(WorkerTag, "Received differential signal data:", data.byteLength, "bytes")
 | 
				
			||||||
    // TCP拿到差分改正数发给后置机
 | 
					    // TCP拿到差分改正数发给后置机
 | 
				
			||||||
    // ObtainUdpBusinessInstance.sendData(data)
 | 
					    ObtainUdpBusinessInstance.sendData(data)
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
  // 后置机回执PLC和GPS
 | 
					  // 后置机回执PLC和GPS
 | 
				
			||||||
  ObtainUdpBusinessInstance.onMsg((data: string) => {
 | 
					  ObtainUdpBusinessInstance.onMsg((data: string) => {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user