满分学习优化

This commit is contained in:
lixiao 2025-04-07 09:00:36 +08:00
parent 92cb6838d2
commit 41e92dac38
25 changed files with 321 additions and 217 deletions

View File

@ -121,6 +121,7 @@ struct MemoryStorage
struct CpuOccupyInfo
{
double idle = 0.0;
double iowait = 0.0;
double user = 0.0;
double sys = 0.0;
};

View File

@ -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;

View File

@ -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
/*
*
*/

View File

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

View File

@ -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++)

View File

@ -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);

View File

@ -358,7 +358,7 @@ void ExamCarSub2::dealJudgeExam()
//}
//2.6.1)
calcDistance(); //距离计算
calcDistance(false, 0); //距离计算
//2.6.2) 监管判断
//函数是一个监管检查函数,这里我们先不考虑监管,我模拟一下这个函数的写法

View File

@ -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;
}

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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) //无锡所用原始档位
{

View File

@ -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:生成进项目事件

View File

@ -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) //大车夜考相关的参数
{

View File

@ -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米以内)"))

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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()) &&

View File

@ -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;

View File

@ -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>

View File

@ -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, "");

View File

@ -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++)