Selaa lähdekoodia

!10735 T25HR581 可视柜台终端应用轻量化二期_集中配置实体下线
Merge pull request !10735 from 80310970/CenterSettingOffline_CJL

陈礼鹏80274480 4 kuukautta sitten
vanhempi
sitoutus
7948c42425
41 muutettua tiedostoa jossa 693 lisäystä ja 3269 poistoa
  1. 2 12
      CMakeLists.txt
  2. 8 66
      DevAdapter/CMakeLists.txt
  3. 1 1
      DevAdapter/simulator/assets/cmbsz.ini
  4. 1 1
      DevAdapter/simulator/include/DeviceSimulator.h
  5. 11 2
      Framework/Common/SpFSM.h
  6. 15 3
      Framework/spbase/SpFSM.cpp
  7. 1 1
      Framework/spbase/SpTimer.cpp
  8. 2 2
      Module/CMakeLists.txt
  9. 0 31
      Module/mod_CenterSetting/CMakeLists.txt
  10. 0 795
      Module/mod_CenterSetting/CenterSettingConn.cpp
  11. 0 198
      Module/mod_CenterSetting/CenterSettingConn.h
  12. 0 42
      Module/mod_CenterSetting/CenterSettingService.xml
  13. 0 255
      Module/mod_CenterSetting/CenterSetting_client_g.h
  14. 0 131
      Module/mod_CenterSetting/CenterSetting_def_g.h
  15. 0 218
      Module/mod_CenterSetting/CenterSetting_server_g.h
  16. 0 4
      Module/mod_CenterSetting/ChangeLog
  17. 0 19
      Module/mod_CenterSetting/Event.h
  18. 0 239
      Module/mod_CenterSetting/mod_centersetting.cpp
  19. 0 105
      Module/mod_CenterSetting/mod_centersetting.h
  20. 0 3
      Module/mod_CenterSetting/test/testCenterSettingEntity.cpp
  21. 377 303
      Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp
  22. 44 39
      Module/mod_ResourceWatcher/ResourceWatcherFSM.h
  23. 8 0
      Module/mod_ResourceWatcher/ResourceWatcher_LogCode.h
  24. 6 15
      Module/mod_ResourceWatcher/ResourceWatcher_UserCode.h
  25. 11 3
      Module/mod_ResourceWatcher/mod_ResourceWatcher.cpp
  26. 0 15
      Module/mod_ResourceWatcher/mod_ResourceWatcher.h
  27. 0 4
      Module/mod_healthmanager/mod_healthmanager.cpp
  28. 0 2
      Module/mod_heartbeat/HeartBeatFSM.cpp
  29. 48 10
      Module/mod_vtmloader/VtmLoaderFSM.cpp
  30. 31 1
      Module/mod_vtmloader/VtmLoaderFSM.h
  31. 2 1
      Module/mod_vtmloader/VtmLoader_UserCode.h
  32. 1 1
      Module/mod_vtmloader/mod_vtmloader.h
  33. 0 101
      addin/res/ManagerDesktop/audioErr.html
  34. 7 7
      addin/res/ManagerDesktop/css/errType.css
  35. 0 101
      addin/res/ManagerDesktop/entityCheck.html
  36. 0 101
      addin/res/ManagerDesktop/homePageErr.html
  37. 6 40
      addin/res/ManagerDesktop/js/getTerminalInfo.js
  38. 2 286
      addin/res/ManagerDesktop/js/initPsd.js
  39. 2 9
      addin/res/ManagerDesktop/js/navOprator.js
  40. 1 102
      addin/res/ManagerDesktop/serverNoAccess.html
  41. 106 0
      addin/res/ManagerDesktop/upgradeRestart.html

+ 2 - 12
CMakeLists.txt

@@ -168,13 +168,6 @@ if(DEVOPS_ON)
 		set(BUILD_NUMBER ${RVC_DEV_NUM})
 	endif(DEFINED ENV{ENV_VER_Build})
 
-	if(DEFINED ENV{WITH_DEVADAPTER})
-		message(STATUS "FOR_BUILD DEVADAPTER or not: $ENV{WITH_DEVADAPTER}")
-		if(NOT $ENV{WITH_DEVADAPTER})
-			set(BUILD_DEVADAPTER OFF)
-		endif(NOT $ENV{WITH_DEVADAPTER})
-	endif(DEFINED ENV{WITH_DEVADAPTER})
-
 	if(DEFINED ENV{ONLY_DEVADAPTER})
 		if($ENV{ONLY_DEVADAPTER})
 			set(ONLY_BUILD_DEVADAPTER TRUE)
@@ -185,7 +178,7 @@ if(DEVOPS_ON)
 	if(DEVOPS_ON_CMAKE_PRD)
 		set(RVC_VERSION_SUFFIX "PRD")
 		if(PACK_AS_DEB_PKG)
-		#product version as debian installer, reset the last version element to zero.
+			#product version as debian installer, reset the last version element to zero.
 			set(BUILD_NUMBER 0)
 		endif(PACK_AS_DEB_PKG)
 	else()
@@ -206,6 +199,7 @@ if(DEVOPS_ON)
 
 elseif(BUILD_NUMBER EQUAL 0)
 	set(BUILD_NUMBER ${RVC_DEV_NUM})
+
 endif(DEVOPS_ON)
 
 message(STATUS "BUILD_NUMBER ${BUILD_NUMBER}")
@@ -644,10 +638,6 @@ else()
 endif(BUILD_TOOLS)
 
 if(BUILD_DEVADAPTER)
-	set(ONLY_PURE_ADAPTER_RELY FALSE)
-	add_subdirectory(DevAdapter)
-else()
-	set(ONLY_PURE_ADAPTER_RELY TRUE)
 	add_subdirectory(DevAdapter)
 endif(BUILD_DEVADAPTER)
 

+ 8 - 66
DevAdapter/CMakeLists.txt

@@ -166,87 +166,29 @@ message(STATUS "vendor log library: ${VENDOR_LOG_LIB_NAME}")
 
 # 通过conan的方式管理厂商库
 if(DEVADAPTER_USING_CONAN)
-    if(MSVC) #Windows 厂商适配器
-        if(RVC_INTEGRATE_BUILDV2 AND NOT ONLY_PURE_ADAPTER_RELY)
-            #厂商适配器兼容WIN的提交,需要将以前的ZIP链接转化为Conan依赖包,处理完之后这里填写内容进行拉取:Demo
-            #set(CMB_CONAN_ALL_LIB_NAME cmb/2024.0315.20@LR04.02_VendorLib/msvc)
-            #长城读卡接口优化
-            set(GWI_CONAN_ALL_LIB_NAME gwi/2024.0722.6@LR04.02_VendorLib/msvc)
-            set(KEBA_CONAN_ALL_LIB_NAME keba/2024.0326.23@LR04.02_VendorLib/msvc)
-            #【阅知】关于适配器解耦完成测试事宜
-            set(CW_CONAN_ALL_LIB_NAME cw/2024.1125.57@LR04.02_VendorLib/msvc)
-            #rvc_aggerate_vendor_libs(cmb)
-            rvc_aggerate_vendor_libs(gwi)
-            rvc_aggerate_vendor_libs(keba)
-            rvc_aggerate_vendor_libs(cw)
-        endif(RVC_INTEGRATE_BUILDV2 AND NOT ONLY_PURE_ADAPTER_RELY)
-    else() #UOS厂商适配器
-        if(RVC_INTEGRATE_BUILDV2 AND NOT ONLY_PURE_ADAPTER_RELY)
-            #邮件 试运行设备的密码键盘与读卡器的提示灯物理地址与测试样机的物理地址不一致
-            set(KEBA_CONAN_ALL_LIB_NAME keba/2024.0814.32@LR04.02_VendorLib/stable)
-            #【阅知】关于适配器解耦完成测试事宜
-            set(CW_CONAN_ALL_LIB_NAME cw/2024.1220.47@LR04.02_VendorLib/stable)
-            #【阅知】关于适配器解耦完成测试事宜
-            set(SZZT_CONAN_ALL_LIB_NAME szzt/2024.1209.40@LR04.02_VendorLib/stable)
-            #长城信创单屏设备root.ini配置需要更新为(根据行方规范,将信创单屏设备版本号修改为2.x)
-            set(GWI_CONAN_ALL_LIB_NAME gwi/2024.0723.20@LR04.02_VendorLib/stable)
-            #Fw: 回复:回复: Fw: 回复:回复: Fw: 南天-缺陷案例解决方案及适配器整合
-            set(NANTIAN_CONAN_ALL_LIB_NAME nantian/2024.0802.2@LR04.02_VendorLib/stable)
-            #Fw: 单屏VTM最新版本链接
-            set(GRG_CONAN_ALL_LIB_NAME grg/2024.0913.45@LR04.02_VendorLib/stable)
-            #根据开发规范适配器与依赖库简称由【CBPM】变更为【cbpm】案例自测完成
-            set(CBPM_CONAN_ALL_LIB_NAME cbpm/2024.1101.10@LR04.02_VendorLib/stable)
-            rvc_aggerate_vendor_libs(keba)
-            rvc_aggerate_vendor_libs(cw)
-            rvc_aggerate_vendor_libs(szzt)
-            rvc_aggerate_vendor_libs(gwi)
-            rvc_aggerate_vendor_libs(nantian)
-            rvc_aggerate_vendor_libs(grg)
-            rvc_aggerate_vendor_libs(cbpm)
-        endif(RVC_INTEGRATE_BUILDV2 AND NOT ONLY_PURE_ADAPTER_RELY)
-    endif(MSVC)
-
     if(MSVC)
-        #CardLibDB_CMB.db3
-        if(NOT ONLY_PURE_ADAPTER_RELY)
-            conan_cmake_run(REQUIRES VendorDLL/2024.11.1401@LR04.02_VendorLib/testing
-                BASIC_SETUP CMAKE_TARGETS)
-        endif(NOT ONLY_PURE_ADAPTER_RELY)
-
         set(SELF_CONAN_LIB_NAME self/2024.1217.01@LR04.02_VendorLib/testing)
         add_subdirectory(self)
     endif(MSVC)
-
 endif(DEVADAPTER_USING_CONAN)
 
