Ver Fonte

Z991239-6454 #comment feat: 异常处理优化

oilyang há 4 meses atrás
pai
commit
956f60bdb8

+ 63 - 146
Module/mod_CardIssuerStand/CardIssuerStandFSM.cpp

@@ -57,14 +57,13 @@ const int MAX_RESET_TIMES_PERIOD = 0;//oiltmp configure to ini file?
 
 const int READ_TRY_INTERVAL = 300;
 const int INIT_TRY_NUM = 1;
-const int ACCEPT_TRY_INTERVAL = 500;
+const int ACCEPT_TRY_INTERVAL = 200;
 const int ACCEPT_TRY_NUM = 110;
 
 class CCardIssuerEntity;
 void CCardIssuerFSM::s0_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 0;
 	SetDevState(DEVICE_STATUS_NOT_READY);
 	FSMEvent* e;
 	e = new FSMEvent(USER_EVT_INIT);
@@ -103,7 +102,6 @@ unsigned int CCardIssuerFSM::s0_on_event(FSMEvent* pEvt)
 void CCardIssuerFSM::s1_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 1;
 }
 void CCardIssuerFSM::s1_on_exit()
 {
@@ -132,7 +130,6 @@ unsigned int CCardIssuerFSM::s1_on_event(FSMEvent* event)
 void CCardIssuerFSM::s2_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 2;
 	SetDevState(DEVICE_STATUS_NORMAL);
 	
 	m_resetTimes = 0;
@@ -184,20 +181,6 @@ unsigned int CCardIssuerFSM::s2_on_event(FSMEvent* pEvt)
 		pEvt->SetHandled();
 	}
 		break;
-	case USER_EVT_EXIT:
-	case EVT_MAINPAGE_DISPLAY:
-	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("receive event of enter to main page");
-		m_captureReason = "4001";
-		m_bExit = true;
-		pEvt->SetHandled();
-		if (!m_bDoExit) {
-			SetDoExitFlag(true);
-			DoExitWhenIdleTask* task = new DoExitWhenIdleTask(this);
-			GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
-		}
-	}
-		break;
 	case USER_EVT_QUIT:
 		pEvt->SetHandled();
 		break;
@@ -333,19 +316,6 @@ unsigned int CCardIssuerFSM::s2_on_event(FSMEvent* pEvt)
 		}
 	}
 		break;
-	case USER_EVT_PREONLINE:
-	{
-		pEvt->SetHandled();
-		PreOnlineEvent* poe = dynamic_cast<PreOnlineEvent*>(pEvt);
-		if (poe->ctx->Req.reserved1.GetLength() > 0 && _strnicmp("kaku#", (const char*)poe->ctx->Req.reserved1, 5) == 0)
-		{
-			PreOnlineTask* task = new PreOnlineTask(this);
-			task->ctx = poe->ctx;
-			GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
-			ret = 16;
-		}
-		break;
-	}
 	case USER_EVT_JS_INSERT:
 	{
 		InsertJSEvent* ise = dynamic_cast<InsertJSEvent*>(pEvt);
@@ -366,15 +336,6 @@ unsigned int CCardIssuerFSM::s2_on_event(FSMEvent* pEvt)
 		pEvt->SetHandled();
 	}
 		break;
-	case USER_EVT_JS_CAPTURE:
-	{
-		CaptureJSEvent* cje = dynamic_cast<CaptureJSEvent*>(pEvt);
-		CaptureJSTask* task = new CaptureJSTask(this);
-		task->ctx = cje->ctx;
-		GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
-		pEvt->SetHandled();
-	}
-		break;
 	default:
 		FSMEventDefaultProcess(pEvt, CardIssuer_UserErrorCode_PROCESS_IDLE);
 		break;
@@ -385,7 +346,7 @@ unsigned int CCardIssuerFSM::s2_on_event(FSMEvent* pEvt)
 void CCardIssuerFSM::s3_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 3;
+	m_bMainPageWhileWorking = false;
 }
 void CCardIssuerFSM::s3_on_exit()
 {
@@ -420,11 +381,6 @@ unsigned int CCardIssuerFSM::s3_on_event(FSMEvent* pEvt)
 		pEvt->SetHandled();
 		ret = 3;
 		break;
-	case USER_EVT_EXIT:
-		m_captureReason = "4001";
-		m_bExit = true;
-		pEvt->SetHandled();
-		break;
 	case USER_EVT_QUIT:
 		pEvt->SetHandled();
 		break;
@@ -453,9 +409,10 @@ unsigned int CCardIssuerFSM::s3_on_event(FSMEvent* pEvt)
 		break;
 	case EVT_MAINPAGE_DISPLAY:
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("receive event of enter to main page");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("accepting...receive event of enter to main page");
 		m_captureReason = "4001";
 		m_bExit = true;
+		m_bMainPageWhileWorking = true;
 		pEvt->SetHandled();
 		ret = 0;
 	}
@@ -470,7 +427,11 @@ unsigned int CCardIssuerFSM::s3_on_event(FSMEvent* pEvt)
 void CCardIssuerFSM::s4_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 4;
+	if (m_bMainPageWhileWorking)
+	{
+		DoCheckCardTask* pTask = new DoCheckCardTask(this, CheckCard_OnMainPage);
+		GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
+	}
 }
 void CCardIssuerFSM::s4_on_exit()
 {
@@ -517,7 +478,7 @@ unsigned int CCardIssuerFSM::s4_on_event(FSMEvent* pEvt)
 				pEvt->SetHandled();
 				return 0;
 			}
-		case USER_EVT_JS_EXIT_MIAN_PAGE:
+		case EVT_MAINPAGE_DISPLAY:
 			{
 				if (m_issueStatus) {
 					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("S4 receive exception exit to main page, begin capture card");
@@ -576,31 +537,8 @@ unsigned int CCardIssuerFSM::s4_on_event(FSMEvent* pEvt)
 				m_captureReason = "4019";
 				return 0;
 			}
-		case USER_EVT_EXIT:
 		case USER_EVT_EJECT:
-		case USER_EVT_ACCEPT:
-		case USER_EVT_ACCEPT_CANCEL:
 			{
-				if (pEvt->iEvt == USER_EVT_ACCEPT)
-				{
-					CardAcceptEvent *cae = dynamic_cast<CardAcceptEvent*>(pEvt);
-					CaptureTask *task=  new CaptureTask(this);
-					task->ctx = NULL;
-					GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
-					pEvt->SetHandled();
-					cae->ctx->Answer(Error_Duplication);
-					return 0;
-				}
-				if ((pEvt->iEvt == USER_EVT_EXIT) && m_issueStatus)
-				{				
-					m_captureReason = "4001";
-					CardCaptureEvent *cce = dynamic_cast<CardCaptureEvent*>(pEvt);
-					CaptureTask *task=  new CaptureTask(this);
-					task->ctx = NULL;
-					GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
-					pEvt->SetHandled();
-					return 1;
-				}
 				CardEjectEvent *cee;
 				if (pEvt->iEvt == USER_EVT_EJECT)
 					cee = dynamic_cast<CardEjectEvent*>(pEvt);
@@ -764,6 +702,8 @@ unsigned int CCardIssuerFSM::s4_on_event(FSMEvent* pEvt)
 		case USER_EVT_ISSUE_EX_FINISHED:
 			pEvt->SetHandled();
 			return pEvt->param1;
+		case USER_EVT_CHECK_CARD_FINISHED:
+			return pEvt->param1;
 		default:
 			FSMEventDefaultProcess(pEvt, CardIssuer_UserErrorCode_PROCESS_HOLD);
 			break;
@@ -774,7 +714,7 @@ unsigned int CCardIssuerFSM::s4_on_event(FSMEvent* pEvt)
 void CCardIssuerFSM::s5_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 5;
+	m_bMainPageWhileWorking = false;
 }
 void CCardIssuerFSM::s5_on_exit()
 {
@@ -809,10 +749,11 @@ unsigned int CCardIssuerFSM::s5_on_event(FSMEvent* pEvt)
 			}
 		}
 		break;
