From eff7ea459ea5a58fb27343d7b787747642d5073c Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Mon, 8 Dec 2025 17:49:56 +0800 Subject: [PATCH] =?UTF-8?q?12=E6=9C=888=E6=97=A5firstdata=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/demo/domain/DTO/FirstdataDTO.java | 3 +++ .../demo/mapper/cash/CashCollectionMapper.java | 3 +++ .../demo/serviceImpl/cash/BankServiceImpl.java | 28 ++++++++++++++++++++++ .../resources/cashMapper/CashCollectionMapper.xml | 17 +++++++++++++ 4 files changed, 51 insertions(+) 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