Browse Source

Z991239-3037 #comment [mod_upload] 上传去分行化改造(去除解密接口功能)

Signed-Off-By: commit-hook
刘文涛80174520 3 năm trước cách đây
mục cha
commit
6714af01cf

+ 4 - 0
Module/include/EventCode.h

@@ -66,6 +66,10 @@ static const char* Device_Type_Table[] = {
 
 /*----SystemCustomization--modify--by--LZM--at--2020/4/8----*/
 #define LOG_WARN_SYSTEMINITIAL_FAILED                0x10B40001  //系统定制失败
+#define LOG_WARN_UPLOAD_QUERY_PLAN_ERROR 0x10400002 //查询扫描计划http通讯报错
+#define LOG_WARN_UPLOAD_QUERY_FILE_OVER_LIMIT 0x10400003 //扫描文件文件过大告警
+#define LOG_WARN_UPLOAD_FILE_REPORT 0x10400004 //上传文件统计信息告警
+#define LOG_WARN_UPLOAD_QUERY_PLAN_DATA_ERROR 0x10400005 //查询扫描计划数据效验错误
 
 #define LOG_EVT_SYSTMECUSTOM_START_ACCESSAUTH        0x10B00001  //开始准入
 

+ 3 - 0
Module/mod_upload/CMakeLists.txt

@@ -45,12 +45,15 @@ target_include_directories(${MODULE_NAME} PRIVATE
 	${RVC_FRAMEWORK_INCLUDES_DIR}
 	${CONAN_INCLUDE_DIRS_ZLIB}
 	${CONAN_RVCFRAMEWORK_ROOT}/include
+	${CONAN_INCLUDE_DIRS_JSONCPP}
 )
 
 # 添加实体需要依赖的其他共享库(包括系统库):连接器包含的包
 target_link_directories(${MODULE_NAME} PRIVATE
 	${CONAN_LIB_DIRS_ZLIB}
 )
+target_link_directories(${MODULE_NAME} PRIVATE ${CONAN_LIB_DIRS_JSONCPP})
+
 set(${MODULE_PREFIX}_LIBS ${MODULE_BASE_ALL_LIBS} ${CONAN_PKG_LIBS_ZLIB})
 
 target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS})  

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 907 - 35
Module/mod_upload/UploadFSM.cpp


+ 207 - 4
Module/mod_upload/UploadFSM.h

@@ -8,6 +8,15 @@
 
 #include "upload.h"
 #include <list>
+#include "IHttpFunc.h"
+#ifdef RVC_OS_WIN
+#include "json.h"
+#include <io.h>
+#else 
+#include "json/json.h"
+#include <map>
+#endif
+
 #define USER_EVT_JMP_DISABLE	EVT_USER+1
 #define USER_EVT_JMP_ENABLE		EVT_USER+2
 #define USER_EVT_JMP_CONNECT	EVT_USER+3
@@ -15,6 +24,14 @@
 #define USER_EVT_UPLOAD_ANS		EVT_USER+5
 #define USER_EVT_BLOCK_ANS		EVT_USER+6
 #define USER_EVT_JMP_UPLOAD		EVT_USER+7
+
+#define USER_EVT_JMP_OLD_SCAN	EVT_USER+8
+#define USER_EVT_JMP_NEW_SCAN	EVT_USER+9
+#define USER_EVT_JMP_NEW_UPLOAD		EVT_USER+10
+#define USER_EVT_JMP_NEW_DISABLE	EVT_USER+11
+#define USER_EVT_UPLOAD_SUCC		EVT_USER+12
+#define USER_EVT_UPLOAD_FAIL		EVT_USER+13
+
 using namespace std;
 
 #pragma pack(1)
@@ -79,20 +96,158 @@ struct BlockAnsEvent : public FSMEvent
 	virtual ~BlockAnsEvent() {}
 	BlockReply m_reply;
 };
