合并公共代码
This commit is contained in:
parent
7e75fef1a6
commit
0a2ec28599
@ -264,7 +264,8 @@ export const DefaultJudgeConfigData: DefaultJudgeConfigObj = {
|
|||||||
//里程不够允许手工点靠边停车
|
//里程不够允许手工点靠边停车
|
||||||
param_387: '0',
|
param_387: '0',
|
||||||
//监管模式有扣分续考(0-否++1-是+把上次未考完的扣分带下来重新考试)
|
//监管模式有扣分续考(0-否++1-是+把上次未考完的扣分带下来重新考试)
|
||||||
param_432: '1'
|
param_432: '1',
|
||||||
|
param_634: "1"
|
||||||
}
|
}
|
||||||
|
|
||||||
//所有的科二 科目三项目
|
//所有的科二 科目三项目
|
||||||
|
|||||||
@ -309,6 +309,7 @@ export interface ProjectInfo {
|
|||||||
isRequired?: boolean
|
isRequired?: boolean
|
||||||
//项目状态:未做 正在做 及格 不及格 有扣分
|
//项目状态:未做 正在做 及格 不及格 有扣分
|
||||||
type?: '1' | '2' | '3' | '4' | '5'
|
type?: '1' | '2' | '3' | '4' | '5'
|
||||||
|
ykType?: '1' | '2' | '3' | '4' | '5'
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 科目二项目代码 **/
|
/** 科目二项目代码 **/
|
||||||
|
|||||||
@ -1,8 +1,12 @@
|
|||||||
import {
|
import {
|
||||||
CarInfoType,
|
CarInfoType,
|
||||||
|
JudgeBeginObj,
|
||||||
|
JudgeCallBackData,
|
||||||
JudgeConfigObj,
|
JudgeConfigObj,
|
||||||
|
JudgeInitObj,
|
||||||
JudgeSound,
|
JudgeSound,
|
||||||
JudgeUI,
|
JudgeUI,
|
||||||
|
KmItem,
|
||||||
MarkRule,
|
MarkRule,
|
||||||
ProcessDataEnumType,
|
ProcessDataEnumType,
|
||||||
Project,
|
Project,
|
||||||
@ -16,11 +20,21 @@ import { JudgePage } from "../Judge"
|
|||||||
import VoiceAnnounce from '../judgeSDK/utils/voiceAnnouncements'
|
import VoiceAnnounce from '../judgeSDK/utils/voiceAnnouncements'
|
||||||
import { dConsole } from '../../utils/LogWorker'
|
import { dConsole } from '../../utils/LogWorker'
|
||||||
import { JudgeConfig, JudgeTag } from '../../config'
|
import { JudgeConfig, JudgeTag } from '../../config'
|
||||||
import { examJudgeArtificialItem, examJudgeEndExam, examJudgeSoundEnd } from './JudgeSDKUtils'
|
import {
|
||||||
|
examJudgeArtificialItem,
|
||||||
|
examJudgeBeginExam,
|
||||||
|
examJudgeEndExam,
|
||||||
|
examJudgeInit,
|
||||||
|
examJudgeSetLogCallback,
|
||||||
|
examJudgeSetPerformCallback,
|
||||||
|
examJudgeSetRealExamCallback,
|
||||||
|
examJudgeSoundEnd
|
||||||
|
} from './JudgeSDKUtils'
|
||||||
import { ProjectStart, UploadProgressPhoto } from './ProcessDataProcessing'
|
import { ProjectStart, UploadProgressPhoto } from './ProcessDataProcessing'
|
||||||
import { endRecordVideo } from '../../utils/Video'
|
import { endRecordVideo, saveStartRecordVideo } from '../../utils/Video'
|
||||||
import router from '@ohos.router'
|
import router from '@ohos.router'
|
||||||
import { GetSyncData, UpdateTableByArray } from '../../utils/table/Operation'
|
import { GetSyncData, UpdateTableByArray } from '../../utils/table/Operation'
|
||||||
|
import { CurrentProjectConversion, DeductionProjectConversion, DetectingDifferences, GetCarStatus } from './utils'
|
||||||
|
|
||||||
|
|
||||||
export interface GetSysSetResult {
|
export interface GetSysSetResult {
|
||||||
@ -291,15 +305,16 @@ export class BaseJudge {
|
|||||||
Reflect.ownKeys(projectsObj).forEach(projectKey => {
|
Reflect.ownKeys(projectsObj).forEach(projectKey => {
|
||||||
const projectObj: ProjectInfo = Reflect.get(projectsObj, projectKey)
|
const projectObj: ProjectInfo = Reflect.get(projectsObj, projectKey)
|
||||||
const type = projectObj.type
|
const type = projectObj.type
|
||||||
|
const ykType = projectObj.ykType
|
||||||
const isRequired = projectObj.isRequired
|
const isRequired = projectObj.isRequired
|
||||||
allProjectNum += 1;
|
allProjectNum += 1;
|
||||||
if (type == '3' || type == '4') {
|
if (type == '3' || type == '4' || ykType === "3" || ykType === "4") {
|
||||||
allEndProjectsNum += 1;
|
allEndProjectsNum += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isRequired) {
|
if (isRequired) {
|
||||||
projectNum += 1;
|
projectNum += 1;
|
||||||
if (type == '3' || type == '4') {
|
if (type == '3' || type == '4' || ykType === "3" || ykType === "4") {
|
||||||
endProjectsNum += 1;
|
endProjectsNum += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -540,4 +555,368 @@ export class BaseJudge {
|
|||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async judgeStart(callBack: Function, judgeUI: JudgePage, that: JudgeBusiness, beginExamInfo: JudgeBeginObj, initInfo: JudgeInitObj) {
|
||||||
|
const name = judgeUI.name
|
||||||
|
const kssycs = judgeUI.kssycs
|
||||||
|
// 处理远程扣分使用
|
||||||
|
// 处理单机模式
|
||||||
|
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.注册日志回调完成')
|
||||||
|
|
||||||
|
//相关评判初始化只做一次
|
||||||
|
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 this.judging(strData, callBack, judgeUI, that)
|
||||||
|
})
|
||||||
|
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
|
||||||
|
})
|
||||||
|
|
||||||
|
// 3.开始考试
|
||||||
|
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
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
async judging(strData: string, callBack: Function, judgeUI: JudgePage, 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
|
||||||
|
switch (event) {
|
||||||
|
// 项目开始
|
||||||
|
case 1: {
|
||||||
|
dConsole.info(JudgeTag, "项目开始")
|
||||||
|
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
||||||
|
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 || "";
|
||||||
|
const xmmcCode = project.projectCodeCenter || "";
|
||||||
|
const kmItem: KmItem = Reflect.get(that.kmItems, xmmcCode)
|
||||||
|
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: {
|
||||||
|
dConsole.info(JudgeTag, "项目结束")
|
||||||
|
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
||||||
|
const xmmcCode = project.projectCodeCenter || "";
|
||||||
|
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
|
||||||
|
}
|
||||||
|
const kmItem: KmItem = Reflect.get(that.kmItems, xmmcCode)
|
||||||
|
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: {
|
||||||
|
dConsole.info(JudgeTag, "项目扣分")
|
||||||
|
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)
|
||||||
|
judgeUI.kfArr.push(kfObj)
|
||||||
|
dConsole.log(JudgeTag, "扣分类组装", judgeUI.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: {
|
||||||
|
that.carztStr = GetCarStatus(carzt);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 考试结束
|
||||||
|
case 5: {
|
||||||
|
dConsole.info(JudgeTag, "考试结束")
|
||||||
|
that.ksjs = ksjs;
|
||||||
|
// await fileLog?.setExamJudgeData(JSON.stringify({
|
||||||
|
// method: 'examJudgeEndExam'
|
||||||
|
// }))
|
||||||
|
dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify({
|
||||||
|
method: 'examJudgeEndExam'
|
||||||
|
}))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 项目取消
|
||||||
|
case 6: {
|
||||||
|
dConsole.info(JudgeTag, '项目取消');
|
||||||
|
const xmdm = xmqx.xmdm;
|
||||||
|
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
||||||
|
const xmmcCode = project.projectCodeCenter || "";
|
||||||
|
project.type = '1'
|
||||||
|
const kmItem: KmItem = Reflect.get(that.kmItems, xmmcCode)
|
||||||
|
Reflect.set(judgeUI.projectsObj, xmdm, project)
|
||||||
|
kmItem.status = 1
|
||||||
|
Reflect.set(that.kmItems, xmmcCode, kmItem)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 语音播报和提示
|
||||||
|
case 7: {
|
||||||
|
dConsole.info(JudgeTag, '播放语音');
|
||||||
|
this.goJudgeVoice(sound, that.avPlayer!)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 模拟灯光事件
|
||||||
|
case 8: {
|
||||||
|
that.mndgStr = mndg
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 车道和路段变化
|
||||||
|
case 9: {
|
||||||
|
judgeUI.lane = lane
|
||||||
|
that.lane = lane;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 预进项目事件
|
||||||
|
case 10: {
|
||||||
|
dConsole.info(JudgeTag, '预进项目');
|
||||||
|
const xmdm = precast.xmdm
|
||||||
|
const xmxh = precast.xmxh
|
||||||
|
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
||||||
|
const xmmcCode: string = project.projectCodeCenter!;
|
||||||
|
const xmmcSingleCode: string = project.projectCode!;
|
||||||
|
const kmItem: KmItem = Reflect.get(that.kmItems, xmmcCode)
|
||||||
|
const xmmcStr = project?.name || "";
|
||||||
|
kmItem.status = 2;
|
||||||
|
Reflect.set(that.kmItems, xmmcCode, project)
|
||||||
|
that.xmmcStr = xmmcStr || "";
|
||||||
|
that.xmmcCode = xmmcCode || "";
|
||||||
|
that.xmdm = xmdm;
|
||||||
|
that.xmxh = xmxh;
|
||||||
|
that.xmmcSingleCode = xmmcSingleCode || "";
|
||||||
|
project.type = '2';
|
||||||
|
Reflect.set(judgeUI.projectsObj, xmdm, project)
|
||||||
|
}
|
||||||
|
// 差分事件
|
||||||
|
case 11: {
|
||||||
|
DetectingDifferences(nongps.type, that.avPlayer!)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
callBack({
|
||||||
|
//项目名称 考车状态 扣分arr
|
||||||
|
xmmcStr: that.xmmcStr, carztStr: that.carztStr, kfArr: judgeUI.kfArr
|
||||||
|
});
|
||||||
|
// TODO 语音播报
|
||||||
|
this.changeExamStatus(event, xmdm, judgeUI.kfArr!, judgeUI, that);
|
||||||
|
// 更新ui
|
||||||
|
if (event == 1 || event == 2 || event == 3 || event == 6) {
|
||||||
|
judgeUI.projectsObj = JSON.parse(JSON.stringify(judgeUI.projectsObj))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async judgeEnd(judgeUI: JudgePage, 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -21,7 +21,7 @@ import { JudgeTag } from '../../config'
|
|||||||
import { examJudgeRealExam } from './JudgeSDKUtils'
|
import { examJudgeRealExam } from './JudgeSDKUtils'
|
||||||
import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker'
|
import { DifferentialAndSignal } from '../../utils/business/DifferentialAndSignalWorker'
|
||||||
import { PlcStrToJson, PlcStrToWXJson } from './utils'
|
import { PlcStrToJson, PlcStrToWXJson } from './utils'
|
||||||
import { BaseJudgeImpl, SetJudgeItem } from './Typing'
|
import { BaseJudgeImpl, SetJudgeItem } from './BaseJudgeBussines'
|
||||||
import { JudgePage } from '../Judge';
|
import { JudgePage } from '../Judge';
|
||||||
|
|
||||||
export default class JudgeBusiness {
|
export default class JudgeBusiness {
|
||||||
|
|||||||
@ -21,7 +21,9 @@ import {
|
|||||||
SyssetConfig,
|
SyssetConfig,
|
||||||
SYSTEM_PARAM,
|
SYSTEM_PARAM,
|
||||||
Project,
|
Project,
|
||||||
ProjectInfos
|
ProjectInfos,
|
||||||
|
JudgeCallBackData,
|
||||||
|
KmItem
|
||||||
} from '../../model';
|
} from '../../model';
|
||||||
import common from '@ohos.app.ability.common';
|
import common from '@ohos.app.ability.common';
|
||||||
import { dConsole } from '../../utils/LogWorker';
|
import { dConsole } from '../../utils/LogWorker';
|
||||||
@ -36,16 +38,15 @@ import {
|
|||||||
import JudgeBusiness from './JudgeBusiness';
|
import JudgeBusiness from './JudgeBusiness';
|
||||||
import { saveStartRecordVideo } from '../../utils/Video';
|
import { saveStartRecordVideo } from '../../utils/Video';
|
||||||
import router from '@ohos.router';
|
import router from '@ohos.router';
|
||||||
import systemTime from '@ohos.systemTime';
|
|
||||||
import { GetModelData } from './utils';
|
import { GetModelData } from './utils';
|
||||||
import { BaseJudgeImpl, GetSysSetResult } from './Typing';
|
import { BaseJudge, BaseJudgeImpl, GetSysSetResult } from './BaseJudgeBussines';
|
||||||
import { GetSyncData } from '../../utils/table/Operation';
|
import { GetSyncData } from '../../utils/table/Operation';
|
||||||
import promptAction from '@ohos.promptAction';
|
import promptAction from '@ohos.promptAction';
|
||||||
import { JudgePage } from '../Judge';
|
import { JudgePage } from '../Judge';
|
||||||
import systemDateTime from '@ohos.systemDateTime';
|
import systemDateTime from '@ohos.systemDateTime';
|
||||||
|
import { testKm2Items, testKm3Items } from '../../mock';
|
||||||
|
|
||||||
|
export class LargeJudge extends BaseJudge implements BaseJudgeImpl {
|
||||||
export class LargeJudge implements BaseJudgeImpl {
|
|
||||||
private mockLight: boolean = false
|
private mockLight: boolean = false
|
||||||
private mode: number = 1
|
private mode: number = 1
|
||||||
|
|
||||||
@ -187,6 +188,7 @@ export class LargeJudge implements BaseJudgeImpl {
|
|||||||
let singlePlay: boolean = AppStorage.get("singlePlay")!
|
let singlePlay: boolean = AppStorage.get("singlePlay")!
|
||||||
let systemparmArr: Array<SYSTEM_PARAM> = []
|
let systemparmArr: Array<SYSTEM_PARAM> = []
|
||||||
let projects: Array<Project> = []
|
let projects: Array<Project> = []
|
||||||
|
let examSubject: string = AppStorage.get<CarInfoType>('carInfo')!.examSubject!
|
||||||
if (this.mode === 2) {
|
if (this.mode === 2) {
|
||||||
totalScore = Number(currentParams.score) || 100
|
totalScore = Number(currentParams.score) || 100
|
||||||
}
|
}
|
||||||
@ -336,13 +338,13 @@ export class LargeJudge implements BaseJudgeImpl {
|
|||||||
});
|
});
|
||||||
router.back();
|
router.back();
|
||||||
}
|
}
|
||||||
// (examSubject === '2' ? testKm2Items : testKm3Items).forEach(item => {
|
(examSubject === '2' ? testKm2Items : testKm3Items).forEach(item => {
|
||||||
// let project: ProjectInfo = Reflect.get(judgeUI.projectsCenterObj, item.code)
|
let project: ProjectInfo = Reflect.get(judgeUI.projectsCenterObj, item.code)
|
||||||
// Reflect.set(that.kmItems, item.code, {
|
Reflect.set(that.kmItems, item.code, {
|
||||||
// code: item.code,
|
code: item.code,
|
||||||
// status: project === undefined ? 0 : (project.isEnd ? 3 : 1)
|
status: project === undefined ? 0 : (project.isEnd ? 3 : 1)
|
||||||
// })
|
})
|
||||||
// })
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
totalScore,
|
totalScore,
|
||||||
@ -360,13 +362,7 @@ export class LargeJudge implements BaseJudgeImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async JudgeStart(callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) {
|
public async JudgeStart(callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) {
|
||||||
const name = judgeUI.name
|
|
||||||
const kssycs = judgeUI.kssycs
|
|
||||||
// 处理远程扣分使用
|
|
||||||
const manualMarkRules = judgeUI.manualMarkRules
|
|
||||||
// 处理单机模式
|
|
||||||
const isTrajectoryOpen = JudgeConfig.isTrajectoryOpen;
|
const isTrajectoryOpen = JudgeConfig.isTrajectoryOpen;
|
||||||
const isJudgeInitBool = AppStorage.get<boolean>('isJudgeInitBool');
|
|
||||||
const trajectoryPath = JudgeConfig.trajectoryPath;
|
const trajectoryPath = JudgeConfig.trajectoryPath;
|
||||||
let strArr: string[] = [];
|
let strArr: string[] = [];
|
||||||
if (isTrajectoryOpen) {
|
if (isTrajectoryOpen) {
|
||||||
@ -374,70 +370,106 @@ export class LargeJudge implements BaseJudgeImpl {
|
|||||||
const str: string = await that.fileUtil.readFile(folderPath)
|
const str: string = await that.fileUtil.readFile(folderPath)
|
||||||
strArr = str.split('\n')
|
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 this.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);
|
let initInfo: JudgeInitObj = isTrajectoryOpen ? JSON.parse(strArr[0]) : await this.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 this.Judging(strData, callBack, judgeUI, that)
|
|
||||||
})
|
|
||||||
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
|
let beginExamInfo: JudgeBeginObj | undefined = undefined
|
||||||
// 3.开始考试
|
|
||||||
if (isTrajectoryOpen) {
|
if (isTrajectoryOpen) {
|
||||||
beginExamInfo = JSON.parse(strArr[1])
|
beginExamInfo = JSON.parse(strArr[1])
|
||||||
beginExamInfo && (beginExamInfo.replay = 1)
|
beginExamInfo && (beginExamInfo.replay = 1)
|
||||||
} else {
|
} else {
|
||||||
beginExamInfo = await this.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)
|
beginExamInfo = await this.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) {
|
super.judgeStart(callBack, judgeUI, that, beginExamInfo!, initInfo)
|
||||||
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
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
public async Judging(strData: string, callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) {
|
public async Judging(strData: string, callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) {
|
||||||
|
let examData: JudgeCallBackData = JSON.parse(strData);
|
||||||
|
const xmks = examData.xmks
|
||||||
|
const kf = examData.kf
|
||||||
|
const event = examData.event
|
||||||
|
const xmjs = examData.xmjs
|
||||||
|
|
||||||
|
const xmdm = event == 2 ? xmjs.xmdm : xmks.xmdm
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
// 项目开始
|
||||||
|
case 1: {
|
||||||
|
if (this.mode === 2) {
|
||||||
|
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
||||||
|
project.ykType = '2';
|
||||||
|
Reflect.set(judgeUI.projectsObj, xmdm, project)
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 项目结束
|
||||||
|
case 2: {
|
||||||
|
if (this.mode === 2) {
|
||||||
|
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
||||||
|
project.ykType = xmjs.xmhg === 0 ? '4' : '3';
|
||||||
|
Reflect.set(judgeUI.projectsObj, xmdm, project)
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 扣分
|
||||||
|
case 3: {
|
||||||
|
if (kf.xmdm != 20) {
|
||||||
|
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, kf.xmdm)
|
||||||
|
const type = project.type;
|
||||||
|
if (this.mode === 2) {
|
||||||
|
project.ykType = (type === "3" || type === "4") ? '4' : '5';
|
||||||
|
Reflect.set(judgeUI.projectsObj, kf.xmdm, project)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 考试状态
|
||||||
|
case 4: {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 考试结束
|
||||||
|
case 5: {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 项目取消
|
||||||
|
case 6: {
|
||||||
|
if (this.mode === 2) {
|
||||||
|
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
||||||
|
project.ykType = '1';
|
||||||
|
Reflect.set(judgeUI.projectsObj, xmdm, project)
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 语音播报和提示
|
||||||
|
case 7: {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 模拟灯光事件
|
||||||
|
case 8: {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 车道和路段变化
|
||||||
|
case 9: {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// 预进项目事件
|
||||||
|
case 10: {
|
||||||
|
if (this.mode === 2) {
|
||||||
|
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
||||||
|
project.ykType = '2';
|
||||||
|
Reflect.set(judgeUI.projectsObj, xmdm, project)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 差分事件
|
||||||
|
case 11: {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
super.judging(strData, callBack, judgeUI, that)
|
||||||
}
|
}
|
||||||
|
|
||||||
public async JudgeEnd(judgeUI: JudgePage, that: JudgeBusiness, isManual?: boolean) {
|
public async JudgeEnd(judgeUI: JudgePage, that: JudgeBusiness, isManual?: boolean) {
|
||||||
|
super.judgeEnd(judgeUI, that, isManual)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -46,7 +46,7 @@ import {
|
|||||||
GetCarStatus,
|
GetCarStatus,
|
||||||
GetModelData
|
GetModelData
|
||||||
} from './utils';
|
} from './utils';
|
||||||
import { BaseJudge, BaseJudgeImpl, GetSysSetResult } from './Typing';
|
import { BaseJudge, BaseJudgeImpl, GetSysSetResult } from './BaseJudgeBussines';
|
||||||
import { GetSyncData } from '../../utils/table/Operation';
|
import { GetSyncData } from '../../utils/table/Operation';
|
||||||
import promptAction from '@ohos.promptAction';
|
import promptAction from '@ohos.promptAction';
|
||||||
import { JudgePage } from '../Judge';
|
import { JudgePage } from '../Judge';
|
||||||
@ -315,12 +315,8 @@ export class SmallJudge extends BaseJudge implements BaseJudgeImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async JudgeStart(callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) {
|
public async JudgeStart(callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) {
|
||||||
const name = judgeUI.name
|
|
||||||
const kssycs = judgeUI.kssycs
|
|
||||||
const manualMarkRules = judgeUI.manualMarkRules
|
|
||||||
// 处理单机模式
|
|
||||||
const isTrajectoryOpen = JudgeConfig.isTrajectoryOpen;
|
const isTrajectoryOpen = JudgeConfig.isTrajectoryOpen;
|
||||||
const isJudgeInitBool = AppStorage.get<boolean>('isJudgeInitBool');
|
|
||||||
const trajectoryPath = JudgeConfig.trajectoryPath;
|
const trajectoryPath = JudgeConfig.trajectoryPath;
|
||||||
let strArr: string[] = [];
|
let strArr: string[] = [];
|
||||||
if (isTrajectoryOpen) {
|
if (isTrajectoryOpen) {
|
||||||
@ -328,361 +324,23 @@ export class SmallJudge extends BaseJudge implements BaseJudgeImpl {
|
|||||||
const str: string = await that.fileUtil.readFile(folderPath)
|
const str: string = await that.fileUtil.readFile(folderPath)
|
||||||
strArr = str.split('\n')
|
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 this.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);
|
let initInfo: JudgeInitObj = isTrajectoryOpen ? JSON.parse(strArr[0]) : await this.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.info(JudgeTag, "评判初始化参数", initInfo)
|
|
||||||
let ret = await examJudgeInit(initInfo);
|
|
||||||
AppStorage.setOrCreate('isJudgeInitBool', true)
|
|
||||||
dConsole.info(JudgeTag, '4.评判初始化完成', ret)
|
|
||||||
}
|
|
||||||
AppStorage.setOrCreate('isJudge', true)
|
|
||||||
// 2.评判过程回调
|
|
||||||
await examJudgeSetRealExamCallback(async (strData: string, len: number) => {
|
|
||||||
// 评判回调日志
|
|
||||||
dConsole.writeProcessData(ProcessDataEnumType.JudgeProgressCallbackData, strData)
|
|
||||||
dConsole.info(JudgeTag, '评判回调数据', strData)
|
|
||||||
dConsole.info("lixiao", '评判回调数据', strData)
|
|
||||||
await this.Judging(strData, callBack, judgeUI, that)
|
|
||||||
})
|
|
||||||
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
|
let beginExamInfo: JudgeBeginObj | undefined = undefined
|
||||||
// 3.开始考试
|
|
||||||
if (isTrajectoryOpen) {
|
if (isTrajectoryOpen) {
|
||||||
beginExamInfo = JSON.parse(strArr[1])
|
beginExamInfo = JSON.parse(strArr[1])
|
||||||
beginExamInfo && (beginExamInfo.replay = 1)
|
beginExamInfo && (beginExamInfo.replay = 1)
|
||||||
} else {
|
} else {
|
||||||
beginExamInfo = await this.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)
|
beginExamInfo = await this.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) {
|
super.judgeStart(callBack, judgeUI, that, beginExamInfo!, initInfo)
|
||||||
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
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
public async Judging(strData: string, callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) {
|
public async Judging(strData: string, callBack: Function, judgeUI: JudgePage, that: JudgeBusiness) {
|
||||||
let examData: JudgeCallBackData = JSON.parse(strData);
|
super.judging(strData, callBack, judgeUI, that)
|
||||||
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
|
|
||||||
switch (event) {
|
|
||||||
// 项目开始
|
|
||||||
case 1: {
|
|
||||||
dConsole.info(JudgeTag, "项目开始")
|
|
||||||
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
|
||||||
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 || "";
|
|
||||||
const xmmcCode = project.projectCodeCenter || "";
|
|
||||||
const kmItem: KmItem = Reflect.get(that.kmItems, xmmcCode)
|
|
||||||
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: {
|
|
||||||
dConsole.info(JudgeTag, "项目结束")
|
|
||||||
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
|
||||||
const xmmcCode = project.projectCodeCenter || "";
|
|
||||||
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
|
|
||||||
}
|
|
||||||
const kmItem: KmItem = Reflect.get(that.kmItems, xmmcCode)
|
|
||||||
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: {
|
|
||||||
dConsole.info(JudgeTag, "项目扣分")
|
|
||||||
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)
|
|
||||||
judgeUI.kfArr.push(kfObj)
|
|
||||||
dConsole.log(JudgeTag, "扣分类组装", judgeUI.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: {
|
|
||||||
that.carztStr = GetCarStatus(carzt);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// 考试结束
|
|
||||||
case 5: {
|
|
||||||
dConsole.info(JudgeTag, "考试结束")
|
|
||||||
that.ksjs = ksjs;
|
|
||||||
// await fileLog?.setExamJudgeData(JSON.stringify({
|
|
||||||
// method: 'examJudgeEndExam'
|
|
||||||
// }))
|
|
||||||
dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify({
|
|
||||||
method: 'examJudgeEndExam'
|
|
||||||
}))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// 项目取消
|
|
||||||
case 6: {
|
|
||||||
dConsole.info(JudgeTag, '项目取消');
|
|
||||||
const xmdm = xmqx.xmdm;
|
|
||||||
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
|
||||||
const xmmcCode = project.projectCodeCenter || "";
|
|
||||||
project.type = '1'
|
|
||||||
const kmItem: KmItem = Reflect.get(that.kmItems, xmmcCode)
|
|
||||||
Reflect.set(judgeUI.projectsObj, xmdm, project)
|
|
||||||
kmItem.status = 1
|
|
||||||
Reflect.set(that.kmItems, xmmcCode, kmItem)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// 语音播报和提示
|
|
||||||
case 7: {
|
|
||||||
dConsole.info(JudgeTag, '播放语音');
|
|
||||||
this.goJudgeVoice(sound, that.avPlayer!)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// 模拟灯光事件
|
|
||||||
case 8: {
|
|
||||||
that.mndgStr = mndg
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// 车道和路段变化
|
|
||||||
case 9: {
|
|
||||||
judgeUI.lane = lane
|
|
||||||
that.lane = lane;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// 预进项目事件
|
|
||||||
case 10: {
|
|
||||||
dConsole.info(JudgeTag, '预进项目');
|
|
||||||
const xmdm = precast.xmdm
|
|
||||||
const xmxh = precast.xmxh
|
|
||||||
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
|
||||||
const xmmcCode: string = project.projectCodeCenter!;
|
|
||||||
const xmmcSingleCode: string = project.projectCode!;
|
|
||||||
const kmItem: KmItem = Reflect.get(that.kmItems, xmmcCode)
|
|
||||||
const xmmcStr = project?.name || "";
|
|
||||||
kmItem.status = 2;
|
|
||||||
Reflect.set(that.kmItems, xmmcCode, project)
|
|
||||||
that.xmmcStr = xmmcStr || "";
|
|
||||||
that.xmmcCode = xmmcCode || "";
|
|
||||||
that.xmdm = xmdm;
|
|
||||||
that.xmxh = xmxh;
|
|
||||||
that.xmmcSingleCode = xmmcSingleCode || "";
|
|
||||||
project.type = '2';
|
|
||||||
Reflect.set(judgeUI.projectsObj, xmdm, project)
|
|
||||||
}
|
|
||||||
// 差分事件
|
|
||||||
case 11: {
|
|
||||||
DetectingDifferences(nongps.type, that.avPlayer!)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
callBack({
|
|
||||||
//项目名称 考车状态 扣分arr
|
|
||||||
xmmcStr: that.xmmcStr, carztStr: that.carztStr, kfArr: judgeUI.kfArr
|
|
||||||
});
|
|
||||||
// TODO 语音播报
|
|
||||||
this.changeExamStatus(event, xmdm, judgeUI.kfArr!, judgeUI, that);
|
|
||||||
// 更新ui
|
|
||||||
if (event == 1 || event == 2 || event == 3 || event == 6) {
|
|
||||||
judgeUI.projectsObj = JSON.parse(JSON.stringify(judgeUI.projectsObj))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async JudgeEnd(judgeUI: JudgePage, that: JudgeBusiness, isManual?: boolean) {
|
public async JudgeEnd(judgeUI: JudgePage, that: JudgeBusiness, isManual?: boolean) {
|
||||||
const isAllProjectsEnd = judgeUI.isAllProjectsEnd
|
super.judgeEnd(judgeUI, that, isManual)
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user