Browse Source

12月8日firstdata接口

sunjiabei/feature-20251202094523-银行接口同步
sunjiabei 1 month ago
parent
commit
eff7ea459e
  1. 3
      src/main/java/com/example/demo/domain/DTO/FirstdataDTO.java
  2. 3
      src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
  3. 28
      src/main/java/com/example/demo/serviceImpl/cash/BankServiceImpl.java
  4. 17
      src/main/resources/cashMapper/CashCollectionMapper.xml

3
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;
}

3
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);
}

28
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 签名字符串

17
src/main/resources/cashMapper/CashCollectionMapper.xml

@ -302,6 +302,12 @@
AND version = #{version}
</update>
<select id="selectByBankCode" resultType="com.example.demo.domain.vo.cash.CashCollection">
select * from cash_record_collection where bank_code=#{bankCode}
</select>
<!--根据OrderCode订单号更新收款订单-->
<update id="updateByGoldCoinOrderCodeByPayment">
update cash_record_collection
@ -328,4 +334,15 @@
order_no_status=0
where order_code=#{orderNo}
</update>
<update id="updateByGoldCoinOrderCodeByFirstdata">
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}
</update>
</mapper>
Loading…
Cancel
Save