满分学习优化
This commit is contained in:
		
							parent
							
								
									92cb6838d2
								
							
						
					
					
						commit
						41e92dac38
					
				| @ -121,6 +121,7 @@ struct MemoryStorage | ||||
| struct CpuOccupyInfo | ||||
| { | ||||
|     double idle = 0.0; | ||||
|     double iowait = 0.0; | ||||
|     double user = 0.0; | ||||
|     double sys  = 0.0; | ||||
| }; | ||||
|  | ||||
| @ -74,22 +74,26 @@ | ||||
|         user.LowPart = userTimes.dwLowDateTime; | ||||
|         user.HighPart = userTimes.dwHighDateTime; | ||||
| 
 | ||||
|         unsigned long long _total = kernel.QuadPart + user.QuadPart; | ||||
|         unsigned long long _idle  = idle.QuadPart; | ||||
|         unsigned long long _user  = user.QuadPart; | ||||
|         unsigned long long _total  = kernel.QuadPart + user.QuadPart; | ||||
|         unsigned long long _idle   = idle.QuadPart; | ||||
|         unsigned long long _iowait = 0; | ||||
|         unsigned long long _user   = user.QuadPart; | ||||
| 
 | ||||
|         static unsigned long long prevTotal = 0, prevIdle = 0, prevUser = 0; | ||||
|         unsigned long long __total = _total - prevTotal; | ||||
|         unsigned long long __idle  = _idle  - prevIdle; | ||||
|         unsigned long long __user  = _user  - prevUser; | ||||
|         prevTotal = _total; | ||||
|         prevIdle  = _idle; | ||||
|         prevUser  = _user; | ||||
|         static unsigned long long prevTotal = 0, prevIdle = 0, prevIowait = 0, prevUser = 0; | ||||
|         unsigned long long __total  = _total  - prevTotal; | ||||
|         unsigned long long __idle   = _idle   - prevIdle; | ||||
|         unsigned long long __iowait = _iowait - prevIowait; | ||||
|         unsigned long long __user   = _user   - prevUser; | ||||
|         prevTotal  = _total; | ||||
|         prevIdle   = _idle; | ||||
|         prevIowait = _iowait; | ||||
|         prevUser   = _user; | ||||
|         if(__total > 0) | ||||
|         { | ||||
|             occupy->idle = (__idle) * 100.0 / __total; | ||||
|             occupy->user = (__user) * 100.0 / __total; | ||||
|             occupy->sys  = (__total - __idle - __user) * 100.0 / __total; | ||||
|             occupy->idle   = (__idle) * 100.0 / __total; | ||||
|             occupy->iowait = (__iowait) * 100.0 / __total; | ||||
|             occupy->user   = (__user) * 100.0 / __total; | ||||
|             occupy->sys    = (__total - __idle - __user) * 100.0 / __total; | ||||
|             return true; | ||||
|         } | ||||
|         return false; | ||||
| @ -187,36 +191,76 @@ | ||||
| 
 | ||||
