浏览代码

Z991239-6293 #comment feat: 身份证RTA调整

陈纪林80310970 3 月之前
父节点
当前提交
fe7dd1d3e0

+ 4 - 4
DevAdapter/simulator/idcer.1.1/idcer_impl.cpp

@@ -375,7 +375,7 @@ ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
     err = SimulatorHttpFunction(EntityName, "ScanIDAndSaveImage");
     LOG4VTM(INFO, "ScanIDAndSaveImage err = " << err);
 
-    if (err == Error_Succeed)
+   /* if (err == Error_Succeed)
     {
         bool flag1 = GenerateBmpFile("idfront.bmp");
         bool flag2 = GenerateBmpFile("idback.bmp");
@@ -383,7 +383,7 @@ ErrorCodeEnum IDCerClassImpl::ScanIDAndSaveImage()
         {
             err = Error_Bug;
         }
-    }
+    }*/
 
     return err;
 }
@@ -461,11 +461,11 @@ ErrorCodeEnum IDCerClassImpl::IDCerGetDataEx2(IDCerInfoEx2& idCerInfoEx2)
     ErrorCodeEnum err = Error_Succeed;
     memset(&idCerInfoEx2, 0, sizeof(IDCerInfoEx2));
     err = ex2HttpFunction(idCerInfoEx2);
-    bool flag = GenerateBmpFile("zp.bmp");
+    /*bool flag = GenerateBmpFile("zp.bmp");
     if (!flag)
     {
         err = Error_Bug;
-    }
+    }*/
 
     LOG4VTM(INFO, "IDCerGetDataEx2 err = " << err);
     return err;

+ 53 - 21
Module/mod_IDCertificate/IDCertFSM.cpp

@@ -932,25 +932,51 @@ ErrorCodeEnum CIDCertFSM::GetPngBlobEx(CBlob &data, CSimpleStringA fileNamePrefi
 			LogWarn(Severity_Middle, Error_Unexpect, IDCertificate_UserErrorCode_FindFile_in_DepBak, warnMsg.GetData());
 		}
 	}
