fix: 完善Date工具函数 对毫秒的支持,以及完善judge工具函数的完善

This commit is contained in:
wangzhongjie 2025-06-23 11:13:58 +08:00
parent f604c1c8f2
commit 11e738bb47
9 changed files with 308 additions and 100 deletions

View File

@ -1,4 +1,4 @@
import { AmplifyItem, PerLane } from '../model';
import { AmplifyItem, DefaultJudgeConfigObj, PerLane, PLCType } from '../model';
export const AmplifyArr: AmplifyItem[] = [
{ name: '直线', projectCode: '3', projectCodeCenter: '40300' },
@ -45,4 +45,223 @@ export const InitialPerLane: PerLane = {
InShapeAttr: 0,
ShapeNo: 0,
CrossPointNo: 0
};
};
export const TestRealExam: PLCType = {
sensor: {
aqd: 0,
mkg: 0,
ssc: 0,
jsc: 0,
fsc: 0,
lhq: 0,
lb: 0,
skd: 0,
jgd: 0,
ygd: 1,
zfxd: 0,
yfxd: 0,
shtd: 0,
wd: 0,
ygq: 0,
dh1: 1,
dh2: 0,
fdjzs: 2400,
dw: 0,
cs: 5.8,
fxp: -5,
ljmc: 23,
lcmc: 0,
csbzh: 0,
csbyh: 0,
csbyq: 0,
csbzq: 0,
csb1: 3000,
csb2: 0,
csb3: 0,
csb4: 0,
zy: 0,
tbp: 0,
hsj: 0,
dcj: 0,
gx: 123070,
yl: 0
},
gps: {
bklx: 2,
dwzt: 4,
jdzt: 3,
sj: 1680840026000,
jd: 113.12345678,
wd: 31.12345678,
hxj: 50.1234,
fyj: 1.1234,
hbg: 22.123,
gdc: 1.123,
sd: 10.9,
age: 1.2,
jdyz: 0.001,
wdyz: 0.001,
dwsxs: 17,
jdsxs: 14
},
gps2: {
bklx: 1,
dwzt: 4,
jdzt: 4,
sj: 1680840026000,
jd: 113.12345678,
wd: 31.12345678,
hxj: 50.1234,
fyj: 1.1234,
hbg: 22.123,
gdc: 1.123,
sd: 10.9,
age: 1.2,
jdyz: 0.001,
wdyz: 0.001,
dwsxs: 17,
jdsxs: 14
},
vision: {
sj: 1680840026000,
score: 0.85,
zyjd: 60.23,
sxjd: 65.33,
ytjd: 68.45,
fxp: 2,
ch: 0,
hld: 1
},
radar: {
sj: 1680840026000,
zxh: 999,
qfsj: [{
bh: 1,
lx: 1,
jl: 2.35,
sd: 3.68
}, {
bh: 2,
lx: 2,
jl: 4.82,
sd: 5.24
}],
hfsj: [{
bh: 1,
lx: 1,
jl: 2.35,
sd: 3.68
}, {
bh: 2,
lx: 2,
jl: 4.82,
sd: 5.24
}],
zqsj: [{
bh: 1,
lx: 1,
jl: 2.35,
sd: 3.68
}, {
bh: 2,
lx: 2,
jl: 4.82,
sd: 5.24
}],
zhsj: [{
bh: 1,
lx: 1,
jl: 2.35,
sd: 3.68
}, {
bh: 2,
lx: 2,
jl: 4.82,
sd: 5.24
}],
zcsj: [{
bh: 1,
lx: 1,
jl: 2.35,
sd: 3.68
}, {
bh: 2,
lx: 2,
jl: 4.82,
sd: 5.24
}],
yqsj: [{
bh: 1,
lx: 1,
jl: 2.35,
sd: 3.68
}, {
bh: 2,
lx: 2,
jl: 4.82,
sd: 5.24
}],
yhsj: [{
bh: 1,
lx: 1,
jl: 2.35,
sd: 3.68
}, {
bh: 2,
lx: 2,
jl: 4.82,
sd: 5.24
}],
ycsj: [{
bh: 1,
lx: 1,
jl: 2.35,
sd: 3.68
}, {
bh: 2,
lx: 2,
jl: 4.82,
sd: 5.24
}],
fqsj: [{
bh: 1,
lx: 1,
jl: 2.35,
sd: 3.68
}, {
bh: 2,
lx: 2,
jl: 4.82,
sd: 5.24
}],
qfwt: { xrjl: 2.357, zawjl: 3.608 },
rcyz: 1,
show: [{ bh: 1, zb: [{ x: 0, y: 1 }, { x: 0, y: 1 }, { x: 0, y: 1 }, { x: 0, y: 1 }] },
{ bh: 2, zb: [{ x: 0, y: 1 }, { x: 0, y: 1 }, { x: 0, y: 1 }, { x: 0, y: 1 }] }]
},
extend: {}
}
export const DefaultJudgeConfigData: DefaultJudgeConfigObj = {
//结束考试方式 0-不合格继续 1-考试不合格报靠边停车 2-不合格不报靠边 3-训练不合格报靠边 4-自动退出 5-不合格自动退出
param_302: '5',
param_332: '',
//是否能进行人工操作 0-不能人工评判 1-不能人工进项目 3-都不能
param_342: '',
//有项目未结束时可以靠边停车 0-否 1-是
param_343: '1',
//考试未结束且有扣分,是否可以退出
param_344: '0',
//直线行驶中是否可以进其它项目 0-否 1-是
param_348: '0',
//车上是否能点结束考试 0:否 1:是
param_353: '0',
//是否启动断电续考 0:否 1:是
param_369: '1',
//是否显示应考里程
param_375: '0',
//里程不够允许手工点靠边停车
param_387: '0',
//监管模式有扣分续考0-否++1-是+把上次未考完的扣分带下来重新考试)
param_432: '1'
}

