diff --git a/build-profile.json5 b/build-profile.json5 index 4489041e..6aa0abf5 100644 --- a/build-profile.json5 +++ b/build-profile.json5 @@ -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" diff --git a/entry/src/main/cpp/bin/libJudgeSdk.so b/entry/src/main/cpp/bin/libJudgeSdk.so deleted file mode 100644 index 08cf782d..00000000 Binary files a/entry/src/main/cpp/bin/libJudgeSdk.so and /dev/null differ diff --git a/entry/src/main/cpp/sdk/common/HVersion.h b/entry/src/main/cpp/sdk/common/HVersion.h index 2cad944f..3af95402 100644 --- a/entry/src/main/cpp/sdk/common/HVersion.h +++ b/entry/src/main/cpp/sdk/common/HVersion.h @@ -27,7 +27,7 @@ #define JUDGE_VERSION_MAJOR 1 #define JUDGE_VERSION_MINOR 0 #define JUDGE_VERSION_PATCH 3 -#define JUDGE_VERSION_STAMP "2504110912b" +#define JUDGE_VERSION_STAMP "2504191100b" #if JUDGE_USE_OLD # undef JUDGE_VERSION_STAMP # define JUDGE_VERSION_STAMP "2411121010b.old" diff --git a/entry/src/main/cpp/sdk/database/HDBTable.h b/entry/src/main/cpp/sdk/database/HDBTable.h index a6205d80..d5f189aa 100644 --- a/entry/src/main/cpp/sdk/database/HDBTable.h +++ b/entry/src/main/cpp/sdk/database/HDBTable.h @@ -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); //项目取消 diff --git a/entry/src/main/cpp/sdk/database/sysset/SysSetTable.h b/entry/src/main/cpp/sdk/database/sysset/SysSetTable.h index f13d7eb5..4ac7b2f5 100644 --- a/entry/src/main/cpp/sdk/database/sysset/SysSetTable.h +++ b/entry/src/main/cpp/sdk/database/sysset/SysSetTable.h @@ -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:车头到转弯处斜线,3:2022新标准 新标准,入口线到转弯区间内有过方向灯 @@ -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); diff --git a/entry/src/main/cpp/sdk/exam/ExamCarSub2.cpp b/entry/src/main/cpp/sdk/exam/ExamCarSub2.cpp index d0213483..d79e630b 100644 --- a/entry/src/main/cpp/sdk/exam/ExamCarSub2.cpp +++ b/entry/src/main/cpp/sdk/exam/ExamCarSub2.cpp @@ -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++) { diff --git a/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp b/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp index 9b6c359e..efa032d1 100644 --- a/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp +++ b/entry/src/main/cpp/sdk/exam/ExamCarSub3.cpp @@ -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& Pts, const Pointi& b1, const Pointi& pt, int& dm, bool cross) +bool ExamCarSub3::calcToLaneLine(const TModelLine& Lxx, const std::vector& 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); } } } diff --git a/entry/src/main/cpp/sdk/exam/ExamCarSub3.h b/entry/src/main/cpp/sdk/exam/ExamCarSub3.h index 6ced047a..bf840154 100644 --- a/entry/src/main/cpp/sdk/exam/ExamCarSub3.h +++ b/entry/src/main/cpp/sdk/exam/ExamCarSub3.h @@ -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& 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& 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); //计算考车显示网格 diff --git a/entry/src/main/cpp/sdk/exam/ExamHistory.h b/entry/src/main/cpp/sdk/exam/ExamHistory.h index 976c3d09..8ea68b44 100644 --- a/entry/src/main/cpp/sdk/exam/ExamHistory.h +++ b/entry/src/main/cpp/sdk/exam/ExamHistory.h @@ -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]; } diff --git a/entry/src/main/cpp/sdk/judge/sub2/ISub2JudgeWrap.cpp b/entry/src/main/cpp/sdk/judge/sub2/ISub2JudgeWrap.cpp index 243bc6f9..475a8c72 100644 --- a/entry/src/main/cpp/sdk/judge/sub2/ISub2JudgeWrap.cpp +++ b/entry/src/main/cpp/sdk/judge/sub2/ISub2JudgeWrap.cpp @@ -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()); } diff --git a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge00Dcrk.cpp b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge00Dcrk.cpp index 1e8a0e18..32db291d 100644 --- a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge00Dcrk.cpp +++ b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge00Dcrk.cpp @@ -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) diff --git a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp index fc12b2e7..2221c597 100644 --- a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp +++ b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.cpp @@ -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) diff --git a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.h b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.h index 463d64b8..5bae6c6f 100644 --- a/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.h +++ b/entry/src/main/cpp/sdk/judge/sub2/Sub2Judge03Cftc.h @@ -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 }; diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp index 5e0413db..883ee378 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge11Kbtc.cpp @@ -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() diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp index 71702aba..2f6b2e43 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge20Comm.cpp @@ -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& 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); } diff --git a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge41Mndg.cpp b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge41Mndg.cpp index ed0fc204..a64a5c14 100644 --- a/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge41Mndg.cpp +++ b/entry/src/main/cpp/sdk/judge/sub3/Sub3Judge41Mndg.cpp @@ -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 diff --git a/entry/src/main/cpp/sdk/utility/HTypes.h b/entry/src/main/cpp/sdk/utility/HTypes.h index 4708ecb1..87c91669 100644 --- a/entry/src/main/cpp/sdk/utility/HTypes.h +++ b/entry/src/main/cpp/sdk/utility/HTypes.h @@ -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; @@ -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 DwZsBl; //20141111 档位转速比 档位转速比 array[1..5] diff --git a/entry/src/main/cpp/toolkit/ui/MainWindow.cpp b/entry/src/main/cpp/toolkit/ui/MainWindow.cpp index 2be37adc..651008ee 100644 --- a/entry/src/main/cpp/toolkit/ui/MainWindow.cpp +++ b/entry/src/main/cpp/toolkit/ui/MainWindow.cpp @@ -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; } diff --git a/entry/src/main/cpp/toolkit/ui/MainWindow.ui b/entry/src/main/cpp/toolkit/ui/MainWindow.ui index b38345da..304c750f 100644 --- a/entry/src/main/cpp/toolkit/ui/MainWindow.ui +++ b/entry/src/main/cpp/toolkit/ui/MainWindow.ui @@ -413,7 +413,7 @@ p, li { white-space: pre-wrap; } 600 180 - 101 + 111 20 @@ -426,7 +426,7 @@ p, li { white-space: pre-wrap; } 600 163 - 101 + 111 20 diff --git a/entry/src/main/ets/IdlServiceExt/idl_service_ext_impl.ts b/entry/src/main/ets/IdlServiceExt/idl_service_ext_impl.ts index b76f0f1d..7631f375 100644 --- a/entry/src/main/ets/IdlServiceExt/idl_service_ext_impl.ts +++ b/entry/src/main/ets/IdlServiceExt/idl_service_ext_impl.ts @@ -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)) }) diff --git a/entry/src/main/ets/common/service/logService.ts b/entry/src/main/ets/common/service/logService.ts new file mode 100644 index 00000000..84ac1515 --- /dev/null +++ b/entry/src/main/ets/common/service/logService.ts @@ -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)) + } +} \ No newline at end of file diff --git a/entry/src/main/ets/common/service/videoService.ts b/entry/src/main/ets/common/service/videoService.ts index 835c903d..7938f93c 100644 --- a/entry/src/main/ets/common/service/videoService.ts +++ b/entry/src/main/ets/common/service/videoService.ts @@ -123,7 +123,7 @@ async function getfilehandleCode(td, param, dir, path, index) { export async function getUserAlbumItemByDisplayName(displayName: string, day?, - type?): Promise { + type?): Promise { 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(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(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 { + subType: photoAccessHelper.AlbumSubtype): Promise { let fetchResult: photoAccessHelper.FetchResult = null; try { const userFileMgr = photoAccessHelper.getPhotoAccessHelper(context); diff --git a/entry/src/main/ets/common/utils/GlobalTcp.ts b/entry/src/main/ets/common/utils/GlobalTcp.ts index 04485318..039c7d06 100644 --- a/entry/src/main/ets/common/utils/GlobalTcp.ts +++ b/entry/src/main/ets/common/utils/GlobalTcp.ts @@ -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) => { diff --git a/entry/src/main/ets/common/utils/GlobalUdp.ts b/entry/src/main/ets/common/utils/GlobalUdp.ts index ba599236..74c1f5ff 100644 --- a/entry/src/main/ets/common/utils/GlobalUdp.ts +++ b/entry/src/main/ets/common/utils/GlobalUdp.ts @@ -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() diff --git a/entry/src/main/ets/common/utils/TcpClient.ts b/entry/src/main/ets/common/utils/TcpClient.ts index bf4cd943..2f100c4b 100644 --- a/entry/src/main/ets/common/utils/TcpClient.ts +++ b/entry/src/main/ets/common/utils/TcpClient.ts @@ -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)) diff --git a/entry/src/main/ets/common/utils/UdpJudge.ts b/entry/src/main/ets/common/utils/UdpJudge.ts index 1a287d58..b9331240 100644 --- a/entry/src/main/ets/common/utils/UdpJudge.ts +++ b/entry/src/main/ets/common/utils/UdpJudge.ts @@ -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') diff --git a/entry/src/main/ets/config/global.ts b/entry/src/main/ets/config/global.ts index 136232e4..6e16dd4d 100644 --- a/entry/src/main/ets/config/global.ts +++ b/entry/src/main/ets/config/global.ts @@ -26,7 +26,7 @@ export const GlobalConfig={ //济南 jn:{ km2:[], - km3:['2025.04.16.01','2023.09.30.1'] + km3:['2023.12.13.01','2023.09.30.1'] }, //洛阳 ly:{ diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index fe62e7af..1d86efc0 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -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) { diff --git a/entry/src/main/ets/mock/CarCheck.ets b/entry/src/main/ets/mock/CarCheck.ets index 2e47c27f..4b1d8449 100644 --- a/entry/src/main/ets/mock/CarCheck.ets +++ b/entry/src/main/ets/mock/CarCheck.ets @@ -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, diff --git a/entry/src/main/ets/pages/CarCheck.ets b/entry/src/main/ets/pages/CarCheck.ets index 6205345a..d139ddec 100644 --- a/entry/src/main/ets/pages/CarCheck.ets +++ b/entry/src/main/ets/pages/CarCheck.ets @@ -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')) diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index 3bab9134..f3e7f847 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -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 diff --git a/entry/src/main/ets/pages/Judge.ets b/entry/src/main/ets/pages/Judge.ets index c4fd91cf..26b934e7 100644 --- a/entry/src/main/ets/pages/Judge.ets +++ b/entry/src/main/ets/pages/Judge.ets @@ -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)) } diff --git a/entry/src/main/ets/pages/UserInfo.ets b/entry/src/main/ets/pages/UserInfo.ets index e2474396..9515c312 100644 --- a/entry/src/main/ets/pages/UserInfo.ets +++ b/entry/src/main/ets/pages/UserInfo.ets @@ -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() diff --git a/entry/src/main/ets/pages/judgeSDK/api/judgeSDK.d.ts b/entry/src/main/ets/pages/judgeSDK/api/judgeSDK.d.ts index f398950e..bf46e8ef 100644 --- a/entry/src/main/ets/pages/judgeSDK/api/judgeSDK.d.ts +++ b/entry/src/main/ets/pages/judgeSDK/api/judgeSDK.d.ts @@ -73,6 +73,7 @@ export interface CARINFO { FLAG: string, BK1: string, BK2: string + X_MCH: string } export interface MAPPOINT { diff --git a/entry/src/main/ets/pages/judgeSDK/judge.ts b/entry/src/main/ets/pages/judgeSDK/judge.ts index 364d4f0c..72ca9206 100644 --- a/entry/src/main/ets/pages/judgeSDK/judge.ts +++ b/entry/src/main/ets/pages/judgeSDK/judge.ts @@ -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() diff --git a/entry/src/main/ets/pages/judgeSDK/utils/judgeConfig.ts b/entry/src/main/ets/pages/judgeSDK/utils/judgeConfig.ts index a8e1b4f1..6c43680f 100644 --- a/entry/src/main/ets/pages/judgeSDK/utils/judgeConfig.ts +++ b/entry/src/main/ets/pages/judgeSDK/utils/judgeConfig.ts @@ -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: {} } \ No newline at end of file diff --git a/entry/src/main/profile.cer b/entry/src/main/profile.cer index 9ba1c1ed..5bd65c24 100644 --- a/entry/src/main/profile.cer +++ b/entry/src/main/profile.cer @@ -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 \ No newline at end of file diff --git a/entry/src/main/resources/rawfile/voice/end_tip.mp3 b/entry/src/main/resources/rawfile/voice/end_tip.mp3 new file mode 100644 index 00000000..3e1aac02 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/end_tip.mp3 differ diff --git a/entry/src/main/resources/rawfile/voice/zhpp.mp3 b/entry/src/main/resources/rawfile/voice/zhpp.mp3 new file mode 100644 index 00000000..f49a6c82 Binary files /dev/null and b/entry/src/main/resources/rawfile/voice/zhpp.mp3 differ