Compare commits
6 Commits
ee4d54e8d7
...
beb6ba1b60
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
beb6ba1b60 | ||
|
|
2321052cc1 | ||
|
|
19d409cf54 | ||
|
|
7e7900a124 | ||
|
|
d64d951f1e | ||
|
|
e6a75028c5 |
@ -146,3 +146,4 @@ export async function initCarParameter(params: object) {
|
|||||||
xml: false,
|
xml: false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
94
entry/src/main/ets/api/networkCamera.ets
Normal file
94
entry/src/main/ets/api/networkCamera.ets
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
import http from '@ohos.net.http';
|
||||||
|
import buffer from '@ohos.buffer';
|
||||||
|
import image from '@ohos.multimedia.image';
|
||||||
|
|
||||||
|
const TAG = 'CameraService';
|
||||||
|
|
||||||
|
export async function ObtainNetworkCameraImages(): Promise<string | null> {
|
||||||
|
const url = "http://192.168.1.125/snapshot.cgi?stream=1&username=admin&password=123456";
|
||||||
|
let httpRequest = http.createHttp();
|
||||||
|
|
||||||
|
try {
|
||||||
|
console.info(TAG, 'Starting image request...');
|
||||||
|
const response = await httpRequest.request(url, {
|
||||||
|
method: http.RequestMethod.GET,
|
||||||
|
connectTimeout: 10000,
|
||||||
|
readTimeout: 10000,
|
||||||
|
expectDataType: http.HttpDataType.ARRAY_BUFFER,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (response.responseCode === 200) {
|
||||||
|
let arrayBuffer = response.result as ArrayBuffer;
|
||||||
|
|
||||||
|
// 裁剪左半部分
|
||||||
|
const croppedBase64 = await cropLeftHalf(arrayBuffer);
|
||||||
|
|
||||||
|
return croppedBase64;
|
||||||
|
} else {
|
||||||
|
console.error(TAG, `HTTP Error: ${response.responseCode}`);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error(TAG, 'An error occurred while fetching the image.', JSON.stringify(error));
|
||||||
|
return null;
|
||||||
|
} finally {
|
||||||
|
httpRequest.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function cropLeftHalf(arrayBuffer: ArrayBuffer): Promise<string> {
|
||||||
|
let imageSource: image.ImageSource | null = null;
|
||||||
|
let pixelMap: image.PixelMap | null = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 1. 创建ImageSource
|
||||||
|
imageSource = image.createImageSource(arrayBuffer);
|
||||||
|
|
||||||
|
// 2. 获取图片信息
|
||||||
|
const imageInfo = await imageSource.getImageInfo();
|
||||||
|
console.info(TAG, `Original image size: ${imageInfo.size.width}x${imageInfo.size.height}`);
|
||||||
|
|
||||||
|
// 3. 计算并定义左半部分的裁剪区域
|
||||||
|
const leftHalfWidth = Math.floor(imageInfo.size.width / 2);
|
||||||
|
const cropRegion: image.Region = {
|
||||||
|
size: {
|
||||||
|
width: leftHalfWidth,
|
||||||
|
height: imageInfo.size.height
|
||||||
|
},
|
||||||
|
x: 0,
|
||||||
|
y: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
// 创建解码选项,并将裁剪区域放入其中
|
||||||
|
const decodingOptions: image.DecodingOptions = {
|
||||||
|
desiredRegion: cropRegion
|
||||||
|
};
|
||||||
|
|
||||||
|
// 4. 创建像素映射并进行裁剪
|
||||||
|
pixelMap = await imageSource.createPixelMap(decodingOptions);
|
||||||
|
|
||||||
|
// 5. 将裁剪后的PixelMap转换为ArrayBuffer
|
||||||
|
const imagePacker = image.createImagePacker();
|
||||||
|
const packedData = await imagePacker.packing(pixelMap, {
|
||||||
|
format: "image/jpeg",
|
||||||
|
quality: 90
|
||||||
|
});
|
||||||
|
|
||||||
|
// 6. 转换为Base64
|
||||||
|
const buf = buffer.from(packedData);
|
||||||
|
const base64 = buf.toString('base64');
|
||||||
|
|
||||||
|
const result = `data:image/jpeg;base64,${base64}`;
|
||||||
|
console.info(TAG, `Left half cropped successfully. Size: ${leftHalfWidth}x${imageInfo.size.height}`);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error(TAG, 'Image cropping failed:', JSON.stringify(error));
|
||||||
|
return "";
|
||||||
|
} finally {
|
||||||
|
// 7. 在 finally 块中安全地释放资源
|
||||||
|
imageSource?.release();
|
||||||
|
pixelMap?.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -26,7 +26,7 @@ export const JudgeConfig: JudgeConfigType = {
|
|||||||
// 本地模型地址
|
// 本地模型地址
|
||||||
modelPath: 'models/model_enc',
|
modelPath: 'models/model_enc',
|
||||||
// 济南科目三
|
// 济南科目三
|
||||||
trajectoryPath: 'logs/2024_10_12/2024_10_12_11_50_10_9999427676823_744299437502336256_隋统/judge_exam_data.txt',
|
trajectoryPath: 'logs/2025_08_22/2025_08_22_17_09_49_9999245520855_654211778346526080_杜兰曼/judge_exam_data.txt',
|
||||||
//四合一画面配置
|
//四合一画面配置
|
||||||
fourInOneScreen: {
|
fourInOneScreen: {
|
||||||
//gps位数
|
//gps位数
|
||||||
|
|||||||
@ -169,6 +169,8 @@ export interface EnvironmentConfigurationType {
|
|||||||
version?: string
|
version?: string
|
||||||
// 评判版本
|
// 评判版本
|
||||||
judgeVersion?: string
|
judgeVersion?: string
|
||||||
|
// 是否使用网络摄像头
|
||||||
|
isUseNetworkCamera?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
//全局配置
|
//全局配置
|
||||||
|
|||||||
@ -19,6 +19,7 @@ import Prompt from '@system.prompt';
|
|||||||
import { DifferentialAndSignal } from '../utils/business/DifferentialAndSignalWorker';
|
import { DifferentialAndSignal } from '../utils/business/DifferentialAndSignalWorker';
|
||||||
import { dConsole } from '../utils/LogWorker';
|
import { dConsole } from '../utils/LogWorker';
|
||||||
import CarLoadingComponent from './Index/Loading';
|
import CarLoadingComponent from './Index/Loading';
|
||||||
|
import { ObtainNetworkCameraImages } from '../api/networkCamera';
|
||||||
|
|
||||||
@Entry
|
@Entry
|
||||||
@Component
|
@Component
|
||||||
@ -40,6 +41,7 @@ struct Index {
|
|||||||
@State isPlay: boolean = false;
|
@State isPlay: boolean = false;
|
||||||
@State initWork: boolean = false
|
@State initWork: boolean = false
|
||||||
@State status: string = "开始"
|
@State status: string = "开始"
|
||||||
|
@State base64Img: string = ""
|
||||||
// 请求网络表等待弹窗
|
// 请求网络表等待弹窗
|
||||||
customDialogController: CustomDialogController = new CustomDialogController({
|
customDialogController: CustomDialogController = new CustomDialogController({
|
||||||
builder: CarLoadingComponent(),
|
builder: CarLoadingComponent(),
|
||||||
@ -62,6 +64,7 @@ struct Index {
|
|||||||
|
|
||||||
async aboutToAppear() {
|
async aboutToAppear() {
|
||||||
dConsole.log("权限首页 aboutToAppear")
|
dConsole.log("权限首页 aboutToAppear")
|
||||||
|
this.base64Img = await ObtainNetworkCameraImages() || ""
|
||||||
this.ratio = AppStorage.get<BaseInfoType>('baseInfo')?.ratio || 1.4
|
this.ratio = AppStorage.get<BaseInfoType>('baseInfo')?.ratio || 1.4
|
||||||
this.angle = 0
|
this.angle = 0
|
||||||
AppStorage.set('lsh', '1111111111111')
|
AppStorage.set('lsh', '1111111111111')
|
||||||
|
|||||||
@ -37,11 +37,12 @@ export default struct SignalTrajectoryDialog {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
Scroll() {
|
// Scroll() {
|
||||||
Column() {
|
Column() {
|
||||||
if (this.active !== 2) {
|
if (this.active !== 2) {
|
||||||
SignalDisplayComponent({
|
SignalDisplayComponent({
|
||||||
active: this.active,
|
active: this.active,
|
||||||
|
heightNum: 1500
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
TrajectoryViewComponent({
|
TrajectoryViewComponent({
|
||||||
@ -50,7 +51,7 @@ export default struct SignalTrajectoryDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}.height(890)
|
}.height(890)
|
||||||
}.width("100%")
|
// }.width("100%")
|
||||||
.height(700)
|
.height(700)
|
||||||
}.width(1500)
|
}.width(1500)
|
||||||
|
|
||||||
|
|||||||
@ -6,11 +6,9 @@ import {
|
|||||||
DefaultJudgeConfigObj,
|
DefaultJudgeConfigObj,
|
||||||
ExtendType,
|
ExtendType,
|
||||||
Gps,
|
Gps,
|
||||||
JudgeSound,
|
|
||||||
LANE,
|
LANE,
|
||||||
MarkRule,
|
MarkRule,
|
||||||
PLCType,
|
PLCType,
|
||||||
ProcessDataEnumType,
|
|
||||||
ProjectInfo,
|
ProjectInfo,
|
||||||
ProjectInfos,
|
ProjectInfos,
|
||||||
ProjectRoads,
|
ProjectRoads,
|
||||||
@ -21,7 +19,6 @@ import { ArrayToByteArray, NumberToByteArray } from '../../utils/Common';
|
|||||||
import dayTs from '../../utils/Date';
|
import dayTs from '../../utils/Date';
|
||||||
import { dConsole } from '../../utils/LogWorker';
|
import { dConsole } from '../../utils/LogWorker';
|
||||||
import VoiceAnnounce from '../judgeSDK/utils/voiceAnnouncements';
|
import VoiceAnnounce from '../judgeSDK/utils/voiceAnnouncements';
|
||||||
import { examJudgeSoundEnd } from './JudgeSDKUtils';
|
|
||||||
|
|
||||||
|
|
||||||
// 中心信号转换
|
// 中心信号转换
|
||||||
@ -863,23 +860,23 @@ export const CurrentProjectConversion = (code: number, projectsObj: object): str
|
|||||||
* @param sound - 评判音频对象
|
* @param sound - 评判音频对象
|
||||||
* @param avPlayer - 语音播放器实例
|
* @param avPlayer - 语音播放器实例
|
||||||
*/
|
*/
|
||||||
export function PlayJudgeVoice(sound: JudgeSound, avPlayer: VoiceAnnounce) {
|
// export function PlayJudgeVoice(sound: JudgeSound, avPlayer: VoiceAnnounce) {
|
||||||
if (sound.type == 1) {
|
// if (sound.type == 1) {
|
||||||
avPlayer?.playAudio([`voice/${sound.code[0]}.mp3`], false, () => {
|
// avPlayer?.playAudio([`voice/${sound.code[0]}.mp3`], false, () => {
|
||||||
examJudgeSoundEnd({
|
// examJudgeSoundEnd({
|
||||||
xmdm: sound.xmdm, code: sound.code[0], type: sound.type
|
// xmdm: sound.xmdm, code: sound.code[0], type: sound.type
|
||||||
});
|
// });
|
||||||
dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify({
|
// dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify({
|
||||||
method: 'examJudgeSoundEnd',
|
// method: 'examJudgeSoundEnd',
|
||||||
itemno: sound.xmdm,
|
// itemno: sound.xmdm,
|
||||||
code: sound.code[0],
|
// code: sound.code[0],
|
||||||
type: sound.type,
|
// type: sound.type,
|
||||||
}));
|
// }));
|
||||||
});
|
// });
|
||||||
} else {
|
// } else {
|
||||||
avPlayer?.playAudio([`voice/${sound.code[0]}.mp3`]);
|
// avPlayer?.playAudio([`voice/${sound.code[0]}.mp3`]);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 检查差分
|
* 检查差分
|
||||||
|
|||||||
@ -7,14 +7,15 @@ import ethernet from '@ohos.net.ethernet';
|
|||||||
import { BusinessError } from '@ohos.base';
|
import { BusinessError } from '@ohos.base';
|
||||||
import Prompt from '@system.prompt';
|
import Prompt from '@system.prompt';
|
||||||
import { dConsole } from '../utils/LogWorker';
|
import { dConsole } from '../utils/LogWorker';
|
||||||
|
import window from '@ohos.window';
|
||||||
|
|
||||||
@Entry
|
@Entry
|
||||||
@Component
|
@Component
|
||||||
struct TerminalInfoPage {
|
struct TerminalInfoPage {
|
||||||
@State config: EnvironmentConfigurationType = {}
|
@State config: EnvironmentConfigurationType = {}
|
||||||
|
@State isProcessing: boolean = false;
|
||||||
private fileUtil!: FileUtils
|
private fileUtil!: FileUtils
|
||||||
private context = getContext(this) as common.UIAbilityContext;
|
private context = getContext(this) as common.UIAbilityContext;
|
||||||
@State isProcessing: boolean = false;
|
|
||||||
|
|
||||||
async aboutToAppear() {
|
async aboutToAppear() {
|
||||||
this.fileUtil = new FileUtils(this.context)
|
this.fileUtil = new FileUtils(this.context)
|
||||||
@ -186,6 +187,14 @@ struct TerminalInfoPage {
|
|||||||
this.config.isOpenFiniteDifference = value;
|
this.config.isOpenFiniteDifference = value;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
blockComponent({
|
||||||
|
label: "开启网络摄像头",
|
||||||
|
type: 7,
|
||||||
|
value: this.config.isUseNetworkCamera,
|
||||||
|
change: (value: string) => {
|
||||||
|
this.config.isUseNetworkCamera = value;
|
||||||
|
}
|
||||||
|
})
|
||||||
blockComponent({
|
blockComponent({
|
||||||
label: "是否开启日志",
|
label: "是否开启日志",
|
||||||
type: 2,
|
type: 2,
|
||||||
@ -203,15 +212,20 @@ struct TerminalInfoPage {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
blockComponent({
|
blockComponent({
|
||||||
label: "开启调试(重启APP)",
|
label: "开启调试",
|
||||||
type: 6,
|
type: 6,
|
||||||
value: this.config.isOpenDebugger,
|
value: this.config.isOpenDebugger,
|
||||||
change: (value: string) => {
|
change: async (value: string) => {
|
||||||
this.config.isOpenDebugger = value;
|
this.config.isOpenDebugger = value;
|
||||||
|
const win = await window.getLastWindow(this.context);
|
||||||
|
if (value === "1") {
|
||||||
|
win.setWindowSystemBarEnable(['status', 'navigation'])
|
||||||
|
} else {
|
||||||
|
win.setWindowSystemBarEnable([])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}.margin(20)
|
}.margin(20)
|
||||||
|
|
||||||
}
|
}
|
||||||
.height(650)
|
.height(650)
|
||||||
.width("100%")
|
.width("100%")
|
||||||
@ -222,7 +236,6 @@ struct TerminalInfoPage {
|
|||||||
top: 10
|
top: 10
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
Row() {
|
Row() {
|
||||||
Image($r('app.media.bc')).height(80).objectFit(ImageFit.Contain).onClick(() => {
|
Image($r('app.media.bc')).height(80).objectFit(ImageFit.Contain).onClick(() => {
|
||||||
if (this.isProcessing) {
|
if (this.isProcessing) {
|
||||||
@ -396,7 +409,7 @@ struct blockComponent {
|
|||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
ForEach(this.type === 1 ? this.rearMachineModelList :
|
ForEach(this.type === 1 ? this.rearMachineModelList :
|
||||||
this.type === 2 || this.type === 5 || this.type === 6 ? this.logList :
|
this.type === 2 || this.type === 5 || this.type === 6 || this.type === 7 ? this.logList :
|
||||||
this.type === 3 ? this.boardList : this.carTypeList, (item: CommonListType, index) => {
|
this.type === 3 ? this.boardList : this.carTypeList, (item: CommonListType, index) => {
|
||||||
Radio({ value: item.label, group: 'terRadioGroup' + this.type })
|
Radio({ value: item.label, group: 'terRadioGroup' + this.type })
|
||||||
.borderColor('#E5CBA1')
|
.borderColor('#E5CBA1')
|
||||||
|
|||||||
@ -2,19 +2,19 @@
|
|||||||
export default struct BlockComponent {
|
export default struct BlockComponent {
|
||||||
@State label: string = "发送次数"
|
@State label: string = "发送次数"
|
||||||
@Prop value: string = "1"
|
@Prop value: string = "1"
|
||||||
@State widthNum: number = 130
|
@State widthNum: number = 150
|
||||||
@State heightNum: number = 70
|
@State heightNum: number = 70
|
||||||
@State color: string = "#FDF5E7"
|
@State color: string = "#FDF5E7"
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
Row() {
|
Row() {
|
||||||
Row() {
|
Row() {
|
||||||
Text(this.label + ":").fontColor(this.color).fontSize(14)
|
Text(this.label + ":").fontColor(this.color).fontSize(20)
|
||||||
}.width(this.widthNum).justifyContent(FlexAlign.End)
|
}.width(this.widthNum).justifyContent(FlexAlign.End)
|
||||||
|
|
||||||
Row() {
|
Row() {
|
||||||
Text(this.value).fontColor(this.color)
|
Text(this.value).fontColor(this.color).fontSize(24)
|
||||||
}.width(80).justifyContent(FlexAlign.Start).margin({
|
}.width(150).justifyContent(FlexAlign.Start).margin({
|
||||||
left: 20
|
left: 20
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,11 +10,13 @@ export default struct CoordinateComponent {
|
|||||||
build() {
|
build() {
|
||||||
Flex({
|
Flex({
|
||||||
direction: FlexDirection.Column,
|
direction: FlexDirection.Column,
|
||||||
alignItems: ItemAlign.Center
|
alignItems: ItemAlign.Center,
|
||||||
|
justifyContent: FlexAlign.Center
|
||||||
}) {
|
}) {
|
||||||
Text("GPS坐标").fontColor("#FFB433").fontSize(20).margin({
|
Row() {
|
||||||
top: 10
|
Text("GPS坐标").fontColor("#FFB433").fontSize(20)
|
||||||
})
|
}.height(70)
|
||||||
|
|
||||||
Flex({
|
Flex({
|
||||||
wrap: FlexWrap.Wrap,
|
wrap: FlexWrap.Wrap,
|
||||||
direction: this.isItHorizontal ? FlexDirection.Row : FlexDirection.Column
|
direction: this.isItHorizontal ? FlexDirection.Row : FlexDirection.Column
|
||||||
@ -30,7 +32,10 @@ export default struct CoordinateComponent {
|
|||||||
}.width("100%")
|
}.width("100%")
|
||||||
}
|
}
|
||||||
.width("100%")
|
.width("100%")
|
||||||
.height(this.isItHorizontal ? 210 : "100%")
|
.height(this.isItHorizontal ? 280 : "100%")
|
||||||
.backgroundColor("#1A1A1A")
|
.backgroundColor("#1A1A1A")
|
||||||
|
.margin({
|
||||||
|
bottom: 20
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -20,6 +20,7 @@ export default struct SignalDisplayComponent {
|
|||||||
@Prop active: number = 0
|
@Prop active: number = 0
|
||||||
// 原始数据
|
// 原始数据
|
||||||
@State rawData: string = "$GPS,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
|
@State rawData: string = "$GPS,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"
|
||||||
|
@State heightNum: number = 1200
|
||||||
|
|
||||||
aboutToAppear(): void {
|
aboutToAppear(): void {
|
||||||
DifferentialAndSignal.onMsg(this.getMsg)
|
DifferentialAndSignal.onMsg(this.getMsg)
|
||||||
@ -47,7 +48,6 @@ export default struct SignalDisplayComponent {
|
|||||||
for (let i = 0; i <= 12; i++) {
|
for (let i = 0; i <= 12; i++) {
|
||||||
this.vehicleSignal[i].value = this.signArr[i+2]
|
this.vehicleSignal[i].value = this.signArr[i+2]
|
||||||
}
|
}
|
||||||
|
|
||||||
this.vehicleSignal[13].value = this.signArr[17]
|
this.vehicleSignal[13].value = this.signArr[17]
|
||||||
this.vehicleSignal[14].value = this.signArr[18]
|
this.vehicleSignal[14].value = this.signArr[18]
|
||||||
this.vehicleSignal[15].value = this.signArr[19]
|
this.vehicleSignal[15].value = this.signArr[19]
|
||||||
@ -85,11 +85,12 @@ export default struct SignalDisplayComponent {
|
|||||||
this.signArr[93] = str2 + str1 + str0
|
this.signArr[93] = str2 + str1 + str0
|
||||||
}
|
}
|
||||||
this.GPSColum[10].value = this.signArr[93]
|
this.GPSColum[10].value = this.signArr[93]
|
||||||
|
|
||||||
// this.signArr[53]=192.168.7.170'
|
|
||||||
this.vehicleSignal = JSON.parse(JSON.stringify((this.vehicleSignal)))
|
this.vehicleSignal = JSON.parse(JSON.stringify((this.vehicleSignal)))
|
||||||
this.signArr = JSON.parse(JSON.stringify((this.signArr)))
|
this.signArr = JSON.parse(JSON.stringify((this.signArr)))
|
||||||
this.GPSColum = JSON.parse(JSON.stringify((this.GPSColum)))
|
this.GPSColum = JSON.parse(JSON.stringify((this.GPSColum)))
|
||||||
|
// this.vehicleSignal = this.vehicleSignal.slice()
|
||||||
|
// this.signArr = this.signArr.slice()
|
||||||
|
// this.GPSColum = this.GPSColum.slice()
|
||||||
}
|
}
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
@ -97,26 +98,28 @@ export default struct SignalDisplayComponent {
|
|||||||
Flex({
|
Flex({
|
||||||
direction: FlexDirection.Column,
|
direction: FlexDirection.Column,
|
||||||
}) {
|
}) {
|
||||||
|
Scroll() {
|
||||||
// 信号查看
|
// 信号查看
|
||||||
if (this.active === 0) {
|
if (this.active === 0) {
|
||||||
// GPS信号展示
|
Column() {
|
||||||
GPSComponent({
|
|
||||||
data: this.signArr
|
|
||||||
})
|
|
||||||
// 车载信号以及车载坐标
|
// 车载信号以及车载坐标
|
||||||
CarComponent({
|
CarComponent({
|
||||||
data: this.vehicleSignal
|
data: this.vehicleSignal,
|
||||||
|
GPSData: this.signArr
|
||||||
})
|
})
|
||||||
CoordinateComponent({
|
CoordinateComponent({
|
||||||
data: this.GPSColum
|
data: this.GPSColum
|
||||||
})
|
})
|
||||||
|
}.height(this.heightNum).padding({
|
||||||
|
bottom: 20
|
||||||
|
})
|
||||||
} else if (this.active === 1) {
|
} else if (this.active === 1) {
|
||||||
// 原始数据
|
// 原始数据
|
||||||
Column() {
|
Column() {
|
||||||
Text(this.rawData).fontSize(20).fontColor("#fff")
|
Text(this.rawData).fontSize(20).fontColor("#fff")
|
||||||
}.backgroundColor("#282828").width("100%").height("100%")
|
}.backgroundColor("#282828").width("100%").height("100%")
|
||||||
}
|
}
|
||||||
|
}.height("100%").backgroundColor("#1A1A1A")
|
||||||
}
|
}
|
||||||
.width("100%")
|
.width("100%")
|
||||||
.height("100%")
|
.height("100%")
|
||||||
@ -129,8 +132,9 @@ export default struct SignalDisplayComponent {
|
|||||||
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
struct GPSComponent {
|
struct CarComponent {
|
||||||
@Prop data: Array<string>
|
@Prop data: Array<SignalDataType>
|
||||||
|
@Prop GPSData: Array<string>
|
||||||
@State ip: string = ""
|
@State ip: string = ""
|
||||||
|
|
||||||
aboutToAppear(): void {
|
aboutToAppear(): void {
|
||||||
@ -147,35 +151,36 @@ struct GPSComponent {
|
|||||||
|
|
||||||
build() {
|
build() {
|
||||||
Flex({
|
Flex({
|
||||||
wrap: FlexWrap.Wrap
|
wrap: FlexWrap.Wrap,
|
||||||
|
justifyContent: FlexAlign.Center
|
||||||
}) {
|
}) {
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "发送次数",
|
label: "发送次数",
|
||||||
value: this.data[49] || "-"
|
value: this.GPSData[49] || "-"
|
||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "固件版本",
|
label: "固件版本",
|
||||||
value: this.data[54] || "-"
|
value: this.GPSData[54] || "-"
|
||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "方向盘类型",
|
label: "方向盘类型",
|
||||||
value: this.data[50] || "-"
|
value: this.GPSData[50] || "-"
|
||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "按键数值",
|
label: "按键数值",
|
||||||
value: this.data[55] || "-"
|
value: this.GPSData[55] || "-"
|
||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "GPS错误次数",
|
label: "GPS错误次数",
|
||||||
value: this.data[60] || "-"
|
value: this.GPSData[60] || "-"
|
||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "汽车类型",
|
label: "汽车类型",
|
||||||
value: this.data[51] || "-"
|
value: this.GPSData[51] || "-"
|
||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "GPS板卡类型",
|
label: "GPS板卡类型",
|
||||||
value: this.data[56] || "-"
|
value: this.GPSData[56] || "-"
|
||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "本机IP",
|
label: "本机IP",
|
||||||
@ -183,47 +188,35 @@ struct GPSComponent {
|
|||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "接口心跳",
|
label: "接口心跳",
|
||||||
value: this.data[52] || "-"
|
value: this.GPSData[52] || "-"
|
||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "GPS板卡软件版本",
|
label: "GPS板卡软件版本",
|
||||||
value: this.data[57] || "-"
|
value: this.GPSData[57] || "-"
|
||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "改正数次数/改正数大小",
|
label: "改正数次数/改正数大小",
|
||||||
value: this.data[58] || "-"
|
value: this.GPSData[58] || "-"
|
||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "已工作时长/设定工作时长",
|
label: "已工作时长/设定工作时长",
|
||||||
value: this.data[61] || "-"
|
value: this.GPSData[61] || "-"
|
||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "GPS数据次数/数据长度",
|
label: "GPS数据次数/数据长度",
|
||||||
value: this.data[59] || "-"
|
value: this.GPSData[59] || "-"
|
||||||
})
|
})
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: "改正数据长度*数据长度-基准站RTCM改正数类型",
|
label: "改正数据长度*数据长度-基准站RTCM改正数类型",
|
||||||
value: this.data[62] || "-"
|
value: this.GPSData[62] || "-"
|
||||||
})
|
})
|
||||||
}.backgroundColor("#282828").width("100%").height(140)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Component
|
|
||||||
struct CarComponent {
|
|
||||||
@Prop data: Array<SignalDataType>
|
|
||||||
|
|
||||||
build() {
|
|
||||||
Flex({
|
|
||||||
wrap: FlexWrap.Wrap
|
|
||||||
}) {
|
|
||||||
ForEach(this.data, (item: SignalDataType) => {
|
ForEach(this.data, (item: SignalDataType) => {
|
||||||
BlockComponent({
|
BlockComponent({
|
||||||
label: item.key,
|
label: item.key,
|
||||||
value: item.value
|
value: item.value
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}.width("100%").backgroundColor("#282828").height(490)
|
}.width("100%").backgroundColor("#282828")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -168,48 +168,6 @@ export default class Judge {
|
|||||||
private isExamEnd: boolean
|
private isExamEnd: boolean
|
||||||
// 是否发送udp
|
// 是否发送udp
|
||||||
private isUdpEnd: boolean = false
|
private isUdpEnd: boolean = false
|
||||||
// 处理udp plc信号
|
|
||||||
handleUdp = async (msg: string) => {
|
|
||||||
const stachArr = msg.split(',')
|
|
||||||
if (stachArr[0] != '#DN_GD' || this.isUdpEnd) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const gpsPart = msg.split("#END$GPS,")[1];
|
|
||||||
const gpsStatus = gpsPart.split(",")[0];
|
|
||||||
if (gpsStatus === "4") {
|
|
||||||
dConsole.log(JudgeTag, "差分状态正常", gpsStatus)
|
|
||||||
this.judgeUI.isDwztRight = true
|
|
||||||
} else {
|
|
||||||
dConsole.log(JudgeTag, "差分状态异常", gpsStatus)
|
|
||||||
this.judgeUI.isDwztRight = false
|
|
||||||
}
|
|
||||||
this.judgeUI.isDwztRight
|
|
||||||
const plcData = await this.getPlcData(msg);
|
|
||||||
// 4.过程数据
|
|
||||||
// await this.fileLog?.setExamJudgeData(JSON.stringify(plcData))
|
|
||||||
dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(plcData))
|
|
||||||
//检测到有无锡所设备接入,需要发送特定的数据,供检测
|
|
||||||
// if (this.usbService.isWXUSBDevice) {
|
|
||||||
// const str = await senorToWXDataStr(msg);
|
|
||||||
// this.usbService.sendUSB(str)
|
|
||||||
// }
|
|
||||||
const param350: number = Reflect.get(this.judgeUI.judgeConfigObj, '350')
|
|
||||||
this.judgeUI.sd = ((param350 == 0 ? plcData.gps.sd : plcData.sensor.cs) as number * 1.852).toFixed(0) + ''
|
|
||||||
this.judgeUI.dw = (Math.floor(plcData.sensor.dw as number) || 0) + ''
|
|
||||||
//TODO 暂时关闭差分检测异常
|
|
||||||
// await this.checkDwzt(plcData.gps.dwzt,plcData.gps.jdzt);
|
|
||||||
if (!this.isExamEnd) {
|
|
||||||
await examJudgeRealExam(plcData)
|
|
||||||
}
|
|
||||||
// let udpIndex = AppStorage.get<number>('udpIndex') || 0;
|
|
||||||
// if (udpIndex % 5 === 0 && !this.isUdpEnd) {
|
|
||||||
// TODO UPD缺失
|
|
||||||
// const judgeUdp = globalThis.judgeUdp
|
|
||||||
// const bytes = await this.getMessageHeartbeat(this.isExamEnd);
|
|
||||||
// judgeUdp.send(bytes)
|
|
||||||
// }
|
|
||||||
// AppStorage.setOrCreate('udpIndex', udpIndex++)
|
|
||||||
}
|
|
||||||
//是否手动结束考试
|
//是否手动结束考试
|
||||||
private isManual: boolean = false
|
private isManual: boolean = false
|
||||||
//UDP服务序列号
|
//UDP服务序列号
|
||||||
@ -254,60 +212,6 @@ export default class Judge {
|
|||||||
dConsole.info(JudgeTag, '过程数据文件上传 end')
|
dConsole.info(JudgeTag, '过程数据文件上传 end')
|
||||||
}
|
}
|
||||||
private judgeTask: JudgeTask
|
private judgeTask: JudgeTask
|
||||||
// 检测扣分、结束项目时该项目是否开始
|
|
||||||
checkProjectIsStart = async (xmdm: number, currentType: 1 | 2, kf?: MarkRule) => {
|
|
||||||
if (xmdm == 20) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
const judgeUI = this.judgeUI;
|
|
||||||
const judgeTask = this.judgeTask;
|
|
||||||
const projectsObj: object = this.judgeUI.projectsObj
|
|
||||||
const currentProject: ProjectInfo = Reflect.get(projectsObj, xmdm)
|
|
||||||
const isUpload = currentProject.isUpload
|
|
||||||
|
|
||||||
//如果项目没有开始
|
|
||||||
dConsole.info(JudgeTag, 'surenjun isUpload=>', isUpload)
|
|
||||||
if (!isUpload) {
|
|
||||||
dConsole.info(JudgeTag, '项目补传开始')
|
|
||||||
//项目开始补传
|
|
||||||
judgeTask.addTask(async () => {
|
|
||||||
await this.beginProject(xmdm)
|
|
||||||
}, {
|
|
||||||
isDelay: true
|
|
||||||
})
|
|
||||||
judgeTask.addTask(async () => {
|
|
||||||
await this.uploadProgressPhoto(xmdm)
|
|
||||||
}, {
|
|
||||||
isDelay: true
|
|
||||||
})
|
|
||||||
currentProject.isUpload = true;
|
|
||||||
Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject)
|
|
||||||
//扣分补传
|
|
||||||
if (currentType == 2) {
|
|
||||||
judgeTask.addTask(async () => {
|
|
||||||
await this.pointsDedute(xmdm, kf!)
|
|
||||||
}, {
|
|
||||||
isDelay: true
|
|
||||||
})
|
|
||||||
}
|
|
||||||
//扣分补传判断是否合格 不合格补传项目结束
|
|
||||||
if (currentType == 1 || (currentType == 2 && this.totalScore < judgeUI.passingScore)) {
|
|
||||||
judgeTask.addTask(async () => {
|
|
||||||
await this.endProject(xmdm)
|
|
||||||
}, {
|
|
||||||
isDelay: true
|
|
||||||
})
|
|
||||||
currentProject.isEnd = true;
|
|
||||||
Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject)
|
|
||||||
}
|
|
||||||
judgeTask.addTask(async () => {
|
|
||||||
this.checkExamIsEnd()
|
|
||||||
})
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private tempData?: PLCType
|
private tempData?: PLCType
|
||||||
//实时计算gps经纬度距离
|
//实时计算gps经纬度距离
|
||||||
handDistance = async () => {
|
handDistance = async () => {
|
||||||
@ -358,40 +262,47 @@ export default class Judge {
|
|||||||
AppStorage.setOrCreate('msgStr', plc)
|
AppStorage.setOrCreate('msgStr', plc)
|
||||||
return tempData
|
return tempData
|
||||||
}
|
}
|
||||||
// 处理轨迹plc信号
|
// 处理udp plc信号
|
||||||
handleTrajectoryUdp = async (strArr: string[]) => {
|
handleUdp = async (msg: string) => {
|
||||||
let num = 2;
|
const stachArr = msg.split(',')
|
||||||
const judgeTimer = setInterval(async () => {
|
if (stachArr[0] != '#DN_GD' || this.isUdpEnd) {
|
||||||
const msgStr = strArr[num];
|
|
||||||
if (msgStr == '') {
|
|
||||||
dConsole.info(JudgeTag, '模拟数据考试结束')
|
|
||||||
clearInterval(judgeTimer)
|
|
||||||
this.checkExamIsEnd(true)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const msg: PLCType = JSON.parse(strArr[num]);
|
const gpsPart = msg.split("#END$GPS,")[1];
|
||||||
num++
|
const gpsStatus = gpsPart.split(",")[0];
|
||||||
|
if (gpsStatus === "4") {
|
||||||
|
dConsole.log(JudgeTag, "差分状态正常", gpsStatus)
|
||||||
|
this.judgeUI.isDwztRight = true
|
||||||
|
} else {
|
||||||
|
dConsole.log(JudgeTag, "差分状态异常", gpsStatus)
|
||||||
|
this.judgeUI.isDwztRight = false
|
||||||
|
}
|
||||||
|
this.judgeUI.isDwztRight
|
||||||
|
const plcData = await this.getPlcData(msg);
|
||||||
// 4.过程数据
|
// 4.过程数据
|
||||||
this.tempData = msg
|
// await this.fileLog?.setExamJudgeData(JSON.stringify(plcData))
|
||||||
// this.judgeUI.isDwztRight = (msg?.gps?.dwzt == 4 && msg?.gps?.jdzt == 3);
|
dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(plcData))
|
||||||
this.judgeUI.sd = Math.floor(msg?.gps?.sd * 1.852) + '';
|
//检测到有无锡所设备接入,需要发送特定的数据,供检测
|
||||||
this.judgeUI.dw = Math.floor(msg?.sensor?.dw) + ''
|
// if (this.usbService.isWXUSBDevice) {
|
||||||
this.plcData = msg
|
// const str = await senorToWXDataStr(msg);
|
||||||
// this.judgeUI.isDwztRight = msg.gps.dwzt == 4;
|
// this.usbService.sendUSB(str)
|
||||||
AppStorage.setOrCreate('msgStr', '')
|
// }
|
||||||
if (msg.method === 'examJudgeArtificialItem') {
|
const param350: number = Reflect.get(this.judgeUI.judgeConfigObj, '350')
|
||||||
this.setJudgeItem(msg.itemno, msg.type)
|
this.judgeUI.sd = ((param350 == 0 ? plcData.gps.sd : plcData.sensor.cs) as number * 1.852).toFixed(0) + ''
|
||||||
|
this.judgeUI.dw = (Math.floor(plcData.sensor.dw as number) || 0) + ''
|
||||||
|
//TODO 暂时关闭差分检测异常
|
||||||
|
// await this.checkDwzt(plcData.gps.dwzt,plcData.gps.jdzt);
|
||||||
|
if (!this.isExamEnd) {
|
||||||
|
await examJudgeRealExam(plcData)
|
||||||
}
|
}
|
||||||
if (msg.method === 'examJudgeArtificialMark') {
|
// let udpIndex = AppStorage.get<number>('udpIndex') || 0;
|
||||||
this.setJudgeItem(msg.itemno, msg.serial)
|
// if (udpIndex % 5 === 0 && !this.isUdpEnd) {
|
||||||
}
|
// TODO UPD缺失
|
||||||
await examJudgeRealExam(msg)
|
// const judgeUdp = globalThis.judgeUdp
|
||||||
// const bytes = await this.getMessageHeartbeat();
|
// const bytes = await this.getMessageHeartbeat(this.isExamEnd);
|
||||||
// bytes && globalThis.judgeUdp.send(bytes)
|
// judgeUdp.send(bytes)
|
||||||
|
// }
|
||||||
}, 200)
|
// AppStorage.setOrCreate('udpIndex', udpIndex++)
|
||||||
// TODO 定时器缺失
|
|
||||||
// globalThis.judgeTimer = judgeTimer;
|
|
||||||
}
|
}
|
||||||
private isEndTip: boolean = false;
|
private isEndTip: boolean = false;
|
||||||
//本地轨迹回放地址
|
//本地轨迹回放地址
|
||||||
@ -411,6 +322,32 @@ export default class Judge {
|
|||||||
const code = await writeObjectOut(JSON.parse(examDataStr), "", this.context);
|
const code = await writeObjectOut(JSON.parse(examDataStr), "", this.context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private artSubject3ProjectsCodesArr: number[] = [3, 9, 4, 10, 12, 11]
|
||||||
|
private lane: LANE = {
|
||||||
|
road: '', num: 0, count: 0
|
||||||
|
}
|
||||||
|
private disConnectNum: number = 0;
|
||||||
|
//调用监管接口
|
||||||
|
sendWriteObjectOut: SendWriteObjectOut = async (data, filePath) => {
|
||||||
|
const temp = await writeObjectOut(data, filePath, this.context);
|
||||||
|
dConsole.log(JudgeTag, "wzj", JSON.stringify(temp))
|
||||||
|
//断网&网络超时次数计算
|
||||||
|
if (temp.code == 2300007 || temp.code == 2300028) {
|
||||||
|
this.disConnectNum += 1;
|
||||||
|
if (this.disConnectNum < 5) {
|
||||||
|
return await this.sendWriteObjectOut(data, filePath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.disConnectNum >= 5) {
|
||||||
|
dConsole.info('surenjun', '123')
|
||||||
|
this.judgeUI.errorMsg = '当前的考试过程信息网络传输异常,程序点击确认将重启!';
|
||||||
|
this.judgeUI.disConnectErrorOpen = true
|
||||||
|
}
|
||||||
|
|
||||||
|
this.disConnectNum = 0
|
||||||
|
return temp
|
||||||
|
}
|
||||||
// 项目开始接口同步
|
// 项目开始接口同步
|
||||||
beginProject = async (ksxm: number) => {
|
beginProject = async (ksxm: number) => {
|
||||||
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
const carInfo = AppStorage.get<CarInfoType>('carInfo');
|
||||||
@ -514,32 +451,6 @@ export default class Judge {
|
|||||||
UploadRegulatoryCodeConversion('17C54', temp.code || 0)
|
UploadRegulatoryCodeConversion('17C54', temp.code || 0)
|
||||||
dConsole.info(JudgeTag, '上传照片 end')
|
dConsole.info(JudgeTag, '上传照片 end')
|
||||||
}
|
}
|
||||||
private artSubject3ProjectsCodesArr: number[] = [3, 9, 4, 10, 12, 11]
|
|
||||||
private lane: LANE = {
|
|
||||||
road: '', num: 0, count: 0
|
|
||||||
}
|
|
||||||
private disConnectNum: number = 0;
|
|
||||||
//调用监管接口
|
|
||||||
sendWriteObjectOut: SendWriteObjectOut = async (data, filePath) => {
|
|
||||||
const temp = await writeObjectOut(data, filePath, this.context);
|
|
||||||
dConsole.log(JudgeTag, "wzj", JSON.stringify(temp))
|
|
||||||
//断网&网络超时次数计算
|
|
||||||
if (temp.code == 2300007 || temp.code == 2300028) {
|
|
||||||
this.disConnectNum += 1;
|
|
||||||
if (this.disConnectNum < 5) {
|
|
||||||
return await this.sendWriteObjectOut(data, filePath)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.disConnectNum >= 5) {
|
|
||||||
dConsole.info('surenjun', '123')
|
|
||||||
this.judgeUI.errorMsg = '当前的考试过程信息网络传输异常,程序点击确认将重启!';
|
|
||||||
this.judgeUI.disConnectErrorOpen = true
|
|
||||||
}
|
|
||||||
|
|
||||||
this.disConnectNum = 0
|
|
||||||
return temp
|
|
||||||
}
|
|
||||||
private videoData?: RecordHandleType
|
private videoData?: RecordHandleType
|
||||||
//当前科目二的考试项目
|
//当前科目二的考试项目
|
||||||
private deductedPopShowTimer: number = 0;
|
private deductedPopShowTimer: number = 0;
|
||||||
@ -653,6 +564,95 @@ export default class Judge {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 检测扣分、结束项目时该项目是否开始
|
||||||
|
checkProjectIsStart = async (xmdm: number, currentType: 1 | 2, kf?: MarkRule) => {
|
||||||
|
if (xmdm == 20) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
const judgeUI = this.judgeUI;
|
||||||
|
const judgeTask = this.judgeTask;
|
||||||
|
const projectsObj: object = this.judgeUI.projectsObj
|
||||||
|
const currentProject: ProjectInfo = Reflect.get(projectsObj, xmdm)
|
||||||
|
const isUpload = currentProject.isUpload
|
||||||
|
|
||||||
|
//如果项目没有开始
|
||||||
|
dConsole.info(JudgeTag, 'surenjun isUpload=>', isUpload)
|
||||||
|
if (!isUpload) {
|
||||||
|
dConsole.info(JudgeTag, '项目补传开始')
|
||||||
|
//项目开始补传
|
||||||
|
judgeTask.addTask(async () => {
|
||||||
|
await this.beginProject(xmdm)
|
||||||
|
}, {
|
||||||
|
isDelay: true
|
||||||
|
})
|
||||||
|
judgeTask.addTask(async () => {
|
||||||
|
await this.uploadProgressPhoto(xmdm)
|
||||||
|
}, {
|
||||||
|
isDelay: true
|
||||||
|
})
|
||||||
|
currentProject.isUpload = true;
|
||||||
|
Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject)
|
||||||
|
//扣分补传
|
||||||
|
if (currentType == 2) {
|
||||||
|
judgeTask.addTask(async () => {
|
||||||
|
await this.pointsDedute(xmdm, kf!)
|
||||||
|
}, {
|
||||||
|
isDelay: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
//扣分补传判断是否合格 不合格补传项目结束
|
||||||
|
if (currentType == 1 || (currentType == 2 && this.totalScore < judgeUI.passingScore)) {
|
||||||
|
judgeTask.addTask(async () => {
|
||||||
|
await this.endProject(xmdm)
|
||||||
|
}, {
|
||||||
|
isDelay: true
|
||||||
|
})
|
||||||
|
currentProject.isEnd = true;
|
||||||
|
Reflect.set(this.judgeUI.projectsObj, xmdm, currentProject)
|
||||||
|
}
|
||||||
|
judgeTask.addTask(async () => {
|
||||||
|
this.checkExamIsEnd()
|
||||||
|
})
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 处理轨迹plc信号
|
||||||
|
handleTrajectoryUdp = async (strArr: string[]) => {
|
||||||
|
let num = 2;
|
||||||
|
const judgeTimer = setInterval(async () => {
|
||||||
|
const msgStr = strArr[num];
|
||||||
|
if (msgStr == '') {
|
||||||
|
dConsole.info(JudgeTag, '模拟数据考试结束')
|
||||||
|
clearInterval(judgeTimer)
|
||||||
|
this.checkExamIsEnd(true)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const msg: PLCType = JSON.parse(strArr[num]);
|
||||||
|
num++
|
||||||
|
// 4.过程数据
|
||||||
|
this.tempData = msg
|
||||||
|
// this.judgeUI.isDwztRight = (msg?.gps?.dwzt == 4 && msg?.gps?.jdzt == 3);
|
||||||
|
this.judgeUI.sd = Math.floor(msg?.gps?.sd * 1.852) + '';
|
||||||
|
this.judgeUI.dw = Math.floor(msg?.sensor?.dw) + ''
|
||||||
|
this.plcData = msg
|
||||||
|
// this.judgeUI.isDwztRight = msg.gps.dwzt == 4;
|
||||||
|
AppStorage.setOrCreate('msgStr', '')
|
||||||
|
if (msg.method === 'examJudgeArtificialItem') {
|
||||||
|
this.setJudgeItem(msg.itemno, msg.type)
|
||||||
|
}
|
||||||
|
if (msg.method === 'examJudgeArtificialMark') {
|
||||||
|
this.setJudgeItem(msg.itemno, msg.serial)
|
||||||
|
}
|
||||||
|
await examJudgeRealExam(msg)
|
||||||
|
// const bytes = await this.getMessageHeartbeat();
|
||||||
|
// bytes && globalThis.judgeUdp.send(bytes)
|
||||||
|
|
||||||
|
}, 200)
|
||||||
|
// TODO 定时器缺失
|
||||||
|
// globalThis.judgeTimer = judgeTimer;
|
||||||
|
}
|
||||||
|
|
||||||
constructor(judgeUI: JudgeUI) {
|
constructor(judgeUI: JudgeUI) {
|
||||||
this.serialIndex = 1;
|
this.serialIndex = 1;
|
||||||
@ -894,6 +894,7 @@ export default class Judge {
|
|||||||
//项目结束
|
//项目结束
|
||||||
case 2: {
|
case 2: {
|
||||||
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
const project: ProjectInfo = Reflect.get(judgeUI.projectsObj, xmdm)
|
||||||
|
dConsole.log(JudgeTag, "项目结束判定", xmdm, project)
|
||||||
const xmmcCode = project.projectCodeCenter || "";
|
const xmmcCode = project.projectCodeCenter || "";
|
||||||
project.type = (xmjs.xmhg === 0 ? '4' : '3')
|
project.type = (xmjs.xmhg === 0 ? '4' : '3')
|
||||||
|
|
||||||
@ -1628,6 +1629,7 @@ export default class Judge {
|
|||||||
}
|
}
|
||||||
// 统计必考项目、所有项目、已考数量
|
// 统计必考项目、所有项目、已考数量
|
||||||
setCountItems = async () => {
|
setCountItems = async () => {
|
||||||
|
dConsole.log(JudgeTag, "项目结束判定,统计考试项目")
|
||||||
const projectsObj: object = this.judgeUI.projectsObj;
|
const projectsObj: object = this.judgeUI.projectsObj;
|
||||||
//必考项目数量 必考项目已考数量
|
//必考项目数量 必考项目已考数量
|
||||||
let projectNum = 0, endProjectsNum = 0;
|
let projectNum = 0, endProjectsNum = 0;
|
||||||
@ -1723,7 +1725,7 @@ export default class Judge {
|
|||||||
dConsole.info(JudgeTag, '2.注册日志回调完成')
|
dConsole.info(JudgeTag, '2.注册日志回调完成')
|
||||||
|
|
||||||
let initInfo: JudgeInitObj = isTrajectoryOpen ? JSON.parse(strArr[0]) : await this.getJudgeInitData();
|
let initInfo: JudgeInitObj = isTrajectoryOpen ? JSON.parse(strArr[0]) : await this.getJudgeInitData();
|
||||||
// await fileLog?.setExamJudgeData(JSON.stringify(initInfo))
|
dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(initInfo))
|
||||||
//相关评判初始化只做一次
|
//相关评判初始化只做一次
|
||||||
if (!isJudgeInitBool) {
|
if (!isJudgeInitBool) {
|
||||||
dConsole.log(JudgeTag, "评判初始化参数", initInfo)
|
dConsole.log(JudgeTag, "评判初始化参数", initInfo)
|
||||||
@ -1767,6 +1769,7 @@ export default class Judge {
|
|||||||
} else {
|
} else {
|
||||||
beginExamInfo = await getJudgeBeginData()
|
beginExamInfo = await getJudgeBeginData()
|
||||||
}
|
}
|
||||||
|
dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, JSON.stringify(beginExamInfo))
|
||||||
if (beginExamInfo) {
|
if (beginExamInfo) {
|
||||||
await examJudgeBeginExam(beginExamInfo);
|
await examJudgeBeginExam(beginExamInfo);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -72,6 +72,10 @@ class serialPortService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
offMsg() {
|
||||||
|
this.events = [];
|
||||||
|
}
|
||||||
|
|
||||||
async closed() {
|
async closed() {
|
||||||
const res = await CancelReceiveSerialPortData(this.fd);
|
const res = await CancelReceiveSerialPortData(this.fd);
|
||||||
this.events = [];
|
this.events = [];
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
// 处理worker线程的消息tcp拿差分改正数,udp给后置机
|
// 处理worker线程的消息tcp拿差分改正数,udp给后置机
|
||||||
import worker, { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope } from '@ohos.worker';
|
import worker, { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope } from '@ohos.worker';
|
||||||
import { WorkerTag } from '../config';
|
import { SerialPortTag, WorkerTag } from '../config';
|
||||||
import {
|
import {
|
||||||
CenterCallBackMsgType,
|
CenterCallBackMsgType,
|
||||||
EnvironmentConfigurationType,
|
EnvironmentConfigurationType,
|
||||||
@ -68,7 +68,7 @@ function getDataFn(config: EnvironmentConfigurationType) {
|
|||||||
if (data !== "" && config.carType !== "2") {
|
if (data !== "" && config.carType !== "2") {
|
||||||
// TODO
|
// TODO
|
||||||
// 需要观察
|
// 需要观察
|
||||||
// console.log(WorkerTag, "后置机消息", data)
|
console.log(WorkerTag, "后置机消息", data)
|
||||||
const res = await SerialPortService.getData()
|
const res = await SerialPortService.getData()
|
||||||
if (res.length > 0) {
|
if (res.length > 0) {
|
||||||
const dataArray = data.split(",");
|
const dataArray = data.split(",");
|
||||||
@ -76,7 +76,7 @@ function getDataFn(config: EnvironmentConfigurationType) {
|
|||||||
dataArray[28] = res[9].toString();
|
dataArray[28] = res[9].toString();
|
||||||
data = dataArray.join(",");
|
data = dataArray.join(",");
|
||||||
}
|
}
|
||||||
// console.log(SerialPortTag, "处理完的档位信号", data)
|
console.log(SerialPortTag, "处理完的档位信号", data)
|
||||||
workerPort.postMessage(
|
workerPort.postMessage(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
type: WorkerBackMessageType.ObtainUdpData,
|
type: WorkerBackMessageType.ObtainUdpData,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user