|
@@ -8,13 +8,15 @@
|
|
|
#include "../Define/define.h"
|
|
|
#include "../ShareMemory/shmMem.h"
|
|
|
#include "../SelectGun/SelectGun.h"
|
|
|
+#include "../DataBase/DataBase.h"
|
|
|
|
|
|
#include "main.h"
|
|
|
#include "../timeout.h"
|
|
|
-static DcCommonInfo *ShmDcCommonData = NULL;
|
|
|
-static struct SysInfoData *pSysInfo = NULL;
|
|
|
-#define PREAUTHMONEY 2
|
|
|
-
|
|
|
+static DcCommonInfo *ShmDcCommonData = NULL;
|
|
|
+static SelectGunInfo *ShmSelectGunInfo = NULL;
|
|
|
+static struct SysInfoData *pSysInfo = NULL;
|
|
|
+#define PREAUTHMONEY 1
|
|
|
+bool isDeductDb_ready;
|
|
|
|
|
|
static char *rfidPortName = "/dev/ttyS2";
|
|
|
|
|
@@ -272,6 +274,7 @@ void AuthorizeToCharge()
|
|
|
SelectGunInfo *ShmSelectGunInfo = (SelectGunInfo *)GetShmSelectGunInfo();
|
|
|
struct ChargingInfoData *pDcChargingInfo = NULL;
|
|
|
pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
|
|
|
+ ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData();
|
|
|
if(isAuthorizedComplete())
|
|
|
{
|
|
|
|
|
@@ -285,6 +288,8 @@ void AuthorizeToCharge()
|
|
|
|
|
|
|
|
|
DetectPluginStart();
|
|
|
+ if (ShmDcCommonData->AuthPass_flag[pSysInfo->CurGunSelected] == TRUE)
|
|
|
+ pSysInfo->SystemPage = _PAGE_PLUGIN;
|
|
|
|
|
|
|
|
|
} else {
|
|
@@ -304,7 +309,8 @@ void ScannerCardProcess(void)
|
|
|
struct ChargingInfoData *pDcChargingInfo = NULL;
|
|
|
pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(pSysInfo->CurGunSelected);
|
|
|
|
|
|
- if (!isDetectPlugin() && pSysInfo->SystemPage == _PAGE_SENSING &&
|
|
|
+ if (!isDetectPlugin() && (pSysInfo->SystemPage == _PAGE_SENSING ||
|
|
|
+ pSysInfo->SystemPage == _PAGE_AUTHORIZE ) &&
|
|
|
pDcChargingInfo->SystemStatus == S_IDLE &&
|
|
|
pSysWarning->Level != WARN_LV_ER
|
|
|
pSysConfig->AuthorisationMode == AUTH_MODE_ENABLE*/) {
|
|
@@ -326,7 +332,17 @@ void ScannerCardProcess(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void WritePayResult(int result ,uint8_t gunIndex)
|
|
|
+{
|
|
|
+ ShmDcCommonData->TransactionInfo[gunIndex].Amount = ShmDcCommonData->finalcost[gunIndex];
|
|
|
+ memcpy(ShmDcCommonData->TransactionInfo[gunIndex].ApprovalNo , ShmDcCommonData->pCreditCard[gunIndex].ApprovalNo,9);
|
|
|
+ memcpy(ShmDcCommonData->TransactionInfo[gunIndex].CardNo , ShmDcCommonData->pCreditCard[gunIndex].CardNo,20);
|
|
|
+ ShmDcCommonData->TransactionInfo[gunIndex].DeductResult = result;
|
|
|
+ ShmDcCommonData->TransactionInfo[gunIndex].IsDonateInvoice = ShmDcCommonData->donate_flag[gunIndex];
|
|
|
+ ShmDcCommonData->TransactionInfo[gunIndex].TransactionId = ShmSelectGunInfo->PricesInfo[gunIndex].TransactionId;
|
|
|
+ memcpy(&ShmDcCommonData->TransactionInfo[gunIndex].VemData,&ShmDcCommonData->pCreditCard[gunIndex].VemData,64);
|
|
|
|
|
|
+}
|
|
|
static int InitialRfidPort(void)
|
|
|
{
|
|
|
int fd = open(rfidPortName, O_RDWR);
|
|
@@ -366,79 +382,128 @@ void CreateRfidFork(void)
|
|
|
int fd = -1;
|
|
|
int isContinue = 1;
|
|
|
RFID rfid = {0};
|
|
|
+ RecordTransactionInfo deduct;
|
|
|
fd = InitialRfidPort();
|
|
|
struct SysConfigData *pSysConfig = (struct SysConfigData *)GetShmSysConfigData();
|
|
|
ShmDcCommonData = (DcCommonInfo *)GetShmDcCommonData();
|
|
|
-
|
|
|
+ ShmSelectGunInfo = (SelectGunInfo *)GetShmSelectGunInfo();
|
|
|
+ struct ChargingInfoData *pDcChargingInfo = NULL;
|
|
|
+ ShmDcCommonData->reupload_deduct_status = 0;
|
|
|
+ int gunIndex;
|
|
|
+ int uploadIndex = 0;
|
|
|
+ int ReAuthComplete_Index = 0;
|
|
|
+ if(DeductDB_Open() != PASS)
|
|
|
+ {
|
|
|
+ isDeductDb_ready = false;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ isDeductDb_ready = true;
|
|
|
+ }
|
|
|
|
|
|
int result;
|
|
|
+ int is_idle = FALSE;
|
|
|
while (isContinue) {
|
|
|
result = 0;
|
|
|
usleep(500000);
|
|
|
ftime(&SeqEndTime);
|
|
|
SeqEndTime.time = time(NULL);
|
|
|
tm = localtime(&SeqEndTime.time);
|
|
|
-
|
|
|
+
|
|
|
if (tm->tm_hour == 23 && tm->tm_min == 00 && tm->tm_sec == 0) {
|
|
|
result = CreditCardUnionSettlement(fd,"TCC Test",&ShmDcCommonData->pCreditCard[0]);
|
|
|
if (result > 0) {
|
|
|
log_info("CreditCardUnionSettlement OK");
|
|
|
- log_info("Get Money:%s",ShmDcCommonData->pCreditCard[0].TransAmount);
|
|
|
} else
|
|
|
log_info("CreditCardUnionSettlement FAIL");
|
|
|
}
|
|
|
|
|
|
- if (pSysInfo->SystemPage == _PAGE_AUTHORIZE) {
|
|
|
-
|
|
|
- result = 1;
|
|
|
+ if (tm->tm_min%2 == 0 && pSysInfo->SystemPage == _PAGE_IDLE) {
|
|
|
+ if(ShmDcCommonData->reupload_deduct_status == 0) {
|
|
|
+
|
|
|
+ if (DB_GetReUploadDeduct(&uploadIndex,&ShmDcCommonData->UploadRedectInfo) == PASS) {
|
|
|
+ ShmDcCommonData->reupload_deduct_status = 1;
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ }
|
|
|
+ } else if (ShmDcCommonData->reupload_deduct_status == 2) {
|
|
|
+ UpdateDeductInfoStatus(&uploadIndex,&ShmDcCommonData->UploadRedectInfo);
|
|
|
+ ShmDcCommonData->reupload_deduct_status = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (pSysInfo->SystemPage == _PAGE_AUTHORIZE && ShmDcCommonData->GetCardNo[pSysInfo->CurGunSelected] == FALSE) {
|
|
|
+ result = CreditCardSearch(fd,"TCC Test",&ShmDcCommonData->pCreditCard[pSysInfo->CurGunSelected]);
|
|
|
+
|
|
|
StartSystemTimeoutDet(Timeout_ScanCard);
|
|
|
if (result > 0) {
|
|
|
- pSysInfo->SystemPage = _PAGE_SENSING;
|
|
|
- strcpy((char *)pSysConfig->UserId,"AutoStartCharging");
|
|
|
-
|
|
|
+
|
|
|
+ strncpy((char *)pSysConfig->UserId,ShmDcCommonData->pCreditCard[pSysInfo->CurGunSelected].CardNo,20);
|
|
|
+ log_info("Authorize card:%s",pSysConfig->UserId);
|
|
|
+ StopSystemTimeoutDet();
|
|
|
+ ShmDcCommonData->GetCardNo[pSysInfo->CurGunSelected] = TRUE;
|
|
|
+
|
|
|
} else if (result < 0) {
|
|
|
|
|
|
log_info("No Card Scanning...");
|
|
|
}
|
|
|
- } else if (pSysInfo->SystemPage == _PAGE_SENSING) {
|
|
|
- result = CreditCardPreAuth(fd, PREAUTHMONEY,"TCC Test", &ShmDcCommonData->pCreditCard[pSysInfo->CurGunSelected]);
|
|
|
-
|
|
|
- if (result > 0) {
|
|
|
- ShmDcCommonData->AuthPass_flag[pSysInfo->CurGunSelected] = TRUE;
|
|
|
- pSysInfo->SystemPage = _PAGE_PLUGIN;
|
|
|
-
|
|
|
-
|
|
|
- } else if (result < 0) {
|
|
|
- pSysInfo->SystemPage = _PAGE_AUTHORIZE_FAIL;
|
|
|
- ShmDcCommonData->AuthPass_flag[pSysInfo->CurGunSelected] = FALSE;
|
|
|
- memset(&ShmDcCommonData->pCreditCard[pSysInfo->CurGunSelected], 0, sizeof(TransInfo));
|
|
|
+ }
|
|
|
+ is_idle = FALSE;
|
|
|
+ for (gunIndex = 0; gunIndex < pSysConfig->TotalConnectorCount; gunIndex++) {
|
|
|
+ pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(gunIndex);
|
|
|
+ if (pDcChargingInfo->SystemStatus == S_IDLE) {
|
|
|
+ is_idle = TRUE;
|
|
|
}
|
|
|
- } else if (pSysInfo->SystemPage == _PAGE_PAYING) {
|
|
|
- result = CreditCardPreAuthComplete(fd, 1 ,"TCC Test",
|
|
|
- &ShmDcCommonData->pCreditCard[pSysInfo->CurGunSelected].VemData[0],
|
|
|
- &ShmDcCommonData->pCreditCard[pSysInfo->CurGunSelected]);
|
|
|
-
|
|
|
- if (result > 0 ) {
|
|
|
- log_info("Credit Card Spend Money:%d",ShmDcCommonData->finalcost[pSysInfo->CurGunSelected]);
|
|
|
- ShmDcCommonData->PayPass_flag[pSysInfo->CurGunSelected] = TRUE;
|
|
|
- pSysInfo->SystemPage = _PAGE_COMPLETE;
|
|
|
-
|
|
|
- result = CreditCardUnionSettlement(fd,"TCC Test",&ShmDcCommonData->pCreditCard[0]);
|
|
|
- if (result > 0) {
|
|
|
- log_info("CreditCardUnionSettlement OK");
|
|
|
- log_info("Get Money:%s",ShmDcCommonData->pCreditCard[0].TransAmount);
|
|
|
- } else
|
|
|
- log_info("CreditCardUnionSettlement FAIL");
|
|
|
- */
|
|
|
|
|
|
- } else {
|
|
|
- log_info("PAYING FAIL");
|
|
|
- ShmDcCommonData->PayPass_flag[pSysInfo->CurGunSelected] = FALSE;
|
|
|
- pSysInfo->SystemPage = _PAGE_PAYFAIL;
|
|
|
+ if (ShmDcCommonData->StopCharge[gunIndex] == TRUE && ShmDcCommonData->finalcost_flag[gunIndex]) {
|
|
|
+ ShmDcCommonData->StopCharge[gunIndex] = FALSE;
|
|
|
+ StopGunInfoTimeoutDet(gunIndex);
|
|
|
+ result = CreditCardPreAuthComplete(fd,1 ,"TCC Test",
|
|
|
+ &ShmDcCommonData->pCreditCard[gunIndex].VemData[0],
|
|
|
+ &ShmDcCommonData->pCreditCard[gunIndex]);
|
|
|
+
|
|
|
+ if (result > 0 ) {
|
|
|
+ log_info("Credit Card Spend Money:%.1f",ShmDcCommonData->finalcost[gunIndex]);
|
|
|
+ pSysInfo->SystemPage = _PAGE_COMPLETE;
|
|
|
+ WritePayResult(TRUE,gunIndex);
|
|
|
+ ShmDcCommonData->PayPass_flag[gunIndex] = TRUE;
|
|
|
+
|
|
|
+ } else {
|
|
|
+ log_info("PAYING FAIL");
|
|
|
+ ShmDcCommonData->PayPass_flag[gunIndex] = FALSE;
|
|
|
+ pSysInfo->SystemPage = _PAGE_PAYFAIL;
|
|
|
+ WritePayResult(FALSE,gunIndex);
|
|
|
+ }
|
|
|
+ if (isDeductDb_ready == TRUE) {
|
|
|
+ InsertDeductInfo(gunIndex,&ShmDcCommonData->TransactionInfo[gunIndex]);
|
|
|
+ }
|
|
|
+ ShmDcCommonData->PayFinish[gunIndex] = TRUE;
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
+ if (is_idle == TRUE && tm->tm_min%2 == 0 &&
|
|
|
+ pSysInfo->SystemPage == _PAGE_IDLE && ShmDcCommonData->reupload_deduct_status == 0) {
|
|
|
+ if (DB_GetReDeductInfo(&ReAuthComplete_Index,&ShmDcCommonData->ReAuthComplete) == PASS ) {
|
|
|
|
|
|
+ result = CreditCardPreAuthComplete(fd,(int)ShmDcCommonData->ReAuthComplete.Amount ,"TCC Test",
|
|
|
+ &ShmDcCommonData->ReAuthComplete.VemData[0],
|
|
|
+ &ShmDcCommonData->pCreditCard[0]);
|
|
|
+ if (result > 0) {
|
|
|
+ ShmDcCommonData->ReAuthComplete.DeductResult = YES;
|
|
|
+ ShmDcCommonData->ReAuthComplete.IsUpload = NO;
|
|
|
+ UpdateDeductInfoStatus(&ReAuthComplete_Index,&ShmDcCommonData->ReAuthComplete);
|
|
|
+ log_info("PreAuthComplete OK");
|
|
|
+ } else if ( result < 0) {
|
|
|
+ log_info("Backgroud ID:%d Amount:%d VemData:%s PreAuthComplete fail",
|
|
|
+ ShmDcCommonData->ReAuthComplete.TransactionId,
|
|
|
+ (int)ShmDcCommonData->ReAuthComplete.Amount,
|
|
|
+ ShmDcCommonData->ReAuthComplete.VemData);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log_info("DB_GetReDeductInfo Fail");
|
|
|
+ }
|
|
|
+ }
|
|
|
if(ShmDcCommonData->PreAuth_Config == _CREDITCARD_CANCEL) {
|
|
|
ShmDcCommonData->PreAuth_Result = CreditCardPreAuthCancel(fd,PREAUTHMONEY,"TCC Test",
|
|
|
&ShmDcCommonData->pCreditCard[pSysInfo->CurGunSelected].ApprovalNo[0],
|
|
@@ -454,6 +519,25 @@ void CreateRfidFork(void)
|
|
|
|
|
|
}
|
|
|
ShmDcCommonData->PreAuth_Config = _CREDITCARD_IDLE;
|
|
|
+ } else if (ShmDcCommonData->PreAuth_Config == _CREDITCARD_PREAUTH) {
|
|
|
+ result = CreditCardPreAuth(fd, PREAUTHMONEY,"TCC Test", &ShmDcCommonData->pCreditCard[pSysInfo->CurGunSelected]);
|
|
|
+
|
|
|
+ if (result > 0) {
|
|
|
+ ShmDcCommonData->AuthPass_flag[pSysInfo->CurGunSelected] = TRUE;
|
|
|
+
|
|
|
+
|
|
|
+ log_info("PreAuth OK");
|
|
|
+ } else if (result < 0) {
|
|
|
+ struct ChargingInfoData *pDcChargingInfo = NULL;
|
|
|
+
|
|
|
+ pSysInfo->SystemPage = _PAGE_AUTHORIZE_FAIL;
|
|
|
+
|
|
|
+ ShmDcCommonData->AuthPass_flag[pSysInfo->CurGunSelected] = FALSE;
|
|
|
+ memset(&ShmDcCommonData->pCreditCard[pSysInfo->CurGunSelected], 0, sizeof(TransInfo));
|
|
|
+ log_info("PreAuth Fail");
|
|
|
+ ShmDcCommonData->PreAuth_Config = _CREDITCARD_CANCEL;
|
|
|
+ }
|
|
|
+ ShmDcCommonData->PreAuth_Config = _CREDITCARD_IDLE;
|
|
|
}
|
|
|
|
|
|
|