update 处理未分账订单

This commit is contained in:
Guoqs
2025-11-19 11:55:05 +08:00
parent 80498404da
commit d1c8827b4f
6 changed files with 191 additions and 14 deletions

View File

@@ -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<AdapayUnsplitRecordVO> adapayUnsplitRecordVOS = adapayUnsplitRecordService.queryList();
// 分账账户
List<DivMember> 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<AdapayUnsplitRecord> list = adapayUnsplitRecordService.queryUnsplitOrders(startTime, endTime);
// 需要更新的数据
List<AdapayUnsplitRecord> updateList = Lists.newArrayList();
List<JSONObject> listA = Lists.newArrayList();
List<JSONObject> 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<PaymentConfirmInfo> 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<List<AdapayUnsplitRecord>> 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<PaymentConfirmInfo> paymentConfirms = response.getPaymentConfirms();
if (CollectionUtils.isEmpty(paymentConfirms)) {
return;
}
PaymentConfirmInfo paymentConfirmInfo = paymentConfirms.get(0);
logger.info("{}", JSON.toJSONString(paymentConfirmInfo));
}
}