Compare commits
	
		
			11 Commits
		
	
	
		
			jinan20250
			...
			代理服务方案
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 52953bda36 | |||
| 
						 | 
					a6fbf40140 | ||
| eb8329a610 | |||
| 9a529fe649 | |||
| 
						 | 
					d1835688b6 | ||
| 13b36a77c6 | |||
| 0aea22d2bf | |||
| 17f744711f | |||
| acf26da558 | |||
| dee0d25c94 | |||
| 74fe792004 | 
@ -5,9 +5,9 @@
 | 
				
			|||||||
        "name": "default",
 | 
					        "name": "default",
 | 
				
			||||||
        "material": {
 | 
					        "material": {
 | 
				
			||||||
          "certpath": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.cer",
 | 
					          "certpath": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.cer",
 | 
				
			||||||
          "storePassword": "0000001BF9CC4AD294FB6AC2D8A5278FFFD88EEDF04B79D51256E066D7DD5E2E118E445F67468002D624CA",
 | 
					          "storePassword": "0000001A2150F207688978DC41AB971AFAACA19A2656EF603DF6DD262F11C00738919C0D1E8DC208ED16",
 | 
				
			||||||
          "keyAlias": "debugKey",
 | 
					          "keyAlias": "debugKey",
 | 
				
			||||||
          "keyPassword": "0000001BF982C0CB222DFA95970757643CDB791BF698C923C974A4A81AD8C2B28B4CE7839BED505B4EE3E2",
 | 
					          "keyPassword": "0000001AACF53E0E5E7326C00626448D07D00D283DB5B32263113CE3A96D18EB3EFC6EAD63AB73618A2F",
 | 
				
			||||||
          "profile": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.p7b",
 | 
					          "profile": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.p7b",
 | 
				
			||||||
          "signAlg": "SHA256withECDSA",
 | 
					          "signAlg": "SHA256withECDSA",
 | 
				
			||||||
          "storeFile": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.p12"
 | 
					          "storeFile": "C:\\Users\\93218\\.ohos\\config\\openharmony\\auto_ohos_default_subject-two_com.oh.dts.p12"
 | 
				
			||||||
 | 
				
			|||||||
@ -27,7 +27,7 @@
 | 
				
			|||||||
#define JUDGE_VERSION_MAJOR  1
 | 
					#define JUDGE_VERSION_MAJOR  1
 | 
				
			||||||
#define JUDGE_VERSION_MINOR  0
 | 
					#define JUDGE_VERSION_MINOR  0
 | 
				
			||||||
#define JUDGE_VERSION_PATCH  3
 | 
					#define JUDGE_VERSION_PATCH  3
 | 
				
			||||||
#define JUDGE_VERSION_STAMP  "2505201042b"
 | 
					#define JUDGE_VERSION_STAMP  "2506041100b"
 | 
				
			||||||
#if JUDGE_USE_OLD
 | 
					#if JUDGE_USE_OLD
 | 
				
			||||||
#   undef JUDGE_VERSION_STAMP
 | 
					#   undef JUDGE_VERSION_STAMP
 | 
				
			||||||
#   define JUDGE_VERSION_STAMP  "2411121010b.old"
 | 
					#   define JUDGE_VERSION_STAMP  "2411121010b.old"
 | 
				
			||||||
@ -56,4 +56,12 @@
 | 
				
			|||||||
    extern const char JUDGE_VERSION_INFO[];  //版本详细信息[版本号+版本编译日期] 1.2.3.2304241030
 | 
					    extern const char JUDGE_VERSION_INFO[];  //版本详细信息[版本号+版本编译日期] 1.2.3.2304241030
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct TVersionInfo
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int major;
 | 
				
			||||||
 | 
					    int minor;
 | 
				
			||||||
 | 
					    int patch;
 | 
				
			||||||
 | 
					    std::string stamp;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // HVERSION_H
 | 
					#endif // HVERSION_H
 | 
				
			||||||
 | 
				
			|||||||
@ -2,18 +2,15 @@
 | 
				
			|||||||
#include "HVersion.h"
 | 
					#include "HVersion.h"
 | 
				
			||||||
#include "Loggerxx.h"
 | 
					#include "Loggerxx.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool Tools::checkVersion(const std::string& version)
 | 
					TVersionInfo Tools::splitVersion(const std::string& sdkver)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    std::vector<std::string> ver = Tools::split(version, ".");
 | 
					    TVersionInfo verinfo;
 | 
				
			||||||
    //int major = std::atoi(ver[0].c_str());
 | 
					    std::vector<std::string> ver = Tools::split(sdkver, ".");
 | 
				
			||||||
    //int minor = std::atoi(ver[1].c_str());
 | 
					    verinfo.major = std::atoi(ver[0].c_str());
 | 
				
			||||||
    //int patch = std::atoi(ver[2].c_str());
 | 
					    verinfo.minor = std::atoi(ver[1].c_str());
 | 
				
			||||||
    std::string v3 = ver[3];
 | 
					    verinfo.patch = std::atoi(ver[2].c_str());
 | 
				
			||||||
    if(v3.back() == 'b')
 | 
					    verinfo.stamp = ver[3];
 | 
				
			||||||
    {
 | 
					    return verinfo;
 | 
				
			||||||
        v3.pop_back();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return (v3 < "2505121242");
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int64 Tools::nowTime()
 | 
					int64 Tools::nowTime()
 | 
				
			||||||
 | 
				
			|||||||
@ -9,12 +9,14 @@
 | 
				
			|||||||
#define TOOLS_H
 | 
					#define TOOLS_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "HDefine.h"
 | 
					#include "HDefine.h"
 | 
				
			||||||
 | 
					#include "HVersion.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Tools
 | 
					class Tools
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static bool checkVersion(const std::string& version);
 | 
					    //解析版本号
 | 
				
			||||||
 | 
					    static TVersionInfo splitVersion(const std::string& sdkver);
 | 
				
			||||||
    //获取当前系统时间,单位:毫秒
 | 
					    //获取当前系统时间,单位:毫秒
 | 
				
			||||||
    static int64 nowTime();
 | 
					    static int64 nowTime();
 | 
				
			||||||
    //壁钟,防止有人篡改系统时间,导致考试有些评判项目计时限时不准
 | 
					    //壁钟,防止有人篡改系统时间,导致考试有些评判项目计时限时不准
 | 
				
			||||||
 | 
				
			|||||||
@ -160,6 +160,7 @@ ErrorCode ExamCarSub3::examJudgeExam()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ErrorCode ExamCarSub3::examArtifMark(ExamItemCode itemno, const std::string& serial, MarkType type)
 | 
					ErrorCode ExamCarSub3::examArtifMark(ExamItemCode itemno, const std::string& serial, MarkType type)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    //810参数为1时,所有扣分项均可远程扣分;其它,只能扣 MARKSERIAL 大于 99 的扣分项
 | 
				
			||||||
    const std::string& ksdd = TableSysSet->get211();
 | 
					    const std::string& ksdd = TableSysSet->get211();
 | 
				
			||||||
    if(ksdd == siteof::zjhz && isExamDrill())
 | 
					    if(ksdd == siteof::zjhz && isExamDrill())
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@ -167,10 +168,13 @@ ErrorCode ExamCarSub3::examArtifMark(ExamItemCode itemno, const std::string& ser
 | 
				
			|||||||
        return QE(errorArtifForbid);
 | 
					        return QE(errorArtifForbid);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    const std::string& s342 = TableSysSet->get342();
 | 
					    const std::string& s342 = TableSysSet->get342();
 | 
				
			||||||
    if(s342 == "1" || s342 == "3")
 | 
					    if(type == MarkTypeArti)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if(s342 == "1" || s342 == "3") //车上不允许人工扣分
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return QE(errorArtifForbid);
 | 
					            return QE(errorArtifForbid);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    examMarkItem(itemno, serial, false, true, true, type);
 | 
					    examMarkItem(itemno, serial, false, true, true, type);
 | 
				
			||||||
    return QE(codeSuccess);
 | 
					    return QE(codeSuccess);
 | 
				
			||||||
 | 
				
			|||||||
@ -169,17 +169,17 @@ bool ExamSensor::convertDatas(TChuanGan* cg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    //航向角(默认是按诺瓦泰的数据格式定义的,所以要加上180度) 1:天宝(北云)/C1 2:诺瓦泰
 | 
					    //航向角(默认是按诺瓦泰的数据格式定义的,所以要加上180度) 1:天宝(北云)/C1 2:诺瓦泰
 | 
				
			||||||
    //2505121242兼容这个时间之前的特殊版卡类型做航向角转换处理的
 | 
					    //2505121242兼容这个时间之前的特殊版卡类型做航向角转换处理的
 | 
				
			||||||
    if(Tools::checkVersion(m_car->carVerison()))
 | 
					    //if(Tools::checkVersion(m_car->carVerison()))
 | 
				
			||||||
    {
 | 
					    //{
 | 
				
			||||||
        if(gps.bklx == boardTypeTB)
 | 
					    //    if(gps.bklx == boardTypeTB)
 | 
				
			||||||
        {
 | 
					    //    {
 | 
				
			||||||
            gps.hxj += 180.0;
 | 
					    //        gps.hxj += 180.0;
 | 
				
			||||||
        }
 | 
					    //    }
 | 
				
			||||||
        if(gps.hxj >= 360.0)
 | 
					    //    if(gps.hxj >= 360.0)
 | 
				
			||||||
        {
 | 
					    //    {
 | 
				
			||||||
            gps.hxj -= 360.0;
 | 
					    //        gps.hxj -= 360.0;
 | 
				
			||||||
        }
 | 
					    //    }
 | 
				
			||||||
    }
 | 
					    //}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //实际上车这里经纬度要转化,测试的数据都是转化好的
 | 
					    //实际上车这里经纬度要转化,测试的数据都是转化好的
 | 
				
			||||||
    gps.jd = GpsMath::convertGpsCoord2(gps.jd);
 | 
					    gps.jd = GpsMath::convertGpsCoord2(gps.jd);
 | 
				
			||||||
@ -196,17 +196,17 @@ bool ExamSensor::convertDatas(TChuanGan* cg)
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        TGpsInfo& gps2 = cg->real.gps2;
 | 
					        TGpsInfo& gps2 = cg->real.gps2;
 | 
				
			||||||
        //2505121242兼容这个时间之前的特殊版卡类型做航向角转换处理的
 | 
					        //2505121242兼容这个时间之前的特殊版卡类型做航向角转换处理的
 | 
				
			||||||
        if(Tools::checkVersion(m_car->carVerison()))
 | 
					        //if(Tools::checkVersion(m_car->carVerison()))
 | 
				
			||||||
        {
 | 
					        //{
 | 
				
			||||||
            if(gps2.bklx == boardTypeTB)
 | 
					        //    if(gps2.bklx == boardTypeTB)
 | 
				
			||||||
            {
 | 
					        //    {
 | 
				
			||||||
                gps2.hxj += 180.0;
 | 
					        //        gps2.hxj += 180.0;
 | 
				
			||||||
            }
 | 
					        //    }
 | 
				
			||||||
            if(gps2.hxj >= 360.0)
 | 
					        //    if(gps2.hxj >= 360.0)
 | 
				
			||||||
            {
 | 
					        //    {
 | 
				
			||||||
                gps2.hxj -= 360.0;
 | 
					        //        gps2.hxj -= 360.0;
 | 
				
			||||||
            }
 | 
					        //    }
 | 
				
			||||||
        }
 | 
					        //}
 | 
				
			||||||
        //实际上车这里经纬度要转化,测试的数据都是转化好的
 | 
					        //实际上车这里经纬度要转化,测试的数据都是转化好的
 | 
				
			||||||
        gps2.jd = GpsMath::convertGpsCoord2(gps2.jd);
 | 
					        gps2.jd = GpsMath::convertGpsCoord2(gps2.jd);
 | 
				
			||||||
        gps2.wd = GpsMath::convertGpsCoord2(gps2.wd);
 | 
					        gps2.wd = GpsMath::convertGpsCoord2(gps2.wd);
 | 
				
			||||||
 | 
				
			|||||||
@ -552,6 +552,11 @@ struct TSub3Item02Qbxx   //起步  2
 | 
				
			|||||||
    Pointi PubLCTCPtt;
 | 
					    Pointi PubLCTCPtt;
 | 
				
			||||||
    bool PubCanMarkLC50Flag = true;  //注意初始必须是true
 | 
					    bool PubCanMarkLC50Flag = true;  //注意初始必须是true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int jsc_qibu_10 = 0;
 | 
				
			||||||
 | 
					    bool Mark_A302ID = false;
 | 
				
			||||||
 | 
					    int64 ssc2qjsj = 0;
 | 
				
			||||||
 | 
					    int64 ssc2qjtk = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //新科三参数
 | 
					    //新科三参数
 | 
				
			||||||
    int64 obsTime = 0;
 | 
					    int64 obsTime = 0;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -233,7 +233,7 @@ JUDGE_STAGE_IMPL(Sub2Judge03Cftc, Sub2CftcStage1)
 | 
				
			|||||||
            m_outLine = false;
 | 
					            m_outLine = false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(cgcu->move == moveStop && cg01->move == moveBackward && cg02->move == moveBackward)
 | 
					        if(cgcu->move == moveStop && cg01->move == moveBackward) // && cg02->move == moveBackward
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            m_outLine = false;
 | 
					            m_outLine = false;
 | 
				
			||||||
            //车辆入库停止后,车身出线
 | 
					            //车辆入库停止后,车身出线
 | 
				
			||||||
@ -435,6 +435,11 @@ void Sub2Judge03Cftc::calcCrossLine()
 | 
				
			|||||||
void Sub2Judge03Cftc::judgeTouchLine()
 | 
					void Sub2Judge03Cftc::judgeTouchLine()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if(IS_C1C2C5(m_carType))
 | 
					    if(IS_C1C2C5(m_carType))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        TChuanGan* cgcu = m_car->historyChuanGan();
 | 
				
			||||||
 | 
					        TChuanGan* cg01 = m_car->historyChuanGan(1);
 | 
				
			||||||
 | 
					        //计算是否过了上库位控制线、是否穿越了结束线
 | 
				
			||||||
 | 
					        if(cgcu->move != moveStop && cg01->move != moveStop)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //以下计算所有的压线扣分(只用车轮子计算的)
 | 
					            //以下计算所有的压线扣分(只用车轮子计算的)
 | 
				
			||||||
            touchLineWheel_C1C2C5(LineNum::L23_NUM);
 | 
					            touchLineWheel_C1C2C5(LineNum::L23_NUM);
 | 
				
			||||||
@ -453,6 +458,7 @@ void Sub2Judge03Cftc::judgeTouchLine()
 | 
				
			|||||||
            //#endif
 | 
					            //#endif
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Sub2Judge03Cftc::touchLineWheel_C1C2C5(LineNum num)
 | 
					void Sub2Judge03Cftc::touchLineWheel_C1C2C5(LineNum num)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ bool Sub3Judge02Qbxx::dealJudgeEnter()
 | 
				
			|||||||
    const std::vector<std::string> ss = Tools::split(str, "^");
 | 
					    const std::vector<std::string> ss = Tools::split(str, "^");
 | 
				
			||||||
    m_itemv.sys502_8_1 = ss.size() > 0 && ss[0] != "" ? std::atoi(ss[0].c_str()) : 0;
 | 
					    m_itemv.sys502_8_1 = ss.size() > 0 && ss[0] != "" ? std::atoi(ss[0].c_str()) : 0;
 | 
				
			||||||
    m_itemv.sys502_8_2 = ss.size() > 1 && ss[1] != "" ? std::atoi(ss[1].c_str()) : 0; //StrToIntDef(GetDotStr(2, tempstr + '^', '^'), 0);
 | 
					    m_itemv.sys502_8_2 = ss.size() > 1 && ss[1] != "" ? std::atoi(ss[1].c_str()) : 0; //StrToIntDef(GetDotStr(2, tempstr + '^', '^'), 0);
 | 
				
			||||||
 | 
					    m_itemv.jsc_qibu_10 = s502.size() > 12 && s502[12] != ""? std::atoi(s502[12].c_str()) : 0;
 | 
				
			||||||
    //下面是视觉相关的,先把参数值拿到,暂时不实现
 | 
					    //下面是视觉相关的,先把参数值拿到,暂时不实现
 | 
				
			||||||
    const std::vector<std::string>& s531 = TableSysSet->asArray531();
 | 
					    const std::vector<std::string>& s531 = TableSysSet->asArray531();
 | 
				
			||||||
    if(s531.size() > 0 && s531[0] == "1")
 | 
					    if(s531.size() > 0 && s531[0] == "1")
 | 
				
			||||||
@ -221,7 +221,7 @@ void Sub3Judge02Qbxx::dealJudgeItem()
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//具备起步条件,10秒没有起步
 | 
					//具备起步条件,10秒没有起步
 | 
				
			||||||
void Sub3Judge02Qbxx::nogo_timeout()
 | 
					void Sub3Judge02Qbxx::nogo_timeout_old()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    const TChuanGan* cg = m_car->historyChuanGan();
 | 
					    const TChuanGan* cg = m_car->historyChuanGan();
 | 
				
			||||||
    const TSensorInfo& sor = cg->real.sensor;
 | 
					    const TSensorInfo& sor = cg->real.sensor;
 | 
				
			||||||
@ -229,6 +229,20 @@ void Sub3Judge02Qbxx::nogo_timeout()
 | 
				
			|||||||
    const TChuanGan* his1 = m_car->historyChuanGan(1);
 | 
					    const TChuanGan* his1 = m_car->historyChuanGan(1);
 | 
				
			||||||
    const TSensorInfo& sor1 = his1->real.sensor;
 | 
					    const TSensorInfo& sor1 = his1->real.sensor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //502:起步参数: qbcd, ssc2qjsj, qbpdsjl, qbfdjzsgg, qblcjl,cfjxm,qbsj,
 | 
				
			||||||
 | 
					    //(1)qbcd:起步闯动起评值单位度      (2)ssc2qjsj:放手刹后X秒车轮未动扣分时间
 | 
				
			||||||
 | 
					    //(3)qbpdsjl:起步判怠速的有效距离   (4)qbfdjzsgg:发动机转速过高
 | 
				
			||||||
 | 
					    //(5)qblcjl:起步溜车最小距离
 | 
				
			||||||
 | 
					    //(6)cfjxm:进项目时机  0表示只要停车满足5秒就进入起步状态   1表示只有差分才能进项目
 | 
				
			||||||
 | 
					    //(7)qbsj:停车多长时间进入起步状态,单位秒,最大值5,最小值1
 | 
				
			||||||
 | 
					    //(8)10s未起步只评判第一次^第一次起步以打左方向灯开始计时^
 | 
				
			||||||
 | 
					    //(9)检查仪表在车辆启动状态下进行:1-是
 | 
				
			||||||
 | 
					    //(10)起步触发顺序:0-无限制,1-上车准备完成,2-模拟灯光完成
 | 
				
			||||||
 | 
					    //(11)自动挡也评判带档点火(p档信号为10)
 | 
				
			||||||
 | 
					    //(12)点火不松开关不判断转速
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //502第8个参数, 10s内未起步只评判第一次^第一次起步以打左方向灯开始计时^ “具备起步条件,10秒没有起步” 扣几次
 | 
				
			||||||
    // C2  N空挡是0  R倒车档9  P驻车档10  D前进挡11
 | 
					    // C2  N空挡是0  R倒车档9  P驻车档10  D前进挡11
 | 
				
			||||||
    //档位或者手刹信号发生变化,且变化的结果是前进挡和松手刹状态,开始计时,10秒后扣分
 | 
					    //档位或者手刹信号发生变化,且变化的结果是前进挡和松手刹状态,开始计时,10秒后扣分
 | 
				
			||||||
    if(m_itemv.ZhunBeiQiBuTK == 0)
 | 
					    if(m_itemv.ZhunBeiQiBuTK == 0)
 | 
				
			||||||
@ -290,6 +304,266 @@ void Sub3Judge02Qbxx::nogo_timeout()
 | 
				
			|||||||
    */
 | 
					    */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Sub3Judge02Qbxx::nogo_timeout()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    //***此代码和win核对过的一模一样 2025-05-28
 | 
				
			||||||
 | 
					    int i = 0;
 | 
				
			||||||
 | 
					    //tempstr := getdotstr(8, sysset[502], ',') + '^';
 | 
				
			||||||
 | 
					    if(m_itemv.sys502_8_1  == 1)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if(m_Pub_First_QiBu_Flag) i = 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(m_itemv.sys502_8_1 == 2)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if(m_Pub_First_QiBu_Flag) i = 1;
 | 
				
			||||||
 | 
					        //if(itm20.lstc_zt > 0) //贵州要多考几个项目,这个是其中之一的临时停车项目中的停车状态
 | 
				
			||||||
 | 
					        //{
 | 
				
			||||||
 | 
					        //    i = 0;
 | 
				
			||||||
 | 
					        //}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const std::string& ksdd = TableSysSet->get211();
 | 
				
			||||||
 | 
					    const TChuanGan* cg = m_car->historyChuanGan();
 | 
				
			||||||
 | 
					    const TSensorInfo& sor = cg->real.sensor;
 | 
				
			||||||
 | 
					    const TSensorInfo& sor1 = m_car->historySensor(1);
 | 
				
			||||||
 | 
					    const TSensorInfo& sor2 = m_car->historySensor(2);
 | 
				
			||||||
 | 
					    const TSensorInfo& sor3 = m_car->historySensor(3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TKM3Item* item11 = m_car->findExamItem(Sub3ItemType11Kbtc);
 | 
				
			||||||
 | 
					    if(item11 && item11->TestPro > ItemProFlagIdle) //if (Km3TsI[ItemArr(11)].TestPro > 0) //²»ÔÚ¿¿±ßÍ£³µ×´Ì¬ÄÚ
 | 
				
			||||||
 | 
					        i = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(m_itemv.Mark_A302ID) i = 1;
 | 
				
			||||||
 | 
					    if (!m_Pub_First_QiBu_Flag && m_itemv.sys502_8_2 == 1)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if(m_itemv.ssc2qjsj == 0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if(sor.zfxd == SYES && sor1.zfxd == SYES && sor2.zfxd == SNOT && sor3.zfxd == SNOT)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                m_itemv.ssc2qjsj = cg->tkCnt;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(m_itemv.ssc2qjtk == 0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (m_itemv.ssc2qjsj > 0 && cg->tkCnt - m_itemv.ssc2qjsj > 3000)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                m_itemv.ssc2qjtk = cg->tkCnt;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(sor.zfxd == SNOT && sor1.zfxd == SNOT)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            m_itemv.ssc2qjsj = 0;
 | 
				
			||||||
 | 
					            m_itemv.ssc2qjtk = 0;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (cg->move != moveStop)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            m_itemv.ssc2qjsj = 0;
 | 
				
			||||||
 | 
					            m_itemv.ssc2qjtk = 0;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (m_itemv.ssc2qjtk > 0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if(cg->tkCnt - m_itemv.ssc2qjtk > 10*SECOND)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                m_itemv.Mark_A302ID = true;
 | 
				
			||||||
 | 
					                m_itemv.ssc2qjtk = 0;
 | 
				
			||||||
 | 
					                m_itemv.ssc2qjsj = 0;
 | 
				
			||||||
 | 
					                if(ksdd == siteof::scms)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    JUDGE_MARK_SUB3(2, "48", true); //Mark(2, '48', True)
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    JUDGE_MARK_SUB3(2, "48", false); //Mark(2, '48', False);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        i = 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if(i == 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if(ksdd == siteof::sxbjxc || ksdd == siteof::sxbjdc)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if(cg->move != moveStop || sor.ssc == SYES || sor.fdjzs == 0)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                m_itemv.ssc2qjtk = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if(m_itemv.ssc2qjtk == 0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if(sor.ssc == SNOT && sor1.ssc == SNOT)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        m_itemv.ssc2qjtk = cg->tkCnt;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if(ksdd == siteof::nmgcfkm3)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if(cg->move != moveStop || sor.ssc == SYES || sor.fdjzs == 0)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                m_itemv.ssc2qjtk = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if(m_itemv.ssc2qjtk == 0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if(sor.ssc == SNOT && sor1.ssc == SNOT && sor2.ssc == SYES && sor3.ssc == SYES)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        m_itemv.ssc2qjtk = cg->tkCnt;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if(ksdd == siteof::scms)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (cg->move != moveStop || sor.ssc == SYES || sor.dw == 0 || sor.dw == 9 || sor.dw == 10)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                m_itemv.ssc2qjtk = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if(m_itemv.ssc2qjtk == 0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    int a = 0;
 | 
				
			||||||
 | 
					                    if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11))
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            a = 1;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    if(sor.ssc == SNOT && sor1.ssc == SNOT && a == 1)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        m_itemv.ssc2qjtk = cg->tkCnt;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if(ksdd == siteof::guizhouas)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if(cg->move != moveStop)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                m_itemv.ssc2qjtk = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if(m_itemv.ssc2qjtk == 0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    int a = 0;
 | 
				
			||||||
 | 
					                    if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11))
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            a = 1;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    if(sor.ssc == SNOT && sor1.ssc == SNOT && a == 1)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        m_itemv.ssc2qjtk = cg->tkCnt;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if(cg->move != moveStop || sor.ssc == SYES || sor.dw == 0 || sor.dw == 9 || sor.dw == 10
 | 
				
			||||||
 | 
					                    || (m_itemv.jsc_qibu_10 == 1 && sor.jsc == SNOT))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                m_itemv.ssc2qjtk = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if(m_itemv.ssc2qjtk == 0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    int a = 0;
 | 
				
			||||||
 | 
					                    if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11))
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            a = 1;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    if(sor.ssc == SNOT && sor1.ssc == SNOT && sor2.ssc == SYES && sor3.ssc == SYES && a == 1)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if(m_itemv.jsc_qibu_10 == 1)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            if(sor.jsc == SNOT && sor1.jsc == SNOT)
 | 
				
			||||||
 | 
					                                m_itemv.ssc2qjtk = cg->tkCnt;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            m_itemv.ssc2qjtk = cg->tkCnt;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    a = 0;
 | 
				
			||||||
 | 
					                    if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11))
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            if((sor2.dw == 0 || sor2.dw == 10) && (sor3.dw == 0 || sor3.dw == 10))
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                a = 1;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    if(sor.ssc == SNOT && sor1.ssc == SNOT && a == 1)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if(m_itemv.jsc_qibu_10 == 1)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            if(sor.jsc == SNOT && sor1.jsc == SNOT)
 | 
				
			||||||
 | 
					                                m_itemv.ssc2qjtk = cg->tkCnt;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            m_itemv.ssc2qjtk = cg->tkCnt;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    if(m_itemv.jsc_qibu_10 == 1)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        int a = 0;
 | 
				
			||||||
 | 
					                        if((sor.dw > 0 && sor.dw < 6) || (sor.dw == 11))
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            if((sor1.dw > 0 && sor1.dw < 6) || (sor1.dw == 11))
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                a = 1;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        if (sor.jsc == SNOT && sor1.jsc == SNOT && sor2.jsc == SYES && sor3.jsc == SYES && a == 1)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            if(sor.ssc == SNOT && sor1.ssc == SNOT)
 | 
				
			||||||
 | 
					                                m_itemv.ssc2qjtk = cg->tkCnt;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(ksdd == siteof::hnpy)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            TKM3Item* item05 = m_car->findExamItem(Sub3ItemType05Lkzx);
 | 
				
			||||||
 | 
					            if(item05 && item05->TestPro > ItemProFlagIdle)  //if(Km3TsI[ItemArr(5)].TestPro > 0)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                m_itemv.ssc2qjtk = 0;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if(m_itemv.ssc2qjtk > 0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if(cg->tkCnt - m_itemv.ssc2qjtk > 10*SECOND)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                m_itemv.Mark_A302ID = true;
 | 
				
			||||||
 | 
					                m_itemv.ssc2qjtk = 0;
 | 
				
			||||||
 | 
					                if(ksdd == siteof::scms)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    JUDGE_MARK_SUB3(2, "48", true);  //Mark(2, '48', True)
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    JUDGE_MARK_SUB3(2, "48", false); // Mark(2, '48', False);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//6、起步方向灯、喇叭
 | 
					//6、起步方向灯、喇叭
 | 
				
			||||||
void Sub3Judge02Qbxx::Judge_QiBu_FXD_LaBa()
 | 
					void Sub3Judge02Qbxx::Judge_QiBu_FXD_LaBa()
 | 
				
			||||||
@ -343,7 +617,7 @@ void Sub3Judge02Qbxx::Judge_QiBu_FXD_LaBa()
 | 
				
			|||||||
                const TChuanGan* hisi = m_car->historyChuanGan(i);
 | 
					                const TChuanGan* hisi = m_car->historyChuanGan(i);
 | 
				
			||||||
                if(hisi == nullptr) break;
 | 
					                if(hisi == nullptr) break;
 | 
				
			||||||
                const TSensorInfo& sori = hisi->real.sensor;
 | 
					                const TSensorInfo& sori = hisi->real.sensor;
 | 
				
			||||||
                if(hisi->move == moveStop)
 | 
					                //if(hisi->move == moveStop)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if(sori.zfxd == SYES && sori.yfxd == SNOT)
 | 
					                    if(sori.zfxd == SYES && sori.yfxd == SNOT)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
@ -366,7 +640,7 @@ void Sub3Judge02Qbxx::Judge_QiBu_FXD_LaBa()
 | 
				
			|||||||
                const TChuanGan* hisi = m_car->historyChuanGan(i);
 | 
					                const TChuanGan* hisi = m_car->historyChuanGan(i);
 | 
				
			||||||
                if(hisi == nullptr) break;
 | 
					                if(hisi == nullptr) break;
 | 
				
			||||||
                const TSensorInfo& sori = hisi->real.sensor;
 | 
					                const TSensorInfo& sori = hisi->real.sensor;
 | 
				
			||||||
                if(hisi->move == moveStop)
 | 
					                //if(hisi->move == moveStop)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if(sori.zfxd == SYES && sori.yfxd == SNOT)
 | 
					                    if(sori.zfxd == SYES && sori.yfxd == SNOT)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
 | 
				
			|||||||
@ -58,6 +58,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
    //具备起步条件,10秒没有起步
 | 
					    //具备起步条件,10秒没有起步
 | 
				
			||||||
 | 
					    void nogo_timeout_old();
 | 
				
			||||||
    void nogo_timeout();
 | 
					    void nogo_timeout();
 | 
				
			||||||
    //1、溜车评判
 | 
					    //1、溜车评判
 | 
				
			||||||
    void Judge_LiuChe();
 | 
					    void Judge_LiuChe();
 | 
				
			||||||
 | 
				
			|||||||
@ -794,8 +794,9 @@ void Sub3Judge11Kbtc::DoStatus_3()
 | 
				
			|||||||
            //20150702 河南要求 河南洛阳车管所科目三靠边停车修改评判要求:夜考时,靠边停车项目在停车后,拉手刹结束前需要评判是否打开视宽灯或把近光灯调成视宽灯。
 | 
					            //20150702 河南要求 河南洛阳车管所科目三靠边停车修改评判要求:夜考时,靠边停车项目在停车后,拉手刹结束前需要评判是否打开视宽灯或把近光灯调成视宽灯。
 | 
				
			||||||
            if(s326 == "2")
 | 
					            if(s326 == "2")
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs);
 | 
					                //TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs);
 | 
				
			||||||
                bool OKFlag = (item && item->Item_Color == itemStateZk);
 | 
					                //bool OKFlag = (item && item->Item_Color == itemStateZk);
 | 
				
			||||||
 | 
					                bool OKFlag = m_car->getTCar()->Night_ID;
 | 
				
			||||||
                if(OKFlag == true)  //夜间驾驶
 | 
					                if(OKFlag == true)  //夜间驾驶
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if(sor1.ygd == SYES || sor1.jgd == SYES || sor1.skd == SNOT)
 | 
					                    if(sor1.ygd == SYES || sor1.jgd == SYES || sor1.skd == SNOT)
 | 
				
			||||||
@ -1215,8 +1216,9 @@ void Sub3Judge11Kbtc::DoStatus_6()
 | 
				
			|||||||
        JUDGE_MARK_SUB3(11, "07", true); //20160928
 | 
					        JUDGE_MARK_SUB3(11, "07", true); //20160928
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs); //夜间行驶
 | 
					    //TKM3Item* item = m_car->findExamItem(Sub3ItemType13Yjxs); //夜间行驶
 | 
				
			||||||
    bool FindFlag = (item && item->Item_Color == itemStateZk);
 | 
					    //bool FindFlag = (item && item->Item_Color == itemStateZk);
 | 
				
			||||||
 | 
					    bool FindFlag = m_car->getTCar()->Night_ID;
 | 
				
			||||||
    if(FindFlag == true)  //夜间驾驶
 | 
					    if(FindFlag == true)  //夜间驾驶
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if(ksdd == siteof::hbxy)  //20160122
 | 
					        if(ksdd == siteof::hbxy)  //20160122
 | 
				
			||||||
 | 
				
			|||||||
@ -347,7 +347,7 @@ void Sub3Judge20Comm::Init_ZongHe()
 | 
				
			|||||||
    //转向灯打开,一开始的距离
 | 
					    //转向灯打开,一开始的距离
 | 
				
			||||||
    m_itemvCJH.ZXD_Open_TempJL = -1;
 | 
					    m_itemvCJH.ZXD_Open_TempJL = -1;
 | 
				
			||||||
    //临时停车状态
 | 
					    //临时停车状态
 | 
				
			||||||
    m_itemvCJH.lstc_zt = -1; //20151116
 | 
					    m_itemvCJH.lstc_zt = -1; //20151116 贵州要多考几个项目,这个是其中之一的临时停车项目中的停车状态
 | 
				
			||||||
    //夜间行驶用到,同方向近距离跟车行驶
 | 
					    //夜间行驶用到,同方向近距离跟车行驶
 | 
				
			||||||
    m_itemvCJH.gc_zt = -1; //20160617
 | 
					    m_itemvCJH.gc_zt = -1; //20160617
 | 
				
			||||||
    //夜间行驶用到,人行横道相关的
 | 
					    //夜间行驶用到,人行横道相关的
 | 
				
			||||||
@ -685,7 +685,7 @@ void Sub3Judge20Comm::Set_FDJ_DS()
 | 
				
			|||||||
                TotalZS = 0;
 | 
					                TotalZS = 0;
 | 
				
			||||||
                for(int i = 1;  i <= 25; i++)
 | 
					                for(int i = 1;  i <= 25; i++)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    const TChuanGan* hisi = m_car->historyChuanGan(1);
 | 
					                    const TChuanGan* hisi = m_car->historyChuanGan(i);
 | 
				
			||||||
                    const TSensorInfo& sori = hisi->real.sensor;
 | 
					                    const TSensorInfo& sori = hisi->real.sensor;
 | 
				
			||||||
                    if(hisi->move != moveStop)
 | 
					                    if(hisi->move != moveStop)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
@ -877,7 +877,7 @@ void Sub3Judge20Comm::CallMoNiDengGuang()
 | 
				
			|||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(sor.aqd == SYES && sor1.aqd == SYES && sor2.aqd == SYES) //2024-11-13杭州新增
 | 
					        if(sor.aqd == SYES && sor1.aqd == SYES) //2024-11-13杭州新增
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            static constexpr int n = 10;
 | 
					            static constexpr int n = 10;
 | 
				
			||||||
            //static constexpr int m = 0;
 | 
					            //static constexpr int m = 0;
 | 
				
			||||||
@ -932,7 +932,9 @@ void Sub3Judge20Comm::CallMoNiDengGuang()
 | 
				
			|||||||
    //501第10个参数时间毫秒、如果不配置那就是2米检查,如果过程中关闭再打开也算关闭
 | 
					    //501第10个参数时间毫秒、如果不配置那就是2米检查,如果过程中关闭再打开也算关闭
 | 
				
			||||||
    const std::string& s322 = TableSysSet->get322();
 | 
					    const std::string& s322 = TableSysSet->get322();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if((sor.fdjzs > 100 && sor1.fdjzs > 100 && sor2.fdjzs > 100 && sor3.fdjzs > 100) ||
 | 
					    //触发夜间灯光模拟的条件(0-点完成(先模拟灯光,再绕车一周)+1-插安全带或点火2(等待5秒)2-点火2+3-上车准备人工评判按钮切换+4-点击“继续考试”按钮触发+5-有点火1信号就可以触发,6-有安全带就触发)
 | 
				
			||||||
 | 
					    //sor.dh2 == SNOT 防止考生长时间拧钥匙不松开,会导致出现扣分未及时松开启动开关2次不合格后,模拟灯光合格,第二次考试不用再考模拟灯光的漏判。
 | 
				
			||||||
 | 
					    if((sor.fdjzs > 100 && sor1.fdjzs > 100 && sor2.fdjzs > 100 && sor3.fdjzs > 100 /*&& sor.dh2 == SNOT*/) ||
 | 
				
			||||||
            (Tools::pos(JUDGE_UTF8S("江淮电动"), m_car->carClass()) && sor.dh1 == SYES) ||
 | 
					            (Tools::pos(JUDGE_UTF8S("江淮电动"), m_car->carClass()) && sor.dh1 == SYES) ||
 | 
				
			||||||
            (s386 == "5" && sor.dh1 == SYES) ||
 | 
					            (s386 == "5" && sor.dh1 == SYES) ||
 | 
				
			||||||
            (s386 == "6" && sor.aqd == SYES && sor1.aqd == SYES) ) //20170314 训练模式 只要有dh1就可以进行模拟灯光
 | 
					            (s386 == "6" && sor.aqd == SYES && sor1.aqd == SYES) ) //20170314 训练模式 只要有dh1就可以进行模拟灯光
 | 
				
			||||||
 | 
				
			|||||||
@ -66,6 +66,7 @@ bool TrackReader::read(TTrackData::Ptr& data)
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        if(root.contains("kskm") && root.contains("carmodel"))
 | 
					        if(root.contains("kskm") && root.contains("carmodel"))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            m_sdkver = Tools::splitVersion(root["sdkver"]);
 | 
				
			||||||
            data->type = TTrackTypeInitExam;
 | 
					            data->type = TTrackTypeInitExam;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if(root.contains("exam") && root.contains("sfzmhm"))
 | 
					        else if(root.contains("exam") && root.contains("sfzmhm"))
 | 
				
			||||||
@ -75,6 +76,36 @@ bool TrackReader::read(TTrackData::Ptr& data)
 | 
				
			|||||||
        else if(root.contains("sensor") && root.contains("gps"))
 | 
					        else if(root.contains("sensor") && root.contains("gps"))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            data->type = TTrackTypeRealExam;
 | 
					            data->type = TTrackTypeRealExam;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(m_sdkver.stamp < "2505121242")
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                int type = root["gps"]["bklx"];
 | 
				
			||||||
 | 
					                double hxj = root["gps"]["hxj"];
 | 
				
			||||||
 | 
					                if(type == boardTypeTB)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    hxj += 180.0;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if(hxj >= 360.0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    hxj -= 360.0;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                root["gps"]["hxj"] = hxj;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if(root.contains("gps2"))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    int type = root["gps2"]["bklx"];
 | 
				
			||||||
 | 
					                    double hxj = root["gps2"]["hxj"];
 | 
				
			||||||
 | 
					                    if(type == boardTypeTB)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        hxj += 180.0;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    if(hxj >= 360.0)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        hxj -= 360.0;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    root["gps2"]["hxj"] = hxj;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else if(root.contains("method") && root["method"] == "examJudgeRealVision" &&
 | 
					        else if(root.contains("method") && root["method"] == "examJudgeRealVision" &&
 | 
				
			||||||
                root.contains("type") && root.contains("data"))
 | 
					                root.contains("type") && root.contains("data"))
 | 
				
			||||||
 | 
				
			|||||||
@ -24,6 +24,7 @@ public:
 | 
				
			|||||||
private:
 | 
					private:
 | 
				
			||||||
    std::string m_content;
 | 
					    std::string m_content;
 | 
				
			||||||
    std::stringstream m_stream;
 | 
					    std::stringstream m_stream;
 | 
				
			||||||
 | 
					    TVersionInfo m_sdkver;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // TRACKREADER_H
 | 
					#endif // TRACKREADER_H
 | 
				
			||||||
 | 
				
			|||||||
@ -13,8 +13,6 @@ export default class ServiceExtAbility extends ServiceExtension {
 | 
				
			|||||||
  serviceExtImpl: ServiceExtImpl = new ServiceExtImpl('ExtImpl', this.context);
 | 
					  serviceExtImpl: ServiceExtImpl = new ServiceExtImpl('ExtImpl', this.context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async onCreate(want): Promise<void> {
 | 
					  async onCreate(want): Promise<void> {
 | 
				
			||||||
    // tcp创建连接
 | 
					 | 
				
			||||||
    await tcpUtil.init()
 | 
					 | 
				
			||||||
    hilog.info(DOMAIN_NUMBER, TAG, `js-test ServiceExtensionAbility-- onCreate, want: ${want.abilityName}`);
 | 
					    hilog.info(DOMAIN_NUMBER, TAG, `js-test ServiceExtensionAbility-- onCreate, want: ${want.abilityName}`);
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -84,15 +84,16 @@ export default async function writeObjectOutNew(data, filePath): Promise<WR> {
 | 
				
			|||||||
          emitter.emit({
 | 
					          emitter.emit({
 | 
				
			||||||
            eventId: 1
 | 
					            eventId: 1
 | 
				
			||||||
          })
 | 
					          })
 | 
				
			||||||
 | 
					          tick = null
 | 
				
			||||||
          reject({
 | 
					          reject({
 | 
				
			||||||
            code: 1, data: {
 | 
					            code: 2300028,
 | 
				
			||||||
              code: 2300007
 | 
					            message: "children process not response"
 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
          })
 | 
					          })
 | 
				
			||||||
        }, 15 * 1000)
 | 
					        }, 20 * 1000)
 | 
				
			||||||
        console.log("wzj process start,项目代码:", params.data.param.ksxm)
 | 
					        console.log("wzj process start,项目代码:", params.data.param.ksxm)
 | 
				
			||||||
        globalThis.serviceExtProxy.processData("1", (errorCode: number, retVal: string) => {
 | 
					        globalThis.serviceExtProxy.processData("1", (errorCode: number, retVal: string) => {
 | 
				
			||||||
          console.log("lixiao process accept,项目代码:", params.data.param.ksxm, "  错误码:", errorCode, JSON.stringify(retVal))
 | 
					          console.log("lixiao process accept,项目代码:", params.data.param.ksxm, "  错误码:", errorCode, JSON.stringify(retVal))
 | 
				
			||||||
 | 
					          if (tick != null) {
 | 
				
			||||||
            clearTimeout(tick)
 | 
					            clearTimeout(tick)
 | 
				
			||||||
            let result = JSON.parse(retVal)
 | 
					            let result = JSON.parse(retVal)
 | 
				
			||||||
            if (result.code === 0) {
 | 
					            if (result.code === 0) {
 | 
				
			||||||
@ -103,6 +104,7 @@ export default async function writeObjectOutNew(data, filePath): Promise<WR> {
 | 
				
			|||||||
              })
 | 
					              })
 | 
				
			||||||
              reject(result.data)
 | 
					              reject(result.data)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,7 @@ import { getSyncData } from '../service/initable';
 | 
				
			|||||||
import hilog from '@ohos.hilog';
 | 
					import hilog from '@ohos.hilog';
 | 
				
			||||||
import FileUtil from '../../common/utils/File'
 | 
					import FileUtil from '../../common/utils/File'
 | 
				
			||||||
import { GlobalConfig } from '../../config/index'
 | 
					import { GlobalConfig } from '../../config/index'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TAG = 'socketTag[TcpDemo.TcpClient]'
 | 
					const TAG = 'socketTag[TcpDemo.TcpClient]'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function getTCP(flag = false) {
 | 
					export async function getTCP(flag = false) {
 | 
				
			||||||
@ -17,21 +18,15 @@ export async function getTCP(flag=false) {
 | 
				
			|||||||
    const result = JSON.parse(data)
 | 
					    const result = JSON.parse(data)
 | 
				
			||||||
    if (globalThis.TcpClient && globalThis.TcpClient.closeTcp && !flag) {
 | 
					    if (globalThis.TcpClient && globalThis.TcpClient.closeTcp && !flag) {
 | 
				
			||||||
      globalThis.TcpClient.closeTcp(async () => {
 | 
					      globalThis.TcpClient.closeTcp(async () => {
 | 
				
			||||||
        // const tcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort)
 | 
					
 | 
				
			||||||
        // globalThis.TcpClient = tcpClient
 | 
					 | 
				
			||||||
        setTimeout(async () => {
 | 
					        setTimeout(async () => {
 | 
				
			||||||
          const tcpClient: TcpClient = new TcpClient(result.tcplocalIp, result.tcplocalIpPort, result.tcpOppositeIp, result.tcpOppositePort)
 | 
					          const tcpClient: TcpClient = new TcpClient(result.tcplocalIp, result.tcplocalIpPort, result.tcpOppositeIp, result.tcpOppositePort)
 | 
				
			||||||
          globalThis.TcpClient = tcpClient
 | 
					          globalThis.TcpClient = tcpClient
 | 
				
			||||||
          await globalThis.TcpClient.bindTcp()
 | 
					          await globalThis.TcpClient.bindTcp()
 | 
				
			||||||
          // await globalThis.TcpClient.rebindTcp(result.tcplocalIp, result.tcplocalIpPort, result.tcpOppositeIp, result.tcpOppositePort)
 | 
					 | 
				
			||||||
          await globalThis.TcpClient.connectTcp()
 | 
					          await globalThis.TcpClient.connectTcp()
 | 
				
			||||||
          console.log('ttttttt0')
 | 
					 | 
				
			||||||
          // await globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
 | 
					 | 
				
			||||||
          console.log('ttttttt00')
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
          clearInterval(globalThis.intervalSendmsg)
 | 
					          clearInterval(globalThis.intervalSendmsg)
 | 
				
			||||||
          globalThis.intervalSendmsg = setInterval(async () => {
 | 
					          globalThis.intervalSendmsg = setInterval(async () => {
 | 
				
			||||||
            console.log('getCloseTcp',globalThis.carInfo.carNo)
 | 
					 | 
				
			||||||
            if (!globalThis.getCloseTcp) {
 | 
					            if (!globalThis.getCloseTcp) {
 | 
				
			||||||
              await globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
 | 
					              await globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
 | 
				
			||||||
              globalThis.tcpStep += 1
 | 
					              globalThis.tcpStep += 1
 | 
				
			||||||
@ -50,8 +45,6 @@ export async function getTCP(flag=false) {
 | 
				
			|||||||
          await globalThis.TcpClient.onMessage((val) => {
 | 
					          await globalThis.TcpClient.onMessage((val) => {
 | 
				
			||||||
            setTimeout(() => {
 | 
					            setTimeout(() => {
 | 
				
			||||||
              if (val) {
 | 
					              if (val) {
 | 
				
			||||||
                // const msg=val.substring(5,val.length-1)
 | 
					 | 
				
			||||||
                console.log('socketTag[PLC.UdpClient] status:', globalThis.udpClient.getStatus())
 | 
					 | 
				
			||||||
                globalThis.udpClient?.sendMsg(val)
 | 
					                globalThis.udpClient?.sendMsg(val)
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            }, 1000)
 | 
					            }, 1000)
 | 
				
			||||||
@ -72,7 +65,6 @@ export async function getTCP(flag=false) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      clearInterval(globalThis.intervalSendmsg)
 | 
					      clearInterval(globalThis.intervalSendmsg)
 | 
				
			||||||
      globalThis.intervalSendmsg = setInterval(async () => {
 | 
					      globalThis.intervalSendmsg = setInterval(async () => {
 | 
				
			||||||
        // console.log('getCloseTcp',globalThis.getCloseTcp)
 | 
					 | 
				
			||||||
        if (!globalThis.getCloseTcp) {
 | 
					        if (!globalThis.getCloseTcp) {
 | 
				
			||||||
          await globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
 | 
					          await globalThis.TcpClient.sendMsg(globalThis.carInfo.carNo) //1002
 | 
				
			||||||
          globalThis.tcpStep += 1
 | 
					          globalThis.tcpStep += 1
 | 
				
			||||||
@ -99,69 +91,5 @@ export async function getTCP(flag=false) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return
 | 
					  return
 | 
				
			||||||
  getSyncData('IpConfigTable').then(async (result: Array<any>) => {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    console.log('result222', JSON.stringify(result))
 | 
					 | 
				
			||||||
    if (result.length) {
 | 
					 | 
				
			||||||
      if (globalThis.TcpClient && globalThis.TcpClient.closeTcp) {
 | 
					 | 
				
			||||||
        globalThis.TcpClient.closeTcp(async () => {
 | 
					 | 
				
			||||||
          // const tcpClient: TcpClient =new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort,result[0].tcpOppositeIp,result[0].tcpOppositePort)
 | 
					 | 
				
			||||||
          // globalThis.TcpClient = tcpClient
 | 
					 | 
				
			||||||
          setTimeout(async () => {
 | 
					 | 
				
			||||||
            await globalThis.TcpClient.rebindTcp(result[0].tcplocalIp, result[0].tcplocalIpPort, result[0].tcpOppositeIp, result[0].tcpOppositePort)
 | 
					 | 
				
			||||||
            await globalThis.TcpClient.connectTcp()
 | 
					 | 
				
			||||||
            await globalThis.TcpClient.sendMsg('1002') //1002
 | 
					 | 
				
			||||||
            globalThis.TcpClient.onError((val) => {
 | 
					 | 
				
			||||||
              setTimeout(() => {
 | 
					 | 
				
			||||||
                getTCP()
 | 
					 | 
				
			||||||
              }, 1000)
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
            await globalThis.TcpClient.onMessage((val) => {
 | 
					 | 
				
			||||||
              setTimeout(() => {
 | 
					 | 
				
			||||||
                globalThis.TcpClient.sendMsg('1002') //1002
 | 
					 | 
				
			||||||
                if (val) {
 | 
					 | 
				
			||||||
                  // const msg=val.substring(5,val.length-1)
 | 
					 | 
				
			||||||
                  console.log('socketTag[PLC.UdpClient] status:', globalThis.udpClient.getStatus())
 | 
					 | 
				
			||||||
                  globalThis.udpClient?.sendMsg(val)
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
              }, 1000)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
          }, 2000)
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      else {
 | 
					 | 
				
			||||||
        const tcpClient: TcpClient = new TcpClient(result[0].tcplocalIp, result[0].tcplocalIpPort, result[0].tcpOppositeIp, result[0].tcpOppositePort)
 | 
					 | 
				
			||||||
        globalThis.TcpClient = tcpClient
 | 
					 | 
				
			||||||
        await globalThis.TcpClient.bindTcp()
 | 
					 | 
				
			||||||
        await globalThis.TcpClient.connectTcp()
 | 
					 | 
				
			||||||
        await globalThis.TcpClient.sendMsg('1002') //1002
 | 
					 | 
				
			||||||
        globalThis.TcpClient.onError((val) => {
 | 
					 | 
				
			||||||
          setTimeout(() => {
 | 
					 | 
				
			||||||
            getTCP()
 | 
					 | 
				
			||||||
          }, 1000)
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
        await globalThis.TcpClient.onMessage((val) => {
 | 
					 | 
				
			||||||
          hilog.info(0x0000, 'testTag', "valvalval2" + JSON.stringify(val));
 | 
					 | 
				
			||||||
          setTimeout(() => {
 | 
					 | 
				
			||||||
            globalThis.TcpClient.sendMsg('1002') //1002
 | 
					 | 
				
			||||||
            if (val && globalThis.udpClient?.sendMsg) {
 | 
					 | 
				
			||||||
              globalThis.udpClient?.sendMsg(val)
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
          }, 1000)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      // globalThis.udpClient = new UdpClient(result[0].localIp, result[0].localIpPort,result[0].oppositeIp,result[0].oppositeIpPort)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      globalThis.TcpClient = {}
 | 
					 | 
				
			||||||
      globalThis.TcpClient.onMessage = () => {
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
// globalThis.udpClient.bindUdp()
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -555,12 +555,51 @@ struct Index {
 | 
				
			|||||||
      const {lsh,startExamTime:kskssj,jl:kslc} = this
 | 
					      const {lsh,startExamTime:kskssj,jl:kslc} = this
 | 
				
			||||||
      const { carId ,examinationRoomId} = globalThis.carInfo;
 | 
					      const { carId ,examinationRoomId} = globalThis.carInfo;
 | 
				
			||||||
      await uploadExamMileage({
 | 
					      await uploadExamMileage({
 | 
				
			||||||
        carId,examinationRoomId,
 | 
					        carId,
 | 
				
			||||||
        lsh,kskssj,kslc
 | 
					        examinationRoomId,
 | 
				
			||||||
 | 
					        lsh,
 | 
				
			||||||
 | 
					        kskssj,
 | 
				
			||||||
 | 
					        kslc
 | 
				
			||||||
      })
 | 
					      })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  async endExam() {
 | 
				
			||||||
 | 
					    if (this.isErrorMsgEnd) {
 | 
				
			||||||
 | 
					      this.judge.closeAllFiles()
 | 
				
			||||||
 | 
					      router.back()
 | 
				
			||||||
 | 
					      return
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //靠边停车进行中&且其它项目都已经完成 不能结束
 | 
				
			||||||
 | 
					    if(!this.singlePlay && this.projectsObj['40600']?.type == '2' && this.isRequiredProjectsEnd){
 | 
				
			||||||
 | 
					      Prompt.showToast({
 | 
				
			||||||
 | 
					        message: '靠边停车项目进行中,不允许手动退出!',
 | 
				
			||||||
 | 
					        duration: 4000
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      return
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //考试未结束且有扣分,不允许退出
 | 
				
			||||||
 | 
					    if (!this.singlePlay && this.judgeConfigObj['344'] == 1 && this.kfArr.length > 0 && !this.isAllProjectsEnd ) {
 | 
				
			||||||
 | 
					      Prompt.showToast({
 | 
				
			||||||
 | 
					        message: '考试未结束且有扣分,不允许手动退出!',
 | 
				
			||||||
 | 
					        duration: 4000
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      return
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    this.endPopupVisible = false;
 | 
				
			||||||
 | 
					    this.loadingPopupVisible = true
 | 
				
			||||||
 | 
					    clearInterval(this.timer);
 | 
				
			||||||
 | 
					    clearInterval(globalThis.judgeTimer)
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      this.judge.checkExamIsEnd(true);
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					      this.judge.closeAllFiles()
 | 
				
			||||||
 | 
					      router.back()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  build() {
 | 
					  build() {
 | 
				
			||||||
    Column() {
 | 
					    Column() {
 | 
				
			||||||
      Row() {
 | 
					      Row() {
 | 
				
			||||||
@ -890,7 +929,11 @@ struct Index {
 | 
				
			|||||||
              //   name: 'button_media.wav'
 | 
					              //   name: 'button_media.wav'
 | 
				
			||||||
              // })
 | 
					              // })
 | 
				
			||||||
              if (this.judgeConfigObj['353'] == '0') {
 | 
					              if (this.judgeConfigObj['353'] == '0') {
 | 
				
			||||||
 | 
					                if (this.getNotEndProjects().length > 0) {
 | 
				
			||||||
                  this.endPopupVisible = true
 | 
					                  this.endPopupVisible = true
 | 
				
			||||||
 | 
					                  return
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                this.endExam()
 | 
				
			||||||
              } else {
 | 
					              } else {
 | 
				
			||||||
                Prompt.showToast({
 | 
					                Prompt.showToast({
 | 
				
			||||||
                  message: '车上不允许手动结束考试!',
 | 
					                  message: '车上不允许手动结束考试!',
 | 
				
			||||||
@ -985,34 +1028,12 @@ struct Index {
 | 
				
			|||||||
      //结束考试弹窗
 | 
					      //结束考试弹窗
 | 
				
			||||||
      if (this.endPopupVisible) {
 | 
					      if (this.endPopupVisible) {
 | 
				
			||||||
        EndPoPup({
 | 
					        EndPoPup({
 | 
				
			||||||
          title: '确定结束考试吗?',
 | 
					          title: `当前考试存在未完成的项目:${this.getNotEndProjects().join('、')},确定结束考试吗?`,
 | 
				
			||||||
          cancelFn: () => {
 | 
					          cancelFn: () => {
 | 
				
			||||||
            this.endPopupVisible = false;
 | 
					            this.endPopupVisible = false;
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          confirmFn: async () => {
 | 
					          confirmFn: async () => {
 | 
				
			||||||
            if(this.isErrorMsgEnd){
 | 
					            this.endExam()
 | 
				
			||||||
              this.judge.closeAllFiles()
 | 
					 | 
				
			||||||
              router.back()
 | 
					 | 
				
			||||||
              return
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if (this.judgeConfigObj['344'] == 1) {
 | 
					 | 
				
			||||||
              Prompt.showToast({
 | 
					 | 
				
			||||||
                message: '考试未结束,不允许手动退出!',
 | 
					 | 
				
			||||||
                duration: 4000
 | 
					 | 
				
			||||||
              });
 | 
					 | 
				
			||||||
              return
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            this.endPopupVisible = false;
 | 
					 | 
				
			||||||
            this.loadingPopupVisible = true
 | 
					 | 
				
			||||||
            clearInterval(this.timer);
 | 
					 | 
				
			||||||
            clearInterval(globalThis.judgeTimer)
 | 
					 | 
				
			||||||
            try {
 | 
					 | 
				
			||||||
              this.judge.checkExamIsEnd(true);
 | 
					 | 
				
			||||||
            } catch (e) {
 | 
					 | 
				
			||||||
              this.judge.closeAllFiles()
 | 
					 | 
				
			||||||
              router.back()
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -1216,7 +1237,6 @@ struct Index {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    return true
 | 
					    return true
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
  // 判断项目是否在当前路段号
 | 
					  // 判断项目是否在当前路段号
 | 
				
			||||||
  getProjectIsInRoad = (projectCode: string,) => {
 | 
					  getProjectIsInRoad = (projectCode: string,) => {
 | 
				
			||||||
    const {
 | 
					    const {
 | 
				
			||||||
@ -1276,7 +1296,6 @@ struct Index {
 | 
				
			|||||||
    return true
 | 
					    return true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
  // 获取人工项目是否已做
 | 
					  // 获取人工项目是否已做
 | 
				
			||||||
  getIsEndManualProject = (index: number) => {
 | 
					  getIsEndManualProject = (index: number) => {
 | 
				
			||||||
    const projectName = this.artSubject3Projects[index];
 | 
					    const projectName = this.artSubject3Projects[index];
 | 
				
			||||||
@ -1287,7 +1306,6 @@ struct Index {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    return (type == '3' || type == '4') ? `${projectName}_red` : `${projectName}_green`;
 | 
					    return (type == '3' || type == '4') ? `${projectName}_red` : `${projectName}_green`;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
  // 获取是否能进行人工评判
 | 
					  // 获取是否能进行人工评判
 | 
				
			||||||
  getIsManualKf = () => {
 | 
					  getIsManualKf = () => {
 | 
				
			||||||
    const {examSubject} = this;
 | 
					    const {examSubject} = this;
 | 
				
			||||||
@ -1303,6 +1321,18 @@ struct Index {
 | 
				
			|||||||
      return false
 | 
					      return false
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  // 获取考试项目里未完成的
 | 
				
			||||||
 | 
					  getNotEndProjects = () => {
 | 
				
			||||||
 | 
					    const projectsObj = this.projectsObj;
 | 
				
			||||||
 | 
					    const notEndProjectsNames = [];
 | 
				
			||||||
 | 
					    Reflect.ownKeys(projectsObj).forEach((projectKey: string) => {
 | 
				
			||||||
 | 
					      const {isEnd ,name} = projectsObj[projectKey];
 | 
				
			||||||
 | 
					      if (!isEnd) {
 | 
				
			||||||
 | 
					        notEndProjectsNames.push(name)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					    return notEndProjectsNames;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  scroller: Scroller = new Scroller()
 | 
					  scroller: Scroller = new Scroller()
 | 
				
			||||||
  //页面通用字体大小
 | 
					  //页面通用字体大小
 | 
				
			||||||
@ -1412,4 +1442,5 @@ struct Index {
 | 
				
			|||||||
  @State errorMsg: string = ''
 | 
					  @State errorMsg: string = ''
 | 
				
			||||||
  @State isErrorMsgEnd: boolean = false
 | 
					  @State isErrorMsgEnd: boolean = false
 | 
				
			||||||
  @State disConnectErrorOpen: boolean = false
 | 
					  @State disConnectErrorOpen: boolean = false
 | 
				
			||||||
 | 
					  @State isAllProjectsEnd:boolean = false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,9 @@ export interface Project {
 | 
				
			|||||||
  type?: '1' | '2' | '3' | '4' | '5'
 | 
					  type?: '1' | '2' | '3' | '4' | '5'
 | 
				
			||||||
  //
 | 
					  //
 | 
				
			||||||
  isEnd:boolean,
 | 
					  isEnd:boolean,
 | 
				
			||||||
  isUpload:boolean
 | 
					  isUpload:boolean,
 | 
				
			||||||
 | 
					  //是否是必考
 | 
				
			||||||
 | 
					  isRequired: boolean
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface MarkRule {
 | 
					export interface MarkRule {
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
//考试回放开关
 | 
					//考试回放开关
 | 
				
			||||||
export const judgeConfig = {
 | 
					export const judgeConfig = {
 | 
				
			||||||
  // 外壳版本号
 | 
					  // 外壳版本号
 | 
				
			||||||
  version: "2025.05.21.01",
 | 
					  version: "2025.07.30.01",
 | 
				
			||||||
  //本地目录开关
 | 
					  //本地目录开关
 | 
				
			||||||
  isTrajectoryOpen: false,
 | 
					  isTrajectoryOpen: false,
 | 
				
			||||||
  //是否开启拍照
 | 
					  //是否开启拍照
 | 
				
			||||||
 | 
				
			|||||||
@ -1,14 +1,15 @@
 | 
				
			|||||||
-----BEGIN CERTIFICATE-----
 | 
					-----BEGIN CERTIFICATE-----
 | 
				
			||||||
MIICFzCCAZygAwIBAgIJAO9FWZQgKzxyMAoGCCqGSM49BAMDMGMxCzAJBgNVBAYT
 | 
					MIICFjCCAZygAwIBAgIJAK2HBk/VC2x5MAoGCCqGSM49BAMDMGMxCzAJBgNVBAYT
 | 
				
			||||||
AkNOMRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkg
 | 
					AkNOMRQwEgYDVQQKEwtPcGVuSGFybW9ueTEZMBcGA1UECxMQT3Blbkhhcm1vbnkg
 | 
				
			||||||
VGVhbTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjUw
 | 
					VGVhbTEjMCEGA1UEAxMaT3Blbkhhcm1vbnkgQXBwbGljYXRpb24gQ0EwHhcNMjUw
 | 
				
			||||||
NDIyMDc1NDI2WhcNMzUwNDIwMDc1NDI2WjBKMRUwEwYDVQQDDAxpZGVfZGVtb19h
 | 
					NjEwMDgzMjE2WhcNMzUwNjA4MDgzMjE2WjBKMRUwEwYDVQQDDAxpZGVfZGVtb19h
 | 
				
			||||||
cHAxDTALBgNVBAsTBFVuaXQxFTATBgNVBAoTDE9yZ2FuaXphdGlvbjELMAkGA1UE
 | 
					cHAxDTALBgNVBAsTBFVuaXQxFTATBgNVBAoTDE9yZ2FuaXphdGlvbjELMAkGA1UE
 | 
				
			||||||
BhMCQ04wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQUPoxdYBvC4QlondlBnCEe
 | 
					BhMCQ04wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATR32lOiczjuOOmjeLcf0BM
 | 
				
			||||||
oxxkFKTZwhcA+xW31gNCOOwboVPyCB++6EuUa/0fJ/jlEeyNzErXflXkGG7GZVPa
 | 
					xmTK/xy2mUufXy4yOCIwsAODi831GCMBGDd917PVyAsi0EgbA0XacBNYtnc31t5t
 | 
				
			||||||
o1IwUDAdBgNVHQ4EFgQUrAmchwjJTxwrv09H+c4xS7+oEvIwDgYDVR0PAQH/BAQD
 | 
					o1IwUDAdBgNVHQ4EFgQU24KK6vw0zEbCjBg19EkmuxjY8yAwDgYDVR0PAQH/BAQD
 | 
				
			||||||
AgeAMB8GA1UdIwQYMBaAFNuGtyIW1QuhS7fdJXu58QV9oi1HMAoGCCqGSM49BAMD
 | 
					AgeAMB8GA1UdIwQYMBaAFNuGtyIW1QuhS7fdJXu58QV9oi1HMAoGCCqGSM49BAMD
 | 
				
			||||||
A2kAMGYCMQCZzMs9H/mMi+59hO4EfDHTXChO6QoBYH+pwB66g7dw7apGXhayBIwq
 | 
					A2gAMGUCMQCQNA10eLcDwp8Yi4jGwbOfCz3SAIaoNjnPaOCESAU8txqTAffAWJZn
 | 
				
			||||||
qOeVnlTVbPkCMQCc2hQf+ypiZpZQog1dMSGdlNs8heypj97d7DahjTgEzrxGxcZK
 | 
					aY53gTk1IfoCMH3CAZwaCmxXY4Lf5zdxrr5/S5SPNgyhWYzQ9sHFfN/Pbe6vLYiv
 | 
				
			||||||
PtMtg35cJa+JtN4=
 | 
					DX5Mo/sVw5IHrA==
 | 
				
			||||||
-----END CERTIFICATE-----
 | 
					-----END CERTIFICATE-----
 | 
				
			||||||
 | 
					71327BE2EC4AAB9473F15D6D76F679E4BAAB87FA604E1C99AEFA67C0C266AF1C
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user