大车代码合并
小红球udp开始时间修改
This commit is contained in:
parent
a7c85152a4
commit
fca8d0ed08
@ -1,5 +1,5 @@
|
||||
{
|
||||
"lockfileVersion": 2,
|
||||
"lockfileVersion": 1,
|
||||
"ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.",
|
||||
"specifiers": {},
|
||||
"packages": {}
|
||||
|
||||
@ -140,6 +140,7 @@ export interface EnvironmentConfigurationType {
|
||||
// 前置机响应后置机端口2
|
||||
udplocalIpPortTwo?: string,
|
||||
udpOppositeIp?: string,
|
||||
udpOppositeIpTwo?: string,
|
||||
|
||||
// 后置机响应端口
|
||||
udpOppositeIpPort?: string,
|
||||
|
||||
@ -659,7 +659,7 @@ export interface JudgeBeginObj {
|
||||
sczbkf?: JudgeKFXM[]
|
||||
dmndg: boolean
|
||||
mfxx: boolean
|
||||
mfxxn: boolean
|
||||
zeng: boolean
|
||||
}
|
||||
|
||||
export interface JudgeXMJS {
|
||||
|
||||
@ -72,6 +72,8 @@ export interface WorkerBackMessage {
|
||||
export enum WorkerBackMessageType {
|
||||
// 后置机信息
|
||||
ObtainUdpData = 'obtainUdpData',
|
||||
// 后置机GPS2消息
|
||||
ObtainUdpGps2Data = 'obtainUdpGps2Data',
|
||||
// 中心消息
|
||||
CenterUdpData = 'centerUdpData',
|
||||
// 远程开始考试
|
||||
|
||||
@ -149,7 +149,6 @@ export struct JudgePage {
|
||||
@State isErrorMsgEnd: boolean = false
|
||||
@State disConnectErrorOpen: boolean = false
|
||||
@State @Watch("laneSignalChange") laneSignal: PerLane = InitialPerLane
|
||||
public udpStartTIme: string = ""
|
||||
public examTime: number = 0
|
||||
public context = getContext(this) as common.UIAbilityContext;
|
||||
// 信号查看弹窗
|
||||
@ -214,7 +213,6 @@ export struct JudgePage {
|
||||
this.startFullTime = dayTs().format("YYYYMMDDHHmmss");
|
||||
this.startTime = dayTs().format("YYYY-MM-DD HH:mm:ss")
|
||||
this.startExamTime = dayTs().format("YYYY-MM-DD HH:mm:ss")
|
||||
this.udpStartTIme = dayTs().format("HHmmssSSS")
|
||||
//初始化数据库表
|
||||
await this.initDb()
|
||||
//断点续考
|
||||
|
||||
@ -36,6 +36,7 @@ import router from '@ohos.router'
|
||||
import { GetSyncData, UpdateTableByArray } from '../../utils/table/Operation'
|
||||
import { CurrentProjectConversion, DeductionProjectConversion, DetectingDifferences, GetCarStatus } from './utils'
|
||||
import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker'
|
||||
import dayTs from '../../utils/Date'
|
||||
|
||||
|
||||
export interface GetSysSetResult {
|
||||
@ -288,28 +289,7 @@ export class BaseJudge {
|
||||
return
|
||||
}
|
||||
that.avPlayer?.playAudio(['voice/exam_waiting.mp3'], judgeUI.singlePlay, async () => {
|
||||
this.isUdpEnd = true
|
||||
try {
|
||||
if (!judgeUI.singlePlay) {
|
||||
DifferentialAndSignal.sendMsg({ type: WorkerMessageDataType.JudgeSend, data: {
|
||||
judgeUdpEnd: this.isUdpEnd,
|
||||
judgeExamEnd: true,
|
||||
performInfo: that.performInfo,
|
||||
business: {
|
||||
totalScore: that.judgeUI.totalScore,
|
||||
kfArr: that.judgeUI.kfArr,
|
||||
startTime: that.judgeUI.udpStartTIme,
|
||||
xmmcSingleCode: that.xmmcSingleCode,
|
||||
kmItems: that.kmItems,
|
||||
examTime: that.judgeUI.examTime,
|
||||
cdsbInfoObj: that.judgeUI.cdsbInfoObj!,
|
||||
xmdm: that.xmdm,
|
||||
xmxh: that.xmxh
|
||||
} } })
|
||||
}
|
||||
} catch (e) {
|
||||
console.info(JudgeTag, JSON.stringify(e))
|
||||
}
|
||||
|
||||
if (judgeUI.singlePlay) {
|
||||
// 单机结束
|
||||
await this.endExam(judgeUI, that)
|
||||
@ -433,6 +413,29 @@ export class BaseJudge {
|
||||
throw new Error('End Loop')
|
||||
}
|
||||
})
|
||||
this.isUdpEnd = true
|
||||
try {
|
||||
if (!judgeUI.singlePlay) {
|
||||
let startTime: Date = AppStorage.get("startTime") || new Date()
|
||||
DifferentialAndSignal.sendMsg({ type: WorkerMessageDataType.JudgeSend, data: {
|
||||
judgeUdpEnd: this.isUdpEnd,
|
||||
judgeExamEnd: true,
|
||||
performInfo: that.performInfo,
|
||||
business: {
|
||||
totalScore: that.judgeUI.totalScore,
|
||||
kfArr: that.judgeUI.kfArr,
|
||||
startTime: dayTs(startTime).format("HHmmssSSS"),
|
||||
xmmcSingleCode: that.xmmcSingleCode,
|
||||
kmItems: that.kmItems,
|
||||
examTime: that.judgeUI.examTime,
|
||||
cdsbInfoObj: that.judgeUI.cdsbInfoObj!,
|
||||
xmdm: that.xmdm,
|
||||
xmxh: that.xmxh
|
||||
} } })
|
||||
}
|
||||
} catch (e) {
|
||||
console.info(JudgeTag, JSON.stringify(e))
|
||||
}
|
||||
} catch (e) {
|
||||
console.info(JudgeTag, JSON.stringify(e))
|
||||
}
|
||||
@ -441,6 +444,28 @@ export class BaseJudge {
|
||||
that.avPlayer?.playAudio([voiceURL], true, () => {
|
||||
setTimeout(() => {
|
||||
this.isUdpEnd = true
|
||||
try {
|
||||
if (!judgeUI.singlePlay) {
|
||||
let startTime: Date = AppStorage.get("startTime") || new Date()
|
||||
DifferentialAndSignal.sendMsg({ type: WorkerMessageDataType.JudgeSend, data: {
|
||||
judgeUdpEnd: this.isUdpEnd,
|
||||
judgeExamEnd: true,
|
||||
performInfo: that.performInfo,
|
||||
business: {
|
||||
totalScore: that.judgeUI.totalScore,
|
||||
kfArr: that.judgeUI.kfArr,
|
||||
startTime: dayTs(startTime).format("HHmmssSSS"),
|
||||
xmmcSingleCode: that.xmmcSingleCode,
|
||||
kmItems: that.kmItems,
|
||||
examTime: that.judgeUI.examTime,
|
||||
cdsbInfoObj: that.judgeUI.cdsbInfoObj!,
|
||||
xmdm: that.xmdm,
|
||||
xmxh: that.xmxh
|
||||
} } })
|
||||
}
|
||||
} catch (e) {
|
||||
console.info(JudgeTag, JSON.stringify(e))
|
||||
}
|
||||
dConsole.log(JudgeTag, "考试结束自动退出5")
|
||||
router.back();
|
||||
}, param302 === "8" ? 3000 : 0)
|
||||
|
||||
@ -23,6 +23,7 @@ import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSigna
|
||||
import { PlcStrToJson, PlcStrToWXJson } from './utils'
|
||||
import { BaseJudgeImpl, SetJudgeItem } from './BaseJudgeBussines'
|
||||
import { JudgePage } from '../Judge'
|
||||
import dayTs from '../../utils/Date'
|
||||
|
||||
export default class JudgeBusiness {
|
||||
public mndgStr: string | undefined
|
||||
@ -58,9 +59,8 @@ export default class JudgeBusiness {
|
||||
public plcData?: PLCType
|
||||
public totalScore: number = -1
|
||||
public judgeUI: JudgePage
|
||||
private tempData?: PLCType
|
||||
// 是否发送udp
|
||||
private judgeBusiness: BaseJudgeImpl
|
||||
private plc2Data?: string
|
||||
|
||||
constructor(judgeUI: JudgePage) {
|
||||
this.judgeUI = judgeUI
|
||||
@ -88,7 +88,6 @@ export default class JudgeBusiness {
|
||||
const msg: PLCType = JSON.parse(strArr[num]);
|
||||
num++
|
||||
// 4.过程数据
|
||||
this.tempData = msg
|
||||
this.judgeUI.sd = Math.floor(msg?.gps?.sd * 1.852) + '';
|
||||
this.judgeUI.dw = Math.floor(msg?.sensor?.dw) + ''
|
||||
this.plcData = msg
|
||||
@ -146,6 +145,9 @@ export default class JudgeBusiness {
|
||||
this.HandlePLCData(result.data as string)
|
||||
dConsole.writeProcessData(ProcessDataEnumType.PlcData, result.data as string)
|
||||
}
|
||||
if (result.type === WorkerBackMessageType.ObtainUdpGps2Data) {
|
||||
this.plc2Data = result.data as string
|
||||
}
|
||||
}
|
||||
|
||||
// 处理PLC数据
|
||||
@ -164,14 +166,13 @@ export default class JudgeBusiness {
|
||||
}
|
||||
// 记录原始PLC数据
|
||||
dConsole.writeProcessData(ProcessDataEnumType.PlcData, msg)
|
||||
const tempData = await PlcStrToJson(msg);
|
||||
const tempData = await PlcStrToJson(msg, this.plc2Data);
|
||||
tempData.sensor.rmndg = this.rmndg;
|
||||
tempData.sensor.mndg = this.mndgStr || "";
|
||||
const wuXiDataStr = await PlcStrToWXJson(msg)
|
||||
// 无锡所数据记录
|
||||
dConsole.writeProcessData(ProcessDataEnumType.WuxiProgressData, wuXiDataStr)
|
||||
this.plcData = tempData
|
||||
this.tempData = tempData
|
||||
this.plcStr = msg;
|
||||
this.mndgStr = '';
|
||||
this.rmndg = 0;
|
||||
@ -184,6 +185,7 @@ export default class JudgeBusiness {
|
||||
|
||||
// dConsole.info("小红球过程数据1", this.judgeBusiness.getIsUdpEnd(), this.judgeUI.kfArr)
|
||||
|
||||
let startTime: Date = AppStorage.get("startTime") || new Date()
|
||||
|
||||
DifferentialAndSignal.sendMsg({
|
||||
type: WorkerMessageDataType.JudgeSend, data: {
|
||||
@ -193,7 +195,7 @@ export default class JudgeBusiness {
|
||||
business: {
|
||||
totalScore: this.judgeUI.totalScore,
|
||||
kfArr: this.judgeUI.kfArr,
|
||||
startTime: this.judgeUI.udpStartTIme,
|
||||
startTime: dayTs(startTime).format("HHmmssSSS"),
|
||||
xmmcSingleCode: this.xmmcSingleCode,
|
||||
kmItems: this.kmItems,
|
||||
examTime: this.judgeUI.examTime,
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import { JudgeConfig, JudgeTag } from '../../config';
|
||||
import {
|
||||
BaseInfoType,
|
||||
CAR_INFO,
|
||||
CarInfoType,
|
||||
CDSBInfo,
|
||||
EnvironmentConfigurationType,
|
||||
ExaminerInfoType,
|
||||
ItemInfo,
|
||||
ItemInfos,
|
||||
@ -21,7 +21,8 @@ import {
|
||||
ProjectInfos,
|
||||
RouteParamsType,
|
||||
SyssetConfig,
|
||||
SYSTEM_PARAM
|
||||
SYSTEM_PARAM,
|
||||
EnvironmentConfigurationType
|
||||
} from '../../model';
|
||||
import common from '@ohos.app.ability.common';
|
||||
import { dConsole } from '../../utils/LogWorker';
|
||||
@ -44,6 +45,126 @@ export class LargeJudge extends BaseJudge implements BaseJudgeImpl {
|
||||
return super.getIsUdpEnd()
|
||||
}
|
||||
|
||||
private async GetJudgeBeginData(projects: Project[], carType: string, kssycs: string, isDdxk: boolean, ddxkTime: number, projectsCenterObj: Object, ddxkKsxmArr: string[], ddxkKfArr: string[], passingScore: number, wayno: number, name: string, lsh: string, idCard: string, isExam: boolean) {
|
||||
const examinerInfo = AppStorage.get<ExaminerInfoType>('examinerInfo')
|
||||
const examinerName = examinerInfo?.name || ""
|
||||
let currentParams: RouteParamsType = router.getParams() as RouteParamsType;
|
||||
const sczb = currentParams.sczb;
|
||||
const kfdm = currentParams.kfdm;
|
||||
const ksxm: JudgeKSXM[] = projects.map(project => {
|
||||
const temp: JudgeKSXM = {
|
||||
xmdm: Number(project.projectCode), xmxh: ''
|
||||
}
|
||||
return temp
|
||||
})
|
||||
const ykxm: number[] = (ddxkKsxmArr?.map(projectCenterCode => {
|
||||
const currentProject: ProjectInfo = Reflect.get(projectsCenterObj, projectCenterCode)
|
||||
return Number(currentProject.projectCode)
|
||||
})) || [];
|
||||
const kfxm: JudgeKFXM[] = isDdxk ? (ddxkKfArr?.map(kf => {
|
||||
return {
|
||||
xmdm: Number(kf.split(',')[0]), kfdm: kf.split(',')[1]
|
||||
} as JudgeKFXM
|
||||
})) : []
|
||||
const beginInfo: JudgeBeginObj = {
|
||||
kgid: '012',
|
||||
kgxm: decodeURI(examinerName || ''),
|
||||
exam: isExam ? 1 : 0,
|
||||
//是否回放
|
||||
replay: 0,
|
||||
//生成的轨迹文件
|
||||
track: '',
|
||||
xm: name,
|
||||
sex: 0,
|
||||
kslsh: lsh,
|
||||
sfzmhm: idCard,
|
||||
ksyy: '',
|
||||
kscx: carType,
|
||||
kkcs: Number(kssycs) || 2,
|
||||
sfyk: 0,
|
||||
ykkkcs: 1,
|
||||
wayno: Number(wayno),
|
||||
czlx: 0,
|
||||
kskssj: await systemDateTime.getCurrentTime(),
|
||||
passing: Number(passingScore),
|
||||
ksxm,
|
||||
//断点续考
|
||||
ddxk: isDdxk ? 1 : 0,
|
||||
ddkssj: ddxkTime || 0,
|
||||
ykxm,
|
||||
kfxm,
|
||||
yklc: 0,
|
||||
special: [],
|
||||
sczb: (sczb === undefined || sczb == '0') ? 0 : 1,
|
||||
sczbkf: kfdm,
|
||||
dmndg: this.mockLight,
|
||||
mfxx: this.mode === 5,
|
||||
zeng: this.mode === 3 || this.mode === 4
|
||||
}
|
||||
dConsole.info(JudgeTag, '5.获取开始考试数据完成')
|
||||
return beginInfo
|
||||
};
|
||||
|
||||
private async GetJudgeInitData(context: common.UIAbilityContext, markRuleListObj: object, carType: string, carName: string, systemparmArr: SYSTEM_PARAM[], carinfoArr: CAR_INFO[], examSubject: string, itemInfoObj: ItemInfos, judgeConfig: SyssetConfig[], carlist: string, mapPointArr: MAPPOINT[], mapPointItemArr: MAPITEMPOINTITEM[]) {
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
|
||||
let allitems: ItemInfo[] = [];
|
||||
if (examSubject == '2' && itemInfoObj) {
|
||||
const promiseItems = Reflect.ownKeys(itemInfoObj).map(async cdsbKey => {
|
||||
const cdsb: CDSBInfo = Reflect.get(itemInfoObj, cdsbKey);
|
||||
const model = await GetModelData(`/${cdsb.modelKey}.txt`, context);
|
||||
const temp: ItemInfo = {
|
||||
xmdm: cdsb?.xmdm || 0,
|
||||
xmxh: cdsb?.xmxh || "",
|
||||
model: model || ""
|
||||
};
|
||||
return temp;
|
||||
});
|
||||
// 等待所有的 Promise 解析完成
|
||||
allitems = await Promise.all(promiseItems);
|
||||
}
|
||||
|
||||
const mark: MarkRule[] = Object.values(markRuleListObj)
|
||||
const initInfo: JudgeInitObj = {
|
||||
sdkver: await examJudgeVersion(),
|
||||
appver: AppStorage.get<EnvironmentConfigurationType>('EnvironmentConfigurationType')?.version || "",
|
||||
kskm: Number(carInfo?.examSubject || "2"),
|
||||
kchp: carInfo?.plateNo || "",
|
||||
kchm: Number(carInfo?.carId || ""),
|
||||
kscx: carType,
|
||||
cxcode: '1',
|
||||
name: carName,
|
||||
carmodel: await GetModelData(`/${carType}.txt`, context) || "",
|
||||
allitems,
|
||||
iteminfo: [],
|
||||
systemparm: systemparmArr,
|
||||
mark,
|
||||
sysset: judgeConfig,
|
||||
itemInfoObj,
|
||||
carlist: carlist,
|
||||
carinfo: carinfoArr,
|
||||
};
|
||||
let km3Config: Km3JudgeInitConfig = {}
|
||||
if (examSubject == '3') {
|
||||
km3Config = {
|
||||
map_point: mapPointArr,
|
||||
map_point_item: mapPointItemArr,
|
||||
//科目三暂时为空
|
||||
iteminfo: [],
|
||||
roads: await GetModelData('/Roads.txt', context) || "",
|
||||
sharps: await GetModelData('/Sharps.txt', context) || ""
|
||||
};
|
||||
initInfo.map_point = km3Config.map_point
|
||||
initInfo.map_point_item = km3Config.map_point_item
|
||||
initInfo.iteminfo = km3Config.iteminfo
|
||||
initInfo.roads = km3Config.roads
|
||||
initInfo.sharps = km3Config.sharps
|
||||
}
|
||||
// 获取科目三的评判配置
|
||||
dConsole.info(JudgeTag, '3.获取评判初始化数据完成')
|
||||
return initInfo
|
||||
};
|
||||
|
||||
public async JudgeInit(judgeUI: JudgePage, that: JudgeBusiness): Promise<GetSysSetResult> {
|
||||
const systemParams = await GetSyncData<SYSTEM_PARAM>('MA_SYSTEMPARM')
|
||||
let currentParams: RouteParamsType = router.getParams() as RouteParamsType;
|
||||
@ -121,14 +242,14 @@ export class LargeJudge extends BaseJudge implements BaseJudgeImpl {
|
||||
}
|
||||
})
|
||||
systemParams.forEach((systemParam) => {
|
||||
// if (isTrajectoryOpen) {
|
||||
// systemParam.no1 = systemParam.NO1;
|
||||
// systemParam.no2 = systemParam.NO2;
|
||||
// systemParam.no3 = systemParam.NO3;
|
||||
// systemParam.txt1 = systemParam.TXT1;
|
||||
// systemParam.txt2 = systemParam.TXT2;
|
||||
// systemParam.txt3 = systemParam.TXT3;
|
||||
// }
|
||||
if (JudgeConfig.isTrajectoryOpen) {
|
||||
systemParam.no1 = systemParam.NO1!.toString()!;
|
||||
systemParam.no2 = systemParam.NO2!.toString()!;
|
||||
systemParam.no3 = systemParam.NO3!.toString()!;
|
||||
systemParam.txt1 = systemParam.TXT1!;
|
||||
systemParam.txt2 = systemParam.TXT2!;
|
||||
systemParam.txt3 = systemParam.TXT3!;
|
||||
}
|
||||
const no1 = systemParam.no1;
|
||||
const no2 = systemParam.no2;
|
||||
const no3 = systemParam.no3;
|
||||
@ -344,128 +465,5 @@ export class LargeJudge extends BaseJudge implements BaseJudgeImpl {
|
||||
super.judgeEnd(judgeUI, that, isManual)
|
||||
};
|
||||
|
||||
private async GetJudgeBeginData(projects: Project[], carType: string, kssycs: string, isDdxk: boolean, ddxkTime: number, projectsCenterObj: Object, ddxkKsxmArr: string[], ddxkKfArr: string[], passingScore: number, wayno: number, name: string, lsh: string, idCard: string, isExam: boolean) {
|
||||
const examinerInfo = AppStorage.get<ExaminerInfoType>('examinerInfo')
|
||||
const examinerName = examinerInfo?.name || ""
|
||||
let currentParams: RouteParamsType = router.getParams() as RouteParamsType;
|
||||
const sczb = currentParams.sczb;
|
||||
const kfdm = currentParams.kfdm;
|
||||
const ksxm: JudgeKSXM[] = projects.map(project => {
|
||||
const temp: JudgeKSXM = {
|
||||
xmdm: Number(project.projectCode), xmxh: ''
|
||||
}
|
||||
return temp
|
||||
})
|
||||
const ykxm: number[] = (ddxkKsxmArr?.map(projectCenterCode => {
|
||||
const currentProject: ProjectInfo = Reflect.get(projectsCenterObj, projectCenterCode)
|
||||
return Number(currentProject.projectCode)
|
||||
})) || [];
|
||||
const kfxm: JudgeKFXM[] = isDdxk ? (ddxkKfArr?.map(kf => {
|
||||
return {
|
||||
xmdm: Number(kf.split(',')[0]), kfdm: kf.split(',')[1]
|
||||
} as JudgeKFXM
|
||||
})) : []
|
||||
const beginInfo: JudgeBeginObj = {
|
||||
kgid: '012',
|
||||
kgxm: decodeURI(examinerName || ''),
|
||||
exam: isExam ? 1 : 0,
|
||||
//是否回放
|
||||
replay: 0,
|
||||
//生成的轨迹文件
|
||||
track: '',
|
||||
xm: name,
|
||||
sex: 0,
|
||||
kslsh: lsh,
|
||||
sfzmhm: idCard,
|
||||
ksyy: '',
|
||||
kscx: carType,
|
||||
kkcs: Number(kssycs) || 2,
|
||||
sfyk: 0,
|
||||
ykkkcs: 1,
|
||||
wayno: Number(wayno),
|
||||
czlx: 0,
|
||||
kskssj: await systemDateTime.getCurrentTime(),
|
||||
passing: Number(passingScore),
|
||||
ksxm,
|
||||
//断点续考
|
||||
ddxk: isDdxk ? 1 : 0,
|
||||
ddkssj: ddxkTime || 0,
|
||||
ykxm,
|
||||
kfxm,
|
||||
yklc: 0,
|
||||
special: [],
|
||||
sczb: (sczb === undefined || sczb == '0') ? 0 : 1,
|
||||
sczbkf: kfdm,
|
||||
dmndg: this.mockLight,
|
||||
mfxx: this.mode === 5,
|
||||
mfxxn: this.mode === 3 || this.mode === 4
|
||||
}
|
||||
dConsole.info(JudgeTag, '5.获取开始考试数据完成')
|
||||
return beginInfo
|
||||
};
|
||||
|
||||
private async GetJudgeInitData(context: common.UIAbilityContext, markRuleListObj: object, carType: string, carName: string, systemparmArr: SYSTEM_PARAM[], carinfoArr: CAR_INFO[], examSubject: string, itemInfoObj: ItemInfos, judgeConfig: SyssetConfig[], carlist: string, mapPointArr: MAPPOINT[], mapPointItemArr: MAPITEMPOINTITEM[]) {
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const examType = carInfo?.examSubject == '2' ? 'km2' : 'km3'
|
||||
|
||||
let allitems: ItemInfo[] = [];
|
||||
if (examSubject == '2' && itemInfoObj) {
|
||||
const promiseItems = Reflect.ownKeys(itemInfoObj).map(async cdsbKey => {
|
||||
const cdsb: CDSBInfo = Reflect.get(itemInfoObj, cdsbKey);
|
||||
const model = await GetModelData(`/${cdsb.modelKey}.txt`, context);
|
||||
const temp: ItemInfo = {
|
||||
xmdm: cdsb?.xmdm || 0,
|
||||
xmxh: cdsb?.xmxh || "",
|
||||
model: model || ""
|
||||
};
|
||||
return temp;
|
||||
});
|
||||
// 等待所有的 Promise 解析完成
|
||||
allitems = await Promise.all(promiseItems);
|
||||
}
|
||||
|
||||
//获取版本号
|
||||
const mark: MarkRule[] = Reflect.ownKeys(markRuleListObj).map(ruleKey => {
|
||||
const current: MarkRule = Reflect.get(markRuleListObj, ruleKey)
|
||||
return current
|
||||
})
|
||||
const initInfo: JudgeInitObj = {
|
||||
sdkver: await examJudgeVersion(),
|
||||
appver: AppStorage.get<EnvironmentConfigurationType>('EnvironmentConfigurationType')?.version || "",
|
||||
kskm: Number(carInfo?.examSubject || "2"),
|
||||
kchp: carInfo?.plateNo || "",
|
||||
kchm: Number(carInfo?.carId || ""),
|
||||
kscx: carType,
|
||||
cxcode: '1',
|
||||
name: carName,
|
||||
carmodel: await GetModelData(`/${carType}.txt`, context) || "",
|
||||
allitems,
|
||||
iteminfo: [],
|
||||
systemparm: systemparmArr,
|
||||
mark,
|
||||
sysset: judgeConfig,
|
||||
itemInfoObj,
|
||||
carlist: carlist,
|
||||
carinfo: carinfoArr,
|
||||
};
|
||||
let km3Config: Km3JudgeInitConfig = {}
|
||||
if (examSubject == '3') {
|
||||
km3Config = {
|
||||
map_point: mapPointArr,
|
||||
map_point_item: mapPointItemArr,
|
||||
//科目三暂时为空
|
||||
iteminfo: [],
|
||||
roads: await GetModelData('/Roads.txt', context) || "",
|
||||
sharps: await GetModelData('/Sharps.txt', context) || ""
|
||||
};
|
||||
initInfo.map_point = km3Config.map_point
|
||||
initInfo.map_point_item = km3Config.map_point_item
|
||||
initInfo.iteminfo = km3Config.iteminfo
|
||||
initInfo.roads = km3Config.roads
|
||||
initInfo.sharps = km3Config.sharps
|
||||
}
|
||||
// 获取科目三的评判配置
|
||||
dConsole.info(JudgeTag, '3.获取评判初始化数据完成')
|
||||
return initInfo
|
||||
};
|
||||
}
|
||||
@ -94,7 +94,7 @@ export class SmallJudge extends BaseJudge implements BaseJudgeImpl {
|
||||
sczbkf: kfdm,
|
||||
dmndg: false,
|
||||
mfxx: false,
|
||||
mfxxn: false
|
||||
zeng: false
|
||||
}
|
||||
dConsole.info(JudgeTag, '5.获取开始考试数据完成')
|
||||
return beginInfo
|
||||
@ -102,7 +102,6 @@ export class SmallJudge extends BaseJudge implements BaseJudgeImpl {
|
||||
|
||||
public async GetJudgeInitData(context: common.UIAbilityContext, markRuleListObj: object, carType: string, carName: string, systemparmArr: SYSTEM_PARAM[], carinfoArr: CAR_INFO[], examSubject: string, itemInfoObj: ItemInfos, judgeConfig: SyssetConfig[], carlist: string, mapPointArr: MAPPOINT[], mapPointItemArr: MAPITEMPOINTITEM[]) {
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const examType = carInfo?.examSubject == '2' ? 'km2' : 'km3'
|
||||
dConsole.log(JudgeTag, "itemInfoObj", itemInfoObj)
|
||||
let allitems: ItemInfo[] = [];
|
||||
if (examSubject == '2' && itemInfoObj) {
|
||||
@ -121,11 +120,6 @@ export class SmallJudge extends BaseJudge implements BaseJudgeImpl {
|
||||
allitems = await Promise.all(promiseItems);
|
||||
}
|
||||
|
||||
//获取版本号
|
||||
// const mark: MarkRule[] = Reflect.ownKeys(markRuleListObj).map(ruleKey => {
|
||||
// const current: MarkRule = Reflect.get(markRuleListObj, ruleKey)
|
||||
// return current
|
||||
// })
|
||||
const mark: MarkRule[] = Object.values(markRuleListObj)
|
||||
const initInfo: JudgeInitObj = {
|
||||
sdkver: await examJudgeVersion(),
|
||||
@ -329,7 +323,6 @@ export class SmallJudge extends BaseJudge implements BaseJudgeImpl {
|
||||
}
|
||||
|
||||
public async JudgeEnd(judgeUI: JudgePage, that: JudgeBusiness, isManual?: boolean) {
|
||||
dConsole.info(JudgeTag, '收到远程结束考试消息2')
|
||||
super.judgeEnd(judgeUI, that, isManual)
|
||||
};
|
||||
}
|
||||
|
||||
@ -468,8 +468,9 @@ export function UploadRegulatoryCodeConversion(
|
||||
/**
|
||||
* 将PLC字符串转换为JSON对象
|
||||
*/
|
||||
export const PlcStrToJson = async (plc: string) => {
|
||||
export const PlcStrToJson = async (plc: string, plc2?: string) => {
|
||||
const plcArr = plc.split(',')
|
||||
const plc2Arr = plc2?.split(",") || []
|
||||
const p = plcArr.map((val, key) => {
|
||||
if (key !== 27 && key !== 92) {
|
||||
return Number(val);
|
||||
@ -477,6 +478,16 @@ export const PlcStrToJson = async (plc: string) => {
|
||||
return 0; // 或者返回 undefined,根据需求选择
|
||||
}
|
||||
});
|
||||
let gps2p: number[] = []
|
||||
if (plc2) {
|
||||
gps2p = plc2Arr.map((val, key) => {
|
||||
if (key !== 27 && key !== 92) {
|
||||
return Number(val);
|
||||
} else {
|
||||
return 0; // 或者返回 undefined,根据需求选择
|
||||
}
|
||||
});
|
||||
}
|
||||
const time = await systemTime.getCurrentTime()
|
||||
const gps2: Gps = TestRealExam.gps2
|
||||
const radar: Radar = TestRealExam.radar
|
||||
@ -553,7 +564,30 @@ export const PlcStrToJson = async (plc: string) => {
|
||||
// 角度搜星数
|
||||
jdsxs: Number(plcArr[92].split('-')[1]) || 0
|
||||
},
|
||||
gps2: gps2,
|
||||
gps2: plc2 ? {
|
||||
//办卡类型 定位差分状态
|
||||
bklx: gps2p[56],
|
||||
dwzt: gps2p[83],
|
||||
// 角度差分状态
|
||||
jdzt: Number(plc2Arr[92].split('-')[0]),
|
||||
//gps数据
|
||||
//gps时间 经度 纬度 航向角 俯仰角 海拔高 高度差 速度
|
||||
sj: time,
|
||||
jd: gps2p[96],
|
||||
wd: gps2p[95],
|
||||
hxj: gps2p[90],
|
||||
fyj: gps2p[91],
|
||||
hbg: gps2p[85],
|
||||
gdc: gps2p[86],
|
||||
sd: gps2p[97],
|
||||
//龄期 经度因子 纬度因子 定位搜星数
|
||||
age: gps2p[87],
|
||||
jdyz: gps2p[89],
|
||||
wdyz: gps2p[88],
|
||||
dwsxs: gps2p[84] || 0,
|
||||
// 角度搜星数
|
||||
jdsxs: Number(plc2Arr[92].split('-')[1]) || 0
|
||||
} : gps2,
|
||||
vision,
|
||||
radar,
|
||||
extend
|
||||
|
||||
@ -93,6 +93,15 @@ struct TerminalInfoPage {
|
||||
this.config.udpOppositeIp = value;
|
||||
}
|
||||
})
|
||||
if (this.config.carType === "4") {
|
||||
blockComponent({
|
||||
label: "后置机2IP",
|
||||
value: this.config.udpOppositeIpTwo,
|
||||
change: (value: string) => {
|
||||
this.config.udpOppositeIpTwo = value;
|
||||
}
|
||||
})
|
||||
}
|
||||
blockComponent({
|
||||
label: "后置机响应端口",
|
||||
value: this.config.udpOppositeIpPort,
|
||||
@ -102,7 +111,7 @@ struct TerminalInfoPage {
|
||||
})
|
||||
if (this.config.carType === "4") {
|
||||
blockComponent({
|
||||
label: "后置机响应端口2",
|
||||
label: "后置机2响应端口",
|
||||
value: this.config.udpOppositeIpPortTwo,
|
||||
change: (value: string) => {
|
||||
this.config.udpOppositeIpPortTwo = value;
|
||||
|
||||
@ -987,6 +987,8 @@ struct UserInfoPage {
|
||||
this.startExamDialogController.close()
|
||||
return { code: -200 }
|
||||
}
|
||||
let startTime = new Date()
|
||||
AppStorage.setOrCreate("startTime", startTime)
|
||||
const drvexam: DrvexamType = {
|
||||
lsh: this.currentUser.lsh,
|
||||
kskm: this.carInfo.examSubject,
|
||||
@ -995,7 +997,7 @@ struct UserInfoPage {
|
||||
ksysfzmhm: this.currentUser.ksy1sfzmhm || '',
|
||||
ksxl: this.currentUser.xldm,
|
||||
zp: photoBase64,
|
||||
kssj: dayTs().format("YYYY-MM-DD HH:mm:ss") || '',
|
||||
kssj: dayTs(startTime).format("YYYY-MM-DD HH:mm:ss") || '',
|
||||
kchp: decodeURI(this.carInfo.plateNo || ""),
|
||||
Ksy2sfzmhm: this.currentUser.ksy2sfzmhm || ''
|
||||
}
|
||||
|
||||
@ -45,8 +45,7 @@ class JudgeUdpBusiness {
|
||||
return JudgeUdpBusiness.instance
|
||||
}
|
||||
|
||||
async getMessageHeartbeat(msg: string): Promise<number[]> {
|
||||
// dConsole.info(Tag, msg, this.lsh)
|
||||
async getMessageHeartbeat(msg: string, gps2?: string): Promise<number[]> {
|
||||
if (!this.business || !this.performInfo) {
|
||||
return this.getOBDMessageHeart(msg)
|
||||
}
|
||||
@ -60,6 +59,7 @@ class JudgeUdpBusiness {
|
||||
const ascsbxhArr = StringToASCII(this.getSbxh(this.business.xmdm, this.business.xmxh))
|
||||
|
||||
const plcData = await this.getPlcData(msg);
|
||||
const plc2Data = await this.getPlcData(gps2 || "")
|
||||
let param: number[] = [plcData.sensor.zfxd, plcData.sensor.yfxd, plcData.sensor.shtd, plcData.sensor.ygd, plcData.sensor.jgd, plcData.sensor.skd, plcData.sensor.dh1, plcData.sensor.dh2, plcData.sensor.lhq, plcData.sensor.jsc, plcData.sensor.ssc, plcData.sensor.fsc, plcData.sensor.lb, plcData.sensor.mkg, plcData.sensor.aqd]
|
||||
.concat(GetDwStatusType(plcData.sensor.dw))
|
||||
.concat([0, 0, plcData.sensor.ygq, plcData.sensor.wd, 0])
|
||||
@ -67,6 +67,13 @@ class JudgeUdpBusiness {
|
||||
const translateProject = this.getTranslateProject(1);
|
||||
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)
|
||||
let translateGps2Jd: number = 0
|
||||
let translateGps2Wd: number = 0
|
||||
if (gps2) {
|
||||
translateGps2Jd = Number(this.convertGpsCoord2(plc2Data.gps.wd).toFixed(gpsDigit)) * Math.pow(10, gpsDigit);
|
||||
translateGps2Wd = Number(this.convertGpsCoord2(plc2Data.gps.jd).toFixed(gpsDigit)) * Math.pow(10, gpsDigit)
|
||||
}
|
||||
|
||||
const translateProjects = translateProject.map(numStr => NumberToByteArray(parseInt(numStr, 2), 8)[0])
|
||||
let tempSd = Number((plcData.gps.sd * 1.852).toFixed(0))
|
||||
if (tempSd < 1) {
|
||||
@ -114,10 +121,13 @@ class JudgeUdpBusiness {
|
||||
NumberToByteArray(this.business.kfArr.length, 8),
|
||||
//n个扣分序号
|
||||
this.business.kfArr.map(kf => NumberToByteArray(kf.kfxh!, 8)[0]),
|
||||
|
||||
|
||||
//牵引车第二gps精度、纬度
|
||||
NumberToByteArray(0, 4 * 8), NumberToByteArray(0, 4 * 8),
|
||||
NumberToByteArray(translateGps2Jd, 4 * 8),
|
||||
NumberToByteArray(translateGps2Wd, 4 * 8),
|
||||
//牵引车第二航向角
|
||||
NumberToByteArray(0, 2 * 8),
|
||||
NumberToByteArray(plc2Data?.gps?.hxj || 0, 2 * 8),
|
||||
//摩托压线 Byte[20],
|
||||
NumberToByteArray(0, 20 * 8),
|
||||
//考试用时
|
||||
|
||||
@ -6,14 +6,17 @@ import UdpClient from '../UdpUtils'
|
||||
class ObtainUdpBusiness {
|
||||
// 三代机UDP
|
||||
private thirdGenerationMachineUdp?: UdpClient
|
||||
private thirdGenerationMachineUdpGps2?: UdpClient
|
||||
// 几代机
|
||||
private modelNo: string = "3"
|
||||
private config?: EnvironmentConfigurationType
|
||||
|
||||
constructor() {
|
||||
this.modelNo = GlobalConfig.modelNo || ""
|
||||
}
|
||||
|
||||
init(config: EnvironmentConfigurationType) {
|
||||
this.config = config
|
||||
switch (this.modelNo) {
|
||||
case "0":
|
||||
this.initSecondaryBoard()
|
||||
@ -52,6 +55,25 @@ class ObtainUdpBusiness {
|
||||
}
|
||||
}
|
||||
|
||||
onGps2Msg(callback: (data: string) => void) {
|
||||
switch (this.modelNo) {
|
||||
case "0":
|
||||
this.onSecondaryBoardMsg(callback)
|
||||
break
|
||||
case "1":
|
||||
this.onFirstGenerationMsg(callback)
|
||||
break
|
||||
case "2":
|
||||
this.onSecondGenerationMsg(callback)
|
||||
break
|
||||
case "3":
|
||||
this.onThirdGenerationGps2Msg(callback)
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
offMsg(cb: Function) {
|
||||
switch (this.modelNo) {
|
||||
case "0":
|
||||
@ -61,7 +83,23 @@ class ObtainUdpBusiness {
|
||||
case "2":
|
||||
break
|
||||
case "3":
|
||||
this.thirdGenerationMachineUdp!.offMsg(cb)
|
||||
this.thirdGenerationMachineUdpGps2!.offMsg(cb)
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
offGps2Msg(cb: Function) {
|
||||
switch (this.modelNo) {
|
||||
case "0":
|
||||
break
|
||||
case "1":
|
||||
break
|
||||
case "2":
|
||||
break
|
||||
case "3":
|
||||
this.thirdGenerationMachineUdpGps2!.offMsg(cb)
|
||||
break
|
||||
default:
|
||||
break
|
||||
@ -99,6 +137,7 @@ class ObtainUdpBusiness {
|
||||
break
|
||||
case "3":
|
||||
this.thirdGenerationMachineUdp!.close()
|
||||
this.thirdGenerationMachineUdpGps2?.close()
|
||||
break
|
||||
default:
|
||||
break
|
||||
@ -120,8 +159,6 @@ class ObtainUdpBusiness {
|
||||
// 三代机udp初始化
|
||||
private initThirdGeneration(config: EnvironmentConfigurationType) {
|
||||
try {
|
||||
// let config: EnvironmentConfigurationType =
|
||||
// AppStorage.get<EnvironmentConfigurationType>("EnvironmentConfiguration")!
|
||||
console.log("获取udp设置", JSON.stringify(config))
|
||||
this.thirdGenerationMachineUdp = new UdpClient()
|
||||
this.thirdGenerationMachineUdp.create(config.udplocalIp!, config.udplocalIpPort!, config.udpOppositeIp!,
|
||||
@ -130,6 +167,11 @@ class ObtainUdpBusiness {
|
||||
} catch (e) {
|
||||
console.error(UDPTag, "三代机 udp失败")
|
||||
}
|
||||
if (config.carType === "4") {
|
||||
this.thirdGenerationMachineUdpGps2 = new UdpClient()
|
||||
this.thirdGenerationMachineUdpGps2.create(config.udplocalIp!, config.udplocalIpPortTwo!, config.udpOppositeIpTwo!, config.udpOppositeIpPortTwo!)
|
||||
this.thirdGenerationMachineUdpGps2.setDealMethod(this.dealThirdGenerationMsg)
|
||||
}
|
||||
}
|
||||
|
||||
private dealSecondaryBoardMsg() {
|
||||
@ -176,6 +218,10 @@ class ObtainUdpBusiness {
|
||||
this.thirdGenerationMachineUdp!.onMsg(cb)
|
||||
}
|
||||
|
||||
private onThirdGenerationGps2Msg(cb: Function) {
|
||||
this.thirdGenerationMachineUdpGps2!.onMsg(cb)
|
||||
}
|
||||
|
||||
private sendSecondaryBoardMsg(data: string | ArrayBuffer) {
|
||||
|
||||
}
|
||||
@ -190,6 +236,9 @@ class ObtainUdpBusiness {
|
||||
|
||||
private sendThirdGenerationMsg(data: string | ArrayBuffer) {
|
||||
this.thirdGenerationMachineUdp!.sendMsg(data)
|
||||
if (this.config?.carType === '4') {
|
||||
this.thirdGenerationMachineUdpGps2!.sendMsg(data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -29,6 +29,7 @@ let udpLsh = 1
|
||||
let udpIndex = 0
|
||||
let kfDirective: number | undefined = undefined
|
||||
let signNum: number = 0
|
||||
let gps2: string | undefined = undefined
|
||||
|
||||
function checkLsh() {
|
||||
let now = dayTs(new Date()).format().split(" ")[0]
|
||||
@ -88,6 +89,9 @@ workerPort.onmessage = async (e: MessageEvents) => {
|
||||
|
||||
// 初始化函数
|
||||
function initFn(result: InitData) {
|
||||
if (result.config?.carType === '4') {
|
||||
|
||||
}
|
||||
// 初始化差分校正TCP
|
||||
DifferentialSignal.init(result.config!);
|
||||
// 定时发送TCP消息
|
||||
@ -136,7 +140,7 @@ function getDataFn(config: EnvironmentConfigurationType) {
|
||||
}
|
||||
if (udpIndex % 5 === 0) {
|
||||
checkLsh()
|
||||
let byte = await JudgeUdpBusinessInstance.getMessageHeartbeat(data)
|
||||
let byte = await JudgeUdpBusinessInstance.getMessageHeartbeat(data, gps2)
|
||||
JudgeUdpBusinessInstance.sendData(byte, udpLsh)
|
||||
}
|
||||
udpIndex++
|
||||
@ -148,6 +152,28 @@ function getDataFn(config: EnvironmentConfigurationType) {
|
||||
} as WorkerBackMessage))
|
||||
}
|
||||
})
|
||||
if (config.carType === '4') {
|
||||
ObtainUdpBusinessInstance.onGps2Msg(async (data: string) => {
|
||||
if (data !== "" && config.carType !== "2") {
|
||||
try {
|
||||
const res = await SerialPortService.getData()
|
||||
if (res.length > 0) {
|
||||
const dataArray = data.split(",");
|
||||
dataArray[28] = res[9].toString();
|
||||
data = dataArray.join(",");
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(SerialPortTag, "获取档位信号失败", err)
|
||||
}
|
||||
gps2 = data
|
||||
workerPort.postMessage(
|
||||
JSON.stringify({
|
||||
type: WorkerBackMessageType.ObtainUdpGps2Data,
|
||||
data: data
|
||||
} as WorkerBackMessage))
|
||||
}
|
||||
})
|
||||
}
|
||||
// 中心UDP回执消息
|
||||
CenterUDPBusinessInstance.onMsg((data: CenterCallBackMsgType) => {
|
||||
// TODO
|
||||
|
||||
@ -1,20 +1,18 @@
|
||||
{
|
||||
"lockfileVersion": 2,
|
||||
"lockfileVersion": 1,
|
||||
"ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.",
|
||||
"specifiers": {
|
||||
"@ohos/hypium@1.0.19": "@ohos/hypium@1.0.19",
|
||||
"@ohos/crypto-js@2.0.3": "@ohos/crypto-js@2.0.3"
|
||||
"@ohos/crypto-js@2.0.3": "@ohos/crypto-js@2.0.3",
|
||||
"@ohos/hypium@1.0.19": "@ohos/hypium@1.0.19"
|
||||
},
|
||||
"packages": {
|
||||
"@ohos/hypium@1.0.19": {
|
||||
"resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/hypium/-/hypium-1.0.19.har",
|
||||
"integrity": "sha512-cEjDgLFCm3cWZDeRXk7agBUkPqjWxUo6AQeiu0gEkb3J8ESqlduQLSIXeo3cCsm8U/asL7iKjF85ZyOuufAGSQ==",
|
||||
"registryType": "ohpm"
|
||||
},
|
||||
"@ohos/crypto-js@2.0.3": {
|
||||
"resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/crypto-js/-/crypto-js-2.0.3.har",
|
||||
"integrity": "sha512-LuHaR1kD5PxnOXnuR1fWvPwGtbed9Q/QGzk6JOh8y5Wdzvi8brPesODZiaWf9scOVRHsbTPOtZw91vWB35p1vQ==",
|
||||
"registryType": "ohpm"
|
||||
"integrity": "sha512-LuHaR1kD5PxnOXnuR1fWvPwGtbed9Q/QGzk6JOh8y5Wdzvi8brPesODZiaWf9scOVRHsbTPOtZw91vWB35p1vQ=="
|
||||
},
|
||||
"@ohos/hypium@1.0.19": {
|
||||
"resolved": "https://ohpm.openharmony.cn/ohpm/@ohos/hypium/-/hypium-1.0.19.har",
|
||||
"integrity": "sha512-cEjDgLFCm3cWZDeRXk7agBUkPqjWxUo6AQeiu0gEkb3J8ESqlduQLSIXeo3cCsm8U/asL7iKjF85ZyOuufAGSQ=="
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user