Merge branch '代理服务方案' of http://88.22.24.105:3000/harmony_car/subject-two into 代理服务方案

This commit is contained in:
wangzhongjie 2025-05-07 17:24:23 +08:00
commit 164bdd11d2
27 changed files with 403 additions and 290 deletions

View File

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

View File

@ -247,6 +247,7 @@ namespace sound
sound_sub3(456001); // \sound\通过急弯.wav
sound_sub3(458001); // \sound\通过拱桥.wav
sound_sub3(zhpp); // \sound\综合评判.wav 请考官综合评判
sound_sub3(ksjs); // \sound\考试结束.wav
sound_subx(xmqx); //项目取消

View File

@ -198,6 +198,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_DECLARE(411); //靠边停车以右前、后轮判靠边距离0-否 1-是) //0
SYSSET_DECLARE(414); //变道、超车以前后轮都过线0-否 1-是) //0
SYSSET_DECLARE(415, type_array, "^"); //自动报靠边停车(启用标记^全部结束n米报^)启用标记:0-否 1-是 319参数为2有效 //0^1^
SYSSET_DECLARE(417); //417参数在差分状态才能进入自动评判项目0否1是417为1的时候我们读卡进项目读卡必须在查分状态下面才能读卡。417没设的话不判断是不是差分状态。就这就这个没有其他作用。
SYSSET_DECLARE(418); //扣分时实时播报语音0-否 1-是) //0
SYSSET_DECLARE(419, type_int); //里程按百米脉冲计算0-否 1-是
SYSSET_DECLARE(421); //模拟夜间:车辆发生故障,按近光灯和双跳进行评判0-是 1-否)
@ -261,6 +262,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_DECLARE(615); //侧方停车读卡前进时碰6线不合格 0
SYSSET_DECLARE(617, type_int); //参数617语音实时播报项目是否合格0-否 1-是语音码xmhgxmbhg
SYSSET_DECLARE(624); //考试评判车门模式
SYSSET_DECLARE(629); //默认的在车辆进入坡道区域才评判停车定点坡道中停立刻评判默认的在车辆进入定点10米区域才评判停车定点
SYSSET_DECLARE(641, type_int); //641=1 是车尾过5-6延长线结束
SYSSET_DECLARE(660); //侧方停车项目 停车距离判断阈值控制参数
SYSSET_DECLARE(668); //安全带评判模式
@ -344,6 +346,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_ASSIGN(411);
SYSSET_ASSIGN(414);
SYSSET_ASSIGN(415);
SYSSET_ASSIGN(417);
SYSSET_ASSIGN(418);
SYSSET_ASSIGN(419);
SYSSET_ASSIGN(421);
@ -407,6 +410,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_ASSIGN(615);
SYSSET_ASSIGN(617);
SYSSET_ASSIGN(624);
SYSSET_ASSIGN(629);
SYSSET_ASSIGN(641);
SYSSET_ASSIGN(660);
SYSSET_ASSIGN(668);

View File

@ -91,46 +91,40 @@ ErrorCode ExamCarSub2::examBeginExam()
}
}
return QE(codeSuccess);
}
//2、执行扣分
int grade = 0;
for(size_t i = 0; i < m_stuInfo.kfxm.size(); i++)
{
const TKfXm& markItem = m_stuInfo.kfxm[i];
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
if(nullptr == rule)
{
logwarning("not find mark-rule item=%d, serial=%s", markItem.xmdm, markItem.kfdm.c_str());
return QE(errorMarkNotFind);
}
grade += rule->markreal;
TMarkInfo mark(rule->itemno, rule->markserial, rule->markcatalog, 0, 0, 0);
m_marks.push_back(mark);
ErrorCode ExamCarSub2::examGoonExam()
{
IExamItem* item = findExamItem(markItem.xmdm);
TASSERT(item != nullptr, "");
if(item)
{
item->setMarkGrade(rule->markreal);
}
loginfo("ddxk-mark xmdm=%d,kfdm=%s", markItem.xmdm, markItem.kfdm.c_str());
}
m_grade -= grade;
if(m_grade < 0)
{
m_grade = 0;
}
//3、处理断点续考
if(m_stuInfo.ddxk)
{
m_disForward = m_stuInfo.yklc;
//1、处理已考项目
//2、执行扣分
int grade = 0;
for(size_t i = 0; i < m_stuInfo.kfxm.size(); i++)
{
const TKfXm& markItem = m_stuInfo.kfxm[i];
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
if(nullptr == rule)
{
logwarning("not find mark-rule item=%d, serial=%s", markItem.xmdm, markItem.kfdm.c_str());
return QE(errorMarkNotFind);
}
grade += rule->markreal;
TMarkInfo mark(rule->itemno, rule->markserial, rule->markcatalog, 0, 0, 0);
m_marks.push_back(mark);
IExamItem* item = findExamItem(markItem.xmdm);
TASSERT(item != nullptr, "");
if(item)
{
item->setMarkGrade(rule->markreal);
}
loginfo("ddxk-mark xmdm=%d,kfdm=%s", markItem.xmdm, markItem.kfdm.c_str());
}
m_grade -= grade;
if(m_grade < 0)
{
m_grade = 0;
}
//m_timeBegin = m_stuInfo.ddkssj;
}
@ -141,7 +135,6 @@ ErrorCode ExamCarSub2::examGoonExam()
//createEventExamFinish(ExamFinishAuto); //杨 20240724 都由苏那边控制
return QE(errorBeginNotQual); //已经不合格了
}
return QE(codeSuccess);
}

