Commit ee55aab967306cb5bd2b68fa34d4c2d0b9731175

Authored by 谢茂盛
1 parent 5293b948

feat: 问题修复项

1、设计师权重导出
src/main/java/com/order/erp/controller/OrderReportController.java
1 package com.order.erp.controller; 1 package com.order.erp.controller;
2 2
3 import com.order.erp.common.constant.ServerResult; 3 import com.order.erp.common.constant.ServerResult;
4 -import com.order.erp.domain.vo.OrderReportAnalysisVo; 4 +import com.order.erp.common.excel4j.exceptions.Excel4JException;
5 import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; 5 import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
6 import com.order.erp.domain.vo.order.OrderProfitAnalysisVO; 6 import com.order.erp.domain.vo.order.OrderProfitAnalysisVO;
7 import com.order.erp.service.order.OrderCompletionReportService; 7 import com.order.erp.service.order.OrderCompletionReportService;
@@ -12,6 +12,8 @@ import org.springframework.web.bind.annotation.RequestMapping; @@ -12,6 +12,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
12 import org.springframework.web.bind.annotation.RestController; 12 import org.springframework.web.bind.annotation.RestController;
13 13
14 import javax.annotation.Resource; 14 import javax.annotation.Resource;
  15 +import javax.servlet.http.HttpServletResponse;
  16 +import java.io.IOException;
15 17
16 /** 18 /**
17 * @author xms 19 * @author xms
@@ -31,4 +33,9 @@ public class OrderReportController { @@ -31,4 +33,9 @@ public class OrderReportController {
31 public ServerResult<OrderProfitAnalysisVO> analysis(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) { 33 public ServerResult<OrderProfitAnalysisVO> analysis(@RequestBody @Validated OrderBaseInfoQueryVO queryVO) {
32 return orderCompletionReportService.analysis(queryVO); 34 return orderCompletionReportService.analysis(queryVO);
33 } 35 }
  36 +
  37 + @PostMapping("/export")
  38 + public void export(HttpServletResponse response, @RequestBody @Validated OrderBaseInfoQueryVO queryVO) throws IOException, Excel4JException {
  39 + orderCompletionReportService.export(response, queryVO);
  40 + }
34 } 41 }
src/main/java/com/order/erp/domain/vo/OrderReportAnalysisExportVo.java 0 → 100644
  1 +package com.order.erp.domain.vo;
  2 +
  3 +import com.order.erp.common.excel4j.annotation.ExcelField;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Data;
  6 +import lombok.NoArgsConstructor;
  7 +import lombok.ToString;
  8 +import lombok.experimental.SuperBuilder;
  9 +
  10 +import java.io.Serializable;
  11 +import java.math.BigDecimal;
  12 +
  13 +/**
  14 + * @author zhongnanhuang
  15 + * @version 1.0
  16 + * @project order-erp
  17 + * @description 利润分析传参
  18 + * @date 2023/10/30 10:19:26
  19 + */
  20 +@Data
  21 +@AllArgsConstructor
  22 +@NoArgsConstructor
  23 +@SuperBuilder
  24 +@ToString
  25 +public class OrderReportAnalysisExportVo implements Serializable {
  26 +
  27 + /**
  28 + * 设计师
  29 + */
  30 + @ExcelField(title = "设计师", order = 1)
  31 + private String designer;
  32 +
  33 + /**
  34 + * 想法来源占比
  35 + */
  36 + @ExcelField(title = "想法来源占比", order = 2)
  37 + private BigDecimal ideaSourceRate;
  38 +
  39 + /**
  40 + * 手工初型1占比
  41 + */
  42 + @ExcelField(title = "手工初型1占比", order = 3)
  43 + private BigDecimal manualPreform1Rate;
  44 +
  45 + /**
  46 + * 手工初型2占比
  47 + */
  48 + @ExcelField(title = "手工初型2占比", order = 4)
  49 + private BigDecimal manualPreform2Rate;
  50 +}
src/main/java/com/order/erp/service/order/OrderCompletionReportService.java
@@ -2,12 +2,15 @@ package com.order.erp.service.order; @@ -2,12 +2,15 @@ package com.order.erp.service.order;
2 2
3 import com.baomidou.mybatisplus.extension.service.IService; 3 import com.baomidou.mybatisplus.extension.service.IService;
4 import com.order.erp.common.constant.ServerResult; 4 import com.order.erp.common.constant.ServerResult;
  5 +import com.order.erp.common.excel4j.exceptions.Excel4JException;
