|
@@ -891,15 +891,23 @@ static int chargingcapabilityHandle(uint8_t *data, uint8_t plugNum)
|
|
|
ShmSelectGunInfo->PricesInfo[plugNum].UserPrices = transPricesUnit(ntohl(pAccountInfo->UserPrices));
|
|
|
pDcChargingInfo->ChargingFee = transPricesUnit(ntohl(pAccountInfo->TotalCost));
|
|
|
ShmSelectGunInfo->PricesInfo[plugNum].Balance = transPricesUnit(ntohl(pAccountInfo->Balance));
|
|
|
+ ShmSelectGunInfo->PricesInfo[plugNum].Discount = transPricesUnit(ntohl(pAccountInfo->Discount));
|
|
|
+ ShmSelectGunInfo->PricesInfo[plugNum].TransactionId = ntohl(pAccountInfo->Transaction);
|
|
|
|
|
|
if ((pricesInfo[plugNum].UserPrices != ShmSelectGunInfo->PricesInfo[plugNum].UserPrices) ||
|
|
|
- (pricesInfo[plugNum].Balance != ShmSelectGunInfo->PricesInfo[plugNum].Balance)) {
|
|
|
+ (pricesInfo[plugNum].Balance != ShmSelectGunInfo->PricesInfo[plugNum].Balance) ||
|
|
|
+ (pricesInfo[plugNum].Discount != ShmSelectGunInfo->PricesInfo[plugNum].Discount) ||
|
|
|
+ (pricesInfo[plugNum].TransactionId != ShmSelectGunInfo->PricesInfo[plugNum].TransactionId)) {
|
|
|
pricesInfo[plugNum].UserPrices = ShmSelectGunInfo->PricesInfo[plugNum].UserPrices;
|
|
|
pricesInfo[plugNum].Balance = ShmSelectGunInfo->PricesInfo[plugNum].Balance;
|
|
|
+ pricesInfo[plugNum].Discount = ShmSelectGunInfo->PricesInfo[plugNum].Discount;
|
|
|
+ pricesInfo[plugNum].TransactionId = ShmSelectGunInfo->PricesInfo[plugNum].TransactionId;
|
|
|
|
|
|
- log_info("id = %d, user prices = %.2f, Total cost = %.2f, Account balances = %.2f, currency = %s",
|
|
|
+ log_info("id = %d, transaction id = %d, user prices = %.2f, Discount = %.2f, Total cost = %.2f, Account balances = %.2f, currency = %s",
|
|
|
plugNum,
|
|
|
+ ShmSelectGunInfo->PricesInfo[plugNum].TransactionId,
|
|
|
ShmSelectGunInfo->PricesInfo[plugNum].UserPrices,
|
|
|
+ ShmSelectGunInfo->PricesInfo[plugNum].Discount,
|
|
|
pDcChargingInfo->ChargingFee,
|
|
|
ShmSelectGunInfo->PricesInfo[plugNum].Balance,
|
|
|
(uint8_t *)GetCurrency(pSysConfig->BillingData.Currency)
|
|
@@ -1305,6 +1313,9 @@ static int responsePackeHandle(int fd, uint8_t *pResult, uint8_t plugNum, uint8_
|
|
|
break;
|
|
|
|
|
|
case REG_DEDUCT_INFO:
|
|
|
+ if (pCsuResult->Data.Result == COMMAND_RESULT_NG) {
|
|
|
+ return COMMAND_RESULT_NG;
|
|
|
+ }
|
|
|
break;
|
|
|
|
|
|
default:
|
|
@@ -1426,30 +1437,41 @@ static int readChargerStationInfo(int fd)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int writeDeductInfo(int fd, uint8_t id,uint8_t gunIndex)
|
|
|
+static int writeDeductInfo(int fd, uint8_t id,uint8_t gunIndex, RecordTransactionInfo *transactionInfo)
|
|
|
{
|
|
|
int ret = PASS;
|
|
|
- uint8_t dataBuf[6] = {0};
|
|
|
- DeductInfoVar DeductInfo;
|
|
|
-
|
|
|
- DeductInfo.Amount = ShmDcCommonData->finalcost[gunIndex];
|
|
|
- DeductInfo.DeductResult = ShmDcCommonData->PayPass_flag[gunIndex];
|
|
|
- DeductInfo.IsDonateInvoice = ShmDcCommonData->donate_flag[gunIndex];
|
|
|
-
|
|
|
- dataBuf[0] = DeductInfo.DeductResult;
|
|
|
- dataBuf[1] = DeductInfo.IsDonateInvoice;
|
|
|
- dataBuf[2] = (DeductInfo.Amount >> 24) & 0xFF;
|
|
|
- dataBuf[3] = (DeductInfo.Amount >> 16) & 0xFF;
|
|
|
- dataBuf[4] = (DeductInfo.Amount >> 8) & 0xFF;
|
|
|
- dataBuf[5] = (DeductInfo.Amount & 0xFF);
|
|
|
-
|
|
|
+ uint8_t dataBuf[22] = {0};
|
|
|
+ int i;
|
|
|
+
|
|
|
+ memset((char *)dataBuf, 0x00, sizeof(dataBuf));
|
|
|
+ dataBuf[0] = transactionInfo->DeductResult;
|
|
|
+ dataBuf[1] = transactionInfo->IsDonateInvoice;
|
|
|
+ dataBuf[2] = (transactionInfo->TransactionId >> 24) & 0xFF;
|
|
|
+ dataBuf[3] = (transactionInfo->TransactionId >> 16) & 0xFF;
|
|
|
+ dataBuf[4] = (transactionInfo->TransactionId >> 8) & 0xFF;
|
|
|
+ dataBuf[5] = (transactionInfo->TransactionId & 0xFF);
|
|
|
+
|
|
|
+ int amount = (int)(transactionInfo->Amount * 100);
|
|
|
+
|
|
|
+ dataBuf[6] = (amount >> 24) & 0xFF;
|
|
|
+ dataBuf[7] = (amount >> 16) & 0xFF;
|
|
|
+ dataBuf[8] = (amount >> 8) & 0xFF;
|
|
|
+ dataBuf[9] = (amount & 0xFF);
|
|
|
+ memcpy((char *)&dataBuf[10], transactionInfo->ApprovalNo,9);
|
|
|
+ /*
|
|
|
+ for(i=0;i<22;i++) {
|
|
|
+ log_info("dataBuf[%d]:0x%x",i,dataBuf[i]);
|
|
|
+ }
|
|
|
+ */
|
|
|
+ log_info("Gun[%d] TransactionId:%d DeductResult:%d IsDonateInvoice:%d Amount:%f",
|
|
|
+ gunIndex,transactionInfo->TransactionId,transactionInfo->DeductResult,transactionInfo->IsDonateInvoice,transactionInfo->Amount);
|
|
|
// copy deduct result to dataBuf here
|
|
|
|
|
|
if ((ret = composeSocketData(fd,
|
|
|
id,
|
|
|
OP_WRITE_DATA,
|
|
|
REG_DEDUCT_INFO,
|
|
|
- 6,
|
|
|
+ 22,
|
|
|
&dataBuf[0])) == FAIL) {
|
|
|
return ret;
|
|
|
}
|
|
@@ -2026,12 +2048,13 @@ static int messageTrigger(int fd, uint8_t plugNum, uint8_t gunID, uint8_t curReg
|
|
|
case REG_CHARGING_CAP:
|
|
|
if(gMoreInfoReq[plugNum].bits.FinalCostReq)
|
|
|
{
|
|
|
- readChargingCapability(fd, gunID);
|
|
|
- gMoreInfoReq[plugNum].bits.FinalCostReq = false;
|
|
|
- pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(plugNum);
|
|
|
- ShmDcCommonData->finalcost[plugNum] = (int)pDcChargingInfo->ChargingFee;
|
|
|
- ShmDcCommonData->finalcost_flag[plugNum] = TRUE;
|
|
|
- log_info("Gun %d get final cost", plugNum);
|
|
|
+ if (readChargingCapability(fd, gunID) == PASS) {
|
|
|
+ gMoreInfoReq[plugNum].bits.FinalCostReq = false;
|
|
|
+ pDcChargingInfo = (struct ChargingInfoData *)GetDcChargingInfoData(plugNum);
|
|
|
+ ShmDcCommonData->finalcost[plugNum] = pDcChargingInfo->ChargingFee;
|
|
|
+ ShmDcCommonData->finalcost_flag[plugNum] = TRUE;
|
|
|
+ log_info("Gun %d get final cost", plugNum);
|
|
|
+ }
|
|
|
}
|
|
|
curReg = REG_PLUG_IN_STATE;
|
|
|
break;
|
|
@@ -2303,12 +2326,14 @@ static void systemStatusProcess(int fd, uint8_t totalGun, uint8_t plugNum, uint8
|
|
|
ftime(&gRegTimeUp[plugNum][REG_CHARGING_CAP]);
|
|
|
}
|
|
|
if(!DeductResultReq[plugNum] && pDcChargingInfo->SystemStatus == S_ALARM &&
|
|
|
- ShmDcCommonData->finalcost_flag[plugNum] == TRUE)
|
|
|
+ ShmDcCommonData->PayFinish[plugNum] == TRUE)
|
|
|
{
|
|
|
DeductResultReq[plugNum] = YES;
|
|
|
log_info("Write Gun %d Deduct Result", plugNum);
|
|
|
- writeDeductInfo(fd, gunID,plugNum);
|
|
|
+ writeDeductInfo(fd, gunID,plugNum, &ShmDcCommonData->TransactionInfo[plugNum]);
|
|
|
ShmDcCommonData->finalcost_flag[plugNum] = FALSE;
|
|
|
+ ShmDcCommonData->PayFinish[plugNum] = FALSE;
|
|
|
+ log_info("writeDeductInfo finish");
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -2462,6 +2487,17 @@ static void systemStatusProcess(int fd, uint8_t totalGun, uint8_t plugNum, uint8
|
|
|
writePresentChargingInfo(fd, plugNum, gunID);
|
|
|
ftime(&gRegTimeUp[plugNum][REG_PRESENT_CHARGING_INFO]);
|
|
|
}
|
|
|
+ if(!DeductResultReq[plugNum] &&
|
|
|
+ pDcChargingInfo->SystemStatus == S_TERMINATING &&
|
|
|
+ ShmDcCommonData->PayFinish[plugNum] == TRUE)
|
|
|
+ {
|
|
|
+ DeductResultReq[plugNum] = YES;
|
|
|
+ log_info("Write Gun %d Deduct Result", plugNum);
|
|
|
+ writeDeductInfo(fd, gunID,plugNum, &ShmDcCommonData->TransactionInfo[plugNum]);
|
|
|
+ ShmDcCommonData->finalcost_flag[plugNum] = FALSE;
|
|
|
+ ShmDcCommonData->PayFinish[plugNum] = FALSE;
|
|
|
+ log_info("writeDeductInfo finish");
|
|
|
+ }
|
|
|
break;
|
|
|
|
|
|
case S_COMPLETE:
|
|
@@ -2475,14 +2511,14 @@ static void systemStatusProcess(int fd, uint8_t totalGun, uint8_t plugNum, uint8
|
|
|
ftime(&gRegTimeUp[plugNum][REG_CHARGING_CAP]);
|
|
|
}
|
|
|
if(!DeductResultReq[plugNum] &&
|
|
|
- (pDcChargingInfo->SystemStatus == S_COMPLETE ||
|
|
|
- pDcChargingInfo->SystemStatus == S_TERMINATING) &&
|
|
|
- ShmDcCommonData->finalcost_flag[plugNum] == TRUE)
|
|
|
+ ShmDcCommonData->PayFinish[plugNum] == TRUE)
|
|
|
{
|
|
|
DeductResultReq[plugNum] = YES;
|
|
|
log_info("Write Gun %d Deduct Result", plugNum);
|
|
|
- writeDeductInfo(fd, gunID,plugNum);
|
|
|
+ writeDeductInfo(fd, gunID,plugNum, &ShmDcCommonData->TransactionInfo[plugNum]);
|
|
|
ShmDcCommonData->finalcost_flag[plugNum] = FALSE;
|
|
|
+ ShmDcCommonData->PayFinish[plugNum] = FALSE;
|
|
|
+ log_info("writeDeductInfo finish");
|
|
|
}
|
|
|
break;
|
|
|
|