迁移 订单 - 退款
This commit is contained in:
parent
ff4d088a66
commit
c814b70b5f
|
|
@ -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";
|
||||
|
|
|
|||
Loading…
Reference in New Issue