View File

@ -143,12 +143,17 @@ export interface Sensor {
dcj: number
gx: number
yl: number
yy: number
sde: number
xhd: string
rmndg: number
wav: number
mndg: string
csb1?: number
csb2?: number
csb3?: number
csb4?: number
yy?: number
sde?: number
xhd?: string
rmndg?: number
wav?: number
mndg?: string
}
export interface Gps {
@ -203,13 +208,13 @@ interface Qfwt {
zawjl: number
}
export interface Plc {
export interface PLCType {
sensor: Sensor,
gps: Gps,
gps2: Gps,
vision: Vision,
radar: Radar,
extend: object
extend: ExtendType
//轨迹回放需要
method?: string
itemno?: string
@ -217,6 +222,9 @@ export interface Plc {
serial?: 1 | 2
}
export interface ExtendType {}
interface Qfsj {
bh: number
lx: number

View File

@ -18,6 +18,7 @@ import BottomMessageComponent from './Index/BottomMessage';
import LoadingComponent from './Index/Loading';
import Prompt from '@system.prompt';
import { DifferentialAndSignal } from '../utils/business/DifferentialAndSignalWorker';
import dayTs from '../utils/Date';
@Entry
@ -61,6 +62,10 @@ struct Index {
async aboutToAppear() {
console.log("首页 aboutToAppear")
const date = new Date()
const getMilliseconds = date.getMilliseconds()
const timeStr = dayTs().format('YYYYMMDDHHmmss.SS')
console.log(getMilliseconds.toString(), "时间测试", timeStr)
await UseAuth(this.context)
this.ratio = AppStorage.get<BaseInfoType>('baseInfo')?.ratio || 1.4
this.angle = 0

View File

@ -6,7 +6,6 @@ import LoadingPopup from './compontents/judge/LoadingPopup';
import DeductedPopup from './compontents/judge/DeductionPopup';
import AmplifyPopup from './compontents/judge/AmplifyPopup';
import Judge from './judgeSDK/judge';
import { defaultJudgeConfigObj } from './judgeSDK/utils//judgeCommon';
import { uploadExamMileage } from '../api/judge';
import DwztErrorPopup from './compontents/judge/DwztErrorPopup';
import MsgPopup from './compontents/judge/MsgPopup';
@ -50,6 +49,7 @@ import dayTs from '../utils/Date';
import { CutArray, FormatTimeFlexible, GetCurrentTime } from '../utils/Common';
import FileUtils from '../utils/FileUtils';
import SignalTrajectoryDialog from './Judge/SignalTrajectoryDialog';
import { DefaultJudgeConfigData } from '../mock';
@Entry
@ -94,7 +94,7 @@ struct Index {
@State itemInfoObj?: ItemInfos = {}
@State timer: number = 0
@State judgeConfig: SyssetConfig[] = []
@State judgeConfigObj: DefaultJudgeConfigObj = defaultJudgeConfigObj
@State judgeConfigObj: DefaultJudgeConfigObj = DefaultJudgeConfigData
//流水号
@State lsh: string = ''
@State kszp: string = ''

View File

@ -1,5 +1,5 @@
import libJudgeSdk from 'libjudgesdk.so';
import { JudgeBeginObj, JudgeInitObj, Plc } from '../../model';
import { JudgeBeginObj, JudgeInitObj, PLCType } from '../../model';
/**
* 苏仁君
@ -43,7 +43,7 @@ export async function examJudgeInit(data: JudgeInitObj) {
*
* @desc 执行实时考试过程 实时传递传感信息
*/
export async function examJudgeRealExam(data: Plc) {
export async function examJudgeRealExam(data: PLCType) {
const str = JSON.stringify(data);
const temp: number = libJudgeSdk.examJudgeRealExam(str, str.length);
return await handle(temp, 'examJudgeRealExam')

View File

@ -1,15 +1,12 @@
import { testRealExam } from '../dataTest/index';
import { ArrayToByteArray, NumberToByteArray } from '../../../utils/Common';
import systemTime from '@ohos.systemDateTime';
import { TestRealExam } from '../../mock';
import { CarInfoType, DefaultJudgeConfigObj, ExtendType, Gps, LANE, PLCType, Radar, Vision } from '../../model';
import { ArrayToByteArray, NumberToByteArray } from '../../utils/Common';
import dayTs from '../../utils/Date';
import { CarInfoType } from '../../../model';
import { DefaultJudgeConfigObj, Gps, LANE, Plc, Radar, Vision } from '../../../model/Judge';
interface Extend {}
// 中心信号转换
export const getTranslateSignals = (tempItems: number[]) => {
export const GetTranslateSignals = (tempItems: number[]) => {
const len = Math.floor(tempItems.length / 8);
const arr: string[] = [];
for (let i = 0; i < len; i++) {
@ -21,7 +18,7 @@ export const getTranslateSignals = (tempItems: number[]) => {
}
// c++评判考车行驶状态转换
export function getCarStatus(status: -1 | 0 | 1): string {
export function GetCarStatus(status: -1 | 0 | 1): string {
switch (status) {
case -1:
return '后退'
@ -35,7 +32,7 @@ export function getCarStatus(status: -1 | 0 | 1): string {
}
// 当前考车中心状态转换
export function getCarStatusType(carzt?: number) {
export function GetCarStatusType(carzt?: number) {
switch (carzt) {
case -1:
return [1, 0]
@ -49,7 +46,7 @@ export function getCarStatusType(carzt?: number) {
}
// 获取档位信号
export function getDwStatusType(dw?: number) {
export function GetDwStatusType(dw?: number) {
switch (dw) {
case 0:
return [0, 0, 0, 0]
@ -72,7 +69,7 @@ export function getDwStatusType(dw?: number) {
// 中心实时项目状态转换
export function getCenterProjectStatus(status?: number): string {
export function GetCenterProjectStatus(status?: number): string {
switch (status) {
//不考
case 0:
@ -192,7 +189,7 @@ export function getKmProjectCancelVoice(examSubject: number, projectCode: number
}
// 上传监管数据code转换
export function promptWxCode(
export function UploadRegulatoryCodeConversion(
jkid: '17C51' | '17C52' | '17C54' | '17C55' | '17C53' | '17C56',
code: number
) {
@ -448,7 +445,7 @@ export function promptWxCode(
}
// 获取plc数据
export const plcStrToJson = async (plc: string) => {
export const PlcStrToJson = async (plc: string) => {
const plcArr = plc.split(',')
const p = plcArr.map((val, key) => {
if (key !== 27 && key !== 92) {
@ -506,11 +503,11 @@ export const plcStrToJson = async (plc: string) => {
// wav: 0,
// mndg: ''
// }
const gps2: Gps = testRealExam.gps2
const radar: Radar = testRealExam.radar
const vision: Vision = testRealExam.vision
const extend: Extend = {};
const tempData: Plc = {
const gps2: Gps = TestRealExam.gps2
const radar: Radar = TestRealExam.radar
const vision: Vision = TestRealExam.vision
const extend: ExtendType = {};
const tempData: PLCType = {
sensor: {
//安全带 车门门开关 手刹 脚刹 副刹 离合器 喇叭 示宽灯 近光灯 远光灯
aqd: p[19],
@ -589,7 +586,7 @@ export const plcStrToJson = async (plc: string) => {
return tempData
}
export const plcStrToWXJson = async (plc: string) => {
export const PlcStrToWXJson = async (plc: string) => {
const plcArr = plc.split(',')
const p = plc.split(',').map((val, key) => {
if (key !== 27 && key !== 92) {
@ -646,10 +643,13 @@ export const plcStrToWXJson = async (plc: string) => {
return wuXiDataStr
}
export const senorToWXDataStr = async (tempData: Plc) => {
export const senorToWXDataStr = async (tempData: PLCType) => {
const sensor = tempData.sensor
const gps = tempData.gps
const timeStr = await getTimeStr()
// 格式为20250623020817.14
// const timeStr = await getTimeStr()
const timeStr = dayTs().format('YYYYMMDDHHmmss.SS')
const judgeSignal: number[] = [
//车门 安全带 熄火 发动机启动 左转向 右转向 前照灯近灯 前照灯远灯

View File

@ -12,8 +12,6 @@ import JudgeTask from './utils/judgeTask';
import { JudgeConfig } from '../../config';
import { GetSyncData, SqlInsertTable } from '../../utils/table/Operation';
import { getCarStatus, getCenterProjectStatus, plcStrToJson, plcStrToWXJson, promptWxCode } from './utils/judgeCommon';
import { uploadExamProgressData, writeObjectOut } from '../../api/judge';
import { endRecordVideo, saveStartRecordVideo } from '../../utils/Video';
import common from '@ohos.app.ability.common';
@ -45,7 +43,7 @@ import {
KmItem,
LANE,
MarkRule,
Plc,
PLCType,
ProjectInfo,
RecordHandleType,
RegulatoryInterfaceParams,
@ -69,6 +67,13 @@ import {
examJudgeSoundEnd,
examJudgeVersion
} from '../Judge/JudgeUtils';
import {
GetCarStatus,
GetCenterProjectStatus,
PlcStrToJson,
PlcStrToWXJson,
UploadRegulatoryCodeConversion
} from '../Judge/utils';
const judgeTag = 'SURENJUN_JUDGE'
@ -279,7 +284,7 @@ export default class Judge {
return true
}
}
private tempData?: Plc
private tempData?: PLCType
//实时计算gps经纬度距离
handDistance = async () => {
const dwzt = this.tempData?.gps?.dwzt || "";
@ -421,18 +426,18 @@ export default class Judge {
private kfArr?: MarkRule[]
//所有的科目考试项目(大车&小车)
private kmItems: JudgeConfigObjKmItems
private plcData?: Plc
private plcData?: PLCType
// 获取plc数据
getPlcData = async (plc: string) => {
await this.fileLog?.setPlcProgressData(plc)
//plc字符串转化成评判初始化数据
const tempData = await plcStrToJson(plc);
const tempData = await PlcStrToJson(plc);
//模拟灯光回放时刻
tempData.sensor.rmndg = this.rmndg;
//模拟灯灯光灯光项目
tempData.sensor.mndg = this.mndgStr || "";
//plc字符串转化成无锡所过程数据
const wuXiDataStr = await plcStrToWXJson(plc)
const wuXiDataStr = await PlcStrToWXJson(plc)
this.plcData = tempData
await this.fileLog?.setExamJudgeWuxiProgressData(wuXiDataStr)
this.tempData = tempData
@ -486,7 +491,7 @@ export default class Judge {
this.checkExamIsEnd(true)
return
}
const msg: Plc = JSON.parse(strArr[num]);
const msg: PLCType = JSON.parse(strArr[num]);
num++
// 4.过程数据
this.tempData = msg
@ -561,7 +566,7 @@ export default class Judge {
if (temp.code === 2300007) {
this.isJudgeDisConnect = true;
}
promptWxCode('17C52', temp.code || 0)
UploadRegulatoryCodeConversion('17C52', temp.code || 0)
}
// 项目结束接口同步
endProject = async (ksxm: number) => {
@ -596,7 +601,7 @@ export default class Judge {
this.isJudgeDisConnect = true;
}
console.info(judgeTag, '项目结束 end')
promptWxCode('17C55', temp.code || 0)
UploadRegulatoryCodeConversion('17C55', temp.code || 0)
}
private artSubject3ProjectsCodesArr: number[] = [3, 9, 4, 10, 12, 11]
private lane: LANE = {
@ -656,7 +661,7 @@ export default class Judge {
if (temp.code === 2300007) {
this.isJudgeDisConnect = true
}
promptWxCode('17C54', temp.code || 0)
UploadRegulatoryCodeConversion('17C54', temp.code || 0)
console.info(judgeTag, '上传照片 end')
}
@ -966,7 +971,7 @@ export default class Judge {
//考车状态
case 4:
this.carztStr = getCarStatus(carzt);
this.carztStr = GetCarStatus(carzt);
break;
//考试结束
@ -1292,7 +1297,7 @@ export default class Judge {
this.isJudgeDisConnect = true
}
console.info(judgeTag, '项目扣分 end')
promptWxCode('17C53', temp?.code || 0)
UploadRegulatoryCodeConversion('17C53', temp?.code || 0)
}
// 评判语音提示
goJudgeVoice = async (sound: JudgeSound) => {
@ -1436,7 +1441,7 @@ export default class Judge {
router.back()
}, 90 * 1000)
const temp = await this.sendWriteObjectOut(data, filePath);
promptWxCode('17C56', temp?.code || 0)
UploadRegulatoryCodeConversion('17C56', temp?.code || 0)
if (temp.code != 1) {
avPlayer?.playAudio(['voice/监管失败.mp3'])
@ -1733,7 +1738,7 @@ export default class Judge {
const examSubject = this.judgeUI.examSubject;
const tempItems: TKmItem[] = (examSubject == '2' ? testKm2Items : testKm3Items).map(item => {
const kmItem: KmItem = Reflect.get(this.kmItems, item.code)
const status = getCenterProjectStatus(kmItem.status)
const status = GetCenterProjectStatus(kmItem.status)
const temp: TKmItem = {
code: item.code, status
}

View File

@ -45,6 +45,7 @@ class DayTs {
'h{2}': (dateData: DateData) => DayTs._paddingZero(dateData.getHours() % 12),
'm{2}': (dateData: DateData) => DayTs._paddingZero(dateData.getMinutes()),
's{2}': (dateData: DateData) => DayTs._paddingZero(dateData.getSeconds()),
'S{2}': (dateData: DateData) => DayTs._paddingZero(dateData.getMilliseconds() / 10 | 0), // 2-digit milliseconds
'S{3}': (dateData: DateData) => DayTs._paddingZero(dateData.getMilliseconds(), 3), // 添加毫秒支持
'M': (dateData: DateData) => dateData.getMonth() + 1,
'd': (dateData: DateData) => dateData.getDate(),
@ -280,22 +281,22 @@ const hexTime = (num: number) => {
return num < 10 ? `0${num}` : num + ''
}
type BaseUnit =
"day" |
"d" |
"month" |
"M" |
"quarter" |
"Q" |
"year" |
"y" |
"week" |
"w" |
"hour" |
"h" |
"minute" |
"m" |
"second" |
"s";
"day" |
"d" |
"month" |
"M" |
"quarter" |
"Q" |
"year" |
"y" |
"week" |
"w" |
"hour" |
"h" |
"minute" |
"m" |
"second" |
"s";
type Unit = BaseUnit | "millisecond" | "ms";

View File

@ -18,6 +18,7 @@ import { ObtainUdpBusinessInstance } from './ObtainUdpBusiness';
import systemTime from '@ohos.systemDateTime';
import { SerialNumberInstance } from '../SerialNumber';
import { examCalcGpsDistance } from '../../pages/Judge/JudgeUtils';
import { GetDwStatusType, GetTranslateSignals } from '../../pages/Judge/utils';
class JudgeUdpBusiness {
@ -56,9 +57,9 @@ class JudgeUdpBusiness {
return keys.indexOf(item[0])
})
.map((item: [string, number]) => item[1])
.concat(this.getDwStatusType(plcData.sensor.dw))
.concat(GetDwStatusType(plcData.sensor.dw))
.concat([0, 0, plcData.sensor.ygq, plcData.sensor.wd, 0])
const translateSignals = this.getTranslateSignals(param)
const translateSignals = GetTranslateSignals(param)
const translateProject = this.getTranslateProject();
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)
@ -260,16 +261,6 @@ class JudgeUdpBusiness {
return du + fen / 60
}
// 中心plc实时信号转换成字节
private getTranslateSignals(tempItems: number[]) {
const len = Math.floor(tempItems.length / 8);
const arr: string[] = [];
for (let i = 0; i < len; i++) {
arr.push(tempItems.slice(i * 8, (i + 1) * 8).join(''));
}
return arr.map(numStr => parseInt(numStr, 2)).map(item => NumberToByteArray(item, 8)[0])
}
// 中心所有项目转换
private getTranslateProject(): string[] {
this.carInfo.examSubject
@ -408,27 +399,6 @@ class JudgeUdpBusiness {
gps,
}
}
private getDwStatusType(dw: number) {
switch (dw) {
case 0:
return [0, 0, 0, 0]
case 1:
return [0, 0, 0, 1]
case 2:
return [0, 0, 1, 0]
case 3:
return [0, 0, 1, 1]
case 4:
return [0, 1, 0, 0]
case 5:
return [0, 1, 0, 1]
case 9:
return [1, 0, 0, 1]
default:
return [0, 0, 0, 0]
}
}
}