|     bool __sdk_cpu_occupy__(struct CpuOccupyInfo* occupy) | ||||
|     { | ||||
|         std::ifstream procStat("/proc/stat"); | ||||
|         //procStat.ignore(5, ' ');  //跳过'cpu'前缀
 | ||||
|         //std::stringstream buffer;
 | ||||
|         //buffer << procStat.rdbuf();
 | ||||
|         //std::string str = buffer.str();
 | ||||
|         std::string line; | ||||
|         std::getline(procStat, line); // 读取第一行,通常是CPU统计信息
 | ||||
|         std::istringstream buffer(line); // 将字符串流转换为输入流
 | ||||
|         procStat.close(); | ||||
|         static constexpr bool root = false; //root用户权限
 | ||||
|         if(root) | ||||
|         { | ||||
|             std::ifstream procStat("/proc/stat"); | ||||
|             if(!procStat.is_open()) | ||||
|             { | ||||
|                 return false; | ||||
|             } | ||||
|             //procStat.ignore(5, ' ');  //跳过'cpu'前缀
 | ||||
|             //std::stringstream buffer;
 | ||||
|             //buffer << procStat.rdbuf();
 | ||||
|             //std::string str = buffer.str();
 | ||||
|             std::getline(procStat, line); // 读取第一行,通常是CPU统计信息
 | ||||
|             procStat.close(); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             FILE* pipe = ::popen("cat /proc/stat", "r"); //执行命令并打开管道
 | ||||
|             if(!pipe) | ||||
|             { | ||||
|                 return false; | ||||
|             } | ||||
|             //逐行读取输出
 | ||||
|             char buf[1024] = {0}; | ||||
|             if(::fgets(buf, sizeof(buf), pipe) == NULL) | ||||
|             { | ||||
|                 ::pclose(pipe); //关闭管道
 | ||||
|                 return false; | ||||
|             } | ||||
|             ::pclose(pipe); //关闭管道
 | ||||
|             line = buf; | ||||
| 
 | ||||
|             // std::list<std::string> data;
 | ||||
|             // while(::fgets(buf, sizeof(buf), pipe) != nullptr)
 | ||||
|             // {
 | ||||
|             //     line = buf;
 | ||||
|             //     memset(buf,0,sizeof(buf));
 | ||||
|             //     if(line.substr(0,3) != "cpu") { break; }
 | ||||
|             //     if(line.back() == '\n') { line.pop_back(); }
 | ||||
|             //     data.push_back(line);
 | ||||
|             // }
 | ||||
|             // ::pclose(pipe); // 关闭管道
 | ||||
|         } | ||||
| 
 | ||||
|         std::istringstream sis(line); // 将字符串流转换为输入流
 | ||||
|         std::string key; | ||||
|         unsigned long long user=0, nice=0, sys=0, idle=0, iowait=0, irq=0, softirq=0, steal=0, guest=0, guest_nice=0; | ||||
|         buffer >> key >> user >> nice >> sys >> idle >> iowait >> irq >> softirq >> steal >> guest >> guest_nice; | ||||
|         sis >> key >> user >> nice >> sys >> idle >> iowait >> irq >> softirq >> steal >> guest >> guest_nice; | ||||
| 
 | ||||
|         unsigned long long _total = user + nice + sys + idle + iowait + irq + softirq + steal + guest + guest_nice; | ||||
|         unsigned long long _idle  = idle + iowait; | ||||
|         unsigned long long _user  = user; | ||||
|         unsigned long long _total  = user + nice + sys + idle + iowait + irq + softirq + steal + guest + guest_nice; | ||||
|         unsigned long long _idle   = idle; | ||||
|         unsigned long long _iowait = iowait; | ||||
|         unsigned long long _user   = user; | ||||
| 
 | ||||
|         static unsigned long long prevTotal = 0, prevIdle = 0, prevUser = 0; | ||||
|         unsigned long long __total = _total - prevTotal; | ||||
|         unsigned long long __idle  = _idle  - prevIdle; | ||||
|         unsigned long long __user  = _user  - prevUser; | ||||
|         prevTotal = _total; | ||||
|         prevIdle  = _idle; | ||||
|         prevUser  = _user; | ||||
|         static unsigned long long prevTotal = 0, prevIdle = 0, prevIowait = 0, prevUser = 0; | ||||
|         unsigned long long __total  = _total  - prevTotal; | ||||
|         unsigned long long __idle   = _idle   - prevIdle; | ||||
|         unsigned long long __iowait = _iowait - prevIowait; | ||||
|         unsigned long long __user   = _user   - prevUser; | ||||
|         prevTotal  = _total; | ||||
|         prevIdle   = _idle; | ||||
|         prevIowait = _iowait; | ||||
|         prevUser   = _user; | ||||
|         if(__total > 0) | ||||
|         { | ||||
|             occupy->idle = (__idle) * 100.0 / __total; | ||||
|             occupy->user = (__user) * 100.0 / __total; | ||||
|             occupy->sys  = (__total - __idle - __user) * 100.0 / __total; | ||||
|             occupy->idle   = (__idle) * 100.0 / __total; | ||||
|             occupy->iowait = (__iowait) * 100.0 / __total; | ||||
|             occupy->user   = (__user) * 100.0 / __total; | ||||
|             occupy->sys    = (__total - __idle - __user) * 100.0 / __total; | ||||
|             return true; | ||||
|         } | ||||
|         return false; | ||||
|  | ||||
| @ -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 | ||||
| 
 | ||||
| /*
 | ||||
|  * 是否启用新科目三评判 | ||||
|  */ | ||||
|  | ||||
| @ -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  "2504031330b" | ||||
| #if JUDGE_USE_OLD | ||||
| #   undef JUDGE_VERSION_STAMP | ||||
| #   define JUDGE_VERSION_STAMP  "2411121010b.old" | ||||
|  | ||||
| @ -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++) | ||||
|  | ||||
| @ -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
 | ||||
| @ -339,6 +340,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); | ||||
|  | ||||
| @ -358,7 +358,7 @@ void ExamCarSub2::dealJudgeExam() | ||||
|     //}
 | ||||
| 
 | ||||
|     //2.6.1)
 | ||||
|     calcDistance();  //距离计算
 | ||||
|     calcDistance(false, 0);  //距离计算
 | ||||
| 
 | ||||
|     //2.6.2) 监管判断
 | ||||
|     //函数是一个监管检查函数,这里我们先不考虑监管,我模拟一下这个函数的写法
 | ||||
