夜考逻辑优化

界面现实问题优化
This commit is contained in:
lixiao 2025-05-20 13:58:44 +08:00
parent eded93bc62
commit 226f7afc53
13 changed files with 159 additions and 102 deletions

View File

@ -27,7 +27,7 @@
#define JUDGE_VERSION_MAJOR 1
#define JUDGE_VERSION_MINOR 0
#define JUDGE_VERSION_PATCH 3
#define JUDGE_VERSION_STAMP "2505132200b"
#define JUDGE_VERSION_STAMP "2505201042b"
#if JUDGE_USE_OLD
# undef JUDGE_VERSION_STAMP
# define JUDGE_VERSION_STAMP "2411121010b.old"

View File

@ -635,27 +635,29 @@ bool ExamCarSub3::Init_KM3_Global()
//只有掉头项目才有右掉头一说 //20150516
examItem->bYdt = (itemNo == Sub3ItemType12Dtxx && parm1->TXT2 == "ydt" ? true : false); //是否右掉头
//如果是满分学习的 czlx=1 m_stuInfo.czlx //满分学习非必考项目,一开始考试就通知外壳合格变绿
//满分学习,如果都没配默认都要做, 如果配了就是配哪个做哪个没配不做
//大车夜考,如果都没配默认都算完成, 如果配了就是配哪个做哪个没配不做
//如果是满分学习的 czlx=1 m_stuInfo.czlx
if(m_stuInfo.mfxx && itemNo != Sub3ItemType13Yjxs && IS_A1A2A3B1B2C6(cartype))
{
std::string s = "," + std::to_string(itemNo) + ",";
std::string ss = "," + m_car.MFXX_KSXM + ",";
if(!Tools::pos(s, ss)) //非必考直接算完成变绿
if(m_car.MFXX_KSXM != "")
{
examItem->NoID = true;
KM3EndItem(itemNo,true,false);
std::string s = "," + std::to_string(itemNo) + ",";
std::string ss = "," + m_car.MFXX_KSXM + ",";
if(!Tools::pos(s, ss))
{
examItem->NoID = true;
KM3EndItem(itemNo,true,false);
}
}
}
//对夜考项目进行特殊处理 //大车夜考非必考项目,一开始考试就通知外壳合格变绿
//对夜考项目进行特殊处理
if(m_car.Night_ID == true && itemNo != Sub3ItemType13Yjxs)
{
std::string s = "," + std::to_string(itemNo) + ",";
std::string ss = "," + m_car.DC_YK_Must + ",";
if(!Tools::pos(s, ss)) //非必考直接算完成变绿
if(!Tools::pos(s, ss))
{
//examItem->Item_Color = itemStateHg;
//examItem->TestPro = ItemProFlagIdle;
//examItem->FinishFlag = true;
examItem->NoID = true;
KM3EndItem(itemNo,isReplay(),false); //轨迹回放工具回放模式要发时间,不然项目不好变绿
}
@ -3230,22 +3232,23 @@ void ExamCarSub3::Km3NewEnterItem()
TChuanGan* cg = m_cg;
//1、非前进状态忽略
TChuanGan* his1 = historyChuanGan(1);
if(cg->move != moveForward || his1->move != moveForward)
if(cg->move == moveBackward || his1->move == moveBackward)
{
return;
}
if(cg->move == moveStop && his1->move == moveStop &&
cg->real.gps.sd < 0.1 && his1->real.gps.sd < 0.1)
{
return;
}
//if(cg->move != moveForward || his1->move != moveForward)
//{
// return;
//}
//2、速度是0也退出
//if(cg->real.gps.sd < 0.1 || his1->real.gps.sd < 0.1) return; //ai_CS_GPS
//3、非差分状态忽略//非差分状态不允许进项目
//417参数为1,在差分状态才能进入自动评判项目 417没设的话不判断是不是差分状态 20250428
if(TableSysSet->get417() == "1")
{
if(!cg->real.gps.rtkEnabled)
{
return;
}
}
if(!cg->real.gps.valid()) return;
static constexpr double KK0 = GPS_DIV;
@ -3412,7 +3415,14 @@ void ExamCarSub3::Km3NewEnterItem()
}
else
{
ReadItemByPoint(crossPointNo);
//417参数为1,在差分状态才能进入自动评判项目 417没设的话不判断是不是差分状态 20250428
if(TableSysSet->get417() == "1" && !cg->real.gps.rtkEnabled)
{
}
else
{
ReadItemByPoint(crossPointNo);
}
}
//(*2024-03-05*)

View File

@ -3,7 +3,14 @@
#define ENTER_ITEM_AND_MARK(mark) \
{ \
if(doEnterItem()) { loginfo("enter item %d-%s", itemNo(), itemName().c_str()); } \
if(doEnterMark(true)) { loginfo("enter item %d-%s", itemNo(), itemName().c_str()); } \
m_existMark = true; \
{ mark; }; \
}
#define ENTER_COMM_AND_MARK(mark) \
{ \
if(doEnterMark(false)) { loginfo("enter item %d-%s", itemNo(), itemName().c_str()); } \
m_existMark = true; \
{ mark; }; \
}
@ -107,11 +114,11 @@ JUDGE_STAGE_IMPL(Sub2Judge03Cftc, Sub2CftcStage0)
}
}
//中停扣分(前进状态中停的)
if(cgcu->move == moveForward && cg01->move == moveStop && cg05->move == moveStop && cg10->move == moveStop)
{
ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_MORE(MARK_SUB2_CFTC_02)); //add enter
}
//中停扣分(前进状态中停的) //侧方只有在开始后退以后才扣中停
//if(cgcu->move == moveForward && cg01->move == moveStop && cg05->move == moveStop && cg10->move == moveStop)
//{
// ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_MORE(MARK_SUB2_CFTC_02)); //add enter
//}
//穿越结束线了
if(m_endLineFlag == true && cgcu->move == moveForward)
@ -353,6 +360,15 @@ bool Sub2Judge03Cftc::doEnterItem()
return false;
}
bool Sub2Judge03Cftc::doEnterMark(bool isItemMark)
{
if(isItemMark) //只有项目扣分才会进项目事件,压线通用评判不会触发进项目
{
return doEnterItem();
}
return true;
}
void Sub2Judge03Cftc::calcCrossLine()
{
TChuanGan* cgcu = m_car->historyChuanGan();
@ -530,18 +546,18 @@ void Sub2Judge03Cftc::touchLineMark(LineNum num)
}
else
{
ENTER_ITEM_AND_MARK(JUDGE_MARK_COMM_MUST_MORE(MARK_SUB2_COMM_91)); //标准的
ENTER_COMM_AND_MARK(JUDGE_MARK_COMM_MUST_MORE(MARK_SUB2_COMM_91)); //标准的
}
}
else if(m_stage == Sub2CftcStage1 || m_stage == Sub2CftcStage2)
{
if(s609_2 == 1)
{
ENTER_ITEM_AND_MARK(JUDGE_MARK_COMM_MUST_MORE(MARK_SUB2_COMM_91));
ENTER_COMM_AND_MARK(JUDGE_MARK_COMM_MUST_MORE(MARK_SUB2_COMM_91));
}
else
{
ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_MORE(MARK_SUB2_CFTC_03)); //标准的
ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_MORE(MARK_SUB2_CFTC_03)); //标准的
}
}
}

View File

@ -56,6 +56,7 @@ private:
void calcCrossLine();
//执行进项目
bool doEnterItem();
bool doEnterMark(bool isItemMark);
//判断是否非标准测绘项目L23线 非标准返回false
bool isStandard();

View File