-
+/** 交易受限功能代码废弃
 struct UploadProgress
 {
 	int uploadState;
 	int uploadNumber;
 	CSimpleStringA elapseTime;
 };
+*/
+
+
+enum CenterModelEnum
+{
+	branchModel = 0,                //分行模式
+	mixModel = 1,					//混合模式
+	centerModel = 2,                //总行模式
+	
+};
+struct CenterUrl
+{
+	string queryPlanUrl;	//上传策略查询接口
+	string queryTempFileUrl;   //查询临时计划文件状态接口
+	string updateStateUrl;	//更新上传状态接口
+	string addUploadFailUrl;	//增加失败流水接口
+	//string uploadCenterUrl;	//终端总行上传文件接口
+};
+
+//上传接口
+struct UploadFileReq : CHTTPUploadReq {
+};
+
+struct UploadFileRet : CHTTPUploadRet {
+};
+struct UploadDataRet{
+	int uploaded_length;
+	bool upload_finish;
+	string branchFilePath;
+	string strBody;
+};
+
+//上传策略查询接口
+struct UploadQueryPlanReq : CHTTPReq {
+	string m_reqStr;
+	string ToJson() {
+		return m_reqStr;
+	}
+};
+
+struct UploadQueryPlanRet : CHTTPRet {
+	string m_retStr;
+	bool Parse(string strData) {
+		m_retStr=strData;
+		return true;
+	}
+};
+//查询临时计划文件状态接口
+struct UploadQueryTempFileReq : CHTTPReq {
+	string m_reqStr;
+	string ToJson() {
+		return m_reqStr;
+	}
+};
+
+struct UploadQueryTempFileRet : CHTTPRet {
+	string m_retStr;
+	bool Parse(string strData) {
+		m_retStr=strData;
+		return true;
+	}
+};
+
+//更新上传状态接口
+struct UploadUpdateStateReq : CHTTPReq {
+	string m_reqStr;
+	string ToJson() {
+		return m_reqStr;
+	}
+};
+
+struct UploadUpdateStateRet : CHTTPRet {
+	string m_retStr;
+	bool Parse(string strData) {
+		m_retStr=strData;
+		return true;
+	}
+};
+
+//增加失败流水接口
+struct UploadUploadFailReq : CHTTPReq {
+	string m_reqStr;
+	string ToJson() {
+		return m_reqStr;
+	}
+};
+
+struct UploadUploadFailRet : CHTTPRet {
+	string m_retStr;
+	bool Parse(string strData) {
+		m_retStr=strData;
+		return true;
+	}
+};
+
+struct UploadPlan{
+	string plan_id;//计划ID
+	string branch_no;//分行号
+	string plan_type;//计划类型 T-临时计划(Temp)  P-永久计划(Permanent)
+	string file_type;//文件类型 V-录像文件(Vedio) O-其他文件(Other)
+	string path_type;//路径类型(R-相对路径,A-绝对路径)
+	string path_name;//路径
+	string file_name;//文件名通配符(*表示任意0个或N个字符,如*.* *xx xx*)
+	string file_regex;//文件名正则表达式(通用的正则表达式,上面文件名通配符已够用,一般不使用)
+	string before_deal_type; //上传前处理类型(Z压缩...)
+	string after_deal_type;//上传后处理类型(D删除|M移动|N不动)
+	string after_deal_text;//上传后处理操作(如 移动路径)
+	int  file_limit;//(文件路径下最大扫描出文件个数,默认256)
+	int  file_length_limit;//(扫描出文件最大长度限制,单位M)
+	int  max_silent;//(文件最新修改时间流失间隔,用于热点文件隔离)
+	string upload_address_env;//上传文件地址环境:DMZ: 行外,BIZ:行内
+};
+
+struct UploadFileInfo:UploadPlan{
+	string filePath; //文件绝对路径(用于读取本地文件)
+	string fileUploadPath;//上传给总行的绝对路径(不能超过900字符)
+	//string fileUploadRelativePath;//上传给总行的路径(不超过900字符,不包含文件名称)
+	string fileName; //文件名称
+	string BranchFilePath;//分行文件路径(含IP)
+	long fileLen;// 文件长度
+	long decFileLen;//解密后的长度
+	string decHeadJson;//解密后自定义头
+	string editTime;//文件最后修改时间
+//	UploadPlan* plan;//对应的计划指针
+};
+
+struct UploadReport{
+	int sum;//一批上传文件个数
+	int succ;//上传成功文件个数
+	int fail;//上传失败文件个数
+	int uploadFail;//上传失败次数
+	int decodeFail;//解密失败次数
+	int updateState;//上传登记失败次数
+	int operateFileFail;//上传完处理文件失败次数
+	int queryTempFail;//查询临时文件失败次数
+	bool isBreak;//批次是否被中断
+};
+ 
 
 class UploadConnection;
 
 class UploadFSM : public FSMImpl<UploadFSM>, public IFSMStateHooker, public ISysVarListener
 {
 public:
-	enum {s0,s1,s2,s3,s4,s5,s6};
+	enum {s0,s1,s2,s3,s4,s5,s6,s7};
 
 	BEGIN_FSM_STATE(UploadFSM)
 		FSM_STATE_ENTRY(s0,"Starting",s0_on_entry,s0_on_exit,s0_on_event)
@@ -102,14 +257,16 @@ public:
 		FSM_STATE_ENTRY(s4, "Upload", s4_on_entry, s4_on_exit, s4_on_event)
 		FSM_STATE_ENTRY(s5, "Release", s5_on_entry, s5_on_exit, s5_on_event)
 		FSM_STATE_ENTRY(s6, "DisConnect", s6_on_entry, s6_on_exit, s6_on_event)//添加断连等待时间状态
+		FSM_STATE_ENTRY(s7, "NewUpload", s7_on_entry, s7_on_exit, s7_on_event)//添加新模式上传状态
 	END_FSM_STATE()
 
 	BEGIN_FSM_RULE(UploadFSM,s0)
 		FSM_RULE_ENTRY_ANY(s0, s1, USER_EVT_JMP_DISABLE)
 		FSM_RULE_ENTRY_ANY(s0, s2, USER_EVT_JMP_ENABLE)
 		FSM_RULE_ENTRY_ANY(s1, s2, USER_EVT_JMP_ENABLE)
-		FSM_RULE_ENTRY_ANY(s2, s3, USER_EVT_JMP_CONNECT)
+		FSM_RULE_ENTRY_ANY(s2, s3, USER_EVT_JMP_CONNECT)//旧上传模式
 		FSM_RULE_ENTRY_ANY(s2, s1, USER_EVT_JMP_DISABLE)
+		FSM_RULE_ENTRY_ANY(s2, s7, USER_EVT_JMP_NEW_UPLOAD)//新上传模式
 		FSM_RULE_ENTRY_ANY(s3, s4, USER_EVT_JMP_UPLOAD)
 		FSM_RULE_ENTRY_ANY(s3, s1, USER_EVT_JMP_DISABLE)
 		FSM_RULE_ENTRY(s4, s5, USER_EVT_UPLOAD_ANS, 1)
@@ -122,6 +279,8 @@ public:
 		FSM_RULE_ENTRY_ANY(s5, s1, USER_EVT_JMP_DISABLE)
 		FSM_RULE_ENTRY_ANY(s6, s2, EVT_TIMER)//等待一段时间进入S2
 		FSM_RULE_ENTRY_ANY(s6, s1, USER_EVT_JMP_DISABLE)
+		FSM_RULE_ENTRY_ANY(s7, s2, EVT_TIMER)//等待一段时间进入s2,重新开始扫描文件
+		FSM_RULE_ENTRY_ANY(s7, s1, USER_EVT_JMP_NEW_DISABLE)//等待一段时间进入s2
 	END_FSM_RULE()
 
 	UploadFSM();
@@ -162,12 +321,20 @@ public:
 	void s6_on_exit();
 	unsigned int s6_on_event(FSMEvent* event);
 
+	void s7_on_entry();
+	void s7_on_exit();
+	unsigned int s7_on_event(FSMEvent* event);
+
 private:
+	/** 交易受限功能代码废弃
 	ErrorCodeEnum LoadServerConfigFromCenterSetting();
+	*/
 	file_t *find_first_upload_file();
 	void post_process();
+	/** 交易受限功能代码废弃
 	int getUploadFileNum(int &fileSumlen);
 public:
+	
 	int getCheckDirFile(int silentTime);//检查文件夹文件个数
 	void getUploadProgress(UploadProgress &progress);//获取上传文件状态
 	bool clearUploadDate();//清空上传日期
@@ -175,6 +342,20 @@ public:
 	ErrorCodeEnum getUploadDate(CAutoArray<CSimpleStringA> &strList);//获取上传日期
 	ErrorCodeEnum insertUploadDate();//插入上传日期
 	bool uploadDate_exist(CSimpleStringA uploadDate);
+	*/
+public:
+	bool queryPlan();//查询上传策略(true表示新模式,false表示旧模式)
+	void scanFile();//扫描文件
+	void scanDirfresh(UploadPlan* plan,const char* path);
+	static void HttpsLogCallBack(const char* logtxt);
+	bool IsFileMatch(const char *pszFilter, const char *pszFileName);//通配符过滤
+	ErrorCodeEnum SM3FileToStr(CSimpleStringA strFilePath, CSimpleStringA &strSM3,bool isSub);//文件获取SM3 
+	ErrorCodeEnum SM3_Str(CSimpleStringA &strSM3,BYTE * SM3Byte,bool isSub);//获取SM3字符串
+	bool getFileContent(FILE* file,unsigned char* content,int beginPos, int contentLen);//从文件中获取内容
+	bool test_zero_ref(const char *path);
+	bool GetFileLength(const char* filePath,long &fileLen);//获取文件长度
+	void reportBatchMsg();//报告批次消息
+	
 private:
 	UploadConnection *m_pConnection;
 	file_t *m_uploading_file; //当前正在上传的文件
@@ -188,18 +369,40 @@ private:
 	char m_upload_id[16];
 
 	CSimpleStringA m_terminalNo;
+    /** 交易受限功能代码废弃
 	CSimpleStringA m_server1;
 	int m_server1_port;
 	CSimpleStringA m_server2;
 	int m_server2_port;
+	*/
 	struct list_head m_updir_list;//文件夹配置列表
 	//添加lwt
+    /** 交易受限功能代码废弃
 	list<CSimpleStringA>* m_check_dir;//重点文件夹的列表
 	DWORD m_dBeginTime;//统计上传速度开始时间
 	DWORD m_dEndTime;//统计上传速度结束时间
 	int m_iSpeed;//单位k/ms
 	CRITICAL_SECTION m_cs;//临界区变量
 	list<CSimpleStringA>* m_uploadDateList;//上传日期文件列表
+	*/
+
+	bool m_isOffLine;//是否坐席空闲
+
+	int m_centerModel;//上传模式 (0:分行模式 1:混合模式  2:总行模式)
+	
+	bool m_uploadModel; //上传文件模式 (false:分行模式 ,true:总行模式)
+
+	list<UploadFileInfo*>* m_uploadList; //新模式下待上传文件列表
+	list<UploadPlan*>* m_uploadPlanList; //新模式策略列表
+	
+public:
+	CenterUrl m_centerUrl;//访问总行的url地址集合
+	string m_rootPath ;//系统根路径,例如:windows: C:     linux:/opt
+	UploadFileInfo* m_currUploadFile;//正在上传的文件指针
+	map<int,string> m_branchIpList;//新模式下分行服务器列表
+	int m_eachUploadLen;//每次上传数据的最大长度,单位K
+	UploadReport m_uploadReport;//每批次上传告警统计
+
 };
 
 class UploadConnection : public SpSecureClient
