Browse Source

Z991239-5798 #comment feat: 告警上送强制退卡失败时的卡片位置信息

陈纪林80310970 11 months ago
parent
commit
929435338c

+ 155 - 111
Module/mod_IDCertificate/IDCertFSM.cpp

@@ -810,59 +810,61 @@ int CIDCertFSM::ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCe
 					memcpy(ctx->Ans.reserved_utf8.m_pData, reserved, strlen((char*)reserved)); //新外国人永居证关联字段
 					memcpy(ctx->Ans.othercode_utf8.m_pData, englishNameEx, strlen((char*)englishNameEx)); //英文名备用字段
 
-					m_ullBeginTime = SP::Module::Comm::RVCGetTickCount();
-					eErr = m_hDevHelper->ScanIDAndSaveImage();
-					m_ullEndTime = SP::Module::Comm::RVCGetTickCount();
-					if (eErr == Error_Succeed)
-					{
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ScanIDAndSaveImage").setCostTime(m_ullEndTime - m_ullBeginTime)
-							("ReadAndScanUTF8 ScanIDAndSaveImage succeed.");
-					}
-					else
-					{
-						if(eErr != Error_NotImpl)
-						SetErrorAndLog(eErr, MEC_DEVAPI_IDCER_ScanIDAndSaveImage, "DevAdapter::ScanIDAndSaveImage", __FUNCTION__,
-							false, m_ullEndTime - m_ullBeginTime, IDCertService_LogCode_ReadAndScanUTF8);
-					}
-					ctx->Ans.hasscan = 0;
+					GetPngBlobEx(ctx->Ans.headphoto, "zp"); //转换头像图片
 