-	case USER_EVT_EXIT:
+	case EVT_MAINPAGE_DISPLAY:
 		{
 			pEvt->SetHandled();
 			m_captureReason = "4001";
+			m_bMainPageWhileWorking = true;
 		}
 		break;
 	case USER_EVT_QUIT:
@@ -830,7 +771,6 @@ unsigned int CCardIssuerFSM::s5_on_event(FSMEvent* pEvt)
 void CCardIssuerFSM::s6_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 6;
 }
 void CCardIssuerFSM::s6_on_exit()
 {
@@ -878,7 +818,6 @@ unsigned int CCardIssuerFSM::s6_on_event(FSMEvent* pEvt)
 void CCardIssuerFSM::s7_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 7;
 	WaitFetchingTask* task = new WaitFetchingTask(this);
 	GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
 }
@@ -1068,7 +1007,6 @@ unsigned int CCardIssuerFSM::s7_on_event(FSMEvent* pEvt)
 void CCardIssuerFSM::s8_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 8;
 }
 void CCardIssuerFSM::s8_on_exit()
 {
@@ -1103,7 +1041,7 @@ unsigned int CCardIssuerFSM::s8_on_event(FSMEvent* pEvt)
 		return 0;
 	}
 	default:
-		FSMEventDefaultProcess(pEvt, CardIssuer_UserErrorCode_PROCESS_FAULT);
+		FSMEventDefaultProcess(pEvt, CardIssuer_UserErrorCode_PROCESS_CAPTURE);
 		break;
 	}
 	return 0;
@@ -1112,12 +1050,14 @@ unsigned int CCardIssuerFSM::s8_on_event(FSMEvent* pEvt)
 void CCardIssuerFSM::s9_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 9;
-	SetDevState(DEVICE_STATUS_FAULT);
 	if (GetDevInitFlag())
 	{
-		QueryCardPosTask* pTask = new QueryCardPosTask(this);
-		ErrorCodeEnum err = GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
+		DoCheckCardTask* pTask = NULL;
+		if (m_iInWhatPage == PageType_MainPage)
+			pTask = new DoCheckCardTask(this, CheckCard_OnMainPage);
+		else
+			pTask = new DoCheckCardTask(this, CheckCard_OnFail);
+		GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
 	}
 }
 void CCardIssuerFSM::s9_on_exit()
@@ -1132,7 +1072,7 @@ unsigned int CCardIssuerFSM::s9_on_event(FSMEvent* pEvt)
 	case USER_EVT_QUIT:
 		pEvt->SetHandled();
 		return 0;
-	case USER_EVT_QUERY_CARD_POS_FINISHED:
+	case USER_EVT_CHECK_CARD_FINISHED:
 		return pEvt->param1;
 	case USER_EVT_ACCEPT_CANCEL:
 		m_bCancelAccept = true;
@@ -1149,7 +1089,7 @@ unsigned int CCardIssuerFSM::s9_on_event(FSMEvent* pEvt)
 void CCardIssuerFSM::s10_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 10;
+	m_bMainPageWhileWorking = false;
 }
 void CCardIssuerFSM::s10_on_exit()
 {
@@ -1169,25 +1109,15 @@ unsigned int CCardIssuerFSM::s10_on_event(FSMEvent* pEvt)
 		pEvt->SetHandled();
 		ret = pEvt->param1;
 		break;
-	case USER_EVT_EXIT:
+	case EVT_MAINPAGE_DISPLAY:
 		pEvt->SetHandled();
 		m_captureReason = "4001";
 		m_bIssuingExit = true;
+		m_bMainPageWhileWorking = true;
 		break;
 	case USER_EVT_ACCEPT_CANCEL:
 		pEvt->SetHandled();
 		break;
-	case USER_EVT_PREONLINE:
-	{
-		pEvt->SetHandled();
-		if (pEvt->iEvt == USER_EVT_PREONLINE)
-		{
-			PreOnlineEvent* poe = dynamic_cast<PreOnlineEvent*>(pEvt);
-			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR040220327").setResultCode("RTA230Q")("卡库正在被其他机器跨机使用中");
-			poe->ctx->Answer(Error_Duplication);
-		}
-	}
-		break;
 	default:
 		FSMEventDefaultProcess(pEvt, CardIssuer_UserErrorCode_PROCESS_ISSUE);
 		break;
@@ -1198,15 +1128,10 @@ unsigned int CCardIssuerFSM::s10_on_event(FSMEvent* pEvt)
 void CCardIssuerFSM::s11_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 15;
-	m_bReturnMainPage = false;
+	m_bMainPageWhileWorking = false;
 }
 void CCardIssuerFSM::s11_on_exit()
 {
-	if (m_bReturnMainPage) {
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("S15 exit, send exit main page event");
-		this->PostEventFIFO(new FSMEvent(USER_EVT_JS_EXIT_MIAN_PAGE));
-	}
 	LOG_FUNCTION();
 }
 unsigned int CCardIssuerFSM::s11_on_event(FSMEvent* pEvt)
@@ -1234,10 +1159,10 @@ unsigned int CCardIssuerFSM::s11_on_event(FSMEvent* pEvt)
 	break;
 	case EVT_MAINPAGE_DISPLAY:
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("receive event of enter to main page");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ReadJSing...receive event of enter to main page");
 		pEvt->SetHandled();
 		m_captureReason = "4001";
-		m_bReturnMainPage = true;
+		m_bMainPageWhileWorking = true;
 		ret = 0;
 	}
 	break;
@@ -1251,8 +1176,7 @@ unsigned int CCardIssuerFSM::s11_on_event(FSMEvent* pEvt)
 void CCardIssuerFSM::s12_on_entry()
 {
 	LOG_FUNCTION();
-	m_currentFSMState = 16;
-	m_bReturnMainPage = false;
+	m_bMainPageWhileWorking = false;
 }
 void CCardIssuerFSM::s12_on_exit()
 {
@@ -1260,7 +1184,7 @@ void CCardIssuerFSM::s12_on_exit()
 }
 unsigned int CCardIssuerFSM::s12_on_event(FSMEvent* pEvt)
 {
-	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("s16 evt (%d,%d)", pEvt->iEvt, pEvt->param1));
+	DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("evt (%d,%d)", pEvt->iEvt, pEvt->param1));
 	int ret = 0;
 	switch (pEvt->iEvt)
 	{
@@ -1271,24 +1195,15 @@ unsigned int CCardIssuerFSM::s12_on_event(FSMEvent* pEvt)
 		if (ret == 2) {
 		}
 		else if (ret == 1) {
-			if (m_bReturnMainPage) {
-				
-				CaptureJSEvent* cje = dynamic_cast<CaptureJSEvent*>(pEvt);
-				CaptureJSTask* task = new CaptureJSTask(this);
-				task->ctx = NULL;
-				GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
-				pEvt->SetHandled();
-				ret = 3;
-			}
 		}
 	}
 	break;
 	case EVT_MAINPAGE_DISPLAY:
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("receive event of enter to main page");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("IssueJSing...receive event of enter to main page");
 		pEvt->SetHandled();
 		m_captureReason = "4001";
