refactor: 更新类型定义,优化代码可读性

This commit is contained in:
wangzhongjie 2025-04-11 11:01:48 +08:00
commit a75bba1761
5 changed files with 76 additions and 65 deletions

View File

@ -112,7 +112,7 @@ export interface CarInfoType {
examinationRoomId?: string; examinationRoomId?: string;
plateNo?: string; plateNo?: string;
carNo?: string; carNo?: string;
examSubject: string; examSubject?: string;
isNeedCheck?: string; isNeedCheck?: string;
udpAddress?: string udpAddress?: string
messagePort?: string messagePort?: string

View File

@ -120,7 +120,6 @@ struct Index {
@State isDeductedPopShow: boolean = false @State isDeductedPopShow: boolean = false
@State isAmplifyPopShow: boolean = false @State isAmplifyPopShow: boolean = false
@State amplifiedImgIndex: number = 0 @State amplifiedImgIndex: number = 0
judge: Judge
//行驶距离 //行驶距离
@State jl: number = 0 @State jl: number = 0
//应考里程 //应考里程
@ -162,6 +161,7 @@ struct Index {
@State isErrorMsgEnd: boolean = false @State isErrorMsgEnd: boolean = false
@State disConnectErrorOpen: boolean = false @State disConnectErrorOpen: boolean = false
public context = getContext(this) as common.UIAbilityContext; public context = getContext(this) as common.UIAbilityContext;
private judge: Judge = new Judge(this)
async aboutToDisappear() { async aboutToDisappear() {
clearInterval(this.mileageTimer) clearInterval(this.mileageTimer)
@ -185,8 +185,7 @@ struct Index {
//断点续考 //断点续考
await this.goDdxkItems() await this.goDdxkItems()
//初始化评判 //初始化评判
const judge = await this.initJudge(); await this.initJudge();
this.judge = judge
} }
//初始化相关数据库表 //初始化相关数据库表
@ -522,16 +521,12 @@ struct Index {
// 评判相关初始化 // 评判相关初始化
async initJudge() { async initJudge() {
const JUDGEUI: JudgeUI = this; ;
const judge = new Judge(JUDGEUI); await this.judge.onJudgeFn(async (judgeData: JudgeCallBacData) => {
// await judge.init<typeof Index>()
await judge.onJudgeFn(async (judgeData: JudgeCallBacData) => {
// const { xmmcStr, carztStr, kfArr } = judgeData;
this.xmmcStr = judgeData.xmmcStr || ""; this.xmmcStr = judgeData.xmmcStr || "";
this.carztStr = judgeData.carztStr || ""; this.carztStr = judgeData.carztStr || "";
this.kfArr = judgeData.kfArr || []; this.kfArr = judgeData.kfArr || [];
}); });
return judge
} }
// 断点续考判断 // 断点续考判断

View File

@ -339,7 +339,7 @@ export default struct DeductedPopup {
} }
if (mark.itemno == 1 && Number(mark.markserial) > 100 && Number(mark.markserial) < 200) { if (mark.itemno == 1 && Number(mark.markserial) > 100 && Number(mark.markserial) < 200) {
this.markRuleListObj[`${mark.itemno}_${mark.markserial}`] = { Reflect.set(this.markRuleListObj, `${mark.itemno}_${mark.markserial}`, {
itemno: tempObj.itemno, itemno: tempObj.itemno,
markcatalog: tempObj.markcatalog, markcatalog: tempObj.markcatalog,
markshow: tempObj.markshow, markshow: tempObj.markshow,
@ -350,11 +350,9 @@ export default struct DeductedPopup {
OnlyOneKind: tempObj.OnlyOneKind, OnlyOneKind: tempObj.OnlyOneKind,
NoCancelId: tempObj.NoCancelId, NoCancelId: tempObj.NoCancelId,
GPS_SID: tempObj.GPS_SID, GPS_SID: tempObj.GPS_SID,
}; })
this.universalMarkRules.push(tempObj) this.universalMarkRules.push(tempObj)
} }
}) })
} }

View File