-					if (eErr == Error_Succeed)
+					ctx->Ans.hasscan = 0;
+					if (igestionVer == TRUE) //吸入式设备才调用正反扫描功能
 					{
-						transImgMsg.Clear();
-
-						//idfront.bmp" and "idback.bmp
-						ErrorCodeEnum eErrFront, eErrBack;
-						eErrFront = GetPngBlobEx(ctx->Ans.frontphoto, "idfront");
-						eErrBack = GetPngBlobEx(ctx->Ans.backphoto, "idback", true);
-						if (eErrFront == Error_Succeed && eErrBack == Error_Succeed)
+						m_ullBeginTime = SP::Module::Comm::RVCGetTickCount();
+						eErr = m_hDevHelper->ScanIDAndSaveImage();
+						m_ullEndTime = SP::Module::Comm::RVCGetTickCount();
+						if (eErr == Error_Succeed)
 						{
-							ctx->Ans.hasscan = 1;
-#ifdef RVC_OS_WIN
-							if (!closeImgCheck)
-							{
-								ImgChekTask* frontImgCheck = new ImgChekTask(this);
-								frontImgCheck->idNum =/* ctx->Ans.idcode_utf8.m_pData*/gbkIDcode;
-								frontImgCheck->inName = /*ctx->Ans.name_utf8.m_pData*/gbkName;
-								frontImgCheck->inNationality = /*ctx->Ans.nationality_utf8.m_pData*/gbkNationality;
-								frontImgCheck->inIdType = /*ctx->Ans.idtype_utf8.m_pData*/gbkIDtype;
-								frontImgCheck->imgInput = ctx->Ans.frontphoto;
-								frontImgCheck->imgType = "正面";
-								GetEntityBase()->GetFunction()->PostThreadPoolTask(frontImgCheck);
-
-								ImgChekTask* backImgCheck = new ImgChekTask(this);
-								backImgCheck->idNum = /*ctx->Ans.idcode_utf8.m_pData*/gbkIDcode;
-								backImgCheck->inName = /*ctx->Ans.name_utf8.m_pData*/gbkName;
-								backImgCheck->inNationality = /*ctx->Ans.nationality_utf8.m_pData*/gbkNationality;
-								backImgCheck->inIdType = /*ctx->Ans.idtype_utf8.m_pData*/gbkIDtype;
-								backImgCheck->imgInput = ctx->Ans.backphoto;
-								frontImgCheck->imgType = "背面";
-								GetEntityBase()->GetFunction()->PostThreadPoolTask(backImgCheck);
-							}
-#endif
+							DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ScanIDAndSaveImage").setCostTime(m_ullEndTime - m_ullBeginTime)
+								("ReadAndScanUTF8 ScanIDAndSaveImage succeed.");
 						}
 						else
 						{
-							if (igestionVer == TRUE)
+							if (eErr != Error_NotImpl)
+								SetErrorAndLog(eErr, MEC_DEVAPI_IDCER_ScanIDAndSaveImage, "DevAdapter::ScanIDAndSaveImage", __FUNCTION__,
+									false, m_ullEndTime - m_ullBeginTime, IDCertService_LogCode_ReadAndScanUTF8);
+						}
+
+						if (eErr == Error_Succeed)
+						{
+							transImgMsg.Clear();
+
+							//idfront.bmp" and "idback.bmp
+							ErrorCodeEnum eErrFront, eErrBack;
+							eErrFront = GetPngBlobEx(ctx->Ans.frontphoto, "idfront");
+							eErrBack = GetPngBlobEx(ctx->Ans.backphoto, "idback", true);
+							if (eErrFront == Error_Succeed && eErrBack == Error_Succeed)
+							{
+								ctx->Ans.hasscan = 1;
+#ifdef RVC_OS_WIN
+								if (!closeImgCheck)
+								{
+									ImgChekTask* frontImgCheck = new ImgChekTask(this);
+									frontImgCheck->idNum =/* ctx->Ans.idcode_utf8.m_pData*/gbkIDcode;
+									frontImgCheck->inName = /*ctx->Ans.name_utf8.m_pData*/gbkName;
+									frontImgCheck->inNationality = /*ctx->Ans.nationality_utf8.m_pData*/gbkNationality;
+									frontImgCheck->inIdType = /*ctx->Ans.idtype_utf8.m_pData*/gbkIDtype;
+									frontImgCheck->imgInput = ctx->Ans.frontphoto;
+									frontImgCheck->imgType = "正面";
+									GetEntityBase()->GetFunction()->PostThreadPoolTask(frontImgCheck);
+
+									ImgChekTask* backImgCheck = new ImgChekTask(this);
+									backImgCheck->idNum = /*ctx->Ans.idcode_utf8.m_pData*/gbkIDcode;
+									backImgCheck->inName = /*ctx->Ans.name_utf8.m_pData*/gbkName;
+									backImgCheck->inNationality = /*ctx->Ans.nationality_utf8.m_pData*/gbkNationality;
+									backImgCheck->inIdType = /*ctx->Ans.idtype_utf8.m_pData*/gbkIDtype;
+									backImgCheck->imgInput = ctx->Ans.backphoto;
+									frontImgCheck->imgType = "背面";
+									GetEntityBase()->GetFunction()->PostThreadPoolTask(backImgCheck);
+								}
+#endif
+							}
+							else
 							{
 								CSimpleStringA warnMsg = "ScanIDAndSaveImage() suc. But GetPngBlobEx() failed.";
 								if (transImgMsg.GetLength() != 0)
@@ -874,7 +876,6 @@ int CIDCertFSM::ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCe
 							}
 						}
 					}
-					GetPngBlobEx(ctx->Ans.headphoto, "zp");
 
 #ifdef RVC_OS_WIN
 					CSimpleStringA csIDLogInfo = CSimpleStringA::Format("IDNo:%s****%s"
@@ -945,11 +946,13 @@ int CIDCertFSM::ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCe
 					{
 						SetErrorAndLog(errEject, MEC_DEVAPI_IDCER_ForceIDEject, "DevAdapter::ForceIDEject", __FUNCTION__,
 							false, m_ullEndTime - m_ullBeginTime);
+
+						CheckEjectCardRes();
 					}
 				}
 				else
 				{
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::IDCerRFControl").setCostTime(m_ullEndTime - m_ullBeginTime)("exec IDCerRFControl succ.");
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::CloseIDCerRFControl").setCostTime(m_ullEndTime - m_ullBeginTime)("exec IDCerRFControl succ.");
 				}
 				break;
 			case 0:
