衝突解決
This commit is contained in:
commit
1b3093b067
@ -107,6 +107,7 @@
|
||||
*** JUDGE_USE_MEMORY //是否启用内存操作检查
|
||||
*** JUDGE_USE_POOL //是否启用内存池调试信息
|
||||
*** JUDGE_USE_ASSERT //是否启用断言提示
|
||||
*** JUDGE_USE_NICE //是否启用调试测试代码
|
||||
*** JUDGE_USE_PERF //是否启用CPU性能分析
|
||||
*** JUDGE_USE_LEAK //是否启用内存泄露检测
|
||||
*** JUDGE_USE_TCMALLOC //是否启用tcmalloc优化内存使用操作
|
||||
@ -119,20 +120,26 @@
|
||||
#define JUDGE_USE_LOG
|
||||
|
||||
/*
|
||||
* 是否启用一些调试用的信息,开发用
|
||||
* 是否启用外壳APP侧传入参数严格检查
|
||||
*/
|
||||
#if defined(JUDGE_OS_OHOS) || defined(JUDGE_OS_ANDROID) || defined(JUDGE_DEBUG__)
|
||||
|
||||
#define JUDGE_USE_STRICT //是否启用外壳APP侧传入参数严格检查
|
||||
|
||||
#define JUDGE_USE_STRICT
|
||||
#endif
|
||||
|
||||
#define JUDGE_USE_CODE //是否启用系统在返回错误码的时候输出日志
|
||||
/*
|
||||
* 是否启用系统在返回错误码的时候输出日志
|
||||
*/
|
||||
#define JUDGE_USE_CODE
|
||||
|
||||
/*
|
||||
* 是否启用函数执行耗时检测
|
||||
* 是否启用内存操作检查
|
||||
* 是否启用内存池调试信息
|
||||
*/
|
||||
#if 0
|
||||
#define JUDGE_USE_COST //是否启用函数执行耗时检测
|
||||
#define JUDGE_USE_MEMORY //是否启用内存操作检查
|
||||
#define JUDGE_USE_POOL //是否启用内存池调试信息
|
||||
#define JUDGE_USE_COST
|
||||
#define JUDGE_USE_MEMORY
|
||||
#define JUDGE_USE_POOL
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -143,6 +150,11 @@
|
||||
#define JUDGE_USE_ASSERT //是否启用断言提示
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 是否启用测试调试代码
|
||||
*/
|
||||
#define JUDGE_USE_NICE
|
||||
|
||||
/*
|
||||
* 是否启用CPU性能分析和内存泄露检测
|
||||
* 注意:目前只在linux系统并且在编译测试工程时前提下条件下才能开启
|
||||
@ -159,6 +171,7 @@
|
||||
//#define JUDGE_USE_TCMALLOC //是否启用tcmalloc优化内存使用操作
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* 是否启用无锡科研所送检模式
|
||||
* 作者: 杨海洋
|
||||
@ -189,12 +202,14 @@
|
||||
* 7.下一次再去无锡所检测,左转弯要用原始的ret2000
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
//#define JUDGE_USE_INSPECT
|
||||
//#define JUDGE_USE_INSPECT
|
||||
|
||||
|
||||
|
||||
//********************************以上是预编译定义***************************************
|
||||
|
||||
|
||||
/*
|
||||
* 基础整数类型定义
|
||||
*
|
||||
|
||||
@ -18,18 +18,19 @@ public:
|
||||
bool load(const TMap_Point_Items& mapPointItem);
|
||||
void unload();
|
||||
|
||||
const TMap_Point_Item* findMapPointItem(int ptNo) const
|
||||
const std::vector<const TMap_Point_Item*> findMapPointItem(int ptNo) const
|
||||
{
|
||||
std::vector<const TMap_Point_Item*> items;
|
||||
int ssize = size();
|
||||
for(int i = 0 ; i < ssize; i++)
|
||||
{
|
||||
const TMap_Point_Item* mapPointItem = getMapPointItem(i);
|
||||
if(mapPointItem && mapPointItem->point_no == ptNo)
|
||||
{
|
||||
return mapPointItem;
|
||||
items.push_back(mapPointItem);
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
return items;
|
||||
}
|
||||
const TMap_Point_Item* getMapPointItem(int idx) const { TASSERT_NULL(idx >= 0 && idx < size(), ""); return &m_mapPointItem[idx]; }
|
||||
const TMap_Point_Items& getMapPointItems() const noexcept { return m_mapPointItem; }
|
||||
|
||||
@ -3,6 +3,11 @@
|
||||
*
|
||||
* 作者: 杨海洋
|
||||
* 日期: 2024-01-03
|
||||
*
|
||||
******************************************************************************
|
||||
* 1、免考项目参数设置:systemparm表: NO1=1并且TXT3=1的是免考的,NO2是项目代码
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SYSPARMTABLE_H
|
||||
|
||||
@ -147,7 +147,7 @@ class JUDGE_API SysSetTable : public IDBTable
|
||||
|
||||
SYSSET_DECLARE(19, type_array, ":"); //夜间考试考试时间
|
||||
SYSSET_DECLARE(211); //考试地点参数
|
||||
SYSSET_DECLARE(301, type_array2, "^", ","); //条件1:档位,车速,持续时间,结束标志(0-不结束,1红闪,2黑闪),距离,^条件2:档位,车速,持续时间,0,距离,^评判时间(0-最后评判,1-里程达到就评判)^ //示例:4,35,3,0,1,^5,50,3,0,1,^
|
||||
SYSSET_DECLARE(301, type_array, "^"); //条件1:档位,车速,持续时间,结束标志(0-不结束,1红闪,2黑闪),距离,^条件2:档位,车速,持续时间,0,距离,^评判时间(0-最后评判,1-里程达到就评判)^ //示例:4,35,3,0,1,^5,50,3,0,1,^
|
||||
SYSSET_DECLARE(303); //行驶距离限制(米) //3000
|
||||
SYSSET_DECLARE(306); //直行键(0-直行,1-加速行驶) //1
|
||||
SYSSET_DECLARE(307); //只考一次的项目 //5,15,16
|
||||
|
||||
@ -59,6 +59,7 @@ ErrorCode ExamCarSub2::examGoonExam()
|
||||
{
|
||||
if(m_stuInfo.ddxk)
|
||||
{
|
||||
m_disForward = m_stuInfo.yklc;
|
||||
for(size_t i = 0; i < m_stuInfo.ykxm.size(); i++)
|
||||
{
|
||||
int itemNo = m_stuInfo.ykxm[i];
|
||||
@ -365,7 +366,7 @@ ISub2JudgeItem* ExamCarSub2::readEnterItem()
|
||||
//必须是前进状态进项目
|
||||
if(historyMoveState() != moveForward)
|
||||
{
|
||||
logdebug("not moveForward move=%d", m_cg->move);
|
||||
//logdebug("not moveForward move=%d", m_cg->move);
|
||||
return nullptr;
|
||||
}
|
||||
for(auto k = m_itemsAll.begin(); k != m_itemsAll.end(); k++)
|
||||
@ -389,7 +390,7 @@ ISub2JudgeItem* ExamCarSub2::readEnterItem()
|
||||
if(examItem->isFlagEnd())
|
||||
{
|
||||
//已经考过,略过
|
||||
logdebug("exam already itemNo=%d.", itemEnter->itemNo());
|
||||
//logdebug("exam already itemNo=%d.", itemEnter->itemNo());
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -49,6 +49,9 @@ public: //for IExamCarSub3 override
|
||||
|
||||
virtual bool isExamAlready(ExamItemCode ItemNo) const override { return m_ctl.PassedItem.find(ItemNo) != m_ctl.PassedItem.end();};
|
||||
|
||||
virtual bool isMileage() const override;
|
||||
|
||||
|
||||
virtual TCar* getTCar() override { return &m_car; }
|
||||
virtual TTestCtl* getTTestCtl() override { return &m_ctl; }
|
||||
|
||||
@ -73,6 +76,14 @@ public: //for IExamCarSub3 override
|
||||
virtual bool getyjdg_road_code_kf() const override { return m_pub.yjdg_road_code_kf; }
|
||||
|
||||
protected:
|
||||
void dealOffset(); //行驶距离补偿
|
||||
|
||||
void dealItemNoIDEndItem();
|
||||
void dealItemNoIDEnd14Jjdw();
|
||||
|
||||
//行驶方向,1正向行驶,-1逆向行驶
|
||||
DriveDirType driveDirection(const TModelLine* lane);
|
||||
|
||||
bool Init_KM3_Global(std::string& sError);
|
||||
void UpdateCarParmWithSystemParm();
|
||||
bool Init_KM3_Special();
|
||||
@ -160,6 +171,7 @@ private:
|
||||
int E_1Deg2Cm = 0; //经度1度=多少厘米
|
||||
const int N_1Deg2Cm = 11110792; //北纬1度=X cm
|
||||
|
||||
bool m_disOffset = false;
|
||||
//TCarStatus m_carStatus;
|
||||
|
||||
//int64 m_ContinuedStartTime = 0; //续考的上次开始考试时间 20150205
|
||||
|
||||
@ -175,6 +175,15 @@ bool ExamSensor::convertDatas(TChuanGan* cg)
|
||||
|
||||
TGpsInfo& gps = cg->real.gps;
|
||||
gps.errorFlag = true;
|
||||
|
||||
//测试是否逆向行驶
|
||||
//static int s_count = 0;
|
||||
//int ny = s_count++ % 10;
|
||||
//if(ny < 5)
|
||||
//{
|
||||
// gps.hxj += 180.0;
|
||||
//}
|
||||
|
||||
//航向角(默认是按诺瓦泰的数据格式定义的,所以要加上180度) 1:天宝(北云)/C1 2:诺瓦泰
|
||||
if(gps.bklx == boardTypeTB)
|
||||
{
|
||||
@ -290,15 +299,16 @@ bool ExamSensor::calcCarBody(TChuanGan* cg)
|
||||
int x = 0, y = 0;
|
||||
GpsMath::calcEastAndNorthDistanceCM(m_basePoint, ps[II(33)], m_basePoint.gc, x, y);
|
||||
|
||||
if(cg->real.gps.rtkEnabled)
|
||||
TGpsInfo& gps = cg->real.gps;
|
||||
if(gps.rtkEnabled && gps.jd > 1 && gps.wd > 1)
|
||||
{
|
||||
cg->real.gps.ai_gps = Pointi(x, y);
|
||||
gps.ai_gps = Pointi(x, y);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(m_car->historyCount() > 0)
|
||||
{
|
||||
cg->real.gps.ai_gps = m_car->historyAiGps(); //20240702 yhy
|
||||
gps.ai_gps = m_car->historyAiGps(); //20240702 yhy
|
||||
//return false; //这里不能返回false 第一帧数据就是非差分状态?如果做模拟灯光的时候一直没差分进不了项目了
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,7 +45,8 @@ int ExamService::examJudgeInit(const char* data, int len)
|
||||
//logdebug("MemorySpace [spaceTotal=%lld MB] [spaceFree=%lld MB], [spaceAvailable=%lld MB], [spaceSelf=%lld MB]",
|
||||
// space.spaceTotal, space.spaceFree, space.spaceAvailable, space.spaceSelf);
|
||||
|
||||
logdebug("call examJudgeInit.");
|
||||
//logdebug("call examJudgeInit.");
|
||||
logtrace("exam-init version=%s.", JUDGE_VERSION_INFO);
|
||||
if(m_init)
|
||||
{
|
||||
//已经初始化过了,不能重复初始化
|
||||
@ -105,7 +106,7 @@ int ExamService::examJudgeInit(const char* data, int len)
|
||||
return QE(code);
|
||||
}
|
||||
m_init = true;
|
||||
loginfo("exam-init success version=%s.", JUDGE_VERSION_INFO);
|
||||
logtrace("exam-init success kchp=%s,kchm=%d,kscx=%s.", m_initInfo->kchp.c_str(), m_initInfo->kchm, m_initInfo->kscx.c_str());
|
||||
return QE(codeSuccess);
|
||||
}
|
||||
|
||||
|
||||
@ -43,6 +43,7 @@ int IExamCar::examJudgeBeginExam(const char* data, int len)
|
||||
{
|
||||
HELP_COST_TIME("");
|
||||
IAutoLock(m_mtx);
|
||||
logtrace("begin-exam version=%s", JUDGE_VERSION_INFO);
|
||||
if(m_examState != examStateEnd)
|
||||
{
|
||||
logerror("error begin exam not end.");
|
||||
@ -489,17 +490,17 @@ void IExamCar::doExamDatagram(Package* pkg)
|
||||
|
||||
}
|
||||
|
||||
void IExamCar::calcDistance()
|
||||
int IExamCar::calcDistance()
|
||||
{
|
||||
if(m_history->size() <= 1)
|
||||
{
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
const Pointi& h = historyAiGps(1);
|
||||
const Pointi& c = historyAiGps();
|
||||
if( (c.x == 0 && c.y == 0) || (h.x == 0 && h.y == 0) )
|
||||
{
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
double x = h.x - c.x;
|
||||
double y = h.y - c.y;
|
||||
@ -517,11 +518,12 @@ void IExamCar::calcDistance()
|
||||
|
||||
if(m_cg->move == moveForward)
|
||||
{
|
||||
int gear = m_cg->real.sensor.dw;
|
||||
int gear = m_cg->real.sensor.dw; //只有科三用到
|
||||
m_disGears[gear] += a;
|
||||
}
|
||||
|
||||
//logdebug("move=%d,dis=%dCM", state, a);
|
||||
return a;
|
||||
}
|
||||
|
||||
int64 IExamCar::GetCurrentTime2() const
|
||||
|
||||
@ -127,7 +127,7 @@ public:
|
||||
//执行处理每一帧的GPS传感数据
|
||||
virtual void doExamDatagram(Package* pkg);
|
||||
//前进 后退 距离计算
|
||||
virtual void calcDistance();
|
||||
virtual int calcDistance();
|
||||
|
||||
//当前系统时间(回放取的事GPS时间)
|
||||
virtual int64 GetCurrentTime2() const;
|
||||
@ -219,6 +219,8 @@ public:
|
||||
virtual bool itemsSomeExaming2(ExamItemCode itemno) const = 0;
|
||||
//是否已考
|
||||
virtual bool isExamAlready(ExamItemCode ItemNo) const = 0;
|
||||
//里程是否满足
|
||||
virtual bool isMileage() const = 0;
|
||||
|
||||
|
||||
//获取TCar
|
||||
|
||||
@ -70,7 +70,7 @@ private:
|
||||
const int m_channel = 4;
|
||||
const unsigned char m_default = 255; //默认底色 白色
|
||||
bool m_showVersion = true;
|
||||
bool m_showTime = false;
|
||||
bool m_showTime = true;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -373,6 +373,8 @@ struct TSub3Item08Gjzt //公交站台 8
|
||||
bool Must_JianSu_Flag = false; //必须减速标志
|
||||
bool EndXMJL_Flag = false; //结束项目距离标志
|
||||
int WavKind = 0; //SysSet[512]-->3 学校、公交、人行横道模拟项目是否语音标识,0:不需要 1:需要 2024-03-18 yhy 增加
|
||||
|
||||
int s509_10 = 0;
|
||||
#ifdef JUDGE_USE_INSPECT
|
||||
bool inspectJSC = false; //完成脚刹车动作
|
||||
#endif
|
||||
|
||||
@ -33,6 +33,40 @@ void Sub2Judge00Dcrk::dealDrawItem()
|
||||
drawGpsSign(m_model->F8(), "F8", false);
|
||||
drawGpsSign(m_model->F9(), "F9", false);
|
||||
|
||||
#ifdef JUDGE_USE_NICE
|
||||
|
||||
if(pureCarPointInItemArea(II(33)))
|
||||
{
|
||||
TChuanGan* cg = m_car->historyChuanGan();
|
||||
nice(cg->body.b1_a, cg->body.b2_a, RGB_RED);
|
||||
nice(cg->body.points_a[II(8)], cg->body.points_a[II(18)], RGB_RED);
|
||||
|
||||
TGPSPoint z1 = GpsMath::GetChuiZhu(cg->body.b1_a, cg->body.points_a[II(6)], cg->body.points_a[II(8)]);
|
||||
nice(cg->body.b1_a, z1, RGB_PURPLE);
|
||||
|
||||
TGPSPoint z2 = GpsMath::GetChuiZhu(cg->body.points_a[II(25)], m_model->P3(),m_model->P4());
|
||||
nice(cg->body.points_a[II(25)], z2, RGB_RED);
|
||||
|
||||
TGPSPoint z3 = GpsMath::GetChuiZhu(cg->body.points_a[II(27)], m_model->P3(),m_model->P4());
|
||||
nice(cg->body.points_a[II(27)], z3, RGB_RED);
|
||||
|
||||
nice(cg->body.points_a[II(1)], cg->body.points_a[II(13)], RGB_GREEN);
|
||||
TGPSPoint z4 = GpsMath::GetChuiZhu(cg->body.points_a[II(13)], m_model->P4(), m_model->P5());
|
||||
nice(cg->body.points_a[II(13)], z4, RGB_RED);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
void Sub2Judge00Dcrk::nice(const TGPSPoint& p1, const TGPSPoint& p2, const RgbColor& color)
|
||||
{
|
||||
int cm = GpsMath::calcGpsDistanceCM(p1,p2);
|
||||
TGPSPoint c = GpsMath::calcCenterPoint(p1,p2);
|
||||
char buf[32] = {0};
|
||||
SafeSprintf(buf, sizeof(buf), "%dcm", cm);
|
||||
drawGpsLine(p1, p2, false, color, 16);
|
||||
drawGpsText(c, buf, color, 16);
|
||||
}
|
||||
|
||||
void Sub2Judge00Dcrk::dealJudgeItem()
|
||||
|
||||
@ -38,6 +38,8 @@ private:
|
||||
//判断考试用时是否超时
|
||||
bool examTimeout();
|
||||
|
||||
void nice(const TGPSPoint& p1, const TGPSPoint& p2, const RgbColor& color);
|
||||
|
||||
private:
|
||||
enum{L1=1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11};
|
||||
int64 m_dcrkTime = 0; //开始时间(从倒库开始计时)
|
||||
|
||||
@ -38,7 +38,7 @@ bool Sub3Judge01Sczb::dealJudgeEnter()
|
||||
const std::vector<std::string>& s512 = TableSysSet->asArray512();
|
||||
std::string Temp512_9 = s512.size() > 8 && s512[8] != "" ? s512[8].c_str() : "";
|
||||
|
||||
const std::vector<std::string>& s512_9 = Tools::split(Temp512_9, "^");
|
||||
const std::vector<std::string> s512_9 = Tools::split(Temp512_9, "^");
|
||||
m_itemv.newtype = s512_9.size() > 0 && s512_9[0] != "" ? std::atoi(s512_9[0].c_str()) : 0;
|
||||
m_itemv.time_tishi = s512_9.size() > 1 && s512_9[1] != "" ? std::atoi(s512_9[1].c_str()) : 0;
|
||||
m_itemv.time_raoche = s512_9.size() > 2 && s512_9[2] != "" ? std::atoi(s512_9[2].c_str()) : 0;
|
||||
@ -495,6 +495,18 @@ void Sub3Judge01Sczb::AddCSBData(CsbType csb)
|
||||
if(m_csb.empty())
|
||||
{
|
||||
m_csb.push_back(csb);
|
||||
|
||||
std::string sou;
|
||||
switch(csb)
|
||||
{
|
||||
case CsbType::ZQ: sou = sound::sub3_401001; break;
|
||||
case CsbType::ZH: sou = sound::sub3_401002; break;
|
||||
case CsbType::YH: sou = sound::sub3_401003; break;
|
||||
case CsbType::YQ: sou = sound::sub3_401004; break;
|
||||
default: break;
|
||||
}
|
||||
//ToDo:语音提示,
|
||||
m_car->createEventSound({itemNo(), sou});
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -20,7 +20,7 @@ bool Sub3Judge02Qbxx::dealJudgeEnter()
|
||||
//10s内未起步只评判第一次^第一次起步以打左方向灯开始计时^
|
||||
const std::vector<std::string>& s502 = TableSysSet->asArray502();
|
||||
std::string str = s502.size() > 7 ? s502[7] : "";
|
||||
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_2 = ss.size() > 1 && ss[1] != "" ? std::atoi(ss[1].c_str()) : 0; //StrToIntDef(GetDotStr(2, tempstr + '^', '^'), 0);
|
||||
|
||||
@ -219,10 +219,10 @@ void Sub3Judge02Qbxx::nogo_timeout()
|
||||
{
|
||||
const TSensorInfo& sor2 = m_car->historySensor(2);
|
||||
|
||||
if((sor.dw != 0 && sor1.dw != 0 && sor.dw != sor2.dw && sor.dw >= 1 && sor.dw != 9) ||
|
||||
if((sor.dw != 0 && sor1.dw != 0 && sor.dw != sor2.dw && sor.dw >= 1 && sor.dw != 9 && sor.dw != 10) ||
|
||||
(sor.ssc == SNOT && sor1.ssc == SYES))
|
||||
{
|
||||
if(sor.dw >= 1 && sor.dw != 9 && sor.ssc == SNOT)
|
||||
if(sor.dw >= 1 && sor.dw != 9 && sor.dw != 10 && sor.ssc == SNOT)
|
||||
{
|
||||
m_itemv.ZhunBeiQiBuTK = cg->tkCnt;
|
||||
}
|
||||
|
||||
@ -390,10 +390,10 @@ void Sub3Judge03Zxxs::dealJudgeItem()
|
||||
}
|
||||
|
||||
char buf[256] = {0};
|
||||
SafeSprintf(buf, sizeof(buf), XCharacter("%s-->St:%d,边线参考距离=%d,缓冲距离=%d,距离偏差=%d,项目距离=%d,已行驶=%d,角度变化=%0.2f"),
|
||||
SafeSprintf(buf, sizeof(buf), XCharacter("%s-->St:%d,边线参考距离=%d,缓冲距离=%d,距离偏差=%d-%d,项目距离=%d,已行驶=%d,角度变化=%0.2f"),
|
||||
m_itemv.Kind == 0 ? "右边线" : "左边线",
|
||||
Temp_Gps_Itemno1,
|
||||
m_itemv.Init_D,m_itemv.parm_hcjl,
|
||||
m_itemv.Init_D,m_itemv.parm_hcjl,m_itemv.Gps_Offset,
|
||||
(int)std::abs(m_itemv.Kind == 0 ? RightJL0 - m_itemv.Init_D : LeftJL0 - m_itemv.Init_D),
|
||||
m_itemv.parm_xmjl,cg->ai_ljjl - m_itemv.Init_LJJL,Jdbh
|
||||
);
|
||||
|
||||
@ -37,13 +37,15 @@ bool Sub3Judge08Gjzt::dealJudgeEnter()
|
||||
{
|
||||
m_itemv.Temp_XS = 30;
|
||||
}
|
||||
//是否评判脚刹车
|
||||
//是否评判脚刹车 1速度+刹车同时满足 其他只判刹车
|
||||
m_itemv.Judge_JSC = s509.size() > 5 && s509[5] != "" ? std::atoi(s509[5].c_str()) == 1 : false;
|
||||
//是否必须减速
|
||||
m_itemv.Must_JianSu_Flag = s509.size() > 7 && s509[7] != "" ? std::atoi(s509[7].c_str()) == 1 : false;
|
||||
//默认:需要评判减速相关的
|
||||
m_itemv.JudgeKind = 1;
|
||||
|
||||
m_itemv.s509_10 = s509.size() > 9 && s509[9] != "" ? std::atoi(s509[9].c_str()) : 0;
|
||||
|
||||
if(ksdd == siteof::nj || ksdd == siteof::njdckm3)
|
||||
{
|
||||
//ToDo:语音播报-->通过公交站台
|
||||
@ -118,7 +120,7 @@ void Sub3Judge08Gjzt::dealJudgeItem()
|
||||
//SysSet[342]:车上是否能进行人工操作(0-能扣分和进项目 1-不能人工评判 2-可以人工评判 3-都不能)
|
||||
//如果是人工扣分或者人工评判的,自动评判就不触发 需要评判减速相关的
|
||||
const std::string& s342 = TableSysSet->get342();
|
||||
if(s342 == "0" || s342 == "2")
|
||||
if(s342 == "0" || s342 == "2" || m_itemv.s509_10 == 1)
|
||||
{
|
||||
m_itemv.JudgeKind = 0; //科研所规定,公交站台当前车辆的车道号在3车道及以上的,不需要评判减速相关的
|
||||
}
|
||||
@ -209,9 +211,11 @@ void Sub3Judge08Gjzt::dealJudgeItem()
|
||||
JUDGE_MARK_SUB3(8, "03", true);
|
||||
}
|
||||
TTestCtl* ctl = m_car->getTTestCtl();
|
||||
|
||||
//新的减速规则
|
||||
if(ctl->JianSuLeiXing == 2)
|
||||
{
|
||||
//500-13为2,按科研所规则判断是否减速
|
||||
if(m_itemv.JudgeKind == 1) //需要评判减速相关的
|
||||
{
|
||||
#ifdef JUDGE_USE_INSPECT
|
||||
@ -251,6 +255,7 @@ void Sub3Judge08Gjzt::dealJudgeItem()
|
||||
{
|
||||
if(m_itemv.Judge_JSC == true)
|
||||
{
|
||||
// 509-6为1,同时满足刹车和速度小于阈值(509-5);
|
||||
if(m_itemv.Finish_JSC == false || m_itemv.Finish_JianSu == false)
|
||||
{
|
||||
JUDGE_MARK_SUB3(8, "02", false);
|
||||
@ -258,9 +263,21 @@ void Sub3Judge08Gjzt::dealJudgeItem()
|
||||
}
|
||||
else
|
||||
{
|
||||
if(m_itemv.Finish_JianSu == false)
|
||||
if(ctl->JianSuLeiXing == 1)
|
||||
{
|
||||
JUDGE_MARK_SUB3(8, "02", false);
|
||||
//500-13为1,刹车和速度小于阈值,满足其中一个就不扣分;
|
||||
if(m_itemv.Finish_JSC == false && m_itemv.Finish_JianSu == false)
|
||||
{
|
||||
JUDGE_MARK_SUB3(8, "02", false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//5、无上述参数,只判断刹车
|
||||
if(m_itemv.Finish_JSC == false)
|
||||
{
|
||||
JUDGE_MARK_SUB3(8, "02", false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -68,6 +68,13 @@
|
||||
*
|
||||
* 快进到1840帧,然后步进跟踪项目。
|
||||
*
|
||||
* 公交判断规则:
|
||||
* 1、509-8不为1 and 当前车道大于2,and (342参数为0,或为2,509-10为1):不扣分
|
||||
* 2、500-13为2,按科研所规则判断是否减速;
|
||||
* 3、509-6为1,同时满足刹车和速度小于阈值(509-5);
|
||||
* 4、500-13为1,刹车和速度小于阈值,满足其中一个就不扣分;
|
||||
* 5、无上述参数,只判断刹车
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SUB3JUDGE08GJZT_H
|
||||
|
||||
@ -375,7 +375,7 @@ void Sub3Judge10Ccxx::dealJudgeItem()
|
||||
m_car->setChaoChe_Start_TM(0);
|
||||
//ToDo:语音播报:取消变更车道或者取消超车
|
||||
m_car->createEventCancelItem({m_exam->ItemNo, ""});
|
||||
m_car->createEventSound({itemNo(), sound::sub3_414004});
|
||||
//m_car->createEventSound({itemNo(), sound::sub3_414004});
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -396,7 +396,7 @@ void Sub3Judge10Ccxx::dealJudgeItem()
|
||||
m_car->setChaoChe_Start_TM(0);
|
||||
//ToDo:语音播报:取消变更车道或者取消超车
|
||||
m_car->createEventCancelItem({m_exam->ItemNo, ""});
|
||||
m_car->createEventSound({itemNo(), sound::sub3_414004});
|
||||
//m_car->createEventSound({itemNo(), sound::sub3_414004});
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -712,8 +712,8 @@ void Sub3Judge11Kbtc::DoStatus_3()
|
||||
//特殊地点业务翻译
|
||||
TTestCtl* ctl = m_car->getTTestCtl();
|
||||
|
||||
const std::vector<std::vector<std::string>>& s301 = TableSysSet->asArray2_301();
|
||||
const std::vector<std::string>& s301_1 = s301.size() > 0 ? s301[0] : std::vector<std::string>();
|
||||
const std::vector<std::string>& s301 = TableSysSet->asArray301();
|
||||
const std::vector<std::string> s301_1 = s301.size() > 0 ? Tools::split(s301[0], ",") : std::vector<std::string>();
|
||||
const std::string s301_1_3 = s301_1.size() > 3 && s301_1[3] != "" ? s301_1[3] : "";
|
||||
if(!ctl->Dw_Cs_Ok1 && s301_1_3 != "0" && ctl->dw_kf_sj == 0 && ksdd == siteof::zjwz)
|
||||
{
|
||||
@ -1295,24 +1295,24 @@ void Sub3Judge11Kbtc::Judge_KBTC_YaXian()
|
||||
const std::string& s411 = TableSysSet->get411();
|
||||
if(s411 != "1")
|
||||
{
|
||||
RightJL0_RF = RTKKM3_0.Body_RF_ToRightEdge;
|
||||
RightJL1_RF = RTKKM3_1.Body_RF_ToRightEdge;
|
||||
RightJL2_RF = RTKKM3_2.Body_RF_ToRightEdge;
|
||||
RightJL0_RF = RTKKM3_0.Body_RF_ToBaseLine;
|
||||
RightJL1_RF = RTKKM3_1.Body_RF_ToBaseLine;
|
||||
RightJL2_RF = RTKKM3_2.Body_RF_ToBaseLine;
|
||||
|
||||
|
||||
RightJL0_RB = RTKKM3_0.Body_RB_ToRightEdge;
|
||||
RightJL1_RB = RTKKM3_1.Body_RB_ToRightEdge;
|
||||
RightJL2_RB = RTKKM3_2.Body_RB_ToRightEdge;
|
||||
RightJL0_RB = RTKKM3_0.Body_RB_ToBaseLine;
|
||||
RightJL1_RB = RTKKM3_1.Body_RB_ToBaseLine;
|
||||
RightJL2_RB = RTKKM3_2.Body_RB_ToBaseLine;
|
||||
}
|
||||
else
|
||||
{
|
||||
RightJL0_RF = RTKKM3_0.Wheel_RF_ToRightEdge;
|
||||
RightJL1_RF = RTKKM3_1.Wheel_RF_ToRightEdge;
|
||||
RightJL2_RF = RTKKM3_2.Wheel_RF_ToRightEdge;
|
||||
RightJL0_RF = RTKKM3_0.Wheel_RF_ToBaseLine;
|
||||
RightJL1_RF = RTKKM3_1.Wheel_RF_ToBaseLine;
|
||||
RightJL2_RF = RTKKM3_2.Wheel_RF_ToBaseLine;
|
||||
|
||||
RightJL0_RB = RTKKM3_0.Wheel_RB_ToRightEdge;
|
||||
RightJL1_RB = RTKKM3_1.Wheel_RB_ToRightEdge;
|
||||
RightJL2_RB = RTKKM3_2.Wheel_RB_ToRightEdge;
|
||||
RightJL0_RB = RTKKM3_0.Wheel_RB_ToBaseLine;
|
||||
RightJL1_RB = RTKKM3_1.Wheel_RB_ToBaseLine;
|
||||
RightJL2_RB = RTKKM3_2.Wheel_RB_ToBaseLine;
|
||||
}
|
||||
|
||||
//ZXD_JL0 := (RightJL0_RF + RightJL0_RB) div 2;
|
||||
|
||||
@ -256,7 +256,7 @@ void Sub3Judge14Jjdw::CSH_Itmv14()
|
||||
std::string str2 = Str.size() > 1 ? Str[1] : ""; //GetDotStr(2, Str + ':', ':');
|
||||
|
||||
int dw = std::atoi(str1.c_str());
|
||||
const std::vector<std::string>& stmp = Tools::split(str2, "-");
|
||||
const std::vector<std::string> stmp = Tools::split(str2, "-");
|
||||
m_itemv.DwCs_Range[dw].Low_Cs = stmp.size() > 0 ? std::atoi(stmp[0].c_str()) : 0;
|
||||
m_itemv.DwCs_Range[dw].High_Cs = stmp.size() > 1 ? std::atoi(stmp[1].c_str()) : 0;
|
||||
}
|
||||
|
||||
@ -159,22 +159,21 @@ void Sub3Judge20Comm::Init_ZongHe()
|
||||
//自动靠边停车参数
|
||||
//SysSet[319]:里程不够不报靠边停车(0-否 1-是 2-必考项目完成,并且里程满足要求)
|
||||
//SysSet[415]:自动报靠边停车(启用标记^全部结束n米报^)启用标记:0-否 1-是 319参数为2有效
|
||||
|
||||
const std::string& s319 = TableSysSet->get319();
|
||||
if(s319 == "2")
|
||||
{
|
||||
const std::vector<std::string>& s415 = TableSysSet->asArray415();
|
||||
m_itemvCJH.bZdKbTc = s415.size() > 0 && s415[0] == "1"; //getdotstr(1, sysset[415] + '^', '^') = '1');
|
||||
m_itemvCJH.ZdKbTcJl = s415.size() > 1 && s415[1] != "" ? std::atoi(s415[1].c_str()) : 1; //strtointdef(getdotstr(2, sysset[415] + '^', '^'), 1);
|
||||
m_itemvCJH.ZdKbTcJl = s415.size() > 1 && s415[1] != "" ? std::atoi(s415[1].c_str()) : 1; //strtointdef(getdotstr(2, sysset[415] + '^', '^'), 1);
|
||||
m_itemvCJH.KbTcJl = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_itemvCJH.bZdKbTc = false;
|
||||
m_itemvCJH.ZdKbTcJl = 1;
|
||||
m_itemvCJH.KbTcJl = -1;
|
||||
}
|
||||
//溜车变量初始化
|
||||
|
||||
//SysSet[529]:模拟灯光是否需要人脸验证
|
||||
//说明:这个参数目前我没有实际的用到
|
||||
m_sfyz_state = 0;
|
||||
@ -213,7 +212,7 @@ void Sub3Judge20Comm::Init_ZongHe()
|
||||
if(str2 == "") continue;
|
||||
|
||||
int dw = std::atoi(str1.c_str());
|
||||
const std::vector<std::string>& stmp = Tools::split(str2, "-");
|
||||
const std::vector<std::string> stmp = Tools::split(str2, "-");
|
||||
itemv14->DwCs_Range[dw].Low_Cs = stmp.size() > 0 ? std::atoi(stmp[0].c_str()) : 0;
|
||||
itemv14->DwCs_Range[dw].High_Cs = stmp.size() > 1 ? std::atoi(stmp[1].c_str()) : 100;
|
||||
}
|
||||
@ -243,7 +242,7 @@ void Sub3Judge20Comm::Init_ZongHe()
|
||||
//评判半联动用的,比如:前进状态下,离合器连续30秒
|
||||
const std::vector<std::string>& s500 = TableSysSet->asArray500();
|
||||
std::string s500_1 = s500.size() > 0 ? s500[0] : "";
|
||||
const std::vector<std::string>& ss500_1 = Tools::split(s500_1, "^");
|
||||
const std::vector<std::string> ss500_1 = Tools::split(s500_1, "^");
|
||||
m_itemvCJH.lhqxs = ss500_1.size() > 0 && ss500_1[0] != "" ? std::atoi(ss500_1[0].c_str()) : 30;
|
||||
|
||||
//离合器距离
|
||||
@ -260,14 +259,14 @@ void Sub3Judge20Comm::Init_ZongHe()
|
||||
m_itemvCJH.DWKF_SJ = (s500.size() > 3 && s500[3] != "" ? std::atoi(s500[3].c_str()) : 20) * SECOND;
|
||||
//加速发动机转速阀值^加速发动机变化倍数^
|
||||
std::string Str = s500.size() > 4 && s500[4] != "" ? s500[4] : "";
|
||||
const std::vector<std::string>& s500_4 = Tools::split(Str, "^");
|
||||
const std::vector<std::string> s500_4 = Tools::split(Str, "^");
|
||||
m_itemvCJH.KongYouMen_FDJ_YZ = s500_4.size() > 0 && s500_4[0] != "" ? std::atoi(s500_4[0].c_str()) : 3000;
|
||||
//变化倍数
|
||||
m_itemvCJH.KonbYouMen_FDJ_BS = s500_4.size() > 1 && s500_4[1] != "" ? std::atoi(s500_4[1].c_str()) : 3;
|
||||
|
||||
//转向灯不关闭距离^项目结束后不关闭时间
|
||||
Str = s500.size() > 5 && s500[5] != "" ? s500[5] : "";
|
||||
const std::vector<std::string>& s500_5 = Tools::split(Str, "^");
|
||||
const std::vector<std::string> s500_5 = Tools::split(Str, "^");
|
||||
|
||||
m_itemvCJH.ZXD_BGB_JL = s500_5.size() > 0 && s500_5[0] != "" ? std::atoi(s500_5[0].c_str()) : 3000;
|
||||
m_itemvCJH.ZXD_BGB_SJ = s500_5.size() > 1 && s500_5[1] != "" ? std::atoi(s500_5[1].c_str()) : 0;
|
||||
@ -341,8 +340,8 @@ void Sub3Judge20Comm::Init_ZongHe()
|
||||
//条件1:档位,车速,持续时间,结束标志(0-不结束,1红闪,2黑闪),距离,^
|
||||
//条件2:档位,车速,持续时间,0,距离,^评判时间(0-最后评判,1-里程达到就评判)^
|
||||
|
||||
const std::vector<std::vector<std::string>>& s301 = TableSysSet->asArray2_301();
|
||||
const std::vector<std::string>& s301_1 = s301.size() > 0 ? s301[0] : std::vector<std::string>();
|
||||
const std::vector<std::string>& s301 = TableSysSet->asArray301();
|
||||
const std::vector<std::string> s301_1 = s301.size() > 0 ? Tools::split(s301[0], ",") : std::vector<std::string>();
|
||||
if(!s301_1.empty())
|
||||
{
|
||||
m_itemvCJH.dw_cs_dw1 = s301_1.size() > 0 && s301_1[0] != "" ? std::atoi(s301_1[0].c_str()) : 1;
|
||||
@ -358,7 +357,7 @@ void Sub3Judge20Comm::Init_ZongHe()
|
||||
m_itemvCJH.dw_cs_sl1 = 0;
|
||||
}
|
||||
|
||||
const std::vector<std::string>& s301_2 = s301.size() > 1 ? s301[1] : std::vector<std::string>();
|
||||
const std::vector<std::string>& s301_2 = s301.size() > 1 ? Tools::split(s301[1], ",") : std::vector<std::string>();
|
||||
if(!s301_2.empty())
|
||||
{
|
||||
m_itemvCJH.dw_cs_dw2 = s301_2.size() > 0 && s301_2[0] != "" ? std::atoi(s301_2[0].c_str()) : 1;
|
||||
@ -375,9 +374,9 @@ void Sub3Judge20Comm::Init_ZongHe()
|
||||
m_itemvCJH.dw_cs_sl2 = 0;
|
||||
}
|
||||
|
||||
std::vector<std::string> s301_3 = s301.size() > 2 ? s301[2] : std::vector<std::string>();
|
||||
std::string s301_3 = s301.size() > 2 ? s301[2] : "";
|
||||
//301评判时间,0-结束考试时评判,1-里程达标就评判 100-表示已评判过 20140630 //yhyflag
|
||||
ctl->dw_kf_sj = s301_3.size() > 0 && s301_3[0] != "" ? std::atoi(s301_3[0].c_str()) : 1; // StrToIntdef(GetDotStr(3, Sysset[301] + '^', '^'), 1);
|
||||
ctl->dw_kf_sj = s301_3 != "" ? std::atoi(s301_3.c_str()) : 0; // StrToIntdef(GetDotStr(3, Sysset[301] + '^', '^'), 1);
|
||||
|
||||
//SysSet[530]:环境感知相关参数(原封不动翻译即可,前期用不到,赞不考虑)
|
||||
const std::vector<std::string>& s530 = TableSysSet->asArray530();
|
||||
@ -385,7 +384,7 @@ void Sub3Judge20Comm::Init_ZongHe()
|
||||
m_itemvCJH.sslkfxp_sj = s530.size() > 0 && s530[0] != "" ? std::atoi(s530[0].c_str()) : 15; //StrToIntdef(GetDotStr(1, Sysset[530] + '^', '^'), 15);
|
||||
//单手离开方向盘时间秒,右边距离偏差cm
|
||||
const std::string& ss530 = s530.size() > 1 && s530[1] != "" ? s530[1] : "";
|
||||
const std::vector<std::string>& s530_2 = Tools::split(ss530, ",");
|
||||
const std::vector<std::string> s530_2 = Tools::split(ss530, ",");
|
||||
|
||||
m_itemvCJH.dslkfxp_sj = s530_2.size() > 0 && s530_2[0] != "" ? std::atoi(s530_2[0].c_str()) : 60;
|
||||
m_itemvCJH.dslkfxp_jlpc = s530_2.size() > 1 && s530_2[1] != "" ? std::atoi(s530_2[1].c_str()) : 30;
|
||||
@ -567,7 +566,7 @@ void Sub3Judge20Comm::Init_ZongHe()
|
||||
std::string str2 = s394i.size() > 1 ? s394i[1] : ""; //GetDotStr(2, Str + ':', ':');
|
||||
|
||||
int dw = std::atoi(str1.c_str());
|
||||
const std::vector<std::string>& stmp = Tools::split(str2, "-");
|
||||
const std::vector<std::string> stmp = Tools::split(str2, "-");
|
||||
m_itemvCJH.DwCs_Range[dw].Low_Cs = stmp.size() > 0 ? std::atoi(stmp[0].c_str()) : 0;
|
||||
m_itemvCJH.DwCs_Range[dw].High_Cs = stmp.size() > 1 ? std::atoi(stmp[1].c_str()) : 0;
|
||||
}
|
||||
@ -756,10 +755,15 @@ void Sub3Judge20Comm::CallMoNiDengGuang()
|
||||
return; //屏蔽模拟灯光
|
||||
#endif
|
||||
|
||||
TKM3Item* item01 = m_car->findExamItem(Sub3ItemType01Sczb); //上车准备
|
||||
if(item01 && item01->Item_Color != itemStateHg && item01->Item_Color != itemStateBhg)
|
||||
const std::string& s386 = TableSysSet->get386();
|
||||
//模拟灯光:参数386=0,开始考试后,就触发模拟灯光
|
||||
if(s386 != "0")
|
||||
{
|
||||
return;
|
||||
TKM3Item* item01 = m_car->findExamItem(Sub3ItemType01Sczb); //上车准备
|
||||
if(item01 && item01->Item_Color != itemStateHg && item01->Item_Color != itemStateBhg)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
TKM3Item* item41 = m_car->findExamItem(Sub3ItemType41Mndg);
|
||||
@ -782,7 +786,6 @@ void Sub3Judge20Comm::CallMoNiDengGuang()
|
||||
const TSensorInfo& sor3 = his3->real.sensor;
|
||||
|
||||
const std::string& ksdd = TableSysSet->get211();
|
||||
const std::string& s386 = TableSysSet->get386();
|
||||
const std::string& s322 = TableSysSet->get322();
|
||||
|
||||
TCar* tcar = m_car->getTCar();
|
||||
@ -2464,7 +2467,7 @@ void Sub3Judge20Comm::Judge_LianXuBianDao()
|
||||
//获取连续变道超车参数
|
||||
std::string Temp = s512.size() > 1 && s512[1] != "" ? s512[1] : "";
|
||||
|
||||
const std::vector<std::string>& ss = Tools::split(Temp, "^");
|
||||
const std::vector<std::string> ss = Tools::split(Temp, "^");
|
||||
|
||||
//0:abc 1:aba和abc都判
|
||||
ctl->LianXuBianDaoKind = ss.size() > 0 && ss[0] != "" ? std::atoi(ss[0].c_str()) : 0;
|
||||
@ -3437,9 +3440,9 @@ void Sub3Judge20Comm::Judge_BianDaoFangXiangDeng2()
|
||||
else
|
||||
{
|
||||
//标准 20180416
|
||||
if(RTKKM3.FrontPointLaneNo > 0 && RTKKM3_1.FrontPointLaneNo > 0 &&
|
||||
if(RTKKM3.FrontPointLaneNo > 0 && RTKKM3_1.FrontPointLaneNo > 0 &&
|
||||
RTKKM3.FrontPointLaneNo != RTKKM3_1.FrontPointLaneNo &&
|
||||
RTKKM3.TouchLineType > 0 && RTKKM3.TouchLineType != 6 )
|
||||
RTKKM3.TouchLineType > 0 && RTKKM3.TouchLineType != 6)
|
||||
{
|
||||
//变道判方向灯
|
||||
Tag = 0;
|
||||
@ -4354,9 +4357,16 @@ void Sub3Judge20Comm::Judge_DW_KongDang()
|
||||
//启动发动机时,挡位未至于空挡(驻车挡)
|
||||
if(sor.dh2 == SYES && sor1.dh2 == SNOT && sor2.dh2 == SNOT)
|
||||
{
|
||||
if(sor.dw_plc != 0) //(sor.dw != 0) //用原始档位无锡所
|
||||
if(sor.dw_plc != 0 && sor.dw_plc != 10) //C2自动挡10档是驻车档P档,0档是空挡 //(sor.dw != 0) //用原始档位无锡所
|
||||
{
|
||||
JUDGE_MARK_SUB3(2, "04", false);
|
||||
if(m_car->itemsSomeExaming2(Sub3ItemType02Qbxx))
|
||||
{
|
||||
JUDGE_MARK_SUB3(2, "04", false); //如果起步项目正在考就扣这个分
|
||||
}
|
||||
else
|
||||
{
|
||||
JUDGE_MARK_SUB3(20, "05", false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4602,8 +4612,11 @@ void Sub3Judge20Comm::Judge_DangWei_CS_ZS()
|
||||
const TChuanGan* his6 = m_car->historyChuanGan(6);
|
||||
//旧规则评判
|
||||
int TempCS = std::round(gps.sd);
|
||||
|
||||
const std::vector<std::string>& s507 = TableSysSet->asArray507();
|
||||
std::string lhq = s507.size() > 9 ? s507[9] : ""; //507第10个参数 设置为1不管踩没踩离合器都判,否则踩离合器不判
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
if(sor.lhq == SYES || Tools::less(std::round(gps.sd), 5) ||
|
||||
if((lhq != "1" && sor.lhq == SYES) || Tools::less(std::round(gps.sd), 5) ||
|
||||
(ksdd != siteof::nj && (cg->move != moveForward || his1->move != moveForward ||
|
||||
his2->move != moveForward || his3->move != moveForward || his4->move != moveForward ||
|
||||
his5->move != moveForward || his6->move != moveForward)))
|
||||
@ -4799,7 +4812,27 @@ void Sub3Judge20Comm::Judge_DangWei_CS_ZS()
|
||||
//24、全程次高挡评判
|
||||
void Sub3Judge20Comm::Judge_CiGaoDang()
|
||||
{
|
||||
if(m_car->allItemFinish() && m_car->isQualified()) //全程次高挡评判 KM3AllPass()
|
||||
//按照军华说的 在行驶距离达到的实际判断全程次高档 20240731
|
||||
//301 第3个^参数 1:达到行驶里程 非1靠边停车开始前 20240805
|
||||
bool timing = false; //次高档时机
|
||||
TTestCtl* ctl = m_car->getTTestCtl();
|
||||
if(ctl->dw_kf_sj == 1) //301 第3个^参数 1:达到行驶里程 非1靠边停车开始前
|
||||
{
|
||||
if(m_car->isMileage())
|
||||
{
|
||||
timing = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TKM3Item* item = m_car->findExamItem(Sub3ItemType11Kbtc);
|
||||
if(item && item->TestPro == ItemProFlagInit)
|
||||
{
|
||||
timing = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(timing)
|
||||
{
|
||||
if(m_itemvXLG.CGD_Nums == 0)
|
||||
{
|
||||
@ -4815,79 +4848,43 @@ void Sub3Judge20Comm::Judge_CiGaoDang()
|
||||
//25、自动靠边停车(重点)
|
||||
void Sub3Judge20Comm::Call_Auto_KBTC()
|
||||
{
|
||||
//SysSet[319]:里程不够不报靠边停车(0-否 1-是 2-必考项目完成,并且里程满足要求)
|
||||
//SysSet[415]:自动报靠边停车(启用标记^全部结束n米报^)启用标记:0-否 1-是 319参数为2有效
|
||||
const std::string& s319 = TableSysSet->get319();
|
||||
TCar* tcar = m_car->getTCar();
|
||||
const std::map<ExamItemCode, ISub3JudgeItem*>& all = m_car->allExamItem();
|
||||
//自动靠边停车
|
||||
if(s319 == "1" && m_car->getKsLjLc() < tcar->XSJL)
|
||||
if(s319 == "1")
|
||||
{
|
||||
return;
|
||||
if(!m_car->isMileage()) return;
|
||||
}
|
||||
if(s319 == "2")
|
||||
{
|
||||
if(m_car->getKsLjLc() < tcar->XSJL) return;
|
||||
bool ErrorFlag = false;
|
||||
for(auto it = all.begin(); it != all.end(); it++)
|
||||
if(!m_car->isMileage()) return;
|
||||
|
||||
//自动靠边停车计算
|
||||
//自动靠边停车
|
||||
if(m_itemvCJH.bZdKbTc)
|
||||
{
|
||||
TKM3Item* item = it->second->getExamItem();
|
||||
if(item->NoID == true)
|
||||
const std::map<ExamItemCode, ISub3JudgeItem*>& all = m_car->allExamItem();
|
||||
//必考项目未完成
|
||||
for(auto it = all.begin(); it != all.end(); it++)
|
||||
{
|
||||
if(item->FinishFlag == false)
|
||||
TKM3Item* item = it->second->getExamItem();
|
||||
if(item->ItemNo == Sub3ItemType11Kbtc)
|
||||
{
|
||||
m_car->KM3EndItem(item->ItemNo);
|
||||
ErrorFlag = true;
|
||||
if(item->Item_Color != itemStateWk)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(item->NoID == false && (item->Item_Color == itemStateWk || item->Item_Color == itemStateZk))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(ErrorFlag == true)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for(auto it = all.begin(); it != all.end(); it++)
|
||||
{
|
||||
TKM3Item* item = it->second->getExamItem();
|
||||
if(item->ItemNo == Sub3ItemType11Kbtc) continue;
|
||||
if(item->FinishFlag == false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//自动靠边停车计算
|
||||
//自动靠边停车
|
||||
if(m_itemvCJH.bZdKbTc)
|
||||
{
|
||||
//必考项目未完成
|
||||
for(auto it = all.begin(); it != all.end(); it++)
|
||||
{
|
||||
TKM3Item* item = it->second->getExamItem();
|
||||
if(item->ItemNo == Sub3ItemType11Kbtc)
|
||||
{
|
||||
if(item->Item_Color != itemStateWk)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(item->NoID == false && (item->Item_Color == itemStateWk || item->Item_Color == itemStateZk))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//SysSet[319]:里程不够不报靠边停车(0-否 1-是 2-必考项目完成,并且里程满足要求)
|
||||
//SysSet[415]:自动报靠边停车(启用标记^全部结束n米报^)启用标记:0-否 1-是 319参数为2有效
|
||||
const std::string& s319 = TableSysSet->get319();
|
||||
const std::string& ksdd = TableSysSet->get211();
|
||||
if(s319 == "2")
|
||||
{
|
||||
const TChuanGan* cg = m_car->historyChuanGan();
|
||||
|
||||
if(m_itemvCJH.KbTcJl == -1)
|
||||
{
|
||||
m_itemvCJH.KbTcJl = cg->ai_ljjl;
|
||||
@ -4895,6 +4892,7 @@ void Sub3Judge20Comm::Call_Auto_KBTC()
|
||||
if(cg->ai_ljjl - m_itemvCJH.KbTcJl >= m_itemvCJH.ZdKbTcJl)
|
||||
{
|
||||
//20171008
|
||||
const std::string& ksdd = TableSysSet->get211();
|
||||
if(ksdd == siteof::changzhoukm3)
|
||||
{
|
||||
if(cg->RTKKM3.BaseLaneCount > 0)
|
||||
@ -4952,6 +4950,7 @@ void Sub3Judge20Comm::Judge_Extra()
|
||||
//m_car->createEventEnterItem({item13->ItemNo, ""});
|
||||
}
|
||||
|
||||
/*
|
||||
//自动触发加减挡位
|
||||
bool FindSCZB = false;
|
||||
bool FindMNDG = false;
|
||||
@ -4990,21 +4989,18 @@ void Sub3Judge20Comm::Judge_Extra()
|
||||
|
||||
if((SCZBFinishFlag == true || FindSCZB == false) && (MNDGFinishFlag == true || FindMNDG == false))
|
||||
{
|
||||
TKM3Item* item14 = m_car->findExamItem(Sub3ItemType14Jjdw);
|
||||
TKM3Item* item14 = m_car->findExamItem(Sub3ItemType14Jjdw); //20240731
|
||||
if(item14 && item14->NoID == true) //免考加减挡的
|
||||
{
|
||||
if(item14->Item_Color == itemStateWk)
|
||||
{
|
||||
//ToDo1:生成 全程加减挡 进项目事件
|
||||
//item14->Item_Color = itemStateZk;
|
||||
//item14->TestPro = ItemProFlagInit;
|
||||
//item14->FinishFlag = false;
|
||||
|
||||
m_car->createEventEnterItem({item14->ItemNo, ""});
|
||||
m_car->KM3EndItem(item14->ItemNo);
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
m_DiaoTou_ID = 0;
|
||||
std::string CurrentRoadData = cg->MapPoint_Road_Code;
|
||||
|
||||
@ -566,27 +566,59 @@ inline void GpsMath::getDimensionalCoordinate(const double& E1, const double& N1
|
||||
///以下是科目三的函数 2024-01-12
|
||||
///////////////////////////////////////////////////
|
||||
|
||||
/*
|
||||
double GpsMath::getAngle(const Pointi& p1, const Pointi& p2)
|
||||
{
|
||||
double angle = 0;
|
||||
//修改坐标系
|
||||
if(p1.x == p2.x)
|
||||
{
|
||||
if(p1.y < p2.y)
|
||||
{
|
||||
angle = PI / 2;
|
||||
}
|
||||
else if(p1.y >= p2.y)
|
||||
{
|
||||
angle = PI * 3 / 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
angle = std::atan2(p2.y - p1.y, p2.x - p1.x);
|
||||
}
|
||||
|
||||
if(angle < 0)
|
||||
{
|
||||
angle = angle + 2 * PI;
|
||||
}
|
||||
angle = angle / PI * 180;
|
||||
return angle;
|
||||
}
|
||||
*/
|
||||
|
||||
//1、获得点1指向点2的角度0-360度,该角度是X轴正方向顺时针旋转到有向线段(由点1指向点2所确定)的角度,例如:正东=0度,正北=270
|
||||
double GpsMath::GetAngle_HQ(const Pointi& p1, const Pointi& p2, int MinusY)
|
||||
{
|
||||
int result = 0;
|
||||
double angle = 0;
|
||||
if(p1.x == p2.x)
|
||||
{
|
||||
if(p1.y * MinusY < p2.y * MinusY)
|
||||
result = PI * 3 / 2;
|
||||
angle = PI * 3 / 2;
|
||||
else if (p1.y * MinusY > p2.y * MinusY)
|
||||
result = PI / 2;
|
||||
angle = PI / 2;
|
||||
else
|
||||
result = 0;
|
||||
angle = 0;
|
||||
}
|
||||
else
|
||||
result = std::atan2(p1.y * MinusY - p2.y * MinusY, p2.x - p1.x); //???yhyflag
|
||||
{
|
||||
angle = std::atan2(p1.y * MinusY - p2.y * MinusY, p2.x - p1.x);
|
||||
}
|
||||
|
||||
if(result < 0)
|
||||
result = result + 2 * PI;
|
||||
if(angle < 0)
|
||||
angle = angle + 2 * PI;
|
||||
|
||||
result = result / PI * 180;
|
||||
return result;
|
||||
angle = angle / PI * 180;
|
||||
return angle;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -137,7 +137,10 @@ private:
|
||||
|
||||
|
||||
public: //科目三
|
||||
//计算角度 逆时针
|
||||
//static double getAngle(const Pointi& point1, const Pointi& point2);
|
||||
//1、获得点1指向点2的角度0-360度,该角度是X轴正方向顺时针旋转到有向线段(由点1指向点2所确定)的角度,例如:正东=0度,正北=270
|
||||
//MinusY= 1顺时针, -1逆时针
|
||||
static double GetAngle_HQ(const Pointi& p1, const Pointi& p2, int MinusY = 1);
|
||||
//计算两点距离
|
||||
static int PointDistance(const Pointi& p1, const Pointi& p2);
|
||||
|
||||
@ -148,6 +148,14 @@ enum PlaySoundType
|
||||
PlaySoundEndNotify = 1, //1:表示是模拟灯光项目的语音,语音播报结束需要调用examJudgeSoundEnd通知评判。
|
||||
};
|
||||
|
||||
//行驶方向,***注意:枚举不能变,和外壳有对应关系
|
||||
enum DriveDirType
|
||||
{
|
||||
DriveDirN = -1, //-1:逆向行驶
|
||||
DriveDirX = 0, //0:未知
|
||||
DriveDirY = 1, //1:正向行驶
|
||||
};
|
||||
|
||||
|
||||
//Tag1=0-无标线
|
||||
//Tag1=1-中心线(黄色实线)
|
||||
|
||||
@ -334,7 +334,7 @@ struct TStuInfo
|
||||
int64 ddkssj = 0; //考试中断那次考试开始考试时间 1970年到现在的毫秒数
|
||||
std::vector<int32> ykxm = {}; //已考项目 "1,3" 对应枚举 ExamItemCode DuanDian_FinishItems
|
||||
std::vector<TKfXm> kfxm = {}; //扣分项目 "20,01;" 对应枚举 ExamItemCode DuanDian_Marks
|
||||
int32 yklc = 0; //已考里程,单位米
|
||||
int32 yklc = 0; //已考里程,单位厘米
|
||||
|
||||
int8 sczb = 0; //CS_Finish_SCZB_Flag:Boolan; //yhy22 初始完成上车准备标志(外壳传递的)Boolan
|
||||
std::vector<TKfXm> sczbkf = {}; //SCZBKouFenData:String[200]; //格式: ItemNo,MarkSerial; ItemNo,MarkSerial;
|
||||
@ -850,15 +850,14 @@ struct TRTKResult
|
||||
|
||||
int CrossPointNo = 0; //穿越点
|
||||
|
||||
|
||||
//20240730 新增 还没计算
|
||||
int TouchLineDirCS = 0; //车身碰线 车身碰线方向
|
||||
//20240801 新增 还没计算
|
||||
int TouchLineDirCS = TouchDir0; //车身碰线 车身碰线方向
|
||||
int BackPointLaneNo = 0; //后点车道 后点所在车道号
|
||||
int BackPointLaneCount = 0; //后点车道 后点天线共有几股车道
|
||||
int Body_RF_ToBaseLine = 0; //右前车身边线 指车身离右侧路边缘线距离
|
||||
int Body_RB_ToBaseLine = 0; //右后车身边线 指车身离右侧路边缘线距离
|
||||
|
||||
int DirInverse = 0; //车道属性 是否逆向行驶
|
||||
int DirInverse = 0; //车道属性 是否逆向行驶 对应DriveDirType枚举
|
||||
int ShapeNoWheel = 0; //形状 车轮相交的形状线号
|
||||
|
||||
#ifdef JUDGE_USE_INSPECT
|
||||
|
||||
@ -16,11 +16,15 @@ export async function download() {
|
||||
})
|
||||
}
|
||||
|
||||
interface WR{
|
||||
message?:string
|
||||
code:number
|
||||
}
|
||||
// 通用监管接口
|
||||
export async function writeObjectOut(params,filePath?:string): Promise<number> {
|
||||
export async function writeObjectOut(params,filePath?:string): Promise<WR> {
|
||||
const singlePlay = globalThis.singlePlay
|
||||
if (singlePlay) {
|
||||
return 1
|
||||
return {code:1}
|
||||
}
|
||||
|
||||
//获取监管接口地址路径
|
||||
@ -42,6 +46,7 @@ export async function writeObjectOut(params,filePath?:string): Promise<number> {
|
||||
if (globalThis.isJGNew) {
|
||||
return await writeObjectOutNew(params,filePath)
|
||||
}
|
||||
drvexam.zp = drvexam.zp === undefined ? undefined : encodeURIComponent( drvexam.zp)
|
||||
const drvexamArrs = Reflect.ownKeys(drvexam).map((key: string) => (`<${key}>${drvexam[key]}</${key}>`));
|
||||
|
||||
if(filePath){
|
||||
@ -52,6 +57,7 @@ export async function writeObjectOut(params,filePath?:string): Promise<number> {
|
||||
}));
|
||||
}
|
||||
|
||||
console.info('surenjun','调用旧监管')
|
||||
//对象转换成xml
|
||||
const temp = await request({
|
||||
host: globalThis.JGHOST,
|
||||
|
||||
@ -17,7 +17,11 @@ const gjxlhObj = {
|
||||
'17C56': '02-21-000014',
|
||||
}
|
||||
|
||||
export default async function writeObjectOutNew(data,filePath): Promise<number> {
|
||||
interface WR{
|
||||
message?:string
|
||||
code:number
|
||||
}
|
||||
export default async function writeObjectOutNew(data,filePath): Promise<WR> {
|
||||
const fileUtil = new FileUtil(globalThis.context);
|
||||
const {jkid , drvexam} = data;
|
||||
const basic = await getBasicConfig(jkid);
|
||||
|
||||
@ -39,6 +39,7 @@ export default class FileUtil{
|
||||
fs.mkdirSync(path)
|
||||
}
|
||||
} catch (e) {
|
||||
console.info('初始化文件夹失败',path)
|
||||
promptAction.showToast({
|
||||
message:`初始化文件夹失败`+JSON.stringify(e),
|
||||
duration:4000,
|
||||
|
||||
@ -4,8 +4,6 @@ import { testKm2Items,testKm3Items } from '../../pages/judgeSDK/dataTest/index'
|
||||
import { judgeConfig } from '../../pages/judgeSDK/utils/judgeConfig';
|
||||
import { setJudgeUdp, setTopLineUdp } from './GlobalUdp';
|
||||
import { convertGpsCoord2 } from '../utils/tools';
|
||||
import common from '@ohos.app.ability.common';
|
||||
|
||||
|
||||
export const initJudgeUdp = async () => {
|
||||
globalThis.serialIndex = 0;
|
||||
|
||||
@ -131,12 +131,14 @@ function handleCenterCode(msgXml,isNewCenter){
|
||||
if(result){
|
||||
const {code,message} = result
|
||||
if(code != '1'){
|
||||
const rMessage = decodeURIComponent(message as string)
|
||||
prompt.showToast({
|
||||
message, duration: 3000
|
||||
message:rMessage,
|
||||
duration: 3000
|
||||
});
|
||||
return
|
||||
return {code,message}
|
||||
}else{
|
||||
return code
|
||||
return { code }
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -152,9 +154,9 @@ function handleCenterCode(msgXml,isNewCenter){
|
||||
message: decodeURIComponent(message as string),
|
||||
duration: 3000
|
||||
});
|
||||
return
|
||||
return {code,message:decodeURIComponent(message)}
|
||||
}else{
|
||||
return code
|
||||
return { code }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -115,7 +115,6 @@ struct Index {
|
||||
async initStudent() {
|
||||
const students = await getSyncData('USER')
|
||||
const stuInfo = students[0] || {};
|
||||
console.info('surenjun stuInfo=>', JSON.stringify(stuInfo))
|
||||
const {xm,sfzmhm,lsh,kszp,ksdd,kssycs,kslx,ksxl} = stuInfo;
|
||||
this.name = xm || '测试考生';
|
||||
this.idCard = sfzmhm || '01234567891010';
|
||||
@ -279,8 +278,8 @@ struct Index {
|
||||
abbreviation: decodeURI(systemParm.txt3),
|
||||
projectCode: no2,
|
||||
projectCodeCenter: txt2,
|
||||
//是否是必考
|
||||
isRequired: allItems.includes(no2 + ''),
|
||||
//是否是必考 加减档设置成非必考
|
||||
isRequired: no2== 14?false:allItems.includes(no2 + ''),
|
||||
//是否考过了
|
||||
isEnd: false,
|
||||
//项目开始数据是否上传过
|
||||
@ -300,8 +299,6 @@ struct Index {
|
||||
})
|
||||
})
|
||||
const projects = this.projects;
|
||||
console.info('surenjun',JSON.stringify(this.projectsObj))
|
||||
|
||||
if (!projects.length) {
|
||||
Prompt.showToast({
|
||||
message: '读取数据库信息失败,请重新联网更新!',
|
||||
@ -465,6 +462,7 @@ struct Index {
|
||||
this.examSubject = isTrajectoryOpen ? (initDataObj.kskm * 1) : examSubject;
|
||||
globalThis.carInfo.examSubject = this.examSubject
|
||||
this.singlePlay = beginDataObj.exam == 0;
|
||||
this.carName = initDataObj.name;
|
||||
globalThis.singlePlay = beginDataObj.exam == 0;
|
||||
await this.initSystemParam(initDataObj.systemparm)
|
||||
await this.initMarkRules(initDataObj.mark);
|
||||
@ -748,7 +746,7 @@ struct Index {
|
||||
}
|
||||
|
||||
Column() {
|
||||
if (this.examSubject == 3) {
|
||||
if (this.examSubject == 3 && this.judgeConfigObj['342'] == 0) {
|
||||
Row() {
|
||||
Row() {
|
||||
}
|
||||
@ -767,14 +765,7 @@ struct Index {
|
||||
.backgroundImageSize({ width: '100%', height: '100%' })
|
||||
.margin({ bottom: 10 })
|
||||
.onClick(() => {
|
||||
if (this.judgeConfigObj['342'] == 0) {
|
||||
this.isDeductedPopShow = true
|
||||
} else {
|
||||
Prompt.showToast({
|
||||
message: '平台配置不允许人工评判!',
|
||||
duration: 4000
|
||||
});
|
||||
}
|
||||
this.isDeductedPopShow = true
|
||||
})
|
||||
}
|
||||
|
||||
@ -844,7 +835,7 @@ struct Index {
|
||||
}
|
||||
|
||||
//科目三人工扣分弹窗
|
||||
if (this.isDeductedPopShow && this.examSubject == 3) {
|
||||
if (this.isDeductedPopShow && this.examSubject == 3 && this.judgeConfigObj['342'] == 0) {
|
||||
DeductedPopup({
|
||||
defaultTabIndex: this.defaultTabIndex,
|
||||
currentItems: Reflect.ownKeys(this.projectsObj).map(projectKey => {
|
||||
@ -945,12 +936,11 @@ struct Index {
|
||||
currentXmdm,
|
||||
} = this;
|
||||
const projectCode = artSubject3ProjectsCodesArr[index];
|
||||
console.info('surenjun',getIsExitManualProject(index))
|
||||
if(index === 5) {
|
||||
console.info('surenjun 靠边停车状态=> ',getIsExitManualProject(index))
|
||||
}
|
||||
if (getIsExitManualProject(index)) {
|
||||
// 正在进行的项目 取消项目
|
||||
console.info('surenjun isManualProjectIn=>',isManualProjectIn)
|
||||
console.info('surenjun projectCode=>',projectCode)
|
||||
console.info('surenjun currentXmdm=>',currentXmdm)
|
||||
if (isManualProjectIn && projectCode === currentXmdm) {
|
||||
await this.judge.setJudgeItem(currentXmdm, 2);
|
||||
Prompt.showToast({
|
||||
@ -964,8 +954,15 @@ struct Index {
|
||||
if (judgeConfigObj['343'] == 0) {
|
||||
const xmmcStr = this.xmmcStr;
|
||||
if (xmmcStr == '无' || xmmcStr == '') {
|
||||
this.amplifiedImgIndex = index;
|
||||
this.isAmplifyPopShow = true
|
||||
//512[6] 人工项目按钮放大确认
|
||||
const param512 = (judgeConfigObj['512'] || '').split(',');
|
||||
if(param512[6] != 0){
|
||||
this.amplifiedImgIndex = index;
|
||||
this.isAmplifyPopShow = true
|
||||
}else{
|
||||
const judge = this.judge
|
||||
await judge.setJudgeItem(projectCode, 1);
|
||||
}
|
||||
} else {
|
||||
if (index === 5) {
|
||||
Prompt.showToast({
|
||||
@ -1086,6 +1083,10 @@ struct Index {
|
||||
return false
|
||||
}
|
||||
|
||||
if(projectRoads[projectCode].length == 0){
|
||||
return true
|
||||
}
|
||||
|
||||
//设置了514-519参数,只能在设置的路段触发对应项目
|
||||
if (projectRoads[projectCode].includes(road)) {
|
||||
//如果525为1,则514-519设置的路段不能触发对应项目
|
||||
|
||||
@ -75,6 +75,7 @@ struct UserInfo {
|
||||
@State FaceOpenStatue: string = '0'; //是否开启人脸识别
|
||||
subscriber;
|
||||
@State faceCatchImg: string = ''
|
||||
@State Param803Str:string = ''
|
||||
// 过程照片拍照
|
||||
getPhoto = async (empty?: boolean) => {
|
||||
const singlePlay = globalThis.singlePlay
|
||||
@ -105,13 +106,11 @@ struct UserInfo {
|
||||
new WebRTCVoice(this.context);
|
||||
//初始化数据
|
||||
this.initData()
|
||||
|
||||
//身份证读卡器初始化
|
||||
// this.openDeviceByIDCard()
|
||||
// 如果是单机模式则模拟假数据
|
||||
//获取sysset表数据
|
||||
this.initSysset()
|
||||
|
||||
//心跳处理
|
||||
this.heartMsg()
|
||||
this.isExamStart = false
|
||||
@ -260,9 +259,13 @@ struct UserInfo {
|
||||
//@ts-ignore
|
||||
syssetParams.forEach(sys => {
|
||||
//364 绕车一周评判时机(1-开始考试后判 2-开始考试前判)
|
||||
if (sys.v_no === '364') {
|
||||
if (sys.v_no === '364' && decodeURIComponent(sys.v_value) == '2') {
|
||||
this.isBoardPrePareSetPopupOpen = true;
|
||||
}
|
||||
// 开始考试前必须解开安全带或关车门
|
||||
if (sys.v_no === '803'){
|
||||
this.Param803Str = sys.v_value+'';
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
@ -432,7 +435,6 @@ struct UserInfo {
|
||||
getSyncData('USER').then(data=>{
|
||||
if(data?.[0]){
|
||||
this.getCurrentStudent(data[0].sfzmhm)
|
||||
|
||||
}
|
||||
})
|
||||
}).catch((error) => {
|
||||
@ -519,10 +521,11 @@ struct UserInfo {
|
||||
const avPlayer = this.avPlayer;
|
||||
this.isLoadingPopupVisible = true
|
||||
avPlayer.playAudio([`voice/监管通信中.mp3`],false,async ()=>{
|
||||
const code = await this.beginExam();
|
||||
if (code != 1) {
|
||||
const temp = await this.beginExam();
|
||||
console.info('surenjun',JSON.stringify(temp))
|
||||
if (temp.code != 1) {
|
||||
promptAction.showToast({
|
||||
message:'开始考试接口调用失败!',
|
||||
message:temp.message,
|
||||
duration:4000
|
||||
})
|
||||
return
|
||||
@ -547,33 +550,104 @@ struct UserInfo {
|
||||
// 检测车门、熄火信号
|
||||
async checkSignal(): Promise<boolean> {
|
||||
const {isCheckFireOpen} = judgeConfig
|
||||
const {Param803Str,isBoardPrePareSetPopupOpen} = this;
|
||||
|
||||
if(Param803Str === ''){
|
||||
return true
|
||||
}
|
||||
return new Promise((resolve,reject)=>{
|
||||
if(isCheckFireOpen){
|
||||
resolve(true)
|
||||
// return
|
||||
return
|
||||
}
|
||||
console.info('socketTag[PLC.UdpClient]', '注册udp回调')
|
||||
let plcValue = globalThis.udpClient.getCurrentMessage();
|
||||
console.info('surenjun',plcValue)
|
||||
const msgArr = plcValue.split(',') || ''
|
||||
const mkg = msgArr[14];
|
||||
const fdjzs = msgArr[25];
|
||||
if(mkg == 1){
|
||||
this.avPlayer.playAudio(['voice/关门.mp3'])
|
||||
promptAction.showToast({
|
||||
message:'请关闭车门',
|
||||
duration:4000
|
||||
})
|
||||
reject(false)
|
||||
const aqd = msgArr[19];
|
||||
const jgd = msgArr[7];
|
||||
const ygd = msgArr[8];
|
||||
const ssc = msgArr[13];
|
||||
const dw = msgArr[28];
|
||||
// 开始考试信号检测
|
||||
if(Param803Str !== ''){
|
||||
//安全带
|
||||
if(aqd == 1 && Param803Str.includes('1')){
|
||||
this.avPlayer.playAudio(['voice/请解开安全带.mp3'])
|
||||
promptAction.showToast({
|
||||
message:'请解开安全带',
|
||||
duration:4000
|
||||
})
|
||||
reject(false)
|
||||
}
|
||||
//门开关
|
||||
if(mkg == 1 && Param803Str.includes('2')){
|
||||
this.avPlayer.playAudio(['voice/关门.mp3'])
|
||||
promptAction.showToast({
|
||||
message:'请关闭车门',
|
||||
duration:4000
|
||||
})
|
||||
reject(false)
|
||||
}
|
||||
//远、近光灯
|
||||
if((jgd == 1 || ygd == 1) && Param803Str.includes('3')){
|
||||
this.avPlayer.playAudio(['voice/请关闭远近光灯.mp3'])
|
||||
promptAction.showToast({
|
||||
message:'请关闭远近光灯',
|
||||
duration:4000
|
||||
})
|
||||
reject(false)
|
||||
}
|
||||
//拉手刹
|
||||
if(ssc == 0 && Param803Str.includes('4')){
|
||||
this.avPlayer.playAudio(['voice/请拉手刹.mp3'])
|
||||
promptAction.showToast({
|
||||
message:'请拉手刹',
|
||||
duration:4000
|
||||
})
|
||||
reject(false)
|
||||
|
||||
}
|
||||
//请点火
|
||||
if(fdjzs*1 <=0 && Param803Str.includes('5')){
|
||||
this.avPlayer.playAudio(['voice/点火.mp3'])
|
||||
promptAction.showToast({
|
||||
message:'请点火',
|
||||
duration:4000
|
||||
})
|
||||
reject(false)
|
||||
}
|
||||
//置空档
|
||||
if(dw != 0 && Param803Str.includes('6')){
|
||||
this.avPlayer.playAudio(['voice/请置空档.mp3'])
|
||||
promptAction.showToast({
|
||||
message:'请置空档',
|
||||
duration:4000
|
||||
})
|
||||
reject(false)
|
||||
}
|
||||
}
|
||||
if(fdjzs*1 > 0){
|
||||
this.avPlayer.playAudio(['voice/熄火.mp3'])
|
||||
promptAction.showToast({
|
||||
message:'请熄火',
|
||||
duration:4000
|
||||
})
|
||||
reject(false)
|
||||
// 考前绕车一周信号检测
|
||||
if(isBoardPrePareSetPopupOpen){
|
||||
//请熄火
|
||||
if(fdjzs*1 > 0){
|
||||
this.avPlayer.playAudio(['voice/熄火.mp3'])
|
||||
promptAction.showToast({
|
||||
message:'请熄火',
|
||||
duration:4000
|
||||
})
|
||||
reject(false)
|
||||
}
|
||||
if(mkg == 1){
|
||||
this.avPlayer.playAudio(['voice/关门.mp3'])
|
||||
promptAction.showToast({
|
||||
message:'请关闭车门',
|
||||
duration:4000
|
||||
})
|
||||
reject(false)
|
||||
}
|
||||
}
|
||||
resolve(true)
|
||||
})
|
||||
}
|
||||
|
||||
@ -606,10 +680,11 @@ struct UserInfo {
|
||||
//接口标识
|
||||
jkid: '17C51',
|
||||
}
|
||||
const code = await writeObjectOut(param);
|
||||
console.info('surenjun',JSON.stringify(param))
|
||||
const temp = await writeObjectOut(param);
|
||||
globalThis.lsh = this.currentUser.lsh
|
||||
globalThis.ksyh = this.currentUser.ksy1sfzmhm || this.currentUser.ksy2sfzmhm;
|
||||
return code
|
||||
return temp
|
||||
}
|
||||
|
||||
aboutToDisappear() {
|
||||
@ -758,7 +833,7 @@ struct UserInfo {
|
||||
.commStyle()
|
||||
.onClick(async () => {
|
||||
try {
|
||||
// await this.checkSignal()
|
||||
await this.checkSignal()
|
||||
this.faceCompareSucess = 0
|
||||
globalThis.statue = 2
|
||||
if (!this.currentUser.xm) {
|
||||
@ -777,7 +852,6 @@ struct UserInfo {
|
||||
this.stopDeviceById()
|
||||
return
|
||||
}
|
||||
console.log('this.FaceOpenStatue',this.FaceOpenStatue)
|
||||
if (this.FaceOpenStatue != '0') {
|
||||
this.showFaceCompare = true
|
||||
} else {
|
||||
@ -785,7 +859,7 @@ struct UserInfo {
|
||||
this.sfbdinterfaceFn()
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
console.info('Throw Error',JSON.stringify(e))
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
@ -226,9 +226,9 @@ export default struct DeductedPopup {
|
||||
}
|
||||
const code = await writeObjectOut(beginData)
|
||||
//TODO code待处理
|
||||
if (code == 1) {
|
||||
|
||||
}
|
||||
// if (code == 1) {
|
||||
//
|
||||
// }
|
||||
}
|
||||
|
||||
//过程照片
|
||||
|
||||
@ -2,6 +2,9 @@ import apiJudgeSdk from 'libJudgeSdk.so';
|
||||
import Judge from '../../judgeSDK/utils/judgeReal';
|
||||
import { MarkRule, Project, ProjectObj } from '../../judgeSDK/api/judgeSDK.d';
|
||||
import common from '@ohos.app.ability.common';
|
||||
import {
|
||||
examJudgeMapSetScaling
|
||||
} from '../../judgeSDK/api'
|
||||
|
||||
interface RoadDataType {
|
||||
name: string,
|
||||
@ -19,6 +22,7 @@ export default struct RealTime {
|
||||
@State projects: Project[] = []
|
||||
@State projectsObj: ProjectObj = {}
|
||||
@State markRuleListObj: MarkRule = {}
|
||||
@State scaleNum: number = 100
|
||||
@State gpsActive: number = 1
|
||||
private widthNumber: string | number | Resource = 0
|
||||
private heightNumber: string | number | Resource = 0
|
||||
@ -88,6 +92,11 @@ export default struct RealTime {
|
||||
}
|
||||
.width('100%')
|
||||
.backgroundColor('#fff')
|
||||
|
||||
Row(){
|
||||
Image($rawfile('judge/big.png')).width(60).onClick(()=>{this.scaleFn(-10)})
|
||||
Image($rawfile('judge/small.png')).width(60).onClick(()=>{this.scaleFn(10)}).margin({left:20})
|
||||
}.position({x:'32%',y:60})
|
||||
}
|
||||
.height('100%')
|
||||
}
|
||||
@ -136,5 +145,20 @@ export default struct RealTime {
|
||||
{ name: '形状', key: ['InShapeAttr', 'ShapeNo','ShapeNoWheel'] },
|
||||
{ name: '路段点', key: ['CrossPointNo'] },
|
||||
]
|
||||
|
||||
scaleFn = async (num)=>{
|
||||
const scaleNum = this.scaleNum
|
||||
if(scaleNum >0 && scaleNum < 200){
|
||||
this.scaleNum += num;
|
||||
}
|
||||
if(scaleNum === 0 && num > 0){
|
||||
this.scaleNum += num;
|
||||
}
|
||||
if(scaleNum === 200 && num < 0){
|
||||
this.scaleNum += num;
|
||||
}
|
||||
await examJudgeMapSetScaling(this.scaleNum);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -558,6 +558,7 @@ export const testUIAllitems = [
|
||||
]
|
||||
|
||||
export const wuxiKm3Items = [
|
||||
//3,5,9,12,14,15,16,
|
||||
{projectCode:'1',projectCodeCenter:'40100',name:'上车准备',abbreviation:'上车准备'},
|
||||
{projectCode:'2',projectCodeCenter:'40200',name:'起步',abbreviation:'起步'},
|
||||
{projectCode:'3',projectCodeCenter:'40300',name:'直线行驶',abbreviation:'直线行驶'},
|
||||
@ -570,7 +571,7 @@ export const wuxiKm3Items = [
|
||||
{projectCode:'10',projectCodeCenter:'41400',name:'超车',abbreviation:'超车'},
|
||||
{projectCode:'11',projectCodeCenter:'40600',name:'靠边停车',abbreviation:'靠边停车'},
|
||||
{projectCode:'12',projectCodeCenter:'41500',name:'掉头',abbreviation:'掉头'},
|
||||
{projectCode:'13',projectCodeCenter:'41600',name:'夜间行驶',abbreviation:'夜间行驶'},
|
||||
{projectCode:'41',projectCodeCenter:'41600',name:'夜间行驶',abbreviation:'夜间行驶'},
|
||||
{projectCode:'14',projectCodeCenter:'40400',name:'加减档位操作',abbreviation:'加减档位操作'},
|
||||
{projectCode:'15',projectCodeCenter:'40800',name:'路口左转弯',abbreviation:'路口左转弯'},
|
||||
{projectCode:'16',projectCodeCenter:'40900',name:'路口右转弯',abbreviation:'路口右转弯'},
|
||||
|
||||
@ -35,7 +35,8 @@ import {
|
||||
plcStrToJson,
|
||||
plcStrToWXJson,
|
||||
promptWxCode,
|
||||
senorToWXDataStr
|
||||
senorToWXDataStr,
|
||||
getKmProjectCancelVoice
|
||||
} from './utils/judgeCommon';
|
||||
|
||||
import {
|
||||
@ -159,7 +160,8 @@ export default class Judge {
|
||||
// 3.开始考试
|
||||
let beginExamInfo = isTrajectoryOpen ? {
|
||||
...JSON.parse(strArr[1]),
|
||||
replay: 1
|
||||
replay: 1,
|
||||
ykxm:judgeConfig.ignoreProjects
|
||||
} : await getJudgeBeginData()
|
||||
|
||||
await fileLog.setExamJudgeData(beginExamInfo)
|
||||
@ -291,8 +293,9 @@ export default class Judge {
|
||||
//处理评判过程回调
|
||||
handleRealExam = async (strData, callBack) => {
|
||||
let examData: EXAMDATA = JSON.parse(strData);
|
||||
const {getDqxmStr,getKfStr,goJudgeVoice,setMndg,setRoadAndLane,judgeUI} = this;
|
||||
const {carzt,xmks,kf,event,xmjs,ksjs,sound,mndg,lane} = examData
|
||||
const {getDqxmStr,getKfStr,goJudgeVoice,setMndg,avPlayer,judgeUI} = this;
|
||||
const {carzt,xmks,kf,event,xmjs,xmqx,ksjs,sound,mndg,lane} = examData
|
||||
const param512 = (judgeUI.judgeConfigObj['512'] || '').split(',');
|
||||
//获取项目结束、项目开始代码
|
||||
const xmdm = event == 2 ? xmjs.xmdm : xmks.xmdm
|
||||
const xmxh = event == 2 ? xmjs.xmxh : xmks.xmxh;
|
||||
@ -301,7 +304,6 @@ export default class Judge {
|
||||
switch (event) {
|
||||
//项目开始
|
||||
case 1:
|
||||
console.info(judgeTag,'项目开始开始1')
|
||||
judgeUI.projectsObj[xmdm].type = '2';
|
||||
if (isManualProjectIn) {
|
||||
//手动项目是否在进行中
|
||||
@ -322,8 +324,9 @@ export default class Judge {
|
||||
this.xmdm = xmdm;
|
||||
this.xmxh = xmxh;
|
||||
this.judgeUI.isProjectIn = true
|
||||
this.judgeUI.isDeductedPopShow = true
|
||||
console.info(judgeTag,'项目开始开始2')
|
||||
if(param512[7] != 0){
|
||||
this.judgeUI.isDeductedPopShow = true
|
||||
}
|
||||
break;
|
||||
|
||||
//项目结束
|
||||
@ -380,8 +383,16 @@ export default class Judge {
|
||||
break;
|
||||
|
||||
//项目取消
|
||||
case 6:
|
||||
case 6:{
|
||||
console.info(judgeTag,'项目取消');
|
||||
const xmdm = xmqx.xmdm;
|
||||
const xmmcCode = judgeUI.projectsObj[xmdm].projectCodeCenter;
|
||||
const voiceCode = getKmProjectCancelVoice(xmmcCode);
|
||||
avPlayer.playAudio([`voice/${voiceCode}.mp3`],true)
|
||||
this.judgeUI.projectsObj[xmdm].type = '1';
|
||||
this.testKmItems[xmmcCode].status = '1';
|
||||
break;
|
||||
}
|
||||
|
||||
//语音播放和提示
|
||||
case 7:
|
||||
@ -414,7 +425,7 @@ export default class Judge {
|
||||
this.goVoiceAnnounce(event, xmdm, this.kfArr, xmjs, ksjs)
|
||||
|
||||
//更新UI
|
||||
if (event == 1 || event == 2 || event == 3) {
|
||||
if (event == 1 || event == 2 || event == 3 || event == 6) {
|
||||
const copyProjectsObj = this.judgeUI.projectsObj;
|
||||
judgeUI.projectsObj = deepClone(copyProjectsObj);
|
||||
}
|
||||
@ -447,7 +458,7 @@ export default class Judge {
|
||||
const isEnd = projectsObj[xmdm].isEnd;
|
||||
const kmCode = getKmProjectVoice(code, 1, judgeConfigObj, lane)
|
||||
if (!ignoreVoiceCodeArr.includes(code)) {
|
||||
kmCode && avPlayer.playAudio([`voice/${kmCode}.mp3`])
|
||||
kmCode && avPlayer.playAudio([`voice/${kmCode}.mp3`],true)
|
||||
}
|
||||
//项目已考不上传监管信息
|
||||
if (!isEnd) {
|
||||
@ -490,11 +501,10 @@ export default class Judge {
|
||||
case 3:
|
||||
//扣分时实时播报语音(0-否+1-是)
|
||||
const currentKf = kf[kfLen -1];
|
||||
if (judgeConfigObj['418'] == '1' || judgeConfig.kfVoiceOpen) {
|
||||
if (judgeConfigObj['418'] == '1' && judgeConfig.kfVoiceOpen) {
|
||||
avPlayer.playAudio([`voice/${currentKf.markcatalog}.mp3`])
|
||||
}
|
||||
const isStart = await checkProjectIsStart(currentKf.xmdm,2,currentKf);
|
||||
console.info(judgeTag + '扣分 isStart=>',isStart)
|
||||
if(isStart){
|
||||
await judgeTask.addTask(async () => {
|
||||
console.info(judgeTag, `项目扣分-${currentKf.markcatalog}-${currentKf.desc}`)
|
||||
@ -593,7 +603,7 @@ export default class Judge {
|
||||
kssj: time
|
||||
}
|
||||
}
|
||||
const code = await writeObjectOut(data,filePath)
|
||||
const {code} = await writeObjectOut(data,filePath)
|
||||
console.info(judgeTag, '项目开始 end')
|
||||
if (code === 2300007) {
|
||||
this.isJudgeDisConnect = true;
|
||||
@ -629,7 +639,7 @@ export default class Judge {
|
||||
jssj: time
|
||||
}
|
||||
}
|
||||
const code = await writeObjectOut(data,filePath)
|
||||
const {code} = await writeObjectOut(data,filePath)
|
||||
if (code === 2300007) {
|
||||
this.isJudgeDisConnect = true;
|
||||
}
|
||||
@ -666,7 +676,7 @@ export default class Judge {
|
||||
kfsj: time
|
||||
}
|
||||
}
|
||||
const code = await writeObjectOut(data,filePath);
|
||||
const {code} = await writeObjectOut(data,filePath);
|
||||
if (code === 2300007) {
|
||||
this.isJudgeDisConnect = true
|
||||
}
|
||||
@ -700,7 +710,7 @@ export default class Judge {
|
||||
ksdd: encodeURI(ksdd)
|
||||
}
|
||||
};
|
||||
const code = await writeObjectOut(data,filePath);
|
||||
const {code} = await writeObjectOut(data,filePath);
|
||||
if (code === 2300007) {
|
||||
this.isJudgeDisConnect = true
|
||||
}
|
||||
@ -714,27 +724,25 @@ export default class Judge {
|
||||
const {xmdm,code,type} = sound;
|
||||
//判断是不是模拟灯光语音
|
||||
if (type == 1) {
|
||||
// console.info(judgeTag, '模拟灯光开始播放:' + code)
|
||||
avPlayer.playAudio([`voice/${code}.mp3`], false, () => {
|
||||
examJudgeSoundEnd({
|
||||
itemno: xmdm, code, type
|
||||
})
|
||||
fileLog.setExamJudgeData({
|
||||
method: 'examJudgeSoundEnd',
|
||||
itemno: xmdm,
|
||||
code,
|
||||
type,
|
||||
})
|
||||
})
|
||||
}else{
|
||||
avPlayer.playAudio([`voice/${code}.mp3`])
|
||||
}
|
||||
avPlayer.playAudio([`voice/${code}.mp3`], false, () => {
|
||||
if (type == 1) {
|
||||
// console.info(judgeTag, '播放结束:' + code)
|
||||
examJudgeSoundEnd({
|
||||
itemno: xmdm, code, type
|
||||
})
|
||||
fileLog.setExamJudgeData({
|
||||
method: 'examJudgeSoundEnd',
|
||||
itemno: xmdm,
|
||||
code,
|
||||
type,
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 校验考试是否结束
|
||||
checkExamIsEnd = async (isManual?: boolean) => {
|
||||
const {judgeUI,avPlayer,isExamEnd,} = this;
|
||||
const {judgeUI,avPlayer,isExamEnd,isEndTip} = this;
|
||||
const {isAllProjectsEnd,examSubject,singlePlay,totalScore,judgeConfigObj,passingScore} = judgeUI;
|
||||
|
||||
if (isExamEnd) {
|
||||
@ -773,12 +781,18 @@ export default class Judge {
|
||||
return
|
||||
}
|
||||
//成绩合格
|
||||
if (isAllProjectsEnd && totalScore >= passingGrade) {
|
||||
if (isAllProjectsEnd && totalScore >= passingGrade && isEndTip) {
|
||||
const param302 = judgeConfigObj['302'];
|
||||
if (examSubject == 3 && (param302 != 6 || param302 != 7 || param302 != 8)) {
|
||||
avPlayer.playAudio(['voice/综合评判.mp3'])
|
||||
this.judgeUI.isDeductedPopShow = true
|
||||
this.judgeUI.defaultTabIndex = 1
|
||||
const param342 = judgeConfigObj['342'];
|
||||
const param512 = (judgeUI.judgeConfigObj['512'] || '').split(',');
|
||||
if (examSubject == 3 && param342 != 0 && (param302 != 6 || param302 != 7 || param302 != 8)) {
|
||||
if(param512[7] != 0){
|
||||
avPlayer.playAudio(['voice/综合评判.mp3'])
|
||||
this.judgeUI.isDeductedPopShow = true
|
||||
this.judgeUI.defaultTabIndex = 1
|
||||
this.isEndTip = true
|
||||
}
|
||||
|
||||
} else {
|
||||
await examJudgeEndExam()
|
||||
this.isExamEnd = true
|
||||
@ -794,20 +808,23 @@ export default class Judge {
|
||||
this.judgeUI.endPopupVisible = false;
|
||||
this.judgeUI.isDeductedPopShow = false;
|
||||
|
||||
console.info(judgeTag,1)
|
||||
const {qjjl,dcjl} = ksjs
|
||||
const {judgeUI,endExam,handleSEP,kfArr,avPlayer,judgeTask,isManual} = this;
|
||||
const {judgeConfigObj,examSubject,isAllProjectsEnd,totalScore,passingScore} = judgeUI;
|
||||
//计算考试分数
|
||||
console.info(judgeTag,2)
|
||||
this.judgeUI.totalScore = isAllProjectsEnd ? totalScore : 0;
|
||||
const singlePlay = globalThis.singlePlay
|
||||
const param302 = judgeConfigObj['302'];
|
||||
globalThis.windowClass.setWindowSystemBarEnable(['navigation'])
|
||||
|
||||
console.info(judgeTag,3)
|
||||
//自动退出待验证并且不合格
|
||||
if (!isManual && examSubject == 3 && (param302 == 1 || (singlePlay && param302 == 2)) && totalScore < passingScore) {
|
||||
avPlayer.playAudio([`voice/考试结束.mp3`])
|
||||
}
|
||||
|
||||
console.info(judgeTag,4)
|
||||
//联网模式下手动结束的直接退出
|
||||
if (!singlePlay && isManual && !isAllProjectsEnd) {
|
||||
avPlayer.playAudio(['voice/empty.mp3'], true, () => {
|
||||
@ -815,18 +832,21 @@ export default class Judge {
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
console.info(judgeTag,5)
|
||||
if (examSubject == 3) {
|
||||
const param302 = judgeConfigObj['302'];
|
||||
if (totalScore < passingScore) {
|
||||
//考试不合格;考试模式,自动退出;
|
||||
if (param302 == 4 || param302 == 5 || param302 == 7 || param302 == 8) {
|
||||
|
||||
}
|
||||
} else {
|
||||
//考试合格
|
||||
}
|
||||
}
|
||||
console.info(judgeTag,6)
|
||||
await handleSEP(306);
|
||||
console.info(judgeTag,7)
|
||||
avPlayer.playAudio(['voice/exam_waiting.mp3'], true, async () => {
|
||||
try {
|
||||
if (!singlePlay) {
|
||||
@ -837,6 +857,7 @@ export default class Judge {
|
||||
//TODO endExam函数逻辑待验证
|
||||
await endExam()
|
||||
} catch (e) {
|
||||
console.info(judgeTag,JSON.stringify(e))
|
||||
// setTimeout(() => {
|
||||
// // avPlayer.avPlayerStop();
|
||||
// router.back();
|
||||
@ -873,8 +894,8 @@ export default class Judge {
|
||||
dwlc: [d1,d2,d3,d4,d5].map((d,index) => `${index},${Math.floor(d /100)}`).join(';'),
|
||||
}
|
||||
}
|
||||
const code = await writeObjectOut(data,filePath);
|
||||
promptWxCode('17C56', code)
|
||||
const temp = await writeObjectOut(data,filePath);
|
||||
promptWxCode('17C56', temp.code)
|
||||
console.info(judgeTag, '考试结束 end')
|
||||
const param302 = judgeConfigObj['302'];
|
||||
judgeUI.loadingPopupVisible = true;
|
||||
@ -897,7 +918,9 @@ export default class Judge {
|
||||
}
|
||||
|
||||
console.info(judgeTag, `考试成绩:${totalScore}`)
|
||||
await uploadProgressData();
|
||||
if(!singlePlay){
|
||||
await uploadProgressData();
|
||||
}
|
||||
|
||||
//语音播放扣分项
|
||||
let score = 0;
|
||||
@ -923,7 +946,7 @@ export default class Judge {
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
|
||||
console.info(judgeTag,JSON.stringify(e))
|
||||
}
|
||||
})
|
||||
|
||||
@ -1059,8 +1082,12 @@ export default class Judge {
|
||||
|
||||
getSbbm = (ksxm, xmxh) => {
|
||||
const {judgeUI} = this;
|
||||
const {cdsbInfoObj,projectsObj} = judgeUI;
|
||||
const {cdsbInfoObj,projectsObj,examSubject} = judgeUI;
|
||||
const project = projectsObj[ksxm]
|
||||
//科目三不需要
|
||||
if(examSubject == 3){
|
||||
return undefined
|
||||
}
|
||||
if (project === undefined) {
|
||||
return '00000000'
|
||||
}
|
||||
@ -1280,6 +1307,7 @@ export default class Judge {
|
||||
|
||||
return tempData
|
||||
}
|
||||
|
||||
// 处理轨迹plc信号
|
||||
handleTrajectoryUdp = async (strArr) => {
|
||||
const {fileLog,setJudgeItem,setJudgeMark,endExam} = this;
|
||||
@ -1290,7 +1318,9 @@ export default class Judge {
|
||||
console.info(judgeTag, '模拟数据考试结束')
|
||||
globalThis.windowClass.setWindowSystemBarEnable(['navigation'])
|
||||
clearInterval(judgeTimer)
|
||||
this.checkExamIsEnd(true)
|
||||
await examJudgeEndExam()
|
||||
this.isExamEnd = true
|
||||
this.isManual = true
|
||||
return
|
||||
}
|
||||
const msg = JSON.parse(strArr[num]);
|
||||
@ -1310,7 +1340,7 @@ export default class Judge {
|
||||
}
|
||||
await examJudgeRealExam(msg)
|
||||
num++
|
||||
}, 200)
|
||||
}, 50)
|
||||
globalThis.judgeTimer = judgeTimer;
|
||||
}
|
||||
// 统计必考项目、所有项目、已考数量
|
||||
@ -1324,7 +1354,6 @@ export default class Judge {
|
||||
let allProjectNum = 0, allEndProjectsNum = 0;
|
||||
Reflect.ownKeys(projectsObj).forEach(projectKey => {
|
||||
const {type,isRequired} = projectsObj[projectKey];
|
||||
|
||||
allProjectNum += 1;
|
||||
if (type == 3 || type == 4) {
|
||||
allEndProjectsNum += 1;
|
||||
@ -1336,8 +1365,9 @@ export default class Judge {
|
||||
endProjectsNum += 1;
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
console.info(judgeTag,'必考项目数量:' + projectNum)
|
||||
console.info(judgeTag,'必考项目已考数量:' + endProjectsNum)
|
||||
//必考项目除靠边停车是否全部完成
|
||||
this.judgeUI.isRequiredProjectsEnd = (projectNum - endProjectsNum === 0)
|
||||
this.judgeUI.isAllProjectsEnd = (allProjectNum - allEndProjectsNum === 0)
|
||||
@ -1384,6 +1414,7 @@ export default class Judge {
|
||||
private judgeTask: JudgeTask
|
||||
private tempData: any
|
||||
private performInfo: any
|
||||
private isEndTip:boolean = false;
|
||||
private ksjs: {
|
||||
// 累计前进距离
|
||||
qjjl: number,
|
||||
|
||||
@ -136,6 +136,19 @@ export function getKmProjectVoice(
|
||||
|
||||
}
|
||||
|
||||
|
||||
//获取科目三取消项目语音
|
||||
export function getKmProjectCancelVoice(projectCode){
|
||||
switch (projectCode*1){
|
||||
//变更车道
|
||||
case 40500: return 405004
|
||||
//加减档
|
||||
case 40400: return 404004
|
||||
//超车
|
||||
case 41400: return 414004
|
||||
default :return 'empty'
|
||||
}
|
||||
}
|
||||
// 上传监管数据code转换
|
||||
export function promptWxCode(
|
||||
jkid:'17C52' | '17C54' |'17C55' | '17C53' | '17C56',
|
||||
|
||||
@ -7,6 +7,8 @@ export const judgeConfig = {
|
||||
isPhotoOpen: true,
|
||||
//扣分语音是否强制开启
|
||||
kfVoiceOpen: true,
|
||||
//忽略的考试项目
|
||||
ignoreProjects:[41],
|
||||
// 是否忽略考试前熄火、车门检查
|
||||
isCheckFireOpen: true,
|
||||
//是否开启Udp
|
||||
@ -14,7 +16,7 @@ export const judgeConfig = {
|
||||
// 本地模型地址
|
||||
modelPath: 'models/model_enc',
|
||||
// 济南科目三
|
||||
trajectoryPath: 'logs/2024_08_07/2024_08_07_11_35_39_0000000000001_342323199501470011_测试学员1/judge_exam_data.txt',
|
||||
trajectoryPath: 'logs/2024_08_10/2024_08_10_14_24_20_0000000000001_342323199501470011_测试学员1/judge_exam_data.txt',
|
||||
//四合一画面配置
|
||||
fourInOneScreen:{
|
||||
//gps位数
|
||||
|
||||
@ -34,7 +34,7 @@ export default class JudgeImg {
|
||||
setTimeout(async ()=>{
|
||||
console.info(judgeTag,'1.进入评判入口')
|
||||
await examJudgeMapSetParam(640, 480); //设置参数宽、高
|
||||
await examJudgeMapSetScaling(120); //设置缩放比例,一般默认填100(就是100%的意思) ,数字越大视野越大,数字越小视野越小,不能为0
|
||||
await examJudgeMapSetScaling(100); //设置缩放比例,一般默认填100(就是100%的意思) ,数字越大视野越大,数字越小视野越小,不能为0
|
||||
})
|
||||
|
||||
judgeUI.draw = true
|
||||
|
||||
@ -42,17 +42,18 @@ export default class VoiceAnnounce{
|
||||
if(queue.length){
|
||||
//队列续上
|
||||
this.queue = this.queue.concat(tempUrls)
|
||||
|
||||
// console.info(TAG,'语音队列开始'+shit + JSON.stringify( this.queue))
|
||||
}else{
|
||||
this.queue = tempUrls
|
||||
// console.info(TAG,'语音队列开始' + shit+JSON.stringify( this.queue))
|
||||
await this.executeQueue()
|
||||
}
|
||||
}
|
||||
|
||||
async executeQueue(){
|
||||
const avPlayer = new AVPlayer();
|
||||
const go = async () => {
|
||||
const {queue,isStopped,newQueue} = this;
|
||||
const avPlayer = new AVPlayer();
|
||||
if(isStopped){
|
||||
//清空原来队列
|
||||
this.queue = newQueue
|
||||
@ -60,16 +61,16 @@ export default class VoiceAnnounce{
|
||||
await go()
|
||||
return
|
||||
}
|
||||
|
||||
console.info(TAG,'当前播放队列' + JSON.stringify( queue))
|
||||
await avPlayer.play(queue[0].url,queue[0].callback);
|
||||
this.queue.shift();
|
||||
console.info(TAG,JSON.stringify(this.queue),'堆栈弹出');
|
||||
console.info(TAG,'当前播放队列播放完成退出');
|
||||
avPlayer.avPlayerStop();
|
||||
if(this.queue.length){
|
||||
await go()
|
||||
}
|
||||
}
|
||||
await go()
|
||||
avPlayer.avPlayerStop();
|
||||
}
|
||||
|
||||
}
|
||||
@ -116,8 +117,7 @@ class AVPlayer {
|
||||
}catch (e){
|
||||
//检查SD中的语音
|
||||
this.endCallback = callback
|
||||
const avPlayer = await media.createAVPlayer();
|
||||
this.avPlayer = avPlayer;
|
||||
this.avPlayer = await media.createAVPlayer();
|
||||
return new Promise(async (resolve,reject) => {
|
||||
await this.setAVPlayerCallback(()=>{
|
||||
//@ts-ignore
|
||||
@ -189,6 +189,7 @@ class AVPlayer {
|
||||
this.avPlayer.prepare()
|
||||
break;
|
||||
case 'prepared': // prepare调用成功后上报该状态机
|
||||
console.info(TAG,'播放资源播放')
|
||||
this.avPlayer.play();
|
||||
this.voiceStatus = 'playing'
|
||||
break;
|
||||
@ -199,12 +200,13 @@ class AVPlayer {
|
||||
case 'completed': // 播放结束后触发该状态机上报
|
||||
this.voiceStatus = 'completed'
|
||||
this.avPlayer.stop(); //调用播放结束接口
|
||||
if(endCallback){
|
||||
endCallback()
|
||||
}
|
||||
break;
|
||||
case 'stopped': // stop接口成功调用后触发该状态机上报
|
||||
this.avPlayer.reset(); // 调用reset接口初始化avplayer状态
|
||||
console.info(TAG,'播放资源释放')
|
||||
if(endCallback){
|
||||
endCallback()
|
||||
}
|
||||
callBack()
|
||||
break;
|
||||
case 'released':
|
||||
|
||||
BIN
entry/src/main/resources/rawfile/judge/big.png
Normal file
BIN
entry/src/main/resources/rawfile/judge/big.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.8 KiB |
BIN
entry/src/main/resources/rawfile/judge/small.png
Normal file
BIN
entry/src/main/resources/rawfile/judge/small.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.4 KiB |
BIN
entry/src/main/resources/rawfile/voice/404004.mp3
Normal file
BIN
entry/src/main/resources/rawfile/voice/404004.mp3
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
entry/src/main/resources/rawfile/voice/点火.mp3
Normal file
BIN
entry/src/main/resources/rawfile/voice/点火.mp3
Normal file
Binary file not shown.
BIN
entry/src/main/resources/rawfile/voice/请关闭远近光灯.mp3
Normal file
BIN
entry/src/main/resources/rawfile/voice/请关闭远近光灯.mp3
Normal file
Binary file not shown.
BIN
entry/src/main/resources/rawfile/voice/请拉手刹.mp3
Normal file
BIN
entry/src/main/resources/rawfile/voice/请拉手刹.mp3
Normal file
Binary file not shown.
BIN
entry/src/main/resources/rawfile/voice/请置空档.mp3
Normal file
BIN
entry/src/main/resources/rawfile/voice/请置空档.mp3
Normal file
Binary file not shown.
BIN
entry/src/main/resources/rawfile/voice/请解开安全带.mp3
Normal file
BIN
entry/src/main/resources/rawfile/voice/请解开安全带.mp3
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user