View File

@ -23,7 +23,6 @@ public:
public: //for IExamCar override
virtual ErrorCode examCarInitInfo(TInitInfo* info) override;
virtual ErrorCode examBeginExam() override;
virtual ErrorCode examGoonExam() override;
virtual ErrorCode examEndExam() override;
virtual ErrorCode examJudgeExam() override;
virtual ErrorCode examArtifMark(ExamItemCode itemno, const std::string& serial, MarkType type) override;

View File

@ -66,7 +66,7 @@ ErrorCode ExamCarSub3::examBeginExam()
TKM3Item* item = findExamItem(itemNo);
if(item != nullptr)
{
KM3EndItem(itemNo, false);
KM3EndItem(itemNo, false, false);
//item->Item_Color = itemStateHg;
//item->TestPro = ItemProFlagEnd;
//item->FinishFlag = true; //防止已考发项目结束事件
@ -83,54 +83,43 @@ ErrorCode ExamCarSub3::examBeginExam()
{
m_newSub3->examBegin();
}
return QE(codeSuccess);
}
ErrorCode ExamCarSub3::examGoonExam()
{
//4、执行扣分(如果StuInfo.CSH_Marks 不为空)
//这个时候Tds的Grade会被重新赋值
//2、执行扣分
int grade = 0;
for(size_t i = 0; i < m_stuInfo.kfxm.size(); i++)
{
const TKfXm& markItem = m_stuInfo.kfxm[i];
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
if(nullptr == rule)
{
logwarning("not find mark-rule item=%d, serial=%s", markItem.xmdm, markItem.kfdm.c_str());
return QE(errorMarkNotFind);
}
grade += rule->markreal;
TMarkInfo mark(rule->itemno, rule->markserial, rule->markcatalog, 0, 0, 0);
m_marks.push_back(mark);
//断点扣分不要生成任何事件通知,关心的就是本地扣出来即可 //???yhyflag
//Mark(markItem.xmdm, markItem.kfdm, false, true, 0, true); //Self.Mark(TempItemNo, Str3, False, True, 0, True);
//扣分只记录分数,不需要根据扣分记录项目状态 20240816 在洛阳确认的
//TKM3Item* item = findExamItem(markItem.xmdm);
//TASSERT(item != nullptr, "");
//if(item)
//{
// item->Item_Color = itemStateBhg;
//}
loginfo("ddxk-mark xmdm=%d,kfdm=%s", markItem.xmdm, markItem.kfdm.c_str());
}
m_grade -= grade;
if(m_grade < 0)
{
m_grade = 0;
}
//3、处理断点续考
if(m_stuInfo.ddxk)
{
m_disForward = m_stuInfo.yklc;
//1、处理已考项目
//2、执行扣分
int grade = 0;
for(size_t i = 0; i < m_stuInfo.kfxm.size(); i++)
{
const TKfXm& markItem = m_stuInfo.kfxm[i];
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
if(nullptr == rule)
{
logwarning("not find mark-rule item=%d, serial=%s", markItem.xmdm, markItem.kfdm.c_str());
return QE(errorMarkNotFind);
}
grade += rule->markreal;
TMarkInfo mark(rule->itemno, rule->markserial, rule->markcatalog, 0, 0, 0);
m_marks.push_back(mark);
//断点扣分不要生成任何事件通知,关心的就是本地扣出来即可 //???yhyflag
//Mark(markItem.xmdm, markItem.kfdm, false, true, 0, true); //Self.Mark(TempItemNo, Str3, False, True, 0, True);
//扣分只记录分数,不需要根据扣分记录项目状态 20240816 在洛阳确认的
//TKM3Item* item = findExamItem(markItem.xmdm);
//TASSERT(item != nullptr, "");
//if(item)
//{
// item->Item_Color = itemStateBhg;
//}
loginfo("ddxk-mark xmdm=%d,kfdm=%s", markItem.xmdm, markItem.kfdm.c_str());
}
m_grade -= grade;
if(m_grade < 0)
{
m_grade = 0;
}
//3、更新开始时间
//m_timeBegin = m_stuInfo.ddkssj != 0 ? m_stuInfo.ddkssj : Tools::nowTime();
//m_StartTime = GetCurrentTime2();
@ -667,7 +656,7 @@ bool ExamCarSub3::Init_KM3_Global()
//examItem->TestPro = ItemProFlagIdle;
//examItem->FinishFlag = true;
examItem->NoID = true;
KM3EndItem(itemNo,true,false);
KM3EndItem(itemNo,isReplay(),false); //轨迹回放工具回放模式要发时间,不然项目不好变绿
}
}
}
@ -1281,7 +1270,6 @@ void ExamCarSub3::Deal_KM3_Judge()
m_curItem = nullptr;
dealItemNoIDEnd14Jjdw(); //必须放这里
dealItemNoIDEndItem(); //必须放这里
//执行具体的专项评判
std::string msg;
@ -1336,6 +1324,7 @@ void ExamCarSub3::Deal_KM3_Judge()
}
}
finishExamBroad();
//如果考试结束(训练不存在结束的概念,都是界面上点击结束考试,一般科目三都是可以重复进项目的)
if(isExamMode()) //考试模式的
{
@ -3240,11 +3229,23 @@ void ExamCarSub3::Km3NewEnterItem()
TChuanGan* cg = m_cg;
//1、非前进状态忽略
TChuanGan* his1 = historyChuanGan(1);
if(cg->move != moveForward || his1->move != moveForward) return;
if(cg->move != moveForward || his1->move != moveForward)
{
return;
}
//2、速度是0也退出
//if(cg->real.gps.sd < 0.1 || his1->real.gps.sd < 0.1) return; //ai_CS_GPS
//3、非差分状态忽略
if(!cg->real.gps.valid()) return; //非差分状态不不允许进项目
//3、非差分状态忽略//非差分状态不允许进项目
//417参数为1,在差分状态才能进入自动评判项目 417没设的话不判断是不是差分状态 20250428
if(TableSysSet->get417() == "1")
{
if(!cg->real.gps.rtkEnabled)
{
return;
}
}
if(!cg->real.gps.valid()) return;
static constexpr double KK0 = GPS_DIV;
if(E_1Deg2Cm == 0)
@ -3894,24 +3895,24 @@ bool ExamCarSub3::KM3AllPass()
return true;
}
for(auto it = m_sub3Items.begin(); it != m_sub3Items.end(); it++)
{
const TKM3Item* item = it->second->getExamItem();
//必考项目未完成
if(item->NoID == false && (item->Item_Color == itemStateWk || item->Item_Color == itemStateZk))
{
return false;
}
//科目三项目结束,免考项目处理
//重要流程
if(item->NoID == true) //20240731
{
if(item->FinishFlag == false)
{
KM3EndItem(item->ItemNo);
}
}
}
//for(auto it = m_sub3Items.begin(); it != m_sub3Items.end(); it++)
//{
// const TKM3Item* item = it->second->getExamItem();
// //必考项目未完成
// if(item->NoID == false && (item->Item_Color == itemStateWk || item->Item_Color == itemStateZk))
// {
// return false;
// }
// //科目三项目结束,免考项目处理
// //重要流程
// if(item->NoID == true) //20240731
// {
// if(item->FinishFlag == false)
// {
// KM3EndItem(item->ItemNo);
// }
// }
//}
return true;
}
@ -5022,24 +5023,6 @@ void ExamCarSub3::dealOffset()
}
void ExamCarSub3::dealItemNoIDEndItem()
{
if(isMileage())
{
for(auto it = m_sub3Items.begin(); it != m_sub3Items.end(); it++)
{
TKM3Item* item = it->second->getExamItem();
if(item->NoID == true && item->ItemNo != Sub3ItemType14Jjdw) //20240731
{
if(item->FinishFlag == false)
{
KM3EndItem(item->ItemNo);
}
}
}
}
}
void ExamCarSub3::dealItemNoIDEnd14Jjdw()
{
TKM3Item* item14 = findExamItem(Sub3ItemType14Jjdw); //20240731
if(item14 && item14->NoID == true) //免考加减挡的 即:全程加减档
@ -5059,7 +5042,7 @@ void ExamCarSub3::dealItemNoIDEnd14Jjdw()
else
{
TKM3Item* item = findExamItem(Sub3ItemType11Kbtc);
if(item && item->TestPro == ItemProFlagInit)
if(item && item->TestPro >= ItemProFlagInit)
{
//ToDo1:生成 全程加减挡 进项目事件
//createEventEnterItem({item14->ItemNo, ""});
@ -5068,6 +5051,147 @@ void ExamCarSub3::dealItemNoIDEnd14Jjdw()
}
}
}
if(isMileage())
{
for(auto it = m_sub3Items.begin(); it != m_sub3Items.end(); it++)
{
TKM3Item* item = it->second->getExamItem();
if(item->NoID == true)
{
if(item->ItemNo == Sub3ItemType13Yjxs)
{
if(item->FinishFlag == false)
{
KM3EndItem(item->ItemNo);
}
}
else if(item->ItemNo == Sub3ItemType14Jjdw) //加减档单独处理
{
}
else //20240731
{
if(item->Item_Color == itemStateWk) //&& item->FinishFlag == false
{
KM3EndItem(item->ItemNo);
}
}
}
}
}
}
void ExamCarSub3::finishExamBroad()
{
/*
- 2025-04-25
:
302=4578退;
302=1:.wav
302=3:.wav
:
302=8n秒退出
302=7退
:
302=4退
302=5退
302=6退
*/
bool finish = true;
for(auto it = m_sub3Items.begin(); it != m_sub3Items.end(); it++)
{
const TKM3Item* item = it->second->getExamItem();
if(item->Item_Color == itemStateWk || item->Item_Color == itemStateZk)
{
finish = false;
break;
}
}
bool play_zhpp = false;
bool play_ksjs = false;
bool mileage = isMileage();
bool qualified = isQualified();
bool exam = isExamMode();
const std::string& s302 = TableSysSet->get302();
if(s302 == "0")
{
if(mileage && finish && qualified)
{
play_zhpp = true;
}
}
if(s302 == "1")
{
if(mileage && finish && qualified)
{
play_zhpp = true;
}
if(exam && !qualified)
{
play_ksjs = true;
}
}
else if(s302 == "2")
{
if(mileage && finish && qualified)
{
play_zhpp = true;
}
}
else if(s302 == "3")
{
if(mileage && finish && qualified)
{
play_zhpp = true;
}
if(!qualified)
{
play_ksjs = true;
}
}
else if(s302 == "4")
{
}
else if(s302 == "5")
{
if(mileage && finish && qualified)
{
play_zhpp = true;
}
}
else if(s302 == "6")
{
}
else if(s302 == "7")
{
}
else if(s302 == "8")
{
}
if(play_zhpp)
{
if(!m_pub.play_finish)
{
m_pub.play_finish = true;
createEventSound({Sub3ItemType20Comm, sound::sub3_zhpp}); //请考官综合评判
}
}
if(play_ksjs)
{
if(!m_pub.play_finish)
{
m_pub.play_finish = true;
createEventSound({Sub3ItemType20Comm, sound::sub3_ksjs}); //考试结束
}
}
}
bool ExamCarSub3::calcToLaneArc(const TModelLine& Lxx, const TModelPolygon& poly, const Pointi& b1, const Pointi& pt, int& dm, bool cross)