@@ -335,7 +538,7 @@ protected:
 			if (pRecvPkg->GetErrMsg(dwSysCode, dwUserCode, strErrMsg))
 			{
 				rc = (ErrorCodeEnum)dwSysCode;
-				LogError(Severity_Middle, rc, dwUserCode, CSimpleStringA::Format("create up packet Fail!, %s", strErrMsg.c_str()));
+				LogWarn(Severity_Low, rc, dwUserCode, CSimpleStringA::Format("create up packet Fail!, %s", strErrMsg.c_str()).GetData());
 				//Sleep(3000);
 				OnDisconnect();
 			}

+ 33 - 21
Module/mod_upload/mod_upload.h

@@ -74,13 +74,17 @@ public:
 	ErrorCodeEnum UploadProgess(SpReqAnsContext<UploadService_UploadProgess_Req, UploadService_UploadProgess_Ans>::Pointer ctx)
 	{
 		ErrorCodeEnum  ret = Error_Succeed;
-		UploadProgress progress;
-
-		m_fsm.getUploadProgress(progress);
-		ctx->Ans.uploadState = progress.uploadState;
-		ctx->Ans.uploadNumber = progress.uploadNumber;
-		ctx->Ans.elapseTime = CSimpleStringA2W(progress.elapseTime);
-		Dbg("UploadProgess: state %d uploadNumber %d elapseTime %s", progress.uploadState, progress.uploadNumber, progress.elapseTime.GetData());
+		//UploadProgress progress;
+
+		//m_fsm.getUploadProgress(progress);
+		//ctx->Ans.uploadState=progress.uploadState;
+		//ctx->Ans.uploadNumber=progress.uploadNumber;
+		//ctx->Ans.elapseTime=CSimpleStringA2W(progress.elapseTime);
+		//Dbg("UploadProgess: state %d uploadNumber %d elapseTime %s",progress.uploadState,progress.uploadNumber,progress.elapseTime.GetData());
+		ctx->Ans.uploadState = 2;
+		ctx->Ans.uploadNumber = 0;
+		ctx->Ans.elapseTime = CSimpleStringA2W("");
+		Dbg("UploadProgess is disable");
 		return ret;
 	}
 	//查询剩余待上传的文件个数
