From e917107df10b355e7b4e5904acfa0b43ffe4fb6b Mon Sep 17 00:00:00 2001 From: lvyuankang <1344032923@qq.com> Date: Tue, 31 Dec 2024 10:21:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/common/utils/File.ts | 160 +++++++++--------- entry/src/main/ets/common/utils/request.ts | 2 +- entry/src/main/ets/pages/Judge.ets | 26 +-- .../main/ets/pages/judgeSDK/api/judgeSDK.d.ts | 7 +- entry/src/main/ets/pages/judgeSDK/judge.ts | 72 ++++---- 5 files changed, 118 insertions(+), 149 deletions(-) diff --git a/entry/src/main/ets/common/utils/File.ts b/entry/src/main/ets/common/utils/File.ts index 0be45c1a..1518050d 100644 --- a/entry/src/main/ets/common/utils/File.ts +++ b/entry/src/main/ets/common/utils/File.ts @@ -6,7 +6,8 @@ import common from '@ohos.app.ability.common' import fs from '@ohos.file.fs' const LOGTAG = 'LOGTAG' -export default class FileUtil{ + +export default class FileUtil { private context: common.UIAbilityContext private wantInfos: Want[] private fileAccessHelper: fileAccess.FileAccessHelper @@ -14,8 +15,7 @@ export default class FileUtil{ //后续文件路径待替换 private absolutePath = '/mnt/hmdfs/100/account/device_view/local/files' - public destFile:string - public filePathFdObj:Object = {} + public destFile: string constructor(wantInfos) { const {requestPermission} = this; @@ -27,81 +27,88 @@ export default class FileUtil{ * @desc 校验文件夹,文件夹不存在会创建,支持嵌套 * */ - public initFolder = async (folderPath:string) => { + public initFolder = async (folderPath: string) => { const {absolutePath} = this; const folderList = folderPath.split('/').filter(folderName => folderName !== ''); let path = absolutePath - folderList.forEach((folderName=>{ + folderList.forEach((folderName => { path += `/${folderName}`; try { const isExit = fs.accessSync(path); - if(!isExit){ + if (!isExit) { fs.mkdirSync(path) } } catch (e) { - console.info('初始化文件夹失败',path) + console.info('初始化文件夹失败', path) promptAction.showToast({ - message:`初始化文件夹失败`+ folderPath + JSON.stringify(e), - duration:4000, + message: `初始化文件夹失败` + JSON.stringify(e), + duration: 4000, }) } + + })); return path; } - /* * @desc 创建并覆盖文件 * */ - public addFile = async (filePath:string,content:string,type?:string)=>{ - const { READ_WRITE,CREATE,APPEND }= fs.OpenMode + public addFile = async (filePath: string, content: string, type?: string, fd?) => { + const { READ_WRITE,CREATE,APPEND } = fs.OpenMode const isExit = fs.accessSync(filePath); //文件存在先删除 - if(isExit){ + if (isExit) { fs.unlinkSync(filePath); } try { - let file = fs.openSync(filePath, READ_WRITE | CREATE); + let file + if (!fd) { + file = fs.openSync(filePath, READ_WRITE | CREATE); + } //追加写入文件 - fs.writeSync(file.fd,content) + fs.writeSync(file.fd, content) fs.closeSync(file) - console.error(LOGTAG,'写入文件成功') - return true + return file.fd - }catch (e){ - promptAction.showToast({ - message:`addFile文件失败`+ filePath +JSON.stringify(e), - duration:4000, - }) - console.error(LOGTAG,'写入失败',JSON.stringify(e)) + } catch (e) { + console.error(LOGTAG, '写入失败', JSON.stringify(e)) } } + + public openFileSync = async (filePath) => { + const { READ_WRITE,CREATE,APPEND } = fs.OpenMode + let file = fs.openSync(filePath, READ_WRITE | APPEND | CREATE); + return file + } + + public editFileWidthOutOpen(file, content) { + const newStr = content + '\n' + fs.writeSync(file.fd, newStr) + fs.closeSync(file) + console.error(LOGTAG, '写入文件成功') + } + /* * @desc 创建或者编辑文件 * */ - public editFile = async (filePath:string,content:string,fd?:number)=>{ - const {filePathFdObj} = this; - const { READ_WRITE,CREATE,APPEND }= fs.OpenMode - const newStr = content + '\n' - const thisFileFd = filePathFdObj[filePath]; + public editFile = async (filePath: string, content: string, fd?: number) => { + const { READ_WRITE,CREATE,APPEND } = fs.OpenMode try { - if(thisFileFd){ - fs.writeSync(fd,newStr) - return fd; - }else{ - let file = fs.openSync(filePath, READ_WRITE | APPEND |CREATE); - fs.writeSync(file.fd,newStr) - this.filePathFdObj[filePath] = file.fd + const newStr = content + '\n' + if (fd !== undefined) { + fs.writeSync(fd, newStr) + return fd + } else { + let file = fs.openSync(filePath, READ_WRITE | APPEND | CREATE); + fs.writeSync(file.fd, newStr) return file.fd } + } catch (e) { - promptAction.showToast({ - message:`editFile文件失败`+ filePath +JSON.stringify(e), - duration:4000, - }) - console.error(LOGTAG,JSON.stringify(e)) + console.error(LOGTAG, JSON.stringify(e)) } } @@ -109,17 +116,12 @@ export default class FileUtil{ * @desc 读取文件 * **/ - public readFile = async (filePath:string) => { - try{ - console.log('strrr',filePath) + public readFile = async (filePath: string) => { + try { + console.log('strrr', filePath) const str = await fs.readText(filePath); return str - }catch (e){ - promptAction.showToast({ - message:`读取文件失败`+ filePath +JSON.stringify(e), - duration:4000, - }) - console.log('readFile文件失败'+ filePath +JSON.stringify(e)) + } catch (err) { return '' } @@ -128,9 +130,9 @@ export default class FileUtil{ /* * @desc获取系统目录里的文件列表 */ - public getDeviceList = async (folderPath?:string)=>{ + public getDeviceList = async (folderPath?: string) => { const {absolutePath,getFilePathList} = this; - return getFilePathList(`${absolutePath}/${folderPath}`,false) + return getFilePathList(`${absolutePath}/${folderPath}`, false) }; // 删除文件夹或者文件 @@ -139,29 +141,29 @@ export default class FileUtil{ * @param{{type}} 1:文件夹 2:文件 3:自定义目录下文件 **/ - public deleteF = async (path:string,type: 1 | 2 | 3) => { + public deleteF = async (path: string, type: 1 | 2 | 3) => { const {getFilePathList,absolutePath} = this - if(type === 1){ - const fileList = await getFilePathList(`${absolutePath}/${path}`,false); - fileList.forEach(filePath =>{ + if (type === 1) { + const fileList = await getFilePathList(`${absolutePath}/${path}`, false); + fileList.forEach(filePath => { fs.unlinkSync(`${absolutePath}/${path}/${filePath}`); }) fs.rmdirSync(`${absolutePath}/${path}`); return true } - if(type === 2){ + if (type === 2) { fs.unlinkSync(`${absolutePath}/${path}`); return true } - if(type === 3){ + if (type === 3) { fs.unlinkSync(`${path}`); return true } } // 获取系统文件绝对路径 - public getAbsolutePath = () =>{ + public getAbsolutePath = () => { const {absolutePath} = this; return absolutePath } @@ -170,7 +172,7 @@ export default class FileUtil{ public getSdCardPathList = async () => { this.wantInfos = await fileAccess.getFileAccessAbilityInfo(); const {wantInfos,context} = this; - const fileAccessHelper = fileAccess.createFileAccessHelper(this.context,this.wantInfos); + const fileAccessHelper = fileAccess.createFileAccessHelper(this.context, this.wantInfos); this.fileAccessHelper = fileAccessHelper; let isDone = false; @@ -186,48 +188,48 @@ export default class FileUtil{ if (!isDone) { let deviceType = rootInfo.value.deviceType; let displayName = rootInfo.value.displayName; - let uri:string = rootInfo.value.uri; + let uri: string = rootInfo.value.uri; let deviceFlags = rootInfo.value.deviceFlags; - console.error(LOGTAG,`设备类型:${deviceType},设备名称:${displayName},设备根目录Uri:${uri},设备支持的能力:${deviceFlags}`); + console.error(LOGTAG, `设备类型:${deviceType},设备名称:${displayName},设备根目录Uri:${uri},设备支持的能力:${deviceFlags}`); - if(uri.indexOf('/mnt/external/')>0){ + if (uri.indexOf('/mnt/external/') > 0) { // if('vol-8-1' ==displayName){ - this.destFile = uri.split('ExternalFileManager')[1]+'/' - console.error(LOGTAG,`外置存储路径:`+this.destFile); - this.getFilePathList(this.destFile,true) + this.destFile = uri.split('ExternalFileManager')[1] + '/' + console.error(LOGTAG, `外置存储路径:` + this.destFile); + this.getFilePathList(this.destFile, true) } } } } catch (error) { - console.error(LOGTAG,"getRoots failed, errCode:" + error.code + ", errMessage:" + error.message); + console.error(LOGTAG, "getRoots failed, errCode:" + error.code + ", errMessage:" + error.message); } } - public getFileContent = (filePath:string) => { + public getFileContent = (filePath: string) => { const {absolutePath} = this; - const { READ_WRITE }= fs.OpenMode + const { READ_WRITE } = fs.OpenMode const path = `${absolutePath}/${filePath}` const str = fs.readTextSync(path); return str } - private getFilePathList = async (filePath:string,isSdcard:boolean) => { - let fileName = [],sdCardFileName = []; + private getFilePathList = async (filePath: string, isSdcard: boolean) => { + let fileName = [], sdCardFileName = []; try { const filenames = await fs.listFile(filePath); for (let i = 0; i < filenames.length; i++) { - console.error(LOGTAG,`目录:${filePath}的子文件:${filenames[i]}`); - if(isSdcard){ + console.error(LOGTAG, `目录:${filePath}的子文件:${filenames[i]}`); + if (isSdcard) { sdCardFileName.push(filenames[i]) - }else{ + } else { fileName.push(filenames[i]) } } return isSdcard ? sdCardFileName : fileName - }catch (e){ - console.error(LOGTAG,JSON.stringify(e)); + } catch (e) { + console.error(LOGTAG, JSON.stringify(e)); } } @@ -241,17 +243,15 @@ export default class FileUtil{ ]; this.wantInfos = await fileAccess.getFileAccessAbilityInfo(); let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager() - atManager.requestPermissionsFromUser(context, permissions , async (code, result) => { + atManager.requestPermissionsFromUser(context, permissions, async (code, result) => { const permissionRequest = result.authResults[0] - if(permissionRequest == -1){ + if (permissionRequest == -1) { promptAction.showToast({ message: "请先授权", - duration:3000, + duration: 3000, }) return } }) } - - } diff --git a/entry/src/main/ets/common/utils/request.ts b/entry/src/main/ets/common/utils/request.ts index 00e76c96..cefef3b7 100644 --- a/entry/src/main/ets/common/utils/request.ts +++ b/entry/src/main/ets/common/utils/request.ts @@ -31,7 +31,7 @@ export default async function request(req: any) { 'Content-Type': xml ? 'text/xml' : 'application/json' }, extraData: xml ? data : JSON.stringify(data), - connectTimeout:120000, + // connectTimeout:120000, } //params转url拼接参数 let paramsStr = Reflect.ownKeys(params).reduce((p: string, n: string) => (`${p}${n}=${params[n]}&`), '?') || ''; diff --git a/entry/src/main/ets/pages/Judge.ets b/entry/src/main/ets/pages/Judge.ets index c35c4807..b4836645 100644 --- a/entry/src/main/ets/pages/Judge.ets +++ b/entry/src/main/ets/pages/Judge.ets @@ -31,7 +31,6 @@ import { judgeConfig } from './judgeSDK/utils/judgeConfig'; import FileUtil from '../common/utils/File'; import SignDisplayCom from './compontents/signDisplayCom'; import promptAction from '@ohos.promptAction'; -import { voiceService } from '../common/service/voiceService'; @Entry @Component @@ -41,8 +40,6 @@ struct Index { } async aboutToAppear() { - this.vocObj = new voiceService(async (status, val, next) => { - }); globalThis.windowClass.setWindowSystemBarEnable([]) const time = await getCurrentTime() @@ -763,10 +760,6 @@ struct Index { .height(118 * 0.95) .margin({ bottom: 8 }) .onClick(() => { - this.vocObj.playAudio({ - type: 1, - name: 'button_media.wav' - }) this.setManualProjectFn(index) }) }) @@ -799,10 +792,6 @@ struct Index { .alignItems(VerticalAlign.Center) .border({ width: 5, color: '#4D4136', radius: 30 }) .onClick(() => { - this.vocObj.playAudio({ - type: 1, - name: 'button_media.wav' - }) this.signDisplayComVisible = true }) @@ -838,10 +827,6 @@ struct Index { .backgroundImageSize({ width: '100%', height: '100%' }) .margin({ bottom: 10 }) .onClick(() => { - this.vocObj.playAudio({ - type: 1, - name: 'button_media.wav' - }) this.isDeductedPopShow = true }) } @@ -871,10 +856,6 @@ struct Index { .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 { @@ -938,10 +919,6 @@ struct Index { .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)') @@ -1353,11 +1330,10 @@ struct Index { @State lane: LANE = { road: '', num: 0, count: 0 } @State roadData: Object = {}; //定位差分状态时候正常 - @State isDwztRight: boolean = true; + @State isDwztRight: boolean = false; @State defaultTabIndex: number = 0; private context = getContext(this) as common.UIAbilityContext; public kfArrScroller: Scroller = new Scroller() - private vocObj = null; //档位 @State dw: string = '' //速度 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 984ec3c7..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 = {}; // 考试回放配置 @@ -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