Compare commits
3 Commits
9445377a5d
...
c2fa43f720
| Author | SHA1 | Date | |
|---|---|---|---|
| c2fa43f720 | |||
| e0b0a7b777 | |||
| 69a7828b40 |
@ -17,7 +17,7 @@ message("${MSG_NOTE} ******************************************************")
|
|||||||
|
|
||||||
# 启用项目文件夹功能。当这个属性被设置为ON时,CMake会根据项目的目录结构自动在生成的项目文件中创建文件夹,以更好地组织项目文件。
|
# 启用项目文件夹功能。当这个属性被设置为ON时,CMake会根据项目的目录结构自动在生成的项目文件中创建文件夹,以更好地组织项目文件。
|
||||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
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(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
|
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
|
||||||
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
|
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
|
||||||
@ -110,8 +110,8 @@ if(WIN32)
|
|||||||
|
|
||||||
# C2026: 字符串太大,已截断尾部字符(/Zc:strictStrings 或 /Tc编译器开关)
|
# C2026: 字符串太大,已截断尾部字符(/Zc:strictStrings 或 /Tc编译器开关)
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} $ENV{CFLAGS} /bigobj")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} $ENV{CFLAGS} /bigobj /Zc:__cplusplus")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{CXXFLAGS} /bigobj")
|
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_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd /Od") # /Od 禁止优化编译
|
||||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT /O2")
|
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
|
||||||
${CMAKE_SOURCE_DIR}/third/tinyxml2-9.0.0
|
${CMAKE_SOURCE_DIR}/third/tinyxml2-9.0.0
|
||||||
${CMAKE_SOURCE_DIR}/third/jsoncpp-1.9.5
|
${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/inih
|
||||||
${CMAKE_SOURCE_DIR}/third/cpp-md5
|
${CMAKE_SOURCE_DIR}/third/cpp-md5
|
||||||
${CMAKE_SOURCE_DIR}/third/libb64
|
${CMAKE_SOURCE_DIR}/third/libb64
|
||||||
@ -324,6 +325,7 @@ file(GLOB_RECURSE JUDGE_SOURCE
|
|||||||
${CMAKE_SOURCE_DIR}/third/*.*
|
${CMAKE_SOURCE_DIR}/third/*.*
|
||||||
${CMAKE_SOURCE_DIR}/third/tinyxml2-9.0.0/*.*
|
${CMAKE_SOURCE_DIR}/third/tinyxml2-9.0.0/*.*
|
||||||
${CMAKE_SOURCE_DIR}/third/jsoncpp-1.9.5/*.*
|
${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/inih/*.*
|
||||||
${CMAKE_SOURCE_DIR}/third/cpp-md5/*.*
|
${CMAKE_SOURCE_DIR}/third/cpp-md5/*.*
|
||||||
${CMAKE_SOURCE_DIR}/third/libb64/*.*
|
${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)
|
add_subdirectory(${CMAKE_SOURCE_DIR}/sdk)
|
||||||
if(JUDGE_OS_WIN OR JUDGE_OS_LINUX)
|
if(JUDGE_OS_WIN OR JUDGE_OS_LINUX)
|
||||||
|
|||||||
@ -10,9 +10,7 @@
|
|||||||
|
|
||||||
//============================================================
|
//============================================================
|
||||||
|
|
||||||
//#if defined(__cplusplus) && __cplusplus >= 201103L
|
#if defined(__cplusplus) && __cplusplus >= 201703L
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
|
|
||||||
# include <string>
|
# include <string>
|
||||||
# include <vector>
|
# include <vector>
|
||||||
@ -50,6 +48,8 @@
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
# error "define-error-msg: must be at least c++17 201703L."
|
||||||
|
|
||||||
# include <ctype.h>
|
# include <ctype.h>
|
||||||
# include <limits.h>
|
# include <limits.h>
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
@ -71,6 +71,7 @@
|
|||||||
|
|
||||||
//第三方库头文件
|
//第三方库头文件
|
||||||
#include "json/json.h"
|
#include "json/json.h"
|
||||||
|
#include "nlohmann/json.hpp"
|
||||||
#include "tinyxml2.h"
|
#include "tinyxml2.h"
|
||||||
#include "md5.h"
|
#include "md5.h"
|
||||||
#include "libb64.h"
|
#include "libb64.h"
|
||||||
@ -107,7 +108,7 @@
|
|||||||
*** JUDGE_USE_MEMORY //是否启用内存操作检查
|
*** JUDGE_USE_MEMORY //是否启用内存操作检查
|
||||||
*** JUDGE_USE_POOL //是否启用内存池调试信息
|
*** JUDGE_USE_POOL //是否启用内存池调试信息
|
||||||
*** JUDGE_USE_ASSERT //是否启用断言提示
|
*** JUDGE_USE_ASSERT //是否启用断言提示
|
||||||
*** JUDGE_USE_NICE //是否启用调试测试代码
|
*** JUDGE_USE_FOLLOW //是否启用跟踪调试测试代码
|
||||||
*** JUDGE_USE_PERF //是否启用CPU性能分析
|
*** JUDGE_USE_PERF //是否启用CPU性能分析
|
||||||
*** JUDGE_USE_LEAK //是否启用内存泄露检测
|
*** JUDGE_USE_LEAK //是否启用内存泄露检测
|
||||||
*** JUDGE_USE_TCMALLOC //是否启用tcmalloc优化内存使用操作
|
*** JUDGE_USE_TCMALLOC //是否启用tcmalloc优化内存使用操作
|
||||||
@ -141,19 +142,19 @@
|
|||||||
#define JUDGE_USE_MEMORY
|
#define JUDGE_USE_MEMORY
|
||||||
#define JUDGE_USE_POOL
|
#define JUDGE_USE_POOL
|
||||||
#endif
|
#endif
|
||||||
|
#define JUDGE_USE_COST
|
||||||
/*
|
/*
|
||||||
* 是否启用断言提示
|
* 是否启用断言提示
|
||||||
* 注意:只有在DEBUG模式的前提下条件下才能开启
|
* 注意:只有在DEBUG模式的前提下条件下才能开启
|
||||||
*/
|
*/
|
||||||
#if defined(JUDGE_DEBUG)
|
#if defined(JUDGE_DEBUG)
|
||||||
#define JUDGE_USE_ASSERT //是否启用断言提示
|
#define JUDGE_USE_ASSERT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 是否启用测试调试代码
|
* 是否启用跟踪调试测试代码
|
||||||
*/
|
*/
|
||||||
#define JUDGE_USE_NICE
|
//#define JUDGE_USE_FOLLOW
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 是否启用CPU性能分析和内存泄露检测
|
* 是否启用CPU性能分析和内存泄露检测
|
||||||
@ -206,6 +207,7 @@
|
|||||||
//#define JUDGE_USE_INSPECT
|
//#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;
|
using uint64 = unsigned long long; // using uint64 = std::uint64_t;
|
||||||
|
|
||||||
|
|
||||||
JUDGE_C_API bool __sdk_localtime_safe__(time_t* __t, tm* __tm);
|
#if defined(JUDGE_OS_ANDROID)
|
||||||
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
|
|
||||||
//using namespace std::filesystem;
|
//using namespace std::filesystem;
|
||||||
using std::filesystem::directory_iterator;
|
using std::filesystem::directory_iterator;
|
||||||
using std::filesystem::path;
|
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 <sys/stat.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
# error "define-error-msg: unknow system."
|
# error "define-error-msg: unknow system."
|
||||||
@ -299,6 +279,30 @@ JUDGE_C_API bool __sdk_space_disk__(const char* __driver, struct SpaceStorage*
|
|||||||
#endif
|
#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 宏
|
* 一、WIN32 _WIN32 _WIN64 宏
|
||||||
@ -425,7 +429,17 @@ JUDGE_C_API bool __sdk_space_disk__(const char* __driver, struct SpaceStorage*
|
|||||||
* __int64 -9223372036854775808 ~ 9223372036854775807
|
* __int64 -9223372036854775808 ~ 9223372036854775807
|
||||||
* unsigned __int64 0 ~ 1844674407370955161
|
* 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,34 +126,39 @@
|
|||||||
#define BUILD_SEC_CH1 (__TIME__[7])
|
#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_YEAR_CH2, BUILD_YEAR_CH3,
|
||||||
BUILD_MONTH_CH0, BUILD_MONTH_CH1,
|
BUILD_MONTH_CH0, BUILD_MONTH_CH1,
|
||||||
BUILD_DAY_CH0, BUILD_DAY_CH1,
|
BUILD_DAY_CH0, BUILD_DAY_CH1,
|
||||||
BUILD_HOUR_CH0, BUILD_HOUR_CH1,
|
BUILD_HOUR_CH0, BUILD_HOUR_CH1,
|
||||||
BUILD_MIN_CH0, BUILD_MIN_CH1,
|
BUILD_MIN_CH0, BUILD_MIN_CH1,
|
||||||
BUILD_SEC_CH0, BUILD_SEC_CH1,
|
//BUILD_SEC_CH0, BUILD_SEC_CH1,
|
||||||
'\0'
|
'\0'
|
||||||
};
|
};
|
||||||
|
|
||||||
const char JUDGE_VERSION_INFO[] =
|
const char JUDGE_VERSION_INFO[] =
|
||||||
{
|
{
|
||||||
JUDGE_CHARS_MAJOR, '.',
|
JUDGE_CHARS_MAJOR, '.',
|
||||||
JUDGE_CHARS_MINOR, '.',
|
JUDGE_CHARS_MINOR, '.',
|
||||||
JUDGE_CHARS_PATCH, '.',
|
JUDGE_CHARS_PATCH, '.',
|
||||||
JUDGE_VERSION_TIME[0],
|
JUDGE_VERSION_STAMP[0],
|
||||||
JUDGE_VERSION_TIME[1],
|
JUDGE_VERSION_STAMP[1],
|
||||||
JUDGE_VERSION_TIME[2],
|
JUDGE_VERSION_STAMP[2],
|
||||||
JUDGE_VERSION_TIME[3],
|
JUDGE_VERSION_STAMP[3],
|
||||||
JUDGE_VERSION_TIME[4],
|
JUDGE_VERSION_STAMP[4],
|
||||||
JUDGE_VERSION_TIME[5],
|
JUDGE_VERSION_STAMP[5],
|
||||||
JUDGE_VERSION_TIME[6],
|
JUDGE_VERSION_STAMP[6],
|
||||||
JUDGE_VERSION_TIME[7],
|
JUDGE_VERSION_STAMP[7],
|
||||||
JUDGE_VERSION_TIME[8],
|
JUDGE_VERSION_STAMP[8],
|
||||||
JUDGE_VERSION_TIME[9],
|
JUDGE_VERSION_STAMP[9],
|
||||||
JUDGE_VERSION_TIME[10],
|
//JUDGE_VERSION_STAMP[10],
|
||||||
JUDGE_VERSION_TIME[11],
|
//JUDGE_VERSION_STAMP[11],
|
||||||
'\0'
|
'\0'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@ -3,19 +3,33 @@
|
|||||||
*
|
*
|
||||||
* 作者: 杨海洋
|
* 作者: 杨海洋
|
||||||
* 日期: 2023-03-22
|
* 日期: 2023-03-22
|
||||||
|
*
|
||||||
|
* *******************************************************************
|
||||||
|
*
|
||||||
|
* 主版本号.子版本号.修订版本号.日期
|
||||||
|
*
|
||||||
|
* 比如:1.2.3.2304241030
|
||||||
|
*
|
||||||
|
* 说明:
|
||||||
|
* 第一位(1):主版本号。当功能模块有较大的变动,比如增加多个模块或者整体架构发生变化。此版本号由项目决定是否修改。
|
||||||
|
* 第二位(2):子版本号。当功能有一定的增加或变化,比如增加了新功能。此版本号由项目决定是否修改。
|
||||||
|
* 第三位(3):修订版本号。一般是Bug修复或是一些小的变动,要经常发布修订版,时间间隔不限,修复一个bug即可发布一个修订版。此版本号由开发人员决定是否修改。
|
||||||
|
* 第四位(4):日期版本号(2304241030年月日时分):用于记录修改项目的当前日期,每天对项目的修改都需要更改日期版本号。此版本号由开发人员决定是否修改。
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HVERSION_H
|
#ifndef HVERSION_H
|
||||||
#define HVERSION_H
|
#define HVERSION_H
|
||||||
|
|
||||||
//定义版本号
|
//定义版本号 格式:主版本号.子版本号.修订版本号.版本日期
|
||||||
#define JUDGE_VERSION_MAJOR 1
|
#define JUDGE_VERSION_MAJOR 1
|
||||||
#define JUDGE_VERSION_MINOR 0
|
#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_EXP(x) #x
|
||||||
#define JUDGE_AUX_STR(x) JUDGE_AUX_EXP(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_MAJOR(x) (((x) & 0xFF000000) >> 24) //[0-127]
|
||||||
#define JUDGE_AUX_MINOR(x) (((x) & 0x00FF0000) >> 16) //[0-255]
|
#define JUDGE_AUX_MINOR(x) (((x) & 0x00FF0000) >> 16) //[0-255]
|
||||||
#define JUDGE_AUX_PATCH(x) (((x) & 0x0000FFFF)) //[0-65535]
|
#define JUDGE_AUX_PATCH(x) (((x) & 0x0000FFFF)) //[0-65535]
|
||||||
@ -30,12 +44,12 @@
|
|||||||
JUDGE_AUX_STR(JUDGE_VERSION_MINOR) "." \
|
JUDGE_AUX_STR(JUDGE_VERSION_MINOR) "." \
|
||||||
JUDGE_AUX_STR(JUDGE_VERSION_PATCH)
|
JUDGE_AUX_STR(JUDGE_VERSION_PATCH)
|
||||||
|
|
||||||
|
//版本详细信息[版本号+版本日期]
|
||||||
//版本编译时间 240401131705
|
#ifdef JUDGE_VERSION_STAMP
|
||||||
extern const char JUDGE_VERSION_TIME[];
|
#define JUDGE_VERSION_INFO JUDGE_VERSION_STR "." JUDGE_AUX_STR(JUDGE_VERSION_STAMP)
|
||||||
|
#else
|
||||||
//版本详细信息[版本号+版本编译时间] 1.0.0.240401131705
|
extern const char JUDGE_VERSION_STAMP[]; //版本编译时间 2304241030
|
||||||
extern const char JUDGE_VERSION_INFO[];
|
extern const char JUDGE_VERSION_INFO[]; //版本详细信息[版本号+版本编译日期] 1.2.3.2304241030
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // HVERSION_H
|
#endif // HVERSION_H
|
||||||
|
|||||||
@ -153,7 +153,7 @@ bool Loggerxx::flushLog(const LogUnit& unit)
|
|||||||
std::string filename = Tools::getFileName(unit.file);
|
std::string filename = Tools::getFileName(unit.file);
|
||||||
int ms = unit.tick%SECOND;
|
int ms = unit.tick%SECOND;
|
||||||
std::string tick = Tools::toTimeString(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,
|
tick.c_str(), ms,
|
||||||
toTagName(unit.tag).c_str(),
|
toTagName(unit.tag).c_str(),
|
||||||
toLogName(unit.level).c_str(),
|
toLogName(unit.level).c_str(),
|
||||||
|
|||||||
@ -268,8 +268,8 @@ std::string Tools::toJson(const Json::Value& root)
|
|||||||
{
|
{
|
||||||
//std::string json = root.toStyledString();
|
//std::string json = root.toStyledString();
|
||||||
Json::FastWriter writer;
|
Json::FastWriter writer;
|
||||||
std::string json = writer.write(root);
|
writer.omitEndingLineFeed();
|
||||||
return json;
|
return writer.write(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Tools::tolower(const std::string& s)
|
std::string Tools::tolower(const std::string& s)
|
||||||
|
|||||||
@ -80,7 +80,7 @@ ErrorCode ExamCarSub2::examGoonExam()
|
|||||||
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
|
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
|
||||||
if(nullptr == rule)
|
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);
|
return QE(errorMarkNotFind);
|
||||||
}
|
}
|
||||||
grade += rule->markreal;
|
grade += rule->markreal;
|
||||||
@ -203,7 +203,7 @@ bool ExamCarSub2::examMarkItem(ExamItemCode itemNo, const std::string& serial, b
|
|||||||
const TMarkRule* rule = TableMark->find(itemNo, serial); //找到扣分的对象
|
const TMarkRule* rule = TableMark->find(itemNo, serial); //找到扣分的对象
|
||||||
if(nullptr == rule)
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -98,7 +98,7 @@ ErrorCode ExamCarSub3::examGoonExam()
|
|||||||
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
|
const TMarkRule* rule = TableMark->find(markItem.xmdm, markItem.kfdm);
|
||||||
if(nullptr == rule)
|
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);
|
return QE(errorMarkNotFind);
|
||||||
}
|
}
|
||||||
grade += rule->markreal;
|
grade += rule->markreal;
|
||||||
@ -178,11 +178,11 @@ ErrorCode ExamCarSub3::examArtifItem(ExamItemCode itemno, ArtifItemType type)
|
|||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case ArtifItemTypeAuto:
|
case ArtifItemTypeAuto:
|
||||||
return CallRenGongEnterItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemAuto);
|
return QE(errorArtifItemAuto); //return CallRenGongEnterItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemAuto);
|
||||||
case ArtifItemTypeEnter:
|
case ArtifItemTypeEnter:
|
||||||
return CallRenGongEnterItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemEnter);
|
return CallRenGongEnterItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemEnter);
|
||||||
case ArtifItemTypeCancel:
|
case ArtifItemTypeCancel: //340参数控制
|
||||||
return CallRenGongEnterItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemCancel);
|
return CallRenGongCancelItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemCancel);
|
||||||
case ArtifItemTypeEnd:
|
case ArtifItemTypeEnd:
|
||||||
return CallRenGongEndItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemEnd);
|
return CallRenGongEndItem(itemno) ? QE(codeSuccess) : QE(errorArtifItemEnd);
|
||||||
default: break;
|
default: break;
|
||||||
@ -1207,7 +1207,7 @@ void ExamCarSub3::Deal_KM3_Judge()
|
|||||||
item->EndTime = 0;
|
item->EndTime = 0;
|
||||||
item->MsgData = "";
|
item->MsgData = "";
|
||||||
item->TestPro = ItemProFlagJudge;
|
item->TestPro = ItemProFlagJudge;
|
||||||
createEventEnterItem({item->ItemNo, ""});
|
createEventEnterItem({item->ItemNo, item->SubName});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1857,6 +1857,8 @@ void ExamCarSub3::Calc_LaneDistance()
|
|||||||
|
|
||||||
if(LeftBody1 == -1 || LeftBody2 == -1 || RightBody1 == -1 || RightBody2 == -1)
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3862,7 +3864,6 @@ bool ExamCarSub3::KM3AllPass()
|
|||||||
if(isExamDrill())
|
if(isExamDrill())
|
||||||
{
|
{
|
||||||
return m_ctl.PassedItem.size() == m_sub3Items.size();
|
return m_ctl.PassedItem.size() == m_sub3Items.size();
|
||||||
//return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//里程不够
|
//里程不够
|
||||||
@ -3992,7 +3993,7 @@ void ExamCarSub3::KM3EndItem(int ItemNo)
|
|||||||
m_ctl.PassedItem.insert(ItemNo);
|
m_ctl.PassedItem.insert(ItemNo);
|
||||||
logtrace("PassedItem=%d", 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)
|
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)
|
if(m_marks[i].serial == serial && m_marks[i].itemNo == itemNo)
|
||||||
{
|
{
|
||||||
RepeatKfID = true;
|
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);
|
const TMarkRule* rule = TableMark->find(itemNo, serial);
|
||||||
if(nullptr == rule)
|
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;
|
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});
|
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;
|
result = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -4302,7 +4316,40 @@ bool ExamCarSub3::examMarkItem(int itemNo, const std::string& serial, bool once,
|
|||||||
|
|
||||||
bool ExamCarSub3::CallRenGongCancelItem(int ItemNo)
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4315,18 +4362,16 @@ bool ExamCarSub3::CallRenGongEndItem(int ItemNo)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(item->TestPro > ItemProFlagIdle)
|
if(item->TestPro == ItemProFlagInit || item->TestPro == ItemProFlagJudge)
|
||||||
{
|
{
|
||||||
item->TestPro = ItemProFlagEnd;
|
item->TestPro = ItemProFlagEnd;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logwarning("CallRenGongEndItem:%d,%d", ItemNo, item->TestPro);
|
logwarning("CallRenGongEndItem:ItemNo=%d,Pro=%d", ItemNo, item->TestPro);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
logerror("CallRenGongCancelItem error item=%d", ItemNo);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4338,6 +4383,18 @@ bool ExamCarSub3::CallRenGongEnterItem(int ItemNo)
|
|||||||
//3、直线行驶 4、变更车道 9、会车 10、超车、11、靠边停车 12、普通掉头(非路口项目定义的掉头)
|
//3、直线行驶 4、变更车道 9、会车 10、超车、11、靠边停车 12、普通掉头(非路口项目定义的掉头)
|
||||||
//5、直行路口 15、左转弯 16、右转弯 (南京车管所,这个是不符合部令要求的)
|
//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 ||
|
if(ItemNo == Sub3ItemType03Zxxs || ItemNo == Sub3ItemType04Bgcd || ItemNo == Sub3ItemType09Hcxx ||
|
||||||
ItemNo == Sub3ItemType10Ccxx || ItemNo == Sub3ItemType11Kbtc || ItemNo == Sub3ItemType12Dtxx ||
|
ItemNo == Sub3ItemType10Ccxx || ItemNo == Sub3ItemType11Kbtc || ItemNo == Sub3ItemType12Dtxx ||
|
||||||
ItemNo == Sub3ItemType05Lkzx || ItemNo == Sub3ItemType15Lkzz || ItemNo == Sub3ItemType16Lkyz)
|
ItemNo == Sub3ItemType05Lkzx || ItemNo == Sub3ItemType15Lkzz || ItemNo == Sub3ItemType16Lkyz)
|
||||||
@ -4437,11 +4494,10 @@ bool ExamCarSub3::If_EnterItem(int ItemNo)
|
|||||||
|
|
||||||
if(!result)
|
if(!result)
|
||||||
{
|
{
|
||||||
logerror("not If_EnterItem artificial enter item=%d.", ItemNo);
|
logwarning("not If_EnterItem artificial enter item=%d.", ItemNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ExamCarSub3::ManualStartItem(int ItemNo)
|
bool ExamCarSub3::ManualStartItem(int ItemNo)
|
||||||
@ -4536,35 +4592,7 @@ bool ExamCarSub3::ManualStartItem(int ItemNo)
|
|||||||
//createEventEnterItem({readItem->ItemNo, ""});
|
//createEventEnterItem({readItem->ItemNo, ""});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
logerror("manual start item ItemNo=%d", ItemNo);
|
||||||
{
|
|
||||||
//取消项目
|
|
||||||
//项目内有扣分的不能取消
|
|
||||||
//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;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -137,6 +137,8 @@ struct TSub3Item12Ptdt
|
|||||||
bool Judge_DengGuang_Flag = false;
|
bool Judge_DengGuang_Flag = false;
|
||||||
TSlowDown slowDown;
|
TSlowDown slowDown;
|
||||||
|
|
||||||
|
Linei line; //用于新的角度变化计算方式
|
||||||
|
TMapping mapping;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TSub3Item15Lkzz
|
struct TSub3Item15Lkzz
|
||||||
|
|||||||
@ -33,7 +33,7 @@ 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
|
#ifdef JUDGE_USE_FOLLOW
|
||||||
|
|
||||||
if(pureCarPointInItemArea(II(33)))
|
if(pureCarPointInItemArea(II(33)))
|
||||||
{
|
{
|
||||||
|
|||||||
@ -90,7 +90,7 @@ void Sub2Judge20Comm::dealJudgeItem()
|
|||||||
{
|
{
|
||||||
if(m_canFlameout)
|
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;
|
m_canFlameout = false;
|
||||||
JUDGE_MARK_COMM_MUST_MORE(MARK_SUB2_COMM_02);
|
JUDGE_MARK_COMM_MUST_MORE(MARK_SUB2_COMM_02);
|
||||||
|
|||||||
@ -120,6 +120,8 @@
|
|||||||
* 4、项目距离设置大于0,距离达到项目距离的,且378=1:从未变过道的,取消项目;有过变道但未完成完整动作的,扣分后结束项目
|
* 4、项目距离设置大于0,距离达到项目距离的,且378=1:从未变过道的,取消项目;有过变道但未完成完整动作的,扣分后结束项目
|
||||||
* 5、项目距离设置大于0,距离达到项目距离的,且378!=1:扣分后结束项目
|
* 5、项目距离设置大于0,距离达到项目距离的,且378!=1:扣分后结束项目
|
||||||
*
|
*
|
||||||
|
* 注意:超车项目进项目的时候,如果在最左侧车道并且405参数等于1 不要报超车进项目语音,等回原车道评判会给外壳发语音事件
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SUB3JUDGE10CCXX_H
|
#ifndef SUB3JUDGE10CCXX_H
|
||||||
|
|||||||
@ -35,6 +35,9 @@ bool Sub3Judge12Ptdt::dealJudgeEnter()
|
|||||||
//初始GPS角度
|
//初始GPS角度
|
||||||
m_itemv.CS_GPS_D = gps.hxj;
|
m_itemv.CS_GPS_D = gps.hxj;
|
||||||
|
|
||||||
|
m_itemv.mapping = m_car->graphic()->mapping();
|
||||||
|
m_itemv.line = coordTransform(cg);
|
||||||
|
|
||||||
m_exam->TestPro = ItemProFlagJudge;
|
m_exam->TestPro = ItemProFlagJudge;
|
||||||
//ToDo1:播报项目语音
|
//ToDo1:播报项目语音
|
||||||
//ToDo2:生成进项目事件
|
//ToDo2:生成进项目事件
|
||||||
@ -219,23 +222,28 @@ void Sub3Judge12Ptdt::dealJudgeItem()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const TGpsInfo& gps5 = m_car->historyGps(5);
|
const TChuanGan* his5 = m_car->historyChuanGan(5);
|
||||||
//掉头角度变化
|
|
||||||
double a = std::abs(gps.hxj - m_itemv.CS_GPS_D);
|
|
||||||
double b = std::abs(gps5.hxj- m_itemv.CS_GPS_D);
|
|
||||||
|
|
||||||
//if(Tools::greater(gps.hxj, m_itemv.CS_GPS_D))
|
//掉头角度变化 老的角度变化计算方式(windows就是这么做的)
|
||||||
//{
|
//const TGpsInfo& gps5 = his5->real.gps;
|
||||||
// a = std::abs(360 - gps.hxj + m_itemv.CS_GPS_D);
|
//double a = std::abs(gps.hxj - m_itemv.CS_GPS_D);
|
||||||
//}
|
//double b = std::abs(gps5.hxj- m_itemv.CS_GPS_D);
|
||||||
//
|
|
||||||
//if(Tools::greater(gps5.hxj, m_itemv.CS_GPS_D))
|
//***新的角度变化计算方式(这个应该更精准)注意:左上角是(0,0)点 yhy 20240823
|
||||||
//{
|
Linei line0 = coordTransform(cg);
|
||||||
// b = std::abs(360 - gps5.hxj + m_itemv.CS_GPS_D);
|
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));
|
||||||
//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);
|
//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米内不判连续变道和方向灯
|
//528:掉头N米内不判连续变道和方向灯
|
||||||
if(m_car->getNJ_DiaoTou_JL() == 0 && TableSysSet->asInt528() > 0)
|
if(m_car->getNJ_DiaoTou_JL() == 0 && TableSysSet->asInt528() > 0)
|
||||||
@ -436,12 +444,17 @@ void Sub3Judge12Ptdt::dealJudgeItem()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
char buf[128] = {0};
|
char buf[128] = {0};
|
||||||
SafeSprintf(buf, sizeof(buf), "结束距离=%d,当前距离=%d;角度阈值=%d,当前角度变化=%0.2f",
|
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);
|
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;
|
std::string str = buf;
|
||||||
showStatus(XCharacter("[普通掉头]") + str);
|
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;
|
DEAL_API void dealJudgeItem() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
Linei coordTransform(const TChuanGan* cg);
|
||||||
private:
|
private:
|
||||||
TSub3Item12Ptdt m_itemv;
|
TSub3Item12Ptdt m_itemv;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1626,6 +1626,15 @@ void Sub3Judge20Comm::Judge_YaXian_30120()
|
|||||||
const TRTKResult& RTKKM3_1 = his1->RTKKM3;
|
const TRTKResult& RTKKM3_1 = his1->RTKKM3;
|
||||||
const std::string& ksdd = TableSysSet->get211();
|
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)
|
if(ksdd == siteof::xjcj)
|
||||||
{
|
{
|
||||||
const TRTKResult& RTKKM3_2 = m_car->historyRtkKM3(2);
|
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)
|
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
|
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)
|
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)
|
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、统一调度
|
//0、统一调度
|
||||||
void Sub3Judge41Mndg::CallItemProc()
|
void Sub3Judge41Mndg::CallItemProc()
|
||||||
{
|
{
|
||||||
logtrace("mndg-Op_Step CallItemProc");
|
loginfo("mndg-Op_Step CallItemProc");
|
||||||
|
|
||||||
const TChuanGan* cg = m_car->historyChuanGan();
|
const TChuanGan* cg = m_car->historyChuanGan();
|
||||||
const TGpsInfo& gps = cg->real.gps;
|
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
|
#endif // XPARSER_H
|
||||||
|
|||||||
@ -92,7 +92,7 @@ bool TrackReader::read(TTrackData::Ptr& data)
|
|||||||
{
|
{
|
||||||
data->type = TTrackTypeSoundEnd;
|
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;
|
data->type = TTrackTypeEndExam;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,6 +34,7 @@ template <typename T>
|
|||||||
class PointT
|
class PointT
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(PointT,x,y);
|
||||||
virtual ~PointT(){}
|
virtual ~PointT(){}
|
||||||
PointT():x(0), y(0) {}
|
PointT():x(0), y(0) {}
|
||||||
PointT(T _x, T _y):x(_x), y(_y) {}
|
PointT(T _x, T _y):x(_x), y(_y) {}
|
||||||
@ -230,6 +231,7 @@ class LineT
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~LineT(){}
|
virtual ~LineT(){}
|
||||||
|
LineT(){}
|
||||||
LineT(const PointT<T>& _p1, const PointT<T>& _p2):p1(_p1), p2(_p2) {}
|
LineT(const PointT<T>& _p1, const PointT<T>& _p2):p1(_p1), p2(_p2) {}
|
||||||
LineT(const LineT& l) : p1(l.p1), p2(l.p2) {}
|
LineT(const LineT& l) : p1(l.p1), p2(l.p2) {}
|
||||||
LineT& operator = (const LineT& l) { p1=l.p1; p2=l.p2; return *this; }
|
LineT& operator = (const LineT& l) { p1=l.p1; p2=l.p2; return *this; }
|
||||||
|
|||||||
@ -115,6 +115,7 @@ struct TItemExam
|
|||||||
{
|
{
|
||||||
int32 xmdm = 0; //项目代码 对应枚举 ExamItemCode
|
int32 xmdm = 0; //项目代码 对应枚举 ExamItemCode
|
||||||
std::string xmxh = ""; //项目(序)号 //这里要做处理,改成数组,可能你在多个子项目
|
std::string xmxh = ""; //项目(序)号 //这里要做处理,改成数组,可能你在多个子项目
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TItemExam,xmdm,xmxh);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TItemArg : TItemExam
|
struct TItemArg : TItemExam
|
||||||
@ -133,6 +134,10 @@ struct TItemArg : TItemExam
|
|||||||
std::string setup7;
|
std::string setup7;
|
||||||
std::string setup8;
|
std::string setup8;
|
||||||
std::string setup9;
|
std::string setup9;
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TItemArg,
|
||||||
|
xmdm,
|
||||||
|
xmxh,
|
||||||
|
model);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -165,6 +170,16 @@ struct TMarkRule
|
|||||||
int32 OnlyOneKind = 0;
|
int32 OnlyOneKind = 0;
|
||||||
int32 NoCancelId = 0;
|
int32 NoCancelId = 0;
|
||||||
bool GPS_SID = false; //bool
|
bool GPS_SID = false; //bool
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TMarkRule,
|
||||||
|
itemno,
|
||||||
|
itemname,
|
||||||
|
markreal,
|
||||||
|
markcatalog,
|
||||||
|
markshow,
|
||||||
|
OnlyOneKind,
|
||||||
|
NoCancelId,
|
||||||
|
GPS_SID);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TSysset
|
struct TSysset
|
||||||
@ -179,6 +194,11 @@ struct TSysset
|
|||||||
int key = -1; //参数
|
int key = -1; //参数
|
||||||
std::string value; //参数值
|
std::string value; //参数值
|
||||||
std::string name; //特殊评判项描述
|
std::string name; //特殊评判项描述
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TSysset,
|
||||||
|
key,
|
||||||
|
value,
|
||||||
|
name);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TDBItemInfo
|
struct TDBItemInfo
|
||||||
@ -198,6 +218,23 @@ struct TDBItemInfo
|
|||||||
std::string setup7;
|
std::string setup7;
|
||||||
std::string setup8;
|
std::string setup8;
|
||||||
std::string setup9;
|
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
|
struct TDBCarInfo
|
||||||
@ -211,6 +248,16 @@ struct TDBCarInfo
|
|||||||
std::string FLAG; //预留
|
std::string FLAG; //预留
|
||||||
std::string BK1; //预留
|
std::string BK1; //预留
|
||||||
std::string BK2; //预留
|
std::string BK2; //预留
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TDBCarInfo,
|
||||||
|
CARID,
|
||||||
|
IPADDR,
|
||||||
|
CARCLASS,
|
||||||
|
KSCX,
|
||||||
|
CARNAME,
|
||||||
|
FLAG,
|
||||||
|
BK1,
|
||||||
|
BK2);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TSystemparm
|
struct TSystemparm
|
||||||
@ -227,6 +274,15 @@ struct TSystemparm
|
|||||||
mutable bool Muliti_EnterFlag = false;
|
mutable bool Muliti_EnterFlag = false;
|
||||||
mutable int RefPosI = 0; //指向的位置
|
mutable int RefPosI = 0; //指向的位置
|
||||||
int BY_JL1 = 0; //备用距离1
|
int BY_JL1 = 0; //备用距离1
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TSystemparm,
|
||||||
|
NO1,
|
||||||
|
NO2,
|
||||||
|
NO3,
|
||||||
|
TXT1,
|
||||||
|
TXT2,
|
||||||
|
TXT3);
|
||||||
|
|
||||||
};
|
};
|
||||||
using TSystemparms = std::vector<TSystemparm>;
|
using TSystemparms = std::vector<TSystemparm>;
|
||||||
|
|
||||||
@ -246,6 +302,19 @@ struct TMap_Point
|
|||||||
int f_gps_n = 0; //10、辅助点北纬坐标
|
int f_gps_n = 0; //10、辅助点北纬坐标
|
||||||
int8 passed = 0; //11、本次考试是否经过该点
|
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 int OffSet_CM = 0;
|
||||||
mutable bool ReverseFlag; //取反标志
|
mutable bool ReverseFlag; //取反标志
|
||||||
@ -254,6 +323,7 @@ struct TMap_Point
|
|||||||
mutable int PosX = 0;
|
mutable int PosX = 0;
|
||||||
mutable int PosY = 0;
|
mutable int PosY = 0;
|
||||||
mutable bool FangXiangDianFlag = false;
|
mutable bool FangXiangDianFlag = false;
|
||||||
|
|
||||||
};
|
};
|
||||||
using TMap_Points = std::vector<TMap_Point>;
|
using TMap_Points = std::vector<TMap_Point>;
|
||||||
|
|
||||||
@ -267,6 +337,12 @@ struct TMap_Point_Item
|
|||||||
//当前项目涉及到了哪些点,-分隔
|
//当前项目涉及到了哪些点,-分隔
|
||||||
std::string subname = "";
|
std::string subname = "";
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TMap_Point_Item,
|
||||||
|
point_no,
|
||||||
|
itemno,
|
||||||
|
itemno1,
|
||||||
|
subname);
|
||||||
|
|
||||||
//***以上是读取的
|
//***以上是读取的
|
||||||
mutable std::string LabelDisp = ""; //显示名称
|
mutable std::string LabelDisp = ""; //显示名称
|
||||||
mutable int PosX = 0;
|
mutable int PosX = 0;
|
||||||
@ -301,6 +377,30 @@ struct TInitInfo
|
|||||||
std::string roads = ""; //道路路段信息(科三用) Roads.json文件加密后数据,科二默认填空字符""
|
std::string roads = ""; //道路路段信息(科三用) Roads.json文件加密后数据,科二默认填空字符""
|
||||||
std::string sharps = ""; //形状线信息(科三用) Sharps.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
|
int32 xmdm = Sub2ItemTypeInvalid; //项目代码 对应枚举 ExamItemCode
|
||||||
std::string kfdm; //扣分代码
|
std::string kfdm; //扣分代码
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TKfXm,xmdm,kfdm);
|
||||||
};
|
};
|
||||||
|
|
||||||
//学员信息数据结构定义
|
//学员信息数据结构定义
|
||||||
@ -349,6 +450,40 @@ struct TStuInfo
|
|||||||
|
|
||||||
//std::string DuanDian_FinishItems; //完成项目列表,多个项目用英文的逗号分隔
|
//std::string DuanDian_FinishItems; //完成项目列表,多个项目用英文的逗号分隔
|
||||||
//std::string DuanDian_Marks; //扣分 格式: ItemNo1,MarkSerial1; ItemNo2,MarkSerial2;
|
//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;
|
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信号数据结构定义
|
//GPS信号数据结构定义
|
||||||
struct TGpsInfo
|
struct TGpsInfo
|
||||||
{
|
{
|
||||||
@ -482,6 +655,24 @@ struct TGpsInfo
|
|||||||
int8 dwsxs = 0; //定位搜星数
|
int8 dwsxs = 0; //定位搜星数
|
||||||
int8 jdsxs = 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 errorFlag = true; //信号异常标志
|
||||||
bool rtkEnabled = false;
|
bool rtkEnabled = false;
|
||||||
@ -537,6 +728,8 @@ struct TVisionInfo
|
|||||||
int8 ch = 0; //窗户状态[有几只手在窗户上]
|
int8 ch = 0; //窗户状态[有几只手在窗户上]
|
||||||
int8 hld = 0; //红绿灯状态
|
int8 hld = 0; //红绿灯状态
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TVisionInfo,sj,score,zyjd,sxjd,ytjd,fxp,ch,hld);
|
||||||
|
|
||||||
TVisionInfo() noexcept { clean(); }
|
TVisionInfo() noexcept { clean(); }
|
||||||
virtual ~TVisionInfo() noexcept { clean(); }
|
virtual ~TVisionInfo() noexcept { clean(); }
|
||||||
void clean() noexcept
|
void clean() noexcept
|
||||||
@ -560,6 +753,8 @@ struct TRadarWay
|
|||||||
double jl = 0; //距离
|
double jl = 0; //距离
|
||||||
double sd = 0; //速度
|
double sd = 0; //速度
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TRadarWay,bh,lx,jl,sd);
|
||||||
|
|
||||||
TRadarWay() noexcept { clean(); }
|
TRadarWay() noexcept { clean(); }
|
||||||
virtual ~TRadarWay() noexcept { clean(); }
|
virtual ~TRadarWay() noexcept { clean(); }
|
||||||
void clean() noexcept
|
void clean() noexcept
|
||||||
@ -577,6 +772,7 @@ struct TRadarFront
|
|||||||
double xrjl = 0; //行人距离本车的距离
|
double xrjl = 0; //行人距离本车的距离
|
||||||
double zawjl = 0; //障碍物距离本车的距离
|
double zawjl = 0; //障碍物距离本车的距离
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TRadarFront,xrjl,zawjl);
|
||||||
TRadarFront() noexcept { clean(); }
|
TRadarFront() noexcept { clean(); }
|
||||||
virtual ~TRadarFront() noexcept { clean(); }
|
virtual ~TRadarFront() noexcept { clean(); }
|
||||||
void clean() noexcept
|
void clean() noexcept
|
||||||
@ -592,6 +788,8 @@ struct TRadarShow
|
|||||||
int32 bh = 0; //编号
|
int32 bh = 0; //编号
|
||||||
std::vector<Pointi> zb = {}; //雷达展示数据
|
std::vector<Pointi> zb = {}; //雷达展示数据
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TRadarShow,bh,zb);
|
||||||
|
|
||||||
TRadarShow() noexcept { clean(); }
|
TRadarShow() noexcept { clean(); }
|
||||||
virtual ~TRadarShow() noexcept { clean(); }
|
virtual ~TRadarShow() noexcept { clean(); }
|
||||||
void clean() noexcept
|
void clean() noexcept
|
||||||
@ -619,6 +817,7 @@ struct TRadarInfo
|
|||||||
int8 rcyz = 0; //绕车一周信号
|
int8 rcyz = 0; //绕车一周信号
|
||||||
std::vector<TRadarShow> show = {}; //雷达展示数据
|
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(); }
|
TRadarInfo() noexcept { clean(); }
|
||||||
virtual ~TRadarInfo() noexcept { clean(); }
|
virtual ~TRadarInfo() noexcept { clean(); }
|
||||||
void clean() noexcept
|
void clean() noexcept
|
||||||
@ -641,6 +840,7 @@ struct TRadarInfo
|
|||||||
//扩展数据结构体 备用(如路侧设备信号)
|
//扩展数据结构体 备用(如路侧设备信号)
|
||||||
struct TExtendInfo
|
struct TExtendInfo
|
||||||
{
|
{
|
||||||
|
//JUDGE_JSON_NLOHMANN_DEFINE(TExtendInfo);
|
||||||
TExtendInfo() noexcept { clean(); }
|
TExtendInfo() noexcept { clean(); }
|
||||||
virtual ~TExtendInfo() noexcept { clean(); }
|
virtual ~TExtendInfo() noexcept { clean(); }
|
||||||
void clean() noexcept
|
void clean() noexcept
|
||||||
@ -670,6 +870,8 @@ struct TRealExam
|
|||||||
radar.clean();
|
radar.clean();
|
||||||
extend.clean();
|
extend.clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TRealExam,sensor,gps,gps2,vision,radar/*,extend*/);
|
||||||
};
|
};
|
||||||
|
|
||||||
//人工操作接口数据结构
|
//人工操作接口数据结构
|
||||||
@ -697,6 +899,8 @@ struct TEventFinishItem
|
|||||||
int32 xmdm = Sub2ItemTypeInvalid; //项目代码 对应枚举 ExamItemCode
|
int32 xmdm = Sub2ItemTypeInvalid; //项目代码 对应枚举 ExamItemCode
|
||||||
std::string xmxh = ""; //项目(序)号
|
std::string xmxh = ""; //项目(序)号
|
||||||
int32 xmhg = 0; //是否合格 1合格0不合格
|
int32 xmhg = 0; //是否合格 1合格0不合格
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TEventFinishItem,xmdm,xmxh,xmhg);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TEventItemMark
|
struct TEventItemMark
|
||||||
@ -705,6 +909,7 @@ struct TEventItemMark
|
|||||||
std::string kfdm; //扣分代码 对应markserial
|
std::string kfdm; //扣分代码 对应markserial
|
||||||
std::string markcatalog; //无锡所标准扣分代码
|
std::string markcatalog; //无锡所标准扣分代码
|
||||||
int32 type = MarkTypeAuto; //扣分类型,评判自动、人工、远程
|
int32 type = MarkTypeAuto; //扣分类型,评判自动、人工、远程
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TEventItemMark,xmdm,kfdm,markcatalog,type);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TEventExamFinish
|
struct TEventExamFinish
|
||||||
@ -718,6 +923,8 @@ struct TEventExamFinish
|
|||||||
int32 d4 = 0;
|
int32 d4 = 0;
|
||||||
int32 d5 = 0;
|
int32 d5 = 0;
|
||||||
int32 d6 = 0;
|
int32 d6 = 0;
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TEventExamFinish,type,qjjl,dcjl,d1,d2,d3,d4,d5,d6);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TEventSound
|
struct TEventSound
|
||||||
@ -725,6 +932,8 @@ struct TEventSound
|
|||||||
int32 xmdm = Sub2ItemTypeInvalid; //项目代码,比如41表示模拟灯光
|
int32 xmdm = Sub2ItemTypeInvalid; //项目代码,比如41表示模拟灯光
|
||||||
std::string code; //语音代码,参考:namespace sound、sound_sub2、sound_sub3
|
std::string code; //语音代码,参考:namespace sound、sound_sub2、sound_sub3
|
||||||
int32 type = PlaySoundDefault; //语音类型,0:默认普通语音,1:表示是模拟灯光项目的语音,语音播报结束需要调用examJudgeSoundEnd通知评判。
|
int32 type = PlaySoundDefault; //语音类型,0:默认普通语音,1:表示是模拟灯光项目的语音,语音播报结束需要调用examJudgeSoundEnd通知评判。
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TEventSound,xmdm,code,type);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TEventLane
|
struct TEventLane
|
||||||
@ -734,6 +943,8 @@ struct TEventLane
|
|||||||
std::string road = ""; //当前路段号
|
std::string road = ""; //当前路段号
|
||||||
int32 num = 0; //当前基准天线所在车道号
|
int32 num = 0; //当前基准天线所在车道号
|
||||||
int32 count = 0; //当前基准天线共有几股车道
|
int32 count = 0; //当前基准天线共有几股车道
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TEventLane,road,num,count);
|
||||||
};
|
};
|
||||||
|
|
||||||
//道路路段信息
|
//道路路段信息
|
||||||
@ -775,6 +986,8 @@ struct TJudgeData
|
|||||||
TEventLight mndg = ""; //模拟灯光
|
TEventLight mndg = ""; //模拟灯光
|
||||||
TEventLane lane = {}; //车道和路段变化
|
TEventLane lane = {}; //车道和路段变化
|
||||||
|
|
||||||
|
JUDGE_JSON_NLOHMANN_DEFINE(TJudgeData,event,sj,carzt,xmks,xmjs,kf,ksjs,xmqx,sound,mndg,lane);
|
||||||
|
|
||||||
//int8 kszt = 0; //考试状态
|
//int8 kszt = 0; //考试状态
|
||||||
//TExamXm dqxm = {}; //当前项目
|
//TExamXm dqxm = {}; //当前项目
|
||||||
//TExamXm scxmks = {}; //生成项目开始数据
|
//TExamXm scxmks = {}; //生成项目开始数据
|
||||||
@ -877,6 +1090,31 @@ struct TRTKResult
|
|||||||
#ifdef JUDGE_USE_INSPECT
|
#ifdef JUDGE_USE_INSPECT
|
||||||
std::string BodySharpData; //解决无锡所路口左转227a用例误判问题
|
std::string BodySharpData; //解决无锡所路口左转227a用例误判问题
|
||||||
#endif
|
#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
|
struct TPerformData
|
||||||
@ -891,6 +1129,7 @@ struct TPerformData
|
|||||||
std::string hint = ""; //提示信息
|
std::string hint = ""; //提示信息
|
||||||
|
|
||||||
TRTKResult lane;
|
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) {
|
for (let key in typeObj) {
|
||||||
typeObj[key] = await upDateTable({ tableName: key }, param)
|
typeObj[key] = await upDateTable({ tableName: key }, param)
|
||||||
|
console.log('sqlsqlinsert',key, typeObj[key])
|
||||||
if (!typeObj[key]) {
|
if (!typeObj[key]) {
|
||||||
promptAction.showToast({
|
promptAction.showToast({
|
||||||
message: `未能查询到${key}表数据, 请先检查网络是否连接正常`,
|
message: `未能查询到${key}表数据, 请先检查网络是否连接正常`,
|
||||||
|
|||||||
@ -45,6 +45,7 @@ const map = {
|
|||||||
'MA_MAP_ROAD': MA_MAP_ROAD,
|
'MA_MAP_ROAD': MA_MAP_ROAD,
|
||||||
'MA_MAP_ROAD_LANE': MA_MAP_ROAD_LANE,
|
'MA_MAP_ROAD_LANE': MA_MAP_ROAD_LANE,
|
||||||
'MAP_SUBITEM': MA_MAP_SUBITEM,
|
'MAP_SUBITEM': MA_MAP_SUBITEM,
|
||||||
|
'MA_MAP_SUBITEM': MA_MAP_SUBITEM,
|
||||||
'MA_SYSSET': MA_SYSSET,
|
'MA_SYSSET': MA_SYSSET,
|
||||||
'ES_CARINFO': ES_CARINFO,
|
'ES_CARINFO': ES_CARINFO,
|
||||||
'ES_EXAMPOINTDETAIL': ES_EXAMPOINTDETAIL,
|
'ES_EXAMPOINTDETAIL': ES_EXAMPOINTDETAIL,
|
||||||
@ -94,7 +95,7 @@ function sqlInsertCommonFn(tableName, resultArr, context?, delFlag = true) {
|
|||||||
if (result.length == 0) {
|
if (result.length == 0) {
|
||||||
console.log('sqlsqlinsert',resultArr.length)
|
console.log('sqlsqlinsert',resultArr.length)
|
||||||
if(resultArr.length==0){
|
if(resultArr.length==0){
|
||||||
resolve(false)
|
resolve(true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let INSERT_SQL = "INSERT INTO " + tableName
|
let INSERT_SQL = "INSERT INTO " + tableName
|
||||||
@ -188,7 +189,7 @@ export async function upDateTable(params, reqParam) {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const date = new Date()
|
const date = new Date()
|
||||||
let paraKdid = reqParam?.paraKdid || ''
|
let paraKdid = reqParam?.paraKdid || ''
|
||||||
let examinationRoomId = reqParam?.examinationRoomId || ''
|
let examinationRoomId = reqParam?.kdid || ''
|
||||||
if (!paraKdid || !examinationRoomId) {
|
if (!paraKdid || !examinationRoomId) {
|
||||||
resolve(false)
|
resolve(false)
|
||||||
return
|
return
|
||||||
@ -197,12 +198,12 @@ export async function upDateTable(params, reqParam) {
|
|||||||
const str = { "head": { "time": dateFormat(date) },
|
const str = { "head": { "time": dateFormat(date) },
|
||||||
"body":
|
"body":
|
||||||
{ "tableName": params.tableName, // 表名
|
{ "tableName": params.tableName, // 表名
|
||||||
"paraKdid": paraKdid, //参数平台kdid
|
"paraKdid": reqParam.paraKdid, //参数平台kdid
|
||||||
"examinationRoomId": examinationRoomId, //考试平台kdid
|
"examinationRoomId":reqParam.kdid, //考试平台kdid
|
||||||
"typeRsp": "0" // 赋默认值0,无需改变
|
"typeRsp": "0" // 赋默认值0,无需改变
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const url = globalThis.timeInfo.url
|
const url = reqParam.centerHost
|
||||||
|
|
||||||
initCenterCache(str, url).then(async (res) => {
|
initCenterCache(str, url).then(async (res) => {
|
||||||
if (!res || res == undefined || res == '') {
|
if (!res || res == undefined || res == '') {
|
||||||
@ -233,7 +234,7 @@ export async function getMySystemSetTable(params, reqParam) {
|
|||||||
const str = { "head": { "time": dateFormat(date) },
|
const str = { "head": { "time": dateFormat(date) },
|
||||||
"body":
|
"body":
|
||||||
{ "tableName": params.tableName, // 表名
|
{ "tableName": params.tableName, // 表名
|
||||||
"paraKdid": reqParam?.kdid, //考试平台kdid
|
"paraKdid": reqParam?.paraKdid, //参数平台kdid
|
||||||
"examinationRoomId": reqParam?.kdid, //考试平台kdid
|
"examinationRoomId": reqParam?.kdid, //考试平台kdid
|
||||||
"typeRsp": "0" // 赋默认值0,无需改变
|
"typeRsp": "0" // 赋默认值0,无需改变
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,7 +18,7 @@ export const VideoConfigData: VideoConfig = {
|
|||||||
td3: '3',
|
td3: '3',
|
||||||
td4: '4',
|
td4: '4',
|
||||||
videoRecord1: false,
|
videoRecord1: false,
|
||||||
videoRecord2: true,
|
videoRecord2: false,
|
||||||
videoRecord3: false,
|
videoRecord3: false,
|
||||||
videoRecord4: false,
|
videoRecord4: false,
|
||||||
text1: '',
|
text1: '',
|
||||||
|
|||||||
@ -184,7 +184,7 @@ struct Index {
|
|||||||
Column() {
|
Column() {
|
||||||
Row() {
|
Row() {
|
||||||
Column() {
|
Column() {
|
||||||
Text('V ' + globalThis.version)
|
Text('V 1.0')
|
||||||
.fontColor('#CCAE7A')
|
.fontColor('#CCAE7A')
|
||||||
.fontSize(22 * globalThis.ratio)
|
.fontSize(22 * globalThis.ratio)
|
||||||
.width('30%')
|
.width('30%')
|
||||||
@ -310,13 +310,15 @@ struct Index {
|
|||||||
// let mode=globalThis.timeInfo?.mode?globalThis.timeInfo?.mode:1
|
// let mode=globalThis.timeInfo?.mode?globalThis.timeInfo?.mode:1
|
||||||
|
|
||||||
// console.log('mode',mode)
|
// console.log('mode',mode)
|
||||||
|
|
||||||
let workerInstance = new worker.ThreadWorker('entry/ets/workers/worker.ts');
|
let workerInstance = new worker.ThreadWorker('entry/ets/workers/worker.ts');
|
||||||
const param = {
|
const param = {
|
||||||
carId: globalThis.carInfo?.carId,
|
carId: globalThis.carInfo?.carId,
|
||||||
examinationRoomId: globalThis.carInfo?.examinationRoomId,
|
examinationRoomId: globalThis.carInfo?.examinationRoomId,
|
||||||
judgeVersion: globalThis.judgeVersion,
|
judgeVersion: globalThis.judgeVersion,
|
||||||
shellVersion: globalThis.version,
|
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,
|
mode: globalThis.timeInfo?.mode,
|
||||||
context: this.context,
|
context: this.context,
|
||||||
host: globalThis.host,
|
host: globalThis.host,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user