@@ -994,7 +997,7 @@ int CIDCertFSM::ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCe
 		if (errRf != Error_Succeed)
 		{
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("exec IDCerRFControl(false) failed, force eject...");
-			SetErrorAndLog(errRf, MEC_DEVAPI_IDCER_IDCerRFControl, "DevAdapter::IDCerRFControl", __FUNCTION__,
+			SetErrorAndLog(errRf, MEC_DEVAPI_IDCER_IDCerRFControl, "DevAdapter::CloseIDCerRFControl", __FUNCTION__,
 				false, m_ullEndTime - m_ullBeginTime, IDCertService_LogCode_ReadAndScanUTF8);
 			m_ullBeginTime = SP::Module::Comm::RVCGetTickCount();
 			ErrorCodeEnum errEject = m_hDevHelper->ForceIDEject();
@@ -1006,11 +1009,13 @@ int CIDCertFSM::ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCe
 			{
 				SetErrorAndLog(errEject, MEC_DEVAPI_IDCER_ForceIDEject, "DevAdapter::ForceIDEject", __FUNCTION__,
 					false, m_ullEndTime - m_ullBeginTime, IDCertService_LogCode_ReadAndScanUTF8);
+				
+				CheckEjectCardRes();
 			}
 		}
 		else
 		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::IDCerRFControl").setCostTime(m_ullEndTime - m_ullBeginTime)("Close RF again succ.");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::CloseIDCerRFControl").setCostTime(m_ullEndTime - m_ullBeginTime)("Close RF again succ.");
 		}
 	}
 
@@ -1037,7 +1042,7 @@ int CIDCertFSM::ReadAndScanUTF8(SpReqAnsContext<IDCert_ReadAndScanUTF8_Req, IDCe
 		}
 		else if (!bOpenRF)
 		{
-			SetErrorAndLog(errRfOpen, MEC_DEVAPI_IDCER_IDCerRFControl, "DevAdapter::IDCerRFControl", __FUNCTION__,
+			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));
 