-		m_bReturnMainPage = true;
+		m_bMainPageWhileWorking = true;
 	}
 	break;
 	default:
@@ -1693,12 +1608,13 @@ ErrorCodeEnum CCardIssuerFSM::OpenDevice(BYTE btOpenType, const char* pDevSN)
 		spConfig->WriteConfigValueInt("1", "CardPercent", m_CardPercentEx[0]);
 		spEntityFunction->OpenConfig(Config_CenterSetting, spConfigCS);
 
-		int tmpCardnoMismatch = 0, tmpICRetryTimes = 1, tmpStopUseRF = 0;
+		int tmpCardnoMismatch = 0, tmpICRetryTimes = 1, tmpStopUseRF = 0, tmpCheckInterval = 200;
 
 		spConfigCS->ReadConfigValueInt(GetEntityBase()->GetEntityName(), "EacQueryFlag", m_eacQueryFlag);
 		spConfigCS->ReadConfigValueInt(GetEntityBase()->GetEntityName(), "UseCardnoMismatch", tmpCardnoMismatch);
 		spConfigCS->ReadConfigValueInt(GetEntityBase()->GetEntityName(), "ICRetryTimes", tmpICRetryTimes);
 		spConfigCS->ReadConfigValueInt(GetEntityBase()->GetEntityName(), "StopUseRF", tmpStopUseRF);
+		spConfigCS->ReadConfigValueInt(GetEntityBase()->GetEntityName(), "CheckCardInInterval", tmpCheckInterval);
 		spConfigCS->ReadConfigValue(GetEntityBase()->GetEntityName(), "RFVendorList", m_rfVendorList);
 		spConfigCS->ReadConfigValue(GetEntityBase()->GetEntityName(), "SwallowCardUrl", m_csSwallowCardUrl);
 		spConfigCS->ReadConfigValue(GetEntityBase()->GetEntityName(), "SyncMaterialUrl", m_csSyncMaterialUrl);
@@ -1713,11 +1629,13 @@ ErrorCodeEnum CCardIssuerFSM::OpenDevice(BYTE btOpenType, const char* pDevSN)
 			m_ICRetryTimes = tmpICRetryTimes;
 		if (tmpStopUseRF == 1)
 			m_bStopUseRF = true;
+		if (tmpCheckInterval >= 100 && tmpCheckInterval <= 1000)
+			m_iCheckCardInInterval = tmpCheckInterval;
 		m_issueStatusFromFile = m_issueStatus = isIssue;
 		if (m_issueStatusFromFile == 0)
 			m_bCardFromHopper = false;
 
-		ret = CheckIfHasCardOnOpenOrMainPage();
+		ret = CheckIfHasCardOnCase(CheckCard_OnOpen);
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ret: %d, isIssue: %d, m_hasCardWhileDevOpen:%d, m_issueStatusFromFile:%d",
 			ret, isIssue, m_hasCardWhileDevOpen, m_issueStatusFromFile);
 
@@ -1778,7 +1696,7 @@ int CCardIssuerFSM::Initial()
 	return errCode;
 }
 
-int CCardIssuerFSM::CheckIfHasCardOnOpenOrMainPage()
+int CCardIssuerFSM::CheckIfHasCardOnCase(CheckCardCase eCase)
 {
 	LOG_FUNCTION();
 	ErrorCodeEnum eErr;
@@ -1789,24 +1707,25 @@ int CCardIssuerFSM::CheckIfHasCardOnOpenOrMainPage()
 		{
 		case CI_MEDIA_PRESENT:
 		{
-			m_hasCardWhileDevOpen = true;
-			JustReadCardNo();
-			CSimpleStringA preFixNo("");
-			CSimpleStringA suffixNo("");
-			if (!m_currCardNo.IsNullOrEmpty() && m_currCardNo.GetLength() > 10)
-			{
-				preFixNo = m_currCardNo.SubString(0, 6);
-				suffixNo = m_currCardNo.SubString(m_currCardNo.GetLength() - 4, 4);
-			}
+			if (eCase == CheckCard_OnOpen)
+				m_hasCardWhileDevOpen = true;
+			else if (eCase == CheckCard_OnFail)
+				return 2;
 
 			if (m_currCardNo.GetLength() > 1)
+			{
 				m_captureReason = "4014";
+			}
 			else
+			{
 				m_captureReason = "0000";
+				JustReadCardNo();
+			}
+
 			//oilyang@20230313 根据卡片异常处理沟通会议(业务、深圳开发),实体启动发现有卡,一律吞卡
 			DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402203Z01").setResultCode("RTA23A1")("非业务状态时卡机有卡片,吞卡");
-			errMsg = CSimpleStringA::Format("读卡器有卡(吞卡):%d, CardNoLength:%d, CardNo:%s****%s",
-				m_issueStatus, m_currCardNo.GetLength(), preFixNo.GetData(), suffixNo.GetData());
+			errMsg = CSimpleStringA::Format("读卡器有卡(吞卡):%d, CardNoLength:%d, CardNo:%s",m_issueStatus, m_currCardNo.GetLength()
+				, SP::Module::Util::DataMask(SP::Module::Util::DataMask_CardAccount, m_currCardNo).GetData());
 			LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_CaptureCard_EntityOnStart, errMsg.GetData());
 			return CaptureCard(NULL);
 		}
@@ -1822,9 +1741,7 @@ int CCardIssuerFSM::CheckIfHasCardOnOpenOrMainPage()
 	}
 	else
 	{
-		//DevErrorInfo devErrorInfo;
-		//m_hDevHelper->GetLastErr(devErrorInfo);
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("UnAcceptCard, GetDevStatus failed ");
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("GetDevStatus failed ");
 	}
 	return 1;
 }
@@ -2266,7 +2183,7 @@ int CCardIssuerFSM::InternalAcceptCard()
 			if (m_devStatus.eMedia == CI_MEDIA_NOTPRESENT)
 			{
 				acceptTries++;
-				Sleep(ACCEPT_TRY_INTERVAL);
+				Sleep(m_iCheckCardInInterval);
 				//oilyang@20230609 after sleep,to check if have been canceled in sleeping time
 				if (m_bCancelAccept)
 				{
@@ -2278,16 +2195,16 @@ int CCardIssuerFSM::InternalAcceptCard()
 					l_beginTime = GetTickCountRVC();
 					eErr = m_hDevHelper->SetCardInType(CI_CARD_IN_TYPE_ALL);
 					l_endTime = GetTickCountRVC();
-				}
-				if (Error_Succeed != eErr) {
-					DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("InternalAcceptCard::SetCardInType CI_CARD_IN_TYPE_ALL err");
-					SetErrorAndLog(eErr, MEC_DEVAPI_CARDISSUER_SetCardInType, "DevAdapter::SetCardInType", __FUNCTION__, IsInBusiness(), l_endTime - l_beginTime, "", "InternalAcceptCard::SetCardInType CI_CARD_IN_TYPE_ALL err");
-					err = 1;
-					goto Err;
+					if (Error_Succeed != eErr) {
+						DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("InternalAcceptCard::SetCardInType CI_CARD_IN_TYPE_ALL err");
+						SetErrorAndLog(eErr, MEC_DEVAPI_CARDISSUER_SetCardInType, "DevAdapter::SetCardInType", __FUNCTION__, IsInBusiness(), l_endTime - l_beginTime, "", "InternalAcceptCard::SetCardInType CI_CARD_IN_TYPE_ALL err");
+						err = 1;
+						goto Err;
 
-				}
-				else {
-					bHasSetCardInType = true;
+					}
+					else {
+						bHasSetCardInType = true;
+					}
 				}
 			}
 		}
