合并dev代码

This commit is contained in:
lvyuankang 2024-10-28 13:47:53 +08:00
parent 73bc75388f
commit 21a1f20cef
9 changed files with 531 additions and 0 deletions

View File

@ -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}
});
}
}

View File

@ -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'
}

View File

@ -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',
}

View File

@ -0,0 +1,9 @@
export * from "./CandidateData"
export * from "./VideoData"
export * from "./Judge"
export * from "./SignDisplay"
export * from "./CarCheck"

View File

@ -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)')
}
}

View File

@ -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;
}
}

View File

@ -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

View File

@ -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();
}
}
}

View File

@ -0,0 +1,2 @@
//