mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-19 18:45:03 +08:00
update 处理未分账订单
This commit is contained in:
@@ -9,6 +9,7 @@ import com.huifu.adapay.model.Payment;
|
|||||||
import com.huifu.adapay.model.PaymentReverse;
|
import com.huifu.adapay.model.PaymentReverse;
|
||||||
import com.huifu.adapay.model.Refund;
|
import com.huifu.adapay.model.Refund;
|
||||||
import com.jsowell.JsowellApplication;
|
import com.jsowell.JsowellApplication;
|
||||||
|
import com.jsowell.adapay.common.DivMember;
|
||||||
import com.jsowell.adapay.common.PaymentConfirmInfo;
|
import com.jsowell.adapay.common.PaymentConfirmInfo;
|
||||||
import com.jsowell.adapay.dto.PaymentConfirmParam;
|
import com.jsowell.adapay.dto.PaymentConfirmParam;
|
||||||
import com.jsowell.adapay.dto.QueryPaymentConfirmDTO;
|
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.adapay.vo.OrderSplitResult;
|
||||||
import com.jsowell.api.uniapp.customer.TempController;
|
import com.jsowell.api.uniapp.customer.TempController;
|
||||||
import com.jsowell.common.constant.CacheConstants;
|
import com.jsowell.common.constant.CacheConstants;
|
||||||
|
import com.jsowell.common.constant.Constants;
|
||||||
import com.jsowell.common.core.redis.RedisCache;
|
import com.jsowell.common.core.redis.RedisCache;
|
||||||
import com.jsowell.common.enums.ykc.ScenarioEnum;
|
import com.jsowell.common.enums.ykc.ScenarioEnum;
|
||||||
|
import com.jsowell.common.util.AdapayUtil;
|
||||||
import com.jsowell.common.util.DateUtils;
|
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.OrderBasicInfo;
|
||||||
import com.jsowell.pile.domain.OrderDetail;
|
import com.jsowell.pile.domain.OrderDetail;
|
||||||
import com.jsowell.pile.domain.OrderUnsplitRecord;
|
import com.jsowell.pile.domain.OrderUnsplitRecord;
|
||||||
@@ -801,18 +806,135 @@ public class PaymentTestController {
|
|||||||
int pageSize = 3;
|
int pageSize = 3;
|
||||||
PageHelper.startPage(pageNum, pageSize);
|
PageHelper.startPage(pageNum, pageSize);
|
||||||
List<AdapayUnsplitRecordVO> adapayUnsplitRecordVOS = adapayUnsplitRecordService.queryList();
|
List<AdapayUnsplitRecordVO> adapayUnsplitRecordVOS = adapayUnsplitRecordService.queryList();
|
||||||
|
|
||||||
|
// 分账账户
|
||||||
|
List<DivMember> divMemberList = Lists.newArrayList();
|
||||||
for (AdapayUnsplitRecordVO adapayUnsplitRecordVO : adapayUnsplitRecordVOS) {
|
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, 调用分账接口
|
// 如果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();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取待退款金额
|
// 获取待退款金额 (sql已经计算过了,refundPayAmount = 订单表中应退款金额 - 汇付查询的已退款金额)
|
||||||
String refundPayAmount = adapayUnsplitRecordVO.getRefundPayAmount();
|
// 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));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
package com.jsowell.pile.domain;
|
package com.jsowell.pile.domain;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Date;
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
import lombok.experimental.SuperBuilder;
|
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
|
@Data
|
||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
@@ -100,4 +103,27 @@ public class AdapayUnsplitRecord {
|
|||||||
* 更新时间
|
* 更新时间
|
||||||
*/
|
*/
|
||||||
private Date updateTime;
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -3,9 +3,11 @@ package com.jsowell.pile.mapper;
|
|||||||
import com.jsowell.pile.domain.AdapayUnsplitRecord;
|
import com.jsowell.pile.domain.AdapayUnsplitRecord;
|
||||||
import com.jsowell.pile.vo.AdapayUnsplitRecordVO;
|
import com.jsowell.pile.vo.AdapayUnsplitRecordVO;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@Repository
|
||||||
public interface AdapayUnsplitRecordMapper {
|
public interface AdapayUnsplitRecordMapper {
|
||||||
int deleteByPrimaryKey(Integer id);
|
int deleteByPrimaryKey(Integer id);
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,9 @@ public class AdapayUnsplitRecordVO {
|
|||||||
// 订单号
|
// 订单号
|
||||||
private String orderCode;
|
private String orderCode;
|
||||||
|
|
||||||
|
// 支付ID
|
||||||
|
private String paymentId;
|
||||||
|
|
||||||
// 支付金额
|
// 支付金额
|
||||||
private String payAmount;
|
private String payAmount;
|
||||||
|
|
||||||
@@ -23,7 +26,7 @@ public class AdapayUnsplitRecordVO {
|
|||||||
private String refundAmount;
|
private String refundAmount;
|
||||||
|
|
||||||
// 已退款金额
|
// 已退款金额
|
||||||
private String paidAmount;
|
private String paidAmount;
|
||||||
|
|
||||||
// 待退款金额
|
// 待退款金额
|
||||||
private String refundPayAmount;
|
private String refundPayAmount;
|
||||||
|
|||||||
@@ -702,14 +702,15 @@
|
|||||||
<select id="queryUnsplitOrders" resultMap="BaseResultMap">
|
<select id="queryUnsplitOrders" resultMap="BaseResultMap">
|
||||||
select * from adapay_unsplit_record
|
select * from adapay_unsplit_record
|
||||||
where pay_time >= #{startTime} and pay_time <= #{endTime}
|
where pay_time >= #{startTime} and pay_time <= #{endTime}
|
||||||
and due_refund_amount is null
|
<!--and due_refund_amount is null-->
|
||||||
and settle_amount is null
|
<!--and settle_amount is null-->
|
||||||
and order_code like 'C%'
|
<!--and order_code like 'C%'-->
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="queryList" resultType="com.jsowell.pile.vo.AdapayUnsplitRecordVO">
|
<select id="queryList" resultType="com.jsowell.pile.vo.AdapayUnsplitRecordVO">
|
||||||
SELECT
|
SELECT
|
||||||
order_code as orderCode,
|
order_code as orderCode,
|
||||||
|
payment_id as paymentId,
|
||||||
pay_amount as payAmount,
|
pay_amount as payAmount,
|
||||||
settle_amount as settleAmount,
|
settle_amount as settleAmount,
|
||||||
confirmed_split_amount as confirmedSplitAmount,
|
confirmed_split_amount as confirmedSplitAmount,
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
package com.jsowell.quartz.task;
|
package com.jsowell.quartz.task;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import com.jsowell.adapay.dto.QueryPaymentConfirmDTO;
|
||||||
import com.jsowell.adapay.dto.WithdrawDTO;
|
import com.jsowell.adapay.dto.WithdrawDTO;
|
||||||
|
import com.jsowell.adapay.response.QueryPaymentConfirmDetailResponse;
|
||||||
import com.jsowell.adapay.service.AdapayService;
|
import com.jsowell.adapay.service.AdapayService;
|
||||||
import com.jsowell.common.YouDianUtils;
|
import com.jsowell.common.YouDianUtils;
|
||||||
import com.jsowell.common.constant.CacheConstants;
|
import com.jsowell.common.constant.CacheConstants;
|
||||||
@@ -411,7 +414,7 @@ public class JsowellTask {
|
|||||||
// processUnSettledOrderOld(); // 旧方法
|
// processUnSettledOrderOld(); // 旧方法
|
||||||
for (int i = 0; i < 35; i++) {
|
for (int i = 0; i < 35; i++) {
|
||||||
int batchNum = i + 1;
|
int batchNum = i + 1;
|
||||||
processUnSettledOrderV1(batchNum); // 新方法
|
processUnSettledOrderV2(batchNum); // 新方法
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -460,8 +463,28 @@ public class JsowellTask {
|
|||||||
log.info("第{}批次,共更新{}条数据", batchNum, updateList.size());
|
log.info("第{}批次,共更新{}条数据", batchNum, updateList.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新adapay_unsplit_record表, 去汇付查询最新的数据
|
||||||
|
* @param batchNum
|
||||||
|
*/
|
||||||
private void processUnSettledOrderV2(int batchNum) {
|
private void processUnSettledOrderV2(int batchNum) {
|
||||||
|
String startTime = "2025-01-01 00:00:00";
|
||||||
|
String endTime = "2025-12-31 23:59:59";
|
||||||
|
|
||||||
|
// 查询未分帐订单
|
||||||
|
PageUtils.startPage(1, 3);
|
||||||
|
List<AdapayUnsplitRecord> list = adapayUnsplitRecordService.queryUnsplitOrders(startTime, endTime);
|
||||||
|
|
||||||
|
// 根据paymentId去汇付查询最新数据
|
||||||
|
for (AdapayUnsplitRecord adapayUnsplitRecord : list) {
|
||||||
|
String paymentId = adapayUnsplitRecord.getPaymentId();
|
||||||
|
|
||||||
|
QueryPaymentConfirmDTO dto = new QueryPaymentConfirmDTO();
|
||||||
|
dto.setWechatAppId(Constants.DEFAULT_APP_ID);
|
||||||
|
dto.setPaymentId(paymentId);
|
||||||
|
QueryPaymentConfirmDetailResponse response = adapayService.queryPaymentConfirmList(dto);
|
||||||
|
System.out.println(JSON.toJSONString(response));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// private void processUnSettledOrderOld() {
|
// private void processUnSettledOrderOld() {
|
||||||
|
|||||||
Reference in New Issue
Block a user