@@ -5855,7 +5772,7 @@ void CCardIssuerFSM::ReadMag(SpReqAnsContext<CardIssuerStandService_ReadJS_Req,
 			SetDevState(DEVICE_STATUS_NORMAL);//设置为mixed从读卡失败恢复为成功时才触发同步计数和写运行时
 	}
 	else {
-		SetErrorAndLog(eMagReadErr, MEC_DEVAPI_CARDISSUER_MagRead, "DevAdapter::MagRead", __FUNCTION__, false, m_ullEndTime - m_ullBeginTime, "", "ReadMag::MagRead fail");
+		SetErrorAndLog(eMagReadErr, MEC_DEVAPI_CARDISSUER_MagRead, "DevAdapter::MagRead", __FUNCTION__, IsInBusiness(), m_ullEndTime - m_ullBeginTime, "", "ReadMag::MagRead fail");
 		ctx->Ans.magStatus = 1;
 		ctx->Ans.magData = "";
 	}

+ 129 - 143
Module/mod_CardIssuerStand/CardIssuerStandFSM.h

@@ -67,7 +67,7 @@ enum EvtType
 	USER_EVT_JS_INSERT_FINISHED,
 	USER_EVT_JS_INSERT_CANCEL,
 	USER_EVT_JS_EXIT_MIAN_PAGE,
-	USER_EVT_QUERY_CARD_POS_FINISHED
+	USER_EVT_CHECK_CARD_FINISHED
 };
 enum SAMICCommandType
 {
@@ -98,6 +98,12 @@ enum ReadMode
 	ReadMode_MagIC_RFFirst = 6,
 	ReadMode_MagIC_RFOnly = 7,
 };
+enum CheckCardCase
+{
+	CheckCard_OnOpen = 0,
+	CheckCard_OnFail,
+	CheckCard_OnMainPage,
+};
 
 typedef int(*lpCMBdecodeMag2)(char* Mag2Data, char * data);
 typedef int(*lpCMBdecodeEx)( char* MagData, char * type, char * data);
