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 { getCurrentTime, string2Bytes } from '../common/utils/tools'; import { FileHelper } from '../common/service/FileHelper'; import { getEsCarModel, getSyncData, } from '../common/service/initable'; import FileUtil from '../common/utils/File'; import { getUDP, getUDP2 } from '../common/utils/GlobalUdp'; import { initJudgeUdp } from '../common/utils/UdpJudge'; import { judgeConfig } from './judgeSDK/utils/judgeConfig'; import { getTCP } from '../common/utils/GlobalTcp'; import { getSingleCenterTable, setliushuiNum, takePhotoFn ,uploadLogFile} from '../common/service/indexService'; import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; import promptAction from '@ohos.promptAction'; import errorMsgDialog from './compontents/errorMsgDialog'; import GetDistance from '../common/utils/GetDistance'; import UdpEvent from '../common/utils/UdpEvent'; import { delPic } from '../common/service/videoService'; import imageBtn from './compontents/imageBtn'; import VoiceAnnounce from './judgeSDK/utils/voiceAnnouncements'; import {updateModelAndCar} from '../common/autoUpdate/index' import { UsbUtils } from '../common/utils/UsbUtils' @Entry @Component struct Index { @State carNum: string = '' @State version: string = '' @State url: string = '' @State hasAuth: boolean = false; @State dialogVisiable: boolean = false; @State isSingle: boolean = false; @State deviceId: string = ''; @State angle: number = 0 @State dialogRatio: number = 0.8 @State ratio: number = 1700 / 960 @State delLoading: boolean = false @State loadingText: string = '' @State loading: boolean = false @State initParamFlag: boolean = false @State fd: number = -1; @State num: number = 0; //模型是否下载 @State isModelInit: boolean = false; fileHelper = null; errorDialog: CustomDialogController = new CustomDialogController({ builder: errorMsgDialog({ title: globalThis.title, type: globalThis.type, cancel: () => { }, confirm: () => { } }), customStyle: true, alignment: DialogAlignment.Center, }, ) private fileUtil: FileUtil private interval = null; // private vocObj = null; private avPlayer private workerInstance = null; private context = getContext(this) as common.UIAbilityContext; @Styles commStyle(){ .width(220 * this.ratio * this.dialogRatio) .height(69 * this.ratio * this.dialogRatio) .backgroundImage($r('app.media.button_nor')) .backgroundImageSize({ width: '100%', height: '100%' }) // .margin({ bottom: 12 * this.ratio }) } build() { Column() { Column() { Row() { Image($r('app.media.logo')).width('30%').height('5.5%').margin({ left: 24 }) .gesture( GestureGroup(GestureMode.Exclusive, TapGesture({ count: 2 }) .onAction(async () => { const usbUtils = new UsbUtils(this.context) this.loading = true this.loadingText = '正在导出日志和轨迹,请稍候……' try { await usbUtils.copyFilesToUsb() } catch (e) { } this.loading = false this.loadingText = '' }) ) ) Row() { Image($r('app.media.btn_setting')).width('16.7%').height('12.2%') .onClick(async () => { // this.vocObj.playAudio({ // type: 1, // name: 'button_media.wav' // }) // deleteAllPicturesFn() if (this.loading) { return } router.pushUrl({ url: 'pages/Settings', }, router.RouterMode.Single); }) Image($r('app.media.btn_back')).width('14.4%').height('12.2%') .onClick(() => { // this.vocObj.playAudio({ // type: 1, // name: 'button_media.wav' // }) this.dialogVisiable = true }) } } .width('100%') .justifyContent(FlexAlign.SpaceBetween) } Column() { Row() { if (!this.isSingle) { imageBtn({ btnWidth: '28%', btnHeight: '71%', imgSrc: $r('app.media.index_lw') }) .margin({ left: 80 * globalThis.ratio }) .onClick(async () => { // this.vocObj.playAudio({ // type: 1, // name: 'button_media.wav' // }) // ||!this.initParamFlag if (this.loading) { // globalThis.title = '正在初始化,请等待5s后重试' // this.errorDialog.open() return } setTimeout(() => { this.angle = 360 }, 1000) this.angle = 0 if (!globalThis.timeInfo) { globalThis.type = '1' globalThis.title = '时间同步接口连接失败' this.errorDialog.open() promptAction.showToast({ message: `时间同步接口连接失败`, duration: 3000 }); this.loading = false return } if (!globalThis.carInfo) { promptAction.showToast({ message: `车辆信息接口获取失败`, duration: 3000 }); globalThis.type = '1' globalThis.title = '车辆信息接口获取失败' this.errorDialog.open() this.loading = false return } this.testXMLToJSONInWorker() }) } if (this.isSingle) { imageBtn({ btnWidth: '28%', btnHeight: '71%', imgSrc: $r('app.media.index_dj') }) .margin({ left: 80 * globalThis.ratio }) .onClick(() => { if (this.loading) { return } // this.vocObj.playAudio({ // type: 1, // name: 'button_media.wav' // }) if (judgeConfig.isTrajectoryOpen) { router.pushUrl({ url: 'pages/UserInfo', }, router.RouterMode.Single) return } //判断数据库是否有表数据,有则直接跳转,没有则读取本地数据 getSyncData('MA_SYSSET').then(data => { console.log('datadata', JSON.stringify(data)) if (data?.[0]) { router.pushUrl({ url: 'pages/UserInfo', }, router.RouterMode.Single) } else { this.testXMLToJSONInWorker() } }); }) } imageBtn({ btnWidth: '28%', btnHeight: '71%', imgSrc: $r('app.media.index_zj') }) .margin({ right: 80 * globalThis.ratio }) .onClick(() => { if (this.loading) { return } // this.vocObj.playAudio({ // type: 1, // name: 'button_media.wav' // }) router.pushUrl({ url: 'pages/CarCheck' }, router.RouterMode.Single); }) } .width('100%') .justifyContent(FlexAlign.SpaceAround) } Column() { Row() { Column() { Text('V外壳:' + globalThis.version) .fontColor('#CCAE7A') .fontSize(18 * globalThis.ratio) .width('30%') .margin({ bottom: 10 }) Text('V评判:' + globalThis.judgeVersion) .fontColor('#CCAE7A') .fontSize(18 * globalThis.ratio) .width('30%') .margin({ bottom: 10 }) // Text('V 1.0') // .fontColor('#CCAE7A') // .fontSize(22 * globalThis.ratio) // .width('30%') // .margin({ bottom: 10 }) Text('授权信息:' + (this.hasAuth ? '已授权' : '未授权')) .fontColor('#CCAE7A') .fontSize(18 * globalThis.ratio) .width('30%') } .margin({ left: 24 }) .gesture( GestureGroup(GestureMode.Exclusive, TapGesture({ count: 2 }) .onAction(() => { // takePhotoFn(this.context) globalThis.singlePlay = !globalThis.singlePlay this.isSingle = globalThis.singlePlay }) ) ) Text('考车号:' + this.deviceId) .fontColor('#CCAE7A') .fontSize(22 * globalThis.ratio) .margin({ right: 24 }) } .width('100%') .justifyContent(FlexAlign.SpaceBetween) .margin({ bottom: 10 }) } // if (this.dialogVisiable) { Flex({ justifyContent: FlexAlign.Center }) { Text('确认是否退出应用') .fontSize(28 * this.ratio * this.dialogRatio) .margin({ top: 100 * this.ratio * this.dialogRatio }) Row() { Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { Text(' 取 消 ') .fontSize(24 * this.ratio * this.dialogRatio) .fontColor('#fff') .width(100 * this.ratio * this.dialogRatio) } .commStyle() .onClick(() => { this.dialogVisiable = false // this.vocObj.playAudio({ // type: 1, // name: 'button_media.wav' // }) }).margin({ right: 10 * this.ratio }) Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { Text(' 确 定 ') .fontSize(24 * this.ratio * this.dialogRatio) .fontColor('#fff') .width(100 * this.ratio * this.dialogRatio) } .commStyle() .onClick(() => { // this.vocObj.playAudio({ // type: 1, // name: 'button_media.wav' // }) router.back() }) }.position({ y: 265 * this.ratio * this.dialogRatio, x: 115 * this.ratio * this.dialogRatio }) } .width(660 * this.ratio * this.dialogRatio) .height(360 * this.ratio * this.dialogRatio) .position({ x: 220 * this.ratio, y: 98 * this.ratio - 265 / 2 * (1 - this.ratio * this.dialogRatio) }) .backgroundColor('#E6E3DF') .borderRadius(19 * this.ratio * this.dialogRatio) } if (this.delLoading) { Column() { Image($r('app.media.open_loading')) .width(200 * globalThis.ratio) .rotate({ angle: this.angle }) .height(200 * globalThis.ratio) .animation({ duration: 5000, // 动画时长 curve: Curve.EaseOut, // 动画曲线 delay: 500, // 动画延迟 iterations: -1, // 播放次数 playMode: PlayMode.Normal, // 动画模式 }) .margin({ top: 30 * globalThis.ratio }) Text('正在清理本地数据,请稍候……') .fontSize(24 * globalThis.ratio) .margin({ top: 20 * globalThis.ratio }) .fontWeight(400) } .visibility(this.delLoading ? Visibility.Visible : Visibility.Hidden) .width(660 * globalThis.ratio) .height(360 * globalThis.ratio) .position({ x: 150 * globalThis.ratio, y: 98 * globalThis.ratio }) .backgroundColor('#E6E3DF') .borderRadius(19 * globalThis.ratio) } if (this.loading) { Column() { Image($r('app.media.open_loading')) .width(200 * globalThis.ratio) .rotate({ angle: this.angle }) .height(200 * globalThis.ratio) .animation({ duration: 5000, // 动画时长 curve: Curve.EaseOut, // 动画曲线 delay: 500, // 动画延迟 iterations: -1, // 播放次数 playMode: PlayMode.Normal, // 动画模式 }) .margin({ top: 30 * globalThis.ratio }) Image($r('app.media.car')) .width(80 * globalThis.ratio) .height(80 * globalThis.ratio) .position({ x: 288 * globalThis.ratio, y: 89 * globalThis.ratio }) Text(this.loadingText ||'获取考车信息,请稍候……') .fontSize(24 * globalThis.ratio) .margin({ top: 20 * globalThis.ratio }) .fontWeight(400) } .visibility(this.loading ? Visibility.Visible : Visibility.Hidden) .width(660 * globalThis.ratio) .height(360 * globalThis.ratio) .position({ x: 150 * globalThis.ratio, y: 98 * globalThis.ratio }) .backgroundColor('#E6E3DF') .borderRadius(19 * globalThis.ratio) } } .width('100%') .height('100%') .justifyContent(FlexAlign.SpaceBetween) .backgroundImagePosition({ x: 0, y: 0 }) .backgroundImage($r('app.media.index_bg')) .backgroundImageSize({ width: '100%', height: '100%' }) } async aboutToAppear() { // setInterval(() => { // let date = new Date(); // console.info('jiangsong1:timeSynchronization begin '); // uploadProgressData() // let params = { // time: dateFormat(date), // deviceNo: globalThis.deviceNo, // version: globalThis.version, // judgeVersion: globalThis.judgeVersion // } // timeSynchronizationHTTP(params) // }, 1000) console.log('diyidiy') this.avPlayer = new VoiceAnnounce(); this.initParamFlag = false this.delLoading = false this.dialogVisiable = false this.angle = 0 this.loading = false globalThis.lsh = '1111111111111' globalThis.errorDialog = this.errorDialog globalThis.udpEvent = new UdpEvent(); getSyncData('MA_SYSSET').then(async data => { console.log('datadata', JSON.stringify(data)) // @ts-ignore // @ts-ignore data.forEach(async sys => { //判断是否能点开始考试 if (sys.v_no === '305') { console.log('syssyssyssys') // this.delLoading=true // globalThis.param854Str=sys.v_value delPic(Number(sys.v_value), 1) delPic(Number(sys.v_value), 2) // this.delLoading=false } }) }); } aboutToDisappear() { // this.vocObj && this.vocObj.releasePlayer() } async testXMLToJSONInWorker() { if (this.loading) { return } // let mode=globalThis.timeInfo?.mode?globalThis.timeInfo?.mode:1 // console.log('mode',mode) const param = { carId: globalThis.carInfo?.carId, examinationRoomId: globalThis.carInfo?.examinationRoomId, judgeVersion: globalThis.judgeVersion, shellVersion: globalThis.version, paraKdid: globalThis.timeInfo?.paraKdid || globalThis.timeInfo?.kdid, kdid: globalThis.timeInfo?.kdid || globalThis.timeInfo?.paraKdid, mode: globalThis.timeInfo?.mode, context: this.context, host: globalThis.host, centerHost: globalThis.timeInfo?.url, singlePlay: globalThis.singlePlay } this.loading = true console.log("sql 1111") getSingleCenterTable(param).then(async (ret:any) => { if(!this.isModelInit){ this.loading = true this.loadingText = '正在下载考车模型,请稍候……' await updateModelAndCar(false) this.loading = false this.loadingText = '' this.isModelInit = true } if(typeof ret == 'object' && ret.resultCode == '3'){ this.loadingText = '正在下载考车最新版本,请稍候……' this.loading = true await updateModelAndCar(true) this.loadingText = '正在安装考车最新版本,请稍候……' return false } // DB.queryListBySql('select * from MA_SYSSET', [{ // name: "v_no", // type: ColumnType.STRING, // columnName: "v_no" // }]).then((res) => { // console.log('sql success', JSON.stringify(res)) // }).catch((err) => { // console.log('sql error1', err) // }) if (ret) { if (globalThis.singlePlay) { router.pushUrl({ url: 'pages/userInfo' },router.RouterMode.Single) return } if (globalThis.singlePlay) { router.pushUrl({ url: 'pages/UserInfo', }, router.RouterMode.Single) return } getSyncData('MA_SYSSET').then(data => { console.log('datadata', JSON.stringify(data)) // @ts-ignore data.forEach(sys => { //判断是否能点开始考试 if (sys.v_no === '854') { globalThis.param854Str = sys.v_value } if (sys.v_no === '824' && decodeURIComponent(sys.v_value) == '0') { // this.Param612Str= decodeURIComponent(sys.v_value) router.pushUrl({ url: 'pages/CarCheck', params: { 'fromIndex': true } }, router.RouterMode.Single) } else { router.pushUrl({ url: 'pages/ExaminerLogin', }, router.RouterMode.Single) } }) }); } }) // workerInstance.postMessage(param); // workerInstance.onmessage = (e: MessageEvents): void => { // console.log("baoyihu after postMessage :", JSON.stringify(e.data)); // // @ts-ignore // let workData: WorkData = e.data; // this.loading = false // if (workData.isComplete) { // if(globalThis.singlePlay){ // router.pushUrl({ // url: 'pages/UserInfo', // }, router.RouterMode.Single) // return // } // getSyncData('MA_SYSSET').then(data => { // console.log('datadata', JSON.stringify(data)) // // @ts-ignore // data.forEach(sys => { // //判断是否能点开始考试 // if(sys.v_no === '854'){ // globalThis.param854Str=sys.v_value // } // if (sys.v_no === '824'&&decodeURIComponent(sys.v_value)=='0') { // // this.Param612Str= decodeURIComponent(sys.v_value) // router.pushUrl({ // url:'pages/CarCheck', // params: { // 'fromIndex':true // } // }, router.RouterMode.Single) // }else{ // router.pushUrl({ // url: 'pages/ExaminerLogin', // }, router.RouterMode.Single) // } // }) // }); // // } // workerInstance.terminate(); // // } } async heartMsg() { 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]) const str = globalThis.lsh || '0000000000000' for (let i = 0; i < str.length; i++) { tmpList.push(string2Bytes(str.charCodeAt(i), 1 * 8)[0]) } const param = { id: 31, list: tmpList, carNo: globalThis.carInfo.carNo, placeId: globalThis.carInfo.examinationRoomId } // globalThis.udpClient2.initHeartSendMsg(param,this.context) if (globalThis.udpClient2.getStatus()) { globalThis.udpClient2.sendMsgExt(param, this.context) } } async onPageShow() { console.log('ttttt', 1111) await this.userAuth(); console.log('globalThis.singlePlay', globalThis.singlePlay) if (globalThis.singlePlay == undefined || globalThis.singlePlay == null) { // setVideoParam() console.log('diyidiy') this.context.resourceManager.getRawFileContent("welcome.wav") .then(value => { this.avPlayer.playAudio(['welcome.wav']) // this.vocObj.playAudio({ // type: 1, // name: 'welcome.wav' // }) // let rawFile = value; }) .catch(error => { console.log("getRawFileContent promise error is " + error); }); globalThis.singlePlay = false } this.isSingle = globalThis.singlePlay // this.loading = false this.num = 0 // const TcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort) globalThis.lsh = '1111111111111' } async createAlbum() { this.fileHelper = new FileHelper(); const time = await getCurrentTime() const date = time.split(' ')[0] this.fileHelper.createAlbum('jt') // this.fileHelper.createAlbum('2025-01-02') this.fileHelper.createAlbum('pz'); this.fileHelper.createAlbum(date); } userAuth() { return new Promise((reslove, reject) => { const permissions: Array = ["ohos.permission.SET_TIME", "ohos.permission.READ_IMAGEVIDEO", "ohos.permission.DISTRIBUTED_DATASYNC", 'ohos.permission.CONNECTIVITY_INTERNAL', 'ohos.permission.CAMERA', 'ohos.permission.READ_MEDIA', 'ohos.permission.WRITE_MEDIA', 'ohos.permission.FILE_ACCESS_MANAGER']; let context = this.context; let atManager = abilityAccessCtrl.createAtManager(); // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗 atManager.requestPermissionsFromUser(context, permissions).then((data) => { this.initParams() let grantStatus: Array = data.authResults; let length: number = grantStatus.length; for (let i = 0; i < length; i++) { if (grantStatus[i] === 0) { // 用户授权,可以继续访问目标操作 reslove(true) } else { reject() // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限 return; } } // 授权成功 }).catch((err) => { console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); }) }) } async initParams() { // deleteAllFIleLog(GlobalConfig.comoonfileWriteAddress + '/PLC/') //设置plc udp 同步requesthost await getUDP(this.context, false) this.loading = false await getDeviceInfo(this.context) await getCarInfo() await getUDP2(this.context, false) getTCP() this.deviceId = globalThis.carInfo.carNo await setCurrentTime(); if (!globalThis.distanceClass) { const distanceClass = new GetDistance(globalThis.context) await distanceClass.initFolder() globalThis.distanceClass = distanceClass console.info('surenjun', 'distanceClass=>初始化完成') } this.carNum = globalThis.carInfo.plateNo; this.version = globalThis.version; this.hasAuth = globalThis.hasAuth; setTimeout(() => { this.initParamFlag = true }, 3000) initJudgeUdp() takePhotoFn(this.context) clearInterval(this.interval) this.interval = setInterval(() => { this.num++ setliushuiNum() // getliushuiNum(this.context) if (this.num >= 3) { this.heartMsg() } }, 1000) this.createAlbum() getSyncData('ES_CARINFO').then(result => { const carInfo = result[0] || {}; globalThis.carInfo.kscx = carInfo.kscx }) // clearInterval(globalThis.demo) // globalThis.demo= setInterval(()=>{ // const str= {"carId":"1062","examinationRoomId":"2","videoVersion":"1.0","judgeVersion":"2023.09.30.1","shellVersion":"2023.12.13.01","host":"http://172.37.55.191:8082"} // initialization(str) // },10000) //下载模型 // await this.getModel() // const arr = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00] // globalThis.udpClientByTopLine.sendMsg(Array2Byte(arr).buffer) } async getModel() { const context = this.context; //下载模型 await getEsCarModel(context) } }