|  | ||||
| @ -300,7 +300,7 @@ bool ExamCarSub3::Init_KM3_Global() | ||||
|     { | ||||
|         TableSysSet->set481("0"); | ||||
|     } | ||||
|     if(std::atoi(s481.c_str()) > 30) | ||||
|     if(std::stoi(s481) > 30) | ||||
|     { | ||||
|         TableSysSet->set481("15"); | ||||
|     } | ||||
| @ -309,15 +309,15 @@ bool ExamCarSub3::Init_KM3_Global() | ||||
|     const std::vector<std::string>& s349 = TableSysSet->asArray349(); | ||||
|     if(s349.size() > 5 && s349[5] != "") | ||||
|     { | ||||
|         m_ctl.RtkOffset = std::atoi(s349[5].c_str()); | ||||
|         m_car.RtkOffset = std::stoi(s349[5]); | ||||
|     } | ||||
|     else if(s349.size() > 4 && s349[4] != "") | ||||
|     { | ||||
|         m_ctl.RtkOffset = std::atoi(s349[4].c_str()); | ||||
|         m_car.RtkOffset = std::stoi(s349[4]); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         m_ctl.RtkOffset = 0; //20240807 之前是2
 | ||||
|         m_car.RtkOffset = 0; //20240807 之前是2
 | ||||
|     } | ||||
| 
 | ||||
|     //2、强制启用139号部令
 | ||||
| @ -341,7 +341,7 @@ bool ExamCarSub3::Init_KM3_Global() | ||||
|     } | ||||
|     //6、减速类型(特殊地方的业务,后期开发个性评判可能会用到)
 | ||||
|     const std::vector<std::string>& s500 = TableSysSet->asArray500(); | ||||
|     m_ctl.JianSuLeiXing = (s500.size() > 12 && s500[12] != "" ? std::atoi(s500[12].c_str()) : 0); | ||||
|     m_ctl.JianSuLeiXing = (s500.size() > 12 && s500[12] != "" ? std::stoi(s500[12]) : 0); | ||||
|     //扩展>0表示启用车速   =1 表示  30车速   >1 表示浙江 只有路口可以结合车速
 | ||||
|     if(m_ctl.JianSuLeiXing > 30 || (m_ctl.JianSuLeiXing > 2 && m_ctl.JianSuLeiXing < 10)) | ||||
|     { | ||||
| @ -352,7 +352,7 @@ bool ExamCarSub3::Init_KM3_Global() | ||||
|     //lxbgcd:变更车道相关定义
 | ||||
|     const std::vector<std::string>& s512 = TableSysSet->asArray512(); | ||||
|     //南宁个性参数,翻译即可
 | ||||
|     m_ctl.NanNingWavKind = (s512.size() > 2 && s512[2] != "" ? std::atoi(s512[2].c_str()) : 0); | ||||
|     m_ctl.NanNingWavKind = (s512.size() > 2 && s512[2] != "" ? std::stoi(s512[2]) : 0); | ||||
| 
 | ||||
|     //其他参数赋值
 | ||||
|     m_ctl.tsxhsj = 60 * 1000; | ||||
| @ -382,17 +382,14 @@ bool ExamCarSub3::Init_KM3_Global() | ||||
|     */ | ||||
| 
 | ||||
|     //10、搜索范围赋值
 | ||||
|     m_ctl.MaxR = 6000; | ||||
|     m_ctl.MinR = 3000; | ||||
| 
 | ||||
|     const std::vector<std::string>& 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::stoi(s329[0]) : 6000); | ||||
|     m_car.MinR = (s329.size() > 1 && s329[1] != "" ? std::stoi(s329[1]) : 3000); | ||||
| 
 | ||||
|     //11、得到夜考时间点
 | ||||
|     const std::vector<std::string>& s19 = TableSysSet->asArray19(); | ||||
|     m_car.Night_Hr = (s19.size() > 0 && s19[0] != "" ? std::atoi(s19[0].c_str()) : 19); //22 //???yhyflag
 | ||||
|     m_car.Night_Mi = (s19.size() > 1 && s19[1] != "" ? std::atoi(s19[1].c_str()) : 0); | ||||
|     m_car.Night_Hr = (s19.size() > 0 && s19[0] != "" ? std::stoi(s19[0]) : 19); //22
 | ||||
|     m_car.Night_Mi = (s19.size() > 1 && s19[1] != "" ? std::stoi(s19[1]) : 0); | ||||
| 
 | ||||
|     //3、抖动时发动机闯动比例
 | ||||
|     m_car.fdjds_cdbl = 0.6; | ||||
| @ -409,6 +406,34 @@ bool ExamCarSub3::Init_KM3_Global() | ||||
|     //7、起步闯动
 | ||||
|     m_car.QBCD = -1; | ||||
| 
 | ||||
|     //小车是不存在夜考的
 | ||||
|     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 +475,14 @@ bool ExamCarSub3::Init_KM3_Global() | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     //从SystemParm中读取参数
 | ||||
|     this->UpdateCarParmWithSystemParm(); | ||||
| 
 | ||||
|     if(m_stuInfo.mfxx) // && m_stuInfo.czlx == 1
 | ||||
|     { | ||||
|         m_car.XSJL = m_car.MFXX_XSJL; | ||||
|     } | ||||
| 
 | ||||
|     //注释改成:将之前的行驶里程减掉
 | ||||
