feat:删除多余文件
This commit is contained in:
		
							parent
							
								
									1704325d87
								
							
						
					
					
						commit
						6d7e173080
					
				| @ -1,918 +0,0 @@ | ||||
| import { examinationStuAbsent, getExaminationItem, getExaminationStudentInfo } from '../api/userInfo'; | ||||
| import router from '@ohos.router'; | ||||
| import TopLogo from './compontents/TopLogo'; | ||||
| import Md5 from '../common/utils/md5'; | ||||
| import AccountTable from '../common/database/tables/AccountTable'; | ||||
| import USER from '../common/constants/USER'; | ||||
| import { dateFormat, getCurrentTime, string2Bytes } from '../common/utils/tools'; | ||||
| import MA_SYSSET from '../common//constants/MA_SYSSET'; | ||||
| import FaceCompare from './compontents/FaceCompare'; | ||||
| // import { initJudgeUdp } from '../common/utils/UdpJudge' | ||||
| import { writeObjectOut } from '../api/judge'; | ||||
| import testNapi from '@ohos.idcard'; | ||||
| import common from '@ohos.app.ability.common'; | ||||
| import { User } from './interfaces'; | ||||
| import WebRTCVoice from './webRTC/'; | ||||
| import promptAction from '@ohos.promptAction'; | ||||
| import FilePhoto from './judgeSDK/utils/filePhoto'; | ||||
| import { getSyncData, upDateTableByArray } from '../common/service/initable'; | ||||
| import { CandidateData, EmptyCandidateObject } from '../mock/CandidateData'; | ||||
| import BoardPrePareSetPopup from './compontents/judge/BoardPrePareSetPopup' | ||||
| import LoadingPopup from './compontents/judge/LoadingPopup'; | ||||
| import VoiceAnnounce from './judgeSDK/utils/voiceAnnouncements'; | ||||
| import { JudgeConfig } from '../config/judge'; | ||||
| import { judgeConfig } from './judgeSDK/utils/judgeConfig'; | ||||
| import { initJudgeUdp } from '../common/utils/UdpJudge'; | ||||
| @Entry | ||||
| @Component | ||||
| struct UserInfo { | ||||
|   private filePhoto: FilePhoto | ||||
|   private avPlayer | ||||
| 
 | ||||
|   @State pageIndex: number = 0 | ||||
|   @State ratio: number = 1700 / 960 | ||||
|   @State index: number = 0 | ||||
|   @State stepFlag: boolean = false; | ||||
|   @State errorMsg: string = '' | ||||
|   @State ksxtbh: string = '' | ||||
|   @State pic: string = '' | ||||
|   @State jkxlh: string = '' | ||||
|   @State @Watch('changeFaceCompareSuccess') faceCompareSucess: number = 0; | ||||
|   @State @Watch('changeQkfn') getqkFlag: boolean = false; | ||||
|   @State @Watch('outClick') outFlag: boolean = false; | ||||
|   @State showFaceCompare: boolean = false; | ||||
|   @State url: string = '' | ||||
|   @State lsh: string = '' | ||||
|   @State qkFlag: boolean = false | ||||
|   @State isBoardPrePareSetPopupOpen: boolean = false | ||||
|   @State isFirstBoardPrePareSetPopupBtnShow: boolean = false | ||||
|   @State isBoardPrePareSetPopupShow: boolean = false | ||||
|   @State isLoadingPopupVisible:boolean = false; | ||||
|   @State loadingText:string = '正在认证监管信息,请稍后...' | ||||
|   @State sczbkf:{xmdm:number,kfdm:string}[] = [] | ||||
|   @State currentUser: User = EmptyCandidateObject | ||||
|   @State dataList: Array<User> = [] | ||||
|   @State list: Array<User> = [] | ||||
|   @State name: string = 'initName'; | ||||
|   @State sex: string = ''; | ||||
|   @State callBackFlag: boolean = false; | ||||
|   @State born?: string = ''; | ||||
|   @State address: string = ''; | ||||
|   @State nation: string = ''; | ||||
|   @State idCard: string = ''; | ||||
|   @State grantDept: string = ''; | ||||
|   //是否已经开始考试 | ||||
|   @State isExamStart:boolean = false; | ||||
|   @State effectDate: string = ''; | ||||
|   @State interval: any = null; | ||||
|   @State studentRefreshStatue: string = '0'; | ||||
|   @State photo: string = 'data:image/bmp;base64,'; | ||||
|   @State numCount: number = 0; | ||||
|   @State signNum: number = 0; | ||||
|   @State isCanClick: boolean = true; | ||||
|   @State updateTimeLimit: boolean = true | ||||
|   @State faceFlag: string = '0'; | ||||
|   @State FaceOpenStatue: string = '0'; //是否开启人脸识别 | ||||
|   subscriber; | ||||
|   @State faceCatchImg: string = '' | ||||
|   // 过程照片拍照 | ||||
|   getPhoto = async (empty?: boolean) => { | ||||
|     const singlePlay = globalThis.singlePlay | ||||
|     //单机模式返回空照片 | ||||
|     if (singlePlay) { | ||||
|       return '' | ||||
|     } else { | ||||
|       const {filePhoto} = this; | ||||
|       const photoBase64 = await filePhoto.getPhoto(); | ||||
|       return photoBase64 | ||||
|     } | ||||
|   } | ||||
|   private AccountTable = new AccountTable(() => {}, USER); | ||||
|   private context = getContext(this) as common.UIAbilityContext; | ||||
|   private labelBlocks = [ | ||||
|     { label: '考生姓名', key: 'xm' }, | ||||
|     { label: '身份证号', key: 'sfzmhm' }, | ||||
|     { label: ' 流 水 号 ', key: 'lsh' }, | ||||
|     { label: '考试路线', key: 'ksxl' }, | ||||
|     { label: '待考次数', key: 'kssycs' }, | ||||
|     { label: '考官姓名', key: 'ksy1' }, | ||||
|   ] | ||||
| 
 | ||||
|   async onPageShow() { | ||||
|     const mediaTest = new FilePhoto(this.context); | ||||
|     this.filePhoto = new FilePhoto(this.context); | ||||
|     //语音功能 | ||||
|     new WebRTCVoice(this.context); | ||||
|     //初始化数据 | ||||
|     this.initData() | ||||
| 
 | ||||
|     //身份证读卡器初始化 | ||||
|     // this.openDeviceByIDCard() | ||||
|     // 如果是单机模式则模拟假数据 | ||||
|     //获取sysset表数据 | ||||
|     this.initSysset() | ||||
| 
 | ||||
|     //心跳处理 | ||||
|     this.heartMsg() | ||||
|     this.isExamStart = false | ||||
|     this.sczbkf = []; | ||||
|     this.avPlayer = new VoiceAnnounce(); | ||||
|   } | ||||
| 
 | ||||
|   //身份证读卡器初始化 | ||||
|   openDeviceByIDCard() { | ||||
|     globalThis.indexComponent = this; | ||||
|     // 应用启动时打开读卡设备 | ||||
|     let ret = testNapi.OpenDevice(); | ||||
|     if (ret == 0) { | ||||
|       testNapi.StartReadCard(this.onReadCard); | ||||
|     } else { | ||||
|       console.error("zzctest Failed to Open Device"); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   stopDeviceById() { | ||||
|     if (this.faceFlag == '1') { | ||||
|       testNapi && testNapi.StopReadCard() | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   // 通过身份证获取当前学员 | ||||
|   getCurrentStudent(id) { | ||||
|     let flag = false | ||||
|     this.pageIndex | ||||
|     this.list.map((res, index) => { | ||||
|       if (res.sfzmhm == id) { | ||||
|         flag = true | ||||
|         this.currentUser = res | ||||
|         this.lsh = this.currentUser.lsh | ||||
|         globalThis.lsh = this.currentUser.lsh | ||||
|         globalThis.ksyh = this.currentUser.ksy1sfzmhm || this.currentUser.ksy2sfzmhm | ||||
|         const {examSubject} = globalThis.carInfo; | ||||
|         // this.currentUser.kszp=this.photo+res.kszp | ||||
|         // this.currentUser.ksmjzp=this.photo+this.currentUser.ksmjzp | ||||
|         if (globalThis.singlePlay) { | ||||
|           this.stopDeviceById() | ||||
|           // globalThis.statue=4 | ||||
|           router.pushUrl({ | ||||
|             url: examSubject == 3 ? 'pages/Roads' : 'pages/Judge', | ||||
|             params: { | ||||
|               sczb: Number(this.isBoardPrePareSetPopupOpen), | ||||
|               kfdm: this.sczbkf | ||||
|             } | ||||
|           }, router.RouterMode.Single); | ||||
|           return | ||||
|         } | ||||
| 
 | ||||
|         this.pageIndex = Math.floor(index / 4) | ||||
|       } | ||||
|     }) | ||||
|     this.dataList = this.list.slice(this.pageIndex * 4, this.pageIndex * 4 + 4) | ||||
|     if (!flag) { | ||||
|       promptAction.showToast({ | ||||
|         message: '未匹配到对应下载学员', | ||||
|         duration: 3000 | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   onReadCard(ret) { | ||||
|     console.info(`zzctest xx Read Card ret =${ret.status}`) | ||||
|     let thisVar = globalThis.indexComponent; | ||||
| 
 | ||||
|     if (ret.status == 0) { // status = 1 为读到身份证信息; status = 1 为身份证离开读卡器 | ||||
|       // 收到身份证离开读卡器的事件通知,根据实际业务需要决定是否需要清空之前已读取的身份证信息。 | ||||
|       // 如果身份证卡片离开读卡器时,需要继续保留UI界面上已读取到的身份信息,以下代码可以注释掉。 | ||||
|       thisVar.name = ""; | ||||
|       thisVar.sex = ""; | ||||
|       thisVar.nation = ""; | ||||
|       thisVar.born = ""; | ||||
|       thisVar.address = ""; | ||||
|       thisVar.idCard = ""; | ||||
|       thisVar.photo = ""; | ||||
| 
 | ||||
|       return true; | ||||
|     } | ||||
| 
 | ||||
|     if (ret.baseInfo.length > 2) { | ||||
|       // 收到身份证信息,填充页面 | ||||
|       console.info(`zzctest Read Card 1`); | ||||
|       let subIndex = ret.baseInfo.indexOf(":") | ||||
|       let baseInfo: string = ret.baseInfo.substring(subIndex + 1, ret.baseInfo.length - 1); | ||||
|       console.info(`zzctest Read Card 2 baseInfo=${baseInfo}`); | ||||
|       let baseInfos: string[] = baseInfo.split("|"); | ||||
|       thisVar.name = baseInfos[0]; | ||||
|       thisVar.sex = baseInfos[1]; | ||||
|       thisVar.nation = baseInfos[2]; | ||||
|       thisVar.born = baseInfos[3]; | ||||
|       thisVar.address = baseInfos[4]; | ||||
|       thisVar.idCard = baseInfos[5]; | ||||
|       setTimeout(() => { | ||||
|         thisVar.getCurrentStudent(baseInfos[5]) | ||||
|       }, 1000) | ||||
|     } | ||||
| 
 | ||||
|     // 身份证照片数据处理 | ||||
|     if (ret.photo instanceof ArrayBuffer) { | ||||
|       let dataView = new DataView(ret.photo) | ||||
|       console.info(`Read Card ret = length = ${dataView.byteLength}`) | ||||
|       let str = "" | ||||
|       for (let i = 0; i < dataView.byteLength; ++i) { | ||||
|         let c = String.fromCharCode(dataView.getUint8(i)) | ||||
|         if (c !== "\n") { | ||||
|           str += c | ||||
|         } | ||||
|       } | ||||
|       thisVar.photo += str; | ||||
|     } | ||||
|     console.info(`zzctest Read Card end`); | ||||
|     return true; | ||||
|   } | ||||
| 
 | ||||
|   changeQkfn() { | ||||
|     this.qkFn() | ||||
|   } | ||||
| 
 | ||||
|   async initData() { | ||||
|     this.isFirstBoardPrePareSetPopupBtnShow = false; | ||||
|     this.stepFlag = false | ||||
|     this.faceCompareSucess = 0 | ||||
|     this.showFaceCompare = false | ||||
|     this.lsh = '0000000000000' | ||||
|     this.callBackFlag = false | ||||
|     globalThis.lsh = this.lsh | ||||
|     // this.currentUser = EmptyCandidateObject | ||||
|     globalThis.statue = 2 | ||||
|     this.numCount = 0 | ||||
|     if (globalThis.singlePlay) { | ||||
|       // TODO 模拟假数据 | ||||
|       this.list = CandidateData | ||||
|       this.pageIndex = 0 | ||||
|       this.dataList = this.list.slice(this.pageIndex * 4, this.pageIndex * 4 + 4) | ||||
|       this.currentUser = this.dataList[0] | ||||
|       this.lsh = this.currentUser.lsh | ||||
|       globalThis.ksyh = this.currentUser.ksy1sfzmhm || this.currentUser.ksy2sfzmhm | ||||
|       globalThis.lsh = this.lsh | ||||
|     } else { | ||||
|       this.getExaminationStudentInfoFn() | ||||
|     } | ||||
|     const syssetParams = await getSyncData('MA_SYSSET'); | ||||
|     //@ts-ignore | ||||
|     syssetParams.forEach(sys => { | ||||
|       //364	绕车一周评判时机(1-开始考试后判 2-开始考试前判) | ||||
|       if (sys.v_no === '364') { | ||||
|         this.isBoardPrePareSetPopupOpen = true; | ||||
|       } | ||||
|     }) | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   async heartMsg() { | ||||
|     globalThis.udpClient2 & globalThis.udpClient2.setMsgCallBack((val) => { | ||||
|       if (val.id == '32') { | ||||
|         globalThis.signNum = val.body[1] | ||||
|         if (val.body[0] == '7') { | ||||
|           //缺考处理 | ||||
|           this.getqkFn() | ||||
|           this.signNum = val.body[1] | ||||
|         } | ||||
|       } else if (val.id == '42') { | ||||
|         //收到中心缺考确认消息 | ||||
|         console.log('qkfnqkfn', val.body[0]) | ||||
|         this.qkFn() | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   //考点端查询缺考指令内容消息请求 | ||||
|   getqkFn() { | ||||
|     let tmpList = []; | ||||
|     tmpList.push(string2Bytes(globalThis.signNum, 1 * 8)[0]) | ||||
|     const param = { | ||||
|       id: 41, | ||||
|       list: tmpList, | ||||
|       carNo: globalThis.carInfo.carNo, | ||||
|       placeId: globalThis.carInfo.examinationRoomId | ||||
|     } | ||||
| 
 | ||||
|     globalThis.udpClient2.sendMsgExt(param, this.context) | ||||
|   } | ||||
| 
 | ||||
|   async initSysset() { | ||||
|     const that = this; | ||||
|     const db = new AccountTable(() => { | ||||
|     }, MA_SYSSET); | ||||
|     db.getRdbStore(() => { | ||||
|       db.query('0', (syssetParams) => { | ||||
|         const serialNumberArr = syssetParams.filter(sys => sys.v_no === '901') | ||||
|         that.jkxlh = serialNumberArr?.[0]?.v_value || '1234567' | ||||
|         const ksxtbhArr = syssetParams.filter(sys => sys.v_no === '902') | ||||
|         that.ksxtbh = ksxtbhArr?.[0]?.v_value || '222' | ||||
|         const studentRefreshParam = syssetParams.filter(sys => sys.v_no === '452') | ||||
|         that.studentRefreshStatue = studentRefreshParam?.[0]?.v_value || '0' | ||||
|         const faceParam = syssetParams.filter(sys => sys.v_no == '2413') | ||||
|         that.FaceOpenStatue = faceParam?.[0]?.v_value == '3' ? '1' : '0' | ||||
|         that.FaceOpenStatue =  '0' | ||||
|         // that.FaceOpenStatue =  '0' | ||||
|         // faceParam?.[0]?.v_value || | ||||
|         // 1身份证读卡器 2指纹 3人脸 | ||||
|         this.faceFlag = faceParam?.[0]?.v_value || '0' | ||||
|         if (faceParam?.[0]?.v_value == '1') { | ||||
|           that.openDeviceByIDCard() | ||||
|         } | ||||
|         //0不自动更新 1自动更新(不限次数) 2没有考生更新2次 | ||||
|         if (that.studentRefreshStatue == '2') { | ||||
|           clearInterval(that.interval) | ||||
|           that.interval = setInterval(() => { | ||||
|             if (that.dataList.length == 0 && that.numCount < 3) { | ||||
|               that.numCount++ | ||||
|               that.getExaminationStudentInfoFn() | ||||
|             } | ||||
|           }, 5000) | ||||
|         } else if (that.studentRefreshStatue == '1') { | ||||
|           clearInterval(that.interval) | ||||
|           that.interval = setInterval(() => { | ||||
|             if (that.dataList.length == 0) { | ||||
|               that.getExaminationStudentInfoFn() | ||||
|             } | ||||
|           }, 5000) | ||||
|         } else { | ||||
|           this.getExaminationItemFn() | ||||
|         } | ||||
| 
 | ||||
|       }) | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   //人脸比对窗口关闭 | ||||
|   changeFaceCompareSuccess() { | ||||
|     console.log('this.faceCompareSuces', this.faceCompareSucess, JSON.stringify(this.currentUser)) | ||||
|     if (this.faceCompareSucess > 0) { | ||||
|       //人脸比对通过 | ||||
|       this.sfbdinterfaceFn() | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   nextClick() { | ||||
|     if (this.list.length <= 4 || this.pageIndex == Math.floor(this.list.length / 4)) { | ||||
|       return | ||||
|     } | ||||
|     this.pageIndex++; | ||||
|     this.dataList = this.list.slice(this.pageIndex * 4, this.pageIndex * 4 + 4) | ||||
|   } | ||||
| 
 | ||||
|   prevClick() { | ||||
|     if (this.list.length <= 4 || this.pageIndex == 0) { | ||||
|       return | ||||
|     } | ||||
|     this.pageIndex--; | ||||
|     this.dataList = this.list.slice(this.pageIndex * 4, this.pageIndex * 4 + 4) | ||||
|   } | ||||
| 
 | ||||
|   //获取下载考生 | ||||
|   getExaminationStudentInfoFn() { | ||||
|     if (globalThis.singlePlay && this.updateTimeLimit) { | ||||
|       return | ||||
|     } | ||||
|     const param = `<getExaminationStudentInfoReq><head><checkCode>${Md5.Instance.get_md5(globalThis.carInfo.carId + globalThis.carInfo.examinationRoomId + globalThis.username)}</checkCode></head><body><carId>${globalThis.carInfo.carId}</carId><examinationRoomId>${globalThis.carInfo.examinationRoomId}</examinationRoomId><examinerName>${globalThis.username}</examinerName></body></getExaminationStudentInfoReq>` | ||||
|     getExaminationStudentInfo(param).then(async(res) => { | ||||
|       setTimeout(() => { | ||||
|         this.updateTimeLimit = true | ||||
|       }, 30000) | ||||
|       this.updateTimeLimit = false | ||||
|       if (!res) { | ||||
|         this.dataList = [] | ||||
|         this.currentUser = EmptyCandidateObject | ||||
|         this.errorMsg = decodeURI(res.getExaminationStudentInfoRsp.head.resultMessage) | ||||
|         return | ||||
|       } | ||||
|       let dataList = [] | ||||
|       this.list = [] | ||||
| 
 | ||||
|       for (let key in res.getExaminationStudentInfoRsp.body) { | ||||
|         const a = res.getExaminationStudentInfoRsp.body[key] | ||||
|         if (a instanceof Array) { | ||||
|           dataList = a | ||||
|         } else { | ||||
|           dataList = [a] | ||||
|         } | ||||
|       } | ||||
|       if (dataList.length) { | ||||
|         this.numCount = 0 | ||||
|       } | ||||
| 
 | ||||
|       this.list = JSON.parse(JSON.stringify(dataList)) | ||||
|       this.list.forEach(listData => { | ||||
|         for (let i in listData) { | ||||
|           listData[i] = decodeURI(listData[i]) | ||||
|         } | ||||
|         listData.kszp = this.photo + listData.kszp | ||||
|         listData.ksmjzp = this.photo + listData.ksmjzp | ||||
|       }) | ||||
|       dataList = this.list.length > 4 ? this.list.slice(this.pageIndex * 4, this.pageIndex * 4 + 4) : this.list; | ||||
| 
 | ||||
|       this.dataList = dataList | ||||
|       if (this.dataList.length) { | ||||
|         this.currentUser = this.dataList[0] | ||||
|       } else { | ||||
|         this.currentUser = EmptyCandidateObject | ||||
|       } | ||||
| 
 | ||||
|       this.lsh = this.currentUser.lsh | ||||
|       globalThis.lsh = this.lsh | ||||
|       globalThis.ksyh = this.currentUser.ksy1sfzmhm || this.currentUser.ksy2sfzmhm | ||||
|       console.log('this.currentUse3' + JSON.stringify(this.currentUser)) | ||||
|       this.pageIndex = 0 | ||||
|       getSyncData('USER').then(data=>{ | ||||
|         if(data?.[0]){ | ||||
|           this.getCurrentStudent(data[0].sfzmhm) | ||||
| 
 | ||||
|         } | ||||
|       }) | ||||
|     }).catch((error) => { | ||||
|       console.log('error12error' + error) | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   qkFn() { | ||||
|     this.faceCompareSucess = 0 | ||||
|     if (globalThis.singlePlay) { | ||||
|       this.qkFlag = false | ||||
|       return | ||||
|     } | ||||
|     console.log('JsonJson', JSON.stringify(this.currentUser)) | ||||
|     const param = `<?xml version="1.0" encoding="UTF-8" ?><examinationStuAbsentReq><body><carId>${globalThis.carInfo.carId}</carId><cardNo>${this.currentUser.sfzmhm}</cardNo><examinationRoomId>${globalThis.carInfo.examinationRoomId}</examinationRoomId><examinerName>${globalThis.username}</examinerName><lsh>${this.lsh}</lsh></body></examinationStuAbsentReq>` | ||||
|     console.log('carNo1111', param) | ||||
| 
 | ||||
|     examinationStuAbsent(param).then(res => { | ||||
|       const arr = [this.signNum || 0, 1] | ||||
|       let tmpList = []; | ||||
|       tmpList.push(string2Bytes(arr[0], 1 * 8)[0]) | ||||
|       tmpList.push(string2Bytes(arr[1], 1 * 8)[0]) | ||||
|       console.log('globalThis.signNum', globalThis.signNum) | ||||
|       const param = { | ||||
|         id: 43, | ||||
|         list: tmpList, | ||||
|         carNo: globalThis.carInfo.carNo, | ||||
|         placeId: globalThis.carInfo.examinationRoomId | ||||
|       } | ||||
| 
 | ||||
|       globalThis.udpClient2.sendMsgExt(param, this.context) | ||||
|       if (res.examinationStuAbsentRsp.head.resultCode == '0') { | ||||
|         this.pageIndex = 0 | ||||
|         this.qkFlag = false | ||||
|         this.currentUser = EmptyCandidateObject | ||||
|         this.getExaminationStudentInfoFn() | ||||
|         return | ||||
|       } | ||||
|     }).catch((error) => { | ||||
|       console.log('error12error' + error) | ||||
|     }) | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   async getExaminationItemFn() { | ||||
|     if (!this.currentUser.lsh || globalThis.singlePlay) { | ||||
|       return | ||||
|     } | ||||
|     const carInfo = globalThis.carInfo; | ||||
|     const {carId,examinationRoomId} = carInfo; | ||||
|     const examItems = await getExaminationItem({ | ||||
|       time: getCurrentTime(), | ||||
|       carId, | ||||
|       lsh: this.currentUser.lsh || '', | ||||
|       examinationRoomId | ||||
|     }); | ||||
| 
 | ||||
|     if (examItems?.getExaminationItemRsp?.body?.kssycs != 0) { | ||||
|       this.getExaminationStudentInfoFn() | ||||
|     } else { | ||||
|       this.dataList = [] | ||||
|       this.currentUser = EmptyCandidateObject | ||||
|     } | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   //身份比对 | ||||
|   async sfbdinterfaceFn() { | ||||
|     this.stepFlag = true | ||||
|     const carInfo = globalThis.carInfo; | ||||
|     const {carId,examinationRoomId} = carInfo; | ||||
|     this.showFaceCompare = false | ||||
|     let examItems = { getExaminationItemRsp: { body: { ykxx: '' } } }; | ||||
|     if (!globalThis.singlePlay) { | ||||
|       //获取已考项目 | ||||
|       examItems = await getExaminationItem({ | ||||
|         time: getCurrentTime(), | ||||
|         carId, | ||||
|         lsh: this.currentUser.lsh || '', | ||||
|         examinationRoomId | ||||
|       }); | ||||
|     } | ||||
|     this.currentUser.id = '1' | ||||
|     const avPlayer = this.avPlayer; | ||||
|     this.isLoadingPopupVisible = true | ||||
|     avPlayer.playAudio([`voice/监管通信中.mp3`],false,async ()=>{ | ||||
|       const code = await this.beginExam(); | ||||
|       if (code != 1) { | ||||
|         promptAction.showToast({ | ||||
|           message:'开始考试接口调用失败!', | ||||
|           duration:4000 | ||||
|         }) | ||||
|         return | ||||
|       } | ||||
|       await upDateTableByArray('USER', [this.currentUser]) | ||||
|       globalThis.statue = 4 | ||||
|       this.stepFlag = false | ||||
|       this.isLoadingPopupVisible = false | ||||
|       router.pushUrl({ | ||||
|         url: 'pages/Judge', | ||||
|         params: { | ||||
|           examItems: examItems?.getExaminationItemRsp?.body?.ykxx, | ||||
|           sczb: Number(this.isBoardPrePareSetPopupOpen), | ||||
|           kfdm: this.sczbkf | ||||
|         } | ||||
|       }, router.RouterMode.Single); | ||||
|       this.stopDeviceById() | ||||
|       this.stepFlag = false | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   // 检测车门、熄火信号 | ||||
|   async checkSignal(): Promise<boolean> { | ||||
|     const {isCheckFireOpen} = judgeConfig | ||||
|     return new Promise((resolve,reject)=>{ | ||||
|       if(isCheckFireOpen){ | ||||
|         resolve(true) | ||||
|         // return | ||||
|       } | ||||
|       console.info('socketTag[PLC.UdpClient]', '注册udp回调') | ||||
|       let plcValue =  globalThis.udpClient.getCurrentMessage(); | ||||
|       console.info('surenjun',plcValue) | ||||
|       const msgArr = plcValue.split(',') || '' | ||||
|       const mkg = msgArr[14]; | ||||
|       const fdjzs = msgArr[25]; | ||||
|       if(mkg == 1){ | ||||
|         this.avPlayer.playAudio(['voice/关门.mp3']) | ||||
|         promptAction.showToast({ | ||||
|           message:'请关闭车门', | ||||
|           duration:4000 | ||||
|         }) | ||||
|         reject(false) | ||||
|       } | ||||
|       if(fdjzs*1 > 0){ | ||||
|         this.avPlayer.playAudio(['voice/熄火.mp3']) | ||||
|         promptAction.showToast({ | ||||
|           message:'请熄火', | ||||
|           duration:4000 | ||||
|         }) | ||||
|         reject(false) | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   // 开始考试 | ||||
|   async beginExam() { | ||||
|     const carInfo = globalThis.carInfo; | ||||
|     const {carId,examinationRoomId} = carInfo; | ||||
|     const { examSubject,plateNo } = carInfo; | ||||
|     const date = new Date() | ||||
|     console.info('surenjun', 'photoBase64') | ||||
|     const photoBase64 = await this.getPhoto(); | ||||
|     console.info('surenjun', 'photoBase64End') | ||||
|     const drvexam = { | ||||
|       lsh: this.currentUser.lsh || '', | ||||
|       kskm: examSubject, | ||||
|       ksxtbh: this.ksxtbh || '222', | ||||
|       sfzmhm: this.currentUser.sfzmhm || '', | ||||
|       ksysfzmhm: this.currentUser.ksy1sfzmhm || '', | ||||
|       ksxl: this.currentUser.ksxl, | ||||
|       zp: photoBase64, | ||||
|       kssj: dateFormat(date) || '', | ||||
|       kchp: decodeURI(plateNo), | ||||
|       Ksy2sfzmhm: this.currentUser.ksy2sfzmhm || '' | ||||
|     } | ||||
|     const param = { | ||||
|       drvexam, | ||||
|       xtlb: '17', | ||||
|       //接口序列号 | ||||
|       jkxlh: this.jkxlh || '1234567', | ||||
|       //接口标识 | ||||
|       jkid: '17C51', | ||||
|     } | ||||
|     const code = await writeObjectOut(param); | ||||
|     globalThis.lsh = this.currentUser.lsh | ||||
|     globalThis.ksyh = this.currentUser.ksy1sfzmhm || this.currentUser.ksy2sfzmhm; | ||||
|     return code | ||||
|   } | ||||
| 
 | ||||
|   aboutToDisappear() { | ||||
|     this.outClick() | ||||
|   } | ||||
| 
 | ||||
|   outClick() { | ||||
|     clearInterval(this.interval) | ||||
|     this.stopDeviceById() | ||||
|     globalThis.udpClient2 && globalThis.udpClient2?.setMsgCallBack(() => { | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   // 几个按钮公共样式 | ||||
|   @Styles | ||||
|   commStyle(){ | ||||
|     .width(220 * this.ratio) | ||||
|     .height(69 * this.ratio) | ||||
|     .backgroundImage($r('app.media.button_nor')) | ||||
|     .backgroundImageSize({ width: '100%', height: '100%' }) | ||||
|     .margin({ bottom: 12 * this.ratio }) | ||||
|   } | ||||
| 
 | ||||
|   build() { | ||||
|     Column() { | ||||
| 
 | ||||
|       TopLogo({ outFlag: $outFlag }).margin({ bottom: 10 }) | ||||
|       Row() { | ||||
|         Row() { | ||||
|           ForEach(this.dataList, (item) => { | ||||
|             Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { | ||||
|               Column() { | ||||
|                 CommText({ | ||||
|                   ratio: this.ratio, | ||||
|                   color: item.sfzmhm != this.currentUser.sfzmhm ? '#FFFFFF' : '#000000', | ||||
|                   text: item.lsh | ||||
|                 }) | ||||
|                 CommText({ | ||||
|                   ratio: this.ratio, | ||||
|                   color: item.sfzmhm != this.currentUser.sfzmhm ? '#FFFFFF' : '#000000', | ||||
|                   text: decodeURIComponent(item.xm) | ||||
|                 }) | ||||
|               } | ||||
|             } | ||||
|             .width(165 * this.ratio) | ||||
|             .height(85 * this.ratio) | ||||
|             .backgroundImage(item.sfzmhm != this.currentUser.sfzmhm ? $r('app.media.userbox2') : $r('app.media.userboxbg')) | ||||
|             .backgroundImageSize({ width: '100%', height: '100%' }) | ||||
|             .onClick(() => { | ||||
|               if(this.isExamStart){ | ||||
|                 return | ||||
|               } | ||||
|               this.currentUser = item | ||||
|             }) | ||||
|           }) | ||||
|         }.width(640 * this.ratio).margin({ left: 30 * this.ratio }) | ||||
| 
 | ||||
|         Image($r('app.media.dk_prev')) | ||||
|           .width(90 * this.ratio) | ||||
|           .height(70 * this.ratio) | ||||
|           .margin({ left: 65 * this.ratio, right: 10 * this.ratio }) | ||||
|           .onClick(() => { | ||||
|             this.prevClick() | ||||
|           }) | ||||
|         Image($r('app.media.dk_next')).width(90 * this.ratio).height(70 * this.ratio).onClick(() => { | ||||
|           this.nextClick() | ||||
|         }) | ||||
|       }.margin({ top: 40 * this.ratio, bottom: 10 * this.ratio }) | ||||
| 
 | ||||
|       Flex({ justifyContent: FlexAlign.SpaceBetween }) { | ||||
|         Row() { | ||||
|           Column() { | ||||
|             if (this.currentUser['kszp']) { | ||||
| 
 | ||||
|               Avatar({ | ||||
|                 ratio: this.ratio, | ||||
|                 url: this.currentUser['kszp'] ? this.currentUser['kszp'] : '' | ||||
|               }) | ||||
|             } else { | ||||
|               Avatar({ | ||||
|                 ratio: this.ratio, | ||||
|                 url: "" | ||||
|               }) | ||||
|             } | ||||
|             if (this.currentUser['ksmjzp']) { | ||||
|               Avatar({ | ||||
|                 ratio: this.ratio, | ||||
|                 url: this.currentUser['ksmjzp'] ? this.currentUser['ksmjzp'] : '' | ||||
|               }) | ||||
|             } else { | ||||
| 
 | ||||
|               Avatar({ | ||||
|                 ratio: this.ratio, | ||||
|                 url: "" | ||||
|               }) | ||||
|             } | ||||
|           } | ||||
| 
 | ||||
|           Column() { | ||||
|             ForEach(this.labelBlocks, (item) => { | ||||
|               LabelBlock({ label: item.label, ratio: this.ratio, value: this.currentUser[item.key] }) | ||||
|             }) | ||||
|           } | ||||
|         } | ||||
|         .width(664 * this.ratio) | ||||
|         .height(339 * this.ratio) | ||||
|         .backgroundImage($r('app.media.dkbg')) | ||||
|         .backgroundImageSize({ width: '100%', height: '100%' }) | ||||
|         .margin({ left: 53 * this.ratio }) | ||||
| 
 | ||||
|         Column() { | ||||
|           Image($r('app.media.yydj_btn')) | ||||
|             .commStyle() | ||||
|           Image($r('app.media.gx_btn')) | ||||
|             .commStyle() | ||||
|             .onClick(() => { | ||||
|               this.faceCompareSucess = 0 | ||||
|               this.numCount = 0 | ||||
|               this.getExaminationStudentInfoFn() | ||||
|             }) | ||||
|           Image($r('app.media.qk_btn')) | ||||
|             .commStyle() | ||||
|             .onClick(() => { | ||||
|               this.qkFlag = true | ||||
|             }) | ||||
| 
 | ||||
|           if (this.isBoardPrePareSetPopupOpen && !this.isFirstBoardPrePareSetPopupBtnShow) { | ||||
|             //上车准备 | ||||
|             Image($r('app.media.sczb_btn')).commStyle().onClick(async () => { | ||||
|               try { | ||||
|                 await this.checkSignal() | ||||
|                 this.isExamStart = true | ||||
|                 await upDateTableByArray('USER', [this.currentUser]) | ||||
|                 globalThis.statue = 4 | ||||
|                 this.isBoardPrePareSetPopupShow = true; | ||||
|                 this.isFirstBoardPrePareSetPopupBtnShow = true; | ||||
|                 this.stepFlag = false | ||||
|                 this.stopDeviceById() | ||||
|                 initJudgeUdp() | ||||
|               } catch (e) { | ||||
| 
 | ||||
|               } | ||||
|             }) | ||||
|           } else { | ||||
|             Image($r('app.media.ksks_btn')) | ||||
|               .commStyle() | ||||
|               .onClick(async () => { | ||||
|                 try { | ||||
|                   // await this.checkSignal() | ||||
|                   this.faceCompareSucess = 0 | ||||
|                   globalThis.statue = 2 | ||||
|                   if (!this.currentUser.xm) { | ||||
|                     return | ||||
|                   } | ||||
|                   if (globalThis.singlePlay) { | ||||
|                     const {examSubject} = globalThis.carInfo; | ||||
|                     await upDateTableByArray('USER', [this.currentUser]) | ||||
|                     router.pushUrl({ | ||||
|                       url: examSubject == 3 ? 'pages/Roads' : 'pages/Judge', | ||||
|                       params: { | ||||
|                         sczb: Number(this.isBoardPrePareSetPopupOpen), | ||||
|                         kfdm: this.sczbkf | ||||
|                       } | ||||
|                     }, router.RouterMode.Single); | ||||
|                     this.stopDeviceById() | ||||
|                     return | ||||
|                   } | ||||
|                   console.log('this.FaceOpenStatue',this.FaceOpenStatue) | ||||
|                   if (this.FaceOpenStatue != '0') { | ||||
|                     this.showFaceCompare = true | ||||
|                   } else { | ||||
|                     initJudgeUdp() | ||||
|                     this.sfbdinterfaceFn() | ||||
|                   } | ||||
|                 } catch (e) { | ||||
| 
 | ||||
|                 } | ||||
| 
 | ||||
|               }) | ||||
|           } | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       if (this.showFaceCompare) { | ||||
|         FaceCompare({ | ||||
|           sfzh: this.currentUser.sfzmhm, | ||||
|           firstImage: this.currentUser.kszp, | ||||
|           faceCompareSucess: $faceCompareSucess, | ||||
|           getqkFlag: $getqkFlag, | ||||
|           faceCatchImg: $faceCatchImg, | ||||
|           showFaceCompare: $showFaceCompare, | ||||
|           lsh: globalThis.lsh, | ||||
|         }) | ||||
|       } | ||||
|       if (this.qkFlag) { | ||||
|         Column() { | ||||
|           Text('确认考生:' + this.currentUser.xm + '是否缺考') | ||||
|             .fontSize(28 * this.ratio) | ||||
|             .position({ x: 160 * this.ratio, y: 122 * this.ratio }) | ||||
|           Row() { | ||||
|             Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { | ||||
|               Text('  取   消  ').fontSize(24 * this.ratio).fontColor('#fff').width(100 * this.ratio) | ||||
|             } | ||||
|             .commStyle() | ||||
|             .onClick(() => { | ||||
|               this.qkFlag = false | ||||
|             }) | ||||
| 
 | ||||
|             Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { | ||||
|               Text('  确   定  ').fontSize(24 * this.ratio).fontColor('#fff').width(100 * this.ratio) | ||||
|             } | ||||
|             .commStyle() | ||||
|             .onClick(() => { | ||||
|               this.qkFn() | ||||
|             }) | ||||
|           }.position({ y: 265 * this.ratio, x: 115 * this.ratio }) | ||||
| 
 | ||||
|         } | ||||
|         .width(660 * this.ratio) | ||||
|         .height(360 * this.ratio) | ||||
|         .position({ x: 150 * this.ratio, y: 98 * this.ratio }) | ||||
|         .backgroundColor('#E6E3DF') | ||||
|         .borderRadius(19 * this.ratio) | ||||
|       } | ||||
| 
 | ||||
|       // 上车准备弹窗 | ||||
|       if (this.isBoardPrePareSetPopupShow) { | ||||
|         BoardPrePareSetPopup({ | ||||
|           closePopup: (bool) => { | ||||
|             this.isBoardPrePareSetPopupShow = false; | ||||
|           }, | ||||
|           confirmMark: (kfdm) => { | ||||
|             this.sczbkf = kfdm | ||||
|           } | ||||
|         }) | ||||
|       } | ||||
| 
 | ||||
|       // loading | ||||
|       if(this.isLoadingPopupVisible){ | ||||
|         LoadingPopup({ | ||||
|           title: this.loadingText, | ||||
|         }) | ||||
|       } | ||||
|     } | ||||
|     .height('100%') | ||||
|     .width('100%') | ||||
|     .backgroundImage($r('app.media.bg')) | ||||
|     .backgroundImageSize({ width: '100%', height: '100%' }) | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| // 头像组件 | ||||
| @Component | ||||
| struct Avatar { | ||||
|   @State ratio: number = 0 | ||||
|   @State url: string = "" | ||||
| 
 | ||||
|   build() { | ||||
|     Row() { | ||||
|       Image(this.url) | ||||
|         .width(93 * this.ratio) | ||||
|         .height(130.5 * this.ratio) | ||||
|         .margin({ bottom: 10 * this.ratio, right: 58 * this.ratio, left: 55 * this.ratio }) | ||||
|         .backgroundColor('orange') | ||||
|         .border({ color: '#fff', width: 1, style: BorderStyle.Solid }) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| // 横向滚动学员列表里面文字 | ||||
| @Component | ||||
| struct CommText { | ||||
|   @Prop text: string | ||||
|   @Prop color: string | ||||
|   @Prop ratio: number | ||||
| 
 | ||||
|   build() { | ||||
|     Text(this.text) | ||||
|       .fontSize(16 * this.ratio) | ||||
|       .lineHeight(30 * this.ratio) | ||||
|       .fontWeight(500) | ||||
|       .fontColor(this.color) | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| // 考生信息的labelBlock组件 | ||||
| @Component | ||||
| struct LabelBlock { | ||||
|   @State label: string = '' | ||||
|   @State ratio: number = 0 | ||||
|   @Prop value: string = '' | ||||
| 
 | ||||
|   @Styles | ||||
|   commLabelStyle(){ | ||||
|     .width(280 * this.ratio) | ||||
|     .height(35 * this.ratio) | ||||
|     .backgroundImageSize({ width: '100%', height: '100%' }) | ||||
|     .backgroundImage($r('app.media.userbox')) | ||||
|     .margin({ left: 8 * this.ratio }) | ||||
|     .align(Alignment.Center) | ||||
|   } | ||||
| 
 | ||||
|   build() { | ||||
|     Row() { | ||||
|       Text(this.label).fontSize(16 * this.ratio).fontColor('#99948A') | ||||
|       Row() { | ||||
|         Text(decodeURIComponent(this.value)).fontColor('#fff').textAlign(TextAlign.Center).width('100%') | ||||
|       } | ||||
|       .commLabelStyle() | ||||
|     }.margin({ bottom: 10 * this.ratio }) | ||||
|   } | ||||
| } | ||||
| @ -2,11 +2,11 @@ | ||||
| //考试回放开关
 | ||||
| export const judgeConfig = { | ||||
|   //本地目录开关
 | ||||
|   isTrajectoryOpen: true, | ||||
|   isTrajectoryOpen: false, | ||||
|   //是否开启拍照
 | ||||
|   isPhotoOpen: false, | ||||
|   isPhotoOpen: true, | ||||
|   //扣分语音是否强制开启
 | ||||
|   kfVoiceOpen: false, | ||||
|   kfVoiceOpen: true, | ||||
|   //忽略的考试项目
 | ||||
|   ignoreProjects:[41], | ||||
|   // 是否忽略考试前熄火、车门检查
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user