diff --git a/src/main/java/com/czg/mergedata/cur/service/impl/CurOrderInfoServiceImpl.java b/src/main/java/com/czg/mergedata/cur/service/impl/CurOrderInfoServiceImpl.java index e036598..a3980c6 100644 --- a/src/main/java/com/czg/mergedata/cur/service/impl/CurOrderInfoServiceImpl.java +++ b/src/main/java/com/czg/mergedata/cur/service/impl/CurOrderInfoServiceImpl.java @@ -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 mergeOrderData() { @@ -84,7 +85,30 @@ public class CurOrderInfoServiceImpl extends ServiceImpl mergeRefundOrderData() { - return null; + refundStartTime = DateUtil.date(); + refundIndex = new AtomicInteger(0); + QueryWrapper queryWrapper = new QueryWrapper().isNotNull(OldOrderInfo::getSource); + List dataList = oldOrderInfoService.list(queryWrapper); + + List> lists = ListUtil.splitAvg(dataList, 7); + + List> futures = new ArrayList<>(); + + for (List list : lists) { + CompletableFuture 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 oldOrderInfos) { + List updateOrderInfos = new ArrayList<>(); + List updateOrderDetails = new ArrayList<>(); + + for (OldOrderInfo oldOrderInfo : oldOrderInfos) { + CurOrderInfo originOrderInfo = getById(oldOrderInfo.getSource()); + + List oldOrderDetailList = oldOrderDetailService.list(new QueryWrapper().eq(OldOrderDetail::getOrderId, oldOrderInfo.getId())); + List curOrderDetailList = curOrderDetailService.list(new QueryWrapper().eq(CurOrderDetail::getOrderId, originOrderInfo.getId())); + + if (oldOrderDetailList.isEmpty() || curOrderDetailList.isEmpty()) { + continue; + } + + Map 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";