2025-03-24 15:14:13 +08:00

624 lines
24 KiB
Plaintext

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<any> = []
@State subFlag: boolean = true
@State signArr: Array<any> = []
@State checkListCopy: Array<any> = []
@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 (checkListStr === '' || checkListStr === undefined) {
//模拟真实数据
const param = {
"body":
{
"carIdString": globalThis.carInfo.carId, //考车ID
"deviceNo": globalThis.deviceNo
}
}
carConfigurationInfo(param).then(res => {
// @ts-ignore
console.log('ES_CHECK_CAR_ITEM',JSON.stringify(res.body))
// @ts-ignore
if(res?.body?.ES_CHECK_CAR_ITEM){
// @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))
}else{
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))
}
}).catch((error) => {
console.log('error12error' + error)
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))
})
}else {
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
}
}
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%' })
}
}