|
@@ -191,6 +191,7 @@ unsigned int CCardIssuerFSM::s2_on_event(FSMEvent* pEvt)
|
|
|
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();
|
|
@@ -455,12 +456,13 @@ unsigned int CCardIssuerFSM::s3_on_event(FSMEvent* pEvt)
|
|
|
}
|
|
|
break;
|
|
|
case EVT_MAINPAGE_DISPLAY:
|
|
|
- {
|
|
|
- m_captureReason = "4001";
|
|
|
- m_bExit = true;
|
|
|
- pEvt->SetHandled();
|
|
|
- ret = 0;
|
|
|
- }
|
|
|
+ {
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("receive event of enter to main page");
|
|
|
+ m_captureReason = "4001";
|
|
|
+ m_bExit = true;
|
|
|
+ pEvt->SetHandled();
|
|
|
+ ret = 0;
|
|
|
+ }
|
|
|
break;
|
|
|
default:
|
|
|
FSMEventDefaultProcess(pEvt, CardIssuer_UserErrorCode_PROCESS_ACCEPT);
|
|
@@ -1116,8 +1118,11 @@ void CCardIssuerFSM::s9_on_entry()
|
|
|
LOG_FUNCTION();
|
|
|
m_currentFSMState = 9;
|
|
|
SetDevState(DEVICE_STATUS_FAULT);
|
|
|
- QueryCardPosTask* pTask = new QueryCardPosTask(this);
|
|
|
- ErrorCodeEnum err = GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
|
|
|
+ if (GetDevInitFlag())
|
|
|
+ {
|
|
|
+ QueryCardPosTask* pTask = new QueryCardPosTask(this);
|
|
|
+ ErrorCodeEnum err = GetEntityBase()->GetFunction()->PostThreadPoolTask(pTask);
|
|
|
+ }
|
|
|
}
|
|
|
void CCardIssuerFSM::s9_on_exit()
|
|
|
{
|
|
@@ -1233,7 +1238,7 @@ unsigned int CCardIssuerFSM::s11_on_event(FSMEvent* pEvt)
|
|
|
break;
|
|
|
case EVT_MAINPAGE_DISPLAY:
|
|
|
{
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("S15 receive exit to main page");
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("receive event of enter to main page");
|
|
|
pEvt->SetHandled();
|
|
|
m_captureReason = "4001";
|
|
|
m_bReturnMainPage = true;
|
|
@@ -1284,7 +1289,7 @@ unsigned int CCardIssuerFSM::s12_on_event(FSMEvent* pEvt)
|
|
|
break;
|
|
|
case EVT_MAINPAGE_DISPLAY:
|
|
|
{
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("S16 receive exit to main page");
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("receive event of enter to main page");
|
|
|
pEvt->SetHandled();
|
|
|
m_captureReason = "4001";
|
|
|
m_bReturnMainPage = true;
|
|
@@ -1578,7 +1583,6 @@ 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 succ, port:%d, baudRate:%d, openType:%d, connectType:%d", m_adapterInfo.GetPortInt(), m_adapterInfo.GetBaudrateInt(),btOpenType, m_connectType);
|
|
|
- SetDevInitFlag(true);
|
|
|
m_devOpenFailedCount = 0;
|
|
|
ZeroMemory(m_devCat.szModel, sizeof(m_devCat.szModel));
|
|
|
ZeroMemory(m_devCat.szType, sizeof(m_devCat.szType));
|
|
@@ -1718,7 +1722,7 @@ ErrorCodeEnum CCardIssuerFSM::OpenDevice(BYTE btOpenType, const char* pDevSN)
|
|
|
if (m_issueStatusFromFile == 0)
|
|
|
m_bCardFromHopper = false;
|
|
|
|
|
|
- ret = UnAcceptCard();
|
|
|
+ ret = CheckIfHasCardOnOpenOrMainPage();
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ret: %d, isIssue: %d, m_hasCardWhileDevOpen:%d, m_issueStatusFromFile:%d",
|
|
|
ret, isIssue, m_hasCardWhileDevOpen, m_issueStatusFromFile);
|
|
|
|
|
@@ -1750,7 +1754,7 @@ ErrorCodeEnum CCardIssuerFSM::OpenDevice(BYTE btOpenType, const char* pDevSN)
|
|
|
m_maxRetainCount = 3;
|
|
|
if (cis.eRetainBin == CI_RETAINBIN_FULL)
|
|
|
{
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_RETAIN_BIN_IS_FULL_SENSOR, "(sensor)retain bin is full!回收箱满了,请及时清理!");
|
|
|
+ DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setResultCode("RTA23B8")("sensor say:retain bin is full!回收箱满了,请及时清理!");
|
|
|
}
|
|
|
}
|
|
|
LogWarn(Severity_Low, Error_Unexpect, CardIssuer_UserErrorCode_Open_Success, "读卡器打开成功");
|
|
@@ -1758,7 +1762,7 @@ ErrorCodeEnum CCardIssuerFSM::OpenDevice(BYTE btOpenType, const char* pDevSN)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_Open_Failed, "启动后检查卡机状态失败");
|
|
|
+ LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_Open_Failed, "启动后检查是否有卡或处理吞卡失败");
|
|
|
return Error_Unexpect;
|
|
|
}
|
|
|
}
|
|
@@ -1774,11 +1778,13 @@ int CCardIssuerFSM::Initial()
|
|
|
CloseAndClearDevObj(false);
|
|
|
SetDevInitFlag(false);
|
|
|
}
|
|
|
+ else
|
|
|
+ SetDevInitFlag(true);
|
|
|
m_bOpening = false;
|
|
|
return errCode;
|
|
|
}
|
|
|
|
|
|
-int CCardIssuerFSM::UnAcceptCard()
|
|
|
+int CCardIssuerFSM::CheckIfHasCardOnOpenOrMainPage()
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
ErrorCodeEnum eErr;
|
|
@@ -1804,7 +1810,7 @@ int CCardIssuerFSM::UnAcceptCard()
|
|
|
else
|
|
|
m_captureReason = "0000";
|
|
|
//oilyang@20230313 根据卡片异常处理沟通会议(业务、深圳开发),实体启动发现有卡,一律吞卡
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_USER).setLogCode("QLR0402203Z01").setResultCode("RTA23A1")("读卡器打开时,卡机有卡片,吞卡");
|
|
|
+ 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());
|
|
|
LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_CaptureCard_EntityOnStart, errMsg.GetData());
|
|
@@ -2079,13 +2085,6 @@ int CCardIssuerFSM::IssueCard(SpReqAnsContext<CardIssuerStandService_Issue_Req,
|
|
|
//LogWarn(Severity_Low, Error_Succeed, CardIssuer_UserErrorCode_MoveCard_FromHopper, "MoveCard from hopper suc.");
|
|
|
m_issuedEx[m_currentHopper - 1]++;
|
|
|
m_remainsEx[m_currentHopper - 1]--;
|
|
|
- //oilyang@20180809 增加对单卡槽多卡槽机器的使用及闲置的适配
|
|
|
- if ((!m_bHasHopper[0] || m_CardPercentEx[0] == 0 || m_CardInitEx[0] == 0 || (100 * m_remainsEx[0] < m_CardPercentEx[0] * m_CardInitEx[0]))
|
|
|
- && (!m_bHasHopper[1] || m_CardPercentEx[1] == 0 || m_CardInitEx[1] == 0 || (100 * m_remainsEx[1] < m_CardPercentEx[1] * m_CardInitEx[1]))
|
|
|
- && (!m_bHasHopper[2] || m_CardPercentEx[2] == 0 || m_CardInitEx[2] == 0 || (100 * m_remainsEx[2] < m_CardPercentEx[2] * m_CardInitEx[2])))
|
|
|
- {
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_FEW_CARD_REMAINS, "Few card remains.");
|
|
|
- }
|
|
|
m_bSettingMaterial = true;//oilyang 借用于延迟同步,紧接着设置remains时更新到后台数据库
|
|
|
if (!SetCardIssued(m_issuedEx[m_currentHopper - 1], m_currentHopper))
|
|
|
DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("IssueCard, Set card issued failed.");
|
|
@@ -2281,17 +2280,16 @@ int CCardIssuerFSM::InternalAcceptCard()
|
|
|
err = 3;
|
|
|
goto Err;
|
|
|
}
|
|
|
- //hr = m_pIDCard->IDC_Accept(IDC_ALL_CARD,&lpCardData);
|
|
|
if (!m_bCancelAccept && !bHasSetCardInType) {
|
|
|
l_beginTime = GetTickCountRVC();
|
|
|
eErr = m_hDevHelper->SetCardInType(CI_CARD_IN_TYPE_ALL);
|
|
|
l_endTime = GetTickCountRVC();
|
|
|
- //DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::SetCardInType").setCostTime(l_endTime - l_beginTime)("InternalAcceptCard::SetCardInType CI_CARD_IN_TYPE_ALL");
|
|
|
-
|
|
|
}
|
|
|
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__, false, l_endTime - l_beginTime, "", "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 {
|
|
@@ -3884,8 +3882,7 @@ int CCardIssuerFSM::WriteCard(SpReqAnsContext<CardIssuerStandService_WriteTrack_
|
|
|
}
|
|
|
void CCardIssuerFSM::SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext)
|
|
|
{
|
|
|
- //for simple
|
|
|
- pTransactionContext->SendAnswer(m_testResult);
|
|
|
+ OnHardwareShakeHand(pTransactionContext);
|
|
|
}
|
|
|
|
|
|
bool CCardIssuerFSM::FSMSetIssueFlag(int value)
|
|
@@ -4321,39 +4318,6 @@ void CCardIssuerFSM::SetHopperNum(int hopperNum)
|
|
|
m_hopperNum = hopperNum;
|
|
|
}
|
|
|
|
|
|
-void CCardIssuerFSM::DoExitWhenIdle()
|
|
|
-{
|
|
|
- ErrorCodeEnum eErr;
|
|
|
- CSimpleStringA errMsg(true);
|
|
|
- long l_beginTime, l_endTime;
|
|
|
- l_beginTime = GetTickCountRVC();
|
|
|
- eErr = m_hDevHelper->GetDevStatus(m_devStatus);
|
|
|
- l_endTime = GetTickCountRVC();
|
|
|
-
|
|
|
- if (eErr == Error_Succeed)
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::GetDevStatus").setCostTime(l_endTime - l_beginTime)("DoExitWhenIdle::GetDevStatus");
|
|
|
- if (m_devStatus.eMedia == CI_MEDIA_PRESENT || m_devStatus.eMedia == CI_MEDIA_ENTERING)
|
|
|
- {
|
|
|
- JustReadCardNo();
|
|
|
- m_captureReason = "4001";
|
|
|
- errMsg = CSimpleStringA::Format("DoExitWhenIdle, has card in machine, to capture card, CardNo:%s****%s",
|
|
|
- m_currCardNo.SubString(0, 6).GetData(), m_currCardNo.SubString(m_currCardNo.GetLength()-4, 4).GetData());
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_CaptureCard_IdleExit, errMsg.GetData());
|
|
|
-
|
|
|
- eErr = MachineMoveCardBackNotHold();
|
|
|
- if (eErr == Error_Succeed)
|
|
|
- {
|
|
|
- bool bCaptured = ToRegistCaptureCardInfo();
|
|
|
- m_CardCaptured++;
|
|
|
- bool bSetCapture = SetCardCaptured(m_CardCaptured);
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("DoExitWhenIdle, to capture card. result:%d, m_CardCaptured:%d, bSetCapture:%d",
|
|
|
- bCaptured, m_CardCaptured, bSetCapture));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
bool CCardIssuerFSM::JustReadCardNo()
|
|
|
{
|
|
|
ErrorCodeEnum eErr = Error_Unexpect;
|
|
@@ -4477,11 +4441,10 @@ bool CCardIssuerFSM::JustReadCardNo()
|
|
|
}
|
|
|
}
|
|
|
if (m_currCardNo.GetLength() > 8)
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("JustReadCardNo, record the account (%d):%s****%s", m_currCardNo.GetLength(),
|
|
|
- m_currCardNo.SubString(0, 6).GetData(), m_currCardNo.SubString(m_currCardNo.GetLength() - 4, 4).GetData()));
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(CSimpleStringA::Format("JustReadCardNo, record the account (%d):%s", m_currCardNo.GetLength(),
|
|
|
+ SP::Module::Util::DataMask(SP::Module::Util::DataMask_CardAccount, m_currCardNo).GetData()));
|
|
|
else{
|
|
|
CSimpleStringA errMsg = CSimpleStringA::Format("JustReadCardNo, AccountNo maybe wrong:%s(len:%d)", m_currCardNo.GetData(), m_currCardNo.GetLength());
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_CardNo_Maybe_Wrong, errMsg.GetData());
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)(errMsg.GetData());
|
|
|
}
|
|
|
return true;
|
|
@@ -5867,234 +5830,38 @@ void CCardIssuerFSM::ReadMag(SpReqAnsContext<CardIssuerStandService_ReadJS_Req,
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::MagRead").setCostTime(m_ullEndTime - m_ullBeginTime)("ReadMag::MagRead t1Status:%d, t2Status:%d, t3Status:%d, t1Len:%d, t2Len:%d, t3Len:%d",
|
|
|
magTracks.track[0].eStatus, magTracks.track[1].eStatus, magTracks.track[2].eStatus, magTracks.track[0].dwSize, magTracks.track[1].dwSize, magTracks.track[2].dwSize);
|
|
|
ctx->Ans.magStatus = 0;
|
|
|
- ctx->Ans.track1 = (char*)magTracks.track[0].data;
|
|
|
- ctx->Ans.track2 = (char*)magTracks.track[1].data;
|
|
|
- ctx->Ans.track3 = (char*)magTracks.track[2].data;
|
|
|
- ctx->Ans.track1Size = magTracks.track[0].dwSize;
|
|
|
- ctx->Ans.track2Size = magTracks.track[1].dwSize;
|
|
|
- ctx->Ans.track3Size = magTracks.track[2].dwSize;
|
|
|
- ctx->Ans.track1Status = (int)magTracks.track[0].eStatus;
|
|
|
- ctx->Ans.track2Status = (int)magTracks.track[1].eStatus;
|
|
|
- ctx->Ans.track3Status = (int)magTracks.track[2].eStatus;
|
|
|
+ //json格式返回
|
|
|
+ std::map<std::string, std::string> magInfo;
|
|
|
+ if (magTracks.track[0].eStatus == CI_DATA_OK)
|
|
|
+ magInfo["track1"] = (char*)magTracks.track[0].data;
|
|
|
+ else
|
|
|
+ magInfo["track1"] = "";
|
|
|
+ if (magTracks.track[1].eStatus == CI_DATA_OK)
|
|
|
+ magInfo["track2"] = (char*)magTracks.track[1].data;
|
|
|
+ else
|
|
|
+ magInfo["track2"] = "";
|
|
|
+ if (magTracks.track[2].eStatus == CI_DATA_OK)
|
|
|
+ magInfo["track3"] = (char*)magTracks.track[2].data;
|
|
|
+ else
|
|
|
+ magInfo["track3"] = "";
|
|
|
+
|
|
|
+
|
|
|
+ std::pair<bool, std::string> strResult;
|
|
|
+ strResult = generateJsonStr(magInfo);
|
|
|
+ ctx->Ans.magData = strResult.second.c_str();
|
|
|
+
|
|
|
+ //oiltmp what's this???
|
|
|
if (m_issueStatus)
|
|
|
SetDevState(DEVICE_STATUS_NORMAL);//设置为mixed从读卡失败恢复为成功时才触发同步计数和写运行时
|
|
|
}
|
|
|
else {
|
|
|
SetErrorAndLog(eMagReadErr, MEC_DEVAPI_CARDISSUER_MagRead, "DevAdapter::MagRead", __FUNCTION__, false, m_ullEndTime - m_ullBeginTime, "", "ReadMag::MagRead fail");
|
|
|
ctx->Ans.magStatus = 1;
|
|
|
- ctx->Ans.track1 = "";
|
|
|
- ctx->Ans.track2 = "";
|
|
|
- ctx->Ans.track3 = "";
|
|
|
- ctx->Ans.track1Size = 0;
|
|
|
- ctx->Ans.track2Size = 0;
|
|
|
- ctx->Ans.track3Size = 0;
|
|
|
- ctx->Ans.track1Status = 1;
|
|
|
- ctx->Ans.track2Status = 1;
|
|
|
- ctx->Ans.track3Status = 1;
|
|
|
+ ctx->Ans.magData = "";
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
-int CCardIssuerFSM::CheckCardType(CSimpleStringA cardNo, bool bReadMag, int& ICtype)
|
|
|
-{
|
|
|
- LOG_FUNCTION();
|
|
|
- long l_beginTime, l_endTime;
|
|
|
- ErrorCodeEnum eErr;
|
|
|
- //oilyang@20230331
|
|
|
- //1、发卡且读磁成功,不再继续检测IC,一律ICType=1,以便读取IC
|
|
|
- //2、其他情况(发卡未读到磁条或前端插卡),先查询户口系统进行卡片介质判定:
|
|
|
- // 2a:户口系统返回非纯磁条介质类型,ICType以户口为准(ICType影响后续IC读取,即:都会读IC)
|
|
|
- // 2b:其他情况(户口系统访问错(未走户口系统查或访问微服务失败或未返回介质类型或返回纯磁条卡),一律探测是否芯片卡
|
|
|
- if (m_issueStatus && bReadMag)//发卡默认给芯片卡,且读到磁道(考虑卡片放错)
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("<CheckCardType>, issueStatus is true and read mag OK");
|
|
|
- ICtype = 1;
|
|
|
- }
|
|
|
- else {
|
|
|
- int cardTypeFromHost = 0;
|
|
|
- bool bMismatch = false;
|
|
|
- //开关控制是否主机查询cardtype
|
|
|
- if (m_eacQueryFlag == 1) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("<CheckCardType>, begin query host to check cardType");
|
|
|
- cardTypeFromHost = JudgeCardType(cardNo, bMismatch);//0:失败 1:复合 2:磁条 3:ic
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("<CheckCardType>, cardTypeFromHost=%d", cardTypeFromHost);
|
|
|
- }
|
|
|
- if (cardTypeFromHost > 0 && cardTypeFromHost != 2)//户口系统返回非纯磁条介质类型
|
|
|
- {
|
|
|
- ICtype = cardTypeFromHost;
|
|
|
- //卡号不同则直接返回报错
|
|
|
- if (m_bUseCardnoMismatch && bMismatch)
|
|
|
- {
|
|
|
- return 1;//账户和户口系统的最新账户不匹配
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("<CheckCardType>, begin detect cardType");
|
|
|
- //主动探测
|
|
|
- int activeCardType;
|
|
|
- int icRetryTimes = 0;
|
|
|
- bool bIC(false);
|
|
|
- while (1)
|
|
|
- {//for poor mag only card,we always retry...
|
|
|
- l_beginTime = GetTickCountRVC();
|
|
|
- bIC = m_pCardProcess->DetectIfICCard(CARD_MACHINE_ISSUER, m_hDevHelper, activeCardType);
|
|
|
- l_endTime = GetTickCountRVC();
|
|
|
- if (!bIC)
|
|
|
- icRetryTimes++;
|
|
|
- else
|
|
|
- break;
|
|
|
- Sleep(500);
|
|
|
- if (icRetryTimes >= m_ICRetryTimes)
|
|
|
- break;
|
|
|
- }
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("<CheckCardType::DetectIfICCard>, bIC:%d", bIC);
|
|
|
- if (!bIC) {
|
|
|
- ErrorCodeEnum eErrCode = Error_Unexpect;
|
|
|
- CSimpleStringA ApiName = "";
|
|
|
- CSimpleStringA alarmMsg = "";
|
|
|
- CSimpleStringA csErrMsgWithReturnCode = "";
|
|
|
- GetCardProcessLastErr(eErrCode, ApiName, alarmMsg, csErrMsgWithReturnCode);
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(ApiName.GetData()).setCostTime(l_endTime - l_beginTime).setResultCode("RTA23CT")(csErrMsgWithReturnCode.GetData());
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, 0x2030000a, alarmMsg.GetData());
|
|
|
- }
|
|
|
-
|
|
|
- //ic探测成功,0.无磁条IC 1.复合 2.磁条 3.纯IC
|
|
|
- if (bIC) {
|
|
|
- if (bReadMag) {
|
|
|
- ICtype = 1;
|
|
|
- }
|
|
|
- else {
|
|
|
- ICtype = 3;
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_MaybeIC_Only, "<CheckCardType>, maybe IC only.");
|
|
|
- }
|
|
|
- //释放资源
|
|
|
- l_beginTime = GetTickCountRVC();
|
|
|
- eErr = m_hDevHelper->DeactivateICCard();
|
|
|
- l_endTime = GetTickCountRVC();
|
|
|
-
|
|
|
- if (eErr != Error_Succeed) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CheckCardType::DeactivateICCard err");
|
|
|
- SetErrorAndLog(eErr, MEC_DEVAPI_CARDISSUER_DeactivateICCard, "DevAdapter::DeactivateICCard", __FUNCTION__, false, l_endTime - l_beginTime, "", "CheckCardType::DeactivateICCard err");
|
|
|
- }
|
|
|
- else {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DeactivateICCard").setCostTime(l_endTime - l_beginTime)("CheckCardType::DeactivateICCard");
|
|
|
- }
|
|
|
-
|
|
|
- l_beginTime = GetTickCountRVC();
|
|
|
- eErr = m_hDevHelper->ReleaseIC();
|
|
|
- l_endTime = GetTickCountRVC();
|
|
|
-
|
|
|
- if (eErr != Error_Succeed) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CheckCardType::ReleaseIC err");
|
|
|
- SetErrorAndLog(eErr, MEC_DEVAPI_CARDISSUER_ReleaseIC, "DevAdapter::ReleaseIC", __FUNCTION__, false, l_endTime - l_beginTime, "", "CheckCardType::ReleaseIC err");
|
|
|
- }
|
|
|
- else {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::ReleaseIC").setCostTime(l_endTime - l_beginTime)("CheckCardType::ReleaseIC");
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- //判断是否支持非接
|
|
|
- if (!m_bSupportRF) {
|
|
|
- m_bUseRFTillNext = false;//无非接
|
|
|
- if (bReadMag) {
|
|
|
- ICtype = 2;
|
|
|
- }
|
|
|
- else {
|
|
|
- ICtype = 0;
|
|
|
- //既没有读到磁条,又不是IC,很大概率是插反了
|
|
|
- LogWarn(Severity_Low, Error_Unexpect, CardIssuer_UserErrorCode_Maybe_InsertCard_InWrongStyle, "<CheckCardType>, 既没读到磁条,又没检测到IC,可能插反了");
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("<CheckCardType>, begin useRF detect cardType");
|
|
|
- m_bUseRFTillNext = true;//使用非接
|
|
|
-
|
|
|
- l_beginTime = GetTickCountRVC();
|
|
|
- eErr = m_hDevHelper->MoveCard(CI_MOVECARD_RF_POSITION);
|
|
|
- l_endTime = GetTickCountRVC();
|
|
|
-
|
|
|
- if (eErr != Error_Succeed)
|
|
|
- {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CheckCardType::MoveCard err");
|
|
|
- SetErrorAndLog(eErr, MEC_DEVAPI_CARDISSUER_MoveCard, "DevAdapter::MoveCard", __FUNCTION__, false, l_endTime - l_beginTime, "", "CheckCardType::MoveCard err");
|
|
|
- }
|
|
|
- else {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::MoveCard").setCostTime(l_endTime - l_beginTime)("CheckCardType::MoveCard, (CI_MOVECARD_RF_POSITION)");
|
|
|
- }
|
|
|
-
|
|
|
- icRetryTimes = 0;
|
|
|
- bool bICRF(false);
|
|
|
- while (1)
|
|
|
- {//for poor mag only card,we always retry...
|
|
|
- l_beginTime = GetTickCountRVC();
|
|
|
- bICRF = m_pCardProcess->DetectIfICCard(CARD_MACHINE_ISSUER_RF, m_hDevHelper, activeCardType);
|
|
|
- l_endTime = GetTickCountRVC();
|
|
|
- if (!bICRF)
|
|
|
- icRetryTimes++;
|
|
|
- else
|
|
|
- break;
|
|
|
- Sleep(500);
|
|
|
- if (icRetryTimes >= m_ICRetryTimes)
|
|
|
- break;
|
|
|
- }
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("<CheckCardType::DetectIfICCard_RF>, bIC:%d", bICRF);
|
|
|
- if (!bICRF) {
|
|
|
- ErrorCodeEnum eErrCode = Error_Unexpect;
|
|
|
- CSimpleStringA ApiName = "";
|
|
|
- CSimpleStringA alarmMsg = "";
|
|
|
- CSimpleStringA csErrMsgWithReturnCode = "";
|
|
|
- GetCardProcessLastErr(eErrCode, ApiName, alarmMsg, csErrMsgWithReturnCode);
|
|
|
- DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM).setAPI(ApiName.GetData()).setCostTime(l_endTime - l_beginTime).setResultCode("RTA23C6")(csErrMsgWithReturnCode.GetData());
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, 0x20300017, alarmMsg.GetData());
|
|
|
- }
|
|
|
-
|
|
|
- if (!(bICRF && activeCardType == 'A')) {
|
|
|
- bICRF = false;
|
|
|
- }
|
|
|
-
|
|
|
- if (bICRF) {
|
|
|
- if (bReadMag) {
|
|
|
- ICtype = 1;
|
|
|
- }
|
|
|
- else {
|
|
|
- ICtype = 3;
|
|
|
- LogWarn(Severity_Middle, Error_Unexpect, CardIssuer_UserErrorCode_MaybeIC_Only, "<CheckCardType>, maybe IC only.");
|
|
|
- }
|
|
|
- //释放资源
|
|
|
- l_beginTime = GetTickCountRVC();
|
|
|
- eErr = m_hDevHelper->DeactContactlessICCard();
|
|
|
- l_endTime = GetTickCountRVC();
|
|
|
-
|
|
|
- if (eErr != Error_Succeed) {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("CheckCardType::DeactContactlessICCard err");
|
|
|
- SetErrorAndLog(eErr, MEC_DEVAPI_CARDISSUER_DeactContactlessICCard, "DevAdapter::DeactContactlessICCard", __FUNCTION__, false, l_endTime - l_beginTime, "", "CheckCardType::DeactContactlessICCard err");
|
|
|
- }
|
|
|
- else {
|
|
|
- DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("DevAdapter::DeactContactlessICCard").setCostTime(l_endTime - l_beginTime)("ReadCard_RF::DeactContactlessICCard");
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (bReadMag) {
|
|
|
- ICtype = 2;
|
|
|
- }
|
|
|
- else {
|
|
|
- ICtype = 0;
|
|
|
- //既没有读到磁条,又不是IC,很大概率是插反了
|
|
|
- LogWarn(Severity_Low, Error_Unexpect, CardIssuer_UserErrorCode_Maybe_InsertCard_InWrongStyle, "<CheckCardType>, 既没读到磁条,又没检测到IC,可能插反了");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- CSimpleStringA cardType = CSimpleStringA::Format("cardType:%d", ICtype);
|
|
|
- //LogWarn(Severity_Low, Error_Unexpect, CardIssuer_UserErrorCode_CardType, cardType.GetData());
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(cardType.GetData());
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
int CCardIssuerFSM::PreOnlineJS_ReadViaContact(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, CardIssuerStandService_ReadJS_Ans>::Pointer ctx, bool bContinue)
|
|
|
{
|
|
|
//oiltmp TODO? need to judge if need movecard to the position?
|
|
@@ -6267,7 +6034,7 @@ int CCardIssuerFSM::PreOnlineJS_ReadViaContact(SpReqAnsContext<CardIssuerStandSe
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
- ctx->Ans.result = taaResult;
|
|
|
+ ctx->Ans.pbocData = taaResult;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -6465,21 +6232,21 @@ int CCardIssuerFSM::PreOnlineJS_ReadViaRF(SpReqAnsContext<CardIssuerStandService
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
- ctx->Ans.result = taaResult;
|
|
|
+ ctx->Ans.pbocData = taaResult;
|
|
|
return 0;
|
|
|
}
|
|
|
int CCardIssuerFSM::PreOnlineJS_ICDataProcess(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, CardIssuerStandService_ReadJS_Ans>::Pointer ctx)
|
|
|
{
|
|
|
LOG_FUNCTION();
|
|
|
- if (ctx->Ans.result.GetLength() == 0)
|
|
|
+ if (ctx->Ans.pbocData.GetLength() == 0)
|
|
|
{
|
|
|
- ctx->Ans.icState = 0;
|
|
|
+ ctx->Ans.icStatus = 0;
|
|
|
ctx->Answer(Error_Succeed);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
string tmpResult, actionType, result = "", baseICData = "";
|
|
|
- tmpResult = ctx->Ans.result;
|
|
|
+ tmpResult = ctx->Ans.pbocData;
|
|
|
char* pSomeICData = new char[ONE_K];
|
|
|
ZeroMemory(pSomeICData, ONE_K);
|
|
|
int lenRet = m_pCardProcess->ConstructARQCData(tmpResult.substr(6, 4).c_str(), m_pDataToARQC, pSomeICData);
|
|
@@ -6614,7 +6381,7 @@ int CCardIssuerFSM::PreOnlineJS_ICDataProcess(SpReqAnsContext<CardIssuerStandSer
|
|
|
msgInfo["ARQC_SIZE"] = arqcLenStr.GetData();
|
|
|
CSimpleStringA arqcData = m_pDataToARQC;
|
|
|
msgInfo["ARQC_DATA"] = arqcData.GetData();
|
|
|
- msgInfo["T2TRACK2_DATA"] = t2ICTrack2;
|
|
|
+ msgInfo["IC_TRACK2"] = t2ICTrack2;
|
|
|
msgInfo["EXPIRE_DATE"] = csExpireDate;
|
|
|
msgInfo["IC_TAGS"] = baseICData.c_str();
|
|
|
|
|
@@ -6643,8 +6410,8 @@ int CCardIssuerFSM::PreOnlineJS_ICDataProcess(SpReqAnsContext<CardIssuerStandSer
|
|
|
m_pDataToARQC = NULL;
|
|
|
}
|
|
|
|
|
|
- ctx->Ans.result = result.c_str();
|
|
|
- ctx->Ans.icState = 0;
|
|
|
+ ctx->Ans.pbocData = result.c_str();
|
|
|
+ ctx->Ans.icStatus = 0;
|
|
|
DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_USER).setLogCode("QLR040220306")();
|
|
|
ctx->Answer(Error_Succeed);
|
|
|
return 0;
|
|
@@ -6660,7 +6427,7 @@ int CCardIssuerFSM::ReadJS(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, Ca
|
|
|
ReadMag(ctx);
|
|
|
ctx->Answer(Error_Succeed);
|
|
|
break;
|
|
|
- case ReadMode_ContactICFirst:
|
|
|
+ case ReadMode_ICOnly_ContactICFirst:
|
|
|
{
|
|
|
//read via contact, if failed and support RF,to read via RF
|
|
|
int ret = PreOnlineJS_ReadViaContact(ctx, m_bSupportRF);
|
|
@@ -6671,7 +6438,7 @@ int CCardIssuerFSM::ReadJS(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, Ca
|
|
|
PreOnlineJS_ICDataProcess(ctx);
|
|
|
}
|
|
|
break;
|
|
|
- case ReadMode_ContactlessICFirst:
|
|
|
+ case ReadMode_ICOnly_RFFirst:
|
|
|
{
|
|
|
//if support RF, read via RF, if failed then read via contact
|
|
|
int ret = -1;
|
|
@@ -6683,7 +6450,7 @@ int CCardIssuerFSM::ReadJS(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, Ca
|
|
|
PreOnlineJS_ICDataProcess(ctx);
|
|
|
}
|
|
|
break;
|
|
|
- case ReadMode_ContactlessICOnly:
|
|
|
+ case ReadMode_ICOnly_RFOnly:
|
|
|
{
|
|
|
if (m_bSupportRF)
|
|
|
{
|
|
@@ -6694,7 +6461,7 @@ int CCardIssuerFSM::ReadJS(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, Ca
|
|
|
ctx->Answer(Error_Unexpect, CardIssuer_UserErrorCode_NotSupportRF);
|
|
|
}
|
|
|
break;
|
|
|
- case ReadMode_Mag_ContactICFirst:
|
|
|
+ case ReadMode_MagIC_ContactICFirst:
|
|
|
{
|
|
|
//first read mag, then read via contact, if failed and support RF,to read via RF
|
|
|
ReadMag(ctx);
|
|
@@ -6706,7 +6473,7 @@ int CCardIssuerFSM::ReadJS(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, Ca
|
|
|
PreOnlineJS_ICDataProcess(ctx);
|
|
|
}
|
|
|
break;
|
|
|
- case ReadMode_Mag_ContactlessICFirst:
|
|
|
+ case ReadMode_MagIC_RFFirst:
|
|
|
{
|
|
|
//first read mag, if support RF, read via RF, if failed then read via contact
|
|
|
int ret = -1;
|
|
@@ -6719,7 +6486,7 @@ int CCardIssuerFSM::ReadJS(SpReqAnsContext<CardIssuerStandService_ReadJS_Req, Ca
|
|
|
PreOnlineJS_ICDataProcess(ctx);
|
|
|
}
|
|
|
break;
|
|
|
- case ReadMode_Mag_ContactlessICOnly:
|
|
|
+ case ReadMode_MagIC_RFOnly:
|
|
|
{
|
|
|
int ret = -1;
|
|
|
ReadMag(ctx);
|
|
@@ -6846,8 +6613,9 @@ int CCardIssuerFSM::InternalInsert()
|
|
|
bHasSetCardInType = true;
|
|
|
}
|
|
|
else {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("InternalInsert::SetCardInType CI_CARD_IN_TYPE_ALL err");
|
|
|
- SetErrorAndLog(eErr, MEC_DEVAPI_CARDISSUER_SetCardInType, "DevAdapter::SetCardInType", __FUNCTION__, false, l_endTime - l_beginTime, "", "InternalInsert::SetCardInType CI_CARD_IN_TYPE_ALL err");
|
|
|
+ SetErrorAndLog(eErr, MEC_DEVAPI_CARDISSUER_SetCardInType, "DevAdapter::SetCardInType", __FUNCTION__, IsInBusiness(), l_endTime - l_beginTime, "", "InternalInsert::SetCardInType CI_CARD_IN_TYPE_ALL err");
|
|
|
+ errRet = 1;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
}
|