View File

@ -24,7 +24,6 @@ public:
public: //for IExamCar override
virtual ErrorCode examCarInitInfo(TInitInfo* info) override;
virtual ErrorCode examBeginExam() override;
virtual ErrorCode examGoonExam() override;
virtual ErrorCode examEndExam() override;
virtual ErrorCode examJudgeExam() override;
virtual ErrorCode examArtifMark(ExamItemCode itemno, const std::string& serial, MarkType type) override;
@ -78,7 +77,8 @@ protected:
void dealOffset(); //行驶距离补偿
void dealItemNoIDEndItem();
void dealItemNoIDEnd14Jjdw();
void finishExamBroad();
bool calcToLaneArc(const TModelLine& Lxx, const TModelPolygon& poly, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false);
bool calcToLaneArc2(const TModelLine& Lxx, const TModelPolygon& area, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false);

View File

@ -107,12 +107,6 @@ int IExamCar::examJudgeBeginExam(const char* data, int len)
{
return QE((ErrorCode)errCode);
}
//处理断点续考
errCode = examGoonExam();
if(errCode != codeSuccess)
{
return QE((ErrorCode)errCode);
}
m_examState = examStateIng;
logtrace("begin-exam success %s", target().c_str());

View File

@ -122,7 +122,6 @@ public:
public:
virtual ErrorCode examCarInitInfo(TInitInfo* info) = 0;
virtual ErrorCode examBeginExam() = 0;
virtual ErrorCode examGoonExam() = 0;
virtual ErrorCode examEndExam() = 0;
virtual ErrorCode examJudgeExam() = 0;
virtual ErrorCode examArtifMark(ExamItemCode itemno, const std::string& serial, MarkType type) = 0;