-	//记录身份证相关图片的最近修改时间,用于上送信息调研,后续下掉 - 2025.6.13 CJL
+
+	//找不到本次图片生成
+	CSimpleStringA imgRTACode = "";
+	HeadImgDelRTA headRta;
+	ScanImgDelRTA scanRta;
+	map<string, string> errInfo;
+	CSimpleStringA tErrStr;
+	CSimpleStringA disecription;
+
 	if (fileNamePrefix ==  "zp")
 	{
+		imgRTACode = headRta.noFindCur;
+
+		//记录身份证相关图片的最近修改时间,用于上送信息调研,后续下掉 - 2025.6.13 CJL
 		headPhotoTimeStr = GetFileLastModifyTime(strPath + ".bmp").GetData();
 	}
 	else if (fileNamePrefix == "idfront")
 	{
+		imgRTACode = scanRta.noFindCur;
+
+		//记录身份证相关图片的最近修改时间,用于上送信息调研,后续下掉 - 2025.6.13 CJL
 		frontPhotoTimeStr = GetFileLastModifyTime(strPath + ".bmp").GetData();
 	}
 	else if (fileNamePrefix == "idback")
 	{
+		imgRTACode = scanRta.noFindCur;
+
+		//记录身份证相关图片的最近修改时间,用于上送信息调研,后续下掉 - 2025.6.13 CJL
 		backPhotoTimeStr = GetFileLastModifyTime(strPath + ".bmp").GetData();
 	}
 
 	IplImage *src = cvLoadImage(strPath + ".bmp");
 	if (!src)
 	{
+		if (!ExistsFileA(strPath + ".bmp")) //找不到本次图片生成
+		{
+			disecription = CSimpleStringA::Format("Can not find file %s.", (fileNamePrefix + ".bmp").GetData());
+			errInfo.clear();
+			errInfo["path"] = (strPath + ".bmp").GetData();
+			errInfo["description"] = disecription.GetData();
+			tErrStr = generateJsonStr(errInfo).second.c_str();
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode(imgRTACode).setAPI("DeleteFileIfExisted")(tErrStr.GetData());
+		}
+
 		errMsg = CSimpleStringA::Format("read file %s.bmp failed.err:%d", (const char*)strPath, GetLastError());
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)(errMsg.GetData());
 		if (transImgMsg.GetLength() != 0)
 		{
 			transImgMsg = transImgMsg + "," + errMsg;
@@ -977,8 +1003,18 @@ ErrorCodeEnum CIDCertFSM::GetPngBlobEx(CBlob &data, CSimpleStringA fileNamePrefi
 		return Error_Succeed;
 	}
 	else {
+		if (!ExistsFileA(strPath + ".jpg")) //找不到本次图片生成
+		{
+			disecription = CSimpleStringA::Format("Can not find file %s.", (fileNamePrefix + ".bmp").GetData());
+			errInfo.clear();
+			errInfo["path"] = (strPath + ".jpg").GetData();
+			errInfo["description"] = disecription.GetData();
+			tErrStr = generateJsonStr(errInfo).second.c_str();
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode(imgRTACode).setAPI("DeleteFileIfExisted")(tErrStr.GetData());
+		}
+
 		errMsg = CSimpleStringA::Format("fopen %s failed!", (const char*)strPath);
-		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)(errMsg.GetData());
+		//DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)(errMsg.GetData());
 		if (transImgMsg.GetLength() != 0)
 		{
 			transImgMsg = transImgMsg + "," + errMsg;
@@ -998,7 +1034,8 @@ void CIDCertFSM::SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionCon
 	pTransactionContext->SendAnswer(m_testResult);
 }
 
-ErrorCodeEnum CIDCertFSM::DeleteFileIfExisted(LPCTSTR fileName, int deleteTiming)
+template <typename T>
+ErrorCodeEnum CIDCertFSM::DeleteFileIfExisted(LPCTSTR fileName, T picRta, int deleteTiming)
 {
 	if(strlen(fileName) == 0 || strchr(fileName, (int)'*') != NULL)
 	{
@@ -1025,7 +1062,7 @@ ErrorCodeEnum CIDCertFSM::DeleteFileIfExisted(LPCTSTR fileName, int deleteTiming
 			errMsg = generateJsonStr(errInfo).second.c_str();
 
 			//CSimpleStringA errMsg = CSimpleStringA::Format("检测到上次读证残留图片:[%s]", strAimPath.GetData());
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2112").setAPI("DeleteFileIfExisted")(errMsg.GetData());
+			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode(picRta.findLast).setAPI("DeleteFileIfExisted")(errMsg.GetData());
 		}
 
 		if (RemoveFileA((LPCTSTR)strAimPath))
@@ -1038,11 +1075,11 @@ ErrorCodeEnum CIDCertFSM::DeleteFileIfExisted(LPCTSTR fileName, int deleteTiming
 			CSimpleStringA rtaCode = "";
 			if (deleteTiming == 1) //删除上次读证残留图片失败
 			{
-				rtaCode = "RTA2113";
+				rtaCode = picRta.delLastErr;
 			}
 			else if (deleteTiming == 2) //删除本次读证生成图片失败
 			{
-				rtaCode = "RTA2115";
+				rtaCode = picRta.delCurErr;
 			}
 
 			errInfo.clear();
@@ -1054,15 +1091,8 @@ ErrorCodeEnum CIDCertFSM::DeleteFileIfExisted(LPCTSTR fileName, int deleteTiming
 			return Error_Unexpect;
 		}
 	}
-	else
+	else  //如果文件不存在,会在图片格式转换函数GetPngBlobEx()里报错, 这里就不重复报错了
 	{
-		if (deleteTiming == 2) //未发现本次读证生成的图片
-		{
-			errInfo.clear();
-			errInfo["path"] = strAimPath.GetData();
-			errMsg = generateJsonStr(errInfo).second.c_str();
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA2114").setAPI("DeleteFileIfExisted")(errMsg.GetData());
-		}
 		return Error_Succeed;
 	}
 }
@@ -1083,15 +1113,17 @@ void CIDCertFSM::DeleteZP(int type, int deleteTiming)
 {
 	if ((type&Bmp_ZP) == Bmp_ZP)
 	{
-		DeleteFileIfExisted("zp.jpg", deleteTiming);
-		DeleteFileIfExisted("zp.bmp", deleteTiming); //All
+		HeadImgDelRTA headImgRta;
+		DeleteFileIfExisted("zp.jpg", headImgRta, deleteTiming);
+		DeleteFileIfExisted("zp.bmp", headImgRta, deleteTiming); //All
 	}
 	if ((type&Bmp_SCAN) == Bmp_SCAN)
 	{
-		DeleteFileIfExisted("idfront.bmp", deleteTiming);
-		DeleteFileIfExisted("idback.bmp", deleteTiming);
-		DeleteFileIfExisted("idfront.jpg", deleteTiming);
-		DeleteFileIfExisted("idback.jpg", deleteTiming);
+		ScanImgDelRTA sacnImgRta;
+		DeleteFileIfExisted("idfront.bmp", sacnImgRta, deleteTiming);
+		DeleteFileIfExisted("idback.bmp", sacnImgRta, deleteTiming);
+		DeleteFileIfExisted("idfront.jpg", sacnImgRta, deleteTiming);
+		DeleteFileIfExisted("idback.jpg", sacnImgRta, deleteTiming);
 	}
 }
 

+ 19 - 7
Module/mod_IDCertificate/IDCertFSM.h

@@ -108,12 +108,6 @@ typedef IDCertificate::IDCertService_GetDevInfo_Ans IDCert_GetDevInfo_Ans;
 #include <map>
 using namespace std;
 
-struct CtxInfo
-{
-	int dataSize;
-	LPVOID pCtx;
-};
-
 struct IDCerTextData
 {
 	unsigned char name[1024];
@@ -134,6 +128,22 @@ struct IDCerTextData
 	unsigned char IssuedSN[1024]; //换证次数
 };
 
+struct HeadImgDelRTA
+{
+	CSimpleStringA findLast = "RTA2117";
+	CSimpleStringA delLastErr = "RTA2118";
+	CSimpleStringA noFindCur = "RTA2119";
+	CSimpleStringA delCurErr = "RTA211A";
+};
+
+struct ScanImgDelRTA
+{
+	CSimpleStringA findLast = "RTA2112";
+	CSimpleStringA delLastErr = "RTA2113";
+	CSimpleStringA noFindCur = "RTA2114";
+	CSimpleStringA delCurErr = "RTA2115";
+};
+
 class CancelReadEvent : public FSMEvent
 {
 public:
@@ -267,7 +277,9 @@ private:
 
 	//Delete bmp file in dep directory, you should just convey fileName only without paths -Joseph
 	//deleteTiming:0, defalut; deleteTiming:1, delete before Read IDCard; deleteTiming:2, delete after Read IDCard
-	ErrorCodeEnum DeleteFileIfExisted(LPCTSTR fileName, int deleteTiming = 0);
+	//T:struct of RTAcode, use for HEAD photo OR SCAN photo
+	template <typename T>
+	ErrorCodeEnum DeleteFileIfExisted(LPCTSTR fileName, T picRta, int deleteTiming = 0);
 	void UCS2_to_UTF8(UINT16* ucs2_code, UINT8* utf8_code);
 	void GetSexUTF8String(UINT16* in, UINT8* out);
 	void GetNationalUTF8String(UINT16* in, UINT8* out);