@@ -88,9 +92,12 @@ public:
 	{
 		ErrorCodeEnum  ret = Error_Succeed;
 		Dbg("UploadNumber req silentTime is %d", ctx->Req.silentTime);
-		int fileNum = m_fsm.getCheckDirFile(ctx->Req.silentTime);
-		Dbg("UploadNumber is %d", fileNum);
-		ctx->Ans.uploadNumber = fileNum;
+		//废弃接口
+		//int fileNum = m_fsm.getCheckDirFile(ctx->Req.silentTime);
+		//Dbg("UploadNumber is %d",fileNum);
+		//ctx->Ans.uploadNumber=fileNum;
+		ctx->Ans.uploadNumber = 0;
+		Dbg("UploadNumber is disable");
 		return ret;
 	}
 
@@ -100,10 +107,13 @@ public:
 		ErrorCodeEnum  ret = Error_Succeed;
 
 		CAutoArray<CSimpleStringA> str;
-		ret = m_fsm.getUploadDate(str);
-		if (ret == Error_Succeed) {
-			ctx->Ans.uploadDateStr = str;
-		}
+		//废弃接口
+		//ret = m_fsm.getUploadDate(str);
+		//if(ret==Error_Succeed){
+		//	ctx->Ans.uploadDateStr=str;
+		//}
+		ctx->Ans.uploadDateStr = str;
+		Dbg("UploadDateList is disable");
 		return ret;
 	}
 