View File

@ -325,7 +325,8 @@ void Sub2Judge00Dcrk::divorcedItemArea()
bool out = ((!in0 && in1) || !pureCarInItemArea()); //阶段10后轮先不在项目区域结束项目然后才会走道这里
#else
//bool out = (!pureCarInItemArea());
bool out = pureCarTouchSoloLine(m_model->L12_10(), II(13), 5);
bool out = pureCarTouchSoloLines({m_model->L12_10(), m_model->L78_11()}, II(13), 5) &&
!pureCarPointInPoly(II(1), m_model->poly1278());
#endif
if(out)
{

View File

@ -166,10 +166,19 @@ JUDGE_STAGE_IMPL(Sub2Judge02Pdqb, Sub2PdqbStage0)
TGPSPoint pt2 = GpsMath::calcCenterPoint(m_model->P4(), m_model->P7());
double gc = FactorySub2Survey->baseGc();
int distance = GpsMath::DianXianJL_GPS_CM(p1, pt1, pt2, gc);
if(distance < m_800CM)
const std::string& s629 = TableSysSet->get629();
if(s629 == "1")
{
m_stage = Sub2PdqbStage1;
}
else
{
if(distance < m_1000CM)
{
m_stage = Sub2PdqbStage1;
}
}
if(m_endLineFlag == true)
{

View File

@ -49,7 +49,7 @@ private:
const int m_15CM = 15; //15厘米
const int m_30CM = 30; //30厘米
const int m_50CM = 50; //50厘米
const int m_800CM = 800; //800厘米
const int m_1000CM = 1000; //1000厘米
};
#endif // SUB2JUDGE02PDQB_H

View File

@ -84,11 +84,12 @@ void Sub2Judge05Qxxs::judgeTouchLine()
const TGPSPoints& right = m_model->right();
if(IS_C1C2C5(m_carType))
{
//1、车轮压线存粹车轮 //只用车轮子计算
static constexpr int history = 2;
const PointSets& wheels = m_car->carModel()->wheelAll();
JUDGE_MARK_ITEM_EASY_ONCE(pureCarTouchSomePoints(left, wheels, history), MARK_SUB2_QXXS_61);
JUDGE_MARK_ITEM_EASY_ONCE(pureCarTouchSomePoints(right, wheels, history), MARK_SUB2_QXXS_62);
//1、车轮压线纯粹车轮只用车轮子计算
//注意:由于GPS可能漂移不能用这种方式计算用历史车轮点判断会误判无锡就出现这种情况 yhy 2025-04-23
//static constexpr int history = 2;
//const PointSets& wheels = m_car->carModel()->wheelAll();
//JUDGE_MARK_ITEM_EASY_ONCE(pureCarTouchSomePoints(left, wheels, history), MARK_SUB2_QXXS_61);
//JUDGE_MARK_ITEM_EASY_ONCE(pureCarTouchSomePoints(right, wheels, history), MARK_SUB2_QXXS_62);
//2、排线和边线相交也算压线
const PointPairs& wind = m_car->carModel()->wheelWindAll();

View File

@ -1277,10 +1277,6 @@ void Sub3Judge11Kbtc::DoStatus_100()
//ToDo: 语音提示-->请起步,继续完成考试
m_car->createEventSound({itemNo(), sound::sub3_406005});
}
else
{
m_car->createEventSound({itemNo(), sound::sub3_zhpp}); //请考官综合评判
}
}
void Sub3Judge11Kbtc::Judge_KBTC_YaXian()

View File

@ -2394,7 +2394,8 @@ void Sub3Judge20Comm::Judge_YaXian_10S_XuXian()
const TChuanGan* his1 = m_car->historyChuanGan(1);
const TChuanGan* his2 = m_car->historyChuanGan(2);
if(cg->move == moveForward && his1->move == moveForward && his2->move == moveForward)
if(m_car->rtkEnabled() && m_car->rtkEnabled(1) &&
cg->move == moveForward && his1->move == moveForward && his2->move == moveForward)
{
for(size_t i = 0; i < kind.size(); i++)
{

View File

@ -558,8 +558,8 @@ JUDGE_CXX_API const char* stage2Describe(Sub2CftcStage code);
#define MARK_SUB2_PDQB_203 "203"
#define MARK_SUB2_PDQB_41 "41"
#define EnumMakeSub2PdqbStage(declare) \
declare(Sub2PdqbStage0, "", JUDGE_UTF8S("距离停车标杆大于8")) \
declare(Sub2PdqbStage1, "", JUDGE_UTF8S("到达标杆8米处,未停车")) \
declare(Sub2PdqbStage0, "", JUDGE_UTF8S("距离停车标杆大于10")) \
declare(Sub2PdqbStage1, "", JUDGE_UTF8S("到达标杆10米处,未停车")) \
declare(Sub2PdqbStage2, "", JUDGE_UTF8S("停车未起步阶段")) \
declare(Sub2PdqbStage3, "", JUDGE_UTF8S("坡道起步阶段(后轮到达89位置结束"))
enum Sub2PdqbStage{ EnumMakeSub2PdqbStage(ENUM_SELECT_1_CMD_3) Sub2PdqbStageUnknown };

View File

@ -457,9 +457,9 @@ struct TStuInfo
int64 kskssj = 0; //考试开始时间 1970年到现在的毫秒数 "2023-03-21 10:05:23"
std::vector<TItemExam> ksxm = {}; //监管返回本次考试所需项目 2023-04-24 杨海洋修改
std::vector<int32> ykxm = {}; //已考项目 "1,3" 对应枚举 ExamItemCode DuanDian_FinishItems
std::vector<TKfXm> kfxm = {}; //扣分项目 "20,01;" 对应枚举 ExamItemCode DuanDian_Marks
int8 ddxk = 0; //是否断点续考0-否 1-是)
int64 ddkssj = 0; //考试中断那次考试开始考试时间 1970年到现在的毫秒数
std::vector<TKfXm> kfxm = {}; //扣分项目 "20,01;" 对应枚举 ExamItemCode DuanDian_Marks
int32 yklc = 0; //已考里程,单位厘米
int8 sczb = 0; //CS_Finish_SCZB_Flag:Boolan; //考前绕车一周(初始完成上车准备标志)外壳传递的Boolan
@ -1596,6 +1596,8 @@ struct TPubKM3
int m_KsZgSs = 0; //记录考试中的最高时速
//int m_KsLjLc = 0; //记录考试累计里程(米)
bool play_finish = false;
};
/*

View File

@ -115,7 +115,17 @@ QString addContent(QString& out, const QString& name, const QString& info)
void setStyleComboBox(QComboBox* combo, int count, int width)
{
combo->setStyle(QStyleFactory::create("Windows"));
constexpr static bool Fusion = true;
if(Fusion)
{
combo->setStyle(QStyleFactory::create("Fusion"));
combo->setStyleSheet("QComboBox { combobox-popup: 0; }");
combo->view()->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
}
else
{
combo->setStyle(QStyleFactory::create("Windows"));
}
combo->setMaxVisibleItems(count);
combo->view()->setMinimumWidth(width);
}

View File

@ -45,6 +45,10 @@
#include <QListWidgetItem>
#include <QCheckBox>
#include <QComboBox>
#include <QStandardItem>
#include <QStandardItemModel>
#include <QStyledItemDelegate>
#include <QStyleOptionViewItem>
#include <QQueue>
#include <QScrollArea>
#include <QScrollBar>

View File

@ -71,15 +71,7 @@ void MainWindow::init()
KIT_CONNECT(updateNextDoing());
KIT_CONNECT(updateCheckVersion(int, const QString&));
//connect(&m_audio, SIGNAL(QMediaPlayer::error(QMediaPlayer::Error)),
// SLOT([&](QMediaPlayer::Error error)
// {
// QMediaPlayer::Error err = m_audio.error();
// QString errStr = m_audio.errorString();
//
// logwarning("paly-audio file:%s, err:%d-%s ",
// filepath.toUtf8().data(), err, errStr.toUtf8().data());
// }));
connect(&m_audio, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(slot_soundError(QMediaPlayer::Error)));
m_ui->loop->clear();
m_ui->loop->addItem(CL8(""), false);
@ -148,8 +140,9 @@ void MainWindow::init()
//QString addr = kit::getMacAddress();
//std::string md5s = Tools::md5sum(addr.toLocal8Bit().data());
//logtrace("uuid=[%s][%s]", addr.toUtf8().data(), md5s.data());
logtrace("version-sdk=[%s][%s][%s]", JUDGE_VERSION_STR, JUDGE_VERSION_INFO, examJudgeVersion());
logtrace("version-kit=[%s]", KIT_VERSION_INFO);
logtrace("version-sdk=[%s][%s][%s],version-toolkit=[%s]",
JUDGE_VERSION_STR, JUDGE_VERSION_INFO, examJudgeVersion(),
KIT_VERSION_INFO);
}
@ -297,7 +290,7 @@ void MainWindow::wheelEvent(QWheelEvent *event)
event->accept();
}
void MainWindow::resizeEvent(QResizeEvent *event)
void MainWindow::resizeEvent(QResizeEvent* event)
{
QMainWindow::resizeEvent(event);
//QRect geome = geometry();
@ -638,6 +631,13 @@ void MainWindow::updateCheckVersion(int state, const QString& info)
}
}
void MainWindow::slot_soundError(QMediaPlayer::Error error)
{
QMediaPlayer::Error err = m_audio.error();
QString errStr = m_audio.errorString();
logwarning("play-audio err:%d-%d-%s", err, error, errStr.toUtf8().data());
}
void MainWindow::on_btnClearLog_clicked()
{
m_logInfo->resetLog();
@ -851,19 +851,12 @@ void MainWindow::on_displaySwitch_clicked()
{
m_realExam->switchDisplay();
//CpuOccupyInfo occ;
//
//bool usage = Tools::peerOccupyCpu(occ);
//int cores = Tools::getCpuProcessors();
//logtrace("CPU Usage:%0.4f cores=%d ", usage, cores);
const char* data = examPeerOccupy();
TOccupyInfo occ;
if(!XParser::fromAny(data, occ))
{
return;
}
logtrace("occupy=%s", data);
examFreeMemory(data);
return;
//const char* data = examPeerOccupy();
//TOccupyInfo occ;
//if(!XParser::fromAny(data, occ))
//{
// return;
//}
//logtrace("occupy=%s", data);
//examFreeMemory(data);
}

View File

@ -65,7 +65,7 @@ protected:
virtual void mousePressEvent(QMouseEvent* event) override;
virtual void wheelEvent(QWheelEvent* event) override; //鼠标滚轮滚动事件
// 当窗口尺寸改变时,会调用这个方法
virtual void resizeEvent(QResizeEvent *event) override;
virtual void resizeEvent(QResizeEvent* event) override;
signals:
void sig_init();
@ -86,7 +86,8 @@ private slots: //Q_SLOTS
void updateNextDoing();
void updateCheckVersion(int state, const QString& info);
private slots:
void slot_soundError(QMediaPlayer::Error error);
void on_btnClearLog_clicked();
void on_btnSelectTrackFile_clicked();
void on_btnRunning_clicked();

View File

@ -68,10 +68,10 @@ background-color: rgb(255, 255, 255);</string>
<widget class="QPushButton" name="btnSelectTrackFile">
<property name="geometry">
<rect>
<x>1530</x>
<x>1534</x>
<y>790</y>
<width>44</width>
<height>26</height>
<width>42</width>
<height>25</height>
</rect>
</property>
<property name="text">
@ -81,10 +81,10 @@ background-color: rgb(255, 255, 255);</string>
<widget class="QTextEdit" name="outputLog">
<property name="geometry">
<rect>
<x>932</x>
<x>933</x>
<y>644</y>
<width>642</width>
<height>143</height>
<height>144</height>
</rect>
</property>
<property name="font">
@ -106,7 +106,7 @@ p, li { white-space: pre-wrap; }
<widget class="QPushButton" name="btnClearLog">
<property name="geometry">
<rect>
<x>1500</x>
<x>1502</x>
<y>616</y>
<width>73</width>
<height>26</height>
@ -413,7 +413,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>600</x>
<y>180</y>
<width>111</width>
<width>121</width>
<height>20</height>
</rect>
</property>
@ -426,7 +426,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>600</x>
<y>163</y>
<width>111</width>
<width>121</width>
<height>20</height>
</rect>
</property>
@ -580,7 +580,7 @@ p, li { white-space: pre-wrap; }
<widget class="QPushButton" name="btnRunning">
<property name="geometry">
<rect>
<x>1500</x>
<x>1502</x>
<y>495</y>
<width>73</width>
<height>28</height>
@ -635,9 +635,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>4</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -660,9 +660,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>38</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -685,9 +685,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>38</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -710,9 +710,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>72</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -735,9 +735,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>72</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -760,9 +760,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>106</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -785,9 +785,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>106</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -810,9 +810,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>140</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -835,9 +835,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>140</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -860,9 +860,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>174</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -885,9 +885,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>174</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -913,9 +913,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>208</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -938,9 +938,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>208</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -963,9 +963,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>242</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -988,9 +988,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>276</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1013,9 +1013,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>310</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1038,9 +1038,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>242</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1063,9 +1063,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>276</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1088,9 +1088,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>310</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1115,7 +1115,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>2</x>
<y>644</y>
<width>710</width>
<width>717</width>
<height>174</height>
</rect>
</property>
@ -1144,9 +1144,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>344</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1169,9 +1169,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>344</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1194,9 +1194,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>377</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1219,9 +1219,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>824</x>
<x>827</x>
<y>377</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1244,9 +1244,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>780</x>
<x>786</x>
<y>416</y>
<width>51</width>
<width>48</width>
<height>30</height>
</rect>
</property>
@ -1263,7 +1263,7 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Arial'; font-size:10pt; font-weight:600; font-style:normal;&quot;&gt;
&lt;p align=&quot;center&quot; dir='rtl' style=&quot;-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
<widget class="QTextEdit" name="item00">
@ -1272,9 +1272,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>4</y>
<width>101</width>
<width>98</width>
<height>31</height>
</rect>
</property>
@ -1474,9 +1474,9 @@ p, li { white-space: pre-wrap; }
<widget class="Line" name="borderBottom_5">
<property name="geometry">
<rect>
<x>715</x>
<x>722</x>
<y>402</y>
<width>215</width>
<width>206</width>
<height>20</height>
</rect>
</property>
@ -1529,7 +1529,7 @@ p, li { white-space: pre-wrap; }
<widget class="QLineEdit" name="playTimes">
<property name="geometry">
<rect>
<x>1500</x>
<x>1502</x>
<y>526</y>
<width>73</width>
<height>28</height>
@ -1542,7 +1542,7 @@ p, li { white-space: pre-wrap; }
<widget class="QLabel" name="cg_dcj_6">
<property name="geometry">
<rect>
<x>1448</x>
<x>1450</x>
<y>527</y>
<width>51</width>
<height>30</height>
@ -1555,7 +1555,7 @@ p, li { white-space: pre-wrap; }
<widget class="QLabel" name="cg_dcj_7">
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>420</y>
<width>61</width>
<height>21</height>
@ -1570,7 +1570,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>933</x>
<y>790</y>
<width>592</width>
<width>596</width>
<height>26</height>
</rect>
</property>
@ -1597,7 +1597,7 @@ p, li { white-space: pre-wrap; }
<widget class="QLabel" name="cg_dcj_9">
<property name="geometry">
<rect>
<x>1448</x>
<x>1450</x>
<y>557</y>
<width>51</width>
<height>26</height>
@ -1610,7 +1610,7 @@ p, li { white-space: pre-wrap; }
<widget class="QComboBox" name="loop">
<property name="geometry">
<rect>
<x>1500</x>
<x>1502</x>
<y>557</y>
<width>73</width>
<height>26</height>
@ -1635,7 +1635,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>400</x>
<y>277</y>
<width>315</width>
<width>322</width>
<height>2</height>
</rect>
</property>
@ -1646,7 +1646,7 @@ p, li { white-space: pre-wrap; }
<widget class="Line" name="borderRight_3">
<property name="geometry">
<rect>
<x>705</x>
<x>712</x>
<y>2</y>
<width>20</width>
<height>810</height>
@ -1662,9 +1662,9 @@ p, li { white-space: pre-wrap; }
</property>
<property name="geometry">
<rect>
<x>714</x>
<x>721</x>
<y>644</y>
<width>216</width>
<width>209</width>
<height>174</height>
</rect>
</property>
@ -1699,9 +1699,9 @@ p, li { white-space: pre-wrap; }
<widget class="QLabel" name="pe_markGrade">
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>450</y>
<width>161</width>
<width>171</width>
<height>20</height>
</rect>
</property>
@ -1712,9 +1712,9 @@ p, li { white-space: pre-wrap; }
<widget class="QSlider" name="playSlider">
<property name="geometry">
<rect>
<x>939</x>
<y>592</y>
<width>550</width>
<x>934</x>
<y>590</y>
<width>562</width>
<height>20</height>
</rect>
</property>
@ -1877,9 +1877,9 @@ QSlider::sub-page:horizontal
</property>
<property name="geometry">
<rect>
<x>835</x>
<x>838</x>
<y>416</y>
<width>88</width>
<width>86</width>
<height>30</height>
</rect>
</property>
@ -2051,7 +2051,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>536</x>
<y>286</y>
<width>171</width>
<width>176</width>
<height>334</height>
</rect>
</property>
@ -2068,9 +2068,9 @@ p, li { white-space: pre-wrap; }
<widget class="Line" name="borderRight_4">
<property name="geometry">
<rect>
<x>520</x>
<x>526</x>
<y>278</y>
<width>20</width>
<width>10</width>
<height>366</height>
</rect>
</property>
@ -2119,7 +2119,7 @@ p, li { white-space: pre-wrap; }
<widget class="QLabel" name="perform">
<property name="geometry">
<rect>
<x>720</x>
<x>726</x>
<y>472</y>
<width>201</width>
<height>106</height>
@ -2158,10 +2158,10 @@ p, li { white-space: pre-wrap; }
<widget class="QTableWidget" name="radarTable">
<property name="geometry">
<rect>
<x>4</x>
<x>2</x>
<y>428</y>
<width>392</width>
<height>212</height>
<width>394</width>
<height>214</height>
</rect>
</property>
</widget>
@ -2232,7 +2232,7 @@ p, li { white-space: pre-wrap; }
</rect>
</property>
<property name="text">
<string>显示切换</string>
<string>切换显示</string>
</property>
</widget>
</widget>

View File

@ -314,13 +314,9 @@ export default class UdpClientByCenter {
}
strachArr[28] = globalThis.chuankoMsg || strachArr[28]
// console.log("lixiao", globalThis.chuankoMsg, strachArr[28])
// this.stashFn(str)
console.log("lixiao", globalThis.chuankoMsg, strachArr[28])
const newArr = JSON.parse(JSON.stringify(strachArr))
// this.writeLog({
// time:dateFormat(new Date()),
// PLC: JSON.stringify(newArr.toString()),
// })
if (strachArr[83] != '4') {
console.log('差分状态异常', strachArr[83], strachArr[92])
this.writeLog({

View File

@ -60,7 +60,7 @@ struct Index {
private context = getContext(this) as common.UIAbilityContext;
private serviceExtProxy: IdlServiceExtProxy
@State judgeVersion: string = ""
private version: string = "2025.04.23.01"
private version: string = "2025.05.06.01"
@Styles
commStyle(){

View File

@ -1,11 +1,7 @@
import router from '@ohos.router';
import UdpClient from '../../common/utils/UdpClient';
import FileLog from '../judgeSDK/utils/fileLog';
import RealTime from '../compontents/judge/RealTime';
import { GPSData, SignalData } from '../../mock';
import { SignalDataType } from '../../model';
import FileUtil from '../../common/utils/File'
import { GlobalConfig } from '../../config/index'
@Component
export default struct SignDisplayCom {
@State showBack: boolean = false
@ -23,10 +19,6 @@ export default struct SignDisplayCom {
@State interval: number = 0
@State @Watch('outClick') outFlag: boolean = false;
@State url: string = ''
private timer = null
private udpClient: UdpClient = null
private FileLog: FileLog
private vocObj = null;
constructor() {
super()

View File

@ -1,6 +1,4 @@
import router from '@ohos.router';
import UdpClient from '../../common/utils/UdpClient';
import FileLog from '../judgeSDK/utils/fileLog';
import RealTime from '../compontents/judge/RealTime';
import { GPSData, SignalData } from '../../mock';
import { SignalDataType } from '../../model';
@ -22,10 +20,6 @@ export default struct SignDisplayCom {
@State interval: number = 0
@State @Watch('outClick') outFlag: boolean = false;
@State url: string = ''
private timer = null
private udpClient: UdpClient = null
private FileLog: FileLog
private vocObj = null;
constructor() {
super()

View File

@ -12,4 +12,3 @@ A2kAMGYCMQCZzMs9H/mMi+59hO4EfDHTXChO6QoBYH+pwB66g7dw7apGXhayBIwq
qOeVnlTVbPkCMQCc2hQf+ypiZpZQog1dMSGdlNs8heypj97d7DahjTgEzrxGxcZK
PtMtg35cJa+JtN4=
-----END CERTIFICATE-----
071A11E92B83EE8977A794F1B387ADA40780BFF19C301A5C63F407531B2C2C1A