From baa6b805561e1ee75adc3f85e7370b6f2d34eb01 Mon Sep 17 00:00:00 2001 From: wangzhongjie Date: Wed, 16 Jul 2025 16:44:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=BF=87=E7=A8=8B=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=86=99=E5=85=A5=E6=96=87=E4=BB=B6,=E5=8E=8B=E6=B5=8B0.1?= =?UTF-8?q?=E7=A7=92=E5=90=8C=E6=97=B6=E5=86=99=E5=85=A58=E4=B8=AA?= =?UTF-8?q?=E6=96=87=E4=BB=B6,=E5=86=991000=E6=AC=A1,cpu=E6=9C=80=E5=A4=A7?= =?UTF-8?q?=E6=B3=A2=E5=8A=A85%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/ets/mock/Test.ets | 1 + entry/src/main/ets/mock/index.ets | 3 +- entry/src/main/ets/model/Worker.ets | 27 ++++++++++------- entry/src/main/ets/pages/Judge.ets | 26 ++++++++++++++-- entry/src/main/ets/utils/Common.ets | 4 +-- entry/src/main/ets/utils/LogWorker.ets | 9 ++++++ entry/src/main/ets/workers/Log.ets | 42 ++++++++++++++++++-------- 7 files changed, 82 insertions(+), 30 deletions(-) create mode 100644 entry/src/main/ets/mock/Test.ets diff --git a/entry/src/main/ets/mock/Test.ets b/entry/src/main/ets/mock/Test.ets new file mode 100644 index 0000000..cfa44ec --- /dev/null +++ b/entry/src/main/ets/mock/Test.ets @@ -0,0 +1 @@ +export const ProcessDataMock:string="#DN_GD,$PLC,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-0_0,0,0,0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0,15802,0,1,0_0_0_0,0.0.0.0,V9.1_V2.1_1,65535,0,0,0/0,15802/292,0,0/0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,#END$GPS,1,16,6.068,1.301,0.000,1.07,0.64,+0.0000,+0.0000,0,091022,080109.20,3155.6715075,11851.9196718,0.012,#END" \ No newline at end of file diff --git a/entry/src/main/ets/mock/index.ets b/entry/src/main/ets/mock/index.ets index add1ef2..d9d3a5d 100644 --- a/entry/src/main/ets/mock/index.ets +++ b/entry/src/main/ets/mock/index.ets @@ -6,4 +6,5 @@ export * from "./Judge" export * from "./SignDisplay" -export * from "./CarCheck" \ No newline at end of file +export * from "./CarCheck" +export * from "./Test" \ No newline at end of file diff --git a/entry/src/main/ets/model/Worker.ets b/entry/src/main/ets/model/Worker.ets index 887bd3f..a02bc54 100644 --- a/entry/src/main/ets/model/Worker.ets +++ b/entry/src/main/ets/model/Worker.ets @@ -32,7 +32,7 @@ export interface LogWorkerMessage { type: WorkerMessageType; data?: string; studentDirName?: string; - processDataType?:ProcessDataEnumType + processDataType?: ProcessDataEnumType } //枚举 @@ -49,28 +49,33 @@ export enum WorkerMessageType { ExamProcessInit = 'examProcessInit', // 写过程数据 WriteProcessData = 'writeProcessData', -// 关闭过程数据 - CloseProcessData='closeProcessData' + // 关闭过程数据 + CloseProcessData = 'closeProcessData' } // 过程数据枚举 export enum ProcessDataEnumType { //four_one_log_byte_data - FourOneLogByteData = 0, + FourOneLogByteData = "0", //four_one_log_data - FourOneLogData = 1, + FourOneLogData = "1", //judge_exam_data - JudgeExamData = 2, + JudgeExamData = "2", //judge_log_data - JudgeLogData = 3, + JudgeLogData = "3", // judge_progress_callback_data - JudgeProgressCallbackData = 4, + JudgeProgressCallbackData = "4", //plc_data - PlcData = 5, + PlcData = "5", //wuxi_exam_data - WuxiExam = 6, + WuxiExam = "6", //wuxi_progress_data - WuxiProgressData = 7 + WuxiProgressData = "7" +} + +export interface FileQueueType { + type: ProcessDataEnumType, + data: string } export interface LogPathType { diff --git a/entry/src/main/ets/pages/Judge.ets b/entry/src/main/ets/pages/Judge.ets index 745f38a..cac522f 100644 --- a/entry/src/main/ets/pages/Judge.ets +++ b/entry/src/main/ets/pages/Judge.ets @@ -45,7 +45,7 @@ import dayTs from '../utils/Date'; import { GetCurrentTime } from '../utils/Common'; import FileUtils from '../utils/FileUtils'; import SignalTrajectoryDialog from './Judge/SignalTrajectoryDialog'; -import { DefaultJudgeConfigData } from '../mock'; +import { DefaultJudgeConfigData, ProcessDataMock } from '../mock'; import { dConsole } from '../utils/LogWorker'; import ConfirmDialog from './compontents/ConfirmDialog'; import CarLoadingDialog from './compontents/CarLoading'; @@ -206,7 +206,28 @@ struct JudgePage { this.startFullTime = GetCurrentTime(1); this.startTime = dayTs().format("YYYY-MM-DD HH:mm:ss") this.startExamTime = dayTs().format("YYYY-MM-DD HH:mm:ss") - + // let count = 0; + // const totalTimes = 1000; + // const intervalTime = 100; // 0.1秒 = 100毫秒 + // + // const timer = setInterval(() => { + // if (count < totalTimes) { + // dConsole.writeProcessData(ProcessDataEnumType.FourOneLogByteData, ProcessDataMock); + // dConsole.writeProcessData(ProcessDataEnumType.FourOneLogData, ProcessDataMock); + // dConsole.writeProcessData(ProcessDataEnumType.JudgeExamData, ProcessDataMock); + // dConsole.writeProcessData(ProcessDataEnumType.JudgeLogData, ProcessDataMock); + // dConsole.writeProcessData(ProcessDataEnumType.JudgeProgressCallbackData, ProcessDataMock); + // dConsole.writeProcessData(ProcessDataEnumType.PlcData, ProcessDataMock); + // dConsole.writeProcessData(ProcessDataEnumType.WuxiExam, ProcessDataMock); + // dConsole.writeProcessData(ProcessDataEnumType.WuxiProgressData, ProcessDataMock); + // count++; + // console.log(`已调用 ${count} 次`); + // } else { + // dConsole.closeProcessData() + // clearInterval(timer); + // console.log('已完成1000次调用'); + // } + // }, intervalTime); //初始化数据库表 await this.initDb() //断点续考 @@ -718,6 +739,7 @@ struct JudgePage { singlePlay: this.singlePlay, judgeConfigObj: this.judgeConfigObj, signalViewingClick: () => { + dConsole.writeProcessData(ProcessDataEnumType.FourOneLogByteData, '测试测试') this.signalTrajectoryDialogController.open() }, artificialEvaluationClick: () => { diff --git a/entry/src/main/ets/utils/Common.ets b/entry/src/main/ets/utils/Common.ets index 8552231..7f7457e 100644 --- a/entry/src/main/ets/utils/Common.ets +++ b/entry/src/main/ets/utils/Common.ets @@ -223,11 +223,9 @@ export function CreateDir(path: string): Promise { export function EditFile(fd: number, data: string): Promise { return new Promise((resolve, reject) => { try { - let result = fs.writeSync(fd, data + "\n") - console.log("创建文件之写文件成功", result.toString()) + fs.writeSync(fd, data + "\n") resolve(true) } catch (e) { - console.log("创建文件之写文件失败") reject(false) } }) diff --git a/entry/src/main/ets/utils/LogWorker.ets b/entry/src/main/ets/utils/LogWorker.ets index ab53402..1ec44b6 100644 --- a/entry/src/main/ets/utils/LogWorker.ets +++ b/entry/src/main/ets/utils/LogWorker.ets @@ -74,6 +74,15 @@ class logWorker { this.workerInstance?.postMessage(JSON.stringify(params)) } } + // 关闭过程数据写入 + closeProcessData(){ + let params: LogWorkerMessage = { + type: WorkerMessageType.CloseProcessData, + } + if (this.isLogEnabled === "1") { + this.workerInstance?.postMessage(JSON.stringify(params)) + } + } // 通用日志方法 private logWithLevel(level: 'log' | 'info' | 'error', ...args: ESObject[]): void { diff --git a/entry/src/main/ets/workers/Log.ets b/entry/src/main/ets/workers/Log.ets index 20623f5..204569a 100644 --- a/entry/src/main/ets/workers/Log.ets +++ b/entry/src/main/ets/workers/Log.ets @@ -1,13 +1,22 @@ import worker, { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope } from '@ohos.worker'; import { GlobalConfig } from '../config'; -import { LogFileFd, LogPathType, LogWorkerMessage, ProcessDataEnumType, WorkerMessageType } from '../model'; +import { + FileQueueType, + LogFileFd, + LogPathType, + LogWorkerMessage, + ProcessDataEnumType, + WorkerMessageType +} from '../model'; import { CreateDir, CreateFile, EditFile, IsExit } from '../utils/Common'; import dayTs from '../utils/Date'; import fs from '@ohos.file.fs'; const workerPort: ThreadWorkerGlobalScope = worker.workerPort; -const fileNameArr: string[] = ["four_one_log_byte_data.text", "four_one_log_data.txt", "judge_exam_data.txt", "judge_log_data.txt", "judge_progress_callback_data.txt", "plc_data.txt", "wuxi_exam_data.txt", "wuxi_progress_data.txt"] +const fileNameArr: string[] = ["four_one_log_byte_data.txt", "four_one_log_data.txt", "judge_exam_data.txt", "judge_log_data.txt", "judge_progress_callback_data.txt", "plc_data.txt", "wuxi_exam_data.txt", "wuxi_progress_data.txt"] let fileFdArr: number[] = [] +let writeQueue: Array = []; +let isProcessing = false; workerPort.onmessage = (e: MessageEvents) => { console.log("日志系统worker收到消息") // 日志文件目录 @@ -15,7 +24,6 @@ workerPort.onmessage = (e: MessageEvents) => { log: `${GlobalConfig.commonFileWriteAddress}/logs/${dayTs().format("YYYY_MM_DD")}/log/log.log`, error: `${GlobalConfig.commonFileWriteAddress}/logs/${dayTs().format("YYYY_MM_DD")}/log/error.log`, } - let logFileFd: LogFileFd = {} const result: LogWorkerMessage = JSON.parse(e.data); if (result.type === WorkerMessageType.Init) { InitLog() @@ -25,8 +33,8 @@ workerPort.onmessage = (e: MessageEvents) => { InitExam(result.studentDirName) } // 写过程数据 - if (result.type === WorkerMessageType.WriteProcessData&&result.processDataType) { - WriteProcessData(result.processDataType, result.data||"") + if (result.type === WorkerMessageType.WriteProcessData && result.processDataType) { + WriteProcessData(result.processDataType, result.data || "") } // 关闭过程数据 if (result.type === WorkerMessageType.CloseProcessData) { @@ -70,7 +78,7 @@ async function InitLog() { // 初始化学员过程数据目录 async function InitExam(dirName: string) { - console.log("初始化过程",dirName) + console.log("初始化过程", dirName) let date = dayTs().format("YYYY_MM_DD") const path = `${GlobalConfig.commonFileWriteAddress}/logs/${date}/${dirName}` const nameDirIsExit = await IsExit(path) @@ -88,21 +96,29 @@ async function InitExam(dirName: string) { // 写过程数据 async function WriteProcessData(type: ProcessDataEnumType, data: string) { - let index = Number(type) - console.log("创建文件",type,index.toString(),data) - let result=await EditFile(fileFdArr[index], data) - if(result){ - // 写文件成功 - }else{ - // 写文件失败 + writeQueue.push({ type, data }); + + if (!isProcessing) { + processQueue(); } } +async function processQueue() { + isProcessing = true; + while (writeQueue.length > 0) { + const item = writeQueue.shift()!; + const index = Number(item.type); + await EditFile(fileFdArr[index], item.data); + } + isProcessing = false; +} + // 关闭过程数据 function CloseProcessData() { fileFdArr.forEach((item: number) => { fs.closeSync(item) }) + console.log("关闭过程数据") } workerPort.onmessageerror = (e: MessageEvents) => {