459 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			459 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // @ts-nocheck
 | |
| 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 { FileHelper } from '../common/service/FileHelper';
 | |
| import { getEsCarModel, } from '../common/service/initable';
 | |
| import FileUtil from '../common/utils/File';
 | |
| import { getUDP, getUDP2 } from '../common/utils/GlobalUdp';
 | |
| import { initJudgeUdp } from '../common/utils/UdpJudge';
 | |
| import { getTCP } from '../common/utils/GlobalTcp';
 | |
| import { getliushuiNum, setliushuiNum, takePhotoFn,deleteAllFIleLog } from '../common/service/indexService';
 | |
| import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
 | |
| import worker, { MessageEvents } from '@ohos.worker';
 | |
| import promptAction from '@ohos.promptAction'
 | |
| import { voiceService } from '../common/service/voiceService';
 | |
| import errorMsgDialog from './compontents/errorMsgDialog'
 | |
| import { getSyncData } from '../common/service/initable';
 | |
| import GetDistance from '../common/utils/GetDistance'
 | |
| @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 loading: boolean = true
 | |
|   @State fd: number = -1;
 | |
|   @State num: number = 0;
 | |
|   fileHelper = null;
 | |
|   private fileUtil: FileUtil
 | |
|   private interval = null;
 | |
|   private vocObj = null;
 | |
|   private workerInstance = null;
 | |
|   private context = getContext(this) as common.UIAbilityContext;
 | |
|   private title = ''
 | |
|   private type = '2'
 | |
|   errorDialog: CustomDialogController = new CustomDialogController({
 | |
|     builder: errorMsgDialog({
 | |
|       title: globalThis.title,
 | |
|       type: globalThis.type,
 | |
|       cancel: () => {
 | |
|       },
 | |
|       confirm: () => {
 | |
|       }
 | |
|     }),
 | |
|     customStyle: true,
 | |
|     alignment: DialogAlignment.Center,
 | |
|   },
 | |
|   )
 | |
| 
 | |
|   @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 })
 | |
|           Row() {
 | |
|             Image($r('app.media.btn_setting')).width('16.7%').height('12.2%')
 | |
|               .onClick(async () => {
 | |
|                 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.dialogVisiable = true
 | |
|               })
 | |
|           }
 | |
|         }
 | |
|         .width('100%')
 | |
|         .justifyContent(FlexAlign.SpaceBetween)
 | |
|       }
 | |
| 
 | |
|       Column() {
 | |
|         Row() {
 | |
|           if (!this.isSingle) {
 | |
|             Image($r('app.media.index_lw'))
 | |
|               .width('28%')
 | |
|               .height('71%')
 | |
|               .margin({ left: 80 * globalThis.ratio })
 | |
|               .onClick(async () => {
 | |
|                 if (this.loading) {
 | |
|                   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) {
 | |
|             Image($r('app.media.index_dj'))
 | |
|               .width('28%')
 | |
|               .height('71%')
 | |
|               .margin({ left: 80 * globalThis.ratio })
 | |
|               .onClick(() => {
 | |
|                 if (this.loading) {
 | |
|                   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()
 | |
|                   }
 | |
|                 });
 | |
|               })
 | |
|           }
 | |
|           Image($r('app.media.index_zj'))
 | |
|             .width('28%')
 | |
|             .height('71%')
 | |
|             .margin({ right: 80 * globalThis.ratio })
 | |
|             .onClick(() => {
 | |
|               if (this.loading) {
 | |
|                 return
 | |
|               }
 | |
|               router.pushUrl({
 | |
|                 url: 'pages/CarCheck'
 | |
|               }, router.RouterMode.Single);
 | |
|             })
 | |
|         }
 | |
|         .width('100%')
 | |
|         .justifyContent(FlexAlign.SpaceAround)
 | |
|       }
 | |
| 
 | |
|       Column() {
 | |
|         Row() {
 | |
|           Column() {
 | |
|             Text('V ' + globalThis.version)
 | |
|               .fontColor('#CCAE7A')
 | |
|               .fontSize(22 * globalThis.ratio)
 | |
|               .width('30%')
 | |
|               .margin({ bottom: 10 })
 | |
|             Text('授权信息:' + (this.hasAuth ? '已授权' : '未授权'))
 | |
|               .fontColor('#CCAE7A')
 | |
|               .fontSize(22 * 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
 | |
|             }).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(() => {
 | |
|               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.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('获取考车信息,请稍候……')
 | |
|             .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() {
 | |
|     this.dialogVisiable = false
 | |
|     this.angle = 0
 | |
|     this.loading = false
 | |
|     globalThis.lsh = '1111111111111'
 | |
|     globalThis.errorDialog=this.errorDialog
 | |
|     const distanceClass = new GetDistance(globalThis.context)
 | |
|     await distanceClass.initFolder()
 | |
|     globalThis.distanceClass = distanceClass
 | |
|   }
 | |
| 
 | |
|   async testXMLToJSONInWorker() {
 | |
|     if (this.loading) {
 | |
|       return
 | |
|     }
 | |
|     let workerInstance = new worker.ThreadWorker('entry/ets/workers/worker.ts');
 | |
|     const param = {
 | |
|       carId: globalThis.carInfo?.carId,
 | |
|       examinationRoomId: globalThis.carInfo?.examinationRoomId,
 | |
|       judgeVersion: globalThis.judgeVersion,
 | |
|       shellVersion: globalThis.version,
 | |
|       paraKdid: globalThis.timeInfo?.paraKdid,
 | |
|       mode: globalThis.timeInfo?.mode,
 | |
|       context: this.context,
 | |
|       host: globalThis.host,
 | |
|       centerHost: globalThis.timeInfo.url,
 | |
|       singlePlay: globalThis.singlePlay
 | |
|     }
 | |
|     console.log('globalThis.timeInfo',JSON.stringify(globalThis.timeInfo),'globalThis.carInfo',JSON.stringify(globalThis.carInfo))
 | |
|     this.loading = true
 | |
|     workerInstance.postMessage(param);
 | |
|     workerInstance.onmessage = (e: MessageEvents): void => {
 | |
|       console.log("baoyihu after postMessage :", JSON.stringify(e.data));
 | |
|       let workData: WorkData = e.data;
 | |
|       if (workData.isComplete) {
 | |
|         router.pushUrl({
 | |
|           url: globalThis.singlePlay ? 'pages/UserInfo' : 'pages/ExaminerLogin',
 | |
|         }, router.RouterMode.Single)
 | |
|       }
 | |
|       this.loading = false
 | |
|       workerInstance.terminate();
 | |
| 
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   async heartMsg() {
 | |
|     const arr = [globalThis.signNum || 0, globalThis.statue || 1]
 | |
|     let tmpList = [];d
 | |
|     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])
 | |
|     }
 | |
|     console.log('globalThis.carInfo', JSON.stringify(globalThis.carInfo))
 | |
| 
 | |
|     const param = {
 | |
|       id: 31,
 | |
|       list: tmpList,
 | |
|       carNo: globalThis.carInfo.carNo,
 | |
|       placeId: globalThis.carInfo.examinationRoomId
 | |
|     }
 | |
|     console.log('paramparam', JSON.stringify(param))
 | |
|     // globalThis.udpClient2.initHeartSendMsg(param,this.context)
 | |
|     if (globalThis.udpClient2.getStatus()) {
 | |
|       globalThis.udpClient2.sendMsgExt(param, this.context)
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   async onPageShow() {
 | |
|     console.log('ttttt', 1111)
 | |
|     this.userAuth();
 | |
| 
 | |
|     this.vocObj = new voiceService(async (status, val, next) => {
 | |
|     });
 | |
| 
 | |
|     console.log('globalThis.singlePlay', globalThis.singlePlay)
 | |
|     if (globalThis.singlePlay == undefined || globalThis.singlePlay == null) {
 | |
|       this.vocObj.playAudio({
 | |
|         type: 1,
 | |
|         name: 'welcome.wav'
 | |
|       })
 | |
|       globalThis.singlePlay = false
 | |
|     }
 | |
|     this.isSingle = globalThis.singlePlay
 | |
|     this.loading = false
 | |
|     this.createAlbum()
 | |
|     this.num = 0
 | |
|     // const TcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort)
 | |
|     console.info('Index onPageShow');
 | |
|     globalThis.lsh = '1111111111111'
 | |
|   }
 | |
| 
 | |
|   async createAlbum() {
 | |
|     this.fileHelper = new FileHelper();
 | |
|     this.fileHelper.createAlbum('jt')
 | |
|     this.fileHelper.createAlbum('pz');
 | |
| 
 | |
|   }
 | |
| 
 | |
|   userAuth() {
 | |
|     const permissions: Array<Permissions> = ["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<number> = data.authResults;
 | |
|       let length: number = grantStatus.length;
 | |
|       for (let i = 0; i < length; i++) {
 | |
|         if (grantStatus[i] === 0) {
 | |
|           // 用户授权,可以继续访问目标操作
 | |
|         } else {
 | |
|           // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
 | |
|           return;
 | |
|         }
 | |
|       }
 | |
|       // 授权成功
 | |
|     }).catch((err) => {
 | |
|       console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
 | |
|     })
 | |
|   }
 | |
| 
 | |
|   async initParams() {
 | |
|     deleteAllFIleLog()
 | |
|     //设置plc udp 同步requesthost
 | |
|     await getUDP(this.context, false)
 | |
|     this.loading = false
 | |
|     console.log('globalThis.deviceNo000')
 | |
|     await getDeviceInfo(this.context)
 | |
|     await getCarInfo()
 | |
|     await getUDP2(this.context, false)
 | |
|     getTCP()
 | |
|     this.deviceId = globalThis.carInfo.carNo
 | |
|     await setCurrentTime();
 | |
|     this.carNum = globalThis.carInfo.plateNo;
 | |
|     this.version = globalThis.version;
 | |
|     this.hasAuth = globalThis.hasAuth;
 | |
|     initJudgeUdp()
 | |
|     takePhotoFn(this.context)
 | |
|     console.log('deviceIddeviceId', globalThis.deviceNo, this.deviceNo)
 | |
|     clearInterval(this.interval)
 | |
|     this.interval = setInterval(() => {
 | |
|       this.num++
 | |
|       setliushuiNum(this.context)
 | |
|       getliushuiNum(this.context)
 | |
|       if (this.num >= 3) {
 | |
|         this.heartMsg()
 | |
|       }
 | |
|       // const data=AppStorage.Get('errorMsg');
 | |
|       // console.log('1123',data,globalThis.type,globalThis.dialogOpen)
 | |
|       // if(data==1){
 | |
|       //   if(globalThis.type=='3'&&!globalThis.dialogOpen){
 | |
|       //     globalThis.dialogOpen=true
 | |
|       //     this.errorDialog.open()
 | |
|       //   }else if(globalThis.type=='1'){
 | |
|       //     this.errorDialog.open()
 | |
|       //   }
 | |
|       // }
 | |
|     }, 1000)
 | |
|     //下载模型
 | |
|     // 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)
 | |
|   }
 | |
| } |