import UdpClient from '../common/utils/UdpClient'; 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'; @Entry @Component struct Index { @State angle: number = 0 @State ratio: number = 1280 / 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 confimDialogFlag: boolean = false private vocObj = null; @State checkList: Array = [] @State subFlag: boolean = true @State signArr: Array = [] @State checkListCopy: Array = [] @State warnFlag: object = { 1:'0', 2:'0', 3:'0', 4:'0', 5:'0', 6:'0', 7:'0', 8:'0', 9:'0', 10: '0', 11: '0', 12: '0', 13: '0', 14: '0', 15: '0', 16: '0', 17: '0', 18: '0', 19: '0', 20: '0', 21: '0', 22: '0', 23: '0', 24: '0', 25: '0', 26: '0', 27: '0', 28: '0', 29: '0', } @State @Watch('outClick') outFlag: boolean = false; @State passArray: object = { 1: false, 2: false, 3: false, 4: false, 5: false, 6: false, 7: false, 8: false, 9: false, 10: false, 11: false, 12: false, 13: false, 14: false, 15: false, 16: false, 17: false, 18: false, 19: false, 20: false, 21: false, 22: false, 23: false, 24: false, 25: false, 26: false, 27: false, 28: false, 29: false, } @State stachValue: object = { 1: '', 2: "", 3: "", 4: "", 5: "", 6: "", 7: "", 8: "", 9: "", 10: "", 11: "", 12: "", 13: "", 14: "", 15: "", 16: "", 17: "", 18: "", 19: "", 20: "", 21: "", 22: "", 23: "", 24: "", 25: "", 26: "", 27: "", 28: "", 29: "", } @State warnFlagTip: object = { 0: [], 1: [], 2: [], 3: ['check1.wav', 'check2.wav'], 4: ['check3.wav', 'check4.wav'], 5: ['check5.wav', 'check6.wav'], 6: ['check7.wav', 'check8.wav'], 7: ['check9.wav', 'check10.wav'], 8: ['check26.wav', 'check27.wav'], 9: ['dianhuoVideo.wav', 'xihuoVideo.wav'], 10: ['check31.wav'], 11: ['check30.wav'], 12: ['check28.wav'], 13: ['check29.wav'], 14: ['check11.wav'], 15: ['check12.wav'], 16: ['check13.wav'], 17: ['check14.wav'], 18: ['check15.wav'], 19: ['check16.wav'], 20: ['check17.wav'], 21: ['check18.wav'], 22: ['check19.wav'], 23: ['check22.wav'], 24: ['check23.wav'], 25: ['check20.wav', 'check21.wav'], 26: ['check24.wav'], // 27:[], // 28:[], // 29:[], } @State realNum: object = { 3: 19, 4: 17, 5: 13, 6: 12, 7: 14, 8: 18, 9: 5, 10: 29, 11: 30, 12: 31, 13: 32, 14: 28, 15: 28, 16: 28, 17: 28, 18: 28, 19: 28, 20: 28, 21: 2, //左方向灯, 22: 3, 23: 7, 24: 8, 25: 20, 26: '' } @State dwMap: object = { 14: '1', 15: '2', 16: '3', 17: '4', 18: '5', 19: '9', 20: '0' } @State len: any = '' @State fd: number = -1; @State devPath: string = "/dev/ttyS5" @State interval: any="" @State stopFlag: boolean=false // private AccountTable = new AccountTable(()=>{},CommonConstants); onPageShow() { 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.getCheckList() } else { this.subFlag = false this.getNextNode() } } }); this.carConfigurationInfoFn() //todo串口 this.openChuankouFn() this.interval=setInterval(()=>{ const dwArr=[14,15,16,17,18,19,20] if(dwArr.indexOf(this.index)>=0&&!this.stopFlag){ this.getChuankouFn() return } },1000) } openChuankouFn() { this.fd = testNapi.SerialOpen(this.devPath); let parity = 0x4e; // 'N' let ret = testNapi.SerialSet(this.fd, 115200, 0, 8, 1, parity); } getChuankouFn() { let timeout = 2000000; // 2秒超时 let databuff = [0x61, 0xAA, 0x0A, 0X15, 0X00]; // send ABCDE let ret = testNapi.SerialSend(this.fd, databuff); let revTestInfo = testNapi?.SerialRecv(this.fd, timeout); const message = revTestInfo?.recevedBuf?.toString() 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 } 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); clearInterval(this.interval) } // carConfigurationInfoFn() { if (globalThis.singlePlay) { const str = "1:5;2:5;3:5;4:5;5:5;6:5;7:5;8:5;9:5;10:2;11:2;12:2;13:2;14:2;15:2;16:5;17:5;18:2;19:2;20:2;21:2;22:2;23:2;24:2" 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 } //模拟真实数据 const param = { "body": { "carIdString": globalThis.carInfo.carId, //考车ID "deviceNo": globalThis.deviceNo } } carConfigurationInfo(param).then(res => { 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)) // this.checkList = JSON.parse(res).body.ES_CHECK_CAR_ITEM[0].split(';') console.log('this.checkList' + this.checkList) }).catch((error) => { console.log('error12error' + error) }) } async kszj() { this.breakFlag = true this.stachValue = { 1: '', 2: "", 3: "", 4: "", 5: "", 6: "", 7: "", 8: "", 9: "", 10: "", 11: "", 12: "", 13: "", 14: "", 15: "", 16: "", 17: "", 18: "", 19: "", 20: "", 21: "", 22: "", 23: "", 24: "", 25: "", 26: "", 27: "", 28: "", 29: "", } this.warnFlag = { 1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0, 22: 0, 23: 0, 24: 0, 25: 0, 26: 0, 27: 0, 28: 0, 29: 0, } this.passArray = { 1: false, 2: false, 3: false, 4: false, 5: false, 6: false, 7: false, 8: false, 9: false, 10: false, 11: false, 12: false, 13: false, 14: false, 15: false, 16: false, 17: false, 18: false, 19: false, 20: false, 21: false, 22: false, 23: false, 24: false, 25: false, 26: false, 27: false, 28: false, 29: false, } this.checkListCopy = JSON.parse(JSON.stringify(this.checkList)) this.index = this.checkListCopy[0].key this.vocObj.playAudio({ type: 1, name: 'kszj.wav' }) } getPLCInfo(){ const that=this globalThis.udpClient&&globalThis.udpClient.onMessage((msg) => { 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) { return } 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 ? '自检不通过' : '自检通过' } this.stopCheck() uploadExamCarCheckResult(data).then((res) => { }) } }, parseInt(this.checkListCopy[0].time) * 1000) } getCheckList() { if (!this.breakFlag) { return } 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 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[1] ? (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(() => { 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%' }) } }