Commit 6d2520e650271159207826d8d81b27c8500f3997
1 parent
ddcedc77
feat: 问题修复项
1、项目报告书字段拆分 2、设计师权重占比计算
Showing
10 changed files
with
330 additions
and
47 deletions
src/main/java/com/order/erp/controller/OrderReportController.java
0 → 100644
1 | +package com.order.erp.controller; | |
2 | + | |
3 | +import com.order.erp.common.constant.ServerResult; | |
4 | +import com.order.erp.domain.vo.OrderReportAnalysisVo; | |
5 | +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; | |
6 | +import com.order.erp.domain.vo.order.OrderProfitAnalysisVO; | |
7 | +import com.order.erp.service.order.OrderCompletionReportService; | |
8 | +import org.springframework.validation.annotation.Validated; | |
9 | +import org.springframework.web.bind.annotation.PostMapping; | |
10 | +import org.springframework.web.bind.annotation.RequestBody; | |
11 | +import org.springframework.web.bind.annotation.RequestMapping; | |
12 | +import org.springframework.web.bind.annotation.RestController; | |
13 | + | |
14 | +import javax.annotation.Resource; | |
15 | + | |
16 | +/** | |
17 | + * @author xms | |
18 | + * @version 1.0 | |
19 | + * @project order-erp | |
20 | + * @description 订单项目报告书表控制层 | |
21 | + * @date 2023/10/23 11:48:36 | |
22 | + */ | |
23 | +@RestController | |
24 | +@RequestMapping("/order/erp/report") | |
25 | +public class OrderReportController { | |
26 | + | |
27 | + @Resource | |
28 | + OrderCompletionReportService orderCompletionReportService; | |
29 | + | |
30 | + @PostMapping("/analysis") | |
31 | + public ServerResult<OrderProfitAnalysisVO> analysis(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) { | |
32 | + return orderCompletionReportService.analysis(queryVO); | |
33 | + } | |
34 | +} | ... | ... |
src/main/java/com/order/erp/domain/vo/OrderReportAnalysisResultVo.java
0 → 100644
1 | +package com.order.erp.domain.vo; | |
2 | + | |
3 | +import lombok.AllArgsConstructor; | |
4 | +import lombok.Data; | |
5 | +import lombok.NoArgsConstructor; | |
6 | +import lombok.ToString; | |
7 | + | |
8 | +import java.io.Serializable; | |
9 | + | |
10 | +/** | |
11 | + * @author zhongnanhuang | |
12 | + * @version 1.0 | |
13 | + * @project order-erp | |
14 | + * @description 利润分析传参 | |
15 | + * @date 2023/10/30 10:19:26 | |
16 | + */ | |
17 | +@Data | |
18 | +@AllArgsConstructor | |
19 | +@NoArgsConstructor | |
20 | +@ToString | |
21 | +public class OrderReportAnalysisResultVo implements Serializable { | |
22 | + | |
23 | + /** | |
24 | + * 占比 | |
25 | + */ | |
26 | + private Double rate; | |
27 | +} | ... | ... |
src/main/java/com/order/erp/domain/vo/OrderReportAnalysisVo.java
0 → 100644
1 | +package com.order.erp.domain.vo; | |
2 | + | |
3 | +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; | |
4 | +import lombok.AllArgsConstructor; | |
5 | +import lombok.Data; | |
6 | +import lombok.NoArgsConstructor; | |
7 | +import lombok.ToString; | |
8 | + | |
9 | +import javax.validation.constraints.NotNull; | |
10 | +import javax.validation.constraints.Size; | |
11 | +import java.io.Serializable; | |
12 | +import java.util.List; | |
13 | + | |
14 | +/** | |
15 | + * @author zhongnanhuang | |
16 | + * @version 1.0 | |
17 | + * @project order-erp | |
18 | + * @description 利润分析传参 | |
19 | + * @date 2023/10/30 10:19:26 | |
20 | + */ | |
21 | +@Data | |
22 | +@AllArgsConstructor | |
23 | +@NoArgsConstructor | |
24 | +@ToString | |
25 | +public class OrderReportAnalysisVo implements Serializable { | |
26 | + | |
27 | + /** | |
28 | + * 查询vo | |
29 | + */ | |
30 | + private OrderBaseInfoQueryVO queryVo; | |
31 | + | |
32 | + /** | |
33 | + * 设计师 | |
34 | + */ | |
35 | + private String designer; | |
36 | +} | ... | ... |
src/main/java/com/order/erp/domain/vo/order/OrderBaseInfoQueryVO.java
... | ... | @@ -106,9 +106,34 @@ public class OrderBaseInfoQueryVO extends BasePageVO implements Serializable { |
106 | 106 | private String ideaSource; |
107 | 107 | |
108 | 108 | /** |
109 | - * 手工初型 | |
109 | + * 想法来源占比 | |
110 | 110 | */ |
111 | - private String manualPreform; | |
111 | + private Double ideaSourceRate; | |
112 | + | |
113 | + /** | |
114 | + * 设计师 | |
115 | + */ | |
116 | + private String designer; | |
117 | + | |
118 | + /** | |
119 | + * 手工初型1 | |
120 | + */ | |
121 | + private String manualPreform1; | |
122 | + | |
123 | + /** | |
124 | + * 手工初型1占比 | |
125 | + */ | |
126 | + private Double manualPreform1Rate; | |
127 | + | |
128 | + /** | |
129 | + * 手工初型2 | |
130 | + */ | |
131 | + private String manualPreform2; | |
132 | + | |
133 | + /** | |
134 | + * 手工初型2占比 | |
135 | + */ | |
136 | + private Double manualPreform2Rate; | |
112 | 137 | |
113 | 138 | /** |
114 | 139 | * pp样品确认意见 | ... | ... |
src/main/java/com/order/erp/job/OrderJob.java
... | ... | @@ -67,28 +67,30 @@ public class OrderJob { |
67 | 67 | List<OrderInfoResultVO> orderInfoResultVOS = orderBaseInfoService.wrapperOrderResultList(false, ordersDOS); |
68 | 68 | if (CollectionUtils.isNotEmpty(orderInfoResultVOS)) { |
69 | 69 | Set<Long> orderIds = orderInfoResultVOS.stream().filter(x -> Objects.nonNull(x.getSchedule()) && Constant.ONE == x.getSchedule()).map(OrderInfoResultVO::getId).collect(Collectors.toSet()); |
70 | - LambdaUpdateWrapper<OrderBaseInfoDO> orderBaseUpdateWrapper = new LambdaUpdateWrapper<OrderBaseInfoDO>() | |
71 | - .in(OrderBaseInfoDO::getId, orderIds).set(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); | |
72 | - | |
73 | - LambdaUpdateWrapper<OrderCompletionReportDO> reportUpdateWrapper = new LambdaUpdateWrapper<OrderCompletionReportDO>() | |
74 | - .in(OrderCompletionReportDO::getOrderId, orderIds).set(OrderCompletionReportDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); | |
75 | - | |
76 | - LambdaUpdateWrapper<OrderProfitAnalysisDO> profitUpdateWrapper = new LambdaUpdateWrapper<OrderProfitAnalysisDO>() | |
77 | - .in(OrderProfitAnalysisDO::getOrderId, orderIds).set(OrderProfitAnalysisDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); | |
78 | - | |
79 | - LambdaUpdateWrapper<OrderTrackStageDO> trackUpdateWrapper = new LambdaUpdateWrapper<OrderTrackStageDO>() | |
80 | - .in(OrderTrackStageDO::getOrderId, orderIds).set(OrderTrackStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); | |
81 | - | |
82 | - LambdaUpdateWrapper<OrderInspectionStageDO> inspectUpdateWrapper = new LambdaUpdateWrapper<OrderInspectionStageDO>() | |
83 | - .in(OrderInspectionStageDO::getOrderId, orderIds).set(OrderInspectionStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); | |
84 | - | |
85 | - transactionHelper.run(() -> { | |
86 | - orderBaseInfoService.update(orderBaseUpdateWrapper); | |
87 | - reportService.update(reportUpdateWrapper); | |
88 | - profitAnalysisService.update(profitUpdateWrapper); | |
89 | - trackStageService.update(trackUpdateWrapper); | |
90 | - inspectionStageService.update(inspectUpdateWrapper); | |
91 | - }); | |
70 | + if (CollectionUtils.isNotEmpty(orderIds)) { | |
71 | + LambdaUpdateWrapper<OrderBaseInfoDO> orderBaseUpdateWrapper = new LambdaUpdateWrapper<OrderBaseInfoDO>() | |
72 | + .in(OrderBaseInfoDO::getId, orderIds).set(OrderBaseInfoDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); | |
73 | + | |
74 | + LambdaUpdateWrapper<OrderCompletionReportDO> reportUpdateWrapper = new LambdaUpdateWrapper<OrderCompletionReportDO>() | |
75 | + .in(OrderCompletionReportDO::getOrderId, orderIds).set(OrderCompletionReportDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); | |
76 | + | |
77 | + LambdaUpdateWrapper<OrderProfitAnalysisDO> profitUpdateWrapper = new LambdaUpdateWrapper<OrderProfitAnalysisDO>() | |
78 | + .in(OrderProfitAnalysisDO::getOrderId, orderIds).set(OrderProfitAnalysisDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); | |
79 | + | |
80 | + LambdaUpdateWrapper<OrderTrackStageDO> trackUpdateWrapper = new LambdaUpdateWrapper<OrderTrackStageDO>() | |
81 | + .in(OrderTrackStageDO::getOrderId, orderIds).set(OrderTrackStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); | |
82 | + | |
83 | + LambdaUpdateWrapper<OrderInspectionStageDO> inspectUpdateWrapper = new LambdaUpdateWrapper<OrderInspectionStageDO>() | |
84 | + .in(OrderInspectionStageDO::getOrderId, orderIds).set(OrderInspectionStageDO::getOrderStatus, OrderStatusEnum.ORDER_FINISH.getStatus()); | |
85 | + | |
86 | + transactionHelper.run(() -> { | |
87 | + orderBaseInfoService.update(orderBaseUpdateWrapper); | |
88 | + reportService.update(reportUpdateWrapper); | |
89 | + profitAnalysisService.update(profitUpdateWrapper); | |
90 | + trackStageService.update(trackUpdateWrapper); | |
91 | + inspectionStageService.update(inspectUpdateWrapper); | |
92 | + }); | |
93 | + } | |
92 | 94 | } |
93 | 95 | log.info("执行结束时间:{}", DateTime.now().toString("yyyy-MM-dd HH:mm:ss")); |
94 | 96 | } | ... | ... |
src/main/java/com/order/erp/service/admin/impl/DictionaryServiceImpl.java
... | ... | @@ -11,17 +11,22 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
11 | 11 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
12 | 12 | import com.order.erp.common.constant.Constant; |
13 | 13 | import com.order.erp.common.constant.ServerResult; |
14 | +import com.order.erp.common.utils.TransactionHelper; | |
14 | 15 | import com.order.erp.domain.dto.BaseDO; |
16 | +import com.order.erp.domain.dto.SystemSettingDO; | |
15 | 17 | import com.order.erp.domain.dto.admin.DictionaryDO; |
16 | 18 | import com.order.erp.domain.vo.admin.DictionaryQueryVO; |
17 | 19 | import com.order.erp.domain.vo.admin.DictionaryResultVO; |
18 | 20 | import com.order.erp.domain.vo.admin.DictionaryVO; |
19 | 21 | import com.order.erp.mapper.admin.DictionaryMapper; |
22 | +import com.order.erp.service.SystemSettingService; | |
20 | 23 | import com.order.erp.service.admin.DictionaryService; |
21 | 24 | import lombok.extern.slf4j.Slf4j; |
22 | 25 | import org.springframework.beans.BeanUtils; |
23 | 26 | import org.springframework.stereotype.Service; |
24 | 27 | |
28 | +import javax.annotation.Resource; | |
29 | +import java.util.ArrayList; | |
25 | 30 | import java.util.List; |
26 | 31 | import java.util.Objects; |
27 | 32 | import java.util.stream.Collectors; |
... | ... | @@ -37,6 +42,12 @@ import java.util.stream.Collectors; |
37 | 42 | public class DictionaryServiceImpl extends ServiceImpl<DictionaryMapper, DictionaryDO> implements DictionaryService { |
38 | 43 | |
39 | 44 | |
45 | + @Resource | |
46 | + private TransactionHelper transactionHelper; | |
47 | + | |
48 | + @Resource | |
49 | + private SystemSettingService systemSettingService; | |
50 | + | |
40 | 51 | /** |
41 | 52 | * 通过ID查询单条数据 |
42 | 53 | * <p> |
... | ... | @@ -127,12 +138,52 @@ public class DictionaryServiceImpl extends ServiceImpl<DictionaryMapper, Diction |
127 | 138 | } |
128 | 139 | DictionaryDO dictionaryDo = BeanUtil.copyProperties(dictionaryVO, DictionaryDO.class); |
129 | 140 | |
130 | - save(dictionaryDo); | |
141 | + List<SystemSettingDO> systemSettingDOS = new ArrayList<>(); | |
142 | + // 客户编码 | |
143 | + if ("customerCode".equals(dictionaryDo.getDictCode())) { | |
144 | + systemSettingDOS = initSettings(dictionaryDo); | |
145 | + } | |
146 | + | |
147 | + List<SystemSettingDO> finalSystemSettingDOS = systemSettingDOS; | |
148 | + transactionHelper.run(() -> { | |
149 | + if (CollectionUtils.isNotEmpty(finalSystemSettingDOS)) { | |
150 | + systemSettingService.saveBatch(finalSystemSettingDOS); | |
151 | + } | |
152 | + save(dictionaryDo); | |
153 | + }); | |
154 | + | |
131 | 155 | |
132 | 156 | return ServerResult.success(); |
133 | 157 | } |
134 | 158 | |
135 | 159 | /** |
160 | + * @param dictionaryDo | |
161 | + * @return | |
162 | + */ | |
163 | + private List<SystemSettingDO> initSettings(DictionaryDO dictionaryDo) { | |
164 | + List<SystemSettingDO> systemSettingDOS = new ArrayList<>(); | |
165 | + systemSettingDOS.add(SystemSettingDO.builder() | |
166 | + .settingCode(dictionaryDo.getDictCode()) | |
167 | + .settingName(dictionaryDo.getDictName()) | |
168 | + .settingValue(dictionaryDo.getDictValue()) | |
169 | + .settingType(Constant.ONE) | |
170 | + .relationCode("packetPrice") | |
171 | + .relationName("包装费用") | |
172 | + .relationValue("0.55") | |
173 | + .build()); | |
174 | + systemSettingDOS.add(SystemSettingDO.builder() | |
175 | + .settingCode(dictionaryDo.getDictCode()) | |
176 | + .settingName(dictionaryDo.getDictName()) | |
177 | + .settingValue(dictionaryDo.getDictValue()) | |
178 | + .settingType(Constant.ONE) | |
179 | + .relationCode("profitRate") | |
180 | + .relationName("利润率") | |
181 | + .relationValue("0.3") | |
182 | + .build()); | |
183 | + return systemSettingDOS; | |
184 | + } | |
185 | + | |
186 | + /** | |
136 | 187 | * 修改数据 |
137 | 188 | * |
138 | 189 | * @param dictionaryVO 实例对象 | ... | ... |
src/main/java/com/order/erp/service/order/OrderBaseInfoService.java
1 | 1 | package com.order.erp.service.order; |
2 | 2 | |
3 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |
3 | 4 | import com.baomidou.mybatisplus.extension.service.IService; |
4 | 5 | import com.order.erp.common.constant.ServerResult; |
5 | 6 | import com.order.erp.common.excel4j.exceptions.Excel4JException; |
... | ... | @@ -20,6 +21,13 @@ import java.util.Map; |
20 | 21 | public interface OrderBaseInfoService extends IService<OrderBaseInfoDO> { |
21 | 22 | |
22 | 23 | /** |
24 | + * | |
25 | + * @param queryVO | |
26 | + * @return | |
27 | + */ | |
28 | + LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO); | |
29 | + | |
30 | + /** | |
23 | 31 | * 通过ID查询单条数据 |
24 | 32 | * |
25 | 33 | * @param orderBaseInfoQueryVO 主键 | ... | ... |
src/main/java/com/order/erp/service/order/OrderCompletionReportService.java
... | ... | @@ -3,6 +3,8 @@ package com.order.erp.service.order; |
3 | 3 | import com.baomidou.mybatisplus.extension.service.IService; |
4 | 4 | import com.order.erp.common.constant.ServerResult; |
5 | 5 | import com.order.erp.domain.dto.order.OrderCompletionReportDO; |
6 | +import com.order.erp.domain.vo.OrderReportAnalysisVo; | |
7 | +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; | |
6 | 8 | import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO; |
7 | 9 | import com.order.erp.domain.vo.order.OrderCompletionReportVO; |
8 | 10 | |
... | ... | @@ -32,6 +34,13 @@ public interface OrderCompletionReportService extends IService<OrderCompletionRe |
32 | 34 | */ |
33 | 35 | ServerResult list(OrderCompletionReportQueryVO orderCompletionReportQueryVO); |
34 | 36 | |
37 | + | |
38 | + /** | |
39 | + * @param reportAnalysisVo | |
40 | + * @return | |
41 | + */ | |
42 | + ServerResult analysis(OrderBaseInfoQueryVO queryVO); | |
43 | + | |
35 | 44 | /** |
36 | 45 | * 新增数据 |
37 | 46 | * | ... | ... |
src/main/java/com/order/erp/service/order/impl/OrderBaseInfoServiceImpl.java
... | ... | @@ -24,10 +24,12 @@ import com.order.erp.common.utils.ProfitUtils; |
24 | 24 | import com.order.erp.config.DataScope; |
25 | 25 | import com.order.erp.domain.*; |
26 | 26 | import com.order.erp.domain.dto.BaseDO; |
27 | +import com.order.erp.domain.dto.SystemSettingDO; | |
27 | 28 | import com.order.erp.domain.dto.admin.AdminUserDO; |
28 | 29 | import com.order.erp.domain.dto.order.*; |
29 | 30 | import com.order.erp.domain.vo.order.*; |
30 | 31 | import com.order.erp.mapper.order.OrderBaseInfoMapper; |
32 | +import com.order.erp.service.SystemSettingService; | |
31 | 33 | import com.order.erp.service.admin.AdminUserService; |
32 | 34 | import com.order.erp.service.order.*; |
33 | 35 | import lombok.extern.slf4j.Slf4j; |
... | ... | @@ -101,6 +103,9 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O |
101 | 103 | @Resource |
102 | 104 | private AdminUserService userService; |
103 | 105 | |
106 | + @Resource | |
107 | + private SystemSettingService systemSettingService; | |
108 | + | |
104 | 109 | /** |
105 | 110 | * 通过ID查询单条数据 |
106 | 111 | * <p> |
... | ... | @@ -609,21 +614,11 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O |
609 | 614 | |
610 | 615 | |
611 | 616 | /** |
612 | - * @param profitAnalysisVO | |
617 | + * @param profitAnalysisFieldVO | |
613 | 618 | * @param userId |
614 | 619 | * @return |
615 | 620 | */ |
616 | - private OrderFieldLockApplyDO buildProfitFieldLockApplyDO(OrderBaseInfoDO orderBaseInfoDO, OrderProfitAnalysisVO profitAnalysisVO, Long userId) { | |
617 | - if (Objects.nonNull(profitAnalysisVO.getCustomerPrice())) { | |
618 | - profitAnalysisVO.setCustomerTotalPrice(profitAnalysisVO.getCustomerPrice() * orderBaseInfoDO.getOrderCount()); | |
619 | - } | |
620 | - if (Objects.nonNull(profitAnalysisVO.getPacketPrice())) { | |
621 | - profitAnalysisVO.setPacketTotalPrice(profitAnalysisVO.getPacketPrice() * orderBaseInfoDO.getOrderCount()); | |
622 | - } | |
623 | - if (Objects.nonNull(profitAnalysisVO.getProductionDepartmentPrice())) { | |
624 | - profitAnalysisVO.setProductionDepartmentTotalPrice(profitAnalysisVO.getProductionDepartmentPrice() * orderBaseInfoDO.getOrderCount()); | |
625 | - } | |
626 | - OrderProfitAnalysisFieldVO profitAnalysisFieldVO = profitAnalysis2profitAnalysisField(profitAnalysisVO); | |
621 | + private OrderFieldLockApplyDO buildProfitFieldLockApplyDO(OrderProfitAnalysisFieldVO profitAnalysisFieldVO, Long userId) { | |
627 | 622 | return OrderFieldLockApplyDO.builder() |
628 | 623 | .applyUserId(userId) |
629 | 624 | .auditUserId(null) |
... | ... | @@ -639,7 +634,16 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O |
639 | 634 | * @param profitAnalysisVO |
640 | 635 | * @return |
641 | 636 | */ |
642 | - private OrderProfitAnalysisFieldVO profitAnalysis2profitAnalysisField(OrderProfitAnalysisVO profitAnalysisVO) { | |
637 | + private OrderProfitAnalysisFieldVO profitAnalysis2profitAnalysisField(OrderBaseInfoDO orderBaseInfoDO, OrderProfitAnalysisVO profitAnalysisVO) { | |
638 | + if (Objects.nonNull(profitAnalysisVO.getCustomerPrice())) { | |
639 | + profitAnalysisVO.setCustomerTotalPrice(profitAnalysisVO.getCustomerPrice() * orderBaseInfoDO.getOrderCount()); | |
640 | + } | |
641 | + if (Objects.nonNull(profitAnalysisVO.getPacketPrice())) { | |
642 | + profitAnalysisVO.setPacketTotalPrice(profitAnalysisVO.getPacketPrice() * orderBaseInfoDO.getOrderCount()); | |
643 | + } | |
644 | + if (Objects.nonNull(profitAnalysisVO.getProductionDepartmentPrice())) { | |
645 | + profitAnalysisVO.setProductionDepartmentTotalPrice(profitAnalysisVO.getProductionDepartmentPrice() * orderBaseInfoDO.getOrderCount()); | |
646 | + } | |
643 | 647 | Double profitRate = null; |
644 | 648 | if (Objects.nonNull(profitAnalysisVO.getCustomerTotalPrice()) |
645 | 649 | && Objects.nonNull(profitAnalysisVO.getExchangeRate()) |
... | ... | @@ -665,7 +669,7 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O |
665 | 669 | .productionDepartmentTotalPrice(Objects.nonNull(profitAnalysisVO.getProductionDepartmentTotalPrice()) ? profitAnalysisVO.getProductionDepartmentTotalPrice().toString() : null) |
666 | 670 | .productionDepartmentCurrency(profitAnalysisVO.getProductionDepartmentCurrency()) |
667 | 671 | .exchangeRate(Objects.nonNull(profitAnalysisVO.getExchangeRate()) ? profitAnalysisVO.getExchangeRate().toString() : null) |
668 | - .profitRate(Objects.nonNull(profitRate) ? profitRate.toString() : null).build(); | |
672 | + .profitRate(Objects.nonNull(profitRate) ? profitRate.toString() : "0").build(); | |
669 | 673 | } |
670 | 674 | |
671 | 675 | /** |
... | ... | @@ -1066,7 +1070,8 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O |
1066 | 1070 | * @param queryVO |
1067 | 1071 | * @return |
1068 | 1072 | */ |
1069 | - private LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO) { | |
1073 | + @Override | |
1074 | + public LambdaQueryWrapper<OrderBaseInfoDO> buildQueryByParam(OrderBaseInfoQueryVO queryVO) { | |
1070 | 1075 | RoleEnum roleEnum = dataScope.getRole(); |
1071 | 1076 | // 跟单员 |
1072 | 1077 | if (Objects.nonNull(roleEnum) && roleEnum.getId().equals(RoleEnum.TRACKER_USER.getId())) { |
... | ... | @@ -1095,11 +1100,33 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O |
1095 | 1100 | } |
1096 | 1101 | } |
1097 | 1102 | |
1098 | - if (StringUtils.isNotBlank(queryVO.getIdeaSource()) || StringUtils.isNotBlank(queryVO.getManualPreform())) { | |
1103 | + if (StringUtils.isNotBlank(queryVO.getDesigner())) { | |
1104 | + List<OrderCompletionReportDO> reportDOS = reportService.list(new LambdaQueryWrapper<OrderCompletionReportDO>() | |
1105 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | |
1106 | + .and(q -> q.eq(OrderCompletionReportDO::getIdeaSource, queryVO.getDesigner()).or() | |
1107 | + .eq(OrderCompletionReportDO::getManualPreform1, queryVO.getDesigner()).or() | |
1108 | + .eq(OrderCompletionReportDO::getManualPreform2, queryVO.getDesigner()))); | |
1109 | + if (CollectionUtils.isNotEmpty(reportDOS)) { | |
1110 | + Set<Long> reportOrderIds = reportDOS.stream().map(OrderCompletionReportDO::getOrderId).collect(Collectors.toSet()); | |
1111 | + if (CollectionUtils.isNotEmpty(orderIds)) { | |
1112 | + Collection<Long> set = CollectionUtil.intersection(orderIds, reportOrderIds); | |
1113 | + if (CollectionUtils.isEmpty(set)) { | |
1114 | + orderIds.add(-1L); | |
1115 | + } else { | |
1116 | + orderIds.addAll(set); | |
1117 | + } | |
1118 | + } else { | |
1119 | + orderIds.addAll(reportOrderIds); | |
1120 | + } | |
1121 | + } else { | |
1122 | + orderIds.add(-1L); | |
1123 | + } | |
1124 | + } else if (StringUtils.isNotBlank(queryVO.getIdeaSource()) || StringUtils.isNotBlank(queryVO.getManualPreform1()) || StringUtils.isNotBlank(queryVO.getManualPreform2())) { | |
1099 | 1125 | List<OrderCompletionReportDO> reportDOS = reportService.list(new LambdaQueryWrapper<OrderCompletionReportDO>() |
1100 | 1126 | .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) |
1101 | 1127 | .eq(StringUtils.isNotBlank(queryVO.getIdeaSource()), OrderCompletionReportDO::getIdeaSource, queryVO.getIdeaSource()) |
1102 | - .eq(StringUtils.isNotBlank(queryVO.getManualPreform()), OrderCompletionReportDO::getManualPreform1, queryVO.getManualPreform())); | |
1128 | + .eq(StringUtils.isNotBlank(queryVO.getManualPreform2()), OrderCompletionReportDO::getManualPreform2, queryVO.getManualPreform2()) | |
1129 | + .eq(StringUtils.isNotBlank(queryVO.getManualPreform1()), OrderCompletionReportDO::getManualPreform1, queryVO.getManualPreform1())); | |
1103 | 1130 | if (CollectionUtils.isNotEmpty(reportDOS)) { |
1104 | 1131 | Set<Long> reportOrderIds = reportDOS.stream().map(OrderCompletionReportDO::getOrderId).collect(Collectors.toSet()); |
1105 | 1132 | if (CollectionUtils.isNotEmpty(orderIds)) { |
... | ... | @@ -1291,6 +1318,36 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O |
1291 | 1318 | } |
1292 | 1319 | |
1293 | 1320 | /** |
1321 | + * @param profitAnalysisVO | |
1322 | + * @param orderBaseInfoDo | |
1323 | + * @param userId | |
1324 | + */ | |
1325 | + public OrderFieldLockApplyDO handlerProfitRate(OrderProfitAnalysisVO profitAnalysisVO, OrderBaseInfoDO orderBaseInfoDo, Long userId) { | |
1326 | + OrderProfitAnalysisFieldVO profitAnalysisFieldVO = profitAnalysis2profitAnalysisField(orderBaseInfoDo, profitAnalysisVO); | |
1327 | + | |
1328 | + SystemSettingDO systemSettingDO = systemSettingService.getOne(new LambdaQueryWrapper<SystemSettingDO>() | |
1329 | + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN) | |
1330 | + .eq(SystemSettingDO::getSettingCode, "customerCode") | |
1331 | + .eq(SystemSettingDO::getSettingValue, orderBaseInfoDo.getCustomerCode()) | |
1332 | + .eq(SystemSettingDO::getRelationCode, "profitRate").last("limit 1")); | |
1333 | + | |
1334 | + double profitRate = Objects.nonNull(systemSettingDO) ? Double.parseDouble(systemSettingDO.getRelationValue()) : 0.3; | |
1335 | + checkApply(profitAnalysisVO.getOrderId(), userId); | |
1336 | + OrderFieldLockApplyDO orderFieldLockApplyDO = buildProfitFieldLockApplyDO(profitAnalysisFieldVO, userId); | |
1337 | + orderFieldLockApplyService.save(orderFieldLockApplyDO); | |
1338 | + | |
1339 | + if (Double.parseDouble(profitAnalysisFieldVO.getProfitRate()) >= profitRate) { | |
1340 | + // 直接通过 | |
1341 | + orderFieldLockApplyService.doAudit(AuditVO.builder() | |
1342 | + .id(orderFieldLockApplyDO.getId()) | |
1343 | + .status(ApplyStatusEnum.AUDIT_PASS.getStatus()) | |
1344 | + .build()); | |
1345 | + orderFieldLockApplyDO.setStatus(ApplyStatusEnum.AUDIT_PASS.getStatus()); | |
1346 | + } | |
1347 | + return orderFieldLockApplyDO; | |
1348 | + } | |
1349 | + | |
1350 | + /** | |
1294 | 1351 | * 修改数据 |
1295 | 1352 | * |
1296 | 1353 | * @param updateVO 实例对象 |
... | ... | @@ -1317,11 +1374,10 @@ public class OrderBaseInfoServiceImpl extends ServiceImpl<OrderBaseInfoMapper, O |
1317 | 1374 | optLogDO = buildOrderOptLogDo(updateVO.getOrderId(), userId, OrderOptTypeEnum.ORDER_EDIT.getDesc(), JSONObject.toJSONString(updateVO)); |
1318 | 1375 | } |
1319 | 1376 | if (Objects.nonNull(updateVO.getProfitAnalysisInfo())) { |
1320 | - checkApply(updateVO.getOrderId(), userId); | |
1321 | - OrderFieldLockApplyDO orderFieldLockApplyDO = buildProfitFieldLockApplyDO(orderBaseInfoDo, updateVO.getProfitAnalysisInfo(), userId); | |
1322 | - orderFieldLockApplyService.save(orderFieldLockApplyDO); | |
1377 | + OrderFieldLockApplyDO orderFieldLockApplyDO = handlerProfitRate(updateVO.getProfitAnalysisInfo(), orderBaseInfoDo, userId); | |
1323 | 1378 | |
1324 | - orderBaseInfoDo.setOrderStatus(OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus()); | |
1379 | + orderBaseInfoDo.setOrderStatus(ApplyStatusEnum.AUDIT_PASS.getStatus().equals(orderFieldLockApplyDO.getStatus()) ? OrderStatusEnum.PROFIT_AUDIT_PASS.getStatus() | |
1380 | + : OrderStatusEnum.PROFIT_WAIT_AUDIT.getStatus()); | |
1325 | 1381 | optLogDO = buildOrderOptLogDo(updateVO.getOrderId(), userId, OrderOptTypeEnum.ORDER_PROFIT_EDIT_APPLY.getDesc(), orderFieldLockApplyDO.getFields()); |
1326 | 1382 | } |
1327 | 1383 | ... | ... |
src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java
... | ... | @@ -4,19 +4,28 @@ import cn.hutool.core.bean.BeanUtil; |
4 | 4 | import cn.hutool.core.collection.CollUtil; |
5 | 5 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
6 | 6 | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
7 | +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; | |
7 | 8 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
8 | 9 | import com.order.erp.common.constant.Constant; |
9 | 10 | import com.order.erp.common.constant.ServerResult; |
11 | +import com.order.erp.domain.dto.order.OrderBaseInfoDO; | |
10 | 12 | import com.order.erp.domain.dto.order.OrderCompletionReportDO; |
13 | +import com.order.erp.domain.vo.OrderReportAnalysisResultVo; | |
14 | +import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; | |
11 | 15 | import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO; |
12 | 16 | import com.order.erp.domain.vo.order.OrderCompletionReportVO; |
13 | 17 | import com.order.erp.mapper.order.OrderCompletionReportMapper; |
18 | +import com.order.erp.service.order.OrderBaseInfoService; | |
14 | 19 | import com.order.erp.service.order.OrderCompletionReportService; |
15 | 20 | import lombok.extern.slf4j.Slf4j; |
16 | 21 | import org.springframework.stereotype.Service; |
17 | 22 | |
23 | +import javax.annotation.Resource; | |
24 | +import java.math.BigDecimal; | |
18 | 25 | import java.util.List; |
19 | 26 | import java.util.Objects; |
27 | +import java.util.Set; | |
28 | +import java.util.stream.Collectors; | |
20 | 29 | |
21 | 30 | /** |
22 | 31 | * 订单-项目完成报告书(OrderCompletionReport)表服务实现类 |
... | ... | @@ -29,6 +38,9 @@ import java.util.Objects; |
29 | 38 | public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletionReportMapper, OrderCompletionReportDO> implements OrderCompletionReportService { |
30 | 39 | |
31 | 40 | |
41 | + @Resource | |
42 | + private OrderBaseInfoService orderBaseInfoService; | |
43 | + | |
32 | 44 | /** |
33 | 45 | * 通过ID查询单条数据 |
34 | 46 | * <p> |
... | ... | @@ -60,6 +72,28 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletio |
60 | 72 | return ServerResult.success(); |
61 | 73 | } |
62 | 74 | |
75 | + @Override | |
76 | + public ServerResult analysis(OrderBaseInfoQueryVO queryVO) { | |
77 | + LambdaQueryWrapper<OrderBaseInfoDO> queryWrapper = orderBaseInfoService.buildQueryByParam(queryVO); | |
78 | + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.list(queryWrapper); | |
79 | + OrderReportAnalysisResultVo resultVo = new OrderReportAnalysisResultVo(); | |
80 | + if (CollectionUtils.isNotEmpty(orderBaseInfoDOList)) { | |
81 | + Set<Long> orderIds = orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toSet()); | |
82 | + List<OrderCompletionReportDO> reportDOS = list(new LambdaQueryWrapper<OrderCompletionReportDO>().in(OrderCompletionReportDO::getOrderId, orderIds)); | |
83 | + BigDecimal sum = new BigDecimal(0); | |
84 | + if (CollectionUtils.isNotEmpty(reportDOS)) { | |
85 | + for (OrderCompletionReportDO reportDO : reportDOS) { | |
86 | + Double ideaSourceRate = queryVO.getDesigner().equals(reportDO.getIdeaSource()) && Objects.nonNull(reportDO.getIdeaSourceRate()) ? reportDO.getIdeaSourceRate() : 0; | |
87 | + Double manualPreform1Rate = queryVO.getDesigner().equals(reportDO.getManualPreform1()) && Objects.nonNull(reportDO.getManualPreform1Rate()) ? reportDO.getManualPreform1Rate() : 0; | |
88 | + Double manualPreform2Rate = queryVO.getDesigner().equals(reportDO.getManualPreform2()) && Objects.nonNull(reportDO.getManualPreform2Rate()) ? reportDO.getManualPreform2Rate() : 0; | |
89 | + sum = sum.add(new BigDecimal(ideaSourceRate)).add(new BigDecimal(manualPreform1Rate)).add(new BigDecimal(manualPreform2Rate)); | |
90 | + } | |
91 | + } | |
92 | + resultVo.setRate(sum.divide(new BigDecimal(orderBaseInfoDOList.size())).doubleValue()); | |
93 | + } | |
94 | + return ServerResult.success(resultVo); | |
95 | + } | |
96 | + | |
63 | 97 | /** |
64 | 98 | * 新增数据 |
65 | 99 | * |
... | ... | @@ -124,6 +158,7 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletio |
124 | 158 | |
125 | 159 | /** |
126 | 160 | * 通过订单id逻辑删除 |
161 | + * | |
127 | 162 | * @param orderId |
128 | 163 | * @return |
129 | 164 | */ |
... | ... | @@ -149,7 +184,7 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl<OrderCompletio |
149 | 184 | public long countByOrderStatus(Integer status) { |
150 | 185 | return baseMapper.selectCount(new LambdaQueryWrapper<OrderCompletionReportDO>() |
151 | 186 | .eq(OrderCompletionReportDO::getOrderStatus, status) |
152 | - .eq(OrderCompletionReportDO::getEnableFlag,Constant.ENABLE_TEN)); | |
187 | + .eq(OrderCompletionReportDO::getEnableFlag, Constant.ENABLE_TEN)); | |
153 | 188 | } |
154 | 189 | |
155 | 190 | @Override | ... | ... |