迁移 订单 - 退款

This commit is contained in:
GYJ 2025-03-14 17:29:49 +08:00
parent ff4d088a66
commit c814b70b5f
1 changed files with 83 additions and 4 deletions

View File

@ -28,9 +28,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
@ -66,6 +64,9 @@ public class CurOrderInfoServiceImpl extends ServiceImpl<CurOrderInfoMapper, Cur
private AtomicInteger index = new AtomicInteger(0);
private Date refundStartTime;
private AtomicInteger refundIndex = new AtomicInteger(0);
@Override
@Transactional
public CzgResult<String> mergeOrderData() {
@ -84,7 +85,30 @@ public class CurOrderInfoServiceImpl extends ServiceImpl<CurOrderInfoMapper, Cur
@Override
public CzgResult<String> mergeRefundOrderData() {
return null;
refundStartTime = DateUtil.date();
refundIndex = new AtomicInteger(0);
QueryWrapper queryWrapper = new QueryWrapper().isNotNull(OldOrderInfo::getSource);
List<OldOrderInfo> dataList = oldOrderInfoService.list(queryWrapper);
List<List<OldOrderInfo>> lists = ListUtil.splitAvg(dataList, 7);
List<CompletableFuture<Void>> futures = new ArrayList<>();
for (List<OldOrderInfo> list : lists) {
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> makeRefundOrderInfo(list)).whenComplete((m, k) -> {
log.info("一个任务已经完成。。。。");
refundIndex.incrementAndGet();
log.info("当前进度:{}", refundIndex.get());
});
futures.add(future);
}
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).whenComplete((m, k) -> {
Date endTime = new Date();
log.info("所有任务已经完成 当前耗时:{}秒", (endTime.getTime() - refundStartTime.getTime()) / 1000);
});
return CzgResult.success("迁移成功");
}
private void execNotRefundOrderData(Long pageIndex) {
@ -225,6 +249,61 @@ public class CurOrderInfoServiceImpl extends ServiceImpl<CurOrderInfoMapper, Cur
return curOrderDetails;
}
private void makeRefundOrderInfo(List<OldOrderInfo> oldOrderInfos) {
List<CurOrderInfo> updateOrderInfos = new ArrayList<>();
List<CurOrderDetail> updateOrderDetails = new ArrayList<>();
for (OldOrderInfo oldOrderInfo : oldOrderInfos) {
CurOrderInfo originOrderInfo = getById(oldOrderInfo.getSource());
List<OldOrderDetail> oldOrderDetailList = oldOrderDetailService.list(new QueryWrapper().eq(OldOrderDetail::getOrderId, oldOrderInfo.getId()));
List<CurOrderDetail> curOrderDetailList = curOrderDetailService.list(new QueryWrapper().eq(CurOrderDetail::getOrderId, originOrderInfo.getId()));
if (oldOrderDetailList.isEmpty() || curOrderDetailList.isEmpty()) {
continue;
}
Map<String, CurOrderDetail> curOrderDetailMap = new HashMap<>();
BigDecimal orderTotalCount = BigDecimal.ZERO;
for (CurOrderDetail curOrderDetail : curOrderDetailList) {
String key = (curOrderDetail.getSkuId() == null ? "null" : curOrderDetail.getSkuId().toString()) + "_" + curOrderDetail.getProductName();
curOrderDetailMap.put(key, curOrderDetail);
orderTotalCount = orderTotalCount.add(curOrderDetail.getNum());
}
BigDecimal refundTotalCount = BigDecimal.ZERO;
BigDecimal refundAmount = BigDecimal.ZERO;
for (OldOrderDetail oldOrderDetail : oldOrderDetailList) {
String key = (oldOrderDetail.getProductSkuId() == null ? "null" : oldOrderDetail.getProductSkuId().toString()) + "_" + oldOrderDetail.getProductName();
CurOrderDetail curOrderDetail = curOrderDetailMap.get(key);
if (curOrderDetail == null) {
continue;
}
curOrderDetail.setRefundNum(oldOrderDetail.getReturnNum());
curOrderDetail.setRefundRemark(oldOrderDetail.getRefundRemark());
curOrderDetail.setReturnAmount(oldOrderDetail.getReturnAmount());
refundTotalCount = refundTotalCount.add(oldOrderDetail.getNum());
refundAmount = refundAmount.add(oldOrderDetail.getReturnAmount() == null ?
(oldOrderDetail.getPriceAmount().compareTo(BigDecimal.ZERO) == 0 ?
oldOrderDetail.getPrice() : oldOrderDetail.getPriceAmount()) :
oldOrderDetail.getReturnAmount());
updateOrderDetails.add(curOrderDetail);
}
originOrderInfo.setRefundAmount(refundAmount);
originOrderInfo.setRefundRemark(oldOrderInfo.getRefundRemark());
originOrderInfo.setStatus(orderTotalCount.compareTo(refundTotalCount) == 0 ? "refund" : "part-refund");
updateOrderInfos.add(originOrderInfo);
}
updateBatch(updateOrderInfos);
curOrderDetailService.updateBatch(updateOrderDetails);
}
private String getPlatformType(OldOrderInfo oldOrderInfo) {
if ("ali_lite".equals(oldOrderInfo.getPayType())) {
return "ALI";