5 import com.order.erp.domain.dto.order.OrderCompletionReportDO; 6 import com.order.erp.domain.dto.order.OrderCompletionReportDO;
6 import com.order.erp.domain.vo.OrderReportAnalysisVo; 7 import com.order.erp.domain.vo.OrderReportAnalysisVo;
7 import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; 8 import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
8 import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO; 9 import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO;
9 import com.order.erp.domain.vo.order.OrderCompletionReportVO; 10 import com.order.erp.domain.vo.order.OrderCompletionReportVO;
10 11
  12 +import javax.servlet.http.HttpServletResponse;
  13 +import java.io.IOException;
11 import java.util.List; 14 import java.util.List;
12 15
13 /** 16 /**
@@ -36,12 +39,20 @@ public interface OrderCompletionReportService extends IService&lt;OrderCompletionRe @@ -36,12 +39,20 @@ public interface OrderCompletionReportService extends IService&lt;OrderCompletionRe
36 39
37 40
38 /** 41 /**
39 - * @param reportAnalysisVo 42 + * @param queryVO
40 * @return 43 * @return
41 */ 44 */
42 ServerResult analysis(OrderBaseInfoQueryVO queryVO); 45 ServerResult analysis(OrderBaseInfoQueryVO queryVO);
43 46
44 /** 47 /**
  48 + *
  49 + * @param response
  50 + * @param orderBaseInfoQueryVO
  51 + * @return
  52 + */
  53 + ServerResult export(HttpServletResponse response, OrderBaseInfoQueryVO orderBaseInfoQueryVO) throws IOException, Excel4JException;
  54 +
  55 + /**
45 * 新增数据 56 * 新增数据
46 * 57 *
47 * @param orderCompletionReportVO 数据VO 58 * @param orderCompletionReportVO 数据VO
src/main/java/com/order/erp/service/order/impl/OrderCompletionReportServiceImpl.java
@@ -8,8 +8,11 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; @@ -8,8 +8,11 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
8 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 8 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
9 import com.order.erp.common.constant.Constant; 9 import com.order.erp.common.constant.Constant;
10 import com.order.erp.common.constant.ServerResult; 10 import com.order.erp.common.constant.ServerResult;
  11 +import com.order.erp.common.excel4j.ExcelUtils;
  12 +import com.order.erp.common.excel4j.exceptions.Excel4JException;
11 import com.order.erp.domain.dto.order.OrderBaseInfoDO; 13 import com.order.erp.domain.dto.order.OrderBaseInfoDO;
12 import com.order.erp.domain.dto.order.OrderCompletionReportDO; 14 import com.order.erp.domain.dto.order.OrderCompletionReportDO;
  15 +import com.order.erp.domain.vo.OrderReportAnalysisExportVo;
13 import com.order.erp.domain.vo.OrderReportAnalysisResultVo; 16 import com.order.erp.domain.vo.OrderReportAnalysisResultVo;
14 import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO; 17 import com.order.erp.domain.vo.order.OrderBaseInfoQueryVO;
15 import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO; 18 import com.order.erp.domain.vo.order.OrderCompletionReportQueryVO;
@@ -21,11 +24,12 @@ import lombok.extern.slf4j.Slf4j; @@ -21,11 +24,12 @@ import lombok.extern.slf4j.Slf4j;
21 import org.springframework.stereotype.Service; 24 import org.springframework.stereotype.Service;
22 25
23 import javax.annotation.Resource; 26 import javax.annotation.Resource;
  27 +import javax.servlet.http.HttpServletResponse;
  28 +import java.io.IOException;
24 import java.math.BigDecimal; 29 import java.math.BigDecimal;
25 import java.math.RoundingMode; 30 import java.math.RoundingMode;
26 -import java.util.List;  
27 -import java.util.Objects;  
28 -import java.util.Set; 31 +import java.util.*;
  32 +import java.util.function.Function;
29 import java.util.stream.Collectors; 33 import java.util.stream.Collectors;
30 34
31 /** 35 /**
@@ -74,23 +78,125 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl&lt;OrderCompletio @@ -74,23 +78,125 @@ public class OrderCompletionReportServiceImpl extends ServiceImpl&lt;OrderCompletio
74 } 78 }
75 79
76 @Override 80 @Override
  81 + public ServerResult export(HttpServletResponse response, OrderBaseInfoQueryVO queryVO) throws IOException, Excel4JException {
  82 + LambdaQueryWrapper<OrderBaseInfoDO> queryWrapper = orderBaseInfoService.buildQueryByParam(queryVO);
  83 + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.list(queryWrapper);
  84 + if (CollectionUtils.isNotEmpty(orderBaseInfoDOList)) {
  85 + Set<Long> orderIds = orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toSet());
  86 + List<OrderCompletionReportDO> reportDOS = list(new LambdaQueryWrapper<OrderCompletionReportDO>().in(OrderCompletionReportDO::getOrderId, orderIds));
  87 + Map<String, OrderReportAnalysisExportVo> exportVoMap = new HashMap<>();
  88 + if (CollectionUtils.isNotEmpty(reportDOS)) {
  89 + for (OrderCompletionReportDO reportDO : reportDOS) {
  90 + if (exportVoMap.containsKey(reportDO.getIdeaSource())) {
  91 + handlerExportMap(0, reportDO, exportVoMap);
  92 + }
  93 + if (exportVoMap.containsKey(reportDO.getManualPreform1())) {
  94 + handlerExportMap(1, reportDO, exportVoMap);
  95 + }
  96 + if (exportVoMap.containsKey(reportDO.getManualPreform2())) {
  97 + handlerExportMap(2, reportDO, exportVoMap);
  98 + }
  99 + if (!exportVoMap.containsKey(reportDO.getIdeaSource())
  100 + && !exportVoMap.containsKey(reportDO.getManualPreform1())
  101 + && !exportVoMap.containsKey(reportDO.getManualPreform2())) {
  102 + handlerExportMap(0, reportDO, exportVoMap);
  103 + handlerExportMap(1, reportDO, exportVoMap);
  104 + handlerExportMap(2, reportDO, exportVoMap);
  105 + }
  106 + }
  107 + }
  108 + List<OrderReportAnalysisExportVo> exportVos = exportMap2exportList(exportVoMap);
  109 + if (CollectionUtils.isNotEmpty(exportVos)) {
  110 + ExcelUtils.getInstance().exportObjects2Excel(exportVos, OrderReportAnalysisExportVo.class, response.getOutputStream());
  111 + }
  112 + }
  113 +
  114 + return ServerResult.success();
  115 + }
  116 +
  117 + /**
  118 + * @param exportVoMap
  119 + * @return
  120 + */
  121 + private List<OrderReportAnalysisExportVo> exportMap2exportList(Map<String, OrderReportAnalysisExportVo> exportVoMap) {
  122 + List<OrderReportAnalysisExportVo> exportVos = new ArrayList<>();
  123 + if (CollectionUtils.isEmpty(exportVoMap)) {
  124 + return exportVos;
  125 + }
  126 + for (Map.Entry<String, OrderReportAnalysisExportVo> exportVoEntry : exportVoMap.entrySet()) {
  127 + String key = exportVoEntry.getKey();
  128 + OrderReportAnalysisExportVo exportVo = exportVoEntry.getValue();
  129 + exportVo.setDesigner(key);
  130 + exportVos.add(exportVo);
  131 + }
  132 + return exportVos;
  133 + }
  134 +
  135 + /**
  136 + * @param reportDO
  137 + * @param exportVoMap
  138 + */
  139 + private void handlerExportMap(Integer type, OrderCompletionReportDO reportDO, Map<String, OrderReportAnalysisExportVo> exportVoMap) {
  140 + OrderReportAnalysisExportVo exportVo = OrderReportAnalysisExportVo.builder()
  141 + .ideaSourceRate(new BigDecimal(0))
  142 + .manualPreform1Rate(new BigDecimal(0))
  143 + .manualPreform2Rate(new BigDecimal(0)).build();
  144 + String key = null;
  145 + if (type == 0) {
  146 + key = reportDO.getIdeaSource();
  147 +
  148 + }
  149 + if (type == 1) {
  150 + key = reportDO.getManualPreform1();
  151 + }
  152 + if (type == 2) {
  153 + key = reportDO.getManualPreform2();
  154 + }
  155 + exportVo = exportVoMap.get(key);
  156 + if (Objects.nonNull(reportDO.getIdeaSourceRate())) {
  157 + exportVo.setIdeaSourceRate(new BigDecimal(reportDO.getIdeaSourceRate()).add(exportVo.getIdeaSourceRate()));
  158 + }
  159 + if (Objects.nonNull(reportDO.getManualPreform1Rate())) {
  160 + exportVo.setManualPreform1Rate(new BigDecimal(reportDO.getManualPreform1Rate()).add(exportVo.getManualPreform1Rate()));
  161 + }
  162 + if (Objects.nonNull(reportDO.getManualPreform2Rate())) {
  163 + exportVo.setManualPreform2Rate(new BigDecimal(reportDO.getManualPreform2Rate()).add(exportVo.getManualPreform2Rate()));
  164 + }
  165 + exportVoMap.put(key, exportVo);
  166 + }
  167 +
  168 + @Override
