迁移 订单 - 退款
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 org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
|
@ -66,6 +64,9 @@ public class CurOrderInfoServiceImpl extends ServiceImpl<CurOrderInfoMapper, Cur
|
||||||
|
|
||||||
private AtomicInteger index = new AtomicInteger(0);
|
private AtomicInteger index = new AtomicInteger(0);
|
||||||
|
|
||||||
|
private Date refundStartTime;
|
||||||
|
private AtomicInteger refundIndex = new AtomicInteger(0);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public CzgResult<String> mergeOrderData() {
|
public CzgResult<String> mergeOrderData() {
|
||||||
|
|
@ -84,7 +85,30 @@ public class CurOrderInfoServiceImpl extends ServiceImpl<CurOrderInfoMapper, Cur
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CzgResult<String> mergeRefundOrderData() {
|
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) {
|
private void execNotRefundOrderData(Long pageIndex) {
|
||||||
|
|
@ -225,6 +249,61 @@ public class CurOrderInfoServiceImpl extends ServiceImpl<CurOrderInfoMapper, Cur
|
||||||
return curOrderDetails;
|
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) {
|
private String getPlatformType(OldOrderInfo oldOrderInfo) {
|
||||||
if ("ali_lite".equals(oldOrderInfo.getPayType())) {
|
if ("ali_lite".equals(oldOrderInfo.getPayType())) {
|
||||||
return "ALI";
|
return "ALI";
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue