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

This commit is contained in:
wangzhongjie 2025-04-30 15:30:42 +08:00
commit 13d036f3f5
39 changed files with 813 additions and 650 deletions

View File

@ -5,9 +5,9 @@
"name": "default",
"material": {
"certpath": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.cer",
"storePassword": "0000001B2A120129476E60A13CB90F2A118FC1DACD776EBF625CBC8C75E83CE8BC2DA4E57F6E6868B0CA45",
"storePassword": "0000001BF9CC4AD294FB6AC2D8A5278FFFD88EEDF04B79D51256E066D7DD5E2E118E445F67468002D624CA",
"keyAlias": "debugKey",
"keyPassword": "0000001BE3163B872A727924E46576C7DF1ACBE4283BA076307E0B53166334958EEE387B446DD981CBE5BA",
"keyPassword": "0000001BF982C0CB222DFA95970757643CDB791BF698C923C974A4A81AD8C2B28B4CE7839BED505B4EE3E2",
"profile": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.p7b",
"signAlg": "SHA256withECDSA",
"storeFile": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.p12"

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 "2504110912b"
#define JUDGE_VERSION_STAMP "2504191100b"
#if JUDGE_USE_OLD
# undef JUDGE_VERSION_STAMP
# define JUDGE_VERSION_STAMP "2411121010b.old"

View File

@ -121,6 +121,7 @@ namespace siteof
siteof_declare(JXYTSF001);
siteof_declare(hnzzkm3);
siteof_declare(jswxbz);
siteof_declare(scms);
siteof_declare(tcrx); //无锡所检测地点版本特殊
@ -245,6 +246,7 @@ namespace sound
sound_sub3(471001); // \sound\临时停车.wav
sound_sub3(456001); // \sound\通过急弯.wav
sound_sub3(458001); // \sound\通过拱桥.wav
sound_sub3(zhpp); // \sound\综合评判.wav 请考官综合评判
sound_subx(xmqx); //项目取消

View File

@ -148,6 +148,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_DECLARE(19, type_array, ":"); //夜间考试考试时间
SYSSET_DECLARE(211); //考试地点参数
SYSSET_DECLARE(301, type_array, "^"); //条件1:档位,车速,持续时间,结束标志(0-不结束,1红闪,2黑闪),距离,^条件2:档位,车速,持续时间,0,距离,^评判时间(0-最后评判,1-里程达到就评判)^ //示例:4,35,3,0,1,^5,50,3,0,1,^
SYSSET_DECLARE(302); //结束考试方式(0-不合格继续,1-考试不合格报靠边 2-不合格不报靠边 3-训练不合格报靠边 4-自动退出 5-不合格自动退出 6-合格自动退出 7-符合条件自动退出8^延时S秒^-不合格自动退出合格时延时S秒再自动退出)
SYSSET_DECLARE(303); //行驶距离限制(米) //3000
SYSSET_DECLARE(306); //直行键(0-直行,1-加速行驶) //1
SYSSET_DECLARE(307); //只考一次的项目 //5,15,16
@ -160,7 +161,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_DECLARE(322); //模拟夜间检查灯光时机(0-考试前后 1-仅考试后 2-仅考试前) //0 扣20-93
SYSSET_DECLARE(323); //模拟夜间模式0-必考 1-未扣分补考时不考 2-不模拟 3-夜考时模拟+实际夜间灯光) //1
SYSSET_DECLARE(325); //靠边停车压线条件(0-停车压线才判;1-压线立即判) //0
SYSSET_DECLARE(326); //靠边停车后是否进入下车状态评判0-否 1-是) //0
SYSSET_DECLARE(326); //靠边停车后是否进入下车状态评判0-否 1-是)2否大车夜间拉手刹钱要打开示宽灯 //0
SYSSET_DECLARE(329, type_array, ","); //GPS搜索范围(大范围CM,小范围CM,) //6000,3000,
SYSSET_DECLARE(332); //不允许人工触发的项目列表,以","分隔
SYSSET_DECLARE(333); //直线行驶结束是否判减速带(0-不判1-判) 0
@ -264,6 +265,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_DECLARE(660); //侧方停车项目 停车距离判断阈值控制参数
SYSSET_DECLARE(668); //安全带评判模式
SYSSET_DECLARE(671); //停车距离判断阈值控制参数
SYSSET_DECLARE(686, type_int); //1:倒车入库车头穿过10线读卡进项目 不配置按照0处理,686参数默认是车子在库区域内读卡
SYSSET_DECLARE(687, type_int); //科二差分信号异常时持续N秒后不进行评判 单位秒
SYSSET_DECLARE(696); //696 直角关灯模式 0 0车尾出项目线标准1车头出项目线结束项目2车后轮出项目线结束项目。3前轮过项目线4车身脱离转弯后垂线
SYSSET_DECLARE(697); //697 直角开灯模式 0 0车头到直角入口1车头到转弯前垂线2车头到转弯处斜线32022新标准 新标准,入口线到转弯区间内有过方向灯
@ -292,6 +294,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_ASSIGN(19);
SYSSET_ASSIGN(211);
SYSSET_ASSIGN(301);
SYSSET_ASSIGN(302);
SYSSET_ASSIGN(303);
SYSSET_ASSIGN(306);
SYSSET_ASSIGN(307);
@ -408,6 +411,7 @@ class JUDGE_API SysSetTable : public IDBTable
SYSSET_ASSIGN(660);
SYSSET_ASSIGN(668);
SYSSET_ASSIGN(671);
SYSSET_ASSIGN(686);
SYSSET_ASSIGN(687);
SYSSET_ASSIGN(696);
SYSSET_ASSIGN(697);

View File

@ -135,7 +135,8 @@ ErrorCode ExamCarSub2::examGoonExam()
}
//已经不合格了 如果是考试模式,只要分数不合格就立即结束考试
if( (isExamMode() && !isQualified()) || allItemFinish() )
//20250418无锡科目二考试结束的地方网络不好存在考试结束无法上传需要支持ykxm项目全部做完了评判初始化、开始考试能调用成功问过工程wins是这么操作的。
if( (isExamMode() && !isQualified()) /*|| allItemFinish()*/ )
{
//createEventExamFinish(ExamFinishAuto); //杨 20240724 都由苏那边控制
return QE(errorBeginNotQual); //已经不合格了
@ -347,7 +348,7 @@ void ExamCarSub2::dealJudgeExam()
}
if(allItemFinish()) //如果所有项目都做过了,就不用再读项目了
{
logdebug("allItemFinish");
//logdebug("allItemFinish");
return;
}
@ -442,11 +443,6 @@ void ExamCarSub2::dealJudgeExam()
ISub2JudgeItem* ExamCarSub2::readEnterItem()
{
//必须是前进状态进项目
if(historyMoveState() != moveForward)
{
//logdebug("not moveForward move=%d", m_cg->move);
return nullptr;
}
for(auto k = m_itemsAll.begin(); k != m_itemsAll.end(); k++)
{

View File

@ -1045,6 +1045,14 @@ void ExamCarSub3::UpdateCarParmWithSystemParm()
}
};
const auto PARM_NO3_70 = [&](const TSystemparm* parm)->void
{
if(parm->TXT1 != "")
{
m_car.XiHuo = std::atoi(parm->TXT1.c_str());
}
};
//得到考车参数
int parm3Size = TableSysParm->parm3Size();
for(int i = 0; i < parm3Size; i++)
@ -1094,6 +1102,7 @@ void ExamCarSub3::UpdateCarParmWithSystemParm()
PARM_CASE_WITH(61); //61:按车型设置的靠边停车参数
PARM_CASE_WITH(62); //62:按车型设置的夜间模拟灯光触发条件
PARM_CASE_WITH(63); //63:满分学习的学员考试必考项目(非正常的科目三学员),目前可以暂不考虑这种学员
PARM_CASE_WITH(70); //同500熄火参数
PARM_SWITCH_END;
}
@ -1478,7 +1487,7 @@ bool ExamCarSub3::RTKLane()
{
//如果落到了当前路段的某个车道内
const TModelPolygon& poly = road->Lanes[j];
if(poly.Pts.size() >= 5) //包括圆弧 Length(TempModelPolygon.Pts)
if(poly.Pts.size() >= 5) //包括圆弧
{
if(GpsMath::IsPtInArcLane(b1_b, poly))
{
@ -1517,7 +1526,7 @@ bool ExamCarSub3::RTKLane()
if(a > 0) a = a - 1;
for(int i = a; i <= b; i++) //I := a to b do
{
if(i > roadSize - 1) continue;
if(i >= roadSize) continue;
const TMapRoadRec* road = FactoryRoads->getRoad(i);
for(int j = 0; j < road->LaneCount; j++)
@ -1586,7 +1595,7 @@ bool ExamCarSub3::RTKLane()
//车头中点所属车道
for(int i = curRoadIndex; i <= curRoadIndex + 4; i++)
{
if(i > roadSize - 1) break;
if(i >= roadSize) break;
const TMapRoadRec* road = FactoryRoads->getRoad(i);
const Pointi& pt = m_cg->body.points_b[II(1)]; //CarStatus.Body_24_RealTimePt[0];
@ -1957,121 +1966,103 @@ void ExamCarSub3::Calc_LaneDistance()
//Kind:1: 车身左1 2车身右1 3车身左2 4车身右2
ExamCarType cartype = carType();
int LeftFront = GetCarBodyPointNo(cartype, 1);
int LeftBack = GetCarBodyPointNo(cartype, 3);
int RightFront = GetCarBodyPointNo(cartype, 2);
int RightBack = GetCarBodyPointNo(cartype, 4);
int LF_I = GetCarBodyPointNo(cartype, BODY_LF);
int LB_I = GetCarBodyPointNo(cartype, BODY_LB);
int RF_I = GetCarBodyPointNo(cartype, BODY_RF);
int RB_I = GetCarBodyPointNo(cartype, BODY_RB);
if(LeftFront == -1 || LeftBack == -1 || RightFront == -1 || RightBack == -1)
{
logerror("cartype=%d,LeftFront=%d, LeftBack=%d, RightFront=%d, RightBack=%d",
cartype, LeftFront, LeftBack, RightFront, RightBack);
return;
}
TASSERT_VOID(LF_I >= 0 && LB_I >= 0 && RF_I >= 0 && RB_I >= 0,
"cartype=%d, LF_I=%d, LB_I=%d, RF_I=%d, RB_I=%d", cartype, LF_I, LB_I, RF_I, RB_I);
int curRoadIndex = RTKKM3.MapRoadIndex;
//int curLaneIndex = RTKKM3.LaneIndex;
int roadSize = FactoryRoads->size();
const TCarBody& body = m_cg->body;
TModelLine line;
//判断车轮离本车道右边线距离1(左 1左2右1右2
//P-->1、车轮与本车道右侧距离 2车轮与最右侧车道右侧距离 3车身左侧与本车道左侧距离 4车身右侧与本车道右侧距离
const TMeshDefine* curMesh = FactoryMesh->getMesh(m_meshIndex);
TASSERT_VOID(curMesh != nullptr, "");
//logdebug("mesh=%d,roadSize=%d, RoadIndex=%d,LaneIndex=%d",m_meshIndex,roadSize,curRoadIndex,RTKKM3.LaneIndex);
const TModelLine* laneDriving = nullptr;
for(int p = 1; p <= 4; p++)
for(int i = curRoadIndex - 2; i <= curRoadIndex + 2; i++)
{
for(int i = curRoadIndex - 2; i <= curRoadIndex + 2; i++)
//1、不能大于数组的最大下标
if(i < 0) continue;
if(i >= roadSize) break;
//2、检查当前的路段是否在可视区域
if(!curMesh->has(i)) continue;
const TMapRoadRec* road = FactoryRoads->getRoad(i);
int endof = road->LaneCount - 1;
//if(p == 2) //车轮与最右侧车道右侧距离
//{
// endof = 0;
//}
//const TModelLine& L0 = road->BorderLines[0];
for(int j = 0; j <= endof; j++)
{
//1、不能大于数组的最大下标
if(i < 0) continue;
if(i > roadSize - 1) break;
//2、检查当前的路段是否在可视区域
bool findFlag = false;
for(int f = 0; f < curMesh->MapRoadKeyLen; f++)
{
if(curMesh->MapRoad_Keys[f] == i)
{
findFlag = true;
break;
}
}
if(!findFlag) continue;
const TModelLine& Lj = road->BorderLines[j];
const TModelLine& Lj1 = road->BorderLines[j + 1];
const TModelPolygon& poly = road->Lanes[j];
const TMapRoadRec* road = FactoryRoads->getRoad(i);
int endof = road->LaneCount - 1;
if(p == 2) //车轮与最右侧车道右侧距离
if(poly.Pts.size() >= 5) //圆弧路段
{
endof = 0;
}
const TModelLine& L0 = road->BorderLines[0];
for(int j = 0; j <= endof; j++)
{
const TModelLine& Lj = road->BorderLines[j];
const TModelLine& Lj1 = road->BorderLines[j + 1];
const TModelPolygon& poly = road->Lanes[j];
//if(p == 1) //1、车轮与本车道右侧距离
laneDriving = &road->BorderLines[0];
calcToLaneArc(Lj, poly, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToRightEdge);
calcToLaneArc(Lj, poly, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToRightEdge);
calcToLaneArc(Lj, poly, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToRightEdge);
calcToLaneArc(Lj, poly, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToRightEdge);
if(poly.Pts.size() >= 5) //圆弧路段
//else if(p == 2) //2车轮与最右侧车道右侧距离
if(j == 0) //j等于0,说明Lj就是最右侧车道,L0 = Lj
{
if(p == 1) //1、车轮与本车道右侧距离
{
laneDriving = &road->BorderLines[0];
calcToDistanceArc(Lj, poly, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToRightEdge);
calcToDistanceArc(Lj, poly, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToRightEdge);
calcToDistanceArc(Lj, poly, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToRightEdge);
calcToDistanceArc(Lj, poly, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToRightEdge);
}
else if(p == 2) //2车轮与最右侧车道右侧距离
{
calcToDistanceArc2(L0, road->Area, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToBaseLine);
calcToDistanceArc2(L0, road->Area, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToBaseLine);
calcToDistanceArc2(L0, road->Area, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToBaseLine);
calcToDistanceArc2(L0, road->Area, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToBaseLine);
calcToDistanceArc2(L0, road->Area, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToBaseLine); //20240801
calcToDistanceArc2(L0, road->Area, body.b1_b, body.points_b[RightBack], RTKKM3.Body_RB_ToBaseLine); //20240801
}
else if(p == 3) //3车身左侧与本车道左侧距离
{
calcToDistanceArc(Lj1, poly, body.b1_b, body.points_b[LeftFront], RTKKM3.Body_LF_ToLeftEdge);
calcToDistanceArc(Lj1, poly, body.b1_b, body.points_b[LeftBack], RTKKM3.Body_LB_ToLeftEdge);
}
else if(p == 4) //4车身右侧与本车道右侧距离
{
calcToDistanceArc(Lj, poly, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToRightEdge);
calcToDistanceArc(Lj, poly, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RB_ToRightEdge);
}
calcToLaneArc2(Lj, road->Area, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToBaseLine);
calcToLaneArc2(Lj, road->Area, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToBaseLine);
calcToLaneArc2(Lj, road->Area, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToBaseLine);
calcToLaneArc2(Lj, road->Area, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToBaseLine);
calcToLaneArc2(Lj, road->Area, body.b1_b, body.b(RF_I), RTKKM3.Body_RF_ToBaseLine); //20240801
calcToLaneArc2(Lj, road->Area, body.b1_b, body.b(RB_I), RTKKM3.Body_RB_ToBaseLine); //20240801
}
else
//else if(p == 3) //3车身左侧与本车道左侧距离
calcToLaneArc(Lj1, poly, body.b1_b, body.b(LF_I), RTKKM3.Body_LF_ToLeftEdge);
calcToLaneArc(Lj1, poly, body.b1_b, body.b(LB_I), RTKKM3.Body_LB_ToLeftEdge);
//else if(p == 4) //4车身右侧与本车道右侧距离
calcToLaneArc(Lj, poly, body.b1_b, body.b(RF_I), RTKKM3.Body_RF_ToRightEdge);
calcToLaneArc(Lj, poly, body.b1_b, body.b(RB_I), RTKKM3.Body_RB_ToRightEdge);
}
else
{
//if(p == 1) //1、车轮与本车道右侧距离
laneDriving = &road->BorderLines[0];
calcToLaneLine(Lj, poly.Pts, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToRightEdge);
calcToLaneLine(Lj, poly.Pts, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToRightEdge);
calcToLaneLine(Lj, poly.Pts, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToRightEdge);
calcToLaneLine(Lj, poly.Pts, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToRightEdge);
//else if(p == 2) //2车轮与最右侧车道右侧距离
if(j == 0) //j等于0,说明Lj就是最右侧车道,L0 = Lj
{
if(p == 1) //1、车轮与本车道右侧距离
{
laneDriving = &road->BorderLines[0];
calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToRightEdge);
calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToRightEdge);
calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToRightEdge);
calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToRightEdge);
}
else if(p == 2) //2车轮与最右侧车道右侧距离
{
calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToBaseLine);
calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToBaseLine);
calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToBaseLine);
calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToBaseLine);
calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToBaseLine, true); //20240801
calcToDistanceLine(L0, road->Area.Pts, body.b1_b, body.points_b[RightBack], RTKKM3.Body_RB_ToBaseLine, true); //20240801
}
else if(p == 3) //3车身左侧与本车道左侧距离
{
calcToDistanceLine(Lj1, poly.Pts, body.b1_b, body.points_b[LeftFront], RTKKM3.Body_LF_ToLeftEdge);
calcToDistanceLine(Lj1, poly.Pts, body.b1_b, body.points_b[LeftBack], RTKKM3.Body_LB_ToLeftEdge);
}
else if(p == 4) //4车身右侧与本车道右侧距离
{
calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.points_b[RightFront], RTKKM3.Body_RF_ToRightEdge);
calcToDistanceLine(Lj, poly.Pts, body.b1_b, body.points_b[RightBack], RTKKM3.Body_RB_ToRightEdge);
}
calcToLaneLine(Lj, road->Area.Pts, body.b1_b, body.ZQ_W_b, RTKKM3.Wheel_LF_ToBaseLine);
calcToLaneLine(Lj, road->Area.Pts, body.b1_b, body.YQ_W_b, RTKKM3.Wheel_RF_ToBaseLine);
calcToLaneLine(Lj, road->Area.Pts, body.b1_b, body.ZH_W_b, RTKKM3.Wheel_LB_ToBaseLine);
calcToLaneLine(Lj, road->Area.Pts, body.b1_b, body.YH_W_b, RTKKM3.Wheel_RB_ToBaseLine);
calcToLaneLine(Lj, road->Area.Pts, body.b1_b, body.b(RF_I), RTKKM3.Body_RF_ToBaseLine, true); //20240801
calcToLaneLine(Lj, road->Area.Pts, body.b1_b, body.b(RB_I), RTKKM3.Body_RB_ToBaseLine, true); //20240801
}
//else if(p == 3) //3车身左侧与本车道左侧距离
calcToLaneLine(Lj1, poly.Pts, body.b1_b, body.b(LF_I), RTKKM3.Body_LF_ToLeftEdge);
calcToLaneLine(Lj1, poly.Pts, body.b1_b, body.b(LB_I), RTKKM3.Body_LB_ToLeftEdge);
//else if(p == 4) //4车身右侧与本车道右侧距离
calcToLaneLine(Lj, poly.Pts, body.b1_b, body.b(RF_I), RTKKM3.Body_RF_ToRightEdge);
calcToLaneLine(Lj, poly.Pts, body.b1_b, body.b(RB_I), RTKKM3.Body_RB_ToRightEdge);
}
}
}
@ -2118,7 +2109,7 @@ void ExamCarSub3::Calc_CheShenYaXian()
}
}
int ExamCarSub3::GetCarBodyPointNo(ExamCarType cartype, int8 kind, bool tail)
int ExamCarSub3::GetCarBodyPointNo(ExamCarType cartype, const BodyPointSite& kind, bool tail)
{
//1、根据车型得到考车的车身位置(其实是最靠近车轮的点) Kind:1: 车身左1 2车身右1 3车身左2 4车身右2
//5、车头中心点 //6、车尾中心点
@ -2131,12 +2122,12 @@ int ExamCarSub3::GetCarBodyPointNo(ExamCarType cartype, int8 kind, bool tail)
{
switch (kind)
{
case 1: result = II(9); break; //车身左1
case 2: result = II(12); break; //车身右1
case 3: result = II(9); break; //车身左2
case 4: result = II(12); break; //车身右2
case 5: result = II(1); break; //车头中心点
case 6: result = INVALID_INDEX; break; //车尾中心点
case BODY_LF: result = II(9); break; //车身左1
case BODY_RF: result = II(12); break; //车身右1
case BODY_LB: result = II(9); break; //车身左2
case BODY_RB: result = II(12); break; //车身右2
case BODY_CF: result = II(1); break; //车头中心点
case BODY_CB: result = INVALID_INDEX; break; //车尾中心点
default: result = INVALID_INDEX; break;
}
}
@ -2145,12 +2136,12 @@ int ExamCarSub3::GetCarBodyPointNo(ExamCarType cartype, int8 kind, bool tail)
int G_offset = m_carModel->CheShenOffsetTail();
switch (kind)
{
case 1: result = G_offset+II(1); break; //挂车*车身左1
case 2: result = G_offset+II(5); break; //挂车*车身右1
case 3: result = G_offset+II(2); break; //挂车*车身左2
case 4: result = G_offset+II(4); break; //挂车*车身右2
case 5: result = INVALID_INDEX; break; //挂车*车头中心点
case 6: result = G_offset+II(3); break; //挂车*车尾中心点
case BODY_LF: result = G_offset+II(1); break; //挂车*车身左1
case BODY_RF: result = G_offset+II(5); break; //挂车*车身右1
case BODY_LB: result = G_offset+II(2); break; //挂车*车身左2
case BODY_RB: result = G_offset+II(4); break; //挂车*车身右2
case BODY_CF: result = INVALID_INDEX; break; //挂车*车头中心点
case BODY_CB: result = G_offset+II(3); break; //挂车*车尾中心点
default: result = INVALID_INDEX; break;
}
}
@ -2162,12 +2153,12 @@ int ExamCarSub3::GetCarBodyPointNo(ExamCarType cartype, int8 kind, bool tail)
{
switch (kind)
{
case 1: result = II(5); break; //车身左1
case 2: result = II(21); break; //车身右1
case 3: result = II(9); break; //车身左2
case 4: result = II(17); break; //车身右2
case 5: result = II(1); break; //车头中心点
case 6: result = II(13); break; //车尾中心点
case BODY_LF: result = II(5); break; //车身左1
case BODY_RF: result = II(21); break; //车身右1
case BODY_LB: result = II(9); break; //车身左2
case BODY_RB: result = II(17); break; //车身右2
case BODY_CF: result = II(1); break; //车头中心点
case BODY_CB: result = II(13); break; //车尾中心点
default: result = INVALID_INDEX; break;
}
}
@ -2176,12 +2167,12 @@ int ExamCarSub3::GetCarBodyPointNo(ExamCarType cartype, int8 kind, bool tail)
int G_offset = m_carModel->CheShenOffsetTail();
switch (kind)
{
case 1: result = G_offset+II(4); break; //挂车*车身左1
case 2: result = G_offset+II(22); break; //挂车*车身右1
case 3: result = G_offset+II(6); break; //挂车*车身左2
case 4: result = G_offset+II(20); break; //挂车*车身右2
case 5: result = G_offset+II(1); break; //挂车*车头中心点
case 6: result = G_offset+II(13); break; //挂车*车尾中心点
case BODY_LF: result = G_offset+II(4); break; //挂车*车身左1
case BODY_RF: result = G_offset+II(22); break; //挂车*车身右1
case BODY_LB: result = G_offset+II(6); break; //挂车*车身左2
case BODY_RB: result = G_offset+II(20); break; //挂车*车身右2
case BODY_CF: result = G_offset+II(1); break; //挂车*车头中心点
case BODY_CB: result = G_offset+II(13); break; //挂车*车尾中心点
default: result = INVALID_INDEX; break;
}
}
@ -2190,12 +2181,12 @@ int ExamCarSub3::GetCarBodyPointNo(ExamCarType cartype, int8 kind, bool tail)
{
switch (kind)
{
case 1: result = II(5); break; //车身左1
case 2: result = II(21); break; //车身右1
case 3: result = II(9); break; //车身左2
case 4: result = II(17); break; //车身右2
case 5: result = II(1); break; //车头中心点
case 6: result = II(13); break; //车尾中心点
case BODY_LF: result = II(5); break; //车身左1
case BODY_RF: result = II(21); break; //车身右1
case BODY_LB: result = II(9); break; //车身左2
case BODY_RB: result = II(17); break; //车身右2
case BODY_CF: result = II(1); break; //车头中心点
case BODY_CB: result = II(13); break; //车尾中心点
default: result = INVALID_INDEX; break;
}
}
@ -2203,12 +2194,12 @@ int ExamCarSub3::GetCarBodyPointNo(ExamCarType cartype, int8 kind, bool tail)
{
switch (kind)
{
case 1: result = II(9); break; //车身左1
case 2: result = II(17); break; //车身右1
case 3: result = II(10); break; //车身左2
case 4: result = II(16); break; //车身右2
case 5: result = II(1); break; //车头中心点
case 6: result = II(13); break; //车尾中心点
case BODY_LF: result = II(9); break; //车身左1
case BODY_RF: result = II(17); break; //车身右1
case BODY_LB: result = II(10); break; //车身左2
case BODY_RB: result = II(16); break; //车身右2
case BODY_CF: result = II(1); break; //车头中心点
case BODY_CB: result = II(13); break; //车尾中心点
default: result = INVALID_INDEX; break;
}
}
@ -4004,10 +3995,14 @@ void ExamCarSub3::KM3EndItem(int ItemNo, bool event, bool sound)
bool ExamCarSub3::examMarkItem(ExamItemCode itemNo, const std::string& serial, bool once, bool force, bool event, MarkType type)
{
//正式考试 扣分扣到不合格为止
if(isExamMode() && !isQualified())
const std::string& s302 = TableSysSet->get302();
if(s302 != "0") //302=0的时候考试结束方式不合格继续
{
logtrace("is not qualified %s itemNo=%d,serial=%s", target().c_str(), itemNo, serial.c_str());
return false;
if(isExamMode() && !isQualified())
{
logtrace("is not qualified %s itemNo=%d,serial=%s", target().c_str(), itemNo, serial.c_str());
return false;
}
}
//Kind:0 自动评判 1考车人工扣分 2远程下发的考试扣分
@ -5075,7 +5070,7 @@ void ExamCarSub3::dealItemNoIDEnd14Jjdw()
}
}
bool ExamCarSub3::calcToDistanceArc(const TModelLine& Lxx, const TModelPolygon& poly, const Pointi& b1, const Pointi& pt, int& dm, bool cross)
bool ExamCarSub3::calcToLaneArc(const TModelLine& Lxx, const TModelPolygon& poly, const Pointi& b1, const Pointi& pt, int& dm, bool cross)
{
TModelLine line;
line.PtBegin = b1; //CarStatus.BasePoint1_RealTime;
@ -5094,7 +5089,7 @@ bool ExamCarSub3::calcToDistanceArc(const TModelLine& Lxx, const TModelPolygon&
return false;
}
bool ExamCarSub3::calcToDistanceArc2(const TModelLine& Lxx, const TModelPolygon& area, const Pointi& b1, const Pointi& pt, int& dm, bool cross)
bool ExamCarSub3::calcToLaneArc2(const TModelLine& Lxx, const TModelPolygon& area, const Pointi& b1, const Pointi& pt, int& dm, bool cross)
{
TModelLine line;
line.PtBegin = b1; //CarStatus.BasePoint1_RealTime;
@ -5113,7 +5108,7 @@ bool ExamCarSub3::calcToDistanceArc2(const TModelLine& Lxx, const TModelPolygon&
return false;
}
bool ExamCarSub3::calcToDistanceLine(const TModelLine& Lxx, const std::vector<Pointi>& Pts, const Pointi& b1, const Pointi& pt, int& dm, bool cross)
bool ExamCarSub3::calcToLaneLine(const TModelLine& Lxx, const std::vector<Pointi>& Pts, const Pointi& b1, const Pointi& pt, int& dm, bool cross)
{
TModelLine line;
line.PtBegin = b1;
@ -5419,7 +5414,7 @@ bool ExamCarSub3::RTKLane_Tail()
if(a > 0) a = a - 1;
for(int i = a; i <= b; i++)
{
if(i > roadSize - 1) continue;
if(i >= roadSize) continue;
const TMapRoadRec* road = FactoryRoads->getRoad(i);
for(int j = 0; j < road->LaneCount; j++)
@ -5506,7 +5501,7 @@ bool ExamCarSub3::RTKLane_Tail()
for(int i = curRoadIndex; i <= curRoadIndex + 4; i++)
{
if(i > roadSize - 1) break;
if(i >= roadSize) break;
const TMapRoadRec* road = FactoryRoads->getRoad(i);
//const Pointi& pt = m_cg->body.points_b[II(1)]; //CarStatus.Body_24_RealTimePt[0];
@ -5678,109 +5673,88 @@ void ExamCarSub3::Calc_LaneDistance_Tail()
if(RTKKM3_Tail.LaneIndex == INVALID_INDEX) return;
//Kind:1: 车身左1 2车身右1 3车身左2 4车身右2
int LeftFront = GetCarBodyPointNo(cartype, 1, true);
int LeftBack = GetCarBodyPointNo(cartype, 3, true);
int RightFront = GetCarBodyPointNo(cartype, 2, true);
int RightBack = GetCarBodyPointNo(cartype, 4, true);
int LF_I = GetCarBodyPointNo(cartype, BODY_LF, true);
int LB_I = GetCarBodyPointNo(cartype, BODY_LB, true);
int RF_I = GetCarBodyPointNo(cartype, BODY_RF, true);
int RB_I = GetCarBodyPointNo(cartype, BODY_RB, true);
if(LeftFront == -1 || LeftBack == -1 || RightFront == -1 || RightBack == -1)
{
logerror("cartype=%d,LeftFront=%d, LeftBack=%d, RightFront=%d, RightBack=%d",
cartype, LeftFront, LeftBack, RightFront, RightBack);
return;
}
TASSERT_VOID(LF_I >= 0 && LB_I >= 0 && RF_I >= 0 && RB_I >= 0,
"cartype=%d, LF_I=%d, LB_I=%d, RF_I=%d, RB_I=%d", cartype, LF_I, LB_I, RF_I, RB_I);
int curRoadIndex = RTKKM3_Tail.MapRoadIndex;
//int curLaneIndex = RTKKM3_Tail.LaneIndex;
int roadSize = FactoryRoads->size();
const TCarBody& body = m_cg->body;
TModelLine line;
//判断车轮离本车道右边线距离1(左 1左2右1右2
//P-->1、车轮与本车道右侧距离 2车轮与最右侧车道右侧距离 3车身左侧与本车道左侧距离 4车身右侧与本车道右侧距离
const TMeshDefine* curMesh = FactoryMesh->getMesh(m_meshIndex_Tail);
TASSERT_VOID(curMesh != nullptr, "");
const TModelLine* laneDriving = nullptr;
for(int p = 1; p <= 4; p++)
for(int i = curRoadIndex - 2; i <= curRoadIndex + 2; i++)
{
for(int i = curRoadIndex - 2; i <= curRoadIndex + 2; i++)
//1、不能大于数组的最大下标
if(i < 0) continue;
if(i >= roadSize) break;
//2、检查当前的路段是否在可视区域
if(!curMesh->has(i)) continue;
const TMapRoadRec* road = FactoryRoads->getRoad(i);
int endof = road->LaneCount - 1;
//if(p == 2) //车轮与最右侧车道右侧距离
//{
// endof = 0;
//}
//const TModelLine& L0 = road->BorderLines[0];
for(int j = 0; j <= endof; j++)
{
//1、不能大于数组的最大下标
if(i < 0) continue;
if(i > roadSize - 1) break;
//2、检查当前的路段是否在可视区域
bool findFlag = false;
for(int f = 0; f < curMesh->MapRoadKeyLen; f++)
const TModelLine& Lj = road->BorderLines[j];
const TModelLine& Lj1 = road->BorderLines[j + 1];
const TModelPolygon& poly = road->Lanes[j];
if(poly.Pts.size() >= 5) //圆弧路段
{
if(curMesh->MapRoad_Keys[f] == i)
{
findFlag = true;
break;
}
}
if(!findFlag) continue;
//if(p == 1) //1、车轮与本车道右侧距离
laneDriving = &road->BorderLines[0];
calcToLaneArc(Lj, poly, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToRightEdge);
calcToLaneArc(Lj, poly, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToRightEdge);
const TMapRoadRec* road = FactoryRoads->getRoad(i);
int endof = road->LaneCount - 1;
if(p == 2) //车轮与最右侧车道右侧距离
{
endof = 0;
}
//else if(p == 2) //2车轮与最右侧车道右侧距离
if(j == 0) //j等于0,说明Lj就是最右侧车道,L0 = Lj
{
calcToLaneArc2(Lj, road->Area, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine);
calcToLaneArc2(Lj, road->Area, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine);
}
const TModelLine& L0 = road->BorderLines[0];
for(int j = 0; j <= endof; j++)
//else if(p == 3) //3车身左侧与本车道左侧距离
calcToLaneArc(Lj1, poly, body.b1_b_G, body.b(LF_I), RTKKM3_Tail.Body_LF_ToLeftEdge);
calcToLaneArc(Lj1, poly, body.b1_b_G, body.b(LB_I), RTKKM3_Tail.Body_LB_ToLeftEdge);
//else if(p == 4) //4车身右侧与本车道右侧距离
calcToLaneArc(Lj, poly, body.b1_b_G, body.b(RF_I), RTKKM3_Tail.Body_RF_ToRightEdge);
calcToLaneArc(Lj, poly, body.b1_b_G, body.b(RB_I), RTKKM3_Tail.Body_RB_ToRightEdge);
}
else
{
const TModelLine& Lj = road->BorderLines[j];
const TModelLine& Lj1 = road->BorderLines[j + 1];
const TModelPolygon& poly = road->Lanes[j];
if(poly.Pts.size() >= 5) //圆弧路段
//if(p == 1) //1、车轮与本车道右侧距离
laneDriving = &road->BorderLines[0];
calcToLaneLine(Lj, poly.Pts, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToRightEdge);
calcToLaneLine(Lj, poly.Pts, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToRightEdge);
//else if(p == 2) //2车轮与最右侧车道右侧距离
if(j == 0) //j等于0,说明Lj就是最右侧车道,L0 = Lj
{
if(p == 1) //1、车轮与本车道右侧距离
{
laneDriving = &road->BorderLines[0];
calcToDistanceArc(Lj, poly, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToRightEdge);
calcToDistanceArc(Lj, poly, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToRightEdge);
}
else if(p == 2) //2车轮与最右侧车道右侧距离
{
calcToDistanceArc2(L0, road->Area, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine);
calcToDistanceArc2(L0, road->Area, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine);
}
else if(p == 3) //3车身左侧与本车道左侧距离
{
calcToDistanceArc(Lj1, poly, body.b1_b_G, body.points_b[LeftFront], RTKKM3_Tail.Body_LF_ToLeftEdge);
calcToDistanceArc(Lj1, poly, body.b1_b_G, body.points_b[LeftBack], RTKKM3_Tail.Body_LB_ToLeftEdge);
}
else if(p == 4) //4车身右侧与本车道右侧距离
{
calcToDistanceArc(Lj, poly, body.b1_b_G, body.points_b[RightFront], RTKKM3_Tail.Body_RF_ToRightEdge);
calcToDistanceArc(Lj, poly, body.b1_b_G, body.points_b[RightBack], RTKKM3_Tail.Body_RB_ToRightEdge);
}
}
else
{
if(p == 1) //1、车轮与本车道右侧距离
{
laneDriving = &road->BorderLines[0];
calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToRightEdge);
calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToRightEdge);
}
else if(p == 2) //2车轮与最右侧车道右侧距离
{
calcToDistanceLine(L0, road->Area.Pts, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine);
calcToDistanceLine(L0, road->Area.Pts, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine);
}
else if(p == 3) //3车身左侧与本车道左侧距离
{
calcToDistanceLine(Lj1, poly.Pts, body.b1_b_G, body.points_b[LeftFront], RTKKM3_Tail.Body_LF_ToLeftEdge);
calcToDistanceLine(Lj1, poly.Pts, body.b1_b_G, body.points_b[LeftBack], RTKKM3_Tail.Body_LB_ToLeftEdge);
}
else if(p == 4) //4车身右侧与本车道右侧距离
{
calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.points_b[RightFront], RTKKM3_Tail.Body_RF_ToRightEdge);
calcToDistanceLine(Lj, poly.Pts, body.b1_b_G, body.points_b[RightBack], RTKKM3_Tail.Body_RB_ToRightEdge);
}
calcToLaneLine(Lj, road->Area.Pts, body.b1_b_G, body.ZH_W_b_G, RTKKM3_Tail.Wheel_LB_ToBaseLine);
calcToLaneLine(Lj, road->Area.Pts, body.b1_b_G, body.YH_W_b_G, RTKKM3_Tail.Wheel_RB_ToBaseLine);
}
//else if(p == 3) //3车身左侧与本车道左侧距离
calcToLaneLine(Lj1, poly.Pts, body.b1_b_G, body.b(LF_I), RTKKM3_Tail.Body_LF_ToLeftEdge);
calcToLaneLine(Lj1, poly.Pts, body.b1_b_G, body.b(LB_I), RTKKM3_Tail.Body_LB_ToLeftEdge);
//else if(p == 4) //4车身右侧与本车道右侧距离
calcToLaneLine(Lj, poly.Pts, body.b1_b_G, body.b(RF_I), RTKKM3_Tail.Body_RF_ToRightEdge);
calcToLaneLine(Lj, poly.Pts, body.b1_b_G, body.b(RB_I), RTKKM3_Tail.Body_RB_ToRightEdge);
}
}
}

View File

@ -80,9 +80,9 @@ protected:
void dealItemNoIDEndItem();
void dealItemNoIDEnd14Jjdw();
bool calcToDistanceArc(const TModelLine& Lxx, const TModelPolygon& poly, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false);
bool calcToDistanceArc2(const TModelLine& Lxx, const TModelPolygon& area, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false);
bool calcToDistanceLine(const TModelLine& Lxx, const std::vector<Pointi>& Pts, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false);
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);
bool calcToLaneLine(const TModelLine& Lxx, const std::vector<Pointi>& Pts, const Pointi& b1, const Pointi& pt, int& dm, bool cross=false);
//行驶方向1正向行驶-1逆向行驶
DriveDirType driveDirection(const TModelLine* lane);
@ -110,9 +110,10 @@ protected:
void Calc_LaneDistance();
//计算车身压线
void Calc_CheShenYaXian();
//1、根据车型得到考车的车身位置(其实是最靠近车轮的点kind:1: 车身左1 2车身右1 3车身左2 4车身右2
//5、车头中心点 //6、车尾中心点
int GetCarBodyPointNo(ExamCarType cartype, int8 kind, bool tail = false);
//1、根据车型得到考车的车身位置(其实是最靠近车轮的点)
//kind:1: 车身左1 2车身右1 3车身左2 4车身右2 5、车头中心点 6、车尾中心点
enum BodyPointSite{BODY_LF=1, BODY_RF=2, BODY_LB=3, BODY_RB=4, BODY_CF=5, BODY_CB=6};
int GetCarBodyPointNo(ExamCarType cartype, const BodyPointSite& kind, bool tail = false);
bool DrawKM3Map(int width=IMG_SIZE_WIDTH, int height=IMG_SIZE_HEIGHT);
//计算考车显示网格

View File

@ -18,7 +18,7 @@ public:
explicit ExamHistory() : m_num(N) { m_que = __NEW__(HistoryQueue); }
virtual ~ExamHistory() { clear(); __DELETE__(m_que); }
T* operator[](int n) { int size = m_que->size(); return n < size ? (*m_que)[n] : nullptr; }
T* operator[](int n) { int size = m_que->size(); return n < size ? m_que->operator[](n) /* (*m_que)[n] */ : nullptr; }
T* at(int n) { TASSERT(n < (int)m_que->size(), ""); return (*this)[n]; }

View File

@ -3,6 +3,11 @@
bool ISub2JudgeWrap::pureJudgeEnter() const noexcept
{
if(m_car->historyMoveState() != moveForward) //必须是前进状态进项目
{
//logdebug("not moveForward move=%d", m_cg->move);
return false;
}
return pureJudgeEnter(m_mod->beg());
}

View File

@ -97,8 +97,17 @@ bool Sub2Judge00Dcrk::dealJudgeEnter()
// enter = pureCarSomeInPoly({II(4), II(22)}, m_model->poly1278());
//}
int s686 = TableSysSet->asInt686();
bool enter = false;
if(s686 == 1) //1:倒车入库车头穿过10线读卡进项目
{
enter = this->pureJudgeEnter();
}
else //不配置按照0处理,686参数默认是车子在库区域内读卡
{
enter = pureCarSomeInPoly(m_car->carModel()->body(), m_model->poly1278());
}
//库位两边都可以进, 防止从L12开到L78直接开过去又可以取消会多次触发预进项目加上车头1点必须在poly1278内过滤
bool enter = this->pureJudgeEnter() || (this->pureJudgeEnter(m_model->end()) && pureCarPointInPoly(II(1), m_model->poly1278()));
if(enter)
{
#if JUDGE_USE_OLD
@ -315,20 +324,25 @@ void Sub2Judge00Dcrk::divorcedItemArea()
bool in1 = pureInArea({cg1->body.ZH_Z_a,cg1->body.YH_Z_a}, m_model->area(), true);
bool out = ((!in0 && in1) || !pureCarInItemArea()); //阶段10后轮先不在项目区域结束项目然后才会走道这里
#else
bool out = (!pureCarInItemArea());
//bool out = (!pureCarInItemArea());
bool out = pureCarTouchSoloLine(m_model->L12_10(), II(13), 5);
#endif
if(out)
{
int syset = TableSysSet->asInt606();
if(syset == 1 || m_secondInverted == true || m_stage >= Sub2DcrkStage3 || m_existMark == true) //不可以取消的
TChuanGan* cg = m_car->historyChuanGan();
if(cg->move == moveForward)
{
ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_ONCE(MARK_SUB2_DCRK_01));
setState(itemStateEnd);
}
else
{
//取消倒车入库
cancelItem();
int syset = TableSysSet->asInt606();
if(syset == 1 || m_secondInverted == true || m_stage >= Sub2DcrkStage3 /*|| m_existMark == true*/) //不可以取消的
{
ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_ONCE(MARK_SUB2_DCRK_01));
setState(itemStateEnd);
}
else
{
cancelItem(); //取消倒车入库
return;
}
}
}
}
@ -343,7 +357,9 @@ JUDGE_STAGE_IMPL(Sub2Judge00Dcrk, Sub2DcrkStage1)
//前进至停车线阶段
TChuanGan* cg = m_car->historyChuanGan();
TChuanGan* cg1 = m_car->historyChuanGan(1);
if(cg->move == moveStop && cg1->move == moveStop)
if((cg->move == moveStop && cg1->move == moveStop) ||
(TableSysSet->asInt686() != 1 && cg->move == moveBackward && cg1->move == moveBackward &&
pureCarSomeInPoly(m_car->carModel()->wheelBack(), m_model->poly1278())))
{
m_stage = Sub2DcrkStage2; //初始停车
if(cg->rk_Shape_Status[L11] == TChuanGan::rk_Shape_1)

View File

@ -116,8 +116,12 @@ JUDGE_STAGE_IMPL(Sub2Judge03Cftc, Sub2CftcStage0)
//穿越结束线了
if(m_endLineFlag == true && cgcu->move == moveForward)
{
//2025年04月15日和军华确认的原话 修改无锡地方问题
//我问:有扣分不能取消,如果有扣分之后直接开跑了怎么处理?直接判不按规定考试?@老军
//军华:我看现在评判本地给取消了。然后监管会报错,考不了下一个项目,学员要先考侧方
//备注:后又当面交流确认开回去走断点续考或者重新进项目
int s606 = TableSysSet->asInt606();
if(s606 == 1 || m_existMark == true) //不可以取消项目,或者侧方已经扣过分了
if(s606 == 1 /*|| m_existMark == true*/) //不可以取消项目,或者侧方已经扣过分了
{
ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_ONCE(MARK_SUB2_CFTC_41));
}
@ -431,12 +435,6 @@ void Sub2Judge03Cftc::judgeTouchLine()
touchLineBody_C1C2C5(LineNum::L45_NUM);
touchLineBody_C1C2C5(LineNum::L56_NUM);
//#endif
//车轮排线压线道路边线不评判库位压线库位有4个轮子的评判
//以下计算所有的压线扣分(这里只针对车轮排线)
touchLineWind_C1C2C5(LineNum::L23_NUM);
touchLineWind_C1C2C5(LineNum::L67_NUM);
touchLineWind_C1C2C5(LineNum::L18_NUM);
}
}
@ -450,7 +448,8 @@ void Sub2Judge03Cftc::touchLineWheel_C1C2C5(LineNum num)
static constexpr int history = 2;
//2024年6月4日无锡所检测多个轮子压线只扣1次前进或者后退中只扣1次
if(pureCarTouchSomeLine(line, model->wheelAll(), history)) //前后左右轮子
if(pureCarTouchSomeLine(line, model->wheelAll(), history) ||
pureCarTouchPairsLine(line, model->wheelWindAll())) //前后左右轮子和排线
{
if(!touch->wheelFlag)
{
@ -458,6 +457,10 @@ void Sub2Judge03Cftc::touchLineWheel_C1C2C5(LineNum num)
touchLineMark(num);
}
}
else
{
touch->wheelFlag = false;
}
}
void Sub2Judge03Cftc::touchLineWind_C1C2C5(LineNum num)
@ -481,7 +484,6 @@ void Sub2Judge03Cftc::touchLineWind_C1C2C5(LineNum num)
}
}
void Sub2Judge03Cftc::touchLineBody_C1C2C5(LineNum num)
{
TSub2CftcTouch* touch = nullptr;
@ -499,6 +501,10 @@ void Sub2Judge03Cftc::touchLineBody_C1C2C5(LineNum num)
ENTER_ITEM_AND_MARK(JUDGE_MARK_ITEM_MUST_MORE(MARK_SUB2_CFTC_203));
}
}
else
{
touch->bodyFlag = false;
}
}
void Sub2Judge03Cftc::touchLineMark(LineNum num)

View File

@ -22,9 +22,9 @@ private:
bool rightFront = false; //右前轮压线 right front
bool leftBack = false; //左后轮压线 left back
bool rightBack = false; //右后轮压线 right back
bool windFlag = false; //排线压线(道路边缘线)
bool wheelFlag = false; //20240604 车轮前进或者后退中多个轮子压同一条线只算1次了
bool bodyFlag = false; //20240605 车身触碰库位边线
bool windFlag = false; //排线压线(道路边缘线)
};
enum LineNum { L23_NUM, L34_NUM, L45_NUM, L56_NUM, L67_NUM, L18_NUM, L36_NUM, SIZE_NUM };

View File

@ -1277,6 +1277,10 @@ 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

@ -282,6 +282,10 @@ void Sub3Judge20Comm::Init_ZongHe()
//自动熄火评判方式:熄火次数扣分,1:根据PLC熄火次数 2根据点火2其它值根据发动机转速为0或点火2+转速大于100
m_itemvCJH.zdxhkf = s500.size() > 1 && s500[1] != "" ? std::atoi(s500[1].c_str()) : 0;
if(tcar->XiHuo != INVALID_INDEX) //优先以车型代码参数NO3=70,同500参数
{
m_itemvCJH.zdxhkf = tcar->XiHuo;
}
//踩副刹时长
m_itemvCJH.fscys = s500.size() > 2 && s500[2] != "" ? std::atoi(s500[2].c_str()) : 5;
//挡位扣分间隔
@ -1316,9 +1320,23 @@ void Sub3Judge20Comm::Judge_KongDangHuaXing()
//空挡滑行30115 相关评判
if(m_itemvCJH.kdhx_tk > 0)
{
if(sor.dw > 0 || cg->move != moveForward || Tools::isZero(gps.sd) || sor.lhq == SYES ||
(ksdd == siteof::changzhoukm3 && sor.lhq == SYES) ||
(ksdd == siteof::zjhz && sor.lhq == SYES))
bool i = false;
if(sor.dw > 0 || cg->move != moveForward || Tools::isZero(gps.sd))
{
i = true;
}
if(ksdd != siteof::scms && sor.lhq == SYES)
{
i = true;
}
const std::vector<std::string>& s507 = TableSysSet->asArray507();
std::string ss507 = s507.size() > 11 ? s507[11] : "";
if(ss507 != "1" && sor.lhq == SYES)
{
i = true;
}
if(i)
{
m_itemvCJH.kdhx_tk = 0;
}
@ -4334,7 +4352,7 @@ void Sub3Judge20Comm::Mark_FXD_42_43(bool Flag42)
else
{
bool BGCD_ItemFlag = m_car->itemsSomeExaming2(Sub3ItemType04Bgcd); //变更车道
if(BGCD_ItemFlag == true) return;
if(BGCD_ItemFlag == true) return; //(*XLG_Modify 2024-06-04*)
if(Flag42 == true)
{
JUDGE_MARK_SUB3(4, "42", false);
@ -4400,14 +4418,12 @@ void Sub3Judge20Comm::HandleSysSet409_1_Special()
//超车项目检查
if(item10 != nullptr)
{
if(item10->TestPro == ItemProFlagIdle || item10->TestPro == ItemProFlagEnd)
if(!m_car->itemsSomeExaming2(item04->ItemNo))
{
//ToDo1:通知上层生成当前项目的进项目事件
//ToDo2:通知上层生成当前项目的拍照事件
m_car->createEventEnterItem({item10->ItemNo, ""});
m_car->KM3EndItem(item10->ItemNo,true,false);
}
else if(item10->TestPro == ItemProFlagInit || item10->TestPro == ItemProFlagJudge)
else
{
m_car->KM3EndItem(item10->ItemNo);
}
@ -4420,20 +4436,13 @@ void Sub3Judge20Comm::HandleSysSet409_1_Special()
TKM3Item* item04 = m_car->findExamItem(Sub3ItemType04Bgcd); //变更车道
if(item04 != nullptr)
{
if(item04->TestPro == ItemProFlagIdle || item04->TestPro == ItemProFlagEnd)
//这个参数的意思是,不在变更车道项目里面,就是说,
//我们没有读卡或者说考试员触发变更车道项目,学员自己在路上自己变道了。
//然后他变道完成的时候,我们会把变更车道项目。变成完已完成状态,就认为已经做过了。
if(!m_car->itemsSomeExaming2(item04->ItemNo) && !m_car->isItemPassed(item04->ItemNo)) //Tools::pos(',4,', ',' + Ctl.PassedItem) = 0
{
//ToDo1:通知上层生成当前项目的进项目事件
//ToDo2:通知上层生成当前项目的拍照事件
m_car->createEventEnterItem({item04->ItemNo, ""});
m_car->KM3EndItem(item04->ItemNo,true,false);
}
else if(item04->TestPro == ItemProFlagInit || item04->TestPro == ItemProFlagJudge)
{
m_car->KM3EndItem(item04->ItemNo);
}
if(!m_car->isItemPassed(item04->ItemNo)) //Tools::pos(',4,', ',' + Ctl.PassedItem) = 0
{
if(ksdd == siteof::ynljys)
{
//ToDo:语音播报:结束变更
@ -4566,6 +4575,7 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang()
if(gps.sd < 5.0 && gps1.sd < 5.0 && gps2.sd < 5.0) return;
#define HIS(x) m_car->historySensor(x).dw
//SysSet[425] 一档一离合相关
// (*
// 加减档位操作挂一个挡位要松一次离合器(项目,全程0-否 1-是)()
@ -4575,8 +4585,7 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang()
TKM3Item* item14 = m_car->findExamItem(Sub3ItemType14Jjdw);//加减挡
if(item14 && item14->TestPro == ItemProFlagIdle && ss425 == "1")
{
const TSensorInfo& sor3 = m_car->historySensor(3);
if(sor.dw == sor1.dw && sor.dw != sor2.dw && sor.dw != sor3.dw && sor.dw > 0)
if(sor.dw == HIS(1) && sor.dw != HIS(2) && sor.dw != HIS(3) && sor.dw > 0)
{
int dw = sor.dw;
int k = 0;
@ -4589,18 +4598,12 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang()
}
const TSensorInfo& sori = m_car->historySensor(i);
int dw_i0 = sori.dw;
int dw_i1 = m_car->historySensor(i + 1).dw;
int dw_i2 = m_car->historySensor(i + 2).dw;
int dw_i3 = m_car->historySensor(i + 3).dw;
int dw_i4 = m_car->historySensor(i + 4).dw;
int dw_i5 = m_car->historySensor(i + 5).dw;
int dw_i6 = m_car->historySensor(i + 6).dw;
if(sori.lhq == SNOT) break;
if(dw_i0 == SNOT) continue;
if(dw != dw_i0 && dw_i0 == dw_i1 && dw_i0 == dw_i2 && dw_i0 == dw_i3 &&
dw_i0 == dw_i4 && dw_i0 == dw_i5 && dw_i0 == dw_i6)
if(sori.dw == 0) continue;
if(dw != sori.dw &&
sori.dw == HIS(i+1) && sori.dw == HIS(i+2) && sori.dw == HIS(i+3) &&
sori.dw == HIS(i+4) && sori.dw == HIS(i+5) && sori.dw == HIS(i+6))
{
k = k + 1;
dw = sori.dw;
@ -4613,11 +4616,45 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang()
}
}
/*
if Ctl.ksdd = 'wuxijiance' then
begin
if (cg.di_lhq = 1) and (cg.ai_dw = 3) then
begin
for i := 1 to 100 do
begin
if lscg[zj(i)].di_lhq = 0 then
Break;
if lscg[zj(i)].ai_dw > 3 then
Break;
if lscg[zj(i)].ai_dw = 1 then
begin
Mark(14, '01', True);
Break;
end;
end;
end;
end;
*/
int count = m_car->historyCount();
bool btempkf = false;
bool btemp1 = false;
bool btemp2 = false;
//越级加减档持续时间
if(m_itemvCJH.yjjdcxsj == 0)
{
if(sor.dw == sor1.dw && sor.dw == sor2.dw && sor.dw > 0 && sor.dw < 9 &&
bool ix = 0;
if(sor.lhq == SNOT)
{
ix = 1;
}
if(ksdd == siteof::lfgakm3)
{
ix = 1;
}
if(sor.dw == HIS(1) && sor.dw == HIS(2) && sor.dw > 0 && sor.dw < 9 &&
sor.lhq == SNOT && gps.sd > 5 && !IS_C2(m_carType) && !IS_C5(m_carType)) //增加了车速>5 20151214
{
for(int i = 3; i < 53; i++)
@ -4628,31 +4665,27 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang()
}
const TChuanGan* hisi = m_car->historyChuanGan(i);
const TSensorInfo& sori = hisi->real.sensor;
int dw_i0 = sori.dw;
if(dw_i0 != 0) break;
int dw_i1 = m_car->historySensor(i + 1).dw;
int dw_i2 = m_car->historySensor(i + 2).dw;
if(sori.dw >= sor.dw && sori.lhq == SNOT) break;
if(sori.dw + 1 == sor.dw && sori.lhq == SNOT) break;
if(dw_i1 >= sor.dw && sori.lhq == SNOT) break;
if(dw_i1 + 1 == sor.dw && sori.lhq == SNOT) break;
if(sori.dw == 0)
btemp1 = true;
if(sori.lhq == SYES)
btemp2 = true;
if(ksdd == siteof::shandong)
btemp2 = true;
if(ksdd == siteof::scms || ksdd == siteof::hnay || ksdd == siteof::lfgakm3)
btemp1 = true;
if(btemp1 && btemp2)
btempkf = true;
if(dw_i1 < sor.dw && dw_i1 > 0 && dw_i1 == dw_i2)
if(sori.dw < sor.dw && HIS(i+1) == sori.dw && sori.dw > 0)
{
if(sor.dw - dw_i1 > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt)
if(sor.dw - sori.dw > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt && btempkf)
{
bool FindFlag = false;
if(ksdd == siteof::JXNC || m_itemvCJH.qcyjjdkf == 1)
{
FindFlag = true;
}
TKM3Item* item14 = m_car->findExamItem(Sub3ItemType14Jjdw); //加减挡
if(item14 && item14->TestPro > ItemProFlagIdle)
{
FindFlag = true;
}
if(FindFlag == true)
if((item14 && item14->TestPro > ItemProFlagIdle) || ksdd == siteof::JXNC || m_itemvCJH.qcyjjdkf == 1)
{
JUDGE_MARK_SUB3(14, "01", true);
}
@ -4669,12 +4702,18 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang()
}
else if(m_itemvCJH.yjjdcxsj == 1)
{
const TSensorInfo& sor2 = m_car->historySensor(2);
const TSensorInfo& sor3 = m_car->historySensor(3);
const TSensorInfo& sor4 = m_car->historySensor(4);
if(sor.dw == sor1.dw && sor.dw == sor2.dw && sor.dw == sor3.dw && sor.dw == sor4.dw &&
sor.dw > 0 && sor.dw < 9 && sor.lhq == SNOT && sor4.lhq == SNOT && gps.sd > 5 &&
!IS_C2(m_carType) && !IS_C5(m_carType)) //增加了车速>5 20151214
bool ix = 0;
if(sor.lhq == SNOT && sor1.lhq == SNOT)
{
ix = 1;
}
if(ksdd == siteof::lfgakm3)
{
ix = 1;
}
if(sor.dw == HIS(1) && sor.dw == HIS(2) && sor.dw == HIS(3) && sor.dw == HIS(4) &&
sor.dw > 0 && sor.dw < 9 && sor.lhq == SNOT && sor1.lhq == SNOT &&
gps.sd > 5 && !IS_C2(m_carType) && !IS_C5(m_carType)) //增加了车速>5 20151214
{
for(int i = 5; i <= 55; i++)
{
@ -4685,35 +4724,29 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang()
const TChuanGan* hisi = m_car->historyChuanGan(i);
const TSensorInfo& sori = hisi->real.sensor;
int dw_i0 = sori.dw;
if(dw_i0 != 0) break;
int dw_i1 = m_car->historySensor(i + 1).dw;
int dw_i2 = m_car->historySensor(i + 2).dw;
int dw_i3 = m_car->historySensor(i + 3).dw;
int dw_i4 = m_car->historySensor(i + 4).dw;
int dw_i5 = m_car->historySensor(i + 5).dw;
if(sori.dw > sor.dw && sori.lhq == SNOT) break;
if(sori.dw + 1 == sor.dw && sori.lhq == SNOT) break;
if(dw_i1 > sor.dw && sori.lhq == SNOT) break;
if(dw_i1 + 1 == sor.dw && sori.lhq == SNOT) break;
if(sori.dw == 0)
btemp1 = true;
if(sori.lhq == SYES)
btemp2 = true;
if(ksdd == siteof::shandong)
btemp2 = true;
if(ksdd == siteof::scms || ksdd == siteof::hnay || ksdd == siteof::lfgakm3)
btemp1 = true;
if(btemp1 && btemp2)
btempkf = true;
if(dw_i1 < sor.dw && dw_i1 > 0 &&
dw_i2 == dw_i1 && dw_i3 == dw_i1 && dw_i4 == dw_i1 && dw_i5 == dw_i1)
if(sori.dw < sor.dw &&
HIS(i+1) == sori.dw && HIS(i+2) == sori.dw &&
HIS(i+3) == sori.dw && HIS(i+4) == sori.dw && sori.dw > 0)
{
if(sor.dw - dw_i1 > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt)
if(sor.dw - sori.dw > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt && btempkf)
{
bool FindFlag = false;
if(ksdd == siteof::JXNC || m_itemvCJH.qcyjjdkf == 1)
{
FindFlag = true;
}
TKM3Item* item14 = m_car->findExamItem(Sub3ItemType14Jjdw); //加减挡
if(item14 && item14->TestPro > ItemProFlagIdle)
{
FindFlag = true;
}
if(FindFlag == true)
if((item14 && item14->TestPro > ItemProFlagIdle) || ksdd == siteof::JXNC || m_itemvCJH.qcyjjdkf == 1)
{
JUDGE_MARK_SUB3(14, "01", true);
}
@ -4730,18 +4763,20 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang()
}
else if(m_itemvCJH.yjjdcxsj == 2)
{
const TSensorInfo& sor3 = m_car->historySensor(3);
const TSensorInfo& sor4 = m_car->historySensor(4);
const TSensorInfo& sor5 = m_car->historySensor(5);
const TSensorInfo& sor6 = m_car->historySensor(6);
const TSensorInfo& sor7 = m_car->historySensor(7);
const TSensorInfo& sor8 = m_car->historySensor(8);
bool ix = 0;
if(sor.lhq == SNOT && sor2.lhq == SNOT)
{
ix = 1;
}
if(ksdd == siteof::lfgakm3)
{
ix = 1;
}
if(sor.dw == sor1.dw && sor.dw == sor2.dw && sor.dw == sor3.dw &&
sor.dw == sor4.dw && sor.dw == sor5.dw && sor.dw == sor6.dw &&
sor.dw == sor7.dw && sor.dw == sor8.dw && sor.dw > 0 &&
sor.dw < 9 && sor.lhq == SNOT && sor2.lhq == SNOT &&
gps.sd > 5 && !IS_C2(m_carType) && !IS_C5(m_carType)) //增加了车速>5 20151214
if(sor.dw == HIS(1) && sor.dw == HIS(2) && sor.dw == HIS(3) &&
sor.dw == HIS(4) && sor.dw == HIS(5) && sor.dw == HIS(6) &&
sor.dw == HIS(7) && sor.dw == HIS(8) && sor.dw > 0 && sor.dw < 9 &&
ix == 1 && gps.sd > 5 && !IS_C2(m_carType) && !IS_C5(m_carType)) //增加了车速>5 20151214
{
for(int i = 9; i < 59; i++)
{
@ -4751,44 +4786,31 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang()
}
const TChuanGan* hisi = m_car->historyChuanGan(i);
const TSensorInfo& sori = hisi->real.sensor;
int dw_i0 = sori.dw;
if(dw_i0 != 0) break;
int dw_i1 = m_car->historySensor(i + 1).dw;
int dw_i2 = m_car->historySensor(i + 2).dw;
int dw_i3 = m_car->historySensor(i + 3).dw;
int dw_i4 = m_car->historySensor(i + 4).dw;
int dw_i5 = m_car->historySensor(i + 5).dw;
int dw_i6 = m_car->historySensor(i + 6).dw;
int dw_i7 = m_car->historySensor(i + 7).dw;
int dw_i8 = m_car->historySensor(i + 8).dw;
int dw_i9 = m_car->historySensor(i + 9).dw;
int dw_i10 = m_car->historySensor(i + 10).dw;
if(sori.dw > sor.dw && sori.lhq == SNOT) break;
if(sori.dw + 1 == sor.dw && sori.lhq == SNOT) break;
if(dw_i1 > sor.dw && sori.lhq == SNOT) break;
if(dw_i1 + 1 == sor.dw && sori.lhq == SNOT) break;
if(sori.dw == 0)
btemp1 = true;
if(sori.lhq == SYES)
btemp2 = true;
if(ksdd == siteof::shandong)
btemp2 = true;
if(ksdd == siteof::scms || ksdd == siteof::hnay || ksdd == siteof::lfgakm3)
btemp1 = true;
if(btemp1 && btemp2)
btempkf = true;
if(dw_i1 < sor.dw && dw_i1 > 0 && dw_i2 == dw_i1 && dw_i3 == dw_i1 &&
dw_i4 == dw_i1 && dw_i5 == dw_i1 && dw_i6 == dw_i1 && dw_i7 == dw_i1 &&
dw_i8 == dw_i1 && dw_i9 == dw_i1 && dw_i10 == dw_i1)
if(sori.dw < sor.dw &&
HIS(i+1) == sori.dw && HIS(i+2) == sori.dw && HIS(i+3) == sori.dw &&
HIS(i+4) == sori.dw && HIS(i+5) == sori.dw && HIS(i+6) == sori.dw &&
HIS(i+7) == sori.dw && HIS(i+8) == sori.dw && HIS(i+9) == sori.dw && sori.dw > 0)
{
if(sor.dw - dw_i1 > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt)
if(sor.dw - sori.dw > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt && btempkf)
{
bool FindFlag = false;
if(ksdd == siteof::JXNC || m_itemvCJH.qcyjjdkf == 1)
{
FindFlag = true;
}
TKM3Item* item14 = m_car->findExamItem(Sub3ItemType14Jjdw); //加减挡
if(item14 && item14->TestPro > ItemProFlagIdle)
if((item14 && item14->TestPro > ItemProFlagIdle) || ksdd == siteof::JXNC || m_itemvCJH.qcyjjdkf == 1)
{
FindFlag = true;
}
if(FindFlag == true)
{
//安卓档位评判好像逻辑上做了优化,比方说越级加档,中间必须出现 0 才判1 跳 3 的情况,没出现 0 不判
//项目经理吉说的先按照这样做
JUDGE_MARK_SUB3(14, "01", true);
}
else
@ -4809,44 +4831,23 @@ void Sub3Judge20Comm::Judge_YueJi_JiaJianDang()
{
break;
}
const TChuanGan* hisi = m_car->historyChuanGan(i);
const TSensorInfo& sori = hisi->real.sensor;
int dw_i0 = sori.dw;
int dw_i1 = m_car->historySensor(i + 1).dw;
int dw_i2 = m_car->historySensor(i + 2).dw;
int dw_i3 = m_car->historySensor(i + 3).dw;
int dw_i4 = m_car->historySensor(i + 4).dw;
int dw_i5 = m_car->historySensor(i + 5).dw;
int dw_i6 = m_car->historySensor(i + 6).dw;
int dw_i7 = m_car->historySensor(i + 7).dw;
int dw_i8 = m_car->historySensor(i + 8).dw;
int dw_i9 = m_car->historySensor(i + 9).dw;
if(dw_i0 == 9) break;
if(sori.dw == 9) break;
if(hisi->move != moveForward) break;
if(dw_i0 < sor.dw && sori.lhq == SNOT) break;
if(dw_i0 - 1 == sor.dw && sori.lhq == SNOT) break;
if(sori.dw < sor.dw && sori.lhq == SNOT) break;
if(sori.dw - 1 == sor.dw && sori.lhq == SNOT) break;
if(dw_i0 > sor.dw && dw_i0 > 0 &&
dw_i1 == dw_i0 && dw_i2 == dw_i0 && dw_i3 == dw_i0 &&
dw_i4 == dw_i0 && dw_i5 == dw_i0 && dw_i6 == dw_i0 &&
dw_i7 == dw_i0 && dw_i8 == dw_i0 && dw_i9 == dw_i0)
if(sori.dw > sor.dw &&
HIS(i+1) == sori.dw && HIS(i+2) == sori.dw && HIS(i+3) == sori.dw &&
HIS(i+4) == sori.dw && HIS(i+5) == sori.dw && HIS(i+6) == sori.dw &&
HIS(i+7) == sori.dw && HIS(i+8) == sori.dw && HIS(i+9) == sori.dw && sori.dw > 0)
{
if(dw_i0 - sor.dw > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt)
if(sori.dw - sor.dw > 1 && m_itemvCJH.yjjdkfjs != hisi->tkCnt)
{
bool FindFlag = false;
if(ksdd == siteof::JXNC || m_itemvCJH.qcyjjdkf == 1)
{
FindFlag = true;
}
TKM3Item* item14 = m_car->findExamItem(Sub3ItemType14Jjdw); //加减挡
if(item14 && item14->TestPro > ItemProFlagIdle)
{
FindFlag = true;
}
if(FindFlag == true)
if((item14 && item14->TestPro > ItemProFlagIdle) || ksdd == siteof::JXNC || m_itemvCJH.qcyjjdkf == 1)
{
JUDGE_MARK_SUB3(14, "01", true);
}

View File

@ -2439,23 +2439,35 @@ void Sub3Judge41Mndg::CheLiangGuZhang()
a = 1;
}
}
if((a == 1) && ((ksdd != siteof::nj && sor.wd == SNOT) || ksdd == siteof::nj) && ((m_itemv.lstcstd == 1 && sor.shtd == SYES) || m_itemv.lstcstd != 1))
if((a == 1) && ((ksdd != siteof::nj && sor.wd == SNOT) || ksdd == siteof::nj) &&
((m_itemv.lstcstd == 1 && sor.shtd == SYES) || m_itemv.lstcstd != 1))
{
if(m_itemv.Lt_LastChange_TM == 0) //表示没有灯光动作
{
if(MilliSecondsBetween(gps.sj, m_itemv.Snd_Wav_End_TM) > m_itemv.P_CSOK_YanShi)
int64 tm = MilliSecondsBetween(gps.sj, m_itemv.Snd_Wav_End_TM);
if(tm > m_itemv.P_CSOK_YanShi)
{
m_itemv.Lt_YesID = true;
}
}
else
{
if(MilliSecondsBetween(gps.sj, m_itemv.Lt_LastChange_TM) >= m_itemv.P_YJGD_JT_YS) //正确的灯光持续了一段时间
int64 tm = MilliSecondsBetween(gps.sj, m_itemv.Lt_LastChange_TM);
if(tm >= m_itemv.P_YJGD_JT_YS) //正确的灯光持续了一段时间
{
m_itemv.Lt_YesID = true;
}
}
}
if(ksdd == siteof::shandong)
{
//地点版本shandong下双跳灯信号开过就可以 20250415鸿蒙终端调试群说的4月16日再次和军华当面确认的
if(sor.shtd == SYES && sor1.shtd == SYES)
{
m_itemv.Lt_YesID = true;
}
}
//20190308
if(ksdd == siteof::guizhou)
{
@ -2469,7 +2481,8 @@ void Sub3Judge41Mndg::CheLiangGuZhang()
}
}
//总时间到 或 灯光操作正确
if(m_itemv.Lt_YesID == true || MilliSecondsBetween(gps.sj, m_itemv.Snd_Wav_End_TM) > m_itemv.P_zys)
int64 tm = MilliSecondsBetween(gps.sj, m_itemv.Snd_Wav_End_TM);
if(m_itemv.Lt_YesID == true || tm > m_itemv.P_zys)
{
if(m_itemv.Lt_YesID)
{
@ -2495,7 +2508,8 @@ void Sub3Judge41Mndg::CheLiangGuZhang()
}
else
{
if(a == 1 && ((ksdd != siteof::nj && sor.wd == 0) || ksdd == siteof::nj) && ((m_itemv.lstcstd == 1 && sor.shtd == SYES) || m_itemv.lstcstd != 1))
if(a == 1 && ((ksdd != siteof::nj && sor.wd == 0) || ksdd == siteof::nj) &&
((m_itemv.lstcstd == 1 && sor.shtd == SYES) || m_itemv.lstcstd != 1))
{
m_itemv.ItemNo = 0;
m_itemv.stdjs = gps.sj; //20171018

View File

@ -1141,6 +1141,9 @@ struct TCarBody
Pointi b1_b_G; //挂车*GPS主天线
Pointi b2_b_G; //挂车*GPS从天线
const TGPSPoint& a(int idx) const { return points_a[idx]; }
const Pointi& b(int idx) const { return points_b[idx]; }
TCarBody() noexcept { clean(); }
virtual ~TCarBody() noexcept { clean(); }
void clean() noexcept
@ -1346,6 +1349,18 @@ struct TMeshDefine
MapSubItemKeyLen,PointItemKeyLen,FangXiangDianKeyLen,RowNo,ColNo,Area);
DISABLE_COPY_DECLARE_WITH(TMeshDefine);
bool has(int roadIndex) const
{
for(int f = 0; f < MapRoadKeyLen; f++)
{
if(MapRoad_Keys[f] == roadIndex)
{
return true;
}
}
return false;
}
};
using TMeshDefines = std::vector<TMeshDefine*>;
@ -1453,6 +1468,8 @@ struct TCar
std::string XSJL_Parm;
int XiHuo = INVALID_INDEX;
//档位转速比 2014111
struct TCarZsBl { int CarZsBmin = -1; int CarZsBMax = -1; };
std::array<TCarZsBl, 7> DwZsBl; //20141111 档位转速比 档位转速比 array[1..5]

View File

@ -26,6 +26,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
int x = (sw - w) / 2;
int y = (sh - h) / 2;
setGeometry(x, y, w, h);
}
MainWindow::~MainWindow()
@ -70,6 +71,16 @@ 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());
// }));
m_ui->loop->clear();
m_ui->loop->addItem(CL8(""), false);
m_ui->loop->addItem(CL8(""), true);
@ -406,9 +417,16 @@ void MainWindow::playSoundVoice(const std::string& code)
logwarning("not-find-audio file:%s", filepath.toLocal8Bit().data());
return;
}
m_audio.setMedia(QUrl::fromLocalFile(file));
m_audio.play();
QMediaPlayer::Error err = m_audio.error();
QString errStr = m_audio.errorString();
if(err != QMediaPlayer::NoError)
{
logwarning("paly-audio file:%s, err:%d-%s ",
filepath.toUtf8().data(), err, errStr.toUtf8().data());
}
return;
}

View File

@ -413,7 +413,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>600</x>
<y>180</y>
<width>101</width>
<width>111</width>
<height>20</height>
</rect>
</property>
@ -426,7 +426,7 @@ p, li { white-space: pre-wrap; }
<rect>
<x>600</x>
<y>163</y>
<width>101</width>
<width>111</width>
<height>20</height>
</rect>
</property>

View File

@ -35,9 +35,9 @@ export default class ServiceExtImpl extends IdlServiceExtStub {
}).catch(err => {
callback(0, JSON.stringify({
code: 1,
data: JSON.stringify({
data: {
code: 2300007
})
}
}));
console.log("lixiao paste error", JSON.stringify(err))
})

View File

@ -0,0 +1,22 @@
import fs from '@ohos.file.fs';
export function delLog(offset: number) {
try {
const path = "/mnt/hmdfs/100/account/device_view/local/files/duolun/logs"
const list = fs.listFileSync(path)
const now = new Date().getTime()
list.forEach(filename => {
const year = Number(filename.split("_")[0])
const month = Number(filename.split("_")[1]) - 1
const date = Number(filename.split("_")[2])
const fileDate = new Date(year, month, date).getTime()
if (now - fileDate >= offset * 24 * 60 * 60 * 1000) {
fs.rmdirSync(path + "/" + filename)
console.log("lixiao delete log success path: ", path + "/" + filename)
}
})
} catch (e) {
console.log("lixiao delete log error", JSON.stringify(e))
}
}

View File

@ -123,7 +123,7 @@ async function getfilehandleCode(td, param, dir, path, index) {
export async function getUserAlbumItemByDisplayName(displayName: string, day?,
type?): Promise<photoAccessHelper.Album> {
type?): Promise<photoAccessHelper.Album> {
let fetchResult = null
let album: photoAccessHelper.Album = null
try {
@ -223,34 +223,61 @@ export async function takePhoto(param, context, dir, flag = 1, callback?) {
// @ts-ignore
// var snapResult = rtsp_server.getVideoSnapshot(context, video_uri, '', dir);
if (flag == 0) {
rtsp_server.detectVideoSnapshotSize(video_uri, fileName, (err, snapResult) => {
console.log("baohaowen_detectLoop round end size1:" + snapResult.fileSize);
callback({ fileSize: snapResult.fileSize, errorCode: snapResult.errorCode })
});
// return new
return new Promise<takePhotoParam>(async (resolve, reject) => {
rtsp_server.detectVideoSnapshotSize(video_uri, fileName, false, (err, snapResult) => {
console.log("baohaowen_detectLoop round end size1:" + snapResult.fileSize, snapResult.dataString);
callback && callback({
fileSize: snapResult.fileSize,
errorCode: snapResult.errorCode,
base64: snapResult.dataString
})
resolve({ fileSize: snapResult.fileSize, errorCode: snapResult.errorCode, base64: snapResult.dataString })
});
})
} else {
return new Promise<takePhotoParam>(async (resolve, reject) => {
const time = await getCurrentTime()
const date = time.split(' ')[0]
let dirName = dir ? dir : date
rtsp_server.getVideoSnapshot(context, video_uri, fileName, dirName, true, async (err, snapResult) => {
// const time = await getCurrentTime()
// const date = time.split(' ')[0]
// let dirName = dir ? dir : date
rtsp_server.detectVideoSnapshotSize(video_uri, fileName, true, (err, snapResult) => {
if (snapResult.result && snapResult.errorCode == 0) {
resolve({
base64: snapResult.dataString,
name: snapResult.fileName,
console.log("baohaowen_detectLoop round end size1:" + snapResult.fileSize, snapResult.dataString);
callback && callback({
fileSize: snapResult.fileSize,
errorCode: snapResult.errorCode,
path: snapResult.filePath
base64: snapResult.dataString
})
resolve({ fileSize: snapResult.fileSize, errorCode: snapResult.errorCode, base64: snapResult.dataString })
} else {
promptAction.showToast({
message: `拍照失败`,
duration: 3000
});
reject(false)
// reject()
}
});
// rtsp_server.getVideoSnapshot(context, video_uri, fileName, dirName, true, async (err, snapResult) => {
// if (snapResult.result && snapResult.errorCode == 0) {
// resolve({
// base64: snapResult.dataString,
// name: snapResult.fileName,
// fileSize: snapResult.fileSize,
// errorCode: snapResult.errorCode,
// path: snapResult.filePath
// })
// } else {
// promptAction.showToast({
// message: `拍照失败`,
// duration: 3000
// });
// reject(false)
// // reject()
// }
//
// });
})
}
}
@ -268,7 +295,7 @@ export async function deleteAllFileByPiC(dirName, type = 1) {
}
export async function deleteAllVideos(context, type: photoAccessHelper.AlbumType,
subType: photoAccessHelper.AlbumSubtype): Promise<void> {
subType: photoAccessHelper.AlbumSubtype): Promise<void> {
let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.Album> = null;
try {
const userFileMgr = photoAccessHelper.getPhotoAccessHelper(context);

View File

@ -3,6 +3,8 @@ import { getSyncData } from '../service/initable';
import hilog from '@ohos.hilog';
import FileUtil from '../../common/utils/File'
import { GlobalConfig } from '../../config/index'
const TAG = 'socketTag[TcpDemo.TcpClient]'
export async function getTCP(flag=false) {
globalThis.getCloseTcp=true
const fileUtil = new FileUtil(globalThis.context)
@ -28,10 +30,16 @@ export async function getTCP(flag=false) {
console.log('ttttttt00')
clearInterval(globalThis.intervalSendmsg)
globalThis.intervalSendmsg=setInterval(()=>{
globalThis.intervalSendmsg=setInterval(async ()=>{
console.log('getCloseTcp',globalThis.carInfo.carNo)
if(!globalThis.getCloseTcp){
globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
await globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
globalThis.tcpStep+=1
if(globalThis.tcpStep>30){
console.log(TAG,'tcp重连开始')
globalThis.tcpStep=0
getTCP()
}
}
},1000/3)
globalThis.TcpClient.onError((val) => {
@ -63,10 +71,16 @@ export async function getTCP(flag=false) {
console.log('ttttttt12')
clearInterval(globalThis.intervalSendmsg)
globalThis.intervalSendmsg=setInterval(()=>{
globalThis.intervalSendmsg=setInterval(async ()=>{
// console.log('getCloseTcp',globalThis.getCloseTcp)
if(!globalThis.getCloseTcp){
globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
await globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
globalThis.tcpStep+=1
if(globalThis.tcpStep>30){
globalThis.tcpStep=0
getTCP()
console.log(TAG,'tcp重连开始')
}
}
},1000/3)
globalThis.TcpClient.onError((val) => {

View File

@ -4,25 +4,25 @@ import { getSyncData } from '../service/initable'
import { getChuankouFn } from '../../common/service/indexService'
import FileUtil from '../../common/utils/File'
import { GlobalConfig } from '../../config/index'
import {Array2Byte,fillZero,string2Bytes}from './tools'
import { Array2Byte, fillZero, string2Bytes } from './tools'
import emitter from '@ohos.events.emitter';
export async function sendMsg(val) {
// globalThis.udpClient1&&globalThis.udpClient1.sendMsg(val)
}
export async function getUDP(context,errorFlag?) {
return new Promise(async (reslove,reject)=>{
export async function getUDP(context, errorFlag?) {
return new Promise(async (reslove, reject) => {
const fileUtil = new FileUtil(context)
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
console.log('ttttt',data)
console.log('ttttt', data)
if (data === '' || data === undefined) {
console.log(` getUDP has no IPConfigTable `);
globalThis.udpClient = {}
globalThis.host = ''
reslove('')
} else {
const result=JSON.parse(data)
const result = JSON.parse(data)
console.log(` getUDP has IPConfigTable `);
if (globalThis.udpClient && globalThis.udpClient.closeUdp) {
console.log(` getUDP has udclent close and rebind `);
@ -31,11 +31,11 @@ export async function getUDP(context,errorFlag?) {
globalThis.udpClient.rebindUdp(result.udplocalIp, result.udplocalIpPort, result.udpOppositeIp, result.udpOppositeIpPort)
globalThis.udpClient.sendMsg('111', null)
globalThis.host = `http://${result.centerIp}:${result.centerPort}`
globalThis.udpClient.onError_Callback(()=>{
globalThis.udpClient.onError_Callback(() => {
console.log('getUDPgetUDPgetUDP')
getUDP(context,true)
if(errorFlag&&globalThis.udpClient&&globalThis.udpClient.onMessage_1){
globalThis.udpClient.onMessage_1=globalThis.udpClient.onMessage_1
getUDP(context, true)
if (errorFlag && globalThis.udpClient && globalThis.udpClient.onMessage_1) {
globalThis.udpClient.onMessage_1 = globalThis.udpClient.onMessage_1
}
})
reslove(`http://${result.centerIp}:${result.centerPort}`)
@ -48,21 +48,21 @@ export async function getUDP(context,errorFlag?) {
else {
// 未绑定
console.log(` getUDP has no udclent and bind `);
console.log('ttttttdata',JSON.stringify(result))
console.log('ttttttdata', JSON.stringify(result))
const udpClient: UdpClientByCenter = new UdpClientByCenter(result.udplocalIp, result.udplocalIpPort, result.udpOppositeIp, result.udpOppositeIpPort)
udpClient.bindUdp()
udpClient.sendMsg('111')
globalThis.host = `http://${result.centerIp}:${result.centerPort}`
globalThis.udpClient = udpClient
globalThis.udpClient.onMessage_1(()=>{
globalThis.udpClient.onMessage_1(() => {
console.log('getUDPonMessage_1msgmsgByGloalUdp')
})
globalThis.udpClient.onError_Callback(()=>{
getUDP(context,true)
if(errorFlag&&globalThis.udpClient&&globalThis.udpClient.onMessage_1){
globalThis.udpClient.onMessage_1=globalThis.udpClient.onMessage_1
globalThis.udpClient.onError_Callback(() => {
getUDP(context, true)
if (errorFlag && globalThis.udpClient && globalThis.udpClient.onMessage_1) {
globalThis.udpClient.onMessage_1 = globalThis.udpClient.onMessage_1
}
})
getChuankouFn()
@ -82,11 +82,11 @@ export async function getUDP(context,errorFlag?) {
globalThis.udpClient.rebindUdp(result[0].udplocalIp, result[0].udplocalIpPort, result[0].udpOppositeIp, result[0].udpOppositeIpPort)
globalThis.udpClient.sendMsg('111', null)
globalThis.host = `http://${result[0].centerIp}:${result[0].centerPort}`
globalThis.udpClient.onError_Callback(()=>{
globalThis.udpClient.onError_Callback(() => {
console.log('getUDPgetUDPgetUDP')
getUDP(true,context)
if(errorFlag&&globalThis.udpClient&&globalThis.udpClient.onMessage_1){
globalThis.udpClient.onMessage_1=globalThis.udpClient.onMessage_1
getUDP(true, context)
if (errorFlag && globalThis.udpClient && globalThis.udpClient.onMessage_1) {
globalThis.udpClient.onMessage_1 = globalThis.udpClient.onMessage_1
}
})
reslove(`http://${result[0].centerIp}:${result[0].centerPort}`)
@ -105,14 +105,14 @@ export async function getUDP(context,errorFlag?) {
globalThis.host = `http://${result[0].centerIp}:${result[0].centerPort}`
globalThis.udpClient = udpClient
globalThis.udpClient.onMessage_1(()=>{
globalThis.udpClient.onMessage_1(() => {
console.log('getUDPonMessage_1msgmsgByGloalUdp')
})
globalThis.udpClient.onError_Callback(()=>{
getUDP(true,context)
if(errorFlag&&globalThis.udpClient&&globalThis.udpClient.onMessage_1){
globalThis.udpClient.onMessage_1=globalThis.udpClient.onMessage_1
globalThis.udpClient.onError_Callback(() => {
getUDP(true, context)
if (errorFlag && globalThis.udpClient && globalThis.udpClient.onMessage_1) {
globalThis.udpClient.onMessage_1 = globalThis.udpClient.onMessage_1
}
})
// udpClient.onError_resend(globalThis.udpClient.onMessage_1?globalThis.udpClient.onMessage_1:()=>{})
@ -140,25 +140,25 @@ export async function getUDP(context,errorFlag?) {
}
export async function getUDP2(context,errorFlag?) {
export async function getUDP2(context, errorFlag?) {
const fileUtil = new FileUtil(context)
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
if (data === '' || data === undefined) {
globalThis.udpClient2 = {}
globalThis.udpClient2.setMsgCallBack = () => {
}
}else{
const result=JSON.parse(data)
} else {
const result = JSON.parse(data)
console.log(` getUDP2 has IPConfigTable `);
if (globalThis.udpClient2 && globalThis.udpClient2.closeUdp) {
console.log(` getUDP2 has udclent ,close and rebind `);
globalThis.udpClient2.closeUdp(async () => {
setTimeout(() => {
globalThis.udpClient2.rebindUdp(result.udplocalIp, '8800', globalThis.carInfo?.udpAddress, globalThis.carInfo?.messagePort)
globalThis.udpClient2.onError_Callback(()=>{
getUDP2(context,true);
if(errorFlag&&globalThis.udpClient2&&globalThis.udpClient2.onMessage_2){
globalThis.udpClient2.onMessage_2=globalThis.udpClient2.onMessage_2
globalThis.udpClient2.onError_Callback(() => {
getUDP2(context, true);
if (errorFlag && globalThis.udpClient2 && globalThis.udpClient2.onMessage_2) {
globalThis.udpClient2.onMessage_2 = globalThis.udpClient2.onMessage_2
}
})
}, 1000)
@ -170,31 +170,32 @@ export async function getUDP2(context,errorFlag?) {
const udpClient2: UdpClientByCenter = new UdpClientByCenter(result.udplocalIp, '8800', globalThis.carInfo?.udpAddress, globalThis.carInfo?.messagePort)
console.info('surenjun udp2=> ', globalThis.carInfo?.messagePort)
await udpClient2.bindUdp()
await udpClient2.onError_Callback(()=>{
getUDP2(context,true);
if(errorFlag&&globalThis.udpClient2&&globalThis.udpClient2.onMessage_2){
globalThis.udpClient2.onMessage_2=globalThis.udpClient2.onMessage_2
await udpClient2.onError_Callback(() => {
getUDP2(context, true);
if (errorFlag && globalThis.udpClient2 && globalThis.udpClient2.onMessage_2) {
globalThis.udpClient2.onMessage_2 = globalThis.udpClient2.onMessage_2
}
})
if(!errorFlag){
if (!errorFlag) {
await udpClient2.onMessage_2((val) => {
if (val.id == '32') {
globalThis.signNum = val.body[1]
if(val.body[0] == 5){
if (val.body[0] == 5) {
console.info('surenjun', `接收到平台扣分请求,请求指令为:${val.body[1]}`)
globalThis.udpEvent.sendOnKf(val.body[1])
}
if(val.body[0] == 11){
console.info('surenjun','GlobalUdp收到beginExam事件')
if (val.body[0] == 11) {
console.info('surenjun', 'GlobalUdp收到beginExam事件')
globalThis.udpEvent.sendBeginExam(val.body[1])
}
if(val.body[0] == 12){
console.info('surenjun','GlobalUdp收到endExam事件')
if (val.body[0] == 12) {
console.info('surenjun', 'GlobalUdp收到endExam事件')
globalThis.udpEvent.sendEndExam(val.body[1])
}
}if (val.id == '36'){
}
if (val.id == '36') {
//获取远程扣分内容
console.info('surenjun','考车收到远程扣分项目内容,扣分代码:' + val.body[0])
console.info('surenjun', '考车收到远程扣分项目内容,扣分代码:' + val.body[0])
globalThis.udpEvent.sendKfContent(val.body[0])
} else if (val.id == '46') {
let tmpList = []
@ -226,10 +227,10 @@ export async function getUDP2(context,errorFlag?) {
globalThis.udpClient2.closeUdp(async () => {
setTimeout(() => {
globalThis.udpClient2.rebindUdp(result[0].udplocalIp, '8800', globalThis.carInfo?.udpAddress, globalThis.carInfo?.messagePort)
globalThis.udpClient2.onError_Callback(()=>{
globalThis.udpClient2.onError_Callback(() => {
getUDP2(true);
if(errorFlag&&globalThis.udpClient2&&globalThis.udpClient2.onMessage_2){
globalThis.udpClient2.onMessage_2=globalThis.udpClient2.onMessage_2
if (errorFlag && globalThis.udpClient2 && globalThis.udpClient2.onMessage_2) {
globalThis.udpClient2.onMessage_2 = globalThis.udpClient2.onMessage_2
}
})
}, 1000)
@ -240,13 +241,13 @@ export async function getUDP2(context,errorFlag?) {
console.log(` getUDP2 has no udclent and bind `);
const udpClient2: UdpClientByCenter = new UdpClientByCenter(result[0].udplocalIp, '8800', globalThis.carInfo?.udpAddress, globalThis.carInfo?.messagePort)
await udpClient2.bindUdp()
await udpClient2.onError_Callback(()=>{
await udpClient2.onError_Callback(() => {
getUDP2(true);
if(errorFlag&&globalThis.udpClient2&&globalThis.udpClient2.onMessage_2){
globalThis.udpClient2.onMessage_2=globalThis.udpClient2.onMessage_2
if (errorFlag && globalThis.udpClient2 && globalThis.udpClient2.onMessage_2) {
globalThis.udpClient2.onMessage_2 = globalThis.udpClient2.onMessage_2
}
})
if(!errorFlag){
if (!errorFlag) {
await udpClient2.onMessage_2((val) => {
if (val.id == '32') {
globalThis.signNum = val.body[1]
@ -320,11 +321,13 @@ export async function setJudgeUdp() {
globalThis.carInfo?.udpAddress,
globalThis.carInfo?.hintPort
)
console.info('surenjun hintPort=> ',globalThis.carInfo?.hintPort)
console.info('surenjun hintPort=> ', globalThis.carInfo?.hintPort)
await udpClientbyCenter.onError_Callback(()=>{})
await udpClientbyCenter.onError_Callback(() => {
})
await udpClientbyCenter.bindUdp()
await udpClientbyCenter.onMessage_2((val) => {})
await udpClientbyCenter.onMessage_2((val) => {
})
//远程监听开始考试、结束考试、扣分指令
@ -343,7 +346,7 @@ export async function setJudgeUdp() {
},
//申请远程扣分查询
askKf(directives){
askKf(directives) {
globalThis.udpClient2.sendMsgExt({
id: 35,
list: [directives],
@ -354,17 +357,27 @@ export async function setJudgeUdp() {
},
//确定远程扣分
confirmKf(directives,code){
confirmKf(directives, code) {
globalThis.udpClient2.sendMsgExt({
id: 37,
list: Array2Byte([string2Bytes(directives,8),string2Bytes(code,8)]),
list: Array2Byte([string2Bytes(directives, 8), string2Bytes(code, 8)]),
carNo: globalThis.carInfo.carNo,
placeId: globalThis.carInfo.examinationRoomId
})
console.info('surenjun', `考车发送确定扣分指令,指令为:${directives}`)
},
//申请语音对讲
askVoice() {
globalThis.udpClient2.sendMsgExt({
id: 49,
list: [],
carNo: globalThis.carInfo.carNo,
placeId: globalThis.carInfo.examinationRoomId,
})
}
}
}
}
// globalThis.udpClient.bindUdp()

View File

@ -156,7 +156,7 @@ export default class TcpClient {
// time:dateFormat(new Date()),
// message: `${TAG} TCPsend error ${JSON.stringify(err)}`,
// })
reslove(false)
reject(false)
});
})
}
@ -167,6 +167,7 @@ export default class TcpClient {
// time:dateFormat(new Date()),
// PLC:`${TAG} Tcponmessage`,
// })
globalThis.tcpStep=0
globalThis.tcpUdpError = false
// console.log('messageLengt',,value.message.length))

View File

@ -60,8 +60,8 @@ export const getMessageHeartbeat = async (msg) => {
const {fourInOneScreen:{gpsDigit}} = judgeConfig
const asclshArr = stringToASC(fillZero(
globalThis.singlePlay
? '1111111111111'
: globalThis.lsh,
? (examSubject == 2 ? '0000000000000' : '0000000000000')
: (globalThis.lsh || '0000000000000'),
13));
const ascksyhArr = stringToASC(fillZero(examSubject == 2 ? '0000000000000':'1111111111111', 13))
const ascsbxhArr = stringToASC('00000000')

View File

@ -26,7 +26,7 @@ export const GlobalConfig={
//济南
jn:{
km2:[],
km3:['2025.04.16.01','2023.09.30.1']
km3:['2023.12.13.01','2023.09.30.1']
},
//洛阳
ly:{

View File

@ -52,13 +52,11 @@ export default class EntryAbility extends UIAbility {
globalThis.deviceNo = '';
globalThis.hasAuth = false
// globalThis.judgeVersion ='2024.08.24.1'
// globalThis.version ='2023.12.13.01';
globalThis.version = GlobalConfig.version.jn.km3[0];
globalThis.judgeVersion = await examJudgeVersion();
globalThis.judgeVersion = GlobalConfig.version.jn.km3[1];
globalThis.tcpSendNum = 0
globalThis.videoVersion = '1.0'
globalThis.tcpStep=0
//视频遮挡
globalThis.spzd = {
spzd1: false,
@ -76,15 +74,11 @@ export default class EntryAbility extends UIAbility {
console.info('jiangsong globalThis.pathDir = ' + globalThis.pathDir);
// this.requestPermission(this.context)
// this.featureAbilityAuth()
TempLogger.init()
// tcp创建连接
// await tcpUtil.init()
const windowClass = await windowStage.getMainWindow();
globalThis.windowClass = windowClass
// await windowClass.setWindowLayoutFullScreen(true)
await windowClass.setWindowLayoutFullScreen(true)
await windowClass.setWindowSystemBarEnable([]) //全屏
// await windowClass.setWindowSystemBarEnable(['navi gation'])
windowStage.loadContent('pages/Index', (err, data) => {
if (err.code) {

View File

@ -107,8 +107,8 @@ export const WarnFlagTipData = {
9: ['dianhuoVideo.wav', 'xihuoVideo.wav'],
10: ['check31.wav'],
11: ['check30.wav'],
12: ['check28.wav'],
13: ['check29.wav'],
12: ['check29.wav'],
13: ['check28.wav'],
14: ['check11.wav'],
15: ['check12.wav'],
16: ['check13.wav'],
@ -136,8 +136,8 @@ export const RealNumData = {
8: 18,
9: 5,
10: 29,
11: 30,
12: 31,
11: 31,
12: 30,
13: 32,
14: 28,
15: 28,

View File

@ -5,6 +5,9 @@ import TopLogo from './compontents/TopLogo';
import testNapi from '@ohos.hiserialsdk';
import { dateFormat } from '../common/utils/tools';
import { DwMapData, PassData, RealNumData, StackValueData, WarnFlagData, WarnFlagTipData } from '../mock';
import FileUtil from '../common/utils/File';
import { GlobalConfig } from '../config';
import common from '@ohos.app.ability.common';
@Entry
@Component
@ -37,6 +40,7 @@ export default struct Index {
@State stopFlag: boolean = false
@State fromIndex: boolean = false
private vocObj = null;
private context = getContext(this) as common.UIAbilityContext;
// private AccountTable = new AccountTable(()=>{},CommonConstants);
aboutToAppear() {
@ -114,28 +118,66 @@ export default struct Index {
}
//
carConfigurationInfoFn() {
// const fileUtil = new FileUtil(context)
// const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/deviceNo.txt');
// if (data === '' || data === undefined) {
// promptAction.showToast({
// message: `请先进行设备注册`,
// duration: 3000
// });
// globalThis.type='1'
// globalThis.title=decodeURIComponent('请先进行设备注册')
// globalThis.errorDialog.open()
// resolve('')
// } else {
// const fileData=JSON.parse(data)
// globalThis.deviceNo = fileData.deviceName
// console.log('globalThis.deviceNo', globalThis.deviceNo)
// // getCarInfo()
// resolve(fileData.deviceName)
// }
if (globalThis.singlePlay) {
const str = "1:5;2:5;3:5;4:5;5:5;6:5;7:5;8:5;9:5;10:5;11:5;12:5;13:5;14:5;15:5;16:5;17:5;18:5;19:5;20:5;21:5;22:2;23:5;24:5"
const data = str.split(';')
async carConfigurationInfoFn() {
const fileUtil = new FileUtil(this.context)
const checkListStr = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/carcheck.txt');
if (checkListStr === '' || checkListStr === undefined) {
//模拟真实数据
const param = {
"body":
{
"carIdString": globalThis.carInfo.carId, //考车ID
"deviceNo": globalThis.deviceNo
}
}
carConfigurationInfo(param).then(res => {
// @ts-ignore
console.log('ES_CHECK_CAR_ITEM',JSON.stringify(res.body))
// @ts-ignore
if(res?.body?.ES_CHECK_CAR_ITEM){
// @ts-ignore
const data = res.body.ES_CHECK_CAR_ITEM[0].ITEMS.split(';');
this.checkList = []
const list = data
list.map(res => {
const arr = res.split(':')
this.checkList.push({
'key': parseInt(arr[0]) + 2, 'time': arr[1]
})
})
this.checkListCopy = JSON.parse(JSON.stringify(this.checkList))
}else{
const str = "1:5;2:5;3:5;4:5;5:5;6:5;7:5;8:5;9:5;10:5;11:5;12:5;13:5;14:5;15:5;16:5;17:5;18:5;19:5;20:5;21:5;22:2;23:5;24:5"
const data = str.split(';')
this.checkList = []
const list = data
list.map(res => {
const arr = res.split(':')
this.checkList.push({
'key': parseInt(arr[0]) + 2, 'time': arr[1]
})
})
this.checkListCopy = JSON.parse(JSON.stringify(this.checkList))
}
}).catch((error) => {
console.log('error12error' + error)
const str = "1:5;2:5;3:5;4:5;5:5;6:5;7:5;8:5;9:5;10:5;11:5;12:5;13:5;14:5;15:5;16:5;17:5;18:5;19:5;20:5;21:5;22:2;23:5;24:5"
const data = str.split(';')
this.checkList = []
const list = data
list.map(res => {
const arr = res.split(':')
this.checkList.push({
'key': parseInt(arr[0]) + 2, 'time': arr[1]
})
})
this.checkListCopy = JSON.parse(JSON.stringify(this.checkList))
})
}else {
const data = checkListStr.split(';')
this.checkList = []
const list = data
list.map(res => {
@ -147,30 +189,7 @@ export default struct Index {
this.checkListCopy = JSON.parse(JSON.stringify(this.checkList))
return
}
//模拟真实数据
const param = {
"body":
{
"carIdString": globalThis.carInfo.carId, //考车ID
"deviceNo": globalThis.deviceNo
}
}
carConfigurationInfo(param).then(res => {
// @ts-ignore
const data = res.body.ES_CHECK_CAR_ITEM[0].ITEMS.split(';');
this.checkList = []
const list = data
list.map(res => {
const arr = res.split(':')
this.checkList.push({
'key': parseInt(arr[0]) + 2, 'time': arr[1]
})
})
this.checkListCopy = JSON.parse(JSON.stringify(this.checkList))
}).catch((error) => {
console.log('error12error' + error)
})
}
async kszj() {
@ -224,8 +243,10 @@ export default struct Index {
this.warnFlag[26] = '2'
}
}
console.log('msgmsgmsg',msg)
if (that.index == 10 || that.index == 11 || that.index == 12 || that.index == 13) {
console.log('msgmsgmsg000',that.index,that.signArr[that.realNum[that.index]])
if (that.signArr[that.realNum[that.index]] != '1200') {
that.warnFlag[that.index] = '2'
} else {
@ -308,37 +329,37 @@ export default struct Index {
}
initfackCheck(index){
const that=this
setTimeout(()=>{
console.log('indexindex',index)
if(index>=3){
this.getCheckList()
return
}
setTimeout(()=>{
console.log('indexindex',index)
if(index>=3){
this.getCheckList()
return
}
console.log('this.index',index,)
that.passArray[index]=true
if(index==2){
let flag=false
console.log('globalThis.spzd[key]',globalThis.spzd)
console.log('this.index',index,)
that.passArray[index]=true
if(index==2){
let flag=false
console.log('globalThis.spzd[key]',globalThis.spzd)
for(let key in globalThis.spzd){
console.log('globalThis.spzd[key]',globalThis.spzd[key])
if(globalThis.spzd[key]){
that.warnFlag[index]='1'
flag=true
}
for(let key in globalThis.spzd){
console.log('globalThis.spzd[key]',globalThis.spzd[key])
if(globalThis.spzd[key]){
that.warnFlag[index]='1'
flag=true
}
if(!flag){
that.warnFlag[index]='2'
}
}else{
}
if(!flag){
that.warnFlag[index]='2'
}
that.passArray=JSON.parse(JSON.stringify(that.passArray))
that.warnFlag=JSON.parse(JSON.stringify(that.warnFlag))
index++
this.initfackCheck(index)
},1000)
}else{
that.warnFlag[index]='2'
}
that.passArray=JSON.parse(JSON.stringify(that.passArray))
that.warnFlag=JSON.parse(JSON.stringify(that.warnFlag))
index++
this.initfackCheck(index)
},1000)
}
async getCheckList() {
@ -456,14 +477,14 @@ export default struct Index {
}
Row() {
Image(this.warnFlag[12] == '1' ? $r('app.media.zh_r') : this.warnFlag[12] == '2' ? $r('app.media.zh') : '')
.width(103 * this.ratio)
.height(118.5 * this.ratio)
.visibility(this.passArray[12] ? Visibility.Visible : Visibility.Hidden)
Image(this.warnFlag[13] == '1' ? $r('app.media.yh_r') : this.warnFlag[13] == '2' ? $r('app.media.yh') : '')
Image(this.warnFlag[13] == '1' ? $r('app.media.zh_r') : this.warnFlag[13] == '2' ? $r('app.media.zh') : '')
.width(103 * this.ratio)
.height(118.5 * this.ratio)
.visibility(this.passArray[13] ? Visibility.Visible : Visibility.Hidden)
Image(this.warnFlag[12] == '1' ? $r('app.media.yh_r') : this.warnFlag[12] == '2' ? $r('app.media.yh') : '')
.width(103 * this.ratio)
.height(118.5 * this.ratio)
.visibility(this.passArray[12] ? Visibility.Visible : Visibility.Hidden)
}
}
.backgroundImage($r('app.media.rc'))

View File

@ -22,12 +22,13 @@ import VoiceAnnounce from './judgeSDK/utils/voiceAnnouncements';
import IdlServiceExtProxy from '../IdlServiceExt/idl_service_ext_proxy';
import Want from '@ohos.app.ability.Want';
import emitter from '@ohos.events.emitter';
import { examJudgeVersion } from './judgeSDK/api';
import { delLog } from '../common/service/logService';
@Entry
@Component
struct Index {
@State carNum: string = ''
@State version: string = ''
@State url: string = ''
@State hasAuth: boolean = false;
@State dialogVisiable: boolean = false;
@ -58,6 +59,8 @@ struct Index {
private avPlayer
private context = getContext(this) as common.UIAbilityContext;
private serviceExtProxy: IdlServiceExtProxy
@State judgeVersion: string = ""
private version: string = "2025.04.23.01"
@Styles
commStyle(){
@ -194,12 +197,12 @@ struct Index {
Column() {
Row() {
Column() {
Text('V外壳' + globalThis.version)
Text('V外壳' + this.version)
.fontColor('#CCAE7A')
.fontSize(18 * globalThis.ratio)
.width('30%')
.margin({ bottom: 10 })
Text('V评判' + globalThis.judgeVersion)
Text('V评判' + this.judgeVersion)
.fontColor('#CCAE7A')
.fontSize(18 * globalThis.ratio)
.width('30%')
@ -443,6 +446,7 @@ struct Index {
// globalThis.param854Str=sys.v_value
delPic(Number(sys.v_value), 1)
delPic(Number(sys.v_value), 2)
delLog(Number(sys.v_value))
// this.delLoading=false
}
@ -574,10 +578,10 @@ struct Index {
this.fileHelper = new FileHelper();
const time = await getCurrentTime()
const date = time.split(' ')[0]
this.fileHelper.createAlbum(date);
this.fileHelper.createAlbum('jt')
// this.fileHelper.createAlbum('2025-01-02')
this.fileHelper.createAlbum('pz');
this.fileHelper.createAlbum(date);
}
@ -611,6 +615,7 @@ struct Index {
}
async initParams() {
this.judgeVersion = await examJudgeVersion()
await getUDP(this.context, false)
this.loading = false
await getDeviceInfo(this.context)
@ -626,7 +631,6 @@ struct Index {
console.info('surenjun', 'distanceClass=>初始化完成')
}
this.carNum = globalThis.carInfo.plateNo;
this.version = globalThis.version;
this.hasAuth = globalThis.hasAuth;
setTimeout(() => {
this.initParamFlag = true

View File

@ -42,7 +42,6 @@ struct Index {
}
async aboutToAppear() {
globalThis.windowClass.setWindowSystemBarEnable([])
const time = await getCurrentTime()
this.startTime = time.split(' ')[1]
@ -111,6 +110,7 @@ struct Index {
FLAG: carInfo.flag,
BK1: carInfo.bk1,
BK2: carInfo.bk2,
X_MCH: carInfo.x_mch,
})
console.info('surenjun =>carinfoArrr',JSON.stringify( this.carinfoArr))
}

View File

@ -140,7 +140,9 @@ struct UserInfo {
// 同一学员连续第二次考试时不再验证身份
if (this.currentUser.kssycs == '1' && this.systemParam.Param830Str == '1') {
this.sfbdinterfaceFn()
} else {
this.ksksLimit = false
this.showFaceCompare = true
}
} else {
@ -148,6 +150,7 @@ struct UserInfo {
}
} catch (e) {
console.info('Throw Error', JSON.stringify(e))
this.ksksLimit = false
}
}
@ -881,6 +884,7 @@ struct UserInfo {
//身份比对
async sfbdinterfaceFn() {
this.ksksLimit = false
globalThis.statue = 4
this.stepFlag = true
const carInfo = globalThis.carInfo;
@ -894,7 +898,7 @@ struct UserInfo {
carId,
lsh: this.currentUser.lsh || '',
examinationRoomId
});
})
}
this.currentUser.id = '1'
const avPlayer = this.avPlayer;
@ -1280,7 +1284,7 @@ struct UserInfo {
return
}
//835参数值和预约考试次数对比
if(Number(this.systemParam.Param835)<=Number(this.currentUser.yycs)){
if(Number(this.systemParam.Param835)<=Number(this.currentUser.yycs)&&!globalThis.singlePlay){
this.type='4'
this.title='当前考生预约考试次数为'+this.currentUser.yycs
this.errorDialog.open()

View File

@ -73,6 +73,7 @@ export interface CARINFO {
FLAG: string,
BK1: string,
BK2: string
X_MCH: string
}
export interface MAPPOINT {

View File

@ -329,12 +329,12 @@ export default class Judge {
private isEndTip: boolean = false;
private deductedPopShowTimer: number = 0;
// 校验考试是否结束
// 校验考试是否结束
checkExamIsEnd =
async (isManual?: boolean) => {
const { judgeUI, avPlayer, isExamEnd, isEndTip, ksjs } = this;
const { isAllProjectsEnd, examSubject, singlePlay, totalScore, judgeConfigObj, passingScore, examMileage, jl } =
judgeUI;
const {judgeUI,avPlayer,isExamEnd,isEndTip,ksjs} = this;
const {isAllProjectsEnd,examSubject,singlePlay,totalScore,judgeConfigObj,passingScore,examMileage,jl} = judgeUI;
const param302 = judgeConfigObj['302'];
if (isExamEnd) {
return
}
@ -346,24 +346,21 @@ export default class Judge {
this.isExamEnd = true
this.isManual = true
} else {
const param302 = judgeConfigObj['302'];
const param342 = judgeConfigObj['342'];
const param512 = (judgeConfigObj['512'] || '').split(',');
//单机模式
if (singlePlay) {
console.info(judgeTag + ' isAllProjectsEnd => ', isAllProjectsEnd)
if (isAllProjectsEnd && jl >= examMileage) {
//成绩合格
if (totalScore >= passingGrade && !isEndTip) {
if (examSubject == 3 && (param342 == 0 || param342 == 2) &&
(param302 != 6 || param302 != 7 || param302 != 8)) {
if (examSubject == 3 && (param342 == 0 || param342 == 2) && (param302 != 6 || param302 != 7 || param302 != 8)) {
if (param512[7] != 0) {
clearTimeout(this.deductedPopShowTimer)
avPlayer.playAudio(['voice/综合评判.mp3'])
this.judgeUI.isDeductedPopShow = true
this.judgeUI.defaultTabIndex = 1
this.isEndTip = true
// clearTimeout(this.deductedPopShowTimer)
// avPlayer.playAudio(['voice/综合评判.mp3'])
// this.judgeUI.isDeductedPopShow = true
// this.judgeUI.defaultTabIndex = 1
// this.isEndTip = true
return
}
} else {
@ -385,15 +382,17 @@ export default class Judge {
//成绩不合格
if (totalScore < passingGrade) {
//科目三不合格报靠边停车
if (examSubject == 3 && param302 == 1) {
avPlayer.playAudio([`voice/考试结束.mp3`]);
return
if (examSubject == 3 ) {
if( param302 == 1){
avPlayer.playAudio([`voice/考试结束.mp3`]);
}else if(param302 == 0){
return
}
}
await examJudgeEndExam()
this.isExamEnd = true
return
}
//成绩合格
if (isAllProjectsEnd && totalScore >= passingGrade && !isEndTip) {
if (examSubject == 2) {
@ -414,8 +413,7 @@ export default class Judge {
return
}
if (examSubject == 3 && (param342 == 0 || param342 == 2) &&
(param302 != 6 || param302 != 7 || param302 != 8)) {
if (examSubject == 3 && (param342 == 0 || param342 == 2) && (param302 != 6 || param302 != 7 || param302 != 8)) {
if (param512[7] != 0) {
clearTimeout(this.deductedPopShowTimer)
this.judgeUI.isDeductedPopShow = false
@ -492,7 +490,6 @@ export default class Judge {
const msgStr = strArr[num];
if (msgStr == '') {
console.info(judgeTag, '模拟数据考试结束')
globalThis.windowClass.setWindowSystemBarEnable([])
clearInterval(judgeTimer)
this.checkExamIsEnd(true)
return
@ -696,13 +693,13 @@ export default class Judge {
if (this.disConnectNum < 5 && this.disConnectNum > 0) {
console.log("wzj", "第" + this.disConnectNum + "次重新发送", JSON.stringify(data))
}
//断网&网络超时次数计算
if (temp.code == 2300007 || temp.code == 2300028) {
if (
//后台连接中心异常
temp.code == -1 || temp.code == 0 ||
//断网&网络超时次数计算
temp.code == 2300007 || temp.code == 2300028) {
this.disConnectNum += 1;
if (this.disConnectNum < 5) {
if (temp.code == 2300028) {
await new Promise(resolve => setTimeout(resolve, 1000)); // 延迟1秒
}
return await this.sendWriteObjectOut(data, filePath)
}
}
@ -1225,6 +1222,13 @@ export default class Judge {
})
})
} else {
//收到综合评判语音时,显示综合评判弹窗
if(code[0] == 'zhpp'){
clearTimeout(this.deductedPopShowTimer)
this.judgeUI.isDeductedPopShow = true
this.judgeUI.defaultTabIndex = 1
this.isEndTip = true
}
avPlayer.playAudio([`voice/${code[0]}.mp3`])
}
}
@ -1241,15 +1245,14 @@ export default class Judge {
// this.judgeUI.totalScore = isAllProjectsEnd ? totalScore : 0;
const singlePlay = globalThis.singlePlay
const param302 = judgeConfigObj['302'];
// globalThis.windowClass.setWindowSystemBarEnable(['navigation'])
//自动退出待验证并且不合格
if (!isManual && examSubject == 3 && (param302 == 1 || (singlePlay && param302 == 2)) &&
totalScore < passingScore) {
avPlayer.playAudio([`voice/考试结束.mp3`])
}
//联网模式下手动结束直接退出
if (!singlePlay && isManual && !isAllProjectsEnd) {
//联网模式下:项目没有做完、当前分数大于及格分;手动结束直接退出
if (!singlePlay && isManual && !isAllProjectsEnd && totalScore >= passingScore) {
avPlayer.playAudio(['voice/empty.mp3'], true, () => {
this.isUdpEnd = true;
closeAllFiles()

View File

@ -7,22 +7,22 @@ export const judgeConfig = {
//扣分语音是否强制开启
kfVoiceOpen: false,
//忽略的考试项目
ignoreProjects:[],
ignoreProjects: [],
// 是否忽略考试前熄火、车门检查
isCheckFireOpen: false,
//轨迹回放是否开启Udp
udpOpen:true,
udpOpen: true,
// 本地模型地址
modelPath: 'models/model_enc',
// 济南科目三
trajectoryPath: 'logs/2024_12_26/2024_12_26_14_12_51_2412505941910_370125200404041910_赵宇/judge_exam_data.txt',
trajectoryPath: 'logs/2024_10_12/2024_10_12_11_50_10_9999427676823_744299437502336256_隋统/judge_exam_data.txt',
//四合一画面配置
fourInOneScreen:{
fourInOneScreen: {
//gps位数
gpsDigit:6
gpsDigit: 6
},
// 杭州科目二
// trajectoryPath: 'logs/2024_07_19/0000000000001_342323199501470011_测试学员1_2024_07_19_06_49_12/judge_exam_data.txt',
//TODO 济南临时特殊配置
systemParamConfig:{}
systemParamConfig: {}
}

View File

@ -1,14 +1,15 @@
-----BEGIN CERTIFICATE-----
MIICFTCCAZugAwIBAgIIDwIlwC9KCAgwCgYIKoZIzj0EAwMwYzELMAkGA1UEBhMC
Q04xFDASBgNVBAoTC09wZW5IYXJtb255MRkwFwYDVQQLExBPcGVuSGFybW9ueSBU
ZWFtMSMwIQYDVQQDExpPcGVuSGFybW9ueSBBcHBsaWNhdGlvbiBDQTAeFw0yNTAz
MjcwMTM0MzFaFw0zNTAzMjUwMTM0MzFaMEoxFTATBgNVBAMMDGlkZV9kZW1vX2Fw
cDENMAsGA1UECxMEVW5pdDEVMBMGA1UEChMMT3JnYW5pemF0aW9uMQswCQYDVQQG
EwJDTjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOFM709v5dpRw1u42nrUPbxe
UZ2iCXWEgpO3ySIfLdm+t5b23QqTp5cSPu1faM9Exy6PqxaO2zzGFt2Eb3AKqLyj
UjBQMB0GA1UdDgQWBBSubxhAdyUr8mSVCpjOak70J/8yoTAOBgNVHQ8BAf8EBAMC
B4AwHwYDVR0jBBgwFoAU24a3IhbVC6FLt90le7nxBX2iLUcwCgYIKoZIzj0EAwMD
aAAwZQIwevtGwM7A4Cj5foXfOCAV8RU0o3NAKBIxXIWbnk2h+BPiwHRvV9BvHv+T
k4Qssp04AjEAwPaguX2Iu6DY8Y+u0lq1gEc62lnSjzAHDr7SItcAOjHd0IWwubpK
JD1PtKpp/POt
MIICFzCCAZygAwIBAgIJAO9FWZQgKzxyMAoGCCqGSM49BAMDMGMxCzAJBgNVBAYT
AkNOMRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkg
VGVhbTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjUw
NDIyMDc1NDI2WhcNMzUwNDIwMDc1NDI2WjBKMRUwEwYDVQQDDAxpZGVfZGVtb19h
cHAxDTALBgNVBAsTBFVuaXQxFTATBgNVBAoTDE9yZ2FuaXphdGlvbjELMAkGA1UE
BhMCQ04wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQUPoxdYBvC4QlondlBnCEe
oxxkFKTZwhcA+xW31gNCOOwboVPyCB++6EuUa/0fJ/jlEeyNzErXflXkGG7GZVPa
o1IwUDAdBgNVHQ4EFgQUrAmchwjJTxwrv09H+c4xS7+oEvIwDgYDVR0PAQH/BAQD
AgeAMB8GA1UdIwQYMBaAFNuGtyIW1QuhS7fdJXu58QV9oi1HMAoGCCqGSM49BAMD
A2kAMGYCMQCZzMs9H/mMi+59hO4EfDHTXChO6QoBYH+pwB66g7dw7apGXhayBIwq
qOeVnlTVbPkCMQCc2hQf+ypiZpZQog1dMSGdlNs8heypj97d7DahjTgEzrxGxcZK
PtMtg35cJa+JtN4=
-----END CERTIFICATE-----
071A11E92B83EE8977A794F1B387ADA40780BFF19C301A5C63F407531B2C2C1A

Binary file not shown.

Binary file not shown.