@@ -1139,8 +1144,8 @@ int CIDCertFSM::ReadAndScanUTF8JS(SpReqAnsContext<IDCert_ReadAndScanUTF8JS_Req,
 			m_ullBeginTime = SP::Module::Comm::RVCGetTickCount();
 			errRfOpen = m_hDevHelper->IDCerRFControl(true);
 			m_ullEndTime = SP::Module::Comm::RVCGetTickCount();
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::IDCerRFControl").setCostTime(m_ullEndTime - m_ullBeginTime)
-				("RreadAndScanUTF8JS DevAdapter::IDCerRFControl");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::OpenIDCerRFControl").setCostTime(m_ullEndTime - m_ullBeginTime)
+				("RreadAndScanUTF8JS DevAdapter::OpenIDCerRFControl");
 			if (Error_Succeed == errRfOpen)
 			{
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("open rf succeed.");
@@ -1359,63 +1364,61 @@ int CIDCertFSM::ReadAndScanUTF8JS(SpReqAnsContext<IDCert_ReadAndScanUTF8JS_Req,
 					memcpy(ctx->Ans.reserved_utf8.m_pData, reserved, strlen((char*)reserved)); //新外国人永居证关联字段
 					memcpy(ctx->Ans.othercode_utf8.m_pData, englishNameEx, strlen((char*)englishNameEx)); //英文名备用字段
 
-					m_ullBeginTime = SP::Module::Comm::RVCGetTickCount();
-					eErr = m_hDevHelper->ScanIDAndSaveImage();
-					m_ullEndTime = SP::Module::Comm::RVCGetTickCount();
-					if (eErr == Error_Succeed)
-					{
-						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ScanIDAndSaveImage").setCostTime(m_ullEndTime - m_ullBeginTime)
-							("ReadAndScanUTF8JS ScanIDAndSaveImage succeed.");
-					}
-					else
-					{
-						SetErrorAndLog(eErr, MEC_DEVAPI_IDCER_ScanIDAndSaveImage, "DevAdapter::ScanIDAndSaveImage", __FUNCTION__,
-							false, m_ullEndTime - m_ullBeginTime, IDCertService_LogCode_ReadAndScanUTF8JS);
-
-						DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ScanIDAndSaveImage")
-							.setCostTime(m_ullEndTime - m_ullBeginTime)
-							.setResultCode("RTA210C")
-							("ReadAndScanUTF8JS::ScanIDAndSaveImage failed with errCode 0x%x", eErr);
-					}
 					ctx->Ans.hasscan = 0;
+					GetPngBlobEx(ctx->Ans.headphoto, "zp", true); //转换头像图片
 
-					if (eErr == Error_Succeed)
+					if (igestionVer == TRUE)//吸入式设备才调用正反扫描功能
 					{
-						transImgMsg.Clear();
-
-						//idfront.bmp" and "idback.bmp
-						ErrorCodeEnum eErrFront, eErrBack;
-						eErrFront = GetPngBlobEx(ctx->Ans.frontphoto, "idfront");
-						eErrBack = GetPngBlobEx(ctx->Ans.backphoto, "idback", true);
-						if (eErrFront == Error_Succeed && eErrBack == Error_Succeed)
+						m_ullBeginTime = SP::Module::Comm::RVCGetTickCount();
+						eErr = m_hDevHelper->ScanIDAndSaveImage();
+						m_ullEndTime = SP::Module::Comm::RVCGetTickCount();
+						if (eErr == Error_Succeed)
 						{
-							ctx->Ans.hasscan = 1;
-#ifdef RVC_OS_WIN
-							if (!closeImgCheck)
-							{
-								ImgChekTask* frontImgCheck = new ImgChekTask(this);
-								frontImgCheck->idNum =/* ctx->Ans.idcode_utf8.m_pData*/gbkIDcode;
-								frontImgCheck->inName = /*ctx->Ans.name_utf8.m_pData*/gbkName;
-								frontImgCheck->inNationality = /*ctx->Ans.nationality_utf8.m_pData*/gbkNationality;
-								frontImgCheck->inIdType = /*ctx->Ans.idtype_utf8.m_pData*/gbkIDtype;
-								frontImgCheck->imgInput = ctx->Ans.frontphoto;
-								frontImgCheck->imgType = "正面";
-								GetEntityBase()->GetFunction()->PostThreadPoolTask(frontImgCheck);
-
-								ImgChekTask* backImgCheck = new ImgChekTask(this);
-								backImgCheck->idNum = /*ctx->Ans.idcode_utf8.m_pData*/gbkIDcode;
-								backImgCheck->inName = /*ctx->Ans.name_utf8.m_pData*/gbkName;
-								backImgCheck->inNationality = /*ctx->Ans.nationality_utf8.m_pData*/gbkNationality;
-								backImgCheck->inIdType = /*ctx->Ans.idtype_utf8.m_pData*/gbkIDtype;
-								backImgCheck->imgInput = ctx->Ans.backphoto;
-								frontImgCheck->imgType = "背面";
-								GetEntityBase()->GetFunction()->PostThreadPoolTask(backImgCheck);
-							}
-#endif
+							DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ScanIDAndSaveImage").setCostTime(m_ullEndTime - m_ullBeginTime)
+								("ReadAndScanUTF8JS ScanIDAndSaveImage succeed.");
 						}
 						else
 						{
-							if (igestionVer == TRUE)
+							if(eErr != Error_NotImpl)
+							SetErrorAndLog(eErr, MEC_DEVAPI_IDCER_ScanIDAndSaveImage, "DevAdapter::ScanIDAndSaveImage", __FUNCTION__,
+								false, m_ullEndTime - m_ullBeginTime, IDCertService_LogCode_ReadAndScanUTF8JS);
+						}
+
+						if (eErr == Error_Succeed)
+						{
+							transImgMsg.Clear();
+
+							//idfront.bmp" and "idback.bmp
+							ErrorCodeEnum eErrFront, eErrBack;
+							eErrFront = GetPngBlobEx(ctx->Ans.frontphoto, "idfront");
+							eErrBack = GetPngBlobEx(ctx->Ans.backphoto, "idback", true);
+							if (eErrFront == Error_Succeed && eErrBack == Error_Succeed)
+							{
+								ctx->Ans.hasscan = 1;
+#ifdef RVC_OS_WIN
+								if (!closeImgCheck)
+								{
+									ImgChekTask* frontImgCheck = new ImgChekTask(this);
+									frontImgCheck->idNum =/* ctx->Ans.idcode_utf8.m_pData*/gbkIDcode;
+									frontImgCheck->inName = /*ctx->Ans.name_utf8.m_pData*/gbkName;
+									frontImgCheck->inNationality = /*ctx->Ans.nationality_utf8.m_pData*/gbkNationality;
+									frontImgCheck->inIdType = /*ctx->Ans.idtype_utf8.m_pData*/gbkIDtype;
+									frontImgCheck->imgInput = ctx->Ans.frontphoto;
+									frontImgCheck->imgType = "正面";
+									GetEntityBase()->GetFunction()->PostThreadPoolTask(frontImgCheck);
+
+									ImgChekTask* backImgCheck = new ImgChekTask(this);
+									backImgCheck->idNum = /*ctx->Ans.idcode_utf8.m_pData*/gbkIDcode;
+									backImgCheck->inName = /*ctx->Ans.name_utf8.m_pData*/gbkName;
+									backImgCheck->inNationality = /*ctx->Ans.nationality_utf8.m_pData*/gbkNationality;
+									backImgCheck->inIdType = /*ctx->Ans.idtype_utf8.m_pData*/gbkIDtype;
+									backImgCheck->imgInput = ctx->Ans.backphoto;
+									frontImgCheck->imgType = "背面";
+									GetEntityBase()->GetFunction()->PostThreadPoolTask(backImgCheck);
+								}
+#endif
+							}
+							else
 							{
 								CSimpleStringA warnMsg = "ScanIDAndSaveImage() suc. But GetPngBlobEx() failed.";
 								if (transImgMsg.GetLength() != 0)
@@ -1427,7 +1430,6 @@ int CIDCertFSM::ReadAndScanUTF8JS(SpReqAnsContext<IDCert_ReadAndScanUTF8JS_Req,
 							}
 						}
 					}
-					GetPngBlobEx(ctx->Ans.headphoto, "zp", true);
 
 #ifdef RVC_OS_WIN
 					CSimpleStringA csIDLogInfo = CSimpleStringA::Format("IDNo:%s****%s"
@@ -1459,7 +1461,7 @@ int CIDCertFSM::ReadAndScanUTF8JS(SpReqAnsContext<IDCert_ReadAndScanUTF8JS_Req,
 
 	if (!m_bExit && !bOpenRF && errRfOpen != Error_Succeed)
 	{
-		SetErrorAndLog(errRfOpen, MEC_DEVAPI_IDCER_IDCerRFControl, "DevAdapter::IDCerRFControl", __FUNCTION__,
+		SetErrorAndLog(errRfOpen, MEC_DEVAPI_IDCER_IDCerRFControl, "DevAdapter::OpenIDCerRFControl", __FUNCTION__,
 			true, m_ullEndTime - m_ullBeginTime, IDCertService_LogCode_ReadAndScanUTF8JS);
 
 		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)
@@ -1496,7 +1498,7 @@ int CIDCertFSM::ReadAndScanUTF8JS(SpReqAnsContext<IDCert_ReadAndScanUTF8JS_Req,
 				if (eErr1 != Error_Succeed)
 				{
 					DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("exec IDCerRFControl(false) failed, force eject...");
-					SetErrorAndLog(eErr1, MEC_DEVAPI_IDCER_IDCerRFControl, "DevAdapter::IDCerRFControl", __FUNCTION__,
+					SetErrorAndLog(eErr1, MEC_DEVAPI_IDCER_IDCerRFControl, "DevAdapter::CloseIDCerRFControl", __FUNCTION__,
 						false, m_ullEndTime - m_ullBeginTime);
 					m_ullBeginTime = SP::Module::Comm::RVCGetTickCount();
 					ErrorCodeEnum errEject = m_hDevHelper->ForceIDEject();
@@ -1511,7 +1513,7 @@ int CIDCertFSM::ReadAndScanUTF8JS(SpReqAnsContext<IDCert_ReadAndScanUTF8JS_Req,
 				}
 				else
 				{
-					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::IDCerRFControl").setCostTime(m_ullEndTime - m_ullBeginTime)("exec IDCerRFControl succ.");
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::CloseIDCerRFControl").setCostTime(m_ullEndTime - m_ullBeginTime)("exec IDCerRFControl succ.");
 				}
 				break;
 			case 0:
@@ -1562,7 +1564,7 @@ int CIDCertFSM::ReadAndScanUTF8JS(SpReqAnsContext<IDCert_ReadAndScanUTF8JS_Req,
 		if (errRfClose != Error_Succeed)
 		{
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("exec IDCerRFControl(false) failed, force eject...");
-			SetErrorAndLog(errRfClose, MEC_DEVAPI_IDCER_IDCerRFControl, "DevAdapter::IDCerRFControl", __FUNCTION__,
+			SetErrorAndLog(errRfClose, MEC_DEVAPI_IDCER_IDCerRFControl, "DevAdapter::CloseIDCerRFControl", __FUNCTION__,
 				false, m_ullEndTime - m_ullBeginTime, IDCertService_LogCode_ReadAndScanUTF8JS);
 
 			m_ullBeginTime = SP::Module::Comm::RVCGetTickCount();
@@ -1579,7 +1581,7 @@ int CIDCertFSM::ReadAndScanUTF8JS(SpReqAnsContext<IDCert_ReadAndScanUTF8JS_Req,
 		}
 		else
 		{
-			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::IDCerRFControl").setCostTime(m_ullEndTime - m_ullBeginTime)("Close RF again succ.");
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::CloseIDCerRFControl").setCostTime(m_ullEndTime - m_ullBeginTime)("Close RF again succ.");
 		}
 	}
 
@@ -1605,7 +1607,7 @@ int CIDCertFSM::ReadAndScanUTF8JS(SpReqAnsContext<IDCert_ReadAndScanUTF8JS_Req,
 		}
 		else if (!bOpenRF)
 		{
-			SetErrorAndLog(errRfOpen, MEC_DEVAPI_IDCER_IDCerRFControl, "DevAdapter::IDCerRFControl", __FUNCTION__,
+			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));
 
@@ -2256,6 +2258,48 @@ void CIDCertFSM::CheckHanZi(UINT16* ucs2_code)
 	}
 }
 
+void CIDCertFSM::CheckEjectCardRes() 
+{
+	int pos = 99;
+	m_ullBeginTime = SP::Module::Comm::RVCGetTickCount();
+	ErrorCodeEnum posErr = m_hDevHelper->QueryCardPos(pos);
+	m_ullEndTime = SP::Module::Comm::RVCGetTickCount();
+
+	if (posErr == Error_Succeed)
+	{
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::QueryCardPos")
+			.setCostTime(m_ullEndTime - m_ullBeginTime)
+			("ForceEject fail, Check card pos suc, pos : %d", pos);
+
+		CSimpleStringA warnMsg = CSimpleStringA::Format("ForceEject return failed. Check Card pos = %d.", pos);
+		switch (pos)
+		{
+		case 0:
+			LogWarn(Severity_Middle, Error_Succeed,
+				IDCertificate_UserErrorCode_EjectCardRes_Pos_0, warnMsg.GetData());
+			break;
+		case 1:
+			LogWarn(Severity_Middle, Error_Succeed,
+				IDCertificate_UserErrorCode_EjectCardRes_Pos_1, warnMsg.GetData());
+			break;
+		case 2:
+			LogWarn(Severity_Middle, Error_Succeed,
+				IDCertificate_UserErrorCode_EjectCardRes_Pos_2, warnMsg.GetData());
+			break;
+		default:
+			break;
+		}
+
+	}
+	else
+	{
+		SetErrorAndLog(posErr, MEC_DEVAPI_IDCER_QueryCardPos, "DevAdapter::QueryCardPos", __FUNCTION__,
+			false, m_ullEndTime - m_ullBeginTime, IDCertService_LogCode_ReadAndScanUTF8);
+
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ForceEject fail, Check card pos failed.", posErr);
+	}
+}
+
 #ifdef RVC_OS_WIN
 void CIDCertFSM::HttpsLogCallBack(const char* logtxt)
 {

+ 2 - 0
Module/mod_IDCertificate/IDCertFSM.h

@@ -277,6 +277,8 @@ private:
 	int GetUCS2ByteLength(UINT16* ucs2_code);
 	void CheckHanZi(UINT16* ucs2_code);
 
+	void CheckEjectCardRes(); //退卡情况收集,cjl-2024.11.21
+
 public:
 		std::string checkImgURL;
 private:

+ 5 - 0
Module/mod_IDCertificate/IDCertificate_UserErrorCode.h

@@ -25,6 +25,11 @@
 #define IDCertificate_UserErrorCode_ReadAndScan_NotOnReading	0x2010021f //实体不在读证状态
 #define IDCertificate_UserErrorCode_FindFile_in_DepBak			0x20100220 //旧dep目录下获取到厂商文件
 
+#define IDCertificate_UserErrorCode_EjectCardRes_Pos_0		0x20100230 //退卡结果-位置0:被取走
+#define IDCertificate_UserErrorCode_EjectCardRes_Pos_1		0x20100231 //退卡结果-位置1:读卡器内
+#define IDCertificate_UserErrorCode_EjectCardRes_Pos_2		0x20100232 //退卡结果-位置2:读卡口,未被取走
+
+
 
 //#define IDCertificate_UserErrorCode_Real_Root_Config		(IDCertificate_UserErrorCode_Start + 31) //加载实际的root配置