fix: 重构评判
This commit is contained in:
parent
2fed7549d6
commit
d56b107cbf
@ -41,7 +41,6 @@ export interface UDPParamType {
|
|||||||
|
|
||||||
/** 扣分代码项 */
|
/** 扣分代码项 */
|
||||||
export interface KfdmType {
|
export interface KfdmType {
|
||||||
|
|
||||||
xmmcStr: string
|
xmmcStr: string
|
||||||
xmdm: number
|
xmdm: number
|
||||||
desc: string
|
desc: string
|
||||||
@ -451,7 +450,7 @@ export interface JudgeUI {
|
|||||||
systemparmArr: SYSTEMPARMARR[]
|
systemparmArr: SYSTEMPARMARR[]
|
||||||
carinfoArr: CARINFO[]
|
carinfoArr: CARINFO[]
|
||||||
kfArr: MarkRule[]
|
kfArr: MarkRule[]
|
||||||
judgeConfigObj: object
|
judgeConfigObj: DefaultJudgeConfigObj
|
||||||
judgeConfig: SyssetConfig[]
|
judgeConfig: SyssetConfig[]
|
||||||
projectsObj: ESObject
|
projectsObj: ESObject
|
||||||
projects: ProjectInfo[]
|
projects: ProjectInfo[]
|
||||||
@ -656,11 +655,19 @@ export interface JudgeXMJS {
|
|||||||
xmhg: 0 | 1
|
xmhg: 0 | 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface DeductionProjectConversionType {
|
||||||
|
desc: string
|
||||||
|
score: number
|
||||||
|
markcatalog: string
|
||||||
|
markserial: string
|
||||||
|
kfxh: string
|
||||||
|
}
|
||||||
|
|
||||||
export interface JudgeKf {
|
export interface JudgeKf {
|
||||||
xmdm: number
|
xmdm: number
|
||||||
kfdm?: string
|
kfdm?: string
|
||||||
markcatalog: string
|
markcatalog: string
|
||||||
type: 0 | 1 | 2 | 3
|
type?: 0 | 1 | 2 | 3
|
||||||
xmmcStr?: string
|
xmmcStr?: string
|
||||||
desc?: string
|
desc?: string
|
||||||
score?: number
|
score?: number
|
||||||
|
|||||||
@ -19,7 +19,6 @@ import Prompt from '@system.prompt';
|
|||||||
import { DifferentialAndSignal } from '../utils/business/DifferentialAndSignalWorker';
|
import { DifferentialAndSignal } from '../utils/business/DifferentialAndSignalWorker';
|
||||||
import { dConsole } from '../utils/LogWorker';
|
import { dConsole } from '../utils/LogWorker';
|
||||||
import CarLoadingComponent from './Index/Loading';
|
import CarLoadingComponent from './Index/Loading';
|
||||||
import { CreateFile } from '../utils/Common';
|
|
||||||
|
|
||||||
@Entry
|
@Entry
|
||||||
@Component
|
@Component
|
||||||
@ -78,7 +77,6 @@ struct Index {
|
|||||||
|
|
||||||
async onPageShow(): Promise<void> {
|
async onPageShow(): Promise<void> {
|
||||||
dConsole.log("权限首页 onPageShow2")
|
dConsole.log("权限首页 onPageShow2")
|
||||||
CreateFile("/mnt/hmdfs/100/account/device_view/local/files/duolun/logs/test.text")
|
|
||||||
if (!this.isPlay) {
|
if (!this.isPlay) {
|
||||||
this.avPlayer.playAudio(['welcome.wav'])
|
this.avPlayer.playAudio(['welcome.wav'])
|
||||||
this.isPlay = true
|
this.isPlay = true
|
||||||
@ -218,7 +216,6 @@ struct Index {
|
|||||||
HeaderComponent({
|
HeaderComponent({
|
||||||
shortLogo: false
|
shortLogo: false
|
||||||
})
|
})
|
||||||
|
|
||||||
CardComponent({
|
CardComponent({
|
||||||
isSingle: this.singlePlay,
|
isSingle: this.singlePlay,
|
||||||
singleClick: () => {
|
singleClick: () => {
|
||||||
|
|||||||
@ -141,4 +141,3 @@ export function CreateAlbum(fileHelper: FileHelper) {
|
|||||||
fileHelper.createAlbum(date);
|
fileHelper.createAlbum(date);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -396,6 +396,7 @@ struct JudgePage {
|
|||||||
Reflect.set(this.projectsObj, 1, project_1)
|
Reflect.set(this.projectsObj, 1, project_1)
|
||||||
}
|
}
|
||||||
Reflect.set(this.judgeConfigObj, sys.v_no!, value)
|
Reflect.set(this.judgeConfigObj, sys.v_no!, value)
|
||||||
|
dConsole.log("寻找", this.judgeConfigObj)
|
||||||
});
|
});
|
||||||
this.judgeConfig = syssetJudgeConfigArr;
|
this.judgeConfig = syssetJudgeConfigArr;
|
||||||
}
|
}
|
||||||
|
|||||||
160
entry/src/main/ets/pages/Judge/JudgeBusiness.ets
Normal file
160
entry/src/main/ets/pages/Judge/JudgeBusiness.ets
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
import {
|
||||||
|
JudgeConfigObjKmItems,
|
||||||
|
JudgePerformInfo,
|
||||||
|
JudgeUI,
|
||||||
|
MarkRule,
|
||||||
|
PLCType,
|
||||||
|
ProcessDataEnumType,
|
||||||
|
RecordHandleType,
|
||||||
|
WorkerBackMessage,
|
||||||
|
WorkerBackMessageType
|
||||||
|
} from '../../model'
|
||||||
|
import FileUtils from '../../utils/FileUtils'
|
||||||
|
import VoiceAnnounce from '../judgeSDK/utils/voiceAnnouncements'
|
||||||
|
import common from '@ohos.app.ability.common'
|
||||||
|
import { JudgeStartFn } from './JudgeStart'
|
||||||
|
import { dConsole } from '../../utils/LogWorker'
|
||||||
|
import { JudgeTag } from '../../config'
|
||||||
|
import { examJudgeRealExam } from './JudgeSDKUtils'
|
||||||
|
import { JudgingFn, SetJudgeItem } from './JudgeIng'
|
||||||
|
import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker'
|
||||||
|
import { PlcStrToJson, PlcStrToWXJson } from './utils'
|
||||||
|
import { JudgeEndFn } from './JudgeEnd'
|
||||||
|
|
||||||
|
export default class JudgeBusiness {
|
||||||
|
public fileUtil: FileUtils
|
||||||
|
public avPlayer?: VoiceAnnounce
|
||||||
|
public performInfo?: JudgePerformInfo
|
||||||
|
public context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
|
||||||
|
//考试是否结束了
|
||||||
|
public isExamEnd: boolean
|
||||||
|
public isEndTip: boolean = false;
|
||||||
|
//是否手动结束考试
|
||||||
|
public isManual: boolean = false
|
||||||
|
public deductedPopShowTimer: number = 0;
|
||||||
|
public videoData?: RecordHandleType
|
||||||
|
//是否是考试模式
|
||||||
|
public isExam: boolean
|
||||||
|
// PLC原始数据
|
||||||
|
public plcStr: string = ""
|
||||||
|
public rmndg: 0 | 1 = 0
|
||||||
|
//所有的科目考试项目(大车&小车)
|
||||||
|
public kmItems: JudgeConfigObjKmItems
|
||||||
|
public xmmcStr: string = ""
|
||||||
|
public xmmcCode: string = ""
|
||||||
|
public xmmcSingleCode: string = ""
|
||||||
|
public xmmcEndCode?: string
|
||||||
|
public xmdm: string | number = ""
|
||||||
|
public xmxh: string = ""
|
||||||
|
public kfArr?: MarkRule[]
|
||||||
|
public carztStr: string
|
||||||
|
private judgeUI: JudgeUI
|
||||||
|
private tempData?: PLCType
|
||||||
|
private plcData?: PLCType
|
||||||
|
// 是否发送udp
|
||||||
|
private isUdpEnd: boolean = false
|
||||||
|
private mndgStr: string | undefined
|
||||||
|
|
||||||
|
constructor(judgeUI: JudgeUI) {
|
||||||
|
this.judgeUI = judgeUI
|
||||||
|
this.fileUtil = new FileUtils(judgeUI.context)
|
||||||
|
this.avPlayer = new VoiceAnnounce(this.context);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 单机轨迹模式
|
||||||
|
public async SingleMachineTrajectory(strArr: string[]) {
|
||||||
|
let num = 2
|
||||||
|
const judgeTimer = setInterval(async () => {
|
||||||
|
const msgStr = strArr[num]
|
||||||
|
if (msgStr == '') {
|
||||||
|
dConsole.info(JudgeTag, '模拟数据考试结束')
|
||||||
|
clearInterval(judgeTimer)
|
||||||
|
this.JudgeEnd(true)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
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
|
||||||
|
AppStorage.setOrCreate('msgStr', '')
|
||||||
|
if (msg.method === 'examJudgeArtificialItem') {
|
||||||
|
SetJudgeItem(msg.itemno, msg.type)
|
||||||
|
}
|
||||||
|
if (msg.method === 'examJudgeArtificialMark') {
|
||||||
|
SetJudgeItem(msg.itemno, msg.serial)
|
||||||
|
}
|
||||||
|
await examJudgeRealExam(msg)
|
||||||
|
}, 200)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开始考试
|
||||||
|
public async JudgeStart(callBack: Function) {
|
||||||
|
// 处理考试前需要做的业务
|
||||||
|
// 调用开始考试
|
||||||
|
JudgeStartFn(callBack, this.judgeUI, this)
|
||||||
|
// 处理PLC数据
|
||||||
|
// 处理实时udp里的plc信号
|
||||||
|
DifferentialAndSignal.onMsg((data: string) => {
|
||||||
|
const result: WorkerBackMessage = JSON.parse(data)
|
||||||
|
if (result.type === WorkerBackMessageType.ObtainUdpData) {
|
||||||
|
this.HandlePLCData(result.data as string)
|
||||||
|
dConsole.writeProcessData(ProcessDataEnumType.PlcData, result.data as string)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.JudgeEnd()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 考试过程 callback优化
|
||||||
|
public async Judging(strData: string, callBack: Function) {
|
||||||
|
JudgingFn(strData, callBack, this.judgeUI, this)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 结束考试
|
||||||
|
public JudgeEnd(isManual?: boolean) {
|
||||||
|
JudgeEndFn(this.judgeUI, this, isManual)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理PLC数据
|
||||||
|
private async HandlePLCData(msg: string) {
|
||||||
|
const plcArr = msg.split(',')
|
||||||
|
if (plcArr[0] != '#DN_GD' || this.isUdpEnd) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const gpsPart = msg.split("#END$GPS,")[1];
|
||||||
|
const gpsStatus = gpsPart.split(",")[0];
|
||||||
|
if (gpsStatus === "4") {
|
||||||
|
dConsole.log(JudgeTag, "差分状态正常", gpsStatus)
|
||||||
|
this.judgeUI.isDwztRight = true
|
||||||
|
} else {
|
||||||
|
dConsole.log(JudgeTag, "差分状态异常", gpsStatus)
|
||||||
|
this.judgeUI.isDwztRight = false
|
||||||
|
}
|
||||||
|
// 记录原始PLC数据
|
||||||
|
dConsole.writeProcessData(ProcessDataEnumType.PlcData, msg)
|
||||||
|
const tempData = await PlcStrToJson(msg);
|
||||||
|
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;
|
||||||
|
AppStorage.setOrCreate('msgStr', msg)
|
||||||
|
// 4.过程数据
|
||||||
|
dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(this.plcData))
|
||||||
|
const param350: number = Reflect.get(this.judgeUI.judgeConfigObj, '350')
|
||||||
|
this.judgeUI.sd = ((param350 == 0 ? this.plcData.gps.sd : this.plcData.sensor.cs) as number * 1.852).toFixed(0) + ''
|
||||||
|
this.judgeUI.dw = (Math.floor(this.plcData.sensor.dw as number) || 0) + ''
|
||||||
|
if (!this.isExamEnd) {
|
||||||
|
await examJudgeRealExam(this.plcData)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
110
entry/src/main/ets/pages/Judge/JudgeEnd.ets
Normal file
110
entry/src/main/ets/pages/Judge/JudgeEnd.ets
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
import { JudgeTag } from '../../config'
|
||||||
|
import { JudgeUI } from '../../model'
|
||||||
|
import { dConsole } from '../../utils/LogWorker'
|
||||||
|
import JudgeBusiness from './JudgeBusiness'
|
||||||
|
import { examJudgeEndExam } from './JudgeSDKUtils'
|
||||||
|
|
||||||
|
export const JudgeEndFn = async (judgeUI: JudgeUI, that: JudgeBusiness, isManual?: boolean) => {
|
||||||
|
const isAllProjectsEnd = judgeUI.isAllProjectsEnd
|
||||||
|
const examSubject = judgeUI.examSubject
|
||||||
|
const singlePlay = judgeUI.singlePlay
|
||||||
|
const totalScore = Number(judgeUI.totalScore)
|
||||||
|
const judgeConfigObj = judgeUI.judgeConfigObj
|
||||||
|
const examMileage = Number(judgeUI.examMileage)
|
||||||
|
const passingScore = Number(judgeUI.passingScore)
|
||||||
|
const jl = judgeUI.jl
|
||||||
|
if (that.isExamEnd) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (isManual) {
|
||||||
|
// 考试不合格
|
||||||
|
await examJudgeEndExam()
|
||||||
|
that.isExamEnd = true
|
||||||
|
that.isManual = true
|
||||||
|
} else {
|
||||||
|
const param302: number = Reflect.get(judgeConfigObj, '302')
|
||||||
|
const param342: number = Reflect.get(judgeConfigObj, '342')
|
||||||
|
const param512: number[] = (Reflect.get(judgeConfigObj, '512') || '').split(',');
|
||||||
|
|
||||||
|
//单机模式
|
||||||
|
if (singlePlay) {
|
||||||
|
dConsole.info(JudgeTag + ' 单机模式结束 => ', isAllProjectsEnd)
|
||||||
|
if (isAllProjectsEnd && jl >= examMileage) {
|
||||||
|
//成绩合格
|
||||||
|
if (totalScore >= passingScore && !that.isEndTip) {
|
||||||
|
if (examSubject == '3' && (param342 == 0 || param342 == 2) &&
|
||||||
|
(param302 != 6 && param302 != 7 && param302 != 8)) {
|
||||||
|
if (param512[7] != 0) {
|
||||||
|
clearTimeout(that.deductedPopShowTimer)
|
||||||
|
that.avPlayer?.playAudio(['voice/综合评判.mp3'])
|
||||||
|
judgeUI.isDeductedPopShow = true
|
||||||
|
judgeUI.defaultTabIndex = 1
|
||||||
|
that.isEndTip = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await examJudgeEndExam()
|
||||||
|
that.isExamEnd = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (examSubject == '3' && (param302 == 4 || param302 == 5 || param302 == 7 || param302 == 8)) {
|
||||||
|
await examJudgeEndExam()
|
||||||
|
that.isExamEnd = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await examJudgeEndExam()
|
||||||
|
that.isExamEnd = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//成绩不合格
|
||||||
|
if (totalScore < passingScore) {
|
||||||
|
//科目三不合格报靠边停车
|
||||||
|
if (examSubject == '3' && param302 == 1) {
|
||||||
|
that.avPlayer?.playAudio([`voice/考试结束.mp3`]);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
await examJudgeEndExam()
|
||||||
|
that.isExamEnd = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//成绩合格
|
||||||
|
if (isAllProjectsEnd && totalScore >= passingScore && !that.isEndTip) {
|
||||||
|
if (examSubject == '2') {
|
||||||
|
await examJudgeEndExam()
|
||||||
|
that.isExamEnd = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//考试里程判断
|
||||||
|
if (examSubject == '3' && jl < examMileage) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//考试合格自动退出
|
||||||
|
if (examSubject == '3' && (param302 == 4 || param302 == 7) || param302 == 8) {
|
||||||
|
await examJudgeEndExam()
|
||||||
|
that.isExamEnd = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (examSubject == '3' && (param342 == 0 || param342 == 2) &&
|
||||||
|
(param302 != 6 && param302 != 7 && param302 != 8)) {
|
||||||
|
if (param512[7] != 0) {
|
||||||
|
clearTimeout(that.deductedPopShowTimer)
|
||||||
|
judgeUI.isDeductedPopShow = false
|
||||||
|
that.avPlayer?.playAudio(['voice/综合评判.mp3'])
|
||||||
|
judgeUI.isDeductedPopShow = true
|
||||||
|
judgeUI.defaultTabIndex = 1
|
||||||
|
that.isEndTip = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await examJudgeEndExam()
|
||||||
|
that.isExamEnd = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
154
entry/src/main/ets/pages/Judge/JudgeIng.ets
Normal file
154
entry/src/main/ets/pages/Judge/JudgeIng.ets
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
import { JudgeTag } from '../../config';
|
||||||
|
import { JudgeCallBackData, JudgeUI, KmItem, MarkRule, ProcessDataEnumType, ProjectInfo } from '../../model';
|
||||||
|
import { dConsole } from '../../utils/LogWorker';
|
||||||
|
import JudgeBusiness from './JudgeBusiness';
|
||||||
|
import { examJudgeArtificialItem } from './JudgeSDKUtils';
|
||||||
|
import { CurrentProjectConversion, DeductionProjectConversion } from './utils';
|
||||||
|
|
||||||
|
export const JudgingFn = async (strData: string, callBack: Function, judgeUI: JudgeUI, that: JudgeBusiness) => {
|
||||||
|
let examData: JudgeCallBackData = JSON.parse(strData);
|
||||||
|
const carzt = examData.carzt
|
||||||
|
const xmks = examData.xmks
|
||||||
|
const kf = examData.kf
|
||||||
|
const event = examData.event
|
||||||
|
const xmjs = examData.xmjs
|
||||||
|
const xmqx = examData.xmqx
|
||||||
|
const ksjs = examData.ksjs
|
||||||
|
const sound = examData.sound
|
||||||
|
const mndg = examData.mndg
|
||||||
|
const lane = examData.lane
|
||||||
|
const precast = examData.precast
|
||||||
|
const nongps = examData.nongps
|
||||||
|
//获取项目结束、项目开始代码
|
||||||
|
const xmdm = event == 2 ? xmjs.xmdm : xmks.xmdm
|
||||||
|
const xmxh = event == 2 ? xmjs.xmxh : xmks.xmxh;
|
||||||
|
let artSubject3ProjectsCodesArr: number[] = [3, 9, 4, 10, 12, 11]
|
||||||
|
const isManualProjectIn = artSubject3ProjectsCodesArr.includes(xmdm);
|
||||||
|
const examSubject = judgeUI.examSubject
|
||||||
|
const judgeConfigObj = judgeUI.judgeConfigObj
|
||||||
|
let project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
||||||
|
const xmmcCode = project.projectCodeCenter || "";
|
||||||
|
const kmItem: KmItem = Reflect.get(that.kmItems, xmmcCode)
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
// 项目开始
|
||||||
|
case 1:
|
||||||
|
project.type = '2';
|
||||||
|
if (isManualProjectIn) {
|
||||||
|
//手动项目是否在进行中
|
||||||
|
judgeUI.isManualProjectIn = true
|
||||||
|
}
|
||||||
|
if (xmdm == 41 && examSubject == '3') {
|
||||||
|
that.rmndg = 1
|
||||||
|
}
|
||||||
|
judgeUI.currentXmdm = xmdm;
|
||||||
|
const xmmcStr = project.name || "";
|
||||||
|
const xmmcSingleCode = project.projectCode || "";
|
||||||
|
kmItem.status = 2;
|
||||||
|
that.xmmcStr = xmmcStr;
|
||||||
|
that.xmmcCode = xmmcCode;
|
||||||
|
that.xmmcSingleCode = xmmcSingleCode
|
||||||
|
that.xmmcEndCode = xmmcCode
|
||||||
|
that.xmdm = xmdm;
|
||||||
|
that.xmxh = xmxh;
|
||||||
|
judgeUI.isProjectIn = true
|
||||||
|
Reflect.set(judgeUI.projectsObj, xmdm, project)
|
||||||
|
Reflect.set(that.kmItems, xmmcCode || 0, kmItem)
|
||||||
|
break;
|
||||||
|
// 项目结束
|
||||||
|
case 2:
|
||||||
|
project.type = (xmjs.xmhg === 0 ? '4' : '3')
|
||||||
|
//计算项目是否全部结束
|
||||||
|
judgeUI.isProjectIn = (Reflect.ownKeys(judgeUI.projectsObj).filter((projectKey) => {
|
||||||
|
const fillProject: ProjectInfo = Reflect.get(judgeUI.projectsObj, projectKey)
|
||||||
|
return fillProject.type == '2'
|
||||||
|
}).length) > 0;
|
||||||
|
if (isManualProjectIn) {
|
||||||
|
judgeUI.isManualProjectIn = false
|
||||||
|
}
|
||||||
|
kmItem.status = 3;
|
||||||
|
//统计必考项目数量
|
||||||
|
that.xmmcStr = '无';
|
||||||
|
that.xmmcCode = '';
|
||||||
|
that.xmdm = '';
|
||||||
|
judgeUI.currentXmdm = undefined;
|
||||||
|
Reflect.set(judgeUI.projectsObj, xmdm, project)
|
||||||
|
Reflect.set(that.kmItems, xmmcCode, kmItem)
|
||||||
|
break;
|
||||||
|
// 扣分
|
||||||
|
case 3:
|
||||||
|
const thisKf = DeductionProjectConversion(`${kf.xmdm}_${kf.kfdm}`, judgeUI.markRuleListObj)
|
||||||
|
const kfObj: MarkRule = {
|
||||||
|
//扣分项目名称
|
||||||
|
xmmcStr: CurrentProjectConversion(kf.xmdm, judgeUI.projectsObj),
|
||||||
|
xmdm: kf.xmdm + "",
|
||||||
|
//扣分描述
|
||||||
|
desc: thisKf.desc,
|
||||||
|
//扣分分数
|
||||||
|
score: thisKf.score,
|
||||||
|
// 扣分无锡所代码
|
||||||
|
markcatalog: thisKf.markcatalog,
|
||||||
|
markserial: thisKf.markserial,
|
||||||
|
kfxh: thisKf.kfxh,
|
||||||
|
//扣分类型
|
||||||
|
type: kf.type
|
||||||
|
}
|
||||||
|
dConsole.log(JudgeTag, "扣分组装", kfObj)
|
||||||
|
that.kfArr?.push(kfObj)
|
||||||
|
dConsole.log(JudgeTag, "扣分类组装", that.kfArr)
|
||||||
|
judgeUI.totalScore += Number(thisKf?.score);
|
||||||
|
if (kf.xmdm != 20) {
|
||||||
|
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, kf.xmdm)
|
||||||
|
const type = project.type;
|
||||||
|
project.type = (type == '3' || type == '4') ? '4' : '5'
|
||||||
|
Reflect.set(judgeUI.projectsObj, kf.xmdm, project)
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
// 考试状态
|
||||||
|
case 4:
|
||||||
|
break;
|
||||||
|
// 考试结束
|
||||||
|
case 5:
|
||||||
|
break;
|
||||||
|
// 项目取消
|
||||||
|
case 6:
|
||||||
|
break;
|
||||||
|
// 语音播报和提示
|
||||||
|
case 7:
|
||||||
|
break;
|
||||||
|
// 模拟灯光事件
|
||||||
|
case 8:
|
||||||
|
break;
|
||||||
|
// 车道和路段变化
|
||||||
|
case 9:
|
||||||
|
break;
|
||||||
|
// 预进项目事件
|
||||||
|
case 10:
|
||||||
|
break;
|
||||||
|
// 差分事件
|
||||||
|
case 11:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
83
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
await callBack({
|
||||||
|
//项目名称 考车状态 扣分arr
|
||||||
|
xmmcStr: that.xmmcStr, carztStr: that.carztStr, kfArr: that.kfArr
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
export const SetJudgeItem = async (itemno: string, type: 1 | 2) => {
|
||||||
|
await examJudgeArtificialItem(Number(itemno), type);
|
||||||
|
const str = JSON.stringify({
|
||||||
|
method: 'examJudgeArtificialItem',
|
||||||
|
itemno: Number(itemno),
|
||||||
|
type
|
||||||
|
})
|
||||||
|
dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, str)
|
||||||
|
dConsole.info(JudgeTag, `人工评判${type == 1 ? '进入' : '取消'}项目-${itemno}`)
|
||||||
|
}
|
||||||
249
entry/src/main/ets/pages/Judge/JudgeStart.ets
Normal file
249
entry/src/main/ets/pages/Judge/JudgeStart.ets
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
//开始评判
|
||||||
|
import { JudgeConfig, JudgeTag } from '../../config';
|
||||||
|
import {
|
||||||
|
BaseInfoType,
|
||||||
|
CARINFO,
|
||||||
|
CarInfoType,
|
||||||
|
CDSBInfo,
|
||||||
|
ExaminerInfoType,
|
||||||
|
ItemInfo,
|
||||||
|
ItemInfos,
|
||||||
|
JudgeBeginObj,
|
||||||
|
JudgeInitObj,
|
||||||
|
JudgeKFXM,
|
||||||
|
JudgeKSXM,
|
||||||
|
JudgeUI,
|
||||||
|
Km3JudgeInitConfig,
|
||||||
|
MAPITEMPOINTITEM,
|
||||||
|
MAPPOINT,
|
||||||
|
MarkRule,
|
||||||
|
ProcessDataEnumType,
|
||||||
|
ProjectInfo,
|
||||||
|
RouteParamsType,
|
||||||
|
SyssetConfig,
|
||||||
|
SYSTEMPARMARR
|
||||||
|
} from '../../model';
|
||||||
|
import common from '@ohos.app.ability.common';
|
||||||
|
import { dConsole } from '../../utils/LogWorker';
|
||||||
|
import {
|
||||||
|
examJudgeBeginExam,
|
||||||
|
examJudgeInit,
|
||||||
|
examJudgeSetLogCallback,
|
||||||
|
examJudgeSetPerformCallback,
|
||||||
|
examJudgeSetRealExamCallback,
|
||||||
|
examJudgeVersion
|
||||||
|
} from './JudgeSDKUtils';
|
||||||
|
import FileModel from '../judgeSDK/utils/fileModel';
|
||||||
|
import JudgeBusiness from './JudgeBusiness';
|
||||||
|
import { saveStartRecordVideo } from '../../utils/Video';
|
||||||
|
import router from '@ohos.router';
|
||||||
|
import systemTime from '@ohos.systemTime';
|
||||||
|
|
||||||
|
export const JudgeStartFn = async (callBack: Function, judgeUI: JudgeUI, that: JudgeBusiness) => {
|
||||||
|
const name = judgeUI.name
|
||||||
|
const kssycs = judgeUI.kssycs
|
||||||
|
const manualMarkRules = judgeUI.manualMarkRules
|
||||||
|
// 处理单机模式
|
||||||
|
const isTrajectoryOpen = JudgeConfig.isTrajectoryOpen;
|
||||||
|
const isJudgeInitBool = AppStorage.get<boolean>('isJudgeInitBool');
|
||||||
|
const trajectoryPath = JudgeConfig.trajectoryPath;
|
||||||
|
let strArr: string[] = [];
|
||||||
|
if (isTrajectoryOpen) {
|
||||||
|
const folderPath = await that.fileUtil.initFolder(trajectoryPath);
|
||||||
|
const str: string = await that.fileUtil.readFile(folderPath)
|
||||||
|
strArr = str.split('\n')
|
||||||
|
}
|
||||||
|
//日志回调
|
||||||
|
dConsole.info(JudgeTag, '1.进入评判入口')
|
||||||
|
await examJudgeSetLogCallback(6, async (level: number, info: string, len: number) => {
|
||||||
|
dConsole.log(JudgeTag, '评判日志:' + info)
|
||||||
|
dConsole.writeProcessData(ProcessDataEnumType.JudgeLogData, info)
|
||||||
|
})
|
||||||
|
|
||||||
|
dConsole.info(JudgeTag, '2.注册日志回调完成')
|
||||||
|
|
||||||
|
let initInfo: JudgeInitObj = isTrajectoryOpen ? JSON.parse(strArr[0]) : await GetJudgeInitData(judgeUI.context, judgeUI.markRuleListObj, judgeUI.carType, judgeUI.carName, judgeUI.systemparmArr, judgeUI.carinfoArr, judgeUI.examSubject, judgeUI.itemInfoObj, judgeUI.judgeConfig, judgeUI.carlist, judgeUI.mapPointArr, judgeUI.mapPointItemArr);
|
||||||
|
//相关评判初始化只做一次
|
||||||
|
if (!isJudgeInitBool) {
|
||||||
|
dConsole.log(JudgeTag, "评判初始化参数", initInfo)
|
||||||
|
await examJudgeInit(initInfo);
|
||||||
|
AppStorage.setOrCreate('isJudgeInitBool', true)
|
||||||
|
dConsole.info(JudgeTag, '4.评判初始化完成')
|
||||||
|
}
|
||||||
|
AppStorage.setOrCreate('isJudge', true)
|
||||||
|
// 2.评判过程回调
|
||||||
|
await examJudgeSetRealExamCallback(async (strData: string, len: number) => {
|
||||||
|
// 评判回调日志
|
||||||
|
dConsole.writeProcessData(ProcessDataEnumType.JudgeProgressCallbackData, strData)
|
||||||
|
dConsole.info(JudgeTag, '评判回调数据', strData)
|
||||||
|
await that.Judging(strData, callBack)
|
||||||
|
})
|
||||||
|
await examJudgeSetPerformCallback(async (info: string) => {
|
||||||
|
dConsole.info('评判实时数据', info)
|
||||||
|
that.performInfo = JSON.parse(info)
|
||||||
|
const jl = Math.floor((that.performInfo.qjjl + that.performInfo.dcjl) / 100);
|
||||||
|
if (jl > Number(judgeUI.examMileage)) {
|
||||||
|
that.JudgeEnd()
|
||||||
|
}
|
||||||
|
judgeUI.jl = jl
|
||||||
|
judgeUI.laneSignal = that.performInfo.lane
|
||||||
|
})
|
||||||
|
let beginExamInfo: JudgeBeginObj | undefined = undefined
|
||||||
|
// 3.开始考试
|
||||||
|
if (isTrajectoryOpen) {
|
||||||
|
beginExamInfo = JSON.parse(strArr[1])
|
||||||
|
beginExamInfo && (beginExamInfo.replay = 1)
|
||||||
|
} else {
|
||||||
|
beginExamInfo = await GetJudgeBeginData(judgeUI.projects, judgeUI.carType, judgeUI.kssycs, judgeUI.isDdxk, judgeUI.ddxkTime, judgeUI.projectsCenterObj, judgeUI.ddxkKsxmArr, judgeUI.ddxkKfArr, judgeUI.passingScore, judgeUI.wayno, judgeUI.name, judgeUI.lsh, judgeUI.idCard, that.isExam)
|
||||||
|
}
|
||||||
|
if (beginExamInfo) {
|
||||||
|
await examJudgeBeginExam(beginExamInfo);
|
||||||
|
}
|
||||||
|
dConsole.info(JudgeTag, '6.开始考试注册完成')
|
||||||
|
that.avPlayer?.playAudio([judgeUI.singlePlay ? 'voice/ksks.wav' : 'voice/监管成功.mp3'])
|
||||||
|
if (!judgeUI.singlePlay) {
|
||||||
|
that.videoData = await saveStartRecordVideo(`${name}_${kssycs}`, that.context)
|
||||||
|
}
|
||||||
|
judgeUI.draw = true
|
||||||
|
// 处理单机泡轨迹模式
|
||||||
|
if (isTrajectoryOpen) {
|
||||||
|
that.SingleMachineTrajectory(strArr)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取评判开始考试数据
|
||||||
|
const GetJudgeBeginData = async (projects: ProjectInfo[], 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 systemTime.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: false,
|
||||||
|
mfxx: false,
|
||||||
|
mfxxn: false
|
||||||
|
}
|
||||||
|
dConsole.info(JudgeTag, '5.获取开始考试数据完成')
|
||||||
|
return beginInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取评判初始化数据
|
||||||
|
const GetJudgeInitData = async (context: common.UIAbilityContext, markRuleListObj: object, carType: string, carName: string, systemparmArr: SYSTEMPARMARR[], carinfoArr: CARINFO[], 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) {
|
||||||
|
allitems = Reflect.ownKeys(itemInfoObj).map(cdsbKey => {
|
||||||
|
const cdsb: CDSBInfo = Reflect.get(itemInfoObj, cdsbKey);
|
||||||
|
const model = GetModelData(`${examType}/${cdsb.modelKey}.txt`, context)
|
||||||
|
const temp: ItemInfo = {
|
||||||
|
xmdm: cdsb?.xmdm || 0,
|
||||||
|
xmxh: cdsb?.xmxh || "",
|
||||||
|
model: model || ""
|
||||||
|
}
|
||||||
|
return temp
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取版本号
|
||||||
|
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<BaseInfoType>('baseInfo')?.version || "",
|
||||||
|
kskm: Number(carInfo?.examSubject || "2"),
|
||||||
|
kchp: carInfo?.plateNo || "",
|
||||||
|
kchm: Number(carInfo?.carId || ""),
|
||||||
|
kscx: carType,
|
||||||
|
cxcode: '1',
|
||||||
|
name: carName,
|
||||||
|
carmodel: GetModelData(`${examType}/${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: GetModelData('km3/Roads.txt', context) || "",
|
||||||
|
sharps: GetModelData('km3/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
|
||||||
|
}
|
||||||
|
|
||||||
|
export const GetModelData = (modelName: string, context: common.UIAbilityContext): string => {
|
||||||
|
try {
|
||||||
|
return new FileModel(context).getModelContent(JudgeConfig.modelPath, modelName);
|
||||||
|
} catch (e) {
|
||||||
|
// 可根据实际需求,返回空字符串或抛出异常
|
||||||
|
dConsole.error(JudgeTag, `获取模型数据失败: ${modelName}`, e.message)
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
28
entry/src/main/ets/pages/Judge/JudgeVariable.ets
Normal file
28
entry/src/main/ets/pages/Judge/JudgeVariable.ets
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import { testKm2Items, testKm3Items } from '../../mock';
|
||||||
|
import { JudgeConfigObjKmItems, ProjectInfo, ProjectInfos } from '../../model';
|
||||||
|
|
||||||
|
class judgeVariable {
|
||||||
|
public rmndg: 0 | 1 = 0
|
||||||
|
public kmItems: JudgeConfigObjKmItems = {}
|
||||||
|
public xmmcStr: string = ""
|
||||||
|
public xmmcEndCode?: string = ""
|
||||||
|
public xmxh: string = ""
|
||||||
|
public status: string = "开始"
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public initKmItems(examSubject: string, projectsCenterObj: ProjectInfos) {
|
||||||
|
(examSubject == '2' ? testKm2Items : testKm3Items).forEach(item => {
|
||||||
|
const projectCenterObj: ProjectInfo = Reflect.get(projectsCenterObj, item.code)
|
||||||
|
Reflect.set(this.kmItems, item.code, {
|
||||||
|
code: item.code,
|
||||||
|
status: projectCenterObj === undefined ? 0 : (projectCenterObj.isEnd ? 3 : 1)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const JudgeVariable = new judgeVariable();
|
||||||
@ -2,25 +2,22 @@ import systemTime from '@ohos.systemDateTime';
|
|||||||
import { TestRealExam } from '../../mock';
|
import { TestRealExam } from '../../mock';
|
||||||
import {
|
import {
|
||||||
CarInfoType,
|
CarInfoType,
|
||||||
|
DeductionProjectConversionType,
|
||||||
DefaultJudgeConfigObj,
|
DefaultJudgeConfigObj,
|
||||||
ExtendType,
|
ExtendType,
|
||||||
Gps,
|
Gps,
|
||||||
LANE,
|
LANE,
|
||||||
|
MarkRule,
|
||||||
PLCType,
|
PLCType,
|
||||||
ProjectInfo,
|
ProjectInfo,
|
||||||
ProjectInfos,
|
ProjectInfos,
|
||||||
ProjectRoads,
|
ProjectRoads,
|
||||||
Radar,
|
Radar,
|
||||||
VideoConfig,
|
|
||||||
Vision
|
Vision
|
||||||
} from '../../model';
|
} from '../../model';
|
||||||
import { ArrayToByteArray, NumberToByteArray } from '../../utils/Common';
|
import { ArrayToByteArray, NumberToByteArray } from '../../utils/Common';
|
||||||
import dayTs from '../../utils/Date';
|
import dayTs from '../../utils/Date';
|
||||||
import { dConsole } from '../../utils/LogWorker';
|
import { dConsole } from '../../utils/LogWorker';
|
||||||
import common from '@ohos.app.ability.common';
|
|
||||||
import { JudgeConfig, JudgeTag } from '../../config';
|
|
||||||
import { takePhoto } from '../../utils/Video';
|
|
||||||
import Prompt from '@system.prompt';
|
|
||||||
|
|
||||||
|
|
||||||
// 中心信号转换
|
// 中心信号转换
|
||||||
@ -838,3 +835,21 @@ export const GetIsEndManualProject = (index: number, artSubject3Projects: string
|
|||||||
return (type == '3' || type == '4') ? `${projectName}_red` : `${projectName}_green`;
|
return (type == '3' || type == '4') ? `${projectName}_red` : `${projectName}_green`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//扣分项目转换
|
||||||
|
export const DeductionProjectConversion = (code: string, markRuleListObj: object): DeductionProjectConversionType => {
|
||||||
|
const thisMark: MarkRule = Reflect.get(markRuleListObj, code)
|
||||||
|
return {
|
||||||
|
desc: thisMark.markshow,
|
||||||
|
score: thisMark.markreal,
|
||||||
|
markcatalog: thisMark.markcatalog,
|
||||||
|
markserial: thisMark.markserial,
|
||||||
|
kfxh: thisMark.kfxh
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//当前项目转换
|
||||||
|
export const CurrentProjectConversion = (code: number, projectsObj: object): string => {
|
||||||
|
const project: ProjectInfo = Reflect.get(projectsObj, code)
|
||||||
|
return project?.abbreviation || '通用评判'
|
||||||
|
}
|
||||||
@ -3,10 +3,11 @@ import { GPSData } from '../../mock'
|
|||||||
import { PerLane, RoadDataType, SignalDataType, WorkerBackMessage, WorkerBackMessageType } from '../../model'
|
import { PerLane, RoadDataType, SignalDataType, WorkerBackMessage, WorkerBackMessageType } from '../../model'
|
||||||
import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker'
|
import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker'
|
||||||
import { dConsole } from '../../utils/LogWorker'
|
import { dConsole } from '../../utils/LogWorker'
|
||||||
import { examJudgeMapSetDrawing, examJudgeMapSetScaling } from '../Judge/JudgeUtils'
|
import { examJudgeMapSetDrawing, examJudgeMapSetScaling } from '../Judge/JudgeSDKUtils'
|
||||||
import BlockComponent from './Block'
|
import BlockComponent from './Block'
|
||||||
import CoordinateComponent from './Coordinate'
|
import CoordinateComponent from './Coordinate'
|
||||||
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
export default struct TrajectoryViewComponent {
|
export default struct TrajectoryViewComponent {
|
||||||
// GPS信号
|
// GPS信号
|
||||||
|
|||||||
@ -66,7 +66,7 @@ import {
|
|||||||
examJudgeSetRealExamCallback,
|
examJudgeSetRealExamCallback,
|
||||||
examJudgeSoundEnd,
|
examJudgeSoundEnd,
|
||||||
examJudgeVersion
|
examJudgeVersion
|
||||||
} from '../Judge/JudgeUtils';
|
} from '../Judge/JudgeSDKUtils';
|
||||||
import {
|
import {
|
||||||
GetCarStatus,
|
GetCarStatus,
|
||||||
GetCenterProjectStatus,
|
GetCenterProjectStatus,
|
||||||
@ -142,7 +142,7 @@ export default class Judge {
|
|||||||
switch (code) {
|
switch (code) {
|
||||||
//结束考试方式
|
//结束考试方式
|
||||||
case 306:
|
case 306:
|
||||||
if (judgeConfigObj[code] == 5) {
|
if (Reflect.get(judgeConfigObj, code) == 5) {
|
||||||
//靠边停车
|
//靠边停车
|
||||||
avPlayer?.playAudio(['voice/406001.mp3'])
|
avPlayer?.playAudio(['voice/406001.mp3'])
|
||||||
}
|
}
|
||||||
@ -170,48 +170,6 @@ export default class Judge {
|
|||||||
private isExamEnd: boolean
|
private isExamEnd: boolean
|
||||||
// 是否发送udp
|
// 是否发送udp
|
||||||
private isUdpEnd: boolean = false
|
private isUdpEnd: boolean = false
|
||||||
// 处理udp plc信号
|
|
||||||
handleUdp = async (msg: string) => {
|
|
||||||
const stachArr = msg.split(',')
|
|
||||||
if (stachArr[0] != '#DN_GD' || this.isUdpEnd) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const gpsPart = msg.split("#END$GPS,")[1];
|
|
||||||
const gpsStatus = gpsPart.split(",")[0];
|
|
||||||
if (gpsStatus === "4") {
|
|
||||||
dConsole.log(JudgeTag, "差分状态正常", gpsStatus)
|
|
||||||
this.judgeUI.isDwztRight = true
|
|
||||||
} else {
|
|
||||||
dConsole.log(JudgeTag, "差分状态异常", gpsStatus)
|
|
||||||
this.judgeUI.isDwztRight = false
|
|
||||||
}
|
|
||||||
this.judgeUI.isDwztRight
|
|
||||||
const plcData = await this.getPlcData(msg);
|
|
||||||
// 4.过程数据
|
|
||||||
// await this.fileLog?.setExamJudgeData(JSON.stringify(plcData))
|
|
||||||
dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(plcData))
|
|
||||||
//检测到有无锡所设备接入,需要发送特定的数据,供检测
|
|
||||||
// if (this.usbService.isWXUSBDevice) {
|
|
||||||
// const str = await senorToWXDataStr(msg);
|
|
||||||
// this.usbService.sendUSB(str)
|
|
||||||
// }
|
|
||||||
const param350: number = Reflect.get(this.judgeUI.judgeConfigObj, '350')
|
|
||||||
this.judgeUI.sd = ((param350 == 0 ? plcData.gps.sd : plcData.sensor.cs) as number * 1.852).toFixed(0) + ''
|
|
||||||
this.judgeUI.dw = (Math.floor(plcData.sensor.dw as number) || 0) + ''
|
|
||||||
//TODO 暂时关闭差分检测异常
|
|
||||||
// await this.checkDwzt(plcData.gps.dwzt,plcData.gps.jdzt);
|
|
||||||
if (!this.isExamEnd) {
|
|
||||||
await examJudgeRealExam(plcData)
|
|
||||||
}
|
|
||||||
// let udpIndex = AppStorage.get<number>('udpIndex') || 0;
|
|
||||||
// if (udpIndex % 5 === 0 && !this.isUdpEnd) {
|
|
||||||
// TODO UPD缺失
|
|
||||||
// const judgeUdp = globalThis.judgeUdp
|
|
||||||
// const bytes = await this.getMessageHeartbeat(this.isExamEnd);
|
|
||||||
// judgeUdp.send(bytes)
|
|
||||||
// }
|
|
||||||
// AppStorage.setOrCreate('udpIndex', udpIndex++)
|
|
||||||
}
|
|
||||||
//是否手动结束考试
|
//是否手动结束考试
|
||||||
private isManual: boolean = false
|
private isManual: boolean = false
|
||||||
//UDP服务序列号
|
//UDP服务序列号
|
||||||
@ -256,60 +214,6 @@ export default class Judge {
|
|||||||
dConsole.info(JudgeTag, '过程数据文件上传 end')
|
dConsole.info(JudgeTag, '过程数据文件上传 end')
|
||||||
}
|
}
|
||||||
private judgeTask: JudgeTask
|
private judgeTask: JudgeTask
|
||||||
// 检测扣分、结束项目时该项目是否开始
|
|
||||||
checkProjectIsStart = async (xmdm: number, currentType: 1 | 2, kf?: MarkRule) => {
|
|
||||||
if (xmdm == 20) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
const judgeUI = this.judgeUI;
|
|
||||||
const judgeTask = this.judgeTask;
|
|
||||||
const projectsObj: object = this.judgeUI.projectsObj
|
|
||||||
const currentProject: ProjectInfo = Reflect.get(projectsObj, xmdm)
|
|
||||||
const isUpload = currentProject.isUpload
|
|
||||||
|
|
||||||
//如果项目没有开始
|
|
||||||
dConsole.info(JudgeTag, 'surenjun isUpload=>', isUpload)
|
|
||||||
if (!isUpload) {
|
|
||||||
dConsole.info(JudgeTag, '项目补传开始')
|
|
||||||
//项目开始补传
|
|
||||||
judgeTask.addTask(async () => {
|
|
||||||
await this.beginProject(xmdm)
|
|
||||||
}, {
|
|
||||||
isDelay: true
|
|
||||||
})
|
|
||||||
judgeTask.addTask(async () => {
|
|
||||||
await this.uploadProgressPhoto(xmdm)
|
|
||||||
}, {
|
|
||||||
isDelay: true
|
|
||||||
})
|
|
||||||
currentProject.isUpload = true;
|
|
||||||
Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject)
|
|
||||||
//扣分补传
|
|
||||||
if (currentType == 2) {
|
|
||||||
judgeTask.addTask(async () => {
|
|
||||||
await this.pointsDedute(xmdm, kf!)
|
|
||||||
}, {
|
|
||||||
isDelay: true
|
|
||||||
})
|
|
||||||
}
|
|
||||||
//扣分补传判断是否合格 不合格补传项目结束
|
|
||||||
if (currentType == 1 || (currentType == 2 && this.totalScore < judgeUI.passingScore)) {
|
|
||||||
judgeTask.addTask(async () => {
|
|
||||||
await this.endProject(xmdm)
|
|
||||||
}, {
|
|
||||||
isDelay: true
|
|
||||||
})
|
|
||||||
currentProject.isEnd = true;
|
|
||||||
Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject)
|
|
||||||
}
|
|
||||||
judgeTask.addTask(async () => {
|
|
||||||
this.checkExamIsEnd()
|
|
||||||
})
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private tempData?: PLCType
|
private tempData?: PLCType
|
||||||
//实时计算gps经纬度距离
|
//实时计算gps经纬度距离
|
||||||
handDistance = async () => {
|
handDistance = async () => {
|
||||||
@ -360,40 +264,47 @@ export default class Judge {
|
|||||||
AppStorage.setOrCreate('msgStr', plc)
|
AppStorage.setOrCreate('msgStr', plc)
|
||||||
return tempData
|
return tempData
|
||||||
}
|
}
|
||||||
// 处理轨迹plc信号
|
// 处理udp plc信号
|
||||||
handleTrajectoryUdp = async (strArr: string[]) => {
|
handleUdp = async (msg: string) => {
|
||||||
let num = 2;
|
const stachArr = msg.split(',')
|
||||||
const judgeTimer = setInterval(async () => {
|
if (stachArr[0] != '#DN_GD' || this.isUdpEnd) {
|
||||||
const msgStr = strArr[num];
|
|
||||||
if (msgStr == '') {
|
|
||||||
dConsole.info(JudgeTag, '模拟数据考试结束')
|
|
||||||
clearInterval(judgeTimer)
|
|
||||||
this.checkExamIsEnd(true)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const msg: PLCType = JSON.parse(strArr[num]);
|
const gpsPart = msg.split("#END$GPS,")[1];
|
||||||
num++
|
const gpsStatus = gpsPart.split(",")[0];
|
||||||
|
if (gpsStatus === "4") {
|
||||||
|
dConsole.log(JudgeTag, "差分状态正常", gpsStatus)
|
||||||
|
this.judgeUI.isDwztRight = true
|
||||||
|
} else {
|
||||||
|
dConsole.log(JudgeTag, "差分状态异常", gpsStatus)
|
||||||
|
this.judgeUI.isDwztRight = false
|
||||||
|
}
|
||||||
|
this.judgeUI.isDwztRight
|
||||||
|
const plcData = await this.getPlcData(msg);
|
||||||
// 4.过程数据
|
// 4.过程数据
|
||||||
this.tempData = msg
|
// await this.fileLog?.setExamJudgeData(JSON.stringify(plcData))
|
||||||
// this.judgeUI.isDwztRight = (msg?.gps?.dwzt == 4 && msg?.gps?.jdzt == 3);
|
dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(plcData))
|
||||||
this.judgeUI.sd = Math.floor(msg?.gps?.sd * 1.852) + '';
|
//检测到有无锡所设备接入,需要发送特定的数据,供检测
|
||||||
this.judgeUI.dw = Math.floor(msg?.sensor?.dw) + ''
|
// if (this.usbService.isWXUSBDevice) {
|
||||||
this.plcData = msg
|
// const str = await senorToWXDataStr(msg);
|
||||||
// this.judgeUI.isDwztRight = msg.gps.dwzt == 4;
|
// this.usbService.sendUSB(str)
|
||||||
AppStorage.setOrCreate('msgStr', '')
|
// }
|
||||||
if (msg.method === 'examJudgeArtificialItem') {
|
const param350: number = Reflect.get(this.judgeUI.judgeConfigObj, '350')
|
||||||
this.setJudgeItem(msg.itemno, msg.type)
|
this.judgeUI.sd = ((param350 == 0 ? plcData.gps.sd : plcData.sensor.cs) as number * 1.852).toFixed(0) + ''
|
||||||
|
this.judgeUI.dw = (Math.floor(plcData.sensor.dw as number) || 0) + ''
|
||||||
|
//TODO 暂时关闭差分检测异常
|
||||||
|
// await this.checkDwzt(plcData.gps.dwzt,plcData.gps.jdzt);
|
||||||
|
if (!this.isExamEnd) {
|
||||||
|
await examJudgeRealExam(plcData)
|
||||||
}
|
}
|
||||||
if (msg.method === 'examJudgeArtificialMark') {
|
// let udpIndex = AppStorage.get<number>('udpIndex') || 0;
|
||||||
this.setJudgeItem(msg.itemno, msg.serial)
|
// if (udpIndex % 5 === 0 && !this.isUdpEnd) {
|
||||||
}
|
// TODO UPD缺失
|
||||||
await examJudgeRealExam(msg)
|
// const judgeUdp = globalThis.judgeUdp
|
||||||
// const bytes = await this.getMessageHeartbeat();
|
// const bytes = await this.getMessageHeartbeat(this.isExamEnd);
|
||||||
// bytes && globalThis.judgeUdp.send(bytes)
|
// judgeUdp.send(bytes)
|
||||||
|
// }
|
||||||
}, 200)
|
// AppStorage.setOrCreate('udpIndex', udpIndex++)
|
||||||
// TODO 定时器缺失
|
|
||||||
// globalThis.judgeTimer = judgeTimer;
|
|
||||||
}
|
}
|
||||||
private isEndTip: boolean = false;
|
private isEndTip: boolean = false;
|
||||||
//本地轨迹回放地址
|
//本地轨迹回放地址
|
||||||
@ -413,6 +324,32 @@ export default class Judge {
|
|||||||
const code = await writeObjectOut(JSON.parse(examDataStr), "", this.context);
|
const code = await writeObjectOut(JSON.parse(examDataStr), "", this.context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private artSubject3ProjectsCodesArr: number[] = [3, 9, 4, 10, 12, 11]
|
||||||
|
private lane: LANE = {
|
||||||
|
road: '', num: 0, count: 0
|
||||||
|
}
|
||||||
|
private disConnectNum: number = 0;
|
||||||
|
//调用监管接口
|
||||||
|
sendWriteObjectOut: SendWriteObjectOut = async (data, filePath) => {
|
||||||
|
const temp = await writeObjectOut(data, filePath, this.context);
|
||||||
|
dConsole.log(JudgeTag, "wzj", JSON.stringify(temp))
|
||||||
|
//断网&网络超时次数计算
|
||||||
|
if (temp.code == 2300007 || temp.code == 2300028) {
|
||||||
|
this.disConnectNum += 1;
|
||||||
|
if (this.disConnectNum < 5) {
|
||||||
|
return await this.sendWriteObjectOut(data, filePath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.disConnectNum >= 5) {
|
||||||
|
dConsole.info('surenjun', '123')
|
||||||
|
this.judgeUI.errorMsg = '当前的考试过程信息网络传输异常,程序点击确认将重启!';
|
||||||
|
this.judgeUI.disConnectErrorOpen = true
|
||||||
|
}
|
||||||
|
|
||||||
|
this.disConnectNum = 0
|
||||||
|
return temp
|
||||||
|
}
|
||||||
// 项目开始接口同步
|
// 项目开始接口同步
|
||||||
beginProject = async (ksxm: number) => {
|
beginProject = async (ksxm: number) => {
|
||||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||||
@ -516,32 +453,6 @@ export default class Judge {
|
|||||||
UploadRegulatoryCodeConversion('17C54', temp.code || 0)
|
UploadRegulatoryCodeConversion('17C54', temp.code || 0)
|
||||||
dConsole.info(JudgeTag, '上传照片 end')
|
dConsole.info(JudgeTag, '上传照片 end')
|
||||||
}
|
}
|
||||||
private artSubject3ProjectsCodesArr: number[] = [3, 9, 4, 10, 12, 11]
|
|
||||||
private lane: LANE = {
|
|
||||||
road: '', num: 0, count: 0
|
|
||||||
}
|
|
||||||
private disConnectNum: number = 0;
|
|
||||||
//调用监管接口
|
|
||||||
sendWriteObjectOut: SendWriteObjectOut = async (data, filePath) => {
|
|
||||||
const temp = await writeObjectOut(data, filePath, this.context);
|
|
||||||
dConsole.log(JudgeTag, "wzj", JSON.stringify(temp))
|
|
||||||
//断网&网络超时次数计算
|
|
||||||
if (temp.code == 2300007 || temp.code == 2300028) {
|
|
||||||
this.disConnectNum += 1;
|
|
||||||
if (this.disConnectNum < 5) {
|
|
||||||
return await this.sendWriteObjectOut(data, filePath)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.disConnectNum >= 5) {
|
|
||||||
dConsole.info('surenjun', '123')
|
|
||||||
this.judgeUI.errorMsg = '当前的考试过程信息网络传输异常,程序点击确认将重启!';
|
|
||||||
this.judgeUI.disConnectErrorOpen = true
|
|
||||||
}
|
|
||||||
|
|
||||||
this.disConnectNum = 0
|
|
||||||
return temp
|
|
||||||
}
|
|
||||||
private videoData?: RecordHandleType
|
private videoData?: RecordHandleType
|
||||||
//当前科目二的考试项目
|
//当前科目二的考试项目
|
||||||
private deductedPopShowTimer: number = 0;
|
private deductedPopShowTimer: number = 0;
|
||||||
@ -655,6 +566,95 @@ export default class Judge {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 检测扣分、结束项目时该项目是否开始
|
||||||
|
checkProjectIsStart = async (xmdm: number, currentType: 1 | 2, kf?: MarkRule) => {
|
||||||
|
if (xmdm == 20) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
const judgeUI = this.judgeUI;
|
||||||
|
const judgeTask = this.judgeTask;
|
||||||
|
const projectsObj: object = this.judgeUI.projectsObj
|
||||||
|
const currentProject: ProjectInfo = Reflect.get(projectsObj, xmdm)
|
||||||
|
const isUpload = currentProject.isUpload
|
||||||
|
|
||||||
|
//如果项目没有开始
|
||||||
|
dConsole.info(JudgeTag, 'surenjun isUpload=>', isUpload)
|
||||||
|
if (!isUpload) {
|
||||||
|
dConsole.info(JudgeTag, '项目补传开始')
|
||||||
|
//项目开始补传
|
||||||
|
judgeTask.addTask(async () => {
|
||||||
|
await this.beginProject(xmdm)
|
||||||
|
}, {
|
||||||
|
isDelay: true
|
||||||
|
})
|
||||||
|
judgeTask.addTask(async () => {
|
||||||
|
await this.uploadProgressPhoto(xmdm)
|
||||||
|
}, {
|
||||||
|
isDelay: true
|
||||||
|
})
|
||||||
|
currentProject.isUpload = true;
|
||||||
|
Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject)
|
||||||
|
//扣分补传
|
||||||
|
if (currentType == 2) {
|
||||||
|
judgeTask.addTask(async () => {
|
||||||
|
await this.pointsDedute(xmdm, kf!)
|
||||||
|
}, {
|
||||||
|
isDelay: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
//扣分补传判断是否合格 不合格补传项目结束
|
||||||
|
if (currentType == 1 || (currentType == 2 && this.totalScore < judgeUI.passingScore)) {
|
||||||
|
judgeTask.addTask(async () => {
|
||||||
|
await this.endProject(xmdm)
|
||||||
|
}, {
|
||||||
|
isDelay: true
|
||||||
|
})
|
||||||
|
currentProject.isEnd = true;
|
||||||
|
Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject)
|
||||||
|
}
|
||||||
|
judgeTask.addTask(async () => {
|
||||||
|
this.checkExamIsEnd()
|
||||||
|
})
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 处理轨迹plc信号
|
||||||
|
handleTrajectoryUdp = async (strArr: string[]) => {
|
||||||
|
let num = 2;
|
||||||
|
const judgeTimer = setInterval(async () => {
|
||||||
|
const msgStr = strArr[num];
|
||||||
|
if (msgStr == '') {
|
||||||
|
dConsole.info(JudgeTag, '模拟数据考试结束')
|
||||||
|
clearInterval(judgeTimer)
|
||||||
|
this.checkExamIsEnd(true)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const msg: PLCType = JSON.parse(strArr[num]);
|
||||||
|
num++
|
||||||
|
// 4.过程数据
|
||||||
|
this.tempData = msg
|
||||||
|
// this.judgeUI.isDwztRight = (msg?.gps?.dwzt == 4 && msg?.gps?.jdzt == 3);
|
||||||
|
this.judgeUI.sd = Math.floor(msg?.gps?.sd * 1.852) + '';
|
||||||
|
this.judgeUI.dw = Math.floor(msg?.sensor?.dw) + ''
|
||||||
|
this.plcData = msg
|
||||||
|
// this.judgeUI.isDwztRight = msg.gps.dwzt == 4;
|
||||||
|
AppStorage.setOrCreate('msgStr', '')
|
||||||
|
if (msg.method === 'examJudgeArtificialItem') {
|
||||||
|
this.setJudgeItem(msg.itemno, msg.type)
|
||||||
|
}
|
||||||
|
if (msg.method === 'examJudgeArtificialMark') {
|
||||||
|
this.setJudgeItem(msg.itemno, msg.serial)
|
||||||
|
}
|
||||||
|
await examJudgeRealExam(msg)
|
||||||
|
// const bytes = await this.getMessageHeartbeat();
|
||||||
|
// bytes && globalThis.judgeUdp.send(bytes)
|
||||||
|
|
||||||
|
}, 200)
|
||||||
|
// TODO 定时器缺失
|
||||||
|
// globalThis.judgeTimer = judgeTimer;
|
||||||
|
}
|
||||||
|
|
||||||
constructor(judgeUI: JudgeUI) {
|
constructor(judgeUI: JudgeUI) {
|
||||||
this.serialIndex = 1;
|
this.serialIndex = 1;
|
||||||
|
|||||||
BIN
entry/src/main/resources/rawfile/voice/end_tip.mp3
Normal file
BIN
entry/src/main/resources/rawfile/voice/end_tip.mp3
Normal file
Binary file not shown.
BIN
entry/src/main/resources/rawfile/voice/zhpp.mp3
Normal file
BIN
entry/src/main/resources/rawfile/voice/zhpp.mp3
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user