feat: judge.ets文件修改
This commit is contained in:
parent
fab5f64df5
commit
f4c64fe800
@ -121,7 +121,7 @@ export async function writeObjectOut(params: RegulatoryInterfaceParams, filePath
|
||||
interface UploadExamProgressDataParams {
|
||||
carId: string
|
||||
examinationRoomId: string
|
||||
type: string
|
||||
type: number
|
||||
time: string
|
||||
cardNo: string
|
||||
examData: string
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import common from '@ohos.app.ability.common';
|
||||
// ------------------------------
|
||||
// 基础共用类型
|
||||
// ------------------------------
|
||||
@ -210,6 +211,12 @@ export interface Plc {
|
||||
vision: Vision,
|
||||
radar: Radar,
|
||||
extend: object
|
||||
|
||||
//轨迹回放需要
|
||||
method?:string
|
||||
itemno:string
|
||||
type:1|2
|
||||
serial:1|2
|
||||
}
|
||||
|
||||
interface Qfsj {
|
||||
@ -242,6 +249,8 @@ export interface DrvexamType extends BaseExamFields {
|
||||
ksxtbh?: string;
|
||||
ksysfzmhm?: string;
|
||||
Ksy2sfzmhm?: string;
|
||||
ksdd:string
|
||||
kslx:string
|
||||
}
|
||||
|
||||
|
||||
@ -410,9 +419,113 @@ export interface ProjectRoads{
|
||||
param_12?:string[]
|
||||
}
|
||||
|
||||
interface MAPPOINT{
|
||||
point_no: number,
|
||||
gps_e: number,
|
||||
gps_n: number,
|
||||
point_no_f: number,
|
||||
point_type: number,
|
||||
road_code: string,
|
||||
gps_e_Location: number
|
||||
gps_n_Location: number
|
||||
f_gps_e: number,
|
||||
f_gps_n: number,
|
||||
passed: number
|
||||
}
|
||||
|
||||
interface MAPITEMPOINTITEM {
|
||||
point_no: number,
|
||||
itemno: number,
|
||||
itemno1: number,
|
||||
subname: string
|
||||
}
|
||||
|
||||
export interface JudgeUI{
|
||||
context: common.UIAbilityContext;
|
||||
idCard:string
|
||||
startFullTime:string
|
||||
mapPointArr: MAPPOINT[]
|
||||
mapPointItemArr: MAPITEMPOINTITEM[]
|
||||
judgeConfigObj:object
|
||||
projectsObj:ProjectInfos
|
||||
|
||||
lsh:string
|
||||
totalScore:number
|
||||
passingScore:number
|
||||
serialNumber:string
|
||||
xldm:string
|
||||
kslx:string
|
||||
ksdd:string
|
||||
|
||||
isAllProjectsEnd:boolean
|
||||
examSubject:string
|
||||
singlePlay:boolean
|
||||
examMileage:string
|
||||
jl:number
|
||||
|
||||
isDeductedPopShow:boolean
|
||||
defaultTabIndex:number
|
||||
isDwztRight:boolean
|
||||
draw:boolean
|
||||
|
||||
|
||||
sd:string
|
||||
dw:string
|
||||
}
|
||||
|
||||
export interface Km3JudgeInitConfig{
|
||||
map_point: MAPPOINT[]
|
||||
map_point_item: MAPITEMPOINTITEM[]
|
||||
iteminfo:[]
|
||||
roads:string
|
||||
sharps:string
|
||||
}
|
||||
|
||||
export interface Ksjs{
|
||||
// 累计前进距离
|
||||
qjjl?: number,
|
||||
// 累计倒车距离
|
||||
dcjl?: number
|
||||
d1?: number
|
||||
d2?: number
|
||||
d3?: number
|
||||
d4?: number
|
||||
d5?: number
|
||||
d6?: number
|
||||
}
|
||||
|
||||
export interface CDSBInfo{
|
||||
kdid?: string
|
||||
sbbh?: string
|
||||
sbbm?: string
|
||||
itemsno?: string
|
||||
modelKey?: string
|
||||
xmdm?:string,
|
||||
xmxh?:string
|
||||
}
|
||||
|
||||
// export const defaultCdsbInfoObj:DefaultJudgeConfigObj = {
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
export interface JudgeUI_I{
|
||||
context:common.UIAbilityContext
|
||||
}
|
||||
|
||||
/****** 评判开始考试数据*****/
|
||||
export interface JudgeBeginObj{
|
||||
exam:0|1
|
||||
}
|
||||
|
||||
export interface DistanceClass{
|
||||
setTimeData:(n:number)=> void
|
||||
}
|
||||
|
||||
export interface WR {
|
||||
message?: string
|
||||
code?: number
|
||||
keystr?: string
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -50,7 +50,8 @@ import {
|
||||
UploadExamMileage,
|
||||
AmplifyItem,
|
||||
ProjectRoads,
|
||||
JudgeCallBacData
|
||||
JudgeCallBacData,
|
||||
JudgeUI
|
||||
} from '../model';
|
||||
import { GetSyncData } from '../utils/table/Operation';
|
||||
import dayTs from '../utils/Date';
|
||||
@ -99,8 +100,8 @@ struct Index {
|
||||
@State projectsObj: ProjectInfos = {}
|
||||
@State projectsCenterObj: ProjectInfo = {}
|
||||
@State markRuleListObj: MarkRule = {}
|
||||
@State cdsbInfoObj: CDSBInfo = {}
|
||||
@State itemInfoObj: CDSBInfo = {}
|
||||
@State cdsbInfoObj?: CDSBInfo = {}
|
||||
@State itemInfoObj?: object = {}
|
||||
@State timer: number = 0
|
||||
@State judgeConfig: SyssetConfig[] = []
|
||||
@State judgeConfigObj: object = defaultJudgeConfigObj
|
||||
@ -114,7 +115,7 @@ struct Index {
|
||||
//监管线路代码
|
||||
@State xldm: string = ''
|
||||
//监管接口序列号
|
||||
@State serialNumber: number|string = 0
|
||||
@State serialNumber: string = ''
|
||||
@State syssetParam623: boolean = false;
|
||||
@State syssetParam211: string = '';
|
||||
@State carType: string = ''
|
||||
@ -143,7 +144,8 @@ struct Index {
|
||||
@State currentXmdm: string = ''
|
||||
// 必考项目除靠边停车是否全部完成
|
||||
@State isRequiredProjectsEnd: boolean = false;
|
||||
// @State isAllProjectsEnd: boolean = false;
|
||||
@State isAllProjectsEnd: boolean = false;
|
||||
@State draw: boolean = false;
|
||||
@State lane: LANE = { road: '', num: 0, count: 0 }
|
||||
//定位差分状态时候正常
|
||||
@State isDwztRight: boolean = true;
|
||||
@ -162,7 +164,7 @@ struct Index {
|
||||
@State carInfo: CarInfoType = {}
|
||||
@State isErrorMsgEnd: boolean = false
|
||||
@State disConnectErrorOpen: boolean = false
|
||||
private context = getContext(this) as common.UIAbilityContext;
|
||||
public context = getContext(this) as common.UIAbilityContext;
|
||||
|
||||
async aboutToDisappear() {
|
||||
clearInterval(this.mileageTimer)
|
||||
@ -177,7 +179,6 @@ struct Index {
|
||||
// this.startHourTime = await getCurrentHourTime()
|
||||
this.startTime = dayTs().format("HHmmssSSS")
|
||||
this.startExamTime = time
|
||||
|
||||
setInterval(async () => {
|
||||
this.time = GetCurrentTime();
|
||||
this.examTime += 1;
|
||||
@ -530,7 +531,9 @@ struct Index {
|
||||
|
||||
// 评判相关初始化
|
||||
async initJudge() {
|
||||
const judge = new Judge(this);
|
||||
const test:JudgeUI = this;
|
||||
const judge = new Judge(test);
|
||||
// await judge.init<typeof Index>()
|
||||
await judge.onJudgeFn(async (judgeData:JudgeCallBacData) => {
|
||||
// const { xmmcStr, carztStr, kfArr } = judgeData;
|
||||
this.xmmcStr = judgeData.xmmcStr;
|
||||
@ -1468,3 +1471,5 @@ struct Index {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const JudgePage = Index
|
||||
|
||||
@ -203,7 +203,7 @@ export async function examCalcGpsDistance(param: {
|
||||
jd2: number,
|
||||
wd2: number,
|
||||
h: number
|
||||
}) {
|
||||
}):Promise<number> {
|
||||
const { jd1, wd1, jd2, wd2, h } = param
|
||||
const temp = libJudgeSdk.examCalcGpsDistance(jd1, wd1, jd2, wd2, h);
|
||||
return await temp;
|
||||
|
||||
@ -32,6 +32,7 @@ export interface MarkRule {
|
||||
xmmcStr?: string
|
||||
desc?: string
|
||||
xmdm?: string
|
||||
type?: 0 | 1 | 2
|
||||
}
|
||||
|
||||
export interface KF{
|
||||
|
||||
@ -3,11 +3,10 @@ import router from '@ohos.router';
|
||||
import util from '@ohos.util';
|
||||
import buffer from '@ohos.buffer';
|
||||
import { testKm2Items, testKm3Items, testMarkRules } from './dataTest/index';
|
||||
import { EXAMDATA, KSJS, SOUND } from './api/judgeSDK';
|
||||
import { EXAMDATA, KSJS, Project, SOUND } from './api/judgeSDK';
|
||||
import VoiceAnnounce from './utils/voiceAnnouncements';
|
||||
import FileModel from './utils/fileModel';
|
||||
import FilePhoto from './utils/filePhoto';
|
||||
|
||||
import FileLog from './utils/fileLog';
|
||||
import JudgeTask from './utils/judgeTask';
|
||||
import { judgeConfig } from './utils/judgeConfig';
|
||||
@ -41,45 +40,51 @@ import {
|
||||
examJudgeSoundEnd,
|
||||
examJudgeVersion
|
||||
} from './api/index';
|
||||
import { writeObjectOut } from '../../api/judge';
|
||||
|
||||
import { writeObjectOut, uploadExamProgressData } from '../../api/judge';
|
||||
import { saveStartRecordVideo } from '../../utils/Video';
|
||||
import common from '@ohos.app.ability.common';
|
||||
import { Array2Byte, convertGpsCoord2, deepClone, fillZero, string2Bytes } from './utils/Common';
|
||||
import { GetCurrentTime, StringToASCII } from '../../utils/Common';
|
||||
import UsbService from '../../utils/USB';
|
||||
import FileUtils from '../../utils/FileUtils';
|
||||
import { BaseInfoType, CarInfoType } from '../../model';
|
||||
import { BaseInfoType, CarInfoType, JudgeUI, Km3JudgeInitConfig ,ProjectInfo,Plc,DistanceClass,Ksjs,MarkRule,RegulatoryInterfaceParams,DrvexamType,WR} from '../../model';
|
||||
|
||||
const judgeTag = 'SURENJUN_JUDGE'
|
||||
|
||||
|
||||
type GetKm3JudgeInitConfig = ()=> Promise<Km3JudgeInitConfig>
|
||||
|
||||
|
||||
export default class Judge {
|
||||
// 断网数据补传
|
||||
uploadDisConnectData = async () => {
|
||||
const { isJudgeDisConnect, fileLog, fileUtil } = this;
|
||||
if (!isJudgeDisConnect) {
|
||||
if (!this.isJudgeDisConnect) {
|
||||
return
|
||||
}
|
||||
const folderPath = fileLog.folderPath
|
||||
const examDataStr = await fileUtil.readFile(`${folderPath}/wuxi_dis_progress_data.txt`);
|
||||
const folderPath = this.fileLog.folderPath
|
||||
const examDataStr = await this.fileUtil.readFile(`${folderPath}/wuxi_dis_progress_data.txt`);
|
||||
const examDataArr = examDataStr.split('\n');
|
||||
for (let examDataStr of examDataArr) {
|
||||
const examData = JSON.parse(examDataStr)
|
||||
const code = await writeObjectOut(examData);
|
||||
const code = await writeObjectOut(JSON.parse(examDataStr));
|
||||
}
|
||||
}
|
||||
//上传无锡所过程数据
|
||||
uploadProgressData = async () => {
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
const { judgeUI, fileUtil, fileLog } = this;
|
||||
const { idCard, startFullTime } = judgeUI
|
||||
const { carId, examinationRoomId } = carInfo
|
||||
const judgeUI = this.judgeUI
|
||||
const fileUtil = this.fileUtil
|
||||
const fileLog = this.fileLog
|
||||
const carId = carInfo.carId
|
||||
const examinationRoomId = carInfo.examinationRoomId
|
||||
|
||||
const folderPath = fileLog.folderPath
|
||||
const base64 = new util.Base64();
|
||||
const time = await GetCurrentTime();
|
||||
const endTime = await GetCurrentTime(1)
|
||||
let examDataBase64
|
||||
const time = GetCurrentTime();
|
||||
const endTime = GetCurrentTime(1)
|
||||
let examDataBase64: string = ''
|
||||
//TODO try catch报错待优化
|
||||
const examDataStr: string = await fileUtil.readFile(`${folderPath}/wuxi_progress_data.txt`);
|
||||
const examDataStr: string = await this.fileUtil.readFile(`${folderPath}/wuxi_progress_data.txt`);
|
||||
try {
|
||||
let tempBuff = buffer.alloc(examDataStr.length, examDataStr)
|
||||
let examData: Uint8Array = new Uint8Array(tempBuff.buffer)
|
||||
@ -91,13 +96,13 @@ export default class Judge {
|
||||
|
||||
try {
|
||||
await uploadExamProgressData({
|
||||
time,
|
||||
carId,
|
||||
examinationRoomId,
|
||||
examData: examDataBase64,
|
||||
type: 1,
|
||||
cardNo: idCard,
|
||||
examStartTime: startFullTime,
|
||||
time,
|
||||
cardNo: judgeUI.idCard,
|
||||
examData: examDataBase64,
|
||||
examStartTime: judgeUI.startFullTime,
|
||||
examEndTime: endTime,
|
||||
})
|
||||
} catch (e) {
|
||||
@ -106,28 +111,20 @@ export default class Judge {
|
||||
console.info(judgeTag, '过程数据文件上传 end')
|
||||
}
|
||||
//获取科目三的评判初始化配置
|
||||
getKm3JudgeInitConfig = async () => {
|
||||
const { judgeUI, getModelData } = this;
|
||||
const { mapPointArr, mapPointItemArr } = judgeUI;
|
||||
getKm3JudgeInitConfig:GetKm3JudgeInitConfig = async () => {
|
||||
return {
|
||||
map_point: mapPointArr,
|
||||
map_point_item: mapPointItemArr,
|
||||
map_point: this.judgeUI.mapPointArr,
|
||||
map_point_item: this.judgeUI.mapPointItemArr,
|
||||
//科目三暂时为空
|
||||
iteminfo: [],
|
||||
roads: getModelData('km3/Roads.txt'),
|
||||
sharps: getModelData('km3/Sharps.txt')
|
||||
roads: this.getModelData('km3/Roads.txt'),
|
||||
sharps: this.getModelData('km3/Sharps.txt')
|
||||
}
|
||||
}
|
||||
// 处理特殊参数配置
|
||||
handleSEP = async (code: number) => {
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo')
|
||||
const {
|
||||
judgeUI:{
|
||||
judgeConfigObj
|
||||
}, avPlayer
|
||||
} = this;
|
||||
const { examSubject } = carInfo;
|
||||
|
||||
const judgeConfigObj = this.judgeUI.judgeConfigObj
|
||||
const avPlayer = this.avPlayer
|
||||
switch (code) {
|
||||
//结束考试方式
|
||||
case 306:
|
||||
@ -140,79 +137,87 @@ export default class Judge {
|
||||
}
|
||||
public plcStr: string
|
||||
private context: common.UIAbilityContext
|
||||
private judgeUI
|
||||
public judgeUI: JudgeUI
|
||||
// 检测扣分、结束项目时该项目是否开始
|
||||
checkProjectIsStart = async (xmdm, currentType: 1 | 2, kf?: KF) => {
|
||||
checkProjectIsStart = async (xmdm:number, currentType: 1 | 2, kf?: KF) => {
|
||||
if (xmdm == 20) {
|
||||
return true
|
||||
}
|
||||
const { judgeTask, beginProject, pointsDedute, uploadProgressPhoto, endProject, checkExamIsEnd, totalScore } = this;
|
||||
const { projectsObj, passingScore:passingGrade } = this.judgeUI
|
||||
const { isUpload } = projectsObj[xmdm];
|
||||
const judgeUI= this.judgeUI;
|
||||
const judgeTask= this.judgeTask;
|
||||
const projectsObj = this.judgeUI.projectsObj
|
||||
const currentProject:ProjectInfo = Reflect.get(projectsObj, xmdm)
|
||||
const isUpload = currentProject.isUpload
|
||||
|
||||
//如果项目没有开始
|
||||
console.info('surenjun isUpload=>', isUpload)
|
||||
if (!isUpload) {
|
||||
console.info(judgeTag, '项目补传开始')
|
||||
//项目开始补传
|
||||
judgeTask.addTask(async () => {
|
||||
await beginProject(xmdm)
|
||||
await this.beginProject(xmdm)
|
||||
}, {
|
||||
isDelay: true
|
||||
})
|
||||
judgeTask.addTask(async () => {
|
||||
await uploadProgressPhoto(xmdm)
|
||||
await this.uploadProgressPhoto(xmdm)
|
||||
}, {
|
||||
isDelay: true
|
||||
})
|
||||
this.judgeUI.projectsObj[xmdm].isUpload = true;
|
||||
currentProject.isUpload = true;
|
||||
Reflect.set(this.judgeUI.projectsObj,xmdm,currentProject)
|
||||
//扣分补传
|
||||
if (currentType == 2) {
|
||||
judgeTask.addTask(async () => {
|
||||
await pointsDedute(xmdm, kf)
|
||||
await this.pointsDedute(xmdm, kf)
|
||||
}, {
|
||||
isDelay: true
|
||||
})
|
||||
}
|
||||
//扣分补传判断是否合格 不合格补传项目结束
|
||||
if (currentType == 1 || (currentType == 2 && totalScore < passingGrade)) {
|
||||
if (currentType == 1 || (currentType == 2 && this.totalScore < judgeUI.passingScore)) {
|
||||
judgeTask.addTask(async () => {
|
||||
await endProject(xmdm)
|
||||
await this.endProject(xmdm)
|
||||
}, {
|
||||
isDelay: true
|
||||
})
|
||||
this.judgeUI.projectsObj[xmdm].isEnd = true;
|
||||
currentProject.isEnd = true;
|
||||
Reflect.set(this.judgeUI.projectsObj,xmdm,currentProject)
|
||||
}
|
||||
judgeTask.addTask(async () => {
|
||||
checkExamIsEnd()
|
||||
this.checkExamIsEnd()
|
||||
})
|
||||
return false;
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
private fileLog
|
||||
private fileLog: FileLog
|
||||
|
||||
//人工扣分
|
||||
public setJudgeMark = async (itemno, serial, type = 1) => {
|
||||
await examJudgeArtificialMark(itemno * 1, serial, type);
|
||||
public setJudgeMark = async (itemno:string, serial:string, type = 1) => {
|
||||
await examJudgeArtificialMark(Number(itemno), serial, type);
|
||||
console.info(judgeTag, `进入人工扣分-${itemno}-${serial}`)
|
||||
await this.fileLog.setExamJudgeData({
|
||||
const str = JSON.stringify({
|
||||
method: 'examJudgeArtificialMark',
|
||||
itemno: itemno * 1,
|
||||
itemno: Number(itemno),
|
||||
serial,
|
||||
type
|
||||
})
|
||||
|
||||
await this.fileLog.setExamJudgeData(str)
|
||||
console.info(judgeTag, `人工扣分-${itemno}-${serial}`)
|
||||
}
|
||||
|
||||
//人工操作项目
|
||||
public setJudgeItem = async (itemno: string, type: 1 | 2) => {
|
||||
// const { fileLog } = this;
|
||||
await examJudgeArtificialItem(Number(itemno), type);
|
||||
await this.fileLog.setExamJudgeData({
|
||||
const str = JSON.stringify({
|
||||
method: 'examJudgeArtificialItem',
|
||||
itemno: Number(itemno),
|
||||
type
|
||||
})
|
||||
await this.fileLog.setExamJudgeData(str)
|
||||
console.info(judgeTag, `人工评判${type == 1 ? '进入' : '取消'}项目-${itemno}`)
|
||||
}
|
||||
private filePath: string
|
||||
@ -263,23 +268,23 @@ export default class Judge {
|
||||
private serialIndex: number
|
||||
private fileUtil: FileUtils
|
||||
private judgeTask: JudgeTask
|
||||
private tempData: any
|
||||
private tempData: Plc
|
||||
//实时计算gps经纬度距离
|
||||
handDistance = async () => {
|
||||
const { jd, wd, hxj, dwzt, jdzt } = this.tempData.gps;
|
||||
const tJD = convertGpsCoord2(jd)
|
||||
const tWD = convertGpsCoord2(wd)
|
||||
const { prevJd, prevWd } = this
|
||||
if (prevJd && dwzt == 4 && jdzt == 3) {
|
||||
const dwzt = this.tempData.gps.dwzt;
|
||||
const jdzt = this.tempData.gps.jdzt;
|
||||
const tJD = convertGpsCoord2(this.tempData.gps.jd)
|
||||
const tWD = convertGpsCoord2(this.tempData.gps.wd)
|
||||
if (this.prevJd && dwzt == 4 && jdzt == 3) {
|
||||
const distance = await examCalcGpsDistance({
|
||||
jd1: prevJd,
|
||||
wd1: prevWd,
|
||||
jd1: this.prevJd,
|
||||
wd1: this.prevWd,
|
||||
jd2: tJD,
|
||||
wd2: tWD,
|
||||
h: hxj || 1,
|
||||
h: (this.tempData.gps.hxj) || 1,
|
||||
})
|
||||
const distanceClass = AppStorage.get('distanceClass')
|
||||
distanceClass?.setTimeData(((distance / 100).toFixed(2)) * 1)
|
||||
const distanceClass = AppStorage.get<DistanceClass>('distanceClass')
|
||||
distanceClass?.setTimeData( Number(((distance / 100).toFixed(2))) )
|
||||
}
|
||||
this.prevJd = tJD;
|
||||
this.prevWd = tWD;
|
||||
@ -290,9 +295,18 @@ export default class Judge {
|
||||
// 校验考试是否结束
|
||||
checkExamIsEnd =
|
||||
async (isManual?: boolean) => {
|
||||
const { judgeUI, avPlayer, isExamEnd, isEndTip, ksjs } = this;
|
||||
const { isAllProjectsEnd, examSubject, singlePlay, totalScore, judgeConfigObj, passingScore, examMileage, jl } =
|
||||
judgeUI;
|
||||
const judgeUI = this.judgeUI
|
||||
const avPlayer = this.avPlayer
|
||||
const isExamEnd = this.isExamEnd
|
||||
const isEndTip = this.isEndTip
|
||||
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.examMileage)
|
||||
const jl = judgeUI.jl
|
||||
|
||||
if (isExamEnd) {
|
||||
return
|
||||
@ -305,9 +319,9 @@ export default class Judge {
|
||||
this.isExamEnd = true
|
||||
this.isManual = true
|
||||
} else {
|
||||
const param302 = judgeConfigObj['302'];
|
||||
const param342 = judgeConfigObj['342'];
|
||||
const param512 = (judgeConfigObj['512'] || '').split(',');
|
||||
const param302:number = Reflect.get(judgeConfigObj,'302')
|
||||
const param342:number = Reflect.get(judgeConfigObj,'342')
|
||||
const param512:number[] =( Reflect.get(judgeConfigObj,'512') || '').split(',');
|
||||
|
||||
//单机模式
|
||||
if (singlePlay) {
|
||||
@ -315,8 +329,8 @@ export default class Judge {
|
||||
if (isAllProjectsEnd && jl >= examMileage) {
|
||||
//成绩合格
|
||||
if (totalScore >= passingGrade && !isEndTip) {
|
||||
if (examSubject == 3 && (param342 == 0 || param342 == 2) &&
|
||||
(param302 != 6 || param302 != 7 || param302 != 8)) {
|
||||
if (examSubject == '3' && (param342 == 0 || param342 == 2) &&
|
||||
(param302 != 6 && param302 != 7 && param302 != 8 )) {
|
||||
if (param512[7] != 0) {
|
||||
clearTimeout(this.deductedPopShowTimer)
|
||||
avPlayer.playAudio(['voice/综合评判.mp3'])
|
||||
@ -331,7 +345,7 @@ export default class Judge {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
if (examSubject == 3 && (param302 == 4 || param302 == 5 || param302 == 7 || param302 == 8)) {
|
||||
if (examSubject == '3' && (param302 == 4 || param302 == 5 || param302 == 7 || param302 == 8)) {
|
||||
await examJudgeEndExam()
|
||||
this.isExamEnd = true
|
||||
return
|
||||
@ -344,7 +358,7 @@ export default class Judge {
|
||||
//成绩不合格
|
||||
if (totalScore < passingGrade) {
|
||||
//科目三不合格报靠边停车
|
||||
if (examSubject == 3 && param302 == 1) {
|
||||
if (examSubject == '3' && param302 == 1) {
|
||||
avPlayer.playAudio([`voice/考试结束.mp3`]);
|
||||
return
|
||||
}
|
||||
@ -355,26 +369,26 @@ export default class Judge {
|
||||
|
||||
//成绩合格
|
||||
if (isAllProjectsEnd && totalScore >= passingGrade && !isEndTip) {
|
||||
if (examSubject == 2) {
|
||||
if (examSubject == '2') {
|
||||
await examJudgeEndExam()
|
||||
this.isExamEnd = true
|
||||
return
|
||||
}
|
||||
|
||||
//考试里程判断
|
||||
if (examSubject == 3 && jl < examMileage) {
|
||||
if (examSubject == '3' && jl < examMileage) {
|
||||
return
|
||||
}
|
||||
|
||||
//考试合格自动退出
|
||||
if (examSubject == 3 && (param302 == 4 || param302 == 7) || param302 == 8) {
|
||||
if (examSubject == '3' && (param302 == 4 || param302 == 7) || param302 == 8) {
|
||||
await examJudgeEndExam()
|
||||
this.isExamEnd = true
|
||||
return
|
||||
}
|
||||
|
||||
if (examSubject == 3 && (param342 == 0 || param342 == 2) &&
|
||||
(param302 != 6 || param302 != 7 || param302 != 8)) {
|
||||
if (examSubject == '3' && (param342 == 0 || param342 == 2) &&
|
||||
(param302 != 6 && param302 != 7 && param302 != 8)) {
|
||||
if (param512[7] != 0) {
|
||||
clearTimeout(this.deductedPopShowTimer)
|
||||
this.judgeUI.isDeductedPopShow = false
|
||||
@ -391,75 +405,47 @@ export default class Judge {
|
||||
}
|
||||
}
|
||||
}
|
||||
private ksjs: {
|
||||
// 累计前进距离
|
||||
qjjl: number,
|
||||
// 累计倒车距离
|
||||
dcjl: number
|
||||
d1: number
|
||||
d2: number
|
||||
d3: number
|
||||
d4: number
|
||||
d5: number
|
||||
d6: number
|
||||
}
|
||||
private kfArr: {
|
||||
//项目名称
|
||||
xmmcStr: string,
|
||||
xmdm: string | number,
|
||||
//扣分描述
|
||||
desc: string,
|
||||
//扣分
|
||||
score: string
|
||||
//无锡所扣分代码
|
||||
markcatalog: string
|
||||
markserial: string
|
||||
kfxh: string
|
||||
type: 0 | 1 | 2
|
||||
}[]
|
||||
private km2ItemsStatus: any[]
|
||||
private ksjs: Ksjs
|
||||
private kfArr: MarkRule[]
|
||||
//所有的科目考试项目(大车&小车)
|
||||
private testKmItems: any
|
||||
private plcData: any
|
||||
private plcData: Plc
|
||||
// 获取plc数据
|
||||
getPlcData = async (plc: string) => {
|
||||
const { fileLog, mndgStr, rmndg } = this;
|
||||
await fileLog.setPlcProgressData(plc)
|
||||
await this.fileLog.setPlcProgressData(plc)
|
||||
//plc字符串转化成评判初始化数据
|
||||
const tempData = await plcStrToJson(plc);
|
||||
//模拟灯光回放时刻
|
||||
tempData.sensor.rmndg = rmndg;
|
||||
tempData.sensor.rmndg = this.rmndg;
|
||||
//模拟灯灯光灯光项目
|
||||
tempData.sensor.mndg = mndgStr;
|
||||
tempData.sensor.mndg = this.mndgStr;
|
||||
//plc字符串转化成无锡所过程数据
|
||||
const wuXiDataStr = await plcStrToWXJson(plc)
|
||||
this.plcData = tempData
|
||||
await fileLog.setExamJudgeWuxiProgressData(wuXiDataStr)
|
||||
await this.fileLog.setExamJudgeWuxiProgressData(wuXiDataStr)
|
||||
this.tempData = tempData
|
||||
this.plcStr = plc;
|
||||
this.mndgStr = '';
|
||||
this.rmndg = 0;
|
||||
AppStorage.setOrCreate('msgStr', plc)
|
||||
|
||||
return tempData
|
||||
}
|
||||
// 处理udp plc信号
|
||||
handleUdp = async (msg) => {
|
||||
handleUdp = async (msg:string) => {
|
||||
console.info('plc信号', msg)
|
||||
// const { fileLog, getPlcData, usbService, isUdpEnd, isExamEnd, judgeUI } = this
|
||||
const stachArr = msg.split(',')
|
||||
if (stachArr[0] != '#DN_GD' || this.isUdpEnd) {
|
||||
return
|
||||
}
|
||||
const plcData = await this.getPlcData(msg);
|
||||
// 4.过程数据
|
||||
await this.fileLog.setExamJudgeData(plcData)
|
||||
await this.fileLog.setExamJudgeData(JSON.stringify(plcData))
|
||||
//检测到有无锡所设备接入,需要发送特定的数据,供检测
|
||||
if (this.usbService.isWXUSBDevice) {
|
||||
const str = await senorToWXDataStr(msg);
|
||||
this.usbService.sendUSB(str)
|
||||
}
|
||||
const param350 = this.judgeUI.judgeConfigObj['350']
|
||||
// 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 暂时关闭差分检测异常
|
||||
@ -468,7 +454,6 @@ export default class Judge {
|
||||
await examJudgeRealExam(plcData)
|
||||
}
|
||||
let udpIndex = AppStorage.get<number>('udpIndex');
|
||||
let [prevJd, preWd] = [0, 0]
|
||||
if (udpIndex % 5 === 0 && !this.isUdpEnd) {
|
||||
// TODO UPD缺失
|
||||
// const judgeUdp = globalThis.judgeUdp
|
||||
@ -478,7 +463,7 @@ export default class Judge {
|
||||
AppStorage.setOrCreate('udpIndex', udpIndex++)
|
||||
}
|
||||
// 处理轨迹plc信号
|
||||
handleTrajectoryUdp = async (strArr) => {
|
||||
handleTrajectoryUdp = async (strArr:string[]) => {
|
||||
// const { fileLog, setJudgeItem, setJudgeMark, endExam } = this;
|
||||
let num = 2;
|
||||
const judgeTimer = setInterval(async () => {
|
||||
@ -489,7 +474,7 @@ export default class Judge {
|
||||
this.checkExamIsEnd(true)
|
||||
return
|
||||
}
|
||||
const msg = JSON.parse(strArr[num]);
|
||||
const msg :Plc= JSON.parse(strArr[num]);
|
||||
num++
|
||||
// 4.过程数据
|
||||
this.tempData = msg
|
||||
@ -521,43 +506,41 @@ export default class Judge {
|
||||
// 调代理接口是否断网了
|
||||
private isJudgeDisConnect: boolean;
|
||||
// 项目开始接口同步
|
||||
beginProject = async (ksxm) => {
|
||||
beginProject = async (ksxm:number) => {
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const { examSubject, plateNo } = carInfo;
|
||||
const { judgeUI, fileLog, getSbbm, xmxh, filePath } = this;
|
||||
const { lsh, idCard, serialNumber, projectsObj, ksdd, kslx, xldm } = judgeUI
|
||||
const time = await GetCurrentTime();
|
||||
const project = projectsObj[ksxm]
|
||||
const sbxh = getSbbm(ksxm, xmxh)
|
||||
const data = {
|
||||
//系统类别 接口序列号 接口标识
|
||||
xtlb: '17',
|
||||
jkxlh: serialNumber,
|
||||
jkid: '17C52',
|
||||
drvexam: {
|
||||
// 考试科目 身份证号码
|
||||
lsh,
|
||||
kskm: examSubject,
|
||||
sfzmhm: idCard,
|
||||
const judgeUI = this.judgeUI
|
||||
const time = GetCurrentTime();
|
||||
const project:ProjectInfo = Reflect.get(judgeUI.projectsObj, ksxm)
|
||||
const sbxh = this.getSbbm(ksxm, this.xmxh)
|
||||
|
||||
const drvexam:DrvexamType = {
|
||||
lsh:judgeUI.lsh,
|
||||
kskm: carInfo.examSubject,
|
||||
sfzmhm: judgeUI.idCard,
|
||||
ksxm: project.projectCodeCenter,
|
||||
sbxh,
|
||||
ksxl: xldm,
|
||||
kchp: encodeURI(plateNo),
|
||||
// 开始时间
|
||||
ksdd: encodeURI(ksdd),
|
||||
kslx: encodeURI(kslx) || '',
|
||||
ksxl: judgeUI.xldm,
|
||||
kchp: encodeURI(carInfo.plateNo),
|
||||
ksdd: encodeURI(judgeUI.ksdd),
|
||||
kslx: encodeURI(judgeUI.kslx) || '',
|
||||
kssj: time
|
||||
}
|
||||
const data:RegulatoryInterfaceParams = {
|
||||
//系统类别 接口序列号 接口标识
|
||||
xtlb: '17',
|
||||
jkxlh: judgeUI.serialNumber,
|
||||
jkid: '17C52',
|
||||
drvexam
|
||||
}
|
||||
const { code } = await this.sendWriteObjectOut(data, filePath)
|
||||
const temp:WR = await this.sendWriteObjectOut(data, this.filePath)
|
||||
console.info(judgeTag, '项目开始 end')
|
||||
if (code === 2300007) {
|
||||
if (temp.code === 2300007) {
|
||||
this.isJudgeDisConnect = true;
|
||||
}
|
||||
promptWxCode('17C52', code)
|
||||
promptWxCode('17C52', temp.code)
|
||||
}
|
||||
// 项目结束接口同步
|
||||
endProject = async (ksxm) => {
|
||||
endProject = async (ksxm:number) => {
|
||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||
const { examSubject, plateNo, carNo } = carInfo;
|
||||
const { judgeUI, fileLog, getSbxh, xmxh, getSbbm, filePath } = this;
|
||||
@ -598,8 +581,9 @@ export default class Judge {
|
||||
}
|
||||
private videoData: any
|
||||
private disConnectNum: number = 0;
|
||||
|
||||
//调用监管接口
|
||||
sendWriteObjectOut = async (data, filePath) => {
|
||||
sendWriteObjectOut = async (data:RegulatoryInterfaceParams, filePath:string) => {
|
||||
const temp = await writeObjectOut(data, filePath);
|
||||
console.log("wzj", JSON.stringify(temp))
|
||||
//断网&网络超时次数计算
|
||||
@ -654,7 +638,7 @@ export default class Judge {
|
||||
console.info(judgeTag, '上传照片 end')
|
||||
}
|
||||
|
||||
constructor(judgeUI) {
|
||||
constructor(judgeUI: JudgeUI) {
|
||||
this.serialIndex = 1;
|
||||
this.judgeUI = judgeUI
|
||||
//语音播放工具
|
||||
@ -961,8 +945,7 @@ export default class Judge {
|
||||
|
||||
//差分事件
|
||||
case 11: {
|
||||
const { type } = nongps
|
||||
this.checkDwzt(type)
|
||||
this.checkDwzt(nongps.type)
|
||||
}
|
||||
default:
|
||||
break;
|
||||
@ -1580,10 +1563,13 @@ export default class Judge {
|
||||
const sbxh = currentCdsb.sbbh || '0000000000'
|
||||
return sbxh
|
||||
}
|
||||
getSbbm = (ksxm, xmxh) => {
|
||||
const { judgeUI } = this;
|
||||
const { cdsbInfoObj, projectsObj, examSubject } = judgeUI;
|
||||
const project = projectsObj[ksxm]
|
||||
|
||||
getSbbm = (ksxm:number, xmxh:string) => {
|
||||
const judgeUI = this.judgeUI;
|
||||
const cdsbInfoObj = judgeUI.cdsbInfoObj;
|
||||
const projectsObj = judgeUI.projectsObj;
|
||||
const {examSubject = judgeUI.examSubject;
|
||||
const project = Reflect.get(projectsObj, ksxm);
|
||||
//科目三不需要
|
||||
if (examSubject == 3) {
|
||||
return undefined
|
||||
@ -1594,7 +1580,7 @@ export default class Judge {
|
||||
const projectKey = `${ksxm}_${xmxh}`;
|
||||
const currentCdsb = cdsbInfoObj[projectKey] || {};
|
||||
const sbxh = currentCdsb.sbbm || '00000000'
|
||||
return sbxh
|
||||
// return sbxh
|
||||
}
|
||||
// 中心所有项目转换
|
||||
getTranslateProject = () => {
|
||||
@ -1788,7 +1774,6 @@ export default class Judge {
|
||||
this.videoData = await saveStartRecordVideo(`${name}_${kssycs}`, this.context)
|
||||
}
|
||||
|
||||
const { examSubject, projectsObj } = this.judgeUI
|
||||
// if(examSubject == 3){
|
||||
// //不做模拟灯光,需要做上车准备 =>(请上车准备)
|
||||
// if(projectsObj[41]?.type == 3 && projectsObj[1]?.type != 3){
|
||||
|
||||
@ -42,9 +42,9 @@ export default class FileLog {
|
||||
this.plcDataFd = await this.fileUtil.editFile(`${this.folderPath}/plc_data.txt`, JSON.stringify(str), this.plcDataFd);
|
||||
}
|
||||
// 过程评判json数据
|
||||
public setExamJudgeData = async (str: Object) => {
|
||||
public setExamJudgeData = async (str: string) => {
|
||||
this.examJudgeDataFd =
|
||||
await this.fileUtil.editFile(`${this.folderPath}/judge_exam_data.txt`, JSON.stringify(str), this.examJudgeDataFd);
|
||||
await this.fileUtil.editFile(`${this.folderPath}/judge_exam_data.txt`, str, this.examJudgeDataFd);
|
||||
}
|
||||
// 过程评判回调数据
|
||||
public setExamJudgeCallbackData = async (str: string) => {
|
||||
|
||||
@ -737,3 +737,5 @@ export const defaultJudgeConfigObj:DefaultJudgeConfigObj = {
|
||||
//监管模式有扣分续考(0-否++1-是+把上次未考完的扣分带下来重新考试)
|
||||
param_432: '1'
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ const TAG = 'SURENJUN_JUDGE'
|
||||
|
||||
interface DelayConfig{
|
||||
isDelay: boolean
|
||||
delayTime: number
|
||||
delayTime?: number
|
||||
}
|
||||
|
||||
interface QUEUE {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user