@ -41,6 +41,7 @@ import {
BaseInfoType, BaseInfoType,
CarInfoType, CarInfoType,
CDSBInfo, CDSBInfo,
CDSBInfos,
DrvexamType, DrvexamType,
ExaminerInfoType, ExaminerInfoType,
ItemInfo, ItemInfo,
@ -83,7 +84,7 @@ type GetDqxmStr = (xmdm: number) => string
type TJudgeBeginObj = JudgeBeginObj type TJudgeBeginObj = JudgeBeginObj
export default class Judge { export default class Judge {
public plcStr!: string public plcStr: string = ""
public judgeUI: JudgeUI public judgeUI: JudgeUI
//获取科目三的评判初始化配置 //获取科目三的评判初始化配置
getKm3JudgeInitConfig: GetKm3JudgeInitConfig = async () => { getKm3JudgeInitConfig: GetKm3JudgeInitConfig = async () => {
@ -92,8 +93,8 @@ export default class Judge {
map_point_item: this.judgeUI.mapPointItemArr, map_point_item: this.judgeUI.mapPointItemArr,
//科目三暂时为空 //科目三暂时为空
iteminfo: [], iteminfo: [],
roads: this.getModelData('km3/Roads.txt'), roads: this.getModelData('km3/Roads.txt') || "",
sharps: this.getModelData('km3/Sharps.txt') sharps: this.getModelData('km3/Sharps.txt') || ""
} }
} }
private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
@ -785,7 +786,7 @@ export default class Judge {
const kssycs = judgeUI.kssycs const kssycs = judgeUI.kssycs
const isDdxk = judgeUI.isDdxk const isDdxk = judgeUI.isDdxk
const ddxkTime = judgeUI.ddxkTime const ddxkTime = judgeUI.ddxkTime
const projectsCenterObj = judgeUI.projectsCenterObj const projectsCenterObj: object = judgeUI.projectsCenterObj
const ddxkKsxmArr = judgeUI.ddxkKsxmArr const ddxkKsxmArr = judgeUI.ddxkKsxmArr
const ddxkKfArr = judgeUI.ddxkKfArr const ddxkKfArr = judgeUI.ddxkKfArr
const passingScore = judgeUI.passingScore const passingScore = judgeUI.passingScore
@ -893,9 +894,9 @@ export default class Judge {
this.rmndg = 1 this.rmndg = 1
} }
this.judgeUI.currentXmdm = xmdm; this.judgeUI.currentXmdm = xmdm;
const xmmcStr = project?.name || ""; const xmmcStr = project.name || "";
const xmmcCode = project?.projectCodeCenter || ""; const xmmcCode = project.projectCodeCenter || "";
const xmmcSingleCode = project?.projectCode || ""; const xmmcSingleCode = project.projectCode || "";
const kmItem: KmItem = Reflect.get(this.kmItems, xmmcCode) const kmItem: KmItem = Reflect.get(this.kmItems, xmmcCode)
kmItem.status = 2; kmItem.status = 2;
this.xmmcStr = xmmcStr; this.xmmcStr = xmmcStr;
@ -1018,18 +1019,18 @@ export default class Judge {
const xmxh = precast.xmxh const xmxh = precast.xmxh
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm) const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
const projectCode = project.projectCode // const projectCode = project.projectCode
const xmmcCode = judgeUI.projectsObj[xmdm].projectCodeCenter; const xmmcCode: string = judgeUI.projectsObj[xmdm].projectCodeCenter;
const xmmcSingleCode = judgeUI.projectsObj[xmdm].projectCode; const xmmcSingleCode: string = judgeUI.projectsObj[xmdm].projectCode;
const kmItem: KmItem = Reflect.get(this.kmItems, xmmcCode) const kmItem: KmItem = Reflect.get(this.kmItems, xmmcCode)
const xmmcStr = project?.name || ""; const xmmcStr = project?.name || "";
kmItem.status = 2; kmItem.status = 2;
Reflect.set(this.kmItems, xmmcCode, project) Reflect.set(this.kmItems, xmmcCode, project)
this.xmmcStr = xmmcStr||""; this.xmmcStr = xmmcStr || "";
this.xmmcCode = xmmcCode||""; this.xmmcCode = xmmcCode || "";
this.xmdm = xmdm; this.xmdm = xmdm;
this.xmxh = xmxh; this.xmxh = xmxh;
this.xmmcSingleCode = xmmcSingleCode||""; this.xmmcSingleCode = xmmcSingleCode || "";
project.type = '2'; project.type = '2';
Reflect.set(this.judgeUI.projectsObj, xmdm, project) Reflect.set(this.judgeUI.projectsObj, xmdm, project)
} }
@ -1047,10 +1048,10 @@ export default class Judge {
}); });
//语音播报 //语音播报
this.goVoiceAnnounce(event, xmdm, this.kfArr||[], xmjs, ksjs, xmxh) this.goVoiceAnnounce(event, xmdm, this.kfArr || [], xmjs, ksjs, xmxh)
//更新UI //更新UI
if (event == 1 || event == 2 || event == 3 || event == 6) { if (event == 1 || event == 2 || event == 3 || event == 6) {
const copyProjectsObj = this.judgeUI.projectsObj; const copyProjectsObj: object = this.judgeUI.projectsObj;
judgeUI.projectsObj = deepClone(copyProjectsObj); judgeUI.projectsObj = deepClone(copyProjectsObj);
} }
} }
@ -1071,8 +1072,8 @@ export default class Judge {
const lane = this.lane const lane = this.lane
const closeAllFiles = this.closeAllFiles const closeAllFiles = this.closeAllFiles
const projectsObj = judgeUI.projectsObj const projectsObj: object = judgeUI.projectsObj
const judgeConfigObj = judgeUI.judgeConfigObj const judgeConfigObj: object = judgeUI.judgeConfigObj
const examSubject = judgeUI.examSubject const examSubject = judgeUI.examSubject
const jl = judgeUI.jl const jl = judgeUI.jl
const isAllProjectsEnd = judgeUI.isAllProjectsEnd const isAllProjectsEnd = judgeUI.isAllProjectsEnd
@ -1163,7 +1164,8 @@ export default class Judge {
const currentKf = kf[kfLen -1]; const currentKf = kf[kfLen -1];
if (JudgeConfig.kfVoiceOpen || (examSubject == '2' && judgeConfigObj['618'] == '1') || if (JudgeConfig.kfVoiceOpen || (examSubject == '2' && judgeConfigObj['618'] == '1') ||
(examSubject == '3' && judgeConfigObj['418'] == '1')) { (examSubject == '3' && judgeConfigObj['418'] == '1')) {
avPlayer?.playAudio([`voice/${currentKf.markcatalog}.mp3`, `voice/mark_${Math.abs(currentKf?.score||0)}.mp3`]) avPlayer?.playAudio([`voice/${currentKf.markcatalog}.mp3`,
`voice/mark_${Math.abs(currentKf?.score || 0)}.mp3`])
} }
const isStart = await checkProjectIsStart(Number(currentKf.xmdm), 2, currentKf); const isStart = await checkProjectIsStart(Number(currentKf.xmdm), 2, currentKf);
if (isStart) { if (isStart) {
@ -1185,7 +1187,7 @@ export default class Judge {
console.info(judgeTag, '考试结束') console.info(judgeTag, '考试结束')
//关闭录像 //关闭录像
const singlePlay = AppStorage.get<boolean>('singlePlay') const singlePlay = AppStorage.get<boolean>('singlePlay')
if (!singlePlay&&this.videoData) { if (!singlePlay && this.videoData) {
await endRecordVideo(this.videoData) await endRecordVideo(this.videoData)
} }
judgeTask.addTask(async () => { judgeTask.addTask(async () => {
@ -1228,10 +1230,10 @@ export default class Judge {
const idCard = judgeUI.idCard const idCard = judgeUI.idCard
const serialNumber = judgeUI.serialNumber const serialNumber = judgeUI.serialNumber
const ksdd = judgeUI.ksdd const ksdd = judgeUI.ksdd
const projectsObj = judgeUI.projectsObj const projectsObj: object = judgeUI.projectsObj
const time = GetCurrentTime(); const time = GetCurrentTime();
const project = this.getProjectInfo(ksxm); const project: ProjectInfo = this.getProjectInfo(ksxm);
//科目三夜间行驶.模拟灯光、上车准备出现通用评判ksxm为当前进行的项目 //科目三夜间行驶.模拟灯光、上车准备出现通用评判ksxm为当前进行的项目
const checkProjects = ['17', '41', '1']; const checkProjects = ['17', '41', '1'];
//获取正在进行的项目 //获取正在进行的项目
@ -1247,11 +1249,25 @@ export default class Judge {
} }
}) })
const ksxmD: string = project == undefined // const ksxmD: string = !project
? (commonKsxm // ? (commonKsxm
? (project?.projectCodeCenter||"") // ? (project?.projectCodeCenter!)
: (examSubject == '3' ? '30000' : (xmmcEndCode == undefined ? '10000' : xmmcEndCode))) // : (examSubject == '3' ? '30000' : (xmmcEndCode == undefined ? '10000' : xmmcEndCode)))
: project.projectCodeCenter // : project.projectCodeCenter
let ksxmD: string;
if (!project) {
if (commonKsxm) {
ksxmD = Reflect.get(projectsObj, commonKsxm).projectCodeCenter;
} else {
if (examSubject == '3') {
ksxmD = '30000';
} else {
ksxmD = (xmmcEndCode == undefined ? '10000' : xmmcEndCode);
}
}
} else {
ksxmD = project?.projectCodeCenter || "";
}
const drvexam: DrvexamType = { const drvexam: DrvexamType = {
lsh, lsh,
kskm: examSubject, kskm: examSubject,
@ -1259,7 +1275,7 @@ export default class Judge {
kfxm: kf.markcatalog, kfxm: kf.markcatalog,
kfxmmx: `${ksxm},${kf.markserial}`, kfxmmx: `${ksxm},${kf.markserial}`,
sfzmhm: idCard, sfzmhm: idCard,
kchp: encodeURI(carInfo?.plateNo||""), kchp: encodeURI(carInfo?.plateNo || ""),
//扣分方式 //扣分方式
kffs: kf.type == 0 ? 1 : 2, kffs: kf.type == 0 ? 1 : 2,
ksdd: encodeURI(ksdd), ksdd: encodeURI(ksdd),
@ -1278,7 +1294,7 @@ export default class Judge {
this.isJudgeDisConnect = true this.isJudgeDisConnect = true
} }
console.info(judgeTag, '项目扣分 end') console.info(judgeTag, '项目扣分 end')
promptWxCode('17C53', temp?.code||0) promptWxCode('17C53', temp?.code || 0)
} }
// 评判语音提示 // 评判语音提示
goJudgeVoice = async (sound: JudgeSound) => { goJudgeVoice = async (sound: JudgeSound) => {
@ -1369,9 +1385,9 @@ export default class Judge {
// 考试结束 // 考试结束
public endExam = async (isManual?: Boolean) => { public endExam = async (isManual?: Boolean) => {
const carInfo = AppStorage.get<CarInfoType>('carInfo')!; const carInfo = AppStorage.get<CarInfoType>('carInfo')!;
const singlePlay = AppStorage.get<boolean>('singlePlay')||false const singlePlay = AppStorage.get<boolean>('singlePlay') || false
const examSubject = carInfo?.examSubject||"2" const examSubject = carInfo?.examSubject || "2"
const plateNo = carInfo?.plateNo||"" const plateNo = carInfo?.plateNo || ""
const judgeUI = this.judgeUI const judgeUI = this.judgeUI
const ksjs = this.ksjs const ksjs = this.ksjs
@ -1393,11 +1409,11 @@ export default class Judge {
// await uploadDisConnectData(); // await uploadDisConnectData();
const time = GetCurrentTime(); const time = GetCurrentTime();
const photoBase64 = await getPhoto(); const photoBase64 = await getPhoto();
const d1 = ksjs?.d1||0; const d1 = ksjs?.d1 || 0;
const d2 = ksjs?.d2||0; const d2 = ksjs?.d2 || 0;
const d3 = ksjs?.d3||0; const d3 = ksjs?.d3 || 0;
const d4 = ksjs?.d4||0; const d4 = ksjs?.d4 || 0;
const d5 = ksjs?.d5||0; const d5 = ksjs?.d5 || 0;
const drvexam: DrvexamType = { const drvexam: DrvexamType = {
lsh, lsh,
@ -1422,11 +1438,11 @@ export default class Judge {
router.back() router.back()
}, 90 * 1000) }, 90 * 1000)
const temp = await this.sendWriteObjectOut(data, filePath); const temp = await this.sendWriteObjectOut(data, filePath);
promptWxCode('17C56', temp?.code||0) promptWxCode('17C56', temp?.code || 0)
if (temp.code != 1) { if (temp.code != 1) {
avPlayer?.playAudio(['voice/监管失败.mp3']) avPlayer?.playAudio(['voice/监管失败.mp3'])
this.judgeUI.errorMsg = decodeURIComponent(temp?.message||"") this.judgeUI.errorMsg = decodeURIComponent(temp?.message || "")
if (temp.code == 2300028 || temp.code == 2300007) { if (temp.code == 2300028 || temp.code == 2300007) {
this.judgeUI.errorMsg = '当前的考试过程信息监管审核未通过,程序将退出!' this.judgeUI.errorMsg = '当前的考试过程信息监管审核未通过,程序将退出!'
@ -1505,14 +1521,14 @@ export default class Judge {
let score = 0; let score = 0;
//结束考试时候是否播报一遍所有扣分 //结束考试时候是否播报一遍所有扣分
const param634: string = Reflect.get(judgeConfigObj, '634') const param634: string = Reflect.get(judgeConfigObj, '634')
if (kfArr&&kfArr.length && ((examSubject == '2' && param634 == '1') || examSubject == '3')) { if (kfArr && kfArr.length && ((examSubject == '2' && param634 == '1') || examSubject == '3')) {
avPlayer?.playAudio([`voice/kfdesc.mp3`], false, () => { avPlayer?.playAudio([`voice/kfdesc.mp3`], false, () => {
try { try {
kfArr.forEach((kf, index) => { kfArr.forEach((kf, index) => {
score += Math.abs(Number(kf.score)); score += Math.abs(Number(kf.score));
//TODO 考试分数待替换 //TODO 考试分数待替换
if (score <= (examSubject == '3' ? 10 : 20)) { if (score <= (examSubject == '3' ? 10 : 20)) {
if (kfArr&&kfArr.length - 1 === index) { if (kfArr && kfArr.length - 1 === index) {
avPlayer?.playAudio([`voice/${kf.markcatalog}.mp3`, voiceURL], false, () => { avPlayer?.playAudio([`voice/${kf.markcatalog}.mp3`, voiceURL], false, () => {
this.isUdpEnd = true; this.isUdpEnd = true;
closeAllFiles() closeAllFiles()
@ -1682,8 +1698,8 @@ export default class Judge {
//获取场地序号 //获取场地序号
getSbxh: GetgSbbm = (ksxm, xmxh) => { getSbxh: GetgSbbm = (ksxm, xmxh) => {
const judgeUI = this.judgeUI; const judgeUI = this.judgeUI;
const projectsObj = judgeUI.projectsObj; const projectsObj: object = judgeUI.projectsObj;
const cdsbInfoObj = judgeUI.cdsbInfoObj; const cdsbInfoObj: CDSBInfos = judgeUI.cdsbInfoObj!;
const project: ProjectInfo = Reflect.get(projectsObj, ksxm); const project: ProjectInfo = Reflect.get(projectsObj, ksxm);
if (judgeUI.examSubject == '3') { if (judgeUI.examSubject == '3') {
return '0000000000' return '0000000000'
@ -1693,24 +1709,24 @@ export default class Judge {
} }
const projectKey = `${ksxm}_${xmxh}`; const projectKey = `${ksxm}_${xmxh}`;
// const currentCdsb: CDSBInfo = Reflect.get(cdsbInfoObj, projectKey) || {} // const currentCdsb: CDSBInfo = Reflect.get(cdsbInfoObj, projectKey) || {}
const currentCdsb: CDSBInfo = (Reflect.get(cdsbInfoObj, projectKey) ?? {}) as CDSBInfo; const currentCdsb: CDSBInfo = Reflect.get(cdsbInfoObj, projectKey) ?? {} as CDSBInfo;
const sbxh: string = currentCdsb.sbbh || '0000000000' const sbxh: string = currentCdsb.sbbh || '0000000000'
return sbxh return sbxh
} }
getSbbm: GetgSbbm = (ksxm, xmxh) => { getSbbm: GetgSbbm = (ksxm, xmxh) => {
const judgeUI = this.judgeUI; const judgeUI = this.judgeUI;
const cdsbInfoObj = judgeUI.cdsbInfoObj; const cdsbInfoObj = judgeUI.cdsbInfoObj;
const projectsObj = judgeUI.projectsObj; const projectsObj: object = judgeUI.projectsObj;
const project: ProjectInfo = Reflect.get(projectsObj, ksxm); const project: ProjectInfo = Reflect.get(projectsObj, ksxm);
//科目三不需要 //科目三不需要
if (judgeUI.examSubject == '3') { if (judgeUI.examSubject == '3') {
return undefined return ""
} }
if (project === undefined) { if (project === undefined) {
return '00000000' return '00000000'
} }
const projectKey = `${ksxm}_${xmxh}`; const projectKey = `${ksxm}_${xmxh}`;
const currentCdsb: CDSBInfo = Reflect.get(cdsbInfoObj, projectKey) || {} const currentCdsb: CDSBInfo = Reflect.get(cdsbInfoObj!, projectKey) || {}
const sbxh: string = currentCdsb.sbbm || '00000000' const sbxh: string = currentCdsb.sbbm || '00000000'
return sbxh return sbxh
} }
@ -1757,7 +1773,7 @@ export default class Judge {
} }
// 统计必考项目、所有项目、已考数量 // 统计必考项目、所有项目、已考数量
setCountItems = async () => { setCountItems = async () => {
const projectsObj = this.judgeUI.projectsObj; const projectsObj: object = this.judgeUI.projectsObj;
//必考项目数量 必考项目已考数量 //必考项目数量 必考项目已考数量
let projectNum = 0, endProjectsNum = 0; let projectNum = 0, endProjectsNum = 0;
// 所有考试项目数量 项目已考项目数量 // 所有考试项目数量 项目已考项目数量
@ -1894,16 +1910,18 @@ export default class Judge {
// globalThis.laneData = performInfo.lane; // globalThis.laneData = performInfo.lane;
}) })
let beginExamInfo: JudgeBeginObj|undefined = undefined let beginExamInfo: JudgeBeginObj | undefined = undefined
// 3.开始考试 // 3.开始考试
if (isTrajectoryOpen) { if (isTrajectoryOpen) {
beginExamInfo = JSON.parse(strArr[1]) beginExamInfo = JSON.parse(strArr[1])
beginExamInfo.replay = 1 beginExamInfo && (beginExamInfo.replay = 1)
} else { } else {
beginExamInfo = await getJudgeBeginData() beginExamInfo = await getJudgeBeginData()
} }
await fileLog?.setExamJudgeData(JSON.stringify(beginExamInfo)) await fileLog?.setExamJudgeData(JSON.stringify(beginExamInfo))
await examJudgeBeginExam(beginExamInfo); if (beginExamInfo) {
await examJudgeBeginExam(beginExamInfo);
}
console.info(judgeTag, '6.开始考试注册完成') console.info(judgeTag, '6.开始考试注册完成')
avPlayer?.playAudio([judgeUI.singlePlay ? 'voice/ksks.wav' : 'voice/监管成功.mp3']) avPlayer?.playAudio([judgeUI.singlePlay ? 'voice/ksks.wav' : 'voice/监管成功.mp3'])

View File

@ -16,7 +16,7 @@ export function chunkArr<T>(arr: T[], size: number): T[][] {
} }
//对象深拷贝 //对象深拷贝
export function deepClone<T>(target: T): T { export function deepClone<T extends Object>(target: T): T {
// 如果是对象且不是原始值null // 如果是对象且不是原始值null
if (typeof target === 'object' && target !== null) { if (typeof target === 'object' && target !== null) {
// 创建容器 // 创建容器