From 58881ccf559720d112d7a144f9c3a61638a9a06b Mon Sep 17 00:00:00 2001 From: lixiao <932184220@qq.com> Date: Wed, 16 Apr 2025 14:24:53 +0800 Subject: [PATCH] =?UTF-8?q?c++=E6=9B=B4=E6=96=B0=20=E5=A4=96=E5=A3=B3?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/cpp/sdk/common/HSystem.cpp | 2 +- entry/src/main/cpp/sdk/common/HSystem.h | 6 - entry/src/main/cpp/sdk/common/HVersion.h | 2 +- .../cpp/sdk/database/sysparm/SysParmTable.cpp | 2 +- .../cpp/sdk/database/sysset/SysSetTable.h | 6 + entry/src/main/cpp/sdk/exam/ExamCarSub2.cpp | 2 +- entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp | 1602 +++++++---------- entry/src/main/cpp/sdk/exam/ExamCarSub3.h | 7 +- entry/src/main/cpp/sdk/exam/ExamSensor.cpp | 8 +- entry/src/main/cpp/sdk/exam/IExamCar.cpp | 54 +- entry/src/main/cpp/sdk/exam/IExamCar.h | 2 +- entry/src/main/cpp/sdk/judge/HJudgeItem.h | 9 + .../cpp/sdk/judge/sub2/Sub2Judge00Dcrk.cpp | 27 +- .../cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp | 7 +- .../cpp/sdk/judge/sub3/Sub3Judge01Sczb.cpp | 8 +- .../cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp | 4 +- .../cpp/sdk/judge/sub3/Sub3Judge03Zxxs.cpp | 4 +- .../cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp | 24 +- .../cpp/sdk/judge/sub3/Sub3Judge12Lkdt.cpp | 58 +- .../cpp/sdk/judge/sub3/Sub3Judge15Lkzz.cpp | 57 +- .../cpp/sdk/judge/sub3/Sub3Judge16Lkyz.cpp | 57 +- .../cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp | 152 +- .../main/cpp/sdk/judge/sub3/Sub3Judge20Comm.h | 8 +- entry/src/main/cpp/sdk/utility/HBean.h | 2 +- entry/src/main/cpp/sdk/utility/HTypes.cpp | 11 + entry/src/main/cpp/sdk/utility/HTypes.h | 25 +- entry/src/main/cpp/test/CMakeLists.txt | 1 - .../src/main/cpp/test/test_sdk/TestJudge.cpp | 12 +- .../main/cpp/toolkit/replay/ReplayWrapper.cpp | 38 - .../ets/IdlServiceExt/idl_service_ext_impl.ts | 6 + entry/src/main/ets/config/global.ts | 2 +- .../main/ets/entryability/EntryAbility.ets | 4 +- 32 files changed, 1009 insertions(+), 1200 deletions(-) diff --git a/entry/src/main/cpp/sdk/common/HSystem.cpp b/entry/src/main/cpp/sdk/common/HSystem.cpp index 75f5e204..48c0d75e 100644 --- a/entry/src/main/cpp/sdk/common/HSystem.cpp +++ b/entry/src/main/cpp/sdk/common/HSystem.cpp @@ -192,7 +192,7 @@ bool __sdk_cpu_occupy__(struct CpuOccupyInfo* occupy) { std::string line; - bool root = false; //root用户权限 + static constexpr bool root = false; //root用户权限 if(root) { std::ifstream procStat("/proc/stat"); diff --git a/entry/src/main/cpp/sdk/common/HSystem.h b/entry/src/main/cpp/sdk/common/HSystem.h index 994abc7b..fca278b0 100644 --- a/entry/src/main/cpp/sdk/common/HSystem.h +++ b/entry/src/main/cpp/sdk/common/HSystem.h @@ -12,7 +12,6 @@ *** *** 说明:编译配置选项 *** - *** JUDGE_USE_TSUB3T //是否启用大车科目三测试 *** JUDGE_USE_NSUB3 //是否启用新科三评判 *** JUDGE_USE_OLD //是否启用评判语音播报之前老模式 *** JUDGE_USE_LOG //是否启用日志功能模块 @@ -30,11 +29,6 @@ *** ********************************************************************/ -/* - * 是否启用大车科目三测试 - */ -#define JUDGE_USE_TSUB3T 0 - /* * 是否启用新科目三评判 */ diff --git a/entry/src/main/cpp/sdk/common/HVersion.h b/entry/src/main/cpp/sdk/common/HVersion.h index ba850122..2cad944f 100644 --- a/entry/src/main/cpp/sdk/common/HVersion.h +++ b/entry/src/main/cpp/sdk/common/HVersion.h @@ -27,7 +27,7 @@ #define JUDGE_VERSION_MAJOR 1 #define JUDGE_VERSION_MINOR 0 #define JUDGE_VERSION_PATCH 3 -#define JUDGE_VERSION_STAMP "2504011600b" +#define JUDGE_VERSION_STAMP "2504110912b" #if JUDGE_USE_OLD # undef JUDGE_VERSION_STAMP # define JUDGE_VERSION_STAMP "2411121010b.old" diff --git a/entry/src/main/cpp/sdk/database/sysparm/SysParmTable.cpp b/entry/src/main/cpp/sdk/database/sysparm/SysParmTable.cpp index 1bc91f67..8fc1500b 100644 --- a/entry/src/main/cpp/sdk/database/sysparm/SysParmTable.cpp +++ b/entry/src/main/cpp/sdk/database/sysparm/SysParmTable.cpp @@ -156,7 +156,7 @@ int SysParmTable::findQiBuGear(int carCode) int SysParmTable::findHectometreImpulse(int carCode) { - //NO1=3 NO2=车型代码 NO3=4条件 TXT1 + //NO1=3 NO2=车型代码 NO3=2条件 TXT1 int impulse = INVALID_INDEX; int size = parm3Size(); for(int i = 0; i < size; i++) diff --git a/entry/src/main/cpp/sdk/database/sysset/SysSetTable.h b/entry/src/main/cpp/sdk/database/sysset/SysSetTable.h index e788f827..f13d7eb5 100644 --- a/entry/src/main/cpp/sdk/database/sysset/SysSetTable.h +++ b/entry/src/main/cpp/sdk/database/sysset/SysSetTable.h @@ -198,6 +198,7 @@ class JUDGE_API SysSetTable : public IDBTable SYSSET_DECLARE(414); //变道、超车以前后轮都过线(0-否 1-是) //0 SYSSET_DECLARE(415, type_array, "^"); //自动报靠边停车(启用标记^全部结束n米报^)启用标记:0-否 1-是 319参数为2有效 //0^1^ SYSSET_DECLARE(418); //扣分时实时播报语音(0-否 1-是) //0 + SYSSET_DECLARE(419, type_int); //里程按百米脉冲计算(0-否 1-是 ) SYSSET_DECLARE(421); //模拟夜间:车辆发生故障,按近光灯和双跳进行评判(0-是 1-否) SYSSET_DECLARE(425, type_array, ","); //加减档位操作挂一个挡位要松一次离合器(项目,全程)(0-否 1-是)() // 0,0, SYSSET_DECLARE(426, type_int); //手工取消正在考的项目(0-否 1-是) // 1 @@ -245,6 +246,8 @@ class JUDGE_API SysSetTable : public IDBTable SYSSET_DECLARE(530, type_array2_int, ",", "^"); //环境感知参数 驾驶行为识别参数(双手同时离开方向盘时间S1^单手离开方向盘S2秒,内距离偏差L1cm^伸出窗外S3秒^ 如:2^5,30^2^ SYSSET_DECLARE(531, type_array, ","); //是否启用环境感知评判,是否启用驾驶行为评判,是否启用录像功能, //0 SYSSET_DECLARE(533, type_array_int, ","); //开始考试后(n秒)提示点火,(m秒不点火扣分),格式:30,60, 此参数不能与512-9参数同时设置,两个参数最多只能设置一个 //20210524增加 + SYSSET_DECLARE(534, type_array2, ";", ","); //低于设置速度累计行驶大于设置里程,不合格,(车型1,速度,里程; 车型2,速度,里程;) + SYSSET_DECLARE(535, type_array2, ";", ","); //全程车速达标要求(车型1,速度,里程; 车型2,速度,里程;) SYSSET_DECLARE(541); //压非机动车道分解线立即评判 // 0 //2023-02-14增加 SYSSET_DECLARE(544, type_array, ","); //真实学校区域项目号 配置学校区域的xmxh SYSSET_DECLARE(549, type_array_int, ","); //549参数:光照,雨量阈值,如:100,10 @@ -339,6 +342,7 @@ class JUDGE_API SysSetTable : public IDBTable SYSSET_ASSIGN(414); SYSSET_ASSIGN(415); SYSSET_ASSIGN(418); + SYSSET_ASSIGN(419); SYSSET_ASSIGN(421); SYSSET_ASSIGN(425); SYSSET_ASSIGN(426); @@ -386,6 +390,8 @@ class JUDGE_API SysSetTable : public IDBTable SYSSET_ASSIGN(530); SYSSET_ASSIGN(531); SYSSET_ASSIGN(533); + SYSSET_ASSIGN(534); + SYSSET_ASSIGN(535); SYSSET_ASSIGN(541); SYSSET_ASSIGN(544); SYSSET_ASSIGN(549); diff --git a/entry/src/main/cpp/sdk/exam/ExamCarSub2.cpp b/entry/src/main/cpp/sdk/exam/ExamCarSub2.cpp index 93476a9a..d0213483 100644 --- a/entry/src/main/cpp/sdk/exam/ExamCarSub2.cpp +++ b/entry/src/main/cpp/sdk/exam/ExamCarSub2.cpp @@ -358,7 +358,7 @@ void ExamCarSub2::dealJudgeExam() //} //2.6.1) - calcDistance(); //距离计算 + calcDistance(false, 0); //距离计算 //2.6.2) 监管判断 //函数是一个监管检查函数,这里我们先不考虑监管,我模拟一下这个函数的写法 diff --git a/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp b/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp index cc0db5dc..9b6c359e 100644 --- a/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp +++ b/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp @@ -40,6 +40,7 @@ ErrorCode ExamCarSub3::examBeginExam() TASSERT(ExamSubject3 == examSubject(), ""); m_isOffset = false; + m_PassedItem.clear(); m_pub = TPubKM3(); if(!Init_KM3_Global()) { @@ -69,7 +70,7 @@ ErrorCode ExamCarSub3::examBeginExam() //item->Item_Color = itemStateHg; //item->TestPro = ItemProFlagEnd; //item->FinishFlag = true; //防止已考发项目结束事件 - //m_ctl.PassedItem.insert(itemNo); + //m_PassedItem.insert(itemNo); loginfo("ddxk-ykxm-item itemNo=%d", itemNo); } else //免考的都找不到这个项目和科二有点不太一样 @@ -154,7 +155,7 @@ ErrorCode ExamCarSub3::examEndExam() ISub3JudgeItem::destroy(item); m_sub3Items.erase(it); } - m_ctl.PassedItem.clear(); + m_PassedItem.clear(); if(nullptr != m_newSub3) { m_newSub3->examEnd(); @@ -309,15 +310,15 @@ bool ExamCarSub3::Init_KM3_Global() const std::vector& s349 = TableSysSet->asArray349(); if(s349.size() > 5 && s349[5] != "") { - m_ctl.RtkOffset = std::atoi(s349[5].c_str()); + m_car.RtkOffset = std::atoi(s349[5].c_str()); } else if(s349.size() > 4 && s349[4] != "") { - m_ctl.RtkOffset = std::atoi(s349[4].c_str()); + m_car.RtkOffset = std::atoi(s349[4].c_str()); } else { - m_ctl.RtkOffset = 0; //20240807 之前是2 + m_car.RtkOffset = 0; //20240807 之前是2 } //2、强制启用139号部令 @@ -382,16 +383,13 @@ bool ExamCarSub3::Init_KM3_Global() */ //10、搜索范围赋值 - m_ctl.MaxR = 6000; - m_ctl.MinR = 3000; - const std::vector& s329 = TableSysSet->asArray329(); - m_ctl.MaxR = (s329.size() > 0 && s329[0] != "" ? std::atoi(s329[0].c_str()) : 6000); - m_ctl.MinR = (s329.size() > 1 && s329[1] != "" ? std::atoi(s329[1].c_str()) : 3000); + m_car.MaxR = (s329.size() > 0 && s329[0] != "" ? std::atoi(s329[0].c_str()) : 6000); + m_car.MinR = (s329.size() > 1 && s329[1] != "" ? std::atoi(s329[1].c_str()) : 3000); //11、得到夜考时间点 const std::vector& s19 = TableSysSet->asArray19(); - m_car.Night_Hr = (s19.size() > 0 && s19[0] != "" ? std::atoi(s19[0].c_str()) : 19); //22 //???yhyflag + m_car.Night_Hr = (s19.size() > 0 && s19[0] != "" ? std::atoi(s19[0].c_str()) : 19); //22 m_car.Night_Mi = (s19.size() > 1 && s19[1] != "" ? std::atoi(s19[1].c_str()) : 0); //3、抖动时发动机闯动比例 @@ -409,6 +407,37 @@ bool ExamCarSub3::Init_KM3_Global() //7、起步闯动 m_car.QBCD = -1; + //从SystemParm中读取参数 + this->UpdateCarParmWithSystemParm(); + + //小车是不存在夜考的 + if(IS_C1C2C5(cartype)) + { + m_car.Night_ID = false; + } + else + { + //当前时间到达夜考时间点了 + //if( (Now() - Trunc(now())) > (Car.Night_Hr / 24 + Car.Night_Mi / 24 / 60) ) + DateTimex dt = Tools::nowDateTime(); + if(dt.hour*60 + dt.minute >= m_car.Night_Hr*60 + m_car.Night_Mi) + { + //如果不考模拟灯光 + if(!m_stuInfo.dmndg) + { + m_car.Night_ID = true; + } + else + { + m_car.Night_ID = false; + } + } + else + { + m_car.Night_ID = false; + } + } + //4、得到行驶里程限制 if(IS_C1C2C5C6(cartype)) { @@ -450,6 +479,40 @@ bool ExamCarSub3::Init_KM3_Global() } } + //根据车型读取行驶里程 如果systemparm设置了以systemparm为准 + if(m_car.XSJL_Parm != "" && m_car.XSJL_Parm != "0") + { + std::vector s = Tools::split(m_car.XSJL_Parm, "^"); + if(m_car.Night_ID == true) //夜考的 + { + //夜间 + m_car.Total_XSJL = (s.size() > 0 && s[0] != "") ? std::atoi(s[0].c_str()) : 3000; + m_car.XSJL = (s.size() > 2 && s[2] != "") ? std::atoi(s[2].c_str()) : 3000; + } + else + { + //白天 + m_car.Total_XSJL = (s.size() > 0 && s[0] != "") ? std::atoi(s[0].c_str()) : 3000; + m_car.XSJL = (s.size() > 1 && s[1] != "") ? std::atoi(s[1].c_str()) : 3000; + //20150806 默认白天的第一阶段,后面根据实际情况更改car.xsjl + } + + if(TableSysSet->get303() == "") + { + TableSysSet->set336(s.size() > 3 ? s[3] : ""); // 跟军华确认过有这个奇怪逻辑 2025-04-09 + } + } + + if(m_stuInfo.mfxx) // && m_stuInfo.czlx == 1 + { + m_car.XSJL = m_car.MFXX_XSJL; + } + + if(m_stuInfo.zeng) + { + m_car.XSJL = m_car.Total_XSJL; + } + //注释改成:将之前的行驶里程减掉 if(m_stuInfo.yklc != 0) { @@ -460,8 +523,11 @@ bool ExamCarSub3::Init_KM3_Global() } } - //从SystemParm中读取参数 - this->UpdateCarParmWithSystemParm(); + int X_McH = (!carInfo->X_MCH.empty()) ? std::atoi(carInfo->X_MCH.c_str()) : 0; + if(X_McH > 0) //百米脉冲值优先carinfo的 在UpdateCarParmWithSystemParm中也有赋值不要调换顺序 + { + m_car.X_McH = X_McH; + } //新模拟夜间(次数^错扣^固定^),预留 if(ksdd == siteof::hbxy && IS_A1A2A3B1B2(cartype)) //isAB @@ -490,34 +556,6 @@ bool ExamCarSub3::Init_KM3_Global() TableSysSet->set336("0"); } - //小车是不存在夜考的 - if(IS_C1C2C5(cartype)) - { - m_car.Night_ID = false; - } - else - { - //当前时间到达夜考时间点了 - //if( (Now() - Trunc(now())) > (Car.Night_Hr / 24 + Car.Night_Mi / 24 / 60) ) - DateTimex dt = Tools::nowDateTime(); - if(dt.hour*60 + dt.minute >= m_car.Night_Hr*60 + m_car.Night_Mi) - { - //如果不考模拟灯光 - if(!m_stuInfo.dmndg) - { - m_car.Night_ID = true; - } - else - { - m_car.Night_ID = false; - } - } - else - { - m_car.Night_ID = false; - } - } - m_commItem = ISub3JudgeItem::create(Sub3ItemType20Comm); m_commItem->dealBuildItem(this); int parm1Size = TableSysParm->parm1Size(); @@ -607,28 +645,29 @@ bool ExamCarSub3::Init_KM3_Global() //只有掉头项目才有右掉头一说 //20150516 examItem->bYdt = (itemNo == Sub3ItemType12Dtxx && parm1->TXT2 == "ydt" ? true : false); //是否右掉头 - //如果是满分学习的 - if(m_stuInfo.mfxx && m_car.MFXX_KSXM != "" && itemNo != Sub3ItemType13Yjxs && IS_A1A2A3B1B2C6(cartype)) + //如果是满分学习的 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) == false) + 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) == false) + if(!Tools::pos(s, ss)) //非必考直接算完成变绿 { //examItem->Item_Color = itemStateHg; //examItem->TestPro = ItemProFlagIdle; //examItem->FinishFlag = true; + examItem->NoID = true; KM3EndItem(itemNo,true,false); - //examItem->NoID = true; } } } @@ -640,422 +679,423 @@ bool ExamCarSub3::Init_KM3_Global() void ExamCarSub3::UpdateCarParmWithSystemParm() { +#define PARM_SWITCH_BEGIN switch(parm.NO3) { +#define PARM_CASE_WITH(x) case x : PARM_NO3_##x (&parm); break; +#define PARM_SWITCH_END default: break; } + + const auto PARM_NO3_2 = [&](const TSystemparm* parm)->void + { + m_car.X_McH = parm->TXT1 != "" ? std::atoi(parm->TXT1.c_str()) : 0; + }; + + const auto PARM_NO3_4 = [&](const TSystemparm* parm)->void + { + m_car.StartSpeed = parm->TXT1 != "" ? std::atoi(parm->TXT1.c_str()) : 2; + }; + + const auto PARM_NO3_5 = [&](const TSystemparm* parm)->void + { + m_car.AnQuanDai = parm->TXT1 != "" ? std::atoi(parm->TXT1.c_str()) : 0; + }; + + const auto PARM_NO3_10 = [&](const TSystemparm* parm)->void + { + //必考项目列表,业务写死,用不到了 + m_car.MustTest_List = parm->TXT1; + if(Tools::pos("^", parm->TXT1) == true) + { + std::vector s = Tools::split(parm->TXT1, "^"); + m_car.MustTest_List = s.size() > 0 ? s[0] : ""; + } + }; + + const auto PARM_NO3_11 = [&](const TSystemparm* parm)->void + { + if(Tools::pos("^", parm->TXT1) == true) + { + std::vector s = Tools::split(parm->TXT1, "^"); + m_car.Test_Sums[0] = std::atoi(s[0].c_str()); //???yhyflag + m_car.Test_Sums[1] = std::atoi(s[1].c_str()); + m_car.Test_Sums[2] = std::atoi(s[2].c_str()); + m_car.Test_Sum = m_car.Test_Sums[1]; + } + else + { + m_car.Test_Sum = std::atoi(parm->TXT1.c_str()); + } + }; + + const auto PARM_NO3_12 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + m_carInfo->kscx = Tools::toupper(parm->TXT1); + } + }; + + const auto PARM_NO3_13 = [&](const TSystemparm* parm)->void + { + std::string TXT1 = parm->TXT1 + ",,"; + std::vector s = Tools::split(TXT1, ","); + int sz = s.size(); + //安全带取反,离合器取反,远近光灯对调,左方向灯,右方向灯,喇叭,点火1,点火2,脚刹,手刹,门开关,副刹取反, + m_car.AQD_QF = (sz > 0 && s[0] == "1"); //安全带信号是否取反 + m_car.LHQ_QF = (sz > 1 && s[1] == "1"); //离合器信号是否取反 + m_car.YJGD_QF = (sz > 2 && s[2] == "1"); //远近光灯取反 + m_car.ZFXD_QF = (sz > 3 && s[3] == "1"); //左方向灯取反 + m_car.YFXD_QF = (sz > 4 && s[4] == "1"); //右方向灯取反 + m_car.LB_QF = (sz > 5 && s[5] == "1"); //喇叭信号取反 + m_car.DH1_QF = (sz > 6 && s[6] == "1"); //点火1取反 + m_car.DH2_QF = (sz > 7 && s[7] == "1"); //点火2取反 + m_car.JS_QF = (sz > 8 && s[8] == "1"); //脚刹取反 + m_car.SS_QF = (sz > 9 && s[9] == "1"); //手刹取反 + m_car.MKG_QF = (sz > 10 && s[10] == "1"); //门开关取反 + m_car.FS_QF = (sz > 11 && s[11] == "1"); //副刹取反 + }; + + const auto PARM_NO3_14 = [&](const TSystemparm* parm)->void + { + m_car.WD_Signal = std::atoi(parm->TXT1.c_str()); + }; + + const auto PARM_NO3_15 = [&](const TSystemparm* parm)->void + { + //根据车型读取行驶里程 + if(parm->TXT1 != "" && parm->TXT1 != "0") + { + m_car.XSJL_Parm = parm->TXT1; + } + }; + + const auto PARM_NO3_16 = [&](const TSystemparm* parm)->void + { + if(parm->TXT3 != "") + { + m_car.FDJDS = std::atoi(parm->TXT3.c_str()); //本车发动机怠速值 + //是否设置了发动机怠速 + m_car.bFDJDS = true; + } + }; + + const auto PARM_NO3_18 = [&](const TSystemparm* parm)->void + { + TableSysSet->set316(parm->TXT1); + }; + + const auto PARM_NO3_20 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + std::vector s = Tools::split(parm->TXT1, ":"); + m_car.Night_Hr = s.size() > 0 ? std::atoi(s[0].c_str()) : 19; + m_car.Night_Mi = s.size() > 1 ? std::atoi(s[1].c_str()) : 0; + } + }; + + const auto PARM_NO3_21 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + std::vector s = Tools::split(parm->TXT1, ";"); + for(size_t j = 0; j < s.size(); j++) + { + if(s[j] != "") + { + std::vector ss = Tools::split(s[j], ":"); + std::string str1 = ss.size() > 0 ? ss[0] : ""; + std::string str2 = ss.size() > 1 ? ss[1] : ""; + m_car.DwZsMax[std::atoi(str1.c_str())] = (str2 != "" ? std::atoi(str2.c_str()) : 2500); + } + else + { + break; + } + } + } + }; + + const auto PARM_NO3_22 = [&](const TSystemparm* parm)->void + { + double v = std::atof(parm->TXT1.c_str()); + m_car.fdjds_cdbl = Tools::greater(v, 0.0) ? v: 0.6; //判断 > 0 + }; + + const auto PARM_NO3_23 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + std::vector s = Tools::split(parm->TXT1, ";"); + for(int j = 0; 0 < s.size(); j++) + { + if(s[j] != "") + { + std::vector ss = Tools::split(s[j], ":"); + std::string str1 = ss.size() > 0 ? ss[0] : ""; //档位 + std::string str2 = ss.size() > 1 ? ss[1] : ""; + int v = std::atoi(str1.c_str()); + if(v < 6) + { + std::vector sss = Tools::split(str2, "-"); + m_car.DwZsBl[v].CarZsBmin = sss.size() > 0 ? std::atoi(sss[0].c_str()) : 0; + m_car.DwZsBl[v].CarZsBMax = sss.size() > 1 ? std::atoi(sss[1].c_str()) : 0; + m_car.ZDB_Flag = true; + } + } + else + { + break; + } + } + //20170508 增加无挡位传感器 + m_car.bWDwcg = (parm->TXT3 == "1"); + } + }; + + const auto PARM_NO3_24 = [&](const TSystemparm* parm)->void + { + TableSysSet->set394(parm->TXT1); + }; + + const auto PARM_NO3_26 = [&](const TSystemparm* parm)->void + { + TableSysSet->set390(parm->TXT1); + }; + + const auto PARM_NO3_27 = [&](const TSystemparm* parm)->void + { + TableSysSet->set307(parm->TXT1); + }; + + const auto PARM_NO3_28 = [&](const TSystemparm* parm)->void + { + m_car.ZxxsCs = parm->TXT1; + }; + + const auto PARM_NO3_29 = [&](const TSystemparm* parm)->void + { + double v = std::atof(parm->TXT1.c_str()); + m_car.FDJZSXS = Tools::greater(v, 0.0) ? v : 1; //判断 > 0 + }; + + const auto PARM_NO3_34 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + std::vector s = Tools::split(parm->TXT1, ";"); + for(int j = 0; 0 < s.size(); j++) + { + if(s[j] != "") + { + std::vector ss = Tools::split(s[j], ":"); + std::string str1 = ss.size() > 0 ? ss[0] : ""; + std::string str2 = ss.size() > 1 ? ss[1] : ""; + int PosI = std::atoi(str1.c_str()); + if(PosI >= 1 && PosI <= 6) + { + m_car.DwZsMin[PosI] = str2 != "" ? std::atoi(str2.c_str()) : 700; + } + } + else + { + break; + } + } + } + }; + + const auto PARM_NO3_35 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + std::vector s = Tools::split(parm->TXT1, ","); + //Z轴加速度阀值 + m_car.Z_JSD_FZ = s.size() > 0 && s[0] != "" ? std::atof(s[0].c_str()) : 0; + //起步闯动 + m_car.QBCD = s.size() > 1 && s[1] != "" ? std::atof(s[1].c_str()) : 1.2; + } + }; + + const auto PARM_NO3_38 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + TableSysSet->set425(parm->TXT1); + } + }; + + const auto PARM_NO3_39 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + m_car.JJDXS = std::atoi(parm->TXT1.c_str()); + } + }; + + const auto PARM_NO3_43 = [&](const TSystemparm* parm)->void + { + //条件1:档位,车速,持续时间,结束标志(0-不结束,1红闪,2黑闪),距离,^ + //条件2:档位,车速,持续时间,0,距离,^评判时间(0-最后评判,1-里程达到就评判)^ + if(parm->TXT1 != "") + { + TableSysSet->set301(parm->TXT1); + } + }; + + const auto PARM_NO3_44 = [&](const TSystemparm* parm)->void + { + //未松离合,档位取之前的档位(0-否 1-是 2-表示使用模糊档位,可以对1,3,5档位和2,4档位进行筛选) + if(parm->TXT1 != "") + { + TableSysSet->set491(parm->TXT1); + } + }; + + const auto PARM_NO3_46 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + m_car.DC_YK_Must = parm->TXT1; + } + }; + + const auto PARM_NO3_48 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + TableSysSet->set513(parm->TXT1); + const std::vector& s513 = TableSysSet->asArray513(); + m_car.CSBType = s513.size() > 0 ? std::atoi(s513[0].c_str()) : 0; + if(m_car.CSBType == 2) + { + std::vector ss = Tools::split(s513[1], ","); + m_car.CSB13_CommNo = ss.size() > 0 ? std::atoi(ss[0].c_str()) : 0; + m_car.CSB24_CommNo = ss.size() > 1 ? std::atoi(ss[1].c_str()) : 0; + if(m_car.CSB13_CommNo == 0 || m_car.CSB24_CommNo == 0) + { + m_car.CSBType = 0; + } + } + } + }; + + const auto PARM_NO3_49 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + TableSysSet->set441(parm->TXT1); + } + }; + + const auto PARM_NO3_50 = [&](const TSystemparm* parm)->void + { + //车上是否能进行人工操作(0-能1-不能人工评判2-不能人工进项目3-都不能) + if(parm->TXT1 != "") + { + TableSysSet->set342(parm->TXT1); + } + }; + + + const auto PARM_NO3_51 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + TableSysSet->set501(parm->TXT1); + } + }; + + const auto PARM_NO3_52 = [&](const TSystemparm* parm)->void + { + //zxxsza,kzsdfw,zxxsdbcs,zxxsjsfz,kfsjjg, ppdtype,cfjd,cspp, + if(parm->TXT1 != "") + { + TableSysSet->set503(parm->TXT1); + } + }; + + const auto PARM_NO3_61 = [&](const TSystemparm* parm)->void + { + //靠边停车后是否进入下车状态评判(0-否 1-是) + if(parm->TXT1 != "") + { + TableSysSet->set326(parm->TXT1); + } + }; + + const auto PARM_NO3_62 = [&](const TSystemparm* parm)->void + { + //触发夜间灯光模拟的条件(0-点完成 1-插安全带或点火 2-点火 + //3-上车准备人工评判按钮切换4-点击"继续考试"按钮触发5-有点火1信号就可以触发,6-有安全带就触发) + if(parm->TXT1 != "") + { + TableSysSet->set386(parm->TXT1); + } + }; + + const auto PARM_NO3_63 = [&](const TSystemparm* parm)->void + { + if(parm->TXT1 != "") + { + //第一个^前是项目 第二个^前是里程 第三个^前是是否自动扣分 + std::vector s = Tools::split(parm->TXT1, "^"); + m_car.MFXX_KSXM = s.size() > 0 ? s[0] : ""; + m_car.MFXX_XSJL = s.size() > 1 && s[1] != "" ? std::atoi(s[1].c_str()) : 3000; + m_car.MFXX_Mark = s.size() > 2 ? s[2] == "1" : false; + //m_car.MFXX_Parm = parm3TXT1; + } + }; + //得到考车参数 int parm3Size = TableSysParm->parm3Size(); for(int i = 0; i < parm3Size; i++) { const TSystemparm* parm3 = TableSysParm->parm3By(i); if(parm3->NO2 != m_carCode) continue; - int parm3No3 = parm3->NO3; - std::string parm3TXT1 = Tools::trim(parm3->TXT1); - std::string parm3TXT3 = Tools::trim(parm3->TXT3); - //4、起步挡位 - if(parm3No3 == 4) - { - //C++翻译我们的StrToIntDef的时候,最好做一个异常处理,因为DELPHI内部做了这个实现 - m_car.StartSpeed = parm3TXT1 != "" ? std::atoi(parm3TXT1.c_str()) : 2; - } - //5、是否评判安全带 - if(parm3No3 == 5) - { - m_car.AnQuanDai = parm3TXT1 != "" ? std::atoi(parm3TXT1.c_str()) : 0; - } + TSystemparm parm = *parm3; + parm.TXT1 = Tools::trim(parm3->TXT1); + parm.TXT2 = Tools::trim(parm3->TXT2); + parm.TXT3 = Tools::trim(parm3->TXT3); - //10、必考项目列表,逗号分隔 //???yhyflag - //业务写死,用不到了 - //{ - // if(parm3No3 == 10) - // { - // Car.MustTest_List = parm3TXT1; - // if(Pos('^', parm3TXT1) > 0) - // { - // Car.MustTest_List := GetDotStr(1, parm3TXT1 + '^', '^'); - // } - // } - //} + PARM_SWITCH_BEGIN - //11、考试项目数相关的 - if(parm3No3 == 11) - { - if(Tools::pos("^", parm3TXT1) == true) - { - std::vector s = Tools::split(parm3TXT1, "^"); - m_car.Test_Sums[0] = std::atoi(s[0].c_str()); //???yhyflag - m_car.Test_Sums[1] = std::atoi(s[1].c_str()); - m_car.Test_Sums[2] = std::atoi(s[2].c_str()); - m_car.Test_Sum = m_car.Test_Sums[1]; - } - else - { - m_car.Test_Sum = std::atoi(parm3TXT1.c_str()); - } - } + PARM_CASE_WITH(2); //2 :百米脉冲 + PARM_CASE_WITH(4); //4 :起步挡位 + PARM_CASE_WITH(5); //5 :是否评判安全带 + //PARM_CASE_WITH(10); //10:必考项目列表,逗号分隔, 业务写死,用不到了 + PARM_CASE_WITH(11); //11:考试项目数相关的 + PARM_CASE_WITH(12); //12:数据库中更新考试车型(加一块保险) + PARM_CASE_WITH(13); //13:信号取反相关的 + PARM_CASE_WITH(14); //14:雾灯信号翻译规则 + PARM_CASE_WITH(15); //15:车型相关的个性参数设置 //按车型设定行驶距离限制(0表示按缺省设定值) + PARM_CASE_WITH(16); //16:发动机怠速相关(评判车辆闯动) + PARM_CASE_WITH(18); //18:挡位距离扣分设置 + PARM_CASE_WITH(20); //20:当前车型的夜考时间设置(如果设置了这个了,SysSet[19] 就被覆盖) + PARM_CASE_WITH(21); //21:挡位最高限速 + PARM_CASE_WITH(22); //22:抖动时发动机闯动比例 + PARM_CASE_WITH(23); //23:挡位传动比例相关(针对外面没有挡位的车辆,兼容Windows即可) + PARM_CASE_WITH(24); //24:如按车型设置了车速范围,则将值赋给 394档位车速范围 + PARM_CASE_WITH(26); //26:按车型设置加减档位操作 + PARM_CASE_WITH(27); //27:按车型设置307参数,只考一次的项目 + PARM_CASE_WITH(28); //28:按车型设置直线行驶相关参数 + PARM_CASE_WITH(29); //29:发动机转速系数 + PARM_CASE_WITH(34); //34:档位最低转速 + PARM_CASE_WITH(35); //35:制动不平顺按车型设置阈值 起步闯动阀值 + PARM_CASE_WITH(38); //38:按车型设置加减档是否启用一档一离合 + PARM_CASE_WITH(39); //39:加减挡限时 + PARM_CASE_WITH(43); //43:按车型的条件挡位限制 + PARM_CASE_WITH(44); //44:按车型的挡位取值功能 + PARM_CASE_WITH(46); //46:大车夜考必考项目 + PARM_CASE_WITH(48); //48:绕车一周超声波参数 + PARM_CASE_WITH(49); //49:按车型的最高速度限制 + PARM_CASE_WITH(50); //50:按车型设置的人工操作相关(其实这个评判包用不到) + PARM_CASE_WITH(51); //51:按车型设置的模拟灯光参数(其实我这边用不到,打算重新开发模拟灯光) + PARM_CASE_WITH(52); //52:按车型设置的直线行驶参数 + PARM_CASE_WITH(61); //61:按车型设置的靠边停车参数 + PARM_CASE_WITH(62); //62:按车型设置的夜间模拟灯光触发条件 + PARM_CASE_WITH(63); //63:满分学习的学员考试必考项目(非正常的科目三学员),目前可以暂不考虑这种学员 - //(*2024-03-06*) - //数据库中更新考试车型(加一块保险) - if(parm3No3 == 12) - { - if(parm3TXT1 != "") - { -#if !JUDGE_USE_TSUB3T - - parm3TXT1 = Tools::toupper(parm3TXT1); - m_carInfo->kscx = parm3TXT1; -#endif - } - } - - //13、信号取反相关的 - if(parm3No3 == 13) - { - parm3TXT1 = parm3TXT1 + ",,"; - std::vector s = Tools::split(parm3TXT1, ","); - //安全带取反,离合器取反,远近光灯对调,左方向灯,右方向灯,喇叭,点火1,点火2,脚刹,手刹,门开关,副刹取反, - //安全带信号是否取反 - int sz = s.size(); - m_car.AQD_QF = (sz > 0 && s[0] == "1"); - //离合器信号是否取反 - m_car.LHQ_QF = (sz > 1 && s[1] == "1"); - //远近光灯取反 - m_car.YJGD_QF = (sz > 2 && s[2] == "1"); - //左方向灯取反 - m_car.ZFXD_QF = (sz > 3 && s[3] == "1"); - //右方向灯取反 - m_car.YFXD_QF = (sz > 4 && s[4] == "1"); - //喇叭信号取反 - m_car.LB_QF = (sz > 5 && s[5] == "1"); - //点火1取反 - m_car.DH1_QF = (sz > 6 && s[6] == "1"); - //点火2取反 - m_car.DH2_QF = (sz > 7 && s[7] == "1"); - //脚刹取反 - m_car.JS_QF = (sz > 8 && s[8] == "1"); - //手刹取反 - m_car.SS_QF = (sz > 9 && s[9] == "1"); - //门开关取反 - m_car.MKG_QF = (sz > 10 && s[10] == "1"); - //副刹取反 - m_car.FS_QF = (sz > 11 && s[11] == "1"); - } - //14、雾灯信号翻译规则 - if(parm3No3 == 14) - { - m_car.WD_Signal = std::atoi(parm3TXT1.c_str()); - } - //15:车型相关的个性参数设置 - //按车型设定行驶距离限制(0表示按缺省设定值) - if(parm3No3 == 15) - { - //根据车型读取行驶里程 - if(parm3TXT1 != "" && parm3TXT1 != "0") - { - std::vector s = Tools::split(parm3TXT1, "^"); - if(m_car.Night_ID == true) //夜考的 - { - //夜间 - m_car.Total_XSJL = (s.size() > 0 && s[0] != "") ? std::atoi(s[0].c_str()) : 3000; - m_car.XSJL = (s.size() > 2 && s[2] != "") ? std::atoi(s[2].c_str()) : 3000; - } - else - { - //白天 - m_car.Total_XSJL = (s.size() > 0 && s[0] != "") ? std::atoi(s[0].c_str()) : 3000; - m_car.XSJL = (s.size() > 1 && s[1] != "") ? std::atoi(s[1].c_str()) : 3000; - //20150806 默认白天的第一阶段,后面根据实际情况更改car.xsjl - } - - if(TableSysSet->get303() == "") - { - TableSysSet->set336(s.size() > 3 ? s[3] : ""); // Sysset[336] := GetDotStr(4, Str + '^', '^'); - } - } - } - - //16、发动机怠速相关(评判车辆闯动) - if(parm3No3 == 16) - { - if(parm3TXT3 != "") - { - m_car.FDJDS = std::atoi(parm3TXT3.c_str()); //本车发动机怠速值 - //是否设置了发动机怠速 - m_car.bFDJDS = true; - } - } - //18:挡位距离扣分设置 - if(parm3No3 == 18) - { - TableSysSet->set316(parm3TXT1); - } - //20:当前车型的夜考时间设置(如果设置了这个了,SysSet[19] 就被覆盖) - if(parm3No3 == 20) - { - if(parm3TXT1 != "") - { - std::vector s = Tools::split(parm3TXT1, ":"); - m_car.Night_Hr = s.size() > 0 ? std::atoi(s[0].c_str()) : 19; - m_car.Night_Mi = s.size() > 1 ? std::atoi(s[1].c_str()) : 0; - } - } - //21:挡位最高限速 - if(parm3No3 == 21) - { - if(parm3TXT1 != "") - { - std::vector s = Tools::split(parm3TXT1, ";"); - for(size_t j = 0; j < s.size(); j++) - { - if(s[j] != "") - { - std::vector ss = Tools::split(s[j], ":"); - std::string str1 = ss.size() > 0 ? ss[0] : ""; - std::string str2 = ss.size() > 1 ? ss[1] : ""; - m_car.DwZsMax[std::atoi(str1.c_str())] = (str2 != "" ? std::atoi(str2.c_str()) : 2500); - } - else - { - break; - } - } - } - } - //22:抖动时发动机闯动比例 - if(parm3No3 == 22) - { - double v = std::atof(parm3TXT1.c_str()); - if(Tools::greater(v, 0.0)) //判断 > 0 - { - m_car.fdjds_cdbl = v; - } - else - { - m_car.fdjds_cdbl = 0.6; - } - } - //23:挡位传动比例相关(针对外面没有挡位的车辆,兼容Windows即可) - if(parm3No3 == 23) - { - if(parm3TXT1 != "") - { - std::vector s = Tools::split(parm3TXT1, ";"); - for(int j = 0; 0 < s.size(); j++) - { - if(s[j] != "") - { - std::vector ss = Tools::split(s[j], ":"); - std::string str1 = ss.size() > 0 ? ss[0] : ""; //档位 - std::string str2 = ss.size() > 1 ? ss[1] : ""; - int v = std::atoi(str1.c_str()); - if(v < 6) - { - std::vector sss = Tools::split(str2, "-"); - m_car.DwZsBl[v].CarZsBmin = sss.size() > 0 ? std::atoi(sss[0].c_str()) : 0; - m_car.DwZsBl[v].CarZsBMax = sss.size() > 1 ? std::atoi(sss[1].c_str()) : 0; - m_car.ZDB_Flag = true; - } - } - else - { - break; - } - } - //20170508 增加无挡位传感器 - m_car.bWDwcg = (parm3TXT3 == "1"); - } - } - //24:如按车型设置了车速范围,则将值赋给 394档位车速范围 - if(parm3No3 == 24) - { - TableSysSet->set394(parm3TXT1); - - } - //26:按车型设置加减档位操作 - if(parm3No3 == 26) - { - TableSysSet->set390(parm3TXT1); - } - //27:按车型设置 307参数,只考一次的项目 - if(parm3No3 == 27) - { - TableSysSet->set307(parm3TXT1); - } - //28:按车型设置直线行驶相关参数 - if(parm3No3 == 28) - { - m_car.ZxxsCs = parm3TXT1; - } - //29:发动机转速系数 - if(parm3No3 == 29) - { - double v = std::atof(parm3TXT1.c_str()); - m_car.FDJZSXS = Tools::greater(v, 0.0) ? v : 1; //判断 > 0 - } - //34:档位最低转速 - if(parm3No3 == 34) - { - if(parm3TXT1 != "") - { - std::vector s = Tools::split(parm3TXT1, ";"); - for(int j = 0; 0 < s.size(); j++) - { - if(s[j] != "") - { - std::vector ss = Tools::split(s[j], ":"); - std::string str1 = ss.size() > 0 ? ss[0] : ""; - std::string str2 = ss.size() > 1 ? ss[1] : ""; - int PosI = std::atoi(str1.c_str()); - if(PosI >= 1 && PosI <= 6) - { - m_car.DwZsMin[PosI] = str2 != "" ? std::atoi(str2.c_str()) : 700; - } - } - else - { - break; - } - } - } - } - //35:制动不平顺按车型设置阈值 起步闯动阀值 - if(parm3No3 == 35) - { - if(parm3TXT1 != "") - { - std::vector s = Tools::split(parm3TXT1, ","); - //Z轴加速度阀值 - m_car.Z_JSD_FZ = s.size() > 0 && s[0] != "" ? std::atof(s[0].c_str()) : 0; - //起步闯动 - m_car.QBCD = s.size() > 1 && s[1] != "" ? std::atof(s[1].c_str()) : 1.2; - } - } - //38:按车型设置加减档是否启用一档一离合 - if(parm3No3 == 38) - { - if(parm3TXT1 != "") - { - TableSysSet->set425(parm3TXT1); - - } - } - //39:加减挡限时 - if(parm3No3 == 39) - { - if(parm3TXT1 != "") - { - m_car.JJDXS = std::atoi(parm3TXT1.c_str()); - } - } - //43:按车型的条件挡位限制 - //条件1:档位,车速,持续时间,结束标志(0-不结束,1红闪,2黑闪),距离,^ - //条件2:档位,车速,持续时间,0,距离,^评判时间(0-最后评判,1-里程达到就评判)^ - if(parm3No3 == 43) - { - if(parm3TXT1 != "") - { - TableSysSet->set301(parm3TXT1); - } - } - //44:按车型的挡位取值功能 - //未松离合,档位取之前的档位(0-否 1-是 2-表示使用模糊档位,可以对1,3,5档位和2,4档位进行筛选) - if(parm3No3 == 44) - { - if(parm3TXT1 != "") - { - TableSysSet->set491(parm3TXT1); - } - } - //46:大车夜考必考项目 - if(parm3No3 == 46) - { - if(parm3TXT1 != "") - { - m_car.DC_YK_Must = parm3TXT1; - } - } - - //48:绕车一周超声波参数 - if(parm3No3 == 48) - { - if(parm3TXT1 != "") - { - TableSysSet->set513(parm3TXT1); - const std::vector& s513 = TableSysSet->asArray513(); - m_car.CSBType = s513.size() > 0 ? std::atoi(s513[0].c_str()) : 0; - if(m_car.CSBType == 2) - { - std::vector ss = Tools::split(s513[1], ","); - m_car.CSB13_CommNo = ss.size() > 0 ? std::atoi(ss[0].c_str()) : 0; - m_car.CSB24_CommNo = ss.size() > 1 ? std::atoi(ss[1].c_str()) : 0; - if(m_car.CSB13_CommNo == 0 || m_car.CSB24_CommNo == 0) - { - m_car.CSBType = 0; - } - } - } - } - //49:按车型的最高速度限制 - if(parm3No3 == 49) - { - if(parm3TXT1 != "") - { - TableSysSet->set441(parm3TXT1); - } - } - //50:按车型设置的人工操作相关(其实这个评判包用不到) - //车上是否能进行人工操作(0-能1-不能人工评判2-不能人工进项目3-都不能) - if(parm3No3 == 50) - { - if(parm3TXT1 != "") - { - TableSysSet->set342(parm3TXT1); - } - } - //51:按车型设置的模拟灯光参数(其实我这边用不到,打算重新开发模拟灯光) - if(parm3No3 == 51) - { - if(parm3TXT1 != "") - { - TableSysSet->set501(parm3TXT1); - } - } - //52:按车型设置的直线行驶参数 - //zxxsza,kzsdfw,zxxsdbcs,zxxsjsfz,kfsjjg, ppdtype,cfjd,cspp, - if(parm3No3 == 52) - { - if(parm3TXT1 != "") - { - TableSysSet->set503(parm3TXT1); - } - } - //61:按车型设置的靠边停车参数 - //靠边停车后是否进入下车状态评判(0-否 1-是) - if(parm3No3 == 61) - { - if(parm3TXT1 != "") - { - TableSysSet->set326(parm3TXT1); - } - } - //62:按车型设置的夜间模拟灯光触发条件 - //触发夜间灯光模拟的条件(0-点完成 1-插安全带或点火 2-点火 - //3-上车准备人工评判按钮切换4-点击"继续考试"按钮触发5-有点火1信号就可以触发,6-有安全带就触发) - if(parm3No3 == 62) - { - if(parm3TXT1 != "") - { - TableSysSet->set386(parm3TXT1); - } - } - //63:满分学习的学员考试项目(非正常的科目三学员),目前可以暂不考虑这种学员 - if(parm3No3 == 63) - { - if(parm3TXT1 != "") - { - std::vector s = Tools::split(parm3TXT1, "^"); - m_car.MFXX_KSXM = s.size() > 0 ? s[0] : ""; - m_car.MFXX_Parm = parm3TXT1; - } - } + PARM_SWITCH_END; } std::string In_ItemSNO = "", No_ItemSNO = ""; @@ -1206,7 +1246,8 @@ void ExamCarSub3::Deal_KM3_Judge() //GetCarDirStauts() //距离计算 //7、计算科目三距离 - calcDistance(); //Calc_KM3JL() + + calcDistance(TableSysSet->asInt419() == 1, m_car.X_McH); //Calc_KM3JL() Km3NewEnterItem(); @@ -1916,15 +1957,15 @@ void ExamCarSub3::Calc_LaneDistance() //Kind:1: 车身左1(上) 2:车身右1(上) 3:车身左2(下) 4:车身右2(下) ExamCarType cartype = carType(); - int LeftBody1 = GetCarBodyPointNo(cartype, 1); - int LeftBody2 = GetCarBodyPointNo(cartype, 3); - int RightBody1 = GetCarBodyPointNo(cartype, 2); - int RightBody2 = GetCarBodyPointNo(cartype, 4); + int LeftFront = GetCarBodyPointNo(cartype, 1); + int LeftBack = GetCarBodyPointNo(cartype, 3); + int RightFront = GetCarBodyPointNo(cartype, 2); + int RightBack = GetCarBodyPointNo(cartype, 4); - if(LeftBody1 == -1 || LeftBody2 == -1 || RightBody1 == -1 || RightBody2 == -1) + if(LeftFront == -1 || LeftBack == -1 || RightFront == -1 || RightBack == -1) { - logerror("cartype=%d,LeftBody1=%d, LeftBody2=%d, LeftBody2=%d, RightBody2=%d", - cartype, LeftBody1, LeftBody2, LeftBody2, RightBody2); + logerror("cartype=%d,LeftFront=%d, LeftBack=%d, RightFront=%d, RightBack=%d", + cartype, LeftFront, LeftBack, RightFront, RightBack); return; } @@ -1976,135 +2017,29 @@ void ExamCarSub3::Calc_LaneDistance() if(p == 1) //1、车轮与本车道右侧距离 { laneDriving = &road->BorderLines[0]; - for(int k = 1; k <= 4; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.ZQ_W_b; break; //CarStatus.CheLun_Wai_ZQ_RealTime; - case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime; - case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime; - default: break; - } - line.PtBegin = body.b1_b; //CarStatus.BasePoint1_RealTime; - line.PtEnd = pt; - int dis = GpsMath::P2PDistance(pt, Lj.CenterPoint); - if(GpsMath::IsPtInArcLane(pt, poly)) - { - int distance = std::abs(std::round(dis - Lj.Radius)); - if(GpsMath::IsLineCrossArc(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Wheel_LF_ToRightEdge = distance; break; - case 2: RTKKM3.Wheel_RF_ToRightEdge = distance; break; - case 3: RTKKM3.Wheel_LB_ToRightEdge = distance; break; - case 4: RTKKM3.Wheel_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceArc(Lj, poly, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToRightEdge); + calcToDistanceArc(Lj, poly, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToRightEdge); + calcToDistanceArc(Lj, poly, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToRightEdge); + calcToDistanceArc(Lj, poly, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToRightEdge); } else if(p == 2) //2:车轮与最右侧车道右侧距离 { - for(int k = 1; k <= 6; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.ZQ_W_b; break; //CarStatus.CheLun_Wai_ZQ_RealTime; - case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime; - case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime; - case 5: pt = body.points_b[RightBody1]; break; //20240801 - case 6: pt = body.points_b[RightBody2]; break; //20240801 - default: break; - } - line.PtBegin = body.b1_b; // CarStatus.BasePoint1_RealTime; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, road->Area.Pts)) - { - int dis = GpsMath::P2PDistance(pt, L0.CenterPoint); - int distance = std::abs(std::round(dis - L0.Radius)); - if(GpsMath::IsLineCrossArc(line, L0)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Wheel_LF_ToBaseLine = distance; break; - case 2: RTKKM3.Wheel_RF_ToBaseLine = distance; break; - case 3: RTKKM3.Wheel_LB_ToBaseLine = distance; break; - case 4: RTKKM3.Wheel_RB_ToBaseLine = distance; break; - case 5: RTKKM3.Body_RF_ToBaseLine = distance; break; //20240801 - case 6: RTKKM3.Body_RB_ToBaseLine = distance; break; //20240801 - default: break; - } - } - } + calcToDistanceArc2(L0, road->Area, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToBaseLine); + calcToDistanceArc2(L0, road->Area, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToBaseLine); + calcToDistanceArc2(L0, road->Area, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToBaseLine); + calcToDistanceArc2(L0, road->Area, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToBaseLine); + calcToDistanceArc2(L0, road->Area, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToBaseLine); //20240801 + calcToDistanceArc2(L0, road->Area, body.b1_b, body.points_b[RightBack], RTKKM3.Body_RB_ToBaseLine); //20240801 } else if(p == 3) //3:车身左侧与本车道左侧距离 { - for(int k = 1; k <= 2; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.points_b[LeftBody1]; break; - case 2: pt = body.points_b[LeftBody2]; break; - default: break; - } - line.PtBegin = body.b1_b; //CarStatus.BasePoint1_RealTime; - line.PtEnd = pt; - if(GpsMath::IsPtInArcLane(pt, poly)) - { - int dis = GpsMath::P2PDistance(pt, Lj1.CenterPoint); - int distance = std::abs(std::round(dis - Lj1.Radius)); - if(GpsMath::IsLineCrossArc(line, Lj1)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Body_LF_ToLeftEdge = distance; break; - case 2: RTKKM3.Body_LB_ToLeftEdge = distance; break; - default: break; - } - } - } + calcToDistanceArc(Lj1, poly, body.b1_b, body.points_b[LeftFront], RTKKM3.Body_LF_ToLeftEdge); + calcToDistanceArc(Lj1, poly, body.b1_b, body.points_b[LeftBack], RTKKM3.Body_LB_ToLeftEdge); } else if(p == 4) //4:车身右侧与本车道右侧距离 { - for(int k = 1; k <= 2; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.points_b[RightBody1]; break; - case 2: pt = body.points_b[RightBody2]; break; - default: break; - } - line.PtBegin = body.b1_b; - line.PtEnd = pt; - if(GpsMath::IsPtInArcLane(pt, poly)) - { - int dis = GpsMath::P2PDistance(pt, Lj.CenterPoint); - int distance = std::abs(std::round(dis - Lj.Radius)); - if(GpsMath::IsLineCrossArc(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Body_RF_ToRightEdge = distance; break; - case 2: RTKKM3.Body_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceArc(Lj, poly, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToRightEdge); + calcToDistanceArc(Lj, poly, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RB_ToRightEdge); } } else @@ -2112,160 +2047,29 @@ void ExamCarSub3::Calc_LaneDistance() if(p == 1) //1、车轮与本车道右侧距离 { laneDriving = &road->BorderLines[0]; - for(int k = 1; k <= 4; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.ZQ_W_b; break; //CarStatus.CheLun_Wai_ZQ_RealTime; - case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime; - case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime; - default: break; - } - line.PtBegin = body.b1_b; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true) - { - int distance = GpsMath::PointToSeg(pt, Lj); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Wheel_LF_ToRightEdge = distance; break; - case 2: RTKKM3.Wheel_RF_ToRightEdge = distance; break; - case 3: RTKKM3.Wheel_LB_ToRightEdge = distance; break; - case 4: RTKKM3.Wheel_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToRightEdge); + calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToRightEdge); + calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToRightEdge); + calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToRightEdge); } else if(p == 2) //2:车轮与最右侧车道右侧距离 { - for(int k = 1; k <= 6; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.ZQ_W_b; break; //CarStatus.CheLun_Wai_ZQ_RealTime; - case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime; - case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime; - case 5: pt = body.points_b[RightBody1]; break; //20240801 - case 6: pt = body.points_b[RightBody2]; break; //20240801 - default: break; - } - line.PtBegin = body.b1_b; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, road->Area.Pts)) - { - int distance = GpsMath::PointToSeg(pt, L0); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, L0)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Wheel_LF_ToBaseLine = distance; break; - case 2: RTKKM3.Wheel_RF_ToBaseLine = distance; break; - case 3: RTKKM3.Wheel_LB_ToBaseLine = distance; break; - case 4: RTKKM3.Wheel_RB_ToBaseLine = distance; break; - case 5: RTKKM3.Body_RF_ToBaseLine = distance; break; //20240801 - case 6: RTKKM3.Body_RB_ToBaseLine = distance; break; //20240801 - default: break; - } - } - else - { - if(GpsMath::IsCross(line, L0)) - { - int distance = -GpsMath::PointToSeg(pt, L0); - switch(k) - { - case 5: RTKKM3.Body_RF_ToBaseLine = distance; break; //20240801 - case 6: RTKKM3.Body_RB_ToBaseLine = distance; break; //20240801 - default: break; - } - } - } - } + calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToBaseLine); + calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToBaseLine); + calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToBaseLine); + calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToBaseLine); + calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToBaseLine, true); //20240801 + calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.points_b[RightBack], RTKKM3.Body_RB_ToBaseLine, true); //20240801 } else if(p == 3) //3:车身左侧与本车道左侧距离 { - for(int k = 1; k <= 2; k++) - { - Point pt; - switch(k) - { - case 1: pt = body.points_b[LeftBody1]; break; - case 2: pt = body.points_b[LeftBody2]; break; - default: break; - } - line.PtBegin = body.b1_b; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true) - { - int distance = GpsMath::PointToSeg(pt, Lj1); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, Lj1)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Body_LF_ToLeftEdge = distance; break; - case 2: RTKKM3.Body_LB_ToLeftEdge = distance; break; - default: break; - } - } - } + calcToDistanceLine(Lj1, poly.Pts, body.b1_b, body.points_b[LeftFront], RTKKM3.Body_LF_ToLeftEdge); + calcToDistanceLine(Lj1, poly.Pts, body.b1_b, body.points_b[LeftBack], RTKKM3.Body_LB_ToLeftEdge); } else if(p == 4) //4:车身右侧与本车道右侧距离 { - for(int k = 1; k <= 2; k++) - { - Point pt; - switch(k) - { - case 1: pt = body.points_b[RightBody1]; break; - case 2: pt = body.points_b[RightBody2]; break; - default: break; - } - line.PtBegin = body.b1_b; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true) - { - int distance = GpsMath::PointToSeg(pt, Lj); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3.Body_RF_ToRightEdge = distance; break; - case 2: RTKKM3.Body_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToRightEdge); + calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.points_b[RightBack], RTKKM3.Body_RB_ToRightEdge); } } } @@ -3480,11 +3284,11 @@ void ExamCarSub3::Km3NewEnterItem() //Point_Type -1:辅助点 0:项目点 大于0:指定方向的点号 其他:非评判用 if(mp->point_type > 0 && Tools::pos("+", his1->MapPoint_Road_Code) == true) //Pos('+', LS1->MapPoint_Road_Code) > 0 { - offset = m_ctl.MaxR; + offset = m_car.MaxR; } else { - offset = m_ctl.MinR; + offset = m_car.MinR; } int JDMin = Range_cm2Gpsdeg(-offset, gpsE, true); int JDMax = Range_cm2Gpsdeg(offset, gpsE, true); @@ -4083,7 +3887,7 @@ bool ExamCarSub3::KM3AllPass() //训练模式不存在科目三结束,都是人工点击 结束按钮的 ,这里不考虑计时培训相关的业务和大监管相关的业务,只关心考试系统 if(isExamDrill()) { - return m_ctl.PassedItem.size() == m_sub3Items.size(); + return m_PassedItem.size() == m_sub3Items.size(); } //里程不够 @@ -4182,7 +3986,7 @@ void ExamCarSub3::KM3EndItem(int ItemNo, bool event, bool sound) //已考项目变量更新 if(!isItemPassed(ItemNo)) { - m_ctl.PassedItem.insert(ItemNo); + m_PassedItem.insert(ItemNo); logtrace("PassedItem=%d", ItemNo); } if(sound) @@ -4209,7 +4013,7 @@ bool ExamCarSub3::examMarkItem(ExamItemCode itemNo, const std::string& serial, b //Kind:0 自动评判 1:考车人工扣分 2:远程下发的考试扣分 bool result = false; //满分学习如果不扣分,除了考车人工点击扣分或者远程下发的扣分,一律忽略 - if(m_stuInfo.mfxx && m_stuInfo.mfxxn) + if(m_stuInfo.mfxx && !m_car.MFXX_Mark) //m_stuInfo.mfxxn { if(type == MarkTypeAuto || type == MarkTypeNS3) return result; } @@ -5147,7 +4951,7 @@ void ExamCarSub3::playItemSound(TKM3Item* item, bool enter) } else if(item->ItemNo == Sub3ItemType13Yjxs) { - code = sou; + //code = sou; //夜间行驶项目不播报开始和结束语音 } else if(item->ItemNo == Sub3ItemType14Jjdw) { @@ -5271,6 +5075,78 @@ void ExamCarSub3::dealItemNoIDEnd14Jjdw() } } +bool ExamCarSub3::calcToDistanceArc(const TModelLine& Lxx, const TModelPolygon& poly, const Pointi& b1, const Pointi& pt, int& dm, bool cross) +{ + TModelLine line; + line.PtBegin = b1; //CarStatus.BasePoint1_RealTime; + line.PtEnd = pt; + if(GpsMath::IsPtInArcLane(pt, poly)) + { + int dis = GpsMath::P2PDistance(pt, Lxx.CenterPoint); + int distance = std::abs(std::round(dis - Lxx.Radius)); + if(GpsMath::IsLineCrossArc(line, Lxx)) + { + distance = -distance; + } + dm = distance; + return true; + } + return false; +} + +bool ExamCarSub3::calcToDistanceArc2(const TModelLine& Lxx, const TModelPolygon& area, const Pointi& b1, const Pointi& pt, int& dm, bool cross) +{ + TModelLine line; + line.PtBegin = b1; //CarStatus.BasePoint1_RealTime; + line.PtEnd = pt; + if(GpsMath::IsPtInPoly(pt.x, pt.y, area.Pts)) + { + int dis = GpsMath::P2PDistance(pt, Lxx.CenterPoint); + int distance = std::abs(std::round(dis - Lxx.Radius)); + if(GpsMath::IsLineCrossArc(line, Lxx)) + { + distance = -distance; + } + dm = distance; + return true; + } + return false; +} + +bool ExamCarSub3::calcToDistanceLine(const TModelLine& Lxx, const std::vector& Pts, const Pointi& b1, const Pointi& pt, int& dm, bool cross) +{ + TModelLine line; + line.PtBegin = b1; + line.PtEnd = pt; + if(GpsMath::IsPtInPoly(pt.x, pt.y, Pts)) + { + int distance = GpsMath::PointToSeg(pt, Lxx); + if(distance == ERROR_JLCM) + { + distance = 0; + } + if(GpsMath::IsCross(line, Lxx)) + { + distance = -distance; + } + dm = distance; + return true; + } + else + { + if(cross) + { + if(GpsMath::IsCross(line, Lxx)) + { + int distance = -GpsMath::PointToSeg(pt, Lxx); + dm = distance; + return true; + } + } + } + return false; +} + DriveDirType ExamCarSub3::driveDirection(const TModelLine* lane) { //ptBegin 车道线起始点 @@ -5802,15 +5678,15 @@ void ExamCarSub3::Calc_LaneDistance_Tail() if(RTKKM3_Tail.LaneIndex == INVALID_INDEX) return; //Kind:1: 车身左1(上) 2:车身右1(上) 3:车身左2(下) 4:车身右2(下) - int LeftBody1 = GetCarBodyPointNo(cartype, 1, true); - int LeftBody2 = GetCarBodyPointNo(cartype, 3, true); - int RightBody1 = GetCarBodyPointNo(cartype, 2, true); - int RightBody2 = GetCarBodyPointNo(cartype, 4, true); + int LeftFront = GetCarBodyPointNo(cartype, 1, true); + int LeftBack = GetCarBodyPointNo(cartype, 3, true); + int RightFront = GetCarBodyPointNo(cartype, 2, true); + int RightBack = GetCarBodyPointNo(cartype, 4, true); - if(LeftBody1 == -1 || LeftBody2 == -1 || RightBody1 == -1 || RightBody2 == -1) + if(LeftFront == -1 || LeftBack == -1 || RightFront == -1 || RightBack == -1) { - logerror("cartype=%d,LeftBody1=%d, LeftBody2=%d, LeftBody2=%d, RightBody2=%d", - cartype, LeftBody1, LeftBody2, LeftBody2, RightBody2); + logerror("cartype=%d,LeftFront=%d, LeftBack=%d, RightFront=%d, RightBack=%d", + cartype, LeftFront, LeftBack, RightFront, RightBack); return; } @@ -5862,266 +5738,52 @@ void ExamCarSub3::Calc_LaneDistance_Tail() if(p == 1) //1、车轮与本车道右侧距离 { laneDriving = &road->BorderLines[0]; - for(int k = 3; k <= 4; k++) - { - Pointi pt; - switch(k) - { - case 3: pt = body.ZH_W_b_G; break; //GuaCheStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b_G; break; //GuaCheStatus.CheLun_Wai_YH_RealTime; - default: break; - } - line.PtBegin = body.b1_b_G; //GuaCheStatus.BasePoint1_RealTime; - line.PtEnd = pt; - int dis = GpsMath::P2PDistance(pt, Lj.CenterPoint); - if(GpsMath::IsPtInArcLane(pt, poly)) - { - int distance = std::abs(std::round(dis - Lj.Radius)); - if(GpsMath::IsLineCrossArc(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 3: RTKKM3_Tail.Wheel_LB_ToRightEdge = distance; break; - case 4: RTKKM3_Tail.Wheel_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceArc(Lj, poly, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToRightEdge); + calcToDistanceArc(Lj, poly, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToRightEdge); } else if(p == 2) //2:车轮与最右侧车道右侧距离 { - for(int k = 3; k <= 4; k++) - { - Pointi pt; - switch(k) - { - case 3: pt = body.ZH_W_b_G; break; //GuaCheStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b_G; break; //GuaCheStatus.CheLun_Wai_YH_RealTime; - default: break; - } - - line.PtBegin = body.b1_b_G; // GuaCheStatus.BasePoint1_RealTime; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, road->Area.Pts)) - { - int dis = GpsMath::P2PDistance(pt, L0.CenterPoint); - int distance = std::abs(std::round(dis - L0.Radius)); - if(GpsMath::IsLineCrossArc(line, L0)) - { - distance = -distance; - } - switch(k) - { - case 3: RTKKM3_Tail.Wheel_LB_ToBaseLine = distance; break; - case 4: RTKKM3_Tail.Wheel_RB_ToBaseLine = distance; break; - default: break; - } - } - } + calcToDistanceArc2(L0, road->Area, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine); + calcToDistanceArc2(L0, road->Area, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine); } else if(p == 3) //3:车身左侧与本车道左侧距离 { - for(int k = 1; k <= 2; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.points_b[LeftBody1]; break; - case 2: pt = body.points_b[LeftBody2]; break; - default: break; - } - line.PtBegin = body.b1_b_G; //CarStatus.BasePoint1_RealTime; - line.PtEnd = pt; - if(GpsMath::IsPtInArcLane(pt, poly)) - { - int dis = GpsMath::P2PDistance(pt, Lj1.CenterPoint); - int distance = std::abs(std::round(dis - Lj1.Radius)); - if(GpsMath::IsLineCrossArc(line, Lj1)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3_Tail.Body_LF_ToLeftEdge = distance; break; - case 2: RTKKM3_Tail.Body_LB_ToLeftEdge = distance; break; - default: break; - } - } - } + calcToDistanceArc(Lj1, poly, body.b1_b_G, body.points_b[LeftFront], RTKKM3_Tail.Body_LF_ToLeftEdge); + calcToDistanceArc(Lj1, poly, body.b1_b_G, body.points_b[LeftBack], RTKKM3_Tail.Body_LB_ToLeftEdge); } else if(p == 4) //4:车身右侧与本车道右侧距离 { - for(int k = 1; k <= 2; k++) - { - Pointi pt; - switch(k) - { - case 1: pt = body.points_b[RightBody1]; break; - case 2: pt = body.points_b[RightBody2]; break; - default: break; - } - line.PtBegin = body.b1_b_G; - line.PtEnd = pt; - if(GpsMath::IsPtInArcLane(pt, poly)) - { - int dis = GpsMath::P2PDistance(pt, Lj.CenterPoint); - int distance = std::abs(std::round(dis - Lj.Radius)); - if(GpsMath::IsLineCrossArc(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3_Tail.Body_RF_ToRightEdge = distance; break; - case 2: RTKKM3_Tail.Body_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceArc(Lj, poly, body.b1_b_G, body.points_b[RightFront], RTKKM3_Tail.Body_RF_ToRightEdge); + calcToDistanceArc(Lj, poly, body.b1_b_G, body.points_b[RightBack], RTKKM3_Tail.Body_RB_ToRightEdge); } } else { - laneDriving = &road->BorderLines[0]; if(p == 1) //1、车轮与本车道右侧距离 { - for(int k = 3; k <= 4; k++) - { - Pointi pt; - switch(k) - { - case 3: pt = body.ZH_W_b_G; break; //GuaCheStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b_G; break; //GuaCheStatus.CheLun_Wai_YH_RealTime; - default: break; - } - line.PtBegin = body.b1_b_G; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true) - { - int distance = GpsMath::PointToSeg(pt, Lj); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 3: RTKKM3_Tail.Wheel_LB_ToRightEdge = distance; break; - case 4: RTKKM3_Tail.Wheel_RB_ToRightEdge = distance; break; - default: break; - } - } - } + laneDriving = &road->BorderLines[0]; + calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToRightEdge); + calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToRightEdge); } else if(p == 2) //2:车轮与最右侧车道右侧距离 { - for(int k = 3; k <= 4; k++) - { - Pointi pt; - switch(k) - { - case 3: pt = body.ZH_W_b_G; break; //GuaCarStatus.CheLun_Wai_ZH_RealTime; - case 4: pt = body.YH_W_b_G; break; //GuaCarStatus.CheLun_Wai_YH_RealTime; - default: break; - } - line.PtBegin = body.b1_b_G; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, road->Area.Pts)) - { - int distance = GpsMath::PointToSeg(pt, L0); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, L0)) - { - distance = -distance; - } - switch(k) - { - case 3: RTKKM3_Tail.Wheel_LB_ToBaseLine = distance; break; - case 4: RTKKM3_Tail.Wheel_RB_ToBaseLine = distance; break; - default: break; - } - } - } + calcToDistanceLine(L0, road->Area.Pts, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine); + calcToDistanceLine(L0, road->Area.Pts, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine); } else if(p == 3) //3:车身左侧与本车道左侧距离 { - for(int k = 1; k <= 2; k++) - { - Point pt; - switch(k) - { - case 1: pt = body.points_b[LeftBody1]; break; - case 2: pt = body.points_b[LeftBody2]; break; - default: break; - } - line.PtBegin = body.b1_b_G; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true) - { - int distance = GpsMath::PointToSeg(pt, Lj1); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, Lj1)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3_Tail.Body_LF_ToLeftEdge = distance; break; - case 2: RTKKM3_Tail.Body_LB_ToLeftEdge = distance; break; - default: break; - } - } - } + calcToDistanceLine(Lj1, poly.Pts, body.b1_b_G, body.points_b[LeftFront], RTKKM3_Tail.Body_LF_ToLeftEdge); + calcToDistanceLine(Lj1, poly.Pts, body.b1_b_G, body.points_b[LeftBack], RTKKM3_Tail.Body_LB_ToLeftEdge); } else if(p == 4) //4:车身右侧与本车道右侧距离 { - for(int k = 1; k <= 2; k++) - { - Point pt; - switch(k) - { - case 1: pt = body.points_b[RightBody1]; break; - case 2: pt = body.points_b[RightBody2]; break; - default: break; - } - line.PtBegin = body.b1_b_G; - line.PtEnd = pt; - if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts) == true) - { - int distance = GpsMath::PointToSeg(pt, Lj); - if(distance == ERROR_JLCM) - { - distance = 0; - } - if(GpsMath::IsCross(line, Lj)) - { - distance = -distance; - } - switch(k) - { - case 1: RTKKM3_Tail.Body_RF_ToRightEdge = distance; break; - case 2: RTKKM3_Tail.Body_RB_ToRightEdge = distance; break; - default: break; - } - } - } + calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.points_b[RightFront], RTKKM3_Tail.Body_RF_ToRightEdge); + calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.points_b[RightBack], RTKKM3_Tail.Body_RB_ToRightEdge); } } } } } - } void ExamCarSub3::Calc_CheShenYaXian_Tail() diff --git a/entry/src/main/cpp/sdk/exam/ExamCarSub3.h b/entry/src/main/cpp/sdk/exam/ExamCarSub3.h index b2e8c4d4..6ced047a 100644 --- a/entry/src/main/cpp/sdk/exam/ExamCarSub3.h +++ b/entry/src/main/cpp/sdk/exam/ExamCarSub3.h @@ -48,7 +48,7 @@ public: //for IExamCarSub3 override virtual bool itemsNotFinishExcept(ExamItemCode excludeItemNo) const override; virtual bool itemsSomeExaming() const override; virtual bool itemsSomeExaming2(ExamItemCode itemno) const override; - virtual bool isItemPassed(ExamItemCode ItemNo) const override { return m_ctl.PassedItem.find(ItemNo) != m_ctl.PassedItem.end();}; + virtual bool isItemPassed(ExamItemCode ItemNo) const override { return m_PassedItem.find(ItemNo) != m_PassedItem.end();}; virtual bool isMarked(ExamItemCode ItemNo) const override; virtual bool isMileage() const override; virtual void setEnterItem(TKM3Item* item, bool isArtif=false) const override; @@ -80,6 +80,9 @@ protected: void dealItemNoIDEndItem(); void dealItemNoIDEnd14Jjdw(); + bool calcToDistanceArc(const TModelLine& Lxx, const TModelPolygon& poly, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false); + bool calcToDistanceArc2(const TModelLine& Lxx, const TModelPolygon& area, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false); + bool calcToDistanceLine(const TModelLine& Lxx, const std::vector& Pts, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false); //行驶方向,1正向行驶,-1逆向行驶 DriveDirType driveDirection(const TModelLine* lane); @@ -173,10 +176,12 @@ protected: //A2C6-20250310 大车A2挂车新增加的方法 void Calc_CheLunYaXian_Tail(int curRoadIndex, int curLaneIndex); //形状线计算 void RTKJudge_SubItem_Tail(); + private: ISub3JudgeItem* m_commItem = nullptr; ISub3JudgeItem* m_curItem = nullptr; std::map m_sub3Items; //科目三考试项目 + std::set m_PassedItem; //已考项目编号列表 int m_meshIndex = INVALID_INDEX; int m_meshIndex_Tail = INVALID_INDEX; //A2C6-20250306 挂车所在的网格 diff --git a/entry/src/main/cpp/sdk/exam/ExamSensor.cpp b/entry/src/main/cpp/sdk/exam/ExamSensor.cpp index 2e2e5652..f556551a 100644 --- a/entry/src/main/cpp/sdk/exam/ExamSensor.cpp +++ b/entry/src/main/cpp/sdk/exam/ExamSensor.cpp @@ -335,7 +335,7 @@ bool ExamSensor::calcCarBody(TChuanGan* cg) rcb.bumper_b = GpsMath::calcCenterPoint(ps_b[II(2)], ps_b[II(24)]); //保险杠中心点坐标(对于C1,C2,C5, 就是2点和24点的中点) TGpsInfo& gps = cg->real.gps; - if(gps.rtkEnabled && gps.valid()) //if(gps.rtkEnabled) + if(/*gps.rtkEnabled &&*/ gps.valid()) //if(gps.rtkEnabled) { int x = 0, y = 0; GpsMath::calcEastAndNorthDistanceCM(m_basePoint, cur, m_basePoint.gc, x, y); @@ -356,7 +356,7 @@ bool ExamSensor::calcCarBody(TChuanGan* cg) rcb.b2_b_G = ps_b[II(64)]; //挂车GPS从天线 TGpsInfo& gps2 = cg->real.gps2; - if(gps2.rtkEnabled && gps2.valid()) //if(gps.rtkEnabled) + if(/*gps2.rtkEnabled &&*/ gps2.valid()) //if(gps.rtkEnabled) { int x = 0, y = 0; GpsMath::calcEastAndNorthDistanceCM(m_basePoint, cur2, m_basePoint.gc, x, y); @@ -457,7 +457,7 @@ bool ExamSensor::calcCarBody(TChuanGan* cg) rcb.b2_b_G = ps_b[II(40)]; //挂车GPS从天线 TGpsInfo& gps = cg->real.gps; - if(gps.rtkEnabled && gps.valid()) //if(gps.rtkEnabled) + if(/*gps.rtkEnabled &&*/ gps.valid()) //if(gps.rtkEnabled) { int x = 0, y = 0; GpsMath::calcEastAndNorthDistanceCM(m_basePoint, cur, m_basePoint.gc, x, y); @@ -465,7 +465,7 @@ bool ExamSensor::calcCarBody(TChuanGan* cg) } TGpsInfo& gps2 = cg->real.gps2; - if(gps2.rtkEnabled && gps2.valid()) //if(gps2.rtkEnabled) + if(/*gps2.rtkEnabled &&*/ gps2.valid()) //if(gps2.rtkEnabled) { int x = 0, y = 0; GpsMath::calcEastAndNorthDistanceCM(m_basePoint, cur2, m_basePoint.gc, x, y); diff --git a/entry/src/main/cpp/sdk/exam/IExamCar.cpp b/entry/src/main/cpp/sdk/exam/IExamCar.cpp index 50a2f4a5..797d6457 100644 --- a/entry/src/main/cpp/sdk/exam/IExamCar.cpp +++ b/entry/src/main/cpp/sdk/exam/IExamCar.cpp @@ -586,27 +586,49 @@ void IExamCar::doExamRealExam(Package* pkg) //... ... } -int IExamCar::calcDistance() +int IExamCar::calcDistance(bool mc, int X_McH) { - if(m_history->size() <= 1) + int a = 0; + if(mc && X_McH > 0) { - return 0; + if(m_history->size() <= 1) + { + return 0; + } + //(当前脉冲-前一帧脉冲) / 百米脉冲 * 10000 单位cm + double ljmc = historySensor().ljmc; //要用浮点计算,否则计算出来都是0 + double ljmc1 = historySensor(1).ljmc; + a = (ljmc-ljmc1) / X_McH * 10000; + switch(m_cg->move) + { + case moveForward: m_disForward += a; break; + case moveBackward: m_disBackward += a; break; + default: break; + } } - const Pointi& h = historyGps(1).ai_gps; - const Pointi& c = historyGps().ai_gps; - if( (c.x == 0 && c.y == 0) || (h.x == 0 && h.y == 0) ) + else { - return 0; - } - double x = h.x - c.x; - double y = h.y - c.y; - int a = std::round(std::sqrt(x*x + y*y)); - switch(m_cg->move) - { - case moveForward: m_disForward += a; break; - case moveBackward: m_disBackward += a; break; - default: break; + if(m_history->size() <= 1) + { + return 0; + } + const Pointi& h = historyGps(1).ai_gps; + const Pointi& c = historyGps().ai_gps; + if( (c.x == 0 && c.y == 0) || (h.x == 0 && h.y == 0) ) + { + return 0; + } + double x = h.x - c.x; + double y = h.y - c.y; + a = std::round(std::sqrt(x*x + y*y)); + switch(m_cg->move) + { + case moveForward: m_disForward += a; break; + case moveBackward: m_disBackward += a; break; + default: break; + } } + m_cg->ai_ljjl_cm = m_disForward; m_cg->ai_dcjl_cm = m_disBackward; m_cg->ai_ljjl = m_disForward/100.0; diff --git a/entry/src/main/cpp/sdk/exam/IExamCar.h b/entry/src/main/cpp/sdk/exam/IExamCar.h index 98511385..5ac983ab 100644 --- a/entry/src/main/cpp/sdk/exam/IExamCar.h +++ b/entry/src/main/cpp/sdk/exam/IExamCar.h @@ -138,7 +138,7 @@ public: virtual void doExamRealExam(Package* pkg); virtual void doExamNS3(Package* pkg){}; //前进 后退 距离计算 - virtual int calcDistance(); + virtual int calcDistance(bool mc, int X_McH); //当前系统时间(回放取的事GPS时间) virtual int64 GetCurrentTime2() const; diff --git a/entry/src/main/cpp/sdk/judge/HJudgeItem.h b/entry/src/main/cpp/sdk/judge/HJudgeItem.h index c450afef..28d2020e 100644 --- a/entry/src/main/cpp/sdk/judge/HJudgeItem.h +++ b/entry/src/main/cpp/sdk/judge/HJudgeItem.h @@ -875,6 +875,15 @@ struct TSub3Item20Comm_XLG //标准科目三综合评判 TKm3Itm20_XLG int CGD_Nums = 0; //达到次高挡的次数 bool rmndg2 = false; //无锡地区在发动机未启动点切换,提示启动发动机,启动发动机之后播报模拟灯光 + struct TSub3SpeedDistance + { + int speed = 0; + int limit = 0; //单位米 + int distance = 0; //单位米 + }; + + std::map SDs534; + std::map SDs535; }; struct TSub3Item20Comm_NS3 //新科目三 diff --git a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge00Dcrk.cpp b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge00Dcrk.cpp index 42db7076..1e8a0e18 100644 --- a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge00Dcrk.cpp +++ b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge00Dcrk.cpp @@ -140,7 +140,7 @@ std::string Sub2Judge00Dcrk::hintMessage() //} std::string desc = m_secondInverted == false ? JUDGE_UTF8S("@第一次入库@") : JUDGE_UTF8S("@第二次入库@"); std::stringstream ss; - ss << desc; + ss << desc << "-" << m_stoppedControlLine; return ss.str(); } @@ -650,6 +650,31 @@ JUDGE_STAGE_IMPL(Sub2Judge00Dcrk, Sub2DcrkStage9) m_stage = Sub2DcrkStage10; //10出库-->车身未碰10 return; } + + if(m_stoppedControlLine == L10) + { + if(cg->move == moveForward && cg1->move == moveForward) + { + //处理倒车入库同一个方向连倒两把扣分问题 + TGPSLine line = m_model->LP3F8_8(); + if(pureCarTouchPairLine(line, {II(33), II(34)})) + { + ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_ONCE(MARK_SUB2_DCRK_01)); //add enter + } + } + } + else if(m_stoppedControlLine == L11) + { + if(cg->move == moveForward && cg1->move == moveForward) + { + //处理倒车入库同一个方向连倒两把扣分问题 + TGPSLine line = m_model->LP6F9_9(); + if(pureCarTouchPairLine(line, {II(33), II(34)})) + { + ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_ONCE(MARK_SUB2_DCRK_01)); //add enter + } + } + } } JUDGE_STAGE_IMPL(Sub2Judge00Dcrk, Sub2DcrkStage10) diff --git a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp index e0de02e9..fc12b2e7 100644 --- a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp +++ b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp @@ -232,10 +232,13 @@ JUDGE_STAGE_IMPL(Sub2Judge03Cftc, Sub2CftcStage1) { const TGPSLines LS = {m_model->L34(),m_model->L45(),m_model->L56(),m_model->L36()}; const PointSets& body = m_car->carModel()->body(); //车身24点 - static constexpr int history = 2; + static constexpr int history = 5; if(pureCarTouchSomeLines(LS, body, history) || pureCarTouchPairLines(LS, {II(3), II(15)}) || - pureCarTouchPairLines(LS, {II(11), II(23)})) + pureCarTouchPairLines(LS, {II(4), II(14)}) || + pureCarTouchPairLines(LS, {II(11), II(23)}) || + pureCarTouchPairLines(LS, {II(12), II(22)}) || + pureCarTouchPairLines(LS, {II(1), II(13)})) { m_outLine = true; //ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_ONCE(MARK_SUB2_CFTC_01)); //add enter diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge01Sczb.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge01Sczb.cpp index 4f1b3117..021b17a4 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge01Sczb.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge01Sczb.cpp @@ -104,10 +104,10 @@ void Sub3Judge01Sczb::dealJudgeItem() //if(!m_car->rtkEnabled() || !m_car->rtkEnabled(1)) return; const std::string& s386 = TableSysSet->get386(); - if(s386 == "3") //无锡地区模式只要发动机启动了,点切换就上车准备自动完成播报模拟灯光 - { - return; - } + //if(s386 == "3") //无锡地区模式只要发动机启动了,点切换就上车准备自动完成播报模拟灯光 + //{ + // return; //解除播报语音限制,由于无锡上车准备是人工评判,但是按超声波按钮要播报声音,验收检查会用到,考试不会用到, 1,"01" 扣分值要为0 + //} //有这种考试模式,上车准备是外壳完成的,这种少数,兼容 windows是这种做法 const TStuInfo& stuInfo = m_car->stuInfo(); diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp index f94d844f..b8a6de20 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge02Qbxx.cpp @@ -411,8 +411,8 @@ void Sub3Judge02Qbxx::Judge_QiBu_GuaCuoDang() { const TSensorInfo& sor = cg->real.sensor; //小车1档起步, 大车1、2档起步 - static const int gear = TableSysParm->findQiBuGear(m_car->carCode()); - + //static const int gear = TableSysParm->findQiBuGear(m_car->carCode()); + static const int gear = m_car->getTCar()->StartSpeed; #if JUDGE_USE_INSPECT if(sor.dw_plc > gear) //无锡所用原始档位 { diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge03Zxxs.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge03Zxxs.cpp index 7d9b08b4..1a5c81d1 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge03Zxxs.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge03Zxxs.cpp @@ -94,9 +94,7 @@ bool Sub3Judge03Zxxs::dealJudgeEnter() m_itemv.Gps_Offset = 40; } - TTestCtl* ctl = m_car->getTTestCtl(); - //GP - m_itemv.Gps_Offset = m_itemv.Gps_Offset + ctl->RtkOffset; + m_itemv.Gps_Offset = m_itemv.Gps_Offset + tcar->RtkOffset; m_itemv.Init_LJJL = cg->ai_ljjl; m_exam->TestPro = ItemProFlagJudge; //ToDo2:生成进项目事件 diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp index 9719c055..5e0413db 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp @@ -1373,13 +1373,15 @@ void Sub3Judge11Kbtc::Judge_KBTC_YaXian() { const TGpsInfo& gps = m_car->historyGps(); //靠边停车以右前、后轮判靠边距离(0-否 1-是) - TTestCtl* ctl = m_car->getTTestCtl(); - Max_JL0 = Max_JL0 - ctl->RtkOffset - std::round(gps.jdyz * 100) - std::round(gps.wdyz * 100); - Max_JL1 = Max_JL1 - ctl->RtkOffset - std::round(gps.jdyz * 100) - std::round(gps.wdyz * 100); - Max_JL2 = Max_JL2 - ctl->RtkOffset - std::round(gps.jdyz * 100) - std::round(gps.wdyz * 100); + int RtkOffset = m_car->getTCar()->RtkOffset; + int offset = RtkOffset + std::round(gps.jdyz*100) + std::round(gps.wdyz*100); + Max_JL0 -= offset; + Max_JL1 -= offset; + Max_JL2 -= offset; //20170724 - if(Max_JL0 > 50 + m_itemv.kbtcwc && Max_JL1 > 50 + m_itemv.kbtcwc && Max_JL2 > 50 + m_itemv.kbtcwc) + int kbtcwc = 50 + m_itemv.kbtcwc; + if(Max_JL0 > kbtcwc && Max_JL1 > kbtcwc && Max_JL2 > kbtcwc) { if(m_itemv.dcykkb == 0) //大车夜考相关的参数 { @@ -1521,13 +1523,15 @@ void Sub3Judge11Kbtc::Judge_KBTC_YaXian_Tail() { const TGpsInfo& gps2 = m_car->historyGps2(); //靠边停车以右前、后轮判靠边距离(0-否 1-是) - TTestCtl* ctl = m_car->getTTestCtl(); - Max_JL0 = Max_JL0 - ctl->RtkOffset - std::round(gps2.jdyz * 100) - std::round(gps2.wdyz * 100); - Max_JL1 = Max_JL1 - ctl->RtkOffset - std::round(gps2.jdyz * 100) - std::round(gps2.wdyz * 100); - Max_JL2 = Max_JL2 - ctl->RtkOffset - std::round(gps2.jdyz * 100) - std::round(gps2.wdyz * 100); + int RtkOffset = m_car->getTCar()->RtkOffset; + int offset = RtkOffset + std::round(gps2.jdyz*100) + std::round(gps2.wdyz*100); + Max_JL0 -= offset; + Max_JL1 -= offset; + Max_JL2 -= offset; //20170724 - if(Max_JL0 > 50 + m_itemv.kbtcwc && Max_JL1 > 50 + m_itemv.kbtcwc && Max_JL2 > 50 + m_itemv.kbtcwc) + int kbtcwc = 50 + m_itemv.kbtcwc; + if(Max_JL0 > kbtcwc && Max_JL1 > kbtcwc && Max_JL2 > kbtcwc) { if(m_itemv.dcykkb == 0) //大车夜考相关的参数 { diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge12Lkdt.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge12Lkdt.cpp index acf05df7..4319137b 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge12Lkdt.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge12Lkdt.cpp @@ -86,41 +86,43 @@ void Sub3Judge12Lkdt::dealJudgeItem() } } - double MaxAngleChange = 0; - for(int i = 1; i < 500; i++) + if(m_exam->Gps_Itemno1 == 3) //穿越3点才判断角度 20250409 { - const TChuanGan* hisi = m_car->historyChuanGan(i); - if(hisi == nullptr) break; - - const TGpsInfo& gpsi = hisi->real.gps; - - if(!gpsi.rtkEnabled) break; - if (hisi->tkCnt <= m_itemv.Enter_TK) break; - double a = gps.hxj - gpsi.hxj; - //处理越界问题 - if(a > 300) + for(int i = 1; i < 500; i++) { - a = a - 360; - } - else - { - if(a < -300) + const TChuanGan* hisi = m_car->historyChuanGan(i); + if(hisi == nullptr) break; + + const TGpsInfo& gpsi = hisi->real.gps; + + if(!gpsi.rtkEnabled) break; + if (hisi->tkCnt <= m_itemv.Enter_TK) break; + double a = gps.hxj - gpsi.hxj; + //处理越界问题 + if(a > 300) { - a = a + 360; + a = a - 360; + } + else + { + if(a < -300) + { + a = a + 360; + } } - } - a = std::abs(a); - if(Tools::greater(a, MaxAngleChange)) - { - MaxAngleChange = a; - } + a = std::abs(a); + if(Tools::greater(a, MaxAngleChange)) + { + MaxAngleChange = a; + } - if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150 - { - m_itemv.LuK_FXD_AngleOKFlag = true; - break; + if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150 + { + m_itemv.LuK_FXD_AngleOKFlag = true; + break; + } } } diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge15Lkzz.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge15Lkzz.cpp index 235bc1c4..3c5734eb 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge15Lkzz.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge15Lkzz.cpp @@ -101,39 +101,42 @@ void Sub3Judge15Lkzz::dealJudgeItem() } double MaxAngleChange = 0; - for(int i = 1; i < 500; i++) + if(m_exam->Gps_Itemno1 == 3) //穿越3点才判断角度 20250409 { - const TChuanGan* hisi = m_car->historyChuanGan(i); - if(hisi == nullptr) break; - - const TGpsInfo& gpsi = hisi->real.gps; - - if(!gpsi.rtkEnabled) break; - if (hisi->tkCnt <= m_itemv.Enter_TK) break; - double a = gps.hxj - gpsi.hxj; - //处理越界问题 - if(a > 300) + for(int i = 1; i < 500; i++) { - a = a - 360; - } - else - { - if(a < -300) + const TChuanGan* hisi = m_car->historyChuanGan(i); + if(hisi == nullptr) break; + + const TGpsInfo& gpsi = hisi->real.gps; + + if(!gpsi.rtkEnabled) break; + if (hisi->tkCnt <= m_itemv.Enter_TK) break; + double a = gps.hxj - gpsi.hxj; + //处理越界问题 + if(a > 300) { - a = a + 360; + a = a - 360; + } + else + { + if(a < -300) + { + a = a + 360; + } } - } - a = std::abs(a); - if(Tools::greater(a, MaxAngleChange)) - { - MaxAngleChange = a; - } + a = std::abs(a); + if(Tools::greater(a, MaxAngleChange)) + { + MaxAngleChange = a; + } - if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150 - { - m_itemv.LuK_FXD_AngleOKFlag = true; - break; + if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150 + { + m_itemv.LuK_FXD_AngleOKFlag = true; + break; + } } } diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge16Lkyz.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge16Lkyz.cpp index b6dc4ab5..ffaf466f 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge16Lkyz.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge16Lkyz.cpp @@ -99,39 +99,42 @@ void Sub3Judge16Lkyz::dealJudgeItem() } double MaxAngleChange = 0; - for(int i = 1; i < 500; i++) + if(m_exam->Gps_Itemno1 == 3) //穿越3点才判断角度 20250409 { - const TChuanGan* hisi = m_car->historyChuanGan(i); - if(hisi == nullptr) break; - - const TGpsInfo& gpsi = hisi->real.gps; - - if(!gpsi.rtkEnabled) break; - if (hisi->tkCnt <= m_itemv.Enter_TK) break; - double a = gps.hxj - gpsi.hxj; - //处理越界问题 - if(a > 300) + for(int i = 1; i < 500; i++) { - a = a - 360; - } - else - { - if(a < -300) + const TChuanGan* hisi = m_car->historyChuanGan(i); + if(hisi == nullptr) break; + + const TGpsInfo& gpsi = hisi->real.gps; + + if(!gpsi.rtkEnabled) break; + if (hisi->tkCnt <= m_itemv.Enter_TK) break; + double a = gps.hxj - gpsi.hxj; + //处理越界问题 + if(a > 300) { - a = a + 360; + a = a - 360; + } + else + { + if(a < -300) + { + a = a + 360; + } } - } - a = std::abs(a); - if(Tools::greater(a, MaxAngleChange)) - { - MaxAngleChange = a; - } + a = std::abs(a); + if(Tools::greater(a, MaxAngleChange)) + { + MaxAngleChange = a; + } - if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150 - { - m_itemv.LuK_FXD_AngleOKFlag = true; - break; + if(a > m_itemv.LuK_Zx_Deg && a < 210) //20180830 -150 + { + m_itemv.LuK_FXD_AngleOKFlag = true; + break; + } } } diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp index a60ef290..71702aba 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp @@ -24,9 +24,6 @@ bool Sub3Judge20Comm::dealJudgeEnter() void Sub3Judge20Comm::dealJudgeItem() { HELP_COST_TIME(""); - const TChuanGan* cg = m_car->historyChuanGan(); - const TGpsInfo& gps = cg->real.gps; - const TSensorInfo& sor = cg->real.sensor; if(!m_CSHItmv20_Flag) { @@ -36,53 +33,27 @@ void Sub3Judge20Comm::dealJudgeItem() return; } + const TChuanGan* cg = m_car->historyChuanGan(); + const TSensorInfo& sor = cg->real.sensor; //更新脚刹车距离 if(sor.jsc == SYES) { m_car->setPub_JSC_JL(cg->ai_ljjl); } - //更新累计用时 yhyflag - // if(gps.sj != 0 && m_car->getStartTime() != 0) - // { - // Tds.LastTime := SecondsBetween(cg.ai_gps_TM, Tds.StartTime); //Tds.LastTime - // } - if(m_car->historyCount() <= 2*FRAMES_PER_SECOND+2) return; //必须收满2秒数据 - if(sor.dw >= 4 && sor.dw != 9 && gps.sd >= 10) - { - m_itemvXLG.CGD_Nums = m_itemvXLG.CGD_Nums + 1; - } + //Step0-4设置发动机怠速 Set_FDJ_DS(); //Step0-5 座椅检查(贵州),按贵州翻译即可 doCheck_ZuoYi(); //Step0-3触发起步项目 - if(m_itemvCJH.qbjxmsj == 0 || (m_itemvCJH.qbjxmsj != 0 && m_car->rtkEnabled() && m_car->rtkEnabled(1) && m_car->rtkEnabled(2))) - { - CallQiBu(m_itemvCJH.qbsjcs); - } + CallQiBu(); //自动靠边停车计算 Call_Auto_KBTC(); - //Step0-2触发模拟灯光 - CallMoNiDengGuang(); //240710 - //if(!m_car->isReplay()) //(Data_Replay.Kind = 2) then //杨海洋实际考试模式(就是说非回放模式的) - //{ - // CallMoNiDengGuang(); //yhyflag - //} - //else - //{ - // //回放相关的 - // if(sor.rmndg == SYES) - // { - // TKM3Item* item = m_car->findExamItem(Sub3ItemType41Mndg); - // if(item && item->TestPro == ItemProFlagIdle) - // { - // m_car->setEnterItem(item); - // } - // } - //} + //240710 触发模拟灯光 + CallMoNiDengGuang(); //1、溜车评判 //Judge_LiuChe(); //移到起步专项里评判 20240730 @@ -140,12 +111,15 @@ void Sub3Judge20Comm::dealJudgeItem() //23、使用挡位与车速长时间不匹配,造成车辆发动机转速过高或过低(发动机转速〉2500转或〈900转,且时间大于30秒)扣100分 Judge_DangWei_CS_ZS(); + Judge_Sysset534(); + Judge_Sysset535(false); + //24、全程必须达到次高挡位 、全程必须次高挡达到5秒 Judge_CiGaoDang(); //逆向行驶评判 //JudgeDriveDirection(); - ////////////////////////////////////////////////////////////////////////////// + //附加评判(比如:非法掉头、超速SystemParm8、夜间行驶) Judge_Extra(); @@ -170,6 +144,43 @@ void Sub3Judge20Comm::Init_ZongHe() m_itemvXLG = TSub3Item20Comm_XLG(); m_itemvNS3 = TSub3Item20Comm_NS3(); + const std::vector>& s534 = TableSysSet->asArray2_534(); + const std::vector>& s535 = TableSysSet->asArray2_535(); + + for(size_t i = 0 ; i < s534.size(); i++) + { + const std::vector& ss = s534[i]; + if(ss.size() >= 3) + { + if(name2ExamCarType(ss[0].c_str()) == m_carType) + { + int speed = std::atoi(ss[1].c_str()); + int limit = std::atoi(ss[2].c_str()); + auto& item = m_itemvXLG.SDs534[speed]; + item.speed = speed; + item.limit = limit; + item.distance = 0; + } + } + } + + for(size_t i = 0 ; i < s535.size(); i++) + { + const std::vector& ss = s535[i]; + if(ss.size() >= 3) + { + if(name2ExamCarType(ss[0].c_str()) == m_carType) + { + int speed = std::atoi(ss[1].c_str()); + int limit = std::atoi(ss[2].c_str()); + auto& item = m_itemvXLG.SDs535[speed]; + item.speed = speed; + item.limit = limit; + item.distance = 0; + } + } + } + const TChuanGan* cg = m_car->historyChuanGan(); const TSensorInfo& sor = cg->real.sensor; const std::string& ksdd = TableSysSet->get211(); @@ -1004,8 +1015,15 @@ void Sub3Judge20Comm::CallMoNiDengGuang() } } -void Sub3Judge20Comm::CallQiBu(int qbsj) +void Sub3Judge20Comm::CallQiBu() { + bool condition = (m_itemvCJH.qbjxmsj == 0 || + (m_itemvCJH.qbjxmsj != 0 && m_car->rtkEnabled() && m_car->rtkEnabled(1) && m_car->rtkEnabled(2))); + if(!condition) + { + return; + } + const TChuanGan* cg = m_car->historyChuanGan(); const std::string& ksdd = TableSysSet->get211(); @@ -1029,7 +1047,7 @@ void Sub3Judge20Comm::CallQiBu(int qbsj) } //20171107 - int k = qbsj * 5; + int k = m_itemvCJH.qbsjcs * 5; for(int i = 1; i <= k; i++) { TChuanGan* his = m_car->historyChuanGan(i); @@ -5510,9 +5528,65 @@ void Sub3Judge20Comm::Judge_DangWei_CS_ZS() } } +void Sub3Judge20Comm::Judge_Sysset534() +{ + const TChuanGan* cg = m_car->historyChuanGan(); + const TChuanGan* his1 = m_car->historyChuanGan(1); + for(auto it = m_itemvXLG.SDs534.begin(); it != m_itemvXLG.SDs534.end(); ++it) + { + auto& v = it->second; + if(cg->real.gps.sd < v.speed) + { + v.distance += (cg->ai_ljjl_cm - his1->ai_ljjl_cm); + } + + if(v.distance > v.limit*100) + { + JUDGE_MARK_SUB3(20, "46", true); + } + } +} + +void Sub3Judge20Comm::Judge_Sysset535(bool timing) +{ + if(!timing) + { + const TChuanGan* cg = m_car->historyChuanGan(); + const TChuanGan* his1 = m_car->historyChuanGan(1); + for(auto it = m_itemvXLG.SDs535.begin(); it != m_itemvXLG.SDs535.end(); ++it) + { + auto& v = it->second; + if(cg->real.gps.sd > v.speed) + { + v.distance += (cg->ai_ljjl_cm - his1->ai_ljjl_cm); + } + } + } + else + { + for(auto it = m_itemvXLG.SDs535.begin(); it != m_itemvXLG.SDs535.end(); ++it) + { + auto& v = it->second; + if(v.distance < v.limit*100) + { + JUDGE_MARK_SUB3(20, "50", true); + } + } + } +} + //24、全程次高挡评判 void Sub3Judge20Comm::Judge_CiGaoDang() { + TChuanGan* cg = m_car->historyChuanGan(); + const TSensorInfo& sor = cg->real.sensor; + const TGpsInfo& gps = cg->real.gps; + + if(sor.dw >= 4 && sor.dw != 9 && gps.sd >= 10) + { + m_itemvXLG.CGD_Nums = m_itemvXLG.CGD_Nums + 1; + } + //按照军华说的 在行驶距离达到的实际判断全程次高档 20240731 //301 第3个^参数 1:达到行驶里程 非1靠边停车开始前 20240805 bool timing = false; //次高档时机 @@ -5557,6 +5631,8 @@ void Sub3Judge20Comm::Judge_CiGaoDang() { JUDGE_MARK_SUB3(14, "04", true); } + + Judge_Sysset535(true); } } diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.h b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.h index 04c9830e..cfbfb411 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.h +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.h @@ -106,7 +106,7 @@ protected: //加载模拟灯光项目 void CallMoNiDengGuang(); //调用起步 - void CallQiBu(int qbsj = 5); + void CallQiBu(); //======================================= //1、溜车评判 //移到起步专项里评判 20240730 @@ -193,6 +193,12 @@ protected: //23、挡位与车速、转速不匹配 void Judge_DangWei_CS_ZS(); + //低于设置速度累计行驶大于设置里程,不合格(车型1,速度,里程; 车型2,速度,里程;) + void Judge_Sysset534(); + + //全程车速达标要求(车型1,速度,里程; 车型2,速度,里程;) + void Judge_Sysset535(bool timing); + //24、全程次高挡评判 void Judge_CiGaoDang(); diff --git a/entry/src/main/cpp/sdk/utility/HBean.h b/entry/src/main/cpp/sdk/utility/HBean.h index e971f0c0..74be8c38 100644 --- a/entry/src/main/cpp/sdk/utility/HBean.h +++ b/entry/src/main/cpp/sdk/utility/HBean.h @@ -283,7 +283,7 @@ JUDGE_C_API BoardType name2BoardType(const char* name); #define EnumMakeGpsStatus(declare) \ declare(gpsStatusINVALID, "----", JUDGE_UTF8S("无效(数据异常)")) \ declare(gpsStatusSINGLE, "SINGLE", JUDGE_UTF8S("单点解(收星数过低10米以内)***前置机没发差分改帧数给后置机")) \ - declare(gpsStatusPSRDIFF, "PSRDIFF", JUDGE_UTF8S("伪距解(没见过这种状态3米以内)没收到差分改正数?")) \ + declare(gpsStatusPSRDIFF, "PSRDIFF", JUDGE_UTF8S("伪距解(没见过这种状态3米以内)后置机没收到差分改正数?")) \ declare(gpsStatusANGLE, "**ANGLE**", JUDGE_UTF8S("**角度差分状态**?")) \ declare(gpsStatusNARROW_INT, "NARROW_INT", JUDGE_UTF8S("固定解(正常状态0.02米以内)")) \ declare(gpsStatusNARROW_FLOAT, "NARROW_FLOAT", JUDGE_UTF8S("浮点解(有遮挡物0.5米以内)")) diff --git a/entry/src/main/cpp/sdk/utility/HTypes.cpp b/entry/src/main/cpp/sdk/utility/HTypes.cpp index 821efa44..06d3f6bc 100644 --- a/entry/src/main/cpp/sdk/utility/HTypes.cpp +++ b/entry/src/main/cpp/sdk/utility/HTypes.cpp @@ -111,3 +111,14 @@ bool TMarkRule::is_agree(const nlohmann::json& jsonn, const char* param) } return true; } + +bool TDBCarInfo::is_agree(const nlohmann::json& jsonn, const char* param) +{ + if(JUDGE_STRING(X_MCH) == param) + { + bool agree = jsonn.contains(param); + if(!agree) {logwarning("TDBCarInfo missing param 'X_MCH'.");} + return agree; + } + return true; +} diff --git a/entry/src/main/cpp/sdk/utility/HTypes.h b/entry/src/main/cpp/sdk/utility/HTypes.h index a9d1c39d..4708ecb1 100644 --- a/entry/src/main/cpp/sdk/utility/HTypes.h +++ b/entry/src/main/cpp/sdk/utility/HTypes.h @@ -258,16 +258,19 @@ struct TDBCarInfo std::string CARID; //考车ID std::string IPADDR; //IP地址 std::string CARCLASS; //考车名称,比如:桑塔纳、新捷达 + std::string X_MCH; //百米脉冲 2025-04-02 新增 std::string KSCX; //考试车型,比如:C1,C2 std::string CARNAME; //预留 std::string FLAG; //预留 std::string BK1; //预留 std::string BK2; //预留 + bool is_agree(const nlohmann::json& jsonn, const char* param); JUDGE_JSON_DEFINE(TDBCarInfo, CARID, IPADDR, CARCLASS, + X_MCH, KSCX, CARNAME, FLAG, @@ -466,7 +469,7 @@ struct TStuInfo //bool nitem1 = false; //JG_Not_Item1_Flag 不需要考上车准备(监管)免考 //bool nitem41 = false; //JG_Not_Item_41_Flag 不需要考模拟灯光(监管)免考 bool mfxx = false; //满分学习学员标志 ManFenXueXi_Flag - bool mfxxn = false; //满分学习不扣分标志 ManFenXueXiNotKouFenFlag + //bool mfxxn = false; //满分学习不扣分标志 ManFenXueXiNotKouFenFlag bool zeng = false; //增驾模式标志 true增驾 false非增驾 @@ -507,7 +510,7 @@ struct TStuInfo //nitem1, //nitem41, mfxx, - mfxxn, + //mfxxn, zeng); }; @@ -1401,6 +1404,7 @@ struct TCar { TCar() { } + int X_McH = 0; //百米脉冲值(杭州竟然用到这玩意)优先carinfo的 int StartSpeed = 0; //起步档位 int AnQuanDai = 0; //安全带:0-不判 1-判保险带 2-气压 int Test_Sum = 0; //考试项目总数 @@ -1443,13 +1447,22 @@ struct TCar int CSBType = 0; //20171113 超声波模式 std::string DC_YK_Must; //夜考项目 20180301 std::string MFXX_KSXM; //满分学习考试项目 - std::string MFXX_Parm; //满分学习参数 + int MFXX_XSJL = 0; //满分学习行驶里程 + bool MFXX_Mark = false; //满分学习是否电子评判自动扣分 + //std::string MFXX_Parm; //满分学习参数 + + std::string XSJL_Parm; //档位转速比 2014111 struct TCarZsBl { int CarZsBmin = -1; int CarZsBMax = -1; }; std::array DwZsBl; //20141111 档位转速比 档位转速比 array[1..5] bool ZDB_Flag = false; + std::string MustTest_List; //必考项目列表 业务写死,用不到了 + + int RtkOffset = 0; + int MaxR = 0, MinR = 0; //最大及最小GPS搜索范围CM + //********************以下目前没用到******************* /* //std::string CarTypeName; //车型名称 大货 对应carinfo表CARCLASS字段 @@ -1464,7 +1477,7 @@ struct TCar int Stop_TC_ClrJZ = 0; //已停车,多少个plc周期(200MS)内无脉冲,则清除rec_QJ_LJMC,rec_HT_LJMC int Stop_PanDuan = 0; //判断多少个plc周期(200MS)内无脉冲,则表示停车 int DeadDirect = 0; //打死方向的判断值 - //std::string MustTest_List; //必考项目列表 + double fdjds_ddbl = 0.0, fdjds_ddbl_gd = 0.0 ; //抖动时发动机怠速比例 fdjds_ddbl_gd 高档怠速比例 double plc_cs_X = 0.0; //PLC的车速系数 std::string ASize; //车型轮廓 @@ -1505,9 +1518,7 @@ struct TTestCtl { int64 ZXD_KSSJ_TK = 0; //转向灯考试时间 bool ZXD_GuanBi = false; //转向灯关闭标记 - std::set PassedItem; //std::string PassedItem; //已考项目编号列表 - int MaxR = 0, MinR = 0; //最大及最小GPS搜索范围CM - int RtkOffset = 0; + //std::set PassedItem; //已考项目编号列表 bool IsPassItem14 = false; //加减挡拉是否考过 20170117 int JianSuLeiXing = 0; //20171007减速类型 int LianXuBianDaoKind = 0; //20171008 连续变更车道方式 0:abc 1:aba和abc都判 diff --git a/entry/src/main/cpp/test/CMakeLists.txt b/entry/src/main/cpp/test/CMakeLists.txt index ae5b97f9..a0c19f7f 100644 --- a/entry/src/main/cpp/test/CMakeLists.txt +++ b/entry/src/main/cpp/test/CMakeLists.txt @@ -66,4 +66,3 @@ add_subdirectory(${CMAKE_SOURCE_DIR}/test/test_sdk) add_subdirectory(${CMAKE_SOURCE_DIR}/test/test_dll) add_subdirectory(${CMAKE_SOURCE_DIR}/test/test_lib) add_subdirectory(${CMAKE_SOURCE_DIR}/test/test_c) -#add_subdirectory(${CMAKE_SOURCE_DIR}/test/test_rtsp) diff --git a/entry/src/main/cpp/test/test_sdk/TestJudge.cpp b/entry/src/main/cpp/test/test_sdk/TestJudge.cpp index a7ad3dad..de7ed027 100644 --- a/entry/src/main/cpp/test/test_sdk/TestJudge.cpp +++ b/entry/src/main/cpp/test/test_sdk/TestJudge.cpp @@ -880,10 +880,15 @@ TEST_F(TestJudge, test_sub3_car_check_data) carInfo += writeFmt("CSBType", car->CSBType); carInfo += writeFmt("DC_YK_Must", car->DC_YK_Must); carInfo += writeFmt("MFXX_KSXM", car->MFXX_KSXM); - carInfo += writeFmt("MFXX_Parm", car->MFXX_Parm); + carInfo += writeFmt("MFXX_Mark", car->MFXX_Mark); + //carInfo += writeFmt("MFXX_Parm", car->MFXX_Parm); carInfo += writeFmt("DwZsBl", car->DwZsBl); carInfo += writeFmt("ZDB_Flag", car->ZDB_Flag); + carInfo += writeFmt("RtkOffset", car->RtkOffset); + carInfo += writeFmt("MaxR", car->MaxR); + carInfo += writeFmt("MinR", car->MinR); + /* carInfo += writeFmt("CarTypeName", car->CarTypeName); carInfo += writeFmt("CarTypeSystemParmNo", car->CarTypeSystemParmNo); @@ -931,11 +936,8 @@ TEST_F(TestJudge, test_sub3_car_check_data) carInfo += writeFmt("DW_change", car->DW_change); */ std::string ctlInfo; - ctlInfo += writeFmt("PassedItem", ctl->PassedItem); - ctlInfo += writeFmt("MaxR", ctl->MaxR); - ctlInfo += writeFmt("MinR", ctl->MinR); + //ctlInfo += writeFmt("PassedItem", ctl->PassedItem); ctlInfo += writeFmt("Gps_St", ctl->Gps_St); - ctlInfo += writeFmt("RtkOffset", ctl->RtkOffset); //ctlInfo += writeFmt("KSDD", ctl->KSDD); ctlInfo += writeFmt("IsPassItem14", ctl->IsPassItem14); ctlInfo += writeFmt("JianSuLeiXing", ctl->JianSuLeiXing); diff --git a/entry/src/main/cpp/toolkit/replay/ReplayWrapper.cpp b/entry/src/main/cpp/toolkit/replay/ReplayWrapper.cpp index 54ca196a..665e1098 100644 --- a/entry/src/main/cpp/toolkit/replay/ReplayWrapper.cpp +++ b/entry/src/main/cpp/toolkit/replay/ReplayWrapper.cpp @@ -265,14 +265,6 @@ bool ReplayWrapper::replayTrackTypeInitExam(const TTrackData::Ptr& data) return false; } -#if JUDGE_USE_TSUB3T - std::string cartype = "A2"; - std::string filepath = "/home/duolun/work/yhy/harmony/cpp/model/test_model_enc/"; - info.carmodel = Tools::readFileText(filepath + cartype + ".txt"); - info.kscx = cartype; - strInit = XParser::toAny(info); -#endif - if(!replayCheckSdkVersion(info.sdkver)) { return false; @@ -370,36 +362,6 @@ void ReplayWrapper::replayTrackTypeRealExam(const TTrackData::Ptr& data) { std::string strReal(data->data); -#if JUDGE_USE_TSUB3T - static const TGPSPoint p37(103.841274135,31.012432248,230.955,0,0); - static const TGPSPoint p38(103.841286701451,31.0124322861895,230.955,1.20004482295139,89.7968345127514); - static const TGPSPoint p39(103.841279465,31.012412912,230.955,0,0); - static const TGPSPoint p40(103.841279443108,31.0124020886131,230.955,1.20003086096901,180.099325685847); - double jd1 = p39.jd - p37.jd; - double wd1 = p39.wd - p37.wd; - //double jd2 = p40.jd - p38.jd; - //double wd2 = p40.wd - p38.wd; - TRealExam info; - if(!XParser::fromAny(strReal, info)) - { - logerror("replayTrackTypeRealExam parser error."); - return; - } - - info.gps2 = info.gps; - - ExamCarType cartype = replayExamCarType(); - if(IS_A2(cartype)) - { - info.gps.hxj -= 90; - } - else if(IS_A1(cartype)) - { - - } - strReal = XParser::toAny(info); -#endif - int codeValue = examJudgeRealExam(strReal.c_str(), strReal.length()); TASSERT(codeValue == codeSuccess, ""); diff --git a/entry/src/main/ets/IdlServiceExt/idl_service_ext_impl.ts b/entry/src/main/ets/IdlServiceExt/idl_service_ext_impl.ts index 61c0fee0..b76f0f1d 100644 --- a/entry/src/main/ets/IdlServiceExt/idl_service_ext_impl.ts +++ b/entry/src/main/ets/IdlServiceExt/idl_service_ext_impl.ts @@ -33,6 +33,12 @@ export default class ServiceExtImpl extends IdlServiceExtStub { console.log("lixiao error", JSON.stringify(err)) }) }).catch(err => { + callback(0, JSON.stringify({ + code: 1, + data: JSON.stringify({ + code: 2300007 + }) + })); console.log("lixiao paste error", JSON.stringify(err)) }) } diff --git a/entry/src/main/ets/config/global.ts b/entry/src/main/ets/config/global.ts index 6e16dd4d..136232e4 100644 --- a/entry/src/main/ets/config/global.ts +++ b/entry/src/main/ets/config/global.ts @@ -26,7 +26,7 @@ export const GlobalConfig={ //济南 jn:{ km2:[], - km3:['2023.12.13.01','2023.09.30.1'] + km3:['2025.04.16.01','2023.09.30.1'] }, //洛阳 ly:{ diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index 642d3942..fe62e7af 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -8,7 +8,7 @@ import { TempLogger } from '../common/utils/TempLogger'; import DB from '../common/database/DbSql'; import { initTable } from '../common/service/initable'; import Want from '@ohos.app.ability.Want'; -import { examPeerOccupy } from '../pages/judgeSDK/api'; +import { examJudgeVersion, examPeerOccupy } from '../pages/judgeSDK/api'; export default class EntryAbility extends UIAbility { async onCreate(want, launchParam) { @@ -55,7 +55,7 @@ export default class EntryAbility extends UIAbility { // globalThis.judgeVersion ='2024.08.24.1' // globalThis.version ='2023.12.13.01'; globalThis.version = GlobalConfig.version.jn.km3[0]; - globalThis.judgeVersion = GlobalConfig.version.jn.km3[1]; + globalThis.judgeVersion = await examJudgeVersion(); globalThis.tcpSendNum = 0 globalThis.videoVersion = '1.0'