Bläddra i källkod

!10677 合并3月版本
Merge pull request !10677 from 80174847/ST2

杨诗友80174847 7 månader sedan
förälder
incheckning
e50f0290c1
100 ändrade filer med 3369 tillägg och 4695 borttagningar
  1. 4 4
      DevAdapter/simulator/cardissuer.1.1/cardissuer_httpans.h
  2. 7 7
      DevAdapter/simulator/cardissuer.1.1/cardissuer_impl.cpp
  3. 4 4
      DevAdapter/simulator/cardissuerstand.1.1/cardissuer_httpans.h
  4. 7 10
      DevAdapter/simulator/cardissuerstand.1.1/cardissuer_impl.cpp
  5. 4 4
      DevAdapter/simulator/cardissuerstore.1.1/cardissuer_httpans.h
  6. 7 7
      DevAdapter/simulator/cardissuerstore.1.1/cardissuer_impl.cpp
  7. 1 1
      DevAdapter/simulator/contactlesscard.1.1/contactless_httpans.h
  8. 2 2
      DevAdapter/simulator/contactlesscard.1.1/contactless_impl.cpp
  9. 13 4
      DevAdapter/simulator/deps/libSimulaRestful/JsonConvertHelper.hpp
  10. 7 1
      DevAdapter/simulator/include/DeviceSimulator.h
  11. 1 0
      Framework/Common/SpBase.h
  12. 85 0
      Framework/RvcLogSdk/baseFun.cpp
  13. 42 0
      Framework/RvcLogSdk/baseFun.h
  14. 22 0
      Framework/RvcLogSdk/baseTime.cpp
  15. 1 0
      Framework/RvcLogSdk/baseTime.h
  16. 1 13
      Framework/RvcLogSdk/log_api.cpp
  17. 1 1
      Framework/RvcLogSdk/log_api.h
  18. 130 23
      Framework/RvcLogSdk/log_builder.cpp
  19. 24 8
      Framework/RvcLogSdk/log_builder.h
  20. 99 131
      Framework/RvcLogSdk/log_db.cpp
  21. 0 1
      Framework/RvcLogSdk/log_db.h
  22. 3 3
      Framework/RvcLogSdk/log_multi_thread.h
  23. 19 16
      Framework/RvcLogSdk/log_persistent_manager.cpp
  24. 7 0
      Framework/RvcLogSdk/log_producer_client.cpp
  25. 2 0
      Framework/RvcLogSdk/log_producer_client.h
  26. 1 1
      Framework/RvcLogSdk/log_producer_config.c
  27. 20 26
      Framework/RvcLogSdk/log_producer_manager.cpp
  28. 1 1
      Framework/RvcLogSdk/log_producer_manager.h
  29. 39 4
      Framework/RvcLogSdk/log_producer_sender.cpp
  30. 0 0
      Framework/RvcLogSdk/log_queue.cpp
  31. 3 3
      Framework/spbase/SpEntity.cpp
  32. 3 0
      Framework/spbase/SpEntityPrivilege.cpp
  33. 239 0
      Framework/spbase/StartUpBase.cpp
  34. 17 0
      Framework/spbase/StartUpBase.h
  35. 2 1
      Framework/spbase/sp_bcm.c
  36. 8 12
      Framework/spbase/sp_logwithlink.cpp
  37. 37 32
      Framework/spbase/sp_mod.c
  38. 17 0
      Framework/spshell/SpShellBase.h
  39. 10 4
      Framework/spshell/svc.cpp
  40. 0 2
      Module/include/DevEntityCommBase.hpp
  41. 72 338
      Module/include/DevFSMCommBase.hpp
  42. 21 80
      Module/mod_CardIssuerStand/CardIssuerFSM.cpp
  43. 5 17
      Module/mod_CardIssuerStand/CardIssuerFSM.h
  44. 3 8
      Module/mod_CardIssuerStand/mod_cardissuer.cpp
  45. 2 3
      Module/mod_CardReadAdapter/CardReadAdapterFSM.cpp
  46. 1 10
      Module/mod_CardReadAdapter/CardReadAdapterFSM.h
  47. 5 16
      Module/mod_ContactlessCard/ContactlessFSM.cpp
  48. 0 5
      Module/mod_ContactlessCard/ContactlessFSM.h
  49. 39 71
      Module/mod_CustMngrAuth/CustMngrAuthFSM.cpp
  50. 0 10
      Module/mod_CustMngrAuth/CustMngrAuthFSM.h
  51. 2 2
      Module/mod_CustMngrAuth/mod_CustMngrAuth.cpp
  52. 56 103
      Module/mod_FingerPrint/FingerPrintFSM.cpp
  53. 5 12
      Module/mod_FingerPrint/FingerPrintFSM.h
  54. 37 41
      Module/mod_FingerPrint/FingerPrint_UserErrorCode.h
  55. 2 12
      Module/mod_FingerPrint/mod_FingerPrint.cpp
  56. 2 2
      Module/mod_FingerPrint/mod_FingerPrint.h
  57. 25 19
      Module/mod_HSPScanner/HSPScannerFSM.cpp
  58. 2 3
      Module/mod_HSPScanner/HSPScannerFSM.h
  59. 1 6
      Module/mod_HSPScanner/mod_HSPScanner.cpp
  60. 15 14
      Module/mod_IDCertificate/IDCertFSM.cpp
  61. 2 13
      Module/mod_IDCertificate/IDCertFSM.h
  62. 2 2
      Module/mod_ResourceWatcher/ResourceWatcher.xml
  63. 142 383
      Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp
  64. 53 13
      Module/mod_ResourceWatcher/ResourceWatcherFSM.h
  65. 0 1
      Module/mod_ResourceWatcher/mod_ResourceWatcher.h
  66. 11 4
      Module/mod_SalesRecorder/mod_SalesRecorder.cpp
  67. 1 1
      Module/mod_SalesRecorder/mod_SalesRecorder.h
  68. 7 0
      Module/mod_UpgradeMgr/UpgradeTaskFSM.cpp
  69. 210 238
      Module/mod_accessauth/AccessAuthFSM.cpp
  70. 74 358
      Module/mod_accessauth/AccessAuthFSM.h
  71. 256 426
      Module/mod_accessauth/mod_AccessAuth.cpp
  72. 11 7
      Module/mod_accessauth/mod_AccessAuth.h
  73. 8 8
      Module/mod_agentip/mod_agentip.cpp
  74. 16 380
      Module/mod_alarm/AlarmFSM.cpp
  75. 3 272
      Module/mod_alarm/AlarmFSM.h
  76. 1 2
      Module/mod_alarm/mod_alarm.cpp
  77. 1 1
      Module/mod_assistantchannel/mod_assistantchannel.cpp
  78. 0 449
      Module/mod_cardissuerstore/CardIssuer.xml
  79. 232 216
      Module/mod_cardissuerstore/CardIssuerFSM.cpp
  80. 184 99
      Module/mod_cardissuerstore/CardIssuerFSM.h
  81. 152 205
      Module/mod_cardissuerstore/CardIssuerStore.xml
  82. 3 0
      Module/mod_cardissuerstore/CardIssuerStore_UserErrorCode.h
  83. 97 48
      Module/mod_cardissuerstore/CardIssuerStore_client_g.h
  84. 97 66
      Module/mod_cardissuerstore/CardIssuerStore_def_g.h
  85. 71 44
      Module/mod_cardissuerstore/CardIssuerStore_server_g.h
  86. 54 22
      Module/mod_cardissuerstore/mod_cardissuer.cpp
  87. 44 20
      Module/mod_cardissuerstore/mod_cardissuer.h
  88. 81 61
      Module/mod_chromium/CWSCodec.cpp
  89. 3 2
      Module/mod_chromium/CWSCodec.h
  90. 73 8
      Module/mod_chromium/CWebsocketServer.cpp
  91. 5 0
      Module/mod_chromium/ReadMe.md
  92. 150 64
      Module/mod_chromium/baseEx.cpp
  93. 56 3
      Module/mod_chromium/baseEx.h
  94. 38 12
      Module/mod_chromium/mod_chromium.cpp
  95. 4 18
      Module/mod_counterconnector/ConnectorFSM.cpp
  96. 14 0
      Module/mod_counterconnector/ConnectorFSM.h
  97. 14 5
      Module/mod_counterconnector/mod_counterconnector.cpp
  98. 8 8
      Module/mod_countercontext/mod_countercontext.cpp
  99. 1 1
      Module/mod_customeraware/CustomerHandleFSM.cpp
  100. 5 137
      Module/mod_evtconverter/evtengine.cpp

+ 4 - 4
DevAdapter/simulator/cardissuer.1.1/cardissuer_httpans.h

@@ -45,7 +45,7 @@ typedef struct MagTracksAns {
 typedef struct CmdInfoAns {
 
 	int dwSize;
-	std::string data;
+	ByteData data; //×Ö½ÚÁ÷Êý¾Ý
 
 	JSONCONVERT2OBJECT_MEMEBER_REGISTER(dwSize, data)
 }CmdInfoAns;
@@ -67,11 +67,11 @@ typedef struct DevOpenExAns {
 typedef struct TransferEnInitAns {
 
 	int iStatus;
-	BYTE Cr1[256];
+	std::string Cr1;
 	int lenR1;
-	BYTE Cr3[256];
+	std::string Cr3;
 	int lenR3;
-	BYTE dKey[256];
+	std::string dKey;
 	int lenKey;
 
 	JSONCONVERT2OBJECT_MEMEBER_REGISTER(iStatus, Cr1, lenR1, Cr3, lenR3, dKey, lenKey)

+ 7 - 7
DevAdapter/simulator/cardissuer.1.1/cardissuer_impl.cpp

@@ -285,7 +285,7 @@ ErrorCodeEnum CardIssuerImpl::ICCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
 
 	if (err == Error_Succeed) {
 		recvBuf.dwSize = ans.dwSize;
-		memcpy(recvBuf.data, ans.data.c_str(), ans.data.length() + 1);
+		memcpy(recvBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
 	}
 
 	return err;
@@ -331,7 +331,7 @@ ErrorCodeEnum CardIssuerImpl::SAMCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
 
 	if (err == Error_Succeed) {
 		recvBuf.dwSize = ans.dwSize;
-		memcpy(recvBuf.data, ans.data.c_str(), ans.data.length() + 1);
+		memcpy(recvBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
 	}
 
 	return err;
@@ -373,7 +373,7 @@ ErrorCodeEnum CardIssuerImpl::ActiveICCardATR(CmdInfo& atrBuf)
 
 	if (err == Error_Succeed) {
 		atrBuf.dwSize = ans.dwSize;
-		memcpy(atrBuf.data, ans.data.c_str(), ans.data.length() + 1);
+		memcpy(atrBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
 	}
 
 	return err;
@@ -424,7 +424,7 @@ ErrorCodeEnum CardIssuerImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
 
 	if (err == Error_Succeed) {
 		recvBuf.dwSize = ans.dwSize;
-		memcpy(recvBuf.data, ans.data.c_str(), ans.data.length() + 1);
+		memcpy(recvBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
 	}
 
 	return err;
@@ -459,9 +459,9 @@ ErrorCodeEnum CardIssuerImpl::TransferEnInit(int& iStatus, BYTE*& Cr1, int& lenR
 		lenR3 = ans.lenR3;
 		lenKey = ans.lenKey;
 
-		memcpy(Cr1, ans.Cr1, 256);
-		memcpy(Cr3, ans.Cr3, 256);
-		memcpy(dKey, ans.dKey, 256);
+		memcpy(Cr1, ans.Cr1.c_str(), 256);
+		memcpy(Cr3, ans.Cr3.c_str(), 256);
+		memcpy(dKey, ans.dKey.c_str(), 256);
 	}
 
 	return err;

+ 4 - 4
DevAdapter/simulator/cardissuerstand.1.1/cardissuer_httpans.h

@@ -45,7 +45,7 @@ typedef struct MagTracksAns {
 typedef struct CmdInfoAns {
 	
 	int dwSize;
-	std::string data;
+	ByteData data; //×Ö½ÚÁ÷Êý¾Ý
 
 	JSONCONVERT2OBJECT_MEMEBER_REGISTER(dwSize, data)
 }CmdInfoAns;
@@ -67,11 +67,11 @@ typedef struct DevOpenExAns {
 typedef struct TransferEnInitAns {
 	
 	int iStatus;
-	BYTE Cr1[256];
+	std::string Cr1;
 	int lenR1;
-	BYTE Cr3[256];
+	std::string Cr3;
 	int lenR3;
-	BYTE dKey[256];
+	std::string dKey;
 	int lenKey;
 
 	JSONCONVERT2OBJECT_MEMEBER_REGISTER(iStatus, Cr1, lenR1, Cr3, lenR3, dKey, lenKey)

+ 7 - 10
DevAdapter/simulator/cardissuerstand.1.1/cardissuer_impl.cpp

@@ -285,7 +285,7 @@ ErrorCodeEnum CardIssuerImpl::ICCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
 
 	if (err == Error_Succeed) {
 		recvBuf.dwSize = ans.dwSize;
-		memcpy(recvBuf.data, ans.data.c_str(), ans.data.length() + 1);
+		memcpy(recvBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
 	}
 
 	return err;
@@ -326,12 +326,9 @@ ErrorCodeEnum CardIssuerImpl::SAMCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
 	ErrorCodeEnum err = Error_Succeed;
 	CmdInfoAns ans;
 
-	err = SimulatorHttpFunction(EntityName, "SAMCommand", ans);
-	LOG4VTM(INFO, "SAMCommand err = " << err);
-
 	if (err == Error_Succeed) {
 		recvBuf.dwSize = ans.dwSize;
-		memcpy(recvBuf.data, ans.data.c_str(), ans.data.length() + 1);
+		memcpy(recvBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
 	}
 
 	return err;
@@ -373,7 +370,7 @@ ErrorCodeEnum CardIssuerImpl::ActiveICCardATR(CmdInfo& atrBuf)
 
 	if (err == Error_Succeed) {
 		atrBuf.dwSize = ans.dwSize;
-		memcpy(atrBuf.data, ans.data.c_str(), ans.data.length() + 1);
+		memcpy(atrBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
 	}
 
 	return err;
@@ -424,7 +421,7 @@ ErrorCodeEnum CardIssuerImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
 
 	if (err == Error_Succeed) {
 		recvBuf.dwSize = ans.dwSize;
-		memcpy(recvBuf.data, ans.data.c_str(), ans.data.length() + 1);
+		memcpy(recvBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
 	}
 
 	return err;
@@ -459,9 +456,9 @@ ErrorCodeEnum CardIssuerImpl::TransferEnInit(int& iStatus, BYTE*& Cr1, int& lenR
 		lenR3 = ans.lenR3;
 		lenKey = ans.lenKey;
 
-		memcpy(Cr1, ans.Cr1, 256);
-		memcpy(Cr3, ans.Cr3, 256);
-		memcpy(dKey, ans.dKey, 256);
+		memcpy(Cr1, ans.Cr1.c_str(), 256);
+		memcpy(Cr3, ans.Cr3.c_str(), 256);
+		memcpy(dKey, ans.dKey.c_str(), 256);
 	}
 
 	return err;

+ 4 - 4
DevAdapter/simulator/cardissuerstore.1.1/cardissuer_httpans.h

@@ -45,7 +45,7 @@ typedef struct MagTracksAns {
 typedef struct CmdInfoAns {
 	
 	int dwSize;
-	std::string data;
+	ByteData data; //×Ö½ÚÁ÷Êý¾Ý
 
 	JSONCONVERT2OBJECT_MEMEBER_REGISTER(dwSize, data)
 }CmdInfoAns;
@@ -67,11 +67,11 @@ typedef struct DevOpenExAns {
 typedef struct TransferEnInitAns {
 	
 	int iStatus;
-	BYTE Cr1[256];
+	std::string Cr1;
 	int lenR1;
-	BYTE Cr3[256];
+	std::string Cr3;
 	int lenR3;
-	BYTE dKey[256];
+	std::string dKey;
 	int lenKey;
 
 	JSONCONVERT2OBJECT_MEMEBER_REGISTER(iStatus, Cr1, lenR1, Cr3, lenR3, dKey, lenKey)

+ 7 - 7
DevAdapter/simulator/cardissuerstore.1.1/cardissuer_impl.cpp

@@ -285,7 +285,7 @@ ErrorCodeEnum CardIssuerImpl::ICCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
 
 	if (err == Error_Succeed) {
 		recvBuf.dwSize = ans.dwSize;
-		memcpy(recvBuf.data, ans.data.c_str(), ans.data.length() + 1);
+		memcpy(recvBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
 	}
 
 	return err;
@@ -331,7 +331,7 @@ ErrorCodeEnum CardIssuerImpl::SAMCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
 
 	if (err == Error_Succeed) {
 		recvBuf.dwSize = ans.dwSize;
-		memcpy(recvBuf.data, ans.data.c_str(), ans.data.length() + 1);
+		memcpy(recvBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
 	}
 
 	return err;
@@ -373,7 +373,7 @@ ErrorCodeEnum CardIssuerImpl::ActiveICCardATR(CmdInfo& atrBuf)
 
 	if (err == Error_Succeed) {
 		atrBuf.dwSize = ans.dwSize;
-		memcpy(atrBuf.data, ans.data.c_str(), ans.data.length() + 1);
+		memcpy(atrBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
 	}
 
 	return err;
@@ -424,7 +424,7 @@ ErrorCodeEnum CardIssuerImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
 
 	if (err == Error_Succeed) {
 		recvBuf.dwSize = ans.dwSize;
-		memcpy(recvBuf.data, ans.data.c_str(), ans.data.length() + 1);
+		memcpy(recvBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
 	}
 
 	return err;
@@ -459,9 +459,9 @@ ErrorCodeEnum CardIssuerImpl::TransferEnInit(int& iStatus, BYTE*& Cr1, int& lenR
 		lenR3 = ans.lenR3;
 		lenKey = ans.lenKey;
 
-		memcpy(Cr1, ans.Cr1, 256);
-		memcpy(Cr3, ans.Cr3, 256);
-		memcpy(dKey, ans.dKey, 256);
+		memcpy(Cr1, ans.Cr1.c_str(), 256);
+		memcpy(Cr3, ans.Cr3.c_str(), 256);
+		memcpy(dKey, ans.dKey.c_str(), 256);
 	}
 
 	return err;

+ 1 - 1
DevAdapter/simulator/contactlesscard.1.1/contactless_httpans.h

@@ -15,7 +15,7 @@ typedef struct ActiveContactlessICCardAns {
 
 typedef struct CmdInfoAns {
 	int dwSize;
-	std::string data;
+	ByteData data;
 
 	JSONCONVERT2OBJECT_MEMEBER_REGISTER(dwSize, data)
 }CmdInfoAns;

+ 2 - 2
DevAdapter/simulator/contactlesscard.1.1/contactless_impl.cpp

@@ -152,7 +152,7 @@ ErrorCodeEnum ContactlessCardImpl::MifareCommand(MifareFuctionEnum eFunType, Cmd
 
     if (err == Error_Succeed) {
         recvBuf.dwSize = ans.dwSize;
-        memcpy(recvBuf.data, ans.data.c_str(), ans.data.length() + 1);
+        memcpy(recvBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
     }
 
     return err;
@@ -168,7 +168,7 @@ ErrorCodeEnum ContactlessCardImpl::RFTypeABCommand(CmdInfo sendBuf, CmdInfo& rec
 
     if (err == Error_Succeed) {
         recvBuf.dwSize = ans.dwSize;
-        memcpy(recvBuf.data, ans.data.c_str(), ans.data.length() + 1);
+        memcpy(recvBuf.data, ans.data.bData, sizeof(BYTE) * MAX_IC_BUFFER_SIZE);
     }
 
     return err;

+ 13 - 4
DevAdapter/simulator/deps/libSimulaRestful/JsonConvertHelper.hpp

@@ -8,6 +8,11 @@
 
 typedef BYTE byte, *PBYTE, *LPBYTE;
 
+struct ByteData
+{
+    BYTE bData[4096];
+};
+
 static int StrBuf2HexBuf(const char* strBuf, PBYTE* hexBuf)
 {
     int len = strlen(strBuf);
@@ -259,18 +264,22 @@ static bool Object2Json(Json::Value& jsonTypeValue, const std::string& key, cons
     return true;
 }
 
-static bool Json2Object(BYTE* aimObj, const Json::Value& jsonTypeValue)
+static bool Json2Object(ByteData& aimObj, const Json::Value& jsonTypeValue)
 {
-    PBYTE pData = aimObj;
+    PBYTE tmp = new BYTE[4096];
     if (jsonTypeValue.isNull()) {
-        pData = NULL;
+        delete[] tmp;
         return true;
     }
     if (jsonTypeValue.isNull() || !jsonTypeValue.isString()) {
+        delete[] tmp;
         return false;
     }
     else {
-        StrBuf2HexBuf(jsonTypeValue.asString().c_str(), &pData);
+        memset(aimObj.bData, 0, 4096);
+        int len = StrBuf2HexBuf(jsonTypeValue.asString().c_str(), &tmp);
+        memcpy(aimObj.bData, tmp, len);
+        delete[] tmp;
         return true;
     }
 }

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

@@ -419,7 +419,13 @@ ErrorCodeEnum SimulatorHttpFunction(string entityName, string devFuncName, T& ob
 
 		if (err == Error_Succeed)
 		{
-			SP::Simulator::Restful::ExtractDataFromDebranchResponse(result.content, obj);
+			bool res = SP::Simulator::Restful::ExtractDataFromDebranchResponse(result.content, obj);
+
+			//DEBUG
+			if (!res)
+			{
+				err = Error_Bug;
+			}
 		}	
 	}
 	else {

+ 1 - 0
Framework/Common/SpBase.h

@@ -1620,6 +1620,7 @@ SPBASE_API bool refreshLogLevel();
 SPBASE_API int getCurLogLevel();
 SPBASE_API int getReduceSpbaseLog();
 SPBASE_API void setReduceSpbaseLog(int isNor);
+SPBASE_API void setTestLogMode();
 SPBASE_API ErrorCodeEnum GetAllEntityIdx(CAutoArray<CSimpleStringA>& strEntityNames, CAutoArray<WORD>& wEntityDevelopIDs);
 
 

+ 85 - 0
Framework/RvcLogSdk/baseFun.cpp

@@ -0,0 +1,85 @@
+#include <time.h>
+#include <RestfulFunc.h>
+#include "json/json.h"
+#include "baseFun.h"
+#include <mutex>
+#include <condition_variable>
+std::mutex m_mutex;
+std::condition_variable condition_variable;
+
+
+long LOG_GET_TIME() 
+{ 
+    return time(NULL); 
+}
+
+RvcLogSdkManager& RvcLogSdkManager::getInstance() {
+    static RvcLogSdkManager instance;
+    return instance;
+}
+
+std::list<log_group_builder*> &RvcLogSdkManager::getResendFrameList() {
+    return m_resend_frame_list;
+}
+
+RvcLogSdkManager::RvcLogSdkManager() {
+    m_resend_frame_list.clear();
+    m_testLogMode = false;
+}
+
+bool RvcLogSdkManager::wait_for_counter_greater_than_one_with_timeout() {
+    std::unique_lock<std::mutex> lock(m_mutex);
+    // 等待条件满足(即 counter > 1),最多等待 100 毫秒
+    bool timed_out = !condition_variable.wait_for(lock, std::chrono::milliseconds(100), [&] { return m_logFlush_num > 0; });
+
+    m_logFlush_num = 0;//已经刷新了,后续重新计数
+    return true;
+}
+
+int RvcLogSdkManager::LOG_OS_TestLogPost(const char* url, const char* body)
+{
+    HttpClientResponseResult result;
+    HttpClientRequestConfig config(HttpRequestMethod::POST, url);
+
+    std::string str((const char*)body);
+    config.SetJsonBody(str.c_str());
+    RestfulClient client = RestfulClient::getInstance();
+    config.PreDo();
+    client.Do(&config, &result);
+    return 0;
+}
+int RvcLogSdkManager::SendTestLog(const char* body)
+{
+    if (m_testLogMode == false)
+        return -1;
+    HttpClientRequestConfig sendErr(HttpRequestMethod::POST, "http://99.12.43.134:9000/upload_msg");
+    HttpClientResponseResult curResult;
+    Json::Value rootReq;
+    Json::FastWriter writer;
+    rootReq["req"] = body;
+    rootReq["ans"] = "Json_not_vaild";
+    std::string jsonReq = writer.write(rootReq);
+    sendErr.SetJsonBody(jsonReq.c_str());
+    RestfulClient client = RestfulClient::getInstance();
+    sendErr.PreDo();
+    client.Do(&sendErr, &curResult);
+    return 0;
+}
+
+
+
+#ifndef _WIN32
+
+
+#ifndef CLOCK_MONOTONIC_RAW
+#define CLOCK_MONOTONIC_RAW 4
+#endif
+uint32_t GetTickCount(void)
+{
+    uint32_t ticks = 0;
+    struct timespec ts;
+    if (!clock_gettime(CLOCK_MONOTONIC_RAW, &ts))
+        ticks = (ts.tv_sec * 1000) + (ts.tv_nsec / 1000000);
+    return ticks;
+}
+#endif

+ 42 - 0
Framework/RvcLogSdk/baseFun.h

@@ -0,0 +1,42 @@
+#ifdef _WIN32
+#include <windows.h>
+#endif
+#include <list>
+#include "log_builder.h"
+#include <atomic>
+
+
+#ifdef _WIN32
+DWORD WINAPI log_producer_send_thread(LPVOID param);
+#else
+void * log_producer_send_thread(void * param);
+#endif
+
+long LOG_GET_TIME();
+
+#define STR_LOG_SEND_ONE  "LOG_SEND_ONE"
+#define STR_LOG_SEND_DIRTY  "LOG_SEND_DIRTY"
+
+
+class RvcLogSdkManager {
+public:
+    static RvcLogSdkManager& getInstance();
+    std::list<log_group_builder*> &getResendFrameList();
+
+    std::atomic<int>  m_logFlush_num;
+    bool m_testLogMode;
+    
+    bool wait_for_counter_greater_than_one_with_timeout();
+
+    int LOG_OS_TestLogPost(const char* url, const char* body);
+    int SendTestLog(const char* body);
+private:
+    std::list<log_group_builder*> m_resend_frame_list;
+private:
+    RvcLogSdkManager();
+    RvcLogSdkManager(const RvcLogSdkManager&) = delete;
+    RvcLogSdkManager& operator=(const RvcLogSdkManager&) = delete;
+};
+#ifndef _WIN32
+uint32_t GetTickCount(void);
+#endif

+ 22 - 0
Framework/RvcLogSdk/baseTime.cpp

@@ -0,0 +1,22 @@
+#include "baseTime.h"
+#include <winpr/sysinfo.h>
+void GetCurrentTimeStr(char* unitedNowTime)
+{
+    SYSTEMTIME st;
+    FILETIME utc_ft, local_ft, ft;
+
+#ifdef _WIN32
+    
+    GetSystemTime(&st);
+    SystemTimeToFileTime(&st, &ft);
+    utc_ft.dwLowDateTime = (DWORD)ft.dwLowDateTime;
+    utc_ft.dwHighDateTime = (DWORD)ft.dwHighDateTime;
+    FileTimeToLocalFileTime(&utc_ft, &local_ft);
+    FileTimeToSystemTime(&local_ft, &st);
+#else
+    GetLocalTime(&st);
+#endif // _WIN32
+
+    sprintf(unitedNowTime, "%04d-%02d-%02d %02d:%02d:%02d.%03d",
+        st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
+}

+ 1 - 0
Framework/RvcLogSdk/baseTime.h

@@ -0,0 +1 @@
+void GetCurrentTimeStr(char* unitedNowTime);

+ 1 - 13
Framework/RvcLogSdk/log_api.cpp

@@ -8,6 +8,7 @@
 #include <string.h>
 #include "sds.h"
 #include "inner_log.h"
+#include "baseFun.h"
 
 
 //#define GBK_COMPACT
@@ -200,18 +201,7 @@ if (result->statusCode / 100 == 2)
 
 */
 
-int LOG_OS_TestLogPost(const char* url, const char* body)
-{
-	HttpClientResponseResult result;
-	HttpClientRequestConfig config(HttpRequestMethod::POST, url);
 
-	std::string str((const char*)body);
-	config.SetJsonBody(str.c_str());
-	RestfulClient client = RestfulClient::getInstance();
-	config.PreDo();
-	client.Do(&config, &result);
-	return 0;
-}
 
 int LOG_OS_HttpPost(const char* url,
 	char** header_array,
@@ -293,8 +283,6 @@ int LOG_OS_HttpPost(const char* url,
 }
 
 
-extern long LOG_GET_TIME();
-
 log_status_t sls_log_init(int32_t log_global_flag)
 {
     return 0;

+ 1 - 1
Framework/RvcLogSdk/log_api.h

@@ -29,7 +29,7 @@ post_log_result * post_logs(const char *endpoint, const char * accesskeyId, cons
 
 void post_log_result_destroy(post_log_result * result);
 
-int LOG_OS_TestLogPost(const char* url, const char* body);
+
 
 LOG_CPP_END
 #endif

+ 130 - 23
Framework/RvcLogSdk/log_builder.cpp

@@ -8,6 +8,11 @@
 #include "inner_log.h"
 #include <lz4.h>
 #include "json/json.h"
+#include "baseFun.h"
+#include <chrono>
+#include <ctime>
+#include <baseTime.h>
+
 
 /**
  * adjust buffer, this function will ensure tag's buffer size >= tag->now_buffer_len + new_len
@@ -214,6 +219,34 @@ int add_log(log_group_builder* bder, long start_time, uint32_t pack_index, log_i
     long now;
     char nowTime[64] = { 0 }, unitedNowTime[64] = { 0 };
 
+
+    GetCurrentTimeStr(unitedNowTime);
+    if (strlen(unitedNowTime) == 0)
+    {
+        using namespace std::chrono;
+        auto cur_now = system_clock::now();
+        auto ms = duration_cast<milliseconds>(cur_now.time_since_epoch()) % 1000;
+        auto timer = system_clock::to_time_t(cur_now);
+
+        std::string ms_str = std::to_string(ms.count());
+
+        // 謇句勘陦・鮨先ッォ遘貞芦3菴�
+        while (ms_str.length() < 3) {
+            ms_str = "0" + ms_str; // 謌冶€� ms_str.insert(0, "0");
+        }
+
+        char buffer[20]; // 逕ィ莠主ュ伜お譬シ蠑丞喧蜷守噪譌・譛溷柱譌カ髣エ
+        std::tm* local_time = std::localtime(&timer);
+        std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local_time); // 菴ソ逕ィ std::strftime
+
+        std::ostringstream oss;
+        oss << buffer << '.' << ms_str;
+
+        memcpy(unitedNowTime, buffer, sizeof(buffer));
+    }
+
+
+
     if (bder->grp->n_logs >= MAX_LOG_COUNT) {
         return -1;
     }
@@ -222,8 +255,6 @@ int add_log(log_group_builder* bder, long start_time, uint32_t pack_index, log_i
     get_format_uuid(bder->grp->logs[bder->grp->n_logs].uuid, MAX_UUID_LEN);
 
     now = record_time;
-    GetTimeStr(now, nowTime);
-    GetUnitedTimeStr(now, unitedNowTime);
 
     skyeye_content = cJSON_CreateObject();
     meta_log_content = cJSON_CreateObject();
@@ -295,7 +326,7 @@ int add_log(log_group_builder* bder, long start_time, uint32_t pack_index, log_i
                 cJSON_AddItemToObject(log_content, "type", cJSON_CreateString("SYSTEM_PERFORMANCE"));
             }
 
-            cJSON_AddItemToObject(skyeye_content, "EvenTime", cJSON_CreateString(nowTime));
+            cJSON_AddItemToObject(skyeye_content, "EvenTime", cJSON_CreateString(unitedNowTime));
             if (log->BeginTime || log->EndTime)
             {
                 cJSON_AddItemToObject(skyeye_content, "BeginTime", cJSON_CreateNumber(log->BeginTime));
@@ -305,10 +336,10 @@ int add_log(log_group_builder* bder, long start_time, uint32_t pack_index, log_i
         cJSON_AddItemToObject(skyeye_content, "CostTime", cJSON_CreateNumber(log->CostTime));
         cJSON_AddItemToObject(skyeye_content, "VtmUuid", cJSON_CreateString(bder->grp->logs[bder->grp->n_logs].uuid));
         cJSON_AddItemToObject(skyeye_content, "Version", cJSON_CreateString(bder->config->skyeyeVersion));
-        cJSON_AddItemToObject(skyeye_content, "DateTime", cJSON_CreateString(nowTime));
+        cJSON_AddItemToObject(skyeye_content, "DateTime", cJSON_CreateString(unitedNowTime));
         cJSON_AddItemToObject(skyeye_content, "ResultCode", cJSON_CreateString(log->ResultCode));
 
-        //霑∫ァサ蛻ー蜈ャ蜈ア菴咲スョ�碁�髴€隕∬ソ吩クェ謨ー?
+        //霑∫ァサ蛻ー蜈ャ蜈ア菴咲スョ�碁�髴€隕∬ソ吩クェ謨ー�ス?
         if (log->LogCode != NULL) {
             cJSON_AddItemToObject(skyeye_content, "LogCode", cJSON_CreateString(log->LogCode));
         }
@@ -362,7 +393,7 @@ int add_log(log_group_builder* bder, long start_time, uint32_t pack_index, log_i
     aos_debug_log((LB, "add_log 6"));
     {
         cJSON* t_baseLogType = NULL;
-        // モヲモテミナマ「
+        // モヲ�ス�ス�ス�スマ「
         //cJSON_AddItemToObject(united_content, "appName", cJSON_CreateString(bder->config->unitedAppName));
         cJSON_AddItemToObject(united_content, "_CMB_LOG_SPEC_VERSION", cJSON_CreateString(bder->config->unitedVersion));
 
@@ -392,7 +423,7 @@ int add_log(log_group_builder* bder, long start_time, uint32_t pack_index, log_i
     {
         _adjust_buffer(grp_log, totalBufferSize);
     }
-    memcpy(grp_log->buffer, str_united_content, totalBufferSize);
+    memcpy(grp_log->buffer, str_united_content, totalBufferSize);//transfer success�� it would not cause dirty log
     bder->loggroup_size += totalBufferSize;
     grp_log->buffer_len = totalBufferSize;
     if (log->Type == LOG_TYPE_USER) {
@@ -493,6 +524,29 @@ int add_log_raw(log_group_builder* bder, build_item* log)
     return 0;
 }
 
+int add_log_raw2(log_group_builder* bder, build_item2* log)
+{
+    build_item* build_data;
+    if (bder->grp->n_logs >= MAX_LOG_COUNT) {
+        return -1;
+    }
+
+    build_data = &(bder->grp->logs[bder->grp->n_logs]);
+    if (build_data->buffer == NULL || build_data->buffer_len < log->buffer_len)
+    {
+        _adjust_buffer(build_data, log->buffer_len);
+    }
+    memcpy(build_data->buffer, log->buffer, log->buffer_len);
+    build_data->buffer_len = log->buffer_len;
+    memcpy(build_data->uuid, log->uuid, MAX_UUID_LEN);
+    build_data->type = log->type;
+    build_data->level = log->level;
+    bder->loggroup_size += log->buffer_len;
+
+    ++bder->grp->n_logs;
+    return 0;
+}
+
 int add_log_serialize_buf(log_group_builder* bder, serialize_buf* buffer)
 {
     build_item* build_data;
@@ -593,6 +647,53 @@ static uint32_t _log_pack(log_group_builder* bder, log_buf* buf)
     return totalBufferSize;
 }
 
+static const std::string base64_chars =
+"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+"abcdefghijklmnopqrstuvwxyz"
+"0123456789+/";
+
+std::string base64_encode(const std::string& input) {
+	std::string ret;
+	int i = 0;
+	int j = 0;
+	unsigned char char_array_3[3];
+	unsigned char char_array_4[4];
+	int in_len = input.size();
+	const unsigned char* bytes_to_encode = reinterpret_cast<const unsigned char*>(input.c_str());
+
+	while (in_len--) {
+		char_array_3[i++] = *(bytes_to_encode++);
+		if (i == 3) {
+			char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
+			char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
+			char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
+			char_array_4[3] = char_array_3[2] & 0x3f;
+
+			for (i = 0; i < 4; i++)
+				ret += base64_chars[char_array_4[i]];
+			i = 0;
+		}
+	}
+
+	if (i) {
+		for (j = i; j < 3; j++)
+			char_array_3[j] = '\0';
+
+		char_array_4[0] = (char_array_3[0] & 0xfc) >> 2;
+		char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4);
+		char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6);
+		char_array_4[3] = char_array_3[2] & 0x3f;
+
+		for (j = 0; j < i + 1; j++)
+			ret += base64_chars[char_array_4[j]];
+
+		while (i++ < 3)
+			ret += '=';
+	}
+
+	return ret;
+}
+
 void add_log_terminal_sn_other(log_group_builder* bder, char* sn, char* clientIP) {
 
     int32_t totalBufferSize;
@@ -624,6 +725,15 @@ void add_log_terminal_sn_other(log_group_builder* bder, char* sn, char* clientIP
                         cJSON_AddItemToObject(content, "ClientIP", cJSON_CreateString(clientIP));
                         changed = 1;
                     }
+                    if(bder->grp->logs[i].uuid == std::string(STR_LOG_SEND_DIRTY) && cJSON_HasObjectItem(content, "ResultMsg"))//dirty log, need encrypt ResultMsg
+                    {
+                        cJSON* resultMsg = cJSON_GetObjectItem(content, "ResultMsg");
+                        std::string base64_str = base64_encode(resultMsg->valuestring);
+                        std::string dirty_str = std::string("[DirtyLog_BD67]");
+                        dirty_str.append(base64_str);
+                        cJSON_ReplaceItemInObject(content, "ResultMsg", cJSON_CreateString(dirty_str.c_str()));
+                        changed = 1;
+                    }
                 }
             }
 
@@ -664,19 +774,6 @@ void clear_errJson_msg(log_group_builder* bder)
             if (message_content == NULL)
             {
                 bder->grp->logs[i].check = 0;
-                /*
-                HttpClientRequestConfig sendErr(HttpRequestMethod::POST, "http://99.12.43.134:9000/upload_msg");
-                HttpClientResponseResult curResult;
-                Json::Value rootReq;
-                Json::FastWriter writer;
-                rootReq["req"] = bder->grp->logs[i].buffer;
-                rootReq["ans"] = "Json_not_vaild";
-                std::string jsonReq = writer.write(rootReq);
-                sendErr.SetJsonBody(jsonReq.c_str());
-                RestfulClient client = RestfulClient::getInstance();
-                sendErr.PreDo();
-                client.Do(&sendErr, &curResult);
-                */
             }                
             else
                 bder->grp->logs[i].check = 1;
@@ -781,7 +878,7 @@ void add_log_terminal_no(log_group_builder* bder, char* no) {
                 size_t start_pos = 0;
                 while ((start_pos = dstStr.find(src, start_pos)) != std::string::npos) {
                     dstStr.replace(start_pos, src.length(), strto);
-                    start_pos += strto.length(); // キタヨケボマ゙ムュサキ
+                    start_pos += strto.length(); // �ス�スヨケ�ス�ス�ス�スムュ�ス�ス
                     break;
                 }
                 auto result = dstStr;
@@ -801,7 +898,7 @@ void add_log_terminal_no(log_group_builder* bder, char* no) {
                 cJSON* tags = cJSON_GetObjectItem(message_content, "tags");
                 if (tags != NULL && !cJSON_HasObjectItem(tags, "TerminalNo"))
                 {
-                    // 蝨ィtags闃らせ荳ュ豺サ蜉�譁ー?
+                    // 蝨ィtags闃らせ荳ュ豺サ蜉�譁ー�ス?
                     cJSON_AddItemToObject(tags, "TerminalNo", cJSON_CreateString(no));
                     changed = 1;
                 }
@@ -817,6 +914,15 @@ void add_log_terminal_no(log_group_builder* bder, char* no) {
     }
 }
 
+void convert_to_build_item2(const build_item& item, build_item2 &new_item) {
+    new_item.type = item.type;
+    new_item.level = item.level;
+    memcpy(new_item.uuid, item.uuid, MAX_UUID_LEN);
+    new_item.buffer_len = item.buffer_len;
+    memcpy(new_item.buffer, item.buffer, item.buffer_len);
+    new_item.check = item.check;
+}
+
 log_buf serialize_to_proto_buf_with_malloc(log_group_builder* bder)
 {
     int i = 0;
@@ -850,6 +956,7 @@ lz4_log_buf* serialize_to_proto_buf_with_malloc_no_lz4(log_group_builder* bder)
     pLogbuf->type = buf.type;
     for (i = 0; i < pLogbuf->n_logs; i++) {
         memcpy(pLogbuf->uuid[i], buf.uuid[i], MAX_UUID_LEN);
+        convert_to_build_item2(bder->grp->logs[i], pLogbuf->src_logs[i]);
     }
     strcpy(pLogbuf->modular, bder->modular);
     free(buf.buffer);
@@ -858,7 +965,6 @@ lz4_log_buf* serialize_to_proto_buf_with_malloc_no_lz4(log_group_builder* bder)
 
 lz4_log_buf* serialize_to_proto_buf_with_malloc_lz4(log_group_builder* bder)
 {
-
     int i = 0;
     lz4_log_buf* pLogbuf;
     log_buf buf = serialize_to_proto_buf_with_malloc(bder);
@@ -879,6 +985,7 @@ lz4_log_buf* serialize_to_proto_buf_with_malloc_lz4(log_group_builder* bder)
     pLogbuf->type = buf.type;
     for (i = 0; i < pLogbuf->n_logs; i++) {
         memcpy(pLogbuf->uuid[i], buf.uuid[i], MAX_UUID_LEN);
+        convert_to_build_item2(bder->grp->logs[i], pLogbuf->src_logs[i]);
     }
     strcpy(pLogbuf->modular, bder->modular);
     free(compress_data);

+ 24 - 8
Framework/RvcLogSdk/log_builder.h

@@ -22,6 +22,28 @@ typedef enum {
     LOG_TYPE_USER_SKYEYE, LOG_TYPE_SYS_SKYEYE, LOG_TYPE_BEIDOU, LOG_TYPE_USER_BUSINESS, LOG_TYPE_SYS_BUSINESS, LOG_TYPE_WEBSDK
 }build_type_e;
 
+typedef struct _build_item {
+    build_type_e type;
+    LOG_LEVEL_E level;
+    char uuid[MAX_UUID_LEN];
+    uint32_t buffer_len;
+    char* buffer;
+    int check;
+}build_item;
+
+//10kb
+#define MAX_LOG_LEN 10000
+
+typedef struct _build_item2 {
+    build_type_e type;
+    LOG_LEVEL_E level;
+    char uuid[MAX_UUID_LEN];
+    uint32_t buffer_len;
+    char buffer[MAX_LOG_LEN];
+    int check;
+}build_item2;
+
+
 typedef struct _lz4_log_buf {
     build_type_e type;
     char modular[MAX_PATH];
@@ -29,18 +51,11 @@ typedef struct _lz4_log_buf {
     char uuid[MAX_LOG_COUNT][MAX_UUID_LEN];
     int length;
     int raw_length;
+    build_item2 src_logs[MAX_LOG_COUNT];//use for resend
     unsigned char data[0];
 }lz4_log_buf;
 
 
-typedef struct _build_item {
-    build_type_e type;
-    LOG_LEVEL_E level;
-    char uuid[MAX_UUID_LEN];
-    uint32_t buffer_len;
-    char* buffer;
-    int check;
-}build_item;
 
 
 typedef struct _log_group {
@@ -82,6 +97,7 @@ extern void log_group_destroy(log_group_builder* bder);
 extern int add_log(log_group_builder* bder, long start_time, uint32_t pack_index, log_item* log, long record_time);
 extern int add_beidou_log(log_group_builder* bder, beidou_log_item* log);
 extern int add_log_raw(log_group_builder* bder, build_item* log);
+extern int add_log_raw2(log_group_builder* bder, build_item2* log);
 extern int add_log_serialize_buf(log_group_builder* bder, serialize_buf* buffer);
 extern void add_log_terminal_no(log_group_builder* bder, char* no);
 extern void clear_errJson_msg(log_group_builder* bder);

+ 99 - 131
Framework/RvcLogSdk/log_db.cpp

@@ -21,21 +21,10 @@
 #include "zlib.h"
 #include "base64_openssl.h"
 #include <chrono>
+#include "baseFun.h"
 
 #ifndef _WIN32
 
-#ifndef CLOCK_MONOTONIC_RAW
-#define CLOCK_MONOTONIC_RAW 4
-#endif
-
-uint32_t GetTickCount(void)
-{
-	uint32_t ticks = 0;
-    struct timespec ts;
-    if (!clock_gettime(CLOCK_MONOTONIC_RAW, &ts))
-        ticks = (ts.tv_sec * 1000) + (ts.tv_nsec / 1000000);
-	return ticks;
-}
 
 char* itoa(int value, char* buffer, int radix)
 {
@@ -91,7 +80,6 @@ const std::string COLUMN_Status = "status";
 const std::string COLUMN_Encrypt = "encrypt";
 const std::string COLUMN_Content = "content";
 
-long LOG_GET_TIME() { return time(NULL); }
 int db_move_to_main(log_db_manager* manager);
 
 struct _log_db_manager {
@@ -371,12 +359,78 @@ int db_insert_one(log_db_manager* manager, serialize_buf* buf) {
 		CMBSM4EncryptWithECB((unsigned char*)manager->config->PersistentEncryptPassword, compress_str_data, compressLen, output_data, &output_length);
 		char* output_str_data = openssl_base64_encode((char*)output_data, output_length);
 
+		//try to decrypt
+		/*
+		char* input_str_data = output_str_data;
+
+		char* decoded_bytes = NULL;
+		size_t decoded_length = 0;
+		openssl_base64_decode(input_str_data, &decoded_bytes, &decoded_length);
+
+		int SM4_length = decoded_length;
+		char* SM4_data = (char*)malloc(decoded_length);
+		memset(SM4_data, 0, decoded_length);
+		CMBSM4DecryptWithECB((unsigned char*)manager->config->PersistentEncryptPassword,
+			(unsigned char*)decoded_bytes, decoded_length, (unsigned char*)SM4_data, &SM4_length);
+
+		uLongf uncompress_length = SM4_length * 3;
+		char *output_data2 = (char*)malloc(uncompress_length);
+		memset(output_data2, 0, uncompress_length);
+
+		uncompress((unsigned char*)output_data2, &uncompress_length, (unsigned char*)SM4_data, SM4_length);
+		if(SM4_data)
+			free(SM4_data);
+		if(decoded_bytes)
+			free(decoded_bytes);
+			*/
+
+		strSql.append(manager->table_name).append("(" + COLUMN_DateTime +
+			"," + COLUMN_Uuid + "," + COLUMN_Level + "," + COLUMN_Type + "," + COLUMN_Content + "," + COLUMN_Encrypt + "," + COLUMN_Status +
+			") VALUES (").append(strTime).append(",'").append(buf->uuid).append("',").
+			append(strLevel).append(",").append(strType).append(",'").
+			append((char*)output_str_data).append("',").append(strEncrypt).append(",0)");
+
+		if(compress_str_data)
+			free(compress_str_data);
+		if(output_data)
+			free(output_data);
+		if(output_str_data)
+			free(output_str_data);
+		end_time = GetTickCount();
+	}
+	else if (manager->config->usePersistentEncrypt == 3)
+	{
+		if (strlen(buf->buffer) == 0)
+			return ret;
+		int input_length = strlen(buf->buffer) + 1;
+		unsigned char* input_data = (unsigned char*)buf->buffer;
+
+		int output_length = input_length + 16;
+		unsigned char* output_data = (unsigned char*)malloc(output_length);
+		CMBSM4EncryptWithECB((unsigned char*)manager->config->PersistentEncryptPassword, input_data, input_length, output_data, &output_length);
+		char* output_str_data = openssl_base64_encode((char*)output_data, output_length);
+
+		//try to decrypt
 		/*
-		unsigned long len = output_length * 2 + 1;
-		unsigned char* output_str_data = (unsigned char*)malloc(len);
-		memset(output_str_data, 0, len);
-		compress(output_str_data, &len, (unsigned char*)output_data, output_length);
+		char* input_str_data = output_str_data;
+
+		char* decoded_bytes = NULL;
+		size_t decoded_length = 0;
+		openssl_base64_decode(input_str_data, &decoded_bytes, &decoded_length);
+
+		int SM4_length = decoded_length;
+		char* SM4_data = (char*)malloc(decoded_length);
+		memset(SM4_data, 0, decoded_length);
+		CMBSM4DecryptWithECB((unsigned char*)manager->config->PersistentEncryptPassword,
+			(unsigned char*)decoded_bytes, decoded_length, (unsigned char*)SM4_data, &SM4_length);
+		//RvcLogSdkManager::getInstance().SendTestLog(output_str_data);
+
+		if(SM4_data)
+			free(SM4_data);
+		if(decoded_bytes)
+			free(decoded_bytes);
 		*/
+			
 
 		strSql.append(manager->table_name).append("(" + COLUMN_DateTime +
 			"," + COLUMN_Uuid + "," + COLUMN_Level + "," + COLUMN_Type + "," + COLUMN_Content + "," + COLUMN_Encrypt + "," + COLUMN_Status +
@@ -384,9 +438,10 @@ int db_insert_one(log_db_manager* manager, serialize_buf* buf) {
 			append(strLevel).append(",").append(strType).append(",'").
 			append((char*)output_str_data).append("',").append(strEncrypt).append(",0)");
 
-		free(compress_str_data);
-		free(output_data);
-		free(output_str_data);
+		if (output_data)
+			free(output_data);
+		if (output_str_data)
+			free(output_str_data);
 		end_time = GetTickCount();
 	}
 	else {
@@ -424,111 +479,7 @@ int db_insert_one(log_db_manager* manager, serialize_buf* buf) {
 	return ret;
 }
 
-log_group_builder* db_read_table_last_log(log_db_manager* manager, char *table_name) {
-	if (manager == NULL || manager->db == NULL) {
-		aos_error_log((LB, "read last log db %s failed for null.", manager->file_name.c_str()));
-		return NULL;
-	}
 
-	build_item log;
-	log_group_builder* builder = NULL;
-	char strStatus[32];
-	sprintf(strStatus, "%d", LOG_DB_STATUS_SENDING);
-	std::string querySql = "select * from ";
-	querySql.append(table_name);
-	querySql.append(" where " + COLUMN_Status + " != ").append(strStatus);
-	querySql.append(" order by " + COLUMN_DateTime + " DESC LIMIT 1;");
-
-	try {
-		CppSQLite3Query q = manager->db->execQuery(querySql.c_str());
-		if (!q.eof()) {
-			int encrypt = q.getIntField(COLUMN_Encrypt.c_str(), 0);
-			log.type = (build_type_e)q.getIntField(COLUMN_Type.c_str(), LOG_TYPE_BEIDOU);
-			strcpy(log.uuid, q.getStringField(COLUMN_Uuid.c_str()));
-			log.level = (LOG_LEVEL_E)q.getIntField(COLUMN_Level.c_str(), LOG_LEVEL_DEBUG);
-			//content
-			char* output_data = NULL;
-			if (encrypt == 1) {
-				char* input_str_data = (char*)q.getStringField(COLUMN_Content.c_str());
-				int input_length = strlen(input_str_data) / 2;
-				unsigned char* input_data = (unsigned char*)malloc(input_length);
-				convertStrToUnChar(input_str_data, input_data);
-				int output_length = input_length;
-				output_data = (char*)malloc(input_length);
-				memset(output_data, 0, input_length);
-				CMBSM4DecryptWithECB((unsigned char*)manager->config->PersistentEncryptPassword, 
-					input_data, input_length, (unsigned char*)output_data, &output_length);
-
-				log.buffer = output_data;
-				log.buffer_len = strlen(log.buffer) + 1;
-
-				free(input_data);
-			}
-			else if (encrypt == 2) {
-				char* input_str_data = (char*)q.getStringField(COLUMN_Content.c_str());
-
-				/*
-				uLongf input_length = strlen(input_str_data);
-				unsigned char* input_data = (unsigned char*)malloc(input_length);
-				uncompress(input_data, &input_length, (unsigned char*)input_str_data, strlen(input_str_data));
-				*/
-				char* decoded_bytes = NULL;
-				size_t decoded_length = 0;
-				openssl_base64_decode(input_str_data, &decoded_bytes, &decoded_length);
-
-				int SM4_length = decoded_length;
-				char* SM4_data = (char*)malloc(decoded_length);
-				memset(SM4_data, 0, decoded_length);
-				CMBSM4DecryptWithECB((unsigned char*)manager->config->PersistentEncryptPassword,
-					(unsigned char*)decoded_bytes, decoded_length, (unsigned char*)SM4_data, &SM4_length);
-
-				uLongf uncompress_length = SM4_length;
-				output_data = (char*)malloc(uncompress_length);
-				memset(output_data, 0, uncompress_length);
-				uncompress((unsigned char*)output_data, &uncompress_length, (unsigned char*)SM4_data, SM4_length);
-
-
-				log.buffer = (char*)output_data;
-				log.buffer_len = strlen(log.buffer) + 1;
-
-				free(SM4_data);
-				free(decoded_bytes);
-			}
-			else {
-				std::string src = (char*)q.getStringField(COLUMN_Content.c_str());
-#ifdef COMPRESS_CONTEXT
-                unsigned char dst[10000] = "";
-                uLongf dstLen = 10000;
-                uncompress(dst, &dstLen, (unsigned char*)src.c_str(), src.length());
-                log.buffer = (char*)dst;
-                log.buffer_len = dstLen + 1;
-#else
-                log.buffer = (char*)q.getStringField(COLUMN_Content.c_str());
-				log.buffer_len = strlen(log.buffer) + 1;
-#endif
-			}
-			builder = log_group_create(manager->config);
-			strcpy(builder->modular, manager->file_name.c_str());
-			add_log_raw(builder, &log);
-			if (output_data != NULL) {
-				free(output_data);
-			}
-			//aos_debug_log((LB, "read last log db %s, uuid %s.", manager->file_name.c_str(), log.uuid));
-		}
-		q.finalize();
-	}
-	catch (CppSQLite3Exception& e)
-	{
-		aos_error_log((LB, "db %s read one log error %s", manager->file_name.c_str(), e.errorMessage()));
-		return NULL;
-	}
-	return builder;
-}
-
-
-log_group_builder* db_read_last_log(log_db_manager* manager) {
-	 return db_read_table_last_log(manager, (char *)(manager->table_name.c_str()));
-}
 
 
 int getReadType()
@@ -612,17 +563,12 @@ log_group_builder* db_read_table_last_logs(log_db_manager* manager, int count) {
 
 				log.buffer = output_data;
 				log.buffer_len = strlen(log.buffer) + 1;
-
+				add_log_raw(builder, &log);
 				free(input_data);
 			}
 			else if (encrypt == 2) {
 				char* input_str_data = (char*)q.getStringField(COLUMN_Content.c_str());
 
-				/*
-				uLongf input_length = strlen(input_str_data);
-				unsigned char* input_data = (unsigned char*)malloc(input_length);
-				uncompress(input_data, &input_length, (unsigned char*)input_str_data, strlen(input_str_data));
-				*/
 				char* decoded_bytes = NULL;
 				size_t decoded_length = 0;
 				openssl_base64_decode(input_str_data, &decoded_bytes, &decoded_length);
@@ -641,7 +587,28 @@ log_group_builder* db_read_table_last_logs(log_db_manager* manager, int count) {
 
 				log.buffer = (char*)output_data;
 				log.buffer_len = strlen(log.buffer) + 1;
+				add_log_raw(builder, &log);
+				free(SM4_data);
+				free(decoded_bytes);
+			}
+			else if (encrypt == 3) {
+				char* input_str_data = (char*)q.getStringField(COLUMN_Content.c_str());
+
+				char* decoded_bytes = NULL;
+				size_t decoded_length = 0;
+				openssl_base64_decode(input_str_data, &decoded_bytes, &decoded_length);
+
+				int SM4_length = decoded_length;
+				char* SM4_data = (char*)malloc(decoded_length);
+				memset(SM4_data, 0, decoded_length);
+				CMBSM4DecryptWithECB((unsigned char*)manager->config->PersistentEncryptPassword,
+					(unsigned char*)decoded_bytes, decoded_length, (unsigned char*)SM4_data, &SM4_length);
+
+				
 
+				log.buffer = (char*)SM4_data;
+				log.buffer_len = strlen(log.buffer) + 1;
+				add_log_raw(builder, &log);
 				free(SM4_data);
 				free(decoded_bytes);
 			}
@@ -657,9 +624,10 @@ log_group_builder* db_read_table_last_logs(log_db_manager* manager, int count) {
                 log.buffer = (char*)q.getStringField(COLUMN_Content.c_str());
 				log.buffer_len = strlen(log.buffer) + 1;
 #endif // COMPRESS_CONTEXT
+				add_log_raw(builder, &log);
 			}
 			strcpy(builder->modular, manager->file_name.c_str());
-			add_log_raw(builder, &log);
+			
 			if (output_data != NULL) {
 				free(output_data);
 			}

+ 0 - 1
Framework/RvcLogSdk/log_db.h

@@ -21,7 +21,6 @@ int db_transaction_begin(log_db_manager* manager);
 int db_transaction_commit(log_db_manager* manager);
 int db_insert_group(log_db_manager* manager, log_group_builder* builder);
 int db_insert_one(log_db_manager* manager, serialize_buf* buf);
-log_group_builder* db_read_last_log(log_db_manager* manager);
 log_group_builder* db_read_table_last_logs(log_db_manager* manager, int count);
 int db_get_count(log_db_manager* manager);
 int db_delete_one(log_db_manager* manager, char* uuid);

+ 3 - 3
Framework/RvcLogSdk/log_multi_thread.h

@@ -153,7 +153,7 @@ static inline void Win32CreateThread(HANDLE* hpThread, _In_ LPTHREAD_START_ROUTI
 }
 
 
-#define THREAD_INIT(thread, func, param)  Win32CreateThread(&thread, func, param)
+#define THREAD_INIT(thread, func, param)  Win32CreateThread((HANDLE *)&thread, func, param)
 
 #define THREAD_JOIN(thread) WaitForSingleObject(thread, INFINITE)
 
@@ -330,8 +330,8 @@ static inline int sema_wait_time_(sem_t* sema, unsigned int delayMs)
 #define SEMA_WAIT_OK 0
 
 typedef pthread_t THREAD;
-#define THREAD_INIT(thread, func, param) pthread_create(&(thread), NULL, func, param)
-#define THREAD_JOIN(thread) pthread_join(thread, NULL)
+#define THREAD_INIT(thread, func, param) pthread_create((thread), NULL, func, param)
+#define THREAD_JOIN(thread) pthread_join(*(thread), NULL)
 
 #define ATOMICINT volatile long
 

+ 19 - 16
Framework/RvcLogSdk/log_persistent_manager.c → Framework/RvcLogSdk/log_persistent_manager.cpp

@@ -3,6 +3,7 @@
 #include "inner_log.h"
 #include "log_builder.h"
 #include "sds.h"
+#include "baseFun.h"
 
 #ifndef _WIN32
 #include <sys/types.h>
@@ -52,21 +53,6 @@
 
 #endif
 
-#ifndef _WIN32
-
-#ifndef CLOCK_MONOTONIC_RAW
-#define CLOCK_MONOTONIC_RAW 4
-#endif
-
-uint32_t GetTickCount(void)
-{
-    uint32_t ticks = 0;
-    struct timespec ts;
-    if (!clock_gettime(CLOCK_MONOTONIC_RAW, &ts))
-        ticks = (ts.tv_sec * 1000) + (ts.tv_nsec / 1000000);
-    return ticks;
-}
-#endif // _WIN32
 
 
 static void _copy_config_string(const char* value, sds* src_value)
@@ -300,6 +286,7 @@ int log_persistent_manager_save_log(log_persistent_manager* manager, serialize_b
 {
     //unsigned long end_time;
     //unsigned long start_time = GetTickCount();
+    // it would not generate dirty logs
     int rst = db_insert_one(manager->db_manager, buf);
     //end_time = GetTickCount();
     //aos_debug_log((LB, "write db log cust %d", end_time - start_time));
@@ -469,6 +456,18 @@ static log_group_builder* log_persistent_manager_get_guard_log(log_persistent_ma
 }
 
 log_group_builder* log_persistent_manager_get_log(log_persistent_manager* manager) {
+    /*two way get log
+    (1) get log from db
+    (2) get log from dirty resend frame list
+    */
+
+    if (RvcLogSdkManager::getInstance().getResendFrameList().size() > 0)//already send all db logs, deal with dirty logs
+    {
+        log_group_builder* cur = RvcLogSdkManager::getInstance().getResendFrameList().front();
+        RvcLogSdkManager::getInstance().getResendFrameList().pop_front();
+        return cur;
+    }
+    
     unsigned long end_time;
     unsigned long start_time = GetTickCount();
     log_group_builder* builder = db_read_table_last_logs(manager->db_manager, manager->config->logCountPerPackage);
@@ -476,12 +475,16 @@ log_group_builder* log_persistent_manager_get_log(log_persistent_manager* manage
     //aos_debug_log((LB, "read db log cust %d", end_time - start_time));
     if (builder == NULL) {
         aos_error_log((LB, "get db log failed"));
+        
         //add for Guarder upload
         if (manager->config->enableGuarder) {
             return log_persistent_manager_get_guard_log(manager);
         }
     }
     return builder;
+
+
+    
 }
 
 
@@ -699,6 +702,7 @@ int log_persistent_manager_clean(log_persistent_manager* manager, char* modular)
         int count = db_get_count(manager->db_manager);
         if (count > manager->config->maxPersistentLogCount) {//超过最大值,然后清理 2*10000
             rst = db_delete_old_logs(manager->db_manager, count - manager->config->maxPersistentLogCount);
+            g_discardMsgNum_since_full += count - manager->config->maxPersistentLogCount;
         }
         db_vacuum(manager->db_manager);
         end_time = GetTickCount();
@@ -762,7 +766,6 @@ int log_persistent_manager_transaction_commit(log_persistent_manager* manager) {
     int rst = 1;
     unsigned long end_time;
     unsigned long start_time = GetTickCount();
-
     rst = db_transaction_commit(manager->db_manager);
     end_time = GetTickCount();
     aos_debug_log((LB, "commit db log cust %d", end_time - start_time));

+ 7 - 0
Framework/RvcLogSdk/log_producer_client.c → Framework/RvcLogSdk/log_producer_client.cpp

@@ -6,6 +6,7 @@
 #include <string.h>
 #include "log_persistent_manager.h"
 #include "log_multi_thread.h"
+#include "baseFun.h"
 
 static uint32_t s_init_flag = 0;
 static log_producer_result s_last_result = 0;
@@ -148,6 +149,7 @@ log_producer_result log_producer_client_add_log(log_producer_client* client,
     rst = log_producer_manager_add_log(manager, log, flush, record_time);
     //aos_debug_log((LB, "log producer client add log rst %d", rst));
     
+    RvcLogSdkManager::getInstance().m_logFlush_num++;
     return rst;
 }
 
@@ -175,4 +177,9 @@ log_producer_result log_producer_client_add_beidou_log(log_producer_client* clie
     //aos_debug_log((LB, "log producer client add beidou log rst %d", rst));
 
     return rst;
+}
+
+void log_producer_set_testLogMode()
+{
+    RvcLogSdkManager::getInstance().m_testLogMode = true;
 }

+ 2 - 0
Framework/RvcLogSdk/log_producer_client.h

@@ -67,6 +67,8 @@ LOG_EXPORT log_producer_result log_producer_client_add_log(log_producer_client*
  * */
 LOG_EXPORT log_producer_result log_producer_client_add_beidou_log(log_producer_client* client, beidou_log_item* log, int flush);
 
+LOG_EXPORT void log_producer_set_testLogMode();
+
 LOG_CPP_END
 
 #endif

+ 1 - 1
Framework/RvcLogSdk/log_producer_config.c

@@ -49,7 +49,7 @@ static void _set_default_producer_config(log_producer_config* pConfig)
     pConfig->usePersistent = 1;
     pConfig->openDB = 0;
     pConfig->maxPersistentLogCount = 5*10000;
-    pConfig->usePersistentEncrypt = 2;
+    pConfig->usePersistentEncrypt = 3;
 
     pConfig->useMemoryType = 0;
     pConfig->debugMode = 0;

+ 20 - 26
Framework/RvcLogSdk/log_producer_manager.c → Framework/RvcLogSdk/log_producer_manager.cpp

@@ -1,7 +1,8 @@
 #include "log_producer_manager.h"
-#include "inner_log.h"
 //#include "md5.h"
 #include "sds.h"
+#include "baseFun.h"
+#include "inner_log.h"
 
 // change from 100ms to 1000s, reduce wake up when app switch to back
 #define LOG_PRODUCER_FLUSH_INTERVAL_MS 100
@@ -17,17 +18,11 @@
 log_producer_manager* g_producer_manager[10];
 int producer_manager_num = 0;
 
-#ifdef WIN32
-DWORD WINAPI log_producer_send_thread(LPVOID param);
-#else
-void* log_producer_send_thread(void* param);
-#endif
 
 void _try_flush_loggroup(log_producer_manager* producer_manager)
 {
     int loggroup_size;
     int rst;
-    int32_t now_time = time(NULL);
 
     CS_ENTER(producer_manager->lock);
     if (producer_manager->builder != NULL)
@@ -281,14 +276,15 @@ void* log_producer_write_persistent_thread(void* param)
     int lens;
     int first_process = 1;
     int32_t now;
-    int32_t last_write_time = time(NULL);
+    int32_t last_write_time = (int32_t)time(NULL);
     shareq_frame share_frame = {0};
-    serialize_buf buf = { 0 };
+    serialize_buf buf;
+    memset(&buf, 0, sizeof(serialize_buf));
     int t_count = 0;
     int discardMsg = 0;
     log_producer_manager* producer_manager = (log_producer_manager*)param;
     log_persistent_manager* persistent_manager;
-    share_frame.data = &buf;
+    share_frame.data = reinterpret_cast<unsigned char *>(&buf);
     aos_info_log((LB, "start run write persistent thread"));
     while (producer_manager->shutdown == 0)
     {
@@ -357,13 +353,13 @@ void* log_producer_write_persistent_thread(void* param)
                     if (result != LOG_PRODUCER_OK) {
                         aos_warn_log((LB, "get from share queue, uuid %s begin failed.", buf.uuid));
                     }
-                    result = log_persistent_manager_save_log(persistent_manager, share_frame.data);
+                    result = log_persistent_manager_save_log(persistent_manager, (serialize_buf*)share_frame.data);
                     if (result != LOG_PRODUCER_OK) {
                         aos_warn_log((LB, "get from share queue, uuid %s save failed.", buf.uuid));
                     }
                 }
                 else {
-                    result = log_persistent_manager_save_log(persistent_manager, share_frame.data);
+                    result = log_persistent_manager_save_log(persistent_manager, (serialize_buf*)share_frame.data);
                     if (result != LOG_PRODUCER_OK) {
                         aos_warn_log((LB, "get from share queue, uuid %s save failed.", buf.uuid));
                     }
@@ -397,24 +393,24 @@ DWORD WINAPI log_producer_flush_thread(LPVOID param)    //flush the log to spshe
 void* log_producer_flush_thread(void* param)
 #endif
 {
-    while(1)
+    while(RvcLogSdkManager::getInstance().wait_for_counter_greater_than_one_with_timeout())
     {
         int i = 0;
 	    for(i =0; i < producer_manager_num; i++)
 	    {
             void* data = NULL;
             shareq_frame frame = { 0 };
-            serialize_buf buf = { 0 };
+            serialize_buf buf;
+            memset(&buf, 0, sizeof(serialize_buf));
             log_producer_manager* producer_manager = (log_producer_manager*)g_producer_manager[i];
             log_persistent_manager* persistent_manager;
-            frame.data = &buf;
+            frame.data = (unsigned char*)&buf;
             aos_info_log((LB, "start run flusher thread"));
 
             persistent_manager = producer_manager->persistent_manager;
             if (persistent_manager == NULL || producer_manager->shutdown == 1) {
                 continue;
             }
-
             do
             {
                 //get send data from buffer
@@ -424,7 +420,7 @@ void* log_producer_flush_thread(void* param)
                     int insert_result = 0;
                     log_group_builder* builder = (log_group_builder*)data;
                     memset(frame.data, 0, sizeof(serialize_buf));
-                    serialize_to_buf(&builder->grp->logs[0], frame.data);
+                    serialize_to_buf(&builder->grp->logs[0], (serialize_buf*)frame.data);// it would not cause dirty logs
                     frame.size = sizeof(serialize_buf);
                     CS_ENTER(persistent_manager->lock);
                     insert_result = ClibsharequeueInsert(producer_manager->share_queue, &frame, 0);
@@ -442,10 +438,7 @@ void* log_producer_flush_thread(void* param)
             // if no job, check now loggroup
             _try_flush_loggroup(producer_manager);
 	    }
-        Sleep(100);
     }
-
-    
     aos_info_log((LB, "exit flusher thread"));
     return 0;
 }
@@ -479,15 +472,17 @@ log_producer_manager* create_log_producer_manager(log_producer_config* producer_
         producer_manager->share_queue = ClibsharequeueCreate3("RVC_LOG_SDK_QUEUE", 1);
     }
     producer_manager->send_param_queue_size = base_queue_size * 2;
-    producer_manager->send_param_queue = malloc(sizeof(log_producer_send_param*) * producer_manager->send_param_queue_size);
+    producer_manager->send_param_queue = (log_producer_send_param**)malloc(sizeof(log_producer_send_param*) * producer_manager->send_param_queue_size);
 
     producer_manager->triger_cond = CreateCond();
     producer_manager->lock = CreateCriticalSection();
     producer_manager_num++;
 
+    
     if (!isFlushThreadExist)
     {
     	isFlushThreadExist = 1;
+        producer_manager->flush_thread = (THREAD*)malloc(sizeof(THREAD));
         THREAD_INIT(producer_manager->flush_thread, log_producer_flush_thread, NULL);//以当前情况,无法减少这个flush线程,因为是跟producer_config绑定的
     }
     
@@ -502,10 +497,9 @@ log_producer_manager* create_log_producer_manager(log_producer_config* producer_
             producer_manager->sender_data_queue = log_queue_create(base_queue_size * 2);
             threadId = 0;
             for (; threadId < producer_manager->producer_config->sendThreadCount; ++threadId)
-            {              
-               
-
-                THREAD_INIT(producer_manager->send_threads[threadId], log_producer_send_thread, producer_manager);
+            {
+                THREAD* cur_send = &producer_manager->send_threads[threadId];
+                THREAD_INIT(cur_send, log_producer_send_thread, producer_manager);
             }
             producer_manager->read_thread = (THREAD*)malloc(sizeof(THREAD));
             aos_debug_log((LB, "to create read thread"));
@@ -616,7 +610,7 @@ void destroy_log_producer_manager(log_producer_manager* manager)
         threadId = 0;
         for (; threadId < manager->producer_config->sendThreadCount; ++threadId)
         {
-            THREAD_JOIN(manager->send_threads[threadId]);
+            THREAD_JOIN(&(manager->send_threads[threadId]));
         }
         free(manager->send_threads);
         manager->send_threads = NULL;

+ 1 - 1
Framework/RvcLogSdk/log_producer_manager.h

@@ -24,7 +24,7 @@ typedef struct _log_producer_manager
     Clibsharequeue* share_queue;
     THREAD* send_threads;
     THREAD* read_thread;
-    THREAD flush_thread;
+    THREAD* flush_thread;
     THREAD* write_thread;
     CRITICALSECTION lock;
     COND triger_cond;

+ 39 - 4
Framework/RvcLogSdk/log_producer_sender.c → Framework/RvcLogSdk/log_producer_sender.cpp

@@ -6,6 +6,7 @@
 #include "sds.h"
 #include <stdlib.h>
 #include <string.h>
+#include "baseFun.h"
 #ifdef WIN32
 #include <windows.h>
 #else
@@ -13,7 +14,6 @@
 #include <sys/syscall.h>
 #endif
 
-long LOG_GET_TIME() { return time(NULL); }
 
 const char* LOGE_SERVER_BUSY = "ServerBusy";
 const char* LOGE_INTERNAL_SERVER_ERROR = "InternalServerError";
@@ -135,7 +135,7 @@ void * log_producer_send_thread(void * param)
 }
 void send_log_data(const char* url, const char* body)
 {
-    LOG_OS_TestLogPost(url, body);
+    RvcLogSdkManager::getInstance().LOG_OS_TestLogPost(url, body);
 }
 
 void * log_producer_send_fun(void * param)
@@ -146,7 +146,7 @@ void * log_producer_send_fun(void * param)
     log_producer_send_param * send_param = (log_producer_send_param *)param;
     if (send_param->magic_num != LOG_PRODUCER_SEND_MAGIC_NUM)   // magic num not right
     {
-        aos_fatal_log((LB, "invalid send param, magic num not found, num 0x%x", send_param->magic_num));
+        //aos_fatal_log((LB, "invalid send param, magic num not found, num 0x%x", send_param->magic_num));
         producer_manager = (log_producer_manager *)send_param->producer_manager;
         if (producer_manager && producer_manager->send_done_function != NULL)
         {
@@ -272,7 +272,42 @@ void * log_producer_send_fun(void * param)
                 break;
             }
             if(rst->statusCode == 300)
-                g_discardMsgNum_since_serverRet_RTI1002 += send_buf->n_logs;
+            {
+                /*
+                    (1) if multi logs,split and send one by one again, all give uuid LOG_SEND_ONE.
+                        - if uuid equal to LOG_SEND_ONE, don't not delete uuid from db
+                        - if uuid not equal to LOG_SEND_ONE, delete uuid from db
+                    (2) if single log, means dirty data, encrypt it and give uuid LOG_SEND_DIRTY.
+                        - record the nums of dirty logs
+
+                */
+                if(send_buf->n_logs == 1)//单条log, 已经尝试过重发,不再重发
+                {
+                    if(STR_LOG_SEND_DIRTY != send_buf->src_logs[0].uuid)
+                    {
+                        memcpy(send_buf->src_logs[0].uuid, STR_LOG_SEND_DIRTY, strlen(STR_LOG_SEND_DIRTY)+1);
+                        log_group_builder* builder = log_group_create(config);
+                        strcpy(builder->modular, send_buf->modular);
+                        add_log_raw2(builder, &(send_buf->src_logs[0]));
+                        RvcLogSdkManager::getInstance().getResendFrameList().push_back(builder);
+                        g_discardMsgNum_since_serverRet_RTI1002 += send_buf->n_logs;
+                    }
+                }
+                else
+                {
+                    //try resend, push to deque
+                    for(int i = 0; i < send_buf->n_logs; i++)
+                    {
+                        memcpy(send_buf->src_logs[i].uuid, STR_LOG_SEND_ONE, strlen(STR_LOG_SEND_ONE) + 1);
+                        log_group_builder* builder = log_group_create(config);
+                        strcpy(builder->modular, send_buf->modular);
+                        add_log_raw2(builder, &(send_buf->src_logs[i]));
+                        RvcLogSdkManager::getInstance().getResendFrameList().push_back(builder);
+                    }
+                    
+                }
+            }
+                
         }
 
         sleepMs = log_producer_on_send_done(send_param, rst, &error_info) / 2;//执行senddone,删除数据库中内容

+ 0 - 0
Framework/RvcLogSdk/log_queue.c → Framework/RvcLogSdk/log_queue.cpp


+ 3 - 3
Framework/spbase/SpEntity.cpp

@@ -2153,12 +2153,12 @@ ErrorCodeEnum SpEntity::GetVTMErrMsg(DWORD dwUserCode, CSimpleStringA& strDescri
 
 		for (int i = 0; i < strErrorCodeArr.GetCount(); i++)
 		{
-			if (strErrorCodeArr[i].IsStartWith(dstRTA.c_str(), true))
-			{
+			//if (strErrorCodeArr[i].IsStartWith(dstRTA.c_str(), true))
+			//{
 				std::string curRemark = strRemarkArr[i].GetData();
 				std::transform(curRemark.begin(), curRemark.end(), curRemark.begin(), [](unsigned char c) { return std::tolower(c); });
 				m_UserCodeToMsgTip.insert(std::make_pair(curRemark, ErrMsgStruct(strErrorCodeArr[i].GetData(), strDescriptionArr[i].GetData())));
-			}
+			//}
 		}
 		isInit = true;
 	}

+ 3 - 0
Framework/spbase/SpEntityPrivilege.cpp

@@ -59,7 +59,10 @@ static ErrorCodeEnum ControlEntity(
 	sp_env_t *env = sp_get_env();
 	sp_entity_t *ent = sp_mod_mgr_find_entity_by_name(env->mod_mgr, pszEntityName);
 	if (!ent)
+	{
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("mod %s not exist", pszEntityName);
 		return Error_NotExist;
+	}
 
 	iobuffer_t *req_pkt = iobuffer_create(-1, -1);
 	int v 	= ent->cfg->idx;

+ 239 - 0
Framework/spbase/StartUpBase.cpp

@@ -0,0 +1,239 @@
+#include "precompile.h"
+#include "StartUpBase.h"
+#include <json/json.h>
+#include <winpr/sysinfo.h>
+#include <string>
+#include <vector>
+#include <map>
+#include "log_define.h"
+#include <SpBase.h>
+#include <chrono>
+#include <thread>
+
+class StartupLog {
+public:
+    struct Step {
+        std::string timestamp;
+        std::string event;
+        std::string status;
+        int from;
+        int to;
+        int result;
+
+        Step(const std::string& ts, const std::string& ev, const std::string t_status, int t_from, int t_to, int t_result)
+            : timestamp(ts), event(ev), status(t_status), from(t_from), to(t_to), result(t_result) {}
+    };
+
+    StartupLog();
+    StartupLog(const std::string& module_entity, int req_id = -1);
+    ~StartupLog();
+
+    void initialize(int req_id, const std::string& module_entity);
+    void addStep(const Step& step);
+    std::string toJSON() const;
+
+private:
+    int request_id;
+    std::string module_entity_;
+    std::vector<Step> steps_;
+};
+
+class StartupLogManager {
+public:
+
+    static StartupLogManager& getInstance();
+    //StartupLogManager::getInstance().addLog(entityName, entity_id);
+    void addLog(const std::string& module_entity, int idx); // 新增 addLog 方法
+    bool checkLogExist(int idx);
+    StartupLog& getLog(int idx);
+    /*
+    StartupLogManager::getInstance().addStep(entityName, { GetCurrentTimeStr(), "handle_req" });
+
+    */
+    void addStep(int idx, const StartupLog::Step& step);
+    void removeLog(int idx);
+
+private:
+    StartupLogManager();
+    ~StartupLogManager();
+    std::map<int, StartupLog> logs_;
+    std::chrono::steady_clock::time_point m_lastUpdateTime;
+
+    void recordStartTime() {
+        m_lastUpdateTime = std::chrono::steady_clock::now();
+    }
+
+    bool isTimeExceeded() {
+        auto current_time = std::chrono::steady_clock::now();
+        auto duration = std::chrono::duration_cast<std::chrono::minutes>(current_time - m_lastUpdateTime);
+        return duration.count() >= 2;
+    }
+};
+
+std::string GetCurrentTimeStr();
+
+SPBASE_API int addStartupLog(const char* module_entity, int idx)
+{
+    StartupLogManager::getInstance().addLog(module_entity, idx);
+    return 0;
+}
+
+SPBASE_API int addStartupStep(int idx, const char* event, const char* status, int from, int to, int result)
+{
+    StartupLogManager::getInstance().addStep(idx, StartupLog::Step(GetCurrentTimeStr(), std::string(event), std::string(status), from, to, result));
+
+    return 0;
+}
+
+
+
+
+std::string GetCurrentTimeStr()
+{
+    char unitedNowTime[30] = "";
+    SYSTEMTIME st;
+    FILETIME utc_ft, local_ft, ft;
+
+#ifdef _WIN32
+
+    GetSystemTime(&st);
+    SystemTimeToFileTime(&st, &ft);
+    utc_ft.dwLowDateTime = (DWORD)ft.dwLowDateTime;
+    utc_ft.dwHighDateTime = (DWORD)ft.dwHighDateTime;
+    FileTimeToLocalFileTime(&utc_ft, &local_ft);
+    FileTimeToSystemTime(&local_ft, &st);
+#else
+    GetLocalTime(&st);
+#endif // _WIN32
+
+    sprintf(unitedNowTime, "%02d:%02d:%02d.%03d",
+        st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
+    return std::string(unitedNowTime);
+}
+
+
+StartupLog::StartupLog() : request_id(0) {}
+
+StartupLog::~StartupLog() {}
+
+void StartupLog::initialize(int req_id, const std::string& module_entity) {
+    request_id = req_id;
+    module_entity_ = module_entity;
+}
+
+StartupLog::StartupLog(const std::string& module_entity, int req_id)
+{
+    module_entity_ = module_entity;
+    request_id = req_id;
+}
+
+void StartupLog::addStep(const Step& step) {
+    steps_.push_back(step);
+}
+
+std::string StartupLog::toJSON() const {
+    Json::Value root;
+    root["event"] = "entity_startup";
+    root["request_id"] = request_id;
+    root["module_entity"] = module_entity_;
+
+    Json::Value steps_array(Json::arrayValue);
+    for (const auto& step : steps_) {
+        Json::Value step_obj;
+        step_obj["timestamp"] = step.timestamp;
+        step_obj["event"] = step.event;
+
+        if (!step.status.empty()) {
+            step_obj["status"] = step.status;
+        }
+        if (step.from != 0 && step.to != 0) {
+            step_obj["from"] = step.from;
+            step_obj["to"] = step.to;
+        }
+        if (step.result != 0) {
+            step_obj["result"] = step.result;
+        }
+
+        steps_array.append(step_obj);
+    }
+    root["steps"] = steps_array;
+
+    Json::FastWriter writer;
+    std::string jsonReq = writer.write(root);
+    return jsonReq;
+}
+
+StartupLogManager::StartupLogManager()
+{
+    static std::thread checkTimeThread;
+    recordStartTime();
+    auto checkStartupEnd = [this] {
+        while (true)
+        {
+            std::this_thread::sleep_for(std::chrono::seconds(5));
+            if (isTimeExceeded())
+            {
+                for (auto current : logs_)
+                {
+                    std::string resultMsg = current.second.toJSON();
+                    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)(resultMsg.c_str());
+                }
+                logs_.clear();
+                break;
+            }
+        }
+    };
+    if (!checkTimeThread.joinable()) {
+        checkTimeThread = std::thread(checkStartupEnd);
+    }
+}
+
+StartupLogManager::~StartupLogManager() {}
+
+void StartupLogManager::addLog(const std::string& module_entity, int idx) {
+    recordStartTime();
+    if (logs_.find(idx) == logs_.end()) {
+        logs_[idx] = StartupLog(module_entity, idx); // 直接拷贝 log 对象
+    } // 如果已存在,则忽略
+}
+
+StartupLog& StartupLogManager::getLog(int idx) {
+    if (logs_.find(idx) == logs_.end()) {
+        logs_[idx] = StartupLog("", idx); // 仍然保留隐式创建的逻辑,方便使用
+    }
+    return logs_[idx];
+}
+
+bool StartupLogManager::checkLogExist(int idx)
+{
+    if (logs_.find(idx) == logs_.end())
+        return false;
+    else
+        return true;
+}
+
+void StartupLogManager::addStep(int idx, const StartupLog::Step& step) {
+    recordStartTime();
+    if (checkLogExist(idx))
+    {
+        StartupLog &current = getLog(idx);
+        current.addStep(step);
+        if (step.result != 0 || step.status == "startup_end")
+        {//print the logs and remove obj
+            std::string resultMsg = current.toJSON();
+            DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)(resultMsg.c_str());
+            removeLog(idx);
+        }
+    }
+}
+
+void StartupLogManager::removeLog(int idx)
+{
+    if (logs_.find(idx) == logs_.end())
+        logs_.erase(idx);
+}
+
+StartupLogManager& StartupLogManager::getInstance() {
+    static StartupLogManager instance;
+    return instance;
+}

+ 17 - 0
Framework/spbase/StartUpBase.h

@@ -0,0 +1,17 @@
+#ifndef STARTUP_LOG_H
+#define STARTUP_LOG_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+	SPBASE_API int addStartupLog(const char* module_entity, int idx);
+	SPBASE_API int addStartupStep(int idx, const char* event, const char* status, int from, int to, int result);
+
+#ifdef __cplusplus
+} // extern "C" {
+#endif
+
+
+#endif

+ 2 - 1
Framework/spbase/sp_bcm.c

@@ -17,6 +17,7 @@
 #include "dbgutil.h"
 #include <winpr/synch.h>
 #include <winpr/string.h>
+#include "StartUpBase.h"
 
 #define BCM_CMD_MSG			0x01
 #define BCM_CMD_SUBSCRIBE	0x02
@@ -339,7 +340,7 @@ static int daemon_on_pkt(sp_svc_t *svc,int epid, int svc_id, int pkt_type, int p
 			}
 			daemon_unlock(daemon);
 			if (found == 0 && (target_ent->state == EntityState_Idle || target_ent->state == EntityState_Busy)) {
-				DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "notify_redirect_subscribe! target:%s", target_ent->cfg->name);
+				addStartupStep(target_ent->cfg->idx, "redirect_subscribe", "startup_end", 0, 0, 0);
 				sp_mod_mgr_notify_redirect_subscribe(sp_get_env()->mod_mgr, target_ent, &uid, svc_id, param);
 			}
 			FREE(param);

+ 8 - 12
Framework/spbase/sp_logwithlink.cpp

@@ -125,18 +125,10 @@ public:
         TraceID = ResultMsg = LogCode = API = BussID = TipMsg = SourceType = VtmCode = "";
         logProducer = NULL;
     }
-    /** 这里先采用硬编码,控制日志等级 [Gifur@202268]*/
-#if defined(_MSC_VER)
     bool IsAllowToRecord()
     {
         return true;
     }
-#else
-	bool IsAllowToRecord()
-	{
-		return (this->Level >= LOG_LEVEL_INFO);
-	}
-#endif //_MSC_VER
 };
 
 /*北斗链路实例
@@ -651,13 +643,12 @@ SPBASE_API void* create_log_producer_storage(CSimpleStringA entityName, CSimpleS
     log_producer_config_set_skyeye_version(config, (char*)"1.0");
     log_producer_config_set_persistent(config, 1);
 
-#ifndef _WIN32
+
     sp_env_t* env = sp_get_env();
     if (env && env->cfg && env->cfg->args && env->cfg->args->debug_mode) {
         //log_producer_config_switch_debug_mode(config, 1);
         log_producer_config_set_persistent_encrypt(config, 0);
     }
-#endif
 
     log_producer_config_set_skyeye_entityname(config, (char*)t_entityName.c_str());
     g_entityName = t_entityName.c_str();
@@ -746,13 +737,13 @@ SPBASE_API void* create_log_producer_send(CSimpleStringA endpoint, CSimpleString
     log_producer_config_set_persistent(config, 1);
     log_producer_config_set_openDb(config, 1);
     log_producer_config_set_tokenCallBack(config, Log_GetToken);
-#ifndef _WIN32
+
+
     sp_env_t* env = sp_get_env();
     if (env && env->cfg && env->cfg->args && env->cfg->args->debug_mode) {
         //log_producer_config_switch_debug_mode(config, 1);
         log_producer_config_set_persistent_encrypt(config, 0);
     }
-#endif
 
 
     log_producer_config_set_skyeye_entityname(config, (char*)g_entityName.GetData());
@@ -837,6 +828,11 @@ SPBASE_API void setReduceSpbaseLog(int isNor)
     g_spbaseLogNor = isNor;
 }
 
+SPBASE_API void setTestLogMode()
+{
+    log_producer_set_testLogMode();
+}
+
 int changeDbtoNew()
 {
     char tmp[MAX_PATH];

+ 37 - 32
Framework/spbase/sp_mod.c

@@ -35,6 +35,7 @@
 #define TAG SPBASE_TAG("sp_mod")
 
 #include "toolkit.h"
+#include "StartUpBase.h"
 
 #define BUFSIZE 10240
 #define MOD_CMD_INIT		0
@@ -891,11 +892,11 @@ static int create_module_process(const char *mod_name, int epid, int range, int
 		if (NULL != groupProcess)
 			break;//already exist
 
-		DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "open group process, %s", mod_name);
+		addStartupStep(epid, "open group process", "", 0, 0, 0);
 		dwSessionId = WTSGetActiveConsoleSessionId();
 
 		if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hThisToken)) {
-			DbgWithLinkForC(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM, "open process token failed! Error : %d", GetLastError());
+			addStartupStep(epid, "open process token", "failed", 0, 0, GetLastError());
 			break;
 		}
 
@@ -918,7 +919,7 @@ static int create_module_process(const char *mod_name, int epid, int range, int
 		hMutex = CreateEvent(NULL, FALSE, FALSE, eventName);
 
 		if (!CreateProcessAsUserA(hUserTokenDup, NULL, app, NULL, NULL, FALSE, 0, pEnv, NULL, &si, &pi)) {
-			DbgWithLinkForC(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM, "CreateProcessAsUserA failed! Error : %d", GetLastError());
+			addStartupStep(epid, "CreateProcessAsUserA failed!", "failed", 0, 0, GetLastError());
 			break;
 		}
 
@@ -936,25 +937,27 @@ static int create_module_process(const char *mod_name, int epid, int range, int
 		assigntoJob(hProcess, pi.dwProcessId);
 
 		if (WAIT_TIMEOUT == WaitForSingleObject(hMutex, 10000))//确定实体进程已启动
-			DbgWithLinkForC(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM, "open process timeout, %s", mod_name);
+			addStartupStep(epid, "open process timeout", "failed", 0, 0, Error_TimeOut);
 		CloseHandle(hMutex);
 
 	} while (0);
 	CloseHandle(hUserTokenDup);
 	CloseHandle(hThisToken);
 
-	DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "begin start mod by pipe, %s", mod_name);
+	addStartupStep(entity_id, "start_mod", "", 0, 0, 0);
 	//通过管道通知进程创建实体线程
 	if (NULL != (groupProcess = findGroupProcessInfo(group, mod_name)) && 0 == startModByPipe(groupProcess, writeParam)) {
 		char dstParam[10][MAX_PATH];
 		int paramNum = 0;
 		ZeroMemory(dstParam, sizeof(dstParam));
-		DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "query mod by pipe, %s", mod_name);
+		addStartupStep(entity_id, "query_mod", "", 0, 0, 0);
 		if (-1 != (paramNum = queryModByPipe(groupProcess, mod_name, dstParam)))		//return paramNum
 		{
+			char processId[20];
 			HANDLE processMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, dstParam[2]);
 			new_process->pid = (int)groupProcess->pid;
-			DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "return processId %d", new_process->pid);
+			sprintf(processId, "%d", new_process->pid);
+			addStartupStep(entity_id, "open_process_id", processId, 0, 0, 0);
 			return 0;
 		}
 	}
@@ -1021,7 +1024,7 @@ static void mgr_on_entity_state(sp_mod_mgr_t *mgr, sp_entity_t *entity, int trig
 	mgr_bcast_entity_state_event(mgr, entity, SP_PKT_MOD|MOD_CMD_RECORD_STATE_EVENT, pkt);
 	iobuffer_dec_ref(pkt);
 
-	DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "entity %s change state from %d to %d", entity->cfg->name, last_state, curr_state);
+	addStartupStep(entity->cfg->idx, "state_change", "", last_state, curr_state, 0);
 
 	// gui显示实体状态变化
 	env = sp_get_env();
@@ -1463,7 +1466,7 @@ int sp_mod_mgr_add_module(sp_mod_mgr_t *mgr, sp_cfg_shell_module_t *cfg_mod)
 		list_add_tail(&mod->entry, &mgr->mod_list);
 		ARRAY_IDX(mgr->arr_mod, cfg_mod->idx, sp_mod_t*) = mod;
 	} else {
-		DbgWithLinkForC(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM, "module %s already exist!", cfg_mod->name);
+		//DbgWithLinkForC(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM, "module %s already exist!", cfg_mod->name);
 		//return Error_Duplication;
 	}
 
@@ -1610,7 +1613,7 @@ sp_mod_t *sp_mod_mgr_find_module_by_name(sp_mod_mgr_t *mgr, const char *mod_name
 
 sp_mod_t *sp_mod_mgr_find_module_by_idx(sp_mod_mgr_t *mgr, int mod_idx)
 {
-	if (mod_idx == -1 || mod_idx >= mgr->arr_mod->nelts)
+	if (mod_idx == -1 || mod_idx > mgr->arr_mod->nelts)
 		return NULL;
 	
 	return ARRAY_IDX(mgr->arr_mod, mod_idx, sp_mod_t*);
@@ -1694,7 +1697,7 @@ sp_entity_t *sp_mod_mgr_find_entity_by_name(sp_mod_mgr_t *mgr, const char *entit
 
 sp_entity_t *sp_mod_mgr_find_entity_by_idx(sp_mod_mgr_t *mgr, int entity_id)
 {
-	if (entity_id == -1 || entity_id >= mgr->arr_ent->nelts)
+	if (entity_id == -1 || entity_id > mgr->arr_ent->nelts)
 		return NULL;
 
 	return ARRAY_IDX(mgr->arr_ent, entity_id, sp_entity_t*);
@@ -1775,8 +1778,7 @@ static int load_module(sp_mod_mgr_t *mgr, sp_mod_t *mod, int trigger_entity_id,
 {
 	int rc = 0;
 	sp_env_t *env = sp_get_env();
-
-	DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "begin load module %s", mod->cfg->name);
+	addStartupStep(mod->cfg->idx, "begin_load", "", 0, 0, 0);
 
 #ifdef _WIN32
 	sp_mod_mgr_lockEx(mod->cfg->idx);
@@ -1789,7 +1791,9 @@ static int load_module(sp_mod_mgr_t *mgr, sp_mod_t *mod, int trigger_entity_id,
 			DbgWithLinkForC(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM, "sp_mod_mgr_load_module %s failed! create module process failed", mod->cfg->name);
 			rc = Error_Unexpect;
 		} else {
-			DbgWithLinkForC(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM, "create module process succ, pid: %d", mod->process.pid);
+			char pidBuffer[20] = "";
+			_itoa(mod->process.pid, pidBuffer, sizeof(pidBuffer));
+			addStartupStep(entity_id, "create module process succ", pidBuffer, 0, 0, 0);
 		}
 	} else {
 		rc = Error_Duplication;
@@ -1817,18 +1821,18 @@ static int load_module(sp_mod_mgr_t *mgr, sp_mod_t *mod, int trigger_entity_id,
 					DWORD dwRet;
 					dwRet = WaitForSingleObject(mod->process.handle, (DWORD)interval);	//wait for entity thread end
 					if (dwRet == WAIT_OBJECT_0) {
-						DbgWithLinkForC(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM, "detect %s's process exit exception!", mod->cfg->name);
+						addStartupStep(mod->cfg->idx, "mod_online", "process exit exception!", 0, 0, Error_Exception);
 						rc = Error_Exception;
 						break;
 					}
 				} else {
-					DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "mod is online now!, %s", mod->cfg->name);
+					addStartupStep(mod->cfg->idx, "mod_online", "", 0, 0, 0);
 					break;
 				}
 			} 
 			else 
 			{
-				DbgWithLinkForC(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM, "get epid state failed!");
+				addStartupStep(mod->cfg->idx, "mod_online", "get epid state failed!", 0, 0, Error_Exception);
 				break;
 			}
 		}
@@ -1836,9 +1840,9 @@ static int load_module(sp_mod_mgr_t *mgr, sp_mod_t *mod, int trigger_entity_id,
 		if (rc == 0)
 			rc = sp_svc_send(mgr->shell_svc, mod->cfg->idx, SP_INVALID_SVC_ID, SP_PKT_MOD|MOD_CMD_INIT, 0, NULL);
 		if (rc) {
-			DbgWithLinkForC(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM, "send out mod init cmd to %s(%d) failed: %s", mod->cfg->name, mod->cfg->idx, sp_strerror(rc));
+			addStartupStep(mod->cfg->idx, "send_init", "failed", 0, 0, rc);
 		} else {
-			DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "send out mod init cmd ok!, %s", mod->cfg->name);
+			addStartupStep(mod->cfg->idx, "send_init", "", 0, 0, 0);
 			for (i = 0; i < tries; ++i) {
 #ifdef _WIN32
 				HANDLE hs[] = { mod->evt_wait_handle, mod->process.handle };	//wait for entity thread end
@@ -1853,21 +1857,22 @@ static int load_module(sp_mod_mgr_t *mgr, sp_mod_t *mod, int trigger_entity_id,
 				}
 #endif //_WIN32
 				if (dwRet == WAIT_OBJECT_0) {
-					DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "receive reply from module %s ok!", mod->cfg->name);
+					addStartupStep(mod->cfg->idx, "entity_reply", "", 0, 0, 0);
 					rc = mod->wait_result;
 					if (rc != 0) {
-						DbgWithLinkForC(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM, "receive reply from module %s ok! but wait rc: %s", mod->cfg->name, sp_strerror(rc));
+						addStartupStep(mod->cfg->idx, "entity_reply", "failed", 0, 0, rc);
 					}
 					break;
 				} else if (dwRet == WAIT_OBJECT_0+1) {
-					DbgWithLinkForC(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM, "detect %s's process exit exception!", mod->cfg->name);
+					addStartupStep(mod->cfg->idx, "entity_reply", "process end", 0, 0, Error_Exception);
 					rc = Error_Exception;
 					break;
 				} else if(dwRet == WAIT_TIMEOUT) {
+					addStartupStep(mod->cfg->idx, "entity_reply", "timeout", 0, 0, Error_TimeOut);
 					rc = Error_TimeOut;
 				}
 				else {
-					DbgWithLinkForC(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM, "wait for multi object failed!! err=%d", GetLastError());
+					addStartupStep(mod->cfg->idx, "entity_reply", "multi obj", 0, 0, Error_Unexpect);
 					rc = Error_Unexpect;
 					break;
 				}
@@ -2084,7 +2089,7 @@ static int start_entity(sp_mod_mgr_t *mgr, sp_entity_t *ent, const char *cmdline
 	int rc = 0;
 	sp_mod_t *mod = ent->mod;
 
-	DbgWithLinkForC(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM, "begin start entity %s", ent->cfg->name);
+	addStartupLog(mod->cfg->name, mod->cfg->idx);
 	
 #ifdef _WIN32
 	sp_mod_mgr_lockEx(mod->cfg->idx);
@@ -2101,7 +2106,7 @@ static int start_entity(sp_mod_mgr_t *mgr, sp_entity_t *ent, const char *cmdline
 			rc = sp_svc_send(mgr->shell_svc, mod->cfg->idx, ent->cfg->idx, SP_PKT_MOD|MOD_CMD_START, ent->cfg->idx, &pkt);
 			if (rc == 0) {
 				int last_state = ent->state;
-				DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "start entity %s, send cmd start ok!", ent->cfg->name);
+				addStartupStep(mod->cfg->idx, "send_start", "", 0, 0, 0);
 				ent->state_start_time = y2k_time_now();
 				if (ent->first_start_time == 0)
 					ent->first_start_time = ent->state_start_time;
@@ -2109,16 +2114,16 @@ static int start_entity(sp_mod_mgr_t *mgr, sp_entity_t *ent, const char *cmdline
 				ent->state = EntityState_Starting;
 				mgr_on_entity_state(mgr, ent, trigger_entity_id, last_state, ent->state);
 			} else {
-				DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "start entity %s, send cmd start failed!", ent->cfg->name);
+				addStartupStep(mod->cfg->idx, "send_start", "failed", 0, 0, Error_Unexpect);
 			}
 			if (pkt)
 				iobuffer_dec_ref(pkt);
 		} else {
 			rc = Error_InvalidState;
-			DbgWithLinkForC(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM, "%s: entity %s state is not correct! current state: %d", __FUNCTION__, ent->cfg->name, (int)ent->state);
+			addStartupStep(mod->cfg->idx, "send_start", "state is not correct", 0, 0, Error_InvalidState);
 		}
 	} else {
-		DbgWithLinkForC(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM, "entity's %s 's module is not load!", ent->cfg->name);
+		addStartupStep(mod->cfg->idx, "send_start", "module is not load", 0, 0, Error_InvalidState);
 		rc = Error_InvalidState;
 	}
 #ifdef _WIN32
@@ -2132,16 +2137,16 @@ static int start_entity(sp_mod_mgr_t *mgr, sp_entity_t *ent, const char *cmdline
 		HANDLE hs[] = {mod->evt_app_exit, ent->evt_wait_handle};
 		DWORD dwRet = WaitForMultipleObjects(array_size(hs), &hs[0], FALSE, PROCESS_TIMEOUT);
 		if (dwRet == WAIT_OBJECT_0) {
-			DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "wait for start entity %s result, app exit!", ent->cfg->name);
+			addStartupStep(mod->cfg->idx, "wait_result", "app exit", 0, 0, Error_Unexpect);
 			rc = Error_Unexpect;
 		} else if (dwRet == WAIT_OBJECT_0+1) {
-			DbgWithLinkForC(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM, "wait for start entity %s result ok, result = %d!", ent->cfg->name, ent->wait_result);
+			addStartupStep(mod->cfg->idx, "wait_result", "", 0, 0, 0);
 			rc = ent->wait_result;
 			if (rc != 0) {
-                DbgWithLinkForC(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM, "wait for starting entity %s and turned out result: %s!", ent->cfg->name, sp_strerror(ent->wait_result));
+				addStartupStep(mod->cfg->idx, "wait_result", "turned out result", 0, 0, ent->wait_result);
 			}
 		} else {
-			DbgWithLinkForC(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM, "wait for start entity %s timeout!", ent->cfg->name);
+			addStartupStep(mod->cfg->idx, "wait_result", "timeout", 0, 0, Error_TimeOut);
 			rc = Error_TimeOut;
 		}
 

+ 17 - 0
Framework/spshell/SpShellBase.h

@@ -0,0 +1,17 @@
+#ifndef STARTUP_LOG_H
+#define STARTUP_LOG_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+	int addStartupLog(const char* module_entity, int idx);
+	int addStartupStep(const char* module_entity, const char* event, const char* status, int from, int to, int result);
+
+#ifdef __cplusplus
+} // extern "C" {
+#endif
+
+
+#endif

+ 10 - 4
Framework/spshell/svc.cpp

@@ -26,6 +26,7 @@
 #include <winpr/sysinfo.h>
 #include <winpr/environment.h>
 #include <iniutil.h>
+#include "StartUpBase.h"
 
 static void shutdown_app(void* arg)
 {
@@ -699,8 +700,13 @@ iobuffer_t *on_entity_start(sp_rpc_server_t *server, int epid, int svc_id, int r
 	iobuffer_t *ans_pkt = NULL;
 
 	iobuffer_read(*req_pkt, IOBUF_T_I4, &entity_id, NULL);
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("handle start entity req: %d", entity_id);
-
+	sp_entity_t* ent;
+	ent = sp_mod_mgr_find_entity_by_idx(env->mod_mgr, entity_id);
+	std::string entityName;
+	if (ent)
+		entityName = ent->mod->cfg->name;
+	addStartupLog(entityName.c_str(), entity_id);
+	addStartupStep(entity_id, "handle_req", "", 0, 0, 0);
 	iobuffer_format_read(*req_pkt, "s", &cmdline);
 	result = sp_mod_mgr_start_entity(env->mod_mgr, entity_id, cmdline, svc_id);
 	FREE(cmdline);
@@ -988,11 +994,11 @@ iobuffer_t* on_try_upload_logs_info(sp_rpc_server_t* server, int epid, int svc_i
 	iobuffer_write(ans_pkt, IOBUF_T_I4, &i_discard_full, 0);
 	iobuffer_write(ans_pkt, IOBUF_T_I4, &i_discard_RTI1002, 0);
 	iobuffer_write(ans_pkt, IOBUF_T_I4, &i_curLogNum, 0);
-	
+	/*
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("checkUrlActive::GetSendLogInfo, TS_Suc:%d, TU_Suc:%d, BS_Suc:%d, BU_Suc:%d, beidou_Suc:%d, TS_Err:%d, TU_Err:%d, BS_Err:%d, BU_Err:%d, beidou_Err:%d, discard_forFull:%d, discard_forRTI1002:%d, curNum:%d"
 		, t_upload_TerminalSys_Suc, t_upload_TerminalUser_Suc, t_upload_BussinessSys_Suc, t_upload_BussinessUser_Suc, t_upload_beidou_Suc,
 		t_upload_TerminalSys_Err, t_upload_TerminalUser_Err, t_upload_BussinessSys_Err, t_upload_BussinessUser_Err, t_upload_beidou_Err
 		, t_discard_full, t_discard_RTI1002, curLogNum);
-
+	*/
 	return ans_pkt;
 }

+ 0 - 2
Module/include/DevEntityCommBase.hpp

@@ -220,8 +220,6 @@ inline ErrorCodeEnum CDevAdptEntityBase::ExtractVendorLibFullPath(CSimpleStringA
 
 inline void CDevAdptEntityBase::InitializeVendorLogSwitch()
 {
-	LOG_FUNCTION();
-
 	if (!vendorLibInfo.IsValid()) {
 		ExtractVendorLibName();
 	}

+ 72 - 338
Module/include/DevFSMCommBase.hpp

@@ -44,51 +44,6 @@ do {\
 #define HARDWARE_ENTITY_MAKE_ERRORCODE_TO_BUSINESS(ec)	\
 	MAKE_SLV_ERRORCODE_TO_BUSINESS(ec.dwEntityId, ec.dwVendorErroCode, ec.dwReserved)
 
-/*class object must have 'LogErrMsg' function.*/
-#define LOG_ERROR_MSG_MACRO(errCode, MethodSig, DeviceType)\
-	do {\
-		if(errCode != Error_Succeed) {\
-			LogErrMsg(CSimpleStringA::Format("%s::%s at line:%d", __FUNCTION__, #MethodSig, __LINE__), \
-			errCode, MEC_DEVAPI_##DeviceType##_(MethodSig), TRUE);\
-	}\
-	} while (false)
-
-#define LOG_CARDISSUER_ERROR_MSG_MACRO(errCode, MethodSig)\
-	LOG_ERROR_MSG_MACRO(errCode, MethodSig, CARDISSUER)
-
-#define LOG_THERMALPRINT_ERROR_MSG_MACRO(errCode, MethodSig)\
-	LOG_ERROR_MSG_MACRO(errCode, MethodSig, THERMALPRINT)
-
-#define LOG_DEVCONTROL_ERROR_MSG_MACRO(errCode, MethodSig)\
-	LOG_ERROR_MSG_MACRO(errCode, MethodSig, DEVCONTROL)
-
-#define LOG_PRINTSEAL_ERROR_MSG_MACRO(errCode, MethodSig)\
-	LOG_ERROR_MSG_MACRO(errCode, MethodSig, PRINTSEAL)
-
-#define LOG_FINGERPRINT_ERROR_MSG_MACRO(errCode, MethodSig)\
-	LOG_ERROR_MSG_MACRO(errCode, MethodSig, FINGERPRINT)
-
-#define LOG_HSPSCANNER_ERROR_MSG_MACRO(errCode, MethodSig)\
-	LOG_ERROR_MSG_MACRO(errCode, MethodSig, HSPSCANNER)
-
-#define LOG_UPS_ERROR_MSG_MACRO(errCode, MethodSig)\
-	LOG_ERROR_MSG_MACRO(errCode, MethodSig, UPS)
-
-#define LOG_GPIO_ERROR_MSG_MACRO(errCode, MethodSig)\
-	LOG_ERROR_MSG_MACRO(errCode, MethodSig, GPIO)
-
-#define LOG_IDCER_ERROR_MSG_MACRO(errCode, MethodSig)\
-	LOG_ERROR_MSG_MACRO(errCode, MethodSig, IDCER)
-
-#define LOG_RF_ERROR_MSG_MACRO(errCode, MethodSig)\
-	LOG_ERROR_MSG_MACRO(errCode, MethodSig, RF)
-
-#define LOG_PINPAD_ERROR_MSG_MACRO(errCode, MethodSig)\
-	LOG_ERROR_MSG_MACRO(errCode, MethodSig, EPP)
-
-#define LOG_WATCHDOG_ERROR_MSG_MACRO(errCode, MethodSig)\
-	LOG_ERROR_MSG_MACRO(errCode, MethodSig, WATCHDOG)
-
 enum PageType
 {
 	PageType_Init,
@@ -426,14 +381,13 @@ public:
 	CSimpleStringA strPort;
 	CSimpleStringA strBaudrate;
 	CSimpleStringA strPortNum;
-	CSimpleStringA strInOutDir;
 	CSimpleStringA strCheckdata;
 	CSimpleStringA strKeysn;
 	CSimpleStringA strPureAdapterName;
 
 	AdaptorInfo() :strVendor(true), strVersion(true), strBatch(true)
 		, strPort(true), strBaudrate(true)
-		, strPortNum(true), strInOutDir(true)
+		, strPortNum(true)
 		, strCheckdata(true), strKeysn(true), strPureAdapterName(true)
 	{
 	}
@@ -481,14 +435,6 @@ public:
 		}
 		return result;
 	}
-	int GetInOutDirInt() const
-	{
-		int result = 0;
-		if (!strInOutDir.IsNullOrEmpty()) {
-			result = atoi(strInOutDir.GetData());
-		}
-		return result;
-	}
 };
 
 struct AdapterInfo : public AdaptorInfo
@@ -531,7 +477,8 @@ struct AdapterInfo : public AdaptorInfo
 
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevCategory")("{\"szVendor\":\"%s\",\"szType\":\"%s\",\"szModel\":\"%s\",\"szVersion\":\"%s\"}", devCatInfo.szVendor, devCatInfo.szType, devCatInfo.szModel, strCatVersion.GetData());
 		
-		CheckCategoryInfoFormat();
+		//oilyang@20250220 as device adapter have been decoupled from us, no need to check anymore
+		//CheckCategoryInfoFormat();
 	}
 
 	void CheckCategoryInfoFormat()
@@ -609,17 +556,7 @@ struct AdapterInfo : public AdaptorInfo
 	}
 };
 
-struct ErrorPackage {
-
-	CSimpleStringA msgHead;
-	///*TODO(80374374@3/31/2023): to apply, replace the one defined at entity scope with it */
-	CSimpleStringA devSN;
-	ErrorCodeEnum devErrCode;
-	DWORD apiErrCode;
-
-	ErrorPackage() :msgHead(true), devSN(true), devErrCode(Error_Succeed), apiErrCode(0) {}
-};
-struct ErrorPackageEx {//or another name? or replace ErrorPackage ?
+struct ErrorPackageEx {
 
 	ErrorCodeEnum errCode;
 	DWORD apiUserCode;
@@ -651,21 +588,12 @@ struct DevEntityErrorCode {
 		dwVendorErroCode = devErrorCode;
 		dwReserved = dwReservedCode;
 	}
-	/*no used now!!*/
-	void SetVendorID(DWORD dwVendorID)
-	{
-		dwVendorId = dwVendorID;
-	}
 
 	DWORD GetCompleteErrorCode() const 
 	{
 		return MAKE_SLV_ERRORCODE(dwEntityId, dwVendorId, dwVendorErroCode);
 	}
 
-	DWORD GetCompleteErrorCode2Business() const 
-	{
-		return MAKE_SLV_ERRORCODE_TO_BUSINESS(dwEntityId, dwVendorErroCode, dwReserved);
-	}
 
 };
 
@@ -674,50 +602,14 @@ class CCommDevFSM : public FSMImpl<TFSM>
 {
 
 public:
-	CCommDevFSM() :m_FirstStart(TRUE), m_iInWhatPage(PageType_Init),m_bOpened(false), m_bOpening(true), m_csAlarmMsg("No more information"), m_contiErrTimes(0)
+	CCommDevFSM() :m_FirstStart(TRUE), m_iInWhatPage(PageType_Init),m_bOpened(false), m_bOpening(true), m_eDevState(DEVICE_STATUS_NOT_READY),m_contiErrTimes(0)
 	{
-		m_WarnCodeMap.insert(std::make_pair<std::string, DWORD>("CardIssuerStand", 0x2030021f));
-		m_WarnCodeMap.insert(std::make_pair<std::string, DWORD>("CardIssuerStore", 0x2200021f));
-		m_WarnCodeMap.insert(std::make_pair<std::string, DWORD>("ContactlessCard", 0x21300203));
-		m_WarnCodeMap.insert(std::make_pair<std::string, DWORD>("FingerPrint", 0x20400211));
-		m_WarnCodeMap.insert(std::make_pair<std::string, DWORD>("IDCertificate", 0x20100202));
-		m_WarnCodeMap.insert(std::make_pair<std::string, DWORD>("PinPad", 0x20600207));
-		m_WarnCodeMap.insert(std::make_pair<std::string, DWORD>("Gpio", 0x20900201));
-		m_WarnCodeMap.insert(std::make_pair<std::string, DWORD>("HSPScanner", 0x21700207));
-
-		m_RootIniCodeMap.insert(std::make_pair<std::string, DWORD>("CardIssuerStand", 0x20300299));
-		m_RootIniCodeMap.insert(std::make_pair<std::string, DWORD>("CardIssuerStore", 0x22000299));
-		m_RootIniCodeMap.insert(std::make_pair<std::string, DWORD>("ContactlessCard", 0x21300224));
-		m_RootIniCodeMap.insert(std::make_pair<std::string, DWORD>("FingerPrint", 0x20400229));
-		m_RootIniCodeMap.insert(std::make_pair<std::string, DWORD>("IDCertificate", 0x2010021f));
-		m_RootIniCodeMap.insert(std::make_pair<std::string, DWORD>("PinPad", 0x2060021f));
-		m_RootIniCodeMap.insert(std::make_pair<std::string, DWORD>("Gpio", 0x20900203));
-		m_RootIniCodeMap.insert(std::make_pair<std::string, DWORD>("HSPScanner", 0x2170020f));
 
 	}
 
 	ErrorCodeEnum GetAndSplitDevErrInfo(
 		CSimpleStringA& csErrMsg, WORD& wdDevErrCode, LPCTSTR lpszFuncNameForDisplay = "");
 
-	ErrorCodeEnum LogDevErrInfo(LPCTSTR lpszFuncName = "")
-	{
-		CSimpleStringA csMsg;
-		WORD wdErrorCode = 0;
-		return GetAndSplitDevErrInfo(csMsg, wdErrorCode, lpszFuncName);
-	}
-	bool GetDevErrorCode(WORD& wdErrorCode)
-	{
-		CSimpleStringA csMsg;
-		ErrorCodeEnum eRet = GetAndSplitDevErrInfo(csMsg, wdErrorCode);
-		return (eRet == Error_Succeed);
-	}
-	void SetErrPackage(CSimpleStringA msgHead, CSimpleStringA devSN, ErrorCodeEnum errCode, DWORD apiCode)
-	{
-		m_errPkg.msgHead = msgHead;
-		m_errPkg.devSN = devSN;
-		m_errPkg.devErrCode = errCode;
-		m_errPkg.apiErrCode = apiCode;
-	}
 
 	DWORD SetErrorAndLog(ErrorCodeEnum errCode, DWORD userCode, CSimpleStringA devApi, CSimpleStringA funPath, bool bInBusiness = false, int costTime = 0, CSimpleStringA logCode = "", CSimpleStringA context = "")
 	{
@@ -801,6 +693,7 @@ public:
 		ErrorCodeEnum rc = m_hDevHelper.LoadUp(customDllPath.IsNullOrEmpty() ? m_adapterInfo.adapterFilePath : customDllPath);
 		return rc;
 	}
+
 	/*fulfill adapter elem, open param and adapter file name&absolute path */
 	void FulfillAdapterInfoFrom(const VendorLibInfo& vendorLib)
 	{
@@ -827,9 +720,7 @@ public:
 		CSimpleStringA csPortNum(true), csCheckData(true), csKeySN(true), csInOutDir(true);
 		if (!entityName.Compare("Gpio")) {
 			spConfigRoot->ReadConfigValue(sectionName.GetData(), "PortNum", csPortNum);
-			spConfigRoot->ReadConfigValue(sectionName.GetData(), "InOutDir", csInOutDir);
 			m_adapterInfo.strPortNum = csPortNum;
-			m_adapterInfo.strInOutDir = csInOutDir;
 		} else if (!entityName.Compare("PinPad")) {
 			spConfigRoot->ReadConfigValue(sectionName.GetData(), "Checkdata", csCheckData);
 			spConfigRoot->ReadConfigValue(sectionName.GetData(), "Keysn", csKeySN);
@@ -872,10 +763,10 @@ public:
 	{
 		CSimpleStringA result(true);
 		if (0 == devDeviceName.Compare("Gpio", true)) {
-			result = CSimpleStringA::Format("{\"Vendor\":\"%s\", \"Version\":\"%s\", \"Batch\":\"%s\", \"Port\":\"%s\", \"Baudrate\":\"%s\", \"PortNum\":\"%s\", \"InOutDir\":\"%s\"}",
+			result = CSimpleStringA::Format("{\"Vendor\":\"%s\", \"Version\":\"%s\", \"Batch\":\"%s\", \"Port\":\"%s\", \"Baudrate\":\"%s\", \"PortNum\":\"%s\"}",
 				LPCSTRSmartPrintString(adaptorInfo.strVendor), LPCSTRSmartPrintString(adaptorInfo.strVersion),
 				LPCSTRSmartPrintString(adaptorInfo.strBatch), LPCSTRSmartPrintString(adaptorInfo.strPort), LPCSTRSmartPrintString(adaptorInfo.strBaudrate),
-				LPCSTRSmartPrintString(adaptorInfo.strPortNum), LPCSTRSmartPrintString(adaptorInfo.strInOutDir));
+				LPCSTRSmartPrintString(adaptorInfo.strPortNum));
 		} else if (0 == devDeviceName.Compare("PinPad", true)) {
 			result = CSimpleStringA::Format("{\"Vendor\":\"%s\", \"Version\":\"%s\", \"Batch\":\"%s\", \"Port\":\"%s\", \"Baudrate\":\"%s\", \"Checkdata\":\"%s\", \"Keysn\":\"%s\"}",
 				LPCSTRSmartPrintString(adaptorInfo.strVendor), LPCSTRSmartPrintString(adaptorInfo.strVersion),
@@ -891,166 +782,12 @@ public:
 
 #endif //_MSC_VER
 
-	void ToLogRootINIInfoOnce()
-	{
-        CSmartPointer<IConfigInfo> spConfig;
-		this->GetEntityBase()->GetFunction()->OpenConfig(Config_Cache, spConfig);
-		CSimpleStringA entityName(this->GetEntityBase()->GetEntityName());
-		int nUploadTime(0);
-		spConfig->ReadConfigValueInt("RootUploadFlag", entityName, nUploadTime);
-        SYSTEMTIME stNow = CSmallDateTime::GetNow().ToSystemTime();
-        SYSTEMTIME lastUploadTime = CSmallDateTime(nUploadTime).ToSystemTime();
-        if (lastUploadTime.wYear != stNow.wYear || lastUploadTime.wMonth != stNow.wMonth || lastUploadTime.wDay != stNow.wDay) {
-			ToLogRootINIInfo();
-			spConfig->WriteConfigValue("RootUploadFlag", entityName, CSimpleStringA::Format("0x%08X", (DWORD)CSmallDateTime::GetNow()));
-        }
-	}
-
-	/** GPIO不调用此接口 [Gifur@20221025]*/
-	void ToLogRootINIInfo()
-	{
-		CSimpleStringA entityName(this->GetEntityBase()->GetEntityName());
-		std::map<std::string, std::string> rootInfo;
-		rootInfo["File"] = m_adapterInfo.strPureAdapterName.GetData();
-		rootInfo["Vendor"] = m_adapterInfo.strVendor.GetData();
-		rootInfo["Version"] = m_adapterInfo.strVersion.GetData();
-		rootInfo["Batch"] = m_adapterInfo.strBatch.GetData();
-		rootInfo["Port"] = m_adapterInfo.strPort.GetData();
-		rootInfo["Baudrate"] = m_adapterInfo.strBaudrate.GetData();
-
-		if (!entityName.Compare("Gpio")) {
-			rootInfo["PortNum"] = m_adapterInfo.strPortNum.GetData();
-			rootInfo["InOutDir"] = m_adapterInfo.strInOutDir.GetData();
-		} else if (!entityName.Compare("PinPad")) {
-			rootInfo["Checkdata"] = m_adapterInfo.strCheckdata.GetData();
-			rootInfo["Keysn"] = m_adapterInfo.strKeysn.GetData();
-		}
-
-        std::pair<bool, std::string> strResult;
-        strResult = generateJsonStr(rootInfo);
-        if (!entityName.IsNullOrEmpty()) {
-            LogWarn(Severity_Low, Error_Debug, m_RootIniCodeMap[entityName.GetData()], strResult.second.c_str());
-        } else {
-            DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Entity Name is empty, please check!!!");
-        }
-        return;
-	}
-
-	/** upload adapter file's hash value and open param as well as dev category information, return if information has uploaded this time*/
-	bool ToLogWarnInfoAboutTerm()
-	{
-		std::map<std::string, std::string> emptys;
-		return ToLogWarnInfoAboutTermExtend(emptys);
-	}
-
-	/** upload adapter file's hash value and open param as well as dev category information, return if information has uploaded this time
-	extend from ToLogWarnInfoAboutTerm
-	*/
-	bool ToLogWarnInfoAboutTermExtend(std::map<std::string, std::string> additionalParams)
-	{
-		bool bUpload(false);
-		int fileSize = 0;
-		//calculate file hash value
-		std::map<std::string, std::string> termInfo;
-		char* strFileHash = new char[128];
-		if (ExistsFileA(m_adapterInfo.adapterFilePath)) {
-			BYTE fileHash[32];
-			SM3File(const_cast<char*>(m_adapterInfo.adapterFilePath.GetData()), fileHash);
-			ZeroMemory(strFileHash, 128);
-			SP::Module::Util::HexBuf2StrBuf(fileHash, &strFileHash, 32);
-
-#if defined(_MSC_VER)
-			HANDLE hFile;
-			hFile = CreateFile(m_adapterInfo.adapterFilePath.GetData(), 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-			if (hFile == INVALID_HANDLE_VALUE) {
-				fileSize = 0;
-			} else {
-				fileSize = GetFileSize(hFile, NULL);
-				CloseHandle(hFile);
-			}
-#else
-			//calculate file size
-			struct stat statbuf;
-			ZeroMemory(&statbuf, sizeof(statbuf));
-			stat(m_adapterInfo.adapterFilePath.GetData(), &statbuf);
-			fileSize = statbuf.st_size;
-#endif //_MSC_VER
-
-		} else {
-			memset(strFileHash, '\0', sizeof(char) * 128);
-		}
-
-		//necessary elements about adapter
-		CSimpleStringA csPortNum(true), csCheckData(true), csKeySN(true), csInOutDir(true);
-		termInfo["VendorDllName"] = m_adapterInfo.adapterFilePath.GetData();
-		termInfo["VendorDllFileHash"] = strFileHash;
-		ZeroMemory(strFileHash, 128);
-		termInfo["VendorDllFileSize"] = _itoa(fileSize, strFileHash, 10);
-		termInfo["szModel"] = m_adapterInfo.devCatInfo.szModel;
-		termInfo["szType"] = m_adapterInfo.devCatInfo.szType;
-		termInfo["Port"] = m_adapterInfo.strPort.GetData();
-		termInfo["Baudrate"] = m_adapterInfo.strBaudrate.GetData();
-
-		if (strFileHash != nullptr) {
-			delete[] strFileHash;
-			strFileHash = nullptr;
-		}
-
-		CSimpleStringA entityName(this->GetEntityBase()->GetEntityName());
-		if (!entityName.Compare("Gpio")) {
-			termInfo["PortNum"] = m_adapterInfo.strPortNum.GetData();
-			termInfo["InOutDir"] = m_adapterInfo.strInOutDir.GetData();
-		}
-		else if (!entityName.Compare("PinPad")) {
-			termInfo["CheckData"] = m_adapterInfo.strCheckdata.GetData();
-			termInfo["Keysn"] = m_adapterInfo.strKeysn.GetData();
-		}
-
-		if (!additionalParams.empty()) {
-			for (auto it = additionalParams.cbegin(); it != additionalParams.cend(); ++it) {
-				termInfo[it->first.c_str()] = it->second;
-			}
-		}
-
-		std::pair<bool, std::string> strResult;
-		strResult = generateJsonStr(termInfo);
-
-		CSmartPointer<IConfigInfo> spConfigRun;
-		CSimpleStringA csWarnMsg;
-		this->GetEntityBase()->GetFunction()->OpenConfig(Config_Run, spConfigRun);
-		spConfigRun->ReadConfigValue("Run", "WarnMsg", csWarnMsg);
-		SYSTEMTIME localTime;
-		GetLocalTime(&localTime);
-		if (csWarnMsg.IsNullOrEmpty() || csWarnMsg.Compare(strResult.second.c_str()) != 0) {
-			spConfigRun->WriteConfigValueInt("Run", "WarnDay", localTime.wDay);
-			spConfigRun->WriteConfigValue("Run", "WarnMsg", strResult.second.c_str());
-			if (!entityName.IsNullOrEmpty()) {
-				LogWarn(Severity_Low, Error_Unexpect, m_WarnCodeMap[entityName.GetData()], strResult.second.c_str());
-				bUpload = true;
-			} else {
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Entity Name is empty, please check!!!");
-			}
-		} else {
-			int wDay = 99;
-			spConfigRun->ReadConfigValueInt("Run", "WarnDay", wDay);
-			if (wDay != localTime.wDay) {
-				spConfigRun->WriteConfigValueInt("Run", "WarnDay", localTime.wDay);
-				if (!entityName.IsNullOrEmpty()) {
-					LogWarn(Severity_Low, Error_Unexpect, m_WarnCodeMap[entityName.GetData()], strResult.second.c_str());
-					bUpload = true;
-				} else {
-					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Entity Name is empty, please check!!!");
-				}
-			}
-		}
-		return bUpload;
-	}
-
 	void ResetRepeatErrTimes()
 	{
 		m_contiErrTimes = 0;
 	}
 
+	/** TODO等待废弃,不建议再继续使用  [Gifur@2025114]*/
 	ErrorCodeEnum TransECWithRepeat(const ErrorCodeEnum& ec)
 	{
 		ErrorCodeEnum result(ec);
@@ -1091,7 +828,46 @@ public:
 		return result;
  	}
 
-	virtual void SetInWhatPage(int iPageType) { m_iInWhatPage = iPageType; }
+	virtual void SetDevInitFlag(bool val = true) {
+		m_bOpened = val; 
+	}
+
+	bool GetDevInitFlag() const { 
+		return m_bOpened; 
+	}
+
+	virtual void SetDevInitingFlag(bool val = true) { 
+		m_bOpening = val; 
+	}
+	bool GetDevInitingFlag() const { 
+		return m_bOpening; 
+	}
+
+	virtual void SetInWhatPage(int iPageType) { 
+		m_iInWhatPage = iPageType; 
+	}
+
+	void OnUIState4SetWhatPage(const char* pcszValue) {
+		if (pcszValue != NULL && strlen(pcszValue) > 0) {
+			//增加页面位置判断
+			if (_strnicmp(pcszValue, "M", strlen("M")) == 0) {
+				SetInWhatPage(PageType_MainPage);
+			}
+			else if (_strnicmp(pcszValue, "U", strlen("U")) == 0) {
+				SetInWhatPage(PageType_UserDesktop);
+			}
+			else {
+				SetInWhatPage(PageType_Other);
+			}
+		}
+	}
+
+	virtual DevStateEnum GetDevState() const { 
+		return m_eDevState; 
+	}
+	void SetDevState(DevStateEnum val) { 
+		m_eDevState = val; 
+	}
 
 public:
 
@@ -1105,11 +881,10 @@ protected:
 	BOOL m_FirstStart;
 	int m_iInWhatPage/*在哪个页面,区分首页,用户桌面,其他页*/;
 
-	ErrorPackage m_errPkg;
 	ErrorPackageEx m_errPkgEx;
-	CSimpleStringA m_csAlarmMsg;
 	unsigned int m_contiErrTimes;
 	AdapterInfo m_adapterInfo;
+	DevStateEnum m_eDevState;
 
 	void UpdateEntityIDIfZero()
 	{
@@ -1163,25 +938,9 @@ protected:
 		return dwCode;
 	}
 
-	DWORD AlarmDECToBusiness(DWORD dwVal = 0) 
-	{
-		if (dwVal > 0) {
-			UpdateDEC(dwVal);
-		}
-
-		//oilyang@20200528 according the meeting result,throw a LogError while answering ctx
-		//oilyang@20200525 if have been set ErrorCode of entity defined (not device),use it directly
-		const DWORD dwCode = IsEntityIDSettle(m_entCode.dwVendorErroCode) 
-			? m_entCode.dwVendorErroCode : m_entCode.GetCompleteErrorCode2Business();
-		///**TODO(Gifur@9/10/2021):  */
-        //LogWarn(Severity_Middle, Error_NotImpl, dwCode, CSimpleStringA::Format("%s TODO:", __FUNCTION__));
-		return dwCode;
-	}
-
 	void ClearRelatedDEC()
 	{
 		UpdateDEC();
-		m_csAlarmMsg = "No more information";
 	}
 
 	bool IsEntityIDSettle(const DWORD& dwVal) const
@@ -1189,9 +948,6 @@ protected:
 		return ((dwVal >> 20) == m_entCode.dwEntityId);
 	}
 
-	void LogErrMsg(const char* pMsgHead, ErrorCodeEnum eErrCode, DWORD defaultDevCode = 0, BOOL bAlarm = FALSE);
-	void LogErrMsgEx(const ErrorPackage& errPkg, const char* pMsgBody, DWORD finalErrCode /*= 0*/, BOOL bToBusiness = FALSE);
-
     static void GetFileSizeAndCalcHashValue(const char* fileName, int& fileSize, BYTE fileHash[32])
     {
         HANDLE hFile;
@@ -1211,15 +967,17 @@ protected:
 
 	int CountDevError(CEntityBase *pEntityBase);
 
-	bool IsInBusiness() const { return (m_iInWhatPage == PageType_Other); }
 	
-private:
+	virtual bool IsInBusiness() const { 
+		return (m_iInWhatPage == PageType_Other); 
+	}
+	
+	virtual void OnHardwareShakeHand(CSmartPointer<ITransactionContext> pTransactionContext);
 
+private:
 		std::map<std::string, DWORD> m_WarnCodeMap;
-		std::map<std::string, DWORD> m_RootIniCodeMap;
 };
 
-
 template<class TFSM, class TDevClass>
 inline ErrorCodeEnum CCommDevFSM<TFSM, TDevClass>::GetAndSplitDevErrInfo(
 		CSimpleStringA& csErrMsg, WORD& wdDevErrCode, LPCTSTR lpszFuncNameForDisplay)
@@ -1268,46 +1026,6 @@ inline ErrorCodeEnum CCommDevFSM<TFSM, TDevClass>::GetAndSplitDevErrInfo(
 	return erroCode;
 }
 
-template<class TFSM, class TDevClass>
-inline void CCommDevFSM<TFSM, TDevClass>::LogErrMsg(
-	const char* pMsgHead, ErrorCodeEnum eErrCode, DWORD defaultDevCode, BOOL bAlarm)
-{
-	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("%s failed, EC = %s", pMsgHead, SpStrError(eErrCode));
-	
-	WORD wdErrCode = 0;
-	CSimpleStringA csErrMsg(true);
-	ErrorCodeEnum ec = GetAndSplitDevErrInfo(csErrMsg, wdErrCode);
-	if (IsEntityIDSettle(defaultDevCode)) {
-		UpdateDEC(defaultDevCode);
-	} else if (ec == Error_Succeed && wdErrCode != 0) {
-		UpdateDEC(wdErrCode);
-    } else if (defaultDevCode != 0) {
-        UpdateDEC(defaultDevCode);
-    }
-
-	m_csAlarmMsg = CSimpleStringA::Format("%s failed EC= %s : %s",
-		pMsgHead, SpStrError(eErrCode), (LPCTSTR)csErrMsg);
-	
-	if (bAlarm) {
-		LogWarn(Severity_Middle, eErrCode, AlarmDECToBusiness(), (LPCTSTR)m_csAlarmMsg);
-	}
-
-	return;
-}
-
-template<class TFSM, class TDevClass>
-inline void CCommDevFSM<TFSM, TDevClass>::LogErrMsgEx(const ErrorPackage& errPkg, const char* pMsgBody, DWORD finalErrCode /*= 0*/, BOOL bToBusiness)
-{
-	const CSimpleStringA alarmMsg = CSimpleStringA::Format("{\"DevSN\":\"%s\", \"Prefix\":\"%s\", \"Code\":\"%s\", \"Msg\":\"%s\"}"
-                           , errPkg.devSN.GetData(), errPkg.msgHead.GetData(), SpStrError(errPkg.devErrCode), pMsgBody);
-    if (bToBusiness) {
-        LogError(Severity_High, errPkg.devErrCode, finalErrCode, alarmMsg.GetData());
-    } else {
-        LogWarn(Severity_High, errPkg.devErrCode, finalErrCode, alarmMsg.GetData());
-    }
-	return;
-}
-
 //1:报错累计到上限,需要返回错误码给业务
 //0:报错累计未到上限,或者不需要计数 
 //-1:出现错误
@@ -1342,6 +1060,22 @@ int CCommDevFSM<TFSM, TDevClass>::CountDevError(CEntityBase* pEntityBase)
 	}
 }
 
+template<class TFSM, class TDevClass>
+void CCommDevFSM<TFSM, TDevClass>::OnHardwareShakeHand(CSmartPointer<ITransactionContext> pTransactionContext)
+{
+	if (m_eDevState == DEVICE_STATUS_NORMAL)
+		pTransactionContext->SendAnswer(Error_Succeed);
+	else
+	{
+		if (m_bOpening)
+			pTransactionContext->SendAnswer(Error_Succeed);
+		else if (!m_bOpened)
+			pTransactionContext->SendAnswer(Error_DevNotAvailable);
+		else
+			pTransactionContext->SendAnswer(Error_InvalidState);
+	}
+}
+
 #endif /*_COMM_DEVICE_FSM_BASE_HPP_*/
 
 

+ 21 - 80
Module/mod_CardIssuerStand/CardIssuerFSM.cpp

@@ -68,7 +68,7 @@ void CCardIssuerFSM::s0_on_entry()
 {
 	LOG_FUNCTION();
 	m_currentFSMState = 0;
-	SetDevStateAndSendMsg(DEVICE_STATUS_NOT_READY);
+	SetDevState(DEVICE_STATUS_NOT_READY);
 	FSMEvent* e;
 	e = new FSMEvent(USER_EVT_INIT);
 	PostEventFIFO(e);
@@ -135,9 +135,8 @@ unsigned int CCardIssuerFSM::s1_on_event(FSMEvent* event)
 void CCardIssuerFSM::s2_on_entry()
 {
 	LOG_FUNCTION();
-	ToLogWarnInfoAboutTerm();
 	m_currentFSMState = 2;
-	SetDevStateAndSendMsg(DEVICE_STATUS_NORMAL, false);
+	SetDevState(DEVICE_STATUS_NORMAL);
 	
 	m_resetTimes = 0;
 	m_testResult = Error_Succeed;
@@ -969,7 +968,7 @@ void CCardIssuerFSM::s9_on_entry()
 	LOG_FUNCTION();
 	m_currentFSMState = 9;
 	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("CardIssuer in fault state, need to reset.");
-	SetDevStateAndSendMsg(DEVICE_STATUS_FAULT);
+	SetDevState(DEVICE_STATUS_FAULT);
 	FSMEvent *e = new FSMEvent(USER_EVT_RESET);
 	PostEventFIFO(e);
 }
@@ -1140,19 +1139,17 @@ ErrorCodeEnum CCardIssuerFSM::OnInit()
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("create card process failed.");
 		return Error_Resource;
 	}
-	m_csDevSN = "";
 	CSystemStaticInfo sysInfo;
 	//oilyang 20160331
 	//so many function always return Error_Succeed,so is useless to process it.
-	m_csMachineType = m_csSite = m_terminalNo = "";
+	m_csMachineType = m_terminalNo = "";
 	GetEntityBase()->GetFunction()->GetSystemStaticInfo(sysInfo);
 	m_csMachineType = sysInfo.strMachineType;
-	m_csSite = sysInfo.strSite;
 	m_terminalNo = sysInfo.strTerminalID;
 	m_majorVerion = sysInfo.MachineVersion.GetMajor();
 	m_minorVerion = sysInfo.MachineVersion.GetMinor();
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("CardIssuer, MachineType:%s, Site:%s, TerminalNo:%s, MachineVersion:%d.%d",
-		m_csMachineType.GetData(), m_csSite.GetData(), m_terminalNo.GetData(), m_majorVerion, m_minorVerion));
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("CardIssuer, MachineType:%s, TerminalNo:%s, MachineVersion:%d.%d",
+		m_csMachineType.GetData(), m_terminalNo.GetData(), m_majorVerion, m_minorVerion));
 
 	//因替换实体名,需要兼容把以前旧的运行时文件拷贝成新的实体名运行文件,卡机分离后,拷贝旧版运行时文件,后期稳定后直接去除
 	//////////////////////////////////////////////////////////////////////////
@@ -1252,48 +1249,6 @@ ErrorCodeEnum CCardIssuerFSM::OnInit()
 }
 ErrorCodeEnum CCardIssuerFSM::OnExit()
 {
-	LOG_FUNCTION();
-	//ErrorCodeEnum eExit;
-	//long l_beginTime, l_endTime;
-	//if (m_hDevHelper != nullptr)
-	//{
-	//	l_beginTime = GetTickCountRVC();
-	//	eExit = m_hDevHelper->GetDevStatus(m_devStatus);
-	//	l_endTime = GetTickCountRVC();
-	//	
-
-	//	if (eExit == Error_Succeed)
-	//	{
-	//		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::GetDevStatus").setCostTime(l_endTime - l_beginTime)("OnExit::GetDevStatus, m_devStatus.eMedia:%d, m_issueStatus:%d", m_devStatus.eMedia, m_issueStatus);
-	//		if (m_devStatus.eMedia == CI_MEDIA_PRESENT){
-	//			if (m_issueStatus)
-	//			{
-	//				LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_CaptureCard_OnExit, "OnExit, issue flag is 1, to capture card");
-	//				eExit = MachineMoveCardBackNotHold();
-	//				m_CardCaptured++;
-	//				SetCardCaptured(m_CardCaptured);
-	//			}
-	//			else
-	//			{
-	//				LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_EjectCard_ByTerminal, "OnExit, issue flag is 0, to eject card");
-	//				MachineMoveCardFrontGate();
-	//			}
-	//		}
-	//	}
-	//	else {
-	//		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("DevAdapter::GetDevStatus").setCostTime(l_endTime - l_beginTime).setResultCode("RTA2322")("OnExit::GetDevStatus err=%s", SpStrError(eExit));
-	//	}
-	//	l_beginTime = GetTickCountRVC();
-	//	eExit = m_hDevHelper->DevClose();
-	//	l_endTime = GetTickCountRVC();
-	//	
-	//	if (eExit == Error_Succeed) {
-	//		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DevClose").setCostTime(l_endTime - l_beginTime)("OnExit,读卡器关闭DevClose成功");
-	//	}
-	//	else {
-	//		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DevClose").setCostTime(l_endTime - l_beginTime).setResultCode("RTA23CJ")("OnExit,读卡器关闭DevClose失败 eErr:%d", eExit);
-	//	}
-	//}
 	FSMImpl<CCardIssuerFSM>::OnExit();
 	return Error_Succeed;
 }
@@ -1532,7 +1487,7 @@ ErrorCodeEnum CCardIssuerFSM::OpenDevice(BYTE btOpenType, const char* pDevSN)
 	}
 	long l_beginTime,l_endTime;
 	do {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CreateDevComponent suc. m_port:%d, m_baudRate:%d, pDevSN:%s",
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CreateDevComponent suc. port:%d, baudRate:%d, pDevSN:%s",
 			m_adapterInfo.GetPortInt(), m_adapterInfo.GetBaudrateInt(), pDevSN);
 
 		l_beginTime = GetTickCountRVC();
@@ -1542,8 +1497,7 @@ ErrorCodeEnum CCardIssuerFSM::OpenDevice(BYTE btOpenType, const char* pDevSN)
 		if (eErrDev == Error_Succeed)
 		{
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DevOpenEx").setCostTime(l_endTime - l_beginTime)("OpenDevice::DevOpenEx, openType:%d, connectType:%d", btOpenType, m_connectType);
-			ToLogRootINIInfo();
-			m_bOpened = true;
+			SetDevInitFlag(true);
 			m_devOpenFailedCount = 0;
 			ZeroMemory(m_devCat.szModel, sizeof(m_devCat.szModel));
 			ZeroMemory(m_devCat.szType, sizeof(m_devCat.szType));
@@ -1743,7 +1697,7 @@ int CCardIssuerFSM::Initial()
 	{
 		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("OpenDevice in Initial return failed with errCode:%d(0x%x)", errCode, errCode);
 		CloseAndClearDevObj(false);
-		m_bOpened = false;
+		SetDevInitFlag(false);
 	}
 	m_bOpening = false;
 	return errCode;
@@ -1877,7 +1831,7 @@ int CCardIssuerFSM::IssueCard(SpReqAnsContext<CardIssuerStandService_Issue_Req,
 			&& ((m_bHasHopper[3] && m_mixedEx[1] >= 3) || !m_bHasHopper[3])
 			&& ((m_bHasHopper[4] && m_mixedEx[1] >= 3) || !m_bHasHopper[4])
 			&& ((m_bHasHopper[5] && m_mixedEx[1] >= 3) || !m_bHasHopper[5]))
-			SetDevStateAndSendMsg(DEVICE_STATUS_MAINTAINCE);
+			SetDevState(DEVICE_STATUS_MAINTAINCE);
 
 		errMsg = CSimpleStringA::Format("the current card hopper %d may be wrong.mixedEx:%d",
 			m_currentHopper, m_mixedEx[m_currentHopper-1]);
@@ -2119,7 +2073,7 @@ int CCardIssuerFSM::CaptureCard(SpReqAnsContext<CardIssuerStandService_Capture_R
 	}
 	else {
 		if (ctx != NULL){
-			if (m_iInWhatPage == PageType_Other) {
+			if (IsInBusiness()) {
 				LogError(Severity_Middle, Error_Unexpect, 0x20300034, "CaptureCard failed");
 				DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_USER).setAPI("DevAdapter::MoveCard").setLogCode("QLR040220304").setResultCode("RTA2307")("吞卡失败,请检查吞卡箱是否已满或联系厂商检查是否有吞卡");
 			}
@@ -2141,7 +2095,7 @@ int CCardIssuerFSM::EjectCard(SpReqAnsContext<CardIssuerStandService_Eject_Req,C
 	Sleep(300);//oilyang@20230106 for keba said "maybe we need stay for machine to prepare..."
 	int ret = 0;
 	ErrorCodeEnum eErr;
-	eErr = MachineMoveCardFrontGate(ctx != NULL && m_iInWhatPage == PageType_Other);
+	eErr = MachineMoveCardFrontGate(ctx != NULL && IsInBusiness());
 	m_pCardProcess->DataInit();
 	if (Error_Succeed == eErr){
 		if (ctx != NULL)
@@ -2298,7 +2252,7 @@ Err:
 			{
 				err = 4;
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("<InternalAcceptCard>, Cancel InterAccept, eject card.");
-				eErr = MachineMoveCardFrontGate(m_iInWhatPage == PageType_Other);
+				eErr = MachineMoveCardFrontGate(IsInBusiness());
 
 				if (Error_Succeed == eErr) {
 					l_beginTime = GetTickCountRVC();
@@ -2565,7 +2519,7 @@ int CCardIssuerFSM::ReadCard_Contact(SpReqAnsContext<CardIssuerStandService_Read
 						SetCardMixed(m_mixedEx[m_currentHopper - 1], m_currentHopper);
 					}
 					else {
-						SetDevStateAndSendMsg(DEVICE_STATUS_NORMAL);
+						SetDevState(DEVICE_STATUS_NORMAL);
 					}
 				}
 			}
@@ -2840,7 +2794,7 @@ int CCardIssuerFSM::ReadCard_RF(SpReqAnsContext<CardIssuerStandService_Read_Req,
 						SetCardMixed(m_mixedEx[m_currentHopper - 1], m_currentHopper);
 					}
 					else {
-						SetDevStateAndSendMsg(DEVICE_STATUS_NORMAL);
+						SetDevState(DEVICE_STATUS_NORMAL);
 					}
 				}
 			}
@@ -3272,7 +3226,7 @@ int CCardIssuerFSM::PreOnline_Contact(SpReqAnsContext<CardIssuerStandService_Pre
 					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("<PreOnline>, set %d card mixed %d,%d", m_currentHopper, bSetMix, m_mixedEx[m_currentHopper - 1]);
 				}
 				else {
-					SetDevStateAndSendMsg(DEVICE_STATUS_NORMAL);
+					SetDevState(DEVICE_STATUS_NORMAL);
 				}
 			}
 		}
@@ -4045,7 +3999,7 @@ bool CCardIssuerFSM::SetCardMixed(const int num, const int hopper)
 		return false;
 	}
 	if (num == 0)
-		SetDevStateAndSendMsg(DEVICE_STATUS_NORMAL);
+		SetDevState(DEVICE_STATUS_NORMAL);
 	else
 	{
 		CSimpleStringA errMsg = CSimpleStringA::Format("the current card hopper %d may be wrong.mixedEx:%d",
@@ -4142,15 +4096,6 @@ int CCardIssuerFSM::QueryCardInfo()
 	return ret;
 }
 
-int CCardIssuerFSM::SetDevStateAndSendMsg(const DevStateEnum eState, bool bForceSend)
-{
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("SetDevStateAndSendMsg, m_eDevState:%d, eState:%d, bForceSend:%d", m_eDevState, eState, bForceSend);
-	if(m_eDevState != eState || bForceSend) {
-		m_eDevState = eState;
-	}
-	return 0;
-}
-
 static char DecCh2HexCh(BYTE c)
 {
 	if (c >= 0x0 && c <= 0x9)
@@ -4213,7 +4158,7 @@ int CCardIssuerFSM::SyncDataToDB(bool bMaintain[12], bool bSetCaptured)
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s",(const char*)m_csMachineType);
 	info.strDeviceNo = m_terminalNo;
 
-	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("<SyncDataToDB>, to init sync info, CardBox Num:%d, m_csDevSN:%s", info.dwCardBoxNum, info.strDeviceNo.GetData());
+	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("<SyncDataToDB>, to init sync info, CardBox Num:%d, DeviceNo:%s", info.dwCardBoxNum, info.strDeviceNo.GetData());
 	info.arrMaintainFlag.Init(m_hopperNum+1);
 	info.arrMaintainer.Init(m_hopperNum+1);
 	info.arrMaintainTime.Init(m_hopperNum+1);
@@ -4487,7 +4432,7 @@ bool CCardIssuerFSM::RegistCardWhileCaptureCard(CSimpleStringA cardno)
 
 	qRegistCardReq.swallowDate = csDate;
 	qRegistCardReq.swallowTime = csTime;
-	qRegistCardReq.deviceSciNo = m_csDevSN;
+	qRegistCardReq.deviceSciNo = "";
 	qRegistCardReq.terminalNo = m_terminalNo;
 	qRegistCardReq.terminalType = m_csMachineType;
 	//qRegistCardReq.m_url = "http://55.13.170.50:8080/defa-gateway/dee1/EacQuery/queryByEac";
@@ -5155,7 +5100,6 @@ int CCardIssuerFSM::SplitDevModelInfo()
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("<SplitDevModelInfo>, Wrong szModel:%s", m_devCat.szModel);
 		return -1;
 	}
-	m_csCM = "";
 	m_csRF = "";
 	CSimpleStringA csTmpModel(m_devCat.szModel);
 	CAutoArray<CSimpleStringA> arrParam;
@@ -5163,10 +5107,6 @@ int CCardIssuerFSM::SplitDevModelInfo()
 	arrParam = csTmpModel.Split('#');
 	for (int i = 0; i < arrParam.GetCount(); ++i)
 	{
-		if (_strnicmp(arrParam[i], "CM", 2) == 0)
-		{
-			m_csCM = arrParam[i].SubString(3, arrParam[i].GetLength() - 3);
-		}
 		if (_strnicmp(arrParam[i], "RF", 2) == 0)
 		{
 			if (arrParam[i].GetLength()>3) {
@@ -5188,7 +5128,8 @@ void CCardIssuerFSM::CloseAndClearDevObj(bool bCheckConnecting, bool bCloseOnly)
 	if (m_hDevHelper != nullptr && !bCloseOnly)
 	{
 		m_hDevHelper.TearDown();
-		m_bOpened = false;//硬件适配器关闭,则设置打开失败
+		SetDevInitFlag(false);
+		//硬件适配器关闭,则设置打开失败
 	}
 }
 

+ 5 - 17
Module/mod_CardIssuerStand/CardIssuerFSM.h

@@ -778,7 +778,7 @@ public:
 	, m_captureReason(""), m_machineType(1), m_currentHopper(1), m_hopperNum(1)
 	, m_bSettingMaterial(false)	, m_addCardNo(""), m_addCardSerial(""), m_hasCardWhileDevOpen(false)
 	,  m_bCancelByRFIC(false), m_devOpenFailedCount(0)
-			, m_iInWhatPage(PageType_Init), m_EacQueryHost(""),m_eacQueryFlag(0), m_bUseCardnoMismatch(false), m_ICRetryTimes(1)
+			, m_EacQueryHost(""),m_eacQueryFlag(0), m_bUseCardnoMismatch(false), m_ICRetryTimes(1)
 			, m_bCardFromHopper(true), m_bStopUseRF(false),m_rfVendorList(""), m_bUseRFTillNext(false), m_csSwallowCardUrl(""), m_csSyncMaterialUrl("")
 		{
 			HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x203);
@@ -870,7 +870,7 @@ public:
 	ErrorCodeEnum MachineMoveCardFrontGate(bool bInBussiness=false);
 
 	void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
-	DevStateEnum GetDevState()
+	DevStateEnum GetDevState() const
 	{
 		if ((m_eDevState == DEVICE_STATUS_NORMAL) 
 			&& ((m_bHasHopper[0] && m_mixedEx[0] >= 3) || !m_bHasHopper[0])
@@ -882,7 +882,6 @@ public:
 	}
 	int QueryCardInfo();
 
-	int SetDevStateAndSendMsg(const DevStateEnum eState, bool bForceSend = true);
 	int UpdateLocalRunCfg(CAutoArray<int> hopperArr);
 	int SyncDataToDB(bool bMaintain[12],bool bSetCaptured=true);//同步物料计数
 	void SetHopperNum(int hopperNum);
@@ -908,10 +907,7 @@ public:
 	void SetCancelByRFICFlag(bool bCancel = true) { m_bCancelByRFIC = bCancel; }
 	CSimpleStringA GetPreOnlineICCardNo() { return m_currCardNo; }
 	void CloseAndClearDevObj(bool bCheckConnecting = true, bool bCloseOnly = false);
-	bool GetDevInitFlag() { return m_bOpened; }
-	bool GetDevInitingFlag() { return m_bOpening; }
 
-	void SetInWhatPage(int bValue) { m_iInWhatPage = bValue; }
 	void SetEnterMainPage();
 	static void HttpsLogCallBack(const char* logtxt);
 	//0:unknow(havn't access microservice or access failed),1:both mag & ic ,2:mag only,3:ic only
@@ -935,7 +931,7 @@ private:
 	bool m_bUseRFTillNext;//if ReadCard by RF,the following PreOnline & PostOnline always use RF till the next card(insert/issue)
 	ErrorCodeEnum m_testResult;
 
-	int m_CardCaptured,m_iInWhatPage/*在哪个页面,区分首页,用户桌面,其他页*/;
+	int m_CardCaptured;
 	int m_issueStatusFromFile, m_issueStatus/*the status maybe changed by Business call*/;
 	//1:default, 2:SCI, 3:no cfg
 	int m_machineType;
@@ -948,15 +944,12 @@ private:
 	DWORD m_MaintainTimeEx[HOPPER_NUM];
 	BYTE m_connectType, m_r1[128], m_r2[128], m_r3[128], m_priKey[ONE_K / 2], m_devPubKey[ONE_K / 2];
 	CardIssuerStatus m_devStatus;
-	DevStateEnum m_eDevState;
 	CCardProcess *m_pCardProcess;
 	CAutoArray<CSimpleStringA> m_aidList;
-	ErrorPackage m_errPkg;
 
 	char *m_pDataToARQC;
 	long xxTest;
-	CSimpleStringA m_currCardNo, m_captureReason, m_csMachineType, m_csSite, m_terminalNo, m_addCardNo, m_addCardSerial
-		, m_csCM, m_rfVendorList, m_csDevSN, m_csRF;
+	CSimpleStringA m_currCardNo, m_captureReason, m_csMachineType, m_terminalNo, m_addCardNo, m_addCardSerial, m_rfVendorList, m_csRF;
 	char m_AuthCode[2];
 	vector<CMBBin> m_vBin;
 	int SplitTrack2(CSimpleStringA pTrack2,Track2Data &decodeData);
@@ -968,13 +961,8 @@ private:
 	DevCategoryInfo m_devCat;
 	bool ToRegistCaptureCardInfo();
 	bool IfUseRf();
-	CSimpleStringA m_csAlarmMsg,m_EacQueryHost, m_csSwallowCardUrl, m_csSyncMaterialUrl;
+	CSimpleStringA m_EacQueryHost, m_csSwallowCardUrl, m_csSyncMaterialUrl;
 	MagTracks m_magTracks;
-	bool IsInBusiness()
-	{
-		return m_iInWhatPage == PageType_Other;
-	}
-
 };
 struct InitTask : public ITaskSp
 {

+ 3 - 8
Module/mod_CardIssuerStand/mod_cardissuer.cpp

@@ -149,17 +149,12 @@ void CCardIssuerEntity::OnSysVarEvent(const char* pszKey, const char* pszValue,
 {
 	if ((_strnicmp(pszKey, "UIState", strlen("UIState")) == 0))
 	{
+		m_fsm.OnUIState4SetWhatPage(pszValue);
 		if (_strnicmp(pszValue, "M", strlen("M")) == 0) {
-			m_fsm.SetInWhatPage(PageType_MainPage);
-			m_fsm.SetEnterMainPage();//设置进入首页
-		}
-		else if (_strnicmp(pszValue, "U", strlen("U")) == 0) {
-			m_fsm.SetInWhatPage(PageType_UserDesktop);
-		}
-		else {
-			m_fsm.SetInWhatPage(PageType_Other);
+			m_fsm.SetEnterMainPage();//ÉèÖýøÈëÊ×Ò³
 		}
 	}
+
 }
 
 

+ 2 - 3
Module/mod_CardReadAdapter/CardReadAdapterFSM.cpp

@@ -29,14 +29,13 @@ void CCardReadAdapterFSM::s0_on_entry()
 	LOG_FUNCTION();
 	CSystemStaticInfo sysInfo;
 
-	m_csMachineType = m_csSite = m_terminalNo = "";
+	m_csMachineType = m_terminalNo = "";
 	GetEntityBase()->GetFunction()->GetSystemStaticInfo(sysInfo);
 	m_csMachineType = sysInfo.strMachineType;
-	m_csSite = sysInfo.strSite;
 	m_terminalNo = sysInfo.strTerminalID;
 	m_majorVerion = sysInfo.MachineVersion.GetMajor();
 	m_minorVerion = sysInfo.MachineVersion.GetMinor();
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("machineType:%s,site:%s,terminalNo:%s,machineVersion:%d.%d", (const char*)m_csMachineType, (const char*)m_csSite, (const char*)m_terminalNo
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("machineType:%s,terminalNo:%s,machineVersion:%d.%d", (const char*)m_csMachineType, (const char*)m_terminalNo
 	, m_majorVerion, m_minorVerion);
 
 	///**TODO(Gifur@8/17/2023): 覆盖其他需要字段 */

+ 1 - 10
Module/mod_CardReadAdapter/CardReadAdapterFSM.h

@@ -850,18 +850,9 @@ private:
 		, m_bCardActiveNotify;
 	ErrorCodeEnum m_testResult;
 	//m_CardInit,m_CardRemains,m_CardIssued,m_CardMixed,m_CardPercent
-	int m_CardCaptured, m_issueStatusFromFile, m_issueStatus, m_port, m_baudRate, m_currentHopper, m_scanSlot;
-	CSimpleStringA m_CardBoxNoEx[3], m_PsbCodeEx[3], m_PsbNameEx[3], m_MaintainerEx[3], m_csMaintainTimeEx[3];
-	int m_CardInitEx[3], m_CardPercentEx[3], m_remainsEx[3], m_issuedEx[3], m_mixedEx[3], m_hopperNum;
-	DWORD m_MaintainTimeEx[3];
-	BYTE m_connectType, m_r1[128], m_r2[128], m_r3[128], m_priKey[ONE_K / 2], m_devPubKey[ONE_K / 2], m_bdk[64], m_ksn[64];
-
-	DevStateEnum m_eDevState;
-	//CCardProcess *m_pCardProcess;
-
 	char *m_pDataToARQC;
 	long xxTest;
-	CSimpleStringA m_currCardNo, m_captureReason, m_csMachineType, m_csSite, m_csDevSN, m_terminalNo;
+	CSimpleStringA m_currCardNo, m_captureReason, m_csMachineType, m_terminalNo;
 
 	char m_AuthCode[2];
 	SpReqAnsContext<CardReadAdapterService_PreOnlineOnStore_Req, CardReadAdapterService_PreOnlineOnStore_Ans>::Pointer m_crossCtx;

+ 5 - 16
Module/mod_ContactlessCard/ContactlessFSM.cpp

@@ -29,7 +29,7 @@ class CContactlessCardEntity;
 void CContactlessCardFSM::s0_on_entry()
 {
 	LOG_FUNCTION();
-	m_eDevState = DEVICE_STATUS_NOT_READY;
+	SetDevState(DEVICE_STATUS_NOT_READY);
 	FSMEvent *e = new FSMEvent(USER_EVT_INIT);
 	PostEventFIFO(e);
 }
@@ -83,11 +83,9 @@ unsigned int CContactlessCardFSM::s1_on_event(FSMEvent* event)
 void CContactlessCardFSM::s2_on_entry()
 {
 	LOG_FUNCTION();
-	m_eDevState = DEVICE_STATUS_NORMAL;
+	SetDevState(DEVICE_STATUS_NORMAL);
 	m_resetTimes = 0;
 	m_testResult = Error_Succeed;
-
-	ToLogWarnInfoAboutTermCustom();
 }
 void CContactlessCardFSM::s2_on_exit()
 {
@@ -439,7 +437,7 @@ unsigned int CContactlessCardFSM::s8_on_event(FSMEvent* pEvt)
 void CContactlessCardFSM::s9_on_entry()
 {
 	LOG_FUNCTION();
-	m_eDevState = DEVICE_STATUS_FAULT;
+	SetDevState(DEVICE_STATUS_FAULT);
 	FSMEvent *e = new FSMEvent(USER_EVT_RESET);
 	PostEventFIFO(e);
 }
@@ -598,8 +596,7 @@ ErrorCodeEnum CContactlessCardFSM::Load()
 		if (hr == Error_Succeed)
 		{
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DevOpen").setCostTime(l_endTime - l_beginTime)("ContactlessCard DevOpen succ , dwPort:%d, dwBaudRate:%d", m_adapterInfo.GetPortInt(), m_adapterInfo.GetBaudrateInt());
-			ToLogRootINIInfo();
-			m_bOpened = true;
+			SetDevInitFlag();
 			ZeroMemory(m_devCatInfo.szModel, sizeof(m_devCatInfo.szModel));
 			ZeroMemory(m_devCatInfo.szType, sizeof(m_devCatInfo.szType));
 			ZeroMemory(m_devCatInfo.szVendor, sizeof(m_devCatInfo.szVendor));
@@ -689,7 +686,7 @@ ErrorCodeEnum CContactlessCardFSM::Load()
 	{
 		if (m_bOpened) {
 			m_hDevHelper->DevClose();
-			m_bOpened = false;
+			SetDevInitFlag(false);
 		}
 		errMsg = CSimpleStringA::Format("非接读卡器启动失败,have tried %d times!!!", initTries);
 		LogWarn(Severity_Middle, Error_Unexpect, ContactlessCard_UserErrorCode_DevOpen_Failed, errMsg.GetData());
@@ -1426,14 +1423,6 @@ int CContactlessCardFSM::QueryCardInfo(SpReqAnsContext<ContactlessCardService_Qu
 	return ret;
 }
 
-void CContactlessCardFSM::ToLogWarnInfoAboutTermCustom()
-{
-	LOG_FUNCTION();
-
-	ToLogWarnInfoAboutTerm();
-
-}
-
 bool CContactlessCardFSM::LoadCMBPrint(CSimpleStringA csBinPath)
 {
 	if (cmdDecodeEx == NULL) {

+ 0 - 5
Module/mod_ContactlessCard/ContactlessFSM.h

@@ -282,9 +282,6 @@ public:
 	bool GetWaitFlag(){return m_bWaitingAccept;}
 	void SetWaitMore(){m_bWaitAccepteMore = true;}
 	void SetExitFlag(bool bFlag=true){m_bExit = bFlag;}
-	bool GetDevInitFlag() { return m_bOpened; }
-	bool GetDevInitingFlag() { return m_bOpening; }
-	void ToLogWarnInfoAboutTermCustom();
 	bool LoadCMBPrint(CSimpleStringA csBinPath);
 	void GetCardProcessLastErr(ErrorCodeEnum& eErrCode, CSimpleStringA& lastApiName, CSimpleStringA& alarmMsg, CSimpleStringA& csErrMsgWithReturnCode);
 
@@ -292,7 +289,6 @@ public:
 	{
 		pTransactionContext->SendAnswer(m_testResult);
 	}
-	DevStateEnum GetDevState(){ return m_eDevState;}
 
 protected:
 	int m_iInsertTries;
@@ -310,7 +306,6 @@ private:
 
 	int m_CardInit,m_CardRemains,m_CardIssued,m_CardCaptured,m_CardMixed,m_CardPercent;
 	RFICReaderStatus devStatus;
-	DevStateEnum m_eDevState;
 	CCardProcess *m_pCardProcess;
 	char *m_pDataToARQC;
 	long xxTest;

+ 39 - 71
Module/mod_CustMngrAuth/CustMngrAuthFSM.cpp

@@ -139,8 +139,8 @@ unsigned int CCustMngrAuthFSM::s2_on_event(FSMEvent* pEvt)
 		{
 			pEvt->SetHandled();
 			QueryAuthorInfoEvent* queryEvt = dynamic_cast<QueryAuthorInfoEvent*>(pEvt);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("QUERYAUTHORINFO, time:%d, wayOfKey:%d, wayOfFinger:%d",
-					queryEvt->ctx->Req.TimeLimit, queryEvt->ctx->Req.WayofKey, queryEvt->ctx->Req.WayofFinger);
+			//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("QUERYAUTHORINFO, time:%d, wayOfKey:%d, wayOfFinger:%d",
+			//		queryEvt->ctx->Req.TimeLimit, queryEvt->ctx->Req.WayofKey, queryEvt->ctx->Req.WayofFinger);
 			if (queryEvt->ctx->Req.TimeLimit <= 0)
 			{
 				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ERROR: receive timelimit lessequal than zero(%d).", queryEvt->ctx->Req.TimeLimit);
@@ -202,7 +202,6 @@ unsigned int CCustMngrAuthFSM::s2_on_event(FSMEvent* pEvt)
 			GenerateTemplateTask* gtTask = new GenerateTemplateTask(this);
 			gtTask->ctx = gtEvt->ctx;
 			GetEntityBase()->GetFunction()->PostThreadPoolTask(gtTask);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Generate Template task posted");
 		}
 		break;
 	case USER_EVT_SAVEFINGERPRINT_START:
@@ -230,13 +229,11 @@ void CCustMngrAuthFSM::s3_on_entry()
 {
 	LOG_FUNCTION();
 	ScheduleTimer(1, m_TimeLimit);
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("set timer when match, %dms", m_TimeLimit);
 }
 void CCustMngrAuthFSM::s3_on_exit()
 {
 	LOG_FUNCTION();
 	CancelTimer(1);
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("exit match event, timer canceled");
 }
 unsigned int CCustMngrAuthFSM::s3_on_event(FSMEvent* pEvt)
 {
@@ -270,32 +267,18 @@ unsigned int CCustMngrAuthFSM::s3_on_event(FSMEvent* pEvt)
 		{
 			pEvt->SetHandled();
 			AuthorizeFinishedEvent* authorEvt = dynamic_cast<AuthorizeFinishedEvent*>(pEvt);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Checking m_authCtx and answer ctx");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("authorize finished with param1 as %d", authorEvt->param1);
 			if (authorEvt->param1 == 0)
 			{
-				if (m_authCtx.eAuthByWhich == AuthByUkey)
-				{
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_authCtx.eAuthByWhich == AuthByUkey");
-					if (m_pFingerPrint != NULL && !m_pFingerPrint->QuerySessionClosed())
+				 if (m_authCtx.eAuthByWhich == AuthByFngPrnt)
 					{
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Invoke cancel match.");
-						(*m_pFingerPrint)(EntityResource::getLink().upgradeLink())->CancelMatch();
+						authorEvt->ctx->Ans.WayofAuth = AuthByFngPrnt;
+						authorEvt->ctx->Ans.CustomerID = m_authCtx.CustomerID;
+						authorEvt->ctx->Answer(Error_Succeed);
 					}
-					authorEvt->ctx->Ans.WayofAuth = AuthByUkey;
-					authorEvt->ctx->Ans.UkeyID = m_authCtx.UkeyID;
-					authorEvt->ctx->Answer(Error_Succeed);
-				}
-				else if (m_authCtx.eAuthByWhich == AuthByFngPrnt)
-				{
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_authCtx.eAuthByWhich == AuthByFngPrnt");
-					authorEvt->ctx->Ans.WayofAuth = AuthByFngPrnt;
-					authorEvt->ctx->Ans.CustomerID = m_authCtx.CustomerID;
-					authorEvt->ctx->Answer(Error_Succeed);
-				}
 			}
 			else
 			{
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("authorize finished with param1 as %d", authorEvt->param1);
 				authorEvt->ctx->Answer((ErrorCodeEnum)authorEvt->param1);
 			}
 
@@ -304,7 +287,6 @@ unsigned int CCustMngrAuthFSM::s3_on_event(FSMEvent* pEvt)
 				m_bCancelAuthorize = true;
 				m_pFingerPrint->GetFunction()->CloseSession();
 				m_pFingerPrint = NULL;
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("M_pFingerPrint disconnected.");
 			}
 			
 			m_authCtx.eAuthByWhich = AuthByNone;
@@ -317,25 +299,10 @@ unsigned int CCustMngrAuthFSM::s3_on_event(FSMEvent* pEvt)
 		{
 			pEvt->SetHandled();
 			QueryAuthorInfoFinishedEvent* qafEvt = dynamic_cast<QueryAuthorInfoFinishedEvent*>(pEvt);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Checking m_authCtx and answer qaInfoCtx");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("authorize finished with param1 as %d", qafEvt->param1);
 			if (qafEvt->param1 == 0)
 			{
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("authorize finished with param1 as 0"); //Error_Succeed
-				if (m_authCtx.eAuthByWhich == AuthByUkey)
-				{
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_authCtx.eAuthByWhich == AuthByUkey");
-					if (m_pFingerPrint != NULL && !m_pFingerPrint->QuerySessionClosed())
-					{
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Invoke cancel collect.");
-						(*m_pFingerPrint)(EntityResource::getLink().upgradeLink())->CancelRegister();
-					}
-					qafEvt->ctx->Ans.WayofAuth = AuthByUkey;
-					qafEvt->ctx->Ans.UkeyID = m_authCtx.UkeyID;
-					qafEvt->ctx->Answer(Error_Succeed);
-				}
-				else if (m_authCtx.eAuthByWhich == AuthByFngPrnt)
-				{
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_authCtx.eAuthByWhich == AuthByFngPrnt");
+				 if (m_authCtx.eAuthByWhich == AuthByFngPrnt){
 					qafEvt->ctx->Ans.WayofAuth = AuthByFngPrnt;
 					qafEvt->ctx->Ans.Feature = m_authCtx.Feature;
 					qafEvt->ctx->Ans.FingerImg = m_authCtx.FingerImg;
@@ -344,7 +311,6 @@ unsigned int CCustMngrAuthFSM::s3_on_event(FSMEvent* pEvt)
 			}
 			else
 			{
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("authorize finished with param1 as %d", qafEvt->param1);
 				qafEvt->ctx->Answer((ErrorCodeEnum)qafEvt->param1, qafEvt->param2);
 			}
 
@@ -353,7 +319,6 @@ unsigned int CCustMngrAuthFSM::s3_on_event(FSMEvent* pEvt)
 				m_bCancelAuthorize = true;
 				m_pFingerPrint->GetFunction()->CloseSession();
 				m_pFingerPrint = NULL;
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("M_pFingerPrint disconnected.");
 			}
 
 			m_authCtx.eAuthByWhich = AuthByNone;
@@ -412,7 +377,6 @@ unsigned int CCustMngrAuthFSM::s4_on_event(FSMEvent* pEvt)
 			{
 				m_pFingerPrint->GetFunction()->CloseSession();
 				m_pFingerPrint = NULL;
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("M_pFingerPrint disconnected.");
 			}
 		}
 		break;
@@ -423,7 +387,6 @@ unsigned int CCustMngrAuthFSM::s4_on_event(FSMEvent* pEvt)
 			{
 				m_pFingerPrint->GetFunction()->CloseSession();
 				m_pFingerPrint = NULL;
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("M_pFingerPrint disconnected.");
 			}
 		}
 		break;
@@ -554,19 +517,12 @@ ErrorCodeEnum CCustMngrAuthFSM::CollectFingerPrintInfo(SpReqAnsContext<CustMngrA
 	l_beginTime = SP::Module::Comm::RVCGetTickCount();
 	errCode = m_pFingerPrint->GetFingerPrint(GetFingerReq, GetFingerAns, 30000, dwUserErrCode);
 	l_endTime = SP::Module::Comm::RVCGetTickCount();
-	//DbgInfo("GetFingerPrint", l_beginTime, l_endTime, errCode, CSimpleStringA::Format("reserved1[0]:%d", GetFingerAns.reserved1[0]));
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setBeginTime(l_beginTime).setEndTime(l_endTime)("CollectFingerPrintInfo invoke GetFingerPrint return %s", SpStrError(errCode));
-
-
-	if (errCode == Error_NotInit)
-	{
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("FingerPrintEntity not ready or failed.");
-		return Error_DevNotAvailable;
-	}
+	//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setBeginTime(l_beginTime).setEndTime(l_endTime)("CollectFingerPrintInfo invoke GetFingerPrint return %s", SpStrError(errCode));
 
 	if (errCode == Error_Succeed)
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("reserved1[0]:%d", GetFingerAns.reserved1[0]);
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setBeginTime(l_beginTime).setEndTime(l_endTime)("CollectFingerPrintInfo invoke GetFingerPrint return %s, reserved1[0]:%d", SpStrError(errCode), GetFingerAns.reserved1[0]);
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("reserved1[0]:%d", GetFingerAns.reserved1[0]);
 		switch (GetFingerAns.reserved1[0])
 		{
 		case 1:
@@ -601,11 +557,20 @@ ErrorCodeEnum CCustMngrAuthFSM::CollectFingerPrintInfo(SpReqAnsContext<CustMngrA
 				return Error_Unexpect;
 			}
 			ctx->Ans.fingerImg = data;
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CollectFingerPrintInfo return success.");
+			//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("CollectFingerPrintInfo return success.");
+		}
+	}
+	else {
+		if (errCode == Error_NotInit)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("FingerPrintEntity not ready or failed.");
+			return Error_DevNotAvailable;
+		}
+		else {
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setBeginTime(l_beginTime).setEndTime(l_endTime)("CollectFingerPrintInfo invoke GetFingerPrint return %s", SpStrError(errCode));
+			errCode = Error_Unexpect;
 		}
 	}
-	else
-		errCode = Error_Unexpect;
 
 	return errCode;
 }
@@ -639,7 +604,6 @@ ErrorCodeEnum CCustMngrAuthFSM::GenerateTemplate(SpReqAnsContext<CustMngrAuthSer
 	for (int i = 0; i < generateReq.FingerIDList.GetCount(); ++i)
 	{
 		generateReq.FingerIDList[i] = ctx->Req.FingerIDList[i];
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("fingerIDList = %d", generateReq.FingerIDList[i]);
 	}
 
 	if (m_pFingerPrint == NULL || m_pFingerPrint->QuerySessionClosed())
@@ -652,7 +616,7 @@ ErrorCodeEnum CCustMngrAuthFSM::GenerateTemplate(SpReqAnsContext<CustMngrAuthSer
 	l_beginTime = SP::Module::Comm::RVCGetTickCount();
 	errCode = (*m_pFingerPrint)(EntityResource::getLink().upgradeLink())->GenerateTemplate(generateReq, generateAns, 20000, dwUserErrCode);
 	l_endTime = SP::Module::Comm::RVCGetTickCount();
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setBeginTime(l_beginTime).setEndTime(l_endTime)("GenerateTemplate invoke GenerateTemplate return %s", SpStrError(errCode));
+	//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setBeginTime(l_beginTime).setEndTime(l_endTime)("GenerateTemplate invoke GenerateTemplate return %s", SpStrError(errCode));
 
 	if (errCode == Error_NotInit)
 	{
@@ -662,11 +626,13 @@ ErrorCodeEnum CCustMngrAuthFSM::GenerateTemplate(SpReqAnsContext<CustMngrAuthSer
 
 	if (errCode == Error_Succeed)
 	{
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setBeginTime(l_beginTime).setEndTime(l_endTime)("invoke fingerprint GenerateTemplate return %s", SpStrError(errCode));
 		ctx->Ans.templateFeature = generateAns.templateFeature;
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GenerateTemplate return success.");
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GenerateTemplate return success.");
 	}
 	else {
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Invoke GenerateTemplate returned %d", errCode);
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setBeginTime(l_beginTime).setEndTime(l_endTime)("invoke fingerprint GenerateTemplate return %s", SpStrError(errCode));
+		//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Invoke GenerateTemplate returned %d", errCode);
 		errCode = Error_Unexpect;
 	}
 
@@ -691,11 +657,10 @@ void CCustMngrAuthFSM::BroadcastPressFinger(int times, bool bPressFinger)
 
 ErrorCodeEnum CCustMngrAuthFSM::GetImgBlob(CBlob& data, CSimpleStringA imgPath)
 {
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("image full path: %s", imgPath.GetData());
 	ErrorCodeEnum eErr;
 	FILE* fp = fopen(imgPath, "rb");
 	if (fp) {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetImgBlob succeed.");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetImgBlob %s succeed", imgPath.GetData());
 		fseek(fp, 0, SEEK_END);
 		long flen = ftell(fp);
 		fseek(fp, 0, SEEK_SET);
@@ -749,7 +714,7 @@ ErrorCodeEnum CCustMngrAuthFSM::MatchFingerPrintEx(SpReqAnsContext<CustMngrAuthS
 	l_beginTime = SP::Module::Comm::RVCGetTickCount();
 	errCode = (*m_pFingerPrint)(EntityResource::getLink().upgradeLink())->GetFingerPrint(GetFingerReq, GetFingerAns, 30000, dwUserErrCode);
 	l_endTime = SP::Module::Comm::RVCGetTickCount();
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setBeginTime(l_beginTime).setEndTime(l_endTime)("MatchFingerPrintEx invoke GetFingerPrint return %s", SpStrError(errCode));
+	//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setBeginTime(l_beginTime).setEndTime(l_endTime)("MatchFingerPrintEx invoke GetFingerPrint return %s", SpStrError(errCode));
 
 	if (errCode == Error_DevNotAvailable) {
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("FingerPrintEntity DevOpen failed");
@@ -787,7 +752,8 @@ ErrorCodeEnum CCustMngrAuthFSM::MatchFingerPrintEx(SpReqAnsContext<CustMngrAuthS
 
 	if (errCode == Error_Succeed)
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("reserved1[0]:%d", GetFingerAns.reserved1[0]);
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setBeginTime(l_beginTime).setEndTime(l_endTime)("MatchFingerPrintEx invoke GetFingerPrint return %s,reserved1[0]:%d", SpStrError(errCode), GetFingerAns.reserved1[0]);
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("reserved1[0]:%d", GetFingerAns.reserved1[0]);
 		switch (GetFingerAns.reserved1[0])
 		{
 		case 1:
@@ -826,8 +792,10 @@ ErrorCodeEnum CCustMngrAuthFSM::MatchFingerPrintEx(SpReqAnsContext<CustMngrAuthS
 			m_authCtx.FingerImg = ctx->Ans.FingerImg;
 		}
 	}
-	else
+	else {
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__).setBeginTime(l_beginTime).setEndTime(l_endTime)("MatchFingerPrintEx invoke GetFingerPrint return %s", SpStrError(errCode));
 		errCode = Error_Unexpect;
+	}
 
 	DeleteBmp(BmpImage);
 	return errCode;
@@ -837,7 +805,7 @@ void CCustMngrAuthFSM::DeleteBmp(int type)
 {
 	if ((type & BmpImage) == BmpImage)
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to delete fingerprint images...");
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to delete fingerprint images...");
 		CSimpleStringA imageName;
 		DeleteFileIfExisted("finger.bmp");
 		for (int i = 1; i <= 10; ++i) {
@@ -880,7 +848,7 @@ ErrorCodeEnum CCustMngrAuthFSM::DeleteFileIfExisted(const char* fileName)
 	}
 	if (GetLastError() == ERROR_FILE_NOT_FOUND)
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("file %s not exist.", fileName);
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("file %s not exist.", fileName);
 		return Error_Succeed;
 	}
 	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("DeleteFle(%s) Unexpect GetLastError(%s).", strObjPath.GetData(), GetLastError());
@@ -910,7 +878,7 @@ ErrorCodeEnum CCustMngrAuthFSM::DeleteFileIfExisted(const char* fileName)
 		}
 	}
 	else {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("file %s not exist.", fileName);
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("file %s not exist.", fileName);
 		return Error_Succeed;
 	}
 #endif	

+ 0 - 10
Module/mod_CustMngrAuth/CustMngrAuthFSM.h

@@ -573,21 +573,11 @@ struct MatchFingerPrintTaskEx : public ITaskSp
 		DWORD dwUserErrorCode = 0;
 		//加入指纹交易日志
 		ErrorCodeEnum eErr = fsm->MatchFingerPrintEx(ctx, bStopAuthorize, dwUserErrorCode);
-		//if (bStopAuthorize)
-		//{
 		QueryAuthorInfoFinishedEvent* e = new QueryAuthorInfoFinishedEvent();
 		e->ctx = ctx;
 		e->param1 = eErr;
 		e->param2 = dwUserErrorCode;
 		fsm->PostEventFIFO(e);//指纹匹配结束,结束授权
-	//}
-	//else
-	//{
-	//	QueryAuthorInfoFinishedEvent* e = new QueryAuthorInfoFinishedEvent();
-	//	e->ctx = ctx;
-	//	e->param1 = fsm->WaitForUkey(eErr);
-	//	fsm->PostEventFIFO(e);//指纹匹配异常停止,继续等到超时或ukey插入结束授权,如果是ukey插入,这个event就不会被处理
-	//}
 	}
 };
 

+ 2 - 2
Module/mod_CustMngrAuth/mod_CustMngrAuth.cpp

@@ -61,7 +61,7 @@ void CCustMngrAuthEntity::OnBroadcastEvent(CUUID SubID, const char *pszEntityNam
 
 CServerSessionBase* CCustMngrAuthEntity::OnNewSession(const char*,const char*)
 {
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("A new connecting request arrived.");
+	//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("A new connecting request arrived.");
 	m_bNewSessionInit = true;
 	return new CustMngrAuthServerSession(this);
 }
@@ -202,7 +202,7 @@ void CustMngrAuthServerSession::Handle_QueryAuthorInfo(SpReqAnsContext<CustMngrA
 {
 	LOG_FUNCTION();
 	DbgToBeidou(ctx->link, __FUNCTION__)();
-	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("TimeLimit:%d, WayofFinger:%d, WayofKey:%d",
+	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke QueryAuthorInfo TimeLimit:%d, WayofFinger:%d, WayofKey:%d",
 				ctx->Req.TimeLimit, ctx->Req.WayofFinger, ctx->Req.WayofKey);
 	if (ctx->Req.WayofFinger != 1) {
 		ctx->Answer(Error_Param);//uos中只通过指纹授权

+ 56 - 103
Module/mod_FingerPrint/FingerPrintFSM.cpp

@@ -29,9 +29,7 @@
 void CFingerPrintFSM::s0_on_entry()
 {
 	LOG_FUNCTION();
-	m_devState = DEVICE_STATUS_NORMAL;
-	ToLogWarnInfoAboutTerm();
-
+	SetDevState(DEVICE_STATUS_NORMAL);
 }
 
 void CFingerPrintFSM::s0_on_exit()
@@ -94,7 +92,6 @@ unsigned int CFingerPrintFSM::s0_on_event(FSMEvent* e)
 		case USER_EVT_CANCEL_SCAN:
 			{
 				e->SetHandled();
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("s0 set cancel flag!");
 				m_bCancelRegister = true;
 			}
 			break;
@@ -123,7 +120,7 @@ unsigned int CFingerPrintFSM::s0_on_event(FSMEvent* e)
 void CFingerPrintFSM::s4_on_entry()
 {
 	LOG_FUNCTION();
-	m_devState = DEVICE_STATUS_NOT_READY;
+	SetDevState(DEVICE_STATUS_NOT_READY);
 	InitTask* task = new InitTask(this);
 	GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
 }
@@ -194,7 +191,6 @@ unsigned int CFingerPrintFSM::s1_on_event(FSMEvent* e)
 		break;
 	case USER_EVT_CANCEL_SCAN:
 		e->SetHandled();
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("s1 set cancel scan flag");
 		m_bCancelRegister = true;
 		break;
 	case USER_EVT_EXIT:
@@ -214,7 +210,7 @@ void CFingerPrintFSM::s2_on_entry()
 {
 	LOG_FUNCTION();
 	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("FingerPrint entity failed.");
-	m_devState = DEVICE_STATUS_FAULT;
+	SetDevState(DEVICE_STATUS_FAULT);
 	m_testResult = Error_InvalidState;
 }
 
@@ -271,7 +267,6 @@ unsigned CFingerPrintFSM::s3_on_event(FSMEvent* e)
 	case USER_EVT_CANCEL_MATCH:
 		{
 			e->SetHandled();
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("s3 set cancel match flag");
 			m_bCancelMatch = true;
 		}
 		break;
@@ -314,7 +309,7 @@ ErrorCodeEnum CFingerPrintFSM::OnInit()
 int CFingerPrintFSM::Initial()
 {
 	auto pEntity = GET_DEV_ENTITY_BASE_POINTER();
-	m_bOpened = false;
+	SetDevInitFlag(false);
 	if (pEntity->vendorLibInfo.IsNotConfig()) {
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("没有配置,将其视为指纹仪设备打开成功");
 		return 0;
@@ -329,14 +324,16 @@ int CFingerPrintFSM::Initial()
 			//2024-12-10:4275780002, 1225300001 两台终端存在该情况
 			LogWarn(Severity_High, Error_NotInit, FingerPrint_UserErrorCode_LOAD_ADAPTER_FAILED,
 				CSimpleStringA::Format("Load library file: %s failed, GLE=%d", (LPCTSTR)m_adapterInfo.adapterFileName, GetLastError()));
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Open_ID).setResultCode("RTA2405")("加载厂商适配器失败");
+			//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Open_ID).setResultCode("RTA2405")("加载厂商适配器失败");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Open_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_LOAD_ADAPTER_FAILED))("加载厂商适配器失败");
 			return 2;
 		}
 		else {
 			//2024年12月10日:7555870003 5715350008 两台终端存在该情况
 			LogWarn(Severity_High, Error_DevLoadFileFailed, FingerPrint_UserErrorCode_VENDOR_ADAPTER_NOT_EXIST,
 				CSimpleStringA::Format("library file: %s is not existed!", (LPCTSTR)m_adapterInfo.adapterFileName));
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Open_ID).setResultCode("RTA2404")("厂商适配器不存在dep中");
+			//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Open_ID).setResultCode("RTA2404")("厂商适配器不存在dep中");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Open_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_VENDOR_ADAPTER_NOT_EXIST))("厂商适配器不存在dep中");
 			return 2;
 		}
 
@@ -359,8 +356,7 @@ int CFingerPrintFSM::Initial()
 		else {
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DevOpen").setCostTime(l_endTime - l_beginTime)("Initial::DevOpen  port: %d, baudrate: %d", m_adapterInfo.GetPortInt(), m_adapterInfo.GetBaudrateInt());
 		}
-		m_bOpened = true;
-		ToLogRootINIInfo();
+		SetDevInitFlag();
 	} while (false);
 	ZeroMemory(m_devCatInfo.szModel, MAX_DEV_MODEL_LEN);
 	ZeroMemory(m_devCatInfo.szType, MAX_DEV_TYPE_LEN);
@@ -379,7 +375,7 @@ int CFingerPrintFSM::Initial()
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::GetDevCategory").setCostTime(l_endTime - l_beginTime)("Initial::GetDevCategory");
 	}
 	m_adapterInfo.FulfillCategoryInfo(m_devCatInfo);
-	m_bOpened = true;
+	SetDevInitFlag();
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("指纹仪设备打开成功");
 	return 0;
 }
@@ -394,7 +390,7 @@ ErrorCodeEnum CFingerPrintFSM::OnExit()
 	if (m_hDevHelper != nullptr)
 	{
 		m_hDevHelper.TearDown();
-		m_bOpened = false;
+		SetDevInitFlag(false);
 	}
 	return Error_Succeed;
 }
@@ -421,11 +417,11 @@ void CFingerPrintFSM::SelfTest(EntityTestEnum eTestType, CSmartPointer<ITransact
 int CFingerPrintFSM::GetFingerPrint(SpReqAnsContext<FingerPrintService_GetFingerPrint_Req, FingerPrintService_GetFingerPrint_Ans>::Pointer ctx)
 {
 	LOG_FUNCTION();
-	ctx->Ans.reserved1.Init(10);
+	ctx->Ans.reserved1.Init(1);
 	if(!m_bOpened) {
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetFingerPrint return failed for device isn't init suc.");
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode("RTA2410")("指纹扫描失败,设备还未初始化成功");
-		ctx->Answer(Error_NotInit);  //maybe no vendor adapter
+		//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode("RTA2422")("GetFingerPrint return failed for device isn't init suc.");
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_DEVOPENFAILED_GETFINGERPRINT))("GetFingerPrint return failed for device isn't init suc.");
+		ctx->Answer(Error_NotInit, FingerPrint_UserErrorCode_DEVOPENFAILED_GETFINGERPRINT);  //maybe no vendor adapter
 		return 0;
 	}
 
@@ -439,13 +435,13 @@ int CFingerPrintFSM::GetFingerPrint(SpReqAnsContext<FingerPrintService_GetFinger
 
 
 	}
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("ctx->Req.times = %d", ctx->Req.times);
+	//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("ctx->Req.times = %d", ctx->Req.times);
 	//times = 10, for QueryAuthorInfo; 1-9, for Register
 	if (ctx->Req.times <= 0 || ctx->Req.times > 10)
 	{
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetFingerPrint, inParam is invalid:%d", ctx->Req.times);
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode("RTA2410")("指纹扫描失败,参数不对");
-		ctx->Answer(Error_Param);
+		//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode("RTA2423")("GetFingerPrint return fail, inParam is invalid:%d", ctx->Req.times);
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_PARAMFAILED_GETFINGERPRINT))("GetFingerPrint return fail, inParam is invalid:%d", ctx->Req.times);
+		ctx->Answer(Error_Param, FingerPrint_UserErrorCode_PARAMFAILED_GETFINGERPRINT);
 		return 0;
 	}
 
@@ -465,8 +461,9 @@ int CFingerPrintFSM::GetFingerPrint(SpReqAnsContext<FingerPrintService_GetFinger
 		delete[] lpbFeature;
 		lpbFeature = NULL;
 		
-		LogWarn(Severity_Middle, Error_Unexpect, FingerPrint_UserErrorCode_GET_DEP_PATH_FAILED_REGISTER, "GetFingerPrint::GetPath is fail");
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode("RTA2410")("指纹扫描失败,获取dep路径失败");
+		LogWarn(Severity_Middle, Error_Unexpect, FingerPrint_UserErrorCode_GET_DEP_PATH_FAILED_MATCH, "GetFingerPrint::GetPath is fail");
+		//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode("RTA2424")("GetFingerPrint::GetPath is fail");
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_GET_DEP_PATH_FAILED_MATCH))("GetFingerPrint::GetPath is fail");
 		ctx->Answer(Error_Param);
 		return 0;
 	}
@@ -476,7 +473,7 @@ int CFingerPrintFSM::GetFingerPrint(SpReqAnsContext<FingerPrintService_GetFinger
 
 	CSimpleStringA fileName = CSimpleStringA::Format("finger%d.bmp", ctx->Req.times);
 	strPath = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "%s", strPath.GetData(), fileName.GetData());
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("<GetFingerPrint> imageName = %s", strPath.GetData());
+	//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("<GetFingerPrint> imageName = %s", strPath.GetData());
 
 	bool bGetFingerPrintSuc = false;
 	bool bNotFindImage = false;
@@ -508,7 +505,7 @@ int CFingerPrintFSM::GetFingerPrint(SpReqAnsContext<FingerPrintService_GetFinger
 		{
 			UpdateAndWarnFileFindInDepBak(strPath, fileName, FingerPrint_UserErrorCode_FindFile_in_DepBak);
 
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::Image2Feature").setCostTime(l_endTime - l_beginTime)("GetFingerPrint::Image2Feature fileName:%s, lpbLength:%d", fileName.GetData(), lpbLength);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::Image2Feature").setCostTime(l_endTime - l_beginTime)("GetFingerPrint::Image2Feature succ ,fileName:%s, lpbLength:%d", fileName.GetData(), lpbLength);
 #ifdef RVC_OS_WIN
 			Sleep(200);//save image may be delayed some time, not must happen
 			WIN32_FIND_DATA findData;
@@ -519,20 +516,20 @@ int CFingerPrintFSM::GetFingerPrint(SpReqAnsContext<FingerPrintService_GetFinger
 				lpbFeature[STANDARD_FEATURE_LEN] = '\0';
 				ctx->Ans.feature = (LPCTSTR)lpbFeature;
 				bGetFingerPrintSuc = true;
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Image2Feature success.");
+				//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Image2Feature success.");
 				break;
 			}
 			else if(FindFirstFileA((LPCTSTR)strPath, &findData) == INVALID_HANDLE_VALUE)
 			{
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("Cannot find the fingerprint image %s", fileName.GetData());
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, Cannot find the fingerprint image %s", fileName.GetData());
 				bNotFindImage = true;
 				break;
 			}else if(lpbLength != STANDARD_FEATURE_LEN){
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("vendor returned feature length is not right.");
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, vendor returned feature length is not right.");
 				bLenIsNotRight = true;
 				break;
 			}else{
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("Fingerprint feature is NULL.");
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, Fingerprint feature is NULL.");
 				bFeatureIsNull = true;
 				break;
 			}
@@ -545,36 +542,31 @@ int CFingerPrintFSM::GetFingerPrint(SpReqAnsContext<FingerPrintService_GetFinger
 				lpbFeature[STANDARD_FEATURE_LEN] = '\0';
 				ctx->Ans.feature = (LPCTSTR)lpbFeature;
 				bGetFingerPrintSuc = true;
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Image2Feature success.");
+				//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Image2Feature success.");
 				break;
 			}
 			else if (!ExistsFile(strPath))
 			{
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("Cannot find the fingerprint image %s", fileName.GetData());
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, Cannot find the fingerprint image %s", fileName.GetData());
 				bNotFindImage = true;
 				break;
 			}else if(lpbLength != STANDARD_FEATURE_LEN){
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("vendor returned feature length is not right.");
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, vendor returned feature length is not right.");
 				bLenIsNotRight = true;
 				break;
 			}else{
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("Fingerprint feature is NULL.");
+				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GetFingerPrint>, Fingerprint feature is NULL.");
 				bFeatureIsNull = true;
 				break;
 			}
 #endif
-		}else{
-			DevErrorInfo devErrInfo;
-			m_hDevHelper->GetLastErr(devErrInfo);
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("Invoke routine 'Image2Feature' fileName:%s, lpbLength:%d failed which returned 0x%x(%s) while GetFingerPrint.", fileName.GetData(), lpbLength, eErr, devErrInfo.szErrMsg);
 		}
 		dwEnd = SP::Module::Comm::RVCGetTickCount();
 		elapsed = dwEnd - dwStart;
 	}
 
-	LogEvent(Severity_Middle, LOG_EVT_FINGERPRINT_GREEN_OFF, "FingerPrint warning off");
+	LogEvent(Severity_Middle, LOG_EVT_FINGERPRINT_GREEN_OFF, CSimpleStringA::Format("FingerPrint warning off,elapse = %d",elapsed));
 	m_bExit = false;
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("elapse = %d", elapsed);
 
 	bool bIsRegister = false;
 	bIsRegister = (ctx->Req.times == 10) ? false : true;
@@ -592,9 +584,9 @@ int CFingerPrintFSM::GetFingerPrint(SpReqAnsContext<FingerPrintService_GetFinger
 	}
 	else if(elapsed >= FINGERPRINT_SCAN_TIMEOUT){
 
-		CSimpleStringA addMsg = CSimpleStringA::Format("Invoke routine 'Image2Feature' fileName:%s, lpbLength:%d failed while GetFingerPrint.", fileName.GetData(), lpbLength);
+		CSimpleStringA addMsg = CSimpleStringA::Format("Invoke routine 'Image2Feature' timeout, fileName:%s, lpbLength:%d failed while GetFingerPrint.", fileName.GetData(), lpbLength);
 		CSimpleStringA contxtStr = CSimpleStringA::Format("{\"addition\": \"%s\"}", addMsg.GetData());
-		SetErrorAndLog(eErr, MEC_DEVAPI_FINGERPRINT_Image2Feature, "DevAdapter::Image2Feature", __FUNCTION__, false, l_endTime - l_beginTime, "", contxtStr.GetData());
+		SetErrorAndLog(eErr, MEC_DEVAPI_FINGERPRINT_Image2Feature, "DevAdapter::Image2Feature", __FUNCTION__, false, l_endTime - l_beginTime, FingerPrint_Scan_ID, contxtStr.GetData());
 
 		m_bCancelRegister = false;
 		ctx->Ans.reserved1[0] = 2;
@@ -603,60 +595,26 @@ int CFingerPrintFSM::GetFingerPrint(SpReqAnsContext<FingerPrintService_GetFinger
 		}else {
 			LogWarn(Severity_Middle, Error_Unexpect, FingerPrint_UserErrorCode_Match_Timeout, "match timeout");
 		}
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode("RTA2411")("指纹扫描失败,扫描超时");
 		ctx->Answer(Error_Succeed);
 	}
-
 	else{
 		if(bNotFindImage){
 			ctx->Ans.reserved1[0] = 7;
-			if(bIsRegister){
-				LogWarn(Severity_Middle, Error_Unexpect, FingerPrint_UserErrorCode_NO_IMAGE_IN_DEP_REGISTER, "not find fingerprint image in dep while register");
-				ctx->Answer(Error_Succeed, FingerPrint_UserErrorCode_NO_IMAGE_IN_DEP_REGISTER);
-			}
-			else{
-				if (PageType_Other == m_iInWhatPage) {
-					LogError(Severity_High, Error_Unexpect, FingerPrint_UserErrorCode_NO_IMAGE_IN_DEP_MATCH, "not find fingerprint image in dep while match");
-				}
-				else {
-					LogWarn(Severity_High, Error_Unexpect, FingerPrint_UserErrorCode_NO_IMAGE_IN_DEP_MATCH, "not find fingerprint image in dep while match");
-				}
-				ctx->Answer(Error_Succeed, FingerPrint_UserErrorCode_NO_IMAGE_IN_DEP_MATCH);
-			}
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode("RTA2416")("指纹扫描失败,采集接口调用成功,但未在dep中找到图片文件");
+			LogWarn(Severity_Middle, Error_Unexpect, FingerPrint_UserErrorCode_NO_IMAGE_IN_DEP_MATCH, "not find fingerprint image in dep while match");
+			ctx->Answer(Error_Succeed, FingerPrint_UserErrorCode_NO_IMAGE_IN_DEP_MATCH);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_NO_IMAGE_IN_DEP_MATCH))("指纹扫描失败,采集接口调用成功,但未在dep中找到图片文件");
 		}else if(bFeatureIsNull){
 			ctx->Ans.reserved1[0] = 4;
-			if(bIsRegister){
-				LogWarn(Severity_Middle, Error_Unexpect, FingerPrint_UserErrorCode_GETFEATURE_FAILED_REGISTER, "fingerprint feature is null while register");
-				ctx->Answer(Error_Succeed, FingerPrint_UserErrorCode_GETFEATURE_FAILED_REGISTER);
-			}else{
-				if (PageType_Other == m_iInWhatPage) {
-					LogError(Severity_High, Error_Unexpect, FingerPrint_UserErrorCode_GETFEATURE_FAILED_MATCH, "fingerprint feature is null while match");
-				}
-				else {
-					LogWarn(Severity_High, Error_Unexpect, FingerPrint_UserErrorCode_GETFEATURE_FAILED_MATCH, "fingerprint feature is null while match");
-				}
-				ctx->Answer(Error_Succeed, FingerPrint_UserErrorCode_GETFEATURE_FAILED_MATCH);
-			}
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode("RTA2413")("指纹扫描失败,采集接口调用成功,但返回的特征值为空");
+			LogWarn(Severity_Middle, Error_Unexpect, FingerPrint_UserErrorCode_GETFEATURE_FAILED_MATCH, "fingerprint feature is null while match");
+			ctx->Answer(Error_Succeed, FingerPrint_UserErrorCode_GETFEATURE_FAILED_MATCH);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_GETFEATURE_FAILED_MATCH))("指纹扫描失败,采集接口调用成功,但返回的特征值为空");
 		}else if(bLenIsNotRight){
 			ctx->Ans.reserved1[0] = 5;
-			if(bIsRegister){
-				LogWarn(Severity_Middle, Error_Unexpect, FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT, "fingerprint feature len is not right while register");
-				ctx->Answer(Error_Succeed, FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT);
-			}else{
-				if (PageType_Other == m_iInWhatPage) {
-					LogError(Severity_High, Error_Unexpect, FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT_MATCH, "fingerprint feature len is not right while match");
-				}
-				else {
-					LogWarn(Severity_High, Error_Unexpect, FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT_MATCH, "fingerprint feature len is not right while match");
-				}
-				ctx->Answer(Error_Succeed, FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT_MATCH);
-			}
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode("RTA2414")("指纹扫描失败,返回的指纹特征长度错误");
+			LogWarn(Severity_High, Error_Unexpect, FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT_MATCH, "fingerprint feature len is not right while match");
+			ctx->Answer(Error_Succeed, FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT_MATCH);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT_MATCH))("指纹扫描失败,返回的指纹特征长度错误");
 		}else if(bExit){
 			LogWarn(Severity_Middle, Error_Hardware, FingerPrint_UserErrorCode_REGISTER_FAILED, "Exit to homepage when register.");
-			//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Scan_ID).setResultCode("RTA2415")("指纹扫描失败,手动Exit退出业务");
 			ctx->Ans.reserved1[0] = 6;
 			ctx->Answer(Error_Succeed);
 		}
@@ -675,11 +633,12 @@ int CFingerPrintFSM::GenerateTemplate(SpReqAnsContext<FingerPrintService_Generat
 	LOG_FUNCTION();
 	
 	if(!m_bOpened) {
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GenerateTemplate return failed for device isn't init suc.");
-		ctx->Answer(Error_NotInit);  //maybe no vendor adapter
+		//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Generate_Template_ID).setResultCode("RTA2425")("GenerateTemplate return failed for device isn't init suc.");
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Generate_Template_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_DEVOPENFAILED_GenerateTemplate))("GenerateTemplate return failed for device isn't init suc.");
+		ctx->Answer(Error_NotInit, FingerPrint_UserErrorCode_DEVOPENFAILED_GenerateTemplate);  //maybe no vendor adapter
 		return 0;
 	}
-	//可以去掉???
+
 	if (m_bCancelRegister) //no cancel button anymore while register
 	{
 		ctx->Answer(Error_Cancel);
@@ -697,21 +656,17 @@ int CFingerPrintFSM::GenerateTemplate(SpReqAnsContext<FingerPrintService_Generat
 
 	for (int i = 0; i < ctx->Req.FingerIDList.GetCount(); ++i)
 	{
-		//char buf[8];
-		//ZeroMemory(buf, 8);
-		//_itoa(ctx->Req.FingerIDList[i], buf, 10);
-		//CSimpleStringA tempStr = strPath + "\\" + "finger" + CSimpleStringA(buf) + ".bmp";
 		CSimpleStringA tempStr = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "finger%d.bmp", strPath.GetData(), ctx->Req.FingerIDList[i]);
 
 		UpdateAndWarnFileFindInDepBak(tempStr, CSimpleStringA::Format("finger%d.bmp", ctx->Req.FingerIDList[i]), FingerPrint_UserErrorCode_FindFile_in_DepBak);
 
 		imagePaths.push_back(tempStr);
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("imageName:%s", imagePaths[i].GetData());
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("imageName:%s", imagePaths[i].GetData());
 #ifdef RVC_OS_WIN		
 		WIN32_FIND_DATA findData;
 		if (FindFirstFileA((LPCTSTR)imagePaths[i], &findData) == INVALID_HANDLE_VALUE)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("image <%s> not exist.", imagePaths[i].GetData());
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GenerateTemplate>, image <%s> not exist.", imagePaths[i].GetData());
 			DeleteBmp(BmpImage);
 			ctx->Answer(Error_NoTarget);
 			return 0;
@@ -719,7 +674,7 @@ int CFingerPrintFSM::GenerateTemplate(SpReqAnsContext<FingerPrintService_Generat
 #else
 		if (!ExistsFile(imagePaths[i]))
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("image <%s> not exist.", imagePaths[i].GetData());
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER)("<GenerateTemplate>, image <%s> not exist.", imagePaths[i].GetData());
 			DeleteBmp(BmpImage);
 			ctx->Answer(Error_NoTarget);
 			return 0;
@@ -741,7 +696,7 @@ int CFingerPrintFSM::GenerateTemplate(SpReqAnsContext<FingerPrintService_Generat
 		}
 		else {
 			CSimpleStringA errMsg = CSimpleStringA::Format("template is NULL or template length is not right(%d)", lpbLength);
-			LogWarn(Severity_Middle, Error_Hardware, FingerPrint_UserErrorCode_REGISTER_FAILED, errMsg.GetData());
+			LogWarn(Severity_Middle, Error_Hardware, FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT, errMsg.GetData());
 			errCode = Error_Unexpect;
 		}
 	}
@@ -752,13 +707,12 @@ int CFingerPrintFSM::GenerateTemplate(SpReqAnsContext<FingerPrintService_Generat
 
 	DeleteBmp(BmpImage);
 	if (errCode == Error_Succeed) {
-		//DbgInfo("Image2Template success.");
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(FingerPrint_Generate_Template_ID)("指纹仪模板生成成功");
 		ctx->Answer(Error_Succeed);
 	}
 	else {
-		LogWarn(Severity_Middle, Error_Unexpect, FingerPrint_UserErrorCode_GETTEMPLATE_FAILED, "generate template failed");
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setResultCode("RTA2419")("指纹仪模板生成失败");
+		//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Generate_Template_ID).setResultCode("RTA2419")("指纹仪模板生成失败");
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode(FingerPrint_Generate_Template_ID).setResultCode(getRTACode(FingerPrint_UserErrorCode_GETTEMPLATE_FAILED))("指纹仪模板生成失败");
 		ctx->Answer(errCode, FingerPrint_UserErrorCode_GETTEMPLATE_FAILED);
 	}
 
@@ -792,7 +746,7 @@ ErrorCodeEnum CFingerPrintFSM::GetDevCatInfo(DevCategoryInfo& devInfo)
 	return Error_Succeed;
 }
 
-ErrorCodeEnum CFingerPrintFSM::GetDevState(int& state)
+ErrorCodeEnum CFingerPrintFSM::GetCurDevState(int& state)
 {
 	ErrorCodeEnum errCode;
 	state = 0;
@@ -822,7 +776,6 @@ void CFingerPrintFSM::DeleteBmp(int type)
 {
 	if ((type & BmpImage) == BmpImage)
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to delete fingerprint images...");
 		CSimpleStringA imageName;
 		DeleteFileIfExisted("finger.bmp");
 		for (int i = 1; i <= 10; ++i) {
@@ -884,7 +837,7 @@ ErrorCodeEnum CFingerPrintFSM::DeleteFileIfExisted(const char* fileName)
 		}
 	}
 	else {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("file %s not exist.", fileName);
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("file %s not exist.", fileName);
 		return Error_Succeed;
 	}
 #endif

+ 5 - 12
Module/mod_FingerPrint/FingerPrintFSM.h

@@ -234,8 +234,7 @@ public:
 	END_FSM_RULE()
 
 	CFingerPrintFSM():m_bCancelRegister(false), m_bCancelMatch(false), m_bExit(false),
-					  m_testResult(Error_Succeed), m_csDevSN(""), m_iInWhatPage(PageType_Init),
-					  m_csMachineType(""), m_terminalNo(""), m_machineVersion("")
+					  m_testResult(Error_Succeed),m_csMachineType(""), m_terminalNo(""), m_machineVersion("")
 					{	
 						HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x204); 
 					}
@@ -270,15 +269,12 @@ public:
 	ErrorCodeEnum DeleteFileIfExisted(const char* fileName);
 
 	ErrorCodeEnum GetDevCatInfo(DevCategoryInfo& devInfo);
-	ErrorCodeEnum GetDevState(int &state);
+	ErrorCodeEnum GetCurDevState(int &state);
 
 	int Initial();
-	bool GetDevInitFlag() { return m_bOpened; }
-	bool GetDevInitingFlag() { return m_bOpening; }
-	void SetInWhatPage(int bValue) { m_iInWhatPage = bValue; }
 
-	DevStateEnum GetDevState(){
-		return m_devState;
+	CSimpleStringA getRTACode(DWORD dwUserCode) {
+		return this->GetEntityBase()->GetFunction()->UserCodeToRTACode(dwUserCode);
 	}
 
 	void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
@@ -286,14 +282,11 @@ public:
 private:
 	ErrorCodeEnum m_testResult;
 	DevCategoryInfo m_devCatInfo;
-	DevStateEnum m_devState;
 	
 	bool m_bCancelRegister;
 	bool m_bCancelMatch;
 	bool m_bExit;
-	int m_iInWhatPage/*在哪个页面,区分首页,用户桌面,其他页*/;
-
-	CSimpleStringA m_csDevSN, m_csMachineType, m_terminalNo, m_machineVersion;
+	CSimpleStringA m_csMachineType, m_terminalNo, m_machineVersion;
 };
 //废弃
 struct ScanTask : public ITaskSp   

+ 37 - 41
Module/mod_FingerPrint/FingerPrint_UserErrorCode.h

@@ -9,46 +9,42 @@
 #define LOG_ERR_FINGERPRINT_REQUEST_REFUSE								0x20400100
 
 #define FingerPrint_UserErrorCode_Start									0x20400200
-#define FingerPrint_UserErrorCode_GET_DLLNAME_FAILED_ONINIT				( FingerPrint_UserErrorCode_Start + 1 )		//指纹仪实体初始化时,获取适配器名称失败 - LogWarn
-#define FingerPrint_UserErrorCode_OPEN_ROOT_FAILED_ONINIT				( FingerPrint_UserErrorCode_Start + 2 )		//指纹仪实体初始化时,打开root.ini文件失败 - LogWarn
-#define FingerPrint_UserErrorCode_VENDOR_ADAPTER_NOT_EXIST				( FingerPrint_UserErrorCode_Start + 3 )		//厂商适配器不存在dep中  - LogWarn
-#define FingerPrint_UserErrorCode_LOAD_ADAPTER_FAILED					( FingerPrint_UserErrorCode_Start + 4 )		//加载厂商适配器失败  - LogWarn
-#define FingerPrint_UserErrorCode_CREATE_COMPONENT_FAILED				( FingerPrint_UserErrorCode_Start + 5 )		//加载适配器成功后,CreateDevComponent失败  - LogWarn
-#define FingerPrint_UserErrorCode_GET_DEP_PATH_FAILED_REGISTER			( FingerPrint_UserErrorCode_Start + 6 )		//采集接口,获取dep路径失败 - LogWarn
-#define FingerPrint_UserErrorCode_NO_IMAGE_IN_DEP_REGISTER				( FingerPrint_UserErrorCode_Start + 7 )		//注册时,采集接口调用成功,但未在dep中找到图片文件 - LogError
-#define FingerPrint_UserErrorCode_GETFEATURE_FAILED_REGISTER			( FingerPrint_UserErrorCode_Start + 8 )		//注册时,采集接口调用成功,但返回的特征值为空 - LogError
-#define FingerPrint_UserErrorCode_GETTEMPLATE_FAILED					( FingerPrint_UserErrorCode_Start + 9 )		//注册时,合成特征模板失败 - LogError
-#define FingerPrint_UserErrorCode_REGISTER_FAILED						( FingerPrint_UserErrorCode_Start + 10 )	//手动Exit退出业务(WARN)- LogWarn
-#define FingerPrint_UserErrorCode_GET_DEP_PATH_FAILED_MATCH				( FingerPrint_UserErrorCode_Start + 11 )	//匹配接口,获取dep路径失败 - LogWarn
-#define FingerPrint_UserErrorCode_NO_IMAGE_IN_DEP_MATCH					( FingerPrint_UserErrorCode_Start + 12 )	//匹配时,采集接口调用成功,但未在dep中找到图片文件 - LogError
-#define FingerPrint_UserErrorCode_GETFEATURE_FAILED_MATCH				( FingerPrint_UserErrorCode_Start + 13 )	//匹配时,采集接口调用成功,但返回的特征值为空 - LogError
-#define FingerPrint_UserErrorCode_MATCH_TIME							( FingerPrint_UserErrorCode_Start + 14 )	//匹配接口耗时 (仅用作性能分析,非错误,WARN)- LogWarn
-#define FingerPrint_UserErrorCode_INVOKE_MATCH_FAILED					( FingerPrint_UserErrorCode_Start + 15 )	//厂商匹配接口返回失败(Match) - LogWarn
-#define FingerPrint_UserErrorCode_MATCH_FAILED							( FingerPrint_UserErrorCode_Start + 16 )	//手动Exit退出业务(WARN) - LogWarn
-
-#define FingerPrint_UserErrorCode_LOGWARN_TERM_INFO						( FingerPrint_UserErrorCode_Start + 17 )	//告警硬件模块信息
-#define FingerPrint_UserErrorCode_NO_ADAPTER_FILE						( FingerPrint_UserErrorCode_Start + 18 )	//未找到适配器文件
-
-#define FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT					( FingerPrint_UserErrorCode_Start + 19 )	//注册时 返回的指纹特征长度错误
-
-#define FingerPrint_UserErrorCode_DEVOPENFAILED_MATCH					( FingerPrint_UserErrorCode_Start + 20 )	//指纹DevOpen失败,业务调用Match时报错
-#define FingerPrint_UserErrorCode_DEVOPENFAILED_GETFINGERPRINT			( FingerPrint_UserErrorCode_Start + 21 )	//指纹DevOpen失败,业务调用GetFingerPrint时报错
-#define FingerPrint_UserErrorCode_DEVOPENFAILED_GenerateTemplate		( FingerPrint_UserErrorCode_Start + 22 )	//指纹DevOpen失败,业务调用GenerateTemplate时报错
-#define FingerPrint_UserErrorCode_DEVOPENFAILED_GetImageAndFeature		( FingerPrint_UserErrorCode_Start + 23 )	//指纹DevOpen失败,业务调用GetImageAndFeature时报错
-#define FingerPrint_UserErrorCode_DEVOPENFAILED_GetImageAndFeatureEx	( FingerPrint_UserErrorCode_Start + 24 )	//指纹DevOpen失败,业务调用GetImageAndFeatureEx时报错
-
-#define FingerPrint_UserErrorCode_ROOT_INFO								( FingerPrint_UserErrorCode_Start + 25 )	//root信息
-
-#define FingerPrint_UserErrorCode_DevOpen_Success						( FingerPrint_UserErrorCode_Start + 30 )	//指纹打开成功
-#define FingerPrint_UserErrorCode_DevOpen_Failed						( FingerPrint_UserErrorCode_Start + 31 )	//指纹打开失败
-#define FingerPrint_UserErrorCode_Release_Object_Failed					( FingerPrint_UserErrorCode_Start + 32 )	//释放对象失败
-
-#define FingerPrint_UserErrorCode_Registe_Timeout						( FingerPrint_UserErrorCode_Start + 33 )	//注册时 采集超时
-#define FingerPrint_UserErrorCode_Match_Timeout							( FingerPrint_UserErrorCode_Start + 34 )	//识别时 采集超时
-#define FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT_MATCH			( FingerPrint_UserErrorCode_Start + 36 )		//识别时 返回的指纹特征长度错误
-#define FingerPrint_UserErrorCode_DevOpen_Failed_Registe				( FingerPrint_UserErrorCode_Start + 37 )	//采集指纹时,指纹是打开失败状态
-#define FingerPrint_UserErrorCode_Real_Root_Config						( FingerPrint_UserErrorCode_Start + 41 )	//实际加载的root配置
-
-#define FingerPrint_UserErrorCode_FindFile_in_DepBak					( FingerPrint_UserErrorCode_Start + 50 )	//在旧Dep路径下找到文件
+#define FingerPrint_UserErrorCode_GET_DLLNAME_FAILED_ONINIT				0x20400201		//指纹仪实体初始化时,获取适配器名称失败 - LogWarn
+#define FingerPrint_UserErrorCode_OPEN_ROOT_FAILED_ONINIT				0x20400202		//指纹仪实体初始化时,打开root.ini文件失败 - LogWarn
+#define FingerPrint_UserErrorCode_VENDOR_ADAPTER_NOT_EXIST				0x20400203		//厂商适配器不存在dep中  - LogWarn
+#define FingerPrint_UserErrorCode_LOAD_ADAPTER_FAILED					0x20400204		//加载厂商适配器失败  - LogWarn
+#define FingerPrint_UserErrorCode_CREATE_COMPONENT_FAILED				0x20400205	//加载适配器成功后,CreateDevComponent失败  - LogWarn
+#define FingerPrint_UserErrorCode_GET_DEP_PATH_FAILED_REGISTER			0x20400206		//采集接口,获取dep路径失败 - LogWarn
+#define FingerPrint_UserErrorCode_NO_IMAGE_IN_DEP_REGISTER				0x20400207		//注册时,采集接口调用成功,但未在dep中找到图片文件 - LogError
+#define FingerPrint_UserErrorCode_GETFEATURE_FAILED_REGISTER			0x20400208		//注册时,采集接口调用成功,但返回的特征值为空 - LogError
+#define FingerPrint_UserErrorCode_GETTEMPLATE_FAILED					0x20400209		//注册时,合成特征模板失败 - LogError
+#define FingerPrint_UserErrorCode_REGISTER_FAILED						0x2040020a	//手动Exit退出业务(WARN)- LogWarn
+#define FingerPrint_UserErrorCode_GET_DEP_PATH_FAILED_MATCH				0x2040020b	//匹配接口,获取dep路径失败 - LogWarn
+#define FingerPrint_UserErrorCode_NO_IMAGE_IN_DEP_MATCH					0x2040020c	//匹配时,采集接口调用成功,但未在dep中找到图片文件 - LogError
+#define FingerPrint_UserErrorCode_GETFEATURE_FAILED_MATCH				0x2040020d	//匹配时,采集接口调用成功,但返回的特征值为空 - LogError
+#define FingerPrint_UserErrorCode_MATCH_TIME							0x2040020e	//匹配接口耗时 (仅用作性能分析,非错误,WARN)- LogWarn
+#define FingerPrint_UserErrorCode_INVOKE_MATCH_FAILED					0x2040020f	//厂商匹配接口返回失败(Match) - LogWarn
+#define FingerPrint_UserErrorCode_MATCH_FAILED							0x20400210	//手动Exit退出业务(WARN) - LogWarn
+#define FingerPrint_UserErrorCode_LOGWARN_TERM_INFO						0x20400211	//告警硬件模块信息
+#define FingerPrint_UserErrorCode_NO_ADAPTER_FILE						0x20400212	//未找到适配器文件
+#define FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT					0x20400213	//注册时 返回的指纹特征长度错误
+#define FingerPrint_UserErrorCode_DEVOPENFAILED_MATCH					0x20400214	//指纹DevOpen失败,业务调用Match时报错
+#define FingerPrint_UserErrorCode_DEVOPENFAILED_GETFINGERPRINT			0x20400215	//指纹DevOpen失败,业务调用GetFingerPrint时报错
+#define FingerPrint_UserErrorCode_DEVOPENFAILED_GenerateTemplate		0x20400216	//指纹DevOpen失败,业务调用GenerateTemplate时报错
+#define FingerPrint_UserErrorCode_DEVOPENFAILED_GetImageAndFeature		0x20400217	//指纹DevOpen失败,业务调用GetImageAndFeature时报错
+#define FingerPrint_UserErrorCode_DEVOPENFAILED_GetImageAndFeatureEx	0x20400218	//指纹DevOpen失败,业务调用GetImageAndFeatureEx时报错
+#define FingerPrint_UserErrorCode_ROOT_INFO								0x20400219	//root信息
+#define FingerPrint_UserErrorCode_PARAMFAILED_GETFINGERPRINT			0x2040021a	//传入参数错误,业务调用GetFingerPrint时报错
+
+#define FingerPrint_UserErrorCode_DevOpen_Success						0x2040021e	//指纹打开成功
+#define FingerPrint_UserErrorCode_DevOpen_Failed						0x2040021f	//指纹打开失败
+#define FingerPrint_UserErrorCode_Release_Object_Failed					0x20400220	//释放对象失败
+#define FingerPrint_UserErrorCode_Registe_Timeout						0x20400221	//注册时 采集超时
+#define FingerPrint_UserErrorCode_Match_Timeout							0x20400222	//识别时 采集超时
+
+#define FingerPrint_UserErrorCode_FEATURELEN_ISNOTRIGHT_MATCH			0x20400224		//识别时 返回的指纹特征长度错误
+#define FingerPrint_UserErrorCode_DevOpen_Failed_Registe				0x20400225	//采集指纹时,指纹是打开失败状态
+
+#define FingerPrint_UserErrorCode_FindFile_in_DepBak					0x20400232	//在旧Dep路径下找到文件
 
 #endif

+ 2 - 12
Module/mod_FingerPrint/mod_FingerPrint.cpp

@@ -40,7 +40,7 @@ void FingerPrintServerSession::Handle_GetFingerPrint(SpReqAnsContext<FingerPrint
 {
 	LOG_FUNCTION();
 	DbgToBeidou(ctx->link, __FUNCTION__)();
-	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke GetFingerPrint");
+	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke GetFingerPrint , ctx->Req.times = %d", ctx->Req.times);
 	m_pEntity->GetFingerPrint(ctx);
 }
 //有用接口:加入交易记录日志生成指纹模板
@@ -87,20 +87,10 @@ void FingerPrintServerSession::Handle_Exit(SpOnewayCallContext<FingerPrintServic
 void CFingerPrintEntity::OnSysVarEvent(const char *pszKey,
 	const char *pszValue, const char *pszOldValue, const char *pszEntityName)
 {
-#ifdef RVC_OS_WIN
 	if ((_strnicmp(pszKey, "UIState", strlen("UIState")) == 0))
 	{	//增加页面位置判断
-		if (_strnicmp(pszValue, "M", strlen("M")) == 0) {
-			m_fsm.SetInWhatPage(PageType_MainPage);
-		}
-		else if (_strnicmp(pszValue, "U", strlen("U")) == 0) {
-			m_fsm.SetInWhatPage(PageType_UserDesktop);
-		}
-		else {
-			m_fsm.SetInWhatPage(PageType_Other);
-		}
+		m_fsm.OnUIState4SetWhatPage(pszValue);
 	}
-#endif	
 }
 
 SP_BEGIN_ENTITY_MAP()

+ 2 - 2
Module/mod_FingerPrint/mod_FingerPrint.h

@@ -80,7 +80,7 @@ public:
 
 	virtual CServerSessionBase* OnNewSession(const char* , const char * )
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("A new connecting request arrived.");
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("A new connecting request arrived.");
 		m_bNewSessionInit = true;
 		return new FingerPrintServerSession(this);
 	}
@@ -174,7 +174,7 @@ public:
 	void GetDevStatus(SpReqAnsContext<FingerPrintService_GetDevStatus_Req, FingerPrintService_GetDevStatus_Ans>::Pointer ctx)
 	{
 		int status = 0;
-		m_fsm.GetDevState(status);
+		m_fsm.GetCurDevState(status);
 		ctx->Ans.status = status;
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("FingerPrint state is:%d", status);
 		ctx->Answer(Error_Succeed);

+ 25 - 19
Module/mod_HSPScanner/HSPScannerFSM.cpp

@@ -192,7 +192,6 @@ CHSPScannerFSM::CHSPScannerFSM(void)
 	m_nFatalTimes(0),
 	m_nSrcState(s0),
 	m_csDevNo("Default"),
-	m_eDevStatus(DEVICE_STATUS_NOT_READY),
 	m_desiredAction(USER_EVT_QUIT),
 	dwLastUserCode(0),
 	m_dwMaxImageSize(500),
@@ -200,10 +199,6 @@ CHSPScannerFSM::CHSPScannerFSM(void)
 {
 	HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x217);
 	m_FirstStart = TRUE;
-	m_errPkg.msgHead = "";
-	m_errPkg.devSN = "";
-	m_errPkg.devErrCode = Error_Unexpect;
-	m_errPkg.apiErrCode = Error_Succeed;
 }
 
 CHSPScannerFSM::~CHSPScannerFSM(void)
@@ -215,7 +210,7 @@ ErrorCodeEnum CHSPScannerFSM::OnInit()
 {
 	LOG_FUNCTION();
 	ErrorCodeEnum erroCode = Error_Succeed;
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Source Code complied at: %s %s", __DATE__, __TIME__);
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Source Code complied at: %s %s", __DATE__, __TIME__);
 	CSystemStaticInfo sysInfo;
 	GetEntityBase()->GetFunction()->GetSystemStaticInfo(sysInfo);
 	m_csMachineType = sysInfo.strMachineType;
@@ -240,9 +235,7 @@ ErrorCodeEnum CHSPScannerFSM::OnInit()
 
 	if (erroCode == Error_Succeed) {
 		if (Error_Succeed == (erroCode = TryToOpenDevice())) {
-			m_eDevStatus = DEVICE_STATUS_NORMAL;
-			ToLogRootINIInfo();
-			ToLogWarnInfoAboutTerm();
+			SetDevState(DEVICE_STATUS_NORMAL);
 			return erroCode;
 		}
 	}
@@ -254,7 +247,8 @@ ErrorCodeEnum CHSPScannerFSM::OnInit()
 	}
 
 FAIL:
-	m_bOpened = false;
+
+	SetDevInitFlag(false);
 	m_bOpening = false;
 	
 	PostEventLIFO(new FSMEvent(USER_EVT_GOTOHELL));
@@ -597,7 +591,7 @@ void CHSPScannerFSM::s3_on_entry()
 {
 	LOG_FUNCTION();
 	
-	m_eDevStatus = DEVICE_STATUS_FAULT;
+	SetDevState(DEVICE_STATUS_FAULT);
 
 	m_nTickTimes = 0;
 	m_bOperating = FALSE;
@@ -614,7 +608,7 @@ void CHSPScannerFSM::s3_on_entry()
 
 void CHSPScannerFSM::s3_on_exit()
 {
-	m_eDevStatus = DEVICE_STATUS_NORMAL;
+	SetDevState(DEVICE_STATUS_NORMAL);
 	m_bOperating = FALSE;
 	m_ecSelfTest = Error_Succeed;
 	m_nFatalTimes = 0;
@@ -952,7 +946,7 @@ unsigned int CHSPScannerFSM::s4_on_event(FSMEvent* e)
 
 void CHSPScannerFSM::s5_on_entry()
 {
-	m_eDevStatus = DEVICE_STATUS_MAINTAINCE;
+	SetDevState(DEVICE_STATUS_MAINTAINCE);
 	LogEvent(Severity_Middle,LOG_EVT_HSPS_LOST_CONNECT,"高拍仪断开连接!");
 	SetLastUserCode(HSPScanner_UserErrorCode_DEVICE_OFFLINE);
 	ScheduleTimer(CHECK_CONNECT_TIMER_ID, MILLISECOND_TO_CHECK_CONNECT);
@@ -961,7 +955,7 @@ void CHSPScannerFSM::s5_on_entry()
 void CHSPScannerFSM::s5_on_exit()
 {
 	SetLastUserCode();
-	m_eDevStatus = DEVICE_STATUS_NORMAL;
+	SetDevState(DEVICE_STATUS_NORMAL);
 	CancelTimer(CHECK_CONNECT_TIMER_ID);
 }
 
@@ -1350,7 +1344,11 @@ int CHSPScannerFSM::StartPreview(SpReqAnsContext<HSPScannerService_StartPreview_
 		} else {
 			//RTA2N0R
 			SetErrorAndLog(erroCode, MEC_DEVAPI_HSPSCANNER_SetParam, "DevAdapter::SetParam", __FUNCTION__, IsInBusiness(), ullEnd - ullStart, HSPScannerService_LogCode_StartPreview, CombineJsonContext("HSPS_VIEW_SHOW"));
-			SetLastUserCode(GetAlarmDEC());
+			const DWORD dwCode = GetAlarmDEC();
+			CSimpleStringA tmpRTA(true), tmpDesc(true);
+			if (GetEntityBase()->GetFunction()->GetVTMErrMsg(dwCode, tmpDesc, tmpRTA) == Error_Succeed)
+				DbgToBeidou(ctx->link, "StartPreview::SetParam").setReturnCode(tmpRTA)();
+			SetLastUserCode(dwCode);
 		}
 	} else if (ISSUCCEEDED(erroCode)) {
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER)("Start to SetPreview(1)...");
@@ -1407,12 +1405,15 @@ int CHSPScannerFSM::StopPreview(SpReqAnsContext<HSPScannerService_CancelPreview_
 		if (ISSUCCEEDED(erroCode)) {
 			nRes = 2;
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_CancelPreview).setAPI("DevAdapter::CancelPreview").setCostTime(ullEnd - ullStart)("SetPreview(0) succ");
-			///*TODO:  (80374374@2/20/2024)*/
 			LogWarn(Severity_Low, Error_Debug, LOG_EVT_HSPSCANNER_SetPreview_Close, "cancelPreview succ.");
 		} else {
 			//RTA2N04
 			SetErrorAndLog(erroCode, MEC_DEVAPI_HSPSCANNER_SetPreview_Close, "DevAdapter::CancelPreview", __FUNCTION__, IsInBusiness(), ullEnd - ullStart, HSPScannerService_LogCode_CancelPreview, CombineJsonContext("SetPreview(0)"));
-			SetLastUserCode(GetAlarmDEC());
+			const DWORD dwCode = GetAlarmDEC();
+			CSimpleStringA tmpRTA(true), tmpDesc(true);
+			if (GetEntityBase()->GetFunction()->GetVTMErrMsg(dwCode, tmpDesc, tmpRTA) == Error_Succeed)
+				DbgToBeidou(ctx->link, __FUNCTION__).setReturnCode(tmpRTA)();
+			SetLastUserCode(dwCode);
 		}
 	}
 	if (ISSUCCEEDED(erroCode)) {
@@ -1770,6 +1771,11 @@ int CHSPScannerFSM::SetWinPos(SpReqAnsContext<HSPScannerService_SetWinPos_Req,
 	if (ISSUCCEEDED(erroCode)) {
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_USER).setLogCode(HSPScannerService_LogCode_SetWinPos)("SetWinPos succ.");
 	}
+	else {
+		CSimpleStringA tmpRTA(true), tmpDesc(true);
+		if (GetEntityBase()->GetFunction()->GetVTMErrMsg(GetLastUserCode(), tmpDesc, tmpRTA) == Error_Succeed)
+			DbgToBeidou(ctx->link, "SetWinPos").setReturnCode(tmpRTA)();
+	}
 	ctx->Answer(TransECWithRepeat(erroCode), GetLastUserCode());
 	return nRes;
 }
@@ -2078,7 +2084,7 @@ ErrorCodeEnum CHSPScannerFSM::TryToOpenDevice()
 		SetErrorAndLog(result, MEC_DEVAPI_HSPSCANNER_DevOpen, "DevAdapter::DevOpen", __FUNCTION__, false, ullEnd - ullStart);
 		SetLastUserCode(LOG_ERR_HSPS_DEVOPEN_FAILED);
 	} else {
-		m_bOpened = true;
+		SetDevInitFlag();
 		SetLastUserCode();
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DevOpen").setCostTime(ullEnd - ullStart)("Open HSPS succ");
 		ullStart = SP::Module::Comm::RVCGetTickCount();
@@ -2097,7 +2103,7 @@ ErrorCodeEnum CHSPScannerFSM::TryToOpenDevice()
 		if (FAILURED(ecInit) || FAILURED(ecInitScan) || FAILURED(ecInitRotate) || FAILURED(ecInitColor)) {
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("ViewPos: %s, Scan: %s, rotate: %s, color: %s.", SpStrError(ecInit), SpStrError(ecInitScan), SpStrError(ecInitRotate), SpStrError(ecInitColor));
 		}
-		m_eDevStatus = DEVICE_STATUS_NORMAL;
+		SetDevState(DEVICE_STATUS_NORMAL);
 	}
 	return result;
 }

+ 2 - 3
Module/mod_HSPScanner/HSPScannerFSM.h

@@ -353,11 +353,11 @@ public:
 	virtual unsigned int s7_on_event(FSMEvent* e);
 
 	virtual void s8_on_entry() {
-		m_eDevStatus = DEVICE_STATUS_NOCFG;
+		SetDevState(DEVICE_STATUS_NOCFG);
 		SetLastUserCode(HSPScanner_UserErrorCode_DLLNAME_NOCFG);
 	}
 	virtual void s8_on_exit() {
-		m_eDevStatus = DEVICE_STATUS_NORMAL;
+		SetDevState(DEVICE_STATUS_NORMAL);
 	}
 	virtual unsigned int s8_on_event(FSMEvent* e);
 
@@ -418,7 +418,6 @@ private:
 
 	int m_nRecX, m_nRecY, m_nRecW;
 
-	DevStateEnum m_eDevStatus;
 	EvtType m_desiredAction;
 	CSimpleStringA m_csMachineType;
 	DevCategoryInfo m_devCat;

+ 1 - 6
Module/mod_HSPScanner/mod_HSPScanner.cpp

@@ -77,12 +77,7 @@ void CHSPScannerEntity::OnSysVarEvent(const char* pszKey, const char* pszValue,
 {
 	if ((_strnicmp(pszKey, "UIState", strlen("UIState")) == 0))
 	{
-		if (_strnicmp(pszValue, "M", strlen("M")) == 0)
-			m_fsm.SetInWhatPage(PageType_MainPage);
-		else if (_strnicmp(pszValue, "U", strlen("U")) == 0)
-			m_fsm.SetInWhatPage(PageType_UserDesktop);
-		else
-			m_fsm.SetInWhatPage(PageType_Other);
+		m_fsm.OnUIState4SetWhatPage(pszValue);
 	}
 }
 

+ 15 - 14
Module/mod_IDCertificate/IDCertFSM.cpp

@@ -154,11 +154,7 @@ struct ImgChekTask : ITaskSp
 void CIDCertFSM::s0_on_entry()
 {
 	LOG_FUNCTION();
-	if (!m_logBefore) {
-		ToLogWarnInfoAboutTerm();
-		m_logBefore = true;
-	}
-	m_devState = DEVICE_STATUS_NORMAL;
+	SetDevState(DEVICE_STATUS_NORMAL);
 }
 void CIDCertFSM::s0_on_exit()
 {
@@ -274,7 +270,7 @@ unsigned int CIDCertFSM::s1_on_event(FSMEvent *pEvt)
 void CIDCertFSM::s2_on_entry()
 {
 	LOG_FUNCTION();
-	m_devState = DEVICE_STATUS_FAULT;
+	SetDevState(DEVICE_STATUS_FAULT);
 	m_testResult = Error_InvalidState;
 }
 void CIDCertFSM::s2_on_exit()
@@ -334,7 +330,7 @@ unsigned int CIDCertFSM::s4_on_event(FSMEvent* pEvt)
 void CIDCertFSM::s5_on_entry()
 {
 	LOG_FUNCTION();
-	m_devState = DEVICE_STATUS_NOT_READY;
+	SetDevState(DEVICE_STATUS_NOT_READY);
 	InitTask* task = new InitTask(this);
 	GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
 }
@@ -1035,8 +1031,11 @@ int CIDCertFSM::ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCe
 				SetErrorAndLog(errReadEx2, MEC_DEVAPI_IDCER_IDCerGetDataEx2, "DevAdapter::IDCerGetDataEx2", __FUNCTION__,
 					true, m_ullEndTime - m_ullBeginTime, IDCertService_LogCode_ReadAndScanUTF8);
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Invoke IDCerGetDataEx2(Timeout) failed: %s", SpStrError(errReadEx2));
-
-				ctx->Answer(Error_Unexpect, GetAlarmDEC()); //RTA2109
+				const DWORD dwCode = GetAlarmDEC();
+				CSimpleStringA tmpRTA(true), tmpDesc(true);
+				if (GetEntityBase()->GetFunction()->GetVTMErrMsg(dwCode, tmpDesc, tmpRTA) == Error_Succeed)
+					DbgToBeidou(ctx->link, __FUNCTION__).setReturnCode(tmpRTA)();
+				ctx->Answer(Error_Unexpect, dwCode); //RTA2109
 			}
 		}
 		else if (!bOpenRF)
@@ -1044,8 +1043,11 @@ int CIDCertFSM::ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCe
 			SetErrorAndLog(errRfOpen, MEC_DEVAPI_IDCER_IDCerRFControl, "DevAdapter::OpenIDCerRFControl", __FUNCTION__,
 				true, m_ullEndTime - m_ullBeginTime, IDCertService_LogCode_ReadAndScanUTF8);
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Open IDCerRFControl(Timeout) failed: %s", SpStrError(errRfOpen));
-
-			ctx->Answer(Error_Unexpect, GetAlarmDEC());
+			const DWORD dwCode = GetAlarmDEC();
+			CSimpleStringA tmpRTA(true), tmpDesc(true);
+			if (GetEntityBase()->GetFunction()->GetVTMErrMsg(dwCode, tmpDesc, tmpRTA) == Error_Succeed)
+				DbgToBeidou(ctx->link, __FUNCTION__).setReturnCode(tmpRTA)();
+			ctx->Answer(Error_Unexpect, dwCode);
 		}
 		else
 		{
@@ -1868,7 +1870,7 @@ int CIDCertFSM::Initial()
 	m_csMachineType = sysInfo.strMachineType;
 	m_terminalNo = sysInfo.strTerminalID;
 	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("machineType:%s,terminalNo:%s", (const char*)m_csMachineType, (const char*)m_terminalNo);
-	m_devState = DEVICE_STATUS_NOT_READY;
+	SetDevState(DEVICE_STATUS_NOT_READY);
 	auto pEntity = GET_DEV_ENTITY_BASE_POINTER();
 
 	//to do device init
@@ -1920,7 +1922,6 @@ int CIDCertFSM::Initial()
 		m_hDevHelper.TearDown();
 		return 2;
 	}
-	ToLogRootINIInfo();
 	memset(m_devCatInfo.szModel, 0, MAX_DEV_MODEL_LEN);
 	memset(m_devCatInfo.szType, 0, MAX_DEV_TYPE_LEN);
 	memset(m_devCatInfo.szVendor, 0, MAX_DEV_VENDOR_LEN);
@@ -1961,7 +1962,7 @@ int CIDCertFSM::Initial()
 	}
 	if (m_hDevHelper != nullptr)
 	{
-		m_bOpened = true;
+		SetDevInitFlag();
 		LogWarn(Severity_Low, Error_Unexpect, IDCertificate_UserErrorCode_DevOpen_Success, "身份证打开成功");
 		return 0;
 	}

+ 2 - 13
Module/mod_IDCertificate/IDCertFSM.h

@@ -206,7 +206,7 @@ public:
 	END_FSM_RULE()
 
 		CIDCertFSM() :m_bCancelRead(false), m_bReading(false), m_bWaitReadMore(false),
-		m_bExit(false), m_testResult(Error_Succeed), m_getDevCategory(Error_Unexpect), m_csMachineType(""), m_terminalNo(""), invalidBreak(false), m_logBefore(false), transImgMsg("")
+		m_bExit(false), m_testResult(Error_Succeed), m_getDevCategory(Error_Unexpect), m_csMachineType(""), m_terminalNo(""), invalidBreak(false), transImgMsg("")
 	{
 		ZeroMemory(&m_adapterInfo, sizeof(m_adapterInfo));
 		HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x201);
@@ -246,16 +246,10 @@ public:
 	void SetExitFlag(){m_bExit = true;}
 	bool GetReadFlag(){return m_bReading;}
 	ErrorCodeEnum GetDevCatInfo(DevCategoryInfo &devInfo, CSimpleStringA& devType);
-	void GetDevState(DevStateEnum &devState){ devState = m_devState; }
-
 	void DoExit(CSmartPointer<ITransactionContext> pTransactionContext)
 	{
 		pTransactionContext->SendAnswer(Error_Succeed);
 	}
-
-	bool GetDevInitFlag() { return m_bOpened; }
-	void ResetDevInitFlag() { m_bOpened = false; }
-
 	int Initial();
 	void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
 
@@ -286,7 +280,6 @@ private:
 	ErrorCodeEnum m_testResult;
 	ErrorCodeEnum m_getDevCategory;
 	DevCategoryInfo m_devCatInfo;
-	DevStateEnum m_devState;
 	CSimpleStringA m_csMachineType, m_terminalNo;
 	CSimpleStringA transImgMsg;
 #ifdef RVC_OS_WIN
@@ -301,11 +294,7 @@ private:
 	
 
 	BOOL closeImgCheck;
-
-	CSimpleStringA m_csAlarmMsg;
-
-	bool invalidBreak;
-	bool m_logBefore;
+	bool invalidBreak; //TODO: 只有赋值,没有调用,考虑移除  [Gifur@2025228]
 	ULLINT m_ullBeginTime, m_ullEndTime;
 };
 

+ 2 - 2
Module/mod_ResourceWatcher/ResourceWatcher.xml

@@ -291,8 +291,8 @@
 	    <twoway  name="CheckIsFileExists" overlap="true" method_id="21">
 	      <req>
 					<!-- 0: 文件名参数为全路径 -->
-					<!-- 1: 在当前默认音频文件路径(Win: D:/rvc/adData/Audio/; UOS: /opt/rvc/adData/Audio/) 下查找mp3格式文件 -->
-					<!-- 2: 在当前默认视频文件路径(Win: D:/rvc/adData/Video/; UOS: /opt/rvc/adData/Video/) 下查找视频文件 -->
+					<!-- 1: 在当前默认音频文件路径(Win: D:/rvc/adData/Audio/; UOS: /opt/rvc/adData/Audio/) 下查找指定文件 -->
+					<!-- 2: 在当前默认视频文件路径(Win: D:/rvc/adData/Video/; UOS: /opt/rvc/adData/Video/) 下查找指定文件 -->
           <param name="filetype" type="int" />
 					<param name="filename" type="wstring" />
 	      </req>

+ 142 - 383
Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp

@@ -25,6 +25,7 @@
 #include "toolkit.h"
 #include "iniutil.h"
 #include "osutil.h"
+#include <winpr/file.h>
 #else
 #include <intrin.h>
 #include <ShlObj.h>
@@ -57,19 +58,6 @@
 #pragma comment(lib, "wlanapi.lib")
 #endif
 
-//硬件信息搜集参数  
-#define DEFAULT_HARDWARE_CHECK_TIME 60 * 1000 //CPU、内存扫描默认间隔,1分钟
-#define TIMER_HARDWARE_CHECK 2
-//硬盘扫描
-#define DEFAULT_DISK_CHECK_TIME 4 * 60 * 60 * 1000 //硬盘默认4小时扫描一次
-#define TIMER_DISK_CHECK 3
-//保留版本数目
-#define DEFAULT_VERSION_SAVED_COUNT 5
-#define MAX_VERSION_PATH 256
-//一天的秒数,用于计算文件时间
-const int SECONDS_OF_DAY = 60 * 60 * 24;
-const int VIDEO_DEFAULT_BACKDAYS = 30;
-
 #ifdef RVC_OS_LINUX
 #define PROCESS_ITEM 14 //进程CPU信息读取位置参数
 const int MAX_MAINLINK_CHECK_TIME = 5000;
@@ -172,30 +160,6 @@ void ResourceWatcherFSM::GetAutoStartFile(std::string& userDirPath, std::vector<
 
 #endif //RVC_OS_WIN
 
-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;
-};
-
 ResourceWatcherFSM::ResourceWatcherFSM(void)
     :m_strTerminalNo(true),
     m_bFirstRunAfterBoot(FALSE),
@@ -342,15 +306,6 @@ void ResourceWatcherFSM::TriggerAtStatusChanged(bool bMStatus)
         CSmartPointer<IConfigInfo> spCtSettingConfig;
         GetEntityBase()->GetFunction()->OpenConfig(Config_Run, spRunConfig);
         GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spCtSettingConfig);
-        spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "HardwareCheckTime", hardwareCheckTime);
-        spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "HardwareCheckFlag", hardwareCheckFlag);
-        spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "DiskCheckTime", diskCheckTime);
-        spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "DiskCheckFlag", diskCheckFlag);
-        spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "CpuTooHighPercent", m_cpuHighPercent);
-        spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "CpuWarnThreshold", cpuWarnThreshold);
-        spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "MemoryTooHighPercent", m_memHighPercent);
-        spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "MemWarnThreshold", memWarnThreshold);
-        spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "HardDiskTooHighPercent", m_diskHighPercent);
         spCtSettingConfig->ReadConfigValueInt(m_pEntity->GetEntityName(), "VerifySignature", m_iVerify);
 #if defined(RVC_OS_WIN)
         if (m_iVerify == 1) {//文件签名校验
@@ -360,34 +315,23 @@ void ResourceWatcherFSM::TriggerAtStatusChanged(bool bMStatus)
         }
         
 #endif //RVC_OS_WIN
+        
+        if (!forceFileOpt) //默认情况下,进入首页才进行文件相关操作功能:版本删除、占用扫描等
+        {
+            spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "DiskCheckTime", diskCheckTime);
+            spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "DiskCheckFlag", diskCheckFlag);
+            spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "HardDiskTooHighPercent", m_diskHighPercent);
 
-        if (hardwareCheckTime <= 0) { //非法数值情况下设置为默认一分钟
-            hardwareCheckTime = DEFAULT_HARDWARE_CHECK_TIME;
-        }
-        void* pTmpData = NULL;
-        ITimerListener* pListener = new TimerOutHelper<ResourceWatcherFSM>(this, &ResourceWatcherFSM::HardwareInfoTimer, pTmpData);
-        GetEntityBase()->GetFunction()->SetTimer(TIMER_HARDWARE_CHECK, pListener, hardwareCheckTime);
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Set Hardware Timer!");
-
-        if (diskCheckFlag > 0) {
-            GetSystemDiskStatus(); //仅启动时检测一次硬盘状态即可
-        }
-
-        if (diskCheckTime <= 0) {
-            diskCheckTime = DEFAULT_DISK_CHECK_TIME;
+            if (diskCheckTime <= 0) {
+                diskCheckTime = DEFAULT_DISK_CHECK_TIME;
+            }
+            
+            //终端清理逻辑
+            DiskAndFilesTask* deleteAndFilesTask = new DiskAndFilesTask(this);
+            deleteAndFilesTask->flag = diskCheckFlag;
+            deleteAndFilesTask->checkTime = diskCheckTime;
+            GetEntityBase()->GetFunction()->PostThreadPoolTask(deleteAndFilesTask);
         }
-        void* pTmpData2 = NULL;
-        ITimerListener* pListener2 = new TimerOutHelper<ResourceWatcherFSM>(this, &ResourceWatcherFSM::DiskCheckTimer, pTmpData2);
-        GetEntityBase()->GetFunction()->SetTimer(TIMER_DISK_CHECK, pListener2, diskCheckTime);
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Set DISK CHECK Timer!");
-
-        //集中配置额外加的清理逻辑
-        CenterSettingDeleteTask* centerSettingDeleteTask = new CenterSettingDeleteTask(this);
-        GetEntityBase()->GetFunction()->PostThreadPoolTask(centerSettingDeleteTask);
-
-        //终端默认的自动清理逻辑
-        AutoDeleteFilesTask* autoDeleteTask = new AutoDeleteFilesTask(this);
-        GetEntityBase()->GetFunction()->PostThreadPoolTask(autoDeleteTask);
 
         if (m_bFirstRunAfterBoot) {
 #if defined(RVC_OS_LINUX)
@@ -459,6 +403,45 @@ ErrorCodeEnum ResourceWatcherFSM::OnExit()
 
 void ResourceWatcherFSM::AfterInit()
 {
+    //实体启动成功后执行的功能
+    CSmartPointer<IConfigInfo> spCtSettingConfig;
+    GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spCtSettingConfig);
+    spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "ForceFileOpt", forceFileOpt);
+    if (forceFileOpt)//如配置了文件操作的强制处理,则实体启动后就开始文件操作,无需进入首页. 注意:包含版本清理!!
+    {
+        spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "DiskCheckTime", diskCheckTime);
+        spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "DiskCheckFlag", diskCheckFlag);
+        spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "HardDiskTooHighPercent", m_diskHighPercent);
+
+        if (diskCheckTime <= 0) {
+            diskCheckTime = DEFAULT_DISK_CHECK_TIME;
+        }
+
+        //终端清理逻辑
+        DiskAndFilesTask* deleteAndFilesTask = new DiskAndFilesTask(this);
+        deleteAndFilesTask->flag = diskCheckFlag;
+        deleteAndFilesTask->checkTime = diskCheckTime;
+        GetEntityBase()->GetFunction()->PostThreadPoolTask(deleteAndFilesTask);
+    }
+
+    spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "HardwareCheckTime", hardwareCheckTime);
+    spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "HardwareCheckFlag", hardwareCheckFlag);
+    spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "CpuTooHighPercent", m_cpuHighPercent);
+    spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "CpuWarnThreshold", cpuWarnThreshold);
+    spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "MemoryTooHighPercent", m_memHighPercent);
+    spCtSettingConfig->ReadConfigValueInt("ResourceWatcher", "MemWarnThreshold", memWarnThreshold);
+    if (hardwareCheckFlag)
+    {
+        if (hardwareCheckTime <= 0) { //非法数值情况下设置为默认一分钟
+            hardwareCheckTime = DEFAULT_HARDWARE_CHECK_TIME;
+        }
+
+        void* pTmpData = NULL;
+        ITimerListener* pListener = new TimerOutHelper<ResourceWatcherFSM>(this, &ResourceWatcherFSM::HardwareInfoTimer, pTmpData);
+        GetEntityBase()->GetFunction()->SetTimer(TIMER_HARDWARE_CHECK, pListener, hardwareCheckTime);
+        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Set Hardware Timer!");
+    }
+
 #if defined(RVC_OS_WIN)
     InitUserInfo();
     if (m_bFirstRunAfterBoot) {
@@ -556,61 +539,30 @@ void ResourceWatcherFSM::CenterSettingDelete()
     string p;
     CSmartPointer<IConfigInfo> spCtSettingConfig;
     GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spCtSettingConfig);
-    CSimpleStringA upPath(""), tempPath(""), tPath(""), upgradePath("");
+    CSimpleStringA upPath(""), tempPath(""), tPath("");
+    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;
     }
     ErrorCodeEnum erroCode = Error_Succeed;
     CSmartPointer<IEntityFunction> pFunc = GetEntityBase()->GetFunction();
     CSmartPointer<IConfigInfo> spConfigRun;
-    //判断是否需要被清理
-    erroCode = pFunc->OpenConfig(Config_Run, spConfigRun);
-    if (erroCode != Error_Succeed) {
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Open Run Config failed");
-        return;
-    }
-
-    int nLastTaskTime = 0;
-    int nLstFlag = 0;
     bool bFailFlag = false;
-    CSimpleStringA optFileName("");
-    UINT64 utVersion = 0;
-
-    spConfigRun->ReadConfigValueHexInt("DeleteDocumentTask", "OptVer", utVersion);
-    spConfigRun->ReadConfigValue("DeleteDocumentTask", "DocumentName", optFileName);
-    spConfigRun->ReadConfigValueInt("DeleteDocumentTask", "LastCondi", nLstFlag);
-    spConfigRun->ReadConfigValueInt("DeleteDocumentTask", "LastTime", nLastTaskTime);
-
-    CVersion optVer(utVersion);
-    SYSTEMTIME stTaskTime = CSmallDateTime(nLastTaskTime).ToSystemTime();
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("LastTime<%04d-%02d-%02d %02d:%02d:%02d>: OptVer: %s, LastCondi: %d",
-        stTaskTime.wYear, stTaskTime.wMonth, stTaskTime.wDay,
-        stTaskTime.wHour, stTaskTime.wMinute, stTaskTime.wSecond,
-        (LPCTSTR)optVer.ToString(), nLstFlag);
-    if (optVer.IsValid() && optVer == m_RvcSysinfo.InstallVersion && !nLstFlag && optFileName == tempPath)
-    {
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Certain document cleaning has been done before.");
-        return;
-    }
 
     //执行清理逻辑
+    bool delDir = (closeRmDir == 0) ? true : false;
     upPath = tempPath;
     int nDelSuc = 0, nDelFail = 0, nFileCount = 0;
-    nFileCount = ProcessFileDelete(upPath.GetData(), nDelSuc, nDelFail, false);
+    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) {
         bFailFlag = true;
         //break;
     }
 
-    nLstFlag = bFailFlag ? 1 : 0;
-    spConfigRun->WriteConfigValueHexInt("DeleteDocumentTask", "OptVer", m_RvcSysinfo.InstallVersion.GetVersion64());
-    spConfigRun->WriteConfigValue("DeleteDocumentTask", "DocumentName", tempPath);
-    spConfigRun->WriteConfigValueInt("DeleteDocumentTask", "LastCondi", nLstFlag);
-    spConfigRun->WriteConfigValue("DeleteDocumentTask", "LastTime",
-        (LPCTSTR)CSimpleStringA::Format("0x%08X", (DWORD)CSmallDateTime::GetNow()));
-
     if (!bFailFlag) 
     {
         LogWarn(Severity_Low, Error_Debug, LOG_WARN_FILE_DELETE_SUC, CSimpleStringA::Format("Delete files in [%s] success", tempPath.GetData()));
@@ -659,152 +611,106 @@ time_t ResourceWatcherFSM::GetPathTimeSeconds(const char* inPath)
 //所有文件删除功能都用这个函数来处理 
 //bool delDir:控制是否将目录也一并删除,false 保留目录, true 删除目录
 //int saveBackDay:保存多少天内的文件, 默认参数,默认值为0,即不保存。(delDir = true时,该参数强制为0)
-int ResourceWatcherFSM::ProcessFileDelete(LPCTSTR lpszPath, int& nDelSucCnt, int& nDelFailedCnt, bool delDir, unsigned int saveBackDay)
+int ResourceWatcherFSM::ProcessFileDelete(CSimpleStringA rtaCode, LPCTSTR lpszPath, int& nDelSucCnt, int& nDelFailedCnt, bool delDir, unsigned int saveBackDay)
 {
-    if (delDir == true) //若要删除目录,则不保留任何文件
-    {
-        saveBackDay = 0;
-    }
-
     int fileCnt = 0;
-    char* searchFilePath = new char[MAX_PATH];
-    char* tempFilePath = new char[MAX_PATH];
-    if (searchFilePath == NULL || tempFilePath == NULL)
-    {
-        if (searchFilePath) delete[] searchFilePath;
-        if (tempFilePath) delete[] tempFilePath;
-        searchFilePath = NULL;
-        tempFilePath = NULL;
-        return fileCnt;
-    }
-    ZeroMemory(searchFilePath, MAX_PATH);
-    ZeroMemory(tempFilePath, MAX_PATH);
-
-#ifdef RVC_OS_LINUX
-    int fileLength = strlen(lpszPath);
-    struct stat st;
 
-    if (stat(lpszPath, &st) == -1)
-    {
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("[%s] Failed to get file stats.", lpszPath);
-        nDelSucCnt++;
-        return fileCnt;
+    DWORD attrs = GetFileAttributesA(lpszPath);
+    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++;
     }
-
-    if (!S_ISDIR(st.st_mode)) 
-    {//单文件处理
-        if (saveBackDay != 0)
+    else if (attrs & FILE_ATTRIBUTE_DIRECTORY) //文件夹类型
+    {
+        if (delDir == true) //若要删除目录,则不保留任何文件
         {
-            time_t lSystemTime;
-            time(&lSystemTime);
-            
-            time_t fileTime = GetPathTimeSeconds(lpszPath); //获取文件的最后改动时间
-            int delDays = (lSystemTime - fileTime) / SECONDS_OF_DAY;
-            
-            if (delDays < saveBackDay) // 未达到需要清理的天数阈值,无需清理
+            saveBackDay = 0;
+            bool deleteDir;
+            deleteDir = RemoveDirRecursiveA(lpszPath);
+            if (!deleteDir)
             {
-                return fileCnt;
+                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());
+                LogWarn(Severity_Middle, Error_Debug, LOG_WARN_FILE_DELETE_FAILED, errMsg.GetData());
+                nDelFailedCnt++;
+            }
+            else
+            {
+                nDelSucCnt++;
+                fileCnt++;
             }
+            return fileCnt;
         }
 
-        if (RemoveFileA(lpszPath) == true) {
-            nDelSucCnt++;
-            fileCnt++;
-        }
-        else {
-            nDelFailedCnt++;
-            CSimpleStringA errMsg = CSimpleStringA::Format("RemoveFileA [%s] failed, GLE = %u.", lpszPath, GetLastError());
-            DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5A08").setAPI("DeleteFiles")(errMsg.GetData());
-            LogWarn(Severity_Middle, Error_Debug, LOG_WARN_FILE_DELETE_FAILED, errMsg.GetData());
-        }
-        if (searchFilePath) delete[] searchFilePath;
-        if (tempFilePath) delete[] tempFilePath;
-        searchFilePath = NULL;
-        tempFilePath = NULL;
-        return fileCnt;
-    }
-
-    DIR* d = opendir(lpszPath);
-    if (!d) {
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("opendir failed: %d.", errno);
-        if (searchFilePath) delete[] searchFilePath;
-        if (tempFilePath) delete[] tempFilePath;
-        searchFilePath = NULL;
-        tempFilePath = NULL;
-        nDelFailedCnt++;
-        return fileCnt;
-    }
+        bool delSubDir = true; //默认移除子目录
+        array_header_t* arr;
+        arr = fileutil_get_sub_dirs_a(lpszPath);
+        if (arr)
+        {
+            int i;
+            for (i = 0; i < arr->nelts; ++i)//子目录
+            {
+                char* tmp = ARRAY_IDX(arr, i, char*);
 
-    struct dirent* dp = NULL;
-    while ((dp = readdir(d)) != NULL) {
-        if ((!strcmp(dp->d_name, ".")) || (!strcmp(dp->d_name, ".."))) {
-            continue;
-        }
-        strcpy(tempFilePath, lpszPath);
+                if (saveBackDay != 0)
+                {
+                    //读取路径时间
+                    time_t lSystemTime;
+                    time(&lSystemTime);
 
-        if (strlen(tempFilePath) + strlen(dp->d_name) + 3 >= MAX_PATH) {
-            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("filePath is too long for current.");
-            continue;
-        }
-        strcat(tempFilePath, "/");
-        strcat(tempFilePath, dp->d_name);
-        stat(tempFilePath, &st);
-        
-        if (saveBackDay != 0)
-        {
-            time_t lSystemTime;
-            time(&lSystemTime);
+                    time_t fileTime = GetPathTimeSeconds(tmp); //获取路径的最后改动时间
+                    int delDays = (lSystemTime - fileTime) / SECONDS_OF_DAY;
 
-            time_t fileTime = GetPathTimeSeconds(tempFilePath); //获取文件的最后改动时间
-            int delDays = (lSystemTime - fileTime) / SECONDS_OF_DAY;
+                    if (delDays <= saveBackDay) //未达需要清理的天数阈值,保留目录
+                    {
+                        delSubDir = false;
+                        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("[%s]存留天数[%d], 删除阈值[%u], 保留目录.", tmp, (int)delDays, saveBackDay);
+                    }
+                }
 
-            if (delDays < saveBackDay) // 未达到需要清理的天数阈值,无需清理
-            {
-                continue;
+                int tDelSucCnt = 0, tDelFailedCnt = 0;
+                fileCnt += ProcessFileDelete(rtaCode, tmp, tDelSucCnt, tDelFailedCnt, delSubDir, saveBackDay); //子目录递归处理
+                nDelFailedCnt += tDelFailedCnt;
+                nDelSucCnt += tDelSucCnt;
             }
+            toolkit_array_free2(arr);
         }
 
-        int tDelSucCnt = 0, tDelFailedCnt = 0;
-        fileCnt += ProcessFileDelete((LPCTSTR)tempFilePath, tDelSucCnt, tDelFailedCnt, true); //子目录要清理
-        if (tDelFailedCnt != 0) {
-            nDelSucCnt += tDelSucCnt;
-            nDelFailedCnt += tDelFailedCnt;
-            return fileCnt;
+        arr = fileutil_get_sub_files_a(lpszPath); //子文件
+        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;
+            }
+            toolkit_array_free2(arr);
         }
-        nDelSucCnt += tDelSucCnt;
     }
-    closedir(d);
-#else
-    CSimpleStringA inPath = lpszPath;
-    inPath.Append("\\*");   // "D:aaa\bbb\ccc\* " 匹配目录下的所有文件和文件夹
-    int fileLength = inPath.GetLength();
-
-    WIN32_FIND_DATA wfd;
-    HANDLE hFind;
-
-    hFind = FindFirstFile(inPath.GetData(), &wfd);
-
-    //单文件操作
-    if (hFind == INVALID_HANDLE_VALUE) // 非文件夹 (inPath "D:aaa\bbb\ccc\* "格式的情况下,如果前面是文件,会找不到匹配)
-    {        
+    else //文件类型
+    {
         if (saveBackDay != 0)
         {
             //读取文件时间
             time_t lSystemTime;
             time(&lSystemTime);
-            
+
             time_t fileTime = GetPathTimeSeconds(lpszPath); //获取文件的最后改动时间
             int delDays = (lSystemTime - fileTime) / SECONDS_OF_DAY;
-            
+
             if (delDays < saveBackDay) // 未达到需要清理的天数阈值,无需清理
             {
-                FindClose(hFind);
+                DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("[%s]存留天数[%d], 删除阈值[%u],无需清理.", lpszPath, (int)delDays, saveBackDay);
                 return fileCnt;
             }
         }
 
-        FindClose(hFind);
-        if (DeleteFile(lpszPath) == true)
+        if (RemoveFileA(lpszPath) == true)
         {
             nDelSucCnt++;
             fileCnt++;
@@ -813,79 +719,12 @@ int ResourceWatcherFSM::ProcessFileDelete(LPCTSTR lpszPath, int& nDelSucCnt, int
         {
             nDelFailedCnt++;
             CSimpleStringA errMsg = CSimpleStringA::Format("RemoveFileA [%s] failed, GLE = %u.", lpszPath, GetLastError());
-            DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5A08").setAPI("DeleteFiles")(errMsg.GetData());
+            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());
         }
-        if (searchFilePath) delete[] searchFilePath;
-        if (tempFilePath) delete[] tempFilePath;
-        searchFilePath = NULL;
-        tempFilePath = NULL;
-        return fileCnt;
-    }
-
-    //文件夹操作
-    do
-    {
-        if (wfd.cFileName[0] != '.')
-        {
-            strcpy_s(tempFilePath, MAX_PATH, inPath.GetData());
-            tempFilePath[fileLength - 1] = '\0';
-            if (strlen(tempFilePath) + strlen(wfd.cFileName) + 3 >= MAX_PATH)
-            {
-                DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("filePath is too long for current.");
-            }
-            else
-            {
-                strcat_s(tempFilePath, MAX_PATH, wfd.cFileName); //"D:aaa\bbb\ccc\fileName" 
-
-                if (saveBackDay != 0)
-                {
-                    time_t lSystemTime;
-                    time(&lSystemTime);
-
-                    time_t fileTime = GetPathTimeSeconds(tempFilePath); //获取文件的最后改动时间
-                    if (fileTime == 0)
-                    {
-                        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("get file time (%s) failed. skip clean", (LPCTSTR)tempFilePath);
-                        nDelFailedCnt++;
-                        continue;
-                    }
-                    
-                    int delDays = (lSystemTime - fileTime) / SECONDS_OF_DAY;
-                    if (delDays < saveBackDay) // 未达到需要清理的天数阈值,无需清理
-                    {
-                        continue;
-                    }
-                }
-
-                int tDelSucCnt = 0, tDelFailedCnt = 0;
-                fileCnt += ProcessFileDelete((LPCTSTR)tempFilePath, tDelSucCnt, tDelFailedCnt, true); //子目录要删除
-                if (tDelFailedCnt != 0)
-                {
-                    nDelFailedCnt += tDelFailedCnt;
-                    return fileCnt;
-                }
-                nDelFailedCnt += tDelFailedCnt;
-                nDelSucCnt += tDelSucCnt;
-            }
-        }
-    } while (FindNextFileA(hFind, &wfd));
-    FindClose(hFind);
-#endif // RVC_OS_LINUX
 
-    if (delDir) //删除目录
-    {
-#ifdef RVC_OS_WIN
-        RemoveDirectoryA(lpszPath);
-#else
-        RemoveDirRecursive(lpszPath);
-#endif
     }
 
-    if (searchFilePath) delete[] searchFilePath;
-    if (tempFilePath) delete[] tempFilePath;
-    searchFilePath = NULL;
-    tempFilePath = NULL;
     return fileCnt;
 }
 
@@ -924,87 +763,19 @@ void ResourceWatcherFSM::AutoDeleteFiles()
 
 }
 
-//终端升级后会执行版本清理功能 包含dump和 upgaraded清理
+//终端升级后会执行版本清理功能
 BOOL ResourceWatcherFSM::DeleteVersionPackage()
 {
     ErrorCodeEnum erroCode = Error_Succeed;
     CSmartPointer<IEntityFunction> pFunc = GetEntityBase()->GetFunction();
-    CSmartPointer<IConfigInfo> spConfigRun;
     CSmartPointer<IConfigInfo> spConfig;
+    pFunc->OpenConfig(Config_CenterSetting, spConfig);
     CSystemStaticInfo info;
     if (pFunc->GetSystemStaticInfo(info) != Error_Succeed) {
         DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Get system static info error");
         return FALSE;
     }
 
-    //清理执行成功与否的判断变量
-    int nLastTaskTime = 0;
-    int nLstFailed = 0;
-    int nDelCount = 0;
-    UINT64 utVersion = 0;
-
-    pFunc->OpenConfig(Config_CenterSetting, spConfig);
-    pFunc->OpenConfig(Config_Run, spConfigRun);
-
-    spConfigRun->ReadConfigValueHexInt("VersionClear", "OptVer", utVersion);
-    spConfigRun->ReadConfigValueInt("VersionClear", "DelVerCnt", nDelCount);
-    spConfigRun->ReadConfigValueInt("VersionClear", "LastCondi", nLstFailed); //失败标志
-    spConfigRun->ReadConfigValueInt("VersionClear", "LastTime", nLastTaskTime);
-
-    CVersion optVer(utVersion);
-    SYSTEMTIME stTaskTime = CSmallDateTime(nLastTaskTime).ToSystemTime();
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("LastTime<%04d-%02d-%02d %02d:%02d:%02d>: OptVer: %s, LastFailed: %d",
-        stTaskTime.wYear, stTaskTime.wMonth, stTaskTime.wDay,
-        stTaskTime.wHour, stTaskTime.wMinute, stTaskTime.wSecond,
-        (LPCTSTR)optVer.ToString(), nLstFailed);
-    
-    //判断是否需要执行清理任务,若此版本之前成功清理过则不再继续执行后续操作
-    if (optVer.IsValid() && optVer == info.InstallVersion && !nLstFailed) {
-        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("VersionPackage cleaning has been done before.");
-        return TRUE;
-    }
-
-    //--------------------------------------------------------------------------------------------
-    //版本清理中默认进行upgrade清理
-    int closeUpgradeClear = 0;
-    spConfig->ReadConfigValueInt("ResourceWatcher", "CloseUpgradeClear", closeUpgradeClear);
-    if (!closeUpgradeClear)
-    {
-        //删除rvc/Upgraded目录下的文件 
-        CSimpleStringA upPath;
-        ErrorCodeEnum upError = pFunc->GetPath("Upgraded", upPath);
-        if (Error_Succeed != upError) {
-            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Try to clean Upgraded Dir. But get Upgraded path error = %u.", upError);
-            return FALSE;
-        }
-        int nDelSuc = 0, nDelFail = 0, nFileCount = 0;
-        nFileCount = ProcessFileDelete(upPath.GetData(), nDelSuc, nDelFail, false);
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Delete [Upgraded] result(%s): count(%d), suc(%d), failed(%d).", upPath.GetData(), nFileCount, nDelSuc, nDelFail);
-    }
-
-    //--------------------------------------------------------------------------------------------
-    //版本清理中默认进行dump清理
-    int closeDmpClear = 0;
-    spConfig->ReadConfigValueInt("ResourceWatcher", "CloseDmpClear", closeDmpClear);
-    if (!closeDmpClear)
-    {    //执行删除流程rvc/dmp
-        CSimpleStringA dmpPath;
-        ErrorCodeEnum dmpError = pFunc->GetPath("Temp", dmpPath);
-        if (Error_Succeed != dmpError) {
-            DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Try to clean Dump Dir. But get Temp path error = %u.", dmpError);
-            return FALSE;
-        }
-#ifdef RVC_OS_LINUX
-        dmpPath = dmpPath + SPLIT_SLASH_STR + ".." + SPLIT_SLASH_STR + "dmp"; // +"/../dmp"
-#else
-        dmpPath = dmpPath + CSimpleStringA::Format("\\..\\dmp");
-#endif // RVC_OS_LINUX
-
-        int nDelSuc = 0, nDelFail = 0, nFileCount = 0;
-        nFileCount = ProcessFileDelete(dmpPath.GetData(), nDelSuc, nDelFail, false);
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Delete [Dump] result(%s): count(%d), suc(%d), failed(%d).", dmpPath.GetData(), nFileCount, nDelSuc, nDelFail);
-    }
-
     //--------------------------------------------------------------------------------------------
     //清理ver文件夹
     int closeVerClear = 0;
@@ -1056,7 +827,7 @@ BOOL ResourceWatcherFSM::DeleteVersionPackage()
                 int n = sscanf(dirp->d_name, "%d.%d.%d.%d", &dwMajor, &dwMinor, &dwRevision, &dwBuild);
                 if (n != 4)
                 {
-                    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not version file.[%s]", dirp->d_name);
+                    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not target version file.[%s]", dirp->d_name);
                     continue;
                 }
                 else {
@@ -1070,7 +841,7 @@ BOOL ResourceWatcherFSM::DeleteVersionPackage()
                         intallInfoVects.push_back(verName);
                     }
                     else {
-                        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not version file.[%s]", dirp->d_name);
+                        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not target version file.[%s]", dirp->d_name);
                     }
                 }
             }
@@ -1088,7 +859,7 @@ BOOL ResourceWatcherFSM::DeleteVersionPackage()
                 int n = sscanf(fileinfo.name, "%d.%d.%d.%d", &dwMajor, &dwMinor, &dwRevision, &dwBuild);
                 if (n != 4)
                 {
-                    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not version file.[%s]", fileinfo.name);
+                    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not target version file.[%s]", fileinfo.name);
                     continue;
                 }
                 else {
@@ -1103,7 +874,7 @@ BOOL ResourceWatcherFSM::DeleteVersionPackage()
                         intallInfoVects.push_back(verName);
                     }
                     else {
-                        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not version file.[%s]", fileinfo.name);
+                        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not target version file.[%s]", fileinfo.name);
                     }
                 }
             } while (_findnext(hFile, &fileinfo) == 0);
@@ -1150,7 +921,7 @@ BOOL ResourceWatcherFSM::DeleteVersionPackage()
 #else
                 tVerPath = verPath + "\\" + (*riter).ToString();
 #endif // RVC_OS_LINUX
-                nFileCount = ProcessFileDelete(tVerPath.GetData(), nDelSuc, nDelFail, true); //版本文件夹连目录一起清理
+                nFileCount = ProcessFileDelete("RTA5A12", tVerPath.GetData(), nDelSuc, nDelFail, true); //版本文件夹连目录一起清理
                 DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Delete Version result(%s): count(%d), suc(%d), failed(%d).", 
                     tVerPath.GetData(), nFileCount, nDelSuc, nDelFail);
                 if (nDelFail)
@@ -1166,13 +937,6 @@ BOOL ResourceWatcherFSM::DeleteVersionPackage()
             }
         }
 
-        nLstFailed = bFailFlag ? 1 : 0;
-        spConfigRun->WriteConfigValueHexInt("VersionClear", "OptVer", info.InstallVersion.GetVersion64());
-        spConfigRun->WriteConfigValueInt("VersionClear", "DelVerCnt", nDelCount + nDelVersionCnt);
-        spConfigRun->WriteConfigValueInt("VersionClear", "LastCondi", nLstFailed);
-        spConfigRun->WriteConfigValue("VersionClear", "LastTime",
-            (LPCTSTR)CSimpleStringA::Format("0x%08X", (DWORD)CSmallDateTime::GetNow()));
-
         if (nDelVersionCnt > 0) {
             std::string warn = "Delete Vesion file count : " + std::to_string((long long)nDelVersionCnt) + ".  ----- " + tInfo + ".";
             LogWarn(Severity_Low, Error_Debug, LOG_WARN_VER_DELETE, CSimpleStringA::Format("%s", warn.c_str()));
@@ -1220,7 +984,7 @@ void ResourceWatcherFSM::DeleteVideoFiles()
     }
 
     int nDelSuc = 0, nDelFail = 0, nFileCount = 0;
-    nFileCount = ProcessFileDelete(videoPath.GetData(), nDelSuc, nDelFail, false, backDays);
+    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);
 
 }
@@ -1236,20 +1000,15 @@ void ResourceWatcherFSM::SelfTest(EntityTestEnum eTestType,
 
 void ResourceWatcherFSM::HardwareInfoTimer(void* pData)
 {
-    if (hardwareCheckFlag > 0) {
-        GetSystemCPUStatus();
-        GetSystemMemoryStatus();
-    }
+    GetSystemCPUStatus();
+    GetSystemMemoryStatus();
 
     GetEntityBase()->GetFunction()->ResetTimer(TIMER_HARDWARE_CHECK, hardwareCheckTime);
 }
 
 void ResourceWatcherFSM::DiskCheckTimer(void* pData)
 {
-    if (diskCheckFlag > 0) {
-        GetSystemDiskStatus();
-    }
-
+    GetSystemDiskStatus();
     GetEntityBase()->GetFunction()->ResetTimer(TIMER_DISK_CHECK, diskCheckTime);
 }
 

+ 53 - 13
Module/mod_ResourceWatcher/ResourceWatcherFSM.h

@@ -46,6 +46,19 @@ using namespace std;
 #define SYSVAR_FRAMEWORK_FIRST_BOOT_YES "Y"
 #define SYSVAR_FRAMEWORK_FIRST_BOOT_NO  "N"
 
+//硬件信息搜集参数  
+#define DEFAULT_HARDWARE_CHECK_TIME 60 * 1000 //CPU、内存扫描默认间隔,1分钟
+#define TIMER_HARDWARE_CHECK 2
+//硬盘扫描
+#define DEFAULT_DISK_CHECK_TIME 4 * 60 * 60 * 1000 //硬盘默认4小时扫描一次
+#define TIMER_DISK_CHECK 3
+//保留版本数目
+#define DEFAULT_VERSION_SAVED_COUNT 5
+#define MAX_VERSION_PATH 256
+//一天的秒数,用于计算文件时间
+const int SECONDS_OF_DAY = 60 * 60 * 24;
+const int VIDEO_DEFAULT_BACKDAYS = 30;
+
 enum EvtType
 {
 	USER_EVT_RUN = EVT_USER + 1
@@ -84,6 +97,30 @@ struct CInstallInfoEx : public CInstallInfo
 	}
 };
 
+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;
+};
+
 #ifdef RVC_OS_LINUX
 //chenjilin hardware change
 typedef struct CPUInfoStruct
@@ -240,6 +277,7 @@ private:
 
     BOOL checkActiveBefore;
 	BOOL firstMpage;
+	BOOL forceFileOpt;
 
 	std::vector<std::string> keyUserlist;
 	std::vector<std::string> keyPublist;
@@ -279,7 +317,7 @@ public:
 	void CenterSettingDelete();
 	BOOL DeleteVersionPackage();
 	void DeleteVideoFiles();
-	int ProcessFileDelete(LPCTSTR lpszPath, int& nDelSucCnt, int& nDelFailedCnt, bool delDir, unsigned int saveBackDay = 0);
+	int ProcessFileDelete(CSimpleStringA rtaCode, LPCTSTR lpszPath, int& nDelSucCnt, int& nDelFailedCnt, bool delDir, unsigned int saveBackDay = 0);
 
     BOOL DetectIsFirstRunAtBoot();
 
@@ -447,24 +485,26 @@ struct AggerateAutoStatTask : public ITaskSp
 #endif // RVC_OS_LINUX
 
 //终端版本默认的自动清理策略
-struct AutoDeleteFilesTask : public ITaskSp
+struct DiskAndFilesTask : public ITaskSp
 {
 	ResourceWatcherFSM* m_pFSM;
-	AutoDeleteFilesTask(ResourceWatcherFSM* pFSM) : m_pFSM(pFSM) {}
+	int checkTime;
+	bool flag = false;
+	DiskAndFilesTask(ResourceWatcherFSM* pFSM) : m_pFSM(pFSM) {}
 	void Process()
 	{
 		m_pFSM->AutoDeleteFiles();
-	}
-};
-
-//通过集中配置执行额外的清理策略
-struct CenterSettingDeleteTask : public ITaskSp
-{
-	ResourceWatcherFSM* m_pFSM;
-	CenterSettingDeleteTask(ResourceWatcherFSM* pFSM) : m_pFSM(pFSM) {}
-	void Process()
-	{
 		m_pFSM->CenterSettingDelete();
+
+		if (flag)
+		{
+			m_pFSM->GetSystemDiskStatus(); //仅启动时检测一次硬盘状态即可
+
+			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!");
+		}
 	}
 };
 

+ 0 - 1
Module/mod_ResourceWatcher/mod_ResourceWatcher.h

@@ -160,7 +160,6 @@ public:
 		}
 
 #if defined(RVC_OS_WIN)
-
 		ReadFileContent();
 		ReadFileInfo();
 #endif //RVC_OS_WIN

+ 11 - 4
Module/mod_SalesRecorder/mod_SalesRecorder.cpp

@@ -691,7 +691,7 @@ void CSalesRecorderEntity::OnSysVarEvent( const char *pszKey, const char *pszVal
 {
 	if (_stricmp(pszKey, SYSVAR_CAMERASTATE) == 0)
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("OnSysVarEvent Key = %s, Value = %s.", pszKey, pszValue);
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("OnSysVarEvent Key = %s, Value = %s.", pszKey, pszValue);
 		m_iCameraState = pszValue[0]; 
 		if (pszValue[0] == 'E')
 		{
@@ -704,7 +704,7 @@ void CSalesRecorderEntity::OnSysVarEvent( const char *pszKey, const char *pszVal
 	}
 	else if (_stricmp(pszKey, SYSVAR_ACTIVETRACKINGCAMERA) == 0)
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("OnSysVarEvent Key = %s, Value = %s.", pszKey, pszValue);
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("OnSysVarEvent Key = %s, Value = %s.", pszKey, pszValue);
 		if (m_iCameraState == 'N')
 		{
 			if (pszValue[0] == 'E')
@@ -1697,7 +1697,7 @@ ErrorCodeEnum CSalesRecorderEntity::AddToSalesRecordList(const char* videopath,
 
 	item->file_name = strfilename;
 	
-	m_vRecordList.push_back(*item);
+	m_vRecordList.push_back(item);
 
 	Error = Error_Succeed;
 
@@ -1728,7 +1728,7 @@ ErrorCodeEnum CSalesRecorderEntity::PostSalesRecordInfos()
 	}
 
 	video_params.strRecordID = m_SalesVideoName + strlen(RVC_SALES_RECORD_SUFFIX);
-	for (vector<record_item_t>::iterator it = m_vRecordList.begin(); it < m_vRecordList.end(); ++it) {
+	for (vector<record_item_t*>::iterator it = m_vRecordList.begin(); it < m_vRecordList.end(); ++it) {
 		video_params.vRecordList.push_back(*it);
 	}
 
@@ -1742,6 +1742,13 @@ ErrorCodeEnum CSalesRecorderEntity::PostSalesRecordInfos()
 		LogWarn(Severity_Middle, Error_Exception, LOG_EVT_POST_SALESRECORD_INFO_FAILED, strErrorMsg.GetData());
 	}
 
+	for (vector<record_item_t*>::iterator it = m_vRecordList.begin(); it < m_vRecordList.end(); ++it) {
+		if (NULL != *it) {
+			delete* it;
+			*it = NULL;
+		}
+	}
+
 	m_vRecordList.clear();
 
 	return Error;

+ 1 - 1
Module/mod_SalesRecorder/mod_SalesRecorder.h

@@ -200,7 +200,7 @@ namespace SalesRecorder {
 		int m_iHttpTimeOut;
 		CSimpleStringA m_strAppVersion;
 		CSimpleStringA m_strTerminalId;
-		vector<record_item_t> m_vRecordList;
+		vector<record_item_t*> m_vRecordList;
 		eRvcBusinessStatus m_eBusinessStatus;
 		bool m_bEncFlag;
 		int m_iRemoteRecordType;

+ 7 - 0
Module/mod_UpgradeMgr/UpgradeTaskFSM.cpp

@@ -6482,6 +6482,13 @@ unsigned int CUpgradeTaskFSM::s2_on_event(FSMEvent* event)
 				}else if(m_currentTask.cPendingState=="S"){
 					//加入切换标志,用于切换时判断是否是切换进入的流程。
 					m_bSwitchFlag = true;
+					//是否是升级适配器需要根据运行时字段进行赋值
+					if (m_currentTask.depNewVersion.IsNullOrEmpty()) {
+						m_TempDepUpgradeFlag = false;
+					}
+					else {
+						m_TempDepUpgradeFlag = true;
+					}
 					return 6;//切换
 				}else{
 					//无效状态

+ 210 - 238
Module/mod_accessauth/AccessAuthFSM.cpp

@@ -6,8 +6,8 @@
 #include  <stdio.h>
 #include  <stdlib.h>
 #include "fileutil.h"
+#include "iniutil.h"
 #include "CommEntityUtil.hpp"
-#include "CommEntityRestful.hpp"
 #include "SpUtility.h"
 #include "comm.h"
 #include "PinPad_client_g.h"
@@ -23,6 +23,10 @@ using namespace PinPad;
 #include <ws2tcpip.h>
 #include <Winsock2.h>
 #include <algorithm>
+#include "WMIDeviceQuery.h"
+#include <WinCrypt.h>
+#include <Strsafe.h>
+#include "DeviceBaseClass.h"
 #pragma comment(lib, "IPHLPAPI.lib")
 #define ALLOW_MULTI_NETWORKD_CARDS
 #endif // RVC_OS_WIN
@@ -128,20 +132,8 @@ struct TimeSynTask : ITaskSp
 		CSystemStaticInfo si;
 		m_fsm->GetEntityBase()->GetFunction()->GetSystemStaticInfo(si);
 
-		struct TimeSynReqStructJson
-		{
-			std::string terminalNo;
-			int curTime;
-			JSONCONVERT2OBJECT_MEMEBER_REGISTER(terminalNo, curTime)
-		} timeSyncReq;
-		struct TimeSyncAnsStructJson
-		{
-			int timeDiff;
-			int authVersion;
-			std::string sessionKey;
-			std::string reserved;
-			JSONCONVERT2OBJECT_MEMEBER_REGISTER(timeDiff, authVersion, sessionKey, reserved)
-		}timeSyncAns;
+		CSessionkeySynReq timeSyncReq;
+		CSessionkeySynAns timeSyncAns;
 
 		timeSyncReq.terminalNo = si.strTerminalID.GetData();
 		timeSyncReq.curTime = CSmallDateTime::GetNow().GetTime64();
@@ -256,7 +248,8 @@ struct UpdateWKTask : ITaskSp
 		{
 			m_fsm->doWarnMsg(ERROR_ACCESSAUTH_CONNECT_ACS,
 				GetOutPutStr("%s", "连接总行ACS准入服务失败(UpdateWKTask).").c_str(), true);
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5212")("UpdateWKTask Connect Failed.");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5212").setLogCode(AccessAuthService_LogCode_UpdateWK)
+				("UpdateWKTask Connect Failed.");
 
 			FSMEvent* pEvent = new FSMEvent(CAccessAuthFSM::Event_ReqTokenCancel);
 			m_fsm->PostEventFIFO(pEvent);
@@ -264,26 +257,8 @@ struct UpdateWKTask : ITaskSp
 			return;
 		}
 		
-		struct UpdateWKReq
-		{
-			std::string terminalNo;
-			std::string encRandom;
-			string tpkKeyCheck; //tpk密钥校验值
-			string edkKeyCheck; //edk密钥校验值
-			string keyIndex; //密钥序号
-			JSONCONVERT2OBJECT_MEMEBER_REGISTER(terminalNo, encRandom, tpkKeyCheck, edkKeyCheck, keyIndex)
-		} updateWKReq;
-
-		struct UpdateWKAns
-		{
-			string tmk;
-			string tpk;
-			string edk;
-			string tpkKeyCheck; //密钥校验值
-			string edkKeyCheck; //edk密钥校验值
-			string keyIndex; //密钥序号
-			JSONCONVERT2OBJECT_MEMEBER_REGISTER(tmk, tpk, edk, tpkKeyCheck, edkKeyCheck, keyIndex)
-		} updateWKAns;
+		CAccessAuthUpdateWKReq updateWKReq;
+		CAccessAuthUpdateWKAns updateWKAns;
 
 		updateWKReq.terminalNo = si.strTerminalID.GetData();
 		auto tmkpair = m_entity->GenerateTmkToKMC();//first是加密的,seconde是没加密的
@@ -308,14 +283,16 @@ struct UpdateWKTask : ITaskSp
 			}
 			else
 			{
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Get keyChek && keyIndex failed.");
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode(AccessAuthService_LogCode_UpdateWK)("Get keyChek && keyIndex failed.");
+				return;
 			}
 
 			pPinPad->GetFunction()->CloseSession();
 		}
 		else
 		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("connect to pinpad failed.error code:%d", errRc);
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode(AccessAuthService_LogCode_UpdateWK)("connect to pinpad failed.error code:%d", errRc);
+			return;
 		}
 
 		HttpClientResponseResult result;
@@ -339,22 +316,26 @@ struct UpdateWKTask : ITaskSp
 			if (!responseStatus.IsOperatedOK()) {
 				m_fsm->doWarnMsg(ERR_ACCESSAUTH_UPDATE_WK,
 					GetOutPutStr("%s%s%s%s", "UpdateWKTask", responseStatus.errorCode.c_str(), "message", responseStatus.errorMsg.c_str()).c_str(), true);
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode(AccessAuthService_LogCode_UpdateWK)("UpdateWK service failed.");
 				return;
 			}
 			SP::Module::Restful::ExtractDataFromDebranchResponse(result.content, updateWKAns);
 
 			DWORD rc = m_entity->LoadKeysToPinPadACS(tmkpair.second, updateWKAns.tpk, updateWKAns.edk, updateWKAns.keyIndex, updateWKAns.tpkKeyCheck, updateWKAns.edkKeyCheck);
 			if (rc == Error_Succeed) {
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode(AccessAuthService_LogCode_UpdateWK)("UpdateWK suc.");
 				return;
 			}
 			else {
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("UpdateWKTask 密钥加载失败,请检查密码键盘连接。 error = %08X", rc);
+				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setLogCode(AccessAuthService_LogCode_UpdateWK)
+					("UpdateWKTask 密钥加载失败,请检查密码键盘连接。 error = %08X", rc);
 			}
 		}
 		else {
 			m_fsm->doWarnMsg(ERROR_ACCESSAUTH_CONNECT_ACS,
 				GetOutPutStr("%s%s", "连接总行ACS准入服务失败(UpdateWKTask).", result.WhatError().c_str()).c_str(), true);
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5212")("UpdateWKTask Connect Failed.");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5212").setLogCode(AccessAuthService_LogCode_UpdateWK)
+				("UpdateWKTask Connect Failed.");
 	}
 
 	UpdateWKRetError:
@@ -392,46 +373,16 @@ struct GetTokenTask : ITaskSp
 			return;
 		}
 
-		struct GetTokenReq
-		{
-			string installVersion;//终端版本(新加字段)
-			string terminalCharacter;
-			string terminalNo;
-			string sessionTempPubKey;
-			string encTerminalInfo;
-			string publicKeySM;
-			string pinPadID;
-			string existPinPad;
-			JSONCONVERT2OBJECT_MEMEBER_REGISTER(installVersion, terminalCharacter, terminalNo,
-				sessionTempPubKey, encTerminalInfo, publicKeySM, pinPadID, existPinPad)
-		} getTokenReqJson;
-
-		struct AccessTokenJson
-		{
-			string enToken;
-			string retHash;
-			JSONCONVERT2OBJECT_MEMEBER_REGISTER(enToken, retHash)
-		};
-		struct SharedKeyJson
-		{
-			string enToken;
-			string sharedSK;
-			string retHash;
-			JSONCONVERT2OBJECT_MEMEBER_REGISTER(enToken, sharedSK, retHash)
-		};
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("encTerminalInfo: %s", getTokenReq.encTerminalInfo.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("sessionTempPubKey:%s", getTokenReq.sessionTempPubKey.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("terminalNo: %s", getTokenReq.terminalNo.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("terminalVersion: %s", getTokenReq.terminalVersion.c_str());
 
-		struct GetTokenAns
-		{
-			AccessTokenJson accessToken;
-			SharedKeyJson sharedKey;
-			bool flag;
-			string warnMessage;
-			JSONCONVERT2OBJECT_MEMEBER_REGISTER(accessToken, sharedKey, flag, warnMessage)
-		} getTokenAns;
+		CAccessAuthGetTokenAns getTokenAns;
 
 		HttpClientResponseResult result;
 		HttpClientRequestConfig config(HttpRequestMethod::POST, m_fsm->GetmAccessAuthHost().GetData(), &SpGetToken);
-		config.SetChildUri("/api/v3/access");
+		config.SetChildUri("/api/v4/access");
 
 		if (m_fsm->containsChinese(m_fsm->GetmAccessAuthHost().GetData()))
 		{
@@ -445,23 +396,10 @@ struct GetTokenTask : ITaskSp
 			return;
 		}
 
-		getTokenReqJson.installVersion = getTokenReq.installVersion;
-		getTokenReqJson.terminalCharacter = getTokenReq.terminalCharacter;
-		getTokenReqJson.terminalNo = getTokenReq.terminalNo;
-		getTokenReqJson.sessionTempPubKey = getTokenReq.sessionTempPubKey;
-		getTokenReqJson.encTerminalInfo = getTokenReq.encTerminalInfo;
-		getTokenReqJson.publicKeySM = getTokenReq.publicKeySM;
-		getTokenReqJson.pinPadID = getTokenReq.pinPadID;
-		getTokenReqJson.existPinPad = getTokenReq.existPinPad;
-
-
-		SP::Module::Restful::FulfillRequestJsonBody(&config, getTokenReqJson);
-
-		std::string test;
-		test = config.GetRequestUri();
-
+		SP::Module::Restful::FulfillRequestJsonBody(&config, getTokenReq);
 		RestfulClient client = RestfulClient::getInstance();
 		config.PreDo();
+
 		client.Do(&config, &result);
 		if (result.ResponseOK()) {
 			SP::Module::Restful::CommResponseJson responseStatus;
@@ -476,10 +414,12 @@ struct GetTokenTask : ITaskSp
 			{
 				CSimpleStringA tmsg = CSimpleStringA::Format("{\"errcode\": \"%s\", \"message\": %s}",
 					responseStatus.errorCode.c_str(), getTokenAns.warnMessage.c_str());
+				m_entity->SetAuthErrMsg(tmsg.GetData());
 				m_fsm->GetEntityBase()->GetFunction()->SetSysVar("AuthErrMsg", tmsg.GetData(), true);
 			}
 			else
 			{
+				m_entity->SetAuthErrMsg("");
 				m_fsm->GetEntityBase()->GetFunction()->SetSysVar("AuthErrMsg", "", true);
 			}
 
@@ -519,25 +459,13 @@ struct GetTokenTask : ITaskSp
 			}
 
 			m_fsm->AuthLogWarn(result, config.GetRequestUri(), "获取准入token");
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetTokenTask Connect Failed.");
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetTokenTask Connect Failed. [%s]", result.WhatError().c_str());
 		}
 		FSMEvent* pEvent = new FSMEvent(CAccessAuthFSM::Event_ReqTokenFail);
 		m_fsm->PostEventFIFO(pEvent);
 	}
 };
 
-struct InitDeviceTask :public ITaskSp
-{
-	CAccessAuthFSM* m_fsm;
-	InitDeviceReq m_req;
-	InitDeviceTask(CAccessAuthFSM* fsm, InitDeviceReq req) :m_fsm(fsm), m_req(req) {}
-
-	void Process()
-	{
-		return;
-	}
-};
-
 
 #ifdef RVC_OS_LINUX
 bool isChineseChar(const char* p) {
@@ -594,6 +522,8 @@ void CAccessAuthFSM::doWarnMsg(int errReason, std::string errMsg, bool bNeedEven
 #endif // RVC_OS_WIN
 	if (bNeedEvent) 
 	{
+		auto pEntity = (CAccessAuthEntity*)m_pEntity;
+		pEntity->SetAuthErrMsg(fullErrMsg.c_str());
 		const ErrorCodeEnum ec = m_pEntity->GetFunction()->SetSysVar("AuthErrMsg", fullErrMsg.c_str(), true);
 		if (ec != Error_Succeed) {
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Update SysVar failed: 0x%X", ec);
@@ -601,6 +531,7 @@ void CAccessAuthFSM::doWarnMsg(int errReason, std::string errMsg, bool bNeedEven
 		
 		if (errReason == ERR_ACCESSAUTH_SERVICE_FAILED)
 		{
+			pEntity->SetAuthErrMsg(errMsg.c_str());
 			m_pEntity->GetFunction()->SetSysVar("AuthErrMsg", errMsg.c_str(), true);
 			LogEvent(Severity_Middle, ERR_ACCESSAUTH_SERVICE_FAILED, errMsg.c_str());
 		}
@@ -722,6 +653,8 @@ void CAccessAuthFSM::s3_on_entry()
 {
 	LOG_FUNCTION();
 	CSystemStaticInfo si;
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode(AccessAuthService_LogCode_Regist)("终端准入成功");
+
 	m_pEntity->GetFunction()->GetSystemStaticInfo(si);
 	if (si.InstallVersion.ToString().IsNullOrEmpty()) {
 		LogWarn(Severity_Low, Error_Debug, AccessAuthorization_UserErrorCode_Start, "终端准入成功");
@@ -889,7 +822,6 @@ DWORD CAccessAuthFSM::HandleGetToken(BYTE* enToken1, BYTE* sharedKey, BYTE* enTo
 		{
 			pEntity->SetAuthErrMsg("保存令牌失败");
 			pEntity->GetFunction()->SetSysVar("AuthErrMsg", "保存令牌失败", true);
-			pEntity->SetAuthErrMsg("保存令牌失败");
 			doWarnMsg(ERR_ACCESSAUTH_SAVE_TOKEN, "保存令牌失败", true);
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5208")(GetOutPutStr("%s%08X", "SaveTokenAndSharedSK", rc).c_str());
 		}
@@ -897,112 +829,64 @@ DWORD CAccessAuthFSM::HandleGetToken(BYTE* enToken1, BYTE* sharedKey, BYTE* enTo
 	return rc;
 }
 
-DWORD CAccessAuthFSM::GetEncTerminalInfo(CBlob& encInfo)
+DWORD CAccessAuthFSM::GetEncTerminalInfoWithKey(CBlob& encInfo, BYTE* key)
 {
 	LOG_FUNCTION();
-	RequestTokenReq1 req1;
-	memset(&req1, 0, sizeof(req1));
-	BYTE* pBuf = (BYTE*)&req1.encTerminalInfo;
-
-	// 设置长度
-	sprintf((char*)pBuf, "%.4d", sizeof(RequestTokenInfo));
-
-	RequestTokenInfo* pInfo = (RequestTokenInfo*)(pBuf + 4);
-
-	CSystemStaticInfo si;
-	m_pEntity->GetFunction()->GetSystemStaticInfo(si);
-	strncpy(pInfo->szTerminalNo, (const char*)si.strTerminalID, sizeof(pInfo->szTerminalNo) - 1);
-
-	CSimpleStringA strPinPadID = "", strDeviceID = "";
-	bool isPinPadMac = false, bPinPadOnline = false;
-	int nRet = ((CAccessAuthEntity*)m_pEntity)->GetPinPadIDAndDeviceID(strPinPadID, strDeviceID, isPinPadMac, bPinPadOnline);
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetPinPadIDAndDeviceID ret: %d, PinPadID: %s, DeviceID: %s", nRet, strPinPadID.GetData(), strDeviceID.GetData());
-	if (nRet == 2 || nRet == 3) {
-		strncpy(pInfo->szPadDeviceID, (const char*)strDeviceID, sizeof(pInfo->szPadDeviceID) - 1);
-	}
-
-	strncpy(pInfo->szMachineType, (const char*)si.strMachineType, sizeof(pInfo->szMachineType) - 1);
-
-	// 设备版本,低两位为小版本号,高两位为大版本号 Binary	4
-	DWORD ver32 = si.MachineVersion.GetVersion32();
-	for (int i = 0; i < 4; i++) {
-		pInfo->machineVersion[3 - i] = ((BYTE*)&ver32)[i];
-	}
-
-	//	安装版本,其中包含软件框架版本	binary	8
-	__int64 ver64 = si.InstallVersion.GetVersion64();
-	for (int i = 0; i < 8; i++) {
-		pInfo->installVersion[7 - i] = ((BYTE*)&ver64)[i];
-	}
-#ifdef RVC_OS_WIN	
-	hostent* ent = gethostbyname(NULL);
-	if (ent && ent->h_addr_list[0] != NULL) {
-		int i = 0;
-		for (; ent->h_addr_list[i] != NULL; ++i) {
-			struct in_addr* in = (struct in_addr*)ent->h_addr_list[i];
-			//99开头行内办公网,10开头行内业务网。规范出自《招商银行总行网络规范汇编(2017年版).pdf》
-			if (in->S_un.S_un_b.s_b1 == 99 || in->S_un.S_un_b.s_b1 == 10)
-				break;
-		}
-
-		if (ent->h_addr_list[i] == NULL)
-			i = 0;
-
-		auto in = (struct in_addr*)ent->h_addr_list[i];
-
-		pInfo->ip[0] = in->S_un.S_un_b.s_b1;
-		pInfo->ip[1] = in->S_un.S_un_b.s_b2;
-		pInfo->ip[2] = in->S_un.S_un_b.s_b3;
-		pInfo->ip[3] = in->S_un.S_un_b.s_b4;
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ip:%d.%d.%d.%d", pInfo->ip[0], pInfo->ip[1], pInfo->ip[2], pInfo->ip[3]);
-	}
-#else
-	char ip[32] = { 0 };
-	if (getIPFromLinux(ip)) DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Get IP From Linux Error ex.");
-	else {
-		if (ip2byte(ip, pInfo->ip)) DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Ip 2 Byte Error");
-		else {
-			for (int i = 0; i < 4; i++) {
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("ip[%d]=%d", i, (int)pInfo->ip[i]);
-			}
-		}
-	}
-#endif //#ifdef RVC_OS_WIN
-	strncpy(pInfo->szSites, si.strSite, sizeof(pInfo->szSites) - 1);
-
-	si.EnrolGPS.GetBinaryLongitude(&pInfo->currentGPS[0]);
-	si.EnrolGPS.GetBinaryLatitude(&pInfo->currentGPS[4]);
+	ErrorCodeEnum rc = Error_Succeed;
+	CSimpleStringA ip, mac, pinpadModel, cpuId, mainBoardId, hardDiskId, osType, osVersion;
+	std::map<std::string, std::string> termInfo;
+	
+	auto pEntity = ((CAccessAuthEntity*)m_pEntity);
+	bool bPinPadOnline = false;
+	pEntity->GetPinPadModel(pinpadModel, bPinPadOnline);
+	
+	GetIPandMac(ip, mac);
+	osVersion = GetOsVersion();
 
-	CSimpleStringA ts;
-	DWORD rc = m_pEntity->GetFunction()->GetSysVar("TerminalStage", ts);
-	if (rc != Error_Succeed) 
+	while (1)
 	{
-		string outStr = GetOutPutStr("%s%08X%s%s", "GetSysVar", rc, "TerminalStage", ts.GetData());
-		doWarnMsg(ERR_ACCESSAUTH_GET_SYS_VAR, outStr.c_str());
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(outStr.c_str());
-		return ERR_ACCESSAUTH_GET_SYS_VAR;
+		if (pEntity->GetTermSysInfo() == -1)
+			return false;
+		else if (pEntity->GetTermSysInfo() == 1)
+			break;
+		else if (pEntity->GetTermSysInfo() == 0)
+			Sleep(1000);//oiltmp@20220917 之前的逻辑是不跳出去,现在要加么?暂时不加,连调用系统接口都有问题,让其他逻辑处理
 	}
-	assert(ts.GetLength() >= 1);
-	pInfo->chTerminalState = ts[0];
 
-	CSimpleStringA rs;
-	rc = m_pEntity->GetFunction()->GetSysVar("RunState", rs);
-	if (rc != Error_Succeed) 
-	{
-		string outStr = GetOutPutStr("%s%08X%s%s", "GetSysVar", rc, "RunState", rs.GetData());
-		doWarnMsg(ERR_ACCESSAUTH_GET_SYS_VAR, outStr.c_str());
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(outStr.c_str());
-		return ERR_ACCESSAUTH_GET_SYS_VAR;
-	}
-	assert(rs.GetLength() >= 1);
-	pInfo->chRunState = rs[0];
+#ifdef RVC_OS_WIN
+	termInfo["osType"] = "Windows";
+#else
+	termInfo["osType"] = "UOS";
+#endif // RVC_OS_WIN
+	termInfo["osVersion"] = osVersion.GetData();
+	termInfo["ip"] = ip.GetData();
+	termInfo["mac"] = mac.GetData();
+	termInfo["cpuId"] = pEntity->m_cpuId.GetData();
+	termInfo["mainBoardId"] = pEntity->m_mainBoardId.GetData();
+	termInfo["hardDiskId"] = pEntity->m_hardDiskId.GetData();
+	termInfo["pinpadModel"] = pinpadModel.GetData();
+
+	std::pair<bool, std::string> strResult;
+	strResult = generateJsonStr(termInfo);
+
+	char* pBuf = new char[2048];
+	int len = 0;
+#ifdef RVC_OS_WIN
+	string tmpStr = strResult.second;
+	SP::Module::Util::ConvertGBKToUtf8(tmpStr);
+	strcpy(pBuf, tmpStr.c_str()); //GBK转UTF8
+	len = tmpStr.size();
+#else
+	strcpy(pBuf, strResult.second.c_str());
+	len = strResult.second.size();
+#endif // RVC_OS_WIN
 
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("HardWareInfo: %s", pBuf);
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("HardWareInfo size: %d", len);
 
 	CBlob raw;
-	auto pEntity = ((CAccessAuthEntity*)m_pEntity);
-	// 使用会话密钥加密
-	raw.Refer(pBuf, sizeof(RequestTokenInfo) + 4);
-	rc = pEntity->EncryptDataWithSessionKey(raw, encInfo);
+	raw.Refer(pBuf, len);
+	rc = pEntity->EncryptDataWithKey(raw, encInfo, key);
 
 	if (rc != Error_Succeed) 
 	{
@@ -1052,26 +936,14 @@ DWORD CAccessAuthFSM::GetTokenReq(CAccessAuthGetTokenReq* getTokenReq)
 	CSystemStaticInfo si;
 	pEntity->GetFunction()->GetSystemStaticInfo(si);
 
-	getTokenReq->installVersion = si.InstallVersion.ToString();
-
-	BYTE fingerPrint[32] = { 0 };
-	int nBufLen = sizeof(fingerPrint);
-	if (!pEntity->GetTerminalFingerPrint(fingerPrint, nBufLen)) 
-	{
-		doWarnMsg(ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
-			GetOutPutStr("%s%s", "GetTerminalFingerPrint", "False").c_str());
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5203")
-			(GetOutPutStr("%s%s", "GetTerminalFingerPrint", "False").c_str());
-		return ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT;
-	}
-	char tmp[256] = { 0 };
-	char* fingerPrintHex = Str2Hex((char*)fingerPrint, 64);
-	memcpy(tmp, fingerPrintHex, 64);
-	getTokenReq->terminalCharacter = tmp;
-	delete fingerPrintHex;
+	getTokenReq->terminalVersion = si.InstallVersion.ToString();
+	getTokenReq->terminalNo = si.strTerminalID.GetData();
 
 	CBlob encInfo;
-	if ((rc = GetEncTerminalInfo(encInfo)) != Error_Succeed) 
+	// 使用会话密钥加密
+	char sessionKey[KEY_SIZE] = { 0 };
+	memcpy(sessionKey, pEntity->m_AuthSessionKey, KEY_SIZE);
+	if ((rc = GetEncTerminalInfoWithKey(encInfo, (BYTE*)sessionKey)) != Error_Succeed)
 	{
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetEncTerminalInfo failed:%d", rc);
 		return rc;
@@ -1079,23 +951,14 @@ DWORD CAccessAuthFSM::GetTokenReq(CAccessAuthGetTokenReq* getTokenReq)
 	char* pTmp = Str2Hex((char*)encInfo.m_pData, encInfo.m_iLength);
 	getTokenReq->encTerminalInfo = pTmp;
 	delete pTmp;
-	getTokenReq->terminalNo = si.strTerminalID.GetData();
-	string tmpStr = "";
-	if ((rc = GetTmk(tmpStr)) != Error_Succeed) return rc;
-	getTokenReq->sessionTempPubKey = tmpStr;
 
-	CSimpleStringA strPinPadID = "", strDeviceID = "";
-	bool isPinPadMac = false, bPinPadOnline = false;
-	int nRet = ((CAccessAuthEntity*)m_pEntity)->GetPinPadIDAndDeviceID(strPinPadID, strDeviceID, isPinPadMac, bPinPadOnline);
-	getTokenReq->pinPadID = strPinPadID.GetData();
-	if (pEntity->HasPinPad()) 
-	{
-		getTokenReq->existPinPad = "1";
-	} 
-	else 
+	string tmpStr = "";
+	if ((rc = GetTmk(tmpStr)) != Error_Succeed) 
 	{
-		getTokenReq->existPinPad = "0";
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetTmk failed:%d", rc);
+		return rc;
 	}
+	getTokenReq->sessionTempPubKey = tmpStr;
 	return rc;
 }
 
@@ -1103,9 +966,9 @@ void CAccessAuthFSM::UpdateWK()
 {
 	LOG_FUNCTION();
 	auto pEntity = ((CAccessAuthEntity*)m_pEntity);
-	CSimpleStringA strPinPadID = "", strDeviceID = "";
-	bool isPinPadMac = false, bPinPadOnline = false;
-	pEntity->GetPinPadIDAndDeviceID(strPinPadID, strDeviceID, isPinPadMac, bPinPadOnline);
+	CSimpleStringA strPinPadModel = "";
+	bool bPinPadOnline = false;
+	pEntity->GetPinPadModel(strPinPadModel, bPinPadOnline);
 	if (bPinPadOnline) {
 		CSmartPointer<UpdateWKTask> updateWKTask = new UpdateWKTask(this, pEntity);
 		GetEntityBase()->GetFunction()->PostThreadPoolTask(updateWKTask.GetRawPointer());
@@ -1149,6 +1012,7 @@ void CAccessAuthFSM::AuthLogWarn(const T& ret, const string& url, const string&
 			msg = CSimpleStringA::Format("%s失败,请尝试重启应用", method.c_str());
 		}
 		doWarnMsg(acsErrCode, msg.GetData(), bNeedEvent);
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode(AccessAuthService_LogCode_Regist)(msg.GetData());
 	}
 	else {
 		SP::Module::Restful::CommResponseJson responseStatus;
@@ -1156,7 +1020,8 @@ void CAccessAuthFSM::AuthLogWarn(const T& ret, const string& url, const string&
 		msg = CSimpleStringA::Format("{\"errcode\": \"%s\", \"message\": %s}",
 			responseStatus.errorCode.c_str(), responseStatus.errorMsg.c_str());
 		doWarnMsg(ERR_ACCESSAUTH_SERVICE_FAILED, msg.GetData(), bNeedEvent);
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA520A")("准入服务端报错");
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA520A").setLogCode(AccessAuthService_LogCode_Regist)
+			(msg.GetData());
 	}
 }
 
@@ -1167,3 +1032,110 @@ void CAccessAuthFSM::GetNetMsg(SpReqAnsContext<AccessAuthService_GetNetMsg_Req,
 
 	ctx->Answer(Error_Succeed);
 }
+
+CSimpleStringA CAccessAuthFSM::GetOsVersion()
+{
+	std::map<std::string, std::string> errInfo;
+	CSimpleStringA errMsg;
+	errInfo["errcode"] = "RTA5219";
+	errInfo["msg"] = "调用系统api获取操作系统版本失败";
+
+#if defined(RVC_OS_WIN)
+	CSimpleStringA runInfoPath;
+	ErrorCodeEnum eErr = GetEntityBase()->GetFunction()->GetPath("runinfo", runInfoPath);
+	if (eErr != Error_Succeed) {
+		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("GetPath runinfo error=%s.", SpStrError(eErr));
+		errInfo["getLastErr"] = GetLastError();
+		errMsg = generateJsonStr(errInfo).second.c_str();
+		return errMsg;
+	}
+	runInfoPath += "\\runcfg\\osverion";
+	ifstream is;
+	is.open(runInfoPath.GetData(), ios::binary);
+	if (!is.is_open())
+	{
+		DWORD dwErr = GetLastError();
+		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("open runcfg\\osverion file failed. [%d]", dwErr);
+		errInfo["getLastErr"] = dwErr;
+		errMsg = generateJsonStr(errInfo).second.c_str();
+		return errMsg;
+	}
+	string line;
+	while (!is.eof()) {
+		getline(is, line);
+		int start = line.find("版本");
+		if (start != string::npos)
+			//return CSimpleStringA(line.substr(start + 5, line.length() - start - 7).c_str());
+			return CSimpleStringA(line.c_str());
+		else
+			continue;
+	}
+
+	errInfo["getLastErr"] = GetLastError();
+	errMsg = generateJsonStr(errInfo).second.c_str();
+	return errMsg;
+#else
+	std::map<std::string, std::string> osInfo;
+	const char filePath[] = "/etc/os-version";
+	char tmp[33];
+	memset(tmp, 0, 33);
+	inifile_read_str_s("Version", "SystemName", "unknown", tmp, 32, filePath);
+	osInfo["SystemName"] = tmp;
+	memset(tmp, 0, 33);
+	inifile_read_str_s("Version", "ProductType", "unknown", tmp, 32, filePath);
+	osInfo["ProductType"] = tmp;
+	memset(tmp, 0, 33);
+	inifile_read_str_s("Version", "MajorVersion", "unknown", tmp, 32, filePath);
+	osInfo["MajorVersion"] = tmp;
+	memset(tmp, 0, 33);
+	inifile_read_str_s("Version", "MinorVersion", "unknown", tmp, 32, filePath);
+	osInfo["MinorVersion"] = tmp;
+	memset(tmp, 0, 33);
+	inifile_read_str_s("Version", "OsBuild", "unknown", tmp, 32, filePath);
+	osInfo["OsBuild"] = tmp;
+	return generateJsonStr(osInfo).second.c_str();
+#endif
+}
+
+void CAccessAuthFSM::GetIPandMac(CSimpleStringA& ip, CSimpleStringA& mac)
+{
+	CAutoArray<SP::Module::Net::NetworkAdapterItem> netList;
+	ErrorCodeEnum rc = SP::Module::Net::GetINETMacAddresses(netList);
+	std::map<std::string, std::string> errInfo;
+	if (rc != Error_Succeed)
+	{
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Get sys netinfo failed!. rc=%d.", rc);
+		errInfo["errcode"] = "RTA5216";
+		errInfo["msg"] = "调用系统api获取ip失败";
+		errInfo["getLastErr"] = GetLastError();
+		ip = generateJsonStr(errInfo).second.c_str();
+
+		errInfo["errcode"] = "RTA5217";
+		errInfo["msg"] = "调用系统api获取mac地址失败";
+		errInfo["getLastErr"] = GetLastError();
+		mac = generateJsonStr(errInfo).second.c_str();
+
+		auto pEntity = (CAccessAuthEntity*)m_pEntity;
+		pEntity->SetAuthErrMsg("获取本地ip和mac失败");
+		return;
+	}
+
+	CSimpleStringA csMac(""), csIP(""), csDNS("");
+	for (int i = 0; i < netList.GetCount(); i++) {
+		if (!csMac.IsNullOrEmpty()) {
+			csMac += ";";
+		}
+		csMac += netList[i].mac.c_str();
+	}
+	mac = csMac;
+	
+	for (int i = 0; i < netList.GetCount(); i++) {
+		if (!csIP.IsNullOrEmpty()) {
+			csIP += ";";
+		}
+		csIP += netList[i].ip.c_str();
+	}
+	ip = csIP;
+
+	return;
+}

+ 74 - 358
Module/mod_accessauth/AccessAuthFSM.h

@@ -7,6 +7,7 @@
 #include "AccessAuthConn.h"
 #include "IHttpFunc.h"
 #include "json/json.h"
+#include "CommEntityRestful.hpp"
 
 #ifdef RVC_OS_WIN
 ///*TODO:  (80374374@11/27/2023)*/
@@ -26,394 +27,106 @@ static void GetLocalTimeRVC(SYSTEMTIME& stTime)
 #define REFLECTION(var) #var
 #define JUAGEHTTPS(ret) (ret.m_sysCode == 200 || ret.m_sysCode == 201)
 
-#ifdef RVC_OS_WIN
-typedef struct CSessionkeySynReq : CHTTPReq {
-	string terminalNo;
-	long curTime;
-
-	string ToJson() {
-		Json::Value value;
-		value[REFLECTION(terminalNo)] = terminalNo;
-		value[REFLECTION(curTime)] = curTime;
-		Json::FastWriter writer;
-		string strData = writer.write(value);
-
-		/*DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CSessionkeySynReq")
-			("req=%s at CSessionkeySynReq", strData.c_str());*/
-
-		return strData;
-	}
+typedef struct CSessionkeySynReq
+{
+	std::string terminalNo;
+	int curTime;
+	JSONCONVERT2OBJECT_MEMEBER_REGISTER(terminalNo, curTime)
 } CSessionkeySynReq;
 
-typedef struct CSessionkeySynRet : CHTTPRet {
-	struct data {
-		long timeDiff;
-		string sessionKey;
-	} data;
-	bool Parse(string strData) {
-		/*DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CSessionkeySynRet")
-			("ret=%s at CSessionkeySynRet", strData.c_str());*/
-
-		Json::Value root;
-		Json::Reader reader;
-		reader.parse(strData, root, false);
-
-		data.timeDiff = root["data"][REFLECTION(timeDiff)].asInt();
-		data.sessionKey = root["data"][REFLECTION(sessionKey)].asString();
-		return true;
-	}
-} CSessionkeySynRet;
-
-typedef struct CAccessAuthUpdateWKReq : CHTTPReq {
-	string terminalNo;
-	string encRandom;
+typedef struct CSessionkeySynAns
+{
+	int timeDiff;
+	int authVersion;
+	std::string sessionKey;
+	std::string reserved;
+	JSONCONVERT2OBJECT_MEMEBER_REGISTER(timeDiff, authVersion, sessionKey, reserved)
+}CSessionkeySynAns;
+
+typedef struct CAccessAuthUpdateWKReq
+{
+	std::string terminalNo;
+	std::string encRandom;
 	string tpkKeyCheck; //tpk密钥校验值
 	string edkKeyCheck; //edk密钥校验值
 	string keyIndex; //密钥序号
-	string ToJson() {
-		Json::Value value;
-		value[REFLECTION(terminalNo)] = terminalNo;
-		value[REFLECTION(encRandom)] = encRandom;
-		value[REFLECTION(tpkKeyCheck)] = tpkKeyCheck;
-		value[REFLECTION(edkKeyCheck)] = edkKeyCheck;
-		value[REFLECTION(keyIndex)] = keyIndex;
-		Json::FastWriter writer;
-		string strData = writer.write(value);
-		/*DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CAccessAuthUpdateWKReq")
-			("req=%s at CAccessAuthUpdateWKReq", strData.c_str());*/
-
-		return strData;
-	}
+	JSONCONVERT2OBJECT_MEMEBER_REGISTER(terminalNo, encRandom, tpkKeyCheck, edkKeyCheck, keyIndex)
 } CAccessAuthUpdateWKReq;
 
-typedef struct CAccessAuthUpdateWKRet : CHTTPRet {
+typedef struct CAccessAuthUpdateWKAns
+{
+	string tmk;
 	string tpk;
 	string edk;
 	string tpkKeyCheck; //密钥校验值
 	string edkKeyCheck; //edk密钥校验值
 	string keyIndex; //密钥序号
+	JSONCONVERT2OBJECT_MEMEBER_REGISTER(tmk, tpk, edk, tpkKeyCheck, edkKeyCheck, keyIndex)
+} CAccessAuthUpdateWKAns;
 
-	bool Parse(string strData) {
-		Json::Value root;
-		Json::Reader reader;
-		reader.parse(strData, root, false);
-
-		tpk = root["data"][REFLECTION(tpk)].asString();
-		edk = root["data"][REFLECTION(edk)].asString();
-		tpkKeyCheck = root["data"][REFLECTION(tpkKeyCheck)].asString();
-		edkKeyCheck = root["data"][REFLECTION(edkKeyCheck)].asString();
-		keyIndex = root["data"][REFLECTION(keyIndex)].asString();
-
-		return true;
-	}
-} CAccessAuthUpdateWKRet;
-#endif // RVC_OS_WIN
-
-typedef struct CAccessAuthGetTokenReq :public CHTTPReq {
-public:
-	string installVersion;//终端版本(新加字段)
-	string terminalCharacter;
+typedef struct CAccessAuthGetTokenReq
+{
+	string terminalVersion;//终端版本(新加字段)
 	string terminalNo;
 	string sessionTempPubKey;
 	string encTerminalInfo;
-	string publicKeySM;
-	string pinPadID;
-	string existPinPad;
-
-	string ToJson() {
-#ifdef RVC_OS_WIN
-		Json::Value value;
-		value[REFLECTION(installVersion)] = installVersion;
-		value[REFLECTION(terminalCharacter)] = terminalCharacter;
-		value[REFLECTION(terminalNo)] = terminalNo;
-		value[REFLECTION(sessionTempPubKey)] = sessionTempPubKey;
-		value[REFLECTION(encTerminalInfo)] = encTerminalInfo;
-		value[REFLECTION(publicKeySM)] = publicKeySM;
-		value[REFLECTION(pinPadID)] = pinPadID;
-		value[REFLECTION(existPinPad)] = existPinPad;
-
-		Json::FastWriter writer;
-		string strData = writer.write(value);
-		/*DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CAccessAuthGetTokenReq")
-			("req=%s at CAccessAuthGetTokenReq", strData.c_str());*/
-
-		return strData;
-#else
-		RVCJson rvcJson(true);
-		rvcJson.AddStringToObject(REFLECTION(installVersion), (char*)installVersion.c_str());
-		rvcJson.AddStringToObject(REFLECTION(terminalCharacter), (char*)terminalCharacter.c_str());
-		rvcJson.AddStringToObject(REFLECTION(terminalNo), (char*)terminalNo.c_str());
-		rvcJson.AddStringToObject(REFLECTION(sessionTempPubKey), (char*)sessionTempPubKey.c_str());
-		rvcJson.AddStringToObject(REFLECTION(encTerminalInfo), (char*)encTerminalInfo.c_str());
-		rvcJson.AddStringToObject(REFLECTION(publicKeySM), (char*)publicKeySM.c_str());
-		rvcJson.AddStringToObject(REFLECTION(pinPadID), (char*)pinPadID.c_str());
-		rvcJson.AddStringToObject(REFLECTION(existPinPad), (char*)existPinPad.c_str());
-		string ret;
-		char* tmp = rvcJson.GetJsonStr();
-		ret.assign(tmp);
-		delete tmp;
-		/*DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CAccessAuthGetTokenReq")
-			("req=%s at CAccessAuthGetTokenReq", ret.c_str());*/
-		return ret;
-#endif // RVC_OS_WIN
-	}
-}CAccessAuthGetTokenReq;
-
-typedef struct CAccessAuthGetTokenRet : CHTTPRet {
-	typedef struct AccessToken {
-		string enToken;
-		string retHash;
-	} AccessToken;
-	typedef struct SharedKey {
-		string enToken;
-		string sharedSK;
-		string retHash;
-	} ShareKey;
-	struct data {
-		AccessToken accessToken;
-		SharedKey sharedKey;
-#ifdef RVC_OS_WIN
-		int flag; //0:非高故障设备,1:高故障设备
-		string warnMessage; //告警提示信息
-#endif // RVC_OS_WIN
-	} data;
-	bool Parse(string strData) {
-#ifdef RVC_OS_WIN
-		Json::Value root;
-		Json::Reader reader;
-		reader.parse(strData, root, false);
-
-		data.accessToken.enToken = root["data"][REFLECTION(accessToken)][REFLECTION(enToken)].asString();
-		data.accessToken.retHash = root["data"][REFLECTION(accessToken)][REFLECTION(retHash)].asString();
-		data.sharedKey.enToken = root["data"][REFLECTION(sharedKey)][REFLECTION(enToken)].asString();
-		data.sharedKey.sharedSK = root["data"][REFLECTION(sharedKey)][REFLECTION(sharedSK)].asString();
-		data.sharedKey.retHash = root["data"][REFLECTION(sharedKey)][REFLECTION(retHash)].asString();
-		data.flag = root["data"][REFLECTION(flag)].asInt();
-		data.warnMessage = root["data"][REFLECTION(warnMessage)].asString();
-
-		return true;
-#else
-		//Dbg("ret=%s at CAccessAuthGetTokenRet", strData.c_str());
-		if (m_userCode.compare(ACS_SUCCESS)) return true;
-		RVCJson rvcJson;
-		rvcJson.SetJson(strData.c_str());
-
-		auto dataJson = rvcJson.GetJsonValue(REFLECTION(data));
-		auto tokenJson = dataJson->GetJsonValue(REFLECTION(accessToken));
+	JSONCONVERT2OBJECT_MEMEBER_REGISTER(terminalVersion, terminalNo, sessionTempPubKey, encTerminalInfo)
+} CAccessAuthGetTokenReq;
 
-		data.accessToken.enToken = tokenJson->GetStringValue(REFLECTION(enToken));
-		data.accessToken.retHash = tokenJson->GetStringValue(REFLECTION(retHash));
-		tokenJson->Destory();
-		delete tokenJson;
-
-		auto sharedJson = dataJson->GetJsonValue(REFLECTION(sharedKey));
-
-		data.sharedKey.enToken = sharedJson->GetStringValue(REFLECTION(enToken));
-		data.sharedKey.sharedSK = sharedJson->GetStringValue(REFLECTION(sharedSK));
-		char* tmp = sharedJson->GetStringValue(REFLECTION(retHash));
-		data.sharedKey.retHash = tmp == NULL ? "" : tmp;
-
-		sharedJson->Destory();
-		delete sharedJson;
-		dataJson->Destory();
-		delete dataJson;
-
-		rvcJson.Destory();
-		return true;
-#endif // RVC_OS_WIN
-	}
-} CAccessAuthGetTokenRet;
+struct AccessTokenJson
+{
+	string enToken;
+	string retHash;
+	JSONCONVERT2OBJECT_MEMEBER_REGISTER(enToken, retHash)
+};
+struct SharedKeyJson
+{
+	string enToken;
+	string sharedSK;
+	string retHash;
+	JSONCONVERT2OBJECT_MEMEBER_REGISTER(enToken, sharedSK, retHash)
+};
 
-typedef struct CInitlizerMKReq : CHTTPReq {
-	string enrolAddr;
-	string enrolGPS;
-	string installVersion;
-	string ip;
-	string machineModel;
-	string machineType;
-	string padDeviceID;
-	string site;
+typedef struct CAccessAuthGetTokenAns
+{
+	AccessTokenJson accessToken;
+	SharedKeyJson sharedKey;
+	bool flag;
+	string warnMessage;
+	JSONCONVERT2OBJECT_MEMEBER_REGISTER(accessToken, sharedKey, flag, warnMessage)
+} CAccessAuthGetTokenAns;
+
+typedef struct CInitlizerMKReq
+{
+	string iniTerminalInfo;
+	string terminalVersion;
 	string terminalNo;
-	string factory;
-	string modal;
-	string type;
-	string version;
-	string terminalCharacter; //终端特征值(fingerPrint + fingerPrintSM)
-	string pinPadID;
 	string publicKey;
 	string user; //操作人
-	string password; //密码
 	string auth;//预留鉴权
 	int loginWay;//1表示错误页发起,需要传入登录密码;0表示用户桌面发起,不需要传入登录密码
 	string encRandom; //tmk pk加密的随机密钥
-	string tpkKeyCheck; //密钥校验值
-	string edkKeyCheck; //密钥校验值
-	string keyIndex; //密钥序号
+	string curTpkKeyCheck; //密钥校验值
+	string curEdkKeyCheck; //密钥校验值
+	string curKeyIndex; //密钥序号
 
-	string ToJson() {
-#ifdef RVC_OS_WIN
-		Json::Value value;
-		value[REFLECTION(enrolAddr)] = enrolAddr;
-		value[REFLECTION(enrolGPS)] = enrolGPS;
-		value[REFLECTION(installVersion)] = installVersion;
-		value[REFLECTION(ip)] = ip;
-		value[REFLECTION(machineModel)] = machineModel;
-		value[REFLECTION(machineType)] = machineType;
-		value[REFLECTION(padDeviceID)] = padDeviceID;
-		value[REFLECTION(site)] = site;
-		value[REFLECTION(terminalNo)] = terminalNo;
-		value[REFLECTION(factory)] = factory;
-		value[REFLECTION(modal)] = modal;
-		value[REFLECTION(type)] = type;
-		value[REFLECTION(version)] = version;
-		value[REFLECTION(terminalCharacter)] = terminalCharacter;
-		value[REFLECTION(pinPadID)] = pinPadID;
-		value[REFLECTION(publicKey)] = publicKey;
-		value[REFLECTION(user)] = user;
-		value[REFLECTION(password)] = password;
-		value[REFLECTION(auth)] = auth;
-		value[REFLECTION(loginWay)] = loginWay;
-		value[REFLECTION(encRandom)] = encRandom;
-		value[REFLECTION(tpkKeyCheck)] = tpkKeyCheck;
-		value[REFLECTION(edkKeyCheck)] = edkKeyCheck;
-		value[REFLECTION(keyIndex)] = keyIndex;
-		Json::FastWriter writer;
-		string strData = writer.write(value);
+	JSONCONVERT2OBJECT_MEMEBER_REGISTER(iniTerminalInfo, terminalVersion, terminalNo, publicKey, user, auth,
+		loginWay, encRandom, curTpkKeyCheck, curEdkKeyCheck, curKeyIndex)
 
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CInitlizerMKReq")("CInitlizerMKReq:%s", strData.c_str());
-
-		return strData;
-#else
-		RVCJson rvcJson(true);
-		rvcJson.AddStringToObject(REFLECTION(enrolAddr), (char*)enrolAddr.c_str());
-		rvcJson.AddStringToObject(REFLECTION(enrolGPS), (char*)enrolGPS.c_str());
-		rvcJson.AddStringToObject(REFLECTION(installVersion), (char*)installVersion.c_str());
-		rvcJson.AddStringToObject(REFLECTION(ip), (char*)ip.c_str());
-		rvcJson.AddStringToObject(REFLECTION(machineModel), (char*)machineModel.c_str());
-		rvcJson.AddStringToObject(REFLECTION(machineType), (char*)machineType.c_str());
-		rvcJson.AddStringToObject(REFLECTION(padDeviceID), (char*)padDeviceID.c_str());
-		rvcJson.AddStringToObject(REFLECTION(site), (char*)site.c_str());
-		rvcJson.AddStringToObject(REFLECTION(terminalNo), (char*)terminalNo.c_str());
-		rvcJson.AddStringToObject(REFLECTION(factory), (char*)factory.c_str());
-		rvcJson.AddStringToObject(REFLECTION(modal), (char*)modal.c_str());
-		rvcJson.AddStringToObject(REFLECTION(type), (char*)type.c_str());
-		rvcJson.AddStringToObject(REFLECTION(version), (char*)version.c_str());
-		rvcJson.AddStringToObject(REFLECTION(terminalCharacter), (char*)terminalCharacter.c_str());
-		rvcJson.AddStringToObject(REFLECTION(pinPadID), (char*)pinPadID.c_str());
-		rvcJson.AddStringToObject(REFLECTION(publicKey), (char*)publicKey.c_str());
-		rvcJson.AddStringToObject(REFLECTION(user), (char*)user.c_str());
-		rvcJson.AddStringToObject(REFLECTION(password), (char*)password.c_str());
-		rvcJson.AddStringToObject(REFLECTION(auth), (char*)auth.c_str());
-		rvcJson.AddNumberToObject(REFLECTION(loginWay), loginWay);
-		rvcJson.AddStringToObject(REFLECTION(encRandom), (char*)encRandom.c_str());
-		rvcJson.AddStringToObject(REFLECTION(tpkKeyCheck), (char*)tpkKeyCheck.c_str());
-		rvcJson.AddStringToObject(REFLECTION(edkKeyCheck), (char*)edkKeyCheck.c_str());
-		rvcJson.AddStringToObject(REFLECTION(keyIndex), (char*)keyIndex.c_str());
-		string ret;
-		char* tmp = rvcJson.GetJsonStr();
-		ret.assign(tmp);
-		delete tmp;
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CInitlizerMKReq")("req=%s at CInitlizerMKReq", ret.c_str());
-		rvcJson.Destory();
-		return ret;
-#endif // RVC_OS_WIN
-	}
 } CInitlizerMKReq;
 
-typedef struct CInitlizerMKRet : CHTTPRet {
-#ifdef RVC_OS_WIN
-	string tpk;
-	string edk;
+typedef struct CInitlizerMKAns
+{
+	string TMK;
+	string TPK;
+	string EDK;
 	string tpkKeyCheck;
 	string edkKeyCheck;
 	string keyIndex;
-
-	bool Parse(string strData) {
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("CInitlizerMKRet")("ret=%s at CInitlizerMKRet", strData.c_str());
-
-		Json::Value root;
-		Json::Reader reader;
-		reader.parse(strData, root, false);
-		tpk = root["data"][REFLECTION(tpk)].asString();
-		edk = root["data"][REFLECTION(edk)].asString();
-		tpkKeyCheck = root["data"][REFLECTION(tpkKeyCheck)].asString();
-		edkKeyCheck = root["data"][REFLECTION(edkKeyCheck)].asString();
-		keyIndex = root["data"][REFLECTION(keyIndex)].asString();
-		return true;
-	}
-#else
-	struct data {
-		string TMK;
-		string TPK;
-		string EDK;
-		string tpkKeyCheck;
-		string edkKeyCheck;
-		string keyIndex;
-		string reserved;
-	} data;
-	bool Parse(string strData) {
-		//Dbg("ret=%s at CInitlizerMKRet", strData.c_str());
-		if (m_userCode.compare(ACS_SUCCESS)) return true;
-		RVCJson rvcJson;
-		rvcJson.SetJson((char*)strData.c_str());
-		auto retJson = rvcJson.GetJsonValue(REFLECTION(data));
-		data.TMK = retJson->GetStringValue(REFLECTION(tmk));
-		data.TPK = retJson->GetStringValue(REFLECTION(tpk));
-		data.EDK = retJson->GetStringValue(REFLECTION(edk));
-		data.tpkKeyCheck = retJson->GetStringValue(REFLECTION(tpkKeyCheck));
-		data.edkKeyCheck = retJson->GetStringValue(REFLECTION(edkKeyCheck));
-		data.keyIndex = retJson->GetStringValue(REFLECTION(keyIndex));
-		rvcJson.Destory();
-		retJson->Destory();
-		delete retJson;
-		return true;
-	}
-#endif // RVC_OS_WIN
-} CInitlizerMKRet;
-
-#ifdef RVC_OS_WIN
-typedef struct CAccessAuthInitDeviceReq : CHTTPReq {
-	string cr1;
-	string cr3;
-	string r2;
-	string cDevPubKey;
-	string vendor;
-	string terminalNo;
-	string ToJson() {
-		Json::Value value;
-		value[REFLECTION(cr1)] = cr1;
-		value[REFLECTION(cr3)] = cr3;
-		value[REFLECTION(r2)] = r2;
-		value[REFLECTION(cDevPubKey)] = cDevPubKey;
-		value[REFLECTION(vendor)] = vendor;
-		value[REFLECTION(terminalNo)] = terminalNo;
-
-		Json::FastWriter writer;
-		string strData = writer.write(value);
-		//Dbg("CAccessAuthInitDeviceReq:%s", strData.c_str());
-		return strData;
-}
-} CAccessAuthInitDeviceReq;
-
-typedef struct CAccessAuthInitDeviceRet : CHTTPRet {
-	string r3;
-	string cr2;
-	string r1;
-	string devPubKey;
-
-	bool Parse(string strData) {
-		Json::Value root;
-		Json::Reader reader;
-		reader.parse(strData, root, false);
-		r3 = root["data"][REFLECTION(r3)].asString();
-		cr2 = root["data"][REFLECTION(cr2)].asString();
-		r1 = root["data"][REFLECTION(r1)].asString();
-		devPubKey = root["data"][REFLECTION(devPubKey)].asString();
-
-		return true;
-	}
-} CAccessAuthInitDeviceRet;
-#endif // RVC_OS_WIN
+	string reserved;
+	JSONCONVERT2OBJECT_MEMEBER_REGISTER(TMK, TPK, EDK, tpkKeyCheck, edkKeyCheck, keyIndex)
+		JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("tmk", "tpk", "edk", "tpkKeyCheck", "edkKeyCheck", "keyIndex")
+} CInitlizerMKAns;
 
 class MyMutex;
 class CAccessAuthFSM : public FSMImpl<CAccessAuthFSM>, public IFSMStateHooker
@@ -476,7 +189,7 @@ public:
 	void doWarnMsg(int errReason, std::string errMsg, bool bNeedEvent = false, string varMsg = "");
 	DWORD HandleTimeSyn(long nTimeDiff, BYTE* nSessionKey);
 	DWORD HandleGetToken(BYTE* token, BYTE* sharedKey, BYTE* token2, BYTE* retHash);
-	DWORD GetEncTerminalInfo(CBlob& encInfo);
+	DWORD GetEncTerminalInfoWithKey(CBlob& encInfo, BYTE* key);
 	DWORD GetTmk(string& tmk);
 	DWORD GetTokenReq(CAccessAuthGetTokenReq* getTokenReq);
 	void UpdateWK();
@@ -491,6 +204,9 @@ public:
 
 	bool containsChinese(const std::string& str);
 
+	CSimpleStringA GetOsVersion();
+	void GetIPandMac(CSimpleStringA& ip, CSimpleStringA& mac);
+
 private:
 	void GetDiffSyncTimeFromCenterSettings();
 private:

+ 256 - 426
Module/mod_accessauth/mod_AccessAuth.cpp

@@ -24,9 +24,6 @@ using namespace PinPad;
 #include "DeviceBaseClass.h"
 #endif
 
-#define KEY_SIZE 16
-#define BUF_SIZE 256
-
 extern int HexBuf2StrBuf(PBYTE hexBuf, char** strBuf, DWORD len);
 extern int StrBuf2HexBuf(LPCTSTR strBuf, PBYTE* hexBuf);
 
@@ -40,8 +37,8 @@ struct InitializerInitMKTask : ITaskSp
 	{
 		CSystemStaticInfo si;
 		m_fsm->GetEntityBase()->GetFunction()->GetSystemStaticInfo(si);
-		CInitlizerMKReq initMKReq;//oiltest dev module count
-		bool initFlag = m_entity->SendInitMKReqACS(initMKReq);
+		CInitlizerMKReq instanceReq;//oiltest dev module count
+		bool initFlag = m_entity->SendInitMKReqACS(instanceReq);
 		if (!initFlag)
 		{
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5204")("连接密码键盘异常");
@@ -56,87 +53,29 @@ struct InitializerInitMKTask : ITaskSp
 		}
 
 		auto tmkpair = m_entity->GenerateTmkToKMC();
-		struct InstanceReqJson
-		{
-			string enrolAddr;
-			string enrolGPS;
-			string installVersion;
-			string ip;
-			string machineModel;
-			string machineType;
-			string padDeviceID;
-			string site;
-			string terminalNo;
-			string factory;
-			string modal;
-			string type;
-			string version;
-			string terminalCharacter; //终端特征值(fingerPrint + fingerPrintSM)
-			string pinPadID;
-			string publicKey;
-			string user; //操作人
-			string password; //密码
-			string auth;//预留鉴权
-			int loginWay;//1表示错误页发起,需要传入登录密码;0表示用户桌面发起,不需要传入登录密码
-			string encRandom; //tmk pk加密的随机密钥
-			string tpkKeyCheck; //密钥校验值
-			string edkKeyCheck; //密钥校验值
-			string keyIndex; //密钥序号
-
-			JSONCONVERT2OBJECT_MEMEBER_REGISTER(enrolAddr, enrolGPS, installVersion, ip, machineModel, machineType,
-				padDeviceID, site, terminalNo, factory, modal, type, version, terminalCharacter, pinPadID, publicKey,
-				user, password, auth, loginWay, encRandom, tpkKeyCheck, edkKeyCheck, keyIndex)
-
-		} instanceReq;
-
-		instanceReq.enrolAddr = initMKReq.enrolAddr;
-		instanceReq.enrolGPS = initMKReq.enrolGPS;
-		instanceReq.installVersion = initMKReq.installVersion;
-		instanceReq.ip = initMKReq.ip;
-		instanceReq.machineModel = initMKReq.machineModel;
-		instanceReq.machineType = initMKReq.machineType;
-		instanceReq.padDeviceID = initMKReq.padDeviceID;
-		instanceReq.site = initMKReq.site;
-		instanceReq.terminalNo = initMKReq.terminalNo;
-		instanceReq.factory = initMKReq.factory;
-		instanceReq.modal = initMKReq.modal;
-		instanceReq.type = initMKReq.type;
-		instanceReq.version = initMKReq.version;
-		instanceReq.terminalCharacter = initMKReq.terminalCharacter;
-		instanceReq.pinPadID = initMKReq.pinPadID;
-		instanceReq.publicKey = initMKReq.publicKey;
-		instanceReq.user = initMKReq.user;
-		instanceReq.password = initMKReq.password;
-		instanceReq.auth = initMKReq.auth;
-		instanceReq.loginWay = initMKReq.loginWay;
 		instanceReq.encRandom = tmkpair.first;
-		instanceReq.tpkKeyCheck = initMKReq.tpkKeyCheck;
-		instanceReq.edkKeyCheck = initMKReq.edkKeyCheck;
-		instanceReq.keyIndex = initMKReq.keyIndex;
 
-		struct InstanceAnsJson
-		{
-			string TMK;
-			string TPK;
-			string EDK;
-			string tpkKeyCheck;
-			string edkKeyCheck;
-			string keyIndex;
-			string reserved;
-			JSONCONVERT2OBJECT_MEMEBER_REGISTER(TMK, TPK, EDK, tpkKeyCheck, edkKeyCheck, keyIndex)
-				JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("tmk", "tpk", "edk", "tpkKeyCheck", "edkKeyCheck", "keyIndex")
-		} instanceAns;
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("iniTerminalInfo: %s", instanceReq.iniTerminalInfo.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("auth:%s", instanceReq.auth.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("curEdkKeyCheck: %s", instanceReq.curEdkKeyCheck.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("curKeyIndex: %s", instanceReq.curKeyIndex.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("curTpkKeyCheck: %s", instanceReq.curTpkKeyCheck.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("encRandom: %s", instanceReq.encRandom.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("publicKey: %s", instanceReq.publicKey.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("terminalNo: %s", instanceReq.terminalNo.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("terminalVersion: %s", instanceReq.terminalVersion.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("user: %s", instanceReq.user.c_str());
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("loginWay: %d", instanceReq.loginWay);
+
+		CInitlizerMKAns instanceAns;
 
 		HttpClientResponseResult result;
 		HttpClientRequestConfig config(HttpRequestMethod::POST, m_entity->GetInitUrl().GetData(), &SpGetToken);
-		config.SetChildUri("/api/v5/initmk");
+		config.SetChildUri("/api/v6/initmk");
 		SP::Module::Restful::FulfillRequestJsonBody(&config, instanceReq);
-
-		std::string test;
-		test = config.GetRequestUri();
-
 		RestfulClient client = RestfulClient::getInstance();
 		config.PreDo();
+
 		client.Do(&config, &result);
 		if (result.ResponseOK()) {
 			SP::Module::Restful::CommResponseJson responseStatus;
@@ -179,7 +118,6 @@ struct InitializerInitMKTask : ITaskSp
 	}
 };
 
-#ifdef RVC_OS_WIN
 struct GetTermSysInfoTask : ITaskSp
 {
 	CAccessAuthEntity* m_entity;
@@ -187,10 +125,9 @@ struct GetTermSysInfoTask : ITaskSp
 
 	void Process()
 	{
-		m_entity->GetTermSysInfo();
+		m_entity->GetHardWareInfo();
 	}
 };
-#endif // RVC_OS_WIN
 
 typedef struct _REG_TZI_FORMAT
 {
@@ -264,11 +201,9 @@ void CAccessAuthEntity::OnStarted()
 			GetOutPutStr("%s%08X", "获取系统静态信息错误", rc).c_str(), strErrMsg.GetData());
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(GetOutPutStr("%s%08X", "获取系统静态信息错误", rc).c_str());
 	}
-#ifdef RVC_OS_WIN
-	spFunction->RegistSysVarEvent("NetState", this);
+
 	CSmartPointer<GetTermSysInfoTask> getTermSysInfoTask = new GetTermSysInfoTask(this);
 	GetFunction()->PostThreadPoolTask(getTermSysInfoTask.GetRawPointer());
-#endif // RVC_OS_WIN
 }
 
 void CAccessAuthEntity::OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPointer<ITransactionContext> pTransactionContext) 
@@ -279,9 +214,6 @@ void CAccessAuthEntity::OnPreStart(CAutoArray<CSimpleStringA> strArgs,CSmartPoin
 
 void CAccessAuthEntity::OnPreClose(EntityCloseCauseEnum eCloseCause,CSmartPointer<ITransactionContext> pTransactionContext) 
 { 
-#ifdef RVC_OS_WIN
-	GetFunction()->UnregistSysVarEvent("NetState");
-#endif // RVC_OS_WIN
 	m_FSM.PostExitEvent();
 	pTransactionContext->SendAnswer(Error_Succeed); 
 }
@@ -619,8 +551,8 @@ static BYTE* ConvertHexStrToBytes(const char *pszStr)
 	return pRet;
 }
 
-// 使用准入会话密钥加密
-ErrorCodeEnum CAccessAuthEntity::EncryptDataWithSessionKey(const CBlob &raw, CBlob &enc)
+// 使用密钥加密
+ErrorCodeEnum CAccessAuthEntity::EncryptDataWithKey(const CBlob &raw, CBlob &enc, BYTE* key)
 {
 	LOG_FUNCTION();
 	//这里不需要delete,由CBlob析构函数去执行
@@ -630,14 +562,10 @@ ErrorCodeEnum CAccessAuthEntity::EncryptDataWithSessionKey(const CBlob &raw, CBl
 	char* pPlainInfo = Str2Hex((char*)raw.m_pData, raw.m_iLength);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("raw Length=%d", raw.m_iLength);
 	delete[] pPlainInfo;
-	
-	char sessionKey[KEY_SIZE] = { 0 };
-	memcpy(sessionKey,m_AuthSessionKey,KEY_SIZE);
-	char* tmpKey = Str2Hex((char*)m_AuthSessionKey, KEY_SIZE);
-	delete[] tmpKey;
 
-	if (!EncWithSM4_ECB((BYTE*)sessionKey, (BYTE*)(raw.m_pData), raw.m_iLength, pEncData, &pEncDataSize)) {
+	if (!EncWithSM4_ECB(key, (BYTE*)(raw.m_pData), raw.m_iLength, pEncData, &pEncDataSize)) {
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("会话密钥加密准入信息失败!");
+		SetAuthErrMsg("会话密钥加密准入信息失败");
 		return Error_Unexpect;
 	}
 	
@@ -680,112 +608,6 @@ static char* ConvertBytesToHexStr(BYTE *pBuf, int nLen)
 	return pRet;
 }
 
-bool CAccessAuthEntity::GetTerminalFingerPrint(BYTE *pBuf, int &nBufLen)
-{
-#ifdef RVC_OS_LINUX
-	char szTmp[1024] = {};
-	string strTmp;
-	int nTmpBufLen = 1024;
-	CSimpleStringA strErrMsg;
-	CSmartPointer<IEntityFunction> spFunction = this->GetFunction();
-
-	CSimpleStringA strRet;
-	CSimpleStringA runInfoPath;
-	auto rc = GetFunction()->GetPath("runinfo", runInfoPath);
-	if (rc != Error_Succeed) {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetPath runinfo error=%d.", rc);
-		return false;
-	}
-	runInfoPath += SPLIT_SLASH_STR "runcfg";
-	if (!get_cpu_id_by_system(strTmp, runInfoPath.GetData()))
-	{
-		strErrMsg = CSimpleStringA::Format("查询CPU ID失败,请重启机器并重新初始化");
-		SetAuthErrMsg((const char*)strErrMsg);
-
-		m_FSM.doWarnMsg(ERROR_ACCESSAUTH_GETCPUID,
-			GetOutPutStr("%s%s", "Processor", "False").c_str());
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5213")
-			(GetOutPutStr("%s%s", "Processor", "False").c_str());
-		return false;
-	}
-
-	strRet = strTmp.c_str();
-	strTmp.clear();
-	if (!get_board_serial_by_system(strTmp, runInfoPath.GetData()))
-	{
-		strErrMsg = CSimpleStringA::Format("查询主板序列号失败,  请重启机器并重新初始化");
-		SetAuthErrMsg((const char*)strErrMsg);
-
-		m_FSM.doWarnMsg(ERROR_ACCESSAUTH_GETBASEBOARDSN,
-			GetOutPutStr("%s%s", "BaseBoard", "False").c_str());
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5214")
-			(GetOutPutStr("%s%s", "BaseBoard", "False").c_str());
-		return false;
-	}
-	strRet += "|";
-
-	strRet += strTmp.c_str();
-	vector<string> disk;
-	int errCode = 0;
-	if (!get_disk_serial_by_system(disk, errCode, runInfoPath.GetData()))
-	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get_disk_serial_by_system errCode:%d", errCode);
-		strErrMsg = CSimpleStringA::Format("查询磁盘序列号失败, 请重启机器并重新初始化");
-		SetAuthErrMsg((const char*)strErrMsg);
-
-		m_FSM.doWarnMsg(ERROR_ACCESSAUTH_DISKDRIVESN,
-			GetOutPutStr("%s%s", "DiskDrive", "False").c_str());
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5215")
-			(GetOutPutStr("%s%s", "DiskDrive", "False").c_str());
-		return false;
-	}
-	strRet += "|";
-
-	strTmp = "";
-	vector<string>::iterator it = disk.begin();
-	while (it != disk.end()) {
-		strTmp += *it;
-		it++;
-	}
-	strRet += strTmp.c_str();
-
-	BYTE m_btTermSysInfoSM3[32] = { 0 };
-	if (!SM3Hash(reinterpret_cast<BYTE*>(const_cast<char*>(strRet.GetData())), strRet.GetLength(), m_btTermSysInfoSM3))
-	{
-		strErrMsg = "get sm3 hash as fingerprint fail";
-		SetAuthErrMsg((const char*)strErrMsg);
-		spFunction->SetSysVar("AuthErrMsg", (const char*)strErrMsg, true);
-		m_FSM.doWarnMsg(ERROR_ACCESSAUTH_GETSM3HASH, (const char*)strErrMsg);
-		return false;
-	}
-#endif // RVC_OS_LINUX
-	if (nBufLen < 32)
-	{
-		m_FSM.doWarnMsg(ERROR_ACCESSAUTH_GETSM3HASH, "buf len is too small fail");
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("buf len is too small fail");
-
-		return false;
-	}
-#ifdef RVC_OS_WIN
-	while (1)
-	{
-		if (m_iGetTermSysInfo == -1)
-			return false;
-		else if (m_iGetTermSysInfo == 1)
-			break;
-		else if (m_iGetTermSysInfo == 0)
-			Sleep(1000);//oiltmp@20220917 之前的逻辑是不跳出去,现在要加么?暂时不加,连调用系统接口都有问题,让其他逻辑处理
-	}
-#endif // RVC_OS_WIN
-	nBufLen = 32;
-	memcpy(pBuf, m_btTermSysInfoSM3, nBufLen);
-
-	char *pszSM3 = ConvertBytesToHexStr(m_btTermSysInfoSM3, nBufLen);
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("fringerprint: [%s]", pszSM3);
-	free(pszSM3);
-	return true;
-}
-
 // 生成RSA密钥对,并导出公钥
 bool CAccessAuthEntity::GetTerminalPublicKey(BYTE* pBuf, int& nBufLen, string& pubkey)
 {
@@ -887,18 +709,20 @@ bool CAccessAuthEntity::GetTerminalPublicKey(BYTE* pBuf, int& nBufLen, string& p
 
 //oilyang@20210510 嵌入"bool CAccessAuthEntity::HasPinPad()"的逻辑
 // 返回1:只有PinPadID;2:只有DeviceID;3:两者都有;0:没有;-1表示失败
-int CAccessAuthEntity::GetPinPadIDAndDeviceID(CSimpleStringA &strPinPadID, CSimpleStringA &strDeviceID, bool& isPinPadMac, bool& bPinPadOnline)
+ErrorCodeEnum CAccessAuthEntity::GetPinPadModel(CSimpleStringA& pinpadModel, bool& bPinPadOnline)
 {
-	isPinPadMac = false;
 	bPinPadOnline = false;
 	CSimpleStringA strErrMsg;
 	CSmartPointer<IEntityFunction> spFunction = this->GetFunction();
-
+	std::map<std::string, std::string> errInfo;
 	//oilyang@20210514 
 	if (!IsMachineTypeConfigurePinPad(m_info.strMachineType))
-		return 0;
+	{
+		pinpadModel = "";
+		return Error_Succeed;
+	}
 
-	int nRet = -1;
+	ErrorCodeEnum nRet = Error_Unexpect;
 	auto pPinPadClient = new PinPadService_ClientBase(this);
 	bool bPinPadID = false;
 	bool bDeviceID = false;
@@ -908,10 +732,15 @@ int CAccessAuthEntity::GetPinPadIDAndDeviceID(CSimpleStringA &strPinPadID, CSimp
 	CSimpleStringA strBluetoothID;
 	CSimpleStringA strPID;
 	CSimpleStringA strMID;
-	isPinPadMac = true;
 	auto rc = 0;
 	if ((rc = pPinPadClient->Connect()) == Error_Succeed)
 	{
+		//初始错误信息
+		errInfo["errcode"] = "RTA5205";
+		errInfo["msg"] = "调用PinPad发生错误";
+		errInfo["getLastErr"] = GetLastError();
+		pinpadModel = generateJsonStr(errInfo).second.c_str();
+
 		PinPadService_GetDevInfo_Req req = {};
 		PinPadService_GetDevInfo_Ans ans = {};
 
@@ -919,69 +748,26 @@ int CAccessAuthEntity::GetPinPadIDAndDeviceID(CSimpleStringA &strPinPadID, CSimp
 		if (rc == Error_Succeed)
 		{
 			bPinPadOnline = true;
-			nRet = 0;
+			nRet = Error_Succeed;
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("pinpad model: %s", ans.model.GetData());
 
 			// CM = V2.0#PM = V1.0#MID = 75500001#PID = 12345678#FWID = V1234567#Vendor = nantian
 			// 密码键盘ID,PID,8到16字节;  设备ID,MID,8到16字节;  固件版本号,FWID,8字节
-			CSimpleStringA str = ans.model;
-			if (!str.IsNullOrEmpty())
-			{
-				auto arr = str.Split('#');
-				if (arr.GetCount() > 0)
-				{
-					for (int i = 0; i < arr.GetCount(); i++)
-					{
-						auto arr2 = arr[i].Split('=');
-						if (arr2.GetCount() != 2)
-							continue;
-
-						//if (arr2[0] == "PID")
-						if (!strnicmp((LPCTSTR)arr2[0], "PID", strlen("PID")))
-						{
-							strPID = arr2[1];
-
-							if (!strPID.IsNullOrEmpty())
-								bPinPadID = true;
-						}
-						//else if (arr2[0] == "MID")
-						else if (!strnicmp((LPCTSTR)arr2[0], "MID", strlen("MID")))
-						{
-							strMID = arr2[1];
-
-							if (!strMID.IsNullOrEmpty())
-								bDeviceID = true;
-						}
-						//else if (arr2[0] == "Vendor")
-						else if (!strnicmp((LPCTSTR)arr2[0], "Vendor", strlen("Vendor")))
-						{
-							strVendor = arr2[1];
-
-							if (!strVendor.IsNullOrEmpty())
-								bVendor = true;
-						}
-						else if (!strnicmp((LPCTSTR)arr2[0], "FWBID", strlen("FWBID")))
-						{
-							strBluetoothID = arr2[1];
-							DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("strBluetoothID=%s", strBluetoothID.GetData());
-							if (!strBluetoothID.IsNullOrEmpty())
-								bBluetooth = true;
-						}
-					}
-				}
-			}
+			pinpadModel = ans.model;
 		}
 		else if(rc == Error_NotInit)
 		{
-			if (!HasPinPad())
-				isPinPadMac = false;
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("pinpad NOT INIT!, state: %d", ans.state);
-			return nRet; //此时nRet = -1, pinpad调用失败
+			strErrMsg = "PinPad打开失败";
+			SetAuthErrMsg(strErrMsg.GetData());
+
+			string outStr = GetOutPutStr("%s%08X%s%s", "GetDevInfo", rc, "strErrMsg", strErrMsg.GetData());
+			m_FSM.doWarnMsg(ERR_ACCESSAUTH_FROM_PINPAD, outStr.c_str());
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5205")(outStr.c_str());
+			return nRet; 
 		}
 		else
 		{
-			if (!HasPinPad())
-				isPinPadMac = false;
 			strErrMsg = "调用PinPad实体的GetDevInfo方法失败";
 			SetAuthErrMsg(strErrMsg.GetData());
 
@@ -989,15 +775,29 @@ int CAccessAuthEntity::GetPinPadIDAndDeviceID(CSimpleStringA &strPinPadID, CSimp
 			m_FSM.doWarnMsg(ERR_ACCESSAUTH_FROM_PINPAD, outStr.c_str());
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5205")(outStr.c_str());
 			
-			return nRet; //此时nRet = -1, pinpad调用失败
+			return nRet;
 		}
 
 		pPinPadClient->GetFunction()->CloseSession();
 	}
+	else if (rc == Error_NetBroken)
+	{
+		strErrMsg = "PinPad实体未启动, 连接密码键盘失败";
+		SetAuthErrMsg((const char*)strErrMsg);
+
+		m_FSM.doWarnMsg(ERR_ACCESSAUTH_CONNECT_PINPAD_UNLOAD,
+			GetOutPutStr("%s%08X%s%s", "Connect", rc, "strErrMsg", "PinPad实体未启动, 连接密码键盘失败").c_str());
+		pPinPadClient->SafeDelete();
+
+		errInfo["errcode"] = "RTA5218";
+		errInfo["msg"] = "PinPad实体未启动";
+		errInfo["getLastErr"] = GetLastError();
+		pinpadModel = generateJsonStr(errInfo).second.c_str();
+
+		return nRet; 
+	}
 	else
 	{
-		if (!HasPinPad())
-			isPinPadMac = false;
 		strErrMsg = "连接PinPad实体失败";
 		SetAuthErrMsg((const char*)strErrMsg);
 
@@ -1006,39 +806,16 @@ int CAccessAuthEntity::GetPinPadIDAndDeviceID(CSimpleStringA &strPinPadID, CSimp
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5204")("连接密码键盘异常");
 		pPinPadClient->SafeDelete();
 
+		errInfo["errcode"] = "RTA5204";
+		errInfo["msg"] = "PinPad实体启动成功,但连接PinPad实体失败";
+		errInfo["getLastErr"] = GetLastError();
+		pinpadModel = generateJsonStr(errInfo).second.c_str();
+
 		return nRet; //此时nRet = -1, pinpad调用失败
 	}
 
 	pPinPadClient = NULL;
 
-	if (bPinPadID)
-	{
-		if (bVendor)
-			strPinPadID = strVendor + "_" + strPID;
-		else
-			strPinPadID = strPID;
-
-		nRet += 1;
-	}
-
-	if (bDeviceID)
-	{
-		if (bVendor)
-			strDeviceID = strVendor + "_" + strMID;
-		else
-			strDeviceID = strMID;
-
-		if (bBluetooth)
-			strDeviceID = strDeviceID + "_" + strBluetoothID;
-
-		nRet += 2;
-	}
-	else if (bBluetooth)
-	{
-		strDeviceID = strDeviceID + "_" + strBluetoothID;
-		nRet += 2;
-	}
-
 	return nRet;
 }
 
@@ -1248,89 +1025,30 @@ bool CAccessAuthEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 {
 	LOG_FUNCTION();
 	CSmartPointer<IEntityFunction> pFunc = GetFunction();
-	CSimpleStringA strPinPadID = "", strDeviceID = "";
-	bool isPinPadMac, bPinPadOnline;
-	int nRet = GetPinPadIDAndDeviceID(strPinPadID, strDeviceID, isPinPadMac, bPinPadOnline);
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetPinPadIDAndDeviceID ret: %d, PinPadID: %s, DeviceID: %s", nRet, strPinPadID.GetData(), strDeviceID.GetData());
-
-	if (nRet < 0)
-	{
-		return false; //具有pinpad的设备调用pinpad失败
+	ErrorCodeEnum nRet = Error_Unexpect;
+
+	CBlob encInfo;
+	char* hexStr = "21009872C31CBC00D0C8F421D09CF707";
+	BYTE key[KEY_SIZE] = { 0 };
+	memcpy(key, ConvertHexStrToBytes(hexStr), KEY_SIZE);
+	//char key[KEY_SIZE] = { 0 };
+	//memcpy(key, "1234567890123456234", KEY_SIZE);
+	nRet = (ErrorCodeEnum)m_FSM.GetEncTerminalInfoWithKey(encInfo, key);
+	if (nRet != Error_Succeed)
+	{
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetEncTerminalInfo failed:%d", nRet);
+		return false;
 	}
-
-	// 从系统获取设备信息和硬件信息	
-	// 变长结构初始化
-	char buf2[512];
-	memset(buf2, 0, 512);
+	char* pTmp = Str2Hex((char*)encInfo.m_pData, encInfo.m_iLength);
+	initMKReq.iniTerminalInfo = pTmp;
 
 	CSystemStaticInfo si;
 	pFunc->GetSystemStaticInfo(si);
-
-	initMKReq.enrolGPS = "00000A4500000A4E";//oiltmp
-	initMKReq.enrolAddr = si.strEnrolAddr;
-	initMKReq.installVersion = si.InstallVersion.ToString();
-
-#ifdef RVC_OS_WIN
-	hostent* ent = gethostbyname(NULL);
-	if (ent && ent->h_addr_list[0] != NULL)
-	{
-		int i = 0;
-		for (; ent->h_addr_list[i] != NULL; ++i)
-		{
-			struct in_addr* in = (struct in_addr*)ent->h_addr_list[i];
-			if (in->S_un.S_un_b.s_b1 == 99 || in->S_un.S_un_b.s_b1 == 10)
-				break;
-		}
-
-		if (ent->h_addr_list[i] == NULL)
-			i = 0;
-
-		auto in = (struct in_addr*)ent->h_addr_list[i];
-		char xIP[64] = {};
-		sprintf(xIP, "%d.%d.%d.%d", in->S_un.S_un_b.s_b1, in->S_un.S_un_b.s_b2, in->S_un.S_un_b.s_b3, in->S_un.S_un_b.s_b4);
-		initMKReq.ip = xIP;
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ip:%s", xIP);
-	}
-#else
-	BYTE xIP[64] = {};
-	char ip[32] = { 0 };
-	if (getIPFromLinux(ip)) DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Get IP From Linux Error ex.");
-	else {
-		if (ip2byte(ip, xIP)) DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Ip 2 Byte Error");
-		else {
-			for (int i = 0; i < 4; i++) {
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("ip[%d]=%d", i, xIP[i]);
-			}
-			char strIP[64];
-			memset(strIP, 0, 64);
-			sprintf(strIP, "%d.%d.%d.%d", xIP[0], xIP[1], xIP[2], xIP[3]);
-			initMKReq.ip = strIP;
-		}
-	}
-#endif // RVC_OS_WIN
-
-	initMKReq.machineType = si.strMachineType;
-
-	if (nRet == 2 || nRet == 3)
-		initMKReq.padDeviceID = strDeviceID;
-	initMKReq.site = si.strSite;
-	initMKReq.terminalNo = si.strTerminalID;
-
-	BYTE fingerPrint[32] = { 0 };
-	int nBufLen = sizeof(fingerPrint);
-	if (!GetTerminalFingerPrint(fingerPrint, nBufLen))
-	{
-		LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
-			GetOutPutStr("%s%s", "GetTerminalFingerPrint", "False").c_str());
-		return ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT;
-	}
-	initMKReq.terminalCharacter = ConvertBytesToHexStr(fingerPrint, nBufLen);
-
-	if (nRet == 1 || nRet == 3)
-		initMKReq.pinPadID = strPinPadID;
+	initMKReq.terminalVersion = si.InstallVersion.ToString();
+	initMKReq.terminalNo = si.strTerminalID.GetData();
 
 	BYTE xPublicKey[148];
-	nBufLen = sizeof(xPublicKey);
+	int nBufLen = sizeof(xPublicKey);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("SendInitMKReqACS")("开始获取公钥。。。");
 	memset(xPublicKey, 0, nBufLen);
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("SendInitMKReqACS")("nBufLen=%d", nBufLen);
@@ -1338,10 +1056,10 @@ bool CAccessAuthEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 	{
 		LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_PUBKEY,
 			GetOutPutStr("%s%s", "GetTerminalPublicKey", "False").c_str());
-		return ERR_ACCESSAUTH_GET_TERMINAL_PUBKEY;
+		return false;
 	}
+
 	initMKReq.user = m_strUserID.GetData();
-	initMKReq.password = m_strPassword.GetData();
 	if (!m_strUserID.IsNullOrEmpty() && !m_strPassword.IsNullOrEmpty())
 	{
 		LogWarn(Severity_Low, Error_Succeed, AccessAuthorization_UserErrorCode_Init_From_ClosePage, "Init by ClosePage.");
@@ -1367,8 +1085,8 @@ bool CAccessAuthEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 		errRc = (*pPinPad)(EntityResource::getLink().upgradeLink())->GetCheckCode(req, ans, 10000);
 		if (errRc == Error_Succeed)
 		{
-			initMKReq.tpkKeyCheck = ans.checkcode[0].GetData();
-			initMKReq.keyIndex = ans.index[0].GetData();
+			initMKReq.curTpkKeyCheck = ans.checkcode[0].GetData();
+			initMKReq.curKeyIndex = ans.index[0].GetData();
 		}
 		else
 		{
@@ -1388,14 +1106,15 @@ bool CAccessAuthEntity::SendInitMKReqACS(CInitlizerMKReq& initMKReq)
 void CAccessAuthEntity::EndInitMK(DWORD rc, const char *pszErrMsg)
 {
 	LOG_FUNCTION();
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("EndInitMK:rc:%d,errMsg:%s", rc, pszErrMsg);
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setLogCode(AccessAuthService_LogCode_InitializeNew)
+		("EndInitMK:rc:%d,errMsg:%s", rc, pszErrMsg);
 	GetFunction()->KillTimer(22);
 
 	m_strLastErrMsg = pszErrMsg;
 
 	if (rc != Error_Succeed)
 	{
-		LogWarn(Severity_Middle, Error_Unexpect, ERR_INITIALIZER_FAILED,
+		LogWarn(Severity_Middle, Error_Unexpect, rc,
 			GetOutPutStr("%s%08X%s%s", "EndInitMK", rc,"pszErrMsg", pszErrMsg).c_str());
 
 		GetFunction()->ShowFatalError(pszErrMsg);
@@ -1579,96 +1298,229 @@ pair<string, string> CAccessAuthEntity::EncryptedByPubKey(CSimpleStringA pubKey,
 	return make_pair(pBlock, strRam);
 }
 
-#ifdef RVC_OS_WIN
-void CAccessAuthEntity::GetTermSysInfo()
+void CAccessAuthEntity::GetHardWareInfo()
 {
+	std::map<std::string, std::string> errInfo;
+
 	//oilyang@20231008 to get system info from runcfg first
 	//no matter calculating from runcfg succeed or not,we also get system info from system api for update runcfg
-	bool bCalcFromRunCfg = false;
+	bool bGetFromRunCfg = false;
 	CSimpleString csInfo, strErrMsg, strRet;
 	CSmartPointer<IConfigInfo> pConfigRun;
 	ErrorCodeEnum eErr = GetFunction()->OpenConfig(Config_Run, pConfigRun);
 	if (eErr == Error_Succeed && pConfigRun->ReadConfigValue("system", "info", csInfo) == Error_Succeed && !csInfo.IsNullOrEmpty()) {
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("read device info from runcfg: [%s]", csInfo.GetData());
-
-		ZeroMemory(m_btTermSysInfoSM3, sizeof(m_btTermSysInfoSM3));
-		if (!SM3Hash(reinterpret_cast<BYTE*>(const_cast<char*>(csInfo.GetData())), csInfo.GetLength(), m_btTermSysInfoSM3))
+		CAutoArray<CSimpleStringA> sysInfo = csInfo.Split('|');
+		if (sysInfo.GetCount() == 3)
 		{
-			strErrMsg = "get sm3 hash as fingerprint fail";
-			SetAuthErrMsg((const char*)strErrMsg);
-			this->GetFunction()->SetSysVar("AuthErrMsg", (const char*)strErrMsg, true);
-			LogWarn(Severity_Middle, Error_Unexpect, ERROR_ACCESSAUTH_GETSM3HASH, (const char*)strErrMsg);
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("GetTerminalFingerPrint")((const char*)strErrMsg);
-			m_iGetTermSysInfo = -1;
+			m_cpuId = sysInfo[0];
+			m_mainBoardId = sysInfo[1];
+			m_hardDiskId = sysInfo[2];
+			bGetFromRunCfg = true;
+			m_iGetTermSysInfo = 1;
 		}
 		else
 		{
-			m_iGetTermSysInfo = 1;
-			bCalcFromRunCfg = true;
+			m_iGetTermSysInfo = -1;
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("GetTerminalFingerPrint")("get sm3 hash as fingerprint fail");
 		}
 	}
 	else
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("GetTermSysInfo, OpenConfig Config_Run error=%d.", eErr);
 
-	ULONGLONG ullStart = GetTickCount64();
+#ifdef RVC_OS_LINUX
 	char szTmp[1024] = {};
+	string strTmp;
 	int nTmpBufLen = 1024;
-	CSmartPointer<IEntityFunction> spFunction = this->GetFunction();
 
+	CSimpleStringA runInfoPath;
+	auto rc = GetFunction()->GetPath("runinfo", runInfoPath);
+	if (rc != Error_Succeed) {
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetPath runinfo error=%d.", rc);
+		return;
+	}
+	runInfoPath += SPLIT_SLASH_STR "runcfg";
+
+	//CPU
+	if (!get_cpu_id_by_system(strTmp, runInfoPath.GetData()))
+	{
+		if (!bGetFromRunCfg)
+		{
+			errInfo["errcode"] = "RTA5213";
+			errInfo["msg"] = "调用系统api获取CPU序号失败";
+			errInfo["getLastErr"] = GetLastError();
+			m_cpuId = generateJsonStr(errInfo).second.c_str();
+
+			m_iGetTermSysInfo = -1;
+		}
+
+		strErrMsg = CSimpleStringA::Format("查询CPU ID失败,请重启机器并重新初始化");
+		SetAuthErrMsg((const char*)strErrMsg);
+
+		LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
+			GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "Processor", GetLastError()).c_str());
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5213")
+			(GetOutPutStr("%s%s", "Processor", "False").c_str());
+		return;
+	}
+	m_cpuId = strTmp.c_str();
+	strRet = strTmp.c_str();
+	strTmp.clear();
+
+	//主板
+	if (!get_board_serial_by_system(strTmp, runInfoPath.GetData()))
+	{
+		if (!bGetFromRunCfg)
+		{
+			errInfo["errcode"] = "RTA5214";
+			errInfo["msg"] = "调用系统api获取主板ID号失败";
+			errInfo["getLastErr"] = GetLastError();
+			m_mainBoardId = generateJsonStr(errInfo).second.c_str();
+
+			m_iGetTermSysInfo = -1;
+		}
+		strErrMsg = CSimpleStringA::Format("查询主板序列号失败,  请重启机器并重新初始化");
+		SetAuthErrMsg((const char*)strErrMsg);
+
+		LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
+			GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "BaseBoard", GetLastError()).c_str());
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5214")
+			(GetOutPutStr("%s%s", "BaseBoard", "False").c_str());
+		return;
+	}
+	m_mainBoardId = strTmp.c_str();
+	strRet += "|";
+	strRet += strTmp.c_str();
+
+	//硬盘
+	vector<string> diskArr;
+	int errCode = 0;
+	if (!get_disk_serial_by_system(diskArr, errCode, runInfoPath.GetData()))
+	{
+		if (!bGetFromRunCfg)
+		{
+			errInfo["errcode"] = "RTA5215";
+			errInfo["msg"] = "调用系统api获取硬盘ID号失败";
+			errInfo["getLastErr"] = GetLastError();
+			m_hardDiskId = generateJsonStr(errInfo).second.c_str();
+
+			m_iGetTermSysInfo = -1;
+		}
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get_disk_serial_by_system errCode:%d", errCode);
+		strErrMsg = CSimpleStringA::Format("查询磁盘序列号失败, 请重启机器并重新初始化");
+		SetAuthErrMsg((const char*)strErrMsg);
+
+		LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
+			GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "BaseBoard", GetLastError()).c_str());
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5215")
+			(GetOutPutStr("%s%s", "DiskDrive", "False").c_str());
+		return;
+	}
+	strRet += "|";
+	strTmp = "";
+	vector<string>::iterator it = diskArr.begin();
+	while (it != diskArr.end()) {
+		strTmp += *it;
+		it++;
+	}
+	strRet += strTmp.c_str();
+	m_hardDiskId = strTmp.c_str();
+#else
+	ULONGLONG ullStart = GetTickCount64();
+	char szTmp[1024] = {};
+	int nTmpBufLen = 1024;
 	if (!QueryWMIDevice(Processor, "ProcessorId", szTmp, &nTmpBufLen))
 	{
+		if (!bGetFromRunCfg)
+		{
+			errInfo["errcode"] = "RTA5213";
+			errInfo["msg"] = "调用系统api获取CPU序号失败";
+			errInfo["getLastErr"] = GetLastError();
+			m_cpuId = generateJsonStr(errInfo).second.c_str();
+
+			m_iGetTermSysInfo = -1;
+		}
 		strErrMsg = CSimpleStringA::Format("查询 cpu id 失败: %d, 请尝试重启应用", GetLastError());
 		SetAuthErrMsg((const char*)strErrMsg);
 
-		LogWarn(Severity_Middle, Error_Unexpect,ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT, 
+		LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
 			GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "Processor", GetLastError()).c_str());
-		
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5203")
+
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5213")
 			(GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "Processor", GetLastError()).c_str());
-		if (!bCalcFromRunCfg)
-			m_iGetTermSysInfo = -1;
+
 		return;
 	}
 	strRet = szTmp;
+	m_cpuId = szTmp;
 
 	nTmpBufLen = 1024;
 	memset(szTmp, 0, sizeof(szTmp));
 	if (!QueryWMIDevice(BaseBoard, "SerialNumber", szTmp, &nTmpBufLen))
 	{
+		if (!bGetFromRunCfg)
+		{
+			errInfo["errcode"] = "RTA5214";
+			errInfo["msg"] = "调用系统api获取主板ID号失败";
+			errInfo["getLastErr"] = GetLastError();
+			m_mainBoardId = generateJsonStr(errInfo).second.c_str();
+
+			m_iGetTermSysInfo = -1;
+		}
 		strErrMsg = CSimpleStringA::Format("查询 baseboard sn 失败: %d, 请尝试重启应用", GetLastError());
 		SetAuthErrMsg((const char*)strErrMsg);
 
 		LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
 			GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "BaseBoard", GetLastError()).c_str());
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5203")
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5214")
 			(GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "BaseBoard", GetLastError()).c_str());
-		if (!bCalcFromRunCfg)
-			m_iGetTermSysInfo = -1;
+
 		return;
 	}
 
 	strRet += "|";
 	strRet += szTmp;
+	m_mainBoardId = szTmp;
 
 	nTmpBufLen = 1024;
 	memset(szTmp, 0, sizeof(szTmp));
 	if (!QueryWMIDevice(DiskDrive, "SerialNumber", szTmp, &nTmpBufLen))
 	{
+		if (!bGetFromRunCfg)
+		{
+			errInfo["errcode"] = "RTA5215";
+			errInfo["msg"] = "调用系统api获取硬盘ID号失败";
+			errInfo["getLastErr"] = GetLastError();
+			m_hardDiskId = generateJsonStr(errInfo).second.c_str();
+
+			m_iGetTermSysInfo = -1;
+		}
 		strErrMsg = CSimpleStringA::Format("查询 harddisk sn 失败: %d, 请尝试重启应用", GetLastError());
 		SetAuthErrMsg((const char*)strErrMsg);
 
 		LogWarn(Severity_Middle, Error_Unexpect, ERR_ACCESSAUTH_GET_TERMINAL_FINGERPRINT,
 			GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "DiskDrive", GetLastError()).c_str());
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)(GetOutPutStr("%s%s%s%d", "QueryWMIDevice", "False", "DiskDrive", GetLastError()).c_str());
-		if (!bCalcFromRunCfg)
-			m_iGetTermSysInfo = -1;
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5215")
+			(GetOutPutStr("%s%s", "DiskDrive", "False").c_str());
+
 		return;
 	}
 
 	strRet += "|";
 	strRet += szTmp;
+	m_hardDiskId = szTmp;
+
+	ULONGLONG ullEnd = GetTickCount64();
+	if (ullEnd - ullStart > 5000)
+	{
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5201")
+			("获取系统信息耗时过长:%d秒", (ullEnd - ullStart) / 1000);
+		LogWarn(Severity_Middle, Error_Unexpect, AccessAuthorization_UserErrorCode_GetTermCostTooLong,
+			CSimpleStringA::Format("获取系统信息耗时过长:%d秒", (ullEnd - ullStart) / 1000));
+	}
+#endif // RVC_OS_LINUX
 
-	if (!bCalcFromRunCfg || csInfo.Compare(strRet) != 0)
+	if (!bGetFromRunCfg || csInfo.Compare(strRet) != 0)
 	{
 		eErr = pConfigRun->WriteConfigValue("system", "info", strRet.GetData());
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("device info changed,before[%s],current[%s],write to runcfg:%d"
@@ -1677,33 +1529,11 @@ void CAccessAuthEntity::GetTermSysInfo()
 	else
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("device info: [%s]", strRet.GetData());
 
-	
-	if (!bCalcFromRunCfg)
-	{
-		ZeroMemory(m_btTermSysInfoSM3, sizeof(m_btTermSysInfoSM3));
-		if (!SM3Hash(reinterpret_cast<BYTE*>(const_cast<char*>(strRet.GetData())), strRet.GetLength(), m_btTermSysInfoSM3))
-		{
-			strErrMsg = "get sm3 hash as fingerprint fail";
-			SetAuthErrMsg((const char*)strErrMsg);
-			spFunction->SetSysVar("AuthErrMsg", (const char*)strErrMsg, true);
-			m_FSM.doWarnMsg(ERROR_ACCESSAUTH_GETSM3HASH, (const char*)strErrMsg);
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)((const char*)strErrMsg);
-			m_iGetTermSysInfo = -1;
-		}
-		else
-			m_iGetTermSysInfo = 1;
-	}
-	ULONGLONG ullEnd = GetTickCount64();
-	if (ullEnd - ullStart > 5000)
-	{
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA5201")
-			("获取系统信息耗时过长:%d秒", (ullEnd - ullStart) / 1000);
-		LogWarn(Severity_Middle, Error_Unexpect, AccessAuthorization_UserErrorCode_GetTermCostTooLong, 
-			CSimpleStringA::Format("获取系统信息耗时过长:%d秒", (ullEnd - ullStart) / 1000));
-	}
+	m_iGetTermSysInfo = 1;
+
 	return;
+
 }
-#endif // RVC_OS_WIN
 
 SP_BEGIN_ENTITY_MAP()
 	SP_ENTITY(CAccessAuthEntity)

+ 11 - 7
Module/mod_accessauth/mod_AccessAuth.h

@@ -8,6 +8,9 @@ using namespace AccessAuthorization;
 
 #include "AccessAuthFSM.h"
 
+#define KEY_SIZE 16
+#define BUF_SIZE 256
+
 int HexBuf2StrBuf(PBYTE hexBuf, char** strBuf, DWORD len);
 int StrBuf2HexBuf(LPCTSTR strBuf, PBYTE* hexBuf);
 
@@ -89,8 +92,8 @@ public:
 	// 保存会话密钥
 	bool SaveAuthKey(BYTE* pKey);
 
-	// 调用准入会话密钥加密
-	ErrorCodeEnum EncryptDataWithSessionKey(const CBlob& raw, CBlob& enc);
+	// 调用指定密钥加密
+	ErrorCodeEnum EncryptDataWithKey(const CBlob& raw, CBlob& enc, BYTE* key);
 
 	bool GetTerminalFingerPrint(BYTE* pBuf, int& nBufLen);
 	bool GetTerminalPublicKey(BYTE* pBuf, int& nBufLen, string& pubkey);
@@ -98,10 +101,8 @@ public:
 	void SetAuthErrMsg(const char* pszErrMsg) { m_strAuthErrMsg = pszErrMsg; }
 	const char* GetAuthErrMsg() { return m_strAuthErrMsg; }
 
-	// 获取密码键盘ID和外设ID
-	//oilyang@20210510 add:in order to avoid getting info out of async, check if has pinpad while getting info
-	// 返回1:只有PinPadID;2:只有DeviceID;3:两者都有;0:失败
-	int GetPinPadIDAndDeviceID(CSimpleStringA& strPinPadID, CSimpleStringA& strDeviceID, bool& isPinPadMac, bool& bPinPadOnline);
+	// 获取密码键盘szModel
+	ErrorCodeEnum GetPinPadModel(CSimpleStringA& pinpadModel, bool& bPinPadOnline);
 
 	// 设置时区
 	wstring ANSIToUnicode(const string& str);
@@ -130,7 +131,10 @@ public:
 	SpReqAnsContext<AccessAuthService_InitializeNew_Req, AccessAuthService_InitializeNew_Ans>::Pointer m_ctx;
 	pair<string, string> GenerateTmkToKMC();
 	pair<string, string> EncryptedByPubKey(CSimpleStringA pubKey, bool bNeed04Head = false);
-	void GetTermSysInfo();
+
+	void GetHardWareInfo();
+	CSimpleStringA m_cpuId, m_mainBoardId, m_hardDiskId;
+	int GetTermSysInfo() { return m_iGetTermSysInfo; }
 
 	CSimpleStringA m_publicKey;
 	CSimpleStringA m_privateKey;

+ 8 - 8
Module/mod_agentip/mod_agentip.cpp

@@ -24,7 +24,7 @@ public:
 class CAgentInterpreterEntity : public CEntityBase, public ILogListener, public ITimerListener
 {
 public:
-	CAgentInterpreterEntity() : m_iCurrentOp(ACM_CAMSWITCH_AUTO), m_bConnectAssist(FALSE), m_pCamSwitchChannel(NULL) {}
+	CAgentInterpreterEntity() : m_iCurrentOp(ACM_CAMSWITCH_AUTO), m_bConnectAssist(false), m_pCamSwitchChannel(NULL) {}
 	virtual ~CAgentInterpreterEntity() {}
 	virtual const char *GetEntityName() const { return "AgentInterpreter"; }
 
@@ -57,7 +57,7 @@ public:
 	{
 		m_pCamSwitchChannel = new CamSwitchChannelClient(this);
 		if (Error_Succeed == ConnectAssistChannel()) {
-			m_bConnectAssist = TRUE;
+			m_bConnectAssist = true;
 		}
 		else {
 			GetFunction()->SetTimer(1, this, 3150);
@@ -74,11 +74,11 @@ public:
 			if (m_pCamSwitchChannel != NULL){
 				m_pCamSwitchChannel->GetFunction()->CloseSession();
 				m_pCamSwitchChannel = NULL;
-				m_bConnectAssist = FALSE;
+				m_bConnectAssist = false;
 			}
 
 			if (Error_Succeed == ConnectAssistChannel()) {
-				m_bConnectAssist = TRUE;
+				m_bConnectAssist = true;
 			}
 			else {
 				GetFunction()->SetTimer(1, this, 3150);
@@ -183,13 +183,13 @@ private:
 	{
 		if (1 == dwTimerID)
 		{
-			if (FALSE == m_bConnectAssist) {
+			if (!m_bConnectAssist) {
 				if (Error_Succeed == ConnectAssistChannel()) {
-					m_bConnectAssist = TRUE;
+					m_bConnectAssist = true;
 				}
 			}
 
-			if (TRUE == m_bConnectAssist) {
+			if (m_bConnectAssist) {
 				GetFunction()->KillTimer(1);
 			}
 		}
@@ -199,7 +199,7 @@ private:
 	CamSwitchChannelClient *m_pCamSwitchChannel;
 	int m_iCurrentOp;
 	CAutoArray<CUUID> m_arrListener;
-	BOOL m_bConnectAssist;
+	bool m_bConnectAssist;
 };
 
 CamSwitchChannelClient::CamSwitchChannelClient( CAgentInterpreterEntity *pEntity ) : ChannelService_ClientBase(pEntity)

+ 16 - 380
Module/mod_alarm/AlarmFSM.cpp

@@ -51,7 +51,7 @@ namespace Task
 				//m_fsm->PostEventFIFO(new SendAlarmEvent(isSendSucc));//返回处理结果
 				if(isSendSucc){
 					//成功
-					DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("send alarm statistic m_iRec=%d , m_iThrow=%d , UnSend=%d , m_iSucc=%d , m_iFail=%d",m_fsm->m_iRec,m_fsm->m_iThrow,m_fsm->m_NewUploading_alarm.size(),m_fsm->m_iSucc,m_fsm->m_iFail);
+					//DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("send alarm statistic m_iRec=%d , m_iThrow=%d , UnSend=%d , m_iSucc=%d , m_iFail=%d",m_fsm->m_iRec,m_fsm->m_iThrow,m_fsm->m_NewUploading_alarm.size(),m_fsm->m_iSucc,m_fsm->m_iFail);
 					if(!m_fsm->m_NewUploading_alarm.empty()){
 						Sleep(2000);//赶紧发送
 						continue;
@@ -170,7 +170,7 @@ namespace Task
 
 				bool isSucc = rootRet["success"].asBool();
 				if(isSucc){
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SendAlarmTask [success] is succ,m_eachSum=%d",m_fsm->m_eachSum);
+				//DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SendAlarmTask [success] is succ,m_eachSum=%d",m_fsm->m_eachSum);
 					m_fsm->m_unSendAlarm="";//置为空
 					m_fsm->m_iSucc = m_fsm->m_iSucc+ m_fsm->m_eachSum ;//发送成功
 					m_fsm->m_eachSum = 0;//清空批次数量
@@ -201,7 +201,7 @@ namespace Task
 	};
 }
 
-AlarmFSM::AlarmFSM() : m_pConnection(NULL),m_b_alarmstate(FALSE)
+AlarmFSM::AlarmFSM()
 {
 	InitializeCriticalSection(&cs);
 	INIT_LIST_HEAD(&m_uploading_alarm);
@@ -227,7 +227,6 @@ AlarmFSM::~AlarmFSM()
 
 void AlarmFSM::OnStateTrans( int iSrcState, int iDstState )
 {
-	//Dbg("trans from %s to %s", GetStateName(iSrcState), GetStateName(iDstState));
 	DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("trans from %s to %s", GetStateName(iSrcState), GetStateName(iDstState));
 }
 
@@ -249,23 +248,13 @@ ErrorCodeEnum AlarmFSM::OnInit()
 		Error = spConfig->ReadConfigValueInt("Alarm", "DealWarningTime", m_nDealWarningTime);
 		if (Error_Succeed == Error)
 		{
-			//Dbg("get DealWarningTime=%d from CenterSetting.ini", m_nDealWarningTime);
 			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("get DealWarningTime=%d from CenterSetting.ini", m_nDealWarningTime);
 		} 
 		else
 		{
-			//Dbg("get DealWarningTime from CenterSetting.ini failed");
 			DbgWithLink(LOG_LEVEL_WARN,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("get DealWarningTime from CenterSetting.ini failed");
 		}	
 
-		//int iCenterModel =0;
-		//Error = spConfig->ReadConfigValueInt("Alarm", "CenterModel", iCenterModel);
-		//if(Error==Error_Succeed){
-		//	m_CenterModel = iCenterModel;
-		//	DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("init read CenterSetting.ini CenterModel=%d",m_CenterModel);
-		//}else{
-		//	DbgWithLink(LOG_LEVEL_WARN,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("init read CenterSetting.ini CenterModel failed, use default value CenterModel=2");
-		//}
 		m_CenterModel = 2;
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("init use default value CenterModel=2");
 
@@ -352,41 +341,14 @@ unsigned int AlarmFSM::s0_on_event( FSMEvent* event )
 {
 	if (event->iEvt == EVT_TIMER) 
 	{
-		if(event->param1 == 1){
-			if(m_NewUploading_alarm.empty()){
-
-				ScheduleTimer(1, 3000);// try 3 seconds later
-			}else{
-				if (!m_pConnection) 
-				{
-					m_pConnection = new AlarmConnection(m_pEntity, this);
-					if (m_pConnection->ConnectFromCentralSetting()&& m_pConnection->IsConnectionOK())
-					{
-						//创建成功
-					}else{
-						//创建失败
-						DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("connect server fail,config or Servers Error!");
-						closeClientConn();//断开连接
-					}	
-				}
-				if (!m_pConnection) 
-				{
-					ScheduleTimer(1, 10000); // try 10 seconds later
-				}
-				else 
-				{
-					PostEventLIFO(new FSMEvent(USER_EVT_JMP_ALARMUP));//跳转S1状态
-				}
+		if(event->param1 == 2){
+			//开始启动调用发送线程
+			Task::SendAlarmTask* alarmTask = new Task::SendAlarmTask(this);
+			ErrorCodeEnum rc = m_pEntity->GetFunction()->PostThreadPoolTask(alarmTask);
+			if(rc!=Error_Succeed){
+				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("s0 create SendAlarmTask is fail,%d",(int)rc);
+				ScheduleTimer(2, 10*1000);//等待一段时间
 			}
-		}else if(event->param1 == 2){
-				//开始启动调用发送线程
-				Task::SendAlarmTask* alarmTask = new Task::SendAlarmTask(this);
-				ErrorCodeEnum rc = m_pEntity->GetFunction()->PostThreadPoolTask(alarmTask);
-				if(rc!=Error_Succeed){
-					DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("s0 create SendAlarmTask is fail,%d",(int)rc);
-					ScheduleTimer(2, 10*1000);//等待一段时间
-				}
-
 		}
 	}else if (event->iEvt == USER_EVT_JMP_NEW_ALARM){
 
@@ -406,20 +368,6 @@ unsigned int AlarmFSM::s0_on_event( FSMEvent* event )
 void AlarmFSM::s1_on_entry()
 {
 
-	if(m_NewUploading_alarm.empty()){
-		PostEventLIFO(new FSMEvent(USER_EVT_DISCONNECT_FAIL));//为空时,跳回S0状态
-	}else{
-		//Dbg("send alarm statistic m_iRec=%d , m_iThrow=%d , UnSend=%d , m_iSend=%d , m_iSucc=%d , m_iFail=%d",m_iRec,m_iThrow,m_NewUploading_alarm.size(),m_iSend,m_iSucc,m_iFail);
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("send alarm statistic m_iRec=%d , m_iThrow=%d , UnSend=%d , m_iSend=%d , m_iSucc=%d , m_iFail=%d",m_iRec,m_iThrow,m_NewUploading_alarm.size(),m_iSend,m_iSucc,m_iFail);
-		m_iEachSend = 0;
-		//发送告警信息
-		if(SendAlarm()){
-			m_iEachSend++;//发送成功
-		}else{
-			PostEventLIFO(new FSMEvent(USER_EVT_DISCONNECT));//发送失败时,跳回S0状态
-		}
-		
-	}
 }
 
 void AlarmFSM::s1_on_exit()
@@ -429,169 +377,35 @@ void AlarmFSM::s1_on_exit()
 
 unsigned int AlarmFSM::s1_on_event(FSMEvent* event)
 {
-	if (event->iEvt == USER_EVT_DISCONNECT_FAIL) 
-	{
-		//Dbg("disconnect 10s at alarmupload s1");
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("disconnect 5s at alarmupload s1");
-		closeClientConn();//断开连接
-		ScheduleTimer(2, 5000); // try 5 seconds later
-	}
-	else if (event->iEvt == USER_EVT_DISCONNECT_SUCC)
-	{
-		//Dbg("disconnect 3s at alarmupload s1");
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("disconnect 2s at alarmupload s1");
-		closeClientConn();//断开连接
-		ScheduleTimer(2, 2000); // try 2 seconds later
-	}
-	else if (event->iEvt == EVT_TIMER)
-	{
-		PostEventLIFO(new FSMEvent(USER_EVT_JMP_START));//跳转S0状态
-	}
-	else if (event->iEvt ==USER_EVT_UPLOAD_ANS)
-	{
-		if(m_iEachSend<=50)
-		{
-			if(!m_NewUploading_alarm.empty()){
-				if(SendAlarm()){
-					m_iEachSend++;//发送成功
-				}else{
-					PostEventLIFO(new FSMEvent(USER_EVT_DISCONNECT_FAIL));//发送失败时,跳回S0状态
-				}
-			}else{
-				PostEventLIFO(new FSMEvent(USER_EVT_DISCONNECT_FAIL));//为空时,跳回S0状态
-			}
-		}
-		else
-		{	
-			PostEventLIFO(new FSMEvent(USER_EVT_DISCONNECT_SUCC));//达到一定发送数量,主动断开,跳回S0状态
-		}
-	}
 	return 0;
 }
 
 void AlarmFSM::s2_on_entry()
 {
-	//connect
-	if (!m_pConnection) 
-	{
-		m_pConnection = new AlarmConnection(m_pEntity, this);
-		if (!m_pConnection->ConnectFromCentralSetting())
-		{
-			//Dbg("connect server fail,config or Servers Error!");
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("connect server fail,config or Servers Error!");
-		}	
-	}
-
-	if (m_pConnection->IsConnectionOK()) //upload alarm state
-	{
-		if (m_b_alarmstate)
-		{
-			m_pConnection->SendAlarmState(&m_uploading_alarmstate);
-			//Dbg("send alarmstate success");
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("send alarmstate success");
-			delete m_uploading_alarmstate.Description;
-			PostEventLIFO(new FSMEvent(USER_EVT_JMP_RELEASE));
-		}
-	}
-	else
-	{
-		//链接失效,需要先释放并清空链接,否则一直不会重连
-		m_pConnection->Close();
-		m_pConnection->DecRefCount();
-		m_pConnection = NULL;
-
-		PostEventLIFO(new FSMEvent(USER_EVT_JMP_RELEASE));		
-	}
+	
 }
 void AlarmFSM::s2_on_exit()
 {
-		m_b_alarmstate = FALSE;
-		CancelTimer(3);
+
 }
 unsigned int AlarmFSM::s2_on_event(FSMEvent* event)
 {
-	if (event->iEvt == USER_EVT_DISCONNECT) 
-	{
-		//Dbg("rx disconnect evt at alarm upload s2");
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("rx disconnect evt at alarm upload s2");
-		if (m_pConnection) 
-		{
-			m_pConnection->Close();
-			m_pConnection->DecRefCount();
-			m_pConnection = NULL;
-		}
-		ScheduleTimer(3, 10000);
-	} 
+
 	return 0;
 }
 
 void AlarmFSM::s3_on_entry()
 {
-
-	PostEventFIFO(new FSMEvent(USER_EVT_DISCONNECT));
-
-	if (!m_pConnection) 
-	{
-		ScheduleTimer(4, 1000); // try 30 seconds later
-	} 
+ 
 }
 void AlarmFSM::s3_on_exit()
 {
-	CancelTimer(4);
-}
-unsigned int AlarmFSM::s3_on_event(FSMEvent* event)
-{
-	if (event->iEvt == USER_EVT_DISCONNECT) 
-	{
-		//Dbg(" disconnect evt at alarm upload s3");
-		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("disconnect evt at alarm upload s3");
-		/*if (m_pConnection) 
-		{
-		m_pConnection->Close();
-		m_pConnection->DecRefCount();
-		m_pConnection = NULL;
-		}*/
-	} 
-	return 0;
-}
 
-//增加告警
-void AlarmFSM::add_alarm(alarm_t*alarm)
-{
-	EnterCriticalSection(&cs);
-	add_new_alarm(alarm,&m_uploading_alarm);
-	LeaveCriticalSection(&cs);
 }
-
-//设置告警状态
-void AlarmFSM::set_alarm_state(const CUUID nLogID,DWORD LifeId,const SeverityLevelEnum eLevel,
-								DWORD Item,const char *pszMessage)
+unsigned int AlarmFSM::s3_on_event(FSMEvent* event)
 {
-	m_uploading_alarmstate.SN	= nLogID;
-	_itoa((int)eLevel,&m_uploading_alarmstate.Level,16);
-	m_uploading_alarmstate.LifeID		= LifeId;
-	m_uploading_alarmstate.Item	= Item;
-	char cDescription[512];
-	strcpy(cDescription,pszMessage);
-	m_uploading_alarmstate.Description	= _strdup(cDescription);
-	m_b_alarmstate = TRUE;
-}
 
-//获取告警数量
-bool AlarmFSM::is_alarm_empty()
-{		
-	EnterCriticalSection(&cs);
-	bool i = list_empty(&m_uploading_alarm);
-	LeaveCriticalSection(&cs);
-	return i;
-}
-
-bool AlarmFSM::is_UploadedAlarm_empty()
-{		
-	EnterCriticalSection(&cs);
-	bool i = list_empty(&m_uploaded_alarm);
-	LeaveCriticalSection(&cs);
-	return i;
+	return 0;
 }
 
 static time_t NowTime()
@@ -604,135 +418,11 @@ static time_t NowTime()
 	return  mktime(tm_Now);  
 }
 
-void AlarmFSM::add_UploadedAlarm(alarm_t*alarm)
-{
-	alarmUpgraded_t*upedAlarm = new alarmUpgraded_t();
-	upedAlarm->EntityName = new char[32];
-	if (NULL != upedAlarm->EntityName)
-	{
-		memset(upedAlarm->EntityName, 0, 32);
-	}
-	upedAlarm->SN = new char[20];
-	if (NULL != upedAlarm->SN)
-	{
-		memset(upedAlarm->SN, 0, 20);
-	}
-	upedAlarm->Description = new char[512];
-	if (NULL != upedAlarm->Description)
-	{
-		memset(upedAlarm->Description, 0, 512);
-	}
-
-	strcpy(upedAlarm->EntityName,alarm->EntityName);
-	strcpy(upedAlarm->SN,alarm->SN);	
-	upedAlarm->LifeID = alarm->LifeID;
-	upedAlarm->Item	= alarm->Item;
-	upedAlarm->UserCode	= alarm->UserCode;
-	upedAlarm->Level	= alarm->Level;
-	strcpy(upedAlarm->Description,alarm->Description);
-	upedAlarm->time = NowTime();
-
-	//如果是相同实体且相同描述,则更新告警。否则做为新告警添加
-	if (!update_UploadedAlarm(upedAlarm))
-	{
-		EnterCriticalSection(&cs);	
-		add_new_upalarm(upedAlarm,&m_uploaded_alarm);
-		LeaveCriticalSection(&cs);	
-	}	
-}
-
-bool AlarmFSM::find_UploadedAlarm(alarm_t*alarm)
-{
-	EnterCriticalSection(&cs);
-
-	if (is_UploadedAlarm_empty())
-	{
-		return false;
-	}
-
-	//time_t tNow = NowTime();
-	//获取时间报错,改为直接获取
-	time_t t_Now = time(0);
-	struct tm* tm_Now = localtime(&t_Now);
-	time_t tNow = mktime(tm_Now);
-	//Dbg("tNow[%d]", tNow);
-
-	alarmUpgraded_t* uploadedAlarm;
-	list_for_each_entry(uploadedAlarm, &m_uploaded_alarm, alarmUpgraded_t, entry)
-	{
-		if (0 == strcmp(uploadedAlarm->EntityName, alarm->EntityName)
-			&& 0 == strcmp(uploadedAlarm->Description, alarm->Description))
-		{
-			if (tNow > uploadedAlarm->time)
-			{
-				UINT nSecond = tNow - uploadedAlarm->time;
-				UINT nMin = nSecond/60;
-				if (nMin <= m_nDealWarningTime)
-				{
-					//在指定时间内(可配置),收到同一实体的同一告警,去重
-					//Dbg("find same uploaded alarm list, don't need to send again");
-					DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("find same uploaded alarm list, don't need to send again");
-					return true;
-				}			
-			}
-			else
-			{
-				//Dbg("uploadedAlarm->time[%d] >= tNow[%d], time is wrong", uploadedAlarm->time, tNow);
-				DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("uploadedAlarm->time[%d] >= tNow[%d], time is wrong", uploadedAlarm->time, tNow);
-			}
-		}
-	}	      			
-	LeaveCriticalSection(&cs);
-
-	return false;
-}
-
-bool AlarmFSM::update_UploadedAlarm(alarmUpgraded_t*alarm)
-{
-	EnterCriticalSection(&cs);
-	if (is_UploadedAlarm_empty())
-	{
-		return false;
-	}
-
-	alarmUpgraded_t* uploadedAlarm;
-	list_for_each_entry(uploadedAlarm, &m_uploaded_alarm, alarmUpgraded_t, entry)
-	{
-		if (0 == strcmp(uploadedAlarm->EntityName, alarm->EntityName)
-			|| 0 == strcmp(uploadedAlarm->Description, alarm->Description))
-		{
-			update_upalarm(alarm, uploadedAlarm);
-			//替换后,旧的对象需要清理
-			//free(uploadedAlarm->Description);
-			//free(uploadedAlarm->EntityName);
-			//free(uploadedAlarm->SN);
-			delete[] uploadedAlarm->Description;
-			uploadedAlarm->Description=NULL;
-
-			delete[] uploadedAlarm->EntityName;
-			uploadedAlarm->EntityName=NULL;
-
-			delete[] uploadedAlarm->SN;
-			uploadedAlarm->SN=NULL;
-
-			delete uploadedAlarm;
-			uploadedAlarm=NULL;
-
-			return true;
-		}
-	}	      			
-	LeaveCriticalSection(&cs);
-
-	return false;
-}
-
-
 //增加消息到新告警列表
 void AlarmFSM::add_NewAlarm(alarm_t* alarm)
 {
 	EnterCriticalSection(&cs);
 	if(m_NewUploading_alarm.size()>=UPLOG_MAX_COUNT){
-		//Dbg("队列已满,删除首元素");
 		m_iThrow++;
 		alarm_t* oldAlarm = (alarm_t*)(*m_NewUploading_alarm.begin());//集合首个元素
 		m_NewUploading_alarm.erase(m_NewUploading_alarm.begin());//集合删除首元素
@@ -773,45 +463,6 @@ alarm_t* AlarmFSM::removeAlarm()
 	return dAlarm;//返回
 }
 
-//关闭连接
-void AlarmFSM::closeClientConn()
-{
-	if(m_pConnection!=NULL){
-		m_pConnection->Close();
-		m_pConnection->DecRefCount();
-		m_pConnection = NULL;
-	}
-}
-//发送新告警信息
-bool AlarmFSM::SendAlarm(){
-		
-		alarm_t*alarm = removeAlarm();
-		if (alarm == NULL)
-		{
-			//Dbg("get alarm error");	
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("get alarm error");
-			return false;
-		}
-		m_iSend++;//发送计数
-		m_pConnection->SendAlarm(alarm);
-
-		free(alarm->Description);
-		alarm->Description=NULL;
-
-		free(alarm->EntityName);
-		alarm->EntityName=NULL;
-
-		free(alarm->SN);
-		alarm->SN=NULL;
-
-		free(alarm->warnTime);
-		alarm->warnTime=NULL;
-
-		delete alarm;
-		alarm=NULL;
-
-		return true;
-}
 
 void AlarmFSM::HttpsLogCallBack(const char* logtxt)
 {
@@ -904,19 +555,4 @@ std::string AlarmFSM::alarmJson()
 	return jsonStr;
 }
 
-#ifdef RVC_OS_WIN
-#else
-int AlarmFSM::HexBuf2StrBuf(PBYTE hexBuf, char** strBuf, DWORD len)
-{
-	char* tmpStr = *strBuf;
-	int count = 0;
-	for (int i = 0; i < len; ++i)
-	{
-		sprintf(tmpStr + count, "%0.2x", hexBuf[i]);
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("strBut:%s", tmpStr);
-		count += 2;
-	}
-	return 0;
-}
-#endif
 

+ 3 - 272
Module/mod_alarm/AlarmFSM.h

@@ -177,29 +177,13 @@ public:
 	void s3_on_entry();
 	void s3_on_exit();
 	unsigned int s3_on_event(FSMEvent* event);
-	//增加告警
-	void add_alarm(alarm_t*alarm);
-	//设置告警状态
-	void set_alarm_state(const CUUID nLogID,DWORD LifeId,const SeverityLevelEnum eLevel,
-						DWORD Item,const char *pszMessage);
 
-	//增加历史告警
-	void add_UploadedAlarm(alarm_t*alarm);
-	bool is_UploadedAlarm_empty();
-
-	//是否是已上传告警
-	bool find_UploadedAlarm(alarm_t*alarm);
-	bool update_UploadedAlarm(alarmUpgraded_t*alarm);
-
-	//告警状态标志位
-	BOOL m_b_alarmstate;
 
 	//增加告警新接口
 	void add_NewAlarm(alarm_t*alarm);
 	//增加告警取出消息新接口
 	alarm_t* removeAlarm();
-	void closeClientConn();
-	bool SendAlarm();
+
 	int m_iEachSend;//每次发送数量
 	long m_iRec;//累计收到的告警数目
 	long m_iSend;//累计队列发送总数,新模式丢失这个数据统计
@@ -222,18 +206,13 @@ public:
 
 	static void HttpsLogCallBack(const char* logtxt);
 	string alarmJson();
-#ifdef RVC_OS_WIN
-#else
-	int HexBuf2StrBuf(PBYTE hexBuf, char** strBuf, DWORD len);
-#endif
 private:
-	//获取告警数量
-	bool is_alarm_empty();
+
 	
 
 private:
 	CRITICAL_SECTION cs;
-	AlarmConnection *m_pConnection;
+
 	struct list_head m_uploading_alarm; 
 	struct list_head m_uploaded_alarm; 
 	alarm_state_t m_uploading_alarmstate;
@@ -242,252 +221,4 @@ private:
 	int m_nDealWarningTime;
 	
 };
-
-class AlarmConnection : public SpSecureClient
-{
-public:
-	AlarmConnection(CEntityBase *pEntity, AlarmFSM *pFSM) : SpSecureClient(pEntity), m_pFSM(pFSM) {}
-	virtual ~AlarmConnection() {}
-
-	void SendAlarm(alarm_t*alarm)
-	{
-		
-		AlarmUpload alarmup = {0};
-		CSystemStaticInfo si;
-		{
-			m_pEntity->GetFunction()->GetSystemStaticInfo(si);
-		}
-		strcpy(alarmup.TerminalNo, si.strTerminalID);
-		strcpy(alarmup.EntityName, alarm->EntityName);
-		strcpy(alarmup.SN,alarm->SN);
-		alarmup.LifeID = alarm->LifeID;
-		alarmup.Item = alarm->Item;
-		alarmup.UserCode = alarm->UserCode;
-		alarmup.Level = alarm->Level;
-		strcpy(alarmup.Description, alarm->Description);
-		CSmartPointer<IPackage> pkt = CreateNewPackage("WARNING");
-		pkt->AddStruct("WARNING", false, false, (LPBYTE)&alarmup, sizeof(AlarmUpload));
-		//SendPackage(pkt);
-		if (SendPackage(pkt) == "")
-		{
-			//Dbg("send fail");
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("send fail");
-			m_pFSM->m_iFail++;//失败计数
-			//发送失败,断开连接
-			m_pFSM->PostEventFIFO(new FSMEvent(USER_EVT_DISCONNECT_FAIL));//失败,等下次发送
-		}else{
-			//Dbg("send succ");
-		}
-	}
-
-	void SendAlarmState(alarm_state_t*alarmstate)
-	{
-		AlarmStateUpload alarmstate0 = {0};
-		CSystemStaticInfo si;
-		{
-			m_pEntity->GetFunction()->GetSystemStaticInfo(si);
-		}
-		strcpy(&alarmstate0.TerminalNo[0], si.strTerminalID);
-		alarmstate0.SN = alarmstate->SN;
-		alarmstate0.LifeID = alarmstate->LifeID;
-		alarmstate0.Level = alarmstate->Level;
-		alarmstate0.Item = alarmstate->Item;
-		strcpy(&alarmstate0.Description[0], alarmstate->Description);
-		CSmartPointer<IPackage> pkt = CreateNewPackage("STATE");
-		pkt->AddStruct("STATE", false, false, (LPBYTE)&alarmstate, sizeof(AlarmUpload));
-		SendPackage(pkt);
-	}
-
-protected:
-	virtual void OnPkgAnswer(const CSmartPointer<IPackage> &pRecvPkg) {
-		string serviceCode = pRecvPkg->GetServiceCode();
-		if (serviceCode == "WARNING") 
-		{
-			//Dbg("rece ans 1");
-			DWORD dwSysCode, dwUserCode;
-			string strErrMsg;
-			ErrorCodeEnum rc = Error_Succeed;
-			if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
-			{
-				rc = (ErrorCodeEnum)dwSysCode;
-				LogWarn(Severity_Low, rc, dwUserCode, CSimpleStringA::Format("create packet Fail!, %s", strErrMsg.c_str()));
-				//跳出连接
-				OnDisconnect();
-			}else{
-				//Dbg("rece ans 2");
-				int nLen = pRecvPkg->GetStructLen("WANS");
-				if (nLen > 0) 
-				{
-					BYTE *pBuf = new BYTE[nLen];
-					memset(pBuf, 0, nLen);
-					int nArrayNum = 0;
-					if (pRecvPkg->GetStructData("WANS", pBuf, &nLen, &nArrayNum)) 
-					{
-						//Dbg("rece ans 3");
-						FSMEvent *evt = new AlarmAnsEvent(pBuf, nLen);
-						AlarmAnsEvent *ans = (AlarmAnsEvent *)evt;
-						if (ans->m_reply.ResultCode == Finish)
-						{
-							//Dbg("send finish!");
-							m_pFSM->m_iSucc++;//成功计数
-						}
-						else if (ans->m_reply.ResultCode == Error)
-						{
-							m_pFSM->m_iFail++;//失败计数
-							//Dbg("send error!");
-							DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("send error!");
-						}
-						delete evt;
-						m_pFSM->PostEventFIFO(new FSMEvent(USER_EVT_UPLOAD_ANS));//继续发送
-					} 
-					else 
-					{
-						//Dbg("create invalid alarm upans packet!");
-						DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("create invalid alarm upans packet!");
-						OnDisconnect();
-						//跳出连接
-					}
-					delete pBuf;
-				}
-			}
-		} 
-		else if (serviceCode == "STATE")
-		{
-			int nLen = pRecvPkg->GetStructLen("SANS");
-			if (nLen > 0) 
-			{
-				BYTE *pBuf = new BYTE[nLen];
-				memset(pBuf, 0, nLen);
-				int nArrayNum = 0;
-				if (pRecvPkg->GetStructData("SANS", pBuf, &nLen, &nArrayNum)) 
-				{
-					FSMEvent *evt = new AlarmStateAnsEvent(pBuf, nLen);
-					AlarmStateAnsEvent *ans = (AlarmStateAnsEvent *)evt;
-					if (ans->m_reply.ResultCode == Finish)
-					{
-						//Dbg("alarmstate upload finish!");
-						DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("alarmstate upload finish!");
-
-					}
-					else if (ans->m_reply.ResultCode == Error)
-					{
-						//Dbg("alarmstate upload error!");
-						DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("alarmstate upload error!");
-					}
-					delete evt;
-				} 
-				else 
-				{
-					//Dbg("create invalid alarmstate upans packet!");
-					DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("create invalid alarmstate upans packet!");
-					OnDisconnect();
-				}
-				delete pBuf;
-			}
-
-		}
-		else 
-		{
-			//Dbg("unknown service code!");
-			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("unknown service code!");
-			OnDisconnect();
-			//跳出连接
-		}
-	}
-	virtual void OnDisconnect() 
-	{
-		m_pFSM->m_iFail++;//失败计数
-		m_pFSM->PostEventFIFO(new FSMEvent(USER_EVT_DISCONNECT_FAIL));
-	}
-	virtual void OnReceivePackage(IPackage *pRecvPkg)
-	{
-		//string serviceCode = pRecvPkg->GetServiceCode();
-		//if (serviceCode == "WARNING") 
-		//{
-		//	Dbg("rece ans 1");
-		//	DWORD dwSysCode, dwUserCode;
-		//	string strErrMsg;
-		//	ErrorCodeEnum rc = Error_Succeed;
-		//	if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
-		//	{
-		//		rc = (ErrorCodeEnum)dwSysCode;
-		//		LogWarn(Severity_Low, rc, dwUserCode, CSimpleStringA::Format("create packet Fail!, %s", strErrMsg.c_str()));
-		//		//跳出连接
-		//		OnDisconnect();
-		//	}else{
-		//		Dbg("rece ans 2");
-		//		int nLen = pRecvPkg->GetStructLen("WANS");
-		//		if (nLen > 0) 
-		//		{
-		//			BYTE *pBuf = new BYTE[nLen];
-		//			memset(pBuf, 0, nLen);
-		//			int nArrayNum = 0;
-		//			if (pRecvPkg->GetStructData("WANS", pBuf, &nLen, &nArrayNum)) 
-		//			{
-		//				Dbg("rece ans 3");
-		//				FSMEvent *evt = new AlarmAnsEvent(pBuf, nLen);
-		//				AlarmAnsEvent *ans = (AlarmAnsEvent *)evt;
-		//				if (ans->m_reply.ResultCode == Finish)
-		//				{
-		//					Dbg("alarm upload finish!");
-		//				}
-		//				else if (ans->m_reply.ResultCode == Error)
-		//				{
-		//					Dbg("alarm upload error!");
-		//				}
-		//				delete evt;
-		//				m_pFSM->PostEventFIFO(new FSMEvent(USER_EVT_UPLOAD_ANS));//继续发送
-		//			} 
-		//			else 
-		//			{
-		//				Dbg("create invalid alarm upans packet!");
-		//				OnDisconnect();
-		//				//跳出连接
-		//			}
-		//			delete pBuf;
-		//		}
-		//	}
-		//} 
-		//else if (serviceCode == "STATE")
-		//{
-		//	int nLen = pRecvPkg->GetStructLen("SANS");
-		//	if (nLen > 0) 
-		//	{
-		//		BYTE *pBuf = new BYTE[nLen];
-		//		memset(pBuf, 0, nLen);
-		//		int nArrayNum = 0;
-		//		if (pRecvPkg->GetStructData("SANS", pBuf, &nLen, &nArrayNum)) 
-		//		{
-		//			FSMEvent *evt = new AlarmStateAnsEvent(pBuf, nLen);
-		//			AlarmStateAnsEvent *ans = (AlarmStateAnsEvent *)evt;
-		//			if (ans->m_reply.ResultCode == Finish)
-		//			{
-		//				Dbg("alarmstate upload finish!");
-		//			}
-		//			else if (ans->m_reply.ResultCode == Error)
-		//			{
-		//				Dbg("alarmstate upload error!");
-		//			}
-		//			delete evt;
-		//		} 
-		//		else 
-		//		{
-		//			Dbg("create invalid alarmstate upans packet!");
-		//			OnDisconnect();
-		//		}
-		//		delete pBuf;
-		//	}
-
-		//}
-		//else 
-		//{
-		//	Dbg("unknown service code!");
-		//	OnDisconnect();
-		//	//跳出连接
-		//}
-	}
-
-private:
-	AlarmFSM *m_pFSM;
-};
 #endif //RVC_MOD_ALARM_FSM_H_

+ 1 - 2
Module/mod_alarm/mod_alarm.cpp

@@ -85,8 +85,7 @@ void CAlarmEntity::OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,con
 
 		m_fsm.add_NewAlarm(Alarm);
 		m_fsm.m_iRec++;
-		if(m_fsm.m_iRec%50==0){
-			//Dbg("接收总数=%d,抛弃总数=%d,未发送数目=%d",m_fsm.m_iRec,m_fsm.m_iThrow,m_fsm.m_NewUploading_alarm.size());
+		if(m_fsm.m_iRec%500==0){
 			DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("接收总数=%d,抛弃总数=%d,未发送数目=%d",m_fsm.m_iRec,m_fsm.m_iThrow,m_fsm.m_NewUploading_alarm.size());
 		}
 }

+ 1 - 1
Module/mod_assistantchannel/mod_assistantchannel.cpp

@@ -141,7 +141,7 @@ DeviceTypeEnum CBizChannelEntity::RvcGetDeviceType()
 	}
 
 	if (eType >= 0 && eType < sizeof(Device_Type_Table)/sizeof(char*)){
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("device type is %s.", Device_Type_Table[eType]);
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("device type is %s.", Device_Type_Table[eType]);
 	}
 		
 	return eType;

+ 0 - 449
Module/mod_cardissuerstore/CardIssuer.xml

@@ -1,449 +0,0 @@
-<?xml version="1.0" encoding="gb2312" ?>
-<entity name="CardIssuer">
-	<class name="CardIssuerService" overlap="true" exclusive="false">	
-		<twoway name="Insert" overlap="true">
-			<req>
-				<param name="aid" type="string"/>
-			</req>
-			<res>
-			</res>			
-		</twoway>
-		<oneway name="CancelInsert" overlap="true">			
-		</oneway>
-		<oneway name="InsertWaitMore" overlap="true">			
-		</oneway>					
-		<twoway name="Read" overlap="true">
-			<req>
-				<param name="aid" type="string"/>
-				<param name="reserved1" type="int"/>
-				<param name="reserved2" type="int"/>
-				<param name="reserved3" type="string"/>
-				<param name="reserved4" type="string"/>
-			</req>
-			<res>
-				<param name="track1" type="string"/>
-				<param name="track2" type="string"/>
-				<param name="track3" type="string"/>
-				<param name="ICType" type="int"/>
-				<param name="ICData" type="string"/>
-				<param name="status" type="int" />
-				<param name="t2Account" type="string" />
-				<param name="t2Region" type="string" />
-				<param name="t2CardSerial" type="string" />
-				<param name="t2CVC" type="string" />
-				<param name="t2ExpireDate" type="string" />
-				<param name="reserved1" type="int"/>
-				<param name="reserved2" type="int"/>
-				<param name="reserved3" type="string"/>
-				<param name="reserved4" type="string"/>
-			</res>
-		</twoway>			
-		<twoway name="Capture" overlap="true">
-			<req>
-			</req>
-			<res>
-			</res>			
-		</twoway>
-		<twoway name="Eject" overlap="true">
-			<req>
-			</req>
-			<res>
-			</res>			
-		</twoway>						
-		<twoway name="PreOnline" overlap="true">
-			<req>
-				<param name="businessData" type="string"/>
-				<param name="reserved1" type="string"/>
-				<param name="reserved2" type="string"/>
-			</req>
-			<res>
-				<param name="result" type="string"/>
-			</res>			
-		</twoway>
-		<twoway name="PostOnline" overlap="true">
-			<req>
-				<param name="data" type="string"/>
-			</req>
-			<res>
-				<param name="result" type="string"/>
-			</res>			
-		</twoway>
-		<oneway name="Exit" overlap="true">			
-		</oneway>			
-		<twoway name="Issue" overlap="true">
-			<req>
-			</req>
-			<res>
-			</res>			
-		</twoway>				
-		<twoway name="GetMaterialCount" overlap="true">
-			<req>
-			</req>
-			<res>
-				<param name="remains" type="int"/>
-				<param name="captured" type="int"/>
-				<param name="issued" type="int"/>
-				<param name="mixed" type="int"/>
-			</res>			
-		</twoway>
-		<twoway name="SetMaterialCount" overlap="true">
-			<req>
-				<param name="remains" type="int"/>
-				<param name="captured" type="int"/>
-				<param name="issued" type="int"/>
-				<param name="bRemains" type="bool"/>
-				<param name="bCaptured" type="bool"/>				
-				<param name="bIssued" type="bool"/>
-				<param name="mixed" type="int"/>
-				<param name="bMixed" type="bool"/>
-			</req>
-			<res>
-			</res>			
-		</twoway>
-		<oneway name="SetIssueFlag" overlap="true">			
-		</oneway>
-		<twoway name="ReadEx" overlap="true">
-			<req>
-				<param name="aid" type="string"/>
-				<param name="reserved1" type="string"/>
-				<param name="reserved2" type="string"/>
-			</req>
-			<res>
-				<param name="track1" type="string"/>
-				<param name="track2" type="string"/>
-				<param name="track3" type="string"/>
-				<param name="CDType" type="int"/>
-				<param name="ICType" type="int"/>
-				<param name="CMBType" type="int"/>
-				<param name="ICData" type="string"/>
-				<param name="status" type="int" />
-				<param name="t2Account" type="string" />
-				<param name="t2Region" type="string" />
-				<param name="t2CardSerial" type="string" />
-				<param name="t2CVC" type="string" />
-				<param name="t2ExpireDate" type="string" />
-				<param name="reserved1" type="string"/>
-				<param name="reserved2" type="string"/>
-			</res>
-		</twoway>
-		<twoway name="QueryCardInfo" overlap="true">
-			<req>
-			</req>
-			<res>
-				<param name="position" type="int"/>
-				<param name="reserved1" type="int"/>
-				<param name="reserved2" type="string"/>
-			</res>			
-		</twoway>
-		<twoway name="WriteTrack" overlap="true">
-			<req>
-				<param name="mode" type="int"/>
-				<param name="co" type="int"/>
-				<param name="track1" type="wstring"/>
-				<param name="track2" type="wstring"/>
-				<param name="track3" type="wstring"/>
-				<param name="reserved" type="wstring"/>
-			</req>
-			<res>
-				<param name="result" type="int"/>
-				<param name="reserved1" type="int"/>
-				<param name="reserved2" type="string"/>
-			</res>
-		</twoway>
-		<twoway name="GetMaterialCountEx" overlap="true">
-			<req>
-				<param name="GetHopper" type="array_int"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>		
-			</req>
-			<res>
-				<param name="captured" type="int"/>
-				<param name="hasHopper" type="array_int"/>
-				<param name="CardBoxNo" type="array_string"/>
-				<param name="PsbCode" type="array_string"/>
-				<param name="PsbName" type="array_string"/>
-				<param name="Maintainer" type="array_string"/>
-				<param name="MaintainTime" type="array_string"/>
-				<param name="CardInit" type="array_int"/>
-				<param name="CardPercent" type="array_int"/>
-				<param name="remains" type="array_int"/>
-				<param name="issued" type="array_int"/>
-				<param name="mixed" type="array_int"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>
-			</res>			
-		</twoway>
-		<twoway name="SetMaterialCountEx" overlap="true">
-			<req>
-				<param name="SetHopper" type="array_int"/>
-				<param name="SetCaptured" type="int"/>
-				<param name="captured" type="int"/>
-				<param name="CardBoxNo" type="array_string"/>
-				<param name="PsbCode" type="array_string"/>
-				<param name="PsbName" type="array_string"/>
-				<param name="Maintainer" type="array_string"/>
-				<param name="MaintainTime" type="array_string"/>
-				<param name="CardInit" type="array_int"/>
-				<param name="CardPercent" type="array_int"/>
-				<param name="remains" type="array_int"/>
-				<param name="issued" type="array_int"/>
-				<param name="mixed" type="array_int"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>
-			</req>
-			<res>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>	
-			</res>			
-		</twoway>
-		<twoway name="SetSomeFlag" overlap="true">
-			<req>
-				<param name="IssueBusiness" type="int"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>					
-			</req>
-			<res>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>
-			</res>				
-		</twoway>
-		<twoway name="GetSCIInfo" overlap="true">
-			<req>
-			</req>
-			<res>
-				<param name="connected" type="int"/>
-				<param name="DevSN" type="string"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>
-			</res>			
-		</twoway>
-		<twoway name="IssueEx" overlap="true">
-			<req>
-				<param name="hopper" type="int"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>			
-			</req>
-			<res>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>					
-			</res>			
-		</twoway>
-		<twoway name="OpenSafeLock" overlap="true">
-			<req>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>			
-			</req>
-			<res>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>					
-			</res>			
-		</twoway>
-		<twoway name="SAMICCommand" overlap="true">
-			<req>
-				<param name="cmdType" type="int"/>
-				<param name="param1" type="array_int"/>
-				<param name="param2" type="array_string"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>			
-			</req>
-			<res>
-				<param name="ret1" type="array_int"/>
-				<param name="ret2" type="array_string"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>					
-			</res>			
-		</twoway>
-		<twoway name="QueryPrinterStatus" overlap="true">
-			<req>
-				<param name="param1" type="array_int"/>
-				<param name="param2" type="array_string"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>			
-			</req>
-			<res>
-				<param name="ret1" type="array_int"/>
-				<param name="ret2" type="array_string"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>					
-			</res>			
-		</twoway>
-		<twoway name="Print" overlap="true">
-			<req>
-				<param name="data1" type="blob"/>
-				<param name="data2" type="blob"/>
-				<param name="data3" type="blob"/>
-				<param name="data4" type="blob"/>
-				<param name="data5" type="blob"/>
-				<param name="data6" type="blob"/>				
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>			
-			</req>
-			<res>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>					
-			</res>			
-		</twoway>
-		<twoway name="QuerySCIList" overlap="true">
-			<req>			
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>			
-			</req>
-			<res>
-				<param name="sciNo" type="array_string"/>
-        <param name="arrMateriel" type="array_string"/>
-        <param name="CardGroove" type="array_string"/>
-        <param name="CardBoxNo" type="array_string"/>
-        <param name="PsbCode" type="array_string"/>
-        <param name="PsbName" type="array_string"/>
-        <param name="CardInit" type="array_uint"/>
-        <param name="CardRemains" type="array_uint"/>
-        <param name="CardIssued" type="array_uint"/>
-        <param name="CardMixed" type="array_uint"/>
-        <param name="CardPercent" type="array_uint"/>
-        <param name="Maintainer" type="array_string"/>
-        <param name="MaintainTime" type="array_string"/>
-        <param name="UpdateTime" type="array_string"/>				
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>					
-			</res>			
-		</twoway>		
-		<twoway name="BindSCI" overlap="true">
-			<req>
-				<param name="type" type="int"/>
-				<param name="sciNo" type="string" />			
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>			
-			</req>
-			<res>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>					
-			</res>			
-		</twoway>
-		<twoway name="PreOnlineOnStore" overlap="true">
-			<req>
-				<param name="account" type="string"/>
-				<param name="termNo" type="string"/>
-				<param name="businessData" type="string"/>
-				<param name="slot" type="int"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_int"/>
-				<param name="reserved3" type="array_string"/>
-				<param name="reserved4" type="array_string"/>
-			</req>
-			<res>
-				<param name="findCard" type="int"/>
-				<param name="cardPos" type="int"/>
-				<param name="result" type="string"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_int"/>
-				<param name="reserved3" type="array_string"/>
-				<param name="reserved4" type="array_string"/>				
-			</res>			
-		</twoway>
-		<twoway name="NotifyPreonline" overlap="true">
-			<req>
-				<param name="findCard" type="int"/>
-				<param name="cardPos" type="int"/>			
-				<param name="errCode" type="int"/>			
-				<param name="account" type="string"/>
-				<param name="termNo" type="string"/>
-				<param name="data" type="string"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_int"/>
-				<param name="reserved3" type="array_string"/>
-				<param name="reserved4" type="array_string"/>
-			</req>
-			<res>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_int"/>
-				<param name="reserved3" type="array_string"/>
-				<param name="reserved4" type="array_string"/>				
-			</res>			
-		</twoway>
-		<twoway name="QueryCardInfoOnStore" overlap="true">
-			<req>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_int"/>
-				<param name="reserved3" type="array_string"/>
-				<param name="reserved4" type="array_string"/>
-			</req>
-			<res>
-				<param name="findCard" type="int"/>
-				<param name="cardPos" type="int"/>					
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_int"/>
-				<param name="reserved3" type="array_string"/>
-				<param name="reserved4" type="array_string"/>				
-			</res>			
-		</twoway>
-		<twoway name="GetAddCardInfo" overlap="true">
-			<req>
-				<param name="isSync" type="int"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_int"/>
-				<param name="reserved3" type="array_string"/>
-				<param name="reserved4" type="array_string"/>
-			</req>
-			<res>
-				<param name="count" type="int"/>
-				<param name="slot" type="array_int"/>
-				<param name="account" type="array_string"/>							
-				<param name="cardSerial" type="array_string"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_int"/>
-				<param name="reserved3" type="array_string"/>
-				<param name="reserved4" type="array_string"/>				
-			</res>			
-		</twoway>		
-		<twoway name="PrintCardImmediately" overlap="true">
-			<req>
-				<param name="formFile" type="string"/>
-				<param name="printData" type="string"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_int"/>
-				<param name="reserved3" type="array_string"/>
-				<param name="reserved4" type="array_string"/>
-			</req>
-			<res>
-				<param name="ret" type="int"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_int"/>
-				<param name="reserved3" type="array_string"/>
-				<param name="reserved4" type="array_string"/>				
-			</res>			
-		</twoway>
-		<twoway name="QueryCIStatus" overlap="true">
-			<req>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_int"/>
-				<param name="reserved3" type="array_string"/>
-				<param name="reserved4" type="array_string"/>
-			</req>
-			<res>
-				<param name="retainBin" type="int"/>
-				<param name="hopperNo" type="array_int"/>
-				<param name="hopperStatus" type="array_int"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_int"/>
-				<param name="reserved3" type="array_string"/>
-				<param name="reserved4" type="array_string"/>				
-			</res>			
-		</twoway>																		
-		<twoway name="GetDevInfo" overlap="true" method_id="65535">
-			<req>
-			</req>
-			<res>
-				<param name="type" type="string" />
-				<param name="model" type="string" />
-				<param name="version" type="string" />
-				<param name="state" type="int" />
-			</res>			
-		</twoway>							
-	</class>
-	<message name="FetchCard">
-			<param name="status" type="int"/>
-	</message>
-	<message name="SCIConnect">
-			<param name="status" type="int"/>
-	</message>			
-</entity>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 232 - 216
Module/mod_cardissuerstore/CardIssuerFSM.cpp


+ 184 - 99
Module/mod_cardissuerstore/CardIssuerFSM.h

@@ -88,6 +88,11 @@ enum EvtType
 	USER_EVT_QUICK_SELF_CHECK_FINISHED,
 	USER_EVT_JS_READ,
 	USER_EVT_JS_READ_FINISHED,
+	USER_EVT_JS_ADD_CRAD_FROMBOX,
+	USER_EVT_JS_ADD_CRAD_FROMBOX_FINISHED,
+	USER_EVT_JS_MOVE_CARD_FROMSLOT,
+	USER_EVT_JS_MOVE_CARD_FROMSLOT_FINISHED,
+	USER_EVT_EXIT_MIAN_PAGE,
 };
 enum SAMICCommandType
 {
@@ -620,7 +625,7 @@ typedef struct CRegistSwallowCardRet : CHTTPRet {
 	struct data {
 	}data;
 	bool Parse(string strData) {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(strData.c_str());
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(strData.c_str());
 		Json::Value root, tmpZ1;
 		Json::Reader reader;
 		if (!reader.parse(strData, root, false))
@@ -754,8 +759,8 @@ public:
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("EjectJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
@@ -770,8 +775,8 @@ public:
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("CaptureJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
@@ -786,8 +791,8 @@ public:
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ReadBatchCardInfoInRangeJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
@@ -802,8 +807,24 @@ public:
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("AddAndReadCardFromBoxJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+		}
+	}
+};
+
+class AddCardFromBoxJSEvent : public FSMEvent
+{
+public:
+	AddCardFromBoxJSEvent() : FSMEvent(USER_EVT_JS_ADD_CRAD_FROMBOX) {}
+	~AddCardFromBoxJSEvent() {}
+	SpReqAnsContext<CardIssuerStoreService_AddCardFromBoxJS_Req, CardIssuerStoreService_AddCardFromBoxJS_Ans>::Pointer ctx;
+	virtual void OnUnhandled()
+	{
+		if (ctx != NULL)
+		{
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("AddCardFromBoxJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
@@ -818,56 +839,73 @@ public:
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("MoveAndReadCardFromSlotJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
 
-class MoveBacktoSlotJSEvent : public FSMEvent
+class MoveCardFromSlotJSEvent : public FSMEvent
 {
 public:
-	MoveBacktoSlotJSEvent() : FSMEvent(USER_EVT_JS_MOVEBACK_TO_SLOT) {}
-	~MoveBacktoSlotJSEvent() {}
-	SpReqAnsContext<CardIssuerStoreService_MoveBacktoSlotJS_Req, CardIssuerStoreService_MoveBacktoSlotJS_Ans>::Pointer ctx;
+	MoveCardFromSlotJSEvent() : FSMEvent(USER_EVT_JS_MOVE_CARD_FROMSLOT) {}
+	~MoveCardFromSlotJSEvent() {}
+	SpReqAnsContext<CardIssuerStoreService_MoveCardFromSlotJS_Req, CardIssuerStoreService_MoveCardFromSlotJS_Ans>::Pointer ctx;
 	virtual void OnUnhandled()
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("MoveCardFromSlotJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
 
-class IssueFromSlotJSEvent : public FSMEvent
+
+class MoveBacktoSlotJSEvent : public FSMEvent
 {
 public:
-	IssueFromSlotJSEvent() : FSMEvent(USER_EVT_JS_ISSUE_FROM_SLOT) {}
-	~IssueFromSlotJSEvent() {}
-	SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req, CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx;
+	MoveBacktoSlotJSEvent() : FSMEvent(USER_EVT_JS_MOVEBACK_TO_SLOT) {}
+	~MoveBacktoSlotJSEvent() {}
+	SpReqAnsContext<CardIssuerStoreService_MoveBacktoSlotJS_Req, CardIssuerStoreService_MoveBacktoSlotJS_Ans>::Pointer ctx;
 	virtual void OnUnhandled()
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("MoveBacktoSlotJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
 
-class SAMICCommandJSEvent : public FSMEvent
+//class IssueFromSlotJSEvent : public FSMEvent
+//{
+//public:
+//	IssueFromSlotJSEvent() : FSMEvent(USER_EVT_JS_ISSUE_FROM_SLOT) {}
+//	~IssueFromSlotJSEvent() {}
+//	SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req, CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx;
+//	virtual void OnUnhandled()
+//	{
+//		if (ctx != NULL)
+//		{
+//			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
+//			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+//		}
+//	}
+//};
+
+class ICCommandJSEvent : public FSMEvent
 {
 public:
-	SAMICCommandJSEvent() : FSMEvent(USER_EVT_JS_SAM_IC_COMMAND) {}
-	~SAMICCommandJSEvent() {}
-	SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req, CardIssuerStoreService_SAMICCommandJS_Ans>::Pointer ctx;
+	ICCommandJSEvent() : FSMEvent(USER_EVT_JS_SAM_IC_COMMAND) {}
+	~ICCommandJSEvent() {}
+	SpReqAnsContext<CardIssuerStoreService_ICCommandJS_Req, CardIssuerStoreService_ICCommandJS_Ans>::Pointer ctx;
 	virtual void OnUnhandled()
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ICCommandJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
@@ -882,8 +920,8 @@ public:
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("WriteTrackJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
@@ -898,8 +936,8 @@ public:
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("PrintCardImmediatelyJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
@@ -914,8 +952,8 @@ public:
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("PostOnlineJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
@@ -930,8 +968,8 @@ public:
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("IssueFromBoxJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
@@ -946,8 +984,8 @@ public:
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("PreOnlineCrossJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
@@ -971,8 +1009,8 @@ public:
 	{
 		if (ctx != NULL)
 		{
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Operate unhandled");
-			ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ReadJS Operate unhandled");
+			//ctx->Answer(Error_Unexpect, CardIssuerStore_UserErrorCode_EntityInStateCannotProcess);
 		}
 	}
 };
@@ -1019,19 +1057,18 @@ public:
 		FSM_RULE_ENTRY(s2, s10, USER_EVT_ISSUE_EX, 0)
 		FSM_RULE_ENTRY(s2, s17, USER_EVT_QUERYCARDINFO_ON_STORE, 0)
 		FSM_RULE_ENTRY(s2, s17, USER_EVT_JS_READ_BATCHCARDINFO_IN_RANGE, 0)//JS 区间盘库
-		FSM_RULE_ENTRY(s2, s10, USER_EVT_JS_MOVE_AND_READ_CARD_FROMSLOT, 0)//JS 移卡读卡
-		FSM_RULE_ENTRY(s2, s10, USER_EVT_JS_ADD_AND_READ_CRAD_FROMBOX, 0)//JS 加卡
-		FSM_RULE_ENTRY(s2, s10, USER_EVT_JS_ISSUE_FROM_SLOT, 0)//JS 领卡发卡
-		FSM_RULE_ENTRY(s2, s8,  USER_EVT_JS_CAPTURE, 0)//JS 吞卡
-		FSM_RULE_ENTRY(s2, s10,	USER_EVT_JS_ISSUE_FROM_BOX, 0)//JS 卡箱发卡
 		FSM_RULE_ENTRY(s2, s19, USER_EVT_JS_PREONLINE_CROSS, 0)//JS 跨机激活
+		FSM_RULE_ENTRY(s2, s10, USER_EVT_JS_MOVE_AND_READ_CARD_FROMSLOT, 0)//JS 卡槽移卡读卡
+		FSM_RULE_ENTRY(s2, s10, USER_EVT_JS_ADD_AND_READ_CRAD_FROMBOX, 0)//JS 加卡箱移卡读卡
+		FSM_RULE_ENTRY(s2, s10, USER_EVT_JS_ISSUE_FROM_BOX, 0)//JS 卡箱发卡
+		FSM_RULE_ENTRY(s2, s8,  USER_EVT_JS_CAPTURE, 0)//JS 吞卡
+		FSM_RULE_ENTRY(s2, s10, USER_EVT_JS_MOVE_CARD_FROMSLOT, 0)//JS 卡槽移卡
+		FSM_RULE_ENTRY(s2, s10, USER_EVT_JS_ADD_CRAD_FROMBOX, 0)//JS 加卡箱移卡
 		FSM_RULE_ENTRY(s4,s5,USER_EVT_READ,0)
 		FSM_RULE_ENTRY(s4,s6,USER_EVT_EJECT,0)
-		FSM_RULE_ENTRY(s4, s6, USER_EVT_JS_EJECT, 0)//JS 吐卡
 		FSM_RULE_ENTRY(s4,s6,USER_EVT_EXIT,0)
 		FSM_RULE_ENTRY(s4,s8,USER_EVT_EXIT,1)
 		FSM_RULE_ENTRY(s4,s8,USER_EVT_CAPTURE,0)
-		FSM_RULE_ENTRY(s4, s8, USER_EVT_JS_CAPTURE, 0)//JS 吞卡
 		FSM_RULE_ENTRY(s4,s11,USER_EVT_WRITE,0)
 		FSM_RULE_ENTRY(s4, s14, USER_EVT_SAM_IC, 0)
 		FSM_RULE_ENTRY(s4, s18, USER_EVT_PRINT_CARD_IM, 0)
@@ -1040,12 +1077,15 @@ public:
 		FSM_RULE_ENTRY(s4, s6, USER_EVT_ISSUE_EX_FINISHED, 6)
 		FSM_RULE_ENTRY(s4, s5, USER_EVT_PREONLINE, 0)
 		FSM_RULE_ENTRY(s4, s5, USER_EVT_POSTONLINE, 0)
+		FSM_RULE_ENTRY(s4, s6, USER_EVT_JS_EJECT, 0)//JS 吐卡
+		FSM_RULE_ENTRY(s4, s8, USER_EVT_JS_CAPTURE, 0)//JS 吞卡
 		FSM_RULE_ENTRY(s4, s10, USER_EVT_JS_MOVEBACK_TO_SLOT, 0)//JS 移回卡槽
 		FSM_RULE_ENTRY(s4, s11, USER_EVT_JS_WRITE_TRACK, 0)//JS 写卡
 		FSM_RULE_ENTRY(s4, s14, USER_EVT_JS_SAM_IC_COMMAND, 0)//JS ic交互
 		FSM_RULE_ENTRY(s4, s18, USER_EVT_JS_PRINT_CARD, 0)//JS 打印
 		FSM_RULE_ENTRY(s4, s5, USER_EVT_JS_POSTONLINE, 0)//JS 联机后处理
 		FSM_RULE_ENTRY(s4, s5, USER_EVT_JS_READ, 0)//JS 读卡
+		FSM_RULE_ENTRY(s4, s8, USER_EVT_EXIT_MIAN_PAGE, 1)//退到首页事件
 		FSM_RULE_ENTRY(s5,s4,USER_EVT_READ_FINISHED,0)
 		FSM_RULE_ENTRY(s5,s9,USER_EVT_READ_FINISHED,1)
 		FSM_RULE_ENTRY(s5,s4,USER_EVT_READ_FINISHED,2)
@@ -1055,12 +1095,12 @@ public:
 		FSM_RULE_ENTRY(s5, s4, USER_EVT_POSTONLINEFINISHED, 0)
 		FSM_RULE_ENTRY_ANY(s5, s4, USER_EVT_JS_POSTONLINE_FINISHED)//JS
 		FSM_RULE_ENTRY(s5, s4, USER_EVT_JS_READ_FINISHED, 0)//JS
+		FSM_RULE_ENTRY(s5, s2, USER_EVT_JS_READ_FINISHED, 1)//JS 无卡
 		FSM_RULE_ENTRY(s6,s7,USER_EVT_EJECTFINISHED,0)
 		FSM_RULE_ENTRY(s6,s9,USER_EVT_EJECTFINISHED,1)
 		FSM_RULE_ENTRY(s6, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
-		FSM_RULE_ENTRY(s6, s2, USER_EVT_JS_EJECT_FINISHED, 0)//JS
-		FSM_RULE_ENTRY(s6, s9, USER_EVT_JS_EJECT_FINISHED, 1)//JS 吐卡失败
-		FSM_RULE_ENTRY(s6, s8, USER_EVT_JS_EJECT_FINISHED, 2)//JS
+		FSM_RULE_ENTRY(s6, s2, USER_EVT_JS_EJECT_FINISHED, 0)//JS 吐卡且取卡成功,取卡超时吞卡成功
+		FSM_RULE_ENTRY(s6, s9, USER_EVT_JS_EJECT_FINISHED, 1)//JS 吐卡失败,取卡超时吞卡失败
 		FSM_RULE_ENTRY(s7,s2,USER_EVT_WAITFINISHED,0)
 		FSM_RULE_ENTRY(s7,s9,USER_EVT_WAITFINISHED,1)
 		FSM_RULE_ENTRY(s7,s8,USER_EVT_WAITFINISHED,2)
@@ -1084,15 +1124,14 @@ public:
 		FSM_RULE_ENTRY(s10, s2, USER_EVT_JS_MOVE_AND_READ_CARD_FROMSLOT_FINISHED, 1)//JS
 		FSM_RULE_ENTRY(s10, s4, USER_EVT_JS_ADD_AND_READ_CRAD_FROMBOX_FINISHED, 0)//JS
 		FSM_RULE_ENTRY(s10, s2, USER_EVT_JS_ADD_AND_READ_CRAD_FROMBOX_FINISHED, 1)//JS
-		FSM_RULE_ENTRY(s10, s9, USER_EVT_JS_ADD_AND_READ_CRAD_FROMBOX_FINISHED, 2)//JS 吞卡失败
+		FSM_RULE_ENTRY(s10, s4, USER_EVT_JS_MOVE_CARD_FROMSLOT_FINISHED, 0)//JS
+		FSM_RULE_ENTRY(s10, s2, USER_EVT_JS_MOVE_CARD_FROMSLOT_FINISHED, 1)//JS
+		FSM_RULE_ENTRY(s10, s4, USER_EVT_JS_ADD_CRAD_FROMBOX_FINISHED, 0)//JS
+		FSM_RULE_ENTRY(s10, s2, USER_EVT_JS_ADD_CRAD_FROMBOX_FINISHED, 1)//JS
 		FSM_RULE_ENTRY(s10, s4, USER_EVT_JS_MOVEBACK_TO_SLOT_FINISHED, 0)//JS 
 		FSM_RULE_ENTRY(s10, s2, USER_EVT_JS_MOVEBACK_TO_SLOT_FINISHED, 1)//JS
-		FSM_RULE_ENTRY(s10, s4, USER_EVT_JS_ISSUE_FROM_SLOT_FINISHED, 0)//JS 
-		FSM_RULE_ENTRY(s10, s2, USER_EVT_JS_ISSUE_FROM_SLOT_FINISHED, 1)//JS 
-		FSM_RULE_ENTRY(s10, s9, USER_EVT_JS_ISSUE_FROM_SLOT_FINISHED, 2)//JS 吞卡失败
 		FSM_RULE_ENTRY(s10, s4, USER_EVT_JS_ISSUE_FROM_BOX_FINISHED, 0)//JS 
 		FSM_RULE_ENTRY(s10, s2, USER_EVT_JS_ISSUE_FROM_BOX_FINISHED, 1)//JS
-		FSM_RULE_ENTRY(s10, s9, USER_EVT_JS_ISSUE_FROM_BOX_FINISHED, 2)//JS 
 		FSM_RULE_ENTRY(s11,s4,USER_EVT_WRITE_FINISHED,0)
 		FSM_RULE_ENTRY(s11,s4,USER_EVT_WRITE_FINISHED,1)
 		FSM_RULE_ENTRY_ANY(s11, s4, USER_EVT_JS_WRITE_TRACK_FINISHED)//JS
@@ -1101,7 +1140,7 @@ public:
 		FSM_RULE_ENTRY(s17, s2, USER_EVT_QUERYCARDINFO_ON_STORE_FINISHED, 0)
 		FSM_RULE_ENTRY(s17, s2, USER_EVT_QUERYCARDINFO_ON_STORE_FINISHED, 2)
 		FSM_RULE_ENTRY(s17, s2, USER_EVT_JS_READ_BATCHCARDINFO_IN_RANGE_FINISHED, 0)//JS 
-		FSM_RULE_ENTRY(s17, s9, USER_EVT_JS_READ_BATCHCARDINFO_IN_RANGE_FINISHED, 1)//JS 吞卡失败
+		FSM_RULE_ENTRY(s17, s4, USER_EVT_JS_READ_BATCHCARDINFO_IN_RANGE_FINISHED, 1)//JS 读卡,移卡失败
 		FSM_RULE_ENTRY(s18, s4, USER_EVT_PRINT_CARD_IM_FINISHED, 0)
 		FSM_RULE_ENTRY_ANY(s18, s4, USER_EVT_JS_PRINT_CARD_FINISHED)//JS
 		FSM_RULE_ENTRY(s19, s2, USER_EVT_JS_PREONLINE_CROSS_FINISHED, 0)//JS
@@ -1113,15 +1152,15 @@ public:
 	//,m_pTACReject(NULL),m_pIACOnline(NULL),m_pTACOnline(NULL),m_pIACDefault(NULL),m_pTACDefault(NULL)
 	,m_bCDA(false),m_pDataToARQC(NULL),m_bIssuingExit(false)
 	,m_bCardIssued(false),m_issueStatusFromFile(1),m_issueStatus(1),m_currCardNo("")
-	, m_captureReason(""), m_machineType(1), m_csDevSN(true)
+	, m_captureReason(""), m_machineType(1)
 	, m_currentHopper(1), m_hopperNum(1), EncypteDukptHSM(NULL)
 	, m_bSettingMaterial(false)
 	, m_maxSlot(0), m_addCardNo(""), m_addCardSerial(""), m_hasCardWhileDevOpen(false)
 	, m_bChannelOK(false), m_bCancelByRFIC(false), m_devOpenFailedCount(0)
-			, m_iInWhatPage(PageType_Init), m_EacQueryHost(""),m_eacQueryFlag(0), m_bUseCardnoMismatch(false), m_ICRetryTimes(1)
+			, m_EacQueryHost(""),m_eacQueryFlag(0), m_bUseCardnoMismatch(false), m_ICRetryTimes(1)
 			, m_bCardFromHopper(true), m_bStopUseRF(false),m_rfVendorList(""), m_bUseRFTillNext(false), m_csSwallowCardUrl(""),m_csSyncMaterialUrl(""), m_bNewAnsError(false)
 		, m_bCrossPreOnline(false), m_csMagT2Track(""), m_csMagT3Track(""), m_csMagAccout(""), m_csMagRegion(""), m_csMagCardSerial(""), m_csMagCVC(""), m_csMagExpireDate("")
-		, m_quickSelfcheck(false), m_SelfcheckSleepTime(0)
+		, m_quickSelfcheck(false), m_SelfcheckSleepTime(0), m_bDoExit(false)
 		{
 			HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x220);
 			cmdDecodeMag2 = NULL;
@@ -1217,7 +1256,7 @@ public:
 	ErrorCodeEnum MachineMoveCardFrontGate(bool bInBussiness=false);
 	
 	void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
-	DevStateEnum GetDevState()
+	DevStateEnum GetDevState() const
 	{
 		if ((m_eDevState == DEVICE_STATUS_NORMAL) 
 			&& ((m_bHasHopper[0] && m_mixedEx[0] >= 3) || !m_bHasHopper[0])
@@ -1228,7 +1267,6 @@ public:
 			return m_eDevState;
 	}
 	int QueryCardInfo();
-	int SetDevStateAndSendMsg(const DevStateEnum eState, bool bForceSend = true);
 	int UpdateLocalRunCfg(CAutoArray<int> hopperArr);
 	int SyncDataToDB(bool bMaintain[12],bool bSetCaptured=true);//同步物料计数
 	void SetHopperNum(int hopperNum);
@@ -1255,7 +1293,7 @@ public:
 	void DecodeTracksData(const char *track2, DWORD dwT2size, const char *track3, DWORD dwT3size,char *&magData,bool bT2OK=true,bool bT3OK=true);
 	int GetFSMState()
 	{ 
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_currentFSMState:%d", m_currentFSMState);
+		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_currentFSMState:%d", m_currentFSMState);
 		return m_currentFSMState;
 	}
 	void GetCardInfo(int &findCard, int &cardPos)
@@ -1268,10 +1306,6 @@ public:
 	void SetCancelByRFICFlag(bool bCancel = true) { m_bCancelByRFIC = bCancel; }
 	CSimpleStringA GetPreOnlineICCardNo() { return m_currCardNo; }
 	void CloseAndClearDevObj(bool bCheckConnecting = true, bool bCloseOnly = false);
-	bool GetDevInitFlag() { return m_bOpened; }
-	bool GetDevInitingFlag() { return m_bOpening; }
-
-	void SetInWhatPage(int bValue) { m_iInWhatPage = bValue; }
 	void SetEnterMainPage();
 	static void HttpsLogCallBack(const char* logtxt);
 	//0:unknow(havn't access microservice or access failed),1:both mag & ic ,2:mag only,3:ic only
@@ -1299,7 +1333,7 @@ private:
 	ErrorCodeEnum m_testResult;
 
 
-	int m_CardCaptured, m_iInWhatPage/*在哪个页面,区分首页,用户桌面,其他页*/;
+	int m_CardCaptured;
 	int m_issueStatusFromFile, m_issueStatus/*the status maybe changed by Business call*/;
 	//1:default, 2:SCI, 3:no cfg
 	int m_machineType;
@@ -1311,20 +1345,16 @@ private:
 	DWORD m_MaintainTimeEx[HOPPER_NUM];
 	BYTE m_connectType, m_r1[128], m_r2[128], m_r3[128], m_priKey[ONE_K / 2], m_devPubKey[ONE_K / 2], m_bdk[64], m_ksn[64];
 	CardIssuerStatus m_devStatus;
-	DevStateEnum m_eDevState;
 	CCardProcess *m_pCardProcess;
 	CAutoArray<CSimpleStringA> m_aidList;
-	ErrorPackage m_errPkg;
 	pfEncryptDukptHSM EncypteDukptHSM;
 	pfGetEncrypedData GetEncrypedData;
 	char *m_pDataToARQC;
 	long xxTest;
-	CSimpleStringA m_currCardNo, m_captureReason, m_csMachineType, m_csSite, m_csDevSN/*for SCI only*/, m_terminalNo,m_addCardNo,m_addCardSerial
-		,m_csCM, m_rfVendorList, m_csRF;
+	CSimpleStringA m_currCardNo, m_captureReason, m_csMachineType, m_terminalNo,m_addCardNo,m_addCardSerial, m_rfVendorList, m_csRF;
 	char m_AuthCode[2];
 	vector<CMBBin> m_vBin;
 
-
 	UINT64 m_crossStart;
 	int m_bBTChecking;
 	int SplitTrack2(CSimpleStringA pTrack2,Track2Data &decodeData);
@@ -1340,7 +1370,7 @@ private:
 	bool IfUseRf();
 	CSimpleStringA m_csMagT2Track, m_csMagT3Track, m_csMagAccout, m_csMagRegion, m_csMagCardSerial, m_csMagCVC, m_csMagExpireDate;
 	
-	CSimpleStringA m_csAlarmMsg,m_EacQueryHost, m_csSwallowCardUrl, m_csSyncMaterialUrl;
+	CSimpleStringA m_EacQueryHost, m_csSwallowCardUrl, m_csSyncMaterialUrl;
 	MagTracks m_magTracks;
 	vector<int> m_badSlot;
 	std::map<std::string, JsonElem> m_mapJsonErr;
@@ -1380,7 +1410,7 @@ private:
 		}
 	}
 	CSimpleStringA generateJsonString(std::map<std::string, JsonElem>& objectArr);
-	bool IsInBusiness()
+	bool IsInBusiness() const
 	{
 		return (m_bCrossPreOnline || m_iInWhatPage == PageType_Other);
 	}
@@ -1399,22 +1429,28 @@ public:
 
 	int AddAndReadCardFromBoxJS(SpReqAnsContext<CardIssuerStoreService_AddAndReadCardFromBoxJS_Req, CardIssuerStoreService_AddAndReadCardFromBoxJS_Ans>::Pointer ctx);
 
+	int AddCardFromBoxJS(SpReqAnsContext<CardIssuerStoreService_AddCardFromBoxJS_Req, CardIssuerStoreService_AddCardFromBoxJS_Ans>::Pointer ctx);
+
 	int MoveAndReadCardFromSlotJS(SpReqAnsContext<CardIssuerStoreService_MoveAndReadCardFromSlotJS_Req, CardIssuerStoreService_MoveAndReadCardFromSlotJS_Ans>::Pointer ctx);
 
+	int MoveCardFromSlotJS(SpReqAnsContext<CardIssuerStoreService_MoveCardFromSlotJS_Req, CardIssuerStoreService_MoveCardFromSlotJS_Ans>::Pointer ctx);
+
 	int MoveBacktoSlotJS(SpReqAnsContext<CardIssuerStoreService_MoveBacktoSlotJS_Req, CardIssuerStoreService_MoveBacktoSlotJS_Ans>::Pointer ctx);
 
 	bool OperateNewCardStore(int slot, CSimpleStringA& addCardNo, CSimpleStringA& addCardSerial, int& status);
 
-	int IssueFromSlotJS(SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req, CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx);
-
-	void QueryInternalHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryInternalHasCardJS_Req, CardIssuerStoreService_QueryInternalHasCardJS_Ans>::Pointer ctx);
+	//int IssueFromSlotJS(SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req, CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx);
 
+	//void QueryInternalHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryInternalHasCardJS_Req, CardIssuerStoreService_QueryInternalHasCardJS_Ans>::Pointer ctx);
+	void QueryHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryHasCardJS_Req, CardIssuerStoreService_QueryHasCardJS_Ans>::Pointer ctx);
 
 	int WriteTrackJS(SpReqAnsContext<CardIssuerStoreService_WriteTrackJS_Req, CardIssuerStoreService_WriteTrackJS_Ans>::Pointer ctx);
 
 	int PrintCardImmediatelyJS(SpReqAnsContext<CardIssuerStoreService_PrintCardImmediatelyJS_Req, CardIssuerStoreService_PrintCardImmediatelyJS_Ans>::Pointer ctx);
 
-	int SAMICCommandJS(SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req, CardIssuerStoreService_SAMICCommandJS_Ans>::Pointer ctx);
+	//int SAMICCommandJS(SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req, CardIssuerStoreService_SAMICCommandJS_Ans>::Pointer ctx);
+
+	int ICCommandJS(SpReqAnsContext<CardIssuerStoreService_ICCommandJS_Req, CardIssuerStoreService_ICCommandJS_Ans>::Pointer ctx);
 
 	int PostOnlineJS(SpReqAnsContext<CardIssuerStoreService_PostOnlineJS_Req, CardIssuerStoreService_PostOnlineJS_Ans>::Pointer ctx);
 
@@ -1423,6 +1459,8 @@ public:
 	int PreOnlineCrossJS(SpReqAnsContext<CardIssuerStoreService_PreOnlineCrossJS_Req, CardIssuerStoreService_PreOnlineCrossJS_Ans>::Pointer ctx);
 
 	int ReadJS(SpReqAnsContext<CardIssuerStoreService_ReadJS_Req, CardIssuerStoreService_ReadJS_Ans>::Pointer ctx);
+
+	int ExitToMainPage();
 #pragma endregion JS接口具体实现方法
 
 #pragma region JS新增接口
@@ -1431,7 +1469,7 @@ public:
 	int PostOnlineJS_Contact(SpReqAnsContext<CardIssuerStoreService_PostOnlineJS_Req, CardIssuerStoreService_PostOnlineJS_Ans>::Pointer ctx, bool& bICOK);
 	int PostOnlineJS_RF(SpReqAnsContext<CardIssuerStoreService_PostOnlineJS_Req, CardIssuerStoreService_PostOnlineJS_Ans>::Pointer ctx);
 
-	int ReadMag(SpReqAnsContext<CardIssuerStoreService_ReadJS_Req, CardIssuerStoreService_ReadJS_Ans>::Pointer ctx,bool& bReadCardInfo,bool& bReadMag);
+	int ReadMag(SpReqAnsContext<CardIssuerStoreService_ReadJS_Req, CardIssuerStoreService_ReadJS_Ans>::Pointer ctx,bool& bReadCardInfo,bool& bReadMag,CSimpleStringA& t2Account);
 	int CheckCardType(CSimpleStringA cardNo,bool bReadMag, int& ICtype);
 	int PreOnlineJS_Contact(SpReqAnsContext<CardIssuerStoreService_ReadJS_Req, CardIssuerStoreService_ReadJS_Ans>::Pointer ctx, bool& bICOK, bool& bContinue);
 	int PreOnlineJS_RF(SpReqAnsContext<CardIssuerStoreService_ReadJS_Req, CardIssuerStoreService_ReadJS_Ans>::Pointer ctx);
@@ -1445,11 +1483,13 @@ public:
 		m_quickSelfcheck = true;
 	}
 	bool SetCardCapturedJS(const int num, bool bNewClear = false);
+	void SetDoExitFlag(bool bFlag) { m_bDoExit = bFlag; }
 #pragma endregion JS新增接口
 
 #pragma region JS新增字段
 private:
 	bool m_quickSelfcheck;
+	bool m_bDoExit;
 public:
 	int  m_SelfcheckSleepTime;
 #pragma endregion JS新增字段
@@ -1611,6 +1651,7 @@ struct DoExitWhenIdleTask : public ITaskSp
 	void Process()
 	{
 		fsm->DoExitWhenIdle();
+		fsm->SetDoExitFlag(false);
 	}
 };
 struct SAMICCommandTask : public ITaskSp
@@ -1707,7 +1748,7 @@ struct ReadBatchCardInfoInRangeJSTask : public ITaskSp
 		fsm->PostEventFIFO(e);
 	}
 };
-//加卡
+//加卡读卡
 struct AddAndReadCardFromBoxJSTask : public ITaskSp
 {
 	CCardIssuerFSM* fsm;
@@ -1720,7 +1761,21 @@ struct AddAndReadCardFromBoxJSTask : public ITaskSp
 		fsm->PostEventFIFO(e);
 	}
 };
-//移卡读卡
+//加卡箱移卡
+struct AddCardFromBoxJSTask : public ITaskSp
+{
+	CCardIssuerFSM* fsm;
+	SpReqAnsContext<CardIssuerStoreService_AddCardFromBoxJS_Req, CardIssuerStoreService_AddCardFromBoxJS_Ans>::Pointer ctx;
+	AddCardFromBoxJSTask(CCardIssuerFSM* f) : fsm(f) {}
+	void Process()
+	{
+		FSMEvent* e = new FSMEvent(USER_EVT_JS_ADD_CRAD_FROMBOX_FINISHED);
+		e->param1 = fsm->AddCardFromBoxJS(ctx);
+		fsm->PostEventFIFO(e);
+	}
+};
+
+//卡槽移卡读卡
 struct MoveAndReadCardFromSlotJSTask : public ITaskSp
 {
 	CCardIssuerFSM* fsm;
@@ -1733,32 +1788,47 @@ struct MoveAndReadCardFromSlotJSTask : public ITaskSp
 		fsm->PostEventFIFO(e);
 	}
 };
-//移回卡槽
-struct MoveBacktoSlotJSTask : public ITaskSp
+
+//卡槽移卡
+struct MoveCardFromSlotJSTask : public ITaskSp
 {
 	CCardIssuerFSM* fsm;
-	SpReqAnsContext<CardIssuerStoreService_MoveBacktoSlotJS_Req, CardIssuerStoreService_MoveBacktoSlotJS_Ans>::Pointer ctx;
-	MoveBacktoSlotJSTask(CCardIssuerFSM* f) : fsm(f) {}
+	SpReqAnsContext<CardIssuerStoreService_MoveCardFromSlotJS_Req, CardIssuerStoreService_MoveCardFromSlotJS_Ans>::Pointer ctx;
+	MoveCardFromSlotJSTask(CCardIssuerFSM* f) : fsm(f) {}
 	void Process()
 	{
-		FSMEvent* e = new FSMEvent(USER_EVT_JS_MOVEBACK_TO_SLOT_FINISHED);
-		e->param1 = fsm->MoveBacktoSlotJS(ctx);
+		FSMEvent* e = new FSMEvent(USER_EVT_JS_MOVE_CARD_FROMSLOT_FINISHED);
+		e->param1 = fsm->MoveCardFromSlotJS(ctx);
 		fsm->PostEventFIFO(e);
 	}
 };
-//卡库领卡
-struct IssueFromSlotJSTask : public ITaskSp
+
+//移回卡槽
+struct MoveBacktoSlotJSTask : public ITaskSp
 {
 	CCardIssuerFSM* fsm;
-	SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req, CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx;
-	IssueFromSlotJSTask(CCardIssuerFSM* f) : fsm(f) {}
+	SpReqAnsContext<CardIssuerStoreService_MoveBacktoSlotJS_Req, CardIssuerStoreService_MoveBacktoSlotJS_Ans>::Pointer ctx;
+	MoveBacktoSlotJSTask(CCardIssuerFSM* f) : fsm(f) {}
 	void Process()
 	{
-		FSMEvent* e = new FSMEvent(USER_EVT_JS_ISSUE_FROM_SLOT_FINISHED);
-		e->param1 = fsm->IssueFromSlotJS(ctx);
+		FSMEvent* e = new FSMEvent(USER_EVT_JS_MOVEBACK_TO_SLOT_FINISHED);
+		e->param1 = fsm->MoveBacktoSlotJS(ctx);
 		fsm->PostEventFIFO(e);
 	}
 };
+//卡库领卡
+//struct IssueFromSlotJSTask : public ITaskSp
+//{
+//	CCardIssuerFSM* fsm;
+//	SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req, CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx;
+//	IssueFromSlotJSTask(CCardIssuerFSM* f) : fsm(f) {}
+//	void Process()
+//	{
+//		FSMEvent* e = new FSMEvent(USER_EVT_JS_ISSUE_FROM_SLOT_FINISHED);
+//		e->param1 = fsm->IssueFromSlotJS(ctx);
+//		fsm->PostEventFIFO(e);
+//	}
+//};
 
 //写卡
 struct WriteTrackJSTask : public ITaskSp
@@ -1787,18 +1857,33 @@ struct PrintCardImmediatelyJSTask : public ITaskSp
 	}
 };
 //IC交互
-struct SAMICCommandJSTask : public ITaskSp
+//struct SAMICCommandJSTask : public ITaskSp
+//{
+//	CCardIssuerFSM* fsm;
+//	SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req, CardIssuerStoreService_SAMICCommandJS_Ans>::Pointer ctx;
+//	SAMICCommandJSTask(CCardIssuerFSM* f) : fsm(f) {}
+//	void Process()
+//	{
+//		FSMEvent* e = new FSMEvent(USER_EVT_JS_WRITE_TRACK_FINISHED);
+//		e->param1 = fsm->SAMICCommandJS(ctx);
+//		fsm->PostEventFIFO(e);
+//	}
+//};
+
+//IC交互
+struct ICCommandJSTask : public ITaskSp
 {
 	CCardIssuerFSM* fsm;
-	SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req, CardIssuerStoreService_SAMICCommandJS_Ans>::Pointer ctx;
-	SAMICCommandJSTask(CCardIssuerFSM* f) : fsm(f) {}
+	SpReqAnsContext<CardIssuerStoreService_ICCommandJS_Req, CardIssuerStoreService_ICCommandJS_Ans>::Pointer ctx;
+	ICCommandJSTask(CCardIssuerFSM* f) : fsm(f) {}
 	void Process()
 	{
-		FSMEvent* e = new FSMEvent(USER_EVT_JS_WRITE_TRACK_FINISHED);
-		e->param1 = fsm->SAMICCommandJS(ctx);
+		FSMEvent* e = new FSMEvent(USER_EVT_JS_SAM_IC_COMMAND_FINISHED);
+		e->param1 = fsm->ICCommandJS(ctx);
 		fsm->PostEventFIFO(e);
 	}
 };
+
 //联机后处理
 struct PostOnlineJSTask : public ITaskSp
 {

+ 152 - 205
Module/mod_cardissuerstore/CardIssuerStore.xml

@@ -430,7 +430,9 @@
 			</res>			
 		</twoway>
 		
-		<!--查询卡机设备状态接口 -->	
+		<!--查询卡机设备状态接口 -->
+		<!--1、卡库打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
+		<!--2、卡库正在打开中, errorCode为Error_NotInit(769),rtaCode为RTA2W11-->
 		<twoway name="GetDevInfo" overlap="true" method_id="65535" jsflag="true">
 			<req>
 			</req>
@@ -445,15 +447,16 @@
 	
 		
 		<!--读卡接口 -->
-		<!--1、卡库打开失败, errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W11-->
-		<!--2、读卡失败,卡库当前无法处理此请求 errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<!--3、读卡失败,发卡时,检测卡片类型时上电失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W0V-->
-		<!--4、读卡失败,发卡时,检测卡片类型时上电失败(非接) errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W27-->
-		<!--5、读卡失败,检测卡片类型时上电失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W0M-->
-		<!--6、读卡失败,检测卡片类型时上电失败(非接) errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W26-->
-		<!--7、读卡失败,读取IC数据失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W02-->
-		<!--8、读卡失败,读取IC数据失败(非接) errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WC9-->
-		<!--9、读卡失败,读卡器无卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCV-->
+		<!--1、卡库打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
+		<!--2、读卡器无卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCV-->
+		<!--3、查询卡机状态失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W22-->
+		<!--4、发卡时,上电失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W0V-->
+		<!--5、发卡时,上电失败(非接) errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W27-->
+		<!--6、上电失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W0M-->
+		<!--7、上电失败(非接) errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W26-->
+		<!--8、读取IC数据失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W02-->
+		<!--9、读取IC数据失败(非接) errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WC9-->
+		
 		<twoway name="ReadJS" overlap="true" method_id="40" jsflag="true">
 			<req>
 				<!--Aid列表-->
@@ -464,8 +467,6 @@
 				<param name="reserved2" type="string"/>
 			</req>
 			<res>
-				<!--0:未检查到ic和磁条 1:检查到IC和磁条 2:只检测到磁条 3:只检测到IC-->
-				<param name="ICType" type="int"/>
 				<!--读磁条结果 0失败 1成功-->
 				<param name="magStatus" type="int" />
 				<!--磁道1数据-->
@@ -474,25 +475,35 @@
 				<param name="track2" type="string"/>
 				<!--磁道3数据-->
 				<param name="track3" type="string"/>
-				<!--卡片位置 6 卡片在卡库、实时制卡机里面-->
-				<param name="cardPos" type="int" />
-				<!--磁道2解析出的卡号-->
-				<param name="t2Account" type="string" />
-				<!--磁道2解析出的地区-->
-				<param name="t2Region" type="string" />
-				<!--磁道2解析出的卡序号-->
-				<param name="t2CardSerial" type="string" />
-				<!--磁道2解析出的cvc-->
-				<param name="t2CVC" type="string" />
-				<!--磁道2解析出的失效日期-->
-				<param name="t2ExpireDate" type="string" />
+				<!--磁道1数据长度-->
+				<param name="track1Size" type="int"/>
+				<!--磁道2数据长度-->
+				<param name="track2Size" type="int"/>
+				<!--磁道3数据长度-->
+				<param name="track3Size" type="int"/>
+				<!--磁道1数据状态 0成功 1无效-->
+				<param name="track1Status" type="int"/>
+				<!--磁道2数据状态 0成功 1无效-->
+				<param name="track2Status" type="int"/>
+				<!--磁道3数据状态 0成功 1无效-->
+				<param name="track3Status" type="int"/>
 				<!--读IC结果 0失败 1成功-->
 				<param name="icState" type="int"/>
 				<!--读IC成功下接触方式 -1未知 0接触 1非接-->
 				<param name="icMode" type="int"/>
-				<!--IC得出的卡号-->
-				<param name="icCardNo" type="string"/>
-				<!--IC读取的数据-->
+				<!--IC读取的数据<json格式>
+					ACTION:行为代码
+					ATC_CODE:交易计数器code
+					ARQC_CODE:授权请求code
+					MAC:安全报文鉴别码
+					ARQC_SIZE:授权请求长度
+					ARQC_DATA:授权请求数据
+					T2TRACK2_DATA:磁道2数据
+					EXPIRE_DATE:卡片失效日期
+					T2CARD_SERIAL:卡序号
+					CARD_CAT:卡类型
+					IC_TAGS:基础IC数据
+				-->
 				<param name="result" type="string"/>
 				<param name="reserved1" type="array_int"/>
 				<param name="reserved2" type="array_string"/>
@@ -500,8 +511,7 @@
 		</twoway>
 		
 		<!--联机后处理接口-->
-		<!--1、卡库打开失败, errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W11-->
-		<!--2、卡库当前无法处理此请求 errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
+		<!--1、卡库打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
 		<twoway name="PostOnlineJS" overlap="true" method_id="41" jsflag="true">
 			<req>
 				<!--联机后处理数据-->
@@ -514,9 +524,11 @@
 		</twoway>
 		
 		<!--吐卡接口-->
-		<!--1、吐卡失败,硬件返回错误 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W08-->
-		<!--2、吐卡失败,超时未取卡 errorCode为Error_Unexpect(2147483646),rtaCode为22000214-->
-		<!--3、吐卡失败,卡库当前无法处理此请求 errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
+		<!--1、卡库打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
+		<!--2、卡片吐卡失败, errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W08-->
+		<!--3、超时未取卡,已吞卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCY-->
+		<!--4、超时未取卡,吞卡失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCU-->
+		<!--5、查询卡机状态失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W22-->
 		<twoway name="EjectJS" overlap="true" method_id="42" jsflag="true">
 			<req>
 			</req>
@@ -525,25 +537,26 @@
 		</twoway>
 		
 		<!--吞卡接口-->
-		<!--1、吞卡失败,硬件返回错误 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W07-->
-		<!--2、吞卡失败,卡库当前无法处理此请求 errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
+		<!--1、卡库打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
+		<!--2、吞卡失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W07-->
+		<!--3、吞卡时卡机无卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCW-->
 		<twoway name="CaptureJS" overlap="true" method_id="43" jsflag="true">
 			<req>
 				<!--吞卡原因码-->
 				<param name="captureCode" type="string"/>
-				<!--吞卡卡号-->
-				<param name="cardNo" type="string"/>
 			</req>
 			<res>
 			</res>			
 		</twoway>
 		
-		<!--查询卡机是否有卡接口-->
-		<twoway name="QueryInternalHasCardJS" overlap="true" method_id="44" jsflag="true">
+		<!--查询卡片位置接口-->
+		<!--1、卡库打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
+		<!--2、查询卡机状态失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W22-->
+		<twoway name="QueryHasCardJS" overlap="true" method_id="44" jsflag="true">
 			<req>
 			</req>
 			<res>
-				<!--卡机是否有卡 0无卡 1有卡 -1失败-->
+				<!--卡片位置0:卡机没有发现卡片 1:卡机内部发现卡片 3:卡片在进卡口-->
 				<param name="position" type="int"/>
 				<param name="reserved1" type="int"/>
 				<param name="reserved2" type="string"/>
@@ -551,16 +564,14 @@
 		</twoway>		
 		
 		<!--卡箱发卡接口(实时制卡机发卡)-->
-		<!--1、卡库打开失败, errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W11-->
-		<!--2、卡库当前无法处理此请求 errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<!--3、发卡失败,卡箱1未检测到 errorCode为Error_DevMedia(2054),rtaCode为RTA2W0B-->
-		<!--4、发卡失败,卡箱2未检测到 errorCode为Error_DevMedia(2054),rtaCode为RTA2W0C-->
-		<!--5、发卡失败,卡箱3未检测到 errorCode为Error_DevMedia(2054),rtaCode为RTA2W0D-->
-		<!--6、发卡失败,卡箱1未检测到卡片 errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W0E-->
-		<!--7、发卡失败,卡箱2未检测到卡片 errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W0F-->
-		<!--8、发卡失败,卡箱3未检测到卡片 errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W0G-->
-		<!--9、发卡失败,从卡箱移动卡片到读卡器失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W06-->
-		<!--10、当前卡机正在执行的流程无法响应此请求,errorCode为Error_Busy(776),rtaCode为RTA2WD* 具体报错见后列表-->
+		<!--1、卡库打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
+		<!--2、卡箱1未检测到 errorCode为Error_DevMedia(2054),rtaCode为RTA2W0B-->
+		<!--3、卡箱2未检测到 errorCode为Error_DevMedia(2054),rtaCode为RTA2W0C-->
+		<!--4、卡箱3未检测到 errorCode为Error_DevMedia(2054),rtaCode为RTA2W0D-->
+		<!--5、卡箱1未检测到卡片 errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W0E-->
+		<!--6、卡箱2未检测到卡片 errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W0F-->
+		<!--7、卡箱3未检测到卡片 errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W0G-->
+		<!--8、从卡箱移动卡片到读卡器失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W06-->
 		<twoway name="IssueFromBoxJS" overlap="true" method_id="45" jsflag="true">
 			<req>
 				<!--卡箱号-->
@@ -573,120 +584,19 @@
 				<param name="reserved2" type="array_string"/>					
 			</res>			
 		</twoway>
-		
-		<!--卡槽发卡接口(卡库发卡)-->
-		<!--卡片移回失败自动吞卡-->
-		<!--1、卡库打开失败, errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W11-->
-		<!--2、卡库当前无法处理此请求 errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<!--3、发卡失败,卡槽地址非法 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W8B-->
-		<!--4、发卡失败,卡槽内无卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W86-->
-		<!--5、发卡失败,卡槽移卡失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W04-->
-		<!--6、发卡失败,卡号不匹配,卡片移回卡槽 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCQ-->
-		<!--7、发卡失败,卡号不匹配,吞卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WA4-->
-		<!--8、当前卡机正在执行的流程无法响应此请求,errorCode为Error_Busy(776),rtaCode为RTA2WD* 具体报错见后列表-->
-		<twoway name="IssueFromSlotJS" overlap="true" method_id="46" jsflag="true">
-			<req>
-				<!--卡槽号-->
-				<param name="slot" type="int"/>
-				<!--卡号-->
-				<param name="cardNo" type="string"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>			
-			</req>
-			<res>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>					
-			</res>			
-		</twoway>
-		
-		<!--物料设置接口-->
-		<!--1、设置失败,errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<twoway name="SetMaterialCountJS" overlap="true" method_id="47" jsflag="true">
-			<req>
-				<!--卡箱设置位  0不设置 1设置-->
-				<param name="SetHopper" type="array_int"/>
-				<!--吞卡设置位  0不设置 1设置-->
-				<param name="SetCaptured" type="int"/>
-				<!--吞卡数-->
-				<param name="captured" type="int"/>
-				<!--卡箱号-->
-				<param name="CardBoxNo" type="array_string"/>
-				<!--卡种编号-->
-				<param name="PsbCode" type="array_string"/>
-				<!--卡种名称-->
-				<param name="PsbName" type="array_string"/>
-				<!--维护者-->
-				<param name="Maintainer" type="array_string"/>
-				<!--维护时间-->
-				<param name="MaintainTime" type="array_string"/>
-				<!--卡数量初始值-->
-				<param name="CardInit" type="array_int"/>
-				<!--卡数量百分比-->
-				<param name="CardPercent" type="array_int"/>
-				<!--余量卡数量-->
-				<param name="remains" type="array_int"/>
-				<!--发卡数量-->
-				<param name="issued" type="array_int"/>
-				<!--错误次数-->
-				<param name="mixed" type="array_int"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>
-			</req>
-			<res>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>	
-			</res>			
-		</twoway>		
-		
-		<!--物料获取接口-->
-		<!--1、查询失败,errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<twoway name="GetMaterialCountJS" overlap="true" method_id="48" jsflag="true">
-			<req>
-				<param name="GetHopper" type="array_int"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>		
-			</req>
-			<res>
-				<!--吞卡数-->
-				<param name="captured" type="int"/>
-				<!--卡箱启用位 0 不启用 1启用-->
-				<param name="hasHopper" type="array_int"/>
-				<!--卡箱号-->
-				<param name="CardBoxNo" type="array_string"/>
-				<!--卡种编号-->
-				<param name="PsbCode" type="array_string"/>
-				<!--卡种名称-->
-				<param name="PsbName" type="array_string"/>
-				<!--维护者-->
-				<param name="Maintainer" type="array_string"/>
-				<!--维护时间-->
-				<param name="MaintainTime" type="array_string"/>
-				<!--卡数量初始值-->
-				<param name="CardInit" type="array_int"/>
-				<!--卡数量百分比-->
-				<param name="CardPercent" type="array_int"/>
-				<!--余量卡数量-->
-				<param name="remains" type="array_int"/>
-				<!--发卡数量-->
-				<param name="issued" type="array_int"/>
-				<!--错误次数-->
-				<param name="mixed" type="array_int"/>
-				<param name="reserved1" type="array_int"/>
-				<param name="reserved2" type="array_string"/>
-			</res>			
-		</twoway>	
+
 		
 		<!--IC指令数据交互接口-->
-		<!--1、执行失败,errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<!--2、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WB7-->
-		<!--3、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WC7-->
-		<!--4、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WAB-->
-		<!--5、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCG-->
-		<!--6、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W02-->
-		<!--7、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WC6-->
-		<!--8、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WC8-->
-		<!--9、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WC9-->
-		<twoway name="SAMICCommandJS" overlap="true" method_id="49" jsflag="true">
+		<!--1、卡库打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
+		<!--3、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WB7-->
+		<!--4、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WC7-->
+		<!--5、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WAB-->
+		<!--6、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCG-->
+		<!--7、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W02-->
+		<!--8、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WC6-->
+		<!--9、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WC8-->
+		<!--10、执行失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WC9-->
+		<twoway name="ICCommandJS" overlap="true" method_id="49" jsflag="true">
 			<req>
 				<!--IC指令枚举:100、103等-->
 				<param name="cmdType" type="int"/>
@@ -707,10 +617,9 @@
 		</twoway>	
 		
 		<!--写卡接口-->
-		<!--1、卡库当前无法处理此请求 errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<!--2、执行失败,errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<!--3、移卡失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W09-->
-		<!--4、写入失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WB3-->
+		<!--1、卡库打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
+		<!--2、移卡失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W09-->
+		<!--3、制卡写数据失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WB3-->
 		<twoway name="WriteTrackJS" overlap="true" method_id="50" jsflag="true">
 			<req>
 				<param name="mode" type="int"/>
@@ -732,9 +641,8 @@
 		</twoway>	
 		
 		<!--卡面打印接口-->
-		<!--1、卡库当前无法处理此请求 errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<!--2、执行失败,errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<!--3、打印失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W25-->
+		<!--1、卡库打开失败, errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
+		<!--2、卡面印刷失败, errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W25-->
 		<twoway name="PrintCardImmediatelyJS" overlap="true" method_id="51" jsflag="true">
 			<req>
 				<!--存储form文件绝对路径-->
@@ -765,8 +673,7 @@
 		<!--7、读取卡片账户信息失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W05-->
 		<!--8、检测卡片类型时上电失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W0V-->
 		<!--9、读取IC数据失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W02-->
-		<!--10、当前卡机正在执行的流程无法响应此请求,errorCode为Error_Busy(776),rtaCode为RTA2WD* 具体报错见后列表-->
-		<twoway name="PreOnlineCrossJS" overlap="true" method_id="52" jsflag="true">
+		<twoway name="PreOnlineCrossJS" overlap="true" method_id="52">
 			<req>
 				<!--业务数据-->
 				<param name="businessData" type="string"/>
@@ -786,20 +693,49 @@
 				<param name="cardPos" type="int"/>
 			</res>			
 		</twoway>
+		
+		<!--加卡箱移到读卡器(只移卡)-->
+		<!--1、卡库打开失败,errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
+		<!--2、卡箱无卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W80-->
+		<!--3、卡库加卡,移卡失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WBE-->
+		<twoway name="AddCardFromBoxJS" overlap="true" method_id="53" jsflag="true">
+			<req>
+				<param name="reserved1" type="array_int"/>
+				<param name="reserved2" type="array_string"/>			
+			</req>
+			<res>
+				<param name="reserved1" type="array_int"/>
+				<param name="reserved2" type="array_string"/>					
+			</res>			
+		</twoway>
+		
+		<!--卡槽移到读卡器(只移卡)-->
+		<!--1、卡库打开失败,errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
+		<!--2、卡槽地址参数异常 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W8B-->
+		<!--3、卡槽内无卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W86-->
+		<!--4、从卡槽移动卡片到读卡器失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W04-->
+		<twoway name="MoveCardFromSlotJS" overlap="true" method_id="54" jsflag="true">
+			<req>
+				<!--卡槽号-->
+				<param name="slot" type="int"/>
+				<param name="reserved1" type="array_int"/>
+				<param name="reserved2" type="array_string"/>			
+			</req>
+			<res>
+				<param name="reserved1" type="array_int"/>
+				<param name="reserved2" type="array_string"/>					
+			</res>			
+		</twoway>
 	
 		<!--JS改造卡库维护接口-->
 		<!--区间盘库接口-->
-		<!--读卡失败自动吞卡,移回失败自动吞卡-->
 		<!--1、卡库打开失败,errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
-		<!--2、卡库当前无法处理此请求 errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<!--3、盘库入参效验不通过 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCM-->
-		<!--4、查询卡槽状态硬件报错 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCN-->
-		<!--5、卡库盘库失败,卡槽移卡失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W16-->
-		<!--6、卡库盘库失败,读卡失败吞卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W17-->
-		<!--7、卡库盘库失败,卡移回卡槽失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W18-->
-		<!--8、卡库盘库失败  errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCP-->
-		<!--9、当前卡机正在执行的流程无法响应此请求,errorCode为Error_Busy(776),rtaCode为RTA2WD* 具体报错见后列表-->
-		<twoway name="ReadBatchCardInfoInRangeJS" overlap="true" method_id="100" jsflag="true">
+		<!--2、盘库入参效验不通过 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCM-->
+		<!--3、查询卡槽状态硬件报错 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WCN-->
+		<!--4、卡库盘库失败,卡槽移卡失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W16-->
+		<!--5、卡库盘库失败,读卡失败吞卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W17-->
+		<!--6、卡库盘库失败,卡移回卡槽失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W18-->
+		<twoway name="ReadBatchCardInfoInRangeJS" overlap="true" method_id="60" jsflag="true">
 			<req>
 				<!--盘库起始卡槽号-->
 				<param name="beginSlot" type="int"/>
@@ -808,9 +744,7 @@
 				<param name="reserved1" type="array_int"/>
 				<param name="reserved2" type="array_string"/>
 			</req>
-			<res>
-				<!--结果 0 成功 1卡库盘库失败,卡槽移卡失败 2卡库盘库失败,读卡失败,自动吞卡 3卡库盘库失败,卡移回卡槽失败,自动吞卡-->
-				<param name="status" type="int"/>	
+			<res>	
 				<!--盘库后卡槽号集合-->
 				<param name="slotNum" type="array_int"/>
 				<!--盘库后卡号集合-->
@@ -822,10 +756,10 @@
 			</res>			
 		</twoway>
 	
-		<!--获取卡库总容量和卡槽中是否有卡的情况接口-->
+		<!--查卡盘卡片存储情况-->
 		<!--1、卡库打开失败,errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
 		<!--2、查询卡槽状态失败,errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W20-->
-		<twoway name="GetCardInStoreJS" overlap="true" method_id="101" jsflag="true">
+		<twoway name="GetCardInStoreJS" overlap="true" method_id="61" jsflag="true">
 			<req>
 				<param name="reserved1" type="array_int"/>
 				<param name="reserved2" type="array_string"/>
@@ -843,13 +777,11 @@
 		</twoway>
 	
 		<!--加卡箱加卡读卡接口-->
-		<!--读卡失败自动吞卡-->
 		<!--1、卡库打开失败,errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
-		<!--2、卡库当前无法处理此请求 errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<!--3、卡箱无卡,请确认卡箱有无卡片或卡片是否放好 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W80-->
-		<!--4、卡库加卡,读卡失败吞卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WA5-->
-		<!--5、当前卡机正在执行的流程无法响应此请求,errorCode为Error_Busy(776),rtaCode为RTA2WD* 具体报错见后列表-->
-		<twoway name="AddAndReadCardFromBoxJS" overlap="true" method_id="102" jsflag="true">
+		<!--2、卡箱无卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W80-->
+		<!--3、卡库加卡,移卡失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WBE-->
+		<!--4、卡库加卡,读卡失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2WA5-->
+		<twoway name="AddAndReadCardFromBoxJS" overlap="true" method_id="62" jsflag="true">
 			<req>
 				<param name="reserved1" type="array_int"/>
 				<param name="reserved2" type="array_string"/>			
@@ -857,10 +789,18 @@
 			<res>
 				<!--加卡的卡号-->
 				<param name="cardNo" type="string"/>
+				<!--磁道1数据-->
+				<param name="track1" type="string"/>
 				<!--磁道2数据-->
 				<param name="track2" type="string"/>
 				<!--磁道3数据-->
 				<param name="track3" type="string"/>
+				<!--磁道1数据长度-->
+				<param name="track1Size" type="int"/>
+				<!--磁道2数据长度-->
+				<param name="track2Size" type="int"/>
+				<!--磁道3数据长度-->
+				<param name="track3Size" type="int"/>
 				<param name="reserved1" type="array_int"/>
 				<param name="reserved2" type="array_string"/>					
 			</res>			
@@ -868,13 +808,11 @@
 		
 		<!--指定卡槽移卡读卡接口-->
 		<!--1、卡库打开失败,errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
-		<!--2、卡库当前无法处理此请求 errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<!--3、卡槽地址参数异常 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W8B-->
-		<!--4、卡槽内无卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W86-->
-		<!--5、从卡槽移动卡片到读卡器失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W04-->
-		<!--6、读卡失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W05-->
-		<!--7、当前卡机正在执行的流程无法响应此请求,errorCode为Error_Busy(776),rtaCode为RTA2WD* 具体报错见后列表-->
-		<twoway name="MoveAndReadCardFromSlotJS" overlap="true" method_id="104" jsflag="true">
+		<!--2、卡槽地址参数异常 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W8B-->
+		<!--3、卡槽内无卡 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W86-->
+		<!--4、从卡槽移动卡片到读卡器失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W04-->
+		<!--5、读卡失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W05-->
+		<twoway name="MoveAndReadCardFromSlotJS" overlap="true" method_id="63" jsflag="true">
 			<req>
 				<!--指定要读卡的卡槽号-->
 				<param name="slot" type="int"/>
@@ -884,6 +822,18 @@
 			<res>
 				<!--卡号-->
 				<param name="cardNo" type="string"/>
+				<!--磁道1数据-->
+				<param name="track1" type="string"/>
+				<!--磁道2数据-->
+				<param name="track2" type="string"/>
+				<!--磁道3数据-->
+				<param name="track3" type="string"/>
+				<!--磁道1数据长度-->
+				<param name="track1Size" type="int"/>
+				<!--磁道2数据长度-->
+				<param name="track2Size" type="int"/>
+				<!--磁道3数据长度-->
+				<param name="track3Size" type="int"/>
 				<param name="reserved1" type="array_int"/>
 				<param name="reserved2" type="array_string"/>					
 			</res>			
@@ -891,15 +841,12 @@
 		
 		<!--移回指定卡槽接口-->
 		<!--1、卡库打开失败,errorCode为Error_DevNotAvailable(2050),rtaCode为RTA2W11-->
-		<!--2、卡库当前无法处理此请求 errorCode为Error_InvalidState(768),rtaCode为RTA2WCL-->
-		<!--3、卡片从读卡器移回到卡槽失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W03-->
-		<!--4、卡槽地址参数异常 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W8B-->
-		<twoway name="MoveBacktoSlotJS" overlap="true" method_id="105" jsflag="true">
+		<!--2、卡片从读卡器移回到卡槽失败 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W03-->
+		<!--3、卡槽地址非法 errorCode为Error_Unexpect(2147483646),rtaCode为RTA2W8B-->
+		<twoway name="MoveBacktoSlotJS" overlap="true" method_id="64" jsflag="true">
 			<req>
-				<!--指定要移回的卡槽号-->
+				<!--卡槽号-->
 				<param name="slot" type="int"/>
-				<!--卡号-->
-				<param name="cardNo" type="string"/>
 				<param name="reserved1" type="array_int"/>
 				<param name="reserved2" type="array_string"/>			
 			</req>

+ 3 - 0
Module/mod_cardissuerstore/CardIssuerStore_UserErrorCode.h

@@ -218,6 +218,9 @@
 #define CardIssuerStore_UserErrorCode_Split_MagTrack2_Failed		0x22000302 //磁条磁道2解析失败
 #define CardIssuerStore_UserErrorCode_Split_ICTrack2_Failed		0x22000303 //IC磁道2解析失败
 #define CardIssuerStore_UserErrorCode_Read_NoCard_Failed		0x22000304 //读卡时发现读卡器无卡
+#define CardIssuerStore_UserErrorCode_Capture_NoCard_Failed		0x22000305 //吞卡时发现读卡器无卡
+#define CardIssuerStore_UserErrorCode_Forget_Fetch_Card_Capture_Succ	0x22000306 //超时未取卡吞卡成功
+#define CardIssuerStore_UserErrorCode_Forget_Fetch_Card_Capture_Fail	0x22000307 //超时未取卡吞卡失败
 
 //卡库流程状态报错
 #define CardIssuerStore_UserErrorCode_PROCESS_IDLE				0x22000402		//当前处于卡机无卡空闲状态,无法处理此请求

+ 97 - 48
Module/mod_cardissuerstore/CardIssuerStore_client_g.h

@@ -1780,7 +1780,7 @@ public:
 		return Error;
 	}
 
-	ErrorCodeEnum QueryInternalHasCardJS(CardIssuerStoreService_QueryInternalHasCardJS_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	ErrorCodeEnum QueryHasCardJS(CardIssuerStoreService_QueryHasCardJS_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
 	{
 		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
 		CAutoBuffer Buf = SpObject2Buffer(Req);
@@ -1790,14 +1790,14 @@ public:
 			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
 			m_context = m_context.upgradeLink();
 		}
-		auto ret = pFunc->AsyncRequest(CardIssuerStoreService_Method_QueryInternalHasCardJS, CardIssuerStoreService_MethodSignature_QueryInternalHasCardJS, Buf, spAsyncWait, m_context, dwTimeout);
+		auto ret = pFunc->AsyncRequest(CardIssuerStoreService_Method_QueryHasCardJS, CardIssuerStoreService_MethodSignature_QueryHasCardJS, Buf, spAsyncWait, m_context, dwTimeout);
 		m_context.clear();
 		return ret;
 	}
-	ErrorCodeEnum QueryInternalHasCardJS(CardIssuerStoreService_QueryInternalHasCardJS_Req &Req, CardIssuerStoreService_QueryInternalHasCardJS_Ans &Ans, DWORD dwTimeout)
+	ErrorCodeEnum QueryHasCardJS(CardIssuerStoreService_QueryHasCardJS_Req &Req, CardIssuerStoreService_QueryHasCardJS_Ans &Ans, DWORD dwTimeout)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = QueryInternalHasCardJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = QueryHasCardJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
@@ -1805,10 +1805,10 @@ public:
 		}
 		return Error;
 	}
-	ErrorCodeEnum QueryInternalHasCardJS(CardIssuerStoreService_QueryInternalHasCardJS_Req &Req, CardIssuerStoreService_QueryInternalHasCardJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	ErrorCodeEnum QueryHasCardJS(CardIssuerStoreService_QueryHasCardJS_Req &Req, CardIssuerStoreService_QueryHasCardJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = QueryInternalHasCardJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = QueryHasCardJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
@@ -1816,10 +1816,10 @@ public:
 		}
 		return Error;
 	}
-	ErrorCodeEnum QueryInternalHasCardJS(CardIssuerStoreService_QueryInternalHasCardJS_Req &Req, CardIssuerStoreService_QueryInternalHasCardJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	ErrorCodeEnum QueryHasCardJS(CardIssuerStoreService_QueryHasCardJS_Req &Req, CardIssuerStoreService_QueryHasCardJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = QueryInternalHasCardJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = QueryHasCardJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			CSimpleString str;
@@ -1878,7 +1878,7 @@ public:
 		return Error;
 	}
 
-	ErrorCodeEnum IssueFromSlotJS(CardIssuerStoreService_IssueFromSlotJS_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	ErrorCodeEnum ICCommandJS(CardIssuerStoreService_ICCommandJS_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
 	{
 		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
 		CAutoBuffer Buf = SpObject2Buffer(Req);
@@ -1888,14 +1888,14 @@ public:
 			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
 			m_context = m_context.upgradeLink();
 		}
-		auto ret = pFunc->AsyncRequest(CardIssuerStoreService_Method_IssueFromSlotJS, CardIssuerStoreService_MethodSignature_IssueFromSlotJS, Buf, spAsyncWait, m_context, dwTimeout);
+		auto ret = pFunc->AsyncRequest(CardIssuerStoreService_Method_ICCommandJS, CardIssuerStoreService_MethodSignature_ICCommandJS, Buf, spAsyncWait, m_context, dwTimeout);
 		m_context.clear();
 		return ret;
 	}
-	ErrorCodeEnum IssueFromSlotJS(CardIssuerStoreService_IssueFromSlotJS_Req &Req, CardIssuerStoreService_IssueFromSlotJS_Ans &Ans, DWORD dwTimeout)
+	ErrorCodeEnum ICCommandJS(CardIssuerStoreService_ICCommandJS_Req &Req, CardIssuerStoreService_ICCommandJS_Ans &Ans, DWORD dwTimeout)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = IssueFromSlotJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = ICCommandJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
@@ -1903,10 +1903,10 @@ public:
 		}
 		return Error;
 	}
-	ErrorCodeEnum IssueFromSlotJS(CardIssuerStoreService_IssueFromSlotJS_Req &Req, CardIssuerStoreService_IssueFromSlotJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	ErrorCodeEnum ICCommandJS(CardIssuerStoreService_ICCommandJS_Req &Req, CardIssuerStoreService_ICCommandJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = IssueFromSlotJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = ICCommandJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
@@ -1914,10 +1914,10 @@ public:
 		}
 		return Error;
 	}
-	ErrorCodeEnum IssueFromSlotJS(CardIssuerStoreService_IssueFromSlotJS_Req &Req, CardIssuerStoreService_IssueFromSlotJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	ErrorCodeEnum ICCommandJS(CardIssuerStoreService_ICCommandJS_Req &Req, CardIssuerStoreService_ICCommandJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = IssueFromSlotJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = ICCommandJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			CSimpleString str;
@@ -1927,7 +1927,7 @@ public:
 		return Error;
 	}
 
-	ErrorCodeEnum SAMICCommandJS(CardIssuerStoreService_SAMICCommandJS_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	ErrorCodeEnum WriteTrackJS(CardIssuerStoreService_WriteTrackJS_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
 	{
 		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
 		CAutoBuffer Buf = SpObject2Buffer(Req);
@@ -1937,14 +1937,14 @@ public:
 			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
 			m_context = m_context.upgradeLink();
 		}
-		auto ret = pFunc->AsyncRequest(CardIssuerStoreService_Method_SAMICCommandJS, CardIssuerStoreService_MethodSignature_SAMICCommandJS, Buf, spAsyncWait, m_context, dwTimeout);
+		auto ret = pFunc->AsyncRequest(CardIssuerStoreService_Method_WriteTrackJS, CardIssuerStoreService_MethodSignature_WriteTrackJS, Buf, spAsyncWait, m_context, dwTimeout);
 		m_context.clear();
 		return ret;
 	}
-	ErrorCodeEnum SAMICCommandJS(CardIssuerStoreService_SAMICCommandJS_Req &Req, CardIssuerStoreService_SAMICCommandJS_Ans &Ans, DWORD dwTimeout)
+	ErrorCodeEnum WriteTrackJS(CardIssuerStoreService_WriteTrackJS_Req &Req, CardIssuerStoreService_WriteTrackJS_Ans &Ans, DWORD dwTimeout)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = SAMICCommandJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = WriteTrackJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
@@ -1952,10 +1952,10 @@ public:
 		}
 		return Error;
 	}
-	ErrorCodeEnum SAMICCommandJS(CardIssuerStoreService_SAMICCommandJS_Req &Req, CardIssuerStoreService_SAMICCommandJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	ErrorCodeEnum WriteTrackJS(CardIssuerStoreService_WriteTrackJS_Req &Req, CardIssuerStoreService_WriteTrackJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = SAMICCommandJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = WriteTrackJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
@@ -1963,10 +1963,10 @@ public:
 		}
 		return Error;
 	}
-	ErrorCodeEnum SAMICCommandJS(CardIssuerStoreService_SAMICCommandJS_Req &Req, CardIssuerStoreService_SAMICCommandJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	ErrorCodeEnum WriteTrackJS(CardIssuerStoreService_WriteTrackJS_Req &Req, CardIssuerStoreService_WriteTrackJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = SAMICCommandJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = WriteTrackJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			CSimpleString str;
@@ -1976,7 +1976,7 @@ public:
 		return Error;
 	}
 
-	ErrorCodeEnum WriteTrackJS(CardIssuerStoreService_WriteTrackJS_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	ErrorCodeEnum PrintCardImmediatelyJS(CardIssuerStoreService_PrintCardImmediatelyJS_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
 	{
 		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
 		CAutoBuffer Buf = SpObject2Buffer(Req);
@@ -1986,14 +1986,14 @@ public:
 			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
 			m_context = m_context.upgradeLink();
 		}
-		auto ret = pFunc->AsyncRequest(CardIssuerStoreService_Method_WriteTrackJS, CardIssuerStoreService_MethodSignature_WriteTrackJS, Buf, spAsyncWait, m_context, dwTimeout);
+		auto ret = pFunc->AsyncRequest(CardIssuerStoreService_Method_PrintCardImmediatelyJS, CardIssuerStoreService_MethodSignature_PrintCardImmediatelyJS, Buf, spAsyncWait, m_context, dwTimeout);
 		m_context.clear();
 		return ret;
 	}
-	ErrorCodeEnum WriteTrackJS(CardIssuerStoreService_WriteTrackJS_Req &Req, CardIssuerStoreService_WriteTrackJS_Ans &Ans, DWORD dwTimeout)
+	ErrorCodeEnum PrintCardImmediatelyJS(CardIssuerStoreService_PrintCardImmediatelyJS_Req &Req, CardIssuerStoreService_PrintCardImmediatelyJS_Ans &Ans, DWORD dwTimeout)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = WriteTrackJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = PrintCardImmediatelyJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
@@ -2001,10 +2001,10 @@ public:
 		}
 		return Error;
 	}
-	ErrorCodeEnum WriteTrackJS(CardIssuerStoreService_WriteTrackJS_Req &Req, CardIssuerStoreService_WriteTrackJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	ErrorCodeEnum PrintCardImmediatelyJS(CardIssuerStoreService_PrintCardImmediatelyJS_Req &Req, CardIssuerStoreService_PrintCardImmediatelyJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = WriteTrackJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = PrintCardImmediatelyJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
@@ -2012,10 +2012,10 @@ public:
 		}
 		return Error;
 	}
-	ErrorCodeEnum WriteTrackJS(CardIssuerStoreService_WriteTrackJS_Req &Req, CardIssuerStoreService_WriteTrackJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	ErrorCodeEnum PrintCardImmediatelyJS(CardIssuerStoreService_PrintCardImmediatelyJS_Req &Req, CardIssuerStoreService_PrintCardImmediatelyJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = WriteTrackJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = PrintCardImmediatelyJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			CSimpleString str;
@@ -2025,7 +2025,7 @@ public:
 		return Error;
 	}
 
-	ErrorCodeEnum PrintCardImmediatelyJS(CardIssuerStoreService_PrintCardImmediatelyJS_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	ErrorCodeEnum PreOnlineCrossJS(CardIssuerStoreService_PreOnlineCrossJS_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
 	{
 		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
 		CAutoBuffer Buf = SpObject2Buffer(Req);
@@ -2035,14 +2035,14 @@ public:
 			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
 			m_context = m_context.upgradeLink();
 		}
-		auto ret = pFunc->AsyncRequest(CardIssuerStoreService_Method_PrintCardImmediatelyJS, CardIssuerStoreService_MethodSignature_PrintCardImmediatelyJS, Buf, spAsyncWait, m_context, dwTimeout);
+		auto ret = pFunc->AsyncRequest(CardIssuerStoreService_Method_PreOnlineCrossJS, CardIssuerStoreService_MethodSignature_PreOnlineCrossJS, Buf, spAsyncWait, m_context, dwTimeout);
 		m_context.clear();
 		return ret;
 	}
-	ErrorCodeEnum PrintCardImmediatelyJS(CardIssuerStoreService_PrintCardImmediatelyJS_Req &Req, CardIssuerStoreService_PrintCardImmediatelyJS_Ans &Ans, DWORD dwTimeout)
+	ErrorCodeEnum PreOnlineCrossJS(CardIssuerStoreService_PreOnlineCrossJS_Req &Req, CardIssuerStoreService_PreOnlineCrossJS_Ans &Ans, DWORD dwTimeout)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = PrintCardImmediatelyJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = PreOnlineCrossJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
@@ -2050,10 +2050,10 @@ public:
 		}
 		return Error;
 	}
-	ErrorCodeEnum PrintCardImmediatelyJS(CardIssuerStoreService_PrintCardImmediatelyJS_Req &Req, CardIssuerStoreService_PrintCardImmediatelyJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	ErrorCodeEnum PreOnlineCrossJS(CardIssuerStoreService_PreOnlineCrossJS_Req &Req, CardIssuerStoreService_PreOnlineCrossJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = PrintCardImmediatelyJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = PreOnlineCrossJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
@@ -2061,10 +2061,10 @@ public:
 		}
 		return Error;
 	}
-	ErrorCodeEnum PrintCardImmediatelyJS(CardIssuerStoreService_PrintCardImmediatelyJS_Req &Req, CardIssuerStoreService_PrintCardImmediatelyJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	ErrorCodeEnum PreOnlineCrossJS(CardIssuerStoreService_PreOnlineCrossJS_Req &Req, CardIssuerStoreService_PreOnlineCrossJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = PrintCardImmediatelyJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = PreOnlineCrossJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			CSimpleString str;
@@ -2074,7 +2074,7 @@ public:
 		return Error;
 	}
 
-	ErrorCodeEnum PreOnlineCrossJS(CardIssuerStoreService_PreOnlineCrossJS_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
+	ErrorCodeEnum AddCardFromBoxJS(CardIssuerStoreService_AddCardFromBoxJS_Req &Req, CSmartPointer<IAsynWaitSp> &spAsyncWait, DWORD dwTimeout)
 	{
 		CSmartPointer<IClientSessionFunction> pFunc = GetFunction();
 		CAutoBuffer Buf = SpObject2Buffer(Req);
@@ -2084,14 +2084,14 @@ public:
 			DbgToBeidou(m_context, m_pEntityBase != NULL ? m_pEntityBase->GetEntityName() : "")();
 			m_context = m_context.upgradeLink();
 		}
-		auto ret = pFunc->AsyncRequest(CardIssuerStoreService_Method_PreOnlineCrossJS, CardIssuerStoreService_MethodSignature_PreOnlineCrossJS, Buf, spAsyncWait, m_context, dwTimeout);
+		auto ret = pFunc->AsyncRequest(CardIssuerStoreService_Method_AddCardFromBoxJS, CardIssuerStoreService_MethodSignature_AddCardFromBoxJS, Buf, spAsyncWait, m_context, dwTimeout);
 		m_context.clear();
 		return ret;
 	}
-	ErrorCodeEnum PreOnlineCrossJS(CardIssuerStoreService_PreOnlineCrossJS_Req &Req, CardIssuerStoreService_PreOnlineCrossJS_Ans &Ans, DWORD dwTimeout)
+	ErrorCodeEnum AddCardFromBoxJS(CardIssuerStoreService_AddCardFromBoxJS_Req &Req, CardIssuerStoreService_AddCardFromBoxJS_Ans &Ans, DWORD dwTimeout)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = PreOnlineCrossJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = AddCardFromBoxJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
@@ -2099,10 +2099,10 @@ public:
 		}
 		return Error;
 	}
-	ErrorCodeEnum PreOnlineCrossJS(CardIssuerStoreService_PreOnlineCrossJS_Req &Req, CardIssuerStoreService_PreOnlineCrossJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	ErrorCodeEnum AddCardFromBoxJS(CardIssuerStoreService_AddCardFromBoxJS_Req &Req, CardIssuerStoreService_AddCardFromBoxJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = PreOnlineCrossJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = AddCardFromBoxJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwUserError, str, dwTimeout);
@@ -2110,10 +2110,59 @@ public:
 		}
 		return Error;
 	}
-	ErrorCodeEnum PreOnlineCrossJS(CardIssuerStoreService_PreOnlineCrossJS_Req &Req, CardIssuerStoreService_PreOnlineCrossJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	ErrorCodeEnum AddCardFromBoxJS(CardIssuerStoreService_AddCardFromBoxJS_Req &Req, CardIssuerStoreService_AddCardFromBoxJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
 	{
 		CSmartPointer<IAsynWaitSp> spAsyncWait;
-		ErrorCodeEnum Error = PreOnlineCrossJS(Req, spAsyncWait, dwTimeout);
+		ErrorCodeEnum Error = AddCardFromBoxJS(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 MoveCardFromSlotJS(CardIssuerStoreService_MoveCardFromSlotJS_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(CardIssuerStoreService_Method_MoveCardFromSlotJS, CardIssuerStoreService_MethodSignature_MoveCardFromSlotJS, Buf, spAsyncWait, m_context, dwTimeout);
+		m_context.clear();
+		return ret;
+	}
+	ErrorCodeEnum MoveCardFromSlotJS(CardIssuerStoreService_MoveCardFromSlotJS_Req &Req, CardIssuerStoreService_MoveCardFromSlotJS_Ans &Ans, DWORD dwTimeout)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = MoveCardFromSlotJS(Req, spAsyncWait, dwTimeout);
+		if (Error == Error_Succeed) {
+			bool bEnd = false;
+			Error = SpWaitAnswerObject(spAsyncWait, Ans, bEnd, dwTimeout);
+			LOG_ASSERT(Error || bEnd);
+		}
+		return Error;
+	}
+	ErrorCodeEnum MoveCardFromSlotJS(CardIssuerStoreService_MoveCardFromSlotJS_Req &Req, CardIssuerStoreService_MoveCardFromSlotJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError, CSimpleString &str)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = MoveCardFromSlotJS(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 MoveCardFromSlotJS(CardIssuerStoreService_MoveCardFromSlotJS_Req &Req, CardIssuerStoreService_MoveCardFromSlotJS_Ans &Ans, DWORD dwTimeout, DWORD &dwUserError)
+	{
+		CSmartPointer<IAsynWaitSp> spAsyncWait;
+		ErrorCodeEnum Error = MoveCardFromSlotJS(Req, spAsyncWait, dwTimeout);
 		if (Error == Error_Succeed) {
 			bool bEnd = false;
 			CSimpleString str;

+ 97 - 66
Module/mod_cardissuerstore/CardIssuerStore_def_g.h

@@ -50,18 +50,19 @@ namespace CardIssuerStore {
 #define CardIssuerStoreService_Method_PostOnlineJS 41
 #define CardIssuerStoreService_Method_EjectJS 42
 #define CardIssuerStoreService_Method_CaptureJS 43
-#define CardIssuerStoreService_Method_QueryInternalHasCardJS 44
+#define CardIssuerStoreService_Method_QueryHasCardJS 44
 #define CardIssuerStoreService_Method_IssueFromBoxJS 45
-#define CardIssuerStoreService_Method_IssueFromSlotJS 46
-#define CardIssuerStoreService_Method_SAMICCommandJS 49
+#define CardIssuerStoreService_Method_ICCommandJS 49
 #define CardIssuerStoreService_Method_WriteTrackJS 50
 #define CardIssuerStoreService_Method_PrintCardImmediatelyJS 51
 #define CardIssuerStoreService_Method_PreOnlineCrossJS 52
-#define CardIssuerStoreService_Method_ReadBatchCardInfoInRangeJS 100
-#define CardIssuerStoreService_Method_GetCardInStoreJS 101
-#define CardIssuerStoreService_Method_AddAndReadCardFromBoxJS 102
-#define CardIssuerStoreService_Method_MoveAndReadCardFromSlotJS 104
-#define CardIssuerStoreService_Method_MoveBacktoSlotJS 105
+#define CardIssuerStoreService_Method_AddCardFromBoxJS 53
+#define CardIssuerStoreService_Method_MoveCardFromSlotJS 54
+#define CardIssuerStoreService_Method_ReadBatchCardInfoInRangeJS 60
+#define CardIssuerStoreService_Method_GetCardInStoreJS 61
+#define CardIssuerStoreService_Method_AddAndReadCardFromBoxJS 62
+#define CardIssuerStoreService_Method_MoveAndReadCardFromSlotJS 63
+#define CardIssuerStoreService_Method_MoveBacktoSlotJS 64
 
 #define CardIssuerStoreService_MethodSignature_Insert 1091033773
 #define CardIssuerStoreService_MethodSignature_CancelInsert -1202478828
@@ -101,13 +102,14 @@ namespace CardIssuerStore {
 #define CardIssuerStoreService_MethodSignature_PostOnlineJS -92324905
 #define CardIssuerStoreService_MethodSignature_EjectJS -687956608
 #define CardIssuerStoreService_MethodSignature_CaptureJS 141697186
-#define CardIssuerStoreService_MethodSignature_QueryInternalHasCardJS -233766940
+#define CardIssuerStoreService_MethodSignature_QueryHasCardJS -233766940
 #define CardIssuerStoreService_MethodSignature_IssueFromBoxJS -372937885
-#define CardIssuerStoreService_MethodSignature_IssueFromSlotJS 1061987729
-#define CardIssuerStoreService_MethodSignature_SAMICCommandJS -535533507
+#define CardIssuerStoreService_MethodSignature_ICCommandJS -535533507
 #define CardIssuerStoreService_MethodSignature_WriteTrackJS 1028099039
 #define CardIssuerStoreService_MethodSignature_PrintCardImmediatelyJS -315448088
 #define CardIssuerStoreService_MethodSignature_PreOnlineCrossJS 318664425
+#define CardIssuerStoreService_MethodSignature_AddCardFromBoxJS -213003133
+#define CardIssuerStoreService_MethodSignature_MoveCardFromSlotJS 249002458
 #define CardIssuerStoreService_MethodSignature_ReadBatchCardInfoInRangeJS 1365159982
 #define CardIssuerStoreService_MethodSignature_GetCardInStoreJS -502001649
 #define CardIssuerStoreService_MethodSignature_AddAndReadCardFromBoxJS -908816302
@@ -152,18 +154,19 @@ namespace CardIssuerStore {
 #define CardIssuerStoreService_LogCode_PostOnlineJS "QLR040222041"
 #define CardIssuerStoreService_LogCode_EjectJS "QLR040222042"
 #define CardIssuerStoreService_LogCode_CaptureJS "QLR040222043"
-#define CardIssuerStoreService_LogCode_QueryInternalHasCardJS "QLR040222044"
+#define CardIssuerStoreService_LogCode_QueryHasCardJS "QLR040222044"
 #define CardIssuerStoreService_LogCode_IssueFromBoxJS "QLR040222045"
-#define CardIssuerStoreService_LogCode_IssueFromSlotJS "QLR040222046"
-#define CardIssuerStoreService_LogCode_SAMICCommandJS "QLR040222049"
+#define CardIssuerStoreService_LogCode_ICCommandJS "QLR040222049"
 #define CardIssuerStoreService_LogCode_WriteTrackJS "QLR040222050"
 #define CardIssuerStoreService_LogCode_PrintCardImmediatelyJS "QLR040222051"
 #define CardIssuerStoreService_LogCode_PreOnlineCrossJS "QLR040222052"
-#define CardIssuerStoreService_LogCode_ReadBatchCardInfoInRangeJS "QLR0402220100"
-#define CardIssuerStoreService_LogCode_GetCardInStoreJS "QLR0402220101"
-#define CardIssuerStoreService_LogCode_AddAndReadCardFromBoxJS "QLR0402220102"
-#define CardIssuerStoreService_LogCode_MoveAndReadCardFromSlotJS "QLR0402220104"
-#define CardIssuerStoreService_LogCode_MoveBacktoSlotJS "QLR0402220105"
+#define CardIssuerStoreService_LogCode_AddCardFromBoxJS "QLR040222053"
+#define CardIssuerStoreService_LogCode_MoveCardFromSlotJS "QLR040222054"
+#define CardIssuerStoreService_LogCode_ReadBatchCardInfoInRangeJS "QLR040222060"
+#define CardIssuerStoreService_LogCode_GetCardInStoreJS "QLR040222061"
+#define CardIssuerStoreService_LogCode_AddAndReadCardFromBoxJS "QLR040222062"
+#define CardIssuerStoreService_LogCode_MoveAndReadCardFromSlotJS "QLR040222063"
+#define CardIssuerStoreService_LogCode_MoveBacktoSlotJS "QLR040222064"
 
 struct CardIssuerStoreService_Insert_Req
 {
@@ -1055,27 +1058,25 @@ struct CardIssuerStoreService_ReadJS_Req
 
 struct CardIssuerStoreService_ReadJS_Ans
 {
-	int ICType;
 	int magStatus;
 	CSimpleStringA track1;
 	CSimpleStringA track2;
 	CSimpleStringA track3;
-	int cardPos;
-	CSimpleStringA t2Account;
-	CSimpleStringA t2Region;
-	CSimpleStringA t2CardSerial;
-	CSimpleStringA t2CVC;
-	CSimpleStringA t2ExpireDate;
+	int track1Size;
+	int track2Size;
+	int track3Size;
+	int track1Status;
+	int track2Status;
+	int track3Status;
 	int icState;
 	int icMode;
-	CSimpleStringA icCardNo;
 	CSimpleStringA result;
 	CAutoArray<int> reserved1;
 	CAutoArray<CSimpleStringA> reserved2;
 
 	void Serialize(SpBuffer &Buf)
 	{
-		auto & buf = Buf & ICType & magStatus & track1 & track2 & track3 & cardPos & t2Account & t2Region & t2CardSerial & t2CVC & t2ExpireDate & icState & icMode & icCardNo & result & reserved1 & reserved2;
+		auto & buf = Buf & magStatus & track1 & track2 & track3 & track1Size & track2Size & track3Size & track1Status & track2Status & track3Status & icState & icMode & result & reserved1 & reserved2;
 	}
 
 };
@@ -1123,11 +1124,10 @@ struct CardIssuerStoreService_EjectJS_Ans
 struct CardIssuerStoreService_CaptureJS_Req
 {
 	CSimpleStringA captureCode;
-	CSimpleStringA cardNo;
 
 	void Serialize(SpBuffer &Buf)
 	{
-		auto & buf = Buf & captureCode & cardNo;
+		auto & buf = Buf & captureCode;
 	}
 
 };
@@ -1141,7 +1141,7 @@ struct CardIssuerStoreService_CaptureJS_Ans
 
 };
 
-struct CardIssuerStoreService_QueryInternalHasCardJS_Req
+struct CardIssuerStoreService_QueryHasCardJS_Req
 {
 
 	void Serialize(SpBuffer &Buf)
@@ -1150,7 +1150,7 @@ struct CardIssuerStoreService_QueryInternalHasCardJS_Req
 
 };
 
-struct CardIssuerStoreService_QueryInternalHasCardJS_Ans
+struct CardIssuerStoreService_QueryHasCardJS_Ans
 {
 	int position;
 	int reserved1;
@@ -1188,33 +1188,7 @@ struct CardIssuerStoreService_IssueFromBoxJS_Ans
 
 };
 
-struct CardIssuerStoreService_IssueFromSlotJS_Req
-{
-	int slot;
-	CSimpleStringA cardNo;
-	CAutoArray<int> reserved1;
-	CAutoArray<CSimpleStringA> reserved2;
-
-	void Serialize(SpBuffer &Buf)
-	{
-		auto & buf = Buf & slot & cardNo & reserved1 & reserved2;
-	}
-
-};
-
-struct CardIssuerStoreService_IssueFromSlotJS_Ans
-{
-	CAutoArray<int> reserved1;
-	CAutoArray<CSimpleStringA> reserved2;
-
-	void Serialize(SpBuffer &Buf)
-	{
-		auto & buf = Buf & reserved1 & reserved2;
-	}
-
-};
-
-struct CardIssuerStoreService_SAMICCommandJS_Req
+struct CardIssuerStoreService_ICCommandJS_Req
 {
 	int cmdType;
 	CAutoArray<int> param1;
@@ -1229,7 +1203,7 @@ struct CardIssuerStoreService_SAMICCommandJS_Req
 
 };
 
-struct CardIssuerStoreService_SAMICCommandJS_Ans
+struct CardIssuerStoreService_ICCommandJS_Ans
 {
 	CAutoArray<int> ret1;
 	CAutoArray<CSimpleStringA> ret2;
@@ -1327,6 +1301,55 @@ struct CardIssuerStoreService_PreOnlineCrossJS_Ans
 
 };
 
+struct CardIssuerStoreService_AddCardFromBoxJS_Req
+{
+	CAutoArray<int> reserved1;
+	CAutoArray<CSimpleStringA> reserved2;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & reserved1 & reserved2;
+	}
+
+};
+
+struct CardIssuerStoreService_AddCardFromBoxJS_Ans
+{
+	CAutoArray<int> reserved1;
+	CAutoArray<CSimpleStringA> reserved2;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & reserved1 & reserved2;
+	}
+
+};
+
+struct CardIssuerStoreService_MoveCardFromSlotJS_Req
+{
+	int slot;
+	CAutoArray<int> reserved1;
+	CAutoArray<CSimpleStringA> reserved2;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & slot & reserved1 & reserved2;
+	}
+
+};
+
+struct CardIssuerStoreService_MoveCardFromSlotJS_Ans
+{
+	CAutoArray<int> reserved1;
+	CAutoArray<CSimpleStringA> reserved2;
+
+	void Serialize(SpBuffer &Buf)
+	{
+		auto & buf = Buf & reserved1 & reserved2;
+	}
+
+};
+
 struct CardIssuerStoreService_ReadBatchCardInfoInRangeJS_Req
 {
 	int beginSlot;
@@ -1343,7 +1366,6 @@ struct CardIssuerStoreService_ReadBatchCardInfoInRangeJS_Req
 
 struct CardIssuerStoreService_ReadBatchCardInfoInRangeJS_Ans
 {
-	int status;
 	CAutoArray<int> slotNum;
 	CAutoArray<CSimpleStringA> cardNo;
 	CAutoArray<CSimpleStringA> cardSerial;
@@ -1352,7 +1374,7 @@ struct CardIssuerStoreService_ReadBatchCardInfoInRangeJS_Ans
 
 	void Serialize(SpBuffer &Buf)
 	{
-		auto & buf = Buf & status & slotNum & cardNo & cardSerial & reserved1 & reserved2;
+		auto & buf = Buf & slotNum & cardNo & cardSerial & reserved1 & reserved2;
 	}
 
 };
@@ -1399,14 +1421,18 @@ struct CardIssuerStoreService_AddAndReadCardFromBoxJS_Req
 struct CardIssuerStoreService_AddAndReadCardFromBoxJS_Ans
 {
 	CSimpleStringA cardNo;
+	CSimpleStringA track1;
 	CSimpleStringA track2;
 	CSimpleStringA track3;
+	int track1Size;
+	int track2Size;
+	int track3Size;
 	CAutoArray<int> reserved1;
 	CAutoArray<CSimpleStringA> reserved2;
 
 	void Serialize(SpBuffer &Buf)
 	{
-		auto & buf = Buf & cardNo & track2 & track3 & reserved1 & reserved2;
+		auto & buf = Buf & cardNo & track1 & track2 & track3 & track1Size & track2Size & track3Size & reserved1 & reserved2;
 	}
 
 };
@@ -1427,12 +1453,18 @@ struct CardIssuerStoreService_MoveAndReadCardFromSlotJS_Req
 struct CardIssuerStoreService_MoveAndReadCardFromSlotJS_Ans
 {
 	CSimpleStringA cardNo;
+	CSimpleStringA track1;
+	CSimpleStringA track2;
+	CSimpleStringA track3;
+	int track1Size;
+	int track2Size;
+	int track3Size;
 	CAutoArray<int> reserved1;
 	CAutoArray<CSimpleStringA> reserved2;
 
 	void Serialize(SpBuffer &Buf)
 	{
-		auto & buf = Buf & cardNo & reserved1 & reserved2;
+		auto & buf = Buf & cardNo & track1 & track2 & track3 & track1Size & track2Size & track3Size & reserved1 & reserved2;
 	}
 
 };
@@ -1440,13 +1472,12 @@ struct CardIssuerStoreService_MoveAndReadCardFromSlotJS_Ans
 struct CardIssuerStoreService_MoveBacktoSlotJS_Req
 {
 	int slot;
-	CSimpleStringA cardNo;
 	CAutoArray<int> reserved1;
 	CAutoArray<CSimpleStringA> reserved2;
 
 	void Serialize(SpBuffer &Buf)
 	{
-		auto & buf = Buf & slot & cardNo & reserved1 & reserved2;
+		auto & buf = Buf & slot & reserved1 & reserved2;
 	}
 
 };

+ 71 - 44
Module/mod_cardissuerstore/CardIssuerStore_server_g.h

@@ -296,8 +296,8 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
-		case CardIssuerStoreService_Method_QueryInternalHasCardJS:
-			if (dwSignature == CardIssuerStoreService_MethodSignature_QueryInternalHasCardJS) {
+		case CardIssuerStoreService_Method_QueryHasCardJS:
+			if (dwSignature == CardIssuerStoreService_MethodSignature_QueryHasCardJS) {
 				bOverlap = true;
 			} else {
 				Error = Error_MethodSignatureFailed;
@@ -310,15 +310,8 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
-		case CardIssuerStoreService_Method_IssueFromSlotJS:
-			if (dwSignature == CardIssuerStoreService_MethodSignature_IssueFromSlotJS) {
-				bOverlap = true;
-			} else {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		case CardIssuerStoreService_Method_SAMICCommandJS:
-			if (dwSignature == CardIssuerStoreService_MethodSignature_SAMICCommandJS) {
+		case CardIssuerStoreService_Method_ICCommandJS:
+			if (dwSignature == CardIssuerStoreService_MethodSignature_ICCommandJS) {
 				bOverlap = true;
 			} else {
 				Error = Error_MethodSignatureFailed;
@@ -345,6 +338,20 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case CardIssuerStoreService_Method_AddCardFromBoxJS:
+			if (dwSignature == CardIssuerStoreService_MethodSignature_AddCardFromBoxJS) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
+		case CardIssuerStoreService_Method_MoveCardFromSlotJS:
+			if (dwSignature == CardIssuerStoreService_MethodSignature_MoveCardFromSlotJS) {
+				bOverlap = true;
+			} else {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		case CardIssuerStoreService_Method_ReadBatchCardInfoInRangeJS:
 			if (dwSignature == CardIssuerStoreService_MethodSignature_ReadBatchCardInfoInRangeJS) {
 				bOverlap = true;
@@ -581,8 +588,8 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
-		case CardIssuerStoreService_Method_QueryInternalHasCardJS:
-			if (dwSignature != CardIssuerStoreService_MethodSignature_QueryInternalHasCardJS) {
+		case CardIssuerStoreService_Method_QueryHasCardJS:
+			if (dwSignature != CardIssuerStoreService_MethodSignature_QueryHasCardJS) {
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
@@ -591,13 +598,8 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
-		case CardIssuerStoreService_Method_IssueFromSlotJS:
-			if (dwSignature != CardIssuerStoreService_MethodSignature_IssueFromSlotJS) {
-				Error = Error_MethodSignatureFailed;
-			}
-			break;
-		case CardIssuerStoreService_Method_SAMICCommandJS:
-			if (dwSignature != CardIssuerStoreService_MethodSignature_SAMICCommandJS) {
+		case CardIssuerStoreService_Method_ICCommandJS:
+			if (dwSignature != CardIssuerStoreService_MethodSignature_ICCommandJS) {
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
@@ -616,6 +618,16 @@ public:
 				Error = Error_MethodSignatureFailed;
 			}
 			break;
+		case CardIssuerStoreService_Method_AddCardFromBoxJS:
+			if (dwSignature != CardIssuerStoreService_MethodSignature_AddCardFromBoxJS) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
+		case CardIssuerStoreService_Method_MoveCardFromSlotJS:
+			if (dwSignature != CardIssuerStoreService_MethodSignature_MoveCardFromSlotJS) {
+				Error = Error_MethodSignatureFailed;
+			}
+			break;
 		case CardIssuerStoreService_Method_ReadBatchCardInfoInRangeJS:
 			if (dwSignature != CardIssuerStoreService_MethodSignature_ReadBatchCardInfoInRangeJS) {
 				Error = Error_MethodSignatureFailed;
@@ -838,7 +850,7 @@ public:
 	/// override by user
 	}
 
-	virtual void Handle_QueryInternalHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryInternalHasCardJS_Req, CardIssuerStoreService_QueryInternalHasCardJS_Ans>::Pointer ctx)
+	virtual void Handle_QueryHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryHasCardJS_Req, CardIssuerStoreService_QueryHasCardJS_Ans>::Pointer ctx)
 	{
 	/// override by user
 	}
@@ -848,27 +860,32 @@ public:
 	/// override by user
 	}
 
-	virtual void Handle_IssueFromSlotJS(SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req, CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx)
+	virtual void Handle_ICCommandJS(SpReqAnsContext<CardIssuerStoreService_ICCommandJS_Req, CardIssuerStoreService_ICCommandJS_Ans>::Pointer ctx)
 	{
 	/// override by user
 	}
 
-	virtual void Handle_SAMICCommandJS(SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req, CardIssuerStoreService_SAMICCommandJS_Ans>::Pointer ctx)
+	virtual void Handle_WriteTrackJS(SpReqAnsContext<CardIssuerStoreService_WriteTrackJS_Req, CardIssuerStoreService_WriteTrackJS_Ans>::Pointer ctx)
 	{
 	/// override by user
 	}
 
-	virtual void Handle_WriteTrackJS(SpReqAnsContext<CardIssuerStoreService_WriteTrackJS_Req, CardIssuerStoreService_WriteTrackJS_Ans>::Pointer ctx)
+	virtual void Handle_PrintCardImmediatelyJS(SpReqAnsContext<CardIssuerStoreService_PrintCardImmediatelyJS_Req, CardIssuerStoreService_PrintCardImmediatelyJS_Ans>::Pointer ctx)
 	{
 	/// override by user
 	}
 
-	virtual void Handle_PrintCardImmediatelyJS(SpReqAnsContext<CardIssuerStoreService_PrintCardImmediatelyJS_Req, CardIssuerStoreService_PrintCardImmediatelyJS_Ans>::Pointer ctx)
+	virtual void Handle_PreOnlineCrossJS(SpReqAnsContext<CardIssuerStoreService_PreOnlineCrossJS_Req, CardIssuerStoreService_PreOnlineCrossJS_Ans>::Pointer ctx)
 	{
 	/// override by user
 	}
 
-	virtual void Handle_PreOnlineCrossJS(SpReqAnsContext<CardIssuerStoreService_PreOnlineCrossJS_Req, CardIssuerStoreService_PreOnlineCrossJS_Ans>::Pointer ctx)
+	virtual void Handle_AddCardFromBoxJS(SpReqAnsContext<CardIssuerStoreService_AddCardFromBoxJS_Req, CardIssuerStoreService_AddCardFromBoxJS_Ans>::Pointer ctx)
+	{
+	/// override by user
+	}
+
+	virtual void Handle_MoveCardFromSlotJS(SpReqAnsContext<CardIssuerStoreService_MoveCardFromSlotJS_Req, CardIssuerStoreService_MoveCardFromSlotJS_Ans>::Pointer ctx)
 	{
 	/// override by user
 	}
@@ -1294,14 +1311,14 @@ public:
 						Handle_CaptureJS(ctx);
 					}
 					break;
-				case CardIssuerStoreService_Method_QueryInternalHasCardJS:
+				case CardIssuerStoreService_Method_QueryHasCardJS:
 					{
-						SpReqAnsContext<CardIssuerStoreService_QueryInternalHasCardJS_Req,CardIssuerStoreService_QueryInternalHasCardJS_Ans>::Pointer ctx;
-						ctx.Attach(new SpReqAnsContext<CardIssuerStoreService_QueryInternalHasCardJS_Req,CardIssuerStoreService_QueryInternalHasCardJS_Ans>(pTransactionContext));
+						SpReqAnsContext<CardIssuerStoreService_QueryHasCardJS_Req,CardIssuerStoreService_QueryHasCardJS_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<CardIssuerStoreService_QueryHasCardJS_Req,CardIssuerStoreService_QueryHasCardJS_Ans>(pTransactionContext));
 						SpBuffer2Object(Buf, ctx->Req);
 						pTransactionContext->GetLinkContext(ctx->link);
 						EntityResource::setLink(ctx->link);
-						Handle_QueryInternalHasCardJS(ctx);
+						Handle_QueryHasCardJS(ctx);
 					}
 					break;
 				case CardIssuerStoreService_Method_IssueFromBoxJS:
@@ -1314,24 +1331,14 @@ public:
 						Handle_IssueFromBoxJS(ctx);
 					}
 					break;
-				case CardIssuerStoreService_Method_IssueFromSlotJS:
-					{
-						SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req,CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx;
-						ctx.Attach(new SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req,CardIssuerStoreService_IssueFromSlotJS_Ans>(pTransactionContext));
-						SpBuffer2Object(Buf, ctx->Req);
-						pTransactionContext->GetLinkContext(ctx->link);
-						EntityResource::setLink(ctx->link);
-						Handle_IssueFromSlotJS(ctx);
-					}
-					break;
-				case CardIssuerStoreService_Method_SAMICCommandJS:
+				case CardIssuerStoreService_Method_ICCommandJS:
 					{
-						SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req,CardIssuerStoreService_SAMICCommandJS_Ans>::Pointer ctx;
-						ctx.Attach(new SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req,CardIssuerStoreService_SAMICCommandJS_Ans>(pTransactionContext));
+						SpReqAnsContext<CardIssuerStoreService_ICCommandJS_Req,CardIssuerStoreService_ICCommandJS_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<CardIssuerStoreService_ICCommandJS_Req,CardIssuerStoreService_ICCommandJS_Ans>(pTransactionContext));
 						SpBuffer2Object(Buf, ctx->Req);
 						pTransactionContext->GetLinkContext(ctx->link);
 						EntityResource::setLink(ctx->link);
-						Handle_SAMICCommandJS(ctx);
+						Handle_ICCommandJS(ctx);
 					}
 					break;
 				case CardIssuerStoreService_Method_WriteTrackJS:
@@ -1364,6 +1371,26 @@ public:
 						Handle_PreOnlineCrossJS(ctx);
 					}
 					break;
+				case CardIssuerStoreService_Method_AddCardFromBoxJS:
+					{
+						SpReqAnsContext<CardIssuerStoreService_AddCardFromBoxJS_Req,CardIssuerStoreService_AddCardFromBoxJS_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<CardIssuerStoreService_AddCardFromBoxJS_Req,CardIssuerStoreService_AddCardFromBoxJS_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						pTransactionContext->GetLinkContext(ctx->link);
+						EntityResource::setLink(ctx->link);
+						Handle_AddCardFromBoxJS(ctx);
+					}
+					break;
+				case CardIssuerStoreService_Method_MoveCardFromSlotJS:
+					{
+						SpReqAnsContext<CardIssuerStoreService_MoveCardFromSlotJS_Req,CardIssuerStoreService_MoveCardFromSlotJS_Ans>::Pointer ctx;
+						ctx.Attach(new SpReqAnsContext<CardIssuerStoreService_MoveCardFromSlotJS_Req,CardIssuerStoreService_MoveCardFromSlotJS_Ans>(pTransactionContext));
+						SpBuffer2Object(Buf, ctx->Req);
+						pTransactionContext->GetLinkContext(ctx->link);
+						EntityResource::setLink(ctx->link);
+						Handle_MoveCardFromSlotJS(ctx);
+					}
+					break;
 				case CardIssuerStoreService_Method_ReadBatchCardInfoInRangeJS:
 					{
 						SpReqAnsContext<CardIssuerStoreService_ReadBatchCardInfoInRangeJS_Req,CardIssuerStoreService_ReadBatchCardInfoInRangeJS_Ans>::Pointer ctx;

+ 54 - 22
Module/mod_cardissuerstore/mod_cardissuer.cpp

@@ -208,20 +208,29 @@ void CardIssuerStoreServerSession::Handle_MoveBacktoSlotJS(SpReqAnsContext<CardI
 }
 
 //卡库领卡
-void CardIssuerStoreServerSession::Handle_IssueFromSlotJS(SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req, CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx) 
-{
-	LOG_FUNCTION();
-	DbgToBeidou(ctx->link, __FUNCTION__)();
-	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke IssueFromSlotJS");
-	m_pEntity->IssueFromSlotJS(ctx);
-}
+//void CardIssuerStoreServerSession::Handle_IssueFromSlotJS(SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req, CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx) 
+//{
+//	LOG_FUNCTION();
+//	DbgToBeidou(ctx->link, __FUNCTION__)();
+//	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke IssueFromSlotJS");
+//	m_pEntity->IssueFromSlotJS(ctx);
+//}
+//查询卡机内部中是否有卡
+//void CardIssuerStoreServerSession::Handle_QueryInternalHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryInternalHasCardJS_Req, CardIssuerStoreService_QueryInternalHasCardJS_Ans>::Pointer ctx)
+//{
+//	LOG_FUNCTION();
+//	DbgToBeidou(ctx->link, __FUNCTION__)();
+//	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke QueryInternalHasCardJS");
+//	m_pEntity->QueryInternalHasCardJS(ctx);
+//}
+
 //查询卡机内部中是否有卡
-void CardIssuerStoreServerSession::Handle_QueryInternalHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryInternalHasCardJS_Req, CardIssuerStoreService_QueryInternalHasCardJS_Ans>::Pointer ctx)
+void CardIssuerStoreServerSession::Handle_QueryHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryHasCardJS_Req, CardIssuerStoreService_QueryHasCardJS_Ans>::Pointer ctx)
 {
 	LOG_FUNCTION();
 	DbgToBeidou(ctx->link, __FUNCTION__)();
-	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke QueryInternalHasCardJS");
-	m_pEntity->QueryInternalHasCardJS(ctx);
+	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke QueryHasCardJS");
+	m_pEntity->QueryHasCardJS(ctx);
 }
 
 //写卡
@@ -243,12 +252,21 @@ void CardIssuerStoreServerSession::Handle_PrintCardImmediatelyJS(SpReqAnsContext
 }
 
 //IC交互
-void CardIssuerStoreServerSession::Handle_SAMICCommandJS(SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req, CardIssuerStoreService_SAMICCommandJS_Ans>::Pointer ctx)
+//void CardIssuerStoreServerSession::Handle_SAMICCommandJS(SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req, CardIssuerStoreService_SAMICCommandJS_Ans>::Pointer ctx)
+//{
+//	LOG_FUNCTION();
+//	DbgToBeidou(ctx->link, __FUNCTION__)();
+//	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke SAMICCommandJS");
+//	m_pEntity->SAMICCommandJS(ctx);
+//}
+
+//IC交互
+void CardIssuerStoreServerSession::Handle_ICCommandJS(SpReqAnsContext<CardIssuerStoreService_ICCommandJS_Req, CardIssuerStoreService_ICCommandJS_Ans>::Pointer ctx)
 {
 	LOG_FUNCTION();
 	DbgToBeidou(ctx->link, __FUNCTION__)();
-	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke SAMICCommandJS");
-	m_pEntity->SAMICCommandJS(ctx);
+	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke ICCommandJS");
+	m_pEntity->ICCommandJS(ctx);
 }
 
 //联机后处理
@@ -287,26 +305,40 @@ void CardIssuerStoreServerSession::Handle_ReadJS(SpReqAnsContext<CardIssuerStore
 	m_pEntity->ReadJS(ctx);
 }
 
+//加卡箱移卡
+void CardIssuerStoreServerSession::Handle_AddCardFromBoxJS(SpReqAnsContext<CardIssuerStoreService_AddCardFromBoxJS_Req, CardIssuerStoreService_AddCardFromBoxJS_Ans>::Pointer ctx)
+{
+	LOG_FUNCTION();
+	DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke AddCardFromBoxJS");
+	m_pEntity->AddCardFromBoxJS(ctx);
+}
+
+//卡槽移卡
+void CardIssuerStoreServerSession::Handle_MoveCardFromSlotJS(SpReqAnsContext<CardIssuerStoreService_MoveCardFromSlotJS_Req, CardIssuerStoreService_MoveCardFromSlotJS_Ans>::Pointer ctx)
+{
+	LOG_FUNCTION();
+	DbgToBeidou(ctx->link, __FUNCTION__)();
+	DbgWithLink(LOG_LEVEL_INFO, ctx->link.checkEmpty() ? LOG_TYPE_SYSTEM : LOG_TYPE_USER).setAPI(__FUNCTION__)("Invoke MoveCardFromSlotJS");
+	m_pEntity->MoveCardFromSlotJS(ctx);
+}
+
+
+
 #pragma endregion JS接口实现
 void CCardIssuerEntity::OnSysVarEvent(const char* pszKey, const char* pszValue, const char* pszOldValue, const char* pszEntityName)
 {
 	if ((_strnicmp(pszKey, "UIState", strlen("UIState")) == 0))
 	{
+		m_fsm.OnUIState4SetWhatPage(pszValue);
 		if (_strnicmp(pszValue, "M", strlen("M")) == 0) {
-			m_fsm.SetInWhatPage(PageType_MainPage);
 			m_fsm.SetEnterMainPage();//设置进入首页
-		}
-		else if (_strnicmp(pszValue, "U", strlen("U")) == 0) {
-			m_fsm.SetInWhatPage(PageType_UserDesktop);
-		}
-		else {
-			m_fsm.SetInWhatPage(PageType_Other);
+			//判断是否进入首页触发业务结束事件,发送事件给状态机。
+			m_fsm.ExitToMainPage();
 		}
 	}
 }
 
-
-
 SP_BEGIN_ENTITY_MAP()
 	SP_ENTITY(CCardIssuerEntity)
 SP_END_ENTITY_MAP()

+ 44 - 20
Module/mod_cardissuerstore/mod_cardissuer.h

@@ -35,10 +35,12 @@ public:
 	virtual void Handle_PostOnlineJS(SpReqAnsContext<CardIssuerStoreService_PostOnlineJS_Req, CardIssuerStoreService_PostOnlineJS_Ans>::Pointer ctx);
 	virtual void Handle_EjectJS(SpReqAnsContext<CardIssuerStoreService_EjectJS_Req, CardIssuerStoreService_EjectJS_Ans>::Pointer ctx);
 	virtual void Handle_CaptureJS(SpReqAnsContext<CardIssuerStoreService_CaptureJS_Req, CardIssuerStoreService_CaptureJS_Ans>::Pointer ctx);
-	virtual void Handle_QueryInternalHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryInternalHasCardJS_Req, CardIssuerStoreService_QueryInternalHasCardJS_Ans>::Pointer ctx);
+	//virtual void Handle_QueryInternalHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryInternalHasCardJS_Req, CardIssuerStoreService_QueryInternalHasCardJS_Ans>::Pointer ctx);
+	virtual void Handle_QueryHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryHasCardJS_Req, CardIssuerStoreService_QueryHasCardJS_Ans>::Pointer ctx);
 	virtual void Handle_IssueFromBoxJS(SpReqAnsContext<CardIssuerStoreService_IssueFromBoxJS_Req, CardIssuerStoreService_IssueFromBoxJS_Ans>::Pointer ctx);
-	virtual void Handle_IssueFromSlotJS(SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req, CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx);
-	virtual void Handle_SAMICCommandJS(SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req, CardIssuerStoreService_SAMICCommandJS_Ans>::Pointer ctx);
+	//virtual void Handle_IssueFromSlotJS(SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req, CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx);
+	//virtual void Handle_SAMICCommandJS(SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req, CardIssuerStoreService_SAMICCommandJS_Ans>::Pointer ctx);
+	virtual void Handle_ICCommandJS(SpReqAnsContext<CardIssuerStoreService_ICCommandJS_Req, CardIssuerStoreService_ICCommandJS_Ans>::Pointer ctx);
 	virtual void Handle_WriteTrackJS(SpReqAnsContext<CardIssuerStoreService_WriteTrackJS_Req, CardIssuerStoreService_WriteTrackJS_Ans>::Pointer ctx);
 	virtual void Handle_PrintCardImmediatelyJS(SpReqAnsContext<CardIssuerStoreService_PrintCardImmediatelyJS_Req, CardIssuerStoreService_PrintCardImmediatelyJS_Ans>::Pointer ctx);
 	virtual void Handle_PreOnlineCrossJS(SpReqAnsContext<CardIssuerStoreService_PreOnlineCrossJS_Req, CardIssuerStoreService_PreOnlineCrossJS_Ans>::Pointer ctx);
@@ -47,7 +49,9 @@ public:
 	virtual void Handle_AddAndReadCardFromBoxJS(SpReqAnsContext<CardIssuerStoreService_AddAndReadCardFromBoxJS_Req, CardIssuerStoreService_AddAndReadCardFromBoxJS_Ans>::Pointer ctx);
 	virtual void Handle_MoveAndReadCardFromSlotJS(SpReqAnsContext<CardIssuerStoreService_MoveAndReadCardFromSlotJS_Req, CardIssuerStoreService_MoveAndReadCardFromSlotJS_Ans>::Pointer ctx);
 	virtual void Handle_MoveBacktoSlotJS(SpReqAnsContext<CardIssuerStoreService_MoveBacktoSlotJS_Req, CardIssuerStoreService_MoveBacktoSlotJS_Ans>::Pointer ctx);
-
+	//新增接口
+	virtual void Handle_AddCardFromBoxJS(SpReqAnsContext<CardIssuerStoreService_AddCardFromBoxJS_Req, CardIssuerStoreService_AddCardFromBoxJS_Ans>::Pointer ctx);
+	virtual void Handle_MoveCardFromSlotJS(SpReqAnsContext<CardIssuerStoreService_MoveCardFromSlotJS_Req, CardIssuerStoreService_MoveCardFromSlotJS_Ans>::Pointer ctx);
 private:
 	CCardIssuerEntity* m_pEntity;
 };
@@ -402,6 +406,26 @@ public:
 		}
 	}
 
+	void AddCardFromBoxJS(SpReqAnsContext<CardIssuerStoreService_AddCardFromBoxJS_Req, CardIssuerStoreService_AddCardFromBoxJS_Ans>::Pointer ctx)
+	{
+		LOG_FUNCTION();
+		if (!m_fsm.GetDevInitFlag()) {
+			ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed);
+		}
+		else if (_stricmp(m_fsm.GetCurrStateName(), "Idle") != 0) {
+			//不符合请求调用,告知具体错误流程
+			DWORD errCode = m_fsm.GetFsmStateErrCode();
+			int state = m_fsm.GetFSMState();
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("AddCardFromBoxJS req is unhandled ,CurrState=%d", state);
+			ctx->Answer(Error_Unexpect, errCode);
+		}
+		else {
+			AddCardFromBoxJSEvent* pEvt = new AddCardFromBoxJSEvent();
+			pEvt->ctx = ctx;
+			m_fsm.PostEventFIFO(pEvt);
+		}
+	}
+
 	void MoveAndReadCardFromSlotJS(SpReqAnsContext<CardIssuerStoreService_MoveAndReadCardFromSlotJS_Req, CardIssuerStoreService_MoveAndReadCardFromSlotJS_Ans>::Pointer ctx)
 	{
 		LOG_FUNCTION();
@@ -422,59 +446,59 @@ public:
 		}
 	}
 
-	void MoveBacktoSlotJS(SpReqAnsContext<CardIssuerStoreService_MoveBacktoSlotJS_Req, CardIssuerStoreService_MoveBacktoSlotJS_Ans>::Pointer ctx)
+	void MoveCardFromSlotJS(SpReqAnsContext<CardIssuerStoreService_MoveCardFromSlotJS_Req, CardIssuerStoreService_MoveCardFromSlotJS_Ans>::Pointer ctx)
 	{
 		LOG_FUNCTION();
 		if (!m_fsm.GetDevInitFlag()) {
 			ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed);
 		}
-		else if (_stricmp(m_fsm.GetCurrStateName(), "Hold") != 0) {
+		else if (_stricmp(m_fsm.GetCurrStateName(), "Idle") != 0) {
 			//不符合请求调用,告知具体错误流程
 			DWORD errCode = m_fsm.GetFsmStateErrCode();
 			int state = m_fsm.GetFSMState();
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("MoveBacktoSlotJS req is unhandled ,CurrState=%d", state);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("MoveCardFromSlotJS req is unhandled ,CurrState=%d", state);
 			ctx->Answer(Error_Unexpect, errCode);
 		}
 		else {
-			MoveBacktoSlotJSEvent* pEvt = new MoveBacktoSlotJSEvent();
+			MoveCardFromSlotJSEvent* pEvt = new MoveCardFromSlotJSEvent();
 			pEvt->ctx = ctx;
 			m_fsm.PostEventFIFO(pEvt);
 		}
-		
 	}
-	
-	void IssueFromSlotJS(SpReqAnsContext<CardIssuerStoreService_IssueFromSlotJS_Req, CardIssuerStoreService_IssueFromSlotJS_Ans>::Pointer ctx)
+
+	void MoveBacktoSlotJS(SpReqAnsContext<CardIssuerStoreService_MoveBacktoSlotJS_Req, CardIssuerStoreService_MoveBacktoSlotJS_Ans>::Pointer ctx)
 	{
 		LOG_FUNCTION();
 		if (!m_fsm.GetDevInitFlag()) {
 			ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed);
 		}
-		else if (_stricmp(m_fsm.GetCurrStateName(), "Idle") != 0) {
+		else if (_stricmp(m_fsm.GetCurrStateName(), "Hold") != 0) {
 			//不符合请求调用,告知具体错误流程
 			DWORD errCode = m_fsm.GetFsmStateErrCode();
 			int state = m_fsm.GetFSMState();
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("IssueFromSlotJS req is unhandled ,CurrState=%d", state);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("MoveBacktoSlotJS req is unhandled ,CurrState=%d", state);
 			ctx->Answer(Error_Unexpect, errCode);
 		}
 		else {
-			IssueFromSlotJSEvent* pEvt = new IssueFromSlotJSEvent();
+			MoveBacktoSlotJSEvent* pEvt = new MoveBacktoSlotJSEvent();
 			pEvt->ctx = ctx;
 			m_fsm.PostEventFIFO(pEvt);
 		}
+		
 	}
 
-	void QueryInternalHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryInternalHasCardJS_Req, CardIssuerStoreService_QueryInternalHasCardJS_Ans>::Pointer ctx) 
+	void QueryHasCardJS(SpReqAnsContext<CardIssuerStoreService_QueryHasCardJS_Req, CardIssuerStoreService_QueryHasCardJS_Ans>::Pointer ctx)
 	{
 		LOG_FUNCTION();
 		if (!m_fsm.GetDevInitFlag()) {
 			ctx->Answer(Error_DevNotAvailable, CardIssuerStore_UserErrorCode_DevOpen_Failed);
 		}
 		else {
-			m_fsm.QueryInternalHasCardJS(ctx);
+			m_fsm.QueryHasCardJS(ctx);
 		}
 	}
 
-	void SAMICCommandJS(SpReqAnsContext<CardIssuerStoreService_SAMICCommandJS_Req, CardIssuerStoreService_SAMICCommandJS_Ans>::Pointer ctx) 
+	void ICCommandJS(SpReqAnsContext<CardIssuerStoreService_ICCommandJS_Req, CardIssuerStoreService_ICCommandJS_Ans>::Pointer ctx) 
 	{
 		LOG_FUNCTION();
 		if (!m_fsm.GetDevInitFlag()) {
@@ -484,11 +508,11 @@ public:
 			//不符合请求调用,告知具体错误流程
 			DWORD errCode = m_fsm.GetFsmStateErrCode();
 			int state = m_fsm.GetFSMState();
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("SAMICCommandJS req is unhandled ,CurrState=%d", state);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ICCommandJS req is unhandled ,CurrState=%d", state);
 			ctx->Answer(Error_Unexpect, errCode);
 		}
 		else {
-			SAMICCommandJSEvent* pEvt = new SAMICCommandJSEvent();
+			ICCommandJSEvent* pEvt = new ICCommandJSEvent();
 			pEvt->ctx = ctx;
 			m_fsm.PostEventFIFO(pEvt);
 		}
@@ -609,7 +633,7 @@ public:
 			//不符合请求调用,告知具体错误流程
 			DWORD errCode = m_fsm.GetFsmStateErrCode();
 			int state = m_fsm.GetFSMState();
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("IssueFromBoxJS req is unhandled ,CurrState=%d", state);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ReadJS req is unhandled ,CurrState=%d", state);
 			ctx->Answer(Error_Unexpect, errCode);
 		}
 		else {

+ 81 - 61
Module/mod_chromium/CWSCodec.cpp

@@ -399,14 +399,14 @@ namespace Chromium {
 		cJSON_AddStringToObject(ret, PARAMLIST_HEAD, dstPayLoad.c_str());
 	}
 
-	std::pair<bool, std::string>  CWSCodec::DeserializeRequestAck(CMessage & msg, std::map<int, entity_def_struct>::iterator & it, int& rpos, cJSON * ret) {
+	std::pair<bool, std::string>  CWSCodec::DeserializeRequestAck(CMessage & msg, std::map<int, entity_def_struct>::iterator & it, int& rpos, cJSON * ret, bool isSafe) {
 		entity_def_struct* p_struct = &it->second;
 		CMedthodInterface* mi = mInterpreter->getFunctionInterface(p_struct->entity_name, p_struct->class_name, p_struct->methodID);
 		CTransStruct ts = mi->mResponseInterpreter;
 
 		try
 		{
-			DeserializeBase(msg, ts, rpos, ret, !mi->m_forceNewReturn);
+			DeserializeBase(msg, ts, rpos, ret, !(mi->m_forceNewReturn || isSafe));
 			return std::make_pair(true, mi->mMethodName);
 		}
 		catch (...)
@@ -430,12 +430,11 @@ namespace Chromium {
 		
 	}
 
-	void CWSCodec::DeserializeEvent(CMessage & msg,
-		std::vector<CMedthodInterface>*list,
-		int& rpos, cJSON * ret) {
+	void CWSCodec::DeserializeEvent(CMessage & msg,	std::vector<CMedthodInterface>*list, int& rpos, cJSON * ret, bool isSafe) {
 		int eventID = msg.getEventID();
 		if (NULL == list || eventID < 0 || eventID >= list->size())
 		{
+			cJSON_DeleteItemFromObject(ret, "errorCode");
 			cJSON_AddNumberToObject(ret, "errorCode", Error_Unexpect);
 			CSimpleStringA errmsg = "";
 			errmsg.Format("Cannot find the eventID = %d!", eventID);
@@ -446,7 +445,7 @@ namespace Chromium {
 		CTransStruct ts = mi->mResponseInterpreter;
 		try
 		{
-			DeserializeBase(msg, ts, rpos, ret, !mi->m_forceNewReturn);
+			DeserializeBase(msg, ts, rpos, ret, !(mi->m_forceNewReturn || isSafe));
 		}
 		catch (...)
 		{
@@ -468,6 +467,50 @@ namespace Chromium {
 		}
 	}
 
+	void CWSCodec::processErrorCode(cJSON* ret, CMessage& msg, int errorCode, socket_msgInfo& msgInfo, int &rpos, bool isSafe) {
+		CSimpleStringA errorMsg = "";
+		ReadT(msg.getPayload(), errorMsg, &rpos);
+		auto userCodeInfo = getErrMsgByRemark(errorMsg.GetData(), isSafe);
+
+		//init msgInfo
+		msgInfo.userCodeVal = errorCode;
+		msgInfo.userCode = userCodeInfo.second.userCode;
+		msgInfo.rtaCode = userCodeInfo.second.VTMCode;
+		msgInfo.warnMsg = userCodeInfo.second.errMsg;
+		
+		cJSON_DeleteItemFromObject(ret, "errorCode");
+		if (isSafe)
+		{
+			if (errorCode == 0)
+			{
+				cJSON_AddStringToObject(ret, "errorCode", SUC_RETURN_STR);
+				cJSON_AddStringToObject(ret, "errorMsg", "");
+			}
+			else
+			{
+				if(userCodeInfo.second.VTMCode.length() > 0)
+					cJSON_AddStringToObject(ret, "errorCode", userCodeInfo.second.VTMCode.c_str());
+				else
+					cJSON_AddStringToObject(ret, "errorCode", "RTA42F1");
+
+				cJSON_AddStringToObject(ret, "errorMsg", userCodeInfo.second.errMsg.c_str());
+			}
+				
+		}
+		else
+		{
+			cJSON_AddNumberToObject(ret, "errorCode", errorCode);
+			if (userCodeInfo.first != 0) {
+				cJSON_AddNumberToObject(ret, "userCode", userCodeInfo.first);
+				cJSON_AddStringToObject(ret, "rtaCode", userCodeInfo.second.VTMCode.c_str());
+			}
+			cJSON_AddStringToObject(ret, "errorMsg", userCodeInfo.second.errMsg.c_str());
+		}
+
+		
+
+		
+	}
 
 	std::string CWSCodec::BufferToJson(CMessage & msg, boost::function<void(int, int)> dealErrcodeFun, socket_msgInfo& msgInfo, int replaceTransId) {
 		//replaceTransId==0,MessageType为8(Event),其他都应该有值
@@ -481,6 +524,10 @@ namespace Chromium {
 		if (msg.getLength() < 12)	//End session len = 12
 			return std::string(); // 丢弃消息
 
+		bool isSafe = false;
+		auto it = ConfigManager::getInstance().m_ws_infoArr;
+		if (it.find(msgInfo.hdlId) != it.end())
+			isSafe = it[msgInfo.hdlId].isSafe;
 
 		int srcTransId = msg.getTransID();
 		// 通用反序列化
@@ -501,45 +548,14 @@ namespace Chromium {
 #endif
             
 			ReadT(msg.getPayload(), errorCode, &rpos);
-			cJSON_AddNumberToObject(ret, "errorCode", errorCode);
-			ReadT(msg.getPayload(), errorMsg, &rpos);
-			{
-				auto userCodeInfo = getErrMsgByRemark(errorMsg.GetData());
-				if (userCodeInfo.first != 0)
-				{
-					cJSON_AddNumberToObject(ret, "userCode", userCodeInfo.first);
-					cJSON_AddStringToObject(ret, "rtaCode", userCodeInfo.second.VTMCode.c_str());
-				}
-					
-				cJSON_AddStringToObject(ret, "errorMsg", userCodeInfo.second.errMsg.c_str());
-
-				msgInfo.userCodeVal = errorCode;
-				msgInfo.userCode = userCodeInfo.second.userCode;
-				msgInfo.rtaCode = userCodeInfo.second.VTMCode;
-				msgInfo.warnMsg = userCodeInfo.second.errMsg;
-			}
+			processErrorCode(ret, msg, errorCode, msgInfo, rpos, isSafe);
 			msgInfo.sessionId = msg.getSessionID();
 			break;
 		case MessageType::SessionAck:
 			cJSON_AddNumberToObject(ret, "sessionID", msg.getSessionID());
 			cJSON_AddNumberToObject(ret, "transID", replaceTransId != 0 ? replaceTransId : msg.getTransID());
 			ReadT(msg.getPayload(), errorCode, &rpos);
-			cJSON_AddNumberToObject(ret, "errorCode", errorCode);
-			ReadT(msg.getPayload(), errorMsg, &rpos);
-			{
-				auto userCodeInfo = getErrMsgByRemark(errorMsg.GetData());
-				if (userCodeInfo.first != 0)
-				{
-					cJSON_AddNumberToObject(ret, "userCode", userCodeInfo.first);
-					cJSON_AddStringToObject(ret, "rtaCode", userCodeInfo.second.VTMCode.c_str());
-				}
-
-				cJSON_AddStringToObject(ret, "errorMsg", userCodeInfo.second.errMsg.c_str());
-				msgInfo.userCodeVal = errorCode;
-				msgInfo.userCode = userCodeInfo.second.userCode;
-				msgInfo.rtaCode = userCodeInfo.second.VTMCode;
-				msgInfo.warnMsg = userCodeInfo.second.errMsg;
-			}
+			processErrorCode(ret, msg, errorCode, msgInfo, rpos, isSafe);
 			msgInfo.inner_transID = srcTransId;
 			msgInfo.sessionId = msg.getSessionID();
 			break;
@@ -553,34 +569,36 @@ namespace Chromium {
 			cJSON_AddNumberToObject(ret, "sessionID", msg.getSessionID());
 			cJSON_AddNumberToObject(ret, "transID", replaceTransId != 0 ? replaceTransId : msg.getTransID());
 			ReadT(msg.getPayload(), errorCode, &rpos);
-			cJSON_AddNumberToObject(ret, "errorCode", errorCode);
-			ReadT(msg.getPayload(), errorMsg, &rpos);
-			{
-				auto userCodeInfo = getErrMsgByRemark(errorMsg.GetData());
-				if (userCodeInfo.first != 0)
-				{
-					cJSON_AddNumberToObject(ret, "userCode", userCodeInfo.first);
-					cJSON_AddStringToObject(ret, "rtaCode", userCodeInfo.second.VTMCode.c_str());
-				}
-				cJSON_AddStringToObject(ret, "errorMsg", userCodeInfo.second.errMsg.c_str());
-
-				msgInfo.userCodeVal = errorCode;
-				msgInfo.userCode = userCodeInfo.second.userCode;
-				msgInfo.rtaCode = userCodeInfo.second.VTMCode;
-				msgInfo.warnMsg = userCodeInfo.second.errMsg;
-			}
+			processErrorCode(ret, msg, errorCode, msgInfo, rpos, isSafe);
 			break;
 		case MessageType::GetVarAck:
 			cJSON_AddNumberToObject(ret, "sessionID", msg.getSessionID());
 			cJSON_AddNumberToObject(ret, "transID", replaceTransId != 0 ? replaceTransId : msg.getTransID());
 			ReadT(msg.getPayload(), errorCode, &rpos);
-			cJSON_AddNumberToObject(ret, "errorCode", errorCode);
-			ReadT(msg.getPayload(), errorMsg, &rpos);
-			cJSON_AddStringToObject(ret, "value", errorMsg);
+			if (isSafe)
+			{
+				if(errorCode == Error_Succeed)
+					cJSON_AddStringToObject(ret, "errorCode", SUC_RETURN_STR);
+				else
+					cJSON_AddStringToObject(ret, "errorCode", RTA_UNKNOW_ERR);
+				ReadT(msg.getPayload(), errorMsg, &rpos);
+				cJSON_AddStringToObject(ret, "value", errorMsg);
+			}
+			else
+			{
+				cJSON_AddNumberToObject(ret, "errorCode", errorCode);
+				ReadT(msg.getPayload(), errorMsg, &rpos);
+				cJSON_AddStringToObject(ret, "value", errorMsg);
+			}
+			
 			break;
 		default:
 			errorCode = Error_Unexpect;
-			cJSON_AddNumberToObject(ret, "errorCode", errorCode);
+			cJSON_DeleteItemFromObject(ret, "errorCode");
+			if (isSafe)
+				cJSON_AddStringToObject(ret, "errorCode", RTA_UNKNOW_ERR);
+			else
+				cJSON_AddNumberToObject(ret, "errorCode", errorCode);
 			cJSON_AddStringToObject(ret, "errorMsg", "未知消息类型");
 			break;
 		}
@@ -628,6 +646,7 @@ namespace Chromium {
 			if (m_AckCallbackList.end() == it)
 			{
 				// 没有对应的request,无法反序列化
+				cJSON_DeleteItemFromObject(ret, "errorCode");
 				cJSON_AddNumberToObject(ret, "errorCode", Error_Unexpect);
 				cJSON_AddStringToObject(ret, "errorMsg", "Cannot find the request for the ack!");
 				char* str = getJsonStr(ret);
@@ -636,7 +655,7 @@ namespace Chromium {
 				free(str);
 				return s;
 			}
-			auto deserializeRet = DeserializeRequestAck(msg, it, rpos, ret);
+			auto deserializeRet = DeserializeRequestAck(msg, it, rpos, ret, isSafe);
 			msgInfo.entityName = it->second.entity_name;
 			msgInfo.className = it->second.class_name;
 			msgInfo.functionName = deserializeRet.second;			
@@ -650,6 +669,7 @@ namespace Chromium {
 			if (m_EventCallbackList.end() == iter)
 			{
 				// 没有对应的register, 无法反序列化
+				cJSON_DeleteItemFromObject(ret, "errorCode");
 				cJSON_AddNumberToObject(ret, "errorCode", Error_Unexpect);
 				cJSON_AddStringToObject(ret, "errorMsg", "Cannot find the register for the ack!");
 				char* str = getJsonStr(ret);
@@ -658,7 +678,7 @@ namespace Chromium {
 				free(str);
 				return s;
 			}
-			DeserializeEvent(msg, iter->second, rpos, ret);
+			DeserializeEvent(msg, iter->second, rpos, ret, isSafe);
 		}
 
 		char* str = getJsonStr(ret);

+ 3 - 2
Module/mod_chromium/CWSCodec.h

@@ -85,6 +85,7 @@ namespace Chromium {
 		void setEntityHandler(CSmartPointer<IEntityFunction> p);
 
 		std::pair<int, CMessage*> JsonToBuffer(std::string strJson, ws_msgInfo& msgInf);
+		void processErrorCode(cJSON* ret, CMessage& msg, int errorCode, socket_msgInfo& msgInfo, int& rpos, bool isSafe);
 		std::string BufferToJson(CMessage& msg, boost::function<void(int,int)> dealErrcodeFun, socket_msgInfo &msgInfo, int replaceTransId = 0);
 
 		std::string GetEntityName(std::string strJson);
@@ -92,8 +93,8 @@ namespace Chromium {
 
 		bool checkEntityHasService(std::string entityName);
 	private:
-		std::pair<bool, std::string> DeserializeRequestAck(CMessage& msg, std::map<int, entity_def_struct>::iterator& it, int& rpos, cJSON* ret);
-		void DeserializeEvent(CMessage& msg, std::vector<CMedthodInterface>* list, int& rpos, cJSON* ret);
+		std::pair<bool, std::string> DeserializeRequestAck(CMessage& msg, std::map<int, entity_def_struct>::iterator& it, int& rpos, cJSON* ret, bool isSafe);
+		void DeserializeEvent(CMessage& msg, std::vector<CMedthodInterface>* list, int& rpos, cJSON* ret, bool isSafe);
 		void DeserializeBase(CMessage& msg, CTransStruct& ts, int& rpos, cJSON* ret, bool writeToOldParam);	//解析json->buffer
 
 		char* getJsonStr(cJSON* pJson);

+ 73 - 8
Module/mod_chromium/CWebsocketServer.cpp

@@ -500,6 +500,7 @@ namespace Chromium {
 		auto ret = this->m_serializer->JsonToBuffer(payload, cur);
 		CMessage* p = ret.second;
 		
+		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("deal_msg:%s", payload.c_str());
 		if (ret.first == MessageType::Broadcast && nullptr == p)
 		{
 			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("JsonToBuffer return NULL, perhaps an event happened");
@@ -565,9 +566,8 @@ namespace Chromium {
 				dst_js = "";
 			else
 				dst_js = m_esm->Get_getconfig_ack(staticInfo.strTerminalID.GetData()).second;
-			do_send_msg(hdl, dst_js);
-
-			
+			do_send_msg(hdl, dst_js);	
+			return;
 		}
 		else if (ret.first == MessageType::BeginSession)
 			storeEntityWithCLass(m_serializer->GetEntityName(payload), m_serializer->GetClassName(payload));
@@ -668,14 +668,14 @@ namespace Chromium {
 			auto sign = json_deal::getStringFromCjsonObj(pJson.get(), "sign");
 			if (sign.first == false)
 			{
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("sign == null");
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("sign == null, full json:%s", payload.c_str());
 				return;
 			}
 
 			auto msgData = json_deal::getStringFromCjsonObj(pJson.get(), "msg");
 			if (msgData.first == false)
 			{
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("msgData == null");
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("msgData == null, full json:%s", payload.c_str());
 				return;
 			}
 
@@ -801,11 +801,66 @@ namespace Chromium {
 		return std::make_pair(dstTransId, dstPayLoad);
 	}
 
+	std::string url_decode(const std::string& str) {
+		std::string decoded_str;
+		for (size_t i = 0; i < str.length(); ++i) {
+			if (str[i] == '%') {
+				if (i + 2 < str.length()) {
+					std::string hex_str = str.substr(i + 1, 2);
+					try {
+						int hex_val = std::stoi(hex_str, nullptr, 16);
+						decoded_str += static_cast<char>(hex_val);
+						i += 2;
+					}
+					catch (const std::invalid_argument& e) {
+						// 处理无效的编码
+						decoded_str += '%';
+					}
+					catch (const std::out_of_range& e) {
+						decoded_str += '%';
+					}
+				}
+				else {
+					decoded_str += '%';
+				}
+			}
+			else if (str[i] == '+') {
+				decoded_str += ' ';
+			}
+			else {
+				decoded_str += str[i];
+			}
+		}
+		return decoded_str;
+	}
+
+	// 解析 query string 的函数
+	std::map<std::string, std::string> parse_query_string(const std::string& query_string) {
+		std::map<std::string, std::string> params;
+		std::stringstream ss(query_string);
+		std::string pair;
+
+		while (std::getline(ss, pair, '&')) {
+			size_t equal_pos = pair.find('=');
+			if (equal_pos != std::string::npos) {
+				std::string key = pair.substr(0, equal_pos);
+				std::string value = pair.substr(equal_pos + 1);
+				params[url_decode(key)] = url_decode(value); // 解码 key 和 value
+			}
+			else if (!pair.empty()) {
+				params[url_decode(pair)] = ""; // 处理只有 key 没有 value 的情况
+			}
+		}
+		return params;
+	}
 
 	void CWebsocketServer::open_handler(websocketpp::connection_hdl hdl) {
 		// hand shake here
 		server::connection_ptr con = m_wsserver.get_con_from_hdl(hdl);
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("new ws connection to ws server : %u, isSecure:%d, url:%s", hdl.lock().get(), con->get_uri()->get_secure(), con->get_uri()->str().c_str());
+		std::string query_str = con->get_uri()->get_query();
+		auto params = parse_query_string(query_str);
+		if (params.find("name") != params.end())
+			ConfigManager::getInstance().m_ws_infoArr[(long)hdl.lock().get()] = websocket_info(params["name"], false);
 		LogManager::getInstance().logWebSocketBuild((uint64_t)hdl.lock().get(), con->get_uri()->str(), "unsafe");
 		ConfigManager::getInstance().m_connection_hdls.insert(std::pair<unsigned int, websocketpp::connection_hdl>((long)hdl.lock().get(), hdl));
 	}
@@ -813,8 +868,11 @@ namespace Chromium {
 	void CWebsocketServer::open_handler_wss(websocketpp::connection_hdl hdl) {
 		// hand shake here
 		auto con = m_server_wss.get_con_from_hdl(hdl);
+		std::string query_str = con->get_uri()->get_query();
+		auto params = parse_query_string(query_str);
+		if (params.find("name") != params.end())
+			ConfigManager::getInstance().m_ws_infoArr[(long)hdl.lock().get()] = websocket_info(params["name"], true);
 		unsigned int dstHdl = (long)hdl.lock().get();//start from 0, be different from ws
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("new wss connection to ws server : %u, isSecure:%d, url:%s", dstHdl, con->get_uri()->get_secure(), con->get_uri()->str().c_str());
 		LogManager::getInstance().logWebSocketBuild((uint64_t)hdl.lock().get(), con->get_uri()->str(), "wss");
 		ConfigManager::getInstance().m_connection_wss_hdls.insert(std::pair<unsigned int, websocketpp::connection_hdl>((long)dstHdl, hdl));
 	}
@@ -823,7 +881,10 @@ namespace Chromium {
 		// hand shake here
 		auto con = m_ws_sm2_server.get_con_from_hdl(hdl);
 		unsigned int dstHdl = (long)hdl.lock().get();//start from 0, be different from ws
-		//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("new ws by encrypt connection to ws server : %u, isSecure:%d, url:%s", dstHdl, con->get_uri()->get_secure(), con->get_uri()->str().c_str());
+		std::string query_str = con->get_uri()->get_query();
+		auto params = parse_query_string(query_str);
+		if (params.find("name") != params.end())
+			ConfigManager::getInstance().m_ws_infoArr[(long)hdl.lock().get()] = websocket_info(params["name"], true);
 		LogManager::getInstance().logWebSocketBuild((uint64_t)hdl.lock().get(), con->get_uri()->str(), "ws_sm2");
 		ConfigManager::getInstance().m_connection_ws_sm2_hdls.insert(std::pair<unsigned int, websocketpp::connection_hdl>(dstHdl, hdl));
 		ConfigManager::getInstance().m_ws_sm2_hdls_manager.insert(std::make_pair(dstHdl, new SM2_Encrypt_Manager()));
@@ -1313,6 +1374,7 @@ namespace Chromium {
 			for (auto i = sendArr.begin(); i != sendArr.end(); i++)
 			{
 				msg.setTransID(i->first);
+				cur_from_socket.hdlId = i->second;
 				std::string js = this->m_serializer->BufferToJson(msg, boost::bind(&EntitySessionManager::doWithErrorCode, m_esm, _1, _2), cur_from_socket, 0);
 				do_sendJson(js, msg.getMessageType(), i->second, id, cur_from_socket);
 				unaccurate_js = js;
@@ -1362,6 +1424,7 @@ namespace Chromium {
 			}
 			if (0 != hdlID)
 			{//hdlId为0时,说明本地发起的session
+				cur_from_socket.hdlId = hdlID;
 				std::string js = this->m_serializer->BufferToJson(msg, boost::bind(&EntitySessionManager::doWithErrorCode, m_esm, _1, _2), cur_from_socket, replaceTransId);
 				do_sendJson(js, msg.getMessageType(), hdlID, id, cur_from_socket);	//发给首记录的CMessage
 			}
@@ -1398,6 +1461,7 @@ namespace Chromium {
 		else
 		{
 			m_esm->AckProcess(&msg, hdlID); //替换真实的transId,update session map
+			cur_from_socket.hdlId = hdlID;
 			std::string js = this->m_serializer->BufferToJson(msg, boost::bind(&EntitySessionManager::doWithErrorCode, m_esm, _1, _2), cur_from_socket, replaceTransId);
 			do_sendJson(js, msg.getMessageType(), hdlID, id, cur_from_socket);
 		}
@@ -1576,6 +1640,7 @@ namespace Chromium {
 
 			// Initialize Asio
 			m_wsserver.init_asio(&m_ios);
+			m_wsserver.set_reuse_addr(true);
 
 
 			// Set the default message handler to the echo handler

+ 5 - 0
Module/mod_chromium/ReadMe.md

@@ -18,3 +18,8 @@
 
 # Info:
 * {"messageType":0,"entity":"CardReadAdapter","class":"CardReadAdapterService","sessionID":3753187,"methodID":1,"signature":-342104338,"ParentSpanId":"0","TraceId":"3741f0ce50404c37b436b0df16ab412c","SpanId":"487c70f8bc4c4177","RVCSessionID":"7555980262-1720747934874000"}
+
+# GetVar
+* {"messageType":13,"transID":310,"name":"TerminalStage"}
+# GetVarAck
+{"messageType":14,"sessionID":-1,"transID":258,"errorCode":0,"value":"M"}

+ 150 - 64
Module/mod_chromium/baseEx.cpp

@@ -292,6 +292,10 @@ DWORD SaveCefclientLog(std::string magicStr)
 
 std::vector<std::string> find_files(const std::string srcPath, const std::string fileName, bool isDir)
 {
+	std::vector<std::string> ret;
+
+	
+
 	static boost::xpressive::sregex_compiler rc;
 	if (!rc[fileName].regex_id())
 	{
@@ -300,19 +304,22 @@ std::vector<std::string> find_files(const std::string srcPath, const std::string
 		rc[fileName] = rc.compile(str);
 	}
 
-	std::vector<std::string> ret;
-
-	if (!boost::filesystem::exists(srcPath) || !boost::filesystem::is_directory(srcPath))
-		return ret;
+	
+	try {
+		if (!boost::filesystem::exists(srcPath) || !boost::filesystem::is_directory(srcPath))
+			return ret;
 
-	typedef boost::filesystem::recursive_directory_iterator rd_iterator;
-	rd_iterator end;
-	for (rd_iterator pos(srcPath); pos != end; ++pos)
-	{
-		if ((isDir ? boost::filesystem::is_directory(*pos) : !boost::filesystem::is_directory(*pos)) && boost::xpressive::regex_match(pos->path().filename().string(), rc[fileName]))
-			ret.emplace_back(pos->path().string());
+		typedef boost::filesystem::recursive_directory_iterator rd_iterator;
+		rd_iterator end;
+		for (rd_iterator pos(srcPath); pos != end; ++pos)
+		{
+			if ((isDir ? boost::filesystem::is_directory(*pos) : !boost::filesystem::is_directory(*pos)) && boost::xpressive::regex_match(pos->path().filename().string(), rc[fileName]))
+				ret.emplace_back(pos->path().string());
+		}
+	}
+	catch (const boost::filesystem::filesystem_error& e) {
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Error:  %s", e.what());
 	}
-
 	return ret;
 }
 
@@ -362,11 +369,20 @@ void InitUserCodeToMsgTip(CAutoArray<CSimpleStringA>& strErrorCodeArr, CAutoArra
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("InitUserCodeToMsgTip size:%d", g_UserCodeToMsgTip.size());
 }
 
-std::pair<unsigned long, ErrMsgStruct> getErrMsgByRemark(std::string srcMsg)
+bool isMsgTipExist()
+{
+	return g_UserCodeToMsgTip.size() > 0;
+}
+
+
+std::pair<unsigned long, ErrMsgStruct> getErrMsgByRemark(std::string srcMsg, bool isSafe)
 {
 	const std::string headerStr = "UserError=";
 	if (srcMsg.find(headerStr) != 0)
-		return std::make_pair(0, ErrMsgStruct("", srcMsg, ""));
+		if(isSafe)
+			return std::make_pair(0, ErrMsgStruct("RTA42F1", CSimpleString::Format("[RTA42F1]错误映射异常|(%s)", srcMsg.c_str()).GetData(), ""));
+		else
+			return std::make_pair(0, ErrMsgStruct("", srcMsg, ""));
 
 	unsigned long userCode = std::stoi(srcMsg.substr(headerStr.length()));
 	std::string userCodeStr = CSimpleString::Format("0x%X", userCode).GetData();
@@ -825,8 +841,8 @@ std::pair<std::string, std::string> SM2_Encrypt_Manager::EncryptMsg(std::string
 	unsigned char sign[DEFAULT_KEY_LEN] = "";
 	int sign_len = DEFAULT_KEY_LEN;
 
-	unsigned char* dstMsg = new unsigned char[msg.length() * 2];
-	int dstMsgLen = msg.length() * 2;
+	unsigned char* dstMsg = new unsigned char[msg.length() * 2 + 97];
+	int dstMsgLen = msg.length() * 2 + 97;
 	std::shared_ptr<void> msgClean((void*)0, [&](void*) {
 		if (dstMsg)
 		{
@@ -838,13 +854,13 @@ std::pair<std::string, std::string> SM2_Encrypt_Manager::EncryptMsg(std::string
 
 	if (!SM2SignWithSM3(m_private_key_buf, m_private_key_buf_len, (unsigned char*)msg.c_str(), msg.length(), sign, &sign_len))
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SM2SignWithSM3::err, can not sign msg");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("SM2SignWithSM3::err, can not sign msg, sign_len:%d", sign_len);
 		return std::make_pair("", "");
 	}
 
 	if(!EncWithSM2PubKey((unsigned char*)msg.c_str(), msg.length(), dstMsg, &dstMsgLen, m_opposite_public_key_buf, m_opposite_public_key_buf_len))
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("EncWithSM2PubKey::err, can not encrypt msg");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("EncWithSM2PubKey::err, can not encrypt msg, m_opposite_public_key_buf_len: %d", m_opposite_public_key_buf_len);
 		return std::make_pair("", "");
 	}
 	return std::make_pair(binToHex(sign, sign_len), binToHex(dstMsg, dstMsgLen));
@@ -953,23 +969,26 @@ LogManager& LogManager::getInstance() {
 }
 
 void LogManager::logWebSocketBuild(int64_t hdl, const std::string& url, const std::string& isSecurity) {
+	const char* type = "ws_build";
 	Json::Value log;
-	log["hdl"] = hdl;
-	log["78173721_logType"] = "ws_build";
+	log["hdl"] = Json::Int64(hdl);
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["url"] = url;
 	detail["isSecurity"] = isSecurity;
-
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
-void LogManager::writeLog(const Json::Value& log) {
+void LogManager::writeLog(LOG_LEVEL_E level, const Json::Value& log) {
 	Json::FastWriter writer;
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(writer.write(log).c_str());
+	DbgWithLink(level, LOG_TYPE_SYSTEM)(writer.write(log).c_str());
 }
 
 std::string LogManager::getCurrentTimestamp() {
@@ -1014,9 +1033,11 @@ void LogManager::logWebSocketBeginSession(int64_t hdl,
 	const std::string& payload,
 	int retDetail,
 	const std::string& reason) {
+	const char* type = "ws_beginSession";
 	Json::Value log;
-	log["hdl"] = hdl;
-	log["78173721_logType"] = "ws_beginSession";
+	log["hdl"] = Json::Int64(hdl);
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["web_transID"] = web_transID;
@@ -1033,18 +1054,40 @@ void LogManager::logWebSocketBeginSession(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
 void LogManager::logWebSocketClose(int64_t hdl) {
+	const char* type = "ws_close";
 	Json::Value log;
-	log["hdl"] = hdl;
-	log["78173721_logType"] = "ws_close";
+	log["hdl"] = Json::Int64(hdl);
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
-	writeLog(log);
+
+	Json::Value root(Json::objectValue);
+
+	if (m_logTotal.find(hdl) != m_logTotal.end())
+	{
+		// 遍历 map
+		for (const auto& pair : m_logTotal[hdl]) {
+			std::string key = pair.first;
+			const LogInfo& logInfo = pair.second;
+
+			root[key] = logInfo.num;
+		}
+		log["dealed"] = root;
+		m_logTotal.erase(hdl);
+	}
+	
+	writeLog(LOG_LEVEL_INFO, log);
 }
 
 void LogManager::logWebSocketInfo(int64_t hdl,
@@ -1057,9 +1100,11 @@ void LogManager::logWebSocketInfo(int64_t hdl,
 	int retDetail,
 	const std::string& reason,
 	const std::string& payload) {
+	const char* type = "ws_info";
 	Json::Value log;
 	log["hdl"] = Json::Int64(hdl);
-	log["78173721_logType"] = "ws_info";
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["web_transID"] = Json::Int64(web_transID);
@@ -1076,9 +1121,11 @@ void LogManager::logWebSocketInfo(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
 void LogManager::logWebSocketRegister(int64_t hdl,
@@ -1091,9 +1138,11 @@ void LogManager::logWebSocketRegister(int64_t hdl,
 	const std::string& payload,
 	int retDetail,
 	const std::string& reason) {
+	const char* type = "ws_register";
 	Json::Value log;
 	log["hdl"] = Json::Int64(hdl);
-	log["78173721_logType"] = "ws_register";
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["web_transID"] = Json::Int64(web_transID);
@@ -1110,9 +1159,11 @@ void LogManager::logWebSocketRegister(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
 void LogManager::logWebSocketRequest(int64_t hdl,
@@ -1126,9 +1177,11 @@ void LogManager::logWebSocketRequest(int64_t hdl,
 	const std::string& payload,
 	int retDetail,
 	const std::string& reason) {
+	const char* type = "ws_request";
 	Json::Value log;
 	log["hdl"] = Json::Int64(hdl);
-	log["78173721_logType"] = "ws_request";
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["web_transID"] = Json::Int64(web_transID);
@@ -1146,9 +1199,11 @@ void LogManager::logWebSocketRequest(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
 void LogManager::logWebSocketSetVar(int64_t hdl,
@@ -1161,9 +1216,11 @@ void LogManager::logWebSocketSetVar(int64_t hdl,
 	const std::string& payload,
 	int retDetail,
 	const std::string& reason) {
+	const char* type = "ws_setvar";
 	Json::Value log;
 	log["hdl"] = Json::Int64(hdl);
-	log["78173721_logType"] = "ws_setvar";
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["web_transID"] = Json::Int64(web_transID);
@@ -1180,9 +1237,11 @@ void LogManager::logWebSocketSetVar(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
 void LogManager::logWebSocketGetVar(int64_t hdl,
@@ -1194,9 +1253,11 @@ void LogManager::logWebSocketGetVar(int64_t hdl,
 	const std::string& payload,
 	int retDetail,
 	const std::string& reason) {
+	const char* type = "ws_getvar";
 	Json::Value log;
 	log["hdl"] = Json::Int64(hdl);
-	log["78173721_logType"] = "ws_getvar";
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["web_transID"] = Json::Int64(web_transID);
@@ -1212,10 +1273,11 @@ void LogManager::logWebSocketGetVar(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
-
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
 void LogManager::logWebSocketBroadcast(int64_t hdl,
@@ -1225,9 +1287,11 @@ void LogManager::logWebSocketBroadcast(int64_t hdl,
 	const std::string& payload,
 	int retDetail,
 	const std::string& reason) {
+	const char* type = "ws_broadcast";
 	Json::Value log;
 	log["hdl"] = Json::Int64(hdl);
-	log["78173721_logType"] = "ws_broadcast";
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["entity"] = entity;
@@ -1241,10 +1305,11 @@ void LogManager::logWebSocketBroadcast(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
-
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
 void LogManager::logVtmEndSession(int64_t hdl,
@@ -1255,9 +1320,11 @@ void LogManager::logVtmEndSession(int64_t hdl,
 	const std::string& payload,
 	int retDetail,
 	const std::string& reason) {
+	const char* type = "vtm_endsession";
 	Json::Value log;
 	log["hdl"] = Json::Int64(hdl);
-	log["78173721_logType"] = "vtm_endsession";
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["entity"] = entity;
@@ -1272,10 +1339,11 @@ void LogManager::logVtmEndSession(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
-
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
 void LogManager::logVtmRequestAck(int64_t hdl,
@@ -1290,9 +1358,11 @@ void LogManager::logVtmRequestAck(int64_t hdl,
 	const std::string& srcByte,
 	int retDetail,
 	const std::string& reason) {
+	const char* type = "vtm_requestAck";
 	Json::Value log;
 	log["hdl"] = Json::Int64(hdl);
-	log["78173721_logType"] = "vtm_requestAck";
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["web_transID"] = Json::Int64(web_transID);
@@ -1311,10 +1381,11 @@ void LogManager::logVtmRequestAck(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
-
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
 void LogManager::logVtmEvent(int64_t hdl,
@@ -1328,9 +1399,11 @@ void LogManager::logVtmEvent(int64_t hdl,
 	const std::string& srcByte,
 	int retDetail,
 	const std::string& reason) {
+	const char* type = "vtm_event";
 	Json::Value log;
 	log["hdl"] = Json::Int64(hdl);
-	log["78173721_logType"] = "vtm_event";
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["inner_transID"] = Json::Int64(inner_transID);
@@ -1357,10 +1430,11 @@ void LogManager::logVtmEvent(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
-
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_INFO, log);
 }
 
 void LogManager::logVtmSessionAck(int64_t hdl,
@@ -1374,9 +1448,11 @@ void LogManager::logVtmSessionAck(int64_t hdl,
 	const std::string& srcByte,
 	int retDetail,
 	const std::string& reason) {
+	const char* type = "vtm_sessionAck";
 	Json::Value log;
 	log["hdl"] = Json::Int64(hdl);
-	log["78173721_logType"] = "vtm_sessionAck";
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["web_transID"] = Json::Int64(web_transID);
@@ -1394,10 +1470,11 @@ void LogManager::logVtmSessionAck(int64_t hdl,
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
-
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
 void LogManager::logWsLogEvent(
@@ -1411,9 +1488,11 @@ void LogManager::logWsLogEvent(
 	int retDetail,
 	const std::string& reason
 ) {
+	const char* type = "ws_logEvent";
 	Json::Value log;
 	log["hdl"] = Json::Int64(hdl);
-	log["78173721_logType"] = "ws_logEvent";
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["securityLevel"] = securityLevel;
@@ -1430,9 +1509,11 @@ void LogManager::logWsLogEvent(
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
 void LogManager::logWsLogWarn(
@@ -1446,9 +1527,11 @@ void LogManager::logWsLogWarn(
 	int retDetail,
 	const std::string& reason
 ) {
+	const char* type = "ws_logWarn";
 	Json::Value log;
 	log["hdl"] = Json::Int64(hdl);
-	log["78173721_logType"] = "ws_logWarn";
+	log["78173721_logType"] = type;
+	m_logTotal[hdl][type].num += 1;
 
 	Json::Value detail;
 	detail["securityLevel"] = securityLevel;
@@ -1466,9 +1549,11 @@ void LogManager::logWsLogWarn(
 
 	log["detail"] = detail;
 	log["timestamp"] = getCurrentTimestamp();
+	if (ConfigManager::getInstance().m_ws_infoArr.find(hdl) != ConfigManager::getInstance().m_ws_infoArr.end())//add websocket label
+		log["name"] = ConfigManager::getInstance().m_ws_infoArr[hdl].name;
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_DEBUG, log);
 }
 
 void LogManager::logEntityOnLog(
@@ -1496,7 +1581,7 @@ void LogManager::logEntityOnLog(
 	log["timestamp"] = getCurrentTimestamp();
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_INFO, log);
 }
 
 void LogManager::logEntityBegin(int no_startup) {
@@ -1510,7 +1595,7 @@ void LogManager::logEntityBegin(int no_startup) {
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 	log["timestamp"] = getCurrentTimestamp();
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_INFO, log);
 }
 
 void LogManager::logEntityOpenPage(
@@ -1536,7 +1621,7 @@ void LogManager::logEntityOpenPage(
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 	log["timestamp"] = getCurrentTimestamp();
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_INFO, log);
 }
 
 void LogManager::logEntityStageChange(
@@ -1560,7 +1645,8 @@ void LogManager::logEntityStageChange(
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 	log["timestamp"] = getCurrentTimestamp();
 
-	writeLog(log);
+
+	writeLog(LOG_LEVEL_INFO, log);
 }
 
 void LogManager::logEntityStatus(
@@ -1586,5 +1672,5 @@ void LogManager::logEntityStatus(
 	log["threadId"] = Json::Int64(GetCurrentThreadId());
 	log["timestamp"] = getCurrentTimestamp();
 
-	writeLog(log);
+	writeLog(LOG_LEVEL_INFO, log);
 }

+ 56 - 3
Module/mod_chromium/baseEx.h

@@ -15,6 +15,10 @@
 
 #define HEADER_TERMINALNO_NAME "vtm-terminalno"
 
+#define SUC_RETURN_STR "SUC0000"
+
+#define RTA_UNKNOW_ERR "RTA42F2"
+
 
 std::vector<std::string> find_files(const std::string srcPath, const std::string fileName, bool isDir = false);
 std::string generateTimeStr(bool isSimple = false);
@@ -27,6 +31,8 @@ bool deleteDir_byFileSystem(const std::string srcPath);
 void InitTranslateFile(std::string srcFile);
 std::pair<unsigned long, std::string> splitStrToUserCodeAndErrMsg(std::string srcMsg);
 void InitUserCodeToMsgTip(CAutoArray<CSimpleStringA>& strErrorCodeArr, CAutoArray<CSimpleStringA>& strDescriptionArr, CAutoArray<CSimpleStringA>& strRemarkArr);
+bool isMsgTipExist();
+
 
 struct ErrMsgStruct {
 	std::string VTMCode;
@@ -47,7 +53,7 @@ struct ErrMsgStruct {
 };
 
 
-std::pair<unsigned long, ErrMsgStruct> getErrMsgByRemark(std::string srcMsg);
+std::pair<unsigned long, ErrMsgStruct> getErrMsgByRemark(std::string srcMsg, bool isSafe);
 
 std::string UtfToGbk(const char* utf8);
 std::string ConvertGBKToUtf8(std::string& strGBK);
@@ -155,6 +161,18 @@ struct SYS_EVENT_PARAM
 	SYS_EVENT_PARAM& operator=(SYS_EVENT_PARAM&&) = delete;
 };
 
+struct websocket_info
+{
+	std::string name;
+	bool isSafe;
+
+	// 默认构造函数:初始化为默认值
+	websocket_info() : name(""), isSafe(false) {}
+
+	// 带参数的构造函数:根据传入的参数初始化
+	websocket_info(const std::string& n, bool s) : name(n), isSafe(s) {}
+};
+
 class ConfigManager {
 public:
     static ConfigManager& getInstance();
@@ -224,6 +242,7 @@ public:
 //params for CWebsocketServer
 public:
 	std::map<unsigned int, websocketpp::connection_hdl> m_connection_hdls;
+	std::map<unsigned int, websocket_info> m_ws_infoArr;
 	std::map<unsigned int, websocketpp::connection_hdl> m_connection_ws_sm2_hdls;
 	std::map<unsigned int, websocketpp::connection_hdl> m_connection_wss_hdls;
 	std::map<unsigned int, std::shared_ptr<SM2_Encrypt_Manager>> m_ws_sm2_hdls_manager;
@@ -238,6 +257,36 @@ private:
 };
 
 
+/*
+log count reference
+
+2025-01-23 09:06:24   ~   2025-01-23 09:36:24
+全量日志759680
+有效日志706781
+vtm_event 140429
+ws_beginSession 13971
+ws_info 35136
+ws_request 178967
+vtm_requestAck 178325
+ws_build  59155
+ws_close 58183
+ws_register 5307
+ws_setvar 8936
+ws_getvar 3982
+vtm_sessionAck 6124
+ws_broadcast 13710
+
+计算所有已知日志类型的总和:
+
+140429 + 13971 + 35136 + 178967 + 178325 + 59155 + 58183 + 5307 + 8936 + 3982 + 6124 + 13710 = 692225
+
+从有效日志总数中减去上述总和,得到“其他”的数量:
+
+706781 - 692225 = 14556
+
+因此,“其他”日志的数量是 14556
+*/
+
 class LogManager {
 public:
 	static LogManager& getInstance();
@@ -513,8 +562,12 @@ private:
 	LogManager() = default;
 	LogManager(const LogManager&) = delete;
 	LogManager& operator=(const LogManager&) = delete;
-
-	void writeLog(const Json::Value& log);
+	struct LogInfo {
+		int num;
+		LogInfo() : num(0) {}
+	};
+	std::map<int, std::map<std::string, LogInfo>> m_logTotal;
+	void writeLog(LOG_LEVEL_E level, const Json::Value& log);
 	std::string getCurrentTimestamp();
 };
 

+ 38 - 12
Module/mod_chromium/mod_chromium.cpp

@@ -353,6 +353,7 @@ namespace Chromium {
 					auto webMaskKey = CSimpleString::Format("WebMask_%s", ConfigManager::getInstance().getSysInfo().strMachineType.GetData());
 					CSimpleString webMaskStr;
 					bool no_startup = false;
+					ConfigManager::getInstance().m_withBrowser = false;
 					if (Error_Succeed == spConfig->ReadConfigValue("Chromium", webMaskKey.GetData(), webMaskStr))
 					{
 						auto maskArr = webMaskStr.Split('|');
@@ -475,11 +476,27 @@ namespace Chromium {
 				}
 #endif
 		}
+
+
 		if (ConfigManager::getInstance().m_withSpecialTest)
-		{
-			CSimpleString strPath;
-			GetFunction()->GetPath("Downloads", strPath);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("Downloads path %s, ", strPath.GetData());
+		{			
+			auto repeat_dirtyLogs_Fun = [] {
+				int count = 0;
+				while (true)
+				{
+					std::string dirtyLog = std::to_string(count++) + std::string(100 + count, 0xcd);
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("dirty_logs")(dirtyLog.c_str());
+					//std::this_thread::sleep_for(std::chrono::seconds(3));
+					std::this_thread::sleep_for(std::chrono::milliseconds(100));
+				}
+				
+			};
+#ifdef DEVOPS_ON_ST 
+			std::thread(repeat_dirtyLogs_Fun).detach();
+#elif defined(DEVOPS_ON_UAT)/*DevOps流水线编译,UAT环境*/
+			std::thread(repeat_dirtyLogs_Fun).detach();
+#endif // DEVOPS
+			
 		}
 		LogManager::getInstance().logEntityStageChange("OnPreStart_Init", 0, "end");
 	}
@@ -983,6 +1000,21 @@ namespace Chromium {
 			/** 该事件有变化才会触发错误页 [Gifur@2022324]*/
 			else if (0 == CSimpleStringA("TerminalStage").Compare(curEvent.key.c_str(), true))
 			{
+				if (!isMsgTipExist())
+				{
+					CAutoArray<CSimpleStringA> strErrorCodeArr;
+					CAutoArray<CSimpleStringA> strDescriptionArr;
+					CAutoArray<CSimpleStringA> strRemarkArr;
+					auto ret = GetFunction()->GetPrivilegeFunction()->GetVTMErrMsgArr(strErrorCodeArr, strDescriptionArr, strRemarkArr);
+					if (Error_Succeed == ret && strErrorCodeArr.GetCount() > 0)
+					{
+						InitUserCodeToMsgTip(strErrorCodeArr, strDescriptionArr, strRemarkArr);
+						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("update msg tips over the change of TerminalStage");
+					}
+						
+				}
+
+
 				if (0 == CSimpleStringA("A").Compare(curEvent.value.c_str(), true))
 				{
 					try
@@ -1197,13 +1229,6 @@ namespace Chromium {
 		case Event_VtmLoader_GetVTMERRMSG_Suc:
 			LogManager::getInstance().logEntityOnLog(NULL == pszEntityName ? "" : pszEntityName, dwUserCode, "Event_VtmLoader_GetVTMERRMSG_Suc",
 				0, "none");
-			/*
-				CSimpleString translatePath;
-				GetFunction()->GetPath("Cfg", translatePath);
-				translatePath.Append(CSimpleStringA(SPLIT_SLASH_STR) + "UserCodeToMsgTip.ini");
-
-				InitTranslateFile(translatePath.GetData());
-			*/
 			if (!GetFunction()->HasPrivilege())
 			{
 				LogManager::getInstance().logEntityOnLog(NULL == pszEntityName ? "" : pszEntityName, dwUserCode, "Event_VtmLoader_GetVTMERRMSG_Suc",
@@ -1228,7 +1253,8 @@ namespace Chromium {
 				if (ConfigManager::getInstance().m_withSpecialTest)
 				{
 					CSimpleStringA strDescription, strVTMCode;
-					GetFunction()->GetVTMErrMsg(123456, strDescription, strVTMCode);
+					GetFunction()->GetVTMErrMsg(0x2030020e, strDescription, strVTMCode);
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("GetVTMErrMsg, %s:%s", strDescription.GetData(), strVTMCode.GetData());
 				}
 			}
 			break;

+ 4 - 18
Module/mod_counterconnector/ConnectorFSM.cpp

@@ -179,7 +179,7 @@ ErrorCodeEnum ACMCallFSM::OnInit()
 		return Error;
 	}
 
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("m_strDefaultServer %s.", m_strDefaultServer.GetData());
+	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("m_strDefaultServer %s.", m_strDefaultServer.GetData());
 	if(m_strDefaultServer.GetLength() > 0){
 		iCount = ParseDefaultServer(m_strDefaultServer.GetData());
 	}
@@ -498,7 +498,7 @@ int ACMCallFSM::ParseDefaultServer(const char* strServer)
 	int index = 0;
 	while(index < icount && result[index]){
 		m_voipserver.push_back(result[index]);
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("result[%d] = [%s].", index, result[index]);
+		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("result[%d] = [%s].", index, result[index]);
 		index++;
 	}
 
@@ -669,7 +669,7 @@ ErrorCodeEnum ACMCallFSM::SetCallState(int state)
 		strCallState = sts[state];
 	}
 
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("set call state to [%s].", strCallState);
+	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("set call state to [%s].", strCallState);
 	return GetEntityBase()->GetFunction()->SetSysVar("CallState", strCallState);
 }
 
@@ -757,8 +757,6 @@ unsigned int ACMCallFSM::s0_on_event(FSMEvent* event)
 #ifdef RVC_OS_WIN
 		StopVideo();
 		SetCallingType(NORMAL_CALLTYPE);
-#else
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("%s:%d, stop show local and remote video.", __FUNCTION__, __LINE__);
 #endif
 	}
 	return 0;
@@ -778,7 +776,6 @@ unsigned int ACMCallFSM::s7_on_event(FSMEvent* event)
 {
 	if (event->iEvt == USER_EVT_STOPLOCALVIDEO) 
 	{
-		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("stop show local video");
 		StopVideo();
 	}
 	else if (event->iEvt == USER_EVT_SIPPHONE_IDEL)
@@ -793,10 +790,7 @@ unsigned int ACMCallFSM::s7_on_event(FSMEvent* event)
 void ACMCallFSM::s8_on_entry() 
 {
 	//get call route,采用直接总行方式
-	if (0 == GetCallRouteList()) {
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("get call route list success.");
-	}
-	else {
+	if (0 != GetCallRouteList()) {
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get call route list failed.");
 	}
 
@@ -886,7 +880,6 @@ void ACMCallFSM::s11_on_entry()
 		get_format_uuid(callid_str, 64);
 
 		if (node != NULL){
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Begin Head Office Make Call!");
 			m_LastSipError = MakeCall(node->strcallurl, CSimpleStringA::Format("sip:%s@%s;transport=UDP", node->strnewcallernum, ipstr), 
 					callid_str, m_CallingParam);
 			m_iChanProxyPort[0] = node->uassistport;
@@ -1013,7 +1006,6 @@ unsigned int ACMCallFSM::s11_on_event(FSMEvent* event)
 		else{
 			LogWarn(Severity_Low, Error_Unexpect, LOG_WARN_COUNTERCONNECT_SIPCONNECT_TIMEOUT,"sipphone connect timeout, error server");
 		}
-		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("sip call timeout,release call");
 		m_nSipErrorNum++;
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402304C2").setResultCode("RTA3435")("sip connect failed for timeout");
 	}
@@ -1315,13 +1307,11 @@ unsigned int ACMCallFSM::s21_on_event(FSMEvent* event)
 	{
 		if(event->param1 == 21)
 		{
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("hangupcall timeout,release call");
 			ScheduleTimer(210,RELEASEING_SIP_TIMEOUT);
 			ReleaseCall(0);
 		}
 		else if (event->param1 == 210)
 		{
-			DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("release call timeout,restart sipphone");
 			PostEventFIFO(new FSMEvent(USER_EVT_JMP_FAIL));
 			//RealSipErrorCheck();
 			LogEvent(Severity_Middle, EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone");
@@ -1607,12 +1597,10 @@ unsigned int ACMCallFSM::s52_on_event(FSMEvent* event)
 		if (event->param1 == 52)
 		{
 			ScheduleTimer(520,RELEASEING_SIP_TIMEOUT);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("sip finished timeout,release call");
 			ReleaseCall(0);
 		}
 		else if (event->param1 == 520)
 		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("release call timeout,restart sipphone");
 			PostEventFIFO(new FSMEvent(USER_EVT_JMP_FAIL));
 			LogEvent(Severity_Middle, EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
 			LogWarn(Severity_Middle, Error_Unexpect, LOG_WARN_COUNTERCONNECT_RESTART_SIPPHONE,"restart sipphone ");
@@ -1747,12 +1735,10 @@ unsigned int ACMCallFSM::s62_on_event(FSMEvent* event)
 		if (event->param1 == 62)
 		{
 			ScheduleTimer(620,RELEASEING_SIP_TIMEOUT);
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("sip hangup timeout,release call");
 			ReleaseCall(0);
 		}
 		else if (event->param1 == 620)
 		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("release call timeout,restart sipphone");
 			PostEventFIFO(new FSMEvent(USER_EVT_JMP_FAIL));
 			LogEvent(Severity_Middle, EVENT_MOD_RELEASESIP_TIMEOUT,"restart sipphone ");
 			LogWarn(Severity_Middle, Error_Unexpect, LOG_WARN_COUNTERCONNECT_RESTART_SIPPHONE,"restart sipphone ");

+ 14 - 0
Module/mod_counterconnector/ConnectorFSM.h

@@ -463,6 +463,20 @@ public:
 		return (*m_pPhoneClient)(EntityResource::getLink().upgradeLink())->SetCallingParam(info);
 	}
 
+	bool IsCameraRenderState()
+	{
+		bool brender = false;
+		if (!m_pPhoneClient) {
+			return brender;
+		}
+		PhoneService_IsCameraRender_Req req;
+		PhoneService_IsCameraRender_Ans ans;
+		if (Error_Succeed == (*m_pPhoneClient)(EntityResource::getLink().upgradeLink())->IsCameraRender(req, ans, 5000)) {
+			brender = ans.result;
+		}
+		return brender;
+	}
+
 private:
 
 	int TranslateState(int innerState);

+ 14 - 5
Module/mod_counterconnector/mod_counterconnector.cpp

@@ -334,12 +334,19 @@ void CCounterConnectorEntity ::OnLog(const CAutoArray<CUUID> &SubIDs, const CUUI
 		break;
 	case EVENT_MOD_CONNECT_PICKUP_CALL: // 提机呼叫
 		{
-			if (m_bHasLaunched){
+			bool brenderstate = m_fsm.IsCameraRenderState();
+			if (m_bHasLaunched && !brenderstate){
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("提机呼叫");
 				HandlePickUpCallEvent();
 			}
 			else{
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("UI has not launched, ignore it.");
+				if (!m_bHasLaunched) {
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("UI has not launched, ignore it.");
+				}
+
+				if (brenderstate) {
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Is camera render now, ignore it.");
+				}
 			}
 		}
 		break;
@@ -797,7 +804,9 @@ void CCounterConnectorEntity ::SendCurAudioDevice()
 	CSmartPointer<IEntityFunction> Func = GetFunction();
 	CSimpleStringA strValue("");
 	Func->GetSysVar(SYSVAR_SOUNDCARDSTATE, strValue);
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Sound Card State is %s.", strValue.GetData());
+	if ('N' != strValue[0]) {
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Sound Card State %s.", strValue.GetData());
+	}
 
 	if ('H' == strValue[0]) {
 		nDevice = 1;
@@ -815,7 +824,7 @@ void CCounterConnectorEntity ::SendCurAudioDevice()
 	buf & nDevice;
 	Info.data = buf.ToBlob();
 	m_pCounterConnectorChannel->Send(Info);
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("send cur Audio device = %d",nDevice);
+	//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("send cur Audio device = %d",nDevice);
 }
 
 
@@ -842,7 +851,7 @@ DeviceTypeEnum CCounterConnectorEntity::RvcGetDeviceType()
 	}
 
 	if (eType >= 0 && eType < sizeof(Device_Type_Table) / sizeof(char*)) {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("device type is %s.", Device_Type_Table[eType]);
+		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("device type is %s.", Device_Type_Table[eType]);
 	}
 
 	return eType;

+ 8 - 8
Module/mod_countercontext/mod_countercontext.cpp

@@ -25,7 +25,7 @@ public:
 class CCounterContextEntity : public CEntityBase,public ILogListener, public ITimerListener
 {
 public:
-	CCounterContextEntity() : m_pChannelClient(NULL), m_bConnectAssist(FALSE) {}
+	CCounterContextEntity() : m_pChannelClient(NULL), m_bConnectAssist(false) {}
 	virtual ~CCounterContextEntity() {}
 	virtual const char *GetEntityName() const { return "CounterContext"; }
 
@@ -50,11 +50,11 @@ public:
 			if (m_pChannelClient != NULL){
 				m_pChannelClient->GetFunction()->CloseSession();
 				m_pChannelClient = NULL;
-				m_bConnectAssist = FALSE;
+				m_bConnectAssist = false;
 			}
 
 			if (Error_Succeed == ConnectAssistChannel()) {
-				m_bConnectAssist = TRUE;
+				m_bConnectAssist = true;
 			}
 			else {
 				GetFunction()->SetTimer(1, this, 3150);
@@ -79,7 +79,7 @@ public:
 	{
 		m_pChannelClient = new ChannelClient(this);
 		if (Error_Succeed == ConnectAssistChannel()) {
-			m_bConnectAssist = TRUE;
+			m_bConnectAssist = true;
 		}
 		else {
 			GetFunction()->SetTimer(1, this, 3150);
@@ -171,13 +171,13 @@ public:
 	void OnTimeout(DWORD dwTimerID)
 	{
 		if (1 == dwTimerID) {
-			if (FALSE == m_bConnectAssist) {
+			if (!m_bConnectAssist) {
 				if (Error_Succeed == ConnectAssistChannel()) {
-					m_bConnectAssist = TRUE;
+					m_bConnectAssist = true;
 				}
 			}
 
-			if (TRUE == m_bConnectAssist) {
+			if (m_bConnectAssist) {
 				GetFunction()->KillTimer(1);
 			}
 		}
@@ -185,7 +185,7 @@ public:
 private:
 	ChannelClient *m_pChannelClient;
 	CAutoArray<CUUID> m_arrListener;
-	BOOL m_bConnectAssist;
+	bool m_bConnectAssist;
 };
 
 ChannelClient::ChannelClient( CCounterContextEntity *pEntity ) : ChannelService_ClientBase(pEntity)

+ 1 - 1
Module/mod_customeraware/CustomerHandleFSM.cpp

@@ -124,7 +124,7 @@ ErrorCodeEnum CCustomerHandleFSM::OnInit()
 {
 	AddStateHooker(this);
 	nOldstate = 0;
-	m_bIsSalesRecord = FALSE;
+	m_bIsSalesRecord = false;
 	return Error_Succeed;
 }
 

+ 5 - 137
Module/mod_evtconverter/evtengine.cpp

@@ -508,9 +508,6 @@ static void get_matched_slot_list(evt_engine_t *engine, const CAutoArray<CUUID>
 		filter = filter_find(engine->filter_ht, &k);
 		if (filter) {
 			evt_slot_t *slot = filter->owner;
-			if (nIslog){
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("filter found, usr_code:%d, listen_id:%d", usr_code, k.listen_id);
-			}
 			if (!slot->use_entry.next) {
 				list_add_tail(&slot->use_entry, use_list);
 				slot->use_list_ptr = use_list;
@@ -544,16 +541,14 @@ static void get_reset_slot_list(evt_engine_t *engine, struct list_head *matched_
 				} 
 				else {
 					if (t->use_list_ptr == matched_list) {					
-						if (nIslog){
-							DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("warning: slot %s already set, cannot reset from slot %s ", t->key.code, pos->key.code);
-						}
+
 					} 
 					else if (t->use_list_ptr == reset_list) {
 						// already triggers by others
 					} 
 					else {						
 						if (nIslog){
-							DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("bug detected! %s%d", __FUNCTION__, __LINE__);
+							DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("bug detected!");
 						}
 					}
 				}
@@ -702,9 +697,6 @@ static int process_matched_slot_list(evt_engine_t *engine, struct list_head *slo
 static int process_reset_slot(evt_engine_t *engine, evt_slot_t *slot, int *removed)
 {
 	int rc = 0;
-	if (nIslog){
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("process reset slot: %s, current signal:%d", slot->key.code, slot->signal_state);
-	}
 
 	if (slot->signal_state) {
 		slot->signal_state = !slot->signal_state;
@@ -774,7 +766,7 @@ static int generate_trigger_log(evt_engine_t *engine, evt_trigger_t *trigger)
 		break;
 	default:
 		if (nIslog){
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("bug detected! %s %d", __FUNCTION__, __LINE__);
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("bug detected!");
 		}
 
 		assert(0);
@@ -789,17 +781,9 @@ static int process_trigger(evt_engine_t *engine, evt_trigger_t *trigger)
 	int rc = 0;
 	int ok = 0;
 
-	if (nIslog){
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("process_trigger %s begin!", trigger->msg);
-	}
-
 	{
 		evt_slot_rule_t *pos;
 		list_for_each_entry(pos, &trigger->slot_rule_list, evt_slot_rule_t, entry) {
-			if (nIslog){
-				DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("slot rule, code:%s positive:%d signal:%d", pos->code, pos->positive, pos->ref_slot->signal_state);
-			}
-
 			if (pos->positive ^ pos->ref_slot->signal_state)
 				goto on_done;
 		}
@@ -817,18 +801,9 @@ static int process_trigger(evt_engine_t *engine, evt_trigger_t *trigger)
 				goto on_done;
 			}
 
-			if (nIslog){
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("sysvar key=%s, value=%s", pos->ref_sysvar->key.code, strState.GetData());
-				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("sysvar rule, %s, positive:%d", pos->ref_sysvar->key.code, pos->positive);
-			}
-
 			if (pos->positive) {
 				for (i = 0; i < pos->arr_state->nelts; ++i) {
 					char *state = ARRAY_IDX(pos->arr_state, i, char*);
-					if (nIslog){
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("sys var state:%s", state);
-					}	
-
 					if (strcmp(strState, state) == 0) {
 						break;
 					}
@@ -840,10 +815,6 @@ static int process_trigger(evt_engine_t *engine, evt_trigger_t *trigger)
 			else {
 				for (i = 0; i < pos->arr_state->nelts; ++i) {
 					char *state = ARRAY_IDX(pos->arr_state, i, char*);		
-					if (nIslog){
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("sys var state:%s", state);
-					}
-
 					if (strcmp(strState, state) == 0) {
 						goto on_done;
 					}
@@ -880,9 +851,6 @@ on_done:
 		}
 	}
 
-	if (nIslog){
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("process_trigger end (ok=%d)!", ok);
-	}
 	return rc;
 }
 
@@ -951,9 +919,6 @@ static int process_log(evt_engine_t *engine, const CAutoArray<CUUID> &SubIDs, in
 	get_matched_slot_list(engine, SubIDs,log_type, ent_id, severity, sys_code, usr_code, message,  &matched_list);
 
 	if (list_empty(&matched_list)) {
-		if (nIslog){
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("warning: no matched slot! sys_code = %d, usr_code = %d", sys_code, usr_code);
-		}
 		return 0;
 	}
 
@@ -1032,19 +997,13 @@ static int build_ref(evt_engine_t *engine)
 {
 	int i;
 	evt_trigger_t *trigger;
-	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("after load engine->slot_ht->size = %d.", engine->slot_ht->size);
 	for (i = 0; i < engine->slot_ht->size; ++i) {
 		evt_slot_t *tpos;
 		struct hlist_node *pos;
 		hlist_for_each_entry(tpos, pos, &engine->slot_ht->buckets[i], evt_slot_t, hentry) {
-			//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(
-			//	"tpos->key.code = %s, tpos->key.index_hash_code = %d, tpos->signal_state = %d.",
-			//	tpos->key.code, tpos->key.index_hash_code, tpos->signal_state);
-
 			int j;
 			for (j = 0; j < tpos->arr_reset->nelts; ++j) {
 				char *code = ARRAY_IDX(tpos->arr_reset, j, char*);
-				//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("code = %s.", code);
 				evt_slot_key_t key;
 				key.code = code;
 				key.index_hash_code = hash32_str(code, HASH32_STR_INIT);
@@ -1052,7 +1011,6 @@ static int build_ref(evt_engine_t *engine)
 				if (ref_slot) {
 					ARRAY_PUSH(ref_slot->arr_rref_reset, evt_slot_t*) = tpos;
 					ARRAY_PUSH(tpos->arr_ref_reset, evt_slot_t*) = ref_slot;
-					//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("build reset ref for slot %s->%s", tpos->key.code, code);
 				} 
 				else {
 					if (nIslog){
@@ -1065,12 +1023,8 @@ static int build_ref(evt_engine_t *engine)
 	}
 
 	list_for_each_entry(trigger, &engine->trigger_list, evt_trigger_t, entry) {
-		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(
-		//	"trigger->log_type = %d, trigger->severity_level = %d, trigger->sys_code = %d, trigger->user_code = 0x%08x, trigger->delay_ms = %d, trigger->delay_timer_id = %d, trigger->msg = %s.",
-		//	trigger->log_type, trigger->severity_level, trigger->sys_code, trigger->user_code, trigger->delay_ms, trigger->delay_timer_id, trigger->msg);
 		evt_slot_rule_t *rule;
 		list_for_each_entry(rule, &trigger->slot_rule_list, evt_slot_rule_t, entry) {
-			//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("rule->positive = %d, rule->code = %s, rule->message = %s.",rule->positive, rule->code, rule->message);
 			evt_slot_key_t key;
 			key.code = rule->code;
 			key.index_hash_code = hash32_str(key.code, HASH32_STR_INIT);
@@ -1078,12 +1032,8 @@ static int build_ref(evt_engine_t *engine)
 			if (ref_slot) {
 				rule->ref_slot = ref_slot;
 				ARRAY_PUSH(ref_slot->arr_ref_trigger, evt_trigger_t*) = rule->parent;
-				//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("array push trigger.slot %s.", rule->code);
 			} 
 			else {
-				if (nIslog){
-					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("trigger.slot %s cannot find code!", rule->code);
-				}
 				return Error_Unexpect;
 			}
 		}
@@ -1486,7 +1436,6 @@ static int load_filter_element(evt_engine_t* engine, evt_slot_t* slot, rvc_slotf
 	if (rc != 0) {
 		return rc;
 	}
-	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("filter->log_type = %d, filter->ent_id = %d, entity = %s, filter->severity = %d, filter->sys_code = %d, filter->user_code = 0x%08x, slotvar = %s.", filter->log_type, filter->ent_id, entity, filter->severity, filter->sys_code, filter->user_code, slotvar);
 	
 	if (slotvar) {
 		int i;
@@ -1555,9 +1504,6 @@ static int load_slot_arrays(evt_engine_t* engine, const char* ns, rvc_slot_t* tn
 	char* code = NULL;
 
 	if (!tnode->strCode) {
-		if (nIslog) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("slot miss attribute code!");
-		}
 		slot_free(slot);
 		return Error_Unexpect;
 	}
@@ -1578,7 +1524,6 @@ static int load_slot_arrays(evt_engine_t* engine, const char* ns, rvc_slot_t* tn
 	}
 
 	if (tnode->strTimeout) {
-		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("tnode->strTimeout == %s.", tnode->strTimeout);
 		evt_expire_t* expire = ZALLOC_T(evt_expire_t);
 		if (!expire) {
 			slot_free(slot);
@@ -1602,7 +1547,6 @@ static int load_slot_arrays(evt_engine_t* engine, const char* ns, rvc_slot_t* tn
 	}
 
 	if (tnode->strOneTrigger) {
-		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("tnode->strOneTrigger == %s.", tnode->strOneTrigger);
 		slot->once = parse_bool(tnode->strOneTrigger);
 	}
 	else {
@@ -1616,9 +1560,6 @@ static int load_slot_arrays(evt_engine_t* engine, const char* ns, rvc_slot_t* tn
 			if (rc != 0) {
 				break;
 			}
-			//else {
-			//	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("slot var name is %s, value is %s.", tnode->Vars[ivar].strName, tnode->Vars[ivar].strValue);
-			//}
 		}
 	}
 
@@ -1647,7 +1588,6 @@ static int load_slot_arrays(evt_engine_t* engine, const char* ns, rvc_slot_t* tn
 				else {
 					ARRAY_PUSH(slot->arr_reset, char*) = source;
 				}
-				//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("slot var reset source is %s.", tnode->Reset[ireset].strSource);
 			}
 			else {
 				break;
@@ -1659,21 +1599,12 @@ static int load_slot_arrays(evt_engine_t* engine, const char* ns, rvc_slot_t* tn
 	}
 
 	if (slot_find(engine->slot_ht, &slot->key)) {
-		if (nIslog) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("duplicate slot %s", slot->key.code);
-		}
 		slot_free(slot);
 		return Error_Unexpect;
 	}
 
-	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("engine->slot_ht->size = %d, engine->slot_ht count = %d.", engine->slot_ht->size, htable_get_count(engine->slot_ht));
-
-	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("slot->key.code = %s, slot->key.index_hash_code = %d.", slot->key.code, slot->key.index_hash_code);
-
 	slot_add(engine->slot_ht, slot);
 
-	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("engine->slot_ht->size = %d, engine->slot_ht count = %d.", engine->slot_ht->size, htable_get_count(engine->slot_ht));
-
 	return 0;
 }
 
@@ -1683,16 +1614,13 @@ static int load_slot_element_rule(evt_trigger_t* trigger, const char* ns, rvc_tr
 	evt_slot_rule_t* rule = ZALLOC_T(evt_slot_rule_t);
 
 	if (slot_elem->strCode) {
-		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Slot Code value is %s.", slot_elem->strCode);
 		rule->code = parse_code(ns, slot_elem->strCode);
-		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("after parse_code, rule->code is %s.", rule->code);
 	}
 	else {
 		goto on_error;
 	}
 
 	if (slot_elem->strPositive) {
-		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Slot Positive value is %s.", slot_elem->strPositive);
 		rule->positive = parse_bool(slot_elem->strPositive);
 		if (rule->positive == -1) {
 			if (nIslog) {
@@ -1706,7 +1634,6 @@ static int load_slot_element_rule(evt_trigger_t* trigger, const char* ns, rvc_tr
 	}
 
 	if (slot_elem->strMessage) {
-		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Slot Message value is %s.", slot_elem->strMessage);
 		rule->message = _strdup(slot_elem->strMessage);
 	}
 	rule->parent = trigger;
@@ -1724,7 +1651,6 @@ static int load_sysvar_element_rule(evt_engine_t* engine, evt_trigger_t* trigger
 
 	if (sysvar_elem->strCode) {
 		char* code = sysvar_elem->strCode;
-		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("sysvar code is %s.", code);
 		evt_sysvar_key_t key;
 		key.code = code;
 		key.index_hash_code = hash32_str(code, HASH32_STR_INIT);
@@ -1747,7 +1673,6 @@ static int load_sysvar_element_rule(evt_engine_t* engine, evt_trigger_t* trigger
 	}
 
 	if (sysvar_elem->strPositive) {
-		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("sysvar Positive is %s.", sysvar_elem->strPositive);
 		rule->positive = parse_bool(sysvar_elem->strPositive);
 	}
 	else {
@@ -1761,20 +1686,14 @@ static int load_sysvar_element_rule(evt_engine_t* engine, evt_trigger_t* trigger
 		for (int istate = 0; istate < states_arr_length; istate++) {
 			const char* state = sysvar_elem->strstates[istate];
 			if (state) {
-				//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("add sysvar state %s.", state);
 				ARRAY_PUSH(rule->arr_state, char*) = _strdup(state);
 			}
 			else {
-				//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("sysvar state is NULL, add it.");
-				//ARRAY_PUSH(rule->arr_state, char*) = NULL;
 				break;
 			}
 		}
 	}
 	else {
-		if (nIslog) {
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("trigger sysvar does not have state children!");
-		}
 		sysvar_rule_free(rule);
 		return Error_Unexpect;
 	}
@@ -1798,7 +1717,6 @@ static int load_trigger_arrays(evt_engine_t* engine, const char* ns, rvc_trigger
 	INIT_LIST_HEAD(&trigger->sysvar_list);
 
 	if (trigger_elem->strLogType) {
-		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("LogType value is %s.", trigger_elem->strLogType);
 		trigger->log_type = parse_log_type(trigger_elem->strLogType);
 		if (trigger->log_type == -1) {
 			if (nIslog) {
@@ -1873,7 +1791,6 @@ static int load_trigger_arrays(evt_engine_t* engine, const char* ns, rvc_trigger
 	}
 
 	if (trigger_elem->strMessage) {
-		//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Message value is %s.", trigger_elem->strMessage);
 		trigger->msg = _strdup(trigger_elem->strMessage);
 	}
 
@@ -1917,8 +1834,6 @@ static int load_strategy_array(evt_engine_t* engine, slot_trigger_elem_t* peleme
 	const char* ns = pelement->slotns;
 	int rc = Error_Param;
 
-	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("ns = %s.", pelement->slotns);
-	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("pelement->islotarrlen = %d.", pelement->islotarrlen);
 	for (int islot = 0; islot < pelement->islotarrlen; islot++) {
 		if (load_slot_arrays(engine, ns, &pelement->slotarr[islot]) != 0) {
 			if (nIslog) {
@@ -1949,13 +1864,10 @@ int evt_engine_create(const evt_engine_callback_t *callback, evt_engine_t **p_en
 	evt_engine_t *engine = MALLOC_T(evt_engine_t);
 	
 	engine->filter_ht = htable_create(0);
-	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("engine->filter_ht->size = %d.", engine->filter_ht->size);
 	
 	engine->sysvar_ht = htable_create(0);
-	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("engine->sysvar_ht->size = %d.", engine->sysvar_ht->size);
 	
 	engine->slot_ht = htable_create(0);
-	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("engine->slot_ht->size = %d.", engine->slot_ht->size);
 	
 	INIT_LIST_HEAD(&engine->trigger_list);
 	spinlock_init(&engine->lock);
@@ -1989,11 +1901,6 @@ int evt_engine_load(evt_engine_t* engine, int* indexarr, int icount, slot_trigge
 				}
 				return rc;
 			}
-			else {
-				if (nIslog) {
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("load strategy array success!");
-				}
-			}
 		}
 		else {
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("invalid param.");
@@ -2008,10 +1915,6 @@ int evt_engine_load(evt_engine_t* engine, int* indexarr, int icount, slot_trigge
 		return rc;
 	}
 
-	if (nIslog) {
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("build ref ok!");
-	}
-
 	return rc;
 }
 
@@ -2092,9 +1995,7 @@ int evt_engine_start(evt_engine_t *engine)
 		}
 		return rc;
 	}
-	if (nIslog){
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("subscribe sysevent ok!");
-	}
+
 
 	for (i = 0; i < engine->sysvar_ht->size; ++i) {
 		evt_sysvar_t *tpos;
@@ -2103,15 +2004,9 @@ int evt_engine_start(evt_engine_t *engine)
 			CSimpleStringA strValue;
 			rc = engine->cb.get_sysevent(engine, tpos->key.code, strValue, engine->cb.user_data);
 			if (rc != 0) {
-				if (nIslog){
-					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("get sysvar %s failed! Error = %d", tpos->key.code, rc);
-				}
 				return rc;
 			} 
 			else {
-				if (nIslog){
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("get sysvar %s ok! value=%s", tpos->key.code, strValue.GetData());
-				}
 				rc = process_sysvar(engine, tpos, NULL, strValue);
 				if (rc != 0) {
 					if (nIslog){
@@ -2119,11 +2014,6 @@ int evt_engine_start(evt_engine_t *engine)
 					}
 					return rc;
 				} 
-				else {
-					if (nIslog){
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("process sysvar %s ok! key = %s, value = %s", tpos->key.code, tpos->key.code, strValue.GetData());
-					}
-				}
 			}
 		}
 	}
@@ -2135,14 +2025,6 @@ int evt_engine_start(evt_engine_t *engine)
 			int kk;
 			for (kk = 0; kk < slot->arr_filter->nelts; ++kk) {
 				evt_filter_t *filter = ARRAY_IDX(slot->arr_filter, kk, evt_filter_t*);
-				//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("filter->log_type = %d, filter->ent_id = %d, entity = %s, filter->severity = %d, filter->sys_code = %d, filter->user_code = 0x%08x.", filter->log_type, filter->ent_id, filter->entity, filter->severity, filter->sys_code, filter->user_code);
-				//if (filter->content_to_var) {
-				//	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("filter->content_to_var->name = %s, filter->content_to_var->current_value = %s, filter->content_to_var->init_value = %s.", filter->content_to_var->name, filter->content_to_var->current_value, filter->content_to_var->init_value);
-				//}
-				//if ((filter->owner)) {
-				//	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("filter->owner->key.code = %s.", filter->owner->key.code);
-				//}
-				
 				rc = engine->cb.subscribe_log(engine, &filter->key.listen_id, 
 					(LogTypeEnum)filter->log_type, filter->entity, (SeverityLevelEnum)filter->severity, (ErrorCodeEnum)filter->sys_code, filter->user_code, filter->content_to_var ? false : true, engine->cb.user_data);
 				
@@ -2152,21 +2034,11 @@ int evt_engine_start(evt_engine_t *engine)
 					}
 					return rc;
 				} 
-				else {
-					if (nIslog){
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("subscribe log ok, id = %d", filter->key.listen_id);
-					}
-				}
+
 				filter_add(engine->filter_ht, filter);
 			}
 		}
 	}
-
-	if (nIslog){
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("subscribe started!");
-	}
-
-	//DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("################################################");
 	
 	return rc;
 }
@@ -2202,10 +2074,6 @@ int evt_engine_stop(evt_engine_t *engine)
 		}
 		return rc;
 	}
-	
-	if (nIslog){
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("unsubscibe sysevent ok!");
-	}
 
 	return rc;
 }

Vissa filer visades inte eftersom för många filer har ändrats