-if(NOT ONLY_PURE_ADAPTER_RELY)
-    file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
-endif(NOT ONLY_PURE_ADAPTER_RELY)
-
+file(GLOB all_valid_subdirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")
 foreach(dir ${all_valid_subdirs})
 	if(${dir} MATCHES "^([^/]*)/+CMakeLists.txt")
 		string(REGEX REPLACE "^([^/]*)/+CMakeLists.txt" "\\1" dir_trimmed ${dir})
         # remove 'self' sub directory bcz it would be added seperately
-        if(DEVOPS_ON)
+        if(DEVOPS_ON_CMAKE_PRD)
             #硬件模拟器在生产流水线不参与编译
-            #liblog4vendor 单独上面提前编译
+            #liblog4vendor 和 self 已在上面提前单独编译
             #simulator 编译纯适配器时无法编译,因为依赖框架RVCComm库
-            if(DEVOPS_ON_CMAKE_PRD)
-                string(FIND "liblog4vendor|self|cmbsz|simulator" ${dir_trimmed} found)
-            else()
-                if(ONLY_BUILD_DEVADAPTER)
-                    string(FIND "liblog4vendor|self|cmbsz|simulator" ${dir_trimmed} found)
-                else()
-                    string(FIND "liblog4vendor|self|cmbsz" ${dir_trimmed} found)
-                endif(ONLY_BUILD_DEVADAPTER)
-            endif(DEVOPS_ON_CMAKE_PRD)
+            string(FIND "liblog4vendor|self|cmbsz|simulator" ${dir_trimmed} found)
         else()
-            if(ONLY_BUILD_DEVADAPTER)
-                string(FIND "liblog4vendor|self|simulator" ${dir_trimmed} found)
+            if(DEVOPS_ON)
+                string(FIND "liblog4vendor|self|cmbsz" ${dir_trimmed} found)
             else()
                 string(FIND "liblog4vendor|self" ${dir_trimmed} found)
-            endif(ONLY_BUILD_DEVADAPTER)
-        endif(DEVOPS_ON)
+            endif(DEVOPS_ON)
+        endif(DEVOPS_ON_CMAKE_PRD)
         message(STATUS "found: ${found}")
         if((NOT RVC_INTEGRATE_BUILD) OR (${found} EQUAL -1))
 		    message(STATUS "Adding vendor component ${dir_trimmed}")

+ 1 - 1
DevAdapter/simulator/assets/cmbsz.ini

@@ -1,2 +1,2 @@
 [server]
-url=http://emulatoruser.paasst.cmbchina.cn/emulator/avs/retrieveEmulatorData
+url=http://emulatoruser.paasuat.cmbchina.cn/emulator/avs/retrieveEmulatorData

+ 1 - 1
DevAdapter/simulator/include/DeviceSimulator.h

@@ -35,7 +35,7 @@
 #endif
 
 using namespace std;
-#define DEFAULT_DATA_URL "http://emulatoruser.paasst.cmbchina.cn/emulator/avs/retrieveEmulatorData"
+#define DEFAULT_DATA_URL "http://emulatoruser.paasuat.cmbchina.cn/emulator/avs/retrieveEmulatorData"
 
 //获取模拟器库文件所在目录
 string GetCurrentDirectory() {

+ 11 - 2
Framework/Common/SpFSM.h

@@ -35,7 +35,7 @@ enum FSMEventEnum
 
 #define FSM_STATE_INIT -1 // the initial state of the FSM
 #define FSM_STATE_EXIT -2 // the exit state of the FSM
-
+#define FSM_STATE_ERROR -3 // the error state of the FSM
 struct FSMEvent
 {
 	int iEvt;
@@ -124,6 +124,12 @@ public:
 	virtual int MatchRule(int state, int evt, unsigned int rc)=0;
 	virtual BOOL FindStateEvent(int evt)=0;
 
+protected:
+	const bool InNotInitState() const
+	{
+		return (m_iState == FSM_STATE_INIT || m_iState == FSM_STATE_EXIT || m_iState == FSM_STATE_ERROR);
+	}
+
 private:
 	void Trans(int next);
 
@@ -229,7 +235,10 @@ public:
 			return "State_Start";
 		} else if (iState == FSM_STATE_EXIT) {
 			return "State_End";
-		} else {
+		} else if (iState == FSM_STATE_ERROR) {
+			return "State_Error";
+		}
+		else {
 			T *pT = static_cast<T*>(this);
 #ifdef _WIN32
 			T::FSMStateEntry* entry = pT->GetState(iState);

+ 15 - 3
Framework/spbase/SpFSM.cpp

@@ -116,7 +116,9 @@ ErrorCodeEnum FSMBase::Init(CEntityBase *pEntity)
 	if (Error == Error_Succeed) {
 		Trans(GetInitState());
 	}
-
+	else {
+		//m_iState = FSM_STATE_ERROR;
+	}
 	return Error;
 }
 
@@ -183,7 +185,7 @@ void FSMBase::__ProcessEvent(FSMEvent *e)
 		if (old_state != new_state) {
 			OnHook(old_state, new_state); // dont change state here
 			TOOLKIT_ASSERT(m_iState == old_state);
-			if (old_state != FSM_STATE_INIT) {
+			if (old_state != FSM_STATE_INIT && old_state != FSM_STATE_ERROR) {
 				OnStateExit(old_state);
 			}
 			m_iState = new_state;
@@ -217,7 +219,7 @@ void FSMBase::__ProcessEvent(FSMEvent *e)
 		if (m_lInTrans) {
 			e->IncRef();
 			ListEntry_AddTail(&m_eventlist, &e->m_entry);
-		} else {
+		} else if(!InNotInitState()){
 			unsigned int rc = OnStateEvent(e);
 			if (!e->IsHandled()) {
 				if (FindStateEvent(e->iEvt)) {
@@ -234,6 +236,16 @@ void FSMBase::__ProcessEvent(FSMEvent *e)
 			}
 			e->SetHandled(FALSE);
 		}
+		else {
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Ignore the FSMEvent id: %d", e->iEvt);
+			if (e->IsHandled()) {
+				/**   [Gifur@2025429]*/
+			}
+			else {
+				e->OnUnhandled();
+			}
+			e->SetHandled(FALSE);
+		}
 	}
 }
 

+ 1 - 1
Framework/spbase/SpTimer.cpp

@@ -141,7 +141,7 @@ SpTimer *SpTimerCreate(SpTimerList *pList, DWORD dwTimerID, DWORD dwInterval, IT
 	spinlock_init(&pTimer->lock);
 	REF_COUNT_INIT(&pTimer->iRefCount);
 
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SpTimer created dwTimerId = %d, dwInterval=%d", dwTimerID, dwInterval);
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SpTimer created dwTimerId = %d, dwInterval=%d", dwTimerID, dwInterval);
 
 	return pTimer;
 }

+ 2 - 2
Module/CMakeLists.txt

@@ -152,7 +152,7 @@ add_subdirectory(mod_healthmanager)
 add_subdirectory(mod_accessauth)
 #will be offline in future cly said
 add_subdirectory(mod_guiconsole)
-add_subdirectory(mod_CenterSetting)
+#add_subdirectory(mod_CenterSetting)
 add_subdirectory(mod_tokenmgr)
 add_subdirectory(mod_evtconverter)
 #zhaohu
@@ -214,7 +214,7 @@ add_subdirectory(mod_upload)
 add_subdirectory(mod_healthmanager)
 add_subdirectory(mod_accessauth)
 add_subdirectory(mod_guiconsole)
-add_subdirectory(mod_CenterSetting)
+#add_subdirectory(mod_CenterSetting)
 add_subdirectory(mod_tokenmgr)
 add_subdirectory(mod_evtconverter)
 #add_subdirectory(mod_interactivelog)

+ 0 - 31
Module/mod_CenterSetting/CMakeLists.txt

@@ -1,31 +0,0 @@
-define_module("CenterSetting")
-
-set(${MODULE_PREFIX}_SRCS
-	CenterSettingConn.cpp
-	CenterSettingConn.h
-	mod_centersetting.cpp
-	mod_centersetting.h
-	)
-
-set(MOD_VERSION_STRING "0.0.1-dev1")
-add_module_libraries(${MODULE_PREFIX} ${MODULE_NAME} ${MOD_VERSION_STRING})
-
-target_include_directories(${MODULE_NAME} PRIVATE
-	${RVC_TOOLKIT_INCLUDE_DIR}
-	${OTHER_LIB_BASE_DIR}/libpublicFun
-	${OTHER_LIB_BASE_DIR}/libRestfulFunc
-	${CONAN_INCLUDE_DIRS_JSONCPP}
-)
-
-set(CMAKE_CXX_FLAGS "${CMAK_CXX_FLAGS} -g3")
-
-target_link_directories(${MODULE_NAME} PRIVATE
-	${CONAN_LIB_DIRS_JSONCPP}
-)
-
-# 添加实体需要依赖的其他共享库(包括系统库)
-set(${MODULE_PREFIX}_LIBS ${MODULE_BASE_LIBS} ${RVCCOMM_LIB})
-target_link_libraries(${MODULE_NAME} 
-	${${MODULE_PREFIX}_LIBS} CONAN_PKG::OpenSSL libpublicFun ${CONAN_PKG_LIBS_JSONCPP})
-
-deploy_module(${MODULE_PREFIX} ${MODULE_NAME})

+ 0 - 795
Module/mod_CenterSetting/CenterSettingConn.cpp

@@ -1,795 +0,0 @@
-#include "stdafx.h"
-#include "CenterSettingConn.h"
-#include "Event.h"
-#include <map>
-#include <regex>
-using namespace std;
-using std::regex;
-#include "mod_centersetting.h"
-#include <iostream>
-#include <sys/types.h> 
-#include <sys/stat.h>
-#include <fstream>
-#include "fileutil.h"
-#pragma comment(lib, "crypt32.lib")
-
-#ifdef RVC_OS_LINUX
-#include "CommEntityUtil.hpp"
-#include "iniutil.h"
-#include "json/json.h"
-#include "CommEntityRestful.hpp"
-#include "SpUtility.h"
-#include "RVCComm.h"
-#endif //RVC_OS_WIN
-
-#ifdef RVC_OS_WIN
-char* ConvertUtf8ToGBK(const char* strUtf8)
-{
-	int len = MultiByteToWideChar(CP_UTF8, 0, strUtf8, -1, NULL, 0);
-	WCHAR* wszGBK = new WCHAR[len + 1];
-	memset(wszGBK, 0, len * 2 + 2);
-	MultiByteToWideChar(CP_UTF8, 0, strUtf8, -1, wszGBK, len);
-
-	len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
-	char* szGBK = new char[len + 1];
-	memset(szGBK, 0, len + 1);
-	WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);
-	delete[] wszGBK;
-
-	return szGBK;
-}
-
-void ConvertUtf8ToGBK(std::string& str)
-{
-	char* dst = ConvertUtf8ToGBK(str.c_str());
-	str = dst;
-	delete[] dst;
-}
-
-char* ConvertGBKToUtf8(const char* gbk, int* n)
-{
-	int len = MultiByteToWideChar(CP_ACP, 0, gbk, -1, NULL, 0);
-	WCHAR* wszGBK = new WCHAR[len + 1];
-	memset(wszGBK, 0, len * 2 + 2);
-	MultiByteToWideChar(CP_ACP, 0, gbk, -1, wszGBK, len);
-
-	len = WideCharToMultiByte(CP_UTF8, 0, wszGBK, -1, NULL, 0, NULL, NULL);
-	char* szUtf8 = new char[len + 1];
-	memset(szUtf8, 0, len + 1);
-	WideCharToMultiByte(CP_UTF8, 0, wszGBK, -1, szUtf8, len, NULL, NULL);
-
-	delete[] wszGBK;
-	*n = len - 1;
-	return szUtf8;
-}
-
-void ConvertGBKToUtf8(std::string& str)
-{
-	//char *src = new char[str.length() + 1];
-	//strncpy(src, str.c_str(), str.length() + 1);
-	int len = 0;
-	char* dst = ConvertGBKToUtf8(str.c_str(), &len);
-
-	str = dst;
-	//delete[] src;
-	delete[] dst;
-}
-
-static char* ConvertBytesToHexStr(BYTE *pBuf, int nLen)
-{
-	char *pRet = (char*)malloc(nLen * 2 + 1);
-	memset(pRet, 0, nLen * 2 + 1);
-	char *p = pRet;
-	for (int i = 0; i < nLen; i++)
-	{
-		BYTE b = pBuf[i];
-		BYTE l = (b >> 4) & 0x0F;
-		if (l >= 10)
-			*p = l - 10 + 'a';
-		else
-			*p = l + '0';
-
-		p++;
-		BYTE r = b & 0x0F;
-		if (r >= 10)
-			*p = r - 10 + 'a';
-		else
-			*p = r + '0';
-		p++;
-	}
-
-	return pRet;
-}
-#endif //RVC_OS_WIN
-
-void convert(string& str)
-{
-    //将单斜杠转为双斜杠
-    for (size_t i = 0; i < str.size(); i++) {
-        if (str[i] == '\\') {
-            str.insert(i, string("\\"));
-            i++;
-        }
-    }
-}
-
-void transferblank(string& str)
-{
-    int oldLen = str.length();
-    int cnt = 0;
-    for(int idx = 0; idx < oldLen; idx++)
-    {
-        if(str[idx] == ' ')
-            cnt++;
-    }
-
-    str.resize(oldLen + cnt * 2);
-    int j = oldLen - 1;
-    int i = str.length() - 1;
-    while( i >= 0 )
-    {
-        if(str[j] == ' ')
-        {
-            str[i--] = '0';
-            str[i--] = '2';
-            str[i--] = '%';
-            j--;
-        }
-        else
-        {
-            str[i--] = str[j--];
-        }
-    }
-}
-
-#ifndef  WITH_CPPRESTSDK_IN_CENTER
-bool CenterSettingResponse::Parse(string strData)
-{
-    Json::Value root;
-    Json::Reader reader;
-    Json::Value arrConfig;
-
-    reader.parse(strData, root, false);
-
-    m_success = root["success"].asBool();
-
-    if(m_success)
-    {
-        m_message = root["message"].asString();
-        m_is_update = root["data"]["is_update"].asBool();
-        m_is_reset = root["data"]["is_reset"].asBool();
-        m_version_no = root["data"]["version_no"].asString();
-        transferblank(m_version_no);
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_version_no:%s", m_version_no.c_str());
-        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("m_is_reset:%d", m_is_reset ? 1 : 0);
-        m_sm3 = root["data"]["sm3"].asString();
-        m_strConfig = root["data"]["config"].asString();
-
-        if(m_is_update)
-        {
-            reader.parse(m_strConfig, arrConfig, false);
-            if(arrConfig.isArray())
-            {
-                for(int j = 0; j < arrConfig.size(); j++)
-                {
-                    ConfigItem configItem;
-
-                    configItem.m_moudle = arrConfig[j]["moudle"].asString();
-                    configItem.m_name = arrConfig[j]["name"].asString();
-                    configItem.m_value = arrConfig[j]["value"].asString();
-
-                    m_config.push_back(configItem);
-                }
-            }
-        }
-    }
-    return true;
-}
-#endif
-
-bool AddVersionResponse::Parse(string strData)
-{
-    Json::Value root;
-    Json::Reader reader;
-    reader.parse(strData, root, false);
-    m_success = root["success"].asBool();
-    return m_success;
-}
-
-CenterSettingsMicroServiceHelper::CenterSettingsMicroServiceHelper(CEntityBase* pEntity)
-    :m_pEntity(pEntity), m_strLastTime(true), m_strCurSite(true), m_arrKeys(NULL), m_arrURLs(NULL), m_isFirst(true)
-{
-    m_pEntity->GetFunction()->OpenConfig(Config_CenterSetting, m_pCenterConfig);
-    m_pEntity->GetFunction()->OpenConfig(Config_Run, m_pRunConfig);
-
-    m_pEntity->GetFunction()->GetSystemStaticInfo(m_terminalInfo);
-    m_pHttpFunc = create_http(HTTPLogCallback);
-
-    InitCenterSettingInfo();
-}
-
-#ifdef RVC_OS_WIN
-int CenterSettingsMicroServiceHelper::GetCenterSetting()
-{
-#else
-int CenterSettingsMicroServiceHelper::GetCenterSetting(bool byHand)
-{
-#endif
-    LOG_FUNCTION();
-
-    if(m_strUrl.IsNullOrEmpty() && m_urlsFromShell.size() <= 0)
-    {
-        m_strErrMsg = "集中配置服务地址不存在";
-        return AllAddressNull;
-    }
-
-    CenterSettingReq req;
-    CenterSettingResponse res;
-    req.m_terminal_no = m_terminalInfo.strTerminalID.GetData();
-
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("m_strFilePath:%s", m_strFilePath.GetData());
-#ifdef RVC_OS_WIN
-	if(!ExistsFile(m_strFilePath))
-	{
-		Dbg("!ExistsFile(m_strFilePath)");
-#else
-if ((byHand && !m_isFirst) || !ExistsFile(m_strFilePath)) 
-    {
-        if (byHand && !m_isFirst && ExistsFileA(m_strFilePath)) {
-            LogWarn(Severity_Low, Error_Debug, EVENT_MOD_CENTERSETTING_UPDATE_CENTER_FORCE, "尝试强制重新下载集中配置");
-        }
-#endif
-        req.m_version = "";
-        req.m_config = "";
-    }
-    else
-    {
-#ifdef RVC_OS_LINUX
-if (m_isFirst) //如果是第一次更新则强制下载集中配置
-        {
-            req.m_version = "";
-            req.m_config = "";
-        }
-        else
-#endif
-        {
-            req.m_version = m_strVersion.GetData();
-            req.m_config = GetLocalConfig();
-        }
-    }
-
-    if(m_isFirst) m_isFirst = false;
-
-    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_strVersion:%s", req.m_version.c_str());
-    req.m_update_time = GetUpdateTime();
-    GetTimeoutValue(req.m_timeOut);
-
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")(CSimpleStringA::Format("timeout:%d", req.m_timeOut));
-
-    int ret1 = MANUAL, ret2 = MANUAL;
-    if(!m_strUrl.IsNullOrEmpty())
-    {
-        req.m_url = m_strUrl;
-        m_strCurUrl = req.m_url;
-        req.m_url += "?update_time=" + req.m_update_time + "&terminal_no=" + req.m_terminal_no + "&version=" + req.m_version;
-#ifdef RVC_OS_WIN
-		ret1 = OnRequest(req, res, m_strErrMsg);
-#else
-        ret1 = GetCenterSettingsFromHttp(req, m_strErrMsg);
-#endif
-    }
-    else
-    {
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("集中配置文件中地址为空,使用默认地址");
-    }
-
-    if(SUCC != ret1 && ret1 != EXIST)
-    {
-
-        if(m_urlsFromShell.size() <= 0)
-        {
-            DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("shell.ini中找不到集中配置地址");
-            return ret1;
-        }
-
-        for(int i = 0; i < m_urlsFromShell.size(); i++)
-        {
-            req.m_url = m_urlsFromShell[i].GetData();
-            m_strCurUrl = m_urlsFromShell[i].GetData();
-            req.m_url += "?update_time=" + req.m_update_time + "&terminal_no=" + req.m_terminal_no + "&version=" + req.m_version;
-#ifdef RVC_OS_WIN
-			ret2 = OnRequest(req, res);
-			if(ret2 == SUCC)
-				break;
-#else
-            ret1 = GetCenterSettingsFromHttp(req, m_strErrMsg);
-            if (ret1 == SUCC || ret1 == EXIST)
-                break;
-#endif
-        }
-    }
-	
-#ifdef RVC_OS_WIN
-    if(SUCC == ret1 || SUCC == ret2)
-	{
-		if(!res.m_is_update)
-		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("Centersetting not changed.");
-			m_strErrMsg = "集中配置已是最新版本";
-			return EXIST;
-		}
-
-		if(WriteToConfig(res))
-		{
-			m_strVersion = res.m_version_no.c_str();
-			Dbg("WriteToConfig m_strVersion:%s", m_strVersion.GetData());
-			m_pEntity->GetFunction()->OpenConfig(Config_CenterSetting, m_pCenterConfig, true);
-			m_pRunConfig->WriteConfigValue("CenterSetting", "version", m_strVersion);
-			UpdateVersion();
-			if(res.m_is_reset)
-				LogEvent(Severity_Middle, EVENT_MOD_CENTERSETTING_CRITICAL_UPDATE, "Update centersetting with critical items.");
-			
-			return SUCC;
-		}
-	}
-#endif	
-
-    return ret1;
-}
-
-void CenterSettingsMicroServiceHelper::InitCenterSettingInfo()
-{
-    CSmartPointer<IConfigInfo> shellConfig;
-    m_pEntity->GetFunction()->OpenConfig(Config_Shell, shellConfig);
-
-    m_pCenterConfig->ReadConfigValue("CenterSetting", "LastUpdateTime", m_strLastTime);
-    m_pRunConfig->ReadConfigValue("CenterSetting", "version", m_strVersion);
-#ifdef RVC_OS_LINUX
-    if (!m_strVersion.IsNullOrEmpty()) {
-        std::string tmp = m_strVersion.GetData();
-        transferblank(tmp);
-        m_strVersion = tmp.c_str();
-    }
-#endif
-    //从集中配置和shell.ini获取url
-    m_pCenterConfig->ReadConfigValue("CenterSetting", "CenterConfigUrlNew", m_strUrl);
-    if(m_strUrl.IsNullOrEmpty())
-    {
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("InitCenterSettingInfo")("集中配置中的服务链接为空,使用默认链接");
-    } 
-    else
-    {
-        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CenterConfigUrlNew:%s", m_strUrl.GetData());
-    }
-
-    CSimpleStringA strMicroServiceURLSection = "MicroServiceURL";
-
-#ifdef RVC_OS_WIN /** UOS配置后置后没这堆玩意,至少现在的配置中没有  但是windows还有[Gifur@202397]*/
-#ifdef DEVOPS_ON_ST /*DevOps流水线编译,ST环境*/
-    strMicroServiceURLSection = "MicroServiceURL-ST";
-#elif defined(DEVOPS_ON_UAT)/*DevOps流水线编译,UAT环境*/
-    strMicroServiceURLSection = "MicroServiceURL-UAT";
-#elif defined(DEVOPS_ON_PRD)/*DevOps流水线编译,PRD环境*/
-    //strMicroServiceURLSection = "MicroServiceURL-PRD";
-#elif defined(DEVOPS_ON_DEV)/*DevOps流水线编译,Dev环境*/
-    strMicroServiceURLSection = "MicroServiceURL-Dev";
-#else/*本地编译等非DevOps环境编译的版本*/
-    strMicroServiceURLSection = "MicroServiceURL-Dev";
-#endif
-#endif //RVC_OS_WIN
-
-    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("InitCenterSettingInfo")("获取集中配置服务地址 Section name:%s", strMicroServiceURLSection.GetData());
-
-    shellConfig->ReadAllKeys(strMicroServiceURLSection, m_arrKeys);
-
-    CSimpleStringA strUrl;
-    for(int i = 0; i < m_arrKeys.GetCount() && m_arrKeys[i].IsStartWith("CenterConfigUrl", true); i++)
-    {
-        shellConfig->ReadConfigValue(strMicroServiceURLSection, m_arrKeys[i].GetData(), strUrl);
-        if(!strUrl.IsNullOrEmpty())
-        {
-            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("add CenterURL:%s", strUrl.GetData());
-            m_urlsFromShell.push_back(strUrl);
-        }
-    }
-
-    //获取集中配置路径、文件名、场所
-    m_pEntity->GetFunction()->GetPath("CenterSetting", m_strFilePath);
-    m_pEntity->GetFunction()->GetPath("RunInfo", m_strBakPath);
-#ifdef RVC_OS_WIN
-    m_strBakPath += "\\runcfg\\CenterSetting.ini";
-#else
-    m_strBakPath += SPLIT_SLASH_STR "runcfg" SPLIT_SLASH_STR "CenterSetting.ini";
-#endif
-}
-
-bool CenterSettingsMicroServiceHelper::WriteToConfig(const CenterSettingResponse& sResponse)
-{
-    CSimpleStringA newPath = m_strBakPath + ".new";
-
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("config size: %d", sResponse.m_config.size());
-    for(int i = 0; i < sResponse.m_config.size(); i++)
-	{
-		string module = sResponse.m_config[i].m_moudle;
-		string name = sResponse.m_config[i].m_name;
-		string value = sResponse.m_config[i].m_value;
-
-#ifdef RVC_OS_WIN
-		if(!WritePrivateProfileStringA(module.c_str(), name.c_str(), value.c_str(), newPath))
-		{
-#else
-		if (inifile_write_str(newPath.GetData(), module.c_str(), name.c_str(), value.c_str()) == -1) 
-        {
-#endif
-            DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("WriteToConfig")
-                ("write %s:%s:%s fail", module.c_str(), name.c_str(), value.c_str());
-            m_strErrMsg = "集中配置写入失败";
-            LogWarn(Severity_Middle, Error_Unexpect, ERR_MOD_CENTERSETTING_WRITE_FAILED,
-                    CSimpleStringA::Format("集中配置写入失败:%s:%s:%s", module.c_str(), name.c_str(), value.c_str()));
-            return false;
-        }
-    }
-
-    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("WriteToConfig")("集中配置写入成功");
-#ifdef RVC_OS_WIN
-    CopyFileA(newPath, m_strFilePath, FALSE);
-    DeleteFileA(newPath);
-#else
-    fileutil_copy_file(m_strFilePath, newPath);
-    fileutil_delete_file(newPath);
-#endif
-    return true;
-}
-
-string CenterSettingsMicroServiceHelper::GetLocalConfig()
-{
-    CAutoArray<CSimpleStringA> arrSections, arrKeys;
-    CSimpleStringA strItem;
-
-    if(Error_Succeed != m_pCenterConfig->ReadAllSections(arrSections))
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetLocalConfig")("Read all sections failed.");
-
-    if(arrSections.GetCount() == 0)
-        return "";
-
-    for(int i = 0; i < arrSections.GetCount(); ++i)
-    {
-        m_pCenterConfig->ReadAllKeys(arrSections[i].GetData(), arrKeys);
-        for(int j = 0; j < arrKeys.GetCount(); ++j)
-        {
-            CSimpleStringA value, tmp;
-            m_pCenterConfig->ReadConfigValue(arrSections[i].GetData(), arrKeys[j].GetData(), value);
-
-            tmp = CSimpleStringA::Format("{\"moudle\":\"%s\", \"name\":\"%s\", \"value\":\"%s\"}",
-                                        arrSections[i].GetData(), arrKeys[j].GetData(), value.GetData());
-
-            strItem += tmp + ",";
-        }
-    }
-
-
-    string strConfig = strItem.SubString(0, strItem.GetLength() - 1).GetData();
-    convert(strConfig);
-    return strConfig;
-}
-
-void CenterSettingsMicroServiceHelper::UpdateVersion()
-{
-    AddVersionReq sReq;
-    AddVersionResponse sResponse;
-#ifdef RVC_OS_WIN
-	CSimpleStringA url;
-	m_pCenterConfig->ReadConfigValue("CenterSetting", "UpdateVersionUrl", url);
-	sReq.m_url = url.GetData();
-	sReq.m_terminal_no = m_terminalInfo.strTerminalID.GetData();
-	sReq.m_version = m_strVersion;
-	sReq.m_update_time = GetUpdateTime();
-	GetTimeoutValue(sReq.m_timeOut);
-	
-	//IHttpFunc* m_pHttpFunc = create_http(HTTPLogCallback);
-    PROCESS_LINK_CONTEXT("LR0402101UploadVersion")
-	bool ret =  m_pHttpFunc->Post(sReq, sResponse, &nextLink);
-
-	if(ret && sResponse.m_success)
-	{
-		CSimpleStringA msg = CSimpleStringA::Format("上传版本号成功:{version : %s, update_time : %s}", 
-			sReq.m_version.c_str(), sReq.m_update_time.c_str());
-		LogWarn(Severity_Low, Error_Succeed, EVENT_MOD_CENTERSETTING_UPDATE_VERSION_SUCC, msg.GetData());
-	}
-	else
-	{
-		CSimpleStringA msg = CSimpleStringA::Format("上传版本号失败:%s", sResponse.m_errMsg.c_str());
-		LogWarn(Severity_Middle, Error_Succeed, EVENT_MOD_CENTERSETTING_UPDATE_VERSION_FAILED, msg.GetData());
-
-	}
-#else
-	struct UpdateVersionReq  //Req和Ans的变量名必须和服务端json要求的一致,切记!
-    {
-        string terminal_no;
-        string version_no;
-        string terminal_update_time;
-        JSONCONVERT2OBJECT_MEMEBER_REGISTER(terminal_no, version_no, terminal_update_time)
-    } updateVersionReq;
-
-    CSimpleStringA url;
-    m_pCenterConfig->ReadConfigValue("CenterSetting", "UpdateVersionUrl", url);
-
-    HttpClientResponseResult result;
-    HttpClientRequestConfig config(HttpRequestMethod::POST, url.GetData(), &SpGetToken);
-
-    updateVersionReq.terminal_no = m_terminalInfo.strTerminalID.GetData();
-    updateVersionReq.version_no = m_strVersion;
-    updateVersionReq.terminal_update_time = GetUpdateTime();
-
-    SP::Module::Restful::FulfillRequestJsonBody(&config, updateVersionReq);
-
-    RestfulClient client = RestfulClient::getInstance();
-    PROCESS_LINK_CONTEXT("LR0402101UpdateVersion");
-    config.PreDo();
-    client.Do(&config, &result, &nextLink);
-
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("返回内容为 %s", result.content.length() > 1000 ? result.content.substr(0, 1000).c_str() : result.content.c_str());
-
-    if (!result.ResponseOK()) {
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Do failed: %s", result.WhatError().c_str());
-        return;
-    }
-
-    SP::Module::Restful::CommResponseJson responseStatus;
-    SP::Module::Restful::GetStatusFromDebranchResponse(result.content, responseStatus);
-
-    if (responseStatus.success) {
-        CSimpleStringA msg = CSimpleStringA::Format("上传版本号成功:{version : %s, update_time : %s}",
-            updateVersionReq.version_no.c_str(), updateVersionReq.terminal_update_time.c_str());
-        LogWarn(Severity_Low, Error_Succeed, EVENT_MOD_CENTERSETTING_UPDATE_VERSION_SUCC, msg.GetData());
-    } else {
-        CSimpleStringA msg = CSimpleStringA::Format("上传版本号失败:%s", result.content.c_str());
-        LogWarn(Severity_Middle, Error_Succeed, EVENT_MOD_CENTERSETTING_UPDATE_VERSION_FAILED, msg.GetData());
-
-    }
-#endif
-}
-
-SYSTEMTIME GetModifyTime(const string& strFilename)
-{
-#if defined(_MSC_VER)
-    struct _stat64i32 statbuf;
-    _stat64i32(strFilename.c_str(), &statbuf);
-    struct tm* temptm = _localtime64(&statbuf.st_mtime);
-#else
-    struct stat statbuf;
-    ZeroMemory(&statbuf, sizeof(statbuf));
-    stat(strFilename.c_str(), &statbuf);
-    struct tm* temptm = localtime(&statbuf.st_mtime);
-#endif //_MSC_VER
-
-    SYSTEMTIME st = { 1900 + temptm->tm_year,
-        1 + temptm->tm_mon,
-        temptm->tm_wday,
-        temptm->tm_mday,
-        temptm->tm_hour,
-        temptm->tm_min,
-        temptm->tm_sec,
-        0 };
-
-    return st;
-}
-
-string CenterSettingsMicroServiceHelper::GetUpdateTime()
-{
-    CSimpleStringA strUpdateTime;
-
-    /** 配置后置后本地没有这个实体文件,都被框架放到运行时了,所以需要处理这个逻辑 [Gifur@202397]*/
-    if(ExistsFileA(m_strFilePath))
-    {
-#ifdef RVC_OS_WIN
-		struct _stat64i32 statbuf;
-		_stat64i32(m_strFilePath.GetData(), &statbuf);
-#endif
-        SYSTEMTIME st = GetModifyTime(m_strFilePath.GetData());
-        strUpdateTime = CSimpleStringA::Format("%d-%02d-%02d-%02d:%02d:%02d",
-                                               st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
-	}
-	else
-	{
-#ifdef RVC_OS_WIN
-        SYSTEMTIME st, stLocal;
-		GetSystemTime(&st);
-		SystemTimeToTzSpecificLocalTime(NULL, &st, &stLocal);
-#else
-        SYSTEMTIME stLocal = CSmallDateTime::GetNow().ToSystemTime();
-#endif
-        strUpdateTime = CSimpleStringA::Format("%d-%02d-%02d-%02d:%02d:%02d",
-                                               stLocal.wYear, stLocal.wMonth, stLocal.wDay,
-                                               stLocal.wHour, stLocal.wMinute, stLocal.wSecond);
-    }
-    return strUpdateTime.GetData();
-}
-
-void CenterSettingsMicroServiceHelper::GetTimeoutValue(int& timeout)
-{
-    int timeoutFromConfig = 0;
-    m_pCenterConfig->ReadConfigValueInt("CenterSetting", "Timeout", timeoutFromConfig);
-    if(timeoutFromConfig == 0)
-        return;
-    else
-        timeout = timeoutFromConfig;
-}
-
-#ifdef RVC_OS_WIN
-int CenterSettingsMicroServiceHelper::OnRequest(CenterSettingReq& req, CenterSettingResponse& res, string& errMsg)
-{
-    PROCESS_LINK_CONTEXT("LR0402101SyncCenter")
-	bool ret = m_pHttpFunc->Post(req, res, &nextLink);
-
-	if(ret && res.m_success)
-	{
-		if(!res.m_is_update)
-			return SUCC;
-
-		ConvertGBKToUtf8(res.m_strConfig);
-		string strConfig = res.m_strConfig;
-
-
-		BYTE sm3[32] = {};
-		if(strConfig.length() > 2)
-		{
-			if (!SM3Hash((BYTE*)(strConfig.c_str()), strlen(strConfig.c_str()), sm3))
-			{
-				errMsg = "计算SM3失败";
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("OnRequest")
-					(CSimpleStringA::Format("计算SM3失败(%s)", req.m_url.c_str()));
-				return CalcSM3Fail;
-			}
-			else
-			{
-				int sm3len = sizeof(sm3);
-				char* strsm3 = ConvertBytesToHexStr(sm3, 32);
-
-				if(0 != strcmp(strsm3, res.m_sm3.c_str()))
-				{
-					errMsg = "SM3校验失败";
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("OnRequest")
-						(CSimpleStringA::Format("SM3校验失败(%s)", req.m_url.c_str()));
-					return CheckSM3Fail;
-				}
-
-				m_strVersion = res.m_version_no.c_str();
-				
-				return SUCC;
-			}
-		}
-	}
-	else
-	{
-		//ConvertUtf8ToGBK(res.m_errMsg);
-		errMsg = res.m_errMsg;
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("OnRequest")
-			(CSimpleStringA::Format("访问失败:%s", res.m_errMsg.c_str()));
-
-		if(res.m_sysCode == 28 || res.m_sysCode == 7)
-			return AccessServiceFail;
-
-		return MANUAL;
-	}
-}
-#else
-int CenterSettingsMicroServiceHelper::GetCenterSettingsFromHttp(CenterSettingReq& req, string& errMsg)
-{
-    LOG_FUNCTION();
-    CenterSettingResponse res;
-
-    struct GetCenterSettingReq //Req和Ans的变量名必须和服务端json要求的一致,切记!
-    {
-        string m_terminal_no;
-        string m_version;
-        string m_update_time;
-        string m_config;
-        JSONCONVERT2OBJECT_MEMEBER_REGISTER(m_terminal_no, m_version, m_update_time, m_config)
-    } getCenterSettingReq;
-
-    struct GetCenterSettingAns //Req和Ans的变量名必须和服务端json要求的一致,切记!
-    {
-        bool success;
-        string message;
-        bool is_update;
-        bool is_reset;
-        string version_no;
-        string sm3;
-        string config;
-        JSONCONVERT2OBJECT_MEMEBER_REGISTER(success, message, is_update, is_reset, version_no, sm3, config)
-    }getCenterSettingAns;
-
-    HttpClientResponseResult result;
-    HttpClientRequestConfig config(HttpRequestMethod::POST, req.m_url, &SpGetToken);
-    if (req.m_timeOut > 0) config.SetTimeout(req.m_timeOut);
-
-    getCenterSettingReq.m_terminal_no = req.m_terminal_no;
-    getCenterSettingReq.m_version = req.m_version;
-    getCenterSettingReq.m_update_time = req.m_update_time;
-    getCenterSettingReq.m_config = req.m_config;
-
-    SP::Module::Restful::FulfillRequestJsonBody(&config, getCenterSettingReq);
-
-    Dbg("Geting centtersetting...");
-
-    RestfulClient client = RestfulClient::getInstance();
-    PROCESS_LINK_CONTEXT("LR0402101GetCenterSetting");
-    config.PreDo();
-    client.Do(&config, &result, &nextLink);
-
-    Dbg("ret result.ResponseOK() = %d.", result.ResponseOK());
-    if (!result.ResponseOK()) {
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Do failed: %s", result.WhatError().c_str());
-        errMsg = result.WhatError();
-        return AccessServiceFail;
-    }
-    SP::Module::Restful::CommResponseJson responseStatus;
-    SP::Module::Restful::GetStatusFromDebranchResponse(result.content, responseStatus);
-    if (!responseStatus.IsOperatedOK()) {
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(result.content.c_str());
-        errMsg = responseStatus.WhatError().c_str();
-        return MANUAL;
-    }
-
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s", result.content.length() > 1000 ? result.content.substr(0, 1000).c_str() : result.content.c_str());
-    if (!SP::Module::Restful::ExtractDataFromDebranchResponse(result.content, getCenterSettingAns)) {
-        DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("parse json data node failed: ");
-        errMsg = "解析集中配置返回的信息失败";
-        return UNknown;
-    }
-    //transferblank(centerSettingAns.version_no);
-    ///** 当时粤超开发Windows版本时,要求服务端将数组转化为字符串传送,这边信创为了兼容,需要重新转为数组处理(信创是支持JSON数组) [Gifur@202398]*/
-    //string strConfig = centerSettingAns.config;  
-    //vector<ConfigItem> m_config;
-    //SP::Utility::replaceInPlace(centerSettingAns.config, "\\\"", "\"");
-    //if (!Json2Object(m_config, centerSettingAns.config)) {
-    //    DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("parse config content failed!");
-    //    errMsg = "解析集中配置返回的配置信息失败";
-    //    return UNknown;
-    //}
-    res.Parse(result.content);
-    string strConfig = SP::Utility::GBK2UTF8(res.m_strConfig);
-
-    if (!res.m_is_update) {
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("Centersetting not changed.");
-        errMsg = "集中配置已是最新版本";
-        return EXIST;
-    }
-
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("config length:%d", strConfig.length());
-
-    BYTE sm3[32] = {};
-    if (strConfig.length() > 2) {
-        if (!SM3Hash((BYTE*)(strConfig.c_str()), strConfig.length(), sm3)) {
-            errMsg = "计算SM3失败";
-            DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSettingsFromHttp")("计算SM3失败(%s)", req.m_url.c_str());
-            return CalcSM3Fail;
-        } else {
-            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("sm3:%s", res.m_sm3.c_str());
-            char* strsm3 = SP::Module::Util::ConvertBytesToHexStr(sm3, 32);
-            if (0 != strcmp(strsm3, res.m_sm3.c_str())) {
-                errMsg = "SM3校验失败";
-                DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSettingsFromHttp")("SM3校验失败(%s)", req.m_url.c_str());
-                delete[] strsm3;
-                return CheckSM3Fail;
-            }
-            m_strVersion = res.m_version_no.c_str();
-            delete[] strsm3;
-        }
-
-        if (WriteToConfig(res)) {
-            m_strVersion = res.m_version_no.c_str();
-            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("WriteToConfig m_strVersion:%s", m_strVersion.GetData());
-            m_pEntity->GetFunction()->OpenConfig(Config_CenterSetting, m_pCenterConfig, true);
-            m_pRunConfig->WriteConfigValue("CenterSetting", "version", m_strVersion);
-            UpdateVersion();
-            if (res.m_is_reset) {
-                LogEvent(Severity_Middle, EVENT_MOD_CENTERSETTING_CRITICAL_UPDATE, "Update centersetting with critical items.");
-            }
-            return SUCC;
-        }
-    }
-    return UNknown;
-}
-#endif

+ 0 - 198
Module/mod_CenterSetting/CenterSettingConn.h

@@ -1,198 +0,0 @@
-#ifndef RVC_MOD_CENTERSETTING_CONN_H_
-#define RVC_MOD_CENTERSETTING_CONN_H_
-
-#pragma once
-#include "json/json.h"
-#include "SpSecureClient.h"
-#include "SpIni.h"
-#include "IHttpFunc.h"
-#include "EventCode.h"
-#include <vector>
-#include <string>
-
-#ifdef WITH_CPPRESTSDK_IN_CENTER
-#include "CommEntityRestful.hpp"
-#include "microservices/api_terminal_center_config.h"
-
-struct ModuleConfigItemJson : public MicroServices::API::TerminalV3::ModuleConfigItem
-{
-    JSONCONVERT2OBJECT_MEMEBER_REGISTER(m_moudle, m_name, m_value)
-        JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("moudle", "name", "value")
-};
-
-struct CenterSettingReq
-{
-    CenterSettingReq() :m_terminal_no(""), m_version(""), m_update_time(""),m_url(""),m_timeOut(0) {}
-    std::string m_terminal_no;
-    std::string m_version;
-    std::string m_update_time;
-    /** 兼容用途 [Gifur@202398]*/
-    std::string m_url;
-    int m_timeOut;
-    std::string m_config;
-    std::vector<ModuleConfigItemJson> configs;
-    JSONCONVERT2OBJECT_MEMEBER_REGISTER(m_terminal_no, m_version, configs, m_update_time)
-        JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("terminal_no", "version", "config", "update_time")
-};
-
-struct CenterSettingResponse
-{
-    bool m_is_update;
-    bool m_is_reset;
-    std::string m_sm3;
-    std::string m_version_no;
-    std::vector<ModuleConfigItemJson> m_config;
-    std::string m_strConfig;
-    JSONCONVERT2OBJECT_MEMEBER_REGISTER(m_is_update, m_is_reset, m_sm3, m_version_no, m_strConfig)
-        JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("is_update", "is_reset", "sm3", "version_no", "config")
-};
-
-#else
-
-struct CenterSettingReq : CHTTPReq
-{
-    CenterSettingReq()
-    {
-#if defined(_MSC_VER)
-        m_bTransCode = true;
-#else
-        m_bTransCode = false;
-#endif //_MSC_VER
-    }
-    string m_terminal_no;
-    string m_version;
-    string m_update_time;
-    string m_config;
-
-    virtual string ToJson()
-    {
-        CSimpleStringA reqcontent = CSimpleStringA::Format("{\"terminal_no\":\"%s\", \"version\":\"%s\", \"update_time\":\"%s\", \"config\":[%s]}",
-            m_terminal_no.c_str(), m_version.c_str(), m_update_time.c_str(), m_config.c_str());
-        return reqcontent.GetData();
-    }
-};
-
-struct ConfigItem
-{
-    std::string m_moudle;
-    std::string m_name;
-    std::string m_value;
-
-#ifdef RVC_OS_LINUX
-    // 默认构造函数
-    ConfigItem()
-        : m_moudle(""), m_name(""), m_value("")
-    {
-    }
-
-    // 带参数的构造函数
-    ConfigItem(const std::string& module, const std::string& name, const std::string& value)
-        : m_moudle(module), m_name(name), m_value(value)
-    {
-    }
-
-    // 拷贝构造函数
-    ConfigItem(const ConfigItem& other)
-        : m_moudle(other.m_moudle), m_name(other.m_name), m_value(other.m_value)
-    {
-    }
-#endif
-};
-
-struct CenterSettingResponse : CHTTPRet
-{
-    CenterSettingResponse(){}
-
-    bool m_success;
-    string m_message;
-    bool m_is_update;
-    bool m_is_reset;
-    string m_version_no;
-    string m_sm3;
-    string m_strConfig;
-    vector<ConfigItem> m_config;
-
-    virtual bool Parse(string strData);
-};
-
-#ifdef RVC_OS_LINUX
-#define SAFE_DELETE_HTTPCLIENT(obj)	\
-	do{if(obj != NULL) { obj->Destory(); obj = NULL; }}while(false)
-#endif //RVC_OS_LINUX
-
-#endif //WITH_CPPRESTSDK_IN_CENTER
-
-struct AddVersionReq : CHTTPReq
-{
-    AddVersionReq(){}
-    string m_terminal_no;
-    string m_version;
-    string m_update_time;
-
-    virtual string ToJson()
-    {
-        char reqcontent[256];
-        sprintf(reqcontent, "{\"terminal_no\":\"%s\", \"version_no\":\"%s\", \"terminal_update_time\":\"%s\"}",
-                m_terminal_no.c_str(), m_version.c_str(), m_update_time.c_str());
-        return reqcontent;
-    }
-};
-
-struct AddVersionResponse : CHTTPRet
-{
-    AddVersionResponse() {}
-
-    bool m_success;
-    string m_message;
-
-    virtual bool Parse(string strData);
-};
-
-class CenterSettingsMicroServiceHelper
-{
-public:
-    CenterSettingsMicroServiceHelper(CEntityBase* pEntity);
-#ifdef RVC_OS_WIN
-    int GetCenterSetting();
-#else
-	int GetCenterSetting(bool byHand);
-#endif
-    string GetLocalConfig(); //将集中配置转换成Json串
-    string GetUpdateTime();  //获取集中配置更新时间,如果文件不存在则获取当前系统时间
-    const char* GetErrMsg() { return m_strErrMsg.c_str(); }
-    void GetTimeoutValue(int& timeout);
-    void InitCenterSettingInfo();
-    bool WriteToConfig(const CenterSettingResponse& sResponse);
-    void UpdateVersion();
-    void UpdateUrl(const string& url) { m_strUrl = url.c_str(); };
-
-#ifdef RVC_OS_WIN
-    int OnRequest(CenterSettingReq& req, CenterSettingResponse& res, string& errMsg = string(""));  //轮询域名下载集中配置
-#else
-	int GetCenterSettingsFromHttp(CenterSettingReq& req, string& errMsg);  //轮询域名下载集中配置
-#endif
-
-    string GetCurUrl() { return m_strCurUrl; }
-
-private:
-    string m_strErrMsg;
-    CEntityBase* m_pEntity;
-    CSimpleStringA m_strLastTime;
-    CSystemStaticInfo m_terminalInfo;
-    IHttpFunc* m_pHttpFunc;
-    CAutoArray<CSimpleStringA> m_arrKeys;
-    vector<CSimpleStringA> m_arrURLs;
-
-    CSimpleStringA m_strCurSite;
-    CSmartPointer<IConfigInfo> m_pCenterConfig;
-    CSmartPointer<IConfigInfo> m_pRunConfig;
-    CSimpleStringA m_strFilePath;
-    CSimpleStringA m_strBakPath;
-    CSimpleStringA m_strVersion;
-    CSimpleStringA m_strUrl;
-    vector<CSimpleStringA> m_urlsFromShell;
-    string m_strCurUrl;
-    bool m_isFirst;
-};
-
-#endif //RVC_MOD_CENTERSETTING_CONN_H_

+ 0 - 42
Module/mod_CenterSetting/CenterSettingService.xml

@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="gb2312" ?>
-<entity name="CenterSetting">
-	<class name="CenterSettingService" overlap="true" exclusive="false">
-		<twoway name="Downloadv2" overlap="true">
-			<req>
-				<param name="reqCenterConfigUrl" type="string"/>
-			</req>
-			<res>
-				<param name="downloadStat" type="int"/>
-				<param name="strErrMsg" type="string"/>
-				<param name="retCenterConfigUrl" type="string"/>
-				<param name="HostUrl" type="string"/>
-			</res>
-		</twoway>
-		<oneway name="Hold1" overlap="true">
-		</oneway>
-		<oneway name="Hold2" overlap="true">
-		</oneway>
-		<twoway name="GetAccessUrl" overlap="true">
-			<res>
-				<param name="HostUrl" type="string"/>
-			</res>
-		</twoway>
-		<twoway name="GetCertainAceessUrl" overlap="true">
-			<req>
-				<param name="reqName" type="string"/>
-				<param name="reverse1" type="string"/>
-				<param name="reverse2" type="string"/>
-				<param name="intreverse1" type="int"/>
-				<param name="intreverse2" type="int"/>
-			</req>
-			<res>
-				<param name="CertainAceessUrl" type="string"/>
-				<param name="reverse1" type="string"/>
-				<param name="reverse2" type="string"/>
-				<param name="intreverse1" type="int"/>
-				<param name="intreverse2" type="int"/>
-			</res>
-		</twoway>
-
-	</class>
-</entity>

+ 0 - 255
Module/mod_CenterSetting/CenterSetting_client_g.h

@@ -1,255 +0,0 @@
-
-#ifndef __CENTERSETTING_CLIENT_G_H
-#define __CENTERSETTING_CLIENT_G_H
-
-#pragma once
-
-// This code is generated by spgen tool!
-
-#include "CenterSetting_def_g.h"
-
-namespace CenterSetting {
-class CenterSettingService_ClientBase : public CClientSessionBase {
-public:
-	explicit CenterSettingService_ClientBase(CEntityBase *pEntity) : m_pEntityBase(pEntity), m_bSysManaged(false) {}
-
-	CenterSettingService_ClientBase* operator () (const linkContext &curLink) 
-	{
-		m_context = curLink;
-		return this;
-	}
-
-protected:
-	virtual ~CenterSettingService_ClientBase()
-	{
-		/// override by user
-	}
-public:
-
-	void OnConnectSucceed()
-	{
-		bSessionClosed = false;
-	}
-	void OnClose(ErrorCodeEnum)
-	{
-		bSessionClosed = true;
-	}
-	bool QuerySessionClosed()
-	{
-		return bSessionClosed;
-	}
-	ErrorCodeEnum Connect(CSmartPointer<IAsynWaitSp> &spAsyncWait)
-	{
-		CSmartPointer<IEntityFunction> pFunc = m_pEntityBase->GetFunction();
-		ErrorCodeEnum Error = pFunc->ConnectRemoteEntity(this, "CenterSetting", "CenterSettingService", spAsyncWait);
-		if (Error == Error_Succeed) {
-			m_bSysManaged = true;
-			bSessionClosed = false;
-		}
-		return Error;
-	}
-	ErrorCodeEnum Connect()
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = Connect(spAsyncWait);
-		if (Error == Error_Succeed) {
-			Error = spAsyncWait->WaitAnswer();
-		}
-		return Error;
-	}
-
-	ErrorCodeEnum Downloadv2(CenterSettingService_Downloadv2_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
-	{
-		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
-		CAutoBuffer Buf = SpObject2Buffer(Req);
-		if (m_context.checkEmpty())
-		{
-			m_context.AutoGenerate();
-			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
-			m_context = m_context.upgradeLink();
-		}
-		auto ret = pFunc->AsyncRequest(CenterSettingService_Method_Downloadv2, CenterSettingService_MethodSignature_Downloadv2, Buf, spAsyncWait, m_context, dwTimeout);
-		m_context.clear();
-		return ret;
-	}
-	ErrorCodeEnum Downloadv2(CenterSettingService_Downloadv2_Req &Req, CenterSettingService_Downloadv2_Ans &Ans, DWORD dwTimeout)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = Downloadv2(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-	ErrorCodeEnum Downloadv2(CenterSettingService_Downloadv2_Req &Req, CenterSettingService_Downloadv2_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = Downloadv2(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-	ErrorCodeEnum Downloadv2(CenterSettingService_Downloadv2_Req &Req, CenterSettingService_Downloadv2_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = Downloadv2(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			CSimpleString str;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-
-	ErrorCodeEnum Hold1()
-	{
-		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
-		if (m_context.checkEmpty())
-		{
-			m_context.AutoGenerate();
-			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
-			m_context = m_context.upgradeLink();
-		}
-		auto ret = pFunc->OnewayCall(CenterSettingService_Method_Hold1, CenterSettingService_MethodSignature_Hold1, m_context);
-		m_context.clear();
-		return ret;
-	}
-
-	ErrorCodeEnum Hold2()
-	{
-		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
-		if (m_context.checkEmpty())
-		{
-			m_context.AutoGenerate();
-			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
-			m_context = m_context.upgradeLink();
-		}
-		auto ret = pFunc->OnewayCall(CenterSettingService_Method_Hold2, CenterSettingService_MethodSignature_Hold2, m_context);
-		m_context.clear();
-		return ret;
-	}
-
-	ErrorCodeEnum GetAccessUrl(CenterSettingService_GetAccessUrl_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
-	{
-		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
-		CAutoBuffer Buf = SpObject2Buffer(Req);
-		if (m_context.checkEmpty())
-		{
-			m_context.AutoGenerate();
-			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
-			m_context = m_context.upgradeLink();
-		}
-		auto ret = pFunc->AsyncRequest(CenterSettingService_Method_GetAccessUrl, CenterSettingService_MethodSignature_GetAccessUrl, Buf, spAsyncWait, m_context, dwTimeout);
-		m_context.clear();
-		return ret;
-	}
-	ErrorCodeEnum GetAccessUrl(CenterSettingService_GetAccessUrl_Req &Req, CenterSettingService_GetAccessUrl_Ans &Ans, DWORD dwTimeout)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = GetAccessUrl(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-	ErrorCodeEnum GetAccessUrl(CenterSettingService_GetAccessUrl_Req &Req, CenterSettingService_GetAccessUrl_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = GetAccessUrl(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-	ErrorCodeEnum GetAccessUrl(CenterSettingService_GetAccessUrl_Req &Req, CenterSettingService_GetAccessUrl_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = GetAccessUrl(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			CSimpleString str;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-
-	ErrorCodeEnum GetCertainAceessUrl(CenterSettingService_GetCertainAceessUrl_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
-	{
-		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
-		CAutoBuffer Buf = SpObject2Buffer(Req);
-		if (m_context.checkEmpty())
-		{
-			m_context.AutoGenerate();
-			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
-			m_context = m_context.upgradeLink();
-		}
-		auto ret = pFunc->AsyncRequest(CenterSettingService_Method_GetCertainAceessUrl, CenterSettingService_MethodSignature_GetCertainAceessUrl, Buf, spAsyncWait, m_context, dwTimeout);
-		m_context.clear();
-		return ret;
-	}
-	ErrorCodeEnum GetCertainAceessUrl(CenterSettingService_GetCertainAceessUrl_Req &Req, CenterSettingService_GetCertainAceessUrl_Ans &Ans, DWORD dwTimeout)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = GetCertainAceessUrl(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-	ErrorCodeEnum GetCertainAceessUrl(CenterSettingService_GetCertainAceessUrl_Req &Req, CenterSettingService_GetCertainAceessUrl_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = GetCertainAceessUrl(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-	ErrorCodeEnum GetCertainAceessUrl(CenterSettingService_GetCertainAceessUrl_Req &Req, CenterSettingService_GetCertainAceessUrl_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
-	{
-		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = GetCertainAceessUrl(Req, spAsyncWait, dwTimeout);
-		if (Error == Error_Succeed) {
-			bool bEnd = false;
-			CSimpleString str;
-			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
-			LOG_ASSERT(Error || bEnd);
-		}
-		return Error;
-	}
-
-
-	bool SafeDelete()
-	{
-		if (!m_bSysManaged) {
-			delete this;
-		}
-		return m_bSysManaged;
-	}
-
-protected:
-	bool m_bSysManaged;
-	CEntityBase *m_pEntityBase;
-	linkContext m_context;
-	bool bSessionClosed;
-};
-
-///////////////////////////
-
-} // namespace CenterSetting
-#endif // __CENTERSETTING_CLIENT_G_H

+ 0 - 131
Module/mod_CenterSetting/CenterSetting_def_g.h

@@ -1,131 +0,0 @@
-#ifndef __CENTERSETTING_DEF_G_H
-#define __CENTERSETTING_DEF_G_H
-
-#pragma once
-
-// This code is generated by spgen tool!
-
-#include "SpHelper.h"
-
-namespace CenterSetting {
-//
-// const goes here
-//
-
-#define CenterSettingService_Method_Downloadv2 0
-#define CenterSettingService_Method_Hold1 1
-#define CenterSettingService_Method_Hold2 2
-#define CenterSettingService_Method_GetAccessUrl 3
-#define CenterSettingService_Method_GetCertainAceessUrl 4
-
-#define CenterSettingService_MethodSignature_Downloadv2 -1569222403
-#define CenterSettingService_MethodSignature_Hold1 35758230
-#define CenterSettingService_MethodSignature_Hold2 35758233
-#define CenterSettingService_MethodSignature_GetAccessUrl 1887530540
-#define CenterSettingService_MethodSignature_GetCertainAceessUrl -927544309
-
-#define CenterSettingService_LogCode_Downloadv2 "QLR040210100"
-#define CenterSettingService_LogCode_Hold1 "QLR040210101"
-#define CenterSettingService_LogCode_Hold2 "QLR040210102"
-#define CenterSettingService_LogCode_GetAccessUrl "QLR040210103"
-#define CenterSettingService_LogCode_GetCertainAceessUrl "QLR040210104"
-
-struct CenterSettingService_Downloadv2_Req
-{
-	CSimpleStringA reqCenterConfigUrl;
-
-	void Serialize(SpBuffer &Buf)
-	{
-		auto & buf = Buf & reqCenterConfigUrl;
-	}
-
-};
-
-struct CenterSettingService_Downloadv2_Ans
-{
-	int downloadStat;
-	CSimpleStringA strErrMsg;
-	CSimpleStringA retCenterConfigUrl;
-	CSimpleStringA HostUrl;
-
-	void Serialize(SpBuffer &Buf)
-	{
-		auto & buf = Buf & downloadStat & strErrMsg & retCenterConfigUrl & HostUrl;
-	}
-
-};
-
-struct CenterSettingService_Hold1_Info
-{
-
-	void Serialize(SpBuffer &Buf)
-	{
-	}
-
-};
-
-struct CenterSettingService_Hold2_Info
-{
-
-	void Serialize(SpBuffer &Buf)
-	{
-	}
-
-};
-
-struct CenterSettingService_GetAccessUrl_Req
-{
-
-	void Serialize(SpBuffer &Buf)
-	{
-	}
-
-};
-
-struct CenterSettingService_GetAccessUrl_Ans
-{
-	CSimpleStringA HostUrl;
-
-	void Serialize(SpBuffer &Buf)
-	{
-		auto & buf = Buf & HostUrl;
-	}
-
-};
-
-struct CenterSettingService_GetCertainAceessUrl_Req
-{
-	CSimpleStringA reqName;
-	CSimpleStringA reverse1;
-	CSimpleStringA reverse2;
-	int intreverse1;
-	int intreverse2;
-
-	void Serialize(SpBuffer &Buf)
-	{
-		auto & buf = Buf & reqName & reverse1 & reverse2 & intreverse1 & intreverse2;
-	}
-
-};
-
-struct CenterSettingService_GetCertainAceessUrl_Ans
-{
-	CSimpleStringA CertainAceessUrl;
-	CSimpleStringA reverse1;
-	CSimpleStringA reverse2;
-	int intreverse1;
-	int intreverse2;
-
-	void Serialize(SpBuffer &Buf)
-	{
-		auto & buf = Buf & CertainAceessUrl & reverse1 & reverse2 & intreverse1 & intreverse2;
-	}
-
-};
-
-
-///////////////////////////
-
-} // namespace CenterSetting
-
-#endif // __CENTERSETTING_DEF_G_H

+ 0 - 218
Module/mod_CenterSetting/CenterSetting_server_g.h

@@ -1,218 +0,0 @@
-
-#ifndef __CENTERSETTING_SERVER_G_H
-#define __CENTERSETTING_SERVER_G_H
-
-#pragma once
-
-// This code is generated by spgen tool!
-
-#include "CenterSetting_def_g.h"
-
-namespace CenterSetting {
-class CenterSettingService_ServerSessionBase : public CServerSessionBase
-{
-public:
-	CenterSettingService_ServerSessionBase()
-	{
-		/// override by user
-	}
-
-	virtual ~CenterSettingService_ServerSessionBase()
-	{
-		/// override by user
-	}
-
-	virtual bool IsExclusive() { return false; }
-
-	virtual bool IsSessionOverlap() { return true; }
-
-	virtual ErrorCodeEnum GetMessageAttr(DWORD dwMessageID, DWORD dwSignature, bool &bOverlap)
-	{
-		ErrorCodeEnum Error = Error_Succeed;
-		switch (dwMessageID) {
-		case CenterSettingService_Method_Downloadv2:
-			if (dwSignature == CenterSettingService_MethodSignature_Downloadv2) {
-				bOverlap = true;
-			} else {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		case CenterSettingService_Method_Hold1:
-			if (dwSignature == CenterSettingService_MethodSignature_Hold1) {
-				bOverlap = true;
-			} else {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		case CenterSettingService_Method_Hold2:
-			if (dwSignature == CenterSettingService_MethodSignature_Hold2) {
-				bOverlap = true;
-			} else {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		case CenterSettingService_Method_GetAccessUrl:
-			if (dwSignature == CenterSettingService_MethodSignature_GetAccessUrl) {
-				bOverlap = true;
-			} else {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		case CenterSettingService_Method_GetCertainAceessUrl:
-			if (dwSignature == CenterSettingService_MethodSignature_GetCertainAceessUrl) {
-				bOverlap = true;
-			} else {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		default:
-			Error = Error_MethodNotFound;
-			break;
-		}
-		return Error;
-	}
-
-	int CheckMessageSignature(DWORD dwMessageID, DWORD dwSignature)
-	{
-		ErrorCodeEnum Error = Error_Succeed;
-		switch (dwMessageID) {
-		case CenterSettingService_Method_Downloadv2:
-			if (dwSignature != CenterSettingService_MethodSignature_Downloadv2) {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		case CenterSettingService_Method_Hold1:
-			if (dwSignature != CenterSettingService_MethodSignature_Hold1) {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		case CenterSettingService_Method_Hold2:
-			if (dwSignature != CenterSettingService_MethodSignature_Hold2) {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		case CenterSettingService_Method_GetAccessUrl:
-			if (dwSignature != CenterSettingService_MethodSignature_GetAccessUrl) {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		case CenterSettingService_Method_GetCertainAceessUrl:
-			if (dwSignature != CenterSettingService_MethodSignature_GetCertainAceessUrl) {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		default:
-			Error = Error_MethodNotFound;
-			break;
-		}
-		return Error;
-	}
-
-	virtual void Handle_Downloadv2(SpReqAnsContext<CenterSettingService_Downloadv2_Req, CenterSettingService_Downloadv2_Ans>::Pointer ctx)
-	{
-	/// override by user
-	}
-
-	virtual void Handle_Hold1(SpOnewayCallContext<CenterSettingService_Hold1_Info>::Pointer ctx)
-	{
-	/// override by user
-	}
-
-	virtual void Handle_Hold2(SpOnewayCallContext<CenterSettingService_Hold2_Info>::Pointer ctx)
-	{
-	/// override by user
-	}
-
-	virtual void Handle_GetAccessUrl(SpReqAnsContext<CenterSettingService_GetAccessUrl_Req, CenterSettingService_GetAccessUrl_Ans>::Pointer ctx)
-	{
-	/// override by user
-	}
-
-	virtual void Handle_GetCertainAceessUrl(SpReqAnsContext<CenterSettingService_GetCertainAceessUrl_Req, CenterSettingService_GetCertainAceessUrl_Ans>::Pointer ctx)
-	{
-	/// override by user
-	}
-
-	virtual void OnRequest(CSmartPointer<ITransactionContext> pTransactionContext)
-	{
-		CAutoBuffer Buf;
-		DWORD dwMessageID;
-		DWORD dwMessageSignature;
-		ErrorCodeEnum Error = pTransactionContext->GetReceiveBuffer(dwMessageID, dwMessageSignature, Buf);
-		if (Error == Error_Succeed) {
-#ifdef DEBUG
-			assert(CheckMessageSignature(dwMessageID, dwMessageSignature) == Error_Succeed);
-#else
-			if (CheckMessageSignature(dwMessageID, dwMessageSignature) != Error_Succeed) {
-				pTransactionContext->SendAnswer(Error_MethodSignatureFailed);
-				return;
-			}
-#endif
-			switch (dwMessageID) {
-				case CenterSettingService_Method_Downloadv2:
-					{
-						SpReqAnsContext<CenterSettingService_Downloadv2_Req,CenterSettingService_Downloadv2_Ans>::Pointer ctx;
-						ctx.Attach(new SpReqAnsContext<CenterSettingService_Downloadv2_Req,CenterSettingService_Downloadv2_Ans>(pTransactionContext));
-						SpBuffer2Object(Buf, ctx->Req);
-						pTransactionContext->GetLinkContext(ctx->link);
-						EntityResource::setLink(ctx->link);
-						Handle_Downloadv2(ctx);
-					}
-					break;
-				case CenterSettingService_Method_Hold1:
-					{
-						SpOnewayCallContext<CenterSettingService_Hold1_Info>::Pointer ctx;
-						ctx.Attach(new SpOnewayCallContext<CenterSettingService_Hold1_Info>());
-						SpBuffer2Object(Buf, ctx->Info);
-						pTransactionContext->GetLinkContext(ctx->link);
-						EntityResource::setLink(ctx->link);
-						Handle_Hold1(ctx);
-					}
-					break;
-				case CenterSettingService_Method_Hold2:
-					{
-						SpOnewayCallContext<CenterSettingService_Hold2_Info>::Pointer ctx;
-						ctx.Attach(new SpOnewayCallContext<CenterSettingService_Hold2_Info>());
-						SpBuffer2Object(Buf, ctx->Info);
-						pTransactionContext->GetLinkContext(ctx->link);
-						EntityResource::setLink(ctx->link);
-						Handle_Hold2(ctx);
-					}
-					break;
-				case CenterSettingService_Method_GetAccessUrl:
-					{
-						SpReqAnsContext<CenterSettingService_GetAccessUrl_Req,CenterSettingService_GetAccessUrl_Ans>::Pointer ctx;
-						ctx.Attach(new SpReqAnsContext<CenterSettingService_GetAccessUrl_Req,CenterSettingService_GetAccessUrl_Ans>(pTransactionContext));
-						SpBuffer2Object(Buf, ctx->Req);
-						pTransactionContext->GetLinkContext(ctx->link);
-						EntityResource::setLink(ctx->link);
-						Handle_GetAccessUrl(ctx);
-					}
-					break;
-				case CenterSettingService_Method_GetCertainAceessUrl:
-					{
-						SpReqAnsContext<CenterSettingService_GetCertainAceessUrl_Req,CenterSettingService_GetCertainAceessUrl_Ans>::Pointer ctx;
-						ctx.Attach(new SpReqAnsContext<CenterSettingService_GetCertainAceessUrl_Req,CenterSettingService_GetCertainAceessUrl_Ans>(pTransactionContext));
-						SpBuffer2Object(Buf, ctx->Req);
-						pTransactionContext->GetLinkContext(ctx->link);
-						EntityResource::setLink(ctx->link);
-						Handle_GetCertainAceessUrl(ctx);
-					}
-					break;
-				default:
-					assert(0);
-					break;
-			}
-			
-		} else {
-			pTransactionContext->SendAnswer(Error);
-		}
-	}
-
-};
-
-
-///////////////////////////
-
-} // namespace CenterSetting
-#endif // __CENTERSETTING_SERVER_G_H

+ 0 - 4
Module/mod_CenterSetting/ChangeLog

@@ -1,4 +0,0 @@
-* 网络不通时不切备用地址(廖桂发,2021年1月26日)
-* 处理主动下载集中配置的问题(廖桂发,2020年12月26日)
-* 2020年10月27日 合并国密版本的代码
-* 2020-7-3 调通与分行服务进行通信的功能,双活机制中用到

+ 0 - 19
Module/mod_CenterSetting/Event.h

@@ -1,19 +0,0 @@
-#pragma once
-
-enum CenterSetting_UserErrorCode
-{
-    CenterSetting_UserErrorCode_Start = 0x10100200,
-    ERR_MOD_CENTERSETTING_CONNECT_FAILED,                //获取集中配置失败
-    EVENT_MOD_CENTERSETTING_CONNECT_SUCC,                //获取集中配置成功
-    ERR_MOD_CENTERSETTING_HTTP_FAILED,                   //HTTP连接失败
-    ERR_MOD_CENTERSETTING_WRITE_FAILED,                  //集中配置写入失败
-    ERR_MOD_CENTERSETTING_LOST,		          		     //集中配置丢失
-    EVENT_MOD_CENTERSETTING_UPDATE_VERSION_FAILED,    	 //上传版本号失败
-    EVENT_MOD_CENTERSETTING_UPDATE_VERSION_SUCC,      	 //上传版本号成功
-    EVENT_MOD_CENTERSETTING_CENTER,               //总行模式
-    EVENT_MOD_CENTERSETTING_UPDATE_CENTER_FORCE,               //强制下载集中配置
-    EVENT_MOD_CENTERSETTING_UPDATE_CENTER,               //集中配置发生更新(总行)  
-};
-
-// 下载成功	事件	2	0x10100011	向后台成功进行配置下载,或完成比较当前序列化版本为后台最新版本。
-#define EVENT_MOD_CENTERSETTING_DOWNOK	0x10100011

+ 0 - 239
Module/mod_CenterSetting/mod_centersetting.cpp

@@ -1,239 +0,0 @@
-#include "stdafx.h"
-#include "SpBase.h"
-#include "Event.h"
-#include "mod_centersetting.h"
-#include <regex>
-#include "fileutil.h"
-#include "array.h"
-using namespace std;
-
-CServerSessionBase* CCenterSettingEntity::OnNewSession(const char* /*pszRemoteEntityName*/, const char* /*pszClass*/)
-{
-	return new CCenterSettingService(this);
-}
-
-void CCenterSettingEntity::OnStarted()
-{
-	GetFunction()->GetPath("CenterSetting", m_strFilePath);
-	GetFunction()->OpenConfig(Config_CenterSetting, m_pCenterConfig);
-
-	GetFunction()->GetPath("RunInfo", m_strBakPath);
-
-#ifdef RVC_OS_WIN
-	m_strBakPath += "\\runcfg\\CenterSetting.ini";
-#else
-	m_strBakPath += SPLIT_SLASH_STR "runcfg" SPLIT_SLASH_STR "CenterSetting.ini";
-#endif
-
-	m_pMicroServiceHelper = new CenterSettingsMicroServiceHelper(this);
-
-	if(!m_pCenterConfig->storageInMem())
-	{
-		m_isUseMemCfg = false;
-		BeginDownloadCenterSetting();
-	}
-	else
-	{
-		m_isUseMemCfg = true;
-	}
-
-	// 启动轮询定时器
-	const DWORD interval = 60000 * 5;
-	GetFunction()->SetTimer(1, this, interval);
-}
-
-void CCenterSettingEntity::OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer<ITransactionContext> pTransactionContext)
-{
-	GetFunction()->KillTimer(1);
-	pTransactionContext->SendAnswer(Error_Succeed);
-}
-
-ErrorCodeEnum CCenterSettingEntity::BeginDownloadCenterSetting(bool bByHand, const string& url)
-{
-	LOG_FUNCTION();
-#ifdef _MSC_VER
-	EnterCriticalSection(&m_lock);
-#else
-	std::unique_lock<std::mutex> lock1(m_lock);
-#endif
-
-	if(!url.empty())
-	{
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("update centersettings url...");
-		m_pMicroServiceHelper->UpdateUrl(url);
-	}
-
-#ifdef RVC_OS_WIN
-	int rc = m_pMicroServiceHelper->GetCenterSetting();
-#else
-	int rc = m_pMicroServiceHelper->GetCenterSetting(bByHand);
-#endif
-
-	if(EXIST == rc)
-	{
-	}
-	else if(SUCC == rc)
-	{
-		LogWarn(Severity_Low, Error_Succeed, EVENT_MOD_CENTERSETTING_UPDATE_CENTER,
-				CSimpleStringA::Format("下载集中配置成功:%s", m_pMicroServiceHelper->GetCurUrl().c_str()));
-		LogEvent(Severity_Low, EVENT_MOD_CENTERSETTING_UPDATE_CENTER, "Update Centersetting.");
-		if (bByHand)
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR040210101")("手工下载集中配置成功");
-		else
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR0402101Z01")("自动下载集中配置成功");
-	}
-	else
-	{
-		LogWarn(Severity_High, Error_Unexpect, ERR_MOD_CENTERSETTING_CONNECT_FAILED,
-				CSimpleStringA::Format("下载集中配置失败:%s", m_pMicroServiceHelper->GetErrMsg()));
-		if (!bByHand)
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402101Z01").setResultCode("RTA1104")("集中配置下载失败");
-	}
-
-	if(m_spDownloadCall != NULL)
-	{
-		m_spDownloadCall->Ans.downloadStat = rc;
-		m_spDownloadCall->Ans.retCenterConfigUrl = m_pMicroServiceHelper->GetCurUrl().c_str();
-
-		if(rc == AllAddressNull)
-		{
-			m_spDownloadCall->Ans.strErrMsg = "所有地址都为空,请检查终端版本";
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040210101").setResultCode("RTA1101")("所有集中配置下载地址都为空");
-		}
-		else if(rc == AccessServiceFail)
-		{
-			m_spDownloadCall->Ans.strErrMsg = "网络异常,请检查网络连接情况";
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040210101").setResultCode("RTA1102")("网络异常,请检查网络连接情况");
-		}
-		else if(rc == CalcSM3Fail || rc == CheckSM3Fail)
-		{
-			m_spDownloadCall->Ans.strErrMsg = "集中配置内容校验失败,请重试";
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040210101").setResultCode("RTA1103")("集中配置内容校验失败");
-		}
-		else if(rc == MANUAL)
-		{
-			m_spDownloadCall->Ans.strErrMsg = "集中配置下载失败";
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040210101").setResultCode("RTA1104")("集中配置下载失败");
-		}
-		else if(rc == EXIST)
-		{
-			m_spDownloadCall->Ans.strErrMsg = "集中配置已是最新版本";
-		}
-
-		CSimpleStringA hostUrl;
-		m_pCenterConfig->ReadConfigValue("AccessAuthorization", "HostInitUrl", hostUrl);
-		m_spDownloadCall->Ans.HostUrl = hostUrl;
-
-		m_spDownloadCall->Answer(Error_Succeed);
-		m_spDownloadCall.Clear();
-	}
-#ifdef _MSC_VER
-	LeaveCriticalSection(&m_lock);
-#endif
-	return Error_Succeed;
-}
-
-ErrorCodeEnum CCenterSettingEntity::DownloadCenterSetting(SpReqAnsContext<CenterSettingService_Downloadv2_Req, CenterSettingService_Downloadv2_Ans>::Pointer sp)
-{
-	if (m_spDownloadCall != NULL)
-	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DownloadCenterSetting")
-			("last download call not complet");
-		sp->Answer(Error_Duplication);
-		return Error_Duplication;
-	}
-
-	m_spDownloadCall = sp;
-	ErrorCodeEnum error = BeginDownloadCenterSetting(true, sp->Req.reqCenterConfigUrl.GetData());
-	if (error != Error_Succeed) {
-		m_spDownloadCall = nullptr;
-		if (sp != NULL) {
-			sp->Answer(Error_Succeed);
-		}
-		return error;
-	}
-	return Error_Succeed;
-}
-
-DWORD getCenterCfgThread(LPVOID param)
-{
-	CCenterSettingEntity* req = (CCenterSettingEntity*)param;
-	bool isUpdate = false, isReset = false;
-	CSimpleString version;
-	if(false == req->GetFunction()->HasPrivilege())
-	{
-		LogWarn(Severity_High, Error_Unexpect, ERR_MOD_CENTERSETTING_CONNECT_FAILED,
-			CSimpleStringA::Format("下载集中配置失败:%s do not has privilege", __FUNCTION__));
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402101Z01").setResultCode("RTA1104")("集中配置下载失败");
-		return -1;
-	}
-
-
-	auto ret = req->GetFunction()->GetPrivilegeFunction()->TryUpdateCenterCfg(isUpdate, isReset, version);
-	if (ret != ErrorCodeEnum::Error_Succeed)
-	{
-		LogWarn(Severity_High, Error_Unexpect, ERR_MOD_CENTERSETTING_CONNECT_FAILED,
-			CSimpleStringA::Format("下载集中配置失败:%d", ret));
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402101Z01").setResultCode("RTA1104")("集中配置下载失败");
-		return -1;
-	}
-
-	if (!isUpdate)
-	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("Centersetting not changed from spshell");
-		return -1;
-	}
-
-	LogWarn(Severity_Low, Error_Succeed, EVENT_MOD_CENTERSETTING_UPDATE_CENTER,
-		CSimpleStringA::Format("下载集中配置成功,版本号变更成:%s", version.GetData()));
-	LogEvent(Severity_Low, EVENT_MOD_CENTERSETTING_UPDATE_CENTER, "Update Centersetting.");
-
-	if (isReset)
-		LogEvent(Severity_Middle, EVENT_MOD_CENTERSETTING_CRITICAL_UPDATE, "SpShell:Update centersetting with critical items.");
-	return 0;
-}
-
-void CCenterSettingEntity::OnTimeout(DWORD dwTimerID)
-{
-	if(m_isUseMemCfg)
-	{
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("use memory config....");
-		CloseHandle(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&getCenterCfgThread, this, 0, NULL));
-	} 
-	else
-	{
-		BeginDownloadCenterSetting();
-	}
-		
-}
-
-ErrorCodeEnum CCenterSettingEntity::GetAccessUrl(CSimpleStringA& url) //初始化地址
-{
-	CSimpleStringA hostInitUrl;
-	m_pCenterConfig->ReadConfigValue("AccessAuthorization", "HostInitUrl", hostInitUrl);
-	if(hostInitUrl.IsNullOrEmpty())
-		url = "初始化地址为空";
-	else
-		url = hostInitUrl;
-
-	return Error_Succeed;
-}
-
-ErrorCodeEnum CCenterSettingEntity::GetCertainAceessUrl(CSimpleStringA& accessName, CSimpleStringA& url) //准入地址
-{
-	LOG_FUNCTION();
-	CSimpleStringA tUrl;
-	m_pCenterConfig->ReadConfigValue("AccessAuthorization", accessName.GetData(), tUrl);
-	if (tUrl.IsNullOrEmpty())
-		url = "地址为空";
-	else
-		url = tUrl;
-
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("准入地址 = %s", url.GetData());
-	return Error_Succeed;
-}
-
-SP_BEGIN_ENTITY_MAP()
-	SP_ENTITY(CCenterSettingEntity)
-SP_END_ENTITY_MAP()
-

+ 0 - 105
Module/mod_CenterSetting/mod_centersetting.h

@@ -1,105 +0,0 @@
-#ifndef RVC_MOD_CENTERSETTING_H__
-#define RVC_MOD_CENTERSETTING_H__
-
-#pragma once
-
-#include "CenterSetting_server_g.h"
-using namespace CenterSetting;
-#include "CenterSettingConn.h"
-#include <regex>
-#include <map>
-#include <string>
-#ifdef RVC_OS_LINUX
-#include <mutex>
-#endif
-using namespace std;
-
-enum DownloadStat
-{
-	SUCC = 1,
-	AccessServiceFail = 2,
-	EXIST = 3,
-	MANUAL = 4,
-	AllAddressNull = 5,
-	CalcSM3Fail = 6,
-	CheckSM3Fail = 7,
-	UNknown = 8
-};
-
-static void HTTPLogCallback(const char* msg){
-}
-
-class CCenterSettingEntity : public CEntityBase, public ITimerListener
-{
-public:
-	CCenterSettingEntity() : m_strFilePath(true){}
-	virtual ~CCenterSettingEntity() {}
-	virtual const char* GetEntityName() const { return "CenterSetting"; }
-	virtual bool IsService()const{ return true; }
-
-	virtual void OnStarted();
-	virtual void OnPreClose(EntityCloseCauseEnum eCloseCause, CSmartPointer<ITransactionContext> pTransactionContext);
-	virtual void OnTimeout(DWORD dwTimerID);
-	virtual CServerSessionBase* OnNewSession(const char* /*pszRemoteEntityName*/, const char* /*pszClass*/);
-
-	ErrorCodeEnum DownloadCenterSetting(SpReqAnsContext<CenterSettingService_Downloadv2_Req, CenterSettingService_Downloadv2_Ans>::Pointer sp);
-	ErrorCodeEnum GetAccessUrl(CSimpleStringA &url);
-	ErrorCodeEnum GetCertainAceessUrl(CSimpleStringA &accessName, CSimpleStringA& url);
-
-private:
-	ErrorCodeEnum BeginDownloadCenterSetting(bool bByHand = false, const string& url = "");
-
-private:
-
-	CenterSettingsMicroServiceHelper* m_pMicroServiceHelper;
-
-	CSimpleStringA m_strFilePath;
-	CSmartPointer<IConfigInfo> m_pCenterConfig;
-
-	CSimpleStringA m_strBakPath;
-
-#ifdef _MSC_VER
-	CRITICAL_SECTION m_lock;
-#else
-	std::mutex m_lock;
-#endif
-
-	SpReqAnsContext<CenterSettingService_Downloadv2_Req, CenterSettingService_Downloadv2_Ans>::Pointer m_spDownloadCall;
-	friend class CCenterSettingConn;
-	bool m_isUseMemCfg;
-};
-
-class CCenterSettingService : public CenterSettingService_ServerSessionBase
-{
-public:
-	CCenterSettingService(CCenterSettingEntity* pEntity) :m_pEntity(pEntity){}
-	virtual ~CCenterSettingService(){}
-
-	virtual void Handle_Downloadv2(SpReqAnsContext<CenterSettingService_Downloadv2_Req, CenterSettingService_Downloadv2_Ans>::Pointer ctx)
-	{
-		DbgToBeidou(ctx->link, __FUNCTION__)();
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(CenterSettingService_LogCode_Downloadv2).setAPI(__FUNCTION__)(__FUNCTION__);
-		m_pEntity->DownloadCenterSetting(ctx);
-	}
-
-	/** 有必要废弃,采用通用化的接口获取即可,特别是要JS化时 [Gifur@2023823]*/
-	virtual void Handle_GetAccessUrl(SpReqAnsContext<CenterSettingService_GetAccessUrl_Req, CenterSettingService_GetAccessUrl_Ans>::Pointer ctx)
-	{
-		DbgToBeidou(ctx->link, __FUNCTION__)();
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(CenterSettingService_LogCode_GetAccessUrl).setAPI(__FUNCTION__)(__FUNCTION__);
-		auto rc = m_pEntity->GetAccessUrl(ctx->Ans.HostUrl); //获取初始化地址,是的,就是初始化地址,不要在意这里的名称问题,之前同事开发接口的时候估计随手一打
-		ctx->Answer(rc);
-	}
-
-	virtual void Handle_GetCertainAceessUrl(SpReqAnsContext<CenterSettingService_GetCertainAceessUrl_Req, CenterSettingService_GetCertainAceessUrl_Ans>::Pointer ctx)
-	{
-		DbgToBeidou(ctx->link, __FUNCTION__)();
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(CenterSettingService_LogCode_GetCertainAceessUrl).setAPI(__FUNCTION__)(__FUNCTION__);
-		auto rc = m_pEntity->GetCertainAceessUrl(ctx->Req.reqName, ctx->Ans.CertainAceessUrl); //获取准入地址,这个接口是后面加的
-		ctx->Answer(rc);
-	}
-private:
-	CCenterSettingEntity* m_pEntity;
-};
-
-#endif /*RVC_MOD_CENTERSETTING_H__*/

+ 0 - 3
Module/mod_CenterSetting/test/testCenterSettingEntity.cpp

@@ -1,3 +0,0 @@
-
-#include "mod_centersetting.h"
-

+ 377 - 303
Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp

@@ -49,7 +49,6 @@
 #pragma comment(lib, "WtsApi32.lib")
 #include "Mmdeviceapi.h"
 #include "Propidl.h"
-#include "Functiondiscoverykeys_devpkey.h"
 #pragma comment(lib, "pdh.lib")
 #pragma comment(lib,"winmm.lib" )
 #pragma comment(lib, "shell32.lib")
@@ -63,8 +62,6 @@
 const int MAX_MAINLINK_CHECK_TIME = 5000;
 const int TIMER_MAINLINK_CHECK = 4;
 #else
-const int TIMER_ID_CLEARVIDEO_ENHANCE = 1;
-const int THOUSAND = 1024;
 const int MILLION = 1048576;
 #endif // RVC_OS_LINUX
 static int hardwareCheckTime = 60 * 1000;  //初始化硬件检测间隔
@@ -76,11 +73,7 @@ static int memWarnThreshold = 10;    //初始化CUP、内存告警阈值次数
 static int diskCheckTime = 4 * 60 * 60 * 1000; //初始化硬盘检测间隔
 static int diskCheckFlag = 1;
 
-#define DIV (1024 * 1024)
-#define DAY_DIV (24 * 60 * 60)
-#define HOURS_DIV (60 * 60)
-#define MINUS_DIV (60)
-
+#define MAX_SOFTWARE_INSTALLED_DETECT_COUNT 50
 #ifndef RVC_OS_LINUX
 #define ENCODING (X509_ASN_ENCODING | PKCS_7_ASN_ENCODING) 
 #endif // !RVC_OS_LINUX
@@ -98,7 +91,6 @@ const char* CMB_LINK_FILE_NAME = "招商银行可视柜台.lnk";
 #endif
 const char* STRATUP_FILENAME_FROM_SCRIPTS = "spexplorerauto.lnk";
 
-
 #if defined(RVC_OS_WIN)
 //https://blog.csdn.net/aflyeaglenku/article/details/51742820
 typedef struct _dmi_header
@@ -132,7 +124,6 @@ void ResourceWatcherFSM::GetAutoStartFile(std::string& userDirPath, std::vector<
 				char* filename = strrchr(file, '\\');
 				if (filename != NULL) { filename += 1; }
 				else { filename = file; }
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("filename:%s", filename);
 				pubDirFiles.push_back(std::string(filename));
 			}
 			toolkit_array_free2(arr);
@@ -150,7 +141,6 @@ void ResourceWatcherFSM::GetAutoStartFile(std::string& userDirPath, std::vector<
 				char* filename = strrchr(file, '\\');
 				if (filename != NULL) { filename += 1; }
 				else { filename = file; }
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("filename:%s", filename);
 				userDirFiles.push_back(std::string(filename));
 			}
 			toolkit_array_free2(arr);
@@ -160,11 +150,25 @@ void ResourceWatcherFSM::GetAutoStartFile(std::string& userDirPath, std::vector<
 
 #endif //RVC_OS_WIN
 
+struct SetupSoftInfo
+{
+	std::string displayName;       //软件名称
+	std::string publisher;         //发行商
+	std::string displayVersion;    //版本
+	std::string installDate;       //安装日期
+	std::string uninstallString;   //卸载命令及参数
+    bool quietFalg;
+    bool systemCompoentFalg;
+	void Display()
+	{
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("软件名称:%s|发行商:%s|版本:%s|安装日期:%s|卸载命令:%s|系统组件:%s",displayName.c_str(), publisher.c_str(), displayVersion.c_str(), installDate.c_str(), uninstallString.c_str(), systemCompoentFalg ? "Y":"N");
+	}
+};
+
 ResourceWatcherFSM::ResourceWatcherFSM(void)
-    :m_strTerminalNo(true),
-    m_bFirstRunAfterBoot(FALSE),
+    :m_bFirstRunAfterBoot(FALSE),
     m_cpuTop(0), flag4DeleteKeyAutoStartFile(false), flag4DoAutoStartTaskIgnoreBoot(FALSE), m_skipDesktopDetect(FALSE)
-    , m_strCurrentUserName(true), m_strLoginedUserName(true)
+    , m_strLoginedUserName(true)
 {
 #ifdef RVC_OS_WIN
     m_iNonSignedTotal = 0;
@@ -172,7 +176,6 @@ ResourceWatcherFSM::ResourceWatcherFSM(void)
 #endif // RVC_OS_WIN
 }
 
-
 ResourceWatcherFSM::~ResourceWatcherFSM(void)
 {
 }
@@ -181,8 +184,6 @@ void ResourceWatcherFSM::s0_on_entry()
 {
 #if defined(RVC_OS_WIN)
     this->PostEventFIFO(new RunEvent());
-    BOOL fInstallBySetup(FALSE);
-    ErrorCodeEnum rc = DetectVTMInstalledBySetup(fInstallBySetup);
 #endif //RVC_OS_WIN
 }
 
@@ -225,49 +226,6 @@ void ResourceWatcherFSM::s1_on_exit()
 {
 }
 
-void ResourceWatcherFSM::s2_on_entry()
-{
-}
-
-unsigned int ResourceWatcherFSM::s2_on_event(FSMEvent* e)
-{
-    unsigned int unRes = 0;
-    switch (e->iEvt)
-    {
-    case USER_EVT_RUN:
-    {
-        e->SetHandled();
-    }
-    break;
-    }
-    return unRes;
-}
-
-void ResourceWatcherFSM::s2_on_exit()
-{
-}
-
-void ResourceWatcherFSM::s3_on_entry()
-{
-}
-
-unsigned int ResourceWatcherFSM::s3_on_event(FSMEvent* e)
-{
-    unsigned int unRes = 0;
-    switch (e->iEvt)
-    {
-    case USER_EVT_RUN:
-    {
-        e->SetHandled();
-    }
-    break;
-    }
-    return unRes;
-}
-
-void ResourceWatcherFSM::s3_on_exit()
-{
-}
 
 #ifdef RVC_OS_LINUX
 bool ResourceWatcherFSM::GetMonitorInfo(CSimpleStringA& outInfo)
@@ -346,9 +304,9 @@ void ResourceWatcherFSM::TriggerAtStatusChanged(bool bMStatus)
             else {
                 RecoverDDEClipboardEnable();
             }
-            GetEntityBase()->GetFunction()->PostThreadPoolTask(new DetectSoftwareInstallStatusTask(this));
 #endif //RVC_OS_LINUX
             AlarmSystemBasicInfo();
+            GetEntityBase()->GetFunction()->PostThreadPoolTask(new DetectSoftwareInstallStatusTask(this));
         }
     }
 }
@@ -364,17 +322,10 @@ ErrorCodeEnum ResourceWatcherFSM::OnInit()
     GetEntityBase()->GetFunction()->OpenConfig(Config_Run, spRunConfig);
     GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spCtSettingConfig);
     erroCode = GetEntityBase()->GetFunction()->GetSystemStaticInfo(m_RvcSysinfo);
-    m_strTerminalNo = m_RvcSysinfo.strTerminalID;
     m_bFirstRunAfterBoot = DetectIsFirstRunAtBoot();
     if (m_bFirstRunAfterBoot) {
         DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("First time to run after system boot.");
     }
-#if defined(RVC_OS_WIN)
-    if (m_bFirstRunAfterBoot) {
-
-    }
-    
-#endif //RVC_OS_WIN
 
     spCtSettingConfig->ReadConfigValueInt(m_pEntity->GetEntityName(), "DisplayCnt", m_iNonSignedDisplay);
     if (m_iNonSignedDisplay <= 0)
@@ -444,16 +395,10 @@ void ResourceWatcherFSM::AfterInit()
 
 #if defined(RVC_OS_WIN)
     InitUserInfo();
-    if (m_bFirstRunAfterBoot) {
+    if (m_bFirstRunAfterBoot || flag4DoAutoStartTaskIgnoreBoot) {
         InitCustomAutoStartFileSheet();
         AggerateAutoStatTask* task = new AggerateAutoStatTask(this);
 		GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
-    }
-    else if(flag4DoAutoStartTaskIgnoreBoot){
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Do AutoStart Job from CenterSettings");
-		InitCustomAutoStartFileSheet();
-		AggerateAutoStatTask* task = new AggerateAutoStatTask(this);
-		GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
     }
 	DetectVersionHasChangedAndWarnCover();
 #else
@@ -533,39 +478,104 @@ ErrorCodeEnum ResourceWatcherFSM::BizLinkDetect(
 
 }
 
+int ResourceWatcherFSM::ExpandDir(LPCTSTR macorStr, CSimpleStringA& outDir)
+{
+    const int len = macorStr == NULL ? 0 : strlen(macorStr);
+    if (len == 0) {
+        return -1;
+    }
+    if (len < strlen("$(1)") /*最小的长度*/) {
+        return -1;
+    }
+    CSimpleStringA strOrigin(macorStr);
+    int end = 0;
+    if (!(strOrigin.IsStartWith("$(") && (end = strOrigin.IndexOf(")")) >= 3)) {
+        return -1;
+    }
+    for (int i = strlen("$("); i < end; ++i) {
+        if (!((strOrigin[i] >= 'a' && strOrigin[i] <= 'z') || (strOrigin[i] >= 'A' && strOrigin[i] <= 'Z'))) {
+            return -1;
+        }
+    }
+
+	char macroInnerStr[MAX_PATH] = { 0 };
+	int nIndex = 0;
+	bool bUtilMeetMacroMark = false;
+	const char* pStr = macorStr;
+    int startIndex = 0;
+	for (; *pStr != '\0'; pStr++, startIndex++)
+	{
+		if (!bUtilMeetMacroMark)
+		{
+			if (*pStr == '$' && *(pStr + 1) == '(')
+			{
+				pStr++;
+                startIndex++;
+				bUtilMeetMacroMark = true;
+			}
+		}
+		else
+		{
+			if (*pStr == ')')
+			{
+                startIndex++;
+				break;
+			}
+			macroInnerStr[nIndex++] = *pStr;
+		}
+	}
+    LOG_ASSERT(nIndex != 0);
+	ErrorCodeEnum erroCode = GetEntityBase()->GetFunction()->GetPath(macroInnerStr, outDir);
+	if (erroCode != Error_Succeed) {
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Get original path of $(%s) failed with error 0x%x", macorStr, erroCode);
+		return -2;
+	}
+	return startIndex;
+}
+
 //通过集中配置额外执行的清理策略
 void ResourceWatcherFSM::CenterSettingDelete()
 {
-    string p;
     CSmartPointer<IConfigInfo> spCtSettingConfig;
     GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spCtSettingConfig);
-    CSimpleStringA upPath(""), tempPath(""), tPath("");
+    CSimpleStringA tempPath("");
     int closeRmDir = 0, backDay = 0;
     spCtSettingConfig->ReadConfigValue("ResourceWatcher", "DocumentCleanPath", tempPath);
     spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "DocumentCleanCloseRmDir", closeRmDir);
     spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "DocumentCleanBackDay", backDay);
+
     if (tempPath.GetLength() == 0) {
         return;
     }
+    CSimpleStringA implePath(true);
+    int nIndex(0);
+    if (tempPath.IsStartWith("$(") && (nIndex = ExpandDir(tempPath.GetData(), implePath)) > 0) {
+        CSimpleStringA newPath(implePath);
+        if (nIndex < tempPath.GetLength()) {
+            newPath += tempPath.SubString(nIndex);
+        }
+        tempPath = newPath;
+        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("innner:[%s]", tempPath.GetData());
+    }
+
     ErrorCodeEnum erroCode = Error_Succeed;
     CSmartPointer<IEntityFunction> pFunc = GetEntityBase()->GetFunction();
-    CSmartPointer<IConfigInfo> spConfigRun;
     bool bFailFlag = false;
 
     //执行清理逻辑
-    bool delDir = (closeRmDir == 0) ? true : false;
-    upPath = tempPath;
-    int nDelSuc = 0, nDelFail = 0, nFileCount = 0;
-    nFileCount = ProcessFileDelete("RTA5A14", upPath.GetData(), nDelSuc, nDelFail, delDir, backDay);
-    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Process result(%s): count(%d), suc(%d), failed(%d).", upPath.GetData(), nFileCount, nDelSuc, nDelFail);
-    if (nDelFail != 0) {
+    const bool delDir = (closeRmDir == 0) ? true : false;
+    DeleteResult delResult;
+    DeleteParam delParam(tempPath.GetData());
+	delParam.saveBackDay = backDay;
+    delParam.SetRmDirFlag(delDir);
+    delParam.rtaCode = "RTA5A14";
+    const int nFileCount = ProcessFileDelete(delParam, delResult);
+    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Process result(%s): count(%d), suc(%d), failed(%d).", tempPath.GetData(), nFileCount, delResult.sucCnt, delResult.failCnt);
+    if (delResult.failCnt != 0) {
         bFailFlag = true;
-        //break;
     }
-
-    if (!bFailFlag) 
-    {
-        LogWarn(Severity_Low, Error_Debug, LOG_WARN_FILE_DELETE_SUC, CSimpleStringA::Format("Delete files in [%s] success", tempPath.GetData()));
+    else {
+		LogWarn(Severity_Low, Error_Debug, LOG_WARN_FILE_DELETE_SUC, CSimpleStringA::Format("Delete files in [%s] success", tempPath.GetData()));
     }
 }
 
@@ -609,122 +619,113 @@ time_t ResourceWatcherFSM::GetPathTimeSeconds(const char* inPath)
 }
 
 //所有文件删除功能都用这个函数来处理 
-//bool delDir:控制是否将目录也一并删除,false 保留目录, true 删除目录
-//int saveBackDay:保存多少天内的文件, 默认参数,默认值为0,即不保存。(delDir = true时,该参数强制为0)
-int ResourceWatcherFSM::ProcessFileDelete(CSimpleStringA rtaCode, LPCTSTR lpszPath, int& nDelSucCnt, int& nDelFailedCnt, bool delDir, unsigned int saveBackDay)
+int ResourceWatcherFSM::ProcessFileDelete(const DeleteParam& delParam, DeleteResult& delResult)
 {
     int fileCnt = 0;
 
-    DWORD attrs = GetFileAttributesA(lpszPath);
+    DWORD attrs = GetFileAttributesA(delParam.path);
     if (attrs == INVALID_FILE_ATTRIBUTES)
     {     
-        CSimpleStringA errMsg = CSimpleStringA::Format("Can not find path:[%s], GLE = %u.", lpszPath, GetLastError());
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode(rtaCode.GetData()).setAPI("DeleteFiles")(errMsg.GetData());
-        LogWarn(Severity_Middle, Error_Debug, LOG_WARN_FILE_DELETE_FAILED, errMsg.GetData());
-        nDelFailedCnt++;
+        CSimpleStringA errMsg = CSimpleStringA::Format("Can not find path:[%s], GLE = %u.", delParam.path.GetData(), GetLastError());
+        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(delParam.logCode).setResultCode(delParam.rtaCode).setAPI("DeleteFiles")(errMsg.GetData());
+        LogWarn(Severity_Middle, Error_Debug, LOG_WARN_FILE_DELETE_FAILED, errMsg);
+        delResult.failCnt++;
     }
     else if (attrs & FILE_ATTRIBUTE_DIRECTORY) //文件夹类型
     {
-        if (delDir == true) //若要删除目录,则不保留任何文件
+        if (delParam.delDirFlag) //若要删除目录,则不保留任何文件
         {
-            saveBackDay = 0;
-            bool deleteDir;
-            deleteDir = RemoveDirRecursiveA(lpszPath);
+            bool deleteDir = RemoveDirRecursiveA(delParam.path);
             if (!deleteDir)
             {
-                CSimpleStringA errMsg = CSimpleStringA::Format("RemoveDir [%s] failed, GLE = %u.", lpszPath, GetLastError());
-                DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode(rtaCode.GetData()).setAPI("DeleteFiles")(errMsg.GetData());
+                CSimpleStringA errMsg = CSimpleStringA::Format("RemoveDir [%s] failed, GLE = %u.", delParam.path.GetData(), GetLastError());
+                DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(delParam.logCode).setResultCode(delParam.rtaCode).setAPI("DeleteFiles")(errMsg.GetData());
                 LogWarn(Severity_Middle, Error_Debug, LOG_WARN_FILE_DELETE_FAILED, errMsg.GetData());
-                nDelFailedCnt++;
+                delResult.failCnt++;
             }
             else
             {
-                nDelSucCnt++;
+                DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setLogCode(delParam.logCode)("Remove directory(%s) succ.", delParam.path.GetData());
+                delResult.sucCnt++;
                 fileCnt++;
             }
             return fileCnt;
         }
 
-        bool delSubDir = true; //默认移除子目录
         array_header_t* arr;
-        arr = fileutil_get_sub_dirs_a(lpszPath);
+        arr = fileutil_get_sub_dirs_a(delParam.path.GetData());
         if (arr)
         {
             int i;
             for (i = 0; i < arr->nelts; ++i)//子目录
             {
                 char* tmp = ARRAY_IDX(arr, i, char*);
-
-                if (saveBackDay != 0)
+                bool delSubDir = true; //默认移除子目录
+                if (delParam.saveBackDay != 0)
                 {
                     //读取路径时间
                     time_t lSystemTime;
                     time(&lSystemTime);
 
                     time_t fileTime = GetPathTimeSeconds(tmp); //获取路径的最后改动时间
-                    int delDays = (lSystemTime - fileTime) / SECONDS_OF_DAY;
-
-                    if (delDays <= saveBackDay) //未达需要清理的天数阈值,保留目录
+                    const int delDays = (lSystemTime - fileTime) / SECONDS_OF_DAY;
+                    if (delDays <= delParam.saveBackDay) //未达需要清理的天数阈值,保留目录
                     {
                         delSubDir = false;
-                        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("[%s]存留天数[%d], 删除阈值[%u], 保留目录.", tmp, (int)delDays, saveBackDay);
+                        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("[%s]存留天数[%d], 删除阈值[%u], 保留目录.", tmp, (int)delDays, delParam.saveBackDay);
                     }
                 }
-
-                int tDelSucCnt = 0, tDelFailedCnt = 0;
-                fileCnt += ProcessFileDelete(rtaCode, tmp, tDelSucCnt, tDelFailedCnt, delSubDir, saveBackDay); //子目录递归处理
-                nDelFailedCnt += tDelFailedCnt;
-                nDelSucCnt += tDelSucCnt;
+                DeleteParam subDelParam(delParam);
+                subDelParam.path = tmp;
+                subDelParam.SetRmDirFlag(delSubDir);
+                fileCnt += ProcessFileDelete(subDelParam, delResult); //子目录递归处理
             }
             toolkit_array_free2(arr);
         }
 
-        arr = fileutil_get_sub_files_a(lpszPath); //子文件
+        arr = fileutil_get_sub_files_a(delParam.path); //子文件
         if (arr) {
             int i;
             for (i = 0; i < arr->nelts; ++i) {
                 char* tmp = ARRAY_IDX(arr, i, char*);
-                int tDelSucCnt = 0, tDelFailedCnt = 0;
-                fileCnt += ProcessFileDelete(rtaCode, tmp, tDelSucCnt, tDelFailedCnt, delDir, saveBackDay); //子目录递归处理
-                nDelFailedCnt += tDelFailedCnt;
-                nDelSucCnt += tDelSucCnt;
+				DeleteParam subDelParam(delParam);
+				subDelParam.path = tmp;
+                fileCnt += ProcessFileDelete(subDelParam, delResult); //子目录递归处理
             }
             toolkit_array_free2(arr);
         }
     }
     else //文件类型
     {
-        if (saveBackDay != 0)
+        if (delParam.saveBackDay != 0)
         {
             //读取文件时间
             time_t lSystemTime;
             time(&lSystemTime);
 
-            time_t fileTime = GetPathTimeSeconds(lpszPath); //获取文件的最后改动时间
-            int delDays = (lSystemTime - fileTime) / SECONDS_OF_DAY;
-
-            if (delDays < saveBackDay) // 未达到需要清理的天数阈值,无需清理
+            time_t fileTime = GetPathTimeSeconds(delParam.path); //获取文件的最后改动时间
+            const int delDays = (lSystemTime - fileTime) / SECONDS_OF_DAY;
+            if (delDays < delParam.saveBackDay) // 未达到需要清理的天数阈值,无需清理
             {
-                DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("[%s]存留天数[%d], 删除阈值[%u],无需清理.", lpszPath, (int)delDays, saveBackDay);
+                DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("[%s]存留天数[%d], 删除阈值[%u],无需清理.", delParam.path.GetData(), delDays, delParam.saveBackDay);
                 return fileCnt;
             }
         }
 
-        if (RemoveFileA(lpszPath) == true)
+        if (RemoveFileA(delParam.path) == true)
         {
-            nDelSucCnt++;
+            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setLogCode(delParam.logCode)("Remove file(%s) succ.", delParam.path.GetData());
+            delResult.sucCnt++;
             fileCnt++;
         }
         else
         {
-            nDelFailedCnt++;
-            CSimpleStringA errMsg = CSimpleStringA::Format("RemoveFileA [%s] failed, GLE = %u.", lpszPath, GetLastError());
-            DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode(rtaCode.GetData()).setAPI("DeleteFiles")(errMsg.GetData());
+            delResult.failCnt++;
+            CSimpleStringA errMsg = CSimpleStringA::Format("RemoveFileA [%s] failed, GLE = %u.", delParam.path.GetData(), GetLastError());
+            DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setLogCode(delParam.logCode).setResultCode(delParam.rtaCode.GetData()).setAPI("DeleteFiles")(errMsg.GetData());
             LogWarn(Severity_Middle, Error_Debug, LOG_WARN_FILE_DELETE_FAILED, errMsg.GetData());
         }
-
     }
-
     return fileCnt;
 }
 
@@ -915,16 +916,20 @@ BOOL ResourceWatcherFSM::DeleteVersionPackage()
                 }
 
                 CSimpleStringA tVerPath;
-                int nDelSuc = 0, nDelFail = 0, nFileCount = 0;
+                DeleteResult delResult;
+                int nFileCount = 0;
 #ifdef RVC_OS_LINUX
                 tVerPath = verPath + SPLIT_SLASH_STR + (*riter).ToString(); 
 #else
                 tVerPath = verPath + "\\" + (*riter).ToString();
 #endif // RVC_OS_LINUX
-                nFileCount = ProcessFileDelete("RTA5A12", tVerPath.GetData(), nDelSuc, nDelFail, true); //版本文件夹连目录一起清理
+                DeleteParam delParam(tVerPath.GetData());
+                delParam.rtaCode = "RTA5A12";
+                delParam.SetRmDirFlag();//版本文件夹连目录一起清理
+                nFileCount = ProcessFileDelete(delParam, delResult); 
                 DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Delete Version result(%s): count(%d), suc(%d), failed(%d).", 
-                    tVerPath.GetData(), nFileCount, nDelSuc, nDelFail);
-                if (nDelFail)
+                    tVerPath.GetData(), nFileCount, delResult.sucCnt, delResult.failCnt);
+                if (delResult.failCnt > 0)
                 {
                     bFailFlag = true;
                 }
@@ -982,10 +987,12 @@ void ResourceWatcherFSM::DeleteVideoFiles()
         DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("get LocalVideo error. error = %u.", Error);
         return;
     }
-
-    int nDelSuc = 0, nDelFail = 0, nFileCount = 0;
-    nFileCount = ProcessFileDelete("RTA5A13", videoPath.GetData(), nDelSuc, nDelFail, false, backDays);
-    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Delete [Video] result(%s): count(%d), suc(%d), failed(%d).", videoPath.GetData(), nFileCount, nDelSuc, nDelFail);
+    DeleteResult delResult;
+    DeleteParam delParam(videoPath.GetData());
+    delParam.rtaCode = "RTA5A13";
+    delParam.saveBackDay = backDays;
+    const int nFileCount = ProcessFileDelete(delParam, delResult);
+    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Delete [Video] result(%s): count(%d), suc(%d), failed(%d).", videoPath.GetData(), nFileCount, delResult.sucCnt, delResult.failCnt);
 
 }
 
@@ -2027,7 +2034,6 @@ void ResourceWatcherFSM::DetectDestopFileAndWarn(bool bClear, CSimpleStringA& st
 					char* filename = strrchr(file, '\\');
 					if (filename != NULL) { filename += 1; }
 					else { filename = file; }
-					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("filename:%s", filename);
 					bool toRecord = true;
 					if (bClear) {
 						std::string strLowFileName = SP::Utility::ToLower(std::string(filename));
@@ -2063,7 +2069,6 @@ void ResourceWatcherFSM::DetectDestopFileAndWarn(bool bClear, CSimpleStringA& st
 					char* dirname = strrchr(dir, '\\');
 					if (dirname != NULL) { dirname += 1; }
 					else { dirname = dir; }
-					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("dir name:%s", dirname);
 					bool toRecord = true;
 					if (bClear) {
 						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("remove desktop dir:%s", dirname);
@@ -2364,33 +2369,6 @@ void ResourceWatcherFSM::DetectAutoStartFileAndWarn()
 	LogWarn(Severity_Low, Error_Debug, LOG_RESOURCEWATCHER_DEBUG_KEY_STARTUPFILES, keyset_str.c_str());
 }
 
-ErrorCodeEnum ResourceWatcherFSM::DetectVTMInstalledBySetup(BOOL& fYes)
-{
-    HKEY key;
-    ErrorCodeEnum result(Error_Succeed);
-    fYes = FALSE;
-    CSimpleStringA regPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{123BBC1D-8555-4E90-96CA-70E678FF5C24}_is1";
-    LONG lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regPath, 0, KEY_ALL_ACCESS, &key);
-    if (ERROR_SUCCESS == lResult) {
-        fYes = TRUE;
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Found {123BBC1D-8555-4E90-96CA-70E678FF5C24}");
-        LogWarn(Severity_Low, Error_Debug, LOG_INFO_INSTALL_BY_SETUP, "Intalled by Setup");
-    }
-    else if (ERROR_FILE_NOT_FOUND == lResult)
-    {
-        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not Found {123BBC1D-8555-4E90-96CA-70E678FF5C24}");
-        fYes = FALSE;
-    }
-    else
-    {
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("RegOpenKeyEx For{123BBC1D-8555-4E90-96CA-70E678FF5C24} error, Result=%ld.", lResult);
-        fYes = FALSE;
-        result = Error_Unexpect;
-    }
-    RegCloseKey(key);
-    return result;
-}
-
 bool ResourceWatcherFSM::RegRdVtmVersion(CSimpleStringA& VTMpath, CSimpleStringA& vtmVersion, CSimpleStringA& verPath)
 {
     bool bRet = false;
@@ -3889,62 +3867,6 @@ void ResourceWatcherFSM::InitCustomAutoStartFileSheet()
 
 void ResourceWatcherFSM::InitUserInfo()
 {
-    if (m_bFirstRunAfterBoot) {
-		LPITEMIDLIST lp;
-		CHAR lstr[MAX_PATH] = "";
-        //CSIDL_COMMON_STARTUP: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
-		HRESULT hr = SHGetSpecialFolderLocation(0, CSIDL_COMMON_STARTUP, &lp);
-		if (SUCCEEDED(hr)) {
-			memset(lstr, 0, strlen(lstr));
-			SHGetPathFromIDListA(lp, lstr);
-			CSimpleStringA s = lstr;
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_COMMON_STARTUP: %s", s.GetData());
-		}
-		hr = SHGetSpecialFolderLocation(0, CSIDL_STARTUP, &lp);
-		if (SUCCEEDED(hr)) {
-			memset(lstr, 0, strlen(lstr));
-			SHGetPathFromIDListA(lp, lstr);
-			CSimpleStringA s = lstr;
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_STARTUP: %s", s.GetData());
-		}
-        //CSIDL_COMMON_DESKTOPDIRECTORY: C:\Users\Public\Desktop
-		hr = SHGetSpecialFolderLocation(0, CSIDL_COMMON_DESKTOPDIRECTORY, &lp);
-		if (SUCCEEDED(hr)) {
-			memset(lstr, 0, strlen(lstr));
-			SHGetPathFromIDListA(lp, lstr);
-			CSimpleStringA s = lstr;
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_COMMON_DESKTOPDIRECTORY: %s", s.GetData());
-		}
-        //CSIDL_DESKTOP: C:\Users\szzt\Desktop
-		hr = SHGetSpecialFolderLocation(0, CSIDL_DESKTOP, &lp);
-		if (SUCCEEDED(hr)) {
-			memset(lstr, 0, strlen(lstr));
-			SHGetPathFromIDListA(lp, lstr);
-			CSimpleStringA s = lstr;
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_DESKTOP: %s", s.GetData());
-		}
-        //CSIDL_DESKTOPDIRECTORY: C:\Users\szzt\Desktop
-		hr = SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, &lp);
-		if (SUCCEEDED(hr)) {
-			memset(lstr, 0, strlen(lstr));
-			SHGetPathFromIDListA(lp, lstr);
-			CSimpleStringA s = lstr;
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_DESKTOPDIRECTORY: %s", s.GetData());
-		}
-    }
-
-	const DWORD INFO_BUFFER_SIZE = 128;
-	char infoBuf[INFO_BUFFER_SIZE];
-	ZeroMemory(infoBuf, INFO_BUFFER_SIZE);
-	DWORD bufCharCount = INFO_BUFFER_SIZE;
-	if (!GetUserName(infoBuf, &bufCharCount)) {
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetUserName failed, GLE=%u", GetLastError());
-	}
-	else {
-		m_strCurrentUserName = infoBuf;
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Current user name:%s", m_strCurrentUserName.GetData());
-	}
-
 	DWORD dwSessionId = WTSGetActiveConsoleSessionId();
 	LPTSTR pBuffer = NULL;
 	DWORD dwBufferLen;
@@ -3960,9 +3882,6 @@ void ResourceWatcherFSM::InitUserInfo()
 	if (pBuffer) {
 		WTSFreeMemory(pBuffer);
 	}
-    const int diff_flag = IsUserSameName() ? 0 : 1;
-	LogWarn(Severity_Low, Error_Debug, LOG_INFO_USRNAME_INFO, CSimpleStringA::Format("{\"subject\":\"user_info\",\"username\":\"%s\",\"login_username\":\"%s\",\"diff\":%d}"
-        ,m_strCurrentUserName.GetData(), m_strLoginedUserName.GetData(), diff_flag));
 }
 
 void ResourceWatcherFSM::ToListCurrentUserStartupFile(const std::string& userDirPath, std::vector<std::string>& files, std::vector<std::string>& keyfiles)
@@ -3971,7 +3890,6 @@ void ResourceWatcherFSM::ToListCurrentUserStartupFile(const std::string& userDir
     fulPath += "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup";
     files.clear();
     keyfiles.clear();
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("startup path:%s", fulPath.c_str());
     if (ExistsDirA(fulPath.c_str())) {
 		auto arr = fileutil_get_sub_files(fulPath.c_str());
 		if (arr != NULL) {
@@ -3980,7 +3898,6 @@ void ResourceWatcherFSM::ToListCurrentUserStartupFile(const std::string& userDir
 				char* filename = strrchr(file, '\\');
 				if (filename != NULL) { filename += 1; }
 				else { filename = file; }
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("filename:%s", filename);
                 files.push_back(std::string(filename));
 			}
 			toolkit_array_free2(arr);
@@ -4007,7 +3924,7 @@ void ResourceWatcherFSM::GetCommDesktopDirectory(CSimpleStringA& outDir)
 		memset(lstr, 0, strlen(lstr));
 		SHGetPathFromIDListA(lp, lstr);
 		outDir = lstr;
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_COMMON_DESKTOPDIRECTORY: %s", outDir.GetData());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CSIDL_COMMON_DESKTOPDIRECTORY: %s", outDir.GetData());
 	}
 	else {
 		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SHGetSpecialFolderLocation for CSIDL_COMMON_DESKTOPDIRECTORY failed:%u", hr);
@@ -4026,7 +3943,7 @@ void ResourceWatcherFSM::GetUserDesktopDirectory(CSimpleStringA& outDir)
 		memset(lstr, 0, strlen(lstr));
 		SHGetPathFromIDListA(lp, lstr);
         outDir = lstr;
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_DESKTOP: %s", outDir.GetData());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CSIDL_DESKTOP: %s", outDir.GetData());
     }
     else {
         DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SHGetSpecialFolderLocation for CSIDL_DESKTOP failed:%u", hr);
@@ -4063,7 +3980,7 @@ void ResourceWatcherFSM::GetCommStartupDirectory(CSimpleStringA& outDir)
 		memset(lstr, 0, strlen(lstr));
 		SHGetPathFromIDListA(lp, lstr);
 		outDir = lstr;
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_COMMON_STARTUP: %s", outDir.GetData());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CSIDL_COMMON_STARTUP: %s", outDir.GetData());
 	}
 	else {
 		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SHGetSpecialFolderLocation for CSIDL_COMMON_STARTUP failed:%u", hr);
@@ -4082,7 +3999,7 @@ void ResourceWatcherFSM::GetUserStartupDirectory(CSimpleStringA& outDir)
 		memset(lstr, 0, strlen(lstr));
 		SHGetPathFromIDListA(lp, lstr);
         outDir = lstr;
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CSIDL_STARTUP: %s", outDir.GetData());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CSIDL_STARTUP: %s", outDir.GetData());
     }
     else {
 		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SHGetSpecialFolderLocation for CSIDL_STARTUP failed:%u", hr);
@@ -4140,6 +4057,111 @@ const char* dmi_string(const dmi_header* dm, BYTE s)
 	return bp;
 }
 
+void FetchSoftewareInstall(vector<SetupSoftInfo>& stupInfo, DWORD& dwInitFlag)
+{
+    DWORD dwFlag = KEY_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS;
+    if (dwInitFlag == 0 && Is32R64Platform() != 0) {
+        dwInitFlag = 1;
+        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("with KEY_WOW64_64KEY");
+        dwFlag |= KEY_WOW64_64KEY;
+    }
+    HKEY hKey;
+    DWORD dwCount = MAX_PATH;
+    LONG lResult = RegOpenKeyEx(dwInitFlag != 2 ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", 0, dwFlag, &hKey);
+    if (lResult == ERROR_SUCCESS) {
+        if (RegQueryInfoKey(hKey, NULL, NULL, NULL, &dwCount, NULL, NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
+            for (int i = 0; i < (int)dwCount; i++) {
+                DWORD dwRegSize = MAX_PATH;
+                TCHAR szValue[MAX_PATH + 1] = { 0 };
+                memset(szValue, '\0', MAX_PATH + 1);
+                RegEnumKeyEx(hKey, i, szValue, &dwRegSize, NULL, NULL, NULL, NULL);
+                //DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%d:%s",i,szValue);
+                DWORD dwType;
+                HKEY hSubKey;
+                if (RegOpenKeyEx(hKey, szValue, NULL, KEY_READ, &hSubKey) == ERROR_SUCCESS)
+                {
+                    SetupSoftInfo info;
+                    info.displayName = szValue;
+                    info.quietFalg = info.systemCompoentFalg = false;
+
+                    TCHAR regBufferValue[MAX_PATH] = { 0 };
+                    dwRegSize = MAX_PATH;
+                    RegQueryValueEx(hSubKey, "DisplayName", 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
+                    if (strcmp(regBufferValue, "") != 0) {
+                        info.displayName = regBufferValue;//软件名称
+                    }
+
+                    dwRegSize = MAX_PATH;
+                    memset(regBufferValue, '\0', MAX_PATH);
+                    RegQueryValueEx(hSubKey, "DisplayVersion", 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
+                    info.displayVersion = regBufferValue;    //版本
+
+                    /*
+                    dwRegSize = MAX_PATH;
+                    memset(regBufferValue, '\0', MAX_PATH);
+                    RegQueryValueEx(hSubKey, "Publisher", 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
+                    info.publisher = regBufferValue;//发行商
+
+                    dwRegSize = MAX_PATH;
+                    memset(regBufferValue, '\0', MAX_PATH);
+                    // 判断是否能在注册表中获取到安装时间, 否取子项创建时间
+                    if (RegQueryValueEx(hSubKey, "InstallDate", 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize) == ERROR_SUCCESS)
+                    {
+                        info.installDate = regBufferValue;
+                    }
+                    else
+                    {
+                        FILETIME fileLastTime;
+                        RegQueryInfoKey(hSubKey, NULL, NULL, NULL, NULL, NULL, NULL, NULL,NULL, NULL, NULL, &fileLastTime);
+                        SYSTEMTIME sTime, stLocal;
+                        FileTimeToSystemTime(&fileLastTime, &sTime);
+                        SystemTimeToTzSpecificLocalTime(NULL, &sTime, &stLocal);
+                        TCHAR tchTime[MAX_PATH] = { 0 };
+                        _stprintf(tchTime, "%d%02d%02d", stLocal.wYear, stLocal.wMonth, stLocal.wDay);
+                        info.installDate = tchTime;
+                    }
+                    dwRegSize = MAX_PATH;
+                    memset(regBufferValue, '\0', MAX_PATH);
+                    RegQueryValueEx(hSubKey, "UninstallString", 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
+                    info.uninstallString = regBufferValue;//卸载命令及参数
+
+                    dwRegSize = MAX_PATH;
+                    memset(regBufferValue, '\0', MAX_PATH);
+                    RegQueryValueEx(hSubKey, "QuietUninstallString", 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
+                    if (strcmp(regBufferValue, "") != 0)
+                    {
+                        info.uninstallString = regBufferValue;
+                        info.quietFalg = true;
+                    }
+
+                    do
+                    {
+                        DWORD dwType = REG_DWORD;
+                        DWORD dwValue = 0;
+                        DWORD dwSize = sizeof(DWORD);
+                        lResult = RegQueryValueExA(hSubKey, "SystemComponent", NULL, &dwType, (LPBYTE)&dwValue, &dwSize);
+                        if (dwValue == 1) {
+                            info.systemCompoentFalg = true;
+                        }
+                    } while (false);
+                    */
+                    dwRegSize = MAX_PATH;
+                    memset(regBufferValue, '\0', MAX_PATH);
+                    // 取ParentKeyName键值,判断是否是补丁信息, 是补丁信息键值为"OperatingSystem"
+                    RegQueryValueEx(hSubKey, "ParentKeyName", 0, &dwType, (LPBYTE)regBufferValue, &dwRegSize);
+                    if (info.displayName != "" && (0 != strcmp(regBufferValue, "OperatingSystem"))) //判断是否是补丁信息
+                    {
+                        stupInfo.push_back(info);
+                    }
+
+                    RegCloseKey(hSubKey);
+                }
+            }
+        }
+    }
+    RegCloseKey(hKey);
+}
+
 #endif // _MSC_VER end硬件资源监控相关系统功能 CPU、内存、硬盘、网络wifi
 
 #ifdef RVC_OS_LINUX
@@ -4331,8 +4353,6 @@ ErrorCodeEnum ResourceWatcherFSM::CatchSystemBasicInfo(SystemBasicInfo& info)
     }
     return Error_Succeed;
 #endif //RVC_OS_WIN
-
-
 }
 
 void ResourceWatcherFSM::AlarmSystemBasicInfo()
@@ -4375,81 +4395,135 @@ BOOL ResourceWatcherFSM::DetectIsFirstRunAtBoot()
     return bSet;
 }
 
-#ifdef RVC_OS_LINUX
 void ResourceWatcherFSM::DetectSoftwareInstallStatus()
 {
-    CSmartPointer<IConfigInfo> spCtSettingConfig;
-    GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spCtSettingConfig);
-    CSimpleStringA strSoftwaresNames[MAX_SOFTWARE_INSTALLED_DETECT_COUNT];
-    CSimpleStringA strSoftwaresVers[MAX_SOFTWARE_INSTALLED_DETECT_COUNT];
-    int nNameCounts = 0;
-    for (int i = 0; i < MAX_SOFTWARE_INSTALLED_DETECT_COUNT; i++) {
-        strSoftwaresNames[i] = "";
-        strSoftwaresVers[i] = "";
+	CSmartPointer<IConfigInfo> spCtSettingConfig;
+	GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spCtSettingConfig);
+	CSimpleStringA strSoftwaresNames[MAX_SOFTWARE_INSTALLED_DETECT_COUNT];
+	CSimpleStringA strSoftwaresVers[MAX_SOFTWARE_INSTALLED_DETECT_COUNT];
+	int nNameCounts = 0;
+	for (int i = 0; i < MAX_SOFTWARE_INSTALLED_DETECT_COUNT; i++) {
+		strSoftwaresNames[i] = "";
+		strSoftwaresVers[i] = "";
+#if defined(RVC_OS_LINUX)
         CSimpleStringA item = CSimpleStringA::Format("SoftwareInstallDetect%d", i);
-        CSimpleStringA value(true);
-        spCtSettingConfig->ReadConfigValue(GetEntityBase()->GetEntityName(), item, value);
-        if (value.IsNullOrEmpty()) {
-            break;
-        }
-        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CenterSettings:[%s]", value.GetData());
-        if (value.IndexOf("#") != -1) {
-            /** CSimpleString会带Trim操作,在这里不适用  [Gifur@202485]*/
-            auto items = SP::Utility::Split(std::string(value.GetData()), '#');
-            strSoftwaresNames[i] = items[0].c_str();
-            strSoftwaresVers[i] = items[1].c_str();
-        }
-        else
-        {
-            strSoftwaresNames[i] = value;
-        }
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Detect SoftDetect from CentralSetting, %d: [%s],[%s],[%s]"
-            , i, item.GetData(), strSoftwaresNames[i].GetData(), strSoftwaresVers[i].GetData());
-        nNameCounts++;
-    }
+#else
+        CSimpleStringA item = CSimpleStringA::Format("SoftwareInstallDetectWIN%d", i);
+#endif //RVC_OS_LINUX
+		CSimpleStringA value(true);
+		spCtSettingConfig->ReadConfigValue(GetEntityBase()->GetEntityName(), item, value);
+		if (value.IsNullOrEmpty()) {
+			break;
+		}
+		if (value.IndexOf("#") != -1) {
+			/** CSimpleString会带Trim操作,在这里不适用  [Gifur@202485]*/
+			auto items = SP::Utility::Split(std::string(value.GetData()), '#');
+			strSoftwaresNames[i] = items[0].c_str();
+			strSoftwaresVers[i] = items[1].c_str();
+		}
+		else
+		{
+			strSoftwaresNames[i] = value;
+		}
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Detect SoftDetect from CentralSetting, %d: [%s],[%s],[%s]"
+			, i, item.GetData(), strSoftwaresNames[i].GetData(), strSoftwaresVers[i].GetData());
+		nNameCounts++;
+	}
 
-    if (nNameCounts > 0) {
+	if (nNameCounts > 0) {
 
+#if defined(RVC_OS_WIN)
+        vector<SetupSoftInfo> stupInfo;
+        DWORD dwInitFlag(0);
+        FetchSoftewareInstall(stupInfo, dwInitFlag);
+        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("1software size:%d", stupInfo.size());
+        if (dwInitFlag == 1) {
+			FetchSoftewareInstall(stupInfo, dwInitFlag);
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("2software size:%d", stupInfo.size());
+        }
+        dwInitFlag = 2;
+		FetchSoftewareInstall(stupInfo, dwInitFlag);
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("3software size:%d", stupInfo.size());
         for (int i = 0; i < nNameCounts; ++i) {
-            CSimpleStringA runItem = CSimpleStringA::Format("dpkg -l | grep \"%s\" | awk '{print $3}'", strSoftwaresNames[i].GetData());
-            std::string additional("");
-            std::string succStr, errStr;
-            std::string runStr(runItem.GetData());
-            if (SP::Module::Util::ShellExecute(runStr, succStr, errStr)) {
-                if (succStr.empty()) {
-                    CSimpleStringA strMsg = CSimpleStringA::Format("{\"software_name\":\"%s\", \"version_status\":\"not installed\",\"detect_flag\":0}", strSoftwaresNames[i].GetData());
-                    LogWarn(Severity_Low, Error_Debug, LOG_WARN_SOFTWARE_DETECT_NOT_EXISTS_BASE + i, strMsg);
-                    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("SoftwareInstallStatus")(strMsg.GetData());
+            bool found(false);
+			for (int j = 0; j < stupInfo.size(); j++) {
+                if (strSoftwaresNames[i].Compare(stupInfo[j].displayName.c_str()) == 0) {
+					if (strSoftwaresVers[i].IsNullOrEmpty() || strSoftwaresVers[i].Compare(stupInfo[j].displayVersion.c_str()) == 0) {
+						CSimpleStringA strMsg = CSimpleStringA::Format("{\"software_name\":\"%s\", \"version_status\":\"%s\", \"detect_flag\":1}"
+							, stupInfo[j].displayName.c_str(), stupInfo[j].displayVersion.c_str());
+							LogWarn(Severity_Low, Error_Debug, LOG_WARN_SOFTWARE_DETECT_EXISTS_BASE_WIN + i, strMsg);
+							DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("SoftwareInstallStatus")(strMsg.GetData());
+                            found = true;
+					}
+					else
+					{
+						CSimpleStringA strMsg = CSimpleStringA::Format("{\"software_name\":\"%s\", \"version_status\":\"%s\", \"expected\":\"%s\",\"detect_flag\":0}"
+                            , stupInfo[j].displayName.c_str(), stupInfo[j].displayVersion.c_str(), strSoftwaresVers[i].GetData());
+							LogWarn(Severity_Low, Error_Debug, LOG_WARN_SOFTWARE_DETECT_NOT_EXISTS_BASE_WIN + i, strMsg);
+						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("SoftwareInstallStatus")(strMsg.GetData());
+                        found = true;
+					}
+                    break;
                 }
-                else
-                {
-                    succStr = SP::Utility::ToTrim(succStr);
-                    if (strSoftwaresVers[i].IsNullOrEmpty() || strSoftwaresVers[i].Compare(succStr.c_str()) == 0) {
-                        CSimpleStringA strMsg = CSimpleStringA::Format("{\"software_name\":\"%s\", \"version_status\":\"%s\",\"detect_flag\":1}"
-                            , strSoftwaresNames[i].GetData(), succStr.c_str(), strSoftwaresVers[i].GetData());
-                        LogWarn(Severity_Low, Error_Debug, LOG_WARN_SOFTWARE_DETECT_EXISTS_BASE + i, strMsg);
-                        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("SoftwareInstallStatus")(strMsg.GetData());
-                    }
-                    else
-                    {
-                        CSimpleStringA strMsg = CSimpleStringA::Format("{\"software_name\":\"%s\", \"version_status\":\"%s\", \"expected\":\"%s\",\"detect_flag\":0}"
-                            , strSoftwaresNames[i].GetData(), succStr.c_str(), strSoftwaresVers[i].GetData());
-                        LogWarn(Severity_Low, Error_Debug, LOG_WARN_SOFTWARE_DETECT_NOT_EXISTS_BASE + i, strMsg);
-                        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("SoftwareInstallStatus")(strMsg.GetData());
-                    }
+			}
+            if (!found) {
+                if (stupInfo.size() > 0) {
+					CSimpleStringA strMsg = CSimpleStringA::Format("{\"software_name\":\"%s\", \"version_status\":\"not installed\",\"detect_flag\":0}", strSoftwaresNames[i].GetData());
+					LogWarn(Severity_Low, Error_Debug, LOG_WARN_SOFTWARE_DETECT_NOT_EXISTS_BASE_WIN + i, strMsg);
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("SoftwareInstallStatus")(strMsg.GetData());
                 }
-            }
-            else
-            {
-                CSimpleStringA strMsg = CSimpleStringA::Format("{\"software_name\":\"%s\", \"version_status\":\"detect failed\", \"expected\":\"%s\",\"detect_flag\":0}"
-                    , strSoftwaresNames[i].GetData(), strSoftwaresVers[i].GetData());
-                LogWarn(Severity_Low, Error_Debug, LOG_WARN_SOFTWARE_DETECT_EXISTS_STATUS_FAILED, strMsg);
-                DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("SoftwareInstallStatus").setResultCode("RTA5A0D")(strMsg.GetData());
+                else {
+					CSimpleStringA strMsg = CSimpleStringA::Format("{\"software_name\":\"%s\", \"version_status\":\"detect failed\", \"expected\":\"%s\",\"detect_flag\":0}"
+						, strSoftwaresNames[i].GetData(), strSoftwaresVers[i].GetData());
+					LogWarn(Severity_Low, Error_Debug, LOG_WARN_SOFTWARE_DETECT_EXISTS_STATUS_FAILED, strMsg);
+					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("SoftwareInstallStatus").setResultCode("RTA5A0D")(strMsg.GetData());
+                }
+
             }
         }
-    }
+#else
+		for (int i = 0; i < nNameCounts; ++i) {
+			CSimpleStringA runItem = CSimpleStringA::Format("dpkg -l | grep \"%s\" | awk '{print $3}'", strSoftwaresNames[i].GetData());
+			std::string additional("");
+			std::string succStr, errStr;
+			std::string runStr(runItem.GetData());
+			if (SP::Module::Util::ShellExecute(runStr, succStr, errStr)) {
+				if (succStr.empty()) {
+					CSimpleStringA strMsg = CSimpleStringA::Format("{\"software_name\":\"%s\", \"version_status\":\"not installed\",\"detect_flag\":0}", strSoftwaresNames[i].GetData());
+					LogWarn(Severity_Low, Error_Debug, LOG_WARN_SOFTWARE_DETECT_NOT_EXISTS_BASE + i, strMsg);
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("SoftwareInstallStatus")(strMsg.GetData());
+				}
+				else
+				{
+					succStr = SP::Utility::ToTrim(succStr);
+					if (strSoftwaresVers[i].IsNullOrEmpty() || strSoftwaresVers[i].Compare(succStr.c_str()) == 0) {
+						CSimpleStringA strMsg = CSimpleStringA::Format("{\"software_name\":\"%s\", \"version_status\":\"%s\",\"detect_flag\":1}"
+							, strSoftwaresNames[i].GetData(), succStr.c_str());
+						LogWarn(Severity_Low, Error_Debug, LOG_WARN_SOFTWARE_DETECT_EXISTS_BASE + i, strMsg);
+						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("SoftwareInstallStatus")(strMsg.GetData());
+					}
+					else
+					{
+						CSimpleStringA strMsg = CSimpleStringA::Format("{\"software_name\":\"%s\", \"version_status\":\"%s\", \"expected\":\"%s\",\"detect_flag\":0}"
+							, strSoftwaresNames[i].GetData(), succStr.c_str(), strSoftwaresVers[i].GetData());
+						LogWarn(Severity_Low, Error_Debug, LOG_WARN_SOFTWARE_DETECT_NOT_EXISTS_BASE + i, strMsg);
+						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("SoftwareInstallStatus")(strMsg.GetData());
+					}
+				}
+			}
+			else
+			{
+				CSimpleStringA strMsg = CSimpleStringA::Format("{\"software_name\":\"%s\", \"version_status\":\"detect failed\", \"expected\":\"%s\",\"detect_flag\":0}"
+					, strSoftwaresNames[i].GetData(), strSoftwaresVers[i].GetData());
+				LogWarn(Severity_Low, Error_Debug, LOG_WARN_SOFTWARE_DETECT_EXISTS_STATUS_FAILED, strMsg);
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("SoftwareInstallStatus").setResultCode("RTA5A0D")(strMsg.GetData());
+			}
+	}
+#endif //RVC_OS_WIN
+	}
 }
 
+#ifdef RVC_OS_LINUX
 UINT ResourceWatcherFSM::GetSystemDisplayVersion(CSimpleStringA& strVersion)
 {
     UINT result = 0;

+ 44 - 39
Module/mod_ResourceWatcher/ResourceWatcherFSM.h

@@ -70,9 +70,6 @@ enum EvtType
 
 using namespace ResourceWatcher;
 
-#ifdef RVC_OS_LINUX
-#define MAX_SOFTWARE_INSTALLED_DETECT_COUNT 50
-#endif // RVC_OS_LINUX
 
 #define MOD_VERSION "1.0.0.0"
 
@@ -186,6 +183,34 @@ struct SystemBasicInfo
 	SystemBasicInfo():strManufacturer(true), strProductName(true), strSerialNumber(true) {}
 };
 
+struct DeleteParam
+{
+	DeleteParam():path(true),delDirFlag(false), saveBackDay(0), rtaCode(true), logCode(true) {}
+	DeleteParam(LPCTSTR lpszPath):path(lpszPath), delDirFlag(false), saveBackDay(0), rtaCode(true), logCode(true) {}
+	DeleteParam(const DeleteParam& rhs) :path(rhs.path), delDirFlag(rhs.delDirFlag), saveBackDay(rhs.saveBackDay), rtaCode(rhs.rtaCode), logCode(rhs.logCode) {}
+	void SetRmDirFlag(bool val = true) {
+		delDirFlag = val;
+		if (delDirFlag) saveBackDay = 0;
+	}
+	CSimpleStringA path;
+	//控制是否将目录也一并删除,false 保留目录, true 删除目录
+	bool delDirFlag;
+	//保存多少天内的文件, 默认参数,默认值为0,即不保存。(delDir = true时,该参数强制为0)
+	bool saveBackDay;
+
+	CSimpleStringA rtaCode;
+	CSimpleStringA logCode;
+
+};
+
+struct DeleteResult
+{
+	DeleteResult() :sucCnt(0), failCnt(0) {}
+	DWORD sucCnt;
+	DWORD failCnt;
+
+};
+
 const int DEFAULT_DAY_OF_BACKWARD = 90;
 
 class ResourceWatcherFSM : public FSMImpl<ResourceWatcherFSM>
@@ -199,9 +224,7 @@ public:
 	BEGIN_FSM_STATE(ResourceWatcherFSM)
 		FSM_STATE_ENTRY(s0, "Idle", s0_on_entry, s0_on_exit, s0_on_event)
 		FSM_STATE_ENTRY(s1, "Running", s1_on_entry, s1_on_exit, s1_on_event)
-		FSM_STATE_ENTRY(s2, "Failed", s2_on_entry, s2_on_exit, s2_on_event)
-		FSM_STATE_ENTRY(s3, "Listerning", s3_on_entry, s3_on_exit, s3_on_event)
-		END_FSM_STATE()
+	END_FSM_STATE()
 
 		BEGIN_FSM_RULE(ResourceWatcherFSM, s0)
 		
@@ -224,14 +247,6 @@ public:
 	virtual void s1_on_exit();
 	virtual unsigned int s1_on_event(FSMEvent* e);
 
-	virtual void s2_on_entry();
-	virtual void s2_on_exit();
-	virtual unsigned int s2_on_event(FSMEvent* e);
-
-	virtual void s3_on_entry();
-	virtual void s3_on_exit();
-	virtual unsigned int s3_on_event(FSMEvent* e);
-
 	void SelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext);
 	BOOL IsFirstRunAfterBoot() const
 	{
@@ -240,26 +255,17 @@ public:
 #ifdef RVC_OS_LINUX
 	bool GetMonitorInfo(CSimpleStringA& outInfo);
 	bool GetSysActiveStatus(CSimpleStringA& outInfo);
-	void DetectSoftwareInstallStatus();
 #else
 	void SetForceDiskCheckFlag(bool flag)
 	{
 		m_bNeedForceDiskCheck = flag;
 	}
 #endif // RVC_OS_LINUX
+	void DetectSoftwareInstallStatus();
 
 private:
-
     int m_cpuTop; // CPU资源消耗最高的top进程个数
     CSystemStaticInfo m_RvcSysinfo;
-	typedef std::string bs_key;
-	typedef DWORD bs_value;
-	typedef map<bs_key, bs_value> BlackSheet;
-	typedef BlackSheet::const_iterator const_bs_iter;
-	typedef BlackSheet::iterator bs_iter;
-	typedef std::pair<bs_key, bs_value> BlackSheetPair;
-    std::map<std::string, DWORD> m_forbidDirList;
-	CSimpleStringA m_strTerminalNo;
     BOOL m_bFirstRunAfterBoot;
 
 	int m_diskLastWarnHour;
@@ -281,11 +287,9 @@ private:
 
 	std::vector<std::string> keyUserlist;
 	std::vector<std::string> keyPublist;
-	//std::vector<std::string> delKeylist;
 	BOOL flag4DeleteKeyAutoStartFile;
 	BOOL flag4DoAutoStartTaskIgnoreBoot;
 
-	CSimpleStringA m_strCurrentUserName;
 	CSimpleStringA m_strLoginedUserName;
 
 public:
@@ -317,10 +321,9 @@ public:
 	void CenterSettingDelete();
 	BOOL DeleteVersionPackage();
 	void DeleteVideoFiles();
-	int ProcessFileDelete(CSimpleStringA rtaCode, LPCTSTR lpszPath, int& nDelSucCnt, int& nDelFailedCnt, bool delDir, unsigned int saveBackDay = 0);
+	int ProcessFileDelete(const DeleteParam& delParam, DeleteResult& delResult);
 
     BOOL DetectIsFirstRunAtBoot();
-
 #ifdef RVC_OS_LINUX
 	/** 返回操作系统当前的版本,比如1032,1010,1031*/
 	UINT GetSystemDisplayVersion(CSimpleStringA& strVersion);
@@ -381,7 +384,6 @@ public:
 	void MakeSureWin8IntoDesktopPageAtLogon();
 	void DetectAutoStartFileAndWarn();
 
-	ErrorCodeEnum DetectVTMInstalledBySetup(BOOL& fYes);
 	void DetectVersionHasChangedAndWarnCover()
 	{
 		if (!checkActiveBefore) {
@@ -401,7 +403,6 @@ public:
 	void InitCustomAutoStartFileSheet();
 	void InitUserInfo();
 	void ToListCurrentUserStartupFile(const std::string& userDirPath, std::vector<std::string>& files, std::vector<std::string>& keyfiles);
-	bool IsUserSameName() { return m_strLoginedUserName.Compare(m_strCurrentUserName) == 0; }
 	void GetCommDesktopDirectory(CSimpleStringA& outDir);
 	void GetUserDesktopDirectory(CSimpleStringA& outDir);
 	bool IsDesktopIconExist(CSimpleStringA& strPath);
@@ -414,6 +415,12 @@ public:
 
 	void AlarmSystemBasicInfo();
 	ErrorCodeEnum CatchSystemBasicInfo(SystemBasicInfo& info);
+	/*
+	-1:入参无效
+	-2:GetPath失败
+	>0:返回原字符串中$()后的字符位置,outDir返回解析后的内容
+	*/
+	int ExpandDir(LPCTSTR macorStr, CSimpleStringA& outDir);
 };
 
 class RunEvent : public FSMEvent
@@ -423,18 +430,17 @@ public:
 	virtual ~RunEvent() {}
 };
 
-#ifdef RVC_OS_LINUX
-
 struct DetectSoftwareInstallStatusTask : public ITaskSp
 {
-    ResourceWatcherFSM* m_pFSM;
+	ResourceWatcherFSM* m_pFSM;
 	DetectSoftwareInstallStatusTask(ResourceWatcherFSM* pFSM) : m_pFSM(pFSM) {}
-    void Process()
-    {
-        m_pFSM->DetectSoftwareInstallStatus();
-    }
+	void Process()
+	{
+		m_pFSM->DetectSoftwareInstallStatus();
+	}
 };
 
+#ifdef RVC_OS_LINUX
 struct AggerateAutoStatTask : public ITaskSp
 {
 	ResourceWatcherFSM* m_pFSM;
@@ -503,12 +509,11 @@ struct DiskAndFilesTask : public ITaskSp
 			void* pTmpData = NULL;
 			ITimerListener* pListener = new TimerOutHelper<ResourceWatcherFSM>(m_pFSM, &ResourceWatcherFSM::DiskCheckTimer, pTmpData);
 			m_pFSM->GetEntityBase()->GetFunction()->SetTimer(TIMER_DISK_CHECK, pListener, checkTime);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Set DISK CHECK Timer!");
+			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Set DISK CHECK Timer!");
 		}
 	}
 };
 
-
 struct CheckDiskFileSpaceTask : public ITaskSp
 {
 	ResourceWatcherFSM* m_pFSM;

+ 8 - 0
Module/mod_ResourceWatcher/ResourceWatcher_LogCode.h

@@ -0,0 +1,8 @@
+#ifndef MOD_RESOUCEWATCHER_LOGCODE_HEADER
+#define MOD_RESOUCEWATCHER_LOGCODE_HEADER
+
+#pragma once
+
+#define LOGCODE_RESOURCEWATCHER_
+
+#endif //MOD_RESOUCEWATCHER_LOGCODE_HEADER

+ 6 - 15
Module/mod_ResourceWatcher/ResourceWatcher_UserCode.h

@@ -3,20 +3,12 @@
 
 #pragma once
 
-#define LOG_ERR_RES_VIDEO_INSUFFICIENT 	0x50A00001
-#define LOG_WARN_RES_VIDEO_INSUFFICIENT	0x50A00002
-#define LOG_EVT_RES_VIDEO_SUFFICIENT	0x50A00003
 #define LOG_RESOURCEWATCHER_SYSTEMINFO 0x50A00004
 #define LOG_RESOURCEWATCHER_COMPOSITING_CHANGE_ON 0x50A00005
 #define LOG_RESOURCEWATCHER_COMPOSITING_CHANGE_OFF 0x50A00006
-#define LOG_RESOURCEWATCHER_DNS_CHANGE_SUCC 0x50A00007
-#define LOG_RESOURCEWATCHER_DNS_CHANGE_FAILED 0x50A00008
-#define LOG_RESOURCEWATCHER_DNS_FETCH_FAILED 0x50A00009
 #define LOG_RESOURCEWATCHER_CLIPBOARD_REMOVE_FAILED 0x50A0000A
 #define LOG_RESOURCEWATCHER_CLIPBOARD_REMOVE_SUCC 0x50A0000B
 #define LOG_RESOURCEWATCHER_DDE_OSD_DISABLE 0x50A0000C
-#define LOG_RESOURCEWATCHER_SYSCONNECT_DUPLICATE 0x50A0000D
-#define LOG_RESOURCEWATCHER_DNS_CONNECTION_INFO_UNEXPECT 0x50A0000E
 #define LOG_RESOURCEWATCHER_OPEN_ACTIVE_FAIL 0x50A0000F
 
 #define LOG_RESOURCEWATCHER_CLIPBOARD_RECOVER_ENABLE 0x50A00019
@@ -28,8 +20,6 @@
 #define LOG_RESOURCEWATCHER_FILE_TOPUSED_SPACE 0x50A0001F
 #define LOG_ERR_SOGOU_INPUT_INSTALLED	0x50A00020
 #define LOG_ERR_SOGOU_INPUT_NOTINSTALLED	0x50A00021
-#define LOG_RESOURCEWATCHE_CHANGE_CURRENT_VERSION 0x50A00022
-#define LOG_RESOURCEWATCHE_DELETE_VERSION 0x50A00023
 #define LOG_RESOURCEWATCHE_INSTALL_THIRDPARTY 0x50A00025
 #define LOG_RESOURCEWATCHE_RESTART_THIRDPARTYPROGRAM 0x50A00026
 #define LOG_RESOURCEWATCHE_UNINSTALL_THIRDPARTYPROGRAM 0x50A00027
@@ -67,12 +57,10 @@
 #define LOG_WARN_FILE_DELETE_SUC 0x50A00053
 #define LOG_WARN_ACTIVE_FILE_CHANGE	0x50A00054
 #define LOG_INFO_DESKTOP_FILESTATUS	0x50A00055
-#define LOG_INFO_INSTALL_BY_SETUP	0x50A00056
 #define LOG_WARN_FILE_DELETE_FAILED	0x50A00057
 #define LOG_INFO_AUTOSTART_FILESTATUS	0x50A00058
 #define LOG_INFO_AUTOSTART_INTEREST_FILESTATUS	0x50A00059
 #define LOG_INFO_LOCAL_VERSION	0x50A0005A //本地终端版本信息
-#define LOG_INFO_USRNAME_INFO	0x50A0005B //当前用户名称和登录用户名称
 
 #define LOG_RESOURCEWATCHER_OSD_RECOVER_ENABLE 0x50A00060
 #define LOG_RESOURCEWATCHER_OSD_REMOVE_SUCC 0x50A00061
@@ -93,10 +81,13 @@
 
 
 
-#define LOG_WARN_NET_PROBE_FAILED_BASE	0x50A35500 //预留100个错误码50A35500-50A35599,用于网络探测监控
+#define LOG_WARN_NET_PROBE_FAILED_BASE	0x50A35500 //预留100个错误码50A35500-50A35599,用于网络探测监控(这里哪止100)
 #define LOG_WARN_NET_PROBE_SUCCESS_BASE	0x50A35600 //预留100个错误码50A35600-50A35699,用于网络探测监控
-#define LOG_WARN_SOFTWARE_DETECT_EXISTS_BASE	0x50A35700 //用于判断有安装软件
-#define LOG_WARN_SOFTWARE_DETECT_NOT_EXISTS_BASE	0x50A35765 //用于判断未安装软件
+#define LOG_WARN_SOFTWARE_DETECT_EXISTS_BASE	0x50A35700 //用于判断有安装软件 预留100
+#define LOG_WARN_SOFTWARE_DETECT_EXISTS_BASE_WIN	0x50A35732 //用于判断有安装软件WIN
+#define LOG_WARN_SOFTWARE_DETECT_NOT_EXISTS_BASE	0x50A35765 //用于判断未安装软件 预留100 这里应该错了是 64
+#define LOG_WARN_SOFTWARE_DETECT_NOT_EXISTS_BASE_WIN 0x50A35797 //用于判断未安装软件WIN 
+
 #define LOG_WARN_SOFTWARE_DETECT_EXISTS_STATUS_FAILED 0x50A357C9 //安装检测失败
 
 #define LOG_WARN_MAINLINK_CONNECT_FAILED 0x50A35801

+ 11 - 3
Module/mod_ResourceWatcher/mod_ResourceWatcher.cpp

@@ -52,6 +52,7 @@ void ResourceWatcherServiceSession::Handle_GetDevInfo(
     SpReqAnsContext<ResourceWatcherService_GetDevInfo_Req, ResourceWatcherService_GetDevInfo_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(ResourceWatcherService_LogCode_GetDevInfo).setAPI(__FUNCTION__)(__FUNCTION__);
     m_pEntity->GetDevInfo(ctx);
 }
 
@@ -76,30 +77,35 @@ void ResourceWatcherServiceSession::Handle_GetBizLinks(SpReqAnsContext<ResourceW
 void ResourceWatcherServiceSession::Handle_GetThirdPartyInstallState(SpReqAnsContext<ResourceWatcherService_GetThirdPartyInstallState_Req, ResourceWatcherService_GetThirdPartyInstallState_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(ResourceWatcherService_LogCode_GetThirdPartyInstallState).setAPI(__FUNCTION__)(__FUNCTION__);
     m_pEntity->GetThirdPartyInstallState(ctx);
 }
 
 void ResourceWatcherServiceSession::Handle_InstallThirdPartyProgram(SpReqAnsContext<ResourceWatcherService_InstallThirdPartyProgram_Req, ResourceWatcherService_InstallThirdPartyProgram_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(ResourceWatcherService_LogCode_InstallThirdPartyProgram).setAPI(__FUNCTION__)(__FUNCTION__);
     m_pEntity->InstallThirdPartyProgram(ctx);
 }
 
 void ResourceWatcherServiceSession::Handle_UninstallThirdPartyProgram(SpReqAnsContext<ResourceWatcherService_UninstallThirdPartyProgram_Req, ResourceWatcherService_UninstallThirdPartyProgram_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(ResourceWatcherService_LogCode_UninstallThirdPartyProgram).setAPI(__FUNCTION__)(__FUNCTION__);
     m_pEntity->UninstallThirdPartyProgram(ctx);
 }
 
 void ResourceWatcherServiceSession::Handle_RestartThirdPartyProgram(SpReqAnsContext<ResourceWatcherService_RestartThirdPartyProgram_Req, ResourceWatcherService_RestartThirdPartyProgram_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(ResourceWatcherService_LogCode_RestartThirdPartyProgram).setAPI(__FUNCTION__)(__FUNCTION__);
     m_pEntity->RestartThirdPartyProgram(ctx);
 }
 
 void ResourceWatcherServiceSession::Handle_ProcessDetectThirdPartyProgram(SpReqAnsContext<ResourceWatcherService_ProcessDetectThirdPartyProgram_Req, ResourceWatcherService_ProcessDetectThirdPartyProgram_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(ResourceWatcherService_LogCode_ProcessDetectThirdPartyProgram).setAPI(__FUNCTION__)(__FUNCTION__);
     m_pEntity->ProcessDetectThirdPartyProgram(ctx);
 }
 
@@ -112,12 +118,14 @@ void ResourceWatcherServiceSession::Handle_FilesClean(SpReqAnsContext<ResourceWa
 void ResourceWatcherServiceSession::Handle_FetchSystemSnapshot(SpReqAnsContext<ResourceWatcherService_FetchSystemSnapshot_Req, ResourceWatcherService_FetchSystemSnapshot_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(ResourceWatcherService_LogCode_FetchSystemSnapshot).setAPI(__FUNCTION__)(__FUNCTION__);
     m_pEntity->FetchSystemSnapshot(ctx);
 }
 
 void ResourceWatcherServiceSession::Handle_CheckIsFileExists(SpReqAnsContext<ResourceWatcherService_CheckIsFileExists_Req, ResourceWatcherService_CheckIsFileExists_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(ResourceWatcherService_LogCode_CheckIsFileExists).setAPI(__FUNCTION__)(__FUNCTION__);
     m_pEntity->CheckIsFileExists(ctx);
 }
 
@@ -126,6 +134,7 @@ void ResourceWatcherServiceSession::Handle_OperateFile
     ResourceWatcherService_OperateFile_Ans>::Pointer ctx)
 {
     DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(ResourceWatcherService_LogCode_OperateFile).setAPI(__FUNCTION__)(__FUNCTION__);
     m_pEntity->OperateFile(ctx);
 }
 
@@ -935,7 +944,7 @@ ErrorCodeEnum ResourceWatcherEntity::ReportSogouInstallState()
         int nLastRecordTime = 0;
         err = spConfig->ReadConfigValueInt("SogouInput", "LastReportTime", nLastRecordTime);
         SYSTEMTIME stTaskTime = CSmallDateTime(nLastRecordTime).ToSystemTime();
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Last Sogou install check time: %04d-%02d-%02d %02d:%02d:%02d",
+        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Last Sogou install check time: %04d-%02d-%02d %02d:%02d:%02d",
             stTaskTime.wYear, stTaskTime.wMonth, stTaskTime.wDay,
             stTaskTime.wHour, stTaskTime.wMinute, stTaskTime.wSecond);
         SYSTEMTIME stNow = {};
@@ -1664,10 +1673,9 @@ void ResourceWatcherEntity::SecProcCheck()
     spCtSettingConfig->ReadConfigValue("ResourceWatcher", "YaXinProcUOS", yaXin);
     spCtSettingConfig->ReadConfigValue("ResourceWatcher", "LianRuanProcUOS", lianRuan);
     spCtSettingConfig->ReadConfigValue("ResourceWatcher", "RuiYanProcUOS", ruiYan);
-#endif // RVC_OS_WIN
+#endif // RVC_OS_LINUX
 
     CAutoArray<CSimpleStringA> tArray(&yaXin, 1);
-    //Dbg("Security check name:%s.Size = %d.", tArray[0].GetData(), tArray.GetCount());
     if (yaXin.GetLength() != 0)
     {
         string yaXinRe = DoCheckCertainProcessStatus(tArray);

+ 0 - 15
Module/mod_ResourceWatcher/mod_ResourceWatcher.h

@@ -87,15 +87,10 @@ public:
 		if (errorCode == Error_Succeed) {
 
             CSmartPointer<IEntityFunction> spEntityFunction = GetFunction();
-            CSystemStaticInfo staticInfo;
-            spEntityFunction->GetSystemStaticInfo(staticInfo);
-			
-			updateShowFlag = false;
 			newestSogouInstall = false;
 			lastUpgradeInstallTime = 0; //上次升级安装时间
 			lastUpgradeSwitchTime = 0;  //上次升级切换时间
 			lastSogouChangeEndTime = 0;    //上一次切换结束判定的时间
-			lastSogouChangeWarn = "";  //上一次搜狗告警信息
 			sogouProcessRun = 0;      //搜狗进程是否启动
 
 			errorCode = spEntityFunction->SubscribeBroadcast("UpgradeManager", NULL, this, m_uuidUpgradeStateEventListener);
@@ -120,7 +115,6 @@ public:
 
 		CSimpleStringA uiState;
 		spEntityFunction->GetSysVar("UIState", uiState);
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("NETWORK_PROBE Timer GetUIState %s", (LPCTSTR)uiState);
 		if (uiState[0] == 'M') {
 			m_fsm.TriggerAtStatusChanged(true);
 		}
@@ -168,7 +162,6 @@ public:
 	/*ignore*/
 	virtual void OnPrePause(CSmartPointer<ITransactionContext> pTransactionContext)
 	{
-		OnTimeout(ENT_TIMERID_CHECK_SOGOU_INPUT_INSTALLED_STATE);
 		pTransactionContext->SendAnswer(Error_Succeed);
 	}
 
@@ -204,8 +197,6 @@ public:
 	void GetDevInfo(SpReqAnsContext<ResourceWatcherService_GetDevInfo_Req,
 		ResourceWatcherService_GetDevInfo_Ans>::Pointer ctx)
 	{
-		LOG_FUNCTION();
-
 		SystemBasicInfo info;
 		ErrorCodeEnum result = m_fsm.CatchSystemBasicInfo(info);
 		if (Error_Succeed == result) {
@@ -336,9 +327,6 @@ private:
 						this, ENT_TIMERINTERVAL_CHECK_SOGOU_INPUT_PROCESS_STATUS_CHANGE);
 				}
 			}
-			else {
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Get UIState result: %s, %s", SpStrError(err), strState.GetData());
-			}
 		}
 		else if (dwTimerID == ENT_TIMERID_CHECK_SOGOU_INPUT_PROCESS_STATUS_CHANGE) {
 			DoCheckSogouProcessStatus();
@@ -377,14 +365,11 @@ private:
 private:
 	ResourceWatcherFSM m_fsm;
 	CUUID m_uuidUpgradeStateEventListener;
-	BOOL updateShowFlag;
 	BOOL newestSogouInstall; //最近一次安装的标志
 
 	time_t lastUpgradeInstallTime; //上次升级安装时间
 	time_t lastUpgradeSwitchTime;  //上次升级切换时间
 	time_t lastSogouChangeEndTime;    //上一次进程切换时间
-	CSimpleStringA lastSogouChangeWarn;  //上一次搜狗告警信息
-	BOOL isSogouUpdateChange;
 	int sogouProcessRun;
 
 	vector<CSimpleStringA> sogouChangeWarn;

+ 0 - 4
Module/mod_healthmanager/mod_healthmanager.cpp

@@ -74,10 +74,6 @@ const int MAX_START_AYSNC_TIMEOUT = 20000;
 #define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
 
 #if defined(RVC_OS_LINUX)//oiltmp
-#include "CenterSetting_client_g.h"	
-using namespace CenterSetting;
-
-
 //for defines in header file
 #include "Chromium_client_g.h"
 using namespace Chromium;

+ 0 - 2
Module/mod_heartbeat/HeartBeatFSM.cpp

@@ -452,12 +452,10 @@ bool CHeartBeatFSM::HandShakeHttp(IHttpFunc* client,bool &isHeartBeatOk) {
 	HttpStruct::SendHandShakeReq qTempReq;
 	HttpStruct::SendHandShakeRet qTempRet;
 
-	CSystemStaticInfo info;
 	qTempReq.m_reqStr = HandShakeJsonStr();//请求参数
 	qTempReq.m_url = m_strHandShakeUrl.GetData();//访问地址
 	qTempReq.m_timeOut = 60;//设置传送超时时间为60s
 
-
 	//qTempReq.m_printDbg = true;
 	PROCESS_LINK_CONTEXT("LR0402503HandShake")
 	if (!client->Post(qTempReq, qTempRet, &nextLink)) {

+ 48 - 10
Module/mod_vtmloader/VtmLoaderFSM.cpp

@@ -253,6 +253,7 @@ ErrorCodeEnum CVtmLoaderFSM::OnInit()
 
 ErrorCodeEnum CVtmLoaderFSM::OnExit()
 {
+	GetEntityBase()->GetFunction()->KillTimer(TIMER_CENTERSETTING_UPDATE_CHECK);
 	RemoveStateHooker(this);
 	return Error_Succeed;
 }
@@ -1762,8 +1763,10 @@ bool CVtmLoaderFSM::GetConfig()
 	}
 	refreshLogLevel();
 
-
-	//all cfg is ready, then init the entity
+	//all cfg is ready, then init the entity, set centersetting update timer
+	void* pTmpData = NULL;
+	ITimerListener* pListener = new TimerOutHelper<CVtmLoaderFSM>(this, &CVtmLoaderFSM::OnCentersettingUpdateTimeout, pTmpData);
+	GetEntityBase()->GetFunction()->SetTimer(TIMER_CENTERSETTING_UPDATE_CHECK, pListener, CENTERSETTING_UPDATE_CHECK_TIME);
 
 	eErr = SubscribeEntitysEvents();
 	if (eErr != Error_Succeed)
@@ -1971,14 +1974,7 @@ void CVtmLoaderFSM::CheckDeviceEntity(SpReqAnsContext<VtmLoaderService_CheckDevi
 	CEntityStaticInfo staticInfo;
 	ErrorCodeEnum eErrCode = Error_Unexpect;
 	CSimpleStringA csEntityName = ctx->Req.entityName;
-	//oiltmp@20240415 to be delete after x months
-	if (ctx->Req.entityName.Compare("CardIssuer") == 0)
-	{
-		if (m_sysInfo.strMachineType.Compare("RVC.CardStore") == 0 || m_sysInfo.strMachineType.Compare("RVC.CardPrinter") == 0)
-			csEntityName = "CardIssuerStore";
-		else
-			csEntityName = "CardIssuerStand";
-	}
+	
 	if ((eErrCode = m_pEntity->GetFunction()->GetEntityStaticInfo(csEntityName.GetData(), staticInfo)) != Error_Succeed)
 	{
 		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("GetEntityStaticInfo(%s), failed:%d", ctx->Req.entityName.GetData(), eErrCode);
@@ -3033,4 +3029,46 @@ void CVtmLoaderFSM::DoSpecialJobInTestRoom()
 		Sleep(10000);
 		GetEntityBase()->GetFunction()->GetPrivilegeFunction()->Reboot(RebootTrigger_ManualLocal, RebootWayEnum::RebootWay_Framework);
 	}
+}
+
+DWORD CVtmLoaderFSM::GetCenterCfgThread()
+{
+	bool isUpdate = false, isReset = false;
+	CSimpleString version;
+	if (false == GetEntityBase()->GetFunction()->HasPrivilege())
+	{
+		LogWarn(Severity_High, Error_Unexpect, VtmLoader_CenterSettingConnectFailed,
+			CSimpleStringA::Format("下载集中配置失败:%s do not has privilege", __FUNCTION__));
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402101Z01").setResultCode("RTA1104")("集中配置下载失败");
+		return -1;
+	}
+
+
+	auto ret = GetEntityBase()->GetFunction()->GetPrivilegeFunction()->TryUpdateCenterCfg(isUpdate, isReset, version);
+	if (ret != ErrorCodeEnum::Error_Succeed)
+	{
+		LogWarn(Severity_High, Error_Unexpect, VtmLoader_CenterSettingConnectFailed,
+			CSimpleStringA::Format("下载集中配置失败:%d", ret));
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402101Z01").setResultCode("RTA1104")("集中配置下载失败");
+		return -1;
+	}
+
+	if (!isUpdate)
+	{
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetCenterSetting")("Centersetting not changed from spshell");
+		return -1;
+	}
+
+	LogWarn(Severity_Low, Error_Succeed, VtmLoader_CenterSettingConnectFailed,
+		CSimpleStringA::Format("下载集中配置成功,版本号变更成:%s", version.GetData()));
+
+	if (isReset)
+		LogEvent(Severity_Middle, EVENT_MOD_CENTERSETTING_CRITICAL_UPDATE, "SpShell:Update centersetting with critical items.");
+	return 0;
+}
+
+void CVtmLoaderFSM::OnCentersettingUpdateTimeout(void* pData)
+{
+	GetCenterCfgThread();
+	GetEntityBase()->GetFunction()->ResetTimer(TIMER_CENTERSETTING_UPDATE_CHECK, CENTERSETTING_UPDATE_CHECK_TIME);
 }

+ 31 - 1
Module/mod_vtmloader/VtmLoaderFSM.h

@@ -7,6 +7,10 @@
 #include "VtmLoader_server_g.h"
 using namespace VtmLoader;
 
+//集中配置更新  
+#define CENTERSETTING_UPDATE_CHECK_TIME 60000 * 5 //集中配置更新时间5分钟
+#define TIMER_CENTERSETTING_UPDATE_CHECK 1
+
 enum EvtType
 {
 	USER_EVT_NetworkCheck_Passed = EVT_USER + 1,		// 网络检查通过,包括网卡及到总行服务的连通性
@@ -74,6 +78,30 @@ struct EntityLoadFault
 };
 class CVtmLoaderEntity;
 
+template<class T>
+class TimerOutHelper : public ITimerListener
+{
+public:
+	typedef void (T::* FuncTimer)(void* pUserdata);
+
+	TimerOutHelper(T* p, FuncTimer pTimerFunc, void* pData, bool bDeleteSelf = false)
+		: m_pObject(p), m_pUserData(pData), m_pTimer(pTimerFunc), m_bDeleteSelf(bDeleteSelf)
+	{
+	}
+
+	virtual void OnTimeout(DWORD dwTimerID)
+	{
+		(m_pObject->*m_pTimer)(m_pUserData);
+		if (m_bDeleteSelf)
+			delete this;
+	}
+private:
+	void* m_pUserData;
+	T* m_pObject;
+	FuncTimer m_pTimer;
+	bool m_bDeleteSelf;
+};
+
 class CVtmLoaderFSM : public FSMImpl<CVtmLoaderFSM>, public IFSMStateHooker, public ICallbackListener
 {
 public:
@@ -198,7 +226,9 @@ private:
 	void CheckAudio(SpReqAnsContext<VtmLoaderService_CheckDeviceEntity_Req, VtmLoaderService_CheckDeviceEntity_Ans>::Pointer ctx);
 	void CheckVideo(SpReqAnsContext<VtmLoaderService_CheckDeviceEntity_Req, VtmLoaderService_CheckDeviceEntity_Ans>::Pointer ctx);
 	bool IfInExcludedLoadList(CSimpleStringA csEntityName);
-		
+	
+	DWORD GetCenterCfgThread();
+	void OnCentersettingUpdateTimeout(void* pData);
 	
 };
 class CheckDeviceEntityEvent : public FSMEvent

+ 2 - 1
Module/mod_vtmloader/VtmLoader_UserCode.h

@@ -28,4 +28,5 @@ const int VtmLoader_CheckAudio_CfgHandFreeError = 0x10f0021b;
 const int VtmLoader_SIPPhoneEntityLoad_Cost = 0x10f0021c;
 const int VtmLoader_DepDirCopyFailed = 0x10f0021d;
 const int VtmLoader_DepDirCopySuc = 0x10f0021e;
-const int VtmLoader_InfoAboutBootCost = 0x10f0021f;
+const int VtmLoader_InfoAboutBootCost = 0x10f0021f;
+const int VtmLoader_CenterSettingConnectFailed = 0x10f00220;

+ 1 - 1
Module/mod_vtmloader/mod_vtmloader.h

@@ -55,7 +55,7 @@ public:
 	virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
 		const DWORD dwSysError,const DWORD dwUserCode,const DWORD dwEntityInstanceID, const WORD wEntityDevelID, 
 		const CAutoArray<DWORD> &Param, const char *pszEntityName, const char *pszModuleName,const char *pszMessage, const linkContext &pLinkInfo);
-	
+
 	ErrorCodeEnum UnsubscribeEntitysEvents();
 	CSimpleStringA GetCurMaintainer(){ return m_strUserID;}
 

+ 0 - 101
addin/res/ManagerDesktop/audioErr.html

@@ -40,7 +40,6 @@
 				<img width="100%" src="./images/logo_cmb.png" />
 			</div>
 			<ul id="navBtns">
-				<li class="fz_20" id="downLoadConfig" onclick="downLoadv3('auto')">	下载集中配置 </li>
 				<li class="fz_20" id="resetPsd" onclick="resetRSA()">	重置密钥 </li>
 				<li class="fz_20" onclick="RebootShell()">	重启应用 </li>
 				<li class="fz_20" onclick="RebootComputer()">	重启计算机 </li>
@@ -143,106 +142,6 @@
 		</div>
 		<!-- 退出提示框 -->
 
-		<!-- 下载集中配置 Start -->
-		<div class="toast_box" id="ManuallyDownload">
-			<div class="modal_warpper">
-				<div class="box_wrapper" style="margin-top: 50px;">
-					<div class="modal_title">手动下载</div>
-					<div class="input_wrapper">
-						<input name="centerConfigUrl" placeholder="请输入集中配置下载地址" class="inputURL" oninput="changeInput(this)"/>
-					</div>
-					<div id="ManuallyDownloadError" class="input_error">集中配置下载失败</div>
-				</div>
-				<div class="btn_wrapper">
-					<div class="btn_cancel"  onclick="exit()">返回</div>
-					<button class="btn_confirm" onclick="downLoadv3('manual')" disabled="true" id="btn-downLoad">下载</button>
-				</div>
-			</div>
-		</div>
-
-		<div class="toast_box" id="toastErrorBox">
-			<div class="toast_wrapper">
-				<div class="box_wrapper">
-					<img src="./images/warningCircle.png" class="wran_icon"/>
-					<p id="toastErrTips">下载集中配置成功</p>
-				</div>
-			</div>
-		</div>
-
-		<div class="toast_box" id="modalErrorBox">
-			<div class="modal_warpper">
-				<div class="box_wrapper" style="margin-top: 50px;">
-					<div class="modal_title">下载集中配置</div>
-					<div id="modalErrTips">目标地址异常,请联系总行信息技术部处理,是否进行手动下载?</div>
-				</div>
-				<div class="btn_wrapper">
-					<div class="btn_cancel" onclick="closeModal('toast')">返回</div>
-					<div class="btn_confirm" onclick="showManuallyDownloadModal()">确认</div>
-				</div>
-			</div>
-		</div>
-
-		<div class="toast_box" id="boxRestart">
-			<div class="modal_warpper">
-				<div class="box_wrapper" style="margin-top: 20px;">
-					<div class="modal_title">重启应用</div>
-					<div class="restart_span">
-						集中配置已完成下载,重启后生效
-					</div>
-				</div>
-				<div class="rows_restart">
-					<span>
-						<span id="restart-time">29</span>
-						<span>秒后自动重启</span>
-					</span>
-					<button class="btn_confirm" onclick="restart()">重启应用</button>
-				</div>
-			</div>
-		</div>
-
-		<div id='loading_mask'>
-			<div class='loading_wrapper'>
-				<!-- loading 菊花旋转-->
-				<div class='loading_icon_wrapper'>
-					<div class='loading_icon'>
-						<div class="load-line rotate-0">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-30">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-60">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-90">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-120">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-150">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div id="circle-center"></div>
-					</div>
-				</div>
-				<!-- loading 菊花旋转-->
-				<div class='loading_title'>
-					<span>正在下载中</span>
-					<span class="loading_point"></span>
-					<span class="loading_point"></span>
-					<span class="loading_point"></span>
-				</div>
-			</div>
-		</div>
-		<!-- 下载集中配置 End-->
-
 		<!-- loading -->
 		<div id='loadContent'>
 			<div class="back_cover" ></div>

+ 7 - 7
addin/res/ManagerDesktop/css/errType.css

@@ -382,29 +382,29 @@ nav ul li::before{
 	margin-right: 5px;
 	content: '';
 }
-nav ul li:nth-child(1)::before{
+/* nav ul li:nth-child(1)::before{
 	background: url('../images/config.png');
 	background-size: cover;
-}
+} */
 
-nav ul li:nth-child(2)::before{
+nav ul li:nth-child(1)::before{
 	background: url('../images/reset.png');
 	background-size: cover;
 }
 
-nav ul li:nth-child(3)::before{
+nav ul li:nth-child(2)::before{
 	background: url('../images/restart_a.png');
 	background-size: cover;
 }
-nav ul li:nth-child(4)::before{
+nav ul li:nth-child(3)::before{
 	background: url('../images/restart_c.png');
 	background-size: cover;
 }
-nav ul li:nth-child(5)::before{
+nav ul li:nth-child(4)::before{
 	background: url('../images/off.png');
 	background-size: cover;
 }
-nav ul li:nth-child(6)::before{
+nav ul li:nth-child(5)::before{
 	background: url('../images/min.png');
 	background-size: cover;
 }

+ 0 - 101
addin/res/ManagerDesktop/entityCheck.html

@@ -40,7 +40,6 @@
 				<img width="100%" src="./images/logo_cmb.png" />
 			</div>
 			<ul id="navBtns">
-				<li class="fz_20" id="downLoadConfig" onclick="downLoadv3('auto')">	下载集中配置 </li>
 				<li class="fz_20" id="resetPsd" onclick="resetRSA()">	重置密钥 </li>
 				<li class="fz_20" onclick="RebootShell()">	重启应用 </li>
 				<li class="fz_20" onclick="RebootComputer()">	重启计算机 </li>
@@ -161,106 +160,6 @@
 		</div>
 		<!-- 退出提示框 -->
 
-		<!-- 下载集中配置 Start -->
-		<div class="toast_box" id="ManuallyDownload">
-			<div class="modal_warpper">
-				<div class="box_wrapper" style="margin-top: 50px;">
-					<div class="modal_title">手动下载</div>
-					<div class="input_wrapper">
-						<input name="centerConfigUrl" placeholder="请输入集中配置下载地址" class="inputURL" oninput="changeInput(this)"/>
-					</div>
-					<div id="ManuallyDownloadError" class="input_error">集中配置下载失败</div>
-				</div>
-				<div class="btn_wrapper">
-					<div class="btn_cancel"  onclick="exit()">返回</div>
-					<button class="btn_confirm" onclick="downLoadv3('manual')" disabled="true" id="btn-downLoad">下载</button>
-				</div>
-			</div>
-		</div>
-
-		<div class="toast_box" id="toastErrorBox">
-			<div class="toast_wrapper">
-				<div class="box_wrapper">
-					<img src="./images/warningCircle.png" class="wran_icon"/>
-					<p id="toastErrTips">下载集中配置成功</p>
-				</div>
-			</div>
-		</div>
-
-		<div class="toast_box" id="modalErrorBox">
-			<div class="modal_warpper">
-				<div class="box_wrapper" style="margin-top: 50px;">
-					<div class="modal_title">下载集中配置</div>
-					<div id="modalErrTips">目标地址异常,请联系总行信息技术部处理,是否进行手动下载?</div>
-				</div>
-				<div class="btn_wrapper">
-					<div class="btn_cancel" onclick="closeModal('toast')">返回</div>
-					<div class="btn_confirm" onclick="showManuallyDownloadModal()">确认</div>
-				</div>
-			</div>
-		</div>
-
-		<div class="toast_box" id="boxRestart">
-			<div class="modal_warpper">
-				<div class="box_wrapper" style="margin-top: 20px;">
-					<div class="modal_title">重启应用</div>
-					<div class="restart_span">
-						集中配置已完成下载,重启后生效
-					</div>
-				</div>
-				<div class="rows_restart">
-					<span>
-						<span id="restart-time">29</span>
-						<span>秒后自动重启</span>
-					</span>
-					<button class="btn_confirm" onclick="restart()">重启应用</button>
-				</div>
-			</div>
-		</div>
-
-		<div id='loading_mask'>
-			<div class='loading_wrapper'>
-				<!-- loading 菊花旋转-->
-				<div class='loading_icon_wrapper'>
-					<div class='loading_icon'>
-						<div class="load-line rotate-0">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-30">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-60">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-90">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-120">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-150">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div id="circle-center"></div>
-					</div>
-				</div>
-				<!-- loading 菊花旋转-->
-				<div class='loading_title'>
-					<span>正在下载中</span>
-					<span class="loading_point"></span>
-					<span class="loading_point"></span>
-					<span class="loading_point"></span>
-				</div>
-			</div>
-		</div>
-		<!-- 下载集中配置 End-->
-
 		<!-- loading -->
 		<div id='loadContent'>
 			<div class="back_cover" ></div>

+ 0 - 101
addin/res/ManagerDesktop/homePageErr.html

@@ -40,7 +40,6 @@
 				<img width="100%" src="./images/logo_cmb.png" />
 			</div>
 			<ul id="navBtns">
-				<li class="fz_20" id="downLoadConfig" onclick="downLoadv3('auto')">	下载集中配置 </li>
 				<li class="fz_20" id="resetPsd" onclick="resetRSA()">	重置密钥 </li>
 				<li class="fz_20" onclick="RebootShell()">	重启应用 </li>
 				<li class="fz_20" onclick="RebootComputer()">	重启计算机 </li>
@@ -160,106 +159,6 @@
 		</div>
 		<!-- 退出提示框 -->
 
-		<!-- 下载集中配置 Start -->
-		<div class="toast_box" id="ManuallyDownload">
-			<div class="modal_warpper">
-				<div class="box_wrapper" style="margin-top: 50px;">
-					<div class="modal_title">手动下载</div>
-					<div class="input_wrapper">
-						<input name="centerConfigUrl" placeholder="请输入集中配置下载地址" class="inputURL" oninput="changeInput(this)"/>
-					</div>
-					<div id="ManuallyDownloadError" class="input_error">集中配置下载失败</div>
-				</div>
-				<div class="btn_wrapper">
-					<div class="btn_cancel"  onclick="exit()">返回</div>
-					<button class="btn_confirm" onclick="downLoadv3('manual')" disabled="true" id="btn-downLoad">下载</button>
-				</div>
-			</div>
-		</div>
-
-		<div class="toast_box" id="toastErrorBox">
-			<div class="toast_wrapper">
-				<div class="box_wrapper">
-					<img src="./images/warningCircle.png" class="wran_icon"/>
-					<p id="toastErrTips">下载集中配置成功</p>
-				</div>
-			</div>
-		</div>
-
-		<div class="toast_box" id="modalErrorBox">
-			<div class="modal_warpper">
-				<div class="box_wrapper" style="margin-top: 50px;">
-					<div class="modal_title">下载集中配置</div>
-					<div id="modalErrTips">目标地址异常,请联系总行信息技术部处理,是否进行手动下载?</div>
-				</div>
-				<div class="btn_wrapper">
-					<div class="btn_cancel" onclick="closeModal('toast')">返回</div>
-					<div class="btn_confirm" onclick="showManuallyDownloadModal()">确认</div>
-				</div>
-			</div>
-		</div>
-
-		<div class="toast_box" id="boxRestart">
-			<div class="modal_warpper">
-				<div class="box_wrapper" style="margin-top: 20px;">
-					<div class="modal_title">重启应用</div>
-					<div class="restart_span">
-						集中配置已完成下载,重启后生效
-					</div>
-				</div>
-				<div class="rows_restart">
-					<span>
-						<span id="restart-time">29</span>
-						<span>秒后自动重启</span>
-					</span>
-					<button class="btn_confirm" onclick="restart()">重启应用</button>
-				</div>
-			</div>
-		</div>
-
-		<div id='loading_mask'>
-			<div class='loading_wrapper'>
-				<!-- loading 菊花旋转-->
-				<div class='loading_icon_wrapper'>
-					<div class='loading_icon'>
-						<div class="load-line rotate-0">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-30">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-60">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-90">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-120">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-150">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div id="circle-center"></div>
-					</div>
-				</div>
-				<!-- loading 菊花旋转-->
-				<div class='loading_title'>
-					<span>正在下载中</span>
-					<span class="loading_point"></span>
-					<span class="loading_point"></span>
-					<span class="loading_point"></span>
-				</div>
-			</div>
-		</div>
-		<!-- 下载集中配置 End-->
-
 		<!-- loading -->
 		<div id='loadContent'>
 			<div class="back_cover" ></div>

+ 6 - 40
addin/res/ManagerDesktop/js/getTerminalInfo.js

@@ -34,7 +34,6 @@ window.onload=function(){
 	}
 
   HealthManagerService.init();
-  CenterSettingService.init();
 	ResourceWatcherService.init();
   getHardwareInfo()
   // getAccessUrl()
@@ -125,32 +124,6 @@ function hardwareConfig(module){ //todo
 }
 
 
-/**
- * @description: 查询初始化地址
- * @param {} 
- * @return: HostUrl
- */
-let HostUrl = ''
-function getAccessUrl(){
-	let req = new Request()
-	let timeoutFn= setTimeout(function(){
-		let tips = 'GetAccessUrl 请求超时'
-		ModalPrompt(tips, 'pathN')
-	},60000)
-		
-	CenterSettingService.GetAccessUrl(req, function(ret) {
-		logEvent("GetAccessUrl ret: "+JSON.stringify(ret));
-		console.log("GetAccessUrl ret: "+JSON.stringify(ret));
-		if(ret){
-			clearTimeout(timeoutFn);
-			HostUrl = ret.HostUrl
-			// $('.urlAccessAddr').html(ret.HostUrl)
-		}
-		
-	})
-}
-
-
 /**
  * @description: 查询准入地址
  * @param {reqName:'HostUrl'} 
@@ -158,28 +131,24 @@ function getAccessUrl(){
  */
 function getCertainAceessUrl(){
 	let req = new Request()
-	req.reqName = 'HostUrl'
+	req['{e12a3dc0-3a0b-47c4-a8c3-75190a42ae68}'] ={entity:'AccessAuthorization',key:'HostUrl'}
 	let timeoutFn= setTimeout(function(){
-		let tips = 'GetCertainAceessUrl 请求超时'
+		let tips = 'ReadCenterConfigStr 请求超时'
 		ModalPrompt(tips, 'pathN')
 	},60000)
 		
-	CenterSettingService.GetCertainAceessUrl(req, function(ret) {
-		logEvent("GetCertainAceessUrl ret: "+JSON.stringify(ret));
-		console.log("GetCertainAceessUrl ret: "+JSON.stringify(ret));
+	HealthManagerService.ReadCenterConfigStr(req, function(ret) {
+		logEvent("ReadCenterConfigStr ret: "+JSON.stringify(ret));
+		console.log("ReadCenterConfigStr ret: "+JSON.stringify(ret));
 		if(ret){
 			clearTimeout(timeoutFn);
-			HostUrl = ret.CertainAceessUrl
-			$('.urlAccessAddr').html(ret.CertainAceessUrl) 
+			$('.urlAccessAddr').html(ret.value) 
 		}
-		
 	})
 }
 
 
 
-
-
 /**
  * @description: modal显示设置
  * @param {tips: 提示信息,pathType:pathY|pathN 提示类型,origion:选填 来源 InitializeNew| } 
@@ -215,7 +184,6 @@ function closeModal(type){
 
 			$('#scanIdentity').fadeOut(); //二维码关闭
 			$('#RSAReseting').fadeOut(); //重置密钥中···关闭
-			$('#ManuallyDownload').fadeOut();
 
 			setTimeout(()=>{ //延时显示,避免内容污染
 				$('#entityCheckout').fadeIn('slow')
@@ -223,8 +191,6 @@ function closeModal(type){
 				$('#navBtns').fadeIn('slow')
 			},500)
 		}
-	}else if(type=='toast'){
-		$('#modalErrorBox').fadeOut('slow')
 	} else{
 		$('#modalConfirm').fadeOut('slow')
 	}

+ 2 - 286
addin/res/ManagerDesktop/js/initPsd.js

@@ -9,9 +9,7 @@ window.onload=function(){
 		}
 	}
 	
-	CenterSettingService.init();
 	AccessAuthService.init();
-	HealthManagerService.init();
 
 	WebSocketBase.socket.onerror = function () {
 		logEvent("HealthManagerService startSession callback");
@@ -28,30 +26,11 @@ window.onload=function(){
  * @return: 
  */
 function ModalStyle(tips,pathType){
-	$('#modalBox').fadeIn('slow')
 	$('#loadContent').fadeOut('slow')
-
 	$('#errTips').html(tips);
 	let path = (pathType == 'pathY') ? './images/success.png' :  './images/fail.png'
-	$('#modalBox img').attr('src', path)
-}
-
-function showToast(title){
-	$('#toastErrTips').html(title);
-	$('#loading_mask').hide();
-	$('#toastErrorBox').fadeIn('slow')
-	setTimeout(()=>{
-		$('#toastErrorBox').fadeOut('slow')
-	},2000)
 }
 
-function changeInput(obj){
-	if(obj.value!=''){
-		$('#btn-downLoad').removeAttr('disabled');
-	}else{
-		$('#btn-downLoad').attr('disabled','disabled');
-	}
-}
 
 /**
  * @description: 输入不为null校验
@@ -73,30 +52,6 @@ function RegExpNull(vals){
 	return IsNull;
 }
 
-/**
- * @description: IP地址校验
- * @param {type} 
- * @return: 
- */
-function onblurAddr(IPType){
-	let RegxIP = new RegExp("^((25[0-5]|2[0-4]\\d|[1]{1}\\d{1}\\d{1}|[1-9]{1}\\d{1}|\\d{1})($|(?!\\.$)\\.)){4}$");
-	let tips,IpAddr
-	switch(IPType)
-	{
-		case 'config': 
-			IpAddr = $(".config input[name='configAddr']").val(); 
-			tips = '集中配置地址格式不正确'
-			break;
-		case 'access': 
-			IpAddr = $(".setting input[name='accessAddr']").val();
-			tips = '准入服务地址格式不正确'
-			break;
-	}
-	if(IpAddr=='')return
-	if( !RegxIP.test(IpAddr) ){
-		ModalStyle(tips,'pathN')
-	}
-}
 
 let timeout=60000;
 /**
@@ -129,207 +84,6 @@ function restart(){
 	DeviceService.RebootShell();
 }
 
-function downLoad(){
-	let req = new Request(),reqIn ={};
-	// req.downloadv2 = 1;
-
-	let IsNull = RegExpNull(reqIn)
-	if(IsNull) return false
-	$('#loadContent').fadeIn('slow')
-	// timeoutFn
-	let timeoutFn= setTimeout(function(){
-		$('#loadContent').fadeOut('slow')
-		let tips = '请求超时'
-		showToast(tips);
-	},timeout)
-
-	CenterSettingService.Downloadv2(req, function(ret) {
-		logEvent("Download ret: "+JSON.stringify(ret));
-		console.log("Download ret: "+JSON.stringify(ret));
-		
-		if(ret){
-			clearTimeout(timeoutFn);
-			$('#loadContent').fadeOut('slow')
-			if(ret.downloadStat==2){
-				let tips = ret.strErrMsg
-				ModalStyle(tips,'pathN');
-				return false
-			}
-			let tips = '下载集中配置成功'
-				ModalStyle(tips,'pathY')
-				document.getElementById("urlConfigAddr").innerHTML = ret.CenterConfigUrl;
-		}
-		
-	})
-}
-
-function downLoadv3(value){
-	if(value=='auto'){
-		let req = new Request();
-		$('#loading_mask').fadeIn('slow');
-		let timeoutFn= setTimeout(function(){
-			$('#loading_mask').fadeOut('slow');
-			let tips = '请求超时'
-			showToast(tips);
-		},timeout)
-
-		CenterSettingService.Downloadv3(req, function(ret) {
-			logEvent("Download ret: "+JSON.stringify(ret));
-			console.log("Download ret: "+JSON.stringify(ret));
-			
-			if(ret){
-				clearInterval(timeChange);
-				clearTimeout(timeoutFn);
-				$('#loading_mask').fadeOut('slow');
-				if(ret.downloadStat==1){
-					// document.getElementById("configUrl").innerHTML = ret.retCenterConfigUrl;
-					$('#boxRestart').fadeIn();
-					timeChange = setInterval(clock, 1000);
-				}else if(ret.downloadStat==3 || ret.downloadStat==2){
-					let tips = ret.strErrMsg?ret.strErrMsg:'集中配置下载失败';
-					showToast(tips);
-					return false
-				}else {
-					let msg = ret.strErrMsg?ret.strErrMsg:'集中配置下载失败';
-					let tips = msg + ',请联系总行信息部处理,是否进行手动下载?';
-					$('#modalErrorBox').fadeIn('slow');
-					$('#modalErrTips').html(tips);
-					return false
-				}
-			}
-		})
-	}else{
-		$('#ManuallyDownloadError').html("");
-		$('#ManuallyDownloadError').hide();
-		let req = new Request(),reqIn ={};
-		let data = document.getElementsByTagName('input');
-		reqIn.reqCenterConfigUrl = data['centerConfigUrl'].value;
-		req = Object.assign({},req,reqIn)
-		$('#loading_mask').fadeIn('slow');
-		let timeoutFn= setTimeout(function(){
-			$('#loading_mask').fadeOut('slow');
-			let tips = '请求超时'
-			ModalStyle(tips,'pathN')
-		},timeout)
-
-		CenterSettingService.Downloadv3(req, function(ret) {
-			logEvent("Download ret: "+JSON.stringify(ret));
-			console.log("Download ret: "+JSON.stringify(ret));
-			if(ret){
-				clearInterval(timeChange);
-				clearTimeout(timeoutFn);
-				$('#loading_mask').fadeOut('slow');
-				if(ret.downloadStat==1){
-					exit();
-					// document.getElementById("configUrl").innerHTML = ret.retCenterConfigUrl;
-					$('#boxRestart').fadeIn();
-					timeChange = setInterval(clock, 1000);
-				}else if(ret.downloadStat==3){
-					exit();
-					let tips = ret.strErrMsg?ret.strErrMsg:'集中配置是最新版本';
-					showToast(tips);
-					return false
-				}else {
-					let msg = ret.strErrMsg?ret.strErrMsg:'集中配置下载失败';
-					$('#ManuallyDownloadError').html(msg);
-					$('#ManuallyDownloadError').show();
-					return false
-				}
-			}
-		})
-	}
-	
-}
-
-
-let HostUrl = "" //准入服务地址
-function getAccessUrl(){
-	let req = new Request()
-	let timeoutFn= setTimeout(function(){
-		$('#loadContent').fadeOut('slow');
-		let tips = '请求超时'
-		showToast(tips);
-	},5000)
-		
-	CenterSettingService.GetAccessUrl(req, function(ret) {
-		logEvent("GetAccessUrl ret: "+JSON.stringify(ret));
-		console.log("GetAccessUrl ret: "+JSON.stringify(ret));
-		if(ret){
-			clearTimeout(timeoutFn);
-			$('#loadContent').fadeOut('slow')
-			
-			// let tips = '获取准入服务地址成功'
-			// ModalStyle(tips,'pathY')
-			HostUrl = ret.HostUrl
-			document.getElementById("urlAccessAddr").innerHTML= ret.HostUrl;
-		}
-		
-	})
-}
-
-/**
- * @description: 读取集中配置文件,注入密钥初始化url,port
- * @param {type} 
- * @return: 
- */
-function ReadCenterConfig(readType,readConfig){
-	$('#loadContent').fadeIn('slow');
-	let timeoutFn= setTimeout(function(){
-		$('#loadContent').fadeOut('slow')
-		let tips = '请求超时'
-		ModalStyle(tips,'pathN')
-		console.log('timeoutFn--ReadCenterConfig-setTimeout222->')
-	},timeout)
-
-	let req = new Request(),reqIn ={};
-	if(readType==='access'){
-		req.entityName = 'AccessAuthorization' 
-		req.key = 'Server' 
-	}else{
-		req.entityName = 'CenterSetting' 
-		req.key = 'Server' 
-	}
-	req.reserved1 = 0
-	req.reserved2 = 0
-	req.reserved3 = ''
-	req.reserved4 = ''
-	req.timeout = 60000
-	logEvent("HealthManagerService->ReadCenterConfigStr");
-	
-	HealthManagerService.ReadCenterConfigStr(req, function(ret) {
-		logEvent("ReadCenterConfigStr ret: "+JSON.stringify(ret));
-		console.log('ReadCenterConfigStr----',ret)
-		if(ret){
-			$('#loadContent').fadeOut('slow');
-			clearTimeout(timeoutFn)
-		}
-
-		if(ret.errorCode ===0){
-			let result = JSON.parse(ret['{e12a3dc0-3a0b-47c4-a8c3-75190a42ae68}'] )
-			let addr = result.value.split(' ')[0]
-			let port = result.value.split(' ')[1]
-
-			if(readType==='access'){
-				$('.setting input[name=accessAddr]').val(addr)
-				$('.setting input[name=accessPort]').val(port)
-			}else{
-				$('.config input[name=configAddr]').val(addr)
-				$('.config input[name=configPoint]').val(port)
-			}
-			
-
-		}else{
-			let tips ='读取集中配置失败'+ret.errorCode.toString(16)
-			if(readConfig==='readConfig'){
-				ModalStyle(tips,'pathN')	
-
-			}
-		}
-		
-	})
-}
-
-
 // 扫码登录后接收code
 window.onmessage = (event) => {
   console.log('event----',event)
@@ -351,20 +105,9 @@ window.onmessage = (event) => {
  * @return: 
  */
 function ResetRSA(code){
-		let data = document.getElementsByTagName('input');
-
     let req = new Request(),reqIn={};
-    reqIn.strAuthServer = HostUrl; 
-    // reqIn.nAuthPort = Number( data['accessPort'].value)   todo
-    reqIn.strUserID =  code //data['account'].value 
-		// let agentId = data['account'].value;
-		// if(Number(reqIn.strUserID) ){
-		// 	if (agentId.trim().length == 8) {
-		// 		reqIn.strUserID = "SP" + agentId.trim();
-		// 	} else {
-		// 		reqIn.strUserID = "ST" + agentId.trim();
-		// 	}
-		// }
+    // reqIn.strAuthServer = HostUrl; 
+    reqIn.strUserID =  code 
 		reqIn.strPassword = '88888888' //默认值,后台不做校验
 
 		req.timeout = 60000
@@ -374,14 +117,7 @@ function ResetRSA(code){
 			ModalStyle(tips,'pathN')
 			return;
 		}
-		// if(reqIn.strPassword==''){
-		// 	let tips = '密码不能为空'
-		// 	ModalStyle(tips,'pathN')
-		// 	return;
-		// }
 
-		let IsNull = RegExpNull(reqIn)
-		if(IsNull) return false
 		$('#loadContent').fadeIn('slow')
 		// timeoutFn
 		let timeoutFn= setTimeout(function(){
@@ -421,33 +157,13 @@ function ResetRSA(code){
 		});
 }
 
-function closeModal(value){
-	if(value=='modal'){
-		$('#modalBox').fadeOut('slow')
-	}else{
-		$('#modalErrorBox').fadeOut('slow')
-	}
-}
-
-function showManuallyDownloadModal(){
-	$('#modalErrorBox').fadeOut('slow');
-	$('#ManuallyDownload').fadeIn('slow');
-}
-
 
 function exit(){
-	// document.getElementById("urlConfigAddr").innerHTML ="";
-	// document.getElementById("urlAccessAddr").innerHTML = "";
-	// document.getElementsByTagName('input')['centerConfigUrl'].value="";
-	$('#ManuallyDownloadError').html("");
-	$('#ManuallyDownloadError').hide();
-	$('#btn-downLoad').attr('disabled','disabled');
 	// 进入的方式,决定退出的方式
 	if(window.location.href.indexOf('errPage')>-1){
 		$('.iframeDiv').fadeOut();
 		$('.iframe-box').fadeOut();
 		$('.result-wrap').fadeOut();
-		$('#ManuallyDownload').fadeOut();
 	}else{
 		let req = {};
 		req.messageType = 0;

+ 2 - 9
addin/res/ManagerDesktop/js/navOprator.js

@@ -88,11 +88,7 @@ function downLoadv3(value){
 			}
 		})
 	}else{
-		$('#ManuallyDownloadError').html("");
-		$('#ManuallyDownloadError').hide();
-		let req = new Request(),reqIn ={};
-		let data = document.getElementsByTagName('input');
-		reqIn.reqCenterConfigUrl = data['centerConfigUrl'].value;
+		let req = new Request(),reqIn ={}
 		req = Object.assign({},req,reqIn)
 		$('#loading_mask').fadeIn('slow');
 		let timeoutFn= setTimeout(function(){
@@ -251,12 +247,9 @@ function stopAnimation(){
 
 // 退出
 function exit(){
-	document.getElementsByTagName('input')['centerConfigUrl'].value="";
-	$('#ManuallyDownloadError').html("");
-	$('#ManuallyDownloadError').hide();
 	$('#btn-downLoad').attr('disabled','disabled');
 	// 进入的方式,决定退出的方式
-	if(window.location.href.indexOf('entityCheck')>-1||window.location.href.indexOf('serverNoAccess')>-1||window.location.href.indexOf('audioErr')>-1){
+	if(window.location.href.indexOf('entityCheck')>-1||window.location.href.indexOf('serverNoAccess')>-1||window.location.href.indexOf('audioErr')>-1||window.location.href.indexOf('homePageErr')>-1){
 		$('#scanIdentity').fadeOut(); //二维码关闭
 		$('#RSAReseting').fadeOut(); //重置密钥中···关闭
 		$('#ManuallyDownload').fadeOut();

+ 1 - 102
addin/res/ManagerDesktop/serverNoAccess.html

@@ -52,7 +52,6 @@
 				<img width="100%" src="./images/logo_cmb.png" />
 			</div>
 			<ul id="navBtns">
-				<li class="fz_20" id="downLoadConfig" onclick="downLoadv3('auto')">	下载集中配置 </li>
 				<li class="fz_20" id="resetPsd" onclick="resetRSA()">	重置密钥 </li>
 				<li class="fz_20" onclick="RebootShell()">	重启应用 </li>
 				<li class="fz_20" onclick="RebootComputer()">	重启计算机 </li>
@@ -156,107 +155,7 @@
 			</div>
 		</div>
 		<!-- 退出提示框 -->
-
-		<!-- 下载集中配置 Start -->
-		<div class="toast_box" id="ManuallyDownload">
-			<div class="modal_warpper">
-				<div class="box_wrapper" style="margin-top: 50px;">
-					<div class="modal_title">手动下载</div>
-					<div class="input_wrapper">
-						<input name="centerConfigUrl" placeholder="请输入集中配置下载地址" class="inputURL" oninput="changeInput(this)"/>
-					</div>
-					<div id="ManuallyDownloadError" class="input_error">集中配置下载失败</div>
-				</div>
-				<div class="btn_wrapper">
-					<div class="btn_cancel"  onclick="exit()">返回</div>
-					<button class="btn_confirm" onclick="downLoadv3('manual')" disabled="true" id="btn-downLoad">下载</button>
-				</div>
-			</div>
-		</div>
-
-		<div class="toast_box" id="toastErrorBox">
-			<div class="toast_wrapper">
-				<div class="box_wrapper">
-					<img src="./images/warningCircle.png" class="wran_icon"/>
-					<p id="toastErrTips">下载集中配置成功</p>
-				</div>
-			</div>
-		</div>
-
-		<div class="toast_box" id="modalErrorBox">
-			<div class="modal_warpper">
-				<div class="box_wrapper" style="margin-top: 50px;">
-					<div class="modal_title">下载集中配置</div>
-					<div id="modalErrTips">目标地址异常,请联系总行信息技术部处理,是否进行手动下载?</div>
-				</div>
-				<div class="btn_wrapper">
-					<div class="btn_cancel" onclick="closeModal('toast')">返回</div>
-					<div class="btn_confirm" onclick="showManuallyDownloadModal()">确认</div>
-				</div>
-			</div>
-		</div>
-
-		<div class="toast_box" id="boxRestart">
-			<div class="modal_warpper">
-				<div class="box_wrapper" style="margin-top: 20px;">
-					<div class="modal_title">重启应用</div>
-					<div class="restart_span">
-						集中配置已完成下载,重启后生效
-					</div>
-				</div>
-				<div class="rows_restart">
-					<span>
-						<span id="restart-time">29</span>
-						<span>秒后自动重启</span>
-					</span>
-					<button class="btn_confirm" onclick="restart()">重启应用</button>
-				</div>
-			</div>
-		</div>
-
-		<div id='loading_mask'>
-			<div class='loading_wrapper'>
-				<!-- loading 菊花旋转-->
-				<div class='loading_icon_wrapper'>
-					<div class='loading_icon'>
-						<div class="load-line rotate-0">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-30">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-60">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-90">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-120">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div class="load-line rotate-150">
-							<span class="left"></span>
-							<span class="right"></span>
-						</div>
-						<div id="circle-center"></div>
-					</div>
-				</div>
-				<!-- loading 菊花旋转-->
-				<div class='loading_title'>
-					<span>正在下载中</span>
-					<span class="loading_point"></span>
-					<span class="loading_point"></span>
-					<span class="loading_point"></span>
-				</div>
-			</div>
-		</div>
-		<!-- 下载集中配置 End-->
-
+		
 		<!-- loading -->
 		<div id='loadContent'>
 			<div class="back_cover" ></div>

+ 106 - 0
addin/res/ManagerDesktop/upgradeRestart.html

@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+		<title>错误页-重启应用</title>
+		<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
+		<link rel="stylesheet" type="text/css" href="css/errType.css" />
+		<link rel="stylesheet" type="text/css" href="css/non-ie-style.css" /> 
+		<link rel="stylesheet" type="text/css" href="css/loading.css" />
+
+		<style>
+			.upgrade-restart h3{
+				margin-bottom: 40px;
+			}
+		</style>
+	</head>
+	<body class="errType">
+		<nav>
+			<div class="logo">
+				<img width="100%" src="./images/logo_cmb.png" />
+			</div>
+		</nav>
+		<div class="hareword-info upgrade-restart">
+			<h3 class="fz_44">系统升级中,稍后自动重启应用<dot class="dot">●●●●●●</dot></h3>
+			<!-- <p id="errorInfo">
+				该设备硬件地址信息和后台记录不一致,请联系分行设备管理员扫描下方二维码。
+			</p> -->
+			<div class="result-wrap">
+				<div class="result-item">
+					<label class="fz_28">终端号</label>
+					<span class="fz_28 terminalNo"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">当前时间</label>
+					<span class="fz_28 currDate"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">终端版本</label>
+					<span class="fz_28 termVersion"></span>
+				</div>
+				<div class="result-item">
+					<label class="fz_28">准入地址</label>
+					<span class="fz_28 urlAccessAddr"></span>
+				</div>
+			</div>
+
+			<!-- 二维码授权验证start -->
+			<!-- <div class="scan-verify">
+				<iframe frameborder="no" border="0" allowtransparency="yes" allow="microphone;camera;midi;encrypted-media;"
+				  id="iframeSrc"
+					src="https://one-account-gateway.paasuat.cmbchina.cn/auth-plugin/v2/identity-authentication?clientId=6898ec10629f499187d7b31fbe9823a4&ui=eyJhdXRoVHlwZXMiOlsicXJDb2RlIl0sImhlYWRlciI6dHJ1ZSwicXJDb2RlU2l6ZSI6MTQ1fQ%253D%253D"
+					></iframe>
+				<p>完成扫码授权后</br>请重置密钥</p>
+				<button class="btn-blue" onclick="exit()">重置密钥</button>
+			</div> -->
+			<!-- 二维码授权验证end -->
+		</div>
+
+		<!-- 提示框 -->
+		<div class="modal-box" id="modalBox">
+			<div class="coverBg"></div>
+			<div class="modal" id="modal">
+				<img src="./images/success.png" />
+				<p class="fz_24" id="errTips"></p>
+				<button class="fz_23" onclick="closeModal('modal')">确定</button>
+			</div>
+		</div>
+		<!-- 提示框 -->
+
+		<!-- loading -->
+		<div id='loadContent'>
+			<div class="back_cover" ></div>
+			<div class='loading' id='loading'>
+				<div class='circle circle1'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+				<div class='circle circle2'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+				<div class='circle circle3'>
+					<span></span>
+					<span></span>
+					<span></span>
+					<span></span>
+				</div>
+			</div>
+		</div>
+		<!-- loading -->
+	</body>
+	<script type="text/javascript" src="js/common.js"></script>
+	<script type="text/javascript" src="js/websocket.js"></script>
+	<script type="text/javascript" src="js/webSocketBase.js"></script>
+	<script type="text/javascript" src="js/entityMessage.js"></script>
+	<script type="text/javascript" src="js/eventEmitter.js"></script>
+	<script type="text/javascript" src="js/innerEventEmitter.js"></script>
+	<script type="text/javascript" src="js/errorCodeEnum.js"></script>
+	<script type="text/javascript" src="js/entityService.js"></script>
+	<script type="text/javascript" src="Include/jQuery/js/jquery.min.js" ></script>
+	<script type="text/javascript" src="js/getTerminalInfo.js"></script>
+</html>