|     if(m_stuInfo.yklc != 0) | ||||
|     { | ||||
| @ -460,8 +493,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 +526,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,7 +615,7 @@ bool ExamCarSub3::Init_KM3_Global() | ||||
|         //只有掉头项目才有右掉头一说  //20150516
 | ||||
|         examItem->bYdt = (itemNo == Sub3ItemType12Dtxx && parm1->TXT2 == "ydt" ? true : false); //是否右掉头
 | ||||
| 
 | ||||
|         //如果是满分学习的
 | ||||
|         //如果是满分学习的 czlx=1 m_stuInfo.czlx //满分学习非必考项目,一开始考试就通知外壳合格变绿
 | ||||
|         if(m_stuInfo.mfxx && m_car.MFXX_KSXM != "" && itemNo != Sub3ItemType13Yjxs && IS_A1A2A3B1B2C6(cartype)) | ||||
|         { | ||||
|             std::string s  = "," + std::to_string(itemNo) + ","; | ||||
| @ -615,9 +623,10 @@ bool ExamCarSub3::Init_KM3_Global() | ||||
|             if(Tools::pos(s, ss) == false) | ||||
|             { | ||||
|                 examItem->NoID = true; | ||||
|                 KM3EndItem(itemNo,true,false); | ||||
|             } | ||||
|         } | ||||
|         //对夜考项目进行特殊处理
 | ||||
|         //对夜考项目进行特殊处理 //大车夜考非必考项目,一开始考试就通知外壳合格变绿
 | ||||
|         if(m_car.Night_ID == true && itemNo != Sub3ItemType13Yjxs) | ||||
|         { | ||||
|             std::string s  = "," + std::to_string(itemNo) + ","; | ||||
| @ -627,8 +636,8 @@ bool ExamCarSub3::Init_KM3_Global() | ||||
|                 //examItem->Item_Color = itemStateHg;
 | ||||
|                 //examItem->TestPro = ItemProFlagIdle;
 | ||||
|                 //examItem->FinishFlag = true;
 | ||||
|                 examItem->NoID = true; | ||||
|                 KM3EndItem(itemNo,true,false); | ||||
|                 //examItem->NoID = true;
 | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @ -650,10 +659,22 @@ void ExamCarSub3::UpdateCarParmWithSystemParm() | ||||
| 
 | ||||
|         std::string parm3TXT1 = Tools::trim(parm3->TXT1); | ||||
|         std::string parm3TXT3 = Tools::trim(parm3->TXT3); | ||||
| 
 | ||||
|         //switch(parm3No3)
 | ||||
|         //{
 | ||||
|         //case 2: m_car.X_McH = parm3TXT1 != "" ? std::atoi(parm3TXT1.c_str()) : 0; break;
 | ||||
|         //case 4: m_car.StartSpeed = parm3TXT1 != "" ? std::atoi(parm3TXT1.c_str()) : 2; break;
 | ||||
|         //default: break;
 | ||||
|         //}
 | ||||
| 
 | ||||
|         //百米脉冲
 | ||||
|         if(parm3No3 == 2) | ||||
|         { | ||||
|             m_car.X_McH = parm3TXT1 != "" ? std::atoi(parm3TXT1.c_str()) : 0; | ||||
|         } | ||||
|         //4、起步挡位
 | ||||
|         if(parm3No3 == 4) | ||||
|         { | ||||
|             //C++翻译我们的StrToIntDef的时候,最好做一个异常处理,因为DELPHI内部做了这个实现
 | ||||
|             m_car.StartSpeed = parm3TXT1 != "" ? std::atoi(parm3TXT1.c_str()) : 2; | ||||
|         } | ||||
|         //5、是否评判安全带
 | ||||
| @ -698,11 +719,8 @@ void ExamCarSub3::UpdateCarParmWithSystemParm() | ||||
|         { | ||||
|             if(parm3TXT1 != "") | ||||
|             { | ||||
| #if !JUDGE_USE_TSUB3T | ||||
| 
 | ||||
|                 parm3TXT1 = Tools::toupper(parm3TXT1); | ||||
|                 m_carInfo->kscx = parm3TXT1; | ||||
| #endif | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| @ -1053,7 +1071,9 @@ void ExamCarSub3::UpdateCarParmWithSystemParm() | ||||
|             { | ||||
|                 std::vector<std::string> s = Tools::split(parm3TXT1, "^"); | ||||
|                 m_car.MFXX_KSXM = s.size() > 0 ? s[0] : ""; | ||||
|                 m_car.MFXX_Parm = parm3TXT1; | ||||
|                 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] != "" ? std::atoi(s[2].c_str()) : 0; | ||||
|                 //m_car.MFXX_Parm = parm3TXT1;
 | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @ -1206,7 +1226,8 @@ void ExamCarSub3::Deal_KM3_Judge() | ||||
|         //GetCarDirStauts()
 | ||||
| 
 | ||||
|         //距离计算 //7、计算科目三距离
 | ||||
|         calcDistance(); //Calc_KM3JL()
 | ||||
| 
 | ||||
|         calcDistance(TableSysSet->asInt419() == 1, m_car.X_McH); //Calc_KM3JL()
 | ||||
| 
 | ||||
|         Km3NewEnterItem(); | ||||
| 
 | ||||
| @ -3480,11 +3501,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); | ||||
| @ -4209,7 +4230,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; | ||||
|     } | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -266,18 +266,19 @@ const char* ExamService::examPeerOccupy() | ||||
|     logdebug("call examPeerOccupy."); | ||||
|     //if(!m_init) return QE(errorInitNot);
 | ||||
| 
 | ||||
|     TOccupyInfo occ; | ||||
| 
 | ||||
|     CpuOccupyInfo cpu; | ||||
|     MemoryStorage memo; | ||||
|     DiskStorage disk; | ||||
| 
 | ||||
|     Tools::peerOccupyCpu(cpu); | ||||
| 
 | ||||
|     MemoryStorage memo; | ||||
|     Tools::peerOccupyMemory(memo, MB); | ||||
| 
 | ||||
|     DiskStorage disk; | ||||
|     Tools::peerOccupyDisk("./", disk, MB); | ||||
| 
 | ||||
|     TOccupyInfo occ; | ||||
|     occ.cpu.cores = Tools::getCpuProcessors(); | ||||
|     occ.cpu.idle = std::round(cpu.idle); | ||||
|     occ.cpu.iowait = std::round(cpu.iowait); | ||||
|     occ.cpu.user = std::round(cpu.user); | ||||
|     occ.cpu.sys = std::round(cpu.sys); | ||||
| 
 | ||||
|  | ||||
| @ -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
 | ||||
|         int ljmc = historySensor().ljmc; | ||||
|         int 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; | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -31,7 +31,6 @@ public: | ||||
|     virtual const char* examSecretDecrypt(const char* data, int size) = 0; | ||||
|     virtual int examFreeMemory(const char* buf) = 0; | ||||
| 
 | ||||
| 
 | ||||
|     virtual void examJudgeCallbackLogToCaller(int level, const char* info, int len) = 0; | ||||
|     virtual void examJudgeCallbackRealExamToCaller(const char* data, int len) = 0; | ||||
|     virtual void examJudgeCallbackPerformToCaller(const char* data, int len) = 0; | ||||
|  | ||||
| @ -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)  //无锡所用原始档位
 | ||||
|         { | ||||
|  | ||||
| @ -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:生成进项目事件
 | ||||
|  | ||||
| @ -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) //大车夜考相关的参数
 | ||||
|             { | ||||
|  | ||||
| @ -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米以内)")) | ||||
|  | ||||
| @ -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; | ||||
| } | ||||
|  | ||||
| @ -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,18 @@ 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;    //满分学习参数
 | ||||
| 
 | ||||
|     //档位转速比 2014111
 | ||||
|     struct TCarZsBl { int CarZsBmin = -1; int CarZsBMax = -1; }; | ||||
|     std::array<TCarZsBl, 7> DwZsBl; //20141111 档位转速比 档位转速比  array[1..5]
 | ||||
|     bool                    ZDB_Flag = false; | ||||
| 
 | ||||
|     int                    RtkOffset = 0; | ||||
|     int                    MaxR = 0, MinR = 0; //最大及最小GPS搜索范围CM
 | ||||
| 
 | ||||
|     //********************以下目前没用到*******************
 | ||||
| /*
 | ||||
|     //std::string           CarTypeName; //车型名称 大货 对应carinfo表CARCLASS字段
 | ||||
| @ -1506,8 +1515,6 @@ struct TTestCtl | ||||
|     int64                  ZXD_KSSJ_TK = 0;  //转向灯考试时间
 | ||||
|     bool                   ZXD_GuanBi = false; //转向灯关闭标记
 | ||||
|     std::set<ExamItemCode> PassedItem; //std::string PassedItem; //已考项目编号列表
 | ||||
|     int                    MaxR = 0, MinR = 0; //最大及最小GPS搜索范围CM
 | ||||
|     int                    RtkOffset = 0; | ||||
|     bool                   IsPassItem14 = false; //加减挡拉是否考过 20170117
 | ||||
|     int                    JianSuLeiXing = 0; //20171007减速类型
 | ||||
|     int                    LianXuBianDaoKind = 0; //20171008 连续变更车道方式 0:abc 1:aba和abc都判
 | ||||
| @ -1936,12 +1943,13 @@ struct TRadarInfo | ||||
| 
 | ||||
| struct TCpuOccupy | ||||
| { | ||||
|     int32 cores = 0; | ||||
|     int32 idle  = 0; | ||||
|     int32 user  = 0; | ||||
|     int32 sys   = 0; | ||||
|     int32 cores  = 0; | ||||
|     int32 idle   = 0; | ||||
|     int32 iowait = 0; | ||||
|     int32 user   = 0; | ||||
|     int32 sys    = 0; | ||||
| 
 | ||||
|     JUDGE_JSON_DEFINE(TCpuOccupy,cores,idle,user,sys); | ||||
|     JUDGE_JSON_DEFINE(TCpuOccupy,cores,idle,iowait,user,sys); | ||||
| 
 | ||||
|     TCpuOccupy() noexcept { clean(); } | ||||
|     virtual ~TCpuOccupy() noexcept { clean(); } | ||||
| @ -1949,6 +1957,7 @@ struct TCpuOccupy | ||||
|     { | ||||
|         cores = 0; | ||||
|         idle = 0; | ||||
|         iowait = 0; | ||||
|         user = 0; | ||||
|         sys  = 0; | ||||
|     } | ||||
|  | ||||
| @ -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); | ||||
| @ -932,10 +937,7 @@ TEST_F(TestJudge, test_sub3_car_check_data) | ||||
| */ | ||||
|     std::string ctlInfo; | ||||
|     ctlInfo += writeFmt("PassedItem", ctl->PassedItem); | ||||
|     ctlInfo += writeFmt("MaxR", ctl->MaxR); | ||||
|     ctlInfo += writeFmt("MinR", ctl->MinR); | ||||
|     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); | ||||
|  | ||||
| @ -12,6 +12,7 @@ MenuSelectCarInfo::MenuSelectCarInfo(QWidget *parent) : QWidget(parent), IMenuAc | ||||
|     m_options[ID_CARID]    = __KIT_NEW__(SelectOption, this, m_ui->CARID); | ||||
|     m_options[ID_IPADDR]   = __KIT_NEW__(SelectOption, this, m_ui->IPADDR); | ||||
|     m_options[ID_CARCLASS] = __KIT_NEW__(SelectOption, this, m_ui->CARCLASS); | ||||
|     m_options[ID_X_MCH]    = __KIT_NEW__(SelectOption, this, m_ui->X_MCH); | ||||
|     m_options[ID_KSCX]     = __KIT_NEW__(SelectOption, this, m_ui->KSCX); | ||||
|     m_options[ID_CARNAME]  = __KIT_NEW__(SelectOption, this, m_ui->CARNAME); | ||||
|     m_options[ID_FLAG]     = __KIT_NEW__(SelectOption, this, m_ui->FLAG); | ||||
| @ -42,7 +43,7 @@ void MenuSelectCarInfo::onTriggeredClicked() | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     ListOptions CARID,IPADDR,CARCLASS,KSCX,CARNAME,FLAG,BK1,BK2; | ||||
|     ListOptions CARID,IPADDR,CARCLASS,X_MCH,KSCX,CARNAME,FLAG,BK1,BK2; | ||||
|     for(size_t i = 0; i < m_carinfo.size(); i++) | ||||
|     { | ||||
|         const TDBCarInfo& val = m_carinfo[i]; | ||||
| @ -55,6 +56,9 @@ void MenuSelectCarInfo::onTriggeredClicked() | ||||
|         str = kit::fromUtf8(val.CARCLASS); | ||||
|         if(!CARCLASS.contains(str)) CARCLASS.push_back(str); | ||||
| 
 | ||||
|         str = kit::fromUtf8(val.X_MCH); | ||||
|         if(!X_MCH.contains(str)) X_MCH.push_back(str); | ||||
| 
 | ||||
|         str = kit::fromUtf8(val.KSCX); | ||||
|         if(!KSCX.contains(str)) KSCX.push_back(str); | ||||
| 
 | ||||
| @ -75,6 +79,7 @@ void MenuSelectCarInfo::onTriggeredClicked() | ||||
|     m_options[ID_CARID]->createOption(CARID); | ||||
|     m_options[ID_IPADDR]->createOption(IPADDR); | ||||
|     m_options[ID_CARCLASS]->createOption(CARCLASS); | ||||
|     m_options[ID_X_MCH]->createOption(X_MCH); | ||||
|     m_options[ID_KSCX]->createOption(KSCX); | ||||
|     m_options[ID_CARNAME]->createOption(CARNAME); | ||||
|     m_options[ID_FLAG]->createOption(FLAG); | ||||
| @ -89,6 +94,7 @@ void MenuSelectCarInfo::onTriggeredClicked() | ||||
|         m_ui->table->setItem(row, ID_CARID, createTableItem(kit::fromUtf8(val.CARID))); | ||||
|         m_ui->table->setItem(row, ID_IPADDR, createTableItem(kit::fromUtf8(val.IPADDR))); | ||||
|         m_ui->table->setItem(row, ID_CARCLASS, createTableItem(kit::fromUtf8(val.CARCLASS))); | ||||
|         m_ui->table->setItem(row, ID_X_MCH, createTableItem(kit::fromUtf8(val.X_MCH))); | ||||
|         m_ui->table->setItem(row, ID_KSCX, createTableItem(kit::fromUtf8(val.KSCX))); | ||||
|         m_ui->table->setItem(row, ID_CARNAME, createTableItem(kit::fromUtf8(val.CARNAME))); | ||||
|         m_ui->table->setItem(row, ID_FLAG, createTableItem(kit::fromUtf8(val.FLAG))); | ||||
| @ -104,7 +110,8 @@ void MenuSelectCarInfo::slot_selectChanged(SelectOption* option) | ||||
|         const TDBCarInfo& val = m_carinfo[i]; | ||||
|         bool match = matchings(kit::fromUtf8(val.CARID), m_options[ID_CARID]->selectedOptions()) && | ||||
|                 matchings(kit::fromUtf8(val.IPADDR), m_options[ID_IPADDR]->selectedOptions()) && | ||||
|                 matchings(kit::fromUtf8(val.CARCLASS), m_options[ID_CARCLASS]->selectedOptions())  && | ||||
|                 matchings(kit::fromUtf8(val.CARCLASS), m_options[ID_CARCLASS]->selectedOptions()) && | ||||
|                 matchings(kit::fromUtf8(val.X_MCH), m_options[ID_X_MCH]->selectedOptions()) && | ||||
|                 matchings(kit::fromUtf8(val.KSCX), m_options[ID_KSCX]->selectedOptions()) && | ||||
|                 matchings(kit::fromUtf8(val.CARNAME), m_options[ID_CARNAME]->selectedOptions()) && | ||||
|                 matchings(kit::fromUtf8(val.FLAG), m_options[ID_FLAG]->selectedOptions()) && | ||||
| @ -122,6 +129,7 @@ void MenuSelectCarInfo::slot_optionChanged(SelectOption* option) | ||||
|         bool match = matching(kit::fromUtf8(val.CARID), m_options[ID_CARID]->selectedText()) && | ||||
|                 matching(kit::fromUtf8(val.IPADDR), m_options[ID_IPADDR]->selectedText()) && | ||||
|                 matching(kit::fromUtf8(val.CARCLASS), m_options[ID_CARCLASS]->selectedText()) && | ||||
|                 matching(kit::fromUtf8(val.X_MCH), m_options[ID_X_MCH]->selectedText()) && | ||||
|                 matching(kit::fromUtf8(val.KSCX), m_options[ID_KSCX]->selectedText()) && | ||||
|                 matching(kit::fromUtf8(val.CARNAME), m_options[ID_CARNAME]->selectedText()) && | ||||
|                 matching(kit::fromUtf8(val.FLAG), m_options[ID_FLAG]->selectedText()) && | ||||
|  | ||||
| @ -24,8 +24,8 @@ private slots: | ||||
| private: | ||||
|     Ui::MenuSelectCarInfo* m_ui = nullptr; | ||||
| 
 | ||||
|     enum{ID_CARID, ID_IPADDR, ID_CARCLASS, ID_KSCX, ID_CARNAME, ID_FLAG, ID_BK1, ID_BK2, ID_MAX_carinfo}; | ||||
|     const QStringList m_columnName = {"CARID", "IPADDR", "CARCLASS", "KSCX", "CARNAME", "FLAG", "BK1", "BK2"}; | ||||
|     enum{ID_CARID, ID_IPADDR, ID_CARCLASS, ID_X_MCH, ID_KSCX, ID_CARNAME, ID_FLAG, ID_BK1, ID_BK2, ID_MAX_carinfo}; | ||||
|     const QStringList m_columnName = {"CARID", "IPADDR", "CARCLASS", "X_MCH", "KSCX", "CARNAME", "FLAG", "BK1", "BK2"}; | ||||
| 
 | ||||
|     std::array<SelectOption*, ID_MAX_carinfo> m_options; | ||||
|     TDBCarInfos  m_carinfo; | ||||
|  | ||||
| @ -6,7 +6,7 @@ | ||||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>1211</width> | ||||
|     <width>1236</width> | ||||
|     <height>529</height> | ||||
|    </rect> | ||||
|   </property> | ||||
| @ -44,7 +44,7 @@ | ||||
|     <rect> | ||||
|      <x>10</x> | ||||
|      <y>50</y> | ||||
|      <width>1191</width> | ||||
|      <width>1221</width> | ||||
|      <height>471</height> | ||||
|     </rect> | ||||
|    </property> | ||||
| @ -52,7 +52,7 @@ | ||||
|   <widget class="QComboBox" name="IPADDR"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>216</x> | ||||
|      <x>210</x> | ||||
|      <y>10</y> | ||||
|      <width>90</width> | ||||
|      <height>30</height> | ||||
| @ -62,7 +62,7 @@ | ||||
|   <widget class="QLabel" name="label_8"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>160</x> | ||||
|      <x>154</x> | ||||
|      <y>15</y> | ||||
|      <width>51</width> | ||||
|      <height>21</height> | ||||
| @ -78,7 +78,7 @@ | ||||
|   <widget class="QLabel" name="label_9"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>310</x> | ||||
|      <x>304</x> | ||||
|      <y>15</y> | ||||
|      <width>71</width> | ||||
|      <height>21</height> | ||||
| @ -94,7 +94,7 @@ | ||||
|   <widget class="QComboBox" name="CARCLASS"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>386</x> | ||||
|      <x>380</x> | ||||
|      <y>10</y> | ||||
|      <width>90</width> | ||||
|      <height>30</height> | ||||
| @ -104,7 +104,7 @@ | ||||
|   <widget class="QLabel" name="label_10"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>488</x> | ||||
|      <x>633</x> | ||||
|      <y>15</y> | ||||
|      <width>31</width> | ||||
|      <height>21</height> | ||||
| @ -120,7 +120,7 @@ | ||||
|   <widget class="QComboBox" name="KSCX"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>526</x> | ||||
|      <x>670</x> | ||||
|      <y>10</y> | ||||
|      <width>90</width> | ||||
|      <height>30</height> | ||||
| @ -130,7 +130,7 @@ | ||||
|   <widget class="QComboBox" name="CARNAME"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>694</x> | ||||
|      <x>840</x> | ||||
|      <y>10</y> | ||||
|      <width>90</width> | ||||
|      <height>30</height> | ||||
| @ -140,9 +140,9 @@ | ||||
|   <widget class="QComboBox" name="BK1"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>970</x> | ||||
|      <x>1080</x> | ||||
|      <y>10</y> | ||||
|      <width>90</width> | ||||
|      <width>51</width> | ||||
|      <height>30</height> | ||||
|     </rect> | ||||
|    </property> | ||||
| @ -150,9 +150,9 @@ | ||||
|   <widget class="QComboBox" name="BK2"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>1110</x> | ||||
|      <x>1169</x> | ||||
|      <y>10</y> | ||||
|      <width>90</width> | ||||
|      <width>61</width> | ||||
|      <height>30</height> | ||||
|     </rect> | ||||
|    </property> | ||||
| @ -160,7 +160,7 @@ | ||||
|   <widget class="QLabel" name="label_11"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>788</x> | ||||
|      <x>925</x> | ||||
|      <y>15</y> | ||||
|      <width>41</width> | ||||
|      <height>21</height> | ||||
| @ -176,7 +176,7 @@ | ||||
|   <widget class="QLabel" name="label_12"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>1075</x> | ||||
|      <x>1135</x> | ||||
|      <y>15</y> | ||||
|      <width>31</width> | ||||
|      <height>21</height> | ||||
| @ -192,7 +192,7 @@ | ||||
|   <widget class="QLabel" name="label_13"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>620</x> | ||||
|      <x>765</x> | ||||
|      <y>15</y> | ||||
|      <width>68</width> | ||||
|      <height>21</height> | ||||
| @ -208,7 +208,7 @@ | ||||
|   <widget class="QLabel" name="label_14"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>936</x> | ||||
|      <x>1045</x> | ||||
|      <y>15</y> | ||||
|      <width>31</width> | ||||
|      <height>21</height> | ||||
| @ -224,7 +224,33 @@ | ||||
|   <widget class="QComboBox" name="FLAG"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>834</x> | ||||
|      <x>970</x> | ||||
|      <y>10</y> | ||||
|      <width>71</width> | ||||
|      <height>30</height> | ||||
|     </rect> | ||||
|    </property> | ||||
|   </widget> | ||||
|   <widget class="QLabel" name="label_15"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>473</x> | ||||
|      <y>15</y> | ||||
|      <width>51</width> | ||||
|      <height>21</height> | ||||
|     </rect> | ||||
|    </property> | ||||
|    <property name="text"> | ||||
|     <string>X_MCH</string> | ||||
|    </property> | ||||
|    <property name="alignment"> | ||||
|     <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | ||||
|    </property> | ||||
|   </widget> | ||||
|   <widget class="QComboBox" name="X_MCH"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>530</x> | ||||
|      <y>10</y> | ||||
|      <width>90</width> | ||||
|      <height>30</height> | ||||
|  | ||||
| @ -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, ""); | ||||
| 
 | ||||