@@ -643,44 +649,43 @@ struct SyncMaterialCountHTTPRet : CHTTPRet {
 class CCardIssuerFSM : public CCommDevFSM<CCardIssuerFSM, CardIssuerClass>, public IFSMStateHooker
 {
 public:
-	enum {s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12};
+	enum { s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12 };
 	BEGIN_FSM_STATE(CCardIssuerFSM)
-		FSM_STATE_ENTRY(s0,"Init",s0_on_entry,s0_on_exit,s0_on_event)
-		FSM_STATE_ENTRY(s1,"Initializing",s1_on_entry,s1_on_exit,s1_on_event)
-		FSM_STATE_ENTRY(s2,"Idle",s2_on_entry,s2_on_exit,s2_on_event)
-		FSM_STATE_ENTRY(s3,"Accepting",s3_on_entry,s3_on_exit,s3_on_event)
-		FSM_STATE_ENTRY(s4,"Hold",s4_on_entry,s4_on_exit,s4_on_event)
-		FSM_STATE_ENTRY(s5,"Reading",s5_on_entry,s5_on_exit,s5_on_event)
-		FSM_STATE_ENTRY(s6,"Ejecting",s6_on_entry,s6_on_exit,s6_on_event)
-		FSM_STATE_ENTRY(s7,"WaitFetching",s7_on_entry,s7_on_exit,s7_on_event)
-		FSM_STATE_ENTRY(s8,"Capturing",s8_on_entry,s8_on_exit,s8_on_event)
-		FSM_STATE_ENTRY(s9,"Failed",s9_on_entry,s9_on_exit,s9_on_event)
-		FSM_STATE_ENTRY(s10,"Issuing",s10_on_entry,s10_on_exit,s10_on_event)
+		FSM_STATE_ENTRY(s0, "Init", s0_on_entry, s0_on_exit, s0_on_event)
+		FSM_STATE_ENTRY(s1, "Initializing", s1_on_entry, s1_on_exit, s1_on_event)
+		FSM_STATE_ENTRY(s2, "Idle", s2_on_entry, s2_on_exit, s2_on_event)
+		FSM_STATE_ENTRY(s3, "Accepting", s3_on_entry, s3_on_exit, s3_on_event)
+		FSM_STATE_ENTRY(s4, "Hold", s4_on_entry, s4_on_exit, s4_on_event)
+		FSM_STATE_ENTRY(s5, "Reading", s5_on_entry, s5_on_exit, s5_on_event)
+		FSM_STATE_ENTRY(s6, "Ejecting", s6_on_entry, s6_on_exit, s6_on_event)
+		FSM_STATE_ENTRY(s7, "WaitFetching", s7_on_entry, s7_on_exit, s7_on_event)
+		FSM_STATE_ENTRY(s8, "Capturing", s8_on_entry, s8_on_exit, s8_on_event)
+		FSM_STATE_ENTRY(s9, "Failed", s9_on_entry, s9_on_exit, s9_on_event)
+		FSM_STATE_ENTRY(s10, "Issuing", s10_on_entry, s10_on_exit, s10_on_event)
 		FSM_STATE_ENTRY(s11, "ReadJSing", s11_on_entry, s11_on_exit, s11_on_event)
 		FSM_STATE_ENTRY(s12, "IssueJSing", s12_on_entry, s12_on_exit, s12_on_event)
 		END_FSM_STATE()
 
-	BEGIN_FSM_RULE(CCardIssuerFSM,s0)
-	
+		BEGIN_FSM_RULE(CCardIssuerFSM, s0)
+
 		FSM_RULE_ENTRY(s0, s2, USER_EVT_TEST, 0)
-		FSM_RULE_ENTRY(s0,s1,USER_EVT_INIT,0)
+		FSM_RULE_ENTRY(s0, s1, USER_EVT_INIT, 0)
 		FSM_RULE_ENTRY(s0, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
-		FSM_RULE_ENTRY(s1,s2,USER_EVT_INITFINISHED,0)
-		FSM_RULE_ENTRY(s1,s9,USER_EVT_INITFINISHED,1)
+		FSM_RULE_ENTRY(s1, s2, USER_EVT_INITFINISHED, 0)
+		FSM_RULE_ENTRY(s1, s9, USER_EVT_INITFINISHED, 1)
 		FSM_RULE_ENTRY(s1, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
-		FSM_RULE_ENTRY(s2,s3,USER_EVT_ACCEPT,0)
-//		FSM_RULE_ENTRY(s2,s9,USER_EVT_ACCEPT,1)
+		FSM_RULE_ENTRY(s2, s3, USER_EVT_ACCEPT, 0)
+		//		FSM_RULE_ENTRY(s2,s9,USER_EVT_ACCEPT,1)
 		FSM_RULE_ENTRY(s2, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
-		FSM_RULE_ENTRY(s2,s10,USER_EVT_ISSUE,0)
+		FSM_RULE_ENTRY(s2, s10, USER_EVT_ISSUE, 0)
 		FSM_RULE_ENTRY(s2, s10, USER_EVT_ISSUE_EX, 0)
 		FSM_RULE_ENTRY(s2, s3, USER_EVT_JS_INSERT, 0)//JS 插卡
 		FSM_RULE_ENTRY(s2, s12, USER_EVT_JS_ISSUE_FROM_BOX, 0)//JS 卡箱发卡
-		FSM_RULE_ENTRY(s2, s8, USER_EVT_JS_CAPTURE, 0)//JS 吞卡
-		FSM_RULE_ENTRY(s3,s4,USER_EVT_ACCEPTFINISHED,0)
-		FSM_RULE_ENTRY(s3,s9,USER_EVT_ACCEPTFINISHED,1)
-		FSM_RULE_ENTRY(s3,s2,USER_EVT_ACCEPTFINISHED,2)
-		FSM_RULE_ENTRY(s3,s2,USER_EVT_ACCEPTFINISHED,3)
-		FSM_RULE_ENTRY(s3,s7,USER_EVT_ACCEPTFINISHED,4)
+		FSM_RULE_ENTRY(s3, s4, USER_EVT_ACCEPTFINISHED, 0)
+		FSM_RULE_ENTRY(s3, s9, USER_EVT_ACCEPTFINISHED, 1)
+		FSM_RULE_ENTRY(s3, s2, USER_EVT_ACCEPTFINISHED, 2)
+		FSM_RULE_ENTRY(s3, s2, USER_EVT_ACCEPTFINISHED, 3)
+		FSM_RULE_ENTRY(s3, s7, USER_EVT_ACCEPTFINISHED, 4)
 		FSM_RULE_ENTRY(s3, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
 		FSM_RULE_ENTRY(s3, s4, USER_EVT_JS_INSERT_FINISHED, 0)//JS 插卡成功
 		FSM_RULE_ENTRY(s3, s9, USER_EVT_JS_INSERT_FINISHED, 1)//JS 查询硬件报错
@@ -688,12 +693,10 @@ public:
 		FSM_RULE_ENTRY(s3, s2, USER_EVT_JS_INSERT_FINISHED, 3)//JS 取消
 		FSM_RULE_ENTRY(s3, s6, USER_EVT_JS_INSERT_FINISHED, 4)//JS 取消时有卡,吐卡
 		FSM_RULE_ENTRY(s3, s2, USER_EVT_JS_INSERT_FINISHED, 5)//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_EXIT,0)
-		FSM_RULE_ENTRY(s4,s8,USER_EVT_ACCEPT,0)
-		FSM_RULE_ENTRY(s4,s8,USER_EVT_EXIT,1)
-		FSM_RULE_ENTRY(s4,s8,USER_EVT_CAPTURE,0)
+		FSM_RULE_ENTRY(s4, s5, USER_EVT_READ, 0)
+		FSM_RULE_ENTRY(s4, s6, USER_EVT_EJECT, 0)
+		FSM_RULE_ENTRY(s4, s8, USER_EVT_ACCEPT, 0)
+		FSM_RULE_ENTRY(s4, s8, USER_EVT_CAPTURE, 0)
 		FSM_RULE_ENTRY(s4, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
 		FSM_RULE_ENTRY(s4, s2, USER_EVT_ISSUE_EX_FINISHED, 2)
 		FSM_RULE_ENTRY(s4, s6, USER_EVT_ISSUE_EX_FINISHED, 6)
@@ -703,74 +706,72 @@ public:
 		FSM_RULE_ENTRY(s4, s11, USER_EVT_JS_POSTONLINE, 0)//JS 联机后
 		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, s6, USER_EVT_JS_EXIT_MIAN_PAGE, 0)//JS 退回首页吐卡
-		FSM_RULE_ENTRY(s4, s8, USER_EVT_JS_EXIT_MIAN_PAGE, 1)//JS 退回首页吞卡
-		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)
+		FSM_RULE_ENTRY(s4, s2, USER_EVT_CHECK_CARD_FINISHED, 0)
+		FSM_RULE_ENTRY(s4, s9, USER_EVT_CHECK_CARD_FINISHED, 1)
+		FSM_RULE_ENTRY(s4, s6, EVT_MAINPAGE_DISPLAY, 0)
+		FSM_RULE_ENTRY(s4, s8, EVT_MAINPAGE_DISPLAY, 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)
 		FSM_RULE_ENTRY(s5, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
-		FSM_RULE_ENTRY(s5, s4, USER_EVT_EXIT, 0)
 		FSM_RULE_ENTRY(s5, s4, USER_EVT_PREONLINEFINISHED, 0)
 		FSM_RULE_ENTRY(s5, s4, USER_EVT_POSTONLINEFINISHED, 0)
-		FSM_RULE_ENTRY(s6,	s7,USER_EVT_EJECTFINISHED,0)
-		FSM_RULE_ENTRY(s6,	s9,USER_EVT_EJECTFINISHED,1)
+		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(s7,s2,USER_EVT_WAITFINISHED,0)
-		FSM_RULE_ENTRY(s7,s9,USER_EVT_WAITFINISHED,1)
-		FSM_RULE_ENTRY(s7,s8,USER_EVT_WAITFINISHED,2)
+		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)
 		FSM_RULE_ENTRY(s7, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
-		FSM_RULE_ENTRY(s8,s2,USER_EVT_CAPTUREFINISHED,0)
-		FSM_RULE_ENTRY(s8,s9,USER_EVT_CAPTUREFINISHED,1)
+		FSM_RULE_ENTRY(s8, s2, USER_EVT_CAPTUREFINISHED, 0)
+		FSM_RULE_ENTRY(s8, s9, USER_EVT_CAPTUREFINISHED, 1)
 		FSM_RULE_ENTRY(s8, FSM_STATE_EXIT, USER_EVT_QUIT, 0)
 		FSM_RULE_ENTRY(s8, s2, USER_EVT_JS_CAPTURE_FINISHED, 0)//JS 吞卡成功
 		FSM_RULE_ENTRY(s8, s9, USER_EVT_JS_CAPTURE_FINISHED, 1)//JS 吞卡失败
-		FSM_RULE_ENTRY(s9, s2, USER_EVT_QUERY_CARD_POS_FINISHED, 0)
-		FSM_RULE_ENTRY(s9, s4, USER_EVT_QUERY_CARD_POS_FINISHED, 2)
-		FSM_RULE_ENTRY(s10,s4,USER_EVT_ISSUE_FINISHED,0)
-		FSM_RULE_ENTRY(s10,s9,USER_EVT_ISSUE_FINISHED,1)
-		FSM_RULE_ENTRY(s10,s2,USER_EVT_ISSUE_FINISHED,2)
+		FSM_RULE_ENTRY(s9, s2, USER_EVT_CHECK_CARD_FINISHED, 0)
+		FSM_RULE_ENTRY(s9, s4, USER_EVT_CHECK_CARD_FINISHED, 2)
+		FSM_RULE_ENTRY(s10, s4, USER_EVT_ISSUE_FINISHED, 0)
+		FSM_RULE_ENTRY(s10, s9, USER_EVT_ISSUE_FINISHED, 1)
+		FSM_RULE_ENTRY(s10, s2, USER_EVT_ISSUE_FINISHED, 2)
 		FSM_RULE_ENTRY(s10, s6, USER_EVT_ISSUE_EX_FINISHED, 6)
 		FSM_RULE_ENTRY(s10, s4, USER_EVT_ISSUE_EX_FINISHED, 0)
 		FSM_RULE_ENTRY(s10, s9, USER_EVT_ISSUE_EX_FINISHED, 1)
 		FSM_RULE_ENTRY(s10, s2, USER_EVT_ISSUE_EX_FINISHED, 2)
 		FSM_RULE_ENTRY(s10, s6, USER_EVT_ISSUE_EX_FINISHED, 6)
 		FSM_RULE_ENTRY(s10, s2, USER_EVT_ISSUE_EX_FINISHED, 8)
-		FSM_RULE_ENTRY(s10, s2, USER_EVT_EXIT, 0)
 
 		FSM_RULE_ENTRY(s11, s4, USER_EVT_JS_READ_FINISHED, 0)//JS 读卡结果返回
-		FSM_RULE_ENTRY(s11, s2, USER_EVT_JS_READ_FINISHED, 1)//JS 无卡
 		FSM_RULE_ENTRY(s11, s4, USER_EVT_JS_POSTONLINE_FINISHED, 0)//JS
-		FSM_RULE_ENTRY(s11, s4, USER_EVT_JS_EXIT_MIAN_PAGE, 0)//退出事件
 		FSM_RULE_ENTRY(s12, s4, USER_EVT_JS_ISSUE_FROM_BOX_FINISHED, 0)//JS 发卡成功
 		FSM_RULE_ENTRY(s12, s2, USER_EVT_JS_ISSUE_FROM_BOX_FINISHED, 1)//JS 发卡失败
 		FSM_RULE_ENTRY(s12, s9, USER_EVT_JS_ISSUE_FROM_BOX_FINISHED, 2)//JS 发卡故障
 		FSM_RULE_ENTRY(s12, s8, USER_EVT_JS_ISSUE_FROM_BOX_FINISHED, 3)//JS 退回首页进行吞卡
-	END_FSM_RULE()
-
-	CCardIssuerFSM() : m_bCancelAccept(false),m_bWaitingAccept(false),
-	m_bWaitAccepteMore(false),m_bExit(false),m_resetTimes(0),m_testResult(Error_Succeed)
-	//,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_currentHopper(1), m_hopperNum(1)
-	, m_bSettingMaterial(false)	, m_addCardNo(""), m_addCardSerial(""), m_hasCardWhileDevOpen(false)
-	,  m_bCancelByRFIC(false), m_devOpenFailedCount(0)
-			, 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_bCancelInsert(false), m_bReturnMainPage(false)
-		{
-			HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x203);
-			cmdDecodeMag2 = NULL;
-			cmdDecodeEx = NULL;
-			m_aidList.Init(3);
-			m_aidList[0] = "A000000333";
-			m_aidList[1] = "A0000000108888";
-			m_aidList[2] = "A000000790";
-		}
+		END_FSM_RULE()
+
+		CCardIssuerFSM() : m_bCancelAccept(false), m_bWaitingAccept(false),
+		m_bWaitAccepteMore(false), m_bExit(false), m_resetTimes(0), m_testResult(Error_Succeed)
+		//,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_currentHopper(1), m_hopperNum(1)
+		, m_bSettingMaterial(false), m_addCardNo(""), m_addCardSerial(""), m_hasCardWhileDevOpen(false)
+		, m_bCancelByRFIC(false), m_devOpenFailedCount(0)
+		, 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_bCancelInsert(false), m_iCheckCardInInterval(200), m_bMainPageWhileWorking(false)
+	{
+		HARDWARE_ENTITY_RESET_ENTITYID(m_entCode, 0x203);
+		cmdDecodeMag2 = NULL;
+		cmdDecodeEx = NULL;
+		m_aidList.Init(3);
+		m_aidList[0] = "A000000333";
+		m_aidList[1] = "A0000000108888";
+		m_aidList[2] = "A000000790";
+	}
 
-	~CCardIssuerFSM(){}
+	~CCardIssuerFSM() {}
 	virtual ErrorCodeEnum OnInit();
 	virtual ErrorCodeEnum OnExit();
 
@@ -815,20 +816,20 @@ public:
 	void s12_on_entry();
 	void s12_on_exit();
 	unsigned int s12_on_event(FSMEvent* event);
-	
-	ErrorCodeEnum OpenDevice(BYTE btOpenType, const char *pDevSN);
+
+	ErrorCodeEnum OpenDevice(BYTE btOpenType, const char* pDevSN);
 	int Initial();
-	bool GetDevStatus(bool bPrint=true);
-	int CheckIfHasCardOnOpenOrMainPage();
-	int CaptureCard(SpReqAnsContext<CardIssuerStandService_Capture_Req,CardIssuerStandService_Capture_Ans>::Pointer ctx);
-	int EjectCard(SpReqAnsContext<CardIssuerStandService_Eject_Req,CardIssuerStandService_Eject_Ans>::Pointer ctx);
+	bool GetDevStatus(bool bPrint = true);
+	int CheckIfHasCardOnCase(CheckCardCase eCase);
+	int CaptureCard(SpReqAnsContext<CardIssuerStandService_Capture_Req, CardIssuerStandService_Capture_Ans>::Pointer ctx);
+	int EjectCard(SpReqAnsContext<CardIssuerStandService_Eject_Req, CardIssuerStandService_Eject_Ans>::Pointer ctx);
 	int WaitFetchingCard();
 	int ReadCard(SpReqAnsContext<CardIssuerStandService_Read_Req, CardIssuerStandService_Read_Ans>::Pointer ctx);
 	int PreOnline(SpReqAnsContext<CardIssuerStandService_PreOnline_Req, CardIssuerStandService_PreOnline_Ans>::Pointer ctx);
 	int PostOnline(SpReqAnsContext<CardIssuerStandService_PostOnline_Req, CardIssuerStandService_PostOnline_Ans>::Pointer ctx);
-	int ReadCard_Contact(SpReqAnsContext<CardIssuerStandService_Read_Req,CardIssuerStandService_Read_Ans>::Pointer ctx, bool& bICOK);
-	int PreOnline_Contact(SpReqAnsContext<CardIssuerStandService_PreOnline_Req,CardIssuerStandService_PreOnline_Ans>::Pointer ctx, bool& bICOK);
-	int PostOnline_Contact(SpReqAnsContext<CardIssuerStandService_PostOnline_Req,CardIssuerStandService_PostOnline_Ans>::Pointer ctx, bool& bICOK);
+	int ReadCard_Contact(SpReqAnsContext<CardIssuerStandService_Read_Req, CardIssuerStandService_Read_Ans>::Pointer ctx, bool& bICOK);
+	int PreOnline_Contact(SpReqAnsContext<CardIssuerStandService_PreOnline_Req, CardIssuerStandService_PreOnline_Ans>::Pointer ctx, bool& bICOK);
+	int PostOnline_Contact(SpReqAnsContext<CardIssuerStandService_PostOnline_Req, CardIssuerStandService_PostOnline_Ans>::Pointer ctx, bool& bICOK);
 	int ReadCard_RF(SpReqAnsContext<CardIssuerStandService_Read_Req, CardIssuerStandService_Read_Ans>::Pointer ctx);
 	int PreOnline_RF(SpReqAnsContext<CardIssuerStandService_PreOnline_Req, CardIssuerStandService_PreOnline_Ans>::Pointer ctx);
 	int PostOnline_RF(SpReqAnsContext<CardIssuerStandService_PostOnline_Req, CardIssuerStandService_PostOnline_Ans>::Pointer ctx);
@@ -836,25 +837,25 @@ public:
 	int InternalAcceptCard();
 	int AcceptCard(SpReqAnsContext<CardIssuerStandService_Insert_Req, CardIssuerStandService_Insert_Ans>::Pointer ctx);
 	int IssueCard(SpReqAnsContext<CardIssuerStandService_Issue_Req, CardIssuerStandService_Issue_Ans>::Pointer ctx, SpReqAnsContext<CardIssuerStandService_IssueEx_Req, CardIssuerStandService_IssueEx_Ans>::Pointer ctxEx);
-	int WriteCard(SpReqAnsContext<CardIssuerStandService_WriteTrack_Req,CardIssuerStandService_WriteTrack_Ans>::Pointer ctx);
-
-	bool GetWaitFlag(){return m_bWaitingAccept;}
-	void SetWaitMore(){m_bWaitAccepteMore = true;}
-	void SetExitFlag(bool bFlag=true){m_bExit = bFlag;}
-	bool FSMSetIssueFlag(int value=1);
-	void FrontSetIssueFlag(bool bValue = true){ FSMSetIssueFlag(bValue); }
-	int QueryIssueFlag(){ return m_issueStatus; }
-	bool SetCardCaptured(const int num,bool bNewClear=false);
-	bool SetCardIssued(const int num,const int hopper);
-	bool SetCardRemains(const int num, const int hopper,bool bInit = false);
+	int WriteCard(SpReqAnsContext<CardIssuerStandService_WriteTrack_Req, CardIssuerStandService_WriteTrack_Ans>::Pointer ctx);
+
+	bool GetWaitFlag() { return m_bWaitingAccept; }
+	void SetWaitMore() { m_bWaitAccepteMore = true; }
+	void SetExitFlag(bool bFlag = true) { m_bExit = bFlag; }
+	bool FSMSetIssueFlag(int value = 1);
+	void FrontSetIssueFlag(bool bValue = true) { FSMSetIssueFlag(bValue); }
+	int QueryIssueFlag() { return m_issueStatus; }
+	bool SetCardCaptured(const int num, bool bNewClear = false);
+	bool SetCardIssued(const int num, const int hopper);
+	bool SetCardRemains(const int num, const int hopper, bool bInit = false);
 	bool SetCardMixed(const int num, const int hopper);
 	ErrorCodeEnum MachineMoveCardBackNotHold();
-	ErrorCodeEnum MachineMoveCardFrontGate(bool bInBussiness=false);
+	ErrorCodeEnum MachineMoveCardFrontGate(bool bInBussiness = false);
 
-	void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
+	void SelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext);
 	DevStateEnum GetDevState() const
 	{
-		if ((m_eDevState == DEVICE_STATUS_NORMAL) 
+		if ((m_eDevState == DEVICE_STATUS_NORMAL)
 			&& ((m_bHasHopper[0] && m_mixedEx[0] >= 3) || !m_bHasHopper[0])
 			&& ((m_bHasHopper[1] && m_mixedEx[1] >= 3) || !m_bHasHopper[1])
 			&& ((m_bHasHopper[2] && m_mixedEx[2] >= 3) || !m_bHasHopper[2]))
@@ -865,20 +866,16 @@ public:
 	int QueryCardPos();
 
 	int UpdateLocalRunCfg(CAutoArray<int> hopperArr);
-	int SyncDataToDB(bool bMaintain[12],bool bSetCaptured=true);//同步物料计数
+	int SyncDataToDB(bool bMaintain[12], bool bSetCaptured = true);//同步物料计数
 	void SetHopperNum(int hopperNum);
 	int SAMICCommand(SpReqAnsContext<CardIssuerStandService_SAMICCommand_Req, CardIssuerStandService_SAMICCommand_Ans>::Pointer ctx);
 
-	bool WriteCardInfo(CSmartPointer<IConfigInfo> &cfgRun, const char *acc, const char* serial, int slot, bool bClear = false, bool bHasCard = false);
-	bool ReadCardInfo(CSmartPointer<IConfigInfo> &cfgRun, CSimpleStringA &acc, CSimpleStringA &serial, int slot);
+	bool WriteCardInfo(CSmartPointer<IConfigInfo>& cfgRun, const char* acc, const char* serial, int slot, bool bClear = false, bool bHasCard = false);
+	bool ReadCardInfo(CSmartPointer<IConfigInfo>& cfgRun, CSimpleStringA& acc, CSimpleStringA& serial, int slot);
 
-	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)(CSimpleStringA::Format("m_currentFSMState:%d", m_currentFSMState));
-		return m_currentFSMState;
-	}
-	void GetCardInfo(int &findCard, int &cardPos)
+	void DecodeTracksData(const char* track2, DWORD dwT2size, const char* track3, DWORD dwT3size, char*& magData, bool bT2OK = true, bool bT3OK = true);
+
+	void GetCardInfo(int& findCard, int& cardPos)
 	{
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("<GetCardInfo>, findCard:%d, cardPos:%d", findCard, cardPos));
 		findCard = m_findCard;
@@ -891,10 +888,10 @@ public:
 
 	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
-	int JudgeCardType(CSimpleStringA cardno, bool &bMismatch);
+	int JudgeCardType(CSimpleStringA cardno, bool& bMismatch);
 	void QueryCIStatus(SpReqAnsContext<CardIssuerStandService_QueryCIStatus_Req, CardIssuerStandService_QueryCIStatus_Ans>::Pointer ctx);
 	bool RegistCardWhileCaptureCard(CSimpleStringA cardno);
-	bool SyncMaterialCount(IHttpFunc* client,SyncMaterialCountInfo syncInfo);
+	bool SyncMaterialCount(IHttpFunc* client, SyncMaterialCountInfo syncInfo);
 protected:
 	int m_iInsertTries;
 	int m_resetTries;
@@ -903,11 +900,11 @@ private:
 	///
 	int m_resetTimes;
 	lpCMBdecodeMag2 cmdDecodeMag2;
-	lpCMBdecodeEx cmdDecodeEx;	
+	lpCMBdecodeEx cmdDecodeEx;
 	bool m_bCancelAccept, m_bWaitingAccept, m_bWaitAccepteMore, m_bExit
 		, m_bCDA, m_bIssuingExit, m_bCardIssued, m_bHasHopper[HOPPER_NUM]
 		, m_bSettingMaterial, m_hasCardWhileDevOpen, m_bCancelByRFIC
-		, m_bCardActiveNotify, m_bCardFromHopper, m_bUseCardnoMismatch, m_bStopUseRF;
+		, m_bCardActiveNotify, m_bCardFromHopper, m_bUseCardnoMismatch, m_bStopUseRF, m_bMainPageWhileWorking/*Accepting、Read(JS)ing、Issue(JS)ing*/;
 	bool m_bSupportRF, m_bUseRFTillNext;//if ReadCard by RF,the following PreOnline & PostOnline always use RF till the next card(insert/issue)
 	ErrorCodeEnum m_testResult;
 
@@ -915,27 +912,27 @@ private:
 	int m_issueStatusFromFile, m_issueStatus/*the status maybe changed by Business call*/;
 	//1:default, 2:SCI, 3:no cfg
 	int m_machineType;
-	int m_currentHopper,m_devOpenFailedCount;
-	int m_maxSlot,m_findCard,m_cardPos,m_currentFSMState,m_maxRetainCount, m_eacQueryFlag/*accout query*/
-		,m_ICRetryTimes;
-	CSimpleStringA m_CardBoxNoEx[HOPPER_NUM], m_PsbCodeEx[HOPPER_NUM], m_PsbNameEx[HOPPER_NUM], m_MaintainerEx[HOPPER_NUM],m_csMaintainTimeEx[HOPPER_NUM];
-	int m_CardInitEx[HOPPER_NUM], m_CardPercentEx[HOPPER_NUM], m_remainsEx[HOPPER_NUM], m_issuedEx[HOPPER_NUM], m_mixedEx[HOPPER_NUM],m_hopperNum;
+	int m_currentHopper, m_devOpenFailedCount;
+	int m_maxSlot, m_findCard, m_cardPos, m_maxRetainCount, m_eacQueryFlag/*accout query*/
+		, m_ICRetryTimes, m_iCheckCardInInterval;
+	CSimpleStringA m_CardBoxNoEx[HOPPER_NUM], m_PsbCodeEx[HOPPER_NUM], m_PsbNameEx[HOPPER_NUM], m_MaintainerEx[HOPPER_NUM], m_csMaintainTimeEx[HOPPER_NUM];
+	int m_CardInitEx[HOPPER_NUM], m_CardPercentEx[HOPPER_NUM], m_remainsEx[HOPPER_NUM], m_issuedEx[HOPPER_NUM], m_mixedEx[HOPPER_NUM], m_hopperNum;
 	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;
-	CCardProcess *m_pCardProcess;
+	CCardProcess* m_pCardProcess;
 	CAutoArray<CSimpleStringA> m_aidList;
 
-	char *m_pDataToARQC;
+	char* m_pDataToARQC;
 	long xxTest;
 	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);
+	int SplitTrack2(CSimpleStringA pTrack2, Track2Data& decodeData);
 	bool JustReadCardNo();
-	bool IsValidCardNo(const char*,int);
-	void GetVendorDllName(CSimpleStringA &dllName);
-	bool AccountExchange(const char *origAcc, CSimpleStringA &acc,int dir=1);
+	bool IsValidCardNo(const char*, int);
+	void GetVendorDllName(CSimpleStringA& dllName);
+	bool AccountExchange(const char* origAcc, CSimpleStringA& acc, int dir = 1);
 	bool LoadCMBPrint(CSimpleStringA csBinPath);
 	DevCategoryInfo m_devCat;
 	bool ToRegistCaptureCardInfo();
@@ -968,7 +965,7 @@ public:
 
 	CSimpleStringA MaskCardno(const char* cardno);
 	void GetCardProcessLastErr(ErrorCodeEnum& eErrCode, CSimpleStringA& lastApiName, CSimpleStringA& alarmMsg, CSimpleStringA& csErrMsgWithReturnCode);
-	
+
 	void SetDoExitFlag(bool bFlag) { m_bDoExit = bFlag; }
 	int PowerOffIC(int type);//0:接触IC 1:非接
 	virtual void OnStateTrans(int iSrcState, int iDstState);
@@ -978,11 +975,10 @@ public:
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("rtaMsg=%s", rtaMsg.GetData());
 		return rtaMsg;
 	}
-	
+
 private:
 	bool m_bCancelInsert;
 	bool m_bDoExit;
-	bool m_bReturnMainPage;//正在处理过程中是否退到首页变量
 	ULLINT m_ullBeginTime, m_ullEndTime;
 	BYTE m_btCID/*9f27*/;
 	void FSMEventDefaultProcess(FSMEvent* pEvt, DWORD dwUserCode);
@@ -1118,29 +1114,19 @@ struct WaitFetchingTask : public ITaskSp
 	}
 };
 
