feat_surenjun #51
@ -107,6 +107,7 @@
|
|||||||
*** JUDGE_USE_MEMORY //是否启用内存操作检查
|
*** JUDGE_USE_MEMORY //是否启用内存操作检查
|
||||||
*** JUDGE_USE_POOL //是否启用内存池调试信息
|
*** JUDGE_USE_POOL //是否启用内存池调试信息
|
||||||
*** JUDGE_USE_ASSERT //是否启用断言提示
|
*** JUDGE_USE_ASSERT //是否启用断言提示
|
||||||
|
*** JUDGE_USE_NICE //是否启用调试测试代码
|
||||||
*** JUDGE_USE_PERF //是否启用CPU性能分析
|
*** JUDGE_USE_PERF //是否启用CPU性能分析
|
||||||
*** JUDGE_USE_LEAK //是否启用内存泄露检测
|
*** JUDGE_USE_LEAK //是否启用内存泄露检测
|
||||||
*** JUDGE_USE_TCMALLOC //是否启用tcmalloc优化内存使用操作
|
*** JUDGE_USE_TCMALLOC //是否启用tcmalloc优化内存使用操作
|
||||||
@ -119,20 +120,26 @@
|
|||||||
#define JUDGE_USE_LOG
|
#define JUDGE_USE_LOG
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 是否启用一些调试用的信息,开发用
|
* 是否启用外壳APP侧传入参数严格检查
|
||||||
*/
|
*/
|
||||||
#if defined(JUDGE_OS_OHOS) || defined(JUDGE_OS_ANDROID) || defined(JUDGE_DEBUG__)
|
#if defined(JUDGE_OS_OHOS) || defined(JUDGE_OS_ANDROID) || defined(JUDGE_DEBUG__)
|
||||||
|
#define JUDGE_USE_STRICT
|
||||||
#define JUDGE_USE_STRICT //是否启用外壳APP侧传入参数严格检查
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define JUDGE_USE_CODE //是否启用系统在返回错误码的时候输出日志
|
/*
|
||||||
|
* 是否启用系统在返回错误码的时候输出日志
|
||||||
|
*/
|
||||||
|
#define JUDGE_USE_CODE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 是否启用函数执行耗时检测
|
||||||
|
* 是否启用内存操作检查
|
||||||
|
* 是否启用内存池调试信息
|
||||||
|
*/
|
||||||
#if 0
|
#if 0
|
||||||
#define JUDGE_USE_COST //是否启用函数执行耗时检测
|
#define JUDGE_USE_COST
|
||||||
#define JUDGE_USE_MEMORY //是否启用内存操作检查
|
#define JUDGE_USE_MEMORY
|
||||||
#define JUDGE_USE_POOL //是否启用内存池调试信息
|
#define JUDGE_USE_POOL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -143,6 +150,11 @@
|
|||||||
#define JUDGE_USE_ASSERT //是否启用断言提示
|
#define JUDGE_USE_ASSERT //是否启用断言提示
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 是否启用测试调试代码
|
||||||
|
*/
|
||||||
|
#define JUDGE_USE_NICE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 是否启用CPU性能分析和内存泄露检测
|
* 是否启用CPU性能分析和内存泄露检测
|
||||||
* 注意:目前只在linux系统并且在编译测试工程时前提下条件下才能开启
|
* 注意:目前只在linux系统并且在编译测试工程时前提下条件下才能开启
|
||||||
@ -159,6 +171,7 @@
|
|||||||
//#define JUDGE_USE_TCMALLOC //是否启用tcmalloc优化内存使用操作
|
//#define JUDGE_USE_TCMALLOC //是否启用tcmalloc优化内存使用操作
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 是否启用无锡科研所送检模式
|
* 是否启用无锡科研所送检模式
|
||||||
* 作者: 杨海洋
|
* 作者: 杨海洋
|
||||||
@ -189,12 +202,14 @@
|
|||||||
* 7.下一次再去无锡所检测,左转弯要用原始的ret2000
|
* 7.下一次再去无锡所检测,左转弯要用原始的ret2000
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
//#define JUDGE_USE_INSPECT
|
//#define JUDGE_USE_INSPECT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//********************************以上是预编译定义***************************************
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 基础整数类型定义
|
* 基础整数类型定义
|
||||||
*
|
*
|
||||||
|
|||||||
@ -3,6 +3,11 @@
|
|||||||
*
|
*
|
||||||
* 作者: 杨海洋
|
* 作者: 杨海洋
|
||||||
* 日期: 2024-01-03
|
* 日期: 2024-01-03
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
* 1、免考项目参数设置:systemparm表: NO1=1并且TXT3=1的是免考的,NO2是项目代码
|
||||||
|
*
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SYSPARMTABLE_H
|
#ifndef SYSPARMTABLE_H
|
||||||
|
|||||||
@ -147,7 +147,7 @@ class JUDGE_API SysSetTable : public IDBTable
|
|||||||
|
|
||||||
SYSSET_DECLARE(19, type_array, ":"); //夜间考试考试时间
|
SYSSET_DECLARE(19, type_array, ":"); //夜间考试考试时间
|
||||||
SYSSET_DECLARE(211); //考试地点参数
|
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(303); //行驶距离限制(米) //3000
|
||||||
SYSSET_DECLARE(306); //直行键(0-直行,1-加速行驶) //1
|
SYSSET_DECLARE(306); //直行键(0-直行,1-加速行驶) //1
|
||||||
SYSSET_DECLARE(307); //只考一次的项目 //5,15,16
|
SYSSET_DECLARE(307); //只考一次的项目 //5,15,16
|
||||||
|
|||||||
@ -59,6 +59,7 @@ ErrorCode ExamCarSub2::examGoonExam()
|
|||||||
{
|
{
|
||||||
if(m_stuInfo.ddxk)
|
if(m_stuInfo.ddxk)
|
||||||
{
|
{
|
||||||
|
m_disForward = m_stuInfo.yklc;
|
||||||
for(size_t i = 0; i < m_stuInfo.ykxm.size(); i++)
|
for(size_t i = 0; i < m_stuInfo.ykxm.size(); i++)
|
||||||
{
|
{
|
||||||
int itemNo = m_stuInfo.ykxm[i];
|
int itemNo = m_stuInfo.ykxm[i];
|
||||||
@ -365,7 +366,7 @@ ISub2JudgeItem* ExamCarSub2::readEnterItem()
|
|||||||
//必须是前进状态进项目
|
//必须是前进状态进项目
|
||||||
if(historyMoveState() != moveForward)
|
if(historyMoveState() != moveForward)
|
||||||
{
|
{
|
||||||
logdebug("not moveForward move=%d", m_cg->move);
|
//logdebug("not moveForward move=%d", m_cg->move);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
for(auto k = m_itemsAll.begin(); k != m_itemsAll.end(); k++)
|
for(auto k = m_itemsAll.begin(); k != m_itemsAll.end(); k++)
|
||||||
@ -389,7 +390,7 @@ ISub2JudgeItem* ExamCarSub2::readEnterItem()
|
|||||||
if(examItem->isFlagEnd())
|
if(examItem->isFlagEnd())
|
||||||
{
|
{
|
||||||
//已经考过,略过
|
//已经考过,略过
|
||||||
logdebug("exam already itemNo=%d.", itemEnter->itemNo());
|
//logdebug("exam already itemNo=%d.", itemEnter->itemNo());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -38,6 +38,7 @@ ErrorCode ExamCarSub3::examBeginExam()
|
|||||||
// loginfo("exam-item xmdm=%d", item.xmdm);
|
// loginfo("exam-item xmdm=%d", item.xmdm);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
m_disOffset = false;
|
||||||
m_pub = TPubKM3();
|
m_pub = TPubKM3();
|
||||||
std::string sError;
|
std::string sError;
|
||||||
if(!Init_KM3_Global(sError))
|
if(!Init_KM3_Global(sError))
|
||||||
@ -73,6 +74,7 @@ ErrorCode ExamCarSub3::examGoonExam()
|
|||||||
|
|
||||||
if(m_stuInfo.ddxk)
|
if(m_stuInfo.ddxk)
|
||||||
{
|
{
|
||||||
|
m_disForward = m_stuInfo.yklc;
|
||||||
//1、项目更改颜色
|
//1、项目更改颜色
|
||||||
for(size_t i = 0; i < m_stuInfo.ykxm.size(); i++)
|
for(size_t i = 0; i < m_stuInfo.ykxm.size(); i++)
|
||||||
{
|
{
|
||||||
@ -596,9 +598,7 @@ bool ExamCarSub3::Init_KM3_Global(std::string& sError)
|
|||||||
const TSystemparm* parm6 = TableSysParm->findParm6(itemNo);
|
const TSystemparm* parm6 = TableSysParm->findParm6(itemNo);
|
||||||
examItem->Item_Code = (parm6 != nullptr ? parm6->TXT2 : "");
|
examItem->Item_Code = (parm6 != nullptr ? parm6->TXT2 : "");
|
||||||
examItem->Item_Color = itemStateWk;
|
examItem->Item_Color = itemStateWk;
|
||||||
examItem->NoID = (parm1->TXT3 != "" ? true : false); //20180508 免考
|
examItem->NoID = (parm1->TXT3 == "1" ? true : false); //20180508 免考 //systemparm表: NO1=1并且TXT3=1的是免考的 20240731
|
||||||
|
|
||||||
//logdebug("ItemNo=%d,NoID=%s,TXT3=%s", examItem->ItemNo, examItem->NoID ? "true":"false", parm1->TXT3.c_str());
|
|
||||||
|
|
||||||
//加减挡免考
|
//加减挡免考
|
||||||
if(ksdd != siteof::chongqingkm3 && ksdd != siteof::jilinsongyuan && itemNo == Sub3ItemType14Jjdw)
|
if(ksdd != siteof::chongqingkm3 && ksdd != siteof::jilinsongyuan && itemNo == Sub3ItemType14Jjdw)
|
||||||
@ -1183,37 +1183,15 @@ void ExamCarSub3::Deal_KM3_Judge()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_pub.m_KsLjLc = m_stuInfo.yklc/100 + m_cg->ai_ljjl;
|
dealOffset();
|
||||||
m_cg->tkCnt = GetCurrentTick2();
|
|
||||||
m_cg->RTKKM3.CrossPointNo = lastCrossPtNo();
|
|
||||||
|
|
||||||
//ToDo1:执行通用评判
|
//ToDo1:执行通用评判
|
||||||
m_commItem->dealJudgeItem();
|
m_commItem->dealJudgeItem();
|
||||||
|
|
||||||
//(*2024-03-06*)
|
|
||||||
//ExamItemCode mitemno = m_cg->real.sensor.mitemno;
|
|
||||||
//if(mitemno != 0)
|
|
||||||
//{
|
|
||||||
// CallRenGongEnterItem(mitemno);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//240710
|
|
||||||
//if(m_cg->real.sensor.rmndg == SYES)
|
|
||||||
//{
|
|
||||||
// TKM3Item* item = findExamItem(Sub3ItemType41Mndg);
|
|
||||||
// if(item && item->TestPro == ItemProFlagIdle)
|
|
||||||
// {
|
|
||||||
// item->Item_Color = itemStateZk;
|
|
||||||
// item->TestPro = ItemProFlagInit;
|
|
||||||
// item->FinishFlag = false;
|
|
||||||
// //item->StartTime = GetCurrentTime2();
|
|
||||||
// //item->EndTime = 0;
|
|
||||||
// //item->MsgData = "";
|
|
||||||
// //createEventEnterItem({item->ItemNo, ""});
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
m_curItem = nullptr;
|
m_curItem = nullptr;
|
||||||
|
|
||||||
|
dealItemNoIDEnd14Jjdw(); //必须放这里
|
||||||
|
dealItemNoIDEndItem(); //必须放这里
|
||||||
//执行具体的专项评判
|
//执行具体的专项评判
|
||||||
std::string msg;
|
std::string msg;
|
||||||
for(auto it = m_sub3Items.begin(); it != m_sub3Items.end(); it++)
|
for(auto it = m_sub3Items.begin(); it != m_sub3Items.end(); it++)
|
||||||
@ -1336,6 +1314,17 @@ void ExamCarSub3::ClearRecord()
|
|||||||
RTKKM3.Wheel_RB_ToRightEdge = 0;
|
RTKKM3.Wheel_RB_ToRightEdge = 0;
|
||||||
|
|
||||||
RTKKM3.CrossLineAttr = TRTKResult::CrossLineAttr0;
|
RTKKM3.CrossLineAttr = TRTKResult::CrossLineAttr0;
|
||||||
|
|
||||||
|
|
||||||
|
//20240801
|
||||||
|
RTKKM3.TouchLineDirCS = TRTKResult::TouchDir0;
|
||||||
|
RTKKM3.BackPointLaneNo = 0;
|
||||||
|
RTKKM3.BackPointLaneCount = 0;
|
||||||
|
RTKKM3.Body_RF_ToBaseLine = 0;
|
||||||
|
RTKKM3.Body_RB_ToBaseLine = 0;
|
||||||
|
|
||||||
|
RTKKM3.DirInverse = 0;
|
||||||
|
RTKKM3.ShapeNoWheel = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExamCarSub3::GetMeshIndex()
|
void ExamCarSub3::GetMeshIndex()
|
||||||
@ -1508,27 +1497,54 @@ bool ExamCarSub3::RTKLane()
|
|||||||
if(i > roadSize - 1) break;
|
if(i > roadSize - 1) break;
|
||||||
|
|
||||||
const TMapRoadRec* road = FactoryRoads->getRoad(i);
|
const TMapRoadRec* road = FactoryRoads->getRoad(i);
|
||||||
const Pointi& pt = m_cg->body.points_b[0]; //CarStatus.Body_24_RealTimePt[0];
|
const Pointi& pt = m_cg->body.points_b[II(1)]; //CarStatus.Body_24_RealTimePt[0];
|
||||||
|
const Pointi& ptBack = m_cg->body.points_b[II(13)];
|
||||||
for(int j = 0; j < road->LaneCount; j++)
|
for(int j = 0; j < road->LaneCount; j++)
|
||||||
{
|
{
|
||||||
const TModelPolygon& poly = road->Lanes[j];
|
const TModelPolygon& poly = road->Lanes[j];
|
||||||
if(poly.Pts.size() >= 5)
|
if(poly.Pts.size() >= 5)
|
||||||
{
|
{
|
||||||
|
bool flag = false;
|
||||||
if(GpsMath::IsPtInArcLane(pt, poly))
|
if(GpsMath::IsPtInArcLane(pt, poly))
|
||||||
{
|
{
|
||||||
RTKKM3.FrontPointLaneNo = std::atoi(poly.LaneNo.c_str());
|
RTKKM3.FrontPointLaneNo = std::atoi(poly.LaneNo.c_str());
|
||||||
//共有几股车道
|
//共有几股车道
|
||||||
RTKKM3.FrontPointLaneCount = road->LaneCount;
|
RTKKM3.FrontPointLaneCount = road->LaneCount;
|
||||||
|
flag = true; //break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(GpsMath::IsPtInArcLane(ptBack, poly)) //20240801 yhy add
|
||||||
|
{
|
||||||
|
RTKKM3.BackPointLaneNo = std::atoi(poly.LaneNo.c_str());
|
||||||
|
//共有几股车道
|
||||||
|
RTKKM3.BackPointLaneCount = road->LaneCount;
|
||||||
|
flag = true; //break;
|
||||||
|
}
|
||||||
|
if(flag)
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
bool flag = false;
|
||||||
if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts))
|
if(GpsMath::IsPtInPoly(pt.x, pt.y, poly.Pts))
|
||||||
{
|
{
|
||||||
RTKKM3.FrontPointLaneNo = std::atoi(poly.LaneNo.c_str());
|
RTKKM3.FrontPointLaneNo = std::atoi(poly.LaneNo.c_str());
|
||||||
//共有几股车道
|
//共有几股车道
|
||||||
RTKKM3.FrontPointLaneCount = road->LaneCount;
|
RTKKM3.FrontPointLaneCount = road->LaneCount;
|
||||||
|
flag = true; //break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(GpsMath::IsPtInPoly(ptBack.x, ptBack.y, poly.Pts)) //20240801 yhy add
|
||||||
|
{
|
||||||
|
RTKKM3.BackPointLaneNo = std::atoi(poly.LaneNo.c_str());
|
||||||
|
//共有几股车道
|
||||||
|
RTKKM3.BackPointLaneCount = road->LaneCount;
|
||||||
|
flag = true; //break;
|
||||||
|
}
|
||||||
|
if(flag)
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1538,7 +1554,7 @@ bool ExamCarSub3::RTKLane()
|
|||||||
//判断车轮压线类型
|
//判断车轮压线类型
|
||||||
RTKKM3.TouchLineType = LineTag0;
|
RTKKM3.TouchLineType = LineTag0;
|
||||||
//2019-4-22
|
//2019-4-22
|
||||||
RTKKM3.TouchDir = 0;
|
RTKKM3.TouchDir = TRTKResult::TouchDir0;
|
||||||
for(int p = curRoadIndex - 1; p <= curRoadIndex + 1; p++)
|
for(int p = curRoadIndex - 1; p <= curRoadIndex + 1; p++)
|
||||||
{
|
{
|
||||||
if(p < 0 || p > roadSize - 1) continue;
|
if(p < 0 || p > roadSize - 1) continue;
|
||||||
@ -1851,6 +1867,7 @@ void ExamCarSub3::Calc_LaneDistance()
|
|||||||
const TMeshDefine* curMesh = FactoryMesh->getMesh(m_meshIndex);
|
const TMeshDefine* curMesh = FactoryMesh->getMesh(m_meshIndex);
|
||||||
TASSERT_VOID(curMesh != nullptr, "");
|
TASSERT_VOID(curMesh != nullptr, "");
|
||||||
|
|
||||||
|
const TModelLine* laneDriving = nullptr;
|
||||||
for(int p = 1; p <= 4; p++)
|
for(int p = 1; p <= 4; p++)
|
||||||
{
|
{
|
||||||
for(int i = curRoadIndex - 2; i <= curRoadIndex + 2; i++)
|
for(int i = curRoadIndex - 2; i <= curRoadIndex + 2; i++)
|
||||||
@ -1887,6 +1904,7 @@ void ExamCarSub3::Calc_LaneDistance()
|
|||||||
{
|
{
|
||||||
if(p == 1) //1、车轮与本车道右侧距离
|
if(p == 1) //1、车轮与本车道右侧距离
|
||||||
{
|
{
|
||||||
|
laneDriving = &road->BorderLines[0];
|
||||||
for(int k = 1; k <= 4; k++)
|
for(int k = 1; k <= 4; k++)
|
||||||
{
|
{
|
||||||
Pointi pt;
|
Pointi pt;
|
||||||
@ -1921,7 +1939,7 @@ void ExamCarSub3::Calc_LaneDistance()
|
|||||||
}
|
}
|
||||||
else if(p == 2) //2:车轮与最右侧车道右侧距离
|
else if(p == 2) //2:车轮与最右侧车道右侧距离
|
||||||
{
|
{
|
||||||
for(int k = 1; k <= 4; k++)
|
for(int k = 1; k <= 6; k++)
|
||||||
{
|
{
|
||||||
Pointi pt;
|
Pointi pt;
|
||||||
switch(k)
|
switch(k)
|
||||||
@ -1930,6 +1948,8 @@ void ExamCarSub3::Calc_LaneDistance()
|
|||||||
case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime;
|
case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime;
|
||||||
case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime;
|
case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime;
|
||||||
case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime;
|
case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime;
|
||||||
|
case 5: pt = body.points_b[RightBody1]; break; //20240801
|
||||||
|
case 6: pt = body.points_b[RightBody2]; break; //20240801
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
line.PtBegin = body.b1_b; // CarStatus.BasePoint1_RealTime;
|
line.PtBegin = body.b1_b; // CarStatus.BasePoint1_RealTime;
|
||||||
@ -1948,6 +1968,8 @@ void ExamCarSub3::Calc_LaneDistance()
|
|||||||
case 2: RTKKM3.Wheel_RF_ToBaseLine = distance; break;
|
case 2: RTKKM3.Wheel_RF_ToBaseLine = distance; break;
|
||||||
case 3: RTKKM3.Wheel_LB_ToBaseLine = distance; break;
|
case 3: RTKKM3.Wheel_LB_ToBaseLine = distance; break;
|
||||||
case 4: RTKKM3.Wheel_RB_ToBaseLine = distance; break;
|
case 4: RTKKM3.Wheel_RB_ToBaseLine = distance; break;
|
||||||
|
case 5: RTKKM3.Body_RF_ToBaseLine = distance; break; //20240801
|
||||||
|
case 6: RTKKM3.Body_RB_ToBaseLine = distance; break; //20240801
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2018,6 +2040,7 @@ void ExamCarSub3::Calc_LaneDistance()
|
|||||||
{
|
{
|
||||||
if(p == 1) //1、车轮与本车道右侧距离
|
if(p == 1) //1、车轮与本车道右侧距离
|
||||||
{
|
{
|
||||||
|
laneDriving = &road->BorderLines[0];
|
||||||
for(int k = 1; k <= 4; k++)
|
for(int k = 1; k <= 4; k++)
|
||||||
{
|
{
|
||||||
Pointi pt;
|
Pointi pt;
|
||||||
@ -2055,7 +2078,7 @@ void ExamCarSub3::Calc_LaneDistance()
|
|||||||
}
|
}
|
||||||
else if(p == 2) //2:车轮与最右侧车道右侧距离
|
else if(p == 2) //2:车轮与最右侧车道右侧距离
|
||||||
{
|
{
|
||||||
for(int k = 1; k <= 4; k++)
|
for(int k = 1; k <= 6; k++)
|
||||||
{
|
{
|
||||||
Pointi pt;
|
Pointi pt;
|
||||||
switch(k)
|
switch(k)
|
||||||
@ -2064,6 +2087,8 @@ void ExamCarSub3::Calc_LaneDistance()
|
|||||||
case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime;
|
case 2: pt = body.YQ_W_b; break; //CarStatus.CheLun_Wai_YQ_RealTime;
|
||||||
case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime;
|
case 3: pt = body.ZH_W_b; break; //CarStatus.CheLun_Wai_ZH_RealTime;
|
||||||
case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime;
|
case 4: pt = body.YH_W_b; break; //CarStatus.CheLun_Wai_YH_RealTime;
|
||||||
|
case 5: pt = body.points_b[RightBody1]; break; //20240801
|
||||||
|
case 6: pt = body.points_b[RightBody2]; break; //20240801
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
line.PtBegin = body.b1_b;
|
line.PtBegin = body.b1_b;
|
||||||
@ -2085,6 +2110,8 @@ void ExamCarSub3::Calc_LaneDistance()
|
|||||||
case 2: RTKKM3.Wheel_RF_ToBaseLine = distance; break;
|
case 2: RTKKM3.Wheel_RF_ToBaseLine = distance; break;
|
||||||
case 3: RTKKM3.Wheel_LB_ToBaseLine = distance; break;
|
case 3: RTKKM3.Wheel_LB_ToBaseLine = distance; break;
|
||||||
case 4: RTKKM3.Wheel_RB_ToBaseLine = distance; break;
|
case 4: RTKKM3.Wheel_RB_ToBaseLine = distance; break;
|
||||||
|
case 5: RTKKM3.Body_RF_ToBaseLine = distance; break; //20240801
|
||||||
|
case 6: RTKKM3.Body_RB_ToBaseLine = distance; break; //20240801
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2155,17 +2182,22 @@ void ExamCarSub3::Calc_LaneDistance()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} /////////////////////////////////////////////////////////////////////////
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//计算是否逆向行驶1正向行驶 -1逆向行驶
|
||||||
|
RTKKM3.DirInverse = driveDirection(laneDriving);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//计算车身压线
|
//计算车身压线
|
||||||
void ExamCarSub3::Calc_CheShenYaXian()
|
void ExamCarSub3::Calc_CheShenYaXian()
|
||||||
{
|
{
|
||||||
TRTKResult& RTKKM3 = m_cg->RTKKM3;
|
TRTKResult& RTKKM3 = m_cg->RTKKM3;
|
||||||
|
int curLaneIndex = RTKKM3.LaneIndex;
|
||||||
RTKKM3.TouchLineTypeCS = LineTag0;
|
RTKKM3.TouchLineTypeCS = LineTag0;
|
||||||
if(RTKKM3.MapRoadIndex == INVALID_INDEX) return;
|
if(RTKKM3.MapRoadIndex == INVALID_INDEX) return;
|
||||||
if(RTKKM3.LaneIndex == INVALID_INDEX) return;
|
if(RTKKM3.LaneIndex == INVALID_INDEX) return;
|
||||||
@ -2178,7 +2210,7 @@ void ExamCarSub3::Calc_CheShenYaXian()
|
|||||||
poly.Pts[i] = ps[i];
|
poly.Pts[i] = ps[i];
|
||||||
}
|
}
|
||||||
const TMapRoadRec* road = FactoryRoads->getRoad(RTKKM3.MapRoadIndex);
|
const TMapRoadRec* road = FactoryRoads->getRoad(RTKKM3.MapRoadIndex);
|
||||||
for(int i = RTKKM3.LaneIndex; i <= RTKKM3.LaneIndex + 1; i++)
|
for(int i = curLaneIndex; i <= curLaneIndex + 1; i++)
|
||||||
{
|
{
|
||||||
const TModelLine& line = road->BorderLines[i];
|
const TModelLine& line = road->BorderLines[i];
|
||||||
if(line.Radius == 0)
|
if(line.Radius == 0)
|
||||||
@ -2186,6 +2218,7 @@ void ExamCarSub3::Calc_CheShenYaXian()
|
|||||||
if(GpsMath::IsLineCrossPoly(line, poly))
|
if(GpsMath::IsLineCrossPoly(line, poly))
|
||||||
{
|
{
|
||||||
RTKKM3.TouchLineTypeCS = line.tag1;
|
RTKKM3.TouchLineTypeCS = line.tag1;
|
||||||
|
RTKKM3.TouchLineDirCS = (i == curLaneIndex ? TRTKResult::TouchDir1 : TRTKResult::TouchDir_1); //20240801 yhy add
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2194,6 +2227,7 @@ void ExamCarSub3::Calc_CheShenYaXian()
|
|||||||
if(GpsMath::IsPolyCrossArc(poly, line))
|
if(GpsMath::IsPolyCrossArc(poly, line))
|
||||||
{
|
{
|
||||||
RTKKM3.TouchLineTypeCS = line.tag1;
|
RTKKM3.TouchLineTypeCS = line.tag1;
|
||||||
|
RTKKM3.TouchLineDirCS = (i == curLaneIndex ? TRTKResult::TouchDir1 : TRTKResult::TouchDir_1); //20240801 yhy add
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2255,24 +2289,43 @@ void ExamCarSub3::RTKJudge_SubItem()
|
|||||||
if(curMesh->MapSubItemKeyLen == 0) return;
|
if(curMesh->MapSubItemKeyLen == 0) return;
|
||||||
|
|
||||||
TChuanGan* his = historyChuanGan(1);
|
TChuanGan* his = historyChuanGan(1);
|
||||||
//TASSERT_VOID(his != nullptr, "");
|
|
||||||
if(his == nullptr) return;
|
if(his == nullptr) return;
|
||||||
//if(CarStatus.Body_24_RealTimePt_LS[0].X = 0) and (CarStatus.Body_24_RealTimePt_LS[0].Y = 0) then Exit;
|
|
||||||
TModelLine line;
|
TModelLine line;
|
||||||
line.PtBegin = m_cg->body.points_b[0]; //CarStatus.Body_24_RealTimePt[0].X;
|
line.PtBegin = m_cg->body.points_b[II(1)];
|
||||||
line.PtEnd = his->body.points_b[0]; //CarStatus.Body_24_RealTimePt_LS[0].X;
|
line.PtEnd = his->body.points_b[II(1)];
|
||||||
|
|
||||||
|
//20240801 begin
|
||||||
|
TModelLine lineWF;
|
||||||
|
lineWF.PtBegin = GpsMath::calcCenterPoint(m_cg->body.ZQ_W_b, m_cg->body.YQ_W_b);
|
||||||
|
lineWF.PtEnd = GpsMath::calcCenterPoint(his->body.ZQ_W_b, his->body.YQ_W_b);
|
||||||
|
|
||||||
|
//TModelLine lineWB;
|
||||||
|
//lineWB.PtBegin = GpsMath::calcCenterPoint(m_cg->body.ZH_W_b, m_cg->body.YH_W_b);
|
||||||
|
//lineWB.PtEnd = GpsMath::calcCenterPoint(his->body.ZH_W_b, his->body.YH_W_b);
|
||||||
|
|
||||||
|
//TModelLine lineWZ;
|
||||||
|
//lineWZ.PtBegin = GpsMath::calcCenterPoint(m_cg->body.ZQ_W_b, m_cg->body.YQ_W_b);
|
||||||
|
//lineWZ.PtEnd = GpsMath::calcCenterPoint(m_cg->body.ZH_W_b, m_cg->body.YH_W_b);
|
||||||
|
|
||||||
|
TModelPolygon polyW;
|
||||||
|
polyW.Pts.resize(4);
|
||||||
|
polyW.Pts[0] = m_cg->body.ZQ_W_b;
|
||||||
|
polyW.Pts[1] = m_cg->body.YQ_W_b;
|
||||||
|
polyW.Pts[2] = m_cg->body.YH_W_b;
|
||||||
|
polyW.Pts[3] = m_cg->body.ZH_W_b;
|
||||||
|
//20240801 end
|
||||||
|
|
||||||
//车身24点
|
//车身24点
|
||||||
TModelPolygon poly1;
|
TModelPolygon poly1;
|
||||||
poly1.Pts.resize(24); //SetLength(TempPolygon1.Pts, 24);
|
poly1.Pts.resize(24);
|
||||||
for(int I = 0; I < 24; I++)
|
for(int i = 0; i < 24; i++)
|
||||||
{
|
{
|
||||||
poly1.Pts[I] = m_cg->body.points_b[I];
|
poly1.Pts[i] = m_cg->body.points_b[i];
|
||||||
}
|
}
|
||||||
for(int I = 0; I < curMesh->MapSubItemKeyLen; I++)
|
for(int i = 0; i < curMesh->MapSubItemKeyLen; i++)
|
||||||
{
|
{
|
||||||
//CrossLineAttr //0-未越线 1-停车线 2-中心点右侧线 3-等待控制线 20150119
|
//CrossLineAttr //0-未越线 1-停车线 2-中心点右侧线 3-等待控制线 20150119
|
||||||
int idx = curMesh->MapSubItem_Keys[I];
|
int idx = curMesh->MapSubItem_Keys[i];
|
||||||
const TMapSubItemRec* subItem = FactorySharps->getSharp(idx);
|
const TMapSubItemRec* subItem = FactorySharps->getSharp(idx);
|
||||||
SubNameTag subName = (SubNameTag)std::atoi(subItem->SubName.c_str());
|
SubNameTag subName = (SubNameTag)std::atoi(subItem->SubName.c_str());
|
||||||
int SNO = subItem->SNO;
|
int SNO = subItem->SNO;
|
||||||
@ -2283,65 +2336,83 @@ void ExamCarSub3::RTKJudge_SubItem()
|
|||||||
//如果subName=4 2个点关联的路口环岛线,外面几乎用不到,用于路口项目,不能读到这个路口环岛线,否则压扣分(Mark(5,'5');
|
//如果subName=4 2个点关联的路口环岛线,外面几乎用不到,用于路口项目,不能读到这个路口环岛线,否则压扣分(Mark(5,'5');
|
||||||
if(subName == SubNameTag0)
|
if(subName == SubNameTag0)
|
||||||
{
|
{
|
||||||
|
bool flag = false;
|
||||||
if(GpsMath::IsCross(line, subItem->Line1))
|
if(GpsMath::IsCross(line, subItem->Line1))
|
||||||
{
|
{
|
||||||
//0-未越线 1-停车线 2-中心点右侧线 3-等待控制线 20150119
|
//0-未越线 1-停车线 2-中心点右侧线 3-等待控制线 20150119
|
||||||
RTKKM3.CrossLineAttr = TRTKResult::CrossLineAttr1;
|
RTKKM3.CrossLineAttr = TRTKResult::CrossLineAttr1;
|
||||||
RTKKM3.ShapeNo = SNO;
|
RTKKM3.ShapeNo = SNO;
|
||||||
//RTKKM3.LS_ShapeNo = 0;
|
|
||||||
m_pub.m_SNO = 0;
|
m_pub.m_SNO = 0;
|
||||||
break;
|
flag = true; //break;
|
||||||
|
}
|
||||||
|
//20240801
|
||||||
|
if(GpsMath::IsCross(lineWF, subItem->Line1))
|
||||||
|
{
|
||||||
|
RTKKM3.ShapeNoWheel = SNO;
|
||||||
|
flag = true; //break;
|
||||||
|
}
|
||||||
|
if(flag)
|
||||||
|
{
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(subName == SubNameTag1) //3个点关联
|
else if(subName == SubNameTag1) //3个点关联
|
||||||
{
|
{
|
||||||
|
bool flag = false;
|
||||||
if(GpsMath::IsCross(line, subItem->Line1))
|
if(GpsMath::IsCross(line, subItem->Line1))
|
||||||
{
|
{
|
||||||
//0-未越线 1-停车线 2-中心点右侧线 3-等待控制线 20150119
|
//0-未越线 1-停车线 2-中心点右侧线 3-等待控制线 20150119
|
||||||
RTKKM3.CrossLineAttr = TRTKResult::CrossLineAttr1;
|
RTKKM3.CrossLineAttr = TRTKResult::CrossLineAttr1;
|
||||||
RTKKM3.ShapeNo = SNO;
|
RTKKM3.ShapeNo = SNO;
|
||||||
//RTKKM3.LS_ShapeNo = SNO;
|
|
||||||
m_pub.m_SNO = SNO;
|
m_pub.m_SNO = SNO;
|
||||||
RTKKM3.CrossPoint = subItem->Point2;
|
RTKKM3.CrossPoint = subItem->Point2;
|
||||||
|
|
||||||
const Pointi& p1 = subItem->Line3.PtBegin;
|
const Pointi& p1 = subItem->Line3.PtBegin;
|
||||||
const Pointi& p2 = subItem->Line3.PtEnd;
|
const Pointi& p2 = subItem->Line3.PtEnd;
|
||||||
// Result := Round(SQRT(SQR(pt2.X - pt1.X) + SQR(pt2.Y - pt1.Y)));
|
|
||||||
int x = p1.x - p2.x; int y = p1.y - p2.y;
|
int x = p1.x - p2.x; int y = p1.y - p2.y;
|
||||||
RTKKM3.CrossShapeLength = std::round(std::sqrt(x*x + y*y));
|
RTKKM3.CrossShapeLength = std::round(std::sqrt(x*x + y*y));
|
||||||
break;
|
flag = true; //break;
|
||||||
}
|
}
|
||||||
|
//20240801
|
||||||
|
if(GpsMath::IsCross(lineWF, subItem->Line1))
|
||||||
|
{
|
||||||
|
RTKKM3.ShapeNoWheel = SNO;
|
||||||
|
flag = true; //break;
|
||||||
|
}
|
||||||
|
|
||||||
if(m_pub.m_SNO == SNO) //RTKKM3.LS_ShapeNo == SNO
|
if(m_pub.m_SNO == SNO) //RTKKM3.LS_ShapeNo == SNO
|
||||||
{
|
{
|
||||||
if(GpsMath::IsCross(line, subItem->Line3))
|
if(GpsMath::IsCross(line, subItem->Line3))
|
||||||
{
|
{
|
||||||
RTKKM3.CrossLineAttr = TRTKResult::CrossLineAttr2; //中心点右侧
|
RTKKM3.CrossLineAttr = TRTKResult::CrossLineAttr2; //中心点右侧
|
||||||
RTKKM3.ShapeNo = SNO;
|
RTKKM3.ShapeNo = SNO;
|
||||||
//RTKKM3.LS_ShapeNo = 0;
|
|
||||||
m_pub.m_SNO = 0;
|
m_pub.m_SNO = 0;
|
||||||
}
|
}
|
||||||
else if(GpsMath::IsCross(line, subItem->Line2))
|
else if(GpsMath::IsCross(line, subItem->Line2))
|
||||||
{
|
{
|
||||||
//RTKKM3.LS_ShapeNo = 0;
|
|
||||||
m_pub.m_SNO = 0;
|
m_pub.m_SNO = 0;
|
||||||
}
|
}
|
||||||
const Pointi& p1 = RTKKM3.CrossPoint;
|
const Pointi& p1 = RTKKM3.CrossPoint;
|
||||||
const Pointi& p2 = m_cg->body.b1_b; //CarStatus.BasePoint1_RealTime;
|
const Pointi& p2 = m_cg->body.b1_b;
|
||||||
int x = p1.x - p2.x; int y = p1.y - p2.y;
|
int x = p1.x - p2.x; int y = p1.y - p2.y;
|
||||||
int dis = std::round(std::sqrt(x*x + y*y)); //TempDis = Round(SQRT(SQR(TempPt1.X - TempPt2.X) + SQR(TempPt1.Y - TempPt2.Y)));
|
int dis = std::round(std::sqrt(x*x + y*y));
|
||||||
if(dis > RTKKM3.CrossShapeLength * 3) //3--6 20170924
|
if(dis > RTKKM3.CrossShapeLength * 3) //3--6 20170924
|
||||||
{
|
{
|
||||||
//RTKKM3.LS_ShapeNo = 0;
|
|
||||||
m_pub.m_SNO = 0;
|
m_pub.m_SNO = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(flag)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(subName == SubNameTag2) //4个点关联
|
else if(subName == SubNameTag2) //4个点关联
|
||||||
{
|
{
|
||||||
|
bool flag = false;
|
||||||
//SubName=2,4个点关联的,比如:斑马线、公交站台
|
//SubName=2,4个点关联的,比如:斑马线、公交站台
|
||||||
//ItemNo:6 斑马线,4个点关联 (需要减速、不能停车、夜考的时候,需要远近光灯交替)
|
//ItemNo:6 斑马线,4个点关联 (需要减速、不能停车、夜考的时候,需要远近光灯交替)
|
||||||
//ItemNo:53 黄色网格线(类似公交站台),禁止停车
|
//ItemNo:53 黄色网格线(类似公交站台),禁止停车
|
||||||
const Pointi& p = m_cg->body.b1_b; // CarStatus.BasePoint1_RealTime;
|
const Pointi& p = m_cg->body.b1_b;
|
||||||
const TModelPolygon& poly2 = subItem->Polygon;
|
const TModelPolygon& poly2 = subItem->Polygon;
|
||||||
if(GpsMath::IsIntersect(poly1, poly2) || GpsMath::IsPtInPoly(p.x, p.y, poly2.Pts))
|
if(GpsMath::IsIntersect(poly1, poly2) || GpsMath::IsPtInPoly(p.x, p.y, poly2.Pts))
|
||||||
{
|
{
|
||||||
@ -2350,32 +2421,55 @@ void ExamCarSub3::RTKJudge_SubItem()
|
|||||||
{
|
{
|
||||||
RTKKM3.InShapeAttr = TRTKResult::InShapeAttr1; //0-不在形状里 1-在人行道内 2-在网格线内
|
RTKKM3.InShapeAttr = TRTKResult::InShapeAttr1; //0-不在形状里 1-在人行道内 2-在网格线内
|
||||||
RTKKM3.ShapeNo = SNO;
|
RTKKM3.ShapeNo = SNO;
|
||||||
//RTKKM3.LS_ShapeNo = 0;
|
|
||||||
}
|
}
|
||||||
else if(itemNo == ItemNoTag53) //黄色网格线
|
else if(itemNo == ItemNoTag53) //黄色网格线
|
||||||
{
|
{
|
||||||
RTKKM3.InShapeAttr = TRTKResult::InShapeAttr2;
|
RTKKM3.InShapeAttr = TRTKResult::InShapeAttr2;
|
||||||
RTKKM3.ShapeNo = SNO;
|
RTKKM3.ShapeNo = SNO;
|
||||||
//RTKKM3.LS_ShapeNo = 0;
|
|
||||||
}
|
}
|
||||||
break;
|
flag = true; //break;
|
||||||
|
}
|
||||||
|
|
||||||
|
//20240801
|
||||||
|
if(GpsMath::IsIntersect(polyW, poly2)
|
||||||
|
|| GpsMath::IsPtInPoly(polyW.Pts[0], poly2.Pts)
|
||||||
|
|| GpsMath::IsPtInPoly(polyW.Pts[1], poly2.Pts)
|
||||||
|
|| GpsMath::IsPtInPoly(polyW.Pts[2], poly2.Pts)
|
||||||
|
|| GpsMath::IsPtInPoly(polyW.Pts[3], poly2.Pts))
|
||||||
|
{
|
||||||
|
RTKKM3.ShapeNoWheel = SNO;
|
||||||
|
flag = true; //break;
|
||||||
|
}
|
||||||
|
if(flag)
|
||||||
|
{
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(subName == SubNameTag3) //2个点关联的等待控制线
|
else if(subName == SubNameTag3) //2个点关联的等待控制线 (深圳,在这个线上,处理特殊的等待业务)
|
||||||
{
|
{
|
||||||
RTKKM3.CrossLineAttr = TRTKResult::CrossLineAttr3;
|
RTKKM3.CrossLineAttr = TRTKResult::CrossLineAttr3;
|
||||||
RTKKM3.ShapeNo = SNO;
|
RTKKM3.ShapeNo = SNO;
|
||||||
//RTKKM3.LS_ShapeNo = 0;
|
RTKKM3.ShapeNoWheel = SNO; //20240801
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if(subName == SubNameTag4) //2个点关联的路口环岛线,外面几乎用不到,用于路口项目,不能读到这个路口环岛线,否则压扣分(Mark(5,'5');
|
else if(subName == SubNameTag4) //2个点关联的路口环岛线,外面几乎用不到,用于路口项目,不能读到这个路口环岛线,否则压扣分(Mark(5,'5');
|
||||||
{
|
{
|
||||||
|
bool flag = false;
|
||||||
if(GpsMath::IsLineCrossPoly(subItem->Line1, poly1))
|
if(GpsMath::IsLineCrossPoly(subItem->Line1, poly1))
|
||||||
{
|
{
|
||||||
RTKKM3.CrossLineAttr = TRTKResult::CrossLineAttr4;
|
RTKKM3.CrossLineAttr = TRTKResult::CrossLineAttr4;
|
||||||
RTKKM3.ShapeNo = SNO;
|
RTKKM3.ShapeNo = SNO;
|
||||||
//RTKKM3.LS_ShapeNo = 0;
|
flag = true; //break;
|
||||||
break;
|
}
|
||||||
|
//20240801
|
||||||
|
if(GpsMath::IsLineCrossPoly(subItem->Line1, polyW))
|
||||||
|
{
|
||||||
|
RTKKM3.ShapeNoWheel = SNO;
|
||||||
|
flag = true; //break;
|
||||||
|
}
|
||||||
|
if(flag)
|
||||||
|
{
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3351,10 +3445,13 @@ void ExamCarSub3::ReadItemByPoint(int crossPointNo)
|
|||||||
const std::string& s319 = TableSysSet->get319();
|
const std::string& s319 = TableSysSet->get319();
|
||||||
//SysSet[319]: 1:必须达到里程,才能进入靠边停车
|
//SysSet[319]: 1:必须达到里程,才能进入靠边停车
|
||||||
//SysSet[319]: 2:必须达到里程,并且完成必考项目。才能进入靠边停车
|
//SysSet[319]: 2:必须达到里程,并且完成必考项目。才能进入靠边停车
|
||||||
if(s319 == "1" && m_pub.m_KsLjLc < m_car.XSJL) return;
|
if(s319 == "1")
|
||||||
|
{
|
||||||
|
if(!isMileage()) return;
|
||||||
|
}
|
||||||
if(s319 == "2")
|
if(s319 == "2")
|
||||||
{
|
{
|
||||||
if(m_pub.m_KsLjLc < m_car.XSJL) return;
|
if(!isMileage()) return;
|
||||||
bool unfinished = false;
|
bool unfinished = false;
|
||||||
for(auto it = m_sub3Items.begin(); it != m_sub3Items.end(); it++)
|
for(auto it = m_sub3Items.begin(); it != m_sub3Items.end(); it++)
|
||||||
{
|
{
|
||||||
@ -3377,6 +3474,7 @@ void ExamCarSub3::ReadItemByPoint(int crossPointNo)
|
|||||||
if(item->Item_Color == itemStateZk)
|
if(item->Item_Color == itemStateZk)
|
||||||
{
|
{
|
||||||
unfinished = true;
|
unfinished = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3746,8 +3844,7 @@ bool ExamCarSub3::KM3AllPass()
|
|||||||
//里程不够
|
//里程不够
|
||||||
if(isQualified()) //当前是合格的
|
if(isQualified()) //当前是合格的
|
||||||
{
|
{
|
||||||
int s336 = TableSysSet->asInt336();
|
if(!isMileage()) //里程不够
|
||||||
if(m_pub.m_KsLjLc + s336 < m_car.XSJL)
|
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -3767,7 +3864,7 @@ bool ExamCarSub3::KM3AllPass()
|
|||||||
}
|
}
|
||||||
//科目三项目结束,免考项目处理
|
//科目三项目结束,免考项目处理
|
||||||
//重要流程
|
//重要流程
|
||||||
if(item->NoID == true)
|
if(item->NoID == true) //20240731
|
||||||
{
|
{
|
||||||
if(item->FinishFlag == false)
|
if(item->FinishFlag == false)
|
||||||
{
|
{
|
||||||
@ -3980,7 +4077,7 @@ bool ExamCarSub3::examMarkItem(int itemNo, const std::string& serial, bool once,
|
|||||||
(itemNo == Sub3ItemType04Bgcd && serial == "43") )
|
(itemNo == Sub3ItemType04Bgcd && serial == "43") )
|
||||||
{
|
{
|
||||||
if(m_cg->ai_ljjl < 500) return result;
|
if(m_cg->ai_ljjl < 500) return result;
|
||||||
if(m_pub.m_KsLjLc + TableSysSet->asInt336() >= m_car.XSJL) return result;
|
if(isMileage()) return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4496,3 +4593,96 @@ bool ExamCarSub3::itemsSomeExaming2(ExamItemCode itemno) const
|
|||||||
TKM3Item* item = findExamItem(itemno);
|
TKM3Item* item = findExamItem(itemno);
|
||||||
return item && (item->TestPro == ItemProFlagInit || item->TestPro == ItemProFlagJudge);
|
return item && (item->TestPro == ItemProFlagInit || item->TestPro == ItemProFlagJudge);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ExamCarSub3::isMileage() const
|
||||||
|
{
|
||||||
|
return m_pub.m_KsLjLc > m_car.XSJL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ExamCarSub3::dealOffset()
|
||||||
|
{
|
||||||
|
m_pub.m_KsLjLc = m_cg->ai_ljjl;
|
||||||
|
m_cg->tkCnt = GetCurrentTick2();
|
||||||
|
m_cg->RTKKM3.CrossPointNo = lastCrossPtNo();
|
||||||
|
|
||||||
|
int s336 = TableSysSet->asInt336();
|
||||||
|
if(m_disOffset == false && s336 > 0 && m_pub.m_KsLjLc + s336 >= m_car.XSJL)
|
||||||
|
{
|
||||||
|
m_disOffset = true;
|
||||||
|
m_disForward += (s336*100); //基础里程设置补偿
|
||||||
|
m_cg->ai_ljjl_cm = m_disForward;
|
||||||
|
m_cg->ai_ljjl = m_disForward/100.0;
|
||||||
|
m_pub.m_KsLjLc = m_cg->ai_ljjl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ExamCarSub3::dealItemNoIDEndItem()
|
||||||
|
{
|
||||||
|
if(isMileage())
|
||||||
|
{
|
||||||
|
for(auto it = m_sub3Items.begin(); it != m_sub3Items.end(); it++)
|
||||||
|
{
|
||||||
|
TKM3Item* item = it->second->getExamItem();
|
||||||
|
if(item->NoID == true && item->ItemNo != Sub3ItemType14Jjdw) //20240731
|
||||||
|
{
|
||||||
|
if(item->FinishFlag == false)
|
||||||
|
{
|
||||||
|
KM3EndItem(item->ItemNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ExamCarSub3::dealItemNoIDEnd14Jjdw()
|
||||||
|
{
|
||||||
|
TKM3Item* item14 = findExamItem(Sub3ItemType14Jjdw); //20240731
|
||||||
|
if(item14 && item14->NoID == true) //免考加减挡的 即:全程加减档
|
||||||
|
{
|
||||||
|
if(item14->Item_Color == itemStateWk)
|
||||||
|
{
|
||||||
|
TTestCtl* ctl = getTTestCtl();
|
||||||
|
if(ctl->dw_kf_sj == 1) //301 第3个^参数 1:达到行驶里程 非1靠边停车开始前
|
||||||
|
{
|
||||||
|
if(isMileage())
|
||||||
|
{
|
||||||
|
//ToDo1:生成 全程加减挡 进项目事件
|
||||||
|
//createEventEnterItem({item14->ItemNo, ""});
|
||||||
|
KM3EndItem(item14->ItemNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TKM3Item* item = findExamItem(Sub3ItemType11Kbtc);
|
||||||
|
if(item && item->TestPro == ItemProFlagInit)
|
||||||
|
{
|
||||||
|
//ToDo1:生成 全程加减挡 进项目事件
|
||||||
|
//createEventEnterItem({item14->ItemNo, ""});
|
||||||
|
KM3EndItem(item14->ItemNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DriveDirType ExamCarSub3::driveDirection(const TModelLine* lane)
|
||||||
|
{
|
||||||
|
//ptBegin 车道线起始点
|
||||||
|
//ptEnd 车道线起终点点
|
||||||
|
//double angle1 = GpsMath::getAngle(lane->PtBegin, lane->PtEnd);
|
||||||
|
//double angle2 = GpsMath::getAngle(m_cg->body.points_b[II(13)], m_cg->body.points_b[II(1)]);
|
||||||
|
double a1 = GpsMath::GetAngle_HQ(lane->PtBegin, lane->PtEnd, -1);
|
||||||
|
double a2 = GpsMath::GetAngle_HQ(m_cg->body.points_b[II(13)], m_cg->body.points_b[II(1)], -1);
|
||||||
|
|
||||||
|
DriveDirType dir = DriveDirX;
|
||||||
|
int angle = ((int)std::round(a1 - a2) + 360) % 360;
|
||||||
|
if(angle < 60 || angle > 300)
|
||||||
|
{
|
||||||
|
dir = DriveDirY;
|
||||||
|
}
|
||||||
|
else if(angle < 240 && angle > 120)
|
||||||
|
{
|
||||||
|
dir = DriveDirN;
|
||||||
|
}
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
|
|||||||
@ -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 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 TCar* getTCar() override { return &m_car; }
|
||||||
virtual TTestCtl* getTTestCtl() override { return &m_ctl; }
|
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; }
|
virtual bool getyjdg_road_code_kf() const override { return m_pub.yjdg_road_code_kf; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void dealOffset(); //行驶距离补偿
|
||||||
|
|
||||||
|
void dealItemNoIDEndItem();
|
||||||
|
void dealItemNoIDEnd14Jjdw();
|
||||||
|
|
||||||
|
//行驶方向,1正向行驶,-1逆向行驶
|
||||||
|
DriveDirType driveDirection(const TModelLine* lane);
|
||||||
|
|
||||||
bool Init_KM3_Global(std::string& sError);
|
bool Init_KM3_Global(std::string& sError);
|
||||||
void UpdateCarParmWithSystemParm();
|
void UpdateCarParmWithSystemParm();
|
||||||
bool Init_KM3_Special();
|
bool Init_KM3_Special();
|
||||||
@ -160,6 +171,7 @@ private:
|
|||||||
int E_1Deg2Cm = 0; //经度1度=多少厘米
|
int E_1Deg2Cm = 0; //经度1度=多少厘米
|
||||||
const int N_1Deg2Cm = 11110792; //北纬1度=X cm
|
const int N_1Deg2Cm = 11110792; //北纬1度=X cm
|
||||||
|
|
||||||
|
bool m_disOffset = false;
|
||||||
//TCarStatus m_carStatus;
|
//TCarStatus m_carStatus;
|
||||||
|
|
||||||
//int64 m_ContinuedStartTime = 0; //续考的上次开始考试时间 20150205
|
//int64 m_ContinuedStartTime = 0; //续考的上次开始考试时间 20150205
|
||||||
|
|||||||
@ -175,6 +175,15 @@ bool ExamSensor::convertDatas(TChuanGan* cg)
|
|||||||
|
|
||||||
TGpsInfo& gps = cg->real.gps;
|
TGpsInfo& gps = cg->real.gps;
|
||||||
gps.errorFlag = true;
|
gps.errorFlag = true;
|
||||||
|
|
||||||
|
//测试是否逆向行驶
|
||||||
|
//static int s_count = 0;
|
||||||
|
//int ny = s_count++ % 10;
|
||||||
|
//if(ny < 5)
|
||||||
|
//{
|
||||||
|
// gps.hxj += 180.0;
|
||||||
|
//}
|
||||||
|
|
||||||
//航向角(默认是按诺瓦泰的数据格式定义的,所以要加上180度) 1:天宝(北云)/C1 2:诺瓦泰
|
//航向角(默认是按诺瓦泰的数据格式定义的,所以要加上180度) 1:天宝(北云)/C1 2:诺瓦泰
|
||||||
if(gps.bklx == boardTypeTB)
|
if(gps.bklx == boardTypeTB)
|
||||||
{
|
{
|
||||||
@ -290,15 +299,16 @@ bool ExamSensor::calcCarBody(TChuanGan* cg)
|
|||||||
int x = 0, y = 0;
|
int x = 0, y = 0;
|
||||||
GpsMath::calcEastAndNorthDistanceCM(m_basePoint, ps[II(33)], m_basePoint.gc, x, y);
|
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
|
else
|
||||||
{
|
{
|
||||||
if(m_car->historyCount() > 0)
|
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 第一帧数据就是非差分状态?如果做模拟灯光的时候一直没差分进不了项目了
|
//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]",
|
//logdebug("MemorySpace [spaceTotal=%lld MB] [spaceFree=%lld MB], [spaceAvailable=%lld MB], [spaceSelf=%lld MB]",
|
||||||
// space.spaceTotal, space.spaceFree, space.spaceAvailable, space.spaceSelf);
|
// 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)
|
if(m_init)
|
||||||
{
|
{
|
||||||
//已经初始化过了,不能重复初始化
|
//已经初始化过了,不能重复初始化
|
||||||
@ -105,7 +106,7 @@ int ExamService::examJudgeInit(const char* data, int len)
|
|||||||
return QE(code);
|
return QE(code);
|
||||||
}
|
}
|
||||||
m_init = true;
|
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);
|
return QE(codeSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -43,6 +43,7 @@ int IExamCar::examJudgeBeginExam(const char* data, int len)
|
|||||||
{
|
{
|
||||||
HELP_COST_TIME("");
|
HELP_COST_TIME("");
|
||||||
IAutoLock(m_mtx);
|
IAutoLock(m_mtx);
|
||||||
|
logtrace("begin-exam version=%s", JUDGE_VERSION_INFO);
|
||||||
if(m_examState != examStateEnd)
|
if(m_examState != examStateEnd)
|
||||||
{
|
{
|
||||||
logerror("error begin exam not end.");
|
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)
|
if(m_history->size() <= 1)
|
||||||
{
|
{
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
const Pointi& h = historyAiGps(1);
|
const Pointi& h = historyAiGps(1);
|
||||||
const Pointi& c = historyAiGps();
|
const Pointi& c = historyAiGps();
|
||||||
if( (c.x == 0 && c.y == 0) || (h.x == 0 && h.y == 0) )
|
if( (c.x == 0 && c.y == 0) || (h.x == 0 && h.y == 0) )
|
||||||
{
|
{
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
double x = h.x - c.x;
|
double x = h.x - c.x;
|
||||||
double y = h.y - c.y;
|
double y = h.y - c.y;
|
||||||
@ -517,11 +518,12 @@ void IExamCar::calcDistance()
|
|||||||
|
|
||||||
if(m_cg->move == moveForward)
|
if(m_cg->move == moveForward)
|
||||||
{
|
{
|
||||||
int gear = m_cg->real.sensor.dw;
|
int gear = m_cg->real.sensor.dw; //只有科三用到
|
||||||
m_disGears[gear] += a;
|
m_disGears[gear] += a;
|
||||||
}
|
}
|
||||||
|
|
||||||
//logdebug("move=%d,dis=%dCM", state, a);
|
//logdebug("move=%d,dis=%dCM", state, a);
|
||||||
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64 IExamCar::GetCurrentTime2() const
|
int64 IExamCar::GetCurrentTime2() const
|
||||||
|
|||||||
@ -127,7 +127,7 @@ public:
|
|||||||
//执行处理每一帧的GPS传感数据
|
//执行处理每一帧的GPS传感数据
|
||||||
virtual void doExamDatagram(Package* pkg);
|
virtual void doExamDatagram(Package* pkg);
|
||||||
//前进 后退 距离计算
|
//前进 后退 距离计算
|
||||||
virtual void calcDistance();
|
virtual int calcDistance();
|
||||||
|
|
||||||
//当前系统时间(回放取的事GPS时间)
|
//当前系统时间(回放取的事GPS时间)
|
||||||
virtual int64 GetCurrentTime2() const;
|
virtual int64 GetCurrentTime2() const;
|
||||||
@ -219,6 +219,8 @@ public:
|
|||||||
virtual bool itemsSomeExaming2(ExamItemCode itemno) const = 0;
|
virtual bool itemsSomeExaming2(ExamItemCode itemno) const = 0;
|
||||||
//是否已考
|
//是否已考
|
||||||
virtual bool isExamAlready(ExamItemCode ItemNo) const = 0;
|
virtual bool isExamAlready(ExamItemCode ItemNo) const = 0;
|
||||||
|
//里程是否满足
|
||||||
|
virtual bool isMileage() const = 0;
|
||||||
|
|
||||||
|
|
||||||
//获取TCar
|
//获取TCar
|
||||||
|
|||||||
@ -70,7 +70,7 @@ private:
|
|||||||
const int m_channel = 4;
|
const int m_channel = 4;
|
||||||
const unsigned char m_default = 255; //默认底色 白色
|
const unsigned char m_default = 255; //默认底色 白色
|
||||||
bool m_showVersion = true;
|
bool m_showVersion = true;
|
||||||
bool m_showTime = false;
|
bool m_showTime = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -33,6 +33,40 @@ void Sub2Judge00Dcrk::dealDrawItem()
|
|||||||
drawGpsSign(m_model->F8(), "F8", false);
|
drawGpsSign(m_model->F8(), "F8", false);
|
||||||
drawGpsSign(m_model->F9(), "F9", 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()
|
void Sub2Judge00Dcrk::dealJudgeItem()
|
||||||
|
|||||||
@ -38,6 +38,8 @@ private:
|
|||||||
//判断考试用时是否超时
|
//判断考试用时是否超时
|
||||||
bool examTimeout();
|
bool examTimeout();
|
||||||
|
|
||||||
|
void nice(const TGPSPoint& p1, const TGPSPoint& p2, const RgbColor& color);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum{L1=1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11};
|
enum{L1=1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11};
|
||||||
int64 m_dcrkTime = 0; //开始时间(从倒库开始计时)
|
int64 m_dcrkTime = 0; //开始时间(从倒库开始计时)
|
||||||
|
|||||||
@ -38,7 +38,7 @@ bool Sub3Judge01Sczb::dealJudgeEnter()
|
|||||||
const std::vector<std::string>& s512 = TableSysSet->asArray512();
|
const std::vector<std::string>& s512 = TableSysSet->asArray512();
|
||||||
std::string Temp512_9 = s512.size() > 8 && s512[8] != "" ? s512[8].c_str() : "";
|
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.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_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;
|
m_itemv.time_raoche = s512_9.size() > 2 && s512_9[2] != "" ? std::atoi(s512_9[2].c_str()) : 0;
|
||||||
|
|||||||
@ -20,7 +20,7 @@ bool Sub3Judge02Qbxx::dealJudgeEnter()
|
|||||||
//10s内未起步只评判第一次^第一次起步以打左方向灯开始计时^
|
//10s内未起步只评判第一次^第一次起步以打左方向灯开始计时^
|
||||||
const std::vector<std::string>& s502 = TableSysSet->asArray502();
|
const std::vector<std::string>& s502 = TableSysSet->asArray502();
|
||||||
std::string str = s502.size() > 7 ? s502[7] : "";
|
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_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);
|
||||||
|
|
||||||
|
|||||||
@ -712,8 +712,8 @@ void Sub3Judge11Kbtc::DoStatus_3()
|
|||||||
//特殊地点业务翻译
|
//特殊地点业务翻译
|
||||||
TTestCtl* ctl = m_car->getTTestCtl();
|
TTestCtl* ctl = m_car->getTTestCtl();
|
||||||
|
|
||||||
const std::vector<std::vector<std::string>>& s301 = TableSysSet->asArray2_301();
|
const std::vector<std::string>& s301 = TableSysSet->asArray301();
|
||||||
const std::vector<std::string>& s301_1 = s301.size() > 0 ? s301[0] : std::vector<std::string>();
|
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] : "";
|
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)
|
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();
|
const std::string& s411 = TableSysSet->get411();
|
||||||
if(s411 != "1")
|
if(s411 != "1")
|
||||||
{
|
{
|
||||||
RightJL0_RF = RTKKM3_0.Body_RF_ToRightEdge;
|
RightJL0_RF = RTKKM3_0.Body_RF_ToBaseLine;
|
||||||
RightJL1_RF = RTKKM3_1.Body_RF_ToRightEdge;
|
RightJL1_RF = RTKKM3_1.Body_RF_ToBaseLine;
|
||||||
RightJL2_RF = RTKKM3_2.Body_RF_ToRightEdge;
|
RightJL2_RF = RTKKM3_2.Body_RF_ToBaseLine;
|
||||||
|
|
||||||
|
|
||||||
RightJL0_RB = RTKKM3_0.Body_RB_ToRightEdge;
|
RightJL0_RB = RTKKM3_0.Body_RB_ToBaseLine;
|
||||||
RightJL1_RB = RTKKM3_1.Body_RB_ToRightEdge;
|
RightJL1_RB = RTKKM3_1.Body_RB_ToBaseLine;
|
||||||
RightJL2_RB = RTKKM3_2.Body_RB_ToRightEdge;
|
RightJL2_RB = RTKKM3_2.Body_RB_ToBaseLine;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RightJL0_RF = RTKKM3_0.Wheel_RF_ToRightEdge;
|
RightJL0_RF = RTKKM3_0.Wheel_RF_ToBaseLine;
|
||||||
RightJL1_RF = RTKKM3_1.Wheel_RF_ToRightEdge;
|
RightJL1_RF = RTKKM3_1.Wheel_RF_ToBaseLine;
|
||||||
RightJL2_RF = RTKKM3_2.Wheel_RF_ToRightEdge;
|
RightJL2_RF = RTKKM3_2.Wheel_RF_ToBaseLine;
|
||||||
|
|
||||||
RightJL0_RB = RTKKM3_0.Wheel_RB_ToRightEdge;
|
RightJL0_RB = RTKKM3_0.Wheel_RB_ToBaseLine;
|
||||||
RightJL1_RB = RTKKM3_1.Wheel_RB_ToRightEdge;
|
RightJL1_RB = RTKKM3_1.Wheel_RB_ToBaseLine;
|
||||||
RightJL2_RB = RTKKM3_2.Wheel_RB_ToRightEdge;
|
RightJL2_RB = RTKKM3_2.Wheel_RB_ToBaseLine;
|
||||||
}
|
}
|
||||||
|
|
||||||
//ZXD_JL0 := (RightJL0_RF + RightJL0_RB) div 2;
|
//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 + ':', ':');
|
std::string str2 = Str.size() > 1 ? Str[1] : ""; //GetDotStr(2, Str + ':', ':');
|
||||||
|
|
||||||
int dw = std::atoi(str1.c_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].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;
|
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[319]:里程不够不报靠边停车(0-否 1-是 2-必考项目完成,并且里程满足要求)
|
||||||
//SysSet[415]:自动报靠边停车(启用标记^全部结束n米报^)启用标记:0-否 1-是 319参数为2有效
|
//SysSet[415]:自动报靠边停车(启用标记^全部结束n米报^)启用标记:0-否 1-是 319参数为2有效
|
||||||
|
|
||||||
const std::string& s319 = TableSysSet->get319();
|
const std::string& s319 = TableSysSet->get319();
|
||||||
if(s319 == "2")
|
if(s319 == "2")
|
||||||
{
|
{
|
||||||
const std::vector<std::string>& s415 = TableSysSet->asArray415();
|
const std::vector<std::string>& s415 = TableSysSet->asArray415();
|
||||||
m_itemvCJH.bZdKbTc = s415.size() > 0 && s415[0] == "1"; //getdotstr(1, sysset[415] + '^', '^') = '1');
|
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;
|
m_itemvCJH.KbTcJl = -1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_itemvCJH.bZdKbTc = false;
|
m_itemvCJH.bZdKbTc = false;
|
||||||
m_itemvCJH.ZdKbTcJl = 1;
|
m_itemvCJH.ZdKbTcJl = 1;
|
||||||
|
m_itemvCJH.KbTcJl = -1;
|
||||||
}
|
}
|
||||||
//溜车变量初始化
|
//溜车变量初始化
|
||||||
|
|
||||||
//SysSet[529]:模拟灯光是否需要人脸验证
|
//SysSet[529]:模拟灯光是否需要人脸验证
|
||||||
//说明:这个参数目前我没有实际的用到
|
//说明:这个参数目前我没有实际的用到
|
||||||
m_sfyz_state = 0;
|
m_sfyz_state = 0;
|
||||||
@ -213,7 +212,7 @@ void Sub3Judge20Comm::Init_ZongHe()
|
|||||||
if(str2 == "") continue;
|
if(str2 == "") continue;
|
||||||
|
|
||||||
int dw = std::atoi(str1.c_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, "-");
|
||||||
itemv14->DwCs_Range[dw].Low_Cs = stmp.size() > 0 ? std::atoi(stmp[0].c_str()) : 0;
|
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;
|
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秒
|
//评判半联动用的,比如:前进状态下,离合器连续30秒
|
||||||
const std::vector<std::string>& s500 = TableSysSet->asArray500();
|
const std::vector<std::string>& s500 = TableSysSet->asArray500();
|
||||||
std::string s500_1 = s500.size() > 0 ? s500[0] : "";
|
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;
|
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;
|
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] : "";
|
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.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;
|
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] : "";
|
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_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;
|
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黑闪),距离,^
|
//条件1:档位,车速,持续时间,结束标志(0-不结束,1红闪,2黑闪),距离,^
|
||||||
//条件2:档位,车速,持续时间,0,距离,^评判时间(0-最后评判,1-里程达到就评判)^
|
//条件2:档位,车速,持续时间,0,距离,^评判时间(0-最后评判,1-里程达到就评判)^
|
||||||
|
|
||||||
const std::vector<std::vector<std::string>>& s301 = TableSysSet->asArray2_301();
|
const std::vector<std::string>& s301 = TableSysSet->asArray301();
|
||||||
const std::vector<std::string>& s301_1 = s301.size() > 0 ? s301[0] : std::vector<std::string>();
|
const std::vector<std::string> s301_1 = s301.size() > 0 ? Tools::split(s301[0], ",") : std::vector<std::string>();
|
||||||
if(!s301_1.empty())
|
if(!s301_1.empty())
|
||||||
{
|
{
|
||||||
m_itemvCJH.dw_cs_dw1 = s301_1.size() > 0 && s301_1[0] != "" ? std::atoi(s301_1[0].c_str()) : 1;
|
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;
|
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())
|
if(!s301_2.empty())
|
||||||
{
|
{
|
||||||
m_itemvCJH.dw_cs_dw2 = s301_2.size() > 0 && s301_2[0] != "" ? std::atoi(s301_2[0].c_str()) : 1;
|
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;
|
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
|
//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]:环境感知相关参数(原封不动翻译即可,前期用不到,赞不考虑)
|
//SysSet[530]:环境感知相关参数(原封不动翻译即可,前期用不到,赞不考虑)
|
||||||
const std::vector<std::string>& s530 = TableSysSet->asArray530();
|
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);
|
m_itemvCJH.sslkfxp_sj = s530.size() > 0 && s530[0] != "" ? std::atoi(s530[0].c_str()) : 15; //StrToIntdef(GetDotStr(1, Sysset[530] + '^', '^'), 15);
|
||||||
//单手离开方向盘时间秒,右边距离偏差cm
|
//单手离开方向盘时间秒,右边距离偏差cm
|
||||||
const std::string& ss530 = s530.size() > 1 && s530[1] != "" ? s530[1] : "";
|
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_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;
|
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 + ':', ':');
|
std::string str2 = s394i.size() > 1 ? s394i[1] : ""; //GetDotStr(2, Str + ':', ':');
|
||||||
|
|
||||||
int dw = std::atoi(str1.c_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].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;
|
m_itemvCJH.DwCs_Range[dw].High_Cs = stmp.size() > 1 ? std::atoi(stmp[1].c_str()) : 0;
|
||||||
}
|
}
|
||||||
@ -2464,7 +2463,7 @@ void Sub3Judge20Comm::Judge_LianXuBianDao()
|
|||||||
//获取连续变道超车参数
|
//获取连续变道超车参数
|
||||||
std::string Temp = s512.size() > 1 && s512[1] != "" ? s512[1] : "";
|
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都判
|
//0:abc 1:aba和abc都判
|
||||||
ctl->LianXuBianDaoKind = ss.size() > 0 && ss[0] != "" ? std::atoi(ss[0].c_str()) : 0;
|
ctl->LianXuBianDaoKind = ss.size() > 0 && ss[0] != "" ? std::atoi(ss[0].c_str()) : 0;
|
||||||
@ -4602,8 +4601,11 @@ void Sub3Judge20Comm::Judge_DangWei_CS_ZS()
|
|||||||
const TChuanGan* his6 = m_car->historyChuanGan(6);
|
const TChuanGan* his6 = m_car->historyChuanGan(6);
|
||||||
//旧规则评判
|
//旧规则评判
|
||||||
int TempCS = std::round(gps.sd);
|
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 ||
|
(ksdd != siteof::nj && (cg->move != moveForward || his1->move != moveForward ||
|
||||||
his2->move != moveForward || his3->move != moveForward || his4->move != moveForward ||
|
his2->move != moveForward || his3->move != moveForward || his4->move != moveForward ||
|
||||||
his5->move != moveForward || his6->move != moveForward)))
|
his5->move != moveForward || his6->move != moveForward)))
|
||||||
@ -4799,7 +4801,27 @@ void Sub3Judge20Comm::Judge_DangWei_CS_ZS()
|
|||||||
//24、全程次高挡评判
|
//24、全程次高挡评判
|
||||||
void Sub3Judge20Comm::Judge_CiGaoDang()
|
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)
|
if(m_itemvXLG.CGD_Nums == 0)
|
||||||
{
|
{
|
||||||
@ -4815,79 +4837,43 @@ void Sub3Judge20Comm::Judge_CiGaoDang()
|
|||||||
//25、自动靠边停车(重点)
|
//25、自动靠边停车(重点)
|
||||||
void Sub3Judge20Comm::Call_Auto_KBTC()
|
void Sub3Judge20Comm::Call_Auto_KBTC()
|
||||||
{
|
{
|
||||||
|
//SysSet[319]:里程不够不报靠边停车(0-否 1-是 2-必考项目完成,并且里程满足要求)
|
||||||
|
//SysSet[415]:自动报靠边停车(启用标记^全部结束n米报^)启用标记:0-否 1-是 319参数为2有效
|
||||||
const std::string& s319 = TableSysSet->get319();
|
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(s319 == "2")
|
||||||
{
|
{
|
||||||
if(m_car->getKsLjLc() < tcar->XSJL) return;
|
if(!m_car->isMileage()) return;
|
||||||
bool ErrorFlag = false;
|
|
||||||
for(auto it = all.begin(); it != all.end(); it++)
|
//自动靠边停车计算
|
||||||
|
//自动靠边停车
|
||||||
|
if(m_itemvCJH.bZdKbTc)
|
||||||
{
|
{
|
||||||
TKM3Item* item = it->second->getExamItem();
|
const std::map<ExamItemCode, ISub3JudgeItem*>& all = m_car->allExamItem();
|
||||||
if(item->NoID == true)
|
//必考项目未完成
|
||||||
|
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);
|
if(item->Item_Color != itemStateWk)
|
||||||
ErrorFlag = true;
|
{
|
||||||
|
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();
|
const TChuanGan* cg = m_car->historyChuanGan();
|
||||||
|
|
||||||
if(m_itemvCJH.KbTcJl == -1)
|
if(m_itemvCJH.KbTcJl == -1)
|
||||||
{
|
{
|
||||||
m_itemvCJH.KbTcJl = cg->ai_ljjl;
|
m_itemvCJH.KbTcJl = cg->ai_ljjl;
|
||||||
@ -4895,6 +4881,7 @@ void Sub3Judge20Comm::Call_Auto_KBTC()
|
|||||||
if(cg->ai_ljjl - m_itemvCJH.KbTcJl >= m_itemvCJH.ZdKbTcJl)
|
if(cg->ai_ljjl - m_itemvCJH.KbTcJl >= m_itemvCJH.ZdKbTcJl)
|
||||||
{
|
{
|
||||||
//20171008
|
//20171008
|
||||||
|
const std::string& ksdd = TableSysSet->get211();
|
||||||
if(ksdd == siteof::changzhoukm3)
|
if(ksdd == siteof::changzhoukm3)
|
||||||
{
|
{
|
||||||
if(cg->RTKKM3.BaseLaneCount > 0)
|
if(cg->RTKKM3.BaseLaneCount > 0)
|
||||||
@ -4952,6 +4939,7 @@ void Sub3Judge20Comm::Judge_Extra()
|
|||||||
//m_car->createEventEnterItem({item13->ItemNo, ""});
|
//m_car->createEventEnterItem({item13->ItemNo, ""});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
//自动触发加减挡位
|
//自动触发加减挡位
|
||||||
bool FindSCZB = false;
|
bool FindSCZB = false;
|
||||||
bool FindMNDG = false;
|
bool FindMNDG = false;
|
||||||
@ -4990,21 +4978,18 @@ void Sub3Judge20Comm::Judge_Extra()
|
|||||||
|
|
||||||
if((SCZBFinishFlag == true || FindSCZB == false) && (MNDGFinishFlag == true || FindMNDG == false))
|
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 && item14->NoID == true) //免考加减挡的
|
||||||
{
|
{
|
||||||
if(item14->Item_Color == itemStateWk)
|
if(item14->Item_Color == itemStateWk)
|
||||||
{
|
{
|
||||||
//ToDo1:生成 全程加减挡 进项目事件
|
//ToDo1:生成 全程加减挡 进项目事件
|
||||||
//item14->Item_Color = itemStateZk;
|
|
||||||
//item14->TestPro = ItemProFlagInit;
|
|
||||||
//item14->FinishFlag = false;
|
|
||||||
|
|
||||||
m_car->createEventEnterItem({item14->ItemNo, ""});
|
m_car->createEventEnterItem({item14->ItemNo, ""});
|
||||||
m_car->KM3EndItem(item14->ItemNo);
|
m_car->KM3EndItem(item14->ItemNo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
m_DiaoTou_ID = 0;
|
m_DiaoTou_ID = 0;
|
||||||
std::string CurrentRoadData = cg->MapPoint_Road_Code;
|
std::string CurrentRoadData = cg->MapPoint_Road_Code;
|
||||||
|
|||||||
@ -566,27 +566,59 @@ inline void GpsMath::getDimensionalCoordinate(const double& E1, const double& N1
|
|||||||
///以下是科目三的函数 2024-01-12
|
///以下是科目三的函数 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
|
//1、获得点1指向点2的角度0-360度,该角度是X轴正方向顺时针旋转到有向线段(由点1指向点2所确定)的角度,例如:正东=0度,正北=270
|
||||||
double GpsMath::GetAngle_HQ(const Pointi& p1, const Pointi& p2, int MinusY)
|
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.x == p2.x)
|
||||||
{
|
{
|
||||||
if(p1.y * MinusY < p2.y * MinusY)
|
if(p1.y * MinusY < p2.y * MinusY)
|
||||||
result = PI * 3 / 2;
|
angle = PI * 3 / 2;
|
||||||
else if (p1.y * MinusY > p2.y * MinusY)
|
else if (p1.y * MinusY > p2.y * MinusY)
|
||||||
result = PI / 2;
|
angle = PI / 2;
|
||||||
else
|
else
|
||||||
result = 0;
|
angle = 0;
|
||||||
}
|
}
|
||||||
else
|
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)
|
if(angle < 0)
|
||||||
result = result + 2 * PI;
|
angle = angle + 2 * PI;
|
||||||
|
|
||||||
result = result / PI * 180;
|
angle = angle / PI * 180;
|
||||||
return result;
|
return angle;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -137,7 +137,10 @@ private:
|
|||||||
|
|
||||||
|
|
||||||
public: //科目三
|
public: //科目三
|
||||||
|
//计算角度 逆时针
|
||||||
|
//static double getAngle(const Pointi& point1, const Pointi& point2);
|
||||||
//1、获得点1指向点2的角度0-360度,该角度是X轴正方向顺时针旋转到有向线段(由点1指向点2所确定)的角度,例如:正东=0度,正北=270
|
//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 double GetAngle_HQ(const Pointi& p1, const Pointi& p2, int MinusY = 1);
|
||||||
//计算两点距离
|
//计算两点距离
|
||||||
static int PointDistance(const Pointi& p1, const Pointi& p2);
|
static int PointDistance(const Pointi& p1, const Pointi& p2);
|
||||||
|
|||||||
@ -148,6 +148,14 @@ enum PlaySoundType
|
|||||||
PlaySoundEndNotify = 1, //1:表示是模拟灯光项目的语音,语音播报结束需要调用examJudgeSoundEnd通知评判。
|
PlaySoundEndNotify = 1, //1:表示是模拟灯光项目的语音,语音播报结束需要调用examJudgeSoundEnd通知评判。
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//行驶方向,***注意:枚举不能变,和外壳有对应关系
|
||||||
|
enum DriveDirType
|
||||||
|
{
|
||||||
|
DriveDirN = -1, //-1:逆向行驶
|
||||||
|
DriveDirX = 0, //0:未知
|
||||||
|
DriveDirY = 1, //1:正向行驶
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
//Tag1=0-无标线
|
//Tag1=0-无标线
|
||||||
//Tag1=1-中心线(黄色实线)
|
//Tag1=1-中心线(黄色实线)
|
||||||
|
|||||||
@ -334,7 +334,7 @@ struct TStuInfo
|
|||||||
int64 ddkssj = 0; //考试中断那次考试开始考试时间 1970年到现在的毫秒数
|
int64 ddkssj = 0; //考试中断那次考试开始考试时间 1970年到现在的毫秒数
|
||||||
std::vector<int32> ykxm = {}; //已考项目 "1,3" 对应枚举 ExamItemCode DuanDian_FinishItems
|
std::vector<int32> ykxm = {}; //已考项目 "1,3" 对应枚举 ExamItemCode DuanDian_FinishItems
|
||||||
std::vector<TKfXm> kfxm = {}; //扣分项目 "20,01;" 对应枚举 ExamItemCode DuanDian_Marks
|
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
|
int8 sczb = 0; //CS_Finish_SCZB_Flag:Boolan; //yhy22 初始完成上车准备标志(外壳传递的)Boolan
|
||||||
std::vector<TKfXm> sczbkf = {}; //SCZBKouFenData:String[200]; //格式: ItemNo,MarkSerial; ItemNo,MarkSerial;
|
std::vector<TKfXm> sczbkf = {}; //SCZBKouFenData:String[200]; //格式: ItemNo,MarkSerial; ItemNo,MarkSerial;
|
||||||
@ -850,15 +850,14 @@ struct TRTKResult
|
|||||||
|
|
||||||
int CrossPointNo = 0; //穿越点
|
int CrossPointNo = 0; //穿越点
|
||||||
|
|
||||||
|
//20240801 新增 还没计算
|
||||||
//20240730 新增 还没计算
|
int TouchLineDirCS = TouchDir0; //车身碰线 车身碰线方向
|
||||||
int TouchLineDirCS = 0; //车身碰线 车身碰线方向
|
|
||||||
int BackPointLaneNo = 0; //后点车道 后点所在车道号
|
int BackPointLaneNo = 0; //后点车道 后点所在车道号
|
||||||
int BackPointLaneCount = 0; //后点车道 后点天线共有几股车道
|
int BackPointLaneCount = 0; //后点车道 后点天线共有几股车道
|
||||||
int Body_RF_ToBaseLine = 0; //右前车身边线 指车身离右侧路边缘线距离
|
int Body_RF_ToBaseLine = 0; //右前车身边线 指车身离右侧路边缘线距离
|
||||||
int Body_RB_ToBaseLine = 0; //右后车身边线 指车身离右侧路边缘线距离
|
int Body_RB_ToBaseLine = 0; //右后车身边线 指车身离右侧路边缘线距离
|
||||||
|
|
||||||
int DirInverse = 0; //车道属性 是否逆向行驶
|
int DirInverse = 0; //车道属性 是否逆向行驶 对应DriveDirType枚举
|
||||||
int ShapeNoWheel = 0; //形状 车轮相交的形状线号
|
int ShapeNoWheel = 0; //形状 车轮相交的形状线号
|
||||||
|
|
||||||
#ifdef JUDGE_USE_INSPECT
|
#ifdef JUDGE_USE_INSPECT
|
||||||
|
|||||||
@ -33,10 +33,19 @@ export default class FileUtil{
|
|||||||
let path = absolutePath
|
let path = absolutePath
|
||||||
folderList.forEach((folderName=>{
|
folderList.forEach((folderName=>{
|
||||||
path += `/${folderName}`;
|
path += `/${folderName}`;
|
||||||
const isExit = fs.accessSync(path);
|
try {
|
||||||
if(!isExit){
|
const isExit = fs.accessSync(path);
|
||||||
fs.mkdirSync(path)
|
if(!isExit){
|
||||||
|
fs.mkdirSync(path)
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
promptAction.showToast({
|
||||||
|
message:`初始化文件夹失败`+JSON.stringify(e),
|
||||||
|
duration:4000,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}));
|
}));
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import systemTime from '@ohos.systemDateTime';
|
import systemTime from '@ohos.systemDateTime';
|
||||||
import { Array2Byte, fillZero, string2Bytes, stringToASC } from '../../common/utils/tools';
|
import { Array2Byte, fillZero, string2Bytes, stringToASC } from '../../common/utils/tools';
|
||||||
import { testKmItems } from '../../pages/judgeSDK/dataTest/index';
|
import { testKm2Items,testKm3Items } from '../../pages/judgeSDK/dataTest/index';
|
||||||
|
import { judgeConfig } from '../../pages/judgeSDK/utils/judgeConfig';
|
||||||
import { setJudgeUdp, setTopLineUdp } from './GlobalUdp';
|
import { setJudgeUdp, setTopLineUdp } from './GlobalUdp';
|
||||||
import { convertGpsCoord2 } from '../utils/tools';
|
import { convertGpsCoord2 } from '../utils/tools';
|
||||||
|
|
||||||
|
|
||||||
export const initJudgeUdp = async () => {
|
export const initJudgeUdp = async () => {
|
||||||
globalThis.serialIndex = 0;
|
globalThis.serialIndex = 0;
|
||||||
globalThis.udpIndex = 0;
|
globalThis.udpIndex = 0;
|
||||||
@ -19,8 +19,6 @@ export const initJudgeUdp = async () => {
|
|||||||
lightLineUdp.send(arrBlueBuffer);
|
lightLineUdp.send(arrBlueBuffer);
|
||||||
}
|
}
|
||||||
globalThis.lightLineUdp = lightLineUdp
|
globalThis.lightLineUdp = lightLineUdp
|
||||||
/*******************************************/
|
|
||||||
|
|
||||||
globalThis.udpClient.onMessage_1(async (msg) => {
|
globalThis.udpClient.onMessage_1(async (msg) => {
|
||||||
const stachArr = msg.split(',')
|
const stachArr = msg.split(',')
|
||||||
if (stachArr[0] != '#DN_GD') {
|
if (stachArr[0] != '#DN_GD') {
|
||||||
@ -40,25 +38,25 @@ export const getMessageHeartbeat = async (msg) => {
|
|||||||
const carInfo = globalThis.carInfo;
|
const carInfo = globalThis.carInfo;
|
||||||
const { examSubject,plateNo } = carInfo;
|
const { examSubject,plateNo } = carInfo;
|
||||||
const ksyh='0000000000000'
|
const ksyh='0000000000000'
|
||||||
|
const {fourInOneScreen:{gpsDigit}} = judgeConfig
|
||||||
const asclshArr = stringToASC(fillZero(globalThis.lsh || 0, 13));
|
const asclshArr = stringToASC(fillZero(globalThis.lsh || 0, 13));
|
||||||
const ascksyhArr = stringToASC(fillZero(ksyh || 0, 13))
|
const ascksyhArr = stringToASC(fillZero(ksyh || 0, 13))
|
||||||
const ascsbxhArr = stringToASC('00000000')
|
const ascsbxhArr = stringToASC('00000000')
|
||||||
// const ascsbxhArr = stringToASC('153216400880')
|
// const ascsbxhArr = stringToASC('153216400880')
|
||||||
const serialIndex = globalThis.serialIndex
|
const serialIndex = globalThis.serialIndex
|
||||||
const tempData = await getPlcData(msg);
|
const tempData = await getPlcData(msg);
|
||||||
|
const examType = examSubject == 2?2:3
|
||||||
const {sensor,gps} = tempData;
|
const {sensor,gps} = tempData;
|
||||||
const {zfxd,yfxd,shtd,ygd,jgd,skd,dh1,dh2,lhq,jsc,ssc,fsc,lb,mkg,aqd,ygq,cs,fdjzs} = sensor
|
const {zfxd,yfxd,shtd,ygd,jgd,skd,dh1,dh2,lhq,jsc,ssc,fsc,lb,mkg,aqd,ygq,cs,fdjzs} = sensor
|
||||||
const {jd,wd, hxj, fyj, hbg,} = gps
|
const {jd,wd, hxj, fyj, hbg,} = gps
|
||||||
const translateSignals = getTranslateSignals(
|
const translateSignals = getTranslateSignals(
|
||||||
[zfxd, yfxd, shtd, ygd, jgd, skd, dh1, dh2, lhq, jsc, ssc, fsc, lb, mkg, aqd, 0, 0, 0, 0, 0, 0, ygq, sensor.wd, 0]
|
[zfxd, yfxd, shtd, ygd, jgd, skd, dh1, dh2, lhq, jsc, ssc, fsc, lb, mkg, aqd, 0, 0, 0, 0, 0, 0, ygq, sensor.wd, 0]
|
||||||
)
|
)
|
||||||
console.log('jinweiduwaike',wd,jd,hxj,fyj,hbg)
|
|
||||||
|
|
||||||
const translateProject = getTranslateProject();
|
const translateProject = getTranslateProject();
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
const translateJd = convertGpsCoord2(wd).toFixed(7) * Math.pow(10, 7)
|
const translateJd = convertGpsCoord2(wd).toFixed(gpsDigit) * Math.pow(10, gpsDigit);
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
const translateWd = convertGpsCoord2(jd).toFixed(7) * Math.pow(10, 7)
|
const translateWd = convertGpsCoord2(jd).toFixed(gpsDigit) * Math.pow(10, gpsDigit)
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
const translateProjects = translateProject.map(numStr => string2Bytes(parseInt(numStr, 2), 8)[0])
|
const translateProjects = translateProject.map(numStr => string2Bytes(parseInt(numStr, 2), 8)[0])
|
||||||
const arr = [
|
const arr = [
|
||||||
@ -66,20 +64,20 @@ export const getMessageHeartbeat = async (msg) => {
|
|||||||
asclshArr.map(lsh => string2Bytes(lsh, 8)[0]),
|
asclshArr.map(lsh => string2Bytes(lsh, 8)[0]),
|
||||||
//考试员号
|
//考试员号
|
||||||
ascksyhArr.map(ksyh => string2Bytes(ksyh, 8)[0]),
|
ascksyhArr.map(ksyh => string2Bytes(ksyh, 8)[0]),
|
||||||
// 科目类型(0:未考试 1:科目二 2:科目三) + 考试开始时间
|
//科目类型(0:未考试 1:科目二 2:科目三) + 考试开始时间
|
||||||
string2Bytes('00000000000', 4 * 8),
|
string2Bytes(`${0}${'00:00:00'}`, 4 * 8),
|
||||||
// 消息序号
|
// 消息序号
|
||||||
string2Bytes(serialIndex, 2 * 8),
|
string2Bytes(serialIndex, 2 * 8),
|
||||||
translateSignals,
|
translateSignals,
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
string2Bytes(cs, 2 * 8), string2Bytes(fdjzs / 60, 8), string2Bytes(translateJd, 4 * 8), string2Bytes(translateWd, 4 * 8), string2Bytes(1, 8),
|
string2Bytes(Math.floor(gps.sd*1.852) , 2 * 8), string2Bytes(fdjzs / 100, 8), string2Bytes(translateJd, 4 * 8), string2Bytes(translateWd, 4 * 8), string2Bytes(1, 8),
|
||||||
//GPS东向距离
|
//GPS东向距离
|
||||||
string2Bytes(0, 4 * 8),
|
string2Bytes(0, 4 * 8),
|
||||||
//GPS北向距离
|
//GPS北向距离
|
||||||
string2Bytes(0, 4 * 8),
|
string2Bytes(0, 4 * 8),
|
||||||
//航向角 俯仰角 高程(海拔)
|
//航向角 俯仰角 高程(海拔)
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
string2Bytes((hxj + 90) * 100, 2 * 8), string2Bytes(fyj * 100, 2 * 8), string2Bytes(hbg * 100, 4 * 8),
|
string2Bytes((hxj) * 100, 2 * 8), string2Bytes(fyj * 100, 2 * 8), string2Bytes(hbg * 100, 4 * 8),
|
||||||
//dddd
|
//dddd
|
||||||
translateProjects,
|
translateProjects,
|
||||||
//当前项目编号
|
//当前项目编号
|
||||||
@ -121,26 +119,28 @@ const getTranslateSignals = (tempItems) => {
|
|||||||
|
|
||||||
// 中心所有项目转换
|
// 中心所有项目转换
|
||||||
const getTranslateProject = () => {
|
const getTranslateProject = () => {
|
||||||
const allKmItemsObj = {};
|
const examSubject =globalThis.examSubject;
|
||||||
testKmItems.forEach(item => {
|
|
||||||
allKmItemsObj[item.code] = item;
|
|
||||||
})
|
|
||||||
|
|
||||||
const tempItems = testKmItems.map(item => {
|
const tempItems = (examSubject == 2 ? testKm2Items:testKm3Items).map(code => {
|
||||||
const current = allKmItemsObj[item.code];
|
|
||||||
return {
|
return {
|
||||||
code: item.code,
|
code, status:'0'
|
||||||
status: getCenterProjectStatus(current.status)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const len = Math.floor(tempItems.length / 8);
|
|
||||||
const arr = [];
|
const arr = [];
|
||||||
for (let i = 0; i <= len; i++) {
|
for (let i = 0; i <= 4; i++) {
|
||||||
const temp = tempItems.slice(i * 8, (i + 1) * 8);
|
const temp = tempItems.slice(i * 4, (i + 1) * 4);
|
||||||
let tempArr = temp.map(item => item.status)
|
let tempArr = temp.map(item => item.status)
|
||||||
if (i === 4) {
|
if (i === 4 && examSubject) {
|
||||||
tempArr = tempArr.concat(['00', '00'])
|
tempArr = examSubject == 2
|
||||||
|
//bit36-bit39保留
|
||||||
|
? tempArr.concat(['00', '00'])
|
||||||
|
//bit30-bit39保留
|
||||||
|
: tempArr.concat(['00', '00','00','00'])
|
||||||
}
|
}
|
||||||
|
if (i === 3 && examSubject == 3) {
|
||||||
|
tempArr = tempArr.concat(['00'])
|
||||||
|
}
|
||||||
|
|
||||||
arr.push(tempArr.join(''));
|
arr.push(tempArr.join(''));
|
||||||
}
|
}
|
||||||
return arr.map(numStr => parseInt(numStr, 2));
|
return arr.map(numStr => parseInt(numStr, 2));
|
||||||
|
|||||||
@ -100,6 +100,11 @@ export async function getCurrentHourTime():Promise<string> {
|
|||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
s = s < 10 ? '0' + s : s;
|
s = s < 10 ? '0' + s : s;
|
||||||
let ss = date.getMilliseconds();
|
let ss = date.getMilliseconds();
|
||||||
|
//@ts-ignore
|
||||||
|
ss = ss < 10 ? '00' + ss : ss;
|
||||||
|
//@ts-ignore
|
||||||
|
ss = ss < 100 ? '0' + ss : ss;
|
||||||
|
|
||||||
return `${h}${m}${s}${ss}`
|
return `${h}${m}${s}${ss}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -43,28 +43,21 @@ struct Index {
|
|||||||
this.startTime = time.split(' ')[1]
|
this.startTime = time.split(' ')[1]
|
||||||
this.startFullTime = await getCurrentTime(1);
|
this.startFullTime = await getCurrentTime(1);
|
||||||
this.startHourTime = await getCurrentHourTime()
|
this.startHourTime = await getCurrentHourTime()
|
||||||
|
|
||||||
this.startExamTime = time
|
this.startExamTime = time
|
||||||
|
|
||||||
setInterval(async () => {
|
setInterval(async () => {
|
||||||
this.time = await getCurrentTime();
|
this.time = await getCurrentTime();
|
||||||
this.examTime += 1;
|
this.examTime += 1;
|
||||||
}, 1000);
|
}, 1000);
|
||||||
console.log('SURENJUN_JUDGE',10)
|
|
||||||
|
|
||||||
//初始化数据库表
|
//初始化数据库表
|
||||||
await this.initDb()
|
await this.initDb()
|
||||||
|
|
||||||
//断点续考
|
//断点续考
|
||||||
console.log('SURENJUN_JUDGE',11)
|
|
||||||
|
|
||||||
await this.goDdxkItems()
|
await this.goDdxkItems()
|
||||||
|
|
||||||
//初始化评判
|
//初始化评判
|
||||||
console.log('SURENJUN_JUDGE',6)
|
|
||||||
|
|
||||||
const judge = await this.initJudge();
|
const judge = await this.initJudge();
|
||||||
console.log('SURENJUN_JUDGE',7)
|
|
||||||
|
|
||||||
this.judge = judge
|
this.judge = judge
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -76,6 +69,7 @@ struct Index {
|
|||||||
const {isTrajectoryOpen,trajectoryPath} = judgeConfig
|
const {isTrajectoryOpen,trajectoryPath} = judgeConfig
|
||||||
await this.initStudent();
|
await this.initStudent();
|
||||||
await this.initCar();
|
await this.initCar();
|
||||||
|
|
||||||
//是否开启轨迹回放模式
|
//是否开启轨迹回放模式
|
||||||
if (isTrajectoryOpen) {
|
if (isTrajectoryOpen) {
|
||||||
this.initTrajectoryParam(trajectoryPath)
|
this.initTrajectoryParam(trajectoryPath)
|
||||||
@ -85,16 +79,12 @@ struct Index {
|
|||||||
await this.initSysset();
|
await this.initSysset();
|
||||||
this.singlePlay = globalThis.singlePlay
|
this.singlePlay = globalThis.singlePlay
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.initCDSBInfo()
|
await this.initCDSBInfo()
|
||||||
|
|
||||||
// 科目三新增读取表数据
|
// 科目三新增读取表数据
|
||||||
if (examSubject == 3) {
|
if (examSubject == 3) {
|
||||||
|
|
||||||
await this.initMapPoint()
|
await this.initMapPoint()
|
||||||
|
|
||||||
await this.initMapPointItem()
|
await this.initMapPointItem()
|
||||||
|
|
||||||
//定时上传考试里程
|
//定时上传考试里程
|
||||||
// let mileageTimer = setInterval(()=>{
|
// let mileageTimer = setInterval(()=>{
|
||||||
// this.uploadMileage()
|
// this.uploadMileage()
|
||||||
@ -310,6 +300,8 @@ struct Index {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
const projects = this.projects;
|
const projects = this.projects;
|
||||||
|
console.info('surenjun',JSON.stringify(this.projectsObj))
|
||||||
|
|
||||||
if (!projects.length) {
|
if (!projects.length) {
|
||||||
Prompt.showToast({
|
Prompt.showToast({
|
||||||
message: '读取数据库信息失败,请重新联网更新!',
|
message: '读取数据库信息失败,请重新联网更新!',
|
||||||
@ -341,10 +333,7 @@ struct Index {
|
|||||||
|
|
||||||
// 评判相关初始化
|
// 评判相关初始化
|
||||||
async initJudge() {
|
async initJudge() {
|
||||||
console.log('SURENJUN_JUDGE',0)
|
|
||||||
|
|
||||||
const judge = new Judge(this);
|
const judge = new Judge(this);
|
||||||
console.log('SURENJUN_JUDGE',30)
|
|
||||||
await judge.onJudgeFn(async (judgeData) => {
|
await judge.onJudgeFn(async (judgeData) => {
|
||||||
const {xmmcStr,carztStr,kfArr} = judgeData;
|
const {xmmcStr,carztStr,kfArr} = judgeData;
|
||||||
this.xmmcStr = xmmcStr;
|
this.xmmcStr = xmmcStr;
|
||||||
@ -833,13 +822,6 @@ struct Index {
|
|||||||
.margin({ bottom: 20 })
|
.margin({ bottom: 20 })
|
||||||
}.height('90%').justifyContent(FlexAlign.Start).padding({ top: 37, left: 60, bottom: 35, right: 60 })
|
}.height('90%').justifyContent(FlexAlign.Start).padding({ top: 37, left: 60, bottom: 35, right: 60 })
|
||||||
|
|
||||||
//loading 弹窗
|
|
||||||
if (this.loadingPopupVisible) {
|
|
||||||
LoadingPopup({
|
|
||||||
title: '正在生成考试记录,请稍后...',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.signDisplayComVisible) {
|
if (this.signDisplayComVisible) {
|
||||||
Column() {
|
Column() {
|
||||||
SignDisplayCom({
|
SignDisplayCom({
|
||||||
@ -922,6 +904,13 @@ struct Index {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//loading 弹窗
|
||||||
|
if (this.loadingPopupVisible) {
|
||||||
|
LoadingPopup({
|
||||||
|
title: '正在生成考试记录,请稍后...',
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.height('100%').backgroundColor('#000').justifyContent(FlexAlign.Start)
|
.height('100%').backgroundColor('#000').justifyContent(FlexAlign.Start)
|
||||||
}
|
}
|
||||||
@ -955,9 +944,13 @@ struct Index {
|
|||||||
artSubject3ProjectsCodesArr,
|
artSubject3ProjectsCodesArr,
|
||||||
currentXmdm,
|
currentXmdm,
|
||||||
} = this;
|
} = this;
|
||||||
const projectCode = artSubject3ProjectsCodesArr[index]
|
const projectCode = artSubject3ProjectsCodesArr[index];
|
||||||
|
console.info('surenjun',getIsExitManualProject(index))
|
||||||
if (getIsExitManualProject(index)) {
|
if (getIsExitManualProject(index)) {
|
||||||
// 正在进行的项目 取消项目
|
// 正在进行的项目 取消项目
|
||||||
|
console.info('surenjun isManualProjectIn=>',isManualProjectIn)
|
||||||
|
console.info('surenjun projectCode=>',projectCode)
|
||||||
|
console.info('surenjun currentXmdm=>',currentXmdm)
|
||||||
if (isManualProjectIn && projectCode === currentXmdm) {
|
if (isManualProjectIn && projectCode === currentXmdm) {
|
||||||
await this.judge.setJudgeItem(currentXmdm, 2);
|
await this.judge.setJudgeItem(currentXmdm, 2);
|
||||||
Prompt.showToast({
|
Prompt.showToast({
|
||||||
|
|||||||
@ -17,14 +17,18 @@ import promptAction from '@ohos.promptAction';
|
|||||||
import FilePhoto from './judgeSDK/utils/filePhoto';
|
import FilePhoto from './judgeSDK/utils/filePhoto';
|
||||||
import { getSyncData, upDateTableByArray } from '../common/service/initable';
|
import { getSyncData, upDateTableByArray } from '../common/service/initable';
|
||||||
import { CandidateData, EmptyCandidateObject } from '../mock/CandidateData';
|
import { CandidateData, EmptyCandidateObject } from '../mock/CandidateData';
|
||||||
import BoardPrePareSetPopup from './compontents/judge/BoardPrePareSetPopup';
|
import BoardPrePareSetPopup from './compontents/judge/BoardPrePareSetPopup'
|
||||||
import LoadingPopup from './compontents/judge/LoadingPopup';
|
import LoadingPopup from './compontents/judge/LoadingPopup';
|
||||||
import VoiceAnnounce from './judgeSDK/utils/voiceAnnouncements';
|
import VoiceAnnounce from './judgeSDK/utils/voiceAnnouncements';
|
||||||
|
import { JudgeConfig } from '../config/judge';
|
||||||
import { judgeConfig } from './judgeSDK/utils/judgeConfig';
|
import { judgeConfig } from './judgeSDK/utils/judgeConfig';
|
||||||
|
import { initJudgeUdp } from '../common/utils/UdpJudge';
|
||||||
@Entry
|
@Entry
|
||||||
@Component
|
@Component
|
||||||
struct UserInfo {
|
struct UserInfo {
|
||||||
|
private filePhoto: FilePhoto
|
||||||
|
private avPlayer
|
||||||
|
|
||||||
@State pageIndex: number = 0
|
@State pageIndex: number = 0
|
||||||
@State ratio: number = 1700 / 960
|
@State ratio: number = 1700 / 960
|
||||||
@State index: number = 0
|
@State index: number = 0
|
||||||
@ -43,12 +47,9 @@ struct UserInfo {
|
|||||||
@State isBoardPrePareSetPopupOpen: boolean = false
|
@State isBoardPrePareSetPopupOpen: boolean = false
|
||||||
@State isFirstBoardPrePareSetPopupBtnShow: boolean = false
|
@State isFirstBoardPrePareSetPopupBtnShow: boolean = false
|
||||||
@State isBoardPrePareSetPopupShow: boolean = false
|
@State isBoardPrePareSetPopupShow: boolean = false
|
||||||
@State isLoadingPopupVisible: boolean = false;
|
@State isLoadingPopupVisible:boolean = false;
|
||||||
@State loadingText: string = '正在认证监管信息,请稍后...'
|
@State loadingText:string = '正在认证监管信息,请稍后...'
|
||||||
@State sczbkf: {
|
@State sczbkf:{xmdm:number,kfdm:string}[] = []
|
||||||
xmdm: number,
|
|
||||||
kfdm: string
|
|
||||||
}[] = []
|
|
||||||
@State currentUser: User = EmptyCandidateObject
|
@State currentUser: User = EmptyCandidateObject
|
||||||
@State dataList: Array<User> = []
|
@State dataList: Array<User> = []
|
||||||
@State list: Array<User> = []
|
@State list: Array<User> = []
|
||||||
@ -61,7 +62,7 @@ struct UserInfo {
|
|||||||
@State idCard: string = '';
|
@State idCard: string = '';
|
||||||
@State grantDept: string = '';
|
@State grantDept: string = '';
|
||||||
//是否已经开始考试
|
//是否已经开始考试
|
||||||
@State isExamStart: boolean = false;
|
@State isExamStart:boolean = false;
|
||||||
@State effectDate: string = '';
|
@State effectDate: string = '';
|
||||||
@State interval: any = null;
|
@State interval: any = null;
|
||||||
@State studentRefreshStatue: string = '0';
|
@State studentRefreshStatue: string = '0';
|
||||||
@ -86,10 +87,7 @@ struct UserInfo {
|
|||||||
return photoBase64
|
return photoBase64
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private filePhoto: FilePhoto
|
private AccountTable = new AccountTable(() => {}, USER);
|
||||||
private avPlayer
|
|
||||||
private AccountTable = new AccountTable(() => {
|
|
||||||
}, USER);
|
|
||||||
private context = getContext(this) as common.UIAbilityContext;
|
private context = getContext(this) as common.UIAbilityContext;
|
||||||
private labelBlocks = [
|
private labelBlocks = [
|
||||||
{ label: '考生姓名', key: 'xm' },
|
{ label: '考生姓名', key: 'xm' },
|
||||||
@ -520,12 +518,12 @@ struct UserInfo {
|
|||||||
this.currentUser.id = '1'
|
this.currentUser.id = '1'
|
||||||
const avPlayer = this.avPlayer;
|
const avPlayer = this.avPlayer;
|
||||||
this.isLoadingPopupVisible = true
|
this.isLoadingPopupVisible = true
|
||||||
avPlayer.playAudio([`voice/监管通信中.mp3`], false, async () => {
|
avPlayer.playAudio([`voice/监管通信中.mp3`],false,async ()=>{
|
||||||
const code = await this.beginExam();
|
const code = await this.beginExam();
|
||||||
if (code != 1) {
|
if (code != 1) {
|
||||||
promptAction.showToast({
|
promptAction.showToast({
|
||||||
message: '开始考试接口调用失败!',
|
message:'开始考试接口调用失败!',
|
||||||
duration: 4000
|
duration:4000
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -549,30 +547,30 @@ struct UserInfo {
|
|||||||
// 检测车门、熄火信号
|
// 检测车门、熄火信号
|
||||||
async checkSignal(): Promise<boolean> {
|
async checkSignal(): Promise<boolean> {
|
||||||
const {isCheckFireOpen} = judgeConfig
|
const {isCheckFireOpen} = judgeConfig
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve,reject)=>{
|
||||||
if (isCheckFireOpen) {
|
if(isCheckFireOpen){
|
||||||
resolve(true)
|
resolve(true)
|
||||||
// return
|
// return
|
||||||
}
|
}
|
||||||
console.info('socketTag[PLC.UdpClient]', '注册udp回调')
|
console.info('socketTag[PLC.UdpClient]', '注册udp回调')
|
||||||
let plcValue = globalThis.udpClient.getCurrentMessage();
|
let plcValue = globalThis.udpClient.getCurrentMessage();
|
||||||
console.info('surenjun', plcValue)
|
console.info('surenjun',plcValue)
|
||||||
const msgArr = plcValue.split(',') || ''
|
const msgArr = plcValue.split(',') || ''
|
||||||
const mkg = msgArr[14];
|
const mkg = msgArr[14];
|
||||||
const fdjzs = msgArr[25];
|
const fdjzs = msgArr[25];
|
||||||
if (mkg == 1) {
|
if(mkg == 1){
|
||||||
this.avPlayer.playAudio(['voice/关门.mp3'])
|
this.avPlayer.playAudio(['voice/关门.mp3'])
|
||||||
promptAction.showToast({
|
promptAction.showToast({
|
||||||
message: '请关闭车门',
|
message:'请关闭车门',
|
||||||
duration: 4000
|
duration:4000
|
||||||
})
|
})
|
||||||
reject(false)
|
reject(false)
|
||||||
}
|
}
|
||||||
if (fdjzs * 1 > 0) {
|
if(fdjzs*1 > 0){
|
||||||
this.avPlayer.playAudio(['voice/熄火.mp3'])
|
this.avPlayer.playAudio(['voice/熄火.mp3'])
|
||||||
promptAction.showToast({
|
promptAction.showToast({
|
||||||
message: '请熄火',
|
message:'请熄火',
|
||||||
duration: 4000
|
duration:4000
|
||||||
})
|
})
|
||||||
reject(false)
|
reject(false)
|
||||||
}
|
}
|
||||||
@ -747,6 +745,7 @@ struct UserInfo {
|
|||||||
this.isFirstBoardPrePareSetPopupBtnShow = true;
|
this.isFirstBoardPrePareSetPopupBtnShow = true;
|
||||||
this.stepFlag = false
|
this.stepFlag = false
|
||||||
this.stopDeviceById()
|
this.stopDeviceById()
|
||||||
|
initJudgeUdp()
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -762,11 +761,8 @@ struct UserInfo {
|
|||||||
if (!this.currentUser.xm) {
|
if (!this.currentUser.xm) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
console.info('surenjun currentUser', JSON.stringify(this.currentUser))
|
|
||||||
if (globalThis.singlePlay) {
|
if (globalThis.singlePlay) {
|
||||||
const {examSubject} = globalThis.carInfo;
|
const {examSubject} = globalThis.carInfo;
|
||||||
console.info('surenjun => sczbkf', JSON.stringify(this.sczbkf))
|
|
||||||
await upDateTableByArray('USER', [this.currentUser])
|
await upDateTableByArray('USER', [this.currentUser])
|
||||||
router.pushUrl({
|
router.pushUrl({
|
||||||
url: examSubject == 3 ? 'pages/Roads' : 'pages/Judge',
|
url: examSubject == 3 ? 'pages/Roads' : 'pages/Judge',
|
||||||
@ -781,6 +777,7 @@ struct UserInfo {
|
|||||||
if (this.FaceOpenStatue != '0') {
|
if (this.FaceOpenStatue != '0') {
|
||||||
this.showFaceCompare = true
|
this.showFaceCompare = true
|
||||||
} else {
|
} else {
|
||||||
|
initJudgeUdp()
|
||||||
this.sfbdinterfaceFn()
|
this.sfbdinterfaceFn()
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -847,7 +844,7 @@ struct UserInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// loading
|
// loading
|
||||||
if (this.isLoadingPopupVisible) {
|
if(this.isLoadingPopupVisible){
|
||||||
LoadingPopup({
|
LoadingPopup({
|
||||||
title: this.loadingText,
|
title: this.loadingText,
|
||||||
})
|
})
|
||||||
@ -887,7 +884,7 @@ struct CommText {
|
|||||||
|
|
||||||
build() {
|
build() {
|
||||||
Text(this.text)
|
Text(this.text)
|
||||||
.fontSize(19.5 * this.ratio)
|
.fontSize(16 * this.ratio)
|
||||||
.lineHeight(30 * this.ratio)
|
.lineHeight(30 * this.ratio)
|
||||||
.fontWeight(500)
|
.fontWeight(500)
|
||||||
.fontColor(this.color)
|
.fontColor(this.color)
|
||||||
@ -913,13 +910,9 @@ struct LabelBlock {
|
|||||||
|
|
||||||
build() {
|
build() {
|
||||||
Row() {
|
Row() {
|
||||||
Text(this.label).fontSize(18 * this.ratio).fontColor('#99948A')
|
Text(this.label).fontSize(16 * this.ratio).fontColor('#99948A')
|
||||||
Row() {
|
Row() {
|
||||||
Text(decodeURIComponent(this.value))
|
Text(decodeURIComponent(this.value)).fontColor('#fff').textAlign(TextAlign.Center).width('100%')
|
||||||
.fontColor('#fff')
|
|
||||||
.textAlign(TextAlign.Center)
|
|
||||||
.width('100%')
|
|
||||||
.fontSize(20 * this.ratio)
|
|
||||||
}
|
}
|
||||||
.commLabelStyle()
|
.commLabelStyle()
|
||||||
}.margin({ bottom: 10 * this.ratio })
|
}.margin({ bottom: 10 * this.ratio })
|
||||||
|
|||||||
@ -329,7 +329,7 @@ export default struct SignDisplayCom {
|
|||||||
if (showBack) {
|
if (showBack) {
|
||||||
this.ratio = 1.4
|
this.ratio = 1.4
|
||||||
globalThis.udpClient.onMessage_1((msg) => {
|
globalThis.udpClient.onMessage_1((msg) => {
|
||||||
console.log('getUDPonMessage_1bysignDisplay0', msg)
|
console.log('msgmsg', msg)
|
||||||
if (msg) {
|
if (msg) {
|
||||||
getSignal(msg)
|
getSignal(msg)
|
||||||
}
|
}
|
||||||
@ -354,8 +354,6 @@ export default struct SignDisplayCom {
|
|||||||
const showBack = this.showBack;
|
const showBack = this.showBack;
|
||||||
if (showBack) {
|
if (showBack) {
|
||||||
globalThis.udpClient.onMessage_1((msg) => {
|
globalThis.udpClient.onMessage_1((msg) => {
|
||||||
console.log('getUDPonMessage_1bysignDisplay2', msg)
|
|
||||||
|
|
||||||
getSignal(msg)
|
getSignal(msg)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -25,10 +25,7 @@ export async function examJudgeVersion(){
|
|||||||
* @desc 设置评判日志级别和日志回调函数
|
* @desc 设置评判日志级别和日志回调函数
|
||||||
*/
|
*/
|
||||||
export async function examJudgeSetLogCallback(level:number,handleLog:Function):Promise<string>{
|
export async function examJudgeSetLogCallback(level:number,handleLog:Function):Promise<string>{
|
||||||
console.log('SURENJUN_JUDGESDK',0)
|
|
||||||
const temp = libJudgeSdk.examJudgeSetLogCallback(level,handleLog);
|
const temp = libJudgeSdk.examJudgeSetLogCallback(level,handleLog);
|
||||||
console.log('SURENJUN_JUDGESDK',1)
|
|
||||||
|
|
||||||
return await handle(temp,'examJudgeSetLogCallback')
|
return await handle(temp,'examJudgeSetLogCallback')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -113,7 +113,6 @@ export interface EXAMDATA {
|
|||||||
xmxh: string,
|
xmxh: string,
|
||||||
xmhg: 1 | 0
|
xmhg: 1 | 0
|
||||||
},
|
},
|
||||||
|
|
||||||
//扣分
|
//扣分
|
||||||
kf: {
|
kf: {
|
||||||
//项目代码
|
//项目代码
|
||||||
@ -131,7 +130,13 @@ export interface EXAMDATA {
|
|||||||
//前进距离
|
//前进距离
|
||||||
qjjl: number,
|
qjjl: number,
|
||||||
//倒车距离
|
//倒车距离
|
||||||
dcjl: number
|
dcjl: number,
|
||||||
|
d1: number
|
||||||
|
d2: number
|
||||||
|
d3: number
|
||||||
|
d4: number
|
||||||
|
d5: number
|
||||||
|
d6: number
|
||||||
},
|
},
|
||||||
|
|
||||||
//项目取消
|
//项目取消
|
||||||
|
|||||||
@ -557,42 +557,72 @@ export const testUIAllitems = [
|
|||||||
{"name":"直角转弯","abbreviation":"直角转弯","projectCode":"6","projectCodeCenter":"20700","type":"7"},
|
{"name":"直角转弯","abbreviation":"直角转弯","projectCode":"6","projectCodeCenter":"20700","type":"7"},
|
||||||
]
|
]
|
||||||
|
|
||||||
//所有的科二项目
|
export const wuxiKm3Items = [
|
||||||
export const testKmItems = [
|
{projectCode:'1',projectCodeCenter:'40100',name:'上车准备',abbreviation:'上车准备'},
|
||||||
|
{projectCode:'2',projectCodeCenter:'40200',name:'起步',abbreviation:'起步'},
|
||||||
|
{projectCode:'3',projectCodeCenter:'40300',name:'直线行驶',abbreviation:'直线行驶'},
|
||||||
|
{projectCode:'4',projectCodeCenter:'40500',name:'变更车道',abbreviation:'变更车道'},
|
||||||
|
{projectCode:'5',projectCodeCenter:'40700',name:'直行通过路口',abbreviation:'直行通过路口'},
|
||||||
|
{projectCode:'6',projectCodeCenter:'41000',name:'通过人行横道线',abbreviation:'通过人行横道线'},
|
||||||
|
{projectCode:'7',projectCodeCenter:'41100',name:'通过学校区域',abbreviation:'通过学校区域'},
|
||||||
|
{projectCode:'8',projectCodeCenter:'41200',name:'通过公共汽车站',abbreviation:'通过公共汽车站'},
|
||||||
|
{projectCode:'9' ,projectCodeCenter:'41300',name:'会车',abbreviation:'会车'},
|
||||||
|
{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:'14',projectCodeCenter:'40400',name:'加减档位操作',abbreviation:'加减档位操作'},
|
||||||
|
{projectCode:'15',projectCodeCenter:'40800',name:'路口左转弯',abbreviation:'路口左转弯'},
|
||||||
|
{projectCode:'16',projectCodeCenter:'40900',name:'路口右转弯',abbreviation:'路口右转弯'},
|
||||||
|
]
|
||||||
|
|
||||||
|
//所有的科二 科目三项目
|
||||||
|
export const testKm2Items = [
|
||||||
{code:'20100',status:0},
|
{code:'20100',status:0},
|
||||||
{code:'20200',status:0},
|
{code:'20200',status:0},
|
||||||
{code:'20300',status:0},
|
{code:'20300',status:0},
|
||||||
{code:'20400',status:0},
|
{code:'20400',status:0},
|
||||||
|
|
||||||
{code:'20500',status:0},
|
{code:'20500',status:0},
|
||||||
{code:'20600',status:0},
|
{code:'20600',status:0},
|
||||||
{code:'20700',status:0},
|
{code:'20700',status:0},
|
||||||
{code:'20800',status:0},
|
{code:'20800',status:0},
|
||||||
|
|
||||||
{code:'20900',status:0},
|
{code:'20900',status:0},
|
||||||
{code:'21000',status:0},
|
{code:'21000',status:0},
|
||||||
{code:'21100',status:0},
|
{code:'21100',status:0},
|
||||||
{code:'21200',status:0},
|
{code:'21200',status:0},
|
||||||
|
|
||||||
{code:'21300',status:0},
|
{code:'21300',status:0},
|
||||||
{code:'21400',status:0},
|
{code:'21400',status:0},
|
||||||
{code:'21500',status:0},
|
{code:'21500',status:0},
|
||||||
{code:'21600',status:0},
|
{code:'21600',status:0},
|
||||||
|
|
||||||
{code:'21700',status:0},
|
{code:'21700',status:0},
|
||||||
{code:'21800',status:0},
|
{code:'21800',status:0},
|
||||||
|
]
|
||||||
|
|
||||||
|
export const testKm3Items= [
|
||||||
{code:'40100',status:0},
|
{code:'40100',status:0},
|
||||||
{code:'40200',status:0},
|
{code:'40200',status:0},
|
||||||
{code:'40300',status:0},
|
{code:'40300',status:0},
|
||||||
{code:'40400',status:0},
|
{code:'40400',status:0},
|
||||||
|
|
||||||
{code:'40500',status:0},
|
{code:'40500',status:0},
|
||||||
{code:'40600',status:0},
|
{code:'40600',status:0},
|
||||||
{code:'40700',status:0},
|
{code:'40700',status:0},
|
||||||
{code:'40800',status:0},
|
{code:'40800',status:0},
|
||||||
|
|
||||||
{code:'40900',status:0},
|
{code:'40900',status:0},
|
||||||
{code:'41000',status:0},
|
{code:'41000',status:0},
|
||||||
{code:'41100',status:0},
|
{code:'41100',status:0},
|
||||||
{code:'41200',status:0},
|
{code:'41200',status:0},
|
||||||
|
|
||||||
{code:'41300',status:0},
|
{code:'41300',status:0},
|
||||||
{code:'41400',status:0},
|
{code:'41400',status:0},
|
||||||
{code:'41500',status:0},
|
{code:'41500',status:0},
|
||||||
{code:'41600',status:0},
|
{code:'41600',status:0},
|
||||||
|
|
||||||
{code:'41700',status:0},
|
{code:'41700',status:0},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import systemTime from '@ohos.systemDateTime';
|
|||||||
import router from '@ohos.router';
|
import router from '@ohos.router';
|
||||||
import util from '@ohos.util';
|
import util from '@ohos.util';
|
||||||
import buffer from '@ohos.buffer';
|
import buffer from '@ohos.buffer';
|
||||||
import { testKmItems, testMarkRules } from './dataTest/index';
|
import { testKm2Items,testKm3Items, testMarkRules } from './dataTest/index';
|
||||||
import { EXAMDATA, SOUND, KSJS } from './api/judgeSDK';
|
import { EXAMDATA, SOUND, KSJS } from './api/judgeSDK';
|
||||||
import VoiceAnnounce from './utils/voiceAnnouncements';
|
import VoiceAnnounce from './utils/voiceAnnouncements';
|
||||||
import FileModel from './utils/fileModel';
|
import FileModel from './utils/fileModel';
|
||||||
@ -28,6 +28,7 @@ import {
|
|||||||
import {
|
import {
|
||||||
getCarStatus,
|
getCarStatus,
|
||||||
getCarStatusType,
|
getCarStatusType,
|
||||||
|
getDwStatusType,
|
||||||
getCenterProjectStatus,
|
getCenterProjectStatus,
|
||||||
getKmProjectVoice,
|
getKmProjectVoice,
|
||||||
getTranslateSignals,
|
getTranslateSignals,
|
||||||
@ -78,18 +79,19 @@ export default class Judge {
|
|||||||
this.trajectoryPath = trajectoryPath;
|
this.trajectoryPath = trajectoryPath;
|
||||||
|
|
||||||
this.isExam = !this.judgeUI.singlePlay;
|
this.isExam = !this.judgeUI.singlePlay;
|
||||||
const {projectsCenterObj} = judgeUI
|
const {projectsCenterObj,examSubject} = judgeUI;
|
||||||
|
|
||||||
//科目三待修改
|
//科目三待修改
|
||||||
testKmItems.forEach(item => {
|
(examSubject ==2 ? testKm2Items : testKm3Items ).forEach(item => {
|
||||||
this.testKmItems[item.code] = item;
|
this.testKmItems[item.code] = item;
|
||||||
//考试项目存在
|
//考试项目存在
|
||||||
if (projectsCenterObj[item.code]) {
|
this.testKmItems[item.code] = {
|
||||||
this.testKmItems[item.code] = {
|
code: item.code,
|
||||||
code: item.code, status: 1
|
status: 1,
|
||||||
}
|
// status: projectsCenterObj[item.code]?.isRequired ? 1 : 0
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
console.info(judgeTag+'testKmItems',JSON.stringify(this.testKmItems))
|
||||||
this.isExamEnd = false;
|
this.isExamEnd = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,7 +165,7 @@ export default class Judge {
|
|||||||
await fileLog.setExamJudgeData(beginExamInfo)
|
await fileLog.setExamJudgeData(beginExamInfo)
|
||||||
await examJudgeBeginExam(beginExamInfo);
|
await examJudgeBeginExam(beginExamInfo);
|
||||||
console.info(judgeTag, '6.开始考试注册完成')
|
console.info(judgeTag, '6.开始考试注册完成')
|
||||||
avPlayer.playAudio(['voice/ksks.WAV'])
|
avPlayer.playAudio([globalThis.singlePlay?'voice/ksks.WAV':'voice/监管成功.mp3'])
|
||||||
this.judgeUI.draw = true
|
this.judgeUI.draw = true
|
||||||
// 处理轨迹plc信息
|
// 处理轨迹plc信息
|
||||||
if (isTrajectoryOpen) {
|
if (isTrajectoryOpen) {
|
||||||
@ -299,6 +301,7 @@ export default class Judge {
|
|||||||
switch (event) {
|
switch (event) {
|
||||||
//项目开始
|
//项目开始
|
||||||
case 1:
|
case 1:
|
||||||
|
console.info(judgeTag,'项目开始开始1')
|
||||||
judgeUI.projectsObj[xmdm].type = '2';
|
judgeUI.projectsObj[xmdm].type = '2';
|
||||||
if (isManualProjectIn) {
|
if (isManualProjectIn) {
|
||||||
//手动项目是否在进行中
|
//手动项目是否在进行中
|
||||||
@ -310,6 +313,7 @@ export default class Judge {
|
|||||||
this.judgeUI.currentXmdm = xmdm;
|
this.judgeUI.currentXmdm = xmdm;
|
||||||
const xmmcStr = judgeUI.projectsObj[xmdm].name;
|
const xmmcStr = judgeUI.projectsObj[xmdm].name;
|
||||||
const xmmcCode = judgeUI.projectsObj[xmdm].projectCodeCenter;
|
const xmmcCode = judgeUI.projectsObj[xmdm].projectCodeCenter;
|
||||||
|
console.info(judgeTag,JSON.stringify(judgeUI.projectsObj[xmdm]))
|
||||||
const xmmcSingleCode = judgeUI.projectsObj[xmdm].projectCode;
|
const xmmcSingleCode = judgeUI.projectsObj[xmdm].projectCode;
|
||||||
this.testKmItems[xmmcCode].status = 2;
|
this.testKmItems[xmmcCode].status = 2;
|
||||||
this.xmmcStr = xmmcStr;
|
this.xmmcStr = xmmcStr;
|
||||||
@ -319,19 +323,22 @@ export default class Judge {
|
|||||||
this.xmxh = xmxh;
|
this.xmxh = xmxh;
|
||||||
this.judgeUI.isProjectIn = true
|
this.judgeUI.isProjectIn = true
|
||||||
this.judgeUI.isDeductedPopShow = true
|
this.judgeUI.isDeductedPopShow = true
|
||||||
|
console.info(judgeTag,'项目开始开始2')
|
||||||
break;
|
break;
|
||||||
|
|
||||||
//项目结束
|
//项目结束
|
||||||
case 2:
|
case 2: {
|
||||||
|
const xmmcCode = judgeUI.projectsObj[xmdm].projectCodeCenter;
|
||||||
judgeUI.projectsObj[xmdm].type = (xmjs.xmhg === 0 ? '4' : '3');
|
judgeUI.projectsObj[xmdm].type = (xmjs.xmhg === 0 ? '4' : '3');
|
||||||
//计算项目是否全部结束
|
//计算项目是否全部结束
|
||||||
this.judgeUI.isProjectIn = (Reflect.ownKeys(judgeUI.projectsObj).filter(
|
this.judgeUI.isProjectIn = (Reflect.ownKeys(judgeUI.projectsObj).filter(
|
||||||
projectKey => judgeUI.projectsObj[projectKey].type == '2').length
|
projectKey => judgeUI.projectsObj[projectKey].type == '2').length
|
||||||
) > 0;
|
) > 0;
|
||||||
if (isManualProjectIn) {
|
if (isManualProjectIn) {
|
||||||
this.judgeUI.isManualProjectIn = false
|
this.judgeUI.isManualProjectIn = false
|
||||||
}
|
}
|
||||||
//统计必考项目数量
|
this.testKmItems[xmmcCode].status = 3;
|
||||||
|
//统计必考项目数量
|
||||||
this.xmmcStr = '无';
|
this.xmmcStr = '无';
|
||||||
this.xmmcCode = '';
|
this.xmmcCode = '';
|
||||||
this.xmmcSingleCode = 0;
|
this.xmmcSingleCode = 0;
|
||||||
@ -339,7 +346,7 @@ export default class Judge {
|
|||||||
this.judgeUI.isDeductedPopShow = false
|
this.judgeUI.isDeductedPopShow = false
|
||||||
this.judgeUI.currentXmdm = undefined;
|
this.judgeUI.currentXmdm = undefined;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
//扣分
|
//扣分
|
||||||
case 3:
|
case 3:
|
||||||
const thisKf = getKfStr(`${kf.xmdm}_${kf.kfdm}`)
|
const thisKf = getKfStr(`${kf.xmdm}_${kf.kfdm}`)
|
||||||
@ -445,17 +452,13 @@ export default class Judge {
|
|||||||
//项目已考不上传监管信息
|
//项目已考不上传监管信息
|
||||||
if (!isEnd) {
|
if (!isEnd) {
|
||||||
judgeTask.addTask(async () => {
|
judgeTask.addTask(async () => {
|
||||||
console.info(judgeTag, `项目开始-${xmdm}-${projectsObj[xmdm].name}`)
|
console.info(judgeTag, `项目开始-${xmdm}-${projectsObj[xmdm].name}`)
|
||||||
await beginProject(xmdm)
|
await beginProject(xmdm)
|
||||||
}, {
|
},{isDelay: true})
|
||||||
isDelay: true
|
|
||||||
})
|
|
||||||
judgeTask.addTask(async () => {
|
judgeTask.addTask(async () => {
|
||||||
console.info(judgeTag, `项目-${xmdm}-上传照片 start`)
|
console.info(judgeTag, `项目-${xmdm}-上传照片 start`)
|
||||||
await uploadProgressPhoto(xmdm)
|
await uploadProgressPhoto(xmdm)
|
||||||
}, {
|
},{isDelay: true})
|
||||||
isDelay: true
|
|
||||||
})
|
|
||||||
this.judgeUI.projectsObj[xmdm].isUpload = true;
|
this.judgeUI.projectsObj[xmdm].isUpload = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -476,11 +479,8 @@ export default class Judge {
|
|||||||
judgeTask.addTask(async () => {
|
judgeTask.addTask(async () => {
|
||||||
console.info(judgeTag, `项目结束-${xmdm}-${projectsObj[xmdm].name}`)
|
console.info(judgeTag, `项目结束-${xmdm}-${projectsObj[xmdm].name}`)
|
||||||
await endProject(xmdm);
|
await endProject(xmdm);
|
||||||
}, {
|
}, {isDelay: true})
|
||||||
isDelay: true
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
judgeUI.projectsObj[xmdm].isEnd = true;
|
judgeUI.projectsObj[xmdm].isEnd = true;
|
||||||
break;
|
break;
|
||||||
@ -499,9 +499,7 @@ export default class Judge {
|
|||||||
await judgeTask.addTask(async () => {
|
await judgeTask.addTask(async () => {
|
||||||
console.info(judgeTag, `项目扣分-${currentKf.markcatalog}-${currentKf.desc}`)
|
console.info(judgeTag, `项目扣分-${currentKf.markcatalog}-${currentKf.desc}`)
|
||||||
await pointsDedute(currentKf.xmdm, currentKf)
|
await pointsDedute(currentKf.xmdm, currentKf)
|
||||||
}, {
|
}, {isDelay: true})
|
||||||
isDelay: true
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -524,13 +522,11 @@ export default class Judge {
|
|||||||
}
|
}
|
||||||
if (event == 2 || event == 3) {
|
if (event == 2 || event == 3) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
console.info(judgeTag,'滚动开始')
|
|
||||||
this.judgeUI.kfArrScroller.scrollTo({
|
this.judgeUI.kfArrScroller.scrollTo({
|
||||||
yOffset: 999999, xOffset: 0
|
yOffset: 999999, xOffset: 0
|
||||||
})
|
})
|
||||||
console.info(judgeTag,'滚动结束')
|
|
||||||
},500)
|
},500)
|
||||||
//科目三统计必考数量
|
//统计必考项目完成数量
|
||||||
await this.setCountItems();
|
await this.setCountItems();
|
||||||
await checkExamIsEnd()
|
await checkExamIsEnd()
|
||||||
}
|
}
|
||||||
@ -541,24 +537,27 @@ export default class Judge {
|
|||||||
if(xmdm == 20){
|
if(xmdm == 20){
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
const {judgeTask,beginProject,pointsDedute,uploadProgressPhoto,endProject,checkExamIsEnd} = this;
|
const {judgeTask,beginProject,pointsDedute,uploadProgressPhoto,endProject,checkExamIsEnd,totalScore} = this;
|
||||||
const {projectsObj} = this.judgeUI
|
const {projectsObj,passingScore:passingGrade} = this.judgeUI
|
||||||
console.info(judgeTag + ' projectsObj=> ',JSON.stringify(projectsObj))
|
|
||||||
const {isUpload} = projectsObj[xmdm];
|
const {isUpload} = projectsObj[xmdm];
|
||||||
console.info(judgeTag + ' projectsObj[xmdm] => ',JSON.stringify(projectsObj[xmdm]))
|
|
||||||
//如果项目没有开始
|
//如果项目没有开始
|
||||||
|
console.info('surenjun isUpload=>',isUpload)
|
||||||
if(!isUpload){
|
if(!isUpload){
|
||||||
console.info(judgeTag,'项目补传开始')
|
console.info(judgeTag,'项目补传开始')
|
||||||
//项目开始补传
|
//项目开始补传
|
||||||
judgeTask.addTask(async ()=>{await beginProject(xmdm)},{isDelay:true})
|
judgeTask.addTask(async ()=>{await beginProject(xmdm)},{isDelay:true})
|
||||||
judgeTask.addTask(async ()=>{await uploadProgressPhoto(xmdm)},{isDelay:true})
|
judgeTask.addTask(async ()=>{await uploadProgressPhoto(xmdm)},{isDelay:true})
|
||||||
|
this.judgeUI.projectsObj[xmdm].isUpload = true;
|
||||||
//扣分补传
|
//扣分补传
|
||||||
if(currentType == 2){
|
if(currentType == 2){
|
||||||
judgeTask.addTask(async ()=>{await pointsDedute(xmdm,kf)},{isDelay:true})
|
judgeTask.addTask(async ()=>{await pointsDedute(xmdm,kf)},{isDelay:true})
|
||||||
}
|
}
|
||||||
judgeTask.addTask(async ()=>{await endProject(xmdm)},{isDelay:true})
|
//扣分补传判断是否合格 不合格补传项目结束
|
||||||
judgeTask.addTask(async ()=>{
|
if(currentType == 1 || (currentType == 2 && totalScore < passingGrade)){
|
||||||
|
judgeTask.addTask(async ()=>{await endProject(xmdm)},{isDelay:true})
|
||||||
this.judgeUI.projectsObj[xmdm].isEnd = true;
|
this.judgeUI.projectsObj[xmdm].isEnd = true;
|
||||||
|
}
|
||||||
|
judgeTask.addTask(async ()=>{
|
||||||
checkExamIsEnd()
|
checkExamIsEnd()
|
||||||
})
|
})
|
||||||
return false;
|
return false;
|
||||||
@ -719,7 +718,7 @@ export default class Judge {
|
|||||||
}
|
}
|
||||||
avPlayer.playAudio([`voice/${code}.mp3`], false, () => {
|
avPlayer.playAudio([`voice/${code}.mp3`], false, () => {
|
||||||
if (type == 1) {
|
if (type == 1) {
|
||||||
console.info(judgeTag, '播放结束:' + code)
|
// console.info(judgeTag, '播放结束:' + code)
|
||||||
examJudgeSoundEnd({
|
examJudgeSoundEnd({
|
||||||
itemno: xmdm, code, type
|
itemno: xmdm, code, type
|
||||||
})
|
})
|
||||||
@ -832,8 +831,8 @@ export default class Judge {
|
|||||||
try {
|
try {
|
||||||
if (!singlePlay) {
|
if (!singlePlay) {
|
||||||
// TODO 待验证
|
// TODO 待验证
|
||||||
// const bytes = await this.getMessageHeartbeat(true);
|
const bytes = await this.getMessageHeartbeat(true);
|
||||||
// globalThis.judgeUdp.send(bytes)
|
globalThis.judgeUdp.send(bytes)
|
||||||
}
|
}
|
||||||
//TODO endExam函数逻辑待验证
|
//TODO endExam函数逻辑待验证
|
||||||
await endExam()
|
await endExam()
|
||||||
@ -857,6 +856,7 @@ export default class Judge {
|
|||||||
await uploadDisConnectData();
|
await uploadDisConnectData();
|
||||||
const time = await getCurrentTime();
|
const time = await getCurrentTime();
|
||||||
const photoBase64 = await getPhoto();
|
const photoBase64 = await getPhoto();
|
||||||
|
const {d1,d2,d3,d4,d5} = ksjs
|
||||||
const data = {
|
const data = {
|
||||||
xtlb: '17', jkxlh: serialNumber, jkid: '17C56',
|
xtlb: '17', jkxlh: serialNumber, jkid: '17C56',
|
||||||
drvexam: {
|
drvexam: {
|
||||||
@ -869,8 +869,8 @@ export default class Judge {
|
|||||||
jssj: time,
|
jssj: time,
|
||||||
kscj: (totalScore * 1) > 0 ? totalScore : 0,
|
kscj: (totalScore * 1) > 0 ? totalScore : 0,
|
||||||
kslc: Math.ceil(((ksjs?.qjjl + ksjs?.dcjl) || 0) / 100),
|
kslc: Math.ceil(((ksjs?.qjjl + ksjs?.dcjl) || 0) / 100),
|
||||||
//TODO
|
// 1,22;2,560;3,128;4,0;5,0;
|
||||||
dwlc: '',
|
dwlc: [d1,d2,d3,d4,d5].map((d,index) => `${index},${Math.floor(d /100)}`).join(';'),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const code = await writeObjectOut(data,filePath);
|
const code = await writeObjectOut(data,filePath);
|
||||||
@ -957,8 +957,6 @@ export default class Judge {
|
|||||||
getMessageHeartbeat = async (isEnd?: Boolean) => {
|
getMessageHeartbeat = async (isEnd?: Boolean) => {
|
||||||
const carInfo = globalThis.carInfo;
|
const carInfo = globalThis.carInfo;
|
||||||
const { examSubject,plateNo,ksyh } = carInfo;
|
const { examSubject,plateNo,ksyh } = carInfo;
|
||||||
// const ksyh='0000000000000'
|
|
||||||
// const ksyh=globalThis.ksyh ||'0000000000000'
|
|
||||||
const {
|
const {
|
||||||
judgeUI,
|
judgeUI,
|
||||||
isExam,
|
isExam,
|
||||||
@ -974,34 +972,32 @@ export default class Judge {
|
|||||||
getSbxh
|
getSbxh
|
||||||
} = this;
|
} = this;
|
||||||
const {lsh,startHourTime,totalScore} = judgeUI;
|
const {lsh,startHourTime,totalScore} = judgeUI;
|
||||||
const examType = isExam ? examSubject : 0;
|
const {fourInOneScreen:{gpsDigit}} = judgeConfig
|
||||||
|
const examType = examSubject == 2?2:3
|
||||||
const {sensor,gps} = tempData;
|
const {sensor,gps} = tempData;
|
||||||
const {zfxd,yfxd,shtd,ygd,jgd,skd,dh1,dh2,lhq,jsc,ssc,fsc,lb,mkg,aqd,ygq,cs,fdjzs} = sensor
|
const {zfxd,yfxd,shtd,ygd,jgd,skd,dh1,dh2,lhq,jsc,ssc,fsc,lb,mkg,aqd,ygq,cs,fdjzs,dw} = sensor
|
||||||
const {jd,wd, hxj, fyj, hbg,} = gps
|
const {jd,wd, hxj, fyj, hbg,} = gps
|
||||||
const translateProject = getTranslateProject();
|
const translateProject = getTranslateProject();
|
||||||
const sbxh = getSbxh(xmdm, xmxh)
|
const sbxh = getSbxh(xmdm, xmxh)
|
||||||
const {carzt,dcjl,qjjl,dxjl,bxjl} = performInfo;
|
const {carzt,dcjl,qjjl,dxjl,bxjl} = performInfo;
|
||||||
// const asclshArr = stringToASC(lsh);
|
const asclshArr = stringToASC(fillZero(lsh || 0, 13));
|
||||||
const asclshArr = stringToASC(fillZero('0000000000000' || 0, 13));
|
|
||||||
|
|
||||||
//13不足要补0
|
//13不足要补0
|
||||||
const ascksyhArr = stringToASC(fillZero(ksyh || 0, 13))
|
const ascksyhArr = stringToASC(fillZero(ksyh || 0, 13))
|
||||||
const ascsbxhArr = stringToASC(sbxh)
|
const ascsbxhArr = stringToASC(sbxh)
|
||||||
const translateSignals = getTranslateSignals(
|
const translateSignals = getTranslateSignals(
|
||||||
[zfxd, yfxd, shtd, ygd, jgd, skd, dh1, dh2, lhq, jsc, ssc, fsc, lb, mkg, aqd, 0, 0, 0, 0].concat(getCarStatusType(carzt)).concat([ygq, sensor.wd, 0])
|
[zfxd, yfxd, shtd, ygd, jgd, skd, dh1, dh2, lhq, jsc, ssc, fsc, lb, mkg, aqd].concat(getDwStatusType(dw)).concat(getCarStatusType(carzt)).concat([ygq, sensor.wd, 0])
|
||||||
)
|
)
|
||||||
|
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
const translateJd = convertGpsCoord2(wd).toFixed(7) * Math.pow(10, 7);
|
const translateJd = convertGpsCoord2(wd).toFixed(gpsDigit) * Math.pow(10, gpsDigit);
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
const translateWd = convertGpsCoord2(jd).toFixed(7) * Math.pow(10, 7)
|
const translateWd = convertGpsCoord2(jd).toFixed(gpsDigit) * Math.pow(10, gpsDigit)
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
const translateProjects = translateProject.map(numStr => string2Bytes(parseInt(numStr, 2), 8)[0])
|
const translateProjects = translateProject.map(numStr => string2Bytes(parseInt(numStr, 2), 8)[0])
|
||||||
|
// console.info(judgeTag,JSON.stringify(translateProject))
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
// const translateProjects= translateProject.map(num => string2Bytes(p,8)[0])
|
// const translateProjects= translateProject.map(num => string2Bytes(p,8)[0])
|
||||||
const arr = [
|
const arr = [
|
||||||
//考生号 TODO 考试员号
|
//考生号
|
||||||
asclshArr.map(lsh => string2Bytes(lsh, 8)[0]),
|
asclshArr.map(lsh => string2Bytes(lsh, 8)[0]),
|
||||||
//考试员号
|
//考试员号
|
||||||
ascksyhArr.map(ksyh => string2Bytes(ksyh, 8)[0]),
|
ascksyhArr.map(ksyh => string2Bytes(ksyh, 8)[0]),
|
||||||
@ -1011,15 +1007,15 @@ export default class Judge {
|
|||||||
string2Bytes(isEnd ? 0 : serialIndex, 2 * 8),
|
string2Bytes(isEnd ? 0 : serialIndex, 2 * 8),
|
||||||
/*左向灯 右向灯 双跳灯 远光灯 近光灯 视宽灯 点火1 点火2 离合器 脚刹 手刹 副刹 喇叭 门开关 安全带 档位 车辆状态 雨刮器 雾灯 0*/
|
/*左向灯 右向灯 双跳灯 远光灯 近光灯 视宽灯 点火1 点火2 离合器 脚刹 手刹 副刹 喇叭 门开关 安全带 档位 车辆状态 雨刮器 雾灯 0*/
|
||||||
translateSignals,
|
translateSignals,
|
||||||
//速度 发动机转速 GPS纬度 GPS经度 主天线位置
|
//速度 发动机转速 GPS纬度 GPS经度 主天线位置
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
string2Bytes(cs, 2 * 8), string2Bytes(fdjzs / 60, 8), string2Bytes(translateJd, 4 * 8), string2Bytes(translateWd, 4 * 8), string2Bytes(1, 8),
|
string2Bytes(Math.floor(gps.sd*1.852) , 2 * 8), string2Bytes(fdjzs / 100, 8), string2Bytes(translateJd, 4 * 8), string2Bytes(translateWd, 4 * 8), string2Bytes(1, 8),
|
||||||
//GPS东向距离
|
//GPS东向距离
|
||||||
string2Bytes(dxjl < 0 ? (dxjl + 4294967296) : dxjl, 4 * 8),
|
string2Bytes(dxjl < 0 ? (dxjl + 4294967296) : dxjl, 4 * 8),
|
||||||
//GPS北向距离
|
//GPS北向距离
|
||||||
string2Bytes(bxjl < 0 ? (bxjl + 4294967296) : bxjl, 4 * 8),
|
string2Bytes(bxjl < 0 ? (bxjl + 4294967296) : bxjl, 4 * 8),
|
||||||
//航向角 俯仰角 高程(海拔)
|
//航向角 俯仰角 高程(海拔)
|
||||||
string2Bytes((hxj + 90) * 100, 2 * 8), string2Bytes(fyj * 100, 2 * 8), string2Bytes(hbg * 100, 4 * 8),
|
string2Bytes((hxj) * 100, 2 * 8), string2Bytes(fyj * 100, 2 * 8), string2Bytes(hbg * 100, 4 * 8),
|
||||||
//项目状态 parseInt('01010010',2) 二进制转成10进制
|
//项目状态 parseInt('01010010',2) 二进制转成10进制
|
||||||
translateProjects,
|
translateProjects,
|
||||||
//当前项目编号
|
//当前项目编号
|
||||||
@ -1036,7 +1032,6 @@ export default class Judge {
|
|||||||
//扣分项数量
|
//扣分项数量
|
||||||
string2Bytes(kfArr.length, 8),
|
string2Bytes(kfArr.length, 8),
|
||||||
//n个扣分序号
|
//n个扣分序号
|
||||||
|
|
||||||
kfArr.map(kf => string2Bytes(kf.kfxh, 8)[0])
|
kfArr.map(kf => string2Bytes(kf.kfxh, 8)[0])
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -1076,22 +1071,31 @@ export default class Judge {
|
|||||||
}
|
}
|
||||||
// 中心所有项目转换
|
// 中心所有项目转换
|
||||||
getTranslateProject = () => {
|
getTranslateProject = () => {
|
||||||
// const {testKmItems} = this;
|
const {examSubject} = this.judgeUI;
|
||||||
const tempItems = testKmItems.map(item => {
|
const tempItems = (examSubject == 2 ? testKm2Items:testKm3Items).map(item => {
|
||||||
const current = this.testKmItems[item.code];
|
const current = this.testKmItems[item.code];
|
||||||
return {
|
return {
|
||||||
code: item.code,
|
code: item.code,
|
||||||
status: getCenterProjectStatus(current.status)
|
status: getCenterProjectStatus(current.status)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const len = Math.floor(tempItems.length / 8);
|
// console.info(judgeTag+'TranslateProject',JSON.stringify(tempItems));
|
||||||
|
|
||||||
const arr = [];
|
const arr = [];
|
||||||
for (let i = 0; i <= len; i++) {
|
for (let i = 0; i <= 4; i++) {
|
||||||
const temp = tempItems.slice(i * 8, (i + 1) * 8);
|
const temp = tempItems.slice(i * 4, (i + 1) * 4);
|
||||||
let tempArr = temp.map(item => item.status)
|
let tempArr = temp.map(item => item.status)
|
||||||
if (i === 4) {
|
if (i === 4) {
|
||||||
tempArr = tempArr.concat(['00', '00'])
|
tempArr = examSubject == 2
|
||||||
|
//bit36-bit39保留
|
||||||
|
? tempArr.concat(['00', '00'])
|
||||||
|
//bit30-bit39保留
|
||||||
|
: tempArr.concat(['00', '00','00'])
|
||||||
}
|
}
|
||||||
|
// if (i === 3 && examSubject == 3) {
|
||||||
|
// tempArr = tempArr.concat(['00'])
|
||||||
|
// }
|
||||||
|
|
||||||
arr.push(tempArr.join(''));
|
arr.push(tempArr.join(''));
|
||||||
}
|
}
|
||||||
return arr.map(numStr => parseInt(numStr, 2));
|
return arr.map(numStr => parseInt(numStr, 2));
|
||||||
@ -1226,7 +1230,7 @@ export default class Judge {
|
|||||||
usbService.sendUSB(str)
|
usbService.sendUSB(str)
|
||||||
}
|
}
|
||||||
this.judgeUI.isDwztRight = plcData.gps.dwzt == 4;
|
this.judgeUI.isDwztRight = plcData.gps.dwzt == 4;
|
||||||
this.judgeUI.sd = (Math.floor((plcData.gps.sd as number) || 0) * 1.852) + '';
|
this.judgeUI.sd = (Math.floor(((plcData.gps.sd as number) || 0) * 1.852)) + '';
|
||||||
this.judgeUI.dw = (Math.floor(plcData.sensor.dw as number) || 0) + ''
|
this.judgeUI.dw = (Math.floor(plcData.sensor.dw as number) || 0) + ''
|
||||||
await examJudgeRealExam(plcData)
|
await examJudgeRealExam(plcData)
|
||||||
const udpIndex = globalThis.udpIndex;
|
const udpIndex = globalThis.udpIndex;
|
||||||
@ -1385,6 +1389,12 @@ export default class Judge {
|
|||||||
qjjl: number,
|
qjjl: number,
|
||||||
// 累计倒车距离
|
// 累计倒车距离
|
||||||
dcjl: number
|
dcjl: number
|
||||||
|
d1: number
|
||||||
|
d2: number
|
||||||
|
d3: number
|
||||||
|
d4: number
|
||||||
|
d5: number
|
||||||
|
d6: number
|
||||||
}
|
}
|
||||||
private kfArr: {
|
private kfArr: {
|
||||||
//项目名称
|
//项目名称
|
||||||
|
|||||||
@ -54,11 +54,11 @@ export default class FileModel{
|
|||||||
const content = fileUtil.getFileContent(`${folderPath}/${fileName}`)
|
const content = fileUtil.getFileContent(`${folderPath}/${fileName}`)
|
||||||
return content;
|
return content;
|
||||||
}catch (e){
|
}catch (e){
|
||||||
|
console.info('surenjun',JSON.stringify(e))
|
||||||
promptAction.showToast({
|
promptAction.showToast({
|
||||||
message:"请检查模型路径是否正确!",
|
message:`请检查模型路径${folderPath}/${fileName}是否正确!`,
|
||||||
duration:4000
|
duration:4000
|
||||||
})
|
})
|
||||||
router.back()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -38,11 +38,13 @@ export default class FilePhoto{
|
|||||||
return ''
|
return ''
|
||||||
}else{
|
}else{
|
||||||
try {
|
try {
|
||||||
|
console.info('surenjun','拍照开始')
|
||||||
const res = await takePhoto(params, this.context, 'pz/',2);
|
const res = await takePhoto(params, this.context, 'pz/',2);
|
||||||
|
console.info('surenjun','拍照结束' + JSON.stringify(res))
|
||||||
return res.base64
|
return res.base64
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
promptAction.showToast({
|
promptAction.showToast({
|
||||||
message: JSON.stringify(e),
|
message: '拍照异常' + JSON.stringify(e),
|
||||||
duration: 2000
|
duration: 2000
|
||||||
});
|
});
|
||||||
return ''
|
return ''
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
import {string2Bytes,Array2Byte,getCurrentTime} from '../../../common/utils/tools'
|
import {string2Bytes,Array2Byte,getCurrentTime} from '../../../common/utils/tools'
|
||||||
import {testMarkRules,testRealExam,testKmItems} from '../dataTest/index'
|
import {testMarkRules,testRealExam} from '../dataTest/index'
|
||||||
|
|
||||||
import promptAction from '@ohos.promptAction'
|
import promptAction from '@ohos.promptAction'
|
||||||
import systemTime from '@ohos.systemDateTime';
|
import systemTime from '@ohos.systemDateTime';
|
||||||
|
import { expect } from '@ohos/hypium';
|
||||||
|
|
||||||
//获取本地扣分项
|
//获取本地扣分项
|
||||||
export const getTestMarkRules = () =>{
|
export const getTestMarkRules = () =>{
|
||||||
@ -46,6 +47,21 @@ export function getCarStatusType(carzt){
|
|||||||
case -1:return [1,0]
|
case -1:return [1,0]
|
||||||
case 0: return [0,0]
|
case 0: return [0,0]
|
||||||
case 1: return [0,1]
|
case 1: return [0,1]
|
||||||
|
default :return [0,0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取档位信号
|
||||||
|
export function getDwStatusType(dw){
|
||||||
|
switch (dw){
|
||||||
|
case 0:return [0,0,0,0]
|
||||||
|
case 1: return [0,0,0,1]
|
||||||
|
case 2: return [0,0,1,0]
|
||||||
|
case 3: return [0,0,1,1]
|
||||||
|
case 4: return [0,1,0,0]
|
||||||
|
case 5: return [0,1,0,1]
|
||||||
|
case 9: return [1,0,0,1]
|
||||||
|
default :return [0,0,0,0]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,12 +69,16 @@ export function getCarStatusType(carzt){
|
|||||||
// 中心实时项目状态转换
|
// 中心实时项目状态转换
|
||||||
export function getCenterProjectStatus(status){
|
export function getCenterProjectStatus(status){
|
||||||
switch (status){
|
switch (status){
|
||||||
//不考
|
//不考
|
||||||
case 0:return '00'
|
case 0:return '00'
|
||||||
//未考
|
//未考
|
||||||
case 1:return '01'
|
case 1:return '01'
|
||||||
//已考
|
//正在考
|
||||||
case 2:return '10'
|
case 2:return '11'
|
||||||
|
//已考
|
||||||
|
case 3:return '10'
|
||||||
|
|
||||||
|
default :return '00'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@ export const judgeConfig = {
|
|||||||
//本地目录开关
|
//本地目录开关
|
||||||
isTrajectoryOpen: false,
|
isTrajectoryOpen: false,
|
||||||
//是否开启拍照
|
//是否开启拍照
|
||||||
isPhotoOpen: false,
|
isPhotoOpen: true,
|
||||||
//扣分语音是否强制开启
|
//扣分语音是否强制开启
|
||||||
kfVoiceOpen: true,
|
kfVoiceOpen: true,
|
||||||
// 是否忽略考试前熄火、车门检查
|
// 是否忽略考试前熄火、车门检查
|
||||||
@ -14,7 +14,12 @@ export const judgeConfig = {
|
|||||||
// 本地模型地址
|
// 本地模型地址
|
||||||
modelPath: 'models/model_enc',
|
modelPath: 'models/model_enc',
|
||||||
// 济南科目三
|
// 济南科目三
|
||||||
trajectoryPath: 'logs/2024_08_01/9999931199729_210601620482055232_蒲秀_2024_08_01_11_52_27/judge_exam_data.txt',
|
trajectoryPath: 'logs/2024_08_07/2024_08_07_11_35_39_0000000000001_342323199501470011_测试学员1/judge_exam_data.txt',
|
||||||
|
//四合一画面配置
|
||||||
|
fourInOneScreen:{
|
||||||
|
//gps位数
|
||||||
|
gpsDigit:6
|
||||||
|
},
|
||||||
// 杭州科目二
|
// 杭州科目二
|
||||||
// trajectoryPath: 'logs/2024_07_19/0000000000001_342323199501470011_测试学员1_2024_07_19_06_49_12/judge_exam_data.txt',
|
// trajectoryPath: 'logs/2024_07_19/0000000000001_342323199501470011_测试学员1_2024_07_19_06_49_12/judge_exam_data.txt',
|
||||||
//TODO 济南临时特殊配置
|
//TODO 济南临时特殊配置
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user