大车代码合并

小红球udp开始时间修改
This commit is contained in:
lixiao 2025-10-30 16:10:45 +08:00
parent a7c85152a4
commit fca8d0ed08
16 changed files with 342 additions and 195 deletions

View File

@ -1,5 +1,5 @@
{
"lockfileVersion": 2,
"lockfileVersion": 1,
"ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.",
"specifiers": {},
"packages": {}

View File

@ -140,6 +140,7 @@ export interface EnvironmentConfigurationType {
// 前置机响应后置机端口2
udplocalIpPortTwo?: string,
udpOppositeIp?: string,
udpOppositeIpTwo?: string,
// 后置机响应端口
udpOppositeIpPort?: string,

View File

@ -659,7 +659,7 @@ export interface JudgeBeginObj {
sczbkf?: JudgeKFXM[]
dmndg: boolean
mfxx: boolean
mfxxn: boolean
zeng: boolean
}
export interface JudgeXMJS {

View File

@ -72,6 +72,8 @@ export interface WorkerBackMessage {
export enum WorkerBackMessageType {
// 后置机信息
ObtainUdpData = 'obtainUdpData',
// 后置机GPS2消息
ObtainUdpGps2Data = 'obtainUdpGps2Data',
// 中心消息
CenterUdpData = 'centerUdpData',
// 远程开始考试

View File

@ -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()
//断点续考

View File

@ -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)

View File

@ -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,

View File

@ -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
};
}

View File

@ -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)
};
}

View File

@ -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

View File

@ -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;

View File

@ -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 || ''
}

View File

@ -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),
//考试用时

View File

@ -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)
}
}
}

View File

@ -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

View File

@ -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=="
}
}
}