diff --git a/src/main/java/com/example/demo/domain/DTO/FirstdataDTO.java b/src/main/java/com/example/demo/domain/DTO/FirstdataDTO.java
index fcb4720..8c5074a 100644
--- a/src/main/java/com/example/demo/domain/DTO/FirstdataDTO.java
+++ b/src/main/java/com/example/demo/domain/DTO/FirstdataDTO.java
@@ -19,4 +19,7 @@ public class FirstdataDTO {
private String orderId;
private String currency;
private Integer total;
+ private Integer amount;
+ private Integer fee;
+ private Integer net;
}
diff --git a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
index 0474632..e26aa0a 100644
--- a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
+++ b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
@@ -1,6 +1,7 @@
package com.example.demo.mapper.cash;
//import com.example.demo.domain.DTO.PaymentDTO;
+import com.example.demo.domain.DTO.FirstdataDTO;
import com.example.demo.domain.DTO.PaymentDTO;
import com.example.demo.domain.DTO.StripeDTO;
import com.example.demo.domain.entity.CashRecord;
@@ -71,6 +72,8 @@ public interface CashCollectionMapper {
@Param("auditId") Integer auditId,
@Param("version") Integer version);
+ CashCollection selectByBankCode(String bankCode);
void updateByGoldCoinOrderCodeByPayment(PaymentDTO paymentDTO);
void updateByGoldCoinOrderCodeByStripe(StripeDTO stripeDTO);
+ void updateByGoldCoinOrderCodeByFirstdata(FirstdataDTO firstdataDTO);
}
diff --git a/src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java
index f5c52d5..e60d425 100644
--- a/src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java
+++ b/src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java
@@ -526,6 +526,10 @@ public class BankServiceImpl implements BankService {
@Override
public Result getFirstdata(BankDTO bankDTO) {
try {
+ CashCollection cashCollection = cashCollectionMapper.selectByBankCode(bankDTO.getOrderNo());
+ if (cashCollection == null) {
+ return Result.error("金币系统当前日期 " + " 该银行订单号 " + bankDTO.getOrderNo() + " 未查到");
+ }
// 获取签名参数
FirstdataRequestDTO firstdataRequestDTO = generatePaymentAsiaSignature();
@@ -580,6 +584,24 @@ public class BankServiceImpl implements BankService {
firstdataDTO.setCurrency(currency);
firstdataDTO.setTotal(total);
+ // 根据要求设置amount为永久金币×100
+ Integer amount = cashCollection.getPermanentGold() ;
+ firstdataDTO.setAmount(amount);
+
+ // 根据国家计算fee
+ double feeValue;
+ if ("Singapore".equals(country)) {
+ // 新加坡:amount的值×百分之2.8加上20保留整数四舍五入
+ feeValue = Math.round(amount * 0.028 + 20);
+ } else {
+ // 其他国家:amount的值×百分之3加20
+ feeValue = Math.round(amount * 0.03 + 20);
+ }
+ firstdataDTO.setFee((int) feeValue);
+
+ // net的值为amount减去fee
+ firstdataDTO.setNet(amount - (int) feeValue);
+
// 将firstdataDTO存入bankVO
bankVO.setFirstdataDTO(firstdataDTO);
@@ -589,6 +611,9 @@ public class BankServiceImpl implements BankService {
extractedData.put("orderId", orderId);
extractedData.put("currency", currency);
extractedData.put("total", total);
+ extractedData.put("amount", amount);
+ extractedData.put("fee", (int) feeValue);
+ extractedData.put("net", amount - (int) feeValue);
extractedData.put("success", true); // 添加成功标识
// 将提取的数据转换为JSON字符串并添加到message列表
@@ -597,6 +622,8 @@ public class BankServiceImpl implements BankService {
// 将message存入bankVO
bankVO.setMessage(message);
+ cashCollectionMapper.updateByGoldCoinOrderCodeByFirstdata(bankVO.getFirstdataDTO());
+
return Result.success(bankVO);
} else {
// 没有数据时也添加失败标识
@@ -625,6 +652,7 @@ public class BankServiceImpl implements BankService {
return Result.error("Firstdata银行接口调用失败: " + e.getMessage());
}
}
+
/**
* 生成PaymentAsia API所需的签名
* @return 签名字符串
diff --git a/src/main/resources/cashMapper/CashCollectionMapper.xml b/src/main/resources/cashMapper/CashCollectionMapper.xml
index bd5e1fd..ce7fdc3 100644
--- a/src/main/resources/cashMapper/CashCollectionMapper.xml
+++ b/src/main/resources/cashMapper/CashCollectionMapper.xml
@@ -302,6 +302,12 @@
AND version = #{version}
+
+
+
+
update cash_record_collection
@@ -328,4 +334,15 @@
order_no_status=0
where order_code=#{orderNo}
+
+ update cash_record_collection
+ SET
+ payment_currency='3',
+ received_currency='3',
+ payment_amount=#{amount},
+ received_amount=#{net},
+ handling_charge=#{fee},
+ order_no_status=0
+ where order_code=#{orderId}
+
\ No newline at end of file