diff --git a/jsowell-admin/src/test/java/PaymentTestController.java b/jsowell-admin/src/test/java/PaymentTestController.java index 3a68245d3..58a5c7d1d 100644 --- a/jsowell-admin/src/test/java/PaymentTestController.java +++ b/jsowell-admin/src/test/java/PaymentTestController.java @@ -9,6 +9,7 @@ import com.huifu.adapay.model.Payment; import com.huifu.adapay.model.PaymentReverse; import com.huifu.adapay.model.Refund; import com.jsowell.JsowellApplication; +import com.jsowell.adapay.common.DivMember; import com.jsowell.adapay.common.PaymentConfirmInfo; import com.jsowell.adapay.dto.PaymentConfirmParam; import com.jsowell.adapay.dto.QueryPaymentConfirmDTO; @@ -21,9 +22,13 @@ import com.jsowell.adapay.vo.AdapayCorpMemberVO; import com.jsowell.adapay.vo.OrderSplitResult; import com.jsowell.api.uniapp.customer.TempController; import com.jsowell.common.constant.CacheConstants; +import com.jsowell.common.constant.Constants; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.ykc.ScenarioEnum; +import com.jsowell.common.util.AdapayUtil; import com.jsowell.common.util.DateUtils; +import com.jsowell.common.util.PageUtils; +import com.jsowell.pile.domain.AdapayUnsplitRecord; import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.domain.OrderDetail; import com.jsowell.pile.domain.OrderUnsplitRecord; @@ -801,18 +806,135 @@ public class PaymentTestController { int pageSize = 3; PageHelper.startPage(pageNum, pageSize); List adapayUnsplitRecordVOS = adapayUnsplitRecordService.queryList(); + + // 分账账户 + List divMemberList = Lists.newArrayList(); for (AdapayUnsplitRecordVO adapayUnsplitRecordVO : adapayUnsplitRecordVOS) { - System.out.println(adapayUnsplitRecordVO); + String orderCode = adapayUnsplitRecordVO.getOrderCode(); + String paymentId = adapayUnsplitRecordVO.getPaymentId(); // 获取待分账金额 - String waitSplitAmount = adapayUnsplitRecordVO.getWaitSplitAmount(); + BigDecimal waitSplitAmount = adapayUnsplitRecordVO.getWaitSplitAmount() != null ? new BigDecimal(adapayUnsplitRecordVO.getWaitSplitAmount()) : BigDecimal.ZERO; // 如果waitSplitAmount > 0, 调用分账接口 - if (waitSplitAmount != null && !"".equals(waitSplitAmount)) { + if (waitSplitAmount.compareTo(BigDecimal.ZERO) > 0) { + logger.info("订单{}, 待分账金额{}", orderCode, waitSplitAmount); + DivMember divMember = new DivMember(); + divMember.setMemberId(Constants.ZERO); // 若是商户本身时,传入0 + divMember.setAmount(AdapayUtil.formatAmount(waitSplitAmount)); + divMember.setFeeFlag(Constants.Y); + divMemberList.add(divMember); // 调用分账接口 + PaymentConfirmParam param = PaymentConfirmParam.builder() + .paymentId(paymentId) + .divMemberList(divMemberList) + .confirmAmt(waitSplitAmount) // 订单结算金额 + 保险金额 + .orderCode(orderCode) + .wechatAppId(wechatAppId1) + .build(); + PaymentConfirmResponse paymentConfirmRequest = adapayService.createPaymentConfirmRequest(param); + if (paymentConfirmRequest.isSuccess()) { + logger.info("分账成功, 订单号:{}, 分账信息:{}", orderCode, JSON.toJSONString(paymentConfirmRequest)); + } else { + logger.info("分账失败, 订单号:{}, 分账信息:{}", orderCode, JSON.toJSONString(paymentConfirmRequest)); + } + divMemberList.clear(); } - // 获取待退款金额 - String refundPayAmount = adapayUnsplitRecordVO.getRefundPayAmount(); + // 获取待退款金额 (sql已经计算过了,refundPayAmount = 订单表中应退款金额 - 汇付查询的已退款金额) + // BigDecimal refundPayAmount = adapayUnsplitRecordVO.getRefundPayAmount() != null ? new BigDecimal(adapayUnsplitRecordVO.getRefundPayAmount()) : BigDecimal.ZERO; + // if (refundPayAmount.compareTo(BigDecimal.ZERO) > 0) { + // // 调用退款接口 + // logger.info("订单号:{}, 退款金额:{}", orderCode, refundPayAmount); + // PaymentReverseResponse response = adapayService.createPaymentReverseRequest(paymentId, refundPayAmount, + // wechatAppId1, "", ScenarioEnum.ORDER.getValue(), orderCode); + // } } - PageHelper.clearPage(); + + } + + @Test + public void queryAdapayData() { + String startTime = "2025-01-01 00:00:00"; + String endTime = "2025-12-31 23:59:59"; + + // 查询未分帐订单 + PageUtils.startPage(1, 99999); + List list = adapayUnsplitRecordService.queryUnsplitOrders(startTime, endTime); + + // 需要更新的数据 + List updateList = Lists.newArrayList(); + + List listA = Lists.newArrayList(); + List listB = Lists.newArrayList(); + + // 实用并行流处理list + list.parallelStream().forEach(adapayUnsplitRecord -> { + QueryPaymentConfirmDTO dto = new QueryPaymentConfirmDTO(); + dto.setWechatAppId(Constants.DEFAULT_APP_ID); + dto.setPaymentId(adapayUnsplitRecord.getPaymentId()); + QueryPaymentConfirmDetailResponse response = adapayService.queryPaymentConfirmList(dto); + List paymentConfirms = response.getPaymentConfirms(); + if (CollectionUtils.isEmpty(paymentConfirms)) { + return; + } + PaymentConfirmInfo paymentConfirmInfo = paymentConfirms.get(0); + String orderCode = adapayUnsplitRecord.getOrderCode(); + BigDecimal confirmedAmt = new BigDecimal(paymentConfirmInfo.getConfirmedAmt()); // 汇付返回分账金额 + BigDecimal confirmedSplitAmount = adapayUnsplitRecord.getConfirmedSplitAmount(); // 表中记录分账金额 + BigDecimal reservedAmt = new BigDecimal(paymentConfirmInfo.getReservedAmt()); // 汇付返回退款金额 + BigDecimal refundAmount = adapayUnsplitRecord.getRefundAmount(); // 表中记录退款金额 + logger.info("订单号:{}, 汇付返回分账金额:{}, 表中记录分账金额:{}, 汇付返回退款金额:{}, 表中记录退款金额:{}", + orderCode, confirmedAmt, confirmedSplitAmount, reservedAmt, refundAmount); + + boolean updateFlag = false; + + // 如果汇付返回分账金额与表中记录分账金额不一致,则更新表 + if (confirmedAmt.compareTo(confirmedSplitAmount) > 0) { + adapayUnsplitRecord.setConfirmedSplitAmount(confirmedAmt); + updateFlag = true; + } else if (confirmedAmt.compareTo(confirmedSplitAmount) < 0) { + listA.add(JSONObject.of("orderCode", orderCode, "confirmedAmt", confirmedAmt, "confirmedSplitAmount", confirmedSplitAmount)); + } + + // 如果汇付返回退款金额与表中记录退款金额不一致,则更新表 + if (reservedAmt.compareTo(refundAmount) > 0) { + adapayUnsplitRecord.setRefundAmount(reservedAmt); + updateFlag = true; + } else if (reservedAmt.compareTo(refundAmount) < 0) { + listB.add(JSONObject.of("orderCode", orderCode, "reservedAmt", reservedAmt, "refundAmount", refundAmount)); + } + + if (updateFlag) { + updateList.add(adapayUnsplitRecord); + } + }); + + + // if (CollectionUtils.isNotEmpty(updateList)) { + // // 分批处理updateList, 每批处理1000条数据 + // List> partition = Lists.partition(updateList, 1000); + // partition.parallelStream().forEach(list2 -> { + // adapayUnsplitRecordService.updateBatchSelective(list2); + // }); + // } + logger.info("第{}批处理数据,更新表成功, 共更新{}条数据", 1, updateList.size()); + logger.info("listA共更新{}条数据, {}", listA.size(), listA); + logger.info("listB共更新{}条数据, {}", listB.size(), listB); + } + + @Test + public void queryAdapayV2() { + String paymentId = "002212025070321462910786843519524786176"; + + QueryPaymentConfirmDTO dto = new QueryPaymentConfirmDTO(); + dto.setWechatAppId(Constants.DEFAULT_APP_ID); + dto.setPaymentId(paymentId); + QueryPaymentConfirmDetailResponse response = adapayService.queryPaymentConfirmList(dto); + List paymentConfirms = response.getPaymentConfirms(); + if (CollectionUtils.isEmpty(paymentConfirms)) { + return; + } + PaymentConfirmInfo paymentConfirmInfo = paymentConfirms.get(0); + logger.info("{}", JSON.toJSONString(paymentConfirmInfo)); + } } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayUnsplitRecord.java b/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayUnsplitRecord.java index 316f7c607..b816a3150 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayUnsplitRecord.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/domain/AdapayUnsplitRecord.java @@ -1,13 +1,16 @@ package com.jsowell.pile.domain; -import java.math.BigDecimal; -import java.util.Date; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.math.BigDecimal; +import java.util.Date; @Data @Accessors(chain = true) @@ -100,4 +103,27 @@ public class AdapayUnsplitRecord { * 更新时间 */ private Date updateTime; + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.JSON_STYLE) + .append("id", id) + .append("merchantCode", merchantCode) + .append("payTime", payTime) + .append("paymentId", paymentId) + .append("orderNo", orderNo) + .append("payAmount", payAmount) + .append("confirmedSplitAmount", confirmedSplitAmount) + .append("refundAmount", refundAmount) + .append("paymentRevokeAmount", paymentRevokeAmount) + .append("remainingSplitAmount", remainingSplitAmount) + .append("orderCode", orderCode) + .append("pileType", pileType) + .append("dueRefundAmount", dueRefundAmount) + .append("settleAmount", settleAmount) + .append("refundFlag", refundFlag) + .append("splitFlag", splitFlag) + .append("updateTime", updateTime) + .toString(); + } } \ No newline at end of file diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java index 2ee39d954..60e7f9218 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/mapper/AdapayUnsplitRecordMapper.java @@ -3,9 +3,11 @@ package com.jsowell.pile.mapper; import com.jsowell.pile.domain.AdapayUnsplitRecord; import com.jsowell.pile.vo.AdapayUnsplitRecordVO; import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; import java.util.List; +@Repository public interface AdapayUnsplitRecordMapper { int deleteByPrimaryKey(Integer id); diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/vo/AdapayUnsplitRecordVO.java b/jsowell-pile/src/main/java/com/jsowell/pile/vo/AdapayUnsplitRecordVO.java index 2a1c9c56d..c4c72d4e8 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/vo/AdapayUnsplitRecordVO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/vo/AdapayUnsplitRecordVO.java @@ -7,6 +7,9 @@ public class AdapayUnsplitRecordVO { // 订单号 private String orderCode; + // 支付ID + private String paymentId; + // 支付金额 private String payAmount; @@ -23,7 +26,7 @@ public class AdapayUnsplitRecordVO { private String refundAmount; // 已退款金额 - private String paidAmount; + private String paidAmount; // 待退款金额 private String refundPayAmount; diff --git a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml index 5d9201e49..eeb45595b 100644 --- a/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml +++ b/jsowell-pile/src/main/resources/mapper/pile/AdapayUnsplitRecordMapper.xml @@ -702,14 +702,15 @@ + + + +