-struct QueryCardPosTask : public ITaskSp
+struct DoCheckCardTask : public ITaskSp
 {
 	CCardIssuerFSM* fsm;
-	QueryCardPosTask(CCardIssuerFSM* f) : fsm(f) {}
+	CheckCardCase eCase;
+	DoCheckCardTask(CCardIssuerFSM* f, CheckCardCase eCase) : fsm(f) {}
 	void Process()
 	{
-		FSMEvent* e = new FSMEvent(USER_EVT_QUERY_CARD_POS_FINISHED);
-		e->param1 = fsm->QueryCardPos();
+		FSMEvent* e = new FSMEvent(USER_EVT_CHECK_CARD_FINISHED);
+		e->param1 = fsm->CheckIfHasCardOnCase(eCase);
 		fsm->PostEventFIFO(e);
 	}
 };
 
-struct DoExitWhenIdleTask : public ITaskSp
-{
-	CCardIssuerFSM* fsm;
-	DoExitWhenIdleTask(CCardIssuerFSM* f) : fsm(f) {}
-	void Process()
-	{
-		fsm->CheckIfHasCardOnOpenOrMainPage();
-		fsm->SetDoExitFlag(false);
-	}
-};
-
 
 struct RegistCaptureCardInfoTask : public ITaskSp
 {

+ 0 - 20
Module/mod_CardIssuerStand/mod_cardissuerStand.h

@@ -161,21 +161,6 @@ public:
 			ctx->Answer(Error_DevNotAvailable, CardIssuer_UserErrorCode_DevOpen_Failed);
 		}
 		else {
-			if (ctx->Req.reserved1.GetLength() > 0 && strnicmp("kaku#", (const char*)ctx->Req.reserved1, 5) == 0)
-			{
-				int state = m_fsm.GetFSMState();
-				DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("PreOnline m_currentFSMState:%d", state));
-				if (state == 9)
-				{
-					ctx->Answer(Error_BridgeNotOK);
-					return;
-				}
-				else if (state != 2)
-				{
-					ctx->Answer(Error_InvalidState);
-					return;
-				}
-			}
 			PreOnlineEvent* e = new PreOnlineEvent();
 			e->ctx = ctx;
 			m_fsm.PostEventFIFO(e);
