Commit d4e21abebdc7828f91fe0063f5acd0ff6320387a

Authored by 谢茂盛
1 parent 5dd2ab6b

feat: 问题修复项

1、修改订单数量更新总价等信息
src/main/java/com/order/erp/job/OrderJob.java
... ... @@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
5 5 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
6 6 import com.order.erp.common.constant.Constant;
7 7 import com.order.erp.common.utils.DateUtils;
  8 +import com.order.erp.common.utils.ProfitUtils;
8 9 import com.order.erp.common.utils.TransactionHelper;
9 10 import com.order.erp.domain.OrderStatusEnum;
10 11 import com.order.erp.domain.dto.BaseDO;
11 12 import com.order.erp.domain.dto.order.*;
12 13 import com.order.erp.domain.vo.order.OrderInfoResultVO;
  14 +import com.order.erp.domain.vo.order.ProfitCalculateVO;
13 15 import com.order.erp.service.order.*;
14 16 import lombok.extern.slf4j.Slf4j;
15 17 import org.joda.time.DateTime;
... ... @@ -17,9 +19,10 @@ import org.springframework.scheduling.annotation.Scheduled;
17 19 import org.springframework.stereotype.Component;
18 20  
19 21 import javax.annotation.Resource;
20   -import java.util.List;
21   -import java.util.Objects;
22   -import java.util.Set;
  22 +import java.math.BigDecimal;
  23 +import java.math.RoundingMode;
  24 +import java.util.*;
  25 +import java.util.function.Function;
23 26 import java.util.stream.Collectors;
24 27  
25 28 /**
... ... @@ -95,4 +98,68 @@ public class OrderJob {
95 98 log.info("执行结束时间:{}", DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
96 99 }
97 100  
  101 + /**
  102 + * 每隔5分执行一次
  103 + */
  104 + @Scheduled(cron = "0 */1 * * * ?")
  105 +// @Scheduled(cron = "*/5 * * * * ?")
  106 + public void checkChargeOrderCount() {
  107 + log.info("执行开始时间:{}", DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
  108 + LambdaQueryWrapper<OrderBaseInfoDO> queryWrapper = new LambdaQueryWrapper<OrderBaseInfoDO>()
  109 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  110 + .ge(OrderBaseInfoDO::getCreateTime, DateUtils.format(DateTime.now().minusMonths(Constant.ONE).toDate(), DateUtils.DATE_TIME))
  111 + .le(OrderBaseInfoDO::getCreateTime, DateUtils.format(DateTime.now().toDate(), DateUtils.DATE_TIME))
  112 + .ne(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus());
  113 + List<OrderBaseInfoDO> ordersDOS = orderBaseInfoService.list(queryWrapper);
  114 +
  115 + List<OrderInfoResultVO> orderInfoResultVOS = orderBaseInfoService.wrapperOrderResultList(false, ordersDOS);
  116 + if (CollectionUtils.isNotEmpty(orderInfoResultVOS)) {
  117 + Set<Long> orderIds = orderInfoResultVOS.stream().map(OrderInfoResultVO::getId).collect(Collectors.toSet());
  118 + if (CollectionUtils.isNotEmpty(orderIds)) {
  119 + List<OrderProfitAnalysisDO> profitAnalysisDOS = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>()
  120 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  121 + .in(OrderProfitAnalysisDO::getOrderId, orderIds));
  122 +
  123 + Map<Long, OrderProfitAnalysisDO> profitAnalysisDOMap = new HashMap<>();
  124 + if (CollectionUtils.isNotEmpty(profitAnalysisDOS)) {
  125 + profitAnalysisDOMap = profitAnalysisDOS.stream().collect(Collectors.toMap(OrderProfitAnalysisDO::getOrderId, Function.identity(), (x, y) -> y));
  126 + }
  127 +
  128 + for (OrderInfoResultVO resultVO : orderInfoResultVOS) {
  129 + if (profitAnalysisDOMap.containsKey(resultVO.getId())) {
  130 + OrderProfitAnalysisDO profitAnalysisDO = profitAnalysisDOMap.get(resultVO.getId());
  131 + Integer orderCount = resultVO.getOrderCount();
  132 + BigDecimal customerTotalPrice = new BigDecimal(profitAnalysisDO.getCustomerTotalPrice()).setScale(Constant.TWO, RoundingMode.HALF_UP);
  133 + BigDecimal customerPrice = new BigDecimal(profitAnalysisDO.getCustomerPrice()).setScale(Constant.TWO, RoundingMode.HALF_UP);
  134 +
  135 + BigDecimal calculateTotalPrice = new BigDecimal(orderCount).multiply(customerPrice).setScale(Constant.TWO, RoundingMode.HALF_UP);
  136 + if (customerTotalPrice.compareTo(calculateTotalPrice) != Constant.ZERO) {
  137 + BigDecimal customerRmbPrice = new BigDecimal(profitAnalysisDO.getCustomerRmbPrice());
  138 + BigDecimal customerRmbTotalPrice = new BigDecimal(orderCount).multiply(customerRmbPrice).setScale(Constant.TWO, RoundingMode.HALF_UP);
  139 + BigDecimal productionDepartmentPrice = new BigDecimal(profitAnalysisDO.getProductionDepartmentPrice());
  140 + BigDecimal productionDepartmentTotalPrice = new BigDecimal(orderCount).multiply(productionDepartmentPrice).setScale(Constant.TWO, RoundingMode.HALF_UP);
  141 + BigDecimal packetPrice = new BigDecimal(profitAnalysisDO.getPacketPrice());
  142 + BigDecimal packetTotalPrice = new BigDecimal(orderCount).multiply(packetPrice).setScale(Constant.TWO, RoundingMode.HALF_UP);
  143 + Double profitRate = ProfitUtils.calculateProfitRate(ProfitCalculateVO.builder()
  144 + .exchangeRate(profitAnalysisDO.getExchangeRate())
  145 + .profitType(profitAnalysisDO.getProfitType())
  146 + .customerTotalPrice(calculateTotalPrice.doubleValue())
  147 + .productionDepartmentTotalPrice(productionDepartmentTotalPrice.doubleValue())
  148 + .packetTotalPrice(packetTotalPrice.doubleValue()).build());
  149 +
  150 + profitAnalysisDO.setCustomerTotalPrice(calculateTotalPrice.doubleValue());
  151 + profitAnalysisDO.setCustomerRmbTotalPrice(customerRmbTotalPrice.doubleValue());
  152 + profitAnalysisDO.setProductionDepartmentTotalPrice(productionDepartmentTotalPrice.doubleValue());
  153 + profitAnalysisDO.setPacketTotalPrice(packetTotalPrice.doubleValue());
  154 + profitAnalysisDO.setProfitRate(profitRate);
  155 + profitAnalysisService.updateById(profitAnalysisDO);
  156 + }
  157 + }
  158 + }
  159 + }
  160 + }
  161 + log.info("执行结束时间:{}", DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
  162 + }
  163 +
  164 +
98 165 }
... ...