diff --git a/entry/src/main/ets/common/utils/UdpEvent.ets b/entry/src/main/ets/common/utils/UdpEvent.ets new file mode 100644 index 00000000..1bf91a95 --- /dev/null +++ b/entry/src/main/ets/common/utils/UdpEvent.ets @@ -0,0 +1,73 @@ +import emitter from '@ohos.events.emitter'; + +export const EVENTID = { + //远程扣分处理 + kfEventId:35, + //远程扣分查询 + kfAskEventId:36, + //远程扣分确认 + kfConfirmEventId:37, + //远程开始考试 + beginExamEventId:11, + //远程结束考试 + endExamEventId:12 +} + +export default class JudgeEmitter{ + + private beginExamCallBack:Function = ()=>{} + private endExamCallBack:Function = ()=>{} + + constructor() { + this.init() + } + + init = async ()=>{ + console.info('surenjun','开始注册udp事件') + emitter.on({eventId:EVENTID.beginExamEventId}, () => { + this?.beginExamCallBack() + }); + emitter.on({eventId:EVENTID.endExamEventId}, () => { + this?.endExamCallBack() + }); + emitter.on({eventId:EVENTID.kfEventId}, () => { + this?.endExamCallBack() + }); + } + + //监听开始考试 + public onBeginExam = async (callBack?:Function)=>{ + console.info('surenjun','userInfo注册onBeginExam事件') + this.beginExamCallBack = callBack + } + + //监听结束考试 + public onEndExam = async (callBack?:Function)=>{ + this.endExamCallBack = callBack + } + + //监听扣分处理 + public onKfExam= async (callBack?:Function)=>{ + this.endExamCallBack = callBack + } + + //开始考试 + public sendBeginExam = async(content:string)=>{ + emitter.emit({eventId:EVENTID.beginExamEventId}, { + data:{ content } + }); + } + + //结束考试 + public sendEndExam = async(content:string)=>{ + emitter.emit({eventId:EVENTID.endExamEventId}, { + data:{content} + }); + } + + + + + +} + diff --git a/entry/src/main/ets/mock/CarCheck.ts b/entry/src/main/ets/mock/CarCheck.ts new file mode 100644 index 00000000..2e47c27f --- /dev/null +++ b/entry/src/main/ets/mock/CarCheck.ts @@ -0,0 +1,165 @@ +export const WarnFlagData = { + 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', +} + +export const PassData = { + 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, +} + +export const StackValueData = { + 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: "", +} + +export const WarnFlagTipData = { + 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:[], +} + +export const RealNumData = { + 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: '' +} + +export const DwMapData={ + 14: '1', + 15: '2', + 16: '3', + 17: '4', + 18: '5', + 19: '9', + 20: '0' +} \ No newline at end of file diff --git a/entry/src/main/ets/mock/VideoData.ts b/entry/src/main/ets/mock/VideoData.ts new file mode 100644 index 00000000..96d789e3 --- /dev/null +++ b/entry/src/main/ets/mock/VideoData.ts @@ -0,0 +1,35 @@ +import { VideoConfig } from '../pages/interfaces' + +// 视频配置默认数据 +export const VideoConfigData: VideoConfig = { + videoNum: '1', + spls: '1', + wz: '0,0', + faceFlag: false, + shuiying: true, + pztd: '2', + ljlx: '', + ip: '192.168.7.112', + port: '554', + userName: 'admin', + pwd: '12345qwe', + td1: '1', + td2: '2', + td3: '3', + td4: '4', + videoRecord1: false, + videoRecord2: false, + videoRecord3: false, + videoRecord4: false, + text1: '', + text2: '', + text3: '', + dolt: '', + fontSize: '', + rlls: '1', + spzd4: false, + spzd3: false, + spzd2: false, + spzd1: false, + zdyz: '5', +} \ No newline at end of file diff --git a/entry/src/main/ets/mock/index.ts b/entry/src/main/ets/mock/index.ts new file mode 100644 index 00000000..add1ef21 --- /dev/null +++ b/entry/src/main/ets/mock/index.ts @@ -0,0 +1,9 @@ +export * from "./CandidateData" + +export * from "./VideoData" + +export * from "./Judge" + +export * from "./SignDisplay" + +export * from "./CarCheck" \ No newline at end of file diff --git a/entry/src/main/ets/pages/compontents/judge/video-play.ets b/entry/src/main/ets/pages/compontents/judge/video-play.ets new file mode 100644 index 00000000..f37e4dcc --- /dev/null +++ b/entry/src/main/ets/pages/compontents/judge/video-play.ets @@ -0,0 +1,25 @@ + +@Component +export default struct EndPopup { + constructor() { + super() + } + + private title:string = '' + private cancelFn:(event?: ClickEvent) => void + private confirmFn:(event?: ClickEvent) => void + + build(){ + Column(){ + Column(){ + Text(this.title).fontSize(38).margin({bottom:20}) + Row(){}.height(50) + Row(){ + Text('取消').backgroundImage($rawfile('judge/end-btn.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).width(250).height(100).fontSize(30).fontColor('#FFF').textAlign(TextAlign.Center).onClick(this.cancelFn) + Text('确定').backgroundImage($rawfile('judge/end-btn.png'),ImageRepeat.NoRepeat).backgroundImageSize({width:'100%',height:'100%'}).width(250).height(100).fontSize(30).fontColor('#FFF').textAlign(TextAlign.Center).margin({left:45}).onClick(this.confirmFn) + } + }.width('80%').height('70%').backgroundColor('#E6E3DF').borderRadius(38).position({y:'12%',x:'10%'}).justifyContent(FlexAlign.Center) + + }.width('100%').height('100%').position({y:0}).backgroundColor('rgba(0,0,0,0.7)') + } +} diff --git a/entry/src/main/ets/pages/judgeSDK/dataTest/GpsPort.java b/entry/src/main/ets/pages/judgeSDK/dataTest/GpsPort.java new file mode 100644 index 00000000..fb6a04b7 --- /dev/null +++ b/entry/src/main/ets/pages/judgeSDK/dataTest/GpsPort.java @@ -0,0 +1,155 @@ +package com.duolun.vehterminal.dl_frontend.port; + + +import android.text.TextUtils; +import android.util.Log; + +import com.duolun.vehterminal.dl_base.config.ExamParam; +import com.duolun.vehterminal.dl_base.log.LogHelper; +import com.duolun.vehterminal.dl_library.SensorCache; +import com.duolun.vehterminal.dl_library.VehicleStatus; +import com.duolun.vehterminal.dl_library.bean.GPSInfo; +import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; + +public class GpsPort extends Port{ + + private final String TAG = "GpsPort"; + + private StringBuffer gpsData = new StringBuffer(); + + private long start = System.currentTimeMillis(); + + public void start() { + super.start(); + } + + @Override + protected void handleData() { + try { + //client.send("hello!".getBytes()); + byte[] msg = client.receive(); + if(msg == null) return; + String revMsg = new String(msg, "US-ASCII").trim(); + String obdData = SensorCache.getInstance().getObdData(); + SensorCache.getInstance().setPlcData(obdData + revMsg); + + if(TextUtils.isEmpty(revMsg)) return; + long timeLen = System.currentTimeMillis() - start; + // Log.e(TAG,"----------------revMsg--->"+revMsg); + if(timeLen>100){ + if(!TextUtils.isEmpty(gpsData.toString())){ + GPSInfo info = getGPSInfo(gpsData.toString()); + if (info != null) { + if (info.getMode() == 4) { + VehicleStatus.status[VehicleStatus.GPS] = VehicleStatus.NORMAL; + } else { + VehicleStatus.status[VehicleStatus.GPS] = VehicleStatus.EXCEPTION; + } + SensorCache.getInstance().putGpsInfo(info); + } + } + gpsData = new StringBuffer(); + gpsData.append(revMsg); + }else{ + gpsData.append(revMsg); + } + start = System.currentTimeMillis(); + } catch (Exception e) { + LogHelper.e(TAG,"",e); + } + } + + + private GPSInfo getGPSInfo(String data) { + LogHelper.i(TAG, "getGPSInfo--->"+data); + GPSInfo info = new GPSInfo(); + info.setGpsFrontNum(1); + try { + String[] lines = data.split("\r\n"); + for(String line:lines){ + if(line.startsWith("$KSXT")){ + getGPS(info,line); + }else if(line.startsWith("$GPGST")){ + String[] _data = line.split(","); + info.setLatErrorValue(Float.parseFloat(TextUtils.isEmpty(_data[6]) ? "0" : _data[6]));//维度精度因子 + info.setLongErrorValue(Float.parseFloat(TextUtils.isEmpty(_data[7]) ? "0" : _data[7]));//经度精度因子 + info.setHeightErrorValue(Float.parseFloat(_data[8].split("\\*")[0])); + }else if(line.startsWith("#HEADINGA")){ + String[] strs = line.split(","); + BigDecimal b = new BigDecimal(Float.parseFloat(strs[12])); + float azimuthAngle = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue(); + azimuthAngle += 180; + if (azimuthAngle > 360) { + azimuthAngle = azimuthAngle - 360; + } + info.setAzimuthAngle(azimuthAngle); + BigDecimal d = new BigDecimal(Float.parseFloat(strs[13])); + info.setPitchAngle(d.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue()); + info.setAzimuthAngleErrorValue(Float.parseFloat(strs[15])); + info.setPitchAngleErrorValue(Float.parseFloat(strs[16])); + }else if(line.startsWith("$GPGGA")){ + String[] gps = line.split(","); + int status = Integer.parseInt(TextUtils.isEmpty(gps[6]) ? "0" : gps[6]);//状态 + if (status > 0) info.setStatus(1); + info.setMode(status); + info.setLocationStatus(status + ""); + } + } + info.setGpsData(data); + SensorCache.getInstance().putGpsInfo(info); + } catch (Exception e) { + LogHelper.e(TAG, "getGPSInfo->", e); + } + return null; + } + + + private void getGPS(GPSInfo gpsInfo,String signal) { + try { + String[] gps = signal.split(","); + if (gps.length < 14) { + gpsInfo.setRevTime(System.currentTimeMillis()); + SensorCache.getInstance().putGpsInfo(gpsInfo); + LogHelper.i(TAG,signal); + return; + } + gpsInfo.setMsg("#GPS," + signal); + gpsInfo.setRevTime(System.currentTimeMillis()); + gpsInfo.setAzimuthStatus(gps[11]); + gpsInfo.setAzimuthNum(gps[12]); + gpsInfo.setGpsFrontNum(Integer.parseInt(TextUtils.isEmpty(gps[13]) ? "0" : gps[13]));//收星数 + gpsInfo.setHeight(Float.parseFloat(TextUtils.isEmpty(gps[4]) ? "0" : gps[4]));//海拔高度 + gpsInfo.setAge(Float.parseFloat(TextUtils.isEmpty(gps[20]) ? "0" : gps[20]));//龄期 + String pitchAngle = gps[6];//俯仰角 + gpsInfo.setPitchAngle(Float.parseFloat(TextUtils.isEmpty(pitchAngle) ? "0" : pitchAngle)); + gpsInfo.setGpsTime(gps[1]); + gpsInfo.setLatitude(Double.parseDouble(TextUtils.isEmpty(gps[3]) ? "0" : gps[3]));//维度 + gpsInfo.setLongitude(Double.parseDouble(TextUtils.isEmpty(gps[2]) ? "0" : gps[2]));//精度 + float speed = 0; + if (gps.length>14 && !TextUtils.isEmpty(gps[8])) { + BigDecimal r = new BigDecimal(Float.parseFloat(gps[8]) * 1.852); + speed = r.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue(); + gpsInfo.setVelocity(speed); + } + if ("0".equals(ExamParam.SPEED_TYPE) || TextUtils.isEmpty(ExamParam.SPEED_TYPE)) + ExamParam.SPEED = speed + ""; + } catch (Exception e) { + LogHelper.i5(TAG, "异常数据:" + signal); + LogHelper.i5(TAG, "异常信息:"+e.getMessage()); + gpsInfo.setRevTime(System.currentTimeMillis()); + SensorCache.getInstance().putGpsInfo(gpsInfo); + } + } + + /** + * 坐标预处理,将度分转为度 + * + * @return + */ + private double translateLatLon(double a) { + int temp1 = (int) Math.floor(a / 100); + double temp2 = temp1 + (a - temp1 * 100) / 60; + return temp2; + } +} diff --git a/entry/src/main/ets/pages/judgeSDK/dataTest/gpsPorText.txt b/entry/src/main/ets/pages/judgeSDK/dataTest/gpsPorText.txt new file mode 100644 index 00000000..1119c84b --- /dev/null +++ b/entry/src/main/ets/pages/judgeSDK/dataTest/gpsPorText.txt @@ -0,0 +1,9 @@ +Find GPGST,Find GPRMC,Find GPGGA,Find PTNL,Find BESTPOSA,Find HEADINGA,Find KSXT,Find BYC, +$GPGST,045215.20,0.03,0.01,0.03,0.0000,0.01,0.01,0.03*60 +$GPRMC,045215.20,A,3206.3460589,N,11842.1399062,E,0.022,0.0,081024,0.0,E,D*30 +$GPGGA,045215.20,3206.3460589,N,11842.1399062,E,4,42,0.5,1.935,M,0.592,M,3.200,0000*7A +$PTNL,AVR,045215.20,+66.5809,Yaw,-1.1687,Tilt,,,1.288,3,1.2,38*01 +$KSXT,20241008045215.20,118.70233177,32.10576765,2.5270,66.58,-1.17,70.35,0.040,,3,3,38,42,-45.675,-21.352,-2.137,0.038,0.013,0.015,3.2,40,*8BA53C1A +#BESTPOSA,COM1,0,87.5,FINESTEERING,2335,190353.200,00000000,0000,782;SOL_COMPUTED,NARROW_INT,32.10576764819,118.70233176936,1.9353,0.5917,WGS84,0.0132,0.0118,0.0253,"0",3.200,0.034,44,42,42,42,00,00,30,37*77b805ad +#HEADINGA,COM1,0,87.5,FINESTEERING,2335,190353.200,00000000,0000,782;SOL_COMPUTED,NARROW_INT,1.287597299,66.580940247,-1.168731809,0.0,0.808748186,0.807274878,"0",44,38,44,26,0,00,30,37*3e44d092 +#BYCHECKA,COM1,0,87.5,FINESTEERING,2335,190353.200,00000000,0000,782;1268,2335,190353.200,1,1,1,0,1,1,1,1,1,1,1,1*c786fc2a \ No newline at end of file diff --git a/entry/src/main/ets/pages/judgeSDK/utils/judgeTask_BAK.ts b/entry/src/main/ets/pages/judgeSDK/utils/judgeTask_BAK.ts new file mode 100644 index 00000000..ffc86328 --- /dev/null +++ b/entry/src/main/ets/pages/judgeSDK/utils/judgeTask_BAK.ts @@ -0,0 +1,58 @@ +import Prompt from '@system.prompt' + +const TAG = 'SURENJUN_JUDGE' +interface QUEUE{ + fn:Function, + config?:{ + isDelay:boolean + delayTime:number + } +} + +export default class JudgeTask{ + private queue = [] + private status:string + constructor() { + this.queue = [] + this.status = 'end' + } + + executeQueue = async ()=>{ + const {queue,executeQueue} = this + if(queue.length){ + for (const currentTask of queue) { + const {fn,delayConfig:{ + isDelay = false, + delayTime = 1000 + }} = currentTask; + const {status} = this + try { + isDelay + ?setTimeout(async ()=>{await fn()}) + :await fn(); + }catch (e){ + // console.info(TAG,'过程数据接口解析错误') + Prompt.showToast({ + message: '过程数据接口解析错误', + duration: 3000 + }); + } + this.queue.shift() + await executeQueue() + } + }else{ + this.status = 'end' + } + } + + addTask = async (fn,delayConfig?:{ + isDelay:Boolean, + delayTime:Number + }) =>{ + this.queue.push({fn,delayConfig}); + if(this.status == 'end' && this.queue.length === 1){ + await this.executeQueue(); + } + } + +} diff --git a/entry/src/main/ets/pages/judgeSDK/utils/rearEndUni.ts b/entry/src/main/ets/pages/judgeSDK/utils/rearEndUni.ts new file mode 100644 index 00000000..fdf4a7dc --- /dev/null +++ b/entry/src/main/ets/pages/judgeSDK/utils/rearEndUni.ts @@ -0,0 +1,2 @@ + +//