import {string2Bytes,Array2Byte,getCurrentTime} from '../../../common/utils/tools' import {testMarkRules,testRealExam,testKm2Items} from '../dataTest/index' import promptAction from '@ohos.promptAction' import systemTime from '@ohos.systemDateTime'; //获取本地扣分项 export const getTestMarkRules = () =>{ testMarkRules.map((mark:any) => { return { itemno:mark.itemno*1, markcatalog:mark.markcatalog, markshow:mark.markshow, markreal:mark.markreal*1, markserial:mark.markserial, kfxh:mark.kfxh } }) } // 中心信号转换 export const getTranslateSignals = (tempItems) => { const len = Math.floor(tempItems.length / 8); const arr = []; for(let i = 0;i < len;i++){ const temp = tempItems.slice( i*8 , (i+1)*8 ); arr.push(temp.join('')); } const temp = arr.map(numStr => parseInt(numStr,2)) return temp.map(item => string2Bytes(item , 8)[0]) } // 当前考车行驶状态转换 export function getCarStatus(status: -1 | 0 | 1):string { switch (status){ case -1:return '后退' case 0:return '停车' case 1:return '前进' default :return '' } } // 当前考车中心状态转换 export function getCarStatusType(carzt){ switch (carzt){ case -1:return [1,0] case 0: return [0,0] case 1: return [0,1] } } // 中心实时项目状态转换 export function getCenterProjectStatus(status){ switch (status){ //不考 case 0:return '00' //未考 case 1:return '01' //已考 case 2:return '10' } } // 上传监管数据code转换 export function promptWxCode( jkid:'17C52' | '17C54' |'17C55' | '17C53' | '17C56', code:number ){ let toast = ''; const singlePlay = globalThis.singlePlay if(singlePlay){ return } switch (jkid){ //项目开始 case '17C52': switch (code){ case 0:toast = '存在作弊嫌疑,已被取消或暂停考试';break; case -1:toast = '无考生身份比对信息';break; case -2:toast = '考试项目与考试安排信息不符';break; case -3:toast = '考试设备未备案';break; case -4:toast = '考试设备与考试项目不符';break; case -5:toast = '考试设备使用状态异常';break; case -6:toast = '考生考试车型与考试设备使用准驾车型范围不符';break; case -7:toast = '该考生存在作弊嫌疑,已被暂停/取消考试';break; case -8:toast = '项目开始时间不能小于科目开始时间';break; case -9:toast = '存在未结束的考试项目、不能开始新的项目考试!';break; case -10:toast = '科目三考车号牌不能为空';break; case -11:toast = '同一考车存在未结束考试,不能开始应用于新的考试';break; case -12:toast = '未找到考场记录';break; case -13:toast = '未找到考车信息';break; case -14:toast = '随机抽取考生的考车与当前考车不一致';break; default:toast = '';break; } break; //过程照片 case '17C54': switch (code){ case -1:toast = '无当前科目考试信息';break; case -2:toast = '考生身份证明号码与考生预约信息不符';break; case -3:toast = '考试项目不正确';break; case -4:toast = '考试过程中拍摄照片数量少于3张!';break; case -5:toast = '考试项目不符合要求';break; case -6:toast = '存在未结束的考试项目!';break; } break; //项目结束 case '17C55': switch (code){ case -1:toast = '无当前考试项目开始信息';break; case -2:toast = '考生身份证明号码与考生预约信息不符';break; case -3:toast = '考试项目不正确';break; case -4:toast = '考试设备序号不正确!';break; case -5:toast = '考试项目结束时间写入错误';break; case -6:toast = '考生未进行身份认证';break; case -7:toast = '项目考试过程信息记录被非法篡改';break; case -8:toast = '每个考试项目中必须至少抓拍一张照片';break; case -12:toast = '未找到考场记录';break; case -13:toast = '未找到考车信息';break; case -15:toast = '考试过程信息必须由考车上传';break; case -90:toast = '考试项目已经结束、无需重传';break; case -91:toast = '实际道路考试,在完成科目考试时统一结束';break; default:break; } break; //扣分 case '17C53': switch (code){ case 0:toast = '已存在同一时间的同一扣分记录';break case -1:toast = '无当前考试项目开始信息';break; case -2:toast = '扣分时间大于项目开始时间!';break; case -3:toast = '考试项目与扣分项不符';break; case -4:toast = '项目考试过程中,请传入当前考试项目代码';break; case -5:toast = '考生未进行身份认证';break; case -6:toast = '扣分时间写入错误';break; case -7:toast = '项目考试过程信息记录被非法篡改';break; case -12:toast = '未找到考场记录';break; case -13:toast = '未找到考车信息';break; case -15:toast = '考试过程信息必须由考车上传';break; default:toast = '';break } break; //考试结束 case '17C56': switch (code){ case -1:toast = '无当前科目考试信息';break; case -2:toast = '考生身份证明号码与考生预约信息不符';break; case -3:toast = '考试结束时间不正确';break; case -4:toast = '考试过程中拍摄照片数量少于3张!';break; case -5:toast = '考试项目不符合要求';break; case -6:toast = '存在未结束的考试项目!';break; case -7:toast = '传输的考试成绩非空';break; case -91:toast = '考试成绩计算不一致';break; case -91:toast = '日间考试已结束等待进行夜间考试';break; default: toast = '';break } break; default :break; } promptAction.showToast({ message: decodeURIComponent(toast), duration: 4000 }); } // 获取plc数据 export const plcStrToJson = async (plc:string) =>{ const p = plc.split(',').map((val,key)=>{ if(key !== 27 && key !== 92){ //@ts-ignore return val*1 }else{ return val } }); let data:any = testRealExam; const time = await systemTime.getCurrentTime() const tempData = { sensor:{ //安全带 车门门开关 手刹 脚刹 副刹 离合器 喇叭 示宽灯 近光灯 远光灯 aqd:p[19], mkg:p[14], ssc:p[13], jsc:p[12], fsc:p[18], lhq:p[17], lb:p[4], skd:p[9], jgd:p[7], ygd:p[8], //左方向灯 右方向灯 双跳灯 雾灯 雨刮器 点火1 点火2 发动机转速 档位 车速 zfxd:p[2], yfxd:p[3], shtd:p[20],wd:p[10], ygq:p[11], dh1:p[5], dh2:p[6], fdjzs:p[25], dw:p[28], cs:p[23], //@ts-ignore 方向盘 fxp:p[27].split('_')[0]*1, //累计脉冲 溜车脉冲 超声波左后 超声波右后 超声波右前 超声波左前 座椅 仪表盘 后视镜 倒车镜 光照 雨量 ljmc:p[24], lcmc:0, csbzh:p[32], csbyh:p[30], csbyq:p[31], csbzq:p[29], zy:0, tbp:0, hsj:0, dcj:0, gx:0, yl:0 }, gps:{ //办卡类型 定位差分状态 bklx:p[56], dwzt:p[83], //@ts-ignore 角度差分状态 jdzt:p[92].split('-')[0]*1, //gps数据 //gps时间 经度 纬度 航向角 俯仰角 海拔高 高度差 速度 sj:time, jd:p[96], wd:p[95], hxj:p[90], fyj:p[91], hbg:p[85], gdc:p[86], sd:p[97], //龄期 经度因子 纬度因子 定位搜星数 age:p[87], jdyz:p[89], wdyz:p[88], dwsxs:p[84], //@ts-ignore 角度搜星数 jdsxs:p[92].split('-')[1]*1 }, gps2:data.gps, vision:data.vision, radar:data.radar, extend:{} } return tempData } export const plcStrToWXJson = async (plc:string) =>{ const p = plc.split(',').map((val,key)=>{ if(key !== 27 && key !== 92){ //@ts-ignore return val*1 }else{ return val } }); const timeStr = p[93] + '' + p[94]; const gps = { //办卡类型 定位差分状态 bklx:p[56], dwzt:p[83], // 经度 纬度 航向角 俯仰角 海拔高 高度差 速度 jd:p[96], wd:p[95], hxj:p[90], fyj:p[91], hbg:p[85], gdc:p[86], sd:p[97], //龄期 经度因子 纬度因子 定位搜星数 age:p[87], jdyz:p[89], wdyz:p[88], dwsxs:p[84], } const judgeSignal = [ // 车门 安全带 熄火 发动机启动 左转向 右转向 前照灯近灯 前照灯远灯 p[14], p[19], p[5], p[6], p[2], p[3], p[7], p[8], // 注车制动 行车制动 离合器 副制动 喇叭 雨刷 危险报警灯 示廓灯 系统未涉及的传感器信号 p[13], p[12], p[17], p[18], p[4], p[11], p[20], p[9], 0 ] const judgeAnotherSignal = [ // 低三挡位 左侧单边桥1 左侧单边桥2 右侧单边桥1 右侧单边桥2 雾灯 '000', '0', '0', '0', '0', p[10], // 桩杆全无信号 左后绕车 右后绕车 右前绕车 左前绕车 '000', '0', '0', '0', '0' ] const wuXiData = [ // 卫星时间 精度 纬度 高度 方位角 俯仰角 速度角 速度 横滚 卫星定位状态 '$KSXT', timeStr, gps.jd, gps.wd, gps.hbg, gps.hxj, gps.fyj, '' , gps.sd, '', gps.dwzt, gps.dwzt, //前天线可用星数 后天线可用星数 东向坐标位置 北向位置坐标 天向位置坐标 东向速度 北向速度 天向速度 '', '', '', '', '', '', '', '', //@ts-ignore 评判信号1 评判信号2 发动机转速 (judgeSignal.join('')*1).toString(16), (judgeAnotherSignal.join('')*1).toString(16) , p[25], '0xFFFFFFF' ] const wuXiDataStr = wuXiData.join(',') return wuXiDataStr } export function sendBlue(){ const arrBlue = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00]; const arrBlueBuffer= Array2Byte(arrBlue).buffer globalThis.lightLineUdp.send(arrBlueBuffer); } export function sendGreen(){ const arrGreen = [0x55, 0xaa, 0x01, 0x00, 0x02, 0x00, 0x03, 0x01]; const arrGreenBuffer= Array2Byte(arrGreen).buffer globalThis.lightLineUdp.send(arrGreenBuffer); } export function sendRed(){ const arrRed= [0x55, 0xaa, 0x01, 0x01, 0x02, 0x00, 0x03, 0x00]; const arrRedBuffer= Array2Byte(arrRed).buffer globalThis.lightLineUdp.send(arrRedBuffer); }