@ -175,6 +175,7 @@ void Sub3Judge12Lkdt::dealJudgeItem()
ctl->ZXD_GuanBi = true;
}
m_exam->TestPro = ItemProFlagEnd;
JudgeFlagEnd();
return;
}
}
@ -236,6 +237,7 @@ void Sub3Judge12Lkdt::dealJudgeItem()
if(cg->ai_ljjl_cm - m_itemv.StopLine_JLCM >= dis2)
{
m_exam->TestPro = ItemProFlagEnd;
JudgeFlagEnd();
return;
}
}
@ -326,6 +328,7 @@ void Sub3Judge12Lkdt::dealJudgeItem()
if(cg->ai_ljjl_cm - m_itemv.Start_JL_CM > m_itemv.XMJL_Mi * 100)
{
m_exam->TestPro = ItemProFlagEnd;
JudgeFlagEnd();
return;
}
}
@ -394,6 +397,7 @@ void Sub3Judge12Lkdt::dealJudgeItem()
if(OKFlag == true)
{
m_exam->TestPro = ItemProFlagEnd;
JudgeFlagEnd();
return;
}
}
@ -429,22 +433,6 @@ void Sub3Judge12Lkdt::dealJudgeItem()
str += buf;
}
if(m_exam->TestPro == ItemProFlagEnd)
{
if(m_itemv.LuK_Fx_PointNo > 0)
{
if(m_itemv.OKFangXiangPt_SuccessFlag == false && m_itemv.ReadNextLuDuanFlag == true)
{
JUDGE_MARK_SUB3(12, "41", true);
}
}
if(m_itemv.slowDown.Js_Passed == false)
{
//对可能出现危险的情形未采取减速、鸣喇叭等安全措施
JUDGE_MARK_SUB3(12, "46", false); //20170505
}
}
str += msg;
showStatus(JUDGE_UTF8S("[大路口掉头]") + str);
@ -465,6 +453,25 @@ void Sub3Judge12Lkdt::JudgeFXD()
}
}
void Sub3Judge12Lkdt::JudgeFlagEnd()
{
if(m_exam->TestPro == ItemProFlagEnd)
{
if(m_itemv.LuK_Fx_PointNo > 0)
{
if(m_itemv.OKFangXiangPt_SuccessFlag == false && m_itemv.ReadNextLuDuanFlag == true)
{
JUDGE_MARK_SUB3(12, "41", true);
}
}
if(m_itemv.slowDown.Js_Passed == false)
{
//对可能出现危险的情形未采取减速、鸣喇叭等安全措施
JUDGE_MARK_SUB3(12, "46", false); //20170505
}
}
}
void Sub3Judge12Lkdt::NS3JudgeVision_41501(bool opportunity)
{
//不观察左、右方交通情况,转弯通过路口时,未观察侧前方交通情况,

View File

@ -36,6 +36,7 @@ public:
protected:
void JudgeFXD();
void JudgeFlagEnd();
private:
TSub3Item12Lkdt m_itemv;

View File

@ -54,34 +54,34 @@ export const GPSData = [
{ key: '海拔高', value: '0' },
{ key: '高度差', value: '0' },
{ key: '龄期', value: '0' },
{ key: '度因子', value: '0' },
{ key: '度因子', value: '0' },
{ key: '经度因子', value: '0' },
{ key: '航向角', value: '0' },
{ key: '俯仰角', value: '0' },
{ key: '航向角状态-收星数', value: '0' },
{ key: '年月日', value: '0' },
{ key: '时分秒', value: '0' },
{ key: '经度', value: '0' },
{ key: '纬度', value: '0' },
{ key: '经度', value: '0' },
{ key: '速度', value: '0' },
]
export const RoadData = [
{name:'路段组号',key:'MapRoad_Code_No'},
{name:'路段编码',key:'MapRoad_Name'},
{name:'车轮压线',key:['TouchLineType','TouchDir']},
{name:'车身碰线',key:['TouchLineTypeCS','TouchLineDirCS']},
{name:'基准车道',key:['BasePointInLaneNo','BaseLaneCount']},
{name:'前点车道',key:['FrontPointLaneNo','FrontPointLaneCount']},
{name:'后车点道',key:[]},
{name:'左前/后车身距离',key:['Body_LF_ToLeftEdge','Body_LB_ToLeftEdge']},
{name:'右前/后车身距离',key:['Body_RF_ToRightEdge','Body_RB_ToRightEdge']},
{name:'右前/后车身边线',key:[]},
{name:'右前/后轮距离',key:['Wheel_RF_ToRightEdge','Wheel_RB_ToRightEdge']},
{name:'右前/后轮边线',key:['Wheel_RF_ToBaseLine','Wheel_RF_ToBaseLine']},
{name:'左前/后轮距离',key:['Wheel_LF_ToRightEdge','Wheel_LB_ToRightEdge']},
{name:'左前/后轮边线',key:['Wheel_LF_ToBaseLine','Wheel_LB_ToBaseLine']},
{name:'车道属性',key:['BasePointInLaneDir','CrossLineAttr']},
{name:'形状',key:['InShapeAttr','ShapeNo','']},
{name:'路段点',key:['CrossPointNo']},
{ name: '路段组号', key: 'MapRoad_Code_No' },
{ name: '路段编码', key: 'MapRoad_Name' },
{ name: '车轮压线', key: ['TouchLineType', 'TouchDir'] },
{ name: '车身碰线', key: ['TouchLineTypeCS', 'TouchLineDirCS'] },
{ name: '基准车道', key: ['BasePointInLaneNo', 'BaseLaneCount'] },
{ name: '前点车道', key: ['FrontPointLaneNo', 'FrontPointLaneCount'] },
{ name: '后车点道', key: [] },
{ name: '左前/后车身距离', key: ['Body_LF_ToLeftEdge', 'Body_LB_ToLeftEdge'] },
{ name: '右前/后车身距离', key: ['Body_RF_ToRightEdge', 'Body_RB_ToRightEdge'] },
{ name: '右前/后车身边线', key: [] },
{ name: '右前/后轮距离', key: ['Wheel_RF_ToRightEdge', 'Wheel_RB_ToRightEdge'] },
{ name: '右前/后轮边线', key: ['Wheel_RF_ToBaseLine', 'Wheel_RF_ToBaseLine'] },
{ name: '左前/后轮距离', key: ['Wheel_LF_ToRightEdge', 'Wheel_LB_ToRightEdge'] },
{ name: '左前/后轮边线', key: ['Wheel_LF_ToBaseLine', 'Wheel_LB_ToBaseLine'] },
{ name: '车道属性', key: ['BasePointInLaneDir', 'CrossLineAttr'] },
{ name: '形状', key: ['InShapeAttr', 'ShapeNo', ''] },
{ name: '路段点', key: ['CrossPointNo'] },
]

View File

@ -369,6 +369,7 @@ struct Index {
let kStringArr: string[] = (currentParams.kString?.split(',') || []).filter(item => item);
// 单机模式下增驾进模拟灯光
this.mockLight = kStringArr.includes("41700") || (globalThis.singlePlay && this.mode === 3)
console.log("lixiao mockLight", this.mockLight)
console.info('lixiao kStringArr', JSON.stringify(kStringArr))
@ -376,17 +377,8 @@ struct Index {
const {isTrajectoryOpen} = judgeConfig
let carNo = '', allItems = [];
systemParms.forEach((systemParm) => {
if (isTrajectoryOpen) {
systemParm.no1 = systemParm.NO1;
systemParm.no2 = systemParm.NO2;
systemParm.no3 = systemParm.NO3;
systemParm.txt1 = systemParm.TXT1;
systemParm.txt2 = systemParm.TXT2;
systemParm.txt3 = systemParm.TXT3;
}
const {no1,no2,no3,} = systemParm;
const txt1 = decodeURI(systemParm.txt1)
const txt2 = decodeURI(systemParm.txt2)
//获取当前考车的no2
if (no1 == 3 && no3 == 1 && txt1 === carName) {
carNo = no2 + ''
@ -422,19 +414,37 @@ struct Index {
} else if (this.mode == 5 && no1 == 3 && no2 == Number(carNo) && no3 == 63) {
// 满分学习项目
let data = decodeURI(systemParm.txt1)?.split("^")
allItems = data[0]?.split(",") || []
allItems = data[0]?.split(",").filter(item => item !== "") || []
}
// 满分学习单独做灯光判断
if (this.mode === 5) {
this.mockLight = (allItems.length === 0) || allItems.includes(41 + '')
}
})
console.log("lixiao mockLight", JSON.stringify(allItems), this.mockLight)
systemParms.forEach((systemParm) => {
if (isTrajectoryOpen) {
systemParm.no1 = systemParm.NO1;
systemParm.no2 = systemParm.NO2;
systemParm.no3 = systemParm.NO3;
systemParm.txt1 = systemParm.TXT1;
systemParm.txt2 = systemParm.TXT2;
systemParm.txt3 = systemParm.TXT3;
}
const {no1,no2,no3} = systemParm;
const txt2 = decodeURI(systemParm.txt2)
if (no1 == 6) {
const name = decodeURI(systemParm.txt1)
// 白考过滤掉夜间行驶
if (this.mode !== 2 && no2 == 13) {
return
}
// 模拟夜间驾驶
// 模拟夜间驾驶(灯光)
if (!this.mockLight && no2 == 41) {
return
}
let isRequired = allItems.includes(no2 + '')
let isRequired = (this.mode === 5 && allItems.length === 0) || allItems.includes(no2 + '')
let isEnd = false
let isUpload = false
@ -487,8 +497,6 @@ struct Index {
'TXT3': decodeURIComponent(systemParm.txt3),
})
})
console.log("lixiao allItems", JSON.stringify(allItems))
console.log("lixiao carNo examMileage", carNo, this.examMileage)
const projects = this.projects;
if (!projects.length) {
Prompt.showToast({
@ -1384,5 +1392,4 @@ struct Index {
return false
}
}
}

View File

@ -3,6 +3,7 @@ import RealTime from '../compontents/judge/RealTime';
import { GPSData, SignalData } from '../../mock';
import { SignalDataType } from '../../model';
import { getSyncData } from '../../common/service/initable';
import { convertGpsCoord2 } from '../../common/utils/tools';
@Component
export default struct SignDisplayCom {
@ -198,8 +199,8 @@ export default struct SignDisplayCom {
Text('收星数:' + this.signArr[84]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio)
Text('海拔高:' + this.signArr[85]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio)
Text('高度差:' + this.signArr[86]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio)
Text('龄期:' + this.signArr[87]).fontColor(Color.Red).fontSize(14 * this.ratio).height(18 * this.ratio)
Text('度因子:' + this.signArr[88])
Text('龄期:' + this.signArr[87]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio)
Text('度因子:' + this.signArr[88])
.fontColor('#FFB433')
.fontSize(14 * this.ratio)
.height(18 * this.ratio)
@ -215,8 +216,14 @@ export default struct SignDisplayCom {
.height(18 * this.ratio)
Text('年月日:' + this.signArr[93]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio)
Text('时分秒:' + this.signArr[94]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio)
Text('经度:' + this.signArr[95]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio)
Text('纬度:' + this.signArr[96]).fontColor('#FFB433').fontSize(14 * this.ratio).height(18 * this.ratio)
Text('经度:' + Number(convertGpsCoord2(Number(this.signArr[96])).toFixed(6)))
.fontColor('#FFB433')
.fontSize(14 * this.ratio)
.height(18 * this.ratio)
Text('纬度:' + Number(convertGpsCoord2(Number(this.signArr[95])).toFixed(6)))
.fontColor('#FFB433')
.fontSize(14 * this.ratio)
.height(18 * this.ratio)
Text('速度:' + ((Number((this.signArr[97] || 0)) * 1.852).toFixed(2)).toString())
.fontColor('#FFB433')
.fontSize(14 * this.ratio)
@ -300,16 +307,16 @@ export default struct SignDisplayCom {
if (item.key === '龄期') {
Column() {
Text(`${item.key}:${item.value}`)
.fontSize(20 * this.ratio)
.fontSize(12 * this.ratio)
.lineHeight(20 * this.ratio)
.fontColor("#6b96f2")
.fontColor((Number(item.value) == 0 || Number(item.value) > 10) ? "#ff5e5e" : '#fff')
}.height(20 * this.ratio).justifyContent(FlexAlign.Start).width('100%')
} else if (item.key === "状态") {
Column() {
Text(`${item.key}:${item.value}`)
.fontSize(20 * this.ratio)
.fontSize(12 * this.ratio)
.lineHeight(20 * this.ratio)
.fontColor(item.value != '4' ? "#ff5e5e" : "#6b96f2")
.fontColor(item.value != '4' ? item.value == '5' ? "#fc8c2c" : "#ff5e5e" : "#fff")
}.height(20 * this.ratio).justifyContent(FlexAlign.Start).width('100%')
} else {
Column() {
@ -467,9 +474,15 @@ export default struct SignDisplayCom {
for (let i = 34; i <= 46; i++) {
this.sjxhColum[i].value = this.signArr[i+2]
}
const hours = Number(this.signArr[94].substr(0, 2)) + 8
this.signArr[94] = (hours > 9 ? hours : '0' + hours) + this.signArr[94].substr(2, this.signArr[94].length - 2)
let t = 0
for (let i = 83; i <= 97; i++) {
this.GPSColum[t].value = this.signArr[i]
if ([95, 96].includes(i)) {
this.GPSColum[t].value = Number(convertGpsCoord2(Number(this.signArr[i])).toFixed(6)) + "";
} else {
this.GPSColum[t].value = this.signArr[i]
}
t++
}
this.GPSColum[14].value = ((Number((this.signArr[97] || 0)) * 1.852).toFixed(2)).toString()
@ -478,8 +491,6 @@ export default struct SignDisplayCom {
const str2 = this.signArr[93].substr(4.2)
this.signArr[93] = str2 + str1 + str0
this.GPSColum[10].value = this.signArr[93]
// this.signArr[53]=192.168.7.170'
this.sjxhColum = JSON.parse(JSON.stringify((this.sjxhColum)))
that.signArr = JSON.parse(JSON.stringify((this.signArr)))
that.GPSColum = JSON.parse(JSON.stringify((this.GPSColum)))

View File

@ -13,7 +13,7 @@ import { takePhoto } from '../../common/service/videoService'
import { GlobalConfig } from '../../config/index'
@Component
struct FaceCompare {
export default struct FaceCompare {
constructor() {
super()
}
@ -350,4 +350,3 @@ struct FaceCompare {
}
}
export default FaceCompare

View File

@ -1222,12 +1222,14 @@ export default class Judge {
examJudgeSoundEnd({
itemno: xmdm, code: code[0], type
})
fileLog.setExamJudgeData({
method: 'examJudgeSoundEnd',
itemno: xmdm,
code: code[0],
type,
})
if (!this.isExamEnd) {
fileLog.setExamJudgeData({
method: 'examJudgeSoundEnd',
itemno: xmdm,
code: code[0],
type,
})
}
})
} else {
if (code[0] == 'zhpp') {
@ -1795,7 +1797,9 @@ export default class Judge {
console.info(judgeTag, '1.进入评判入口')
await examJudgeSetLogCallback(3, async (level, info, len) => {
console.log('评判日志:' + info)
await fileLog.setExamJudgeLogData(info);
if (!this.isExamEnd) {
await fileLog.setExamJudgeLogData(info);
}
})
console.info(judgeTag, '2.注册日志回调完成')

View File

@ -107,6 +107,7 @@ export default class FileLog {
//关闭所有文件写入
public closeAllFiles = async () => {
console.log("lixiao close file")
const {fileUtil,folderPath,fourAndOneLogDataFd} = this;
['exam_progress_data', 'wuxi_exam_data', 'wuxi_progress_data', 'plc_data', 'judge_exam_data', 'judge_progress_callback_data', 'judge_log_data', 'four_one_log_data', 'four_one_log_byte_data'].forEach(path => {
fileUtil.closeFile(`${folderPath}/${path}.txt`);