Compare commits

..

11 Commits

Author SHA1 Message Date
52953bda36 打包 2025-08-19 17:11:24 +08:00
Surenjun
a6fbf40140 feat:结束考试修改 2025-07-30 08:52:49 +08:00
eb8329a610 考试结束优化 2025-07-29 10:23:53 +08:00
9a529fe649 考试结束优化 2025-07-24 17:31:54 +08:00
Surenjun
d1835688b6 feat:结束考试未考项目提示 2025-07-24 15:54:40 +08:00
13b36a77c6 无用代码清理 2025-06-18 09:07:44 +08:00
0aea22d2bf 签名变更 2025-06-13 13:52:00 +08:00
17f744711f 代理服务优化 2025-06-10 13:38:10 +08:00
acf26da558 代理服务优化 2025-06-10 12:09:57 +08:00
dee0d25c94 Changes 2025-06-04 09:19:11 +08:00
74fe792004 1.子进程响应超时时间更改 2025-05-27 09:03:13 +08:00
21 changed files with 568 additions and 273 deletions

View File

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

View File

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

View File

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

View File

@ -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();
//壁钟,防止有人篡改系统时间,导致考试有些评判项目计时限时不准 //壁钟,防止有人篡改系统时间,导致考试有些评判项目计时限时不准

View File

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

View File

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

View File

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

View File

@ -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);
@ -452,6 +457,7 @@ void Sub2Judge03Cftc::judgeTouchLine()
touchLineBody_C1C2C5(LineNum::L56_NUM); touchLineBody_C1C2C5(LineNum::L56_NUM);
//#endif //#endif
} }
}
} }
void Sub2Judge03Cftc::touchLineWheel_C1C2C5(LineNum num) void Sub2Judge03Cftc::touchLineWheel_C1C2C5(LineNum num)

View File

