Commit d4e21abebdc7828f91fe0063f5acd0ff6320387a
1 parent
5dd2ab6b
feat: 问题修复项
1、修改订单数量更新总价等信息
Showing
1 changed file
with
70 additions
and
3 deletions
src/main/java/com/order/erp/job/OrderJob.java
@@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | @@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | ||
5 | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; | 5 | import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
6 | import com.order.erp.common.constant.Constant; | 6 | import com.order.erp.common.constant.Constant; |
7 | import com.order.erp.common.utils.DateUtils; | 7 | import com.order.erp.common.utils.DateUtils; |
8 | +import com.order.erp.common.utils.ProfitUtils; | ||
8 | import com.order.erp.common.utils.TransactionHelper; | 9 | import com.order.erp.common.utils.TransactionHelper; |
9 | import com.order.erp.domain.OrderStatusEnum; | 10 | import com.order.erp.domain.OrderStatusEnum; |
10 | import com.order.erp.domain.dto.BaseDO; | 11 | import com.order.erp.domain.dto.BaseDO; |
11 | import com.order.erp.domain.dto.order.*; | 12 | import com.order.erp.domain.dto.order.*; |
12 | import com.order.erp.domain.vo.order.OrderInfoResultVO; | 13 | import com.order.erp.domain.vo.order.OrderInfoResultVO; |
14 | +import com.order.erp.domain.vo.order.ProfitCalculateVO; | ||
13 | import com.order.erp.service.order.*; | 15 | import com.order.erp.service.order.*; |
14 | import lombok.extern.slf4j.Slf4j; | 16 | import lombok.extern.slf4j.Slf4j; |
15 | import org.joda.time.DateTime; | 17 | import org.joda.time.DateTime; |
@@ -17,9 +19,10 @@ import org.springframework.scheduling.annotation.Scheduled; | @@ -17,9 +19,10 @@ import org.springframework.scheduling.annotation.Scheduled; | ||
17 | import org.springframework.stereotype.Component; | 19 | import org.springframework.stereotype.Component; |
18 | 20 | ||
19 | import javax.annotation.Resource; | 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 | import java.util.stream.Collectors; | 26 | import java.util.stream.Collectors; |
24 | 27 | ||
25 | /** | 28 | /** |
@@ -95,4 +98,68 @@ public class OrderJob { | @@ -95,4 +98,68 @@ public class OrderJob { | ||
95 | log.info("执行结束时间:{}", DateTime.now().toString("yyyy-MM-dd HH:mm:ss")); | 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 | } |