@@ -271,14 +256,9 @@ public:
 	void IssueEx(SpReqAnsContext<CardIssuerStandService_IssueEx_Req, CardIssuerStandService_IssueEx_Ans>::Pointer ctx)
 	{
 		LOG_FUNCTION();
-		int state = m_fsm.GetFSMState();
-
 		if (!m_fsm.GetDevInitFlag()) {
 			ctx->Answer(Error_DevNotAvailable, CardIssuer_UserErrorCode_DevOpen_Failed);
 		}
-		else if (state == 9) {
-			ctx->Answer(Error_InvalidState, CardIssuer_UserErrorCode_StandEntityInFailState);
-		}
 		else {
 			m_bNewSessionInit = false;
 			CardIssueExEvent* pEvt = new CardIssueExEvent();

+ 2 - 2
Module/mod_vtmloader/VtmLoaderFSM.cpp

@@ -1708,7 +1708,7 @@ bool CVtmLoaderFSM::IsRootINIExist(CSimpleStringA& path)
 	}
 	else
 	{
-		DbgWithLink(LOG_LEVEL_ERROR, LOG_TYPE_SYSTEM)("root.ini(%s) is not exist.", path.GetData());
+		DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA1f09")("root.ini(%s) is not exist.", path.GetData());
 		return false;
 	}
 }
@@ -2061,7 +2061,7 @@ void CVtmLoaderFSM::SaveTerminalNo(SpReqAnsContext<VtmLoaderService_SaveTerminal
 		ctx->Answer(Error_Param);
 		return;
 	}
-	LogWarn(Severity_Low, Error_Trace, VtmLoader_SetTerminalNo, CSimpleStringA::Format("SaveTerminalNo:[%s]", ctx->Req.terminalNo.GetData()));
+	LogWarn(Severity_Low, Error_Trace, VtmLoader_SaveTerminalNo, CSimpleStringA::Format("SaveTerminalNo:[%s]", ctx->Req.terminalNo.GetData()));
 	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode(VtmLoaderService_LogCode_SaveTerminalNo)("write terminalNo[%s] to root.ini", ctx->Req.terminalNo.GetData());
 	ErrorCodeEnum eErr = GetEntityBase()->GetFunction()->GetPrivilegeFunction()->WriteTerminalNoToRootIni(ctx->Req.terminalNo);
 	ctx->Answer(eErr);