fix: 过程数据完善

This commit is contained in:
wangzhongjie 2025-07-16 15:44:49 +08:00
parent 797b785721
commit f0653c0c92
7 changed files with 106 additions and 29 deletions

View File

@ -31,7 +31,8 @@ export enum WorkerBackMessageType {
export interface LogWorkerMessage { export interface LogWorkerMessage {
type: WorkerMessageType; type: WorkerMessageType;
data?: string; data?: string;
studentDirName?: string studentDirName?: string;
processDataType?:ProcessDataEnumType
} }
//枚举 //枚举
@ -45,7 +46,31 @@ export enum WorkerMessageType {
// 初始化过程数据,初始化到人员以及人员里面各个目录 // 初始化过程数据,初始化到人员以及人员里面各个目录
ProcessDataInit = 'processDataInit', ProcessDataInit = 'processDataInit',
// 初始化考试过程 // 初始化考试过程
ExamProcessInit = 'examProcessInit' ExamProcessInit = 'examProcessInit',
// 写过程数据
WriteProcessData = 'writeProcessData',
// 关闭过程数据
CloseProcessData='closeProcessData'
}
// 过程数据枚举
export enum ProcessDataEnumType {
//four_one_log_byte_data
FourOneLogByteData = 0,
//four_one_log_data
FourOneLogData = 1,
//judge_exam_data
JudgeExamData = 2,
//judge_log_data
JudgeLogData = 3,
// judge_progress_callback_data
JudgeProgressCallbackData = 4,
//plc_data
PlcData = 5,
//wuxi_exam_data
WuxiExam = 6,
//wuxi_progress_data
WuxiProgressData = 7
} }
export interface LogPathType { export interface LogPathType {

View File

@ -37,7 +37,8 @@ import {
SYSSET, SYSSET,
SyssetConfig, SyssetConfig,
SYSTEMPARMARR, SYSTEMPARMARR,
User User,
ProcessDataEnumType
} from '../model'; } from '../model';
import { GetSyncData } from '../utils/table/Operation'; import { GetSyncData } from '../utils/table/Operation';
import dayTs from '../utils/Date'; import dayTs from '../utils/Date';

View File

@ -44,6 +44,7 @@ import {
LANE, LANE,
MarkRule, MarkRule,
PLCType, PLCType,
ProcessDataEnumType,
ProjectInfo, ProjectInfo,
RecordHandleType, RecordHandleType,
RegulatoryInterfaceParams, RegulatoryInterfaceParams,
@ -1967,6 +1968,7 @@ export default class Judge {
const result: WorkerBackMessage = JSON.parse(data) const result: WorkerBackMessage = JSON.parse(data)
if (result.type === WorkerBackMessageType.ObtainUdpData) { if (result.type === WorkerBackMessageType.ObtainUdpData) {
handleUdp(result.data as string) handleUdp(result.data as string)
dConsole.writeProcessData(ProcessDataEnumType.PlcData, result.data as string)
} }
//TODO UDP修改 //TODO UDP修改
// const udpIndex = globalThis.udpIndex; // const udpIndex = globalThis.udpIndex;

View File

@ -34,28 +34,28 @@ export default class FileLog {
} }
// 无锡所过程数据 // 无锡所过程数据
public setExamJudgeWuxiProgressData = async (str: string) => { public setExamJudgeWuxiProgressData = async (str: string) => {
this.examJudgeWuxiProgressDataFd = // this.examJudgeWuxiProgressDataFd =
await this.fileUtil.editFile(`${this.folderPath}/wuxi_progress_data.txt`, str); // await this.fileUtil.editFile(`${this.folderPath}/wuxi_progress_data.txt`, str);
} }
// plc文件数据 // plc文件数据
public setPlcProgressData = async (str: Object) => { public setPlcProgressData = async (str: Object) => {
this.plcDataFd = // this.plcDataFd =
await this.fileUtil.editFile(`${this.folderPath}/plc_data.txt`, JSON.stringify(str)); // await this.fileUtil.editFile(`${this.folderPath}/plc_data.txt`, JSON.stringify(str));
} }
// 过程评判json数据 // 过程评判json数据
public setExamJudgeData = async (str: string) => { public setExamJudgeData = async (str: string) => {
this.examJudgeDataFd = // this.examJudgeDataFd =
await this.fileUtil.editFile(`${this.folderPath}/judge_exam_data.txt`, str); // await this.fileUtil.editFile(`${this.folderPath}/judge_exam_data.txt`, str);
} }
// 过程评判回调数据 // 过程评判回调数据
public setExamJudgeCallbackData = async (str: string) => { public setExamJudgeCallbackData = async (str: string) => {
this.examJudgeCallbackDataFd = // this.examJudgeCallbackDataFd =
await this.fileUtil.editFile(`${this.folderPath}/judge_progress_callback_data.txt`, str); // await this.fileUtil.editFile(`${this.folderPath}/judge_progress_callback_data.txt`, str);
} }
// 过程评判日志调数据 // 过程评判日志调数据
public setExamJudgeLogData = async (str: string) => { public setExamJudgeLogData = async (str: string) => {
this.examJudgeLogDataFd = // this.examJudgeLogDataFd =
await this.fileUtil.editFile(`${this.folderPath}/judge_log_data.txt`, str); // await this.fileUtil.editFile(`${this.folderPath}/judge_log_data.txt`, str);
} }
// 设置四合一画面数据 // 设置四合一画面数据
public setFourAndOneLogData = async (str: string) => { public setFourAndOneLogData = async (str: string) => {
@ -103,13 +103,13 @@ export default class FileLog {
// 设置文件夹 // 设置文件夹
public initFileLogo = async (stuInfo: StuInfo) => { public initFileLogo = async (stuInfo: StuInfo) => {
// this.stuInfo = stuInfo; // this.stuInfo = stuInfo;
const time = GetCurrentTime() // const time = GetCurrentTime()
const date = time.split(' ')[0].split('-').join('_') // const date = time.split(' ')[0].split('-').join('_')
const hourTime = time.split(' ')[1].split(':').join('_') // const hourTime = time.split(' ')[1].split(':').join('_')
const folderPath = // const folderPath =
await this.fileUtil.initFolder(`/logs/${date}/${date}_${hourTime}_${stuInfo.lsh}_${stuInfo.idCard}_${stuInfo.name}`); // await this.fileUtil.initFolder(`/logs/${date}/${date}_${hourTime}_${stuInfo.lsh}_${stuInfo.idCard}_${stuInfo.name}`);
this.folderPath = folderPath; // this.folderPath = folderPath;
return folderPath return "folderPath"
} }
constructor(context: common.UIAbilityContext) { constructor(context: common.UIAbilityContext) {

View File

@ -217,6 +217,22 @@ export function CreateDir(path: string): Promise<boolean> {
}); });
} }
/**
* 写文件
*/
export function EditFile(fd: number, data: string): Promise<boolean> {
return new Promise((resolve, reject) => {
try {
let result = fs.writeSync(fd, data + "\n")
console.log("创建文件之写文件成功", result.toString())
resolve(true)
} catch (e) {
console.log("创建文件之写文件失败")
reject(false)
}
})
}
/** /**
* 创建文件 * 创建文件
* @params path 文件具体路径 * @params path 文件具体路径

View File

@ -1,7 +1,7 @@
// 日志向外暴露的方法 // 日志向外暴露的方法
import dayTs from './Date'; import dayTs from './Date';
import worker from '@ohos.worker'; import worker from '@ohos.worker';
import { LogWorkerMessage, WorkerMessageType } from '../model/index'; import { LogWorkerMessage, ProcessDataEnumType, WorkerMessageType } from '../model/index';
const MAX_MESSAGE_LENGTH = 300; const MAX_MESSAGE_LENGTH = 300;
const LOG_CHUNK_PREFIX = '[切割消息序号'; const LOG_CHUNK_PREFIX = '[切割消息序号';
@ -63,12 +63,16 @@ class logWorker {
} }
} }
// 过程数据初始化 // 过程数据写入
processDataInit(carNo: string, name: string) { writeProcessData(type: ProcessDataEnumType, data: string) {
let date = dayTs().format("YYYY_MM_DD_HH_mm_ss"); let params: LogWorkerMessage = {
// 组装文件夹名 2025_06_18_09_14_36_2506474075216_371427200311275216_王宏伟 type: WorkerMessageType.WriteProcessData,
let folderName = `${date}_${carNo}_${name}`; data,
// 内部包含文件 processDataType: type
}
if (this.isLogEnabled === "1") {
this.workerInstance?.postMessage(JSON.stringify(params))
}
} }
// 通用日志方法 // 通用日志方法

View File

@ -1,8 +1,9 @@
import worker, { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope } from '@ohos.worker'; import worker, { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope } from '@ohos.worker';
import { GlobalConfig } from '../config'; import { GlobalConfig } from '../config';
import { LogFileFd, LogPathType, LogWorkerMessage, WorkerMessageType } from '../model'; import { LogFileFd, LogPathType, LogWorkerMessage, ProcessDataEnumType, WorkerMessageType } from '../model';
import { CreateDir, CreateFile, IsExit } from '../utils/Common'; import { CreateDir, CreateFile, EditFile, IsExit } from '../utils/Common';
import dayTs from '../utils/Date'; import dayTs from '../utils/Date';
import fs from '@ohos.file.fs';
const workerPort: ThreadWorkerGlobalScope = worker.workerPort; 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.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"]
@ -19,9 +20,18 @@ workerPort.onmessage = (e: MessageEvents) => {
if (result.type === WorkerMessageType.Init) { if (result.type === WorkerMessageType.Init) {
InitLog() InitLog()
} }
// 初始化过程数据
if (result.type === WorkerMessageType.ExamProcessInit && result.studentDirName) { if (result.type === WorkerMessageType.ExamProcessInit && result.studentDirName) {
InitExam(result.studentDirName) InitExam(result.studentDirName)
} }
// 写过程数据
if (result.type === WorkerMessageType.WriteProcessData&&result.processDataType) {
WriteProcessData(result.processDataType, result.data||"")
}
// 关闭过程数据
if (result.type === WorkerMessageType.CloseProcessData) {
CloseProcessData()
}
} }
// 初始化日志 // 初始化日志
@ -60,6 +70,7 @@ async function InitLog() {
// 初始化学员过程数据目录 // 初始化学员过程数据目录
async function InitExam(dirName: string) { async function InitExam(dirName: string) {
console.log("初始化过程",dirName)
let date = dayTs().format("YYYY_MM_DD") let date = dayTs().format("YYYY_MM_DD")
const path = `${GlobalConfig.commonFileWriteAddress}/logs/${date}/${dirName}` const path = `${GlobalConfig.commonFileWriteAddress}/logs/${date}/${dirName}`
const nameDirIsExit = await IsExit(path) const nameDirIsExit = await IsExit(path)
@ -75,6 +86,24 @@ 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{
// 写文件失败
}
}
// 关闭过程数据
function CloseProcessData() {
fileFdArr.forEach((item: number) => {
fs.closeSync(item)
})
}
workerPort.onmessageerror = (e: MessageEvents) => { workerPort.onmessageerror = (e: MessageEvents) => {
} }