From 8d489592d83eb7131ff9c4b15787f1a53da95799 Mon Sep 17 00:00:00 2001 From: surenjun Date: Mon, 30 Dec 2024 12:53:42 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E8=AF=84=E5=88=A4=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/pages/Judge.ets | 1573 +++-------------- .../main/ets/pages/judgeSDK/api/judgeSDK.d.ts | 7 +- entry/src/main/ets/pages/judgeSDK/judge.ts | 74 +- 3 files changed, 246 insertions(+), 1408 deletions(-) diff --git a/entry/src/main/ets/pages/Judge.ets b/entry/src/main/ets/pages/Judge.ets index c35c4807..605ef226 100644 --- a/entry/src/main/ets/pages/Judge.ets +++ b/entry/src/main/ets/pages/Judge.ets @@ -1,1370 +1,215 @@ -import router from '@ohos.router'; -import Prompt from '@system.prompt'; -import common from '@ohos.app.ability.common'; -import EndPoPup from './compontents/judge/EndPopup'; -import LoadingPopup from './compontents/judge/LoadingPopup'; -import DeductedPopup from './compontents/judge/DeductionPopup'; -import AmplifyPopup from './compontents/judge/AmplifyPopup'; -import Judge from './judgeSDK/judge'; -import { defaultJudgeConfigObj } from './judgeSDK/utils//judgeCommon'; -import {uploadExamMileage} from '../api/judge' -import DwztErrorPopup from './compontents/judge/DwztErrorPopup' -import {debounce} from '../common/utils/tools' - -import { - CARINFO, - CDSBInfo, - LANE, - MAPITEMPOINTITEM, - MAPPOINT, - MarkRule, - Project, - ProjectObj, - SYSSET, - SYSTEMPARMARR -} from './judgeSDK/api/judgeSDK.d'; - -import { chunkArr, formatTime, getCurrentHourTime, getCurrentTime } from '../common/utils/tools'; -import { examJudgeEndExam } from './judgeSDK/api/index'; import { getSyncData } from '../common/service/initable'; -import { judgeConfig } from './judgeSDK/utils/judgeConfig'; +import request from "../common/utils/request" +let baseHost = globalThis.host; import FileUtil from '../common/utils/File'; -import SignDisplayCom from './compontents/signDisplayCom'; -import promptAction from '@ohos.promptAction'; -import { voiceService } from '../common/service/voiceService'; +import FileLog from '../pages/judgeSDK/utils/fileLog'; -@Entry -@Component -struct Index { - async aboutToDisappear(){ - clearInterval(this.mileageTimer) - } +//新监管接口 - async aboutToAppear() { - this.vocObj = new voiceService(async (status, val, next) => { - }); - globalThis.windowClass.setWindowSystemBarEnable([]) - const time = await getCurrentTime() - this.startTime = time.split(' ')[1] - this.startFullTime = await getCurrentTime(1); - this.startHourTime = await getCurrentHourTime() - - this.startExamTime = time - - setInterval(async () => { - this.time = await getCurrentTime(); - this.examTime += 1; - }, 1000); - //初始化数据库表 - await this.initDb() - //断点续考 - await this.goDdxkItems() - - //初始化评判 - const judge = await this.initJudge(); - this.judge = judge - - } - - //初始化相关数据库表 - async initDb() { - const examSubject = globalThis.carInfo.examSubject; - this.examSubject = examSubject; - const {isTrajectoryOpen,trajectoryPath} = judgeConfig - await this.initStudent(); - await this.initCar(); - - //是否开启轨迹回放模式 - if (isTrajectoryOpen) { - this.initTrajectoryParam(trajectoryPath) - } else { - await this.initSystemParam() - await this.initMarkRules(); - await this.initSysset(); - this.singlePlay = globalThis.singlePlay - } - await this.initCDSBInfo() - await this.initItemInfo() - - // 科目三新增读取表数据 - if (examSubject == 3) { - await this.initMapPoint() - await this.initMapPointItem() - //定时上传考试里程 - // let mileageTimer = setInterval(()=>{ - // this.uploadMileage() - // },5000) - // this.mileageTimer = mileageTimer - } - } - - // 查询考车信息 - async initCar() { - const result = await getSyncData('ES_CARINFO') - const carInfo = result[0] || {}; - this.carName = decodeURI(carInfo.carclass) - this.carType = carInfo.kscx - this.carinfoArr.push({ - CARID: carInfo.carid, - IPADDR: '', - CARCLASS: decodeURI(carInfo.carclass), - KSCX: carInfo.kscx, - CARNAME: decodeURI(carInfo.carname), - FLAG: carInfo.flag, - BK1: carInfo.bk1, - BK2: carInfo.bk2, - }) - console.info('surenjun =>carinfoArrr',JSON.stringify( this.carinfoArr)) - } - - // 获取考生信息 - async initStudent() { - const students = await getSyncData('USER') - const stuInfo = students[0] || {}; - const {xm,sfzmhm,lsh,kszp,ksdd,kssycs,kslx,ksxl,xldm} = stuInfo; - this.name = xm || '测试考生'; - this.idCard = sfzmhm || '01234567891010'; - this.lsh = globalThis.singlePlay?'0000000000000':lsh; - this.kszp = kszp; - this.ksdd = ksdd; - this.kssycs = kssycs; - this.ksxl = ksxl; - this.wayno = ksxl; - this.xldm = xldm; - this.kslx = kslx; - } - - // 获取扣分代码信息 - async initMarkRules(markRules ?: MarkRule[]) { - const markRuleParams = markRules || (await getSyncData('MA_MARKRULE') as MarkRule[]) - - markRuleParams.forEach(mark => { - const tempObj = { - itemno: mark.itemno * 1, - markcatalog: mark.markcatalog, - markshow: decodeURI(mark.markshow), - markreal: mark.markreal * 1, - markserial: mark.markserial, - kfxh: mark.kfxh, - OnlyOneKind: mark.onlyoneid * 1, - NoCancelId: mark.nocancelid * 1, - GPS_SID: mark.gps_sid == 0 ? false : true - } - - //筛选出人工评判的扣分 - if (Number(tempObj.markserial) > 100 && Number(tempObj.markserial) < 200) { - this.manualMarkRules.push(tempObj) - } - this.markRuleListObj[`${mark.itemno}_${mark.markserial}`] = { - ...tempObj, - markserial: mark.markserial, - }; - }) - } - - // 获取sysset表信息 - async initSysset(sysset?: SYSSET[]) { - const syssetParams = sysset || await getSyncData('MA_SYSSET') - //@ts-ignore - const serialNumberArr = syssetParams.filter(sys => sys.v_no === '901'); - console.info('surenjun serialNumberArr' + JSON.stringify(serialNumberArr)) - this.serialNumber = (serialNumberArr[0] && serialNumberArr[0].v_value) || ''; - const {isTrajectoryOpen} = judgeConfig - const syssetJudgeConfigArr = [] - - //@ts-ignore - syssetParams.forEach((sys) => { - if (isTrajectoryOpen) { - sys.v_no = sys.key; - sys.v_name = sys.name; - sys.v_value = sys.value - } - - const {v_no,v_value} = sys; - const v_no_num = v_no * 1; - const value = decodeURIComponent(v_value) - if (v_no_num >= 10 && v_no_num <= 900) { - syssetJudgeConfigArr.push({ - key: v_no_num, value: value, - name: decodeURI(sys.v_name) - }) - } - //科目三应行驶距离参数 - if (sys.v_no == '303') { - this.examMileage = this.examMileage == '0'?(sys.v_value + ''): this.examMileage; - } - - //364 绕车一周评判时机(1-开始考试后判 2-开始考试前判) - if (sys.v_no == '364' && sys.v_value == 2) { - let currentParams: any = router.getParams(); - const {sczb,kfdm} = currentParams; - kfdm.forEach(kf => { - const {xmdm, kfdm} = kf - const currentKf = this.markRuleListObj[`${xmdm}_${kfdm}`]; - const currentProject = this.projectsObj[xmdm] - this.kfArr.push({ - //扣分项目名称 - xmmcStr: currentProject.name, - //@ts-ignore - xmdm, - desc: currentKf.markshow, - score: currentKf.markreal, - markcatalog: currentKf.markcatalog, - markserial: currentKf.markserial, - kfxh: currentKf.kfxh - }) - this.totalScore += currentKf.markreal * 1; - }) - this.projectsObj[1].type = kfdm.length ? '4' : '3'; - this.projectsObj = { - ...this.projectsObj - } - } - this.judgeConfigObj[sys.v_no] = value - - }); - this.judgeConfig = syssetJudgeConfigArr; - } - - //初始化systemParam表 - async initSystemParam(sysParam?: SYSTEMPARMARR[]) { - const systemParms: any = sysParam || await getSyncData('MA_SYSTEMPARM') - console.info('surenjun => systemParms',JSON.stringify(systemParms)); - - let currentParams: any = router.getParams(); - const {carName,carType,examSubject} = this; - //小车车型列表 - const sCarTypes = ['C1', 'C2', 'C5'] - if (globalThis.singlePlay) { - this.wayno = currentParams.wayno || 1; - } - //真实监管下发的项目 - let kStringArr: string[] = (currentParams.kString?.split(',') || []).filter(item => item); - console.info('surenjun kStringArr',JSON.stringify(kStringArr)) - let isInExam = kStringArr.length > 0; - const {isTrajectoryOpen} = judgeConfig - let carNo = '', allItems = []; - systemParms.forEach((systemParm) => { - if (isTrajectoryOpen) { - systemParm.no1 = systemParm.NO1 + ''; - systemParm.no2 = systemParm.NO2 + ''; - systemParm.no3 = systemParm.NO3 + ''; - systemParm.txt1 = systemParm.TXT1; - systemParm.txt2 = systemParm.TXT2; - systemParm.txt3 = systemParm.TXT3; - } - const {no1,no2,no3,} = systemParm; - const txt1 = decodeURI(systemParm.txt1) - const txt2 = decodeURI(systemParm.txt2) - //获取当前考车的no2 - if (no1 == 3 && no3 == 1) { - if (txt1 === carName) { - carNo = no2 - this.carlist = carNo - } - } - - //获取及格分数线 - if(no1 == 3 && no3 == 3 && carNo === no2){ - this.passingScore = Number(txt1) || 0; - } - //根据车型获取应行驶里程数 - if(no1 == 3 && no3 ==15 && carNo === no2){ - this.examMileage = ((decodeURI(systemParm.txt1)) || '').split('^')[0]; - } - //获取当前考车的考试项目 - if (carNo !== '' && no1 == 3 && no2 == carNo && no3 == 10) { - allItems = decodeURIComponent(systemParm.txt1).split(',').filter(txt => txt !== '') - console.info('surenjun', JSON.stringify(allItems)) - } - if ( - //科目二获取项目 - (examSubject == 2 && allItems.length && no1 == 6 && allItems.includes(no2)) - || - //科目三获取项目 - (examSubject == 3 && no1 == 6) - ) { - - const name = decodeURI(systemParm.txt1) - //小车过滤掉 夜间模拟行驶 - if (sCarTypes.includes(carType) && name === '夜间行驶') { - return - } - - const currentProject = { - name, - abbreviation: decodeURI(systemParm.txt3), - projectCode: no2, - projectCodeCenter: txt2, - //是否是必考 加减档设置成非必考 - isRequired: no2== 14 ? false : allItems.includes(no2 + ''), - //是否考过了 - isEnd: false, - //项目开始数据是否上传过 - isUpload:false, - } - this.projectsObj[no2*1] = currentProject - this.projectsCenterObj[txt2] = currentProject - this.projects.push(currentProject); - - //真实监管下发考试项目 - if(isInExam && !(kStringArr.includes(txt2) || kStringArr.includes(no2+''))){ - console.info('surenjun =>',txt2) - console.info('surenjun => no2',no2) - this.projectsObj[no2*1].type = '3' - this.projectsObj[no2*1].isUpload = true - this.projectsObj[no2*1].isEnd = true - this.projectsCenterObj[txt2].type = '3' - this.projectsCenterObj[txt2].isUpload = true - this.projectsCenterObj[txt2].isEnd = true - // this.isDdxk = true - this.ddxkKsxmArr.push(txt2) - } - } - - this.systemparmArr.push({ - 'NO1': no1 * 1, - 'NO2': no2 * 1, - 'NO3': no3 * 1, - 'TXT1': decodeURIComponent(systemParm.txt1), - 'TXT2': decodeURIComponent(systemParm.txt2), - 'TXT3': decodeURIComponent(systemParm.txt3), - }) - }) - const projects = this.projects; - console.info('surenjun',JSON.stringify(this.ddxkKsxmArr)) - - if (!projects.length) { - Prompt.showToast({ - message: '读取数据库信息失败,请重新联网更新!', - duration: 8000 - }); - router.back(); - } - } - - // 获取场地设备信息 - async initCDSBInfo() { - const cdsbParams = await getSyncData('MA_CDSBINFO') - //只记录考试项目的模型 - const projectsObj = this.projectsObj - //@ts-ignore - cdsbParams.forEach((cdsb) => { - const key = decodeURI(cdsb.itemsno); - const newKey = key.split('~').join('_') - //@ts-ignore - const xmdm = key.split('~')[0] * 1 - if(projectsObj[xmdm]){ - this.cdsbInfoObj[newKey] = { - kdid: cdsb.kdid, - sbbh: cdsb.sbbh, - sbbm: cdsb.sbbm, - itemsno: key, - modelKey: newKey, - xmdm, - xmxh: key.split('~')[1], - } - } - }) - } - - // 获取itemInfo表信息 - async initItemInfo(){ - const infoParams = await getSyncData('MA_ITEMINFO'); - const carlist = this.carlist; - const projectsObj = this.projectsObj - //@ts-ignore - infoParams.forEach((info)=>{ - const key = decodeURI(info.itemsno); - const carlistArr = info.carlist === '' ? [] : (decodeURI(info.carlist).split(',') || []); - const newKey = key.split('~').join('_') - //@ts-ignore - const xmdm = key.split('~')[0] * 1 - if(projectsObj[xmdm] && (carlistArr.length == 0 || carlistArr.includes(carlist))){ - this.itemInfoObj[newKey] = { - modelKey: newKey, - xmdm, - xmxh: key.split('~')[1], - } - } - }) - } - - // 评判相关初始化 - async initJudge() { - const judge = new Judge(this); - await judge.onJudgeFn(async (judgeData) => { - const {xmmcStr,carztStr,kfArr} = judgeData; - this.xmmcStr = xmmcStr; - this.carztStr = carztStr; - this.kfArr = kfArr; - }); - return judge - } - - // 断点续考判断 - async goDdxkItems() { - const judgeConfigObj = this.judgeConfigObj - const examSubject = this.examSubject - - //科目二强制开始断点续考 - if (judgeConfigObj['432'] != 0 || examSubject == 2) { - //断点续考判断 - let currentParams: any = router.getParams(); - const examItems: string = currentParams?.examItems; - // 2024-01-03 16:29:26;0;20300,;2,4^2,4;null; - if (examItems !== '' && examItems !== undefined) { - console.info('surenjun examItems=>', JSON.stringify(examItems)) - const examItemsArrs = examItems.split(';'); - const startTime = examItemsArrs[0] - const ddxkKsxmArr = examItemsArrs[2]?.split(',').filter(item => item) || [] - const ddxkKfArr = examItemsArrs[3]?.split('^').filter(item => item) || [] - if (judgeConfigObj['432'] == 2 || examSubject == 2) { - //TODO 带项目带里程 - if (ddxkKsxmArr?.length) { - //断点续考 - ddxkKsxmArr.forEach(xmdm => { - const projectCode = this.projectsCenterObj[xmdm].projectCode - if(this.projectsObj[projectCode]){ - this.projectsObj[projectCode].type = '3' - this.projectsObj[projectCode].isUpload = true - this.projectsObj[projectCode].isEnd = true - } - }) - this.ddxkKsxmArr = ddxkKsxmArr - } - } - //扣分续考 - ddxkKfArr.forEach((kf) => { - const [xmdm, kfdm] = kf.split(',') - const currentKf = this.markRuleListObj[`${xmdm}_${kfdm}`] - const currentProject = this.projectsObj[xmdm] || { name: '通用评判' } - if (this.projectsObj[xmdm]) { - this.projectsObj[xmdm].type = '4' - } - this.kfArr.push({ - //扣分项目名称 - xmmcStr: currentProject.name, - //@ts-ignore - xmdm, - desc: currentKf.markshow, - score: currentKf.markreal, - markcatalog: currentKf.markcatalog, - markserial: currentKf.markserial, - kfxh: currentKf.kfxh - }) - this.totalScore += currentKf.markreal * 1; - }) - this.ddxkKfArr = ddxkKfArr - this.ddxkTime = Date.parse(startTime); - this.isDdxk = true - } - } - - } - - // 初始化mapPoint表 - async initMapPoint() { - const pointParams = await getSyncData('MA_MAP_POINT') - //@ts-ignore - pointParams.forEach(point => { - const { - point_no, - gps_e, - gps_n, - point_no_f, - point_type, - road_code, - gps_e_Location, - gps_n_Location, - f_gps_e, - f_gps_n, - passed - } = point; - this.mapPointArr.push({ - point_no: point_no * 1, - gps_e: gps_e * 1, - gps_n: gps_n * 1, - point_no_f: point_no_f * 1, - point_type: point_type * 1, - road_code, - gps_e_Location: (gps_e_Location || 0) * 1, - gps_n_Location: (gps_n_Location || 0) * 1, - f_gps_e: f_gps_e * 1, - f_gps_n: f_gps_n * 1, - passed: passed * 1 - }) - }) - } - - // 初始化mapPointItem表 - async initMapPointItem() { - const pointItemPoints = await getSyncData('MA_MAP_POINT_ITEM'); - //@ts-ignore - pointItemPoints.forEach(itemPoint => { - const {point_no,itemno,itemno1,subname} = itemPoint - this.mapPointItemArr.push({ - point_no: point_no * 1, - itemno: itemno * 1, - itemno1: itemno1 * 1, - subname - }) - }) - } - - // 初始化本地systemparam表、markrule表 - async initTrajectoryParam(trajectoryPath: string) { - const {isTrajectoryOpen} = judgeConfig - //轨迹回放读取 systemparam表、markrule表 - const fileUtil = new FileUtil(this.context); - const folderPath = await fileUtil.initFolder(trajectoryPath); - const str = await fileUtil.readFile(folderPath); - const strArr = str.split('\n'); - const [initData, beginData] = [strArr[0], strArr[1]]; - const initDataObj = JSON.parse(initData) - const beginDataObj = JSON.parse(beginData) - const examSubject = globalThis.carInfo.examSubject; - this.examSubject = isTrajectoryOpen ? (initDataObj.kskm * 1) : examSubject; - globalThis.carInfo.examSubject = this.examSubject - this.singlePlay = beginDataObj.exam == 0; - this.carName = initDataObj.name; - globalThis.singlePlay = beginDataObj.exam == 0; - await this.initSystemParam(initDataObj.systemparm) - await this.initMarkRules(initDataObj.mark); - await this.initSysset(initDataObj.sysset); - } - - // 上传考试里程 - async uploadMileage(){ - if(!globalThis.singlePlay){ - const {lsh,startExamTime:kskssj,jl:kslc} = this - const { carId ,examinationRoomId} = globalThis.carInfo; - await uploadExamMileage({ - carId,examinationRoomId, - lsh,kskssj,kslc - }) - } - } - - build() { - Column() { - Row() { - Row() { - Image($rawfile('judge/signal_logoS.png')).width(120) - Text(this.time).fontColor('#CCB48F').fontSize(34).padding({ left: 10, right: 5 }) - Image($rawfile(this.isDwztRight ? 'judge/xh_green.png' : 'judge/xh_red.png')).width(50) - }.padding({ left: 20 }) - - Row() { - Text(`当前项目:${this.xmmcStr || '无'} `).fontColor('#E5CCA1').fontSize(34) - } - } - .width('100%') - .height('96') - .backgroundColor('#001A33') - .padding({ left: 15, right: 15 }) - .justifyContent(FlexAlign.SpaceBetween) - .alignItems(VerticalAlign.Center) - - Row() { - Row() { - Column() { - Row() { - Column() { - Row() { - Text('考生姓名:').fontColor('#E5CCA1').fontSize(this.FONTSIZE) - Text(this.name).fontColor('#FFF').fontSize(this.FONTSIZE) - }.margin({ bottom: 10 }) - - Row() { - Text('开始时间:').fontColor('#E5CCA1').fontSize(this.FONTSIZE) - Text(this.startTime).fontColor('#FFF').fontSize(this.FONTSIZE) - }.margin({ bottom: 10 }) - - if (this.examSubject == 3) { - Row() { - Text('考试路线:').fontColor('#E5CCA1').fontSize(this.FONTSIZE) - Text(`线路${this.wayno || 3}`).fontColor('#FFAD33').fontSize(this.FONTSIZE) - } - } - - }.width('45%').alignItems(HorizontalAlign.Start) - - Column() { - Row() { - Text('身份证号:').fontColor('#E5CCA1').fontSize(this.FONTSIZE) - Text(this.idCard).fontColor('#FFF').fontSize(this.FONTSIZE) - }.margin({ bottom: 10 }) - - Row() { - Text('考试用时:').fontColor('#E5CCA1').fontSize(this.FONTSIZE) - Text(formatTime(this.examTime)).fontColor('#FFF').fontSize(this.FONTSIZE) - }.margin({ bottom: 10 }) - - if (this.examSubject == 3) { - Row() { - if (this.judgeConfigObj['375'] == '0') { - Text(`应行驶:${this.examMileage}m`) - .fontColor('#E5CCA1') - .fontSize(this.FONTSIZE) - .padding({ right: 20 }) - } - Text(`已行驶:${this.jl}m`).fontColor('#FFAD33').fontSize(this.FONTSIZE) - } - } - - }.alignItems(HorizontalAlign.Start) - - }.width('100%') - - Column() { - Row() { - Text(this.carztStr).fontColor('#FFA500').fontSize(this.FONTSIZE) - if (this.judgeConfigObj['342'] == '0') { - Text(`${this.dw}挡`).fontColor('#FFA500').fontSize(this.FONTSIZE).padding({ left: 15, right: 15 }) - Text(`${this.sd}km/h`).fontColor('#FFA500').fontSize(this.FONTSIZE) - } - }.height(40) - - Row() { - Flex({ direction: FlexDirection.Column }) { - if (this.kfArr.length) { - List({ scroller: this.kfArrScroller }) { - ForEach(this.kfArr, (item) => { - ListItem() { - Column() { - Row() { - Text(item.xmmcStr).fontSize(this.BIGFONTSIZE).fontColor('#FFF') - Text(`${item.score}分`).fontSize(this.BIGFONTSIZE).fontColor('#FFF') - } - .width('100%') - .backgroundColor('#38260B') - .justifyContent(FlexAlign.SpaceBetween) - .padding({ top: 12, bottom: 12, left: 8, right: 5 }) - - Text(item.desc + `(${item.markcatalog})`) - .fontSize(this.BIGFONTSIZE) - .fontColor('#E5CBA1') - .margin({ top: 10, bottom: 8, left: 5, right: 5 }) - }.margin({ top: 15 }).alignItems(HorizontalAlign.Start) - - }.margin({ bottom: 25 }) - }) - }.padding({ left: 15, right: 15, top: 30, bottom: 5 }) - } else { - Column() { - Row() { - Text('暂无扣分项').fontSize(this.BIGFONTSIZE).fontColor('#FFF') - } - .width('100%') - .backgroundColor('#38260B') - .justifyContent(FlexAlign.SpaceBetween) - .padding({ top: 12, bottom: 12, left: 8, right: 3 }) - }.margin({ top: 35 }).padding({ left: 20, right: 20 }).alignItems(HorizontalAlign.Start) - } - } - .backgroundImage($rawfile('judge/score_bg.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .width(514) - .height(618) - .padding({ top: 18, bottom: 15, left: 13, right: 14 }) - - //科目二 - if (this.examSubject == 2) { - Flex({ wrap: FlexWrap.Wrap, direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween }) { - List({}) { - ForEach(chunkArr(this.projects, 2), (item) => { - ListItem() { - Row() { - Row() { - //#FF7566 #00FFD5 #E6DECF - // Text(this.projectsObj[item[0].projectCode]) - Text(item[0].abbreviation) - .fontSize(item[0].abbreviation.length > 5 ? 28 : 32) - .fontColor(this.getProjectColor(this.projectsObj[item[0].projectCode].type)) - } - .backgroundImage($rawfile('judge/project_item.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .width('48.5%') - .height(115) - .margin({ bottom: 5 }) - .justifyContent(FlexAlign.Center) - - if (item[1]) { - Row() { - //#FF7566 #00FFD5 #E6DECF - Text(item[1].abbreviation) - .fontSize(item[1].abbreviation.length > 5 ? 28 : 32) - .fontColor(this.getProjectColor(this.projectsObj[item[1].projectCode].type)) - } - .backgroundImage($rawfile('judge/project_item.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .width('48.5%') - .height(115) - .margin({ left: 5, bottom: 5 }) - .justifyContent(FlexAlign.Center) - } - } - } - }); - } - } - .backgroundImage($rawfile('judge/project_bg.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .width('57%') - .height('100%') - .padding(30) - .margin({ right: 10 }) - } - //科目三 - if (this.examSubject == 3) { - Column() { - Flex({ - wrap: FlexWrap.Wrap, - direction: FlexDirection.Row, - justifyContent: FlexAlign.SpaceBetween - }) { - List({}) { - ForEach(this.projects, (project) => { - ListItem() { - Text(project.name) { - } - .fontColor(this.getProjectColor(this.projectsObj[project.projectCode].type)) - .margin({ bottom: 2 }) - .fontSize(24) - }.margin({ bottom: 2 }) - }) - }.lanes(2).margin({ left: 25 }) - } - .width('100%') - .height('57%') - .backgroundImage($rawfile('judge/project_km3_bg.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .padding(30) - .margin({ right: 5 }) - - if (this.projects.length) { - Flex({ - wrap: FlexWrap.Wrap, - direction: FlexDirection.Row, - justifyContent: FlexAlign.SpaceAround - }) { - List() { - ForEach(this.artSubject3Projects, (item, index) => { - ListItem() { - } - .backgroundImage( - $rawfile( - `judge/km3/${this.getIsExitManualProject(index) ? (this.getIsEndManualProject(index)) : (item + '_gray')}.png` - ), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .width(174) - .height(118 * 0.95) - .margin({ bottom: 8 }) - .onClick(() => { - this.vocObj.playAudio({ - type: 1, - name: 'button_media.wav' - }) - this.setManualProjectFn(index) - }) - }) - }.lanes(3).margin({ left: 5, top: 12 }) - } - } - - } - .backgroundImage($rawfile('judge/project_bg.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .width(660) - .height(640) - .padding(44) - .margin({ right: 10 }) - } - }.margin({ top: 15 }).height('80%').justifyContent(FlexAlign.SpaceBetween) - }.width('100%').height('100%').alignItems(HorizontalAlign.Start).margin({ top: 10 }) - }.height('100%').alignItems(HorizontalAlign.Start) - }.width('75%').height('100%') - - Column() { - Column() { - Row() { - Text(this.totalScore <= 0 ? '0' : this.totalScore + '').fontColor('#FFEECC').fontSize(55) - Text('分').fontColor('#FFEECC').fontSize(30).padding({ top: 5 }) - } - .width(334) - .height(120) - .justifyContent(FlexAlign.Center) - .alignItems(VerticalAlign.Center) - .border({ width: 5, color: '#4D4136', radius: 30 }) - .onClick(() => { - this.vocObj.playAudio({ - type: 1, - name: 'button_media.wav' - }) - this.signDisplayComVisible = true - }) - - Row() { - Image(this.kszp).width('85%').height('85%') - } - .width(226) - .height(312) - .backgroundImage($rawfile('judge/photo_bg.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .justifyContent(FlexAlign.Center) - .alignItems(VerticalAlign.Center) - .margin({ top: 30, bottom: 15 }) - } - - Column() { - if (this.getIsManualKf()) { - Row() { - Row() { - } - .width(60) - .height(60) - .backgroundImage($rawfile('judge/manual_judge.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - - Text('人工评判').fontColor('#FFF').fontSize(32).padding({ right: 12 }) - } - .width(334) - .height(110) - .justifyContent(FlexAlign.Center) - .alignItems(VerticalAlign.Center) - .backgroundImage($rawfile('judge/button_nor.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .margin({ bottom: 10 }) - .onClick(() => { - this.vocObj.playAudio({ - type: 1, - name: 'button_media.wav' - }) - this.isDeductedPopShow = true - }) - } - - Row() { - Row() { - } - .width(60) - .height(60) - .backgroundImage($rawfile('judge/phone.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - - Text('呼叫请求').fontColor('#FFF').fontSize(32).padding({ right: 12 }) - } - .width(334) - .height(110) - .justifyContent(FlexAlign.Center) - .alignItems(VerticalAlign.Center) - .backgroundImage($rawfile('judge/button_nor.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .margin({ bottom: 10 }) - - Row() { - } - .width(334) - .height(100) - .backgroundImage($rawfile('judge/anniu_nor.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '100%', height: '100%' }) - .onClick(() => { - this.vocObj.playAudio({ - type: 1, - name: 'button_media.wav' - }) - if (this.judgeConfigObj['353'] == '0') { - this.endPopupVisible = true - } else { - Prompt.showToast({ - message: '车上不允许手动结束考试!', - duration: 4000 - }); - } - }) - }.margin({ bottom: 30 }) - - } - .width('25%') - .height('100%') - .justifyContent(FlexAlign.SpaceBetween) - .alignItems(HorizontalAlign.Center) - .margin({ bottom: 20 }) - }.height('90%').justifyContent(FlexAlign.Start).padding({ top: 37, left: 60, bottom: 35, right: 60 }) - - - //科目三人工扣分弹窗 - if (this.isDeductedPopShow && this.examSubject == 3 && this.judgeConfigObj['342'] == '0') { - DeductedPopup({ - defaultTabIndex: this.defaultTabIndex, - currentItems: Reflect.ownKeys(this.projectsObj).map(projectKey => { - //@ts-ignore - const project = this.projectsObj[projectKey] - return project.type == '2' ? project.projectCode : undefined - }).filter(project => project !== undefined), - markRules: this.manualMarkRules, - closePopup: () => { - this.isDeductedPopShow = false; - this.defaultTabIndex = 0; - }, - confirmMark: async (itemno, serial)=>{ - clearTimeout(this.popTimer) - this.popTimer = null - this.popTimer = setTimeout(async ()=>{ - const judge = this.judge - await judge.setJudgeMark(itemno, serial); - this.isDeductedPopShow = false - this.popTimer = null; - },500) - } - }) - } - - if (this.signDisplayComVisible) { - Column() { - SignDisplayCom({ - showBack: false, - scaleNum: 1.8, - msgStr: this.judge.plcStr || '', - }).margin({ top: 100 }) - - Row() { - } - .width(240) - .height(240) - .position({ x: '81%', y: 80 }) - .backgroundImage($rawfile('judge/close.png'), ImageRepeat.NoRepeat) - .backgroundImageSize({ width: '33.33%', height: '33.33%' }) - .onClick(() => { - this.vocObj.playAudio({ - type: 1, - name: 'button_media.wav' - }) - this.signDisplayComVisible = false - }) - }.width('100%').height('100%').position({ y: 0 }).backgroundColor('rgba(0,0,0,0.6)') - } - - //科目三人工项目确认框 - if (this.isAmplifyPopShow && this.examSubject == 3) { - AmplifyPopup({ - amplifyImgIndex: this.amplifiedImgIndex, - confirmAmplify:async (amplify)=>{ - clearTimeout(this.popTimer) - this.popTimer = null - this.popTimer = setTimeout(async ()=>{ - const judge = this.judge - await judge.setJudgeItem(amplify.projectCode, 1); - this.isAmplifyPopShow = false - this.popTimer = null; - },500) - }, - closeAmplifyPop: () => { - this.isAmplifyPopShow = false - } - }) - } - - //结束考试弹窗 - if (this.endPopupVisible) { - EndPoPup({ - title: '确定结束考试吗?', - cancelFn: () => { - this.endPopupVisible = false; - }, - confirmFn: async () => { - if (this.judgeConfigObj['344'] == 1) { - Prompt.showToast({ - message: '考试未结束,不允许手动退出!', - duration: 4000 - }); - return - } - this.endPopupVisible = false; - this.loadingPopupVisible = true - clearInterval(this.timer); - clearInterval(globalThis.judgeTimer) - try { - this.judge.checkExamIsEnd(true); - } catch (e) { - router.back() - } - - } - }) - } - - //loading 弹窗 - if (this.loadingPopupVisible) { - LoadingPopup({ - title: '正在生成考试记录,请稍后...', - }) - } - - if(this.dwztErrorVisible){ - DwztErrorPopup({ - title:'当前差分状态异常,学员将无法正常进行考试评判,请将车辆行驶到开阔地,等待程序自检,差分正常后会自动关闭该对话框', - cancelFn:()=>{ - this.dwztErrorVisible = false; - }, - confirmFn:()=>{ - clearInterval(this.timer); - clearInterval(globalThis.judgeTimer) - this.judge.checkExamIsEnd(true); - }, - }) - } - } - .height('100%').backgroundColor('#000').justifyContent(FlexAlign.Start) - } - - getProjectColor(type: string) { - switch (type) { - case '1': - return '#E6DECF'; - break; - case '2': - return '#FFAD33'; - break; - case '3': - return '#ff109d0a'; - break; - case '4': - return '#FF7566'; - break; - default: - return '#E6DECF'; - break; - } - } - - //人工项目操作 - async setManualProjectFn(index: number) { - const { - judgeConfigObj, - isManualProjectIn, - getIsExitManualProject, - artSubject3ProjectsCodesArr, - projectsObj - } = this; - const projectCode = artSubject3ProjectsCodesArr[index]; - if(index === 5) { - console.info('surenjun 靠边停车状态=> ',getIsExitManualProject(index)) - } - if (getIsExitManualProject(index)) { - // 正在进行的项目 取消项目 - if (isManualProjectIn && projectsObj[projectCode].type == '2') { - //判断人工是否能取消项目 && 当前项目有扣分的不能取消 - if(judgeConfigObj['340'] == 1 && projectsObj[projectCode].type != '5'){ - await this.judge.setJudgeItem(projectCode, 2); - Prompt.showToast({ - message: '项目取消', - duration: 2000 - }) - return - } - } - - // 靠边停车时候可以触发 - if (judgeConfigObj['343'] === '0') { - const xmmcStr = this.xmmcStr; - if (xmmcStr == '无' || xmmcStr == '') { - //512[6] 人工项目按钮放大确认 - const param512 = (judgeConfigObj['512'] || '').split(','); - console.info('surenjun',param512) - if(param512[6] !== '0'){ - this.amplifiedImgIndex = index; - this.isAmplifyPopShow = true - }else{ - const judge = this.judge - await judge.setJudgeItem(projectCode, 1); - } - } else { - if (index === 5) { - Prompt.showToast({ - message: `${xmmcStr}未结束,不允许靠边停车`, - duration: 8000 - }); - } - } - } else { - this.amplifiedImgIndex = index; - this.isAmplifyPopShow = true - } - } - } - - // 获取是否能人工进项目 - getIsExitManualProject = (index: number) => { - const { - judgeConfigObj, - artSubject3ProjectsCodesArr, - projectsObj, - carztStr, - isManualProjectIn, - isProjectIn, - getProjectIsInRoad - } = this; - const projectCode = artSubject3ProjectsCodesArr[index]; - if(projectsObj[projectCode] === undefined){ - return false - } - const projectType = projectsObj[projectCode].type; - - //不允许人工触发的项目列表,以","分隔 - const unExitManualProjects = judgeConfigObj['332'].split(',') || []; - //直线行驶中不进其他考试项目(0-否 1-是) - const param348 = judgeConfigObj['348'] || '0', - //里程不够允许手工点靠边停车(0-否 1-是) - param387 = judgeConfigObj['387'] || '0', - //里程不够不报靠边停车(0-否+1-是+2-必考项目未完成且里程不够不报项目) - param319 = judgeConfigObj['319'] || '0', - //人工项目是否能取消 1:可取消; - param340 = judgeConfigObj['340'] || '0', - //307参数里设置的项目,项目已经做过,后续不能人工触发; - param307 = (judgeConfigObj['307'] || '').split(','); - - //非行驶状态(没有速度),人工项目不能触发(按钮灰色) - if (carztStr === '停车') { - return false - } - - //车上是否能进行人工操作(0-能1-不能人工评判2-不能人工进项目3-都不能) - if (judgeConfigObj['342'] === '3' || judgeConfigObj['342'] === '2') { - return false - } - - //不允许人工触发的项目列表 - if (unExitManualProjects.includes(artSubject3ProjectsCodesArr[index])) { - return false - } - - //项目进行中不能人工触发 - if (isProjectIn) { - if (param340 == 1) { - if (isManualProjectIn && (projectsObj[projectCode].type == '2')) { - return true - } else { - return false - } - } - return false - } - - //项目路段信息判断 - if (!getProjectIsInRoad(projectCode + '')) { - return false - } - - //@ts-ignore 直线行驶中不进其他考试项目(0-否 1-是) - if (param348 == '0' && projectsObj['9']?.type == 2) { - return index === 0 ? true : false - } - - //项目已经做过,后续不能人工触发 - if (param307.includes(projectCode) && (projectType == '3' || projectType == '4')) { - return false - } - - //319不为0,或者387不为1,里程不够时,靠边停车项目不能触发 - if ((param387 != '1' || param319 != '0') && index === 5) { - const {examMileage,isRequiredProjectsEnd,jl} = this; - //里程是否达标 && 必考项目是否全完成 - return jl >= Number(examMileage) && isRequiredProjectsEnd - } - return true - } - - // 判断项目是否在当前路段号 - getProjectIsInRoad = (projectCode: string,) => { - const { - judgeConfigObj, - lane:{ road, num, count } - } = this; - - const projectRoads = { - //直线行驶 - '3': (judgeConfigObj['514']?.split(',') || []), - //变更车道 - '4': judgeConfigObj['515']?.split(',') || [], - //超车 - '10': judgeConfigObj['516']?.split(',') || [], - //靠边停车 - '11': judgeConfigObj['517']?.split(',') || [], - //会车 - '9': judgeConfigObj['518']?.split(',') || [], - //掉头 - '12': judgeConfigObj['519']?.split(',') || [], - }; - - //未测绘得道路上或者不在差分状态 - if (road === '') { - return false - } - - if(projectRoads[projectCode].length == 0){ - return true - } - - //设置了514-519参数,只能在设置的路段触发对应项目 - if (projectRoads[projectCode].includes(road)) { - //如果525为1,则514-519设置的路段不能触发对应项目 - if (judgeConfigObj['525'] == '1') { - return false - } - } else { - return false - } - - //405参数为2是,如果在最左侧车道,超车项目不能触发; - if (projectCode == '10' && - judgeConfigObj['405'] == '2' && - (num === count) && - num > 0 - ) { - return false - } - - // 车道总数少于2条,超车和变道不能触发 - if (projectCode == '10' || projectCode == '4') { - if (count < 2) { - return false - } - } - return true - - } - - // 获取人工项目是否已做 - getIsEndManualProject = (index: number) => { - const projectName = this.artSubject3Projects[index]; - const projectCode = this.artSubject3ProjectsCodesArr[index]; - const type = this.projectsObj[projectCode].type - if (type == '2') { - return projectName - } - return (type == '3' || type == '4') ? `${projectName}_red` : `${projectName}_green`; - } - - // 获取是否能进行人工评判 - getIsManualKf = () =>{ - const {examSubject} = this; - if(examSubject == 3){ - //杭州训练模式不允许人工评判 - if(globalThis.singlePlay && this.judgeConfigObj['211'] == 'zjhz'){ - return false - } - if(this.judgeConfigObj['342'] == '0'){ - return true - } - }else{ - return false - } - } - - scroller: Scroller = new Scroller() - //页面通用字体大小 - @State wayno: number = 0 - @State FONTSIZE: number = 30 - @State BIGFONTSIZE: number = 32 - //结束考试弹窗 - @State endPopupVisible: boolean = false - //等待弹窗(考试及格,考试不及格使用) - @State loadingPopupVisible: boolean = false - //实时轨迹弹窗 - @State signDisplayComVisible: boolean = false - @State isDdxk: boolean = false; - @State time: string = '' - //考试用时 - @State examTime: number = 0 - //开始时间 - @State startTime: string = '00:00:00' - @State startFullTime: string = '' - @State startHourTime: string = '' - @State startExamTime: string = '' - //科目类型 - @State examSubject: 2 | 3 = 3; - @State ddxkTime: number = 0; - @State ddxkKsxmArr: string[] = [] - @State ddxkKfArr: string[] = [] - @State xmmcStr: string = '' - @State carztStr: string = '' - @State kfArr: { - xmmcStr?: string, - score: string, - desc: string - markcatalog: string - }[] = [] - @State name: string = '' - @State idCard: string = '' - @State singlePlay: boolean = false; - @State totalScore: number = 100 - //模拟考试项目 - @State projects: Project[] = [] - @State projectsObj: ProjectObj = {} - @State projectsCenterObj: ProjectObj = {} - @State markRuleListObj: MarkRule = {} - @State cdsbInfoObj: CDSBInfo = {} - @State itemInfoObj: CDSBInfo = {} - @State timer: number = 0 - @State judgeConfig: { [k: string]: string }[] = [] - @State judgeConfigObj: { [k: string]: any } = defaultJudgeConfigObj - //流水号 - @State lsh: string = '' - @State kszp: string = '' - @State ksdd: string = '' - @State kssycs: string = '' - @State ksxl: string = '' - @State kslx: string = '' - //监管线路代码 - @State xldm: string = '' - //监管接口序列号 - @State serialNumber: number = 0 - @State carType: string = '' - @State carName: string = '' - @State isDeductedPopShow: boolean = false - @State isAmplifyPopShow: boolean = false - @State amplifiedImgIndex: number = 0 - @State judge: any = {} - //行驶距离 - @State jl: number = 0 - //应考里程 - @State examMileage: string = '0' - @State artSubject3Projects: string[] = ['直线', '会车', '变道', '超车', '掉头', '停车'] - @State artSubject3ProjectsCodesArr: string[] = ['3', '9', '4', '10', '12', '11'] - @State manualMarkRules: MarkRule[] = [] - //科目三评判初始化数据 - @State systemparmArr: SYSTEMPARMARR[] = [] - @State mapPointItemArr: MAPITEMPOINTITEM[] = [] - @State carinfoArr: CARINFO[] = [] - @State mapPointArr: MAPPOINT[] = [] - //手动项目是否在进行中 - @State isManualProjectIn: boolean = false; - //项目是否进行中 - @State isProjectIn: boolean = false; - //正在进行的项目代码 - @State currentXmdm: string = '' - // 必考项目除靠边停车是否全部完成 - @State isRequiredProjectsEnd: boolean = false; - // 考试项目是否全部完成 - // @State isAllProjectsEnd: boolean = false; - @State lane: LANE = { road: '', num: 0, count: 0 } - @State roadData: Object = {}; - //定位差分状态时候正常 - @State isDwztRight: boolean = true; - @State defaultTabIndex: number = 0; - private context = getContext(this) as common.UIAbilityContext; - public kfArrScroller: Scroller = new Scroller() - private vocObj = null; - //档位 - @State dw: string = '' - //速度 - @State sd: string = '' - @State mileageTimer: number = 0; - @State passingScore: number = 80 - @State dwztErrorVisible: boolean = false; - @State popTimer:number =0; - @State carlist:string= '' +//监管接口序列号映射 +const gjxlhObj = { + '17C51': '02-21-000009', + '17C52': '02-21-000010', + '17C53': '02-21-000011', + '17C54': '02-21-000012', + '17C55': '02-21-000013', + '17C56': '02-21-000014', } + +interface WR{ + message?:string + code:number +} +export default async function writeObjectOutNew(data,filePath): Promise { + const fileUtil = new FileUtil(globalThis.context); + const {jkid , drvexam} = data; + const basic = await getBasicConfig(jkid); + const params = await getParams(jkid, drvexam); + const {wglb,jkxlh,glbm,jgbh,sjbs} = basic; + + console.info('surenjun filePath=>',filePath) + fileUtil.editFile(`${filePath}/wuxi_exam_data.txt`,JSON.stringify({ + wglb,jkxlh,glbm,jgbh,sjbs, + data:params.data, + file:{...params.file,param:[]}, + })); + + const temp = await request({ + host: globalThis.JGHOST, + method: 'post', + //是否是新中心 + isNewCenter: true, + xml: true, + url: '/dems_ws/services/TmriOutAccess?wsdl', + data: ` + + + + ${wglb} + ${jkxlh} + ${glbm} + ${jgbh} + ${sjbs} + ${JSON.stringify(params.data)} + ${JSON.stringify(params.file)} + + + `, + }) + if(filePath){ + const fileUtil = new FileUtil(globalThis.context); + await fileUtil.initFolder(filePath); + fileUtil.editFile(`${filePath}/wuxi_exam_data.txt`,JSON.stringify(temp) +`\n`); + } + return temp +} + +export async function getParams(jkid, drvexam) { + const examSubject = globalThis.carInfo.examSubject; + switch (jkid) { + //开始考试 + case '17C51': + return { + data: { + sjbs: gjxlhObj[jkid], + param: { + sfzmhm: drvexam.sfzmhm, + kchp: decodeURI(drvexam.kchp), + kskm: examSubject, + ksxl: examSubject == 3 ? drvexam.ksxl : undefined, + kssj: drvexam.kssj + } + }, + file: { + sjbs: gjxlhObj[jkid], + // param: [{ field: '', data: examSubject == 2 ? encodeURIComponent(drvexam.zp) : drvexam.zp }] + param: [{ field: '', data: drvexam.zp }] + } + } + //项目开始 + case '17C52': + return { + data: { + sjbs: gjxlhObj[jkid], + param: { + sfzmhm: drvexam.sfzmhm, + kskm: drvexam.kskm, + ksxm: drvexam.ksxm, + ksxl: examSubject == 3 ? drvexam.ksxl : undefined, + kchp: decodeURI(drvexam.kchp), + //TODO 待验证 科目三无 + sbbh: examSubject == 3 ? undefined : drvexam.sbxh, + kssj: drvexam.kssj + } + }, + file: { + sjbs: gjxlhObj[jkid], + param: [{ field: '', data: '' }] + } + } + //扣分 + case '17C53': + return { + data: { + sjbs: gjxlhObj[jkid], + param: { + kffs: drvexam.kffs, + kfsj: drvexam.kfsj, + kfxm: drvexam.kfxm, + kfxmmx: drvexam.kfxmmx, + kskm: examSubject, + ksxm: drvexam.ksxm, + sfzmhm: drvexam.sfzmhm + } + }, + file: { + sjbs: gjxlhObj[jkid], + param: [{ field: '', data: '' }] + } + } + //过程照片 + case '17C54': + return { + data: { + sjbs: gjxlhObj[jkid], + param: { + cs: drvexam.cs, + kskm: drvexam.kskm, + ksxm: drvexam.ksxm, + sfzmhm: drvexam.sfzmhm, + zpsj: drvexam.zpsj + } + }, + file: { + sjbs: gjxlhObj[jkid], + param: [{ field: '', data: drvexam.zp }] + } + } + //项目结束 + case '17C55': + return { + data: { + param: { + czlx: drvexam.czlx, + jssj: drvexam.jssj, + kskm: examSubject, + ksxl: drvexam.ksxl, + sbbh: examSubject == 3 ? undefined : drvexam.sbxh, + ksxm: drvexam.ksxm, + sfzmhm: drvexam.sfzmhm + }, + sjbs: gjxlhObj[jkid], + }, + file: { sjbs: gjxlhObj[jkid], param: [{ field: '', data: '' }] } + } + //考试结束 + case '17C56': + return { + data: { + sjbs: gjxlhObj[jkid], + param: { + dwlc: drvexam.dwlc, + ghks: "0", + jssj: drvexam.jssj, + kscj: drvexam.kscj, + kskm: examSubject, + kslc: drvexam.kslc, + sfzmhm: drvexam.sfzmhm + }, + }, + file: { sjbs: gjxlhObj[jkid], param: [{ field: '', data: drvexam.zp }] } + } + + default: + return {} + } +} + +//获取基础信息 +async function getBasicConfig(jkid) { + const examSubject = globalThis.carInfo.examSubject; + const syssetParam = await getSyncData('MA_SYSSET'); + let syssetObj = {}; + //@ts-ignore + syssetParam.forEach(sys => { + syssetObj[sys.v_no] = decodeURIComponent(sys.v_value) + }); + + return { + //外挂类别 + wglb: examSubject == 2 ? "700203" : "700204", + //监管接口序列号 + jkxlh: syssetObj['901'], + //管理部门 + glbm: syssetObj['903'], + //考场序号 + jgbh: syssetObj['905'], + //接口id + sjbs: gjxlhObj[jkid], + } +} \ No newline at end of file diff --git a/entry/src/main/ets/pages/judgeSDK/api/judgeSDK.d.ts b/entry/src/main/ets/pages/judgeSDK/api/judgeSDK.d.ts index f398950e..d651eccf 100644 --- a/entry/src/main/ets/pages/judgeSDK/api/judgeSDK.d.ts +++ b/entry/src/main/ets/pages/judgeSDK/api/judgeSDK.d.ts @@ -97,8 +97,8 @@ export interface MAPITEMPOINTITEM { } export interface EXAMDATA { - //1:项目开始 2:项目结束 3:扣分 4:考车状态 5:考试结束 6:项目取消 7:语音播放和提示 8:模拟灯光事件 9:车道信息事件 10:预进项目事件 11:差分事件 - event: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 + //1:项目开始 2:项目结束 3:扣分 4:考车状态 5:考试结束 6:项目取消 7:语音播放和提示 8:模拟灯光事件 9:车道信息事件 10:预进项目事件 + event: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 //时间 sj: number //考车状态 -1:后退 0:停车 1:前进 @@ -164,9 +164,6 @@ export interface EXAMDATA { xmdm:number, xmxh:string } - nongps:{ - type:0|1|2|3|4 - } } export interface KSJS { diff --git a/entry/src/main/ets/pages/judgeSDK/judge.ts b/entry/src/main/ets/pages/judgeSDK/judge.ts index d3217516..503a136b 100644 --- a/entry/src/main/ets/pages/judgeSDK/judge.ts +++ b/entry/src/main/ets/pages/judgeSDK/judge.ts @@ -72,6 +72,7 @@ export default class Judge { this.kfArr = judgeUI.kfArr this.xmmcStr = ''; this.xmmcCode = ''; + this.xmmcEndCode = undefined; this.carztStr = ''; this.testKmItems = {}; // 考试回放配置 @@ -122,7 +123,7 @@ export default class Judge { strArr = str.split('\n') } //日志回调 - console.info(judgeTag, '1.进入评判入口1') + console.info(judgeTag, '1.进入评判入口') await examJudgeSetLogCallback(3, async (level, info, len) => { console.log('评判日志:' + info) await fileLog.setExamJudgeLogData(info); @@ -358,7 +359,7 @@ export default class Judge { handleRealExam = async (strData, callBack) => { let examData: EXAMDATA = JSON.parse(strData); const {getDqxmStr,getKfStr,goJudgeVoice,setMndg,avPlayer,fileLog,judgeUI} = this; - const {carzt,xmks,kf,event,xmjs,xmqx,ksjs,sound,mndg,lane,precast,nongps} = examData + const {carzt,xmks,kf,event,xmjs,xmqx,ksjs,sound,mndg,lane,precast} = examData const param512 = (judgeUI.judgeConfigObj['512'] || '').split(','); //获取项目结束、项目开始代码 const xmdm = event == 2 ? xmjs.xmdm : xmks.xmdm @@ -385,6 +386,7 @@ export default class Judge { this.xmmcStr = xmmcStr; this.xmmcCode = xmmcCode; this.xmmcSingleCode = xmmcSingleCode + this.xmmcEndCode = xmmcCode this.xmdm = xmdm; this.xmxh = xmxh; this.judgeUI.isProjectIn = true @@ -482,7 +484,7 @@ export default class Judge { case 10:{ const param611 = judgeConfigObj['611'] || ''; const [f,s] = param611.split('/') - const {xmdm} = precast; + const {xmdm,xmxh} = precast; const xmmcCode = judgeUI.projectsObj[xmdm].projectCodeCenter; const xmmcSingleCode = judgeUI.projectsObj[xmdm].projectCode; // if(examSubject == 2 && ((xmdm == 0 && f == 1) || (xmdm == 1 && s == 1) || xmdm == 3)){ @@ -492,16 +494,13 @@ export default class Judge { this.testKmItems[xmmcCode].status = 2; this.xmmcStr = xmmcStr; this.xmmcCode = xmmcCode; + this.xmdm = xmdm; + this.xmxh = xmxh; this.xmmcSingleCode = xmmcSingleCode; judgeUI.projectsObj[xmdm].type = '2'; } break; - //差分事件 - case 11:{ - const {type}= nongps - this.checkDwzt(type) - } default: break; @@ -594,6 +593,7 @@ export default class Judge { console.info(judgeTag, `项目结束-${xmdm}-${projectsObj[xmdm].name}`) await endProject(xmdm); this.xmmcSingleCode = 0; + this.xmmcEndCode = undefined; }, {isDelay: true}) } } @@ -760,7 +760,7 @@ export default class Judge { const carInfo = globalThis.carInfo; const deviceNo = globalThis.deviceNo; const { examSubject,plateNo,carNo } = carInfo; - const {judgeUI,getProjectInfo,fileLog,xmmcSingleCode,filePath} = this; + const {judgeUI,getProjectInfo,fileLog,xmmcEndCode,filePath} = this; const {lsh,idCard,serialNumber,ksdd,projectsObj} = judgeUI const time = await getCurrentTime(); const project = getProjectInfo(ksxm); @@ -776,6 +776,11 @@ export default class Judge { } }) + console.info('surenjun','开始扣分') + console.info('surenjun ksxm=>',ksxm) + console.info('surenjun commonKsxm=>',commonKsxm) + console.info('surenjun project=>',JSON.stringify(project)) + const data = { xtlb: '17', jkxlh: serialNumber, jkid: '17C53', drvexam: { @@ -784,7 +789,7 @@ export default class Judge { ksxm: project == undefined ? (commonKsxm ? (projectsObj[commonKsxm].projectCodeCenter) - : (examSubject == 3 ? 30000 : 10000)) + : (examSubject == 3 ? 30000 : (xmmcEndCode == undefined?10000:xmmcEndCode))) : project.projectCodeCenter , kfxm: kf.markcatalog, kfxmmx: `${ksxm},${kf.markserial}`, @@ -1482,13 +1487,13 @@ export default class Judge { const str = await senorToWXDataStr(msg); usbService.sendUSB(str) } - // this.judgeUI.isDwztRight = (plcData.gps.dwzt == 4 && plcData.gps.jdzt == 3); + this.judgeUI.isDwztRight = (plcData.gps.dwzt == 4 && plcData.gps.jdzt == 3); const param350 = judgeUI.judgeConfigObj['350'] //@ts-ignore this.judgeUI.sd = ((param350 == 0? plcData.gps.sd :plcData.sensor.cs) as number * 1.852).toFixed(0) + '' this.judgeUI.dw = (Math.floor(plcData.sensor.dw as number) || 0) + '' //TODO 暂时关闭差分检测异常 - // await this.checkDwzt(plcData.gps.dwzt,plcData.gps.jdzt); + await this.checkDwzt(plcData.gps.dwzt,plcData.gps.jdzt); if(!isExamEnd){ await examJudgeRealExam(plcData) } @@ -1574,7 +1579,7 @@ export default class Judge { const bytes = await this.getMessageHeartbeat(); bytes && globalThis.judgeUdp.send(bytes) - }, 20) + }, 50) globalThis.judgeTimer = judgeTimer; } @@ -1615,35 +1620,25 @@ export default class Judge { } // 检测差分状态 - checkDwzt = async (type) => { + checkDwzt = async (dwzt,jdzt) => { const {avPlayer} = this; const judgeConfig = this.judgeUI.judgeConfig; - switch (type){ - case 0: - this.judgeUI.isDwztRight = true; - break; + const param499 = judgeConfig['499'] || ''; + if(param499 == '' || param499 == undefined){ + return + } + //10秒内dwzt不为4; + const dwztNum = this.dwztNum + if(dwztNum != 0 && (dwztNum % (5 * 10) == 0) && (param499 !== '' || param499 !== undefined)){ + this.judgeUI.dwztErrorVisible = true; + avPlayer.playAudio([`voice/差分状态异常.mp3`],true) + } - case 1: - this.judgeUI.dwztErrorVisible = true; - avPlayer.playAudio([`voice/差分状态异常.mp3`],true) - setTimeout(()=>{ - router.back() - },3000) - break; - - case 2: - avPlayer.playAudio([`voice/差分状态异常.mp3`],true); - - break; - case 3: - this.judgeUI.dwztErrorVisible = true; - avPlayer.playAudio([`voice/差分状态异常.mp3`],true); - break; - - case 4: - this.judgeUI.isDwztRight = false; - //差分异常上报 - break; + if(dwzt != 4 || jdzt != 3){ + this.dwztNum += 1 + }else{ + this.dwztNum = 0; + this.judgeUI.dwztErrorVisible = false; } } @@ -1664,6 +1659,7 @@ export default class Judge { private xmmcStr: string private xmmcCode: string private xmmcSingleCode: number + private xmmcEndCode?:number private xmdm: string | number private xmxh: string private fileModel: FileModel