@ -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
//810s未起步只评判第一次^第一次起步以打左方向灯开始计时^
//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)
{ {

View File

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

View File

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

View File

@ -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就可以进行模拟灯光

View File

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

View File

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

View File

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

View File

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

View File

@ -3,45 +3,40 @@ 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) {
globalThis.getCloseTcp=true globalThis.getCloseTcp = true
const fileUtil = new FileUtil(globalThis.context) const fileUtil = new FileUtil(globalThis.context)
const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt'); const data = await fileUtil.readFile(GlobalConfig.comoonfileWriteAddress + '/config/ipConfig.txt');
if (data === '' || data === undefined) { if (data === '' || data === undefined) {
globalThis.TcpClient = {} globalThis.TcpClient = {}
globalThis.TcpClient.onMessage = () => { globalThis.TcpClient.onMessage = () => {
} }
}else{ } else {
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
if(globalThis.tcpStep>30){ if (globalThis.tcpStep > 30) {
console.log(TAG,'tcp重连开始') console.log(TAG, 'tcp重连开始')
globalThis.tcpStep=0 globalThis.tcpStep = 0
getTCP() getTCP()
} }
} }
},1000/3) }, 1000 / 3)
globalThis.TcpClient.onError((val) => { globalThis.TcpClient.onError((val) => {
setTimeout(() => { setTimeout(() => {
getTCP() getTCP()
@ -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)
@ -71,18 +64,17 @@ export async function getTCP(flag=false) {
console.log('ttttttt12') console.log('ttttttt12')
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
if(globalThis.tcpStep>30){ if (globalThis.tcpStep > 30) {
globalThis.tcpStep=0 globalThis.tcpStep = 0
getTCP() getTCP()
console.log(TAG,'tcp重连开始') console.log(TAG, 'tcp重连开始')
} }
} }
},1000/3) }, 1000 / 3)
globalThis.TcpClient.onError((val) => { globalThis.TcpClient.onError((val) => {
setTimeout(() => { setTimeout(() => {
getTCP() getTCP()
@ -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()

View File

@ -7,9 +7,9 @@ import DeductedPopup from './compontents/judge/DeductionPopup';
import AmplifyPopup from './compontents/judge/AmplifyPopup'; import AmplifyPopup from './compontents/judge/AmplifyPopup';
import Judge from './judgeSDK/judge'; import Judge from './judgeSDK/judge';
import { defaultJudgeConfigObj } from './judgeSDK/utils//judgeCommon'; import { defaultJudgeConfigObj } from './judgeSDK/utils//judgeCommon';
import {uploadExamMileage} from '../api/judge' import { uploadExamMileage } from '../api/judge'
import DwztErrorPopup from './compontents/judge/DwztErrorPopup' import DwztErrorPopup from './compontents/judge/DwztErrorPopup'
import {debounce} from '../common/utils/tools' import { debounce } from '../common/utils/tools'
import MsgPopup from './compontents/judge/MsgPopup' import MsgPopup from './compontents/judge/MsgPopup'
import { import {
@ -37,7 +37,7 @@ import { voiceService } from '../common/service/voiceService';
@Entry @Entry
@Component @Component
struct Index { struct Index {
async aboutToDisappear(){ async aboutToDisappear() {
clearInterval(this.mileageTimer) clearInterval(this.mileageTimer)
} }
@ -112,7 +112,7 @@ struct Index {
BK2: carInfo.bk2, BK2: carInfo.bk2,
X_MCH: carInfo.x_mch, X_MCH: carInfo.x_mch,
}) })
console.info('surenjun =>carinfoArrr',JSON.stringify( this.carinfoArr)) console.info('surenjun =>carinfoArrr', JSON.stringify(this.carinfoArr))
} }
// 获取考生信息 // 获取考生信息
@ -122,7 +122,7 @@ struct Index {
const {xm,sfzmhm,lsh,kszp,ksdd,kssycs,kslx,ksxl,xldm} = stuInfo; const {xm,sfzmhm,lsh,kszp,ksdd,kssycs,kslx,ksxl,xldm} = stuInfo;
this.name = xm || '测试考生'; this.name = xm || '测试考生';
this.idCard = sfzmhm || '01234567891010'; this.idCard = sfzmhm || '01234567891010';
this.lsh = globalThis.singlePlay?'0000000000000':lsh; this.lsh = globalThis.singlePlay ? '0000000000000' : lsh;
this.kszp = kszp; this.kszp = kszp;
this.ksdd = ksdd; this.ksdd = ksdd;
this.kssycs = kssycs; this.kssycs = kssycs;
@ -189,13 +189,13 @@ struct Index {
} }
//623 考试中是否可以查看轨迹画面(0-否+1-是) //623 考试中是否可以查看轨迹画面(0-否+1-是)
if(sys.v_no == '623'){ if (sys.v_no == '623') {
this.syssetParam623 = value == '1'?true:false this.syssetParam623 = value == '1' ? true : false
} }
//科目三应行驶距离参数 //科目三应行驶距离参数
if (sys.v_no == '303') { if (sys.v_no == '303') {
this.examMileage = this.examMileage == '0'?(sys.v_value + ''): this.examMileage; this.examMileage = this.examMileage == '0' ? (sys.v_value + '') : this.examMileage;
} }
// //地点版本参数 // //地点版本参数
@ -213,7 +213,7 @@ struct Index {
const currentProject = this.projectsObj[xmdm] const currentProject = this.projectsObj[xmdm]
// 过滤考前绕车一周上车准备的扣分 // 过滤考前绕车一周上车准备的扣分
if(sczb == 1 && xmdm == '1'){ if (sczb == 1 && xmdm == '1') {
return return
} }
@ -244,7 +244,7 @@ struct Index {
//初始化systemParam表 //初始化systemParam表
async initSystemParam(sysParam?: SYSTEMPARMARR[]) { async initSystemParam(sysParam?: SYSTEMPARMARR[]) {
const systemParms: any = sysParam || await getSyncData('MA_SYSTEMPARM') const systemParms: any = sysParam || await getSyncData('MA_SYSTEMPARM')
console.info('surenjun => systemParms',JSON.stringify(systemParms)); console.info('surenjun => systemParms', JSON.stringify(systemParms));
let currentParams: any = router.getParams(); let currentParams: any = router.getParams();
const {carName,carType,examSubject} = this; const {carName,carType,examSubject} = this;
@ -255,7 +255,7 @@ struct Index {
} }
//真实监管下发的项目 //真实监管下发的项目
let kStringArr: string[] = (currentParams.kString?.split(',') || []).filter(item => item); let kStringArr: string[] = (currentParams.kString?.split(',') || []).filter(item => item);
console.info('surenjun kStringArr',JSON.stringify(kStringArr)) console.info('surenjun kStringArr', JSON.stringify(kStringArr))
let isInExam = kStringArr.length > 0; let isInExam = kStringArr.length > 0;
const {isTrajectoryOpen} = judgeConfig const {isTrajectoryOpen} = judgeConfig
let carNo = '', allItems = []; let carNo = '', allItems = [];
@ -280,11 +280,11 @@ struct Index {
} }
//获取及格分数线 //获取及格分数线
if(no1 == 3 && no3 == 3 && carNo === no2){ if (no1 == 3 && no3 == 3 && carNo === no2) {
this.passingScore = Number(txt1) || 0; this.passingScore = Number(txt1) || 0;
} }
//根据车型获取应行驶里程数 //根据车型获取应行驶里程数
if(no1 == 3 && no3 ==15 && carNo === no2){ if (no1 == 3 && no3 == 15 && carNo === no2) {
this.examMileage = ((decodeURI(systemParm.txt1)) || '').split('^')[0]; this.examMileage = ((decodeURI(systemParm.txt1)) || '').split('^')[0];
} }
//获取当前考车的考试项目 //获取当前考车的考试项目
@ -312,20 +312,20 @@ struct Index {
projectCode: no2, projectCode: no2,
projectCodeCenter: txt2, projectCodeCenter: txt2,
//是否是必考 加减档设置成非必考 //是否是必考 加减档设置成非必考
isRequired: no2== 14 ? false : allItems.includes(no2 + ''), isRequired: no2 == 14 ? false : allItems.includes(no2 + ''),
//是否考过了 //是否考过了
isEnd: false, isEnd: false,
//项目开始数据是否上传过 //项目开始数据是否上传过
isUpload:false, isUpload: false,
} }
this.projectsObj[no2*1] = currentProject this.projectsObj[no2*1] = currentProject
this.projectsCenterObj[txt2] = currentProject this.projectsCenterObj[txt2] = currentProject
this.projects.push(currentProject); this.projects.push(currentProject);
//真实监管下发考试项目 //真实监管下发考试项目
if(isInExam && !(kStringArr.includes(txt2) || kStringArr.includes(no2+''))){ if (isInExam && !(kStringArr.includes(txt2) || kStringArr.includes(no2 + ''))) {
console.info('surenjun =>',txt2) console.info('surenjun =>', txt2)
console.info('surenjun => no2',no2) console.info('surenjun => no2', no2)
this.projectsObj[no2*1].type = '3' this.projectsObj[no2*1].type = '3'
this.projectsObj[no2*1].isUpload = true this.projectsObj[no2*1].isUpload = true
this.projectsObj[no2*1].isEnd = true this.projectsObj[no2*1].isEnd = true
@ -347,7 +347,7 @@ struct Index {
}) })
}) })
const projects = this.projects; const projects = this.projects;
console.info('surenjun',JSON.stringify(this.ddxkKsxmArr)) console.info('surenjun', JSON.stringify(this.ddxkKsxmArr))
if (!projects.length) { if (!projects.length) {
Prompt.showToast({ Prompt.showToast({
@ -369,7 +369,7 @@ struct Index {
const newKey = key.split('~').join('_') const newKey = key.split('~').join('_')
//@ts-ignore //@ts-ignore
const xmdm = key.split('~')[0] * 1 const xmdm = key.split('~')[0] * 1
if(projectsObj[xmdm]){ if (projectsObj[xmdm]) {
this.cdsbInfoObj[newKey] = { this.cdsbInfoObj[newKey] = {
kdid: cdsb.kdid, kdid: cdsb.kdid,
sbbh: cdsb.sbbh, sbbh: cdsb.sbbh,
@ -384,18 +384,18 @@ struct Index {
} }
// 获取itemInfo表信息 // 获取itemInfo表信息
async initItemInfo(){ async initItemInfo() {
const infoParams = await getSyncData('MA_ITEMINFO'); const infoParams = await getSyncData('MA_ITEMINFO');
const carlist = this.carlist; const carlist = this.carlist;
const projectsObj = this.projectsObj const projectsObj = this.projectsObj
//@ts-ignore //@ts-ignore
infoParams.forEach((info)=>{ infoParams.forEach((info) => {
const key = decodeURI(info.itemsno); const key = decodeURI(info.itemsno);
const carlistArr = info.carlist === '' ? [] : (decodeURI(info.carlist).split(',') || []); const carlistArr = info.carlist === '' ? [] : (decodeURI(info.carlist).split(',') || []);
const newKey = key.split('~').join('_') const newKey = key.split('~').join('_')
//@ts-ignore //@ts-ignore
const xmdm = key.split('~')[0] * 1 const xmdm = key.split('~')[0] * 1
if(projectsObj[xmdm] && (carlistArr.length == 0 || carlistArr.includes(carlist))){ if (projectsObj[xmdm] && (carlistArr.length == 0 || carlistArr.includes(carlist))) {
this.itemInfoObj[newKey] = { this.itemInfoObj[newKey] = {
modelKey: newKey, modelKey: newKey,
xmdm, xmdm,
@ -440,7 +440,7 @@ struct Index {
//断点续考 //断点续考
ddxkKsxmArr.forEach(xmdm => { ddxkKsxmArr.forEach(xmdm => {
const projectCode = this.projectsCenterObj[xmdm].projectCode const projectCode = this.projectsCenterObj[xmdm].projectCode
if(this.projectsObj[projectCode]){ if (this.projectsObj[projectCode]) {
this.projectsObj[projectCode].type = '3' this.projectsObj[projectCode].type = '3'
this.projectsObj[projectCode].isUpload = true this.projectsObj[projectCode].isUpload = true
this.projectsObj[projectCode].isEnd = true this.projectsObj[projectCode].isEnd = true
@ -550,17 +550,56 @@ struct Index {
} }
// 上传考试里程 // 上传考试里程
async uploadMileage(){ async uploadMileage() {
if(!globalThis.singlePlay){ if (!globalThis.singlePlay) {
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: '车上不允许手动结束考试!',
@ -923,15 +966,15 @@ struct Index {
this.isDeductedPopShow = false; this.isDeductedPopShow = false;
this.defaultTabIndex = 0; this.defaultTabIndex = 0;
}, },
confirmMark: async (itemno, serial)=>{ confirmMark: async (itemno, serial) => {
clearTimeout(this.popTimer) clearTimeout(this.popTimer)
this.popTimer = null this.popTimer = null
this.popTimer = setTimeout(async ()=>{ this.popTimer = setTimeout(async () => {
const judge = this.judge const judge = this.judge
await judge.setJudgeMark(itemno, serial); await judge.setJudgeMark(itemno, serial);
this.isDeductedPopShow = false this.isDeductedPopShow = false
this.popTimer = null; this.popTimer = null;
},500) }, 500)
} }
}) })
} }
@ -942,7 +985,7 @@ struct Index {
showBack: false, showBack: false,
scaleNum: 1.8, scaleNum: 1.8,
msgStr: this.judge.plcStr || '', msgStr: this.judge.plcStr || '',
showTrajectory:globalThis.singlePlay ? true : (this.syssetParam623), showTrajectory: globalThis.singlePlay ? true : (this.syssetParam623),
}).margin({ top: 100 }) }).margin({ top: 100 })
Row() { Row() {
@ -966,15 +1009,15 @@ struct Index {
if (this.isAmplifyPopShow && this.examSubject == 3) { if (this.isAmplifyPopShow && this.examSubject == 3) {
AmplifyPopup({ AmplifyPopup({
amplifyImgIndex: this.amplifiedImgIndex, amplifyImgIndex: this.amplifiedImgIndex,
confirmAmplify:async (amplify)=>{ confirmAmplify: async (amplify) => {
clearTimeout(this.popTimer) clearTimeout(this.popTimer)
this.popTimer = null this.popTimer = null
this.popTimer = setTimeout(async ()=>{ this.popTimer = setTimeout(async () => {
const judge = this.judge const judge = this.judge
await judge.setJudgeItem(amplify.projectCode, 1); await judge.setJudgeItem(amplify.projectCode, 1);
this.isAmplifyPopShow = false this.isAmplifyPopShow = false
this.popTimer = null; this.popTimer = null;
},500) }, 500)
}, },
closeAmplifyPop: () => { closeAmplifyPop: () => {
this.isAmplifyPopShow = false this.isAmplifyPopShow = false
@ -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()
}
} }
}) })
} }
@ -1024,28 +1045,28 @@ struct Index {
}) })
} }
if (this.errorMsg){ if (this.errorMsg) {
MsgPopup({ MsgPopup({
title: this.errorMsg, title: this.errorMsg,
confirmFn:()=>{ confirmFn: () => {
this.errorMsg = '' this.errorMsg = ''
this.isErrorMsgEnd = true; this.isErrorMsgEnd = true;
if(this.disConnectErrorOpen){ if (this.disConnectErrorOpen) {
globalThis.context.terminateSelf() globalThis.context.terminateSelf()
}else{ } else {
router.back() router.back()
} }
}, },
}) })
} }
if(this.dwztErrorVisible){ if (this.dwztErrorVisible) {
DwztErrorPopup({ DwztErrorPopup({
title:'当前差分状态异常,学员将无法正常进行考试评判,请将车辆行驶到开阔地,等待程序自检,差分正常后会自动关闭该对话框', title: '当前差分状态异常,学员将无法正常进行考试评判,请将车辆行驶到开阔地,等待程序自检,差分正常后会自动关闭该对话框',
cancelFn:()=>{ cancelFn: () => {
this.dwztErrorVisible = false; this.dwztErrorVisible = false;
}, },
confirmFn:()=>{ confirmFn: () => {
clearInterval(this.timer); clearInterval(this.timer);
clearInterval(globalThis.judgeTimer) clearInterval(globalThis.judgeTimer)
this.judge.checkExamIsEnd(true); this.judge.checkExamIsEnd(true);
@ -1053,7 +1074,7 @@ struct Index {
}) })
} }
if(this.disConnectErrorOpen){ if (this.disConnectErrorOpen) {
} }
} }
@ -1090,14 +1111,14 @@ struct Index {
projectsObj projectsObj
} = this; } = this;
const projectCode = artSubject3ProjectsCodesArr[index]; const projectCode = artSubject3ProjectsCodesArr[index];
if(index === 5) { if (index === 5) {
console.info('surenjun 靠边停车状态=> ',getIsExitManualProject(index)) console.info('surenjun 靠边停车状态=> ', getIsExitManualProject(index))
} }
if (getIsExitManualProject(index)) { if (getIsExitManualProject(index)) {
// 正在进行的项目 取消项目 // 正在进行的项目 取消项目
if (isManualProjectIn && projectsObj[projectCode].type == '2') { if (isManualProjectIn && projectsObj[projectCode].type == '2') {
//判断人工是否能取消项目 && 当前项目有扣分的不能取消 //判断人工是否能取消项目 && 当前项目有扣分的不能取消
if(judgeConfigObj['340'] == 1 && projectsObj[projectCode].type != '5'){ if (judgeConfigObj['340'] == 1 && projectsObj[projectCode].type != '5') {
await this.judge.setJudgeItem(projectCode, 2); await this.judge.setJudgeItem(projectCode, 2);
Prompt.showToast({ Prompt.showToast({
message: '项目取消', message: '项目取消',
@ -1113,11 +1134,11 @@ struct Index {
if (xmmcStr == '无' || xmmcStr == '') { if (xmmcStr == '无' || xmmcStr == '') {
//512[6] 人工项目按钮放大确认 //512[6] 人工项目按钮放大确认
const param512 = (judgeConfigObj['512'] || '').split(','); const param512 = (judgeConfigObj['512'] || '').split(',');
console.info('surenjun',param512) console.info('surenjun', param512)
if(param512[6] !== '0'){ if (param512[6] !== '0') {
this.amplifiedImgIndex = index; this.amplifiedImgIndex = index;
this.isAmplifyPopShow = true this.isAmplifyPopShow = true
}else{ } else {
const judge = this.judge const judge = this.judge
await judge.setJudgeItem(projectCode, 1); await judge.setJudgeItem(projectCode, 1);
} }
@ -1148,7 +1169,7 @@ struct Index {
getProjectIsInRoad getProjectIsInRoad
} = this; } = this;
const projectCode = artSubject3ProjectsCodesArr[index]; const projectCode = artSubject3ProjectsCodesArr[index];
if(projectsObj[projectCode] === undefined){ if (projectsObj[projectCode] === undefined) {
return false return false
} }
const projectType = projectsObj[projectCode].type; const projectType = projectsObj[projectCode].type;
@ -1216,7 +1237,6 @@ struct Index {
} }
return true return true
} }
// 判断项目是否在当前路段号 // 判断项目是否在当前路段号
getProjectIsInRoad = (projectCode: string,) => { getProjectIsInRoad = (projectCode: string,) => {
const { const {
@ -1244,7 +1264,7 @@ struct Index {
return false return false
} }
if(projectRoads[projectCode].length == 0){ if (projectRoads[projectCode].length == 0) {
return true return true
} }
@ -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,22 +1306,33 @@ 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;
if(examSubject == 3){ if (examSubject == 3) {
//杭州训练模式不允许人工评判 //杭州训练模式不允许人工评判
if(globalThis.singlePlay && this.judgeConfigObj['211'] == 'zjhz'){ if (globalThis.singlePlay && this.judgeConfigObj['211'] == 'zjhz') {
return false return false
} }
if(this.judgeConfigObj['342'] == '0'){ if (this.judgeConfigObj['342'] == '0') {
return true return true
} }
}else{ } else {
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()
//页面通用字体大小 //页面通用字体大小
@ -1407,9 +1437,10 @@ struct Index {
@State mileageTimer: number = 0; @State mileageTimer: number = 0;
@State passingScore: number = 80 @State passingScore: number = 80
@State dwztErrorVisible: boolean = false; @State dwztErrorVisible: boolean = false;
@State popTimer:number =0; @State popTimer: number = 0;
@State carlist:string= '' @State carlist: string = ''
@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;
} }

View File

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

View File

@ -1,7 +1,7 @@
//考试回放开关 //考试回放开关
export const judgeConfig = { export const judgeConfig = {
// 外壳版本号 // 外壳版本号
version: "2025.05.21.01", version: "2025.07.30.01",
//本地目录开关 //本地目录开关
isTrajectoryOpen: false, isTrajectoryOpen: false,
//是否开启拍照 //是否开启拍照

View File

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