diff --git a/entry/src/main/ets/common/service/initable.ts b/entry/src/main/ets/common/service/initable.ts index 5e5f9afa..33b2936c 100644 --- a/entry/src/main/ets/common/service/initable.ts +++ b/entry/src/main/ets/common/service/initable.ts @@ -558,8 +558,8 @@ export async function upDataZhongxinginitialization(){ "carId": globalThis.carInfo?.carId, // 表名 "examinationRoomId": globalThis.carInfo?.examinationRoomId, //考试平台kdid videoVersion:'1.0', - judgeVersion:'2022.03.17.1', - shellVersion:'2022.03.14.01' + judgeVersion:'2024.11.22.14', + shellVersion:'2024.11.22.14' } let res: any = await initialization(str) if(!res){ diff --git a/entry/src/main/ets/common/service/terminalService.ts b/entry/src/main/ets/common/service/terminalService.ts index 2981452e..9dadb6f3 100644 --- a/entry/src/main/ets/common/service/terminalService.ts +++ b/entry/src/main/ets/common/service/terminalService.ts @@ -4,15 +4,14 @@ import { dateFormat} from '../utils/tools' //获取设备信息 export async function getDeviceInfo() { - globalThis.deviceNo = 'J43405J003101'; //设备mac - // globalThis.deviceNo = 'FE-FC-FE-7C-5C-77'; //设备mac + // globalThis.deviceNo = 'J43405J003101'; //设备mac + globalThis.deviceNo = 'FE-FC-FE-7C-5C-77'; //设备mac globalThis.diskId = '1231231231'; //硬盘号 globalThis.hasAuth = true; return null } - //获取考车信息 export async function getCarInfo() { let date = new Date(); diff --git a/entry/src/main/ets/common/utils/File.ts b/entry/src/main/ets/common/utils/File.ts index c217843b..81ce228f 100644 --- a/entry/src/main/ets/common/utils/File.ts +++ b/entry/src/main/ets/common/utils/File.ts @@ -23,7 +23,7 @@ export default class FileUtil{ } /* - * @desc 校验文件夹,文件夹不存在会自动创建,支持嵌套 + * @desc 校验文件夹,文件夹不存在会创建,支持嵌套 * */ public initFolder = async (folderPath:string) => { @@ -36,8 +36,6 @@ export default class FileUtil{ const isExit = fs.accessSync(path); if(!isExit){ fs.mkdirSync(path) - console.error(LOGTAG,path) - const isExit = fs.accessSync(path); } })); return path; diff --git a/entry/src/main/ets/common/utils/request.ts b/entry/src/main/ets/common/utils/request.ts index 31786582..8aed0abc 100644 --- a/entry/src/main/ets/common/utils/request.ts +++ b/entry/src/main/ets/common/utils/request.ts @@ -4,8 +4,8 @@ import prompt from '@ohos.prompt' import { sendGreen } from '../../pages/judgeSDK/utils/judge-common'; const config = { - // host: 'http://112.80.35.83:11052', - host: 'http://192.168.36.2:8083', + host: 'http://112.80.35.83:11052', + // host: 'http://192.168.36.2:8083', } let httpRequest = http.createHttp(); diff --git a/entry/src/main/ets/common/utils/tools.ts b/entry/src/main/ets/common/utils/tools.ts index 341e0a2d..3dca0628 100644 --- a/entry/src/main/ets/common/utils/tools.ts +++ b/entry/src/main/ets/common/utils/tools.ts @@ -53,10 +53,12 @@ export function dateVersionFormat(t) { return year + "." + fill(month) + "." + fill(day) + "." + fill(hours); } - +enum timeType{ + fulltime = 1 +} //获取当前时间并转化 -export async function getCurrentTime(type?:1):Promise { +export async function getCurrentTime(type?:timeType):Promise { const date = await systemTime.getDate(); const year = date.getFullYear(); @@ -133,13 +135,13 @@ export function chunkArr (arr, size:number) { //对象深拷贝 export function deepClone(target) { // 如果是对象,且不是原始值null - if (typeof target === 'object' && target !== 'null') { //注解一 + if (typeof target === 'object' && target !== 'null') { // 创建容器 - const result = Array.isArray(target) ? [] : {}; //注解三 + const result = Array.isArray(target) ? [] : {}; const keys = Object.keys(target); //注解二 // Object.keys()会过滤掉原型链上的属性 keys.forEach(key => { - result[key] = deepClone(target[key]) // 注解三 + result[key] = deepClone(target[key]) }) return result; } diff --git a/entry/src/main/ets/entryability/EntryAbility.ts b/entry/src/main/ets/entryability/EntryAbility.ts index 2c717b6a..b9c3375b 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ts +++ b/entry/src/main/ets/entryability/EntryAbility.ts @@ -28,8 +28,8 @@ export default class EntryAbility extends UIAbility { globalThis.examinerInfo = {} globalThis.deviceNo = ''; globalThis.hasAuth = false - // globalThis.version = '2024.11.22.14' - globalThis.version = '2022.03.14.01' + globalThis.version = '2024.11.22.14' + // globalThis.version = '2022.03.14.01' globalThis.context = this.context; globalThis.pathDir = this.context.filesDir; diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index fcf87cc3..2ea31499 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -3,7 +3,7 @@ import common from '@ohos.app.ability.common'; import router from '@ohos.router' import { getCarInfo, getDeviceInfo } from '../common/service/terminalService' import { setCurrentTime } from '../common/service/timeService' -import { string2Bytes } from '../common/utils/tools' +import {Array2Byte} from '../common/utils/tools' import { getDataBaseTable, upDateTable, @@ -15,12 +15,22 @@ import { } from '../common/service/initable' import prompt from '@ohos.prompt' import { dateFormat } from '../common/utils/tools' +import deviceManager from '@ohos.distributedHardware.deviceManager' import AccountTable from '../common/database/tables/AccountTable'; import MA_SYSSET from '../common/constants/MA_SYSSET'; import { getUDP, getUDP2 } from '../common/utils/GlobleUdp' import {initJudgeUdp} from '../common/utils/UdpJudge' +import { getTCP } from '../common/utils/GlobleTcp' +import { voiceService } from '../common/service/voiceService' +import testNapi from '@ohos.hiserialsdk' +import TcpClient from '../common/utils/TcpClient'; +import Router from '@system.router' + +import socket from '@ohos.net.socket'; import fs from '@ohos.file.fs' +import mediaLibrary from '@ohos.multimedia.mediaLibrary' import FileUtil from '../common/utils/File' + @Entry @Component struct Index { @@ -37,6 +47,7 @@ struct Index { @State devPath: string = "/dev/ttyS0" @State fd: number = -1; private context = getContext(this) as common.UIAbilityContext; + build() { Column() { Column() { @@ -62,6 +73,7 @@ struct Index { // getSyncData('MA_SYSSET') router.back() // this.url = 'back' + // app.terminate() }) @@ -75,6 +87,10 @@ struct Index { Row() { if (!this.isSingle) { Image($r('app.media.index_lw')).width('30.5%').height('74%').onClick(() => { + // this.vocObj.playAudio({ + // type: 1, + // name: 'button_media.wav' + // }) if (this.loading) { return } @@ -89,7 +105,9 @@ struct Index { this.upDateTable() }else{ this.getCenterDataTable() + } + }) } if (this.isSingle) { @@ -190,25 +208,81 @@ struct Index { aboutToAppear() { this.angle = 0 this.loading = false + + // this.vocObj = new voiceService(async (status, val) => { + // if (status == 'idle') { + // if (this.url == 'back') { + // router.back() + // // that.udpClient.sendMsg('111') + // } else { + // router.pushUrl({ + // url: this.url, + // }); + // } + // } + // }); + } + + Array2Byte(array) { + var buf = new ArrayBuffer(array.length); + var view = new Uint8Array(buf); + for (var i = 0; i != array.length; ++i) + { + view[i] = array[i] & 0xFF; + } + return view; + } + openChuankouMsg() { + this.fd = testNapi.SerialOpen(this.devPath); + } + + string2Bytes(number, len) { + // console.log('string2Bytes == ', number) + let str = (+number).toString(2); + if (str.length > len) { + console.log('数据长度不对~~'); + return + } + var byteString = this.fillZero(str, len); + + var arrBytes = new Array(); + for (var i = byteString.length; i > 0; ) { + let j = i - 8; + if (j < 0) { + j = 0 + } + var s = byteString.slice(j, i); + var v = parseInt(s, 2); + arrBytes.push(v); + i = i - 8 + + } + return arrBytes; + } + //补0 + fillZero(str, len) { + str = str + ''; + if (str.length > len || !len) { + return str + } + + let num = len - str.length; + let zeroStr = ''; + for (var i = 0; i < num; i++) { + zeroStr = zeroStr + '0' + } + + return zeroStr + str; } async heartMsg(context) { const fileUtil = new FileUtil(context) const fileData = await fileUtil.readFile('/mnt/hmdfs/100/account/device_view/localfiles/files/config/liushui.txt'); let res = fs.accessSync('/mnt/hmdfs/100/account/device_view/localfiles/files/config/liushui.txt'); - if(res&&JSON.stringify(fileData).indexOf('u0000')<0){ - const date = new Date() - const time1 = JSON.parse(fileData).date.split(' ')[0] - const time2 = dateFormat(date).split(' ')[0] - if (time1 == time2) { - const date = new Date() - const param = { - date: dateFormat(date), - value: Number(JSON.parse(fileData).value) + 1 - } - const folderPath = await fileUtil.initFolder(`/config`); - fileUtil.addFile(`${folderPath}/liushui.txt`, JSON.stringify(param)) - } else { + // TODO + return + if (res) { + if(JSON.stringify(fileData).indexOf('u0000')>=0){ const date = new Date() const param = { date: dateFormat(date), @@ -216,8 +290,30 @@ struct Index { } const folderPath = await fileUtil.initFolder(`/config`); fileUtil.addFile(`${folderPath}/liushui.txt`, JSON.stringify(param)) + }else{ + const date = new Date() + const time1 = JSON.parse(fileData).date.split(' ')[0] + const time2 = dateFormat(date).split(' ')[0] + if (time1 == time2) { + const date = new Date() + const param = { + date: dateFormat(date), + value: Number(JSON.parse(fileData).value) + 1 + } + const folderPath = await fileUtil.initFolder(`/config`); + fileUtil.addFile(`${folderPath}/liushui.txt`, JSON.stringify(param)) + } else { + const date = new Date() + const param = { + date: dateFormat(date), + value: 0 + } + const folderPath = await fileUtil.initFolder(`/config`); + fileUtil.addFile(`${folderPath}/liushui.txt`, JSON.stringify(param)) + } } - }else{ + }else + { const date = new Date() const param = { date: dateFormat(date), @@ -228,27 +324,35 @@ struct Index { } const arr = [globalThis.signNum||0, globalThis.statue||1] let tmpList = []; - tmpList.push(string2Bytes(arr[0], 1 * 8)[0]) - tmpList.push(string2Bytes(arr[1], 1 * 8)[0]) + tmpList.push(this.string2Bytes(arr[0], 1 * 8)[0]) + tmpList.push(this.string2Bytes(arr[1], 1 * 8)[0]) const str =globalThis.lsh|| '0000000000000' for (let i = 0;i < str.length; i++) { - tmpList.push(string2Bytes(str.charCodeAt(i), 1 * 8)[0]) + tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0]) } + + // const str ='1111160366580' + // for (let i = 0;i < str.length; i++) { + // tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0]) + // } + // const param = { id: 46, list: tmpList, carNo: 489, placeId: 62 } const param= {id: 31,list:tmpList,carNo: globalThis.carInfo.carNo,placeId: globalThis.carInfo.examinationRoomId} + globalThis.udpClient2.sendMsg(param, this.context) } - onPageShow() { this.loading = false this.initParams() getUDP() getUDP2() - setInterval(() => { this.heartMsg(this.context) }, 1000) + // getTCP() + + // const TcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort) if (globalThis.singlePlay == undefined || globalThis.singlePlay == null) { globalThis.singlePlay = false @@ -259,6 +363,14 @@ struct Index { } + Array2Byte(array) { + var buf = new ArrayBuffer(array.length); + var view = new Uint8Array(buf); + for (var i = 0; i != array.length; ++i) { + view[i] = array[i] & 0xFF; + } + return view; + } async initParams() { this.loading=false @@ -270,6 +382,11 @@ struct Index { this.version = globalThis.version; this.hasAuth = globalThis.hasAuth; initJudgeUdp() + // await this.getDataBaseTableFn() + //下载模型 + // await this.getModel() + // const arr = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00] + // globalThis.udpClientByTopLine.sendMsg(this.Array2Byte(arr).buffer) } getDeviceId() { @@ -280,6 +397,16 @@ struct Index { this.deviceId = result[0].deviceId resolve(result[0].deviceId) } else { + // deviceManager.createDeviceManager('com.example.udptest', (error, value) => { + // if (error) { + // console.error('createDeviceManager failed.'); + // return; + // } + // let dvMgrObj = value; + // globalThis.deviceNo=dvMgrObj.getLocalDeviceInfoSync().deviceName + // this.deviceId=globalThis.deviceNo + // resolve(dvMgrObj.getLocalDeviceInfoSync().deviceName) + // }); resolve('') } }) @@ -293,6 +420,28 @@ struct Index { await getEsCarModel(context) } + async getDataBaseTableFn() { + // getDataBaseTable({ tableName: 'MA_MARKRULE' }) + // getDataBaseTable({ tableName: 'MA_SYSTEMPARM' }) + // await getDataBaseTable({ tableName: 'MA_SYSSET' }) + // await getMySystemSetTable({ tableName: 'MA_SYSSET' }) + // + // await getDataBaseTable({ tableName: 'MA_MAP_COLLECT' }) + // await getDataBaseTable({ tableName: 'MA_MAP_COLLECT_SHAPE' }) + // await getDataBaseTable({ tableName: 'MA_MAP_ITEMCLASS' }) + // await getDataBaseTable({ tableName: 'MA_MAP_POINT' }) + // await getDataBaseTable({ tableName: 'MA_MAP_POINT_ITEM' }) + // await getDataBaseTable({ tableName: 'MA_MAP_ROAD' }) + // await getDataBaseTable({ tableName: 'MA_MAP_ROAD_LANE' }) + // await getDataBaseTable({ tableName: 'MA_MAP_SUBITEM' }) + // await getDataBaseTable({ tableName: 'ES_CARINFO' }) + // await getDataBaseTable({ tableName: 'ES_EXAMPOINTDETAIL' }) + // await getDataBaseTable({ tableName: 'MA_MARKRULESET' }) + // await getDataBaseTable({ tableName: 'ES_CAR_VIDEO_PARAMETER' }) + // await getDataBaseTable({ tableName: 'MA_CDSBINFO' }) + // await getDataBaseTable({ tableName: 'MA_ITEMINFO' }) + // await getDataBaseTable({ tableName: 'MA_T_CARPARMSET' }) + } async getCenterDataTable() { const flag= await upDataZhongxinginitialization() @@ -320,8 +469,17 @@ struct Index { // getSyncData('MA_SYSSET') getDataBaseTable({ tableName: 'MA_SYSSET' }) }) + // array.map((res, i) => { + // db.deleteData(res, async () => { + // if (i == array.length - 1) { + // await getDataBaseTable({ tableName: 'MA_SYSSET' }) + // // await getMySystemSetTable({ tableName: 'MA_SYSSET' }) + // } + // }); + // }) } else { await getDataBaseTable({ tableName: 'MA_SYSSET' }) + // await getMySystemSetTable({ tableName: 'MA_SYSSET' }) } // console.log(markRuleParams) }) @@ -372,10 +530,46 @@ struct Index { return } } + this.loading = false + // await getSyncData('MA_MARKRULE') + // await getSyncData('MA_SYSTEMPARM') + // await getSyncData('MA_MAP_COLLECT') + // await getSyncData('MA_MAP_COLLECT_SHAPE') + // await getSyncData('MA_MAP_ITEMCLASS') + // await getSyncData('MA_MAP_POINT') + // await getSyncData('MA_SYSTEMPARM') + // await getSyncData('MA_MAP_POINT_ITEM') + // await getSyncData('MA_MAP_POINT') + // await getSyncData('MA_MAP_POINT_ITEM') + // await getSyncData('MA_MAP_ROAD') + // await getSyncData('MA_MAP_ROAD_LANE') + // await getSyncData('MA_MAP_SUBITEM') + // await getSyncData('ES_CARINFO') + // await getSyncData('ES_EXAMPOINTDETAIL') + // await getSyncData('MA_CDSBINFO') + // await getSyncData('MA_T_CARPARMSET') + // if(!flag){ + router.pushUrl({ url: 'pages/ExaminerLogin', }, router.RouterMode.Single); + // return + // } + // await upDateTable({ tableName: 'MA_SYSSET' }) + } + termialCheck() { + // if(!globalThis.deviceNo) { + // prompt.showToast({ + // message: '未能查询到当前车辆信息, 请先注册该车辆, 或者检查网络是否连接正常!', + // duration: 3000 + // }); + // + // return false + // } + + return true + } } \ No newline at end of file diff --git a/entry/src/main/ets/pages/Judge.ets b/entry/src/main/ets/pages/Judge.ets index 316b68ab..0ecaf99f 100644 --- a/entry/src/main/ets/pages/Judge.ets +++ b/entry/src/main/ets/pages/Judge.ets @@ -62,7 +62,6 @@ struct Index { await this.initSysset(); await this.initCDSBInfo() - const {name,idCard,lsh,kszp} = this; const fileLog = new FileLog(this.context); @@ -72,7 +71,8 @@ struct Index { //断点续考 await this.goDdxkItems() - // //初始化评判 + + //初始化评判 const judge = await this.initJudge(fileLog); this.judge = judge } @@ -123,9 +123,11 @@ struct Index { //@ts-ignore const serialNumberArr = syssetParams.filter(sys => sys.v_no === '901'); this.serialNumber = (serialNumberArr[0] && serialNumberArr[0].v_value) || '123456' - // 211,603,660,671 + + //TODO 杭州用到的特殊评判参数 211,603,660,671 const judgeNumbers = ['211','603','660','671','606']; const judgeConfig = [] + //@ts-ignore syssetParams.forEach((sys)=>{ if(judgeNumbers.includes(sys.v_no)){ @@ -210,31 +212,6 @@ struct Index { }) } - //获取项目信息 - async initProjectInfo(){ - const systemParamsArr = await getSyncData('MA_SYSTEMPARM') - const itemInfoArr = await getSyncData('MA_ITEMINFO') - //@ts-ignore - const filterProjectsArr = systemParamsArr.filter(item => item.no1 == 6) - testAllitems.map(project => { - //TODO 临时代码 - const currentProject = { - name:(project.name), - abbreviation:(project.abbreviation), - projectCode:(project.projectCode), - projectCodeCenter:(project.projectCodeCenter), - sbxh:project.type - // type:project.type - } - this.projectsObj[project.projectCode] = currentProject - this.projectsCenterObj[project.projectCodeCenter] = currentProject - return currentProject - }); - //@ts-ignore - //TODO 临时代码待替换 - this.projects = testUIAllitems - } - // 评判相关初始化 async initJudge(fileLog){ const judge = new Judge(this,fileLog); @@ -246,11 +223,14 @@ struct Index { }); return judge } + // 断点续考判断 async goDdxkItems(){ //断点续考判断 let currentParams:any = router.getParams(); const examItems:string = currentParams?.examItems; + // 2024-01-03 16:29:26;0;20300,;2,4`^;null; + if(examItems !== '' && examItems !== undefined){ const examItemsArrs = examItems.split(';'); const startTime = examItemsArrs[0] diff --git a/entry/src/main/ets/pages/compontents/faceCompareByhaikang.ets b/entry/src/main/ets/pages/compontents/faceCompareByhaikang.ets index b7717102..18e9a355 100644 --- a/entry/src/main/ets/pages/compontents/faceCompareByhaikang.ets +++ b/entry/src/main/ets/pages/compontents/faceCompareByhaikang.ets @@ -1,15 +1,30 @@ //@ts-ignore +import camera from '@ohos.multimedia.camera'; +import image from '@ohos.multimedia.image' import util from '@ohos.util'; +import { writeFile } from '../../common/service/fileService' +import TopLogo from '../compontents/topLogo' +import { cameraService } from '../../common/service/cameraService' import { voiceService } from '../../common/service/voiceService' import { faceCompare } from '../../api/userInfo' import prompt from '@ohos.prompt' +import grantPermission from '../../common/utils/PermissionUtils'; +import CameraModel from '../../common/service/CameraModel'; import FileUtil from '../../common/utils/File' import { VideoConfig } from '../interfaces' import common from '@ohos.app.ability.common'; import fs from '@ohos.file.fs' import onvifclient from '@ohos.onvifclient'; +import buffer from '@ohos.buffer'; import mediaLibrary from '@ohos.multimedia.mediaLibrary' -import {string2Bytes} from '../../common/utils/tools' + +// import MediaModel from '../../common/utils/MediaModel'; +let previewWidth; +let previewHeight; + +const PERMISSIONS: Array = [ + 'ohos.permission.CAMERA'] + @Component struct FaceCompare { constructor() { @@ -32,7 +47,9 @@ struct FaceCompare { @State callBackFlag:boolean=false; @State @Watch('changefaceCompareSucess') showFaceCompare2: Boolean = false; + private surfaceId: string = ''; @State video_url: string = 'rtsp://admin:12345qwe@192.168.5.41:8000/h264/ch2/main/av_stream' + private fileAsset: mediaLibrary.FileAsset = undefined; @State previewUri: Resource = $r('app.media.2_nor') @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X @State showControls: boolean = false @@ -41,7 +58,7 @@ struct FaceCompare { @State signNum: number = 0; private fileUtil: FileUtil private interval: any - // private mediaTest: mediaLibrary.MediaLibrary = mediaLibrary.getMediaLibrary(globalThis.abilityContext) + private mediaTest: mediaLibrary.MediaLibrary = mediaLibrary.getMediaLibrary(globalThis.abilityContext) private fd: number = -1; @State param: VideoConfig = { spls: '', @@ -211,11 +228,23 @@ struct FaceCompare { } getqkFn(){ let tmpList = []; - tmpList.push(string2Bytes(globalThis.signNum, 1 * 8)[0]) + // const str =globalThis.signNum + // for (let i = 0;i < str.length; i++) { + // tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0]) + // } + // const arr = [globalThis.signNum||0, globalThis.statue||1] + // let tmpList = []; + tmpList.push(this.string2Bytes(globalThis.signNum, 1 * 8)[0]) const param= {id: 41,list:tmpList,carNo: globalThis.carInfo.carNo,placeId: globalThis.carInfo.examinationRoomId} + globalThis.udpClient2.sendMsg(param, this.context) } async faceComparFn() { + var loginInfo1 = { + host: `http://${this.param.ip}:80`, user: "administrator", pass: this.param.pwd } + // var file_dir = "/data/service/el1/public/netmanager/ethernet/"; + // var result3 = onvifclient.getVideoSnapshot(loginInfo1, video_uri, file_dir); + // console.info(`baoyihu endRecordVideo result:` + result3.result + ` pictureFile:` + result3.dataString); var mediaTest = mediaLibrary.getMediaLibrary(this.context); let mediaType = mediaLibrary.MediaType.IMAGE; let DIR_DOCUMENTS = mediaLibrary.DirectoryType.DIR_IMAGE; @@ -229,6 +258,7 @@ struct FaceCompare { var result3 = onvifclient.getVideoSnapshot(`rtsp://${this.param.userName}:${this.param.pwd}@${this.param.ip}:${this.param.port}/h264/ch${this.param.rlls}/main/av_stream`, file_path, fd); fs.closeSync(fd); asset.close(fd); + // let filePath = pathDir + "/test.txt"; fs.lstat(file_path).then((stat) => { console.info("get link status succeed, the size of file is" + stat.size); let file = fs.openSync(file_path, fs.OpenMode.READ_WRITE); @@ -304,7 +334,7 @@ struct FaceCompare { let tmpList=[] const str =this.lsh for (let i = 0;i < str.length; i++) { - tmpList.push(string2Bytes(str.charCodeAt(i), 1 * 8)[0]) + tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0]) } const param = { id: 46, list: tmpList, carNo: globalThis.carInfo.carNo, placeId: globalThis.carInfo.examinationRoomId,callback:()=>{ console.log('46send') @@ -461,7 +491,50 @@ struct FaceCompare { } }) } + fillZero(str, len) { + str = str + ''; + if (str.length > len || !len) { + return str + } + + let num = len - str.length; + let zeroStr = ''; + for (var i = 0; i < num; i++) { + zeroStr = zeroStr + '0' + } + + return zeroStr + str; + } + + // takePictureHandle = (thumbnail: string) => { + // this.imageThumbnail = thumbnail; + // }; + string2Bytes(number, len) { + // console.log('string2Bytes == ', number) + let str = (+number).toString(2); + if(str.length > len) { + console.log('数据长度不对~~'); + return + } + var byteString = this.fillZero(str, len); + + var arrBytes = new Array(); + for (var i = byteString.length; i > 0;) { + let j = i - 8; + if (j < 0) { + j = 0 + } + var s = byteString.slice(j, i); + var v = parseInt(s, 2); + arrBytes.push(v); + i = i - 8 + + } + return arrBytes; + } + async aboutToDisappear() { + // this.mediaModel = MediaModel.getMediaInstance(); } diff --git a/entry/src/main/ets/pages/compontents/signDisplayCom.ets b/entry/src/main/ets/pages/compontents/signDisplayCom.ets index 60365bab..51b63a51 100644 --- a/entry/src/main/ets/pages/compontents/signDisplayCom.ets +++ b/entry/src/main/ets/pages/compontents/signDisplayCom.ets @@ -5,7 +5,6 @@ import { voiceService } from '../../common/service/voiceService' import prompt from '@ohos.prompt' import SerialPortClient from '../../common/utils/SerialPortClient' import RealTime from '../compontents/judge/real-time' - @Component struct SignDisplayCom { constructor() { diff --git a/entry/src/main/ets/pages/judgeSDK/file-photo.ts b/entry/src/main/ets/pages/judgeSDK/file-photo.ts index eabb1ed3..e4f872e2 100644 --- a/entry/src/main/ets/pages/judgeSDK/file-photo.ts +++ b/entry/src/main/ets/pages/judgeSDK/file-photo.ts @@ -12,7 +12,7 @@ interface Params{ rlls:string } -export default class PhotoModel{ +export default class FilePhoto{ private params:Params private context:any diff --git a/entry/src/main/ets/pages/judgeSDK/judge-data.ts b/entry/src/main/ets/pages/judgeSDK/judge-data.ts index 751be734..d129a61d 100644 --- a/entry/src/main/ets/pages/judgeSDK/judge-data.ts +++ b/entry/src/main/ets/pages/judgeSDK/judge-data.ts @@ -111,11 +111,11 @@ export default class JudgeData{ ljmc:p[24], lcmc:0, csbzh:p[32], csbyh:p[30], csbyq:p[31], csbzq:p[29], zy:0, tbp:0, hsj:0, dcj:0, gx:0, yl:0 }, gps:{ - //TODO 办卡类型 定位差分状态 + //办卡类型 定位差分状态 bklx:p[56], dwzt:p[83], //@ts-ignore 角度差分状态 jdzt:p[92].split('-')[0]*1, - //TODO gps数据 + //gps数据 //gps时间 经度 纬度 航向角 俯仰角 海拔高 高度差 速度 sj:time, jd:p[96], wd:p[95], hxj:p[90], fyj:p[91], hbg:p[85], gdc:p[86], sd:p[97], //龄期 经度因子 纬度因子 定位搜星数 diff --git a/entry/src/main/ets/pages/judgeSDK/judge-task.ts b/entry/src/main/ets/pages/judgeSDK/judge-task.ts index 96df690e..3e9791fd 100644 --- a/entry/src/main/ets/pages/judgeSDK/judge-task.ts +++ b/entry/src/main/ets/pages/judgeSDK/judge-task.ts @@ -17,10 +17,9 @@ export default class JudgeTask{ try { await currentTask(); }catch (e){ - // TODO 优化 - console.info(TAG,'鸿蒙:过程数据接口解析错误') + console.info(TAG,'过程数据接口解析错误') prompt.showToast({ - message: '鸿蒙:过程数据接口解析错误', + message: '过程数据接口解析错误', duration: 3000 }); } @@ -31,12 +30,12 @@ export default class JudgeTask{ this.status = 'end' } } + addTask = async (fn) =>{ this.queue.push(fn); if(this.status == 'end' && this.queue.length === 1){ await this.executeQueue(); } - } } diff --git a/entry/src/main/ets/pages/judgeSDK/judge.ts b/entry/src/main/ets/pages/judgeSDK/judge.ts index f9bca0e4..52baf8de 100644 --- a/entry/src/main/ets/pages/judgeSDK/judge.ts +++ b/entry/src/main/ets/pages/judgeSDK/judge.ts @@ -48,7 +48,6 @@ const judgeTag = 'SURENJUN_JUDGE' export default class Judge{ constructor(judgeUI,fileLog) { - this.totalScore = 0; this.serialIndex = 1; this.judgeUI = judgeUI this.fileLog = fileLog; @@ -67,11 +66,9 @@ export default class Judge{ this.xmmcCode = ''; this.carztStr = ''; this.allKm2ItemsObj = {}; - this.isTrajectoryOpen = false; this.modelPath = 'models/model_enc' - this.trajectoryPath = '/logs/2024_01_18/2230201333925_330802200407086520_吴雪娥_2024_01_18_10_39_40/judge_exam_data.txt'; - //1234236633488_679417917543435904_尹立曙_2024_01_15_19_27_56 - //2230201333925_330802200407086520_吴雪娥_2024_01_18_10_39_40 + this.isTrajectoryOpen = true; + this.trajectoryPath = '/logs/2024_01_24/2024_01_24_11_30_06_2210707689316_620502199005070478_马鸣五/judge_exam_data.txt'; this.isExam = !globalThis.singlePlay; const {projectsCenterObj} = judgeUI @@ -113,10 +110,12 @@ export default class Judge{ //日志回调 console.info(judgeTag,'1.进入评判入口') + await examJudgeSetLogCallback(3, async (level, info,len)=>{ console.log('评判日志:' + info) await fileLog.setExamJudgeLogData(info); }) + console.info(judgeTag,'2.注册日志回调完成') //相关评判初始化只做一次 @@ -135,6 +134,7 @@ export default class Judge{ const initInfo = await this.getJudgeInitData(); await fileLog.setExamJudgeData(initInfo) } + globalThis.isJudge = true // 2.评判过程回调 await examJudgeSetRealExamCallback(async (strData,len)=>{ @@ -159,7 +159,6 @@ export default class Judge{ await examJudgeBeginExam(beginExamInfo); console.info(judgeTag,'6.开始考试注册完成') - // sendGreen() //实时plc数据信号 // let open = true; if(isTrajectoryOpen){ @@ -174,7 +173,6 @@ export default class Judge{ clearInterval(judgeTimer) return } - const {totalScore} = this; // 4.过程数据 this.tempData = msg this.plcData= msg @@ -193,7 +191,6 @@ export default class Judge{ return } const plcData = await getPlcData(msg); - const {totalScore} = this; // 4.过程数据 await fileLog.setExamJudgeData(plcData) await examJudgeRealExam(plcData) @@ -282,7 +279,7 @@ export default class Judge{ }); const copyProjectsObj = this.judgeUI.projectsObj; - //语音播报 & 发送中心接口 + //语音播报 this.goVoiceAnnounce(event,xmdm, this.kfArr,xmjs) judgeUI.projectsObj = deepClone(copyProjectsObj) } @@ -365,7 +362,7 @@ export default class Judge{ } } - //当前项目转换 + // 当前项目转换 getDqxmStr = (type) => { const projectsObj = this.judgeUI.projectsObj if(projectsObj){ @@ -616,7 +613,6 @@ export default class Judge{ this.isJudgeDisConnect = true; } const isJudgeDisConnect = this.isJudgeDisConnect; - // isJudgeDisConnect ? fileLog.setExamJudgeDisWuxiProgressData(data) : fileLog.setExamJudgeWuxiData(data) let toast = ''; switch (code){ case -1:toast = '无当前科目考试信息';break; @@ -926,11 +922,11 @@ export default class Judge{ ljmc:p[24], lcmc:0, csbzh:p[32], csbyh:p[30], csbyq:p[31], csbzq:p[29], zy:0, tbp:0, hsj:0, dcj:0, gx:0, yl:0 }, gps:{ - //TODO 办卡类型 定位差分状态 + //办卡类型 定位差分状态 bklx:p[56], dwzt:p[83], //@ts-ignore 角度差分状态 jdzt:p[92].split('-')[0]*1, - //TODO gps数据 + //gps数据 //gps时间 经度 纬度 航向角 俯仰角 海拔高 高度差 速度 sj:time, jd:p[96], wd:p[95], hxj:p[90], fyj:p[91], hbg:p[85], gdc:p[86], sd:p[97], //龄期 经度因子 纬度因子 定位搜星数 @@ -1064,7 +1060,6 @@ export default class Judge{ //考试是否结束了 private isEnd:boolean //UDP服务序列号 - private serialNumber:number private serialIndex:number private fileUtil:FileUtil private judgeTask:JudgeTask diff --git a/entry/src/main/ets/pages/judgeSDK/utils/file-log.ts b/entry/src/main/ets/pages/judgeSDK/utils/file-log.ts index 9ae849ec..6d8b0cdb 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/file-log.ts +++ b/entry/src/main/ets/pages/judgeSDK/utils/file-log.ts @@ -62,12 +62,6 @@ export default class FileLog { await fileUtil.editFile(`${folderPath}/wuxi_dis_progress_data.txt`,str); } - // // 读取断点续考无锡过程数据 - // public readExamJudgeDisWuxiProgressData = async () =>{ - // const {fileUtil,folderPath} = this; - // await fileUtil.readFile(`${folderPath}/wuxi_dis_progress_data.txt`); - // } - // plc文件数据 public setPlcProgressData = async (str:string) => { const {fileUtil,folderPath} = this; diff --git a/entry/src/main/ets/pages/judgeSDK/utils/file-photo.ts b/entry/src/main/ets/pages/judgeSDK/utils/file-photo.ts index 8999a41f..1ce8d64c 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/file-photo.ts +++ b/entry/src/main/ets/pages/judgeSDK/utils/file-photo.ts @@ -12,7 +12,7 @@ interface Params{ rlls:string } -export default class PhotoModel{ +export default class FilePhoto{ private params:Params private context:any @@ -41,6 +41,7 @@ export default class PhotoModel{ let mediaType = mediaLibrary.MediaType.IMAGE; let DIR_DOCUMENTS = mediaLibrary.DirectoryType.DIR_IMAGE; const path = await mediaTest.getPublicDirectory(DIR_DOCUMENTS); + return new Promise(async (resolve)=>{ mediaTest.createAsset(mediaType, 'judge_face.jpg', path,(error,asset)=>{ asset.open('rw', (error, fd) => { diff --git a/entry/src/main/ets/pages/userInfo.ets b/entry/src/main/ets/pages/userInfo.ets index fdf20e50..f706c405 100644 --- a/entry/src/main/ets/pages/userInfo.ets +++ b/entry/src/main/ets/pages/userInfo.ets @@ -1,4 +1,6 @@ import { getExaminationItem, getExaminationStudentInfo, examinationStuAbsent,getPhotosForOther } from '../api/userInfo' +import { voiceService } from '../common/service/voiceService' + import router from '@ohos.router' import TopLogo from './compontents/topLogo' import Md5 from '../common/utils/md5'; @@ -7,16 +9,22 @@ import USER from '../common/constants/USER'; import { dateFormat,getCurrentTime } from '../common/utils/tools'; import MA_SYSSET from '../common//constants/MA_SYSSET'; import FaceCompare from './compontents/faceCompareByhaikang' +import ethernet from '@ohos.net.ethernet'; import prompt from '@ohos.prompt' import {initJudgeUdp} from '../common/utils/UdpJudge' +// import testNapi from "@ohos.idcard"; +import CommonEvent from '@ohos.commonEventManager'; // @ts-ignore import {writeObjectOut} from '../api/judge' import testNapi from "@ohos.idcard"; +import mediaLibrary from '@ohos.multimedia.mediaLibrary' +import fs from '@ohos.file.fs' import FileUtil from '../common/utils/File' import common from '@ohos.app.ability.common'; +import onvifclient from '@ohos.onvifclient'; +import util from '@ohos.util'; import { VideoConfig } from './interfaces' import WebRTCVoice from './webRTC/' -import {string2Bytes} from '../common/utils/tools' @Entry @Component struct Index { @@ -95,6 +103,7 @@ struct Index { @State effectDate: string = ''; @State interval: any = null; @State interval2: any = null; + @State interval3: any = null; @State studentRefreshStatue: string = '0'; @State photo: string = 'data:image/bmp;base64,'; @State numCount: number = 0; @@ -143,6 +152,8 @@ struct Index { this.numCount=0 const fileUtil = new FileUtil(this.context) this.fileUtil = fileUtil + + globalThis.udpClient2&&globalThis.udpClient2.onMessage((val)=>{ console.log('valvaltotol2',val.id,val.body,val.length) @@ -156,8 +167,25 @@ struct Index { this.signNum=val.body[1] } }else if(val.id=='48'){ + console.log('valvalkkkk',val.body) + // if(val.body[13]=='1'){ + // this.faceCompareSucess=1 + // console.log('ttt111') + // // clearInterval(this.interval) + // this.facePass() + // } }else if(val.id=='42'){ + console.log('qkfnqkfn',val.body[0]) this.qkFn() + // this.getExaminationStudentInfoFn() + // const arr = [globalThis.signNum,1]; + // let tmpList = []; + // tmpList.push(this.string2Bytes(arr[0], 1 * 8)[0]) + // tmpList.push(this.string2Bytes(arr[1], 1 * 8)[0]) + // + // const param= {id: 41,list:tmpList,carNo: globalThis.carInfo.carNo,placeId: globalThis.carInfo.examinationRoomId} + // + // globalThis.udpClient2.sendMsg(param, this.context) } }) // 应用启动时打开读卡设备 @@ -168,6 +196,19 @@ struct Index { } else { console.error("zzctest Failed to Open Device"); } + // this.vocObj = new voiceService(async (status,val) => { + // if (status == 'idle') { + // if(val==='ksks.WAV'){ + // router.pushUrl({ + // url: 'pages/Judge', + // params:{examItems:this.examItems} + // }, router.RouterMode.Single); + // globalThis.statue=4 + // this.vocObj&&this.vocObj.releasePlayer() + // } + // } + // }); + if(globalThis.singlePlay){ this.list=[ { @@ -400,7 +441,7 @@ struct Index { } getqkFn(){ let tmpList = []; - tmpList.push(string2Bytes(globalThis.signNum, 1 * 8)[0]) + tmpList.push(this.string2Bytes(globalThis.signNum, 1 * 8)[0]) const param= {id: 41,list:tmpList,carNo: globalThis.carInfo.carNo,placeId: globalThis.carInfo.examinationRoomId} globalThis.udpClient2.sendMsg(param, this.context) @@ -409,7 +450,7 @@ struct Index { let tmpList=[] const str =globalThis.lsh for (let i = 0;i < str.length; i++) { - tmpList.push(string2Bytes(str.charCodeAt(i), 1 * 8)[0]) + tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0]) } const param = { id: 46, list: tmpList, carNo: globalThis.carInfo.carNo, placeId: globalThis.carInfo.examinationRoomId,callback:()=>{ @@ -418,17 +459,42 @@ struct Index { }} this.interval=setInterval(()=>{ if(this.callBackFlag){ + console.log('validqqq333') const param2 = { id: 47, list: tmpList, carNo: globalThis.carInfo.carNo, placeId: globalThis.carInfo.examinationRoomId } globalThis.udpClient2&&globalThis.udpClient2.sendMsg(param2,this.context) } },1000) + // const param = { id: 31, list: tmpList, carNo: 489, placeId: 62 } globalThis.udpClient2&&globalThis.udpClient2.sendMsg(param, this.context) + + // return {id: 31,list:tmpList,carNo:489,placeId:62} } aboutToDisappear() { clearInterval(this.interval) clearInterval(this.interval2) testNapi.StopReadCard(); + // console.log("zzctest Close Device ret = " + testNapi.CloseDevice()); + } + changeStudentStatue(val){ + const arr = [globalThis.signNum||0, val] + let tmpList = []; + tmpList.push(this.string2Bytes(arr[0], 1 * 8)[0]) + tmpList.push(this.string2Bytes(arr[1], 1 * 8)[0]) + const str = globalThis.lsh + for (let i = 0;i < str.length; i++) { + tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0]) + } + // const str ='1111160366580' + // for (let i = 0;i < str.length; i++) { + // tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0]) + // } + // const param = { id: 46, list: tmpList, carNo: globalThis.carInfo.carNo, placeId: globalThis.carInfo.examinationRoomId,callback:()=>{ + + // const param = { id: 46, list: tmpList, carNo: 489, placeId: 62 } + const param= {id: 31,list:tmpList,carNo:globalThis.carInfo.carNo,placeId:globalThis.carInfo.examinationRoomId} + + globalThis.udpClient2&&globalThis.udpClient2.sendMsg(param, this.context) } facePass(){ if(!this.stepFlag){ @@ -521,7 +587,21 @@ struct Index { }) }) } + // async getVideoConfig(){ + // const data = await this.fileUtil.readFile('/mnt/hmdfs/100/account/device_view/localfiles/files/logs/config/config3.txt'); + // this.param=JSON.parse(data) + // } changefaceCompareSucess() { + // globalThis.statue=3 + console.log('this.faceCompareSuces',this.faceCompareSucess,JSON.stringify(this.currentUser)) + // if(this.faceCompareSucess!=1){ + // this.heartMsg(this.context) + // return + // }else{ + // console.log('kkkk2') + // this.sfbdinterfaceFn() + // + // } if(this.faceCompareSucess>0){ this.sfbdinterfaceFn() } @@ -552,8 +632,12 @@ struct Index { this.lsh=this.currentUser.lsh globalThis.lsh=this.currentUser.lsh globalThis.ksyh=this.currentUser.ksy1sfzmhm||this.currentUser.ksy2sfzmhm + + // this.currentUser.kszp=this.photo+res.kszp + // this.currentUser.ksmjzp=this.photo+this.currentUser.ksmjzp if(globalThis.singlePlay){ testNapi.StopReadCard(); + // globalThis.statue=4 router.pushUrl({ url: 'pages/Judge', },router.RouterMode.Single); @@ -667,11 +751,59 @@ struct Index { this.lsh=this.currentUser.lsh globalThis.lsh=this.lsh globalThis.ksyh=this.currentUser.ksy1sfzmhm||this.currentUser.ksy2sfzmhm + + // this.currentUser.kszp=this.photo+this.currentUser.kszp + // this.currentUser.ksmjzp=this.photo+this.currentUser.ksmjzp + // this.currentUser.kszp='data:image/jpg;base64,'+this.currentUser.kszp + // this.currentUser.ksmjzp='data:image/jpg;base64,'+this.currentUser.ksmjzp + // this.getPhotosForOtherFn(this.currentUser,1) + // this.getPhotosForOtherFn(this.currentUser,2) + // for (let i in this.currentUser) { + // this.currentUser[i] = decodeURI(this.currentUser[i]) + // } + console.log('this.currentUse3' + JSON.stringify(this.currentUser)) this.pageIndex = 0 }).catch((error) => { console.log('error12error' + error) }) } + fillZero(str, len) { + str = str + ''; + if (str.length > len || !len) { + return str + } + + let num = len - str.length; + let zeroStr = ''; + for (var i = 0; i < num; i++) { + zeroStr = zeroStr + '0' + } + + return zeroStr + str; + } + string2Bytes(number, len) { + // console.log('string2Bytes == ', number) + let str = (+number).toString(2); + if(str.length > len) { + console.log('数据长度不对~~'); + return + } + var byteString = this.fillZero(str, len); + + var arrBytes = new Array(); + for (var i = byteString.length; i > 0;) { + let j = i - 8; + if (j < 0) { + j = 0 + } + var s = byteString.slice(j, i); + var v = parseInt(s, 2); + arrBytes.push(v); + i = i - 8 + + } + return arrBytes; + } getPhotosForOtherFn(data,type){ const date=new Date() const param={ @@ -703,9 +835,15 @@ struct Index { 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]) + tmpList.push(this.string2Bytes(arr[0], 1 * 8)[0]) + tmpList.push(this.string2Bytes(arr[1], 1 * 8)[0]) + // const str ='1111160366580' + // for (let i = 0;i < str.length; i++) { + // tmpList.push(this.string2Bytes(str.charCodeAt(i), 1 * 8)[0]) + // } + // const param = { id: 46, list: tmpList, carNo: 489, placeId: 62 } + console.log('globalThis.signNum',globalThis.signNum) const param= {id: 43,list:tmpList,carNo: globalThis.carInfo.carNo,placeId: globalThis.carInfo.examinationRoomId} globalThis.udpClient2.sendMsg(param, this.context) @@ -735,6 +873,7 @@ struct Index { yycs: '' } this.getExaminationStudentInfoFn() + // this.errorMsg = decodeURI(res.examinationStuAbsentRsp.head.resultMessage) return } @@ -1018,14 +1157,27 @@ struct Index { .margin({ left: 53 * this.ratio }) Column() { + // Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { + // Image($r('app.media.yydj')).width(45 * this.ratio).height(45 * this.ratio) + // Text('语音对讲').fontSize(24 * this.ratio).fontColor('#fff').width(100 * this.ratio) + // } Image($r('app.media.yydj_btn')) .width(220 * this.ratio) .height(69 * this.ratio) .backgroundImage($r('app.media.button_nor')) .backgroundImageSize({ width: '100%', height: '100%' }) .margin({ bottom: 12 * this.ratio }).onClick(()=>{ + // this.getCurrentStudent('3423231995014700007') + // this.vocObj.playAudio({ + // type: 1, + // name: 'media_button.wav' + // }) }) + // Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { + // Image($r('app.media.gx')).width(45 * this.ratio).height(45 * this.ratio) + // Text(' 更 新 ').fontSize(24 * this.ratio).fontColor('#fff').width(100 * this.ratio) + // } Image($r('app.media.gx_btn')) .width(220 * this.ratio) .height(69 * this.ratio) @@ -1035,8 +1187,16 @@ struct Index { this.faceCompareSucess=0 this.numCount=0 this.getExaminationStudentInfoFn() + // this.vocObj.playAudio({ + // type: 1, + // name: 'media_button.wav' + // }) }) + // Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { + // Image($r('app.media.qk')).width(45 * this.ratio).height(45 * this.ratio) + // Text(' 缺 考 ').fontSize(24 * this.ratio).fontColor('#fff').width(100 * this.ratio) + // } Image($r('app.media.qk_btn')) .width(220 * this.ratio) .height(69 * this.ratio)