77 public ServerResult analysis(OrderBaseInfoQueryVO queryVO) { 169 public ServerResult analysis(OrderBaseInfoQueryVO queryVO) {
78 LambdaQueryWrapper<OrderBaseInfoDO> queryWrapper = orderBaseInfoService.buildQueryByParam(queryVO); 170 LambdaQueryWrapper<OrderBaseInfoDO> queryWrapper = orderBaseInfoService.buildQueryByParam(queryVO);
79 List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.list(queryWrapper); 171 List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.list(queryWrapper);
80 OrderReportAnalysisResultVo resultVo = new OrderReportAnalysisResultVo(); 172 OrderReportAnalysisResultVo resultVo = new OrderReportAnalysisResultVo();
  173 + Map<Long, OrderBaseInfoDO> orderBaseInfoDOMap = new HashMap<>();
  174 + Set<String> innerNoSet = new HashSet<>();
81 if (CollectionUtils.isNotEmpty(orderBaseInfoDOList)) { 175 if (CollectionUtils.isNotEmpty(orderBaseInfoDOList)) {
  176 +
82 Set<Long> orderIds = orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toSet()); 177 Set<Long> orderIds = orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toSet());
83 List<OrderCompletionReportDO> reportDOS = list(new LambdaQueryWrapper<OrderCompletionReportDO>().in(OrderCompletionReportDO::getOrderId, orderIds)); 178 List<OrderCompletionReportDO> reportDOS = list(new LambdaQueryWrapper<OrderCompletionReportDO>().in(OrderCompletionReportDO::getOrderId, orderIds));
84 BigDecimal sum = new BigDecimal(0); 179 BigDecimal sum = new BigDecimal(0);
  180 + Map<Long, OrderCompletionReportDO> completionReportDOMap = new HashMap<>();
85 if (CollectionUtils.isNotEmpty(reportDOS)) { 181 if (CollectionUtils.isNotEmpty(reportDOS)) {
  182 + completionReportDOMap = reportDOS.stream().collect(Collectors.toMap(OrderCompletionReportDO::getOrderId, Function.identity(), (x, y) -> x));
  183 + for (OrderBaseInfoDO orderBaseInfoDO : orderBaseInfoDOList) {
  184 + if (completionReportDOMap.containsKey(orderBaseInfoDO.getId())) {
  185 + if (!innerNoSet.contains(orderBaseInfoDO.getInnerNo())) {
  186 + orderBaseInfoDOMap.put(orderBaseInfoDO.getId(), orderBaseInfoDO);
  187 + }
  188 + innerNoSet.add(orderBaseInfoDO.getInnerNo());
  189 + }
  190 + }
86 for (OrderCompletionReportDO reportDO : reportDOS) { 191 for (OrderCompletionReportDO reportDO : reportDOS) {
87 - Double ideaSourceRate = queryVO.getDesigner().equals(reportDO.getIdeaSource()) && Objects.nonNull(reportDO.getIdeaSourceRate()) ? reportDO.getIdeaSourceRate() : 0;  
88 - Double manualPreform1Rate = queryVO.getDesigner().equals(reportDO.getManualPreform1()) && Objects.nonNull(reportDO.getManualPreform1Rate()) ? reportDO.getManualPreform1Rate() : 0;  
89 - Double manualPreform2Rate = queryVO.getDesigner().equals(reportDO.getManualPreform2()) && Objects.nonNull(reportDO.getManualPreform2Rate()) ? reportDO.getManualPreform2Rate() : 0;  
90 - sum = sum.add(new BigDecimal(ideaSourceRate)).add(new BigDecimal(manualPreform1Rate)).add(new BigDecimal(manualPreform2Rate)); 192 + if (orderBaseInfoDOMap.containsKey(reportDO.getOrderId())) {
  193 + Double ideaSourceRate = queryVO.getDesigner().equals(reportDO.getIdeaSource()) && Objects.nonNull(reportDO.getIdeaSourceRate()) ? reportDO.getIdeaSourceRate() : 0;
  194 + Double manualPreform1Rate = queryVO.getDesigner().equals(reportDO.getManualPreform1()) && Objects.nonNull(reportDO.getManualPreform1Rate()) ? reportDO.getManualPreform1Rate() : 0;
  195 + Double manualPreform2Rate = queryVO.getDesigner().equals(reportDO.getManualPreform2()) && Objects.nonNull(reportDO.getManualPreform2Rate()) ? reportDO.getManualPreform2Rate() : 0;
  196 + sum = sum.add(new BigDecimal(ideaSourceRate)).add(new BigDecimal(manualPreform1Rate)).add(new BigDecimal(manualPreform2Rate));
  197 + }
91 } 198 }
92 } 199 }
93 - Set<String> innerNoSet = orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getInnerNo).collect(Collectors.toSet());  
94 resultVo.setRate(sum.divide(new BigDecimal(innerNoSet.size()), Constant.SIX, RoundingMode.HALF_UP).doubleValue()); 200 resultVo.setRate(sum.divide(new BigDecimal(innerNoSet.size()), Constant.SIX, RoundingMode.HALF_UP).doubleValue());
95 } 201 }
96 return ServerResult.success(resultVo); 202 return ServerResult.success(resultVo);