Compare commits

...

3 Commits

Author SHA1 Message Date
bd62ff705d 外殼 2024-08-22 15:24:15 +08:00
2fb04cbc52 Merge branch 'dev' into lv_chengmai 2024-08-21 18:06:23 +08:00
65b80bb0fb feat:评判更新 2024-08-21 17:53:14 +08:00
11 changed files with 94 additions and 65 deletions

View File

@ -49,6 +49,8 @@ export async function deleteAllFIleLog(path){
let filenames = fs.listFileSync(path, options); let filenames = fs.listFileSync(path, options);
console.info("listFile succeed",JSON.stringify(filenames)); console.info("listFile succeed",JSON.stringify(filenames));
for (let i = 0; i < filenames.length; i++) { for (let i = 0; i < filenames.length; i++) {
console.info("listFile succeed",JSON.stringify(filenames[i]));
if(isSevenDaysAgo(filenames[i])){ if(isSevenDaysAgo(filenames[i])){
fs.rmdir(path+filenames[i], (err) => { fs.rmdir(path+filenames[i], (err) => {
if (err) { if (err) {
@ -65,10 +67,11 @@ export async function deleteAllFIleLog(path){
function isSevenDaysAgo(date) { function isSevenDaysAgo(date) {
const today = new Date(); // 当前日期 const today = new Date(); // 当前日期
const target = new Date(date); // 需要判断的日期 const target = new Date(date); // 需要判断的日期
console.info("listFile succeed1",JSON.stringify(target));
const diff = today.getTime() - target.getTime(); // 计算两个日期之间的毫秒数差异 const diff = today.getTime() - target.getTime(); // 计算两个日期之间的毫秒数差异
const diffDays = diff / (1000 * 60 * 60 * 24); // 将毫秒转换为天数 const diffDays = diff / (1000 * 60 * 60 * 24); // 将毫秒转换为天数
console.info("listFile succeed2",JSON.stringify(diffDays));
// 如果差异天数正好是7则原日期是当前日期的前七天 // 如果差异天数正好是7则原日期是当前日期的前七天
return diffDays > 7; return diffDays > 7;
} }

View File

@ -303,9 +303,9 @@ export default class UdpClientByCenter {
if (strachArr[0] != '#DN_GD') { if (strachArr[0] != '#DN_GD') {
return return
} }
console.log(`${TAG} udp222 on message array buffer:${str}`);
strachArr[28] = globalThis.chuankoMsg || strachArr[28] strachArr[28] = globalThis.chuankoMsg || strachArr[28]
console.log(`${TAG} udp222 on message array buffer:${str}`);
// this.stashFn(str) // this.stashFn(str)
const newArr = JSON.parse(JSON.stringify(strachArr)) const newArr = JSON.parse(JSON.stringify(strachArr))
@ -316,6 +316,7 @@ export default class UdpClientByCenter {
if(strachArr[83]!='4'){ if(strachArr[83]!='4'){
this.chafenFlag++ this.chafenFlag++
if(this.chafenFlag>=15&&!globalThis.dialogOpen){ if(this.chafenFlag>=15&&!globalThis.dialogOpen){
getUDP(globalThis.context,true)
globalThis.title='差分状态异常' globalThis.title='差分状态异常'
globalThis.type='3' globalThis.type='3'
AppStorage.SetOrCreate('errorMsg', 1); AppStorage.SetOrCreate('errorMsg', 1);

View File

@ -97,7 +97,7 @@ export const CandidateData: Array<User> = [
{ {
sfzmhm: '3423231995014700005', sfzmhm: '3423231995014700005',
xm: '测试学员5', xm: '测试学员5',
lsh: '0000000000004', lsh: '0000000000005',
ksy1: '考试员2', ksy1: '考试员2',
id: '002', id: '002',
kszp: '', kszp: '',
@ -120,7 +120,7 @@ export const CandidateData: Array<User> = [
{ {
sfzmhm: '342323199501470016', sfzmhm: '342323199501470016',
xm: '测试学员6', xm: '测试学员6',
lsh: '0000000000005', lsh: '0000000000006',
ksy1: '考试员1', ksy1: '考试员1',
id: '001', id: '001',
kszp: '', kszp: '',
@ -212,7 +212,7 @@ export const CandidateData: Array<User> = [
{ {
sfzmhm: '34232319950147000010', sfzmhm: '34232319950147000010',
xm: '测试学员10', xm: '测试学员10',
lsh: '002', lsh: '0000000000009',
ksy1: '考试员2', ksy1: '考试员2',
id: '0000000000010', id: '0000000000010',
kszp: '', kszp: '',

View File

@ -294,13 +294,17 @@ struct Index {
this.projectsObj[no2*1] = currentProject this.projectsObj[no2*1] = currentProject
this.projectsCenterObj[txt2] = currentProject this.projectsCenterObj[txt2] = currentProject
this.projects.push(currentProject); this.projects.push(currentProject);
console.info('surenjun txt2=>',txt2)
//真实监管下发考试项目
if(isInExam && !kStringArr.includes(txt2)){ if(isInExam && !kStringArr.includes(txt2)){
this.projectsObj[no2*1].type = '3' this.projectsObj[no2*1].type = '3'
this.projectsObj[no2*1].isUpload = true
// this.ddxkKsxmArr.push(txt2) this.projectsObj[no2*1].isEnd = true
this.isDdxk = true
this.ddxkKsxmArr.push(txt2)
} }
} }
this.systemparmArr.push({ this.systemparmArr.push({
'NO1': no1 * 1, 'NO1': no1 * 1,
'NO2': no2 * 1, 'NO2': no2 * 1,
@ -311,6 +315,8 @@ struct Index {
}) })
}) })
const projects = this.projects; const projects = this.projects;
console.info('surenjun',JSON.stringify(this.ddxkKsxmArr))
if (!projects.length) { if (!projects.length) {
Prompt.showToast({ Prompt.showToast({
message: '读取数据库信息失败,请重新联网更新!', message: '读取数据库信息失败,请重新联网更新!',
@ -1163,8 +1169,8 @@ struct Index {
//科目类型 //科目类型
@State examSubject: 2 | 3 = 3; @State examSubject: 2 | 3 = 3;
@State ddxkTime: number = 0; @State ddxkTime: number = 0;
@State ddxkKsxmArr: string[] = [''] @State ddxkKsxmArr: string[] = []
@State ddxkKfArr: string[] = [''] @State ddxkKfArr: string[] = []
@State xmmcStr: string = '' @State xmmcStr: string = ''
@State carztStr: string = '' @State carztStr: string = ''
@State kfArr: { @State kfArr: {

View File

@ -98,8 +98,6 @@ export default struct Index {
sczb, sczb,
kfdm, kfdm,
wayno, wayno,
//TODO 真实监管项目
// kString:'40200,40300,40400,40500,40700,41000,41100,41200,41300,41400,40600,41500,41700,40400,40800,40900'
} }
}, router.RouterMode.Single); }, router.RouterMode.Single);

View File

@ -12,6 +12,7 @@ import { GlobalConfig } from '../config';
@Entry @Entry
@Component @Component
struct Index { struct Index {
@State textList1: string[] = ['差分服务器Ip','响应端口','中心服务器IP','响应端口', '子网掩码','默认网关','dns','后置机IP ', '响应端口','前置机IP','本地端口'] @State textList1: string[] = ['差分服务器Ip','响应端口','中心服务器IP','响应端口', '子网掩码','默认网关','dns','后置机IP ', '响应端口','前置机IP','本地端口']
// @State textList2: string[] = [] // @State textList2: string[] = []
@State ratio: number = 1700 / 960 @State ratio: number = 1700 / 960

View File

@ -132,6 +132,7 @@ struct UserInfo {
// this.openDeviceByIDCard() // this.openDeviceByIDCard()
const routerParam = router.getParams() || { type: 0 }; const routerParam = router.getParams() || { type: 0 };
console.log('routerParam', JSON.stringify(routerParam)) console.log('routerParam', JSON.stringify(routerParam))
if (!globalThis.singlePlay) { if (!globalThis.singlePlay) {
// @ts-ignore // @ts-ignore
if (routerParam.type != 1) { if (routerParam.type != 1) {
@ -147,8 +148,8 @@ struct UserInfo {
this.getCurrentStudent(res.sfzmhm) this.getCurrentStudent(res.sfzmhm)
} }
}) })
}
} else if (user && (user.kssycs == '0' || user.kssycs == '')) { else if (user && (user.kssycs == '0' || user.kssycs == '')) {
console.log('datadatadatadata') console.log('datadatadatadata')
this.list = this.list.filter(res => { this.list = this.list.filter(res => {
return res.sfzmhm != user.sfzmhm return res.sfzmhm != user.sfzmhm
@ -226,7 +227,7 @@ struct UserInfo {
this.stopDeviceById() this.stopDeviceById()
// globalThis.statue=4 // globalThis.statue=4
router.pushUrl({ router.pushUrl({
url: examSubject == 3 ? 'pages/c' : 'pages/Judge', url: examSubject == 3 ? 'pages/Roads' : 'pages/Judge',
params: { params: {
sczb: Number(this.isBoardPrePareSetPopupOpen), sczb: Number(this.isBoardPrePareSetPopupOpen),
kfdm: this.sczbkf, kfdm: this.sczbkf,
@ -460,6 +461,7 @@ struct UserInfo {
return return
} }
await upDateTableByArray('USER', []) await upDateTableByArray('USER', [])
await upDateTableByArray('USERLIST', [])
this.type = '2' this.type = '2'
this.errorDialog.open() this.errorDialog.open()
this.updateTimeLimit = true this.updateTimeLimit = true
@ -609,8 +611,9 @@ struct UserInfo {
const avPlayer = this.avPlayer; const avPlayer = this.avPlayer;
this.isLoadingPopupVisible = true this.isLoadingPopupVisible = true
avPlayer.playAudio([`voice/监管通信中.mp3`], false, async () => { avPlayer.playAudio([`voice/监管通信中.mp3`], false, async () => {
//TODO 模拟 console.info('surenjun','播放结束开始考试接口调用')
const {code,keystr,message} = await this.beginExam(); const {code,keystr,message} = await this.beginExam();
console.info('surenjun','开始考试接口调用结束')
//@ts-ignore TODO code转换 //@ts-ignore TODO code转换
if (code == '' && code == undefined) { if (code == '' && code == undefined) {
promptAction.showToast({ promptAction.showToast({

View File

@ -10,6 +10,8 @@ export interface Project {
//项目状态:未做 正在做 及格 不及格 //项目状态:未做 正在做 及格 不及格
type?: '1' | '2' | '3' | '4' type?: '1' | '2' | '3' | '4'
// //
isEnd:boolean,
isUpload:boolean
} }
export interface MarkRule { export interface MarkRule {
@ -206,6 +208,4 @@ export interface LANE {
export interface ProjectObj { export interface ProjectObj {
[k: string]: Project [k: string]: Project
} }

View File

@ -266,7 +266,8 @@ export default class Judge {
//断点续考 //断点续考
ddxk: isDdxk ? 1 : 0, ddxk: isDdxk ? 1 : 0,
ddkssj: ddxkTime || 0, ddkssj: ddxkTime || 0,
ykxm: isDdxk ? (ddxkKsxmArr?.map(projectCenterCode => (projectsCenterObj[projectCenterCode]?.projectCode) * 1)) : [], ykxm: isDdxk
? (ddxkKsxmArr?.map(projectCenterCode => (projectsCenterObj[projectCenterCode]?.projectCode) * 1)) : [],
kfxm: isDdxk ? (ddxkKfArr?.map(kf => { kfxm: isDdxk ? (ddxkKfArr?.map(kf => {
const [xmdm, kfdm] = kf.split(',') const [xmdm, kfdm] = kf.split(',')
return { return {
@ -658,7 +659,7 @@ export default class Judge {
const project = getProjectInfo(ksxm); const project = getProjectInfo(ksxm);
//科目三夜间行驶.模拟灯光、上车准备出现通用评判ksxm为当前进行的项目 //科目三夜间行驶.模拟灯光、上车准备出现通用评判ksxm为当前进行的项目
const checkProjects = ['17', '41', '1']; const checkProjects = ['17', '41', '1'];
//获取正在进行的项目 //获取正在进行的项目
const inProjects = Reflect.ownKeys(projectsObj).filter(projectKey => projectsObj[projectKey].type == 2); const inProjects = Reflect.ownKeys(projectsObj).filter(projectKey => projectsObj[projectKey].type == 2);
let commonKsxm = ''; let commonKsxm = '';

View File

@ -69,13 +69,13 @@ export function getDwStatusType(dw){
// 中心实时项目状态转换 // 中心实时项目状态转换
export function getCenterProjectStatus(status){ export function getCenterProjectStatus(status){
switch (status){ switch (status){
//不考 //不考
case 0:return '00' case 0:return '00'
//未考 //未考
case 1:return '01' case 1:return '01'
//正在考 //正在考
case 2:return '10' case 2:return '10'
//已考 //已考
case 3:return '11' case 3:return '11'
default :return '00' default :return '00'
@ -102,35 +102,35 @@ export function getKmProjectVoice(
return projectCode return projectCode
} }
switch (projectCode*1){ switch (projectCode*1){
//直线行驶 //直线行驶
case 40300: return type === 1 ? 403001 : 403002 case 40300: return type === 1 ? 403001 : 403002
//变更车道 //变更车道
case 40500: return type === 1 ? 405001 : 405002 case 40500: return type === 1 ? 405001 : 405002
//左转 //左转
case 40800 : return type === 1 ? 408001 : undefined case 40800 : return type === 1 ? 408001 : undefined
//右转 //右转
case 40900 : return type === 1 ? 409001 : undefined case 40900 : return type === 1 ? 409001 : undefined
//会车 506-6为1都报 //会车 506-6为1都报
case 41300 : return type === 1 case 41300 : return type === 1
? 413001 ? 413001
: (param506Str[5] == 1 ? undefined : 413002) : (param506Str[5] == 1 ? undefined : 413002)
//超车 //超车
case 41400 : return type === 1 case 41400 : return type === 1
? (param405Str == 1 && (num == count)?undefined:414001) ? (param405Str == 1 && (num == count)?undefined:414001)
: undefined : undefined
//直线行驶 //直线行驶
case 40700 : return type === 1 ? 407001 : undefined case 40700 : return type === 1 ? 407001 : undefined
//TODO 通过学校 结束param544Str //TODO 通过学校 结束param544Str
case 41100 : return type === 1 ? (param512Str[2] ==3 ? 411001 : undefined):undefined case 41100 : return type === 1 ? (param512Str[2] ==3 ? 411001 : undefined):undefined
//通过车站 //通过车站
case 41200 : return type === 1 ? (param512Str[2] ==3 ? 412001 : undefined):undefined case 41200 : return type === 1 ? (param512Str[2] ==3 ? 412001 : undefined):undefined
//通过人行横道 //通过人行横道
case 41000 : return type === 1? (param512Str[2] == 3 ? 410001 : undefined):undefined case 41000 : return type === 1? (param512Str[2] == 3 ? 410001 : undefined):undefined
//靠边停车 //靠边停车
case 40600 : return type === 1 ? 406001 : undefined case 40600 : return type === 1 ? 406001 : undefined
//掉头 //掉头
case 41500 : return type === 1 ? 415001:undefined case 41500 : return type === 1 ? 415001:undefined
//加减挡为 //加减挡为
case 40400 : return type === 1 ? undefined : undefined case 40400 : return type === 1 ? undefined : undefined
default :return undefined default :return undefined
@ -153,8 +153,8 @@ export function getKmProjectCancelVoice(projectCode){
} }
// 上传监管数据code转换 // 上传监管数据code转换
export function promptWxCode( export function promptWxCode(
jkid:'17C52' | '17C54' |'17C55' | '17C53' | '17C56', jkid:'17C51'|'17C52' | '17C54' |'17C55' | '17C53' | '17C56',
code:number code:number
){ ){
let toast = ''; let toast = '';
@ -163,8 +163,23 @@ export function promptWxCode(
return return
} }
switch (jkid){ switch (jkid){
//考试开始
case '17C51':
switch (code){
case -1:toast = '无预约信息';break;
case -2:toast = '约考不是今天';break;
case -2:toast = '已满当天允许考试次数';break;
case -2:toast = '考生身份不合法';break;
case -2:toast = '科目考试系统不合法';break;
case -2:toast = '无考生分组信息';break;
case -2:toast = '分组考官和考生不四配';break;
case -8:toast = '考场信息合法';break;
case -9:toast = '考试员信息不合法';break;
case -10:toast = '科目考试系统时间不合法';break;
case -90:toast = '已进行了考试身份验证,无需重复验证!';break;
}
//项目开始 //项目开始
case '17C52': case '17C52':
switch (code){ switch (code){
case 0:toast = '存在作弊嫌疑,已被取消或暂停考试';break; case 0:toast = '存在作弊嫌疑,已被取消或暂停考试';break;
@ -185,7 +200,7 @@ export function promptWxCode(
default:toast = '';break; default:toast = '';break;
} }
break; break;
//过程照片 //过程照片
case '17C54': case '17C54':
switch (code){ switch (code){
case -1:toast = '无当前科目考试信息';break; case -1:toast = '无当前科目考试信息';break;
@ -196,7 +211,7 @@ export function promptWxCode(
case -6:toast = '存在未结束的考试项目!';break; case -6:toast = '存在未结束的考试项目!';break;
} }
break; break;
//项目结束 //项目结束
case '17C55': case '17C55':
switch (code){ switch (code){
case -1:toast = '无当前考试项目开始信息';break; case -1:toast = '无当前考试项目开始信息';break;
@ -215,7 +230,7 @@ export function promptWxCode(
default:break; default:break;
} }
break; break;
//扣分 //扣分
case '17C53': case '17C53':
switch (code){ switch (code){
case 0:toast = '已存在同一时间的同一扣分记录';break case 0:toast = '已存在同一时间的同一扣分记录';break
@ -232,7 +247,7 @@ export function promptWxCode(
default:toast = '';break default:toast = '';break
} }
break; break;
//考试结束 //考试结束
case '17C56': case '17C56':
switch (code){ switch (code){
case -1:toast = '无当前科目考试信息';break; case -1:toast = '无当前科目考试信息';break;
@ -324,9 +339,9 @@ export const plcStrToWXJson = async (plc:string) =>{
} }
const judgeSignal = [ const judgeSignal = [
// 车门 安全带 熄火 发动机启动 左转向 右转向 前照灯近灯 前照灯远灯 // 车门 安全带 熄火 发动机启动 左转向 右转向 前照灯近灯 前照灯远灯
p[14], p[19], p[5], p[6], p[2], p[3], p[7], p[8], p[14], p[19], p[5], p[6], p[2], p[3], p[7], p[8],
// 注车制动 行车制动 离合器 副制动 喇叭 雨刷 危险报警灯 示廓灯 系统未涉及的传感器信号 // 注车制动 行车制动 离合器 副制动 喇叭 雨刷 危险报警灯 示廓灯 系统未涉及的传感器信号
p[13], p[12], p[17], p[18], p[4], p[11], p[20], p[9], 0 p[13], p[12], p[17], p[18], p[4], p[11], p[20], p[9], 0
] ]
const judgeAnotherSignal = [ const judgeAnotherSignal = [
// 低三挡位 左侧单边桥1 左侧单边桥2 右侧单边桥1 右侧单边桥2 雾灯 // 低三挡位 左侧单边桥1 左侧单边桥2 右侧单边桥1 右侧单边桥2 雾灯
@ -340,7 +355,7 @@ export const plcStrToWXJson = async (plc:string) =>{
//前天线可用星数 后天线可用星数 东向坐标位置 北向位置坐标 天向位置坐标 东向速度 北向速度 天向速度 //前天线可用星数 后天线可用星数 东向坐标位置 北向位置坐标 天向位置坐标 东向速度 北向速度 天向速度
'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
//@ts-ignore 评判信号1 评判信号2 发动机转速 //@ts-ignore 评判信号1 评判信号2 发动机转速
(judgeSignal.join('')*1).toString(16), (judgeAnotherSignal.join('')*1).toString(16) , p[25], (judgeSignal.join('')*1).toString(16), (judgeAnotherSignal.join('')*1).toString(16) , p[25],
'0xFFFFFFF' '0xFFFFFFF'
] ]
const wuXiDataStr = wuXiData.join(',') const wuXiDataStr = wuXiData.join(',')
@ -419,25 +434,25 @@ export function sendRed(){
} }
export const defaultJudgeConfigObj = { export const defaultJudgeConfigObj = {
//结束考试方式 0-不合格继续 1-考试不合格报靠边停车 2-不合格不报靠边 3-训练不合格报靠边 4-自动退出 5-不合格自动退出 //结束考试方式 0-不合格继续 1-考试不合格报靠边停车 2-不合格不报靠边 3-训练不合格报靠边 4-自动退出 5-不合格自动退出
302:'5', 302:'5',
332:'', 332:'',
//是否能进行人工操作 0-不能人工评判 1-不能人工进项目 3-都不能 //是否能进行人工操作 0-不能人工评判 1-不能人工进项目 3-都不能
342:'', 342:'',
//有项目未结束时可以靠边停车 0-否 1-是 //有项目未结束时可以靠边停车 0-否 1-是
343:'1', 343:'1',
//考试未结束且有扣分,是否可以退出 //考试未结束且有扣分,是否可以退出
344:'0', 344:'0',
//直线行驶中是否可以进其它项目 0-否 1-是 //直线行驶中是否可以进其它项目 0-否 1-是
348:'0', 348:'0',
//车上是否能点结束考试 0:否 1:是 //车上是否能点结束考试 0:否 1:是
353:'0', 353:'0',
//是否启动断电续考 0:否 1:是 //是否启动断电续考 0:否 1:是
369:'1', 369:'1',
//是否显示应考里程 //是否显示应考里程
375:'0', 375:'0',
//里程不够允许手工点靠边停车 //里程不够允许手工点靠边停车
387:'0', 387:'0',
//监管模式有扣分续考0-否++1-是+把上次未考完的扣分带下来重新考试) //监管模式有扣分续考0-否++1-是+把上次未考完的扣分带下来重新考试)
432:'1' 432:'1'
} }

View File

@ -101,15 +101,16 @@ class AVPlayer {
}) })
return new Promise(async (resolve)=>{ return new Promise(async (resolve)=>{
audioPlayer.on('finish', () => { audioPlayer.on('finish', () => {
console.info(TAG,'audioPlayer => 播放资源播放')
//@ts-ignore //@ts-ignore
this.voiceStatus = 'completed' this.voiceStatus = 'completed'
if(callback){ if(callback){
callback() callback()
} }
audioPlayer.stop(); audioPlayer.stop();
audioPlayer.reset() audioPlayer.reset()
audioPlayer.release() audioPlayer.release()
resolve(true) resolve(true)
}) })
audioPlayer.reset() audioPlayer.reset()
audioPlayer.src = `fd://${fdPath}` audioPlayer.src = `fd://${fdPath}`