|  | ||||
| @ -67,7 +67,7 @@ void ShowBeginExam::updateBeginExam(const QString& info) | ||||
|     //m_ui->stuBeg->addItem(CL8("上车准备(监管)免考:") + (value. nitem1 ? CL8("免考") : CL8("不免考")));
 | ||||
|     //m_ui->stuBeg->addItem(CL8("模拟灯光(监管)免考:") + (value. nitem41 ? CL8("免考") : CL8("不免考")));
 | ||||
|     m_ui->stuBeg->addItem(CL8("满分学习模式标志:") + kit::toString(value.mfxx)+(value.mfxx ? CL8("(是") : CL8("(否)"))); | ||||
|     m_ui->stuBeg->addItem(CL8("满分学习不扣分标志:") + kit::toString(value.mfxxn)+(value.mfxxn ? CL8("(不扣分") : CL8("(扣分)"))); | ||||
|     //m_ui->stuBeg->addItem(CL8("满分学习不扣分标志:") + kit::toString(value.mfxxn)+(value.mfxxn ? CL8("(不扣分") : CL8("(扣分)")));
 | ||||
|     m_ui->stuBeg->addItem(CL8("增驾模式标志:") + kit::toString(value.zeng)+(value.zeng ? CL8("(增驾") : CL8("(非增驾)"))); | ||||
|     //ksxm   ykxm  kfxm
 | ||||
|     for(int i = 0; i < m_items.size(); i++) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user