Compare commits
3 Commits
9445377a5d
...
c2fa43f720
| Author | SHA1 | Date | |
|---|---|---|---|
| c2fa43f720 | |||
| e0b0a7b777 | |||
| 69a7828b40 |
@ -17,7 +17,7 @@ message("${MSG_NOTE} ******************************************************")
|
||||
|
||||
# 启用项目文件夹功能。当这个属性被设置为ON时,CMake会根据项目的目录结构自动在生成的项目文件中创建文件夹,以更好地组织项目文件。
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
set(CMAKE_CXX_STANDARD 17) # 注意:windows下可以是C++11 linux下必须是C++14 gtest linux下要C++14
|
||||
set(CMAKE_CXX_STANDARD 17) # 注意:gtest linux下至少要C++14
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
|
||||
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
|
||||
@ -110,8 +110,8 @@ if(WIN32)
|
||||
|
||||
# C2026: 字符串太大,已截断尾部字符(/Zc:strictStrings 或 /Tc编译器开关)
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} $ENV{CFLAGS} /bigobj")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{CXXFLAGS} /bigobj")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} $ENV{CFLAGS} /bigobj /Zc:__cplusplus")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{CXXFLAGS} /bigobj /Zc:__cplusplus")
|
||||
|
||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd /Od") # /Od 禁止优化编译
|
||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT /O2")
|
||||
@ -284,6 +284,7 @@ set(JUDGE_INCLUDE
|
||||
#${CMAKE_SOURCE_DIR}/third
|
||||
${CMAKE_SOURCE_DIR}/third/tinyxml2-9.0.0
|
||||
${CMAKE_SOURCE_DIR}/third/jsoncpp-1.9.5
|
||||
${CMAKE_SOURCE_DIR}/third/json-3.11.3/include/
|
||||
${CMAKE_SOURCE_DIR}/third/inih
|
||||
${CMAKE_SOURCE_DIR}/third/cpp-md5
|
||||
${CMAKE_SOURCE_DIR}/third/libb64
|
||||
@ -324,6 +325,7 @@ file(GLOB_RECURSE JUDGE_SOURCE
|
||||
${CMAKE_SOURCE_DIR}/third/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/tinyxml2-9.0.0/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/jsoncpp-1.9.5/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/json-3.11.3/include/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/inih/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/cpp-md5/*.*
|
||||
${CMAKE_SOURCE_DIR}/third/libb64/*.*
|
||||
@ -359,6 +361,9 @@ file(GLOB_RECURSE JUDGE_SOURCE
|
||||
|
||||
)
|
||||
|
||||
#每次都更新时间戳都会重新编译,记录编译时间戳
|
||||
file(TOUCH ${CMAKE_SOURCE_DIR}/sdk/common/HVersion.cpp)
|
||||
|
||||
#设置编译的包含的目标工程
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/sdk)
|
||||
if(JUDGE_OS_WIN OR JUDGE_OS_LINUX)
|
||||
|
||||
@ -10,9 +10,7 @@
|
||||
|
||||
//============================================================
|
||||
|
||||
//#if defined(__cplusplus) && __cplusplus >= 201103L
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if defined(__cplusplus) && __cplusplus >= 201703L
|
||||
|
||||
# include <string>
|
||||
# include <vector>
|
||||
@ -50,6 +48,8 @@
|
||||
|
||||
#else
|
||||
|
||||
# error "define-error-msg: must be at least c++17 201703L."
|
||||
|
||||
# include <ctype.h>
|
||||
# include <limits.h>
|
||||
# include <stdio.h>
|
||||
@ -71,6 +71,7 @@
|
||||
|
||||
//第三方库头文件
|
||||
#include "json/json.h"
|
||||
#include "nlohmann/json.hpp"
|
||||
#include "tinyxml2.h"
|
||||
#include "md5.h"
|
||||
#include "libb64.h"
|
||||
@ -107,7 +108,7 @@
|
||||
*** JUDGE_USE_MEMORY //是否启用内存操作检查
|
||||
*** JUDGE_USE_POOL //是否启用内存池调试信息
|
||||
*** JUDGE_USE_ASSERT //是否启用断言提示
|
||||
*** JUDGE_USE_NICE //是否启用调试测试代码
|
||||
*** JUDGE_USE_FOLLOW //是否启用跟踪调试测试代码
|
||||
*** JUDGE_USE_PERF //是否启用CPU性能分析
|
||||
*** JUDGE_USE_LEAK //是否启用内存泄露检测
|
||||
*** JUDGE_USE_TCMALLOC //是否启用tcmalloc优化内存使用操作
|
||||
@ -141,19 +142,19 @@
|
||||
#define JUDGE_USE_MEMORY
|
||||
#define JUDGE_USE_POOL
|
||||
#endif
|
||||
|
||||
#define JUDGE_USE_COST
|
||||
/*
|
||||
* 是否启用断言提示
|
||||
* 注意:只有在DEBUG模式的前提下条件下才能开启
|
||||
*/
|
||||
#if defined(JUDGE_DEBUG)
|
||||
#define JUDGE_USE_ASSERT //是否启用断言提示
|
||||
#define JUDGE_USE_ASSERT
|
||||
#endif
|
||||
|
||||
/*
|
||||
* 是否启用测试调试代码
|
||||
* 是否启用跟踪调试测试代码
|
||||
*/
|
||||
#define JUDGE_USE_NICE
|
||||
//#define JUDGE_USE_FOLLOW
|
||||
|
||||
/*
|
||||
* 是否启用CPU性能分析和内存泄露检测
|
||||
@ -206,6 +207,7 @@
|
||||
//#define JUDGE_USE_INSPECT
|
||||
|
||||
|
||||
#define JUDGE_JSON_NLOHMANN_DEFINE NLOHMANN_DEFINE_TYPE_INTRUSIVE
|
||||
|
||||
//********************************以上是预编译定义***************************************
|
||||
|
||||
@ -224,28 +226,7 @@ using uint32 = unsigned int; // using uint32 = std::uint32_t;
|
||||
using uint64 = unsigned long long; // using uint64 = std::uint64_t;
|
||||
|
||||
|
||||
JUDGE_C_API bool __sdk_localtime_safe__(time_t* __t, tm* __tm);
|
||||
JUDGE_C_API int64 __sdk_mktime_safe__(tm* __tm);
|
||||
JUDGE_C_API bool __sdk_strptime_safe__(const char* __s, const char* __fmt, tm* __tm);
|
||||
JUDGE_C_API bool __sdk_filepath_exist__(const char* __filepath);
|
||||
JUDGE_C_API int __sdk_mkdir__(const char* __path);
|
||||
JUDGE_C_API int __sdk_rmdir__(const char* __path);
|
||||
JUDGE_C_API bool __sdk_space_memory__(struct SpaceStorage* __space, int __unit/*is SpaceUnit*/);
|
||||
JUDGE_C_API bool __sdk_space_disk__(const char* __driver, struct SpaceStorage* __space, int __unit/*is SpaceUnit*/);
|
||||
|
||||
#if defined(JUDGE_OS_WIN)
|
||||
# define __sdk_os_assert__(exp) _wassert(_CRT_WIDE(exp), _CRT_WIDE(__FILE__), (unsigned)(__LINE__))
|
||||
#elif defined(JUDGE_OS_OHOS)
|
||||
# define __sdk_os_assert__(exp) __assert_fail(exp, __FILE__, __LINE__, __FUNCTION__)
|
||||
#elif defined(JUDGE_OS_ANDROID)
|
||||
# define __sdk_os_assert__(exp) __assert2(__FILE__, __LINE__, __FUNCTION__, exp)) //__assert(__FILE__, __LINE__, exp))
|
||||
#elif defined(JUDGE_OS_LINUX)
|
||||
# define __sdk_os_assert__(exp) __assert_fail(exp, __FILE__, __LINE__, __FUNCTION__) //__assert(const char *__assertion, const char *__file, int __line)
|
||||
#else
|
||||
# define __sdk_os_assert__(exp) assert(false)
|
||||
#endif
|
||||
|
||||
#ifdef JUDGE_OS_ANDROID
|
||||
#if defined(JUDGE_OS_ANDROID)
|
||||
//using namespace std::filesystem;
|
||||
using std::filesystem::directory_iterator;
|
||||
using std::filesystem::path;
|
||||
@ -291,7 +272,6 @@ JUDGE_C_API bool __sdk_space_disk__(const char* __driver, struct SpaceStorage*
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
#else
|
||||
|
||||
# error "define-error-msg: unknow system."
|
||||
@ -299,6 +279,30 @@ JUDGE_C_API bool __sdk_space_disk__(const char* __driver, struct SpaceStorage*
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(JUDGE_OS_WIN)
|
||||
# define __sdk_os_assert__(exp) _wassert(_CRT_WIDE(exp), _CRT_WIDE(__FILE__), (unsigned)(__LINE__))
|
||||
#elif defined(JUDGE_OS_OHOS)
|
||||
# define __sdk_os_assert__(exp) __assert_fail(exp, __FILE__, __LINE__, __FUNCTION__)
|
||||
#elif defined(JUDGE_OS_ANDROID)
|
||||
# define __sdk_os_assert__(exp) __assert2(__FILE__, __LINE__, __FUNCTION__, exp)) //__assert(__FILE__, __LINE__, exp))
|
||||
#elif defined(JUDGE_OS_LINUX)
|
||||
# define __sdk_os_assert__(exp) __assert_fail(exp, __FILE__, __LINE__, __FUNCTION__) //__assert(const char *__assertion, const char *__file, int __line)
|
||||
#else
|
||||
# define __sdk_os_assert__(exp) assert(false)
|
||||
#endif
|
||||
|
||||
|
||||
JUDGE_C_API bool __sdk_localtime_safe__(time_t* __t, tm* __tm);
|
||||
JUDGE_C_API int64 __sdk_mktime_safe__(tm* __tm);
|
||||
JUDGE_C_API bool __sdk_strptime_safe__(const char* __s, const char* __fmt, tm* __tm);
|
||||
JUDGE_C_API bool __sdk_filepath_exist__(const char* __filepath);
|
||||
JUDGE_C_API int __sdk_mkdir__(const char* __path);
|
||||
JUDGE_C_API int __sdk_rmdir__(const char* __path);
|
||||
JUDGE_C_API bool __sdk_space_memory__(struct SpaceStorage* __space, int __unit/*is SpaceUnit*/);
|
||||
JUDGE_C_API bool __sdk_space_disk__(const char* __driver, struct SpaceStorage* __space, int __unit/*is SpaceUnit*/);
|
||||
|
||||
|
||||
|
||||
/**********************************************************************************************
|
||||
*
|
||||
* 一、WIN32 _WIN32 _WIN64 宏
|
||||
@ -425,7 +429,17 @@ JUDGE_C_API bool __sdk_space_disk__(const char* __driver, struct SpaceStorage*
|
||||
* __int64 -9223372036854775808 ~ 9223372036854775807
|
||||
* unsigned __int64 0 ~ 1844674407370955161
|
||||
*
|
||||
**********************************************************************************************
|
||||
*
|
||||
* __STDC__ C语言标准宏 __STDC_VERSION__ 当前编译器支持的C语言版本标准
|
||||
*
|
||||
* C++标准对应表
|
||||
* c++ __cplusplus
|
||||
* std::c++98 199711
|
||||
* std::c++11 201103
|
||||
* std:c++14 201402L/201300
|
||||
* std:c++17 201703L
|
||||
* std:c++20 202002L
|
||||
*
|
||||
**********************************************************************************************/
|
||||
|
||||
|
||||
@ -126,14 +126,18 @@
|
||||
#define BUILD_SEC_CH1 (__TIME__[7])
|
||||
|
||||
|
||||
const char JUDGE_VERSION_TIME[] =
|
||||
#ifdef JUDGE_VERSION_STAMP
|
||||
|
||||
#else
|
||||
|
||||
const char JUDGE_VERSION_STAMP[] =
|
||||
{
|
||||
BUILD_YEAR_CH2, BUILD_YEAR_CH3,
|
||||
BUILD_MONTH_CH0, BUILD_MONTH_CH1,
|
||||
BUILD_DAY_CH0, BUILD_DAY_CH1,
|
||||
BUILD_HOUR_CH0, BUILD_HOUR_CH1,
|
||||
BUILD_MIN_CH0, BUILD_MIN_CH1,
|
||||
BUILD_SEC_CH0, BUILD_SEC_CH1,
|
||||
//BUILD_SEC_CH0, BUILD_SEC_CH1,
|
||||
'\0'
|
||||
};
|
||||
|
||||
@ -142,18 +146,19 @@ const char JUDGE_VERSION_INFO[] =
|
||||
JUDGE_CHARS_MAJOR, '.',
|
||||
JUDGE_CHARS_MINOR, '.',
|
||||
JUDGE_CHARS_PATCH, '.',
|
||||
JUDGE_VERSION_TIME[0],
|
||||
JUDGE_VERSION_TIME[1],
|
||||
JUDGE_VERSION_TIME[2],
|
||||
JUDGE_VERSION_TIME[3],
|
||||
JUDGE_VERSION_TIME[4],
|
||||
JUDGE_VERSION_TIME[5],
|
||||
JUDGE_VERSION_TIME[6],
|
||||
JUDGE_VERSION_TIME[7],
|
||||
JUDGE_VERSION_TIME[8],
|
||||
JUDGE_VERSION_TIME[9],
|
||||
JUDGE_VERSION_TIME[10],
|
||||
JUDGE_VERSION_TIME[11],
|
||||
JUDGE_VERSION_STAMP[0],
|
||||
JUDGE_VERSION_STAMP[1],
|
||||
JUDGE_VERSION_STAMP[2],
|
||||
JUDGE_VERSION_STAMP[3],
|
||||
JUDGE_VERSION_STAMP[4],
|
||||
JUDGE_VERSION_STAMP[5],
|
||||
JUDGE_VERSION_STAMP[6],
|
||||
JUDGE_VERSION_STAMP[7],
|
||||
JUDGE_VERSION_STAMP[8],
|
||||
JUDGE_VERSION_STAMP[9],
|
||||
//JUDGE_VERSION_STAMP[10],
|
||||
//JUDGE_VERSION_STAMP[11],
|
||||
'\0'
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@ -3,19 +3,33 @@
|
||||
*
|
||||
* 作者: 杨海洋
|
||||
* 日期: 2023-03-22
|
||||
*
|
||||
* *******************************************************************
|
||||
*
|
||||
* 主版本号.子版本号.修订版本号.日期
|
||||
*
|
||||
* 比如:1.2.3.2304241030
|
||||
*
|
||||
* 说明:
|
||||
* 第一位(1):主版本号。当功能模块有较大的变动,比如增加多个模块或者整体架构发生变化。此版本号由项目决定是否修改。
|
||||
* 第二位(2):子版本号。当功能有一定的增加或变化,比如增加了新功能。此版本号由项目决定是否修改。
|
||||
* 第三位(3):修订版本号。一般是Bug修复或是一些小的变动,要经常发布修订版,时间间隔不限,修复一个bug即可发布一个修订版。此版本号由开发人员决定是否修改。
|
||||
* 第四位(4):日期版本号(2304241030年月日时分):用于记录修改项目的当前日期,每天对项目的修改都需要更改日期版本号。此版本号由开发人员决定是否修改。
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef HVERSION_H
|
||||
#define HVERSION_H
|
||||
|
||||
//定义版本号
|
||||
//定义版本号 格式:主版本号.子版本号.修订版本号.版本日期
|
||||
#define JUDGE_VERSION_MAJOR 1
|
||||
#define JUDGE_VERSION_MINOR 0
|
||||
#define JUDGE_VERSION_PATCH 0
|
||||
#define JUDGE_VERSION_PATCH 1
|
||||
#define JUDGE_VERSION_STAMP 2409100904
|
||||
|
||||
#define JUDGE_AUX_EXP(x) #x
|
||||
#define JUDGE_AUX_STR(x) JUDGE_AUX_EXP(x)
|
||||
#define JUDGE_AUX_INT(a,b,c) ((a)<<24 | (b)<<16) | (c))
|
||||
#define JUDGE_AUX_INT(a,b,c) (((a)<<24) | ((b)<<16) | (c))
|
||||
#define JUDGE_AUX_MAJOR(x) (((x) & 0xFF000000) >> 24) //[0-127]
|
||||
#define JUDGE_AUX_MINOR(x) (((x) & 0x00FF0000) >> 16) //[0-255]
|
||||
#define JUDGE_AUX_PATCH(x) (((x) & 0x0000FFFF)) //[0-65535]
|
||||
@ -30,12 +44,12 @@
|
||||
JUDGE_AUX_STR(JUDGE_VERSION_MINOR) "." \
|
||||
JUDGE_AUX_STR(JUDGE_VERSION_PATCH)
|
||||
|
||||
|
||||
//版本编译时间 240401131705
|
||||
extern const char JUDGE_VERSION_TIME[];
|
||||
|
||||
//版本详细信息[版本号+版本编译时间] 1.0.0.240401131705
|
||||
extern const char JUDGE_VERSION_INFO[];
|
||||
|
||||
//版本详细信息[版本号+版本日期]
|
||||
#ifdef JUDGE_VERSION_STAMP
|
||||
#define JUDGE_VERSION_INFO JUDGE_VERSION_STR "." JUDGE_AUX_STR(JUDGE_VERSION_STAMP)
|
||||
#else
|
||||
extern const char JUDGE_VERSION_STAMP[]; //版本编译时间 2304241030
|
||||
extern const char JUDGE_VERSION_INFO[]; //版本详细信息[版本号+版本编译日期] 1.2.3.2304241030
|
||||
#endif
|
||||
|
||||
#endif // HVERSION_H
|
||||
|
||||
@ -153,7 +153,7 @@ bool Loggerxx::flushLog(const LogUnit& unit)
|
||||
std::string filename = Tools::getFileName(unit.file);
|
||||
int ms = unit.tick%SECOND;
|
||||
std::string tick = Tools::toTimeString(unit.tick/SECOND);
|
||||
snprintf(line, sizeof(line), "[%s.%03d][%s][%s][%s:%d:%s]%s\n",
|
||||
snprintf(line, sizeof(line), "[%s.%03d][%s][%s][%s:%d:%s]%s",
|
||||
tick.c_str(), ms,
|
||||
toTagName(unit.tag).c_str(),
|
||||
toLogName(unit.level).c_str(),
|
||||
|
||||
@ -268,8 +268,8 @@ std::string Tools::toJson(const Json::Value& root)
|
||||
{
|
||||
//std::string json = root.toStyledString();
|
||||
Json::FastWriter writer;
|
||||
std::string json = writer.write(root);
|
||||
return json;
|
||||
writer.omitEndingLineFeed();
|
||||
return writer.write(root);
|
||||
}
|
||||
|
||||
std::string Tools::tolower(const std::string& s)
|
||||
|
||||
@ -80,7 +80,7 @@ ErrorCode ExamCarSub2::examGoonExam()
|
||||
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
|
||||
if(nullptr == rule)
|
||||
{
|
||||
logerror("not find mark-rule item=%d, serial=%s", markItem.xmdm, markItem.kfdm.c_str());
|
||||
logwarning("not find mark-rule item=%d, serial=%s", markItem.xmdm, markItem.kfdm.c_str());
|
||||
return QE(errorMarkNotFind);
|
||||
}
|
||||
grade += rule->markreal;
|
||||
@ -203,7 +203,7 @@ bool ExamCarSub2::examMarkItem(ExamItemCode itemNo, const std::string& serial, b
|
||||
const TMarkRule* rule = TableMark->find(itemNo, serial); //找到扣分的对象
|
||||
if(nullptr == rule)
|
||||
{
|
||||
logerror("not find mark-rule item=%d, serial=%s, type=%d", itemNo, serial.c_str(), type);
|
||||
logwarning("not find mark-rule item=%d, serial=%s, type=%d", itemNo, serial.c_str(), type);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -98,7 +98,7 @@ ErrorCode ExamCarSub3::examGoonExam()
|
||||
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
|
||||
if(nullptr == rule)
|
||||
{
|
||||
logerror("not find mark-rule item=%d, serial=%s", markItem.xmdm, markItem.kfdm.c_str());
|
||||
logwarning("not find mark-rule item=%d, serial=%s", markItem.xmdm, markItem.kfdm.c_str());
|
||||
return QE(errorMarkNotFind);
|
||||
}
|
||||
grade += rule->markreal;
|
||||
@ -178,11 +178,11 @@ ErrorCode ExamCarSub3::examArtifItem(ExamItemCode itemno, ArtifItemType type)
|
||||
switch (type)
|
||||
{
|
||||
case ArtifItemTypeAuto:
|
||||
return CallRenGongEnterItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemAuto);
|
||||
return QE(errorArtifItemAuto); //return CallRenGongEnterItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemAuto);
|
||||
case ArtifItemTypeEnter:
|
||||
return CallRenGongEnterItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemEnter);
|
||||
case ArtifItemTypeCancel:
|
||||
return CallRenGongEnterItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemCancel);
|
||||
case ArtifItemTypeCancel: //340参数控制
|
||||
return CallRenGongCancelItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemCancel);
|
||||
case ArtifItemTypeEnd:
|
||||
return CallRenGongEndItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemEnd);
|
||||
default: break;
|
||||
@ -1207,7 +1207,7 @@ void ExamCarSub3::Deal_KM3_Judge()
|
||||
item->EndTime = 0;
|
||||
item->MsgData = "";
|
||||
item->TestPro = ItemProFlagJudge;
|
||||
createEventEnterItem({item->ItemNo, ""});
|
||||
createEventEnterItem({item->ItemNo, item->SubName});
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1857,6 +1857,8 @@ void ExamCarSub3::Calc_LaneDistance()
|
||||
|
||||
if(LeftBody1 == -1 || LeftBody2 == -1 || RightBody1 == -1 || RightBody2 == -1)
|
||||
{
|
||||
logerror("cartype=%d,LeftBody1=%d, LeftBody2=%d, LeftBody2=%d, RightBody2=%d",
|
||||
cartype, LeftBody1, LeftBody2, LeftBody2, RightBody2);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -3862,7 +3864,6 @@ bool ExamCarSub3::KM3AllPass()
|
||||
if(isExamDrill())
|
||||
{
|
||||
return m_ctl.PassedItem.size() == m_sub3Items.size();
|
||||
//return false;
|
||||
}
|
||||
|
||||
//里程不够
|
||||
@ -3992,7 +3993,7 @@ void ExamCarSub3::KM3EndItem(int ItemNo)
|
||||
m_ctl.PassedItem.insert(ItemNo);
|
||||
logtrace("PassedItem=%d", ItemNo);
|
||||
}
|
||||
createEventFinishItem({examItem->ItemNo, "", markFlag ? 0 : 1});
|
||||
createEventFinishItem({examItem->ItemNo, examItem->SubName, markFlag ? 0 : 1});
|
||||
}
|
||||
|
||||
bool ExamCarSub3::examMarkItem(int itemNo, const std::string& serial, bool once, bool force, bool event, MarkType type)
|
||||
@ -4208,6 +4209,7 @@ bool ExamCarSub3::examMarkItem(int itemNo, const std::string& serial, bool once,
|
||||
if(m_marks[i].serial == serial && m_marks[i].itemNo == itemNo)
|
||||
{
|
||||
RepeatKfID = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4220,7 +4222,7 @@ bool ExamCarSub3::examMarkItem(int itemNo, const std::string& serial, bool once,
|
||||
const TMarkRule* rule = TableMark->find(itemNo, serial);
|
||||
if(nullptr == rule)
|
||||
{
|
||||
logerror("not find mark-rule item=%d, serial=%s", itemNo, serial.c_str());
|
||||
logwarning("not find mark-rule item=%d, serial=%s", itemNo, serial.c_str());
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -4289,6 +4291,18 @@ bool ExamCarSub3::examMarkItem(int itemNo, const std::string& serial, bool once,
|
||||
createEventMarkItem({mark.itemNo, mark.serial, mark.catalog, type});
|
||||
}
|
||||
|
||||
if(isExamMode() && !isQualified())
|
||||
{
|
||||
if(mark.itemNo != Sub3ItemType20Comm)
|
||||
{
|
||||
TKM3Item* markItem = findExamItem(mark.itemNo);
|
||||
if(markItem != nullptr && markItem->TestPro == ItemProFlagJudge)
|
||||
{
|
||||
markItem->TestPro = ItemProFlagEnd;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result = true;
|
||||
}
|
||||
else
|
||||
@ -4302,7 +4316,40 @@ bool ExamCarSub3::examMarkItem(int itemNo, const std::string& serial, bool once,
|
||||
|
||||
bool ExamCarSub3::CallRenGongCancelItem(int ItemNo)
|
||||
{
|
||||
logwarning("CallRenGongCancelItem not support item=%d", ItemNo);
|
||||
//(*2024-03-06*)
|
||||
TKM3Item* item = findExamItem(ItemNo);
|
||||
if(item == nullptr) return false;
|
||||
if(item->TestPro == ItemProFlagInit || item->TestPro == ItemProFlagJudge) //取消项目
|
||||
{
|
||||
//取消项目
|
||||
//项目内有扣分的不能取消
|
||||
//SysSet[426]:手工取消正在考的项目(0-否 1-是)
|
||||
if(TableSysSet->get426() == "0")
|
||||
{
|
||||
return false; //20141101
|
||||
}
|
||||
|
||||
for(size_t i = 0; i < m_marks.size(); i++)
|
||||
{
|
||||
if(m_marks[i].itemNo == ItemNo)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
item->TestPro = ItemProFlagIdle;
|
||||
item->Item_Color = itemStateWk;
|
||||
if(ItemNo == Sub3ItemType04Bgcd || ItemNo == Sub3ItemType10Ccxx)
|
||||
{
|
||||
//ToDo:语音播报:取消变更车道
|
||||
m_pub.PUB_JDCC_ZT = 0; //借道超车
|
||||
}
|
||||
//ToDo:语音播报:取消变更车道
|
||||
createEventCancelItem({ItemNo, ""});
|
||||
return true;
|
||||
}
|
||||
|
||||
logwarning("CallRenGongCancelItem:ItemNo=%d,Pro=%d", ItemNo, item->TestPro);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -4315,18 +4362,16 @@ bool ExamCarSub3::CallRenGongEndItem(int ItemNo)
|
||||
return false;
|
||||
}
|
||||
|
||||
if(item->TestPro > ItemProFlagIdle)
|
||||
if(item->TestPro == ItemProFlagInit || item->TestPro == ItemProFlagJudge)
|
||||
{
|
||||
item->TestPro = ItemProFlagEnd;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
logwarning("CallRenGongEndItem:%d,%d", ItemNo, item->TestPro);
|
||||
logwarning("CallRenGongEndItem:ItemNo=%d,Pro=%d", ItemNo, item->TestPro);
|
||||
return false;
|
||||
}
|
||||
|
||||
logerror("CallRenGongCancelItem error item=%d", ItemNo);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -4338,6 +4383,18 @@ bool ExamCarSub3::CallRenGongEnterItem(int ItemNo)
|
||||
//3、直线行驶 4、变更车道 9、会车 10、超车、11、靠边停车 12、普通掉头(非路口项目定义的掉头)
|
||||
//5、直行路口 15、左转弯 16、右转弯 (南京车管所,这个是不符合部令要求的)
|
||||
|
||||
TKM3Item* item = findExamItem(ItemNo);
|
||||
if(item == nullptr)
|
||||
{
|
||||
logwarning("artif enter item ItemNo=%d is null", ItemNo);
|
||||
return false;
|
||||
}
|
||||
if(item->TestPro != ItemProFlagIdle)
|
||||
{
|
||||
logwarning("not artif enter item ItemNo=%d, Pro=%d", ItemNo, item->TestPro);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(ItemNo == Sub3ItemType03Zxxs || ItemNo == Sub3ItemType04Bgcd || ItemNo == Sub3ItemType09Hcxx ||
|
||||
ItemNo == Sub3ItemType10Ccxx || ItemNo == Sub3ItemType11Kbtc || ItemNo == Sub3ItemType12Dtxx ||
|
||||
ItemNo == Sub3ItemType05Lkzx || ItemNo == Sub3ItemType15Lkzz || ItemNo == Sub3ItemType16Lkyz)
|
||||
@ -4437,11 +4494,10 @@ bool ExamCarSub3::If_EnterItem(int ItemNo)
|
||||
|
||||
if(!result)
|
||||
{
|
||||
logerror("not If_EnterItem artificial enter item=%d.", ItemNo);
|
||||
logwarning("not If_EnterItem artificial enter item=%d.", ItemNo);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
bool ExamCarSub3::ManualStartItem(int ItemNo)
|
||||
@ -4536,35 +4592,7 @@ bool ExamCarSub3::ManualStartItem(int ItemNo)
|
||||
//createEventEnterItem({readItem->ItemNo, ""});
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
//取消项目
|
||||
//项目内有扣分的不能取消
|
||||
//SysSet[426]:手工取消正在考的项目(0-否 1-是)
|
||||
if(TableSysSet->get426() == "0")
|
||||
{
|
||||
return false; //20141101
|
||||
}
|
||||
|
||||
for(size_t i = 0; i < m_marks.size() ; i++)
|
||||
{
|
||||
if(m_marks[i].itemNo == ItemNo)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
readItem->TestPro = ItemProFlagIdle;
|
||||
readItem->Item_Color = itemStateWk;
|
||||
if(ItemNo == Sub3ItemType04Bgcd || ItemNo == Sub3ItemType10Ccxx)
|
||||
{
|
||||
//ToDo:语音播报:取消变更车道
|
||||
m_pub.PUB_JDCC_ZT = 0; //借道超车
|
||||
}
|
||||
//ToDo:语音播报:取消变更车道
|
||||
createEventCancelItem({ItemNo, ""});
|
||||
return true;
|
||||
}
|
||||
logerror("manual start item ItemNo=%d", ItemNo);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -137,6 +137,8 @@ struct TSub3Item12Ptdt
|
||||
bool Judge_DengGuang_Flag = false;
|
||||
TSlowDown slowDown;
|
||||
|
||||
Linei line; //用于新的角度变化计算方式
|
||||
TMapping mapping;
|
||||
};
|
||||
|
||||
struct TSub3Item15Lkzz
|
||||
|
||||
@ -33,7 +33,7 @@ void Sub2Judge00Dcrk::dealDrawItem()
|
||||
drawGpsSign(m_model->F8(), "F8", false);
|
||||
drawGpsSign(m_model->F9(), "F9", false);
|
||||
|
||||
#ifdef JUDGE_USE_NICE
|
||||
#ifdef JUDGE_USE_FOLLOW
|
||||
|
||||
if(pureCarPointInItemArea(II(33)))
|
||||
{
|
||||
|
||||
@ -90,7 +90,7 @@ void Sub2Judge20Comm::dealJudgeItem()
|
||||
{
|
||||
if(m_canFlameout)
|
||||
{
|
||||
if(sor.fdjzs == 0 && sor1.fdjzs == 0 && sor2.fdjzs == 0 && Tools::isZero(sor.cs))
|
||||
if(sor.fdjzs == 0 && sor1.fdjzs == 0 && sor2.fdjzs == 0) //Tools::lessequal(sor.cs, 1.001)
|
||||
{
|
||||
m_canFlameout = false;
|
||||
JUDGE_MARK_COMM_MUST_MORE(MARK_SUB2_COMM_02);
|
||||
|
||||
@ -120,6 +120,8 @@
|
||||
* 4、项目距离设置大于0,距离达到项目距离的,且378=1:从未变过道的,取消项目;有过变道但未完成完整动作的,扣分后结束项目
|
||||
* 5、项目距离设置大于0,距离达到项目距离的,且378!=1:扣分后结束项目
|
||||
*
|
||||
* 注意:超车项目进项目的时候,如果在最左侧车道并且405参数等于1 不要报超车进项目语音,等回原车道评判会给外壳发语音事件
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SUB3JUDGE10CCXX_H
|
||||
|
||||
@ -35,6 +35,9 @@ bool Sub3Judge12Ptdt::dealJudgeEnter()
|
||||
//初始GPS角度
|
||||
m_itemv.CS_GPS_D = gps.hxj;
|
||||
|
||||
m_itemv.mapping = m_car->graphic()->mapping();
|
||||
m_itemv.line = coordTransform(cg);
|
||||
|
||||
m_exam->TestPro = ItemProFlagJudge;
|
||||
//ToDo1:播报项目语音
|
||||
//ToDo2:生成进项目事件
|
||||
@ -219,23 +222,28 @@ void Sub3Judge12Ptdt::dealJudgeItem()
|
||||
}
|
||||
}
|
||||
|
||||
const TGpsInfo& gps5 = m_car->historyGps(5);
|
||||
//掉头角度变化
|
||||
double a = std::abs(gps.hxj - m_itemv.CS_GPS_D);
|
||||
double b = std::abs(gps5.hxj- m_itemv.CS_GPS_D);
|
||||
const TChuanGan* his5 = m_car->historyChuanGan(5);
|
||||
|
||||
//if(Tools::greater(gps.hxj, m_itemv.CS_GPS_D))
|
||||
//{
|
||||
// a = std::abs(360 - gps.hxj + m_itemv.CS_GPS_D);
|
||||
//}
|
||||
//
|
||||
//if(Tools::greater(gps5.hxj, m_itemv.CS_GPS_D))
|
||||
//{
|
||||
// b = std::abs(360 - gps5.hxj + m_itemv.CS_GPS_D);
|
||||
//}
|
||||
//
|
||||
//logdebug("CS_GPS_D=%0.2f,hxj=%0.2f,hxj5=%0.2f, a=%0.2f,b=%0.2f",
|
||||
// m_itemv.CS_GPS_D, gps.hxj, gps5.hxj, a, b);
|
||||
//掉头角度变化 老的角度变化计算方式(windows就是这么做的)
|
||||
//const TGpsInfo& gps5 = his5->real.gps;
|
||||
//double a = std::abs(gps.hxj - m_itemv.CS_GPS_D);
|
||||
//double b = std::abs(gps5.hxj- m_itemv.CS_GPS_D);
|
||||
|
||||
//***新的角度变化计算方式(这个应该更精准)注意:左上角是(0,0)点 yhy 20240823
|
||||
Linei line0 = coordTransform(cg);
|
||||
Linei line5 = coordTransform(his5);
|
||||
double a = std::abs(GpsMath::calcAngle(line0.p2, m_itemv.line.p2, m_itemv.line.p1));
|
||||
double b = std::abs(GpsMath::calcAngle(line5.p2, m_itemv.line.p2, m_itemv.line.p1));
|
||||
|
||||
//IGraphicAbstract* graphic = m_car->graphic();
|
||||
//graphic->drawPoint({10,10},RGB_RED,10);
|
||||
//graphic->drawLine(m_itemv.line,RGB_RED);
|
||||
//graphic->drawLine(line0,RGB_GREEN);
|
||||
//graphic->drawLine(line5,RGB_PURPLE);
|
||||
//FactoryExamService->examJudgeCallbackMapImageToCaller(graphic->image(), graphic->size());
|
||||
|
||||
//logdebug("CS_GPS_D=%0.2f,hxj=%0.2f,hxj5=%0.2f, a=%0.2f,b=%0.2f a_=%0.2f,b_=%0.2f",
|
||||
// m_itemv.CS_GPS_D, gps.hxj, gps5.hxj, a, b, a_, b_);
|
||||
|
||||
//528:掉头N米内不判连续变道和方向灯
|
||||
if(m_car->getNJ_DiaoTou_JL() == 0 && TableSysSet->asInt528() > 0)
|
||||
@ -436,12 +444,17 @@ void Sub3Judge12Ptdt::dealJudgeItem()
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
char buf[128] = {0};
|
||||
SafeSprintf(buf, sizeof(buf), "结束距离=%d,当前距离=%d;角度阈值=%d,当前角度变化=%0.2f",
|
||||
m_itemv.XMJL_Mi, cg->ai_ljjl-m_itemv.CSJL_Mi, m_itemv.FinishDiaoTou_JiaoDu_Change, gps.hxj-m_itemv.CS_GPS_D);
|
||||
SafeSprintf(buf, sizeof(buf), "结束距离=%d,当前距离=%d;角度阈值=%d,当前角度变化=%0.2f,a=%0.2f,b=%0.2f",
|
||||
m_itemv.XMJL_Mi, cg->ai_ljjl-m_itemv.CSJL_Mi, m_itemv.FinishDiaoTou_JiaoDu_Change, gps.hxj-m_itemv.CS_GPS_D,a,b);
|
||||
std::string str = buf;
|
||||
showStatus(XCharacter("[普通掉头]") + str);
|
||||
}
|
||||
|
||||
Linei Sub3Judge12Ptdt::coordTransform(const TChuanGan* cg)
|
||||
{
|
||||
const TGPSPoint center = cg->real.gps.to();
|
||||
Linei line = GpsMath::coordMapping(TGPSLine(cg->body.b1_a, cg->body.b2_a), center, m_itemv.mapping);
|
||||
return line;
|
||||
}
|
||||
|
||||
|
||||
@ -35,7 +35,7 @@ public:
|
||||
DEAL_API void dealJudgeItem() override;
|
||||
|
||||
protected:
|
||||
|
||||
Linei coordTransform(const TChuanGan* cg);
|
||||
private:
|
||||
TSub3Item12Ptdt m_itemv;
|
||||
};
|
||||
|
||||
@ -1626,6 +1626,15 @@ void Sub3Judge20Comm::Judge_YaXian_30120()
|
||||
const TRTKResult& RTKKM3_1 = his1->RTKKM3;
|
||||
const std::string& ksdd = TableSysSet->get211();
|
||||
|
||||
|
||||
const std::vector<std::string>& s360 = TableSysSet->asArray360();
|
||||
int ss360 = s360.size() > 0 && s360[0] != "" ? std::atoi(s360[0].c_str()) : 0;
|
||||
//起步一定距离内不判 20181106
|
||||
if(ss360 > 0 && cg->ai_ljjl < ss360)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(ksdd == siteof::xjcj)
|
||||
{
|
||||
const TRTKResult& RTKKM3_2 = m_car->historyRtkKM3(2);
|
||||
@ -4775,7 +4784,7 @@ void Sub3Judge20Comm::Judge_DangWei_CS_ZS()
|
||||
if(m_itemvCJH.DW_CS_ERROR_DW >= 1 && m_itemvCJH.DW_CS_ERROR_DW <= 5)
|
||||
{
|
||||
//车辆运行速度和挡位不匹配
|
||||
JUDGE_MARK_SUB3(14, "02", true);
|
||||
JUDGE_MARK_SUB3(14, "02", false);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -4783,7 +4792,7 @@ void Sub3Judge20Comm::Judge_DangWei_CS_ZS()
|
||||
if(m_itemvCJH.DW_CS_ERROR_DW >= 1 && m_itemvCJH.DW_CS_ERROR_DW <= 5)
|
||||
{
|
||||
//车辆运行速度和挡位不匹配
|
||||
JUDGE_MARK_SUB3(14, "02", true);
|
||||
JUDGE_MARK_SUB3(14, "02", false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4829,7 +4838,7 @@ void Sub3Judge20Comm::Judge_DangWei_CS_ZS()
|
||||
{
|
||||
if(m_itemvCJH.DW_CS_ERROR_DW >= 3 && m_itemvCJH.DW_CS_ERROR_DW <= 5)
|
||||
{
|
||||
JUDGE_MARK_SUB3(14, "02", true);
|
||||
JUDGE_MARK_SUB3(14, "02", false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -538,7 +538,7 @@ void Sub3Judge41Mndg::UpdateDengGuangChange()
|
||||
//0、统一调度
|
||||
void Sub3Judge41Mndg::CallItemProc()
|
||||
{
|
||||
logtrace("mndg-Op_Step CallItemProc");
|
||||
loginfo("mndg-Op_Step CallItemProc");
|
||||
|
||||
const TChuanGan* cg = m_car->historyChuanGan();
|
||||
const TGpsInfo& gps = cg->real.gps;
|
||||
|
||||
@ -290,4 +290,55 @@ private:
|
||||
|
||||
};
|
||||
|
||||
class JUDGE_API XParserNlohmann : public XIParser
|
||||
{
|
||||
public:
|
||||
explicit XParserNlohmann() = default;
|
||||
virtual ~XParserNlohmann() = default;
|
||||
|
||||
virtual bool parseInitExam (const std::string& data, TInitInfo* info) override { return parseAny(data, *info); }
|
||||
virtual bool parseBeginExam (const std::string& data, TStuInfo& info) override { return parseAny(data, info); }
|
||||
virtual bool parseRealExam (const std::string& data, TRealExam& info) override { return parseAny(data, info); }
|
||||
virtual bool parseJudgeData (const std::string& data, TJudgeData& info) override { return parseAny(data, info); }
|
||||
virtual bool parsePerform (const std::string& data, TPerformData& info) override { return parseAny(data, info); }
|
||||
|
||||
template<typename T>
|
||||
static inline bool parseAny(const std::string& data, T& info)
|
||||
{
|
||||
HELP_COST_TIME("parseAny parse:%s", typeid(info).name());
|
||||
try
|
||||
{
|
||||
//info = nlohmann::json::parse(data).get<T>();
|
||||
from_json(nlohmann::json::parse(data), info);
|
||||
return true;
|
||||
}
|
||||
catch(const nlohmann::json::exception& e)
|
||||
{
|
||||
logerror("e.what=%s", e.what());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual std::string toDataString(const TInitInfo& data) override { return toDataAny(data); }
|
||||
virtual std::string toDataString(const TStuInfo& data) override { return toDataAny(data); }
|
||||
virtual std::string toDataString(const TRealExam& data) override { return toDataAny(data); }
|
||||
virtual std::string toDataString(const TJudgeData& data) override { return toDataAny(data); }
|
||||
virtual std::string toDataString(const TPerformData& data) override { return toDataAny(data); }
|
||||
|
||||
template<typename T>
|
||||
static inline std::string toDataAny(const T& data)
|
||||
{
|
||||
HELP_COST_TIME("toDataAny parse:%s", typeid(data).name());
|
||||
try
|
||||
{
|
||||
return nlohmann::json(data).dump();
|
||||
}
|
||||
catch(const nlohmann::json::exception& e)
|
||||
{
|
||||
logerror("e.what=%s", e.what());
|
||||
}
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
#endif // XPARSER_H
|
||||
|
||||
@ -92,7 +92,7 @@ bool TrackReader::read(TTrackData::Ptr& data)
|
||||
{
|
||||
data->type = TTrackTypeSoundEnd;
|
||||
}
|
||||
else if(root.isMember("method") && (root["method"].asString() == "examjudgeEndExam" || root["method"].asString() == "examJudgeEndExam"))
|
||||
else if(root.isMember("method") && root["method"].asString() == "examJudgeEndExam")
|
||||
{
|
||||
data->type = TTrackTypeEndExam;
|
||||
}
|
||||
|
||||
@ -34,6 +34,7 @@ template <typename T>
|
||||
class PointT
|
||||
{
|
||||
public:
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(PointT,x,y);
|
||||
virtual ~PointT(){}
|
||||
PointT():x(0), y(0) {}
|
||||
PointT(T _x, T _y):x(_x), y(_y) {}
|
||||
@ -230,6 +231,7 @@ class LineT
|
||||
{
|
||||
public:
|
||||
virtual ~LineT(){}
|
||||
LineT(){}
|
||||
LineT(const PointT<T>& _p1, const PointT<T>& _p2):p1(_p1), p2(_p2) {}
|
||||
LineT(const LineT& l) : p1(l.p1), p2(l.p2) {}
|
||||
LineT& operator = (const LineT& l) { p1=l.p1; p2=l.p2; return *this; }
|
||||
|
||||
@ -115,6 +115,7 @@ struct TItemExam
|
||||
{
|
||||
int32 xmdm = 0; //项目代码 对应枚举 ExamItemCode
|
||||
std::string xmxh = ""; //项目(序)号 //这里要做处理,改成数组,可能你在多个子项目
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TItemExam,xmdm,xmxh);
|
||||
};
|
||||
|
||||
struct TItemArg : TItemExam
|
||||
@ -133,6 +134,10 @@ struct TItemArg : TItemExam
|
||||
std::string setup7;
|
||||
std::string setup8;
|
||||
std::string setup9;
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TItemArg,
|
||||
xmdm,
|
||||
xmxh,
|
||||
model);
|
||||
};
|
||||
|
||||
|
||||
@ -165,6 +170,16 @@ struct TMarkRule
|
||||
int32 OnlyOneKind = 0;
|
||||
int32 NoCancelId = 0;
|
||||
bool GPS_SID = false; //bool
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TMarkRule,
|
||||
itemno,
|
||||
itemname,
|
||||
markreal,
|
||||
markcatalog,
|
||||
markshow,
|
||||
OnlyOneKind,
|
||||
NoCancelId,
|
||||
GPS_SID);
|
||||
};
|
||||
|
||||
struct TSysset
|
||||
@ -179,6 +194,11 @@ struct TSysset
|
||||
int key = -1; //参数
|
||||
std::string value; //参数值
|
||||
std::string name; //特殊评判项描述
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TSysset,
|
||||
key,
|
||||
value,
|
||||
name);
|
||||
};
|
||||
|
||||
struct TDBItemInfo
|
||||
@ -198,6 +218,23 @@ struct TDBItemInfo
|
||||
std::string setup7;
|
||||
std::string setup8;
|
||||
std::string setup9;
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TDBItemInfo,
|
||||
itemsno,
|
||||
carlist,
|
||||
freqinfo,
|
||||
end_cardsno,
|
||||
cininfo,
|
||||
nextinfo,
|
||||
setup1,
|
||||
setup2,
|
||||
setup3,
|
||||
setup4,
|
||||
setup5,
|
||||
setup6,
|
||||
setup7,
|
||||
setup8,
|
||||
setup9);
|
||||
};
|
||||
|
||||
struct TDBCarInfo
|
||||
@ -211,6 +248,16 @@ struct TDBCarInfo
|
||||
std::string FLAG; //预留
|
||||
std::string BK1; //预留
|
||||
std::string BK2; //预留
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TDBCarInfo,
|
||||
CARID,
|
||||
IPADDR,
|
||||
CARCLASS,
|
||||
KSCX,
|
||||
CARNAME,
|
||||
FLAG,
|
||||
BK1,
|
||||
BK2);
|
||||
};
|
||||
|
||||
struct TSystemparm
|
||||
@ -227,6 +274,15 @@ struct TSystemparm
|
||||
mutable bool Muliti_EnterFlag = false;
|
||||
mutable int RefPosI = 0; //指向的位置
|
||||
int BY_JL1 = 0; //备用距离1
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TSystemparm,
|
||||
NO1,
|
||||
NO2,
|
||||
NO3,
|
||||
TXT1,
|
||||
TXT2,
|
||||
TXT3);
|
||||
|
||||
};
|
||||
using TSystemparms = std::vector<TSystemparm>;
|
||||
|
||||
@ -246,6 +302,19 @@ struct TMap_Point
|
||||
int f_gps_n = 0; //10、辅助点北纬坐标
|
||||
int8 passed = 0; //11、本次考试是否经过该点
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TMap_Point,
|
||||
point_no,
|
||||
gps_e,
|
||||
gps_n,
|
||||
point_no_f,
|
||||
point_type,
|
||||
road_code,
|
||||
gps_e_Location,
|
||||
gps_n_Location,
|
||||
f_gps_e,
|
||||
f_gps_n,
|
||||
passed);
|
||||
|
||||
//***以上是读取的
|
||||
mutable int OffSet_CM = 0;
|
||||
mutable bool ReverseFlag; //取反标志
|
||||
@ -254,6 +323,7 @@ struct TMap_Point
|
||||
mutable int PosX = 0;
|
||||
mutable int PosY = 0;
|
||||
mutable bool FangXiangDianFlag = false;
|
||||
|
||||
};
|
||||
using TMap_Points = std::vector<TMap_Point>;
|
||||
|
||||
@ -267,6 +337,12 @@ struct TMap_Point_Item
|
||||
//当前项目涉及到了哪些点,-分隔
|
||||
std::string subname = "";
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TMap_Point_Item,
|
||||
point_no,
|
||||
itemno,
|
||||
itemno1,
|
||||
subname);
|
||||
|
||||
//***以上是读取的
|
||||
mutable std::string LabelDisp = ""; //显示名称
|
||||
mutable int PosX = 0;
|
||||
@ -301,6 +377,30 @@ struct TInitInfo
|
||||
std::string roads = ""; //道路路段信息(科三用) Roads.json文件加密后数据,科二默认填空字符""
|
||||
std::string sharps = ""; //形状线信息(科三用) Sharps.json文件加密后数据,科二默认填空字符""
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TInitInfo,
|
||||
kskm,
|
||||
kchp,
|
||||
kchm,
|
||||
kscx,
|
||||
cxcode,
|
||||
name,
|
||||
carmodel,
|
||||
allitems,
|
||||
iteminfo,
|
||||
mark,
|
||||
sysset,
|
||||
systemparm,
|
||||
carinfo,
|
||||
map_point,
|
||||
map_point_item,
|
||||
roads,
|
||||
sharps);
|
||||
|
||||
//template<typename... Args>
|
||||
//inline void valid(Args... args) noexcept
|
||||
//{
|
||||
// int cnt = sizeof...(Args);
|
||||
//}
|
||||
};
|
||||
|
||||
//扣分项目数据结构定义
|
||||
@ -308,6 +408,7 @@ struct TKfXm
|
||||
{
|
||||
int32 xmdm = Sub2ItemTypeInvalid; //项目代码 对应枚举 ExamItemCode
|
||||
std::string kfdm; //扣分代码
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TKfXm,xmdm,kfdm);
|
||||
};
|
||||
|
||||
//学员信息数据结构定义
|
||||
@ -349,6 +450,40 @@ struct TStuInfo
|
||||
|
||||
//std::string DuanDian_FinishItems; //完成项目列表,多个项目用英文的逗号分隔
|
||||
//std::string DuanDian_Marks; //扣分 格式: ItemNo1,MarkSerial1; ItemNo2,MarkSerial2;
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TStuInfo,
|
||||
kgid,
|
||||
kgxm,
|
||||
exam,
|
||||
replay,
|
||||
track,
|
||||
passing,
|
||||
xm,
|
||||
sex,
|
||||
kslsh,
|
||||
sfzmhm,
|
||||
ksyy,
|
||||
kkcs,
|
||||
sfyk,
|
||||
ykkkcs,
|
||||
wayno,
|
||||
czlx,
|
||||
kskssj,
|
||||
ksxm,
|
||||
ddxk,
|
||||
ddkssj,
|
||||
ykxm,
|
||||
kfxm,
|
||||
yklc,
|
||||
|
||||
sczb,
|
||||
sczbkf,
|
||||
|
||||
dmndg,
|
||||
nitem1,
|
||||
nitem41,
|
||||
mfxx,
|
||||
mfxxn);
|
||||
|
||||
};
|
||||
|
||||
//车载信号数据结构定义
|
||||
@ -459,9 +594,47 @@ struct TSensorInfo
|
||||
csjyx = 0;
|
||||
|
||||
}
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TSensorInfo,
|
||||
aqd ,
|
||||
mkg ,
|
||||
ssc ,
|
||||
jsc ,
|
||||
fsc ,
|
||||
lhq ,
|
||||
lb ,
|
||||
skd ,
|
||||
jgd ,
|
||||
ygd ,
|
||||
zfxd ,
|
||||
yfxd ,
|
||||
shtd ,
|
||||
wd ,
|
||||
ygq ,
|
||||
dh1 ,
|
||||
dh2 ,
|
||||
fdjzs,
|
||||
dw ,
|
||||
cs ,
|
||||
fxp ,
|
||||
ljmc ,
|
||||
lcmc ,
|
||||
csbzq,
|
||||
csbzh,
|
||||
csbyq,
|
||||
csbyh,
|
||||
zy ,
|
||||
tbp ,
|
||||
hsj ,
|
||||
dcj ,
|
||||
gx ,
|
||||
yl ,
|
||||
yy ,
|
||||
rmndg,
|
||||
mndg ,
|
||||
sde ,
|
||||
xhd);
|
||||
};
|
||||
|
||||
|
||||
//GPS信号数据结构定义
|
||||
struct TGpsInfo
|
||||
{
|
||||
@ -482,6 +655,24 @@ struct TGpsInfo
|
||||
int8 dwsxs = 0; //定位搜星数
|
||||
int8 jdsxs = 0; //角度搜星数
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TGpsInfo,
|
||||
bklx ,
|
||||
dwzt ,
|
||||
jdzt ,
|
||||
sj ,
|
||||
jd ,
|
||||
wd ,
|
||||
hxj ,
|
||||
fyj ,
|
||||
hbg ,
|
||||
gdc ,
|
||||
sd ,
|
||||
age ,
|
||||
jdyz ,
|
||||
wdyz ,
|
||||
dwsxs,
|
||||
jdsxs);
|
||||
|
||||
//*************下面考试评判计算出来的****************
|
||||
bool errorFlag = true; //信号异常标志
|
||||
bool rtkEnabled = false;
|
||||
@ -537,6 +728,8 @@ struct TVisionInfo
|
||||
int8 ch = 0; //窗户状态[有几只手在窗户上]
|
||||
int8 hld = 0; //红绿灯状态
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TVisionInfo,sj,score,zyjd,sxjd,ytjd,fxp,ch,hld);
|
||||
|
||||
TVisionInfo() noexcept { clean(); }
|
||||
virtual ~TVisionInfo() noexcept { clean(); }
|
||||
void clean() noexcept
|
||||
@ -560,6 +753,8 @@ struct TRadarWay
|
||||
double jl = 0; //距离
|
||||
double sd = 0; //速度
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TRadarWay,bh,lx,jl,sd);
|
||||
|
||||
TRadarWay() noexcept { clean(); }
|
||||
virtual ~TRadarWay() noexcept { clean(); }
|
||||
void clean() noexcept
|
||||
@ -577,6 +772,7 @@ struct TRadarFront
|
||||
double xrjl = 0; //行人距离本车的距离
|
||||
double zawjl = 0; //障碍物距离本车的距离
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TRadarFront,xrjl,zawjl);
|
||||
TRadarFront() noexcept { clean(); }
|
||||
virtual ~TRadarFront() noexcept { clean(); }
|
||||
void clean() noexcept
|
||||
@ -592,6 +788,8 @@ struct TRadarShow
|
||||
int32 bh = 0; //编号
|
||||
std::vector<Pointi> zb = {}; //雷达展示数据
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TRadarShow,bh,zb);
|
||||
|
||||
TRadarShow() noexcept { clean(); }
|
||||
virtual ~TRadarShow() noexcept { clean(); }
|
||||
void clean() noexcept
|
||||
@ -619,6 +817,7 @@ struct TRadarInfo
|
||||
int8 rcyz = 0; //绕车一周信号
|
||||
std::vector<TRadarShow> show = {}; //雷达展示数据
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TRadarInfo,zxh,qfsj,hfsj,zqsj,zhsj,zcsj,yqsj,yhsj,ycsj,fqsj,qfwt,rcyz,show);
|
||||
TRadarInfo() noexcept { clean(); }
|
||||
virtual ~TRadarInfo() noexcept { clean(); }
|
||||
void clean() noexcept
|
||||
@ -641,6 +840,7 @@ struct TRadarInfo
|
||||
//扩展数据结构体 备用(如路侧设备信号)
|
||||
struct TExtendInfo
|
||||
{
|
||||
//JUDGE_JSON_NLOHMANN_DEFINE(TExtendInfo);
|
||||
TExtendInfo() noexcept { clean(); }
|
||||
virtual ~TExtendInfo() noexcept { clean(); }
|
||||
void clean() noexcept
|
||||
@ -670,6 +870,8 @@ struct TRealExam
|
||||
radar.clean();
|
||||
extend.clean();
|
||||
}
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TRealExam,sensor,gps,gps2,vision,radar/*,extend*/);
|
||||
};
|
||||
|
||||
//人工操作接口数据结构
|
||||
@ -697,6 +899,8 @@ struct TEventFinishItem
|
||||
int32 xmdm = Sub2ItemTypeInvalid; //项目代码 对应枚举 ExamItemCode
|
||||
std::string xmxh = ""; //项目(序)号
|
||||
int32 xmhg = 0; //是否合格 1合格0不合格
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TEventFinishItem,xmdm,xmxh,xmhg);
|
||||
};
|
||||
|
||||
struct TEventItemMark
|
||||
@ -705,6 +909,7 @@ struct TEventItemMark
|
||||
std::string kfdm; //扣分代码 对应markserial
|
||||
std::string markcatalog; //无锡所标准扣分代码
|
||||
int32 type = MarkTypeAuto; //扣分类型,评判自动、人工、远程
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TEventItemMark,xmdm,kfdm,markcatalog,type);
|
||||
};
|
||||
|
||||
struct TEventExamFinish
|
||||
@ -718,6 +923,8 @@ struct TEventExamFinish
|
||||
int32 d4 = 0;
|
||||
int32 d5 = 0;
|
||||
int32 d6 = 0;
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TEventExamFinish,type,qjjl,dcjl,d1,d2,d3,d4,d5,d6);
|
||||
};
|
||||
|
||||
struct TEventSound
|
||||
@ -725,6 +932,8 @@ struct TEventSound
|
||||
int32 xmdm = Sub2ItemTypeInvalid; //项目代码,比如41表示模拟灯光
|
||||
std::string code; //语音代码,参考:namespace sound、sound_sub2、sound_sub3
|
||||
int32 type = PlaySoundDefault; //语音类型,0:默认普通语音,1:表示是模拟灯光项目的语音,语音播报结束需要调用examJudgeSoundEnd通知评判。
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TEventSound,xmdm,code,type);
|
||||
};
|
||||
|
||||
struct TEventLane
|
||||
@ -734,6 +943,8 @@ struct TEventLane
|
||||
std::string road = ""; //当前路段号
|
||||
int32 num = 0; //当前基准天线所在车道号
|
||||
int32 count = 0; //当前基准天线共有几股车道
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TEventLane,road,num,count);
|
||||
};
|
||||
|
||||
//道路路段信息
|
||||
@ -775,6 +986,8 @@ struct TJudgeData
|
||||
TEventLight mndg = ""; //模拟灯光
|
||||
TEventLane lane = {}; //车道和路段变化
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TJudgeData,event,sj,carzt,xmks,xmjs,kf,ksjs,xmqx,sound,mndg,lane);
|
||||
|
||||
//int8 kszt = 0; //考试状态
|
||||
//TExamXm dqxm = {}; //当前项目
|
||||
//TExamXm scxmks = {}; //生成项目开始数据
|
||||
@ -877,6 +1090,31 @@ struct TRTKResult
|
||||
#ifdef JUDGE_USE_INSPECT
|
||||
std::string BodySharpData; //解决无锡所路口左转227a用例误判问题
|
||||
#endif
|
||||
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TRTKResult,MapRoad_Code_No,MapRoad_Name,TouchLineType,TouchDir,TouchLineTypeCS,
|
||||
BasePointInLaneNo,BaseLaneCount,FrontPointLaneNo,FrontPointLaneCount,
|
||||
Body_LF_ToLeftEdge,Body_LB_ToLeftEdge,Body_RF_ToRightEdge,Body_RB_ToRightEdge,
|
||||
Wheel_RF_ToRightEdge,
|
||||
Wheel_RB_ToRightEdge,
|
||||
Wheel_RF_ToBaseLine,
|
||||
Wheel_RB_ToBaseLine,
|
||||
Wheel_LF_ToRightEdge,
|
||||
Wheel_LB_ToRightEdge,
|
||||
Wheel_LF_ToBaseLine,
|
||||
Wheel_LB_ToBaseLine,
|
||||
BasePointInLaneDir,
|
||||
CrossLineAttr,
|
||||
InShapeAttr,
|
||||
ShapeNo,
|
||||
CrossPointNo,
|
||||
//20240730 增加 yhy
|
||||
TouchLineDirCS,
|
||||
BackPointLaneNo,
|
||||
BackPointLaneCount,
|
||||
Body_RF_ToBaseLine,
|
||||
Body_RB_ToBaseLine,
|
||||
DirInverse,
|
||||
ShapeNoWheel);
|
||||
};
|
||||
|
||||
struct TPerformData
|
||||
@ -891,6 +1129,7 @@ struct TPerformData
|
||||
std::string hint = ""; //提示信息
|
||||
|
||||
TRTKResult lane;
|
||||
JUDGE_JSON_NLOHMANN_DEFINE(TPerformData,time,carzt,grade,qjjl,dcjl,dxjl,bxjl,hint,lane);
|
||||
};
|
||||
|
||||
//************************************************************
|
||||
|
||||
@ -162,6 +162,7 @@ export async function getDoubleCeneterTable(param) {
|
||||
}
|
||||
for (let key in typeObj) {
|
||||
typeObj[key] = await upDateTable({ tableName: key }, param)
|
||||
console.log('sqlsqlinsert',key, typeObj[key])
|
||||
if (!typeObj[key]) {
|
||||
promptAction.showToast({
|
||||
message: `未能查询到${key}表数据, 请先检查网络是否连接正常`,
|
||||
|
||||
@ -45,6 +45,7 @@ const map = {
|
||||
'MA_MAP_ROAD': MA_MAP_ROAD,
|
||||
'MA_MAP_ROAD_LANE': MA_MAP_ROAD_LANE,
|
||||
'MAP_SUBITEM': MA_MAP_SUBITEM,
|
||||
'MA_MAP_SUBITEM': MA_MAP_SUBITEM,
|
||||
'MA_SYSSET': MA_SYSSET,
|
||||
'ES_CARINFO': ES_CARINFO,
|
||||
'ES_EXAMPOINTDETAIL': ES_EXAMPOINTDETAIL,
|
||||
@ -94,7 +95,7 @@ function sqlInsertCommonFn(tableName, resultArr, context?, delFlag = true) {
|
||||
if (result.length == 0) {
|
||||
console.log('sqlsqlinsert',resultArr.length)
|
||||
if(resultArr.length==0){
|
||||
resolve(false)
|
||||
resolve(true)
|
||||
return
|
||||
}
|
||||
let INSERT_SQL = "INSERT INTO " + tableName
|
||||
@ -188,7 +189,7 @@ export async function upDateTable(params, reqParam) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const date = new Date()
|
||||
let paraKdid = reqParam?.paraKdid || ''
|
||||
let examinationRoomId = reqParam?.examinationRoomId || ''
|
||||
let examinationRoomId = reqParam?.kdid || ''
|
||||
if (!paraKdid || !examinationRoomId) {
|
||||
resolve(false)
|
||||
return
|
||||
@ -197,12 +198,12 @@ export async function upDateTable(params, reqParam) {
|
||||
const str = { "head": { "time": dateFormat(date) },
|
||||
"body":
|
||||
{ "tableName": params.tableName, // 表名
|
||||
"paraKdid": paraKdid, //参数平台kdid
|
||||
"examinationRoomId": examinationRoomId, //考试平台kdid
|
||||
"paraKdid": reqParam.paraKdid, //参数平台kdid
|
||||
"examinationRoomId":reqParam.kdid, //考试平台kdid
|
||||
"typeRsp": "0" // 赋默认值0,无需改变
|
||||
}
|
||||
}
|
||||
const url = globalThis.timeInfo.url
|
||||
const url = reqParam.centerHost
|
||||
|
||||
initCenterCache(str, url).then(async (res) => {
|
||||
if (!res || res == undefined || res == '') {
|
||||
@ -233,7 +234,7 @@ export async function getMySystemSetTable(params, reqParam) {
|
||||
const str = { "head": { "time": dateFormat(date) },
|
||||
"body":
|
||||
{ "tableName": params.tableName, // 表名
|
||||
"paraKdid": reqParam?.kdid, //考试平台kdid
|
||||
"paraKdid": reqParam?.paraKdid, //参数平台kdid
|
||||
"examinationRoomId": reqParam?.kdid, //考试平台kdid
|
||||
"typeRsp": "0" // 赋默认值0,无需改变
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@ export const VideoConfigData: VideoConfig = {
|
||||
td3: '3',
|
||||
td4: '4',
|
||||
videoRecord1: false,
|
||||
videoRecord2: true,
|
||||
videoRecord2: false,
|
||||
videoRecord3: false,
|
||||
videoRecord4: false,
|
||||
text1: '',
|
||||
|
||||
@ -184,7 +184,7 @@ struct Index {
|
||||
Column() {
|
||||
Row() {
|
||||
Column() {
|
||||
Text('V ' + globalThis.version)
|
||||
Text('V 1.0')
|
||||
.fontColor('#CCAE7A')
|
||||
.fontSize(22 * globalThis.ratio)
|
||||
.width('30%')
|
||||
@ -310,13 +310,15 @@ struct Index {
|
||||
// let mode=globalThis.timeInfo?.mode?globalThis.timeInfo?.mode:1
|
||||
|
||||
// console.log('mode',mode)
|
||||
|
||||
let workerInstance = new worker.ThreadWorker('entry/ets/workers/worker.ts');
|
||||
const param = {
|
||||
carId: globalThis.carInfo?.carId,
|
||||
examinationRoomId: globalThis.carInfo?.examinationRoomId,
|
||||
judgeVersion: globalThis.judgeVersion,
|
||||
shellVersion: globalThis.version,
|
||||
paraKdid: globalThis.timeInfo?.paraKdid,
|
||||
paraKdid: globalThis.timeInfo?.paraKdid||globalThis.timeInfo?.kdid,
|
||||
kdid:globalThis.timeInfo?.kdid||globalThis.timeInfo?.paraKdid,
|
||||
mode: globalThis.timeInfo?.mode,
|
||||
context: this.context,
|
||||
host: globalThis.host,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user