@@ -111,13 +121,15 @@ public:
 	ErrorCodeEnum ClearUploadDate(SpReqAnsContext<UploadService_ClearUploadDate_Req, UploadService_ClearUploadDate_Ans>::Pointer ctx)
 	{
 		ErrorCodeEnum  ret = Error_Succeed;
-		bool bret = m_fsm.clearUploadDate();
-		if (bret) {
-			ctx->Ans.isOK = true;
-		}
-		else {
-			ctx->Ans.isOK = false;
-		}
+		//废弃接口
+		//bool bret = m_fsm.clearUploadDate();
+		//if(bret){
+		//	ctx->Ans.isOK=true;
+		//}else{
+		//	ctx->Ans.isOK=false;
+		//}
+		Dbg("ClearUploadDate is disable");
+		ctx->Ans.isOK = true;
 		return ret;
 	}
 

+ 8 - 3
Module/mod_upload/upload.cpp

@@ -17,6 +17,7 @@
 #include "XZipZilb.h"
 #include <regex>
 #include <errno.h>
+#include "EventCode.h"
 #endif // RVC_OS_WIN
 
 
@@ -174,6 +175,7 @@ int upload_create(struct list_head *list, IEntityFunction *pEntityFunc, IConfigI
 			return Error;
 		}
 		//添加lwt,读入日结时需要检查的文件类型参数
+		/**交易受限功能代码废弃
 		Error = pConfig->ReadConfigValue("Main", "CheckType", str);
 		if (Error == Error_Succeed) 
 		{
@@ -183,6 +185,7 @@ int upload_create(struct list_head *list, IEntityFunction *pEntityFunc, IConfigI
 		{
 			return Error;
 		}
+		*/
 		pConfig->ReadConfigValueInt("Main", "SilentTime", default_silent_time);//间隔时间
 		pConfig->ReadConfigValueInt("Main", "Limitation", default_limitation);//最大文件数
 		if (default_limitation == 0) 
@@ -227,6 +230,7 @@ static int check_zero_ref(const char *path)
 		return TRUE;
 	}
 	else {
+        LogWarn(Severity_Low, Error_Unexpect, LOG_WARN_UPLOAD_SCANFILE_LOCK_ERROR, CSimpleStringA::Format("check_zero_ref is fail:%s",path).GetData());
 		DWORD dwRet = GetLastError();
 		return FALSE;
 	}
@@ -239,7 +243,8 @@ static int check_zero_ref(const char *path)
 	}
 	else
 	{
-		Dbg("try open file fail :%s",path);
+	    //Dbg("try open file fail :%s",path);
+		LogWarn(Severity_Low, Error_Unexpect, LOG_WARN_UPLOAD_SCANFILE_LOCK_ERROR, CSimpleStringA::Format("check_zero_ref is fail:%s",path).GetData());
 		return false;
 	}
 #endif // RVC_OS_WIN
@@ -696,7 +701,7 @@ int upload_fresh(struct list_head *list)
 
 	return 0;
 }
-
+/** 交易受限功能代码废弃
 int check_dir_fresh(const char *path,int limitation,int silentTime,int &fileSumlen){
 	int count=0;//当前文件夹下面的文件个数
 	int sum = 0;//当前文件夹下面的子文件夹下面的文件个数
@@ -859,7 +864,7 @@ int check_dir_fresh(const char *path,int limitation,int silentTime,int &fileSuml
 	count = sum+count;
 	return count;
 }
-
+*/
 #ifdef RVC_OS_WIN
 bool ZipData(LPCTSTR lpszZipArchive, LPCTSTR lpszSrcFile)
 {

+ 2 - 0
Module/mod_upload/upload.h

@@ -57,7 +57,9 @@ int upload_fresh(struct list_head *list);
 #endif // RVC_OS_WIN
 
 //增加lwt
+/** 交易受限功能代码废弃
 int check_dir_fresh(const char *path,int limitation,int silentTime,int &fileSumlen);
+*/
 void updir_del_file(file_t *file);
 
 

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác