import { voiceService } from '../common/service/voiceService'; import router from '@ohos.router'; import { carConfigurationInfo, uploadExamCarCheckResult } from '../api/checkCar'; import TopLogo from './compontents/TopLogo'; import testNapi from '@ohos.hiserialsdk'; import { dateFormat } from '../common/utils/tools'; import { DwMapData, PassData, RealNumData, StackValueData, WarnFlagData, WarnFlagTipData } from '../mock'; import FileUtil from '../common/utils/File'; import { GlobalConfig } from '../config'; import common from '@ohos.app.ability.common'; @Entry @Component export default struct Index { @State angle: number = 0 @State ratio: number = 1700 / 960 @State index: number = -1 @State time: string = '' @State msg: string = '' @State zjMsg: string = '' @State zjFlag: boolean = false @State loading: boolean = false @State breakFlag: boolean = false @State checkFlag: boolean = false @State msgFlag: boolean = false @State confirmDialogFlag: boolean = false @State checkList: Array = [] @State subFlag: boolean = true @State signArr: Array = [] @State checkListCopy: Array = [] @State warnFlag: object = WarnFlagData @State @Watch('outClick') outFlag: boolean = false; @State passArray: object = PassData @State stachValue: object = StackValueData @State warnFlagTip: object = WarnFlagTipData @State realNum: object = RealNumData @State dwMap: object = DwMapData @State fd: number = -1; @State devPath: string = "/dev/ttyS3" @State stopFlag: boolean = false @State fromIndex: boolean = false private vocObj = null; private context = getContext(this) as common.UIAbilityContext; // private AccountTable = new AccountTable(()=>{},CommonConstants); aboutToAppear() { const that = this this.vocObj = new voiceService(async (status, val, next) => { if (!that.breakFlag) { return } if (status == 'idle') { if (val == 'kszj.wav') { console.log('finsh') this.initfackCheck(0) // this.getCheckList(true) } else { this.subFlag = false this.getNextNode() } } }); let routParam: any = router.getParams(); this.fromIndex=routParam?.fromIndex || false this.carConfigurationInfoFn() } openChuankouFn() { console.log('SerialOpen in carcheck, path=' + this.devPath) this.fd = testNapi.SerialOpen(this.devPath); let parity = 0x4e; // 'N' let ret = testNapi.SerialSet(this.fd, 115200, 0, 8, 1, parity); } getChuankouFn() { let timeout = 50000; // 2秒超时 let databuff = [0x61, 0xAA, 0x0A, 0X15, 0X00]; // send ABCDE let ret = testNapi.SerialSend(this.fd, databuff); console.log('mmmm', ret) let revTestInfo = testNapi?.SerialRecv(this.fd, timeout); console.log('revTestInfo', revTestInfo.recevedBuf.length) const message = revTestInfo?.recevedBuf?.toString() console.log('chuankou', this.index, message) if (message == '') { this.stopFlag = true return } const msg = message?.split(',') if (!msg?.length) { return } if (msg[0] != '98' || msg[1] != '85' || msg.length < 9) { return } globalThis.chuankoMsg = msg[9] if (msg[9] == this.dwMap[this.index]) { this.warnFlag[this.index] = '2' } } async xhxs() { this.vocObj.avPlayerStop() this.vocObj.releasePlayer() router.pushUrl({ url: 'pages/SignDisplay', }, router.RouterMode.Single); this.stachValue = JSON.parse(JSON.stringify(StackValueData)) this.warnFlag = JSON.parse(JSON.stringify(WarnFlagData)) this.passArray = JSON.parse(JSON.stringify(PassData)) // clearInterval(this.interval) } // async carConfigurationInfoFn() { const fileUtil = new FileUtil(this.context) const checkListStr = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/carcheck.txt'); if (globalThis.singlePlay&&(checkListStr === '' || checkListStr === undefined)) { const str = "1:5;2:5;3:5;4:5;5:5;6:5;7:5;8:5;9:5;10:5;11:5;12:5;13:5;14:5;15:5;16:5;17:5;18:5;19:5;20:5;21:5;22:2;23:5;24:5" const data = str.split(';') this.checkList = [] const list = data list.map(res => { const arr = res.split(':') this.checkList.push({ 'key': parseInt(arr[0]) + 2, 'time': arr[1] }) }) this.checkListCopy = JSON.parse(JSON.stringify(this.checkList)) return }else if(globalThis.singlePlay){ const data = checkListStr.split(';') this.checkList = [] const list = data list.map(res => { const arr = res.split(':') this.checkList.push({ 'key': parseInt(arr[0]) + 2, 'time': arr[1] }) }) this.checkListCopy = JSON.parse(JSON.stringify(this.checkList)) return } //模拟真实数据 const param = { "body": { "carIdString": globalThis.carInfo.carId, //考车ID "deviceNo": globalThis.deviceNo } } carConfigurationInfo(param).then(res => { // @ts-ignore const data = res.body.ES_CHECK_CAR_ITEM[0].ITEMS.split(';'); this.checkList = [] const list = data list.map(res => { const arr = res.split(':') this.checkList.push({ 'key': parseInt(arr[0]) + 2, 'time': arr[1] }) }) this.checkListCopy = JSON.parse(JSON.stringify(this.checkList)) }).catch((error) => { console.log('error12error' + error) }) } async kszj() { this.breakFlag = true this.stachValue = StackValueData this.warnFlag = WarnFlagData this.passArray = PassData this.checkListCopy = JSON.parse(JSON.stringify(this.checkList)) this.stachValue = JSON.parse(JSON.stringify(StackValueData)) this.warnFlag = JSON.parse(JSON.stringify(WarnFlagData)) this.passArray = JSON.parse(JSON.stringify(PassData)) this.index = this.checkListCopy[0].key this.vocObj.playAudio({ type: 1, name: 'kszj.wav' }) } getPLCInfo() { const that = this globalThis.udpClient.onMessage_1 && globalThis.udpClient.onMessage_1((msg) => { console.log('getUDPonMessage_1byCarCheck2') if (!this.breakFlag) { return } const stachArr = msg.split(',') if (stachArr[0] != '#DN_GD') { return } this.signArr = stachArr const dw = [14, 15, 16, 17, 18, 19, 20]; const dwArr = [14, 15, 16, 17, 18, 19, 20] if (dwArr.indexOf(this.index) >= 0) { if (stachArr[28] == this.dwMap[this.index]) { this.warnFlag[this.index] = '2' } } if (this.subFlag) { //进项目 that.stachValue[that.index] = that.signArr[that.realNum[that.index]] return } if (this.index == 26) { //关闭所有灯光 if (that.signArr[2] != '0' || that.signArr[3] != '0' || that.signArr[7] != '0' || that.signArr[8] != '0') { } else { this.warnFlag[26] = '2' } } if (that.index == 10 || that.index == 11 || that.index == 12 || that.index == 13) { if (that.signArr[that.realNum[that.index]] != '1200') { that.warnFlag[that.index] = '2' } else { } return } if (this.warnFlagTip[that.index].length > 1) { if (that.stachValue[that.index] != that.signArr[that.realNum[that.index]]) { that.warnFlag[that.index] = '2' } return } if (!Array.isArray(that.realNum[that.index])) { if (dw.indexOf(that.index) >= 0) { that.warnFlag[that.index] = (that.signArr[28] == that.dwMap[that.index] ? '2' : '0') return } if (that.signArr[that.realNum[that.index]] !== '0') { that.warnFlag[that.index] = '2' } else { } } }) } stopCheck() { this.breakFlag = false } getNextNode() { setTimeout(() => { if (this.warnFlag[this.index] != '2') { this.warnFlag[this.index] = '1' this.warnFlag = JSON.parse(JSON.stringify(this.warnFlag)) } if (!this.breakFlag) { return } this.checkListCopy.splice(0, 1) if (this.checkListCopy.length) { this.getCheckList() } else { this.zjFlag = true let flag = false for (let item in this.warnFlag) { if (this.warnFlag[item] == '1') { flag = true } } this.vocObj.playAudio({ type: 1, name: flag ? 'zjwtg.wav' : 'zjtg.wav' }) if (globalThis.singlePlay) { return } let date = new Date(); const data = { time: dateFormat(date), carId: globalThis.carInfo.carId, examinationRoomId: globalThis.carInfo.examinationRoomId, plateNo: globalThis.carInfo.plateNo, flag: flag ? 'N' : 'Y', condition: flag ? '自检不通过' : '自检通过' } if(!flag&&this.fromIndex||true){ router.pushUrl({ url: 'pages/ExaminerLogin', }, router.RouterMode.Single); } this.stopCheck() uploadExamCarCheckResult(data).then((res) => { }) } }, parseInt(this.checkListCopy[0].time) * 1000) } initfackCheck(index){ const that=this setTimeout(()=>{ console.log('indexindex',index) if(index>=3){ this.getCheckList() return } console.log('this.index',index,) that.passArray[index]=true if(index==2){ let flag=false console.log('globalThis.spzd[key]',globalThis.spzd) for(let key in globalThis.spzd){ console.log('globalThis.spzd[key]',globalThis.spzd[key]) if(globalThis.spzd[key]){ that.warnFlag[index]='1' flag=true } } if(!flag){ that.warnFlag[index]='2' } }else{ that.warnFlag[index]='2' } that.passArray=JSON.parse(JSON.stringify(that.passArray)) that.warnFlag=JSON.parse(JSON.stringify(that.warnFlag)) index++ this.initfackCheck(index) },1000) } async getCheckList() { this.index = this.checkListCopy[0].key this.passArray[this.index] = true this.passArray = JSON.parse(JSON.stringify(this.passArray)) this.subFlag = true if (this.warnFlagTip[this.index].length == 1) { this.vocObj.playAudio({ type: 1, name: this.warnFlagTip[this.index][0], }) } else if (this.warnFlagTip[this.index].length == 2) { if (this.signArr[this.realNum[this.index]] && this.signArr[this.realNum[this.index]] != '0') { this.vocObj.playAudio({ type: 1, name: this.warnFlagTip[this.index][1], }) } else { this.vocObj.playAudio({ type: 1, name: this.warnFlagTip[this.index][0], }) } } } outClick() { this.vocObj && this.vocObj.releasePlayer() this.breakFlag = false this.stachValue = JSON.parse(JSON.stringify(StackValueData)) this.warnFlag = JSON.parse(JSON.stringify(WarnFlagData)) this.passArray = JSON.parse(JSON.stringify(PassData)) // clearInterval(this.interval) } build() { Column() { TopLogo({ outFlag: $outFlag }).margin({ bottom: 25.5 * this.ratio }) Flex({ justifyContent: FlexAlign.SpaceBetween }) { Column() { Row() { Image(this.passArray[0] ? (this.warnFlag[0] == '0' ? $r('app.media.cheliangmoxing') : (this.warnFlag[0] == '1' ? $r('app.media.cheliangmoxing_r') : $r('app.media.cheliangmoxing_g'))) : $r('app.media.cheliangmoxing')) .width(138.5 * this.ratio) .height(112.5 * this.ratio) Image(this.passArray[0] ? (this.warnFlag[1] == '0' ? $r('app.media.weixingxinhao') : (this.warnFlag[1] == '1' ? $r('app.media.weixingxinhao_r') : $r('app.media.weixingxinhao_g'))) : $r('app.media.weixingxinhao')) .width(138.5 * this.ratio) .height(112.5 * this.ratio) Image(this.passArray[2] ? (this.warnFlag[2] == '0' ? $r('app.media.shipinjiankong') : (this.warnFlag[2] == '1' ? $r('app.media.shipingjiankong_r') : $r('app.media.shipinjiankong_g'))) : $r('app.media.shipinjiankong')) .width(138.5 * this.ratio) .height(112.5 * this.ratio) Image(this.passArray[3] ? (this.warnFlag[3] == '0' ? $r('app.media.anquandai') : (this.warnFlag[3] == '1' ? $r('app.media.anquandai_r') : $r('app.media.anquandai_g'))) : $r('app.media.anquandai')) .width(138.5 * this.ratio) .height(112.5 * this.ratio) Image(this.passArray[4] ? (this.warnFlag[4] == '0' ? $r('app.media.liheqi') : (this.warnFlag[4] == '1' ? $r('app.media.liheqi_r') : $r('app.media.leheqi_g'))) : $r('app.media.liheqi')) .width(138.5 * this.ratio) .height(112.5 * this.ratio) } Row() { Image(this.passArray[5] ? (this.warnFlag[5] == '0' ? $r('app.media.shousha') : (this.warnFlag[5] == '1' ? $r('app.media.shousha_r') : $r('app.media.shousha_g'))) : $r('app.media.shousha')) .width(138.5 * this.ratio) .height(112.5 * this.ratio) Image(this.passArray[6] ? (this.warnFlag[6] == '0' ? $r('app.media.jiaosha') : (this.warnFlag[6] == '1' ? $r('app.media.jiaosha_r') : $r('app.media.jiaosha_g'))) : $r('app.media.jiaosha')) .width(138.5 * this.ratio) .height(112.5 * this.ratio) Image(this.passArray[7] ? (this.warnFlag[7] == '0' ? $r('app.media.chemen') : (this.warnFlag[7] == '1' ? $r('app.media.chemen_r') : $r('app.media.chemeen_g'))) : $r('app.media.chemen')) .width(138.5 * this.ratio) .height(112.5 * this.ratio) Image(this.passArray[8] ? (this.warnFlag[8] == '0' ? $r('app.media.fusha') : (this.warnFlag[8] == '1' ? $r('app.media.fusha_r') : $r('app.media.fusha_g'))) : $r('app.media.fusha')) .width(138.5 * this.ratio) .height(112.5 * this.ratio) Image(this.passArray[9] ? (this.warnFlag[9] == '0' ? $r('app.media.dianhuo') : (this.warnFlag[9] == '1' ? $r('app.media.dianhuo_r') : $r('app.media.dianhuo_g'))) : $r('app.media.dianhuo')) .width(138.5 * this.ratio) .height(112.5 * this.ratio) } } if (this.breakFlag) { Column() { Image($r('app.media.open_loading')) .width(100 * this.ratio) .rotate({ angle: this.angle }) .height(100 * this.ratio) .animation({ duration: 5000, // 动画时长 curve: Curve.EaseOut, // 动画曲线 delay: 500, // 动画延迟 iterations: -1, // 播放次数 playMode: PlayMode.Normal, // 动画模式 }) Text('等待检测…').fontSize(24 * this.ratio).fontColor('#FFB133').margin({ top: 35 * this.ratio }) }.align(Alignment.Center).flexGrow(1) } } Flex({ justifyContent: FlexAlign.SpaceBetween }) { Row() { //绕车 Column() { Row() { Image(this.warnFlag[10] == '1' ? $r('app.media.zq_r') : this.warnFlag[10] == '2' ? $r('app.media.zq') : '') .width(102 * this.ratio) .height(118.5 * this.ratio) .visibility(this.passArray[10] ? Visibility.Visible : Visibility.Hidden) Image(this.warnFlag[11] == '1' ? $r('app.media.yq_r') : this.warnFlag[11] == '2' ? $r('app.media.yq') : '') .width(102 * this.ratio) .height(118.5 * this.ratio) .visibility(this.passArray[11] ? Visibility.Visible : Visibility.Hidden) } Row() { Image(this.warnFlag[12] == '1' ? $r('app.media.zh_r') : this.warnFlag[12] == '2' ? $r('app.media.zh') : '') .width(103 * this.ratio) .height(118.5 * this.ratio) .visibility(this.passArray[12] ? Visibility.Visible : Visibility.Hidden) Image(this.warnFlag[13] == '1' ? $r('app.media.yh_r') : this.warnFlag[13] == '2' ? $r('app.media.yh') : '') .width(103 * this.ratio) .height(118.5 * this.ratio) .visibility(this.passArray[13] ? Visibility.Visible : Visibility.Hidden) } } .backgroundImage($r('app.media.rc')) .backgroundImageSize({ width: '100%', height: '100%' }) .width(206 * this.ratio) .height(235.5 * this.ratio) //档位 Column() { Image(this.warnFlag[14] == '1' ? $r('app.media.1_r') : this.warnFlag[14] == '2' ? $r('app.media.1') : '') .width(44.5 * this.ratio) .height(44.5 * this.ratio) .position({ x: 25 * this.ratio, y: 57 * this.ratio }) .visibility(this.passArray[14] ? Visibility.Visible : Visibility.Hidden) Image(this.warnFlag[16] == '1' ? $r('app.media.3_r') : this.warnFlag[16] == '2' ? $r('app.media.3') : '') .width(44.5 * this.ratio) .height(44.5 * this.ratio) .position({ x: 82.5 * this.ratio, y: 57 * this.ratio }) .visibility(this.passArray[16] ? Visibility.Visible : Visibility.Hidden) Image(this.warnFlag[18] == '1' ? $r('app.media.5_r') : this.warnFlag[18] == '2' ? $r('app.media.5') : '') .width(44.5 * this.ratio) .height(44.5 * this.ratio) .position({ x: 139.5 * this.ratio, y: 57 * this.ratio }) .visibility(this.passArray[18] ? Visibility.Visible : Visibility.Hidden) Image(this.warnFlag[15] == '1' ? $r('app.media.2_r') : this.warnFlag[15] == '2' ? $r('app.media.2') : '') .width(44.5 * this.ratio) .height(44.5 * this.ratio) .position({ x: 25 * this.ratio, y: 173.5 * this.ratio }) .visibility(this.passArray[15] ? Visibility.Visible : Visibility.Hidden) Image(this.warnFlag[17] == '1' ? $r('app.media.4_r') : this.warnFlag[17] == '2' ? $r('app.media.4') : '') .width(44.5 * this.ratio) .height(44.5 * this.ratio) .position({ x: 82.5 * this.ratio, y: 173.5 * this.ratio }) .visibility(this.passArray[17] ? Visibility.Visible : Visibility.Hidden) Image(this.warnFlag[19] == '1' ? $r('app.media.R_r') : this.warnFlag[19] == '2' ? $r('app.media.R') : '') .width(44.5 * this.ratio) .height(44.5 * this.ratio) .position({ x: 139.5 * this.ratio, y: 173.5 * this.ratio }) .visibility(this.passArray[19] ? Visibility.Visible : Visibility.Hidden) Image(this.warnFlag[20] == '1' ? $r('app.media.N_r') : this.warnFlag[20] == '2' ? $r('app.media.N') : '') .width(44.5 * this.ratio) .height(44.5 * this.ratio) .position({ x: 82.5 * this.ratio, y: 115.5 * this.ratio }) .visibility(this.passArray[20] ? Visibility.Visible : Visibility.Hidden) } .backgroundImage($r('app.media.dw')) .backgroundImageSize({ width: '100%', height: '100%' }) .width(206 * this.ratio) .height(235.5 * this.ratio) Column() { Row() { Image(this.passArray[21] ? (this.warnFlag[21] == '0' ? $r('app.media.zuo') : (this.warnFlag[21] == '1' ? $r('app.media.zuo_r') : $r('app.media.zuo_g'))) : $r('app.media.zuo')) .width(138.5 * this.ratio) .height(81.5 * this.ratio) Image(this.passArray[22] ? (this.warnFlag[22] == '0' ? $r('app.media.you') : (this.warnFlag[22] == '1' ? $r('app.media.you_r') : $r('app.media.you_g'))) : $r('app.media.you')) .width(138.5 * this.ratio) .height(81.5 * this.ratio) } Row() { Image(this.passArray[23] ? (this.warnFlag[23] == '0' ? $r('app.media.zuo1') : (this.warnFlag[23] == '1' ? $r('app.media.yuanguangdeng_r') : $r('app.media.yuanguangdeng_g'))) : $r('app.media.zuo1')) .width(138.5 * this.ratio) .height(81.5 * this.ratio) Image(this.passArray[24] ? (this.warnFlag[24] == '0' ? $r('app.media.jinguangdeng') : (this.warnFlag[24] == '1' ? $r('app.media.jinguangdeng_r') : $r('app.media.jinguangdeng_g'))) : $r('app.media.jinguangdeng')) .width(138.5 * this.ratio) .height(81.5 * this.ratio) } Row() { Image(this.passArray[25] ? (this.warnFlag[25] == '0' ? $r('app.media.guzhang') : (this.warnFlag[25] == '1' ? $r('app.media.guzhang_r') : $r('app.media.guzhang_g'))) : $r('app.media.guzhang')) .width(138.5 * this.ratio) .height(81.5 * this.ratio) Image(this.passArray[26] ? (this.warnFlag[26] == '0' ? $r('app.media.jinzhi') : (this.warnFlag[26] == '1' ? $r('app.media.jinzhi_r') : $r('app.media.jinzhi_g'))) : $r('app.media.jinzhi')) .width(138.5 * this.ratio) .height(81.5 * this.ratio) } } } Column() { if (this.breakFlag) { Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) { } .width(215 * this.ratio) .height(64 * this.ratio) .margin({ bottom: 10 * this.ratio }) .onClick(() => { }) .zIndex(11) } else { Image($r('app.media.xhxs_btn')) .width(215 * this.ratio) .height(64 * this.ratio) .backgroundImage($r('app.media.button_nor')) .backgroundImageSize({ width: '100%', height: '100%' }) .margin({ bottom: 10 * this.ratio }) .onClick(() => { console.log('xhsx') this.xhxs() }) .zIndex(11) } Image($r('app.media.tczj_btn')) .width(215 * this.ratio) .height(64 * this.ratio) .backgroundImage($r('app.media.button_nor')) .backgroundImageSize({ width: '100%', height: '100%' }) .margin({ bottom: 10 * this.ratio }) .onClick(() => { this.stopCheck() }) .zIndex(11) Image($r('app.media.kszj_btn')) .width(215 * this.ratio) .height(64 * this.ratio) .backgroundImage($r('app.media.anniu_nor')) .backgroundImageSize({ width: '100%', height: '100%' }) .margin({ bottom: 10 * this.ratio }) .onClick(() => { this.kszj() this.getPLCInfo() setTimeout(() => { this.angle = 360 }, 1000) }) .zIndex(11) } }.width('100%') } .height('100%') .width('100%') .backgroundImage($r('app.media.bg')) .backgroundImageSize({ width: '100%', height: '100%' }) } }