Commit 8991885d45116f78ffc9a64a67d0ea2966c2e572

Authored by chenhang4442024
1 parent 334d3881

fix:第二版财务,应收款,应付款审核界面的内部编号筛选

src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java
@@ -23,6 +23,7 @@ public class InvoiceBillOrderQueryVO extends BasePageVO implements Serializable @@ -23,6 +23,7 @@ public class InvoiceBillOrderQueryVO extends BasePageVO implements Serializable
23 23
24 private List<Long> ids; 24 private List<Long> ids;
25 private Long id; 25 private Long id;
  26 + private List<Long> orderId;
26 27
27 /** 28 /**
28 * 发票单号 29 * 发票单号
@@ -47,22 +48,22 @@ public class InvoiceBillOrderQueryVO extends BasePageVO implements Serializable @@ -47,22 +48,22 @@ public class InvoiceBillOrderQueryVO extends BasePageVO implements Serializable
47 /** 48 /**
48 * order订单的客户编码 49 * order订单的客户编码
49 */ 50 */
50 - private String customerCode; 51 + private List<String> customerCode;
51 52
52 /** 53 /**
53 * order订单的项目号 54 * order订单的项目号
54 */ 55 */
55 - private String projectNo; 56 + private List<String> projectNo;
56 57
57 /** 58 /**
58 * order订单的生产科 59 * order订单的生产科
59 */ 60 */
60 - private String productionDepartment; 61 + private List<String> productionDepartment;
61 62
62 /** 63 /**
63 * order订单的内部编号 64 * order订单的内部编号
64 */ 65 */
65 - private String innerNo; 66 + private List<String> innerNo;
66 67
67 /** 68 /**
68 * order订单的客户po号 69 * order订单的客户po号
src/main/java/com/order/erp/domain/vo/order/ProducePaymentCheckBillOrderQueryVO.java
@@ -23,7 +23,7 @@ public class ProducePaymentCheckBillOrderQueryVO extends BasePageVO implements S @@ -23,7 +23,7 @@ public class ProducePaymentCheckBillOrderQueryVO extends BasePageVO implements S
23 23
24 private List<Long> ids; 24 private List<Long> ids;
25 25
26 - 26 + private List<Long> orderIds;
27 private Long id; 27 private Long id;
28 /** 28 /**
29 * 生产科对账单 29 * 生产科对账单
src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java
@@ -97,140 +97,6 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap @@ -97,140 +97,6 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
97 //例如:查询基本信息中项目号为A01-C2409,并且invoice状态为已通过,那么就先去基本信息中查找A01-C2409,然后找到对应的invoice,判断A01-C2409对应的订单集合是否有invoice,有的话,就查找已通过的invocie。 97 //例如:查询基本信息中项目号为A01-C2409,并且invoice状态为已通过,那么就先去基本信息中查找A01-C2409,然后找到对应的invoice,判断A01-C2409对应的订单集合是否有invoice,有的话,就查找已通过的invocie。
98 //要是查询invoice为67,并且订单HOD时间小于2024-12-25,那么就先去invoice中查找是否有checkNo为67的订单,然后查找对应orderId,使用orderId去查找对应订单基本信息,查看是否有HOD小于2024-12-25的单子。 98 //要是查询invoice为67,并且订单HOD时间小于2024-12-25,那么就先去invoice中查找是否有checkNo为67的订单,然后查找对应orderId,使用orderId去查找对应订单基本信息,查看是否有HOD小于2024-12-25的单子。
99 99
100 -  
101 - /* RoleEnum role = dataScope.getRole();  
102 - LambdaQueryWrapper<InvoiceBillOrderDO> queryWrapper = getQueryWrapper(queryVO);  
103 - //跟单也只能看到自己创建的 业务只能看到自己的  
104 - if(Objects.nonNull(role) && role.getId().equals(RoleEnum.TRACKER_USER.getId())){  
105 - queryWrapper.eq(InvoiceBillOrderDO::getTrackerUser, dataScope.getLoginUserName());  
106 - }  
107 - if(Objects.nonNull(role) && role.getId().equals(RoleEnum.BUSINESS_USER.getId())){  
108 - queryWrapper.eq(InvoiceBillOrderDO::getBusinesPerson, dataScope.getLoginUserName());  
109 - }  
110 - Page page = new Page<>(queryVO.getPage(), queryVO.getPageSize());  
111 - IPage<InvoiceBillOrderDO> iPage = page(page, queryWrapper);  
112 - //创建另一个page,包含订单基本信息与invoice,然后一起返回。  
113 - return ServerResult.success(iPage);*/  
114 -  
115 - //一个条件也没有。  
116 -// if(true) {  
117 -// Page page = new Page<>(queryVO.getPage(), queryVO.getPageSize());  
118 -// IPage<OrderBaseInfoDO> iPage = orderBaseInfoService.page(page, new LambdaQueryWrapper<OrderBaseInfoDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).orderByDesc(OrderBaseInfoDO::getId));  
119 -// List<OrderBaseInfoDO> orderList = iPage.getRecords();  
120 -// //获取关联的信息。  
121 -// List<FinanceOrderResultVO> financeOrderResultVOList = null;  
122 -// if (CollectionUtils.isNotEmpty(orderList)) {  
123 -// List<Long> orderIds = orderList.stream().filter(Objects::nonNull).map(item -> item.getId()).collect(Collectors.toList());  
124 -// List<InvoiceBillOrderDO> invoiceBillOrderDOList = list(new LambdaQueryWrapper<InvoiceBillOrderDO>()  
125 -// .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(InvoiceBillOrderDO::getOrderId, orderIds));  
126 -// List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = producePaymentCheckBillOrderService.list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>()  
127 -// .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(ProducePaymentCheckBillOrderDO::getOrderId, orderIds));  
128 -// Map<Long, InvoiceBillOrderDO> invoiceBillOrderDOMap = invoiceBillOrderDOList.stream().collect(Collectors.toMap(InvoiceBillOrderDO::getOrderId, Function.identity(), (x, y) -> x));  
129 -// Map<Long, ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOMap = producePaymentCheckBillOrderDOList.stream().collect(Collectors.toMap(ProducePaymentCheckBillOrderDO::getOrderId, Function.identity(), (x, y) -> x));  
130 -// financeOrderResultVOList = orderList.stream().filter(Objects::nonNull).map(x -> {  
131 -// FinanceOrderResultVO financeOrderResultVO = new FinanceOrderResultVO();  
132 -// BeanUtils.copyProperties(x, financeOrderResultVO);  
133 -// if (invoiceBillOrderDOMap.containsKey(x.getId())) {  
134 -// InvoiceBillOrderDO invoiceBillOrderDO = invoiceBillOrderDOMap.get(x.getId());  
135 -// financeOrderResultVO.setInvoiceBillOrderDO(invoiceBillOrderDO);  
136 -// }  
137 -// if (producePaymentCheckBillOrderDOMap.containsKey(x.getId())) {  
138 -// ProducePaymentCheckBillOrderDO producePaymentCheckBillOrderDO = producePaymentCheckBillOrderDOMap.get(x.getId());  
139 -// financeOrderResultVO.setProducePaymentCheckBillOrderDO(producePaymentCheckBillOrderDO);  
140 -// }  
141 -// return financeOrderResultVO;  
142 -// }).collect(Collectors.toList());  
143 -// }  
144 -// IPage<FinanceOrderResultVO> financeOrderResultVOIPage = new Page<>();  
145 -// financeOrderResultVOIPage.setRecords(financeOrderResultVOList);  
146 -// BeanUtils.copyProperties(iPage, financeOrderResultVOIPage, "records");  
147 -// return ServerResult.success(financeOrderResultVOIPage);  
148 -// }  
149 -// else{  
150 - /* //上面单独再写一个if判断,要是一个条件都没有,就直接进行分页查询(只做一下权限)。 唯一问题:这里一下子需要查询多条数据。  
151 - RoleEnum role = dataScope.getRole();  
152 - List<OrderBaseInfoDO> orderBaseInfoDOList = ByOrderGetOrderId(queryVO, role);  
153 - if (CollectionUtils.isEmpty(orderBaseInfoDOList)) {  
154 - return ServerResult.success();  
155 - }  
156 - List<InvoiceBillOrderDO> invoiceBillOrderDOS = ByInvoiceGetOrderId(queryVO, orderBaseInfoDOList);  
157 - List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOS = ByCheckGetOrderId(queryVO, orderBaseInfoDOList);  
158 -  
159 - //取交集  
160 -  
161 - //取交集。  
162 - // 获取每个集合的 id 列表,如果集合为空则返回空集合  
163 - Set<Long> orderIds1 = orderBaseInfoDOList != null  
164 - ? orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toSet())  
165 - : Collections.emptySet();  
166 -  
167 - Set<Long> orderIds2 = invoiceBillOrderDOS != null  
168 - ? invoiceBillOrderDOS.stream().map(InvoiceBillOrderDO::getOrderId).collect(Collectors.toSet())  
169 - : Collections.emptySet();  
170 -  
171 - Set<Long> orderIds3 = producePaymentCheckBillOrderDOS != null  
172 - ? producePaymentCheckBillOrderDOS.stream().map(ProducePaymentCheckBillOrderDO::getOrderId).collect(Collectors.toSet())  
173 - : Collections.emptySet();  
174 -  
175 - Set<Long> intersection = Stream.of(orderIds1, orderIds2, orderIds3)  
176 - .filter(CollectionUtils::isNotEmpty) // 过滤掉空集合  
177 - .reduce((set1, set2) -> {  
178 - set1.retainAll(set2); // 取交集  
179 - return set1;  
180 - })  
181 - .orElse(Collections.emptySet()); // 如果结果为空则返回空集合  
182 - if (CollectionUtils.isEmpty(intersection)) {  
183 - return ServerResult.success();  
184 - }  
185 -  
186 - //返回交集的订单数据。 todo  
187 - Page page = new Page<>(queryVO.getPage(), queryVO.getPageSize());  
188 - IPage<OrderBaseInfoDO> iPage = orderBaseInfoService.page(page, new LambdaQueryWrapper<OrderBaseInfoDO>().in(OrderBaseInfoDO::getId, intersection));  
189 - List<OrderBaseInfoDO> orderList = iPage.getRecords();  
190 -  
191 -  
192 - //去对应的invoice中查找。  
193 - List<InvoiceBillOrderDO> invoiceBillOrderDOList = list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(InvoiceBillOrderDO::getOrderId, intersection));  
194 - //去对应的check中查找。  
195 - List<ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOList = producePaymentCheckBillOrderService.list(new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(ProducePaymentCheckBillOrderDO::getOrderId, intersection));  
196 -  
197 - List<FinanceOrderResultVO> financeOrderResultVOS = null;  
198 - if (CollectionUtils.isNotEmpty(orderList)) {  
199 - // 将 Map 提升到方法范围内  
200 - Map<Long, InvoiceBillOrderDO> invoiceBillOrderDOMap = CollectionUtils.isNotEmpty(invoiceBillOrderDOList)  
201 - ? invoiceBillOrderDOList.stream().collect(Collectors.toMap(  
202 - InvoiceBillOrderDO::getOrderId,  
203 - Function.identity(),  
204 - (existing, replacement) -> existing))  
205 - : Collections.emptyMap();  
206 - Map<Long, ProducePaymentCheckBillOrderDO> producePaymentCheckBillOrderDOMap = CollectionUtils.isNotEmpty(producePaymentCheckBillOrderDOList)  
207 - ? producePaymentCheckBillOrderDOList.stream().collect(Collectors.toMap(  
208 - ProducePaymentCheckBillOrderDO::getOrderId,  
209 - Function.identity(),  
210 - (existing, replacement) -> existing))  
211 - : Collections.emptyMap();  
212 - financeOrderResultVOS = orderList.stream().map(result -> {  
213 - //到这复制订单基本信息。 一个整体包含订单基本信息,invoice信息,生产科对账单号信息。  
214 - FinanceOrderResultVO financeOrderResultVO = new FinanceOrderResultVO();  
215 - BeanUtils.copyProperties(result, financeOrderResultVO);  
216 - // 访问 invoiceBillOrderDOMap  
217 - if (invoiceBillOrderDOMap.containsKey(result.getId())) {  
218 - // 对 invoice 进行处理,填充到整体中,需要orderId一致。  
219 - financeOrderResultVO.setInvoiceBillOrderDO(invoiceBillOrderDOMap.get(result.getId()));  
220 - }  
221 - if (producePaymentCheckBillOrderDOMap.containsKey(result.getId())) {  
222 - // 对 check 进行处理,填充到整体中,需要orderId一致。  
223 - financeOrderResultVO.setProducePaymentCheckBillOrderDO(producePaymentCheckBillOrderDOMap.get(result.getId()));  
224 - }  
225 - return financeOrderResultVO;  
226 - }).collect(Collectors.toList());  
227 - }  
228 - IPage<FinanceOrderResultVO> finVoPage = new Page<>();  
229 - finVoPage.setRecords(financeOrderResultVOS);  
230 - BeanUtils.copyProperties(iPage, finVoPage, "records");  
231 - System.out.println("交集 ID 集合:" + intersection);  
232 - //返回所有的订单数据。 todo 没有筛选的情况。  
233 - return ServerResult.success(finVoPage);*/  
234 RoleEnum role = dataScope.getRole(); 100 RoleEnum role = dataScope.getRole();
235 Page<FinanceOrderResultVO> page = new Page<>(queryVO.getPage(), queryVO.getPageSize()); 101 Page<FinanceOrderResultVO> page = new Page<>(queryVO.getPage(), queryVO.getPageSize());
236 if(Objects.nonNull(role) && role.getId().equals(RoleEnum.TRACKER_USER.getId())) { 102 if(Objects.nonNull(role) && role.getId().equals(RoleEnum.TRACKER_USER.getId())) {
@@ -247,54 +113,6 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap @@ -247,54 +113,6 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
247 return ServerResult.success(financeOrderResultVOIPage); 113 return ServerResult.success(financeOrderResultVOIPage);
248 } 114 }
249 // } 115 // }
250 -  
251 -  
252 -  
253 -  
254 - private List<OrderBaseInfoDO> ByOrderGetOrderId(InvoiceBillOrderQueryVO queryVO,RoleEnum role){  
255 - LambdaQueryWrapper<OrderBaseInfoDO> lambdawrapper = new LambdaQueryWrapper<OrderBaseInfoDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)  
256 - .eq(StringUtils.isNotBlank(queryVO.getCustomerCode()), OrderBaseInfoDO::getCustomerCode, queryVO.getCustomerCode())  
257 - .eq(StringUtils.isNotBlank(queryVO.getProductionDepartment()), OrderBaseInfoDO::getProductionDepartment, queryVO.getProductionDepartment())  
258 - .eq(StringUtils.isNotBlank(queryVO.getCustomerPo()), OrderBaseInfoDO::getCustomerPo, queryVO.getCustomerPo())  
259 - .eq(StringUtils.isNotBlank(queryVO.getInnerNo()), OrderBaseInfoDO::getInnerNo, queryVO.getInnerNo())  
260 - .eq(StringUtils.isNotBlank(queryVO.getProjectNo()), OrderBaseInfoDO::getProjectNo, queryVO.getProjectNo())  
261 - .ge(StringUtils.isNotBlank(queryVO.getCreateStartTime()), OrderBaseInfoDO::getCreateTime, queryVO.getCreateStartTime())  
262 - .le(StringUtils.isNotBlank(queryVO.getCreateEndTime()), OrderBaseInfoDO::getCreateTime, queryVO.getCreateEndTime())  
263 - .ge(StringUtils.isNotBlank(queryVO.getProductionDepartmentConsignStartTime()), OrderBaseInfoDO::getProductionDepartmentConsignTime, queryVO.getProductionDepartmentConsignStartTime())  
264 - .le(StringUtils.isNotBlank(queryVO.getProductionDepartmentConsignEndTime()), OrderBaseInfoDO::getProductionDepartmentConsignTime, queryVO.getProductionDepartmentConsignEndTime())  
265 - .ge(StringUtils.isNotBlank(queryVO.getOrderHodStartTime()), OrderBaseInfoDO::getOrderHodTime, queryVO.getOrderHodStartTime())  
266 - .le(StringUtils.isNotBlank(queryVO.getOrderHodEndTime()), OrderBaseInfoDO::getOrderHodTime, queryVO.getOrderHodEndTime());  
267 - if(Objects.nonNull(role) && role.getId().equals(RoleEnum.TRACKER_USER.getId())) {  
268 - lambdawrapper.eq(OrderBaseInfoDO::getCreateBy, dataScope.getLoginUserName());  
269 - }  
270 - if (Objects.nonNull(role) && role.getId().equals(RoleEnum.BUSINESS_USER.getId())) {  
271 - lambdawrapper.eq(OrderBaseInfoDO::getBusinessPerson, dataScope.getLoginUserName());  
272 - }  
273 - List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.list(lambdawrapper);  
274 - return orderBaseInfoDOList;  
275 - }  
276 - private List<InvoiceBillOrderDO> ByInvoiceGetOrderId(InvoiceBillOrderQueryVO queryVO,List<OrderBaseInfoDO> orderBaseInfoDOList){  
277 - LambdaQueryWrapper<InvoiceBillOrderDO> LambdaQueryWrapper = new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)  
278 - .eq(StringUtils.isNotBlank(queryVO.getInvoiceNo()), InvoiceBillOrderDO::getInvoiceNo, queryVO.getInvoiceNo())  
279 - .eq(Objects.nonNull(queryVO.getInvoiceStatus()), InvoiceBillOrderDO::getStatus, queryVO.getInvoiceStatus())  
280 - .ge(StringUtils.isNotBlank(queryVO.getInvoiceStartTime()), InvoiceBillOrderDO::getCreateTime, queryVO.getInvoiceStartTime())  
281 - .le(StringUtils.isNotBlank(queryVO.getInvoiceEndTime()), InvoiceBillOrderDO::getCreateTime, queryVO.getInvoiceEndTime());  
282 - if(CollectionUtils.isNotEmpty(orderBaseInfoDOList)){  
283 - LambdaQueryWrapper.in(InvoiceBillOrderDO::getOrderId, orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toList()));  
284 - }  
285 - return list(LambdaQueryWrapper);  
286 - }  
287 - private List<ProducePaymentCheckBillOrderDO> ByCheckGetOrderId(InvoiceBillOrderQueryVO queryVO,List<OrderBaseInfoDO> orderBaseInfoDOList){  
288 - LambdaQueryWrapper<ProducePaymentCheckBillOrderDO> wrapper = new LambdaQueryWrapper<ProducePaymentCheckBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)  
289 - .eq(StringUtils.isNotBlank(queryVO.getInvoiceNo()), ProducePaymentCheckBillOrderDO::getCheckNo, queryVO.getCheckNo())  
290 - .eq(Objects.nonNull(queryVO.getInvoiceStatus()), ProducePaymentCheckBillOrderDO::getStatus, queryVO.getCheckNoStatus())  
291 - .ge(StringUtils.isNotBlank(queryVO.getCheckStartTime()), ProducePaymentCheckBillOrderDO::getCreateTime, queryVO.getCheckStartTime())  
292 - .le(StringUtils.isNotBlank(queryVO.getCheckEndTime()), ProducePaymentCheckBillOrderDO::getCreateTime, queryVO.getCheckEndTime());  
293 - if(CollectionUtils.isNotEmpty(orderBaseInfoDOList)){  
294 - wrapper.in(ProducePaymentCheckBillOrderDO::getOrderId, orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toList()));  
295 - }  
296 - return producePaymentCheckBillOrderService.list(wrapper);  
297 - }  
298 /** 116 /**
299 * @param queryVO 117 * @param queryVO
300 * @return 118 * @return
@@ -504,13 +322,83 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap @@ -504,13 +322,83 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
504 if (CollectionUtils.isEmpty(invoiceBillOrderDOS)) { 322 if (CollectionUtils.isEmpty(invoiceBillOrderDOS)) {
505 return null; 323 return null;
506 } 324 }
507 -// List<InvoiceBillMappingDO> invoiceBillMappingDOS = invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN).in(InvoiceBillMappingDO::getInvoiceBillId, ids));  
508 -// if (CollectionUtils.isEmpty(invoiceBillMappingDOS)) {  
509 -// return null;  
510 -// }  
511 Map<Long, InvoiceBillOrderDO> invoiceBillOrderDOMap = invoiceBillOrderDOS.stream().collect(Collectors.toMap(InvoiceBillOrderDO::getOrderId, Function.identity(), (x, y) -> x)); 325 Map<Long, InvoiceBillOrderDO> invoiceBillOrderDOMap = invoiceBillOrderDOS.stream().collect(Collectors.toMap(InvoiceBillOrderDO::getOrderId, Function.identity(), (x, y) -> x));
512 - //第一版,上面为第二版 Map<Long, InvoiceBillMappingDO> orderBillMap = invoiceBillMappingDOS.stream().collect(Collectors.toMap(InvoiceBillMappingDO::getOrderId, Function.identity(), (x, y) -> x));  
513 List<InvoiceOrderBaseItemVO> itemVOS = getInvoiceOrderBaseItems(invoiceBillOrderDOMap); 326 List<InvoiceOrderBaseItemVO> itemVOS = getInvoiceOrderBaseItems(invoiceBillOrderDOMap);
  327 + /* //得到里面的orderId,这个里面的orderId一定是有对应invocie,不然也不会查出来。然后得到前端传来的orderIds,筛选出没有invoice的orderId。
  328 + List<Long> existOrderIds = invoiceBillOrderDOS.stream().map(InvoiceBillOrderDO::getOrderId).collect(Collectors.toList());
  329 + List<Long> notExistOrderIds = queryVO.getOrderIds().stream().filter(x -> !existOrderIds.contains(x)).collect(Collectors.toList());
  330 + //得到没有invoice的orderIds之后,订单信息,查询利润信息。
  331 + List<OrderProfitAnalysisDO> profitAnalysisDOS = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>()
  332 + .eq(BaseDO::getEnableFlag,Constant.ENABLE_TEN)
  333 + .in(OrderProfitAnalysisDO::getOrderId,notExistOrderIds));
  334 + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(notExistOrderIds);
  335 + //根据客户编码进行分类,计算形同客户编码的利润信息,然后累加。
  336 + Map<String, List<OrderBaseInfoDO>> groupedByCustomerCode = orderBaseInfoDOList.stream()
  337 + .collect(Collectors.groupingBy(OrderBaseInfoDO::getCustomerCode));
  338 + //得到客户编码相同的利润信息。 计算客户编码相同的利润信息的总和。 需要遍历这个map集合,然后把每一次值中的id集合收集起来,每一次遍历代表不同的客户编码。然后得到对应利润信息。
  339 + HashMap<String, BigDecimal> hashMap = new HashMap<>();
  340 + for(Map.Entry<String, List<OrderBaseInfoDO>> entry: groupedByCustomerCode.entrySet()){
  341 + List<OrderBaseInfoDO> entryValue = entry.getValue();
  342 + List<Long> orderids = entryValue.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toList());
  343 + List<OrderProfitAnalysisDO> orderProfitAnalysisDOS = profitAnalysisService.list(new LambdaQueryWrapper<OrderProfitAnalysisDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  344 + .in(OrderProfitAnalysisDO::getOrderId, orderids));
  345 + BigDecimal totalCustomerPrice = orderProfitAnalysisDOS.stream()
  346 + .map(OrderProfitAnalysisDO::getCustomerTotalPrice) // 提取每个元素的 customerTotalPrice(double 类型)
  347 + .filter(Objects::nonNull) // 过滤掉 null 值
  348 + .map(BigDecimal::valueOf) // 转换为 BigDecimal 类型
  349 + .reduce(BigDecimal.ZERO, BigDecimal::add);
  350 + // 累加,其中key为客户编码。
  351 + hashMap.put(entry.getKey(),totalCustomerPrice);
  352 + }*/
  353 +
  354 + List<Long> existOrderIds = invoiceBillOrderDOS.stream()
  355 + .map(InvoiceBillOrderDO::getOrderId)
  356 + .collect(Collectors.toList());
  357 +
  358 + List<Long> notExistOrderIds = queryVO.getOrderId().stream()
  359 + .filter(orderId -> !existOrderIds.contains(orderId))
  360 + .collect(Collectors.toList());
  361 +
  362 +// 查询没有 invoice 的订单信息和利润信息
  363 + /* List<OrderProfitAnalysisDO> profitAnalysisDOS = profitAnalysisService.list(
  364 + new LambdaQueryWrapper<OrderProfitAnalysisDO>()
  365 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  366 + .in(OrderProfitAnalysisDO::getOrderId, notExistOrderIds));*/
  367 + Map<String, BigDecimal> customerProfitMap=null;
  368 + if(CollectionUtils.isNotEmpty(notExistOrderIds)) {
  369 +
  370 + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(notExistOrderIds);
  371 +
  372 +// 根据客户编码进行分类
  373 + Map<String, List<OrderBaseInfoDO>> groupedByCustomerCode = orderBaseInfoDOList.stream()
  374 + .collect(Collectors.groupingBy(OrderBaseInfoDO::getCustomerCode));
  375 +
  376 +// 计算每个客户编码的总利润
  377 + customerProfitMap = groupedByCustomerCode.entrySet().stream()
  378 + .collect(Collectors.toMap(
  379 + Map.Entry::getKey,
  380 + entry -> {
  381 + List<Long> orderIds = entry.getValue().stream()
  382 + .map(OrderBaseInfoDO::getId)
  383 + .collect(Collectors.toList());
  384 +
  385 + List<OrderProfitAnalysisDO> filteredProfitAnalysisDOS = profitAnalysisService.list(
  386 + new LambdaQueryWrapper<OrderProfitAnalysisDO>()
  387 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  388 + .in(OrderProfitAnalysisDO::getOrderId, orderIds));
  389 +
  390 + return filteredProfitAnalysisDOS.stream()
  391 + .map(OrderProfitAnalysisDO::getCustomerTotalPrice)
  392 + .filter(Objects::nonNull)
  393 + .map(BigDecimal::valueOf)
  394 + .reduce(BigDecimal.ZERO, BigDecimal::add);
  395 + }
  396 + ));
  397 +
  398 + }
  399 + // 这样得到了没有invoice的基础信息,利润信息,然后根据客户编码进行分类,然后相同客户编码的就进行累加。下一步,就是去excel表格中找到与自己相同的客户编码,
  400 + // 然后放在下面。
  401 +
514 //第一版,上面为第二版 List<InvoiceOrderBaseItemVO> itemVOS = getInvoiceOrderBaseItems(orderBillMap); 402 //第一版,上面为第二版 List<InvoiceOrderBaseItemVO> itemVOS = getInvoiceOrderBaseItems(orderBillMap);
515 //这里出问题了。 403 //这里出问题了。
516 // Map<String, InvoiceBillOrderDO> invoiceBillMap = invoiceBillOrderDOS.stream().collect(Collectors.toMap(InvoiceBillOrderDO::getInvoiceNo, Function.identity(), (x, y) -> x)); 404 // Map<String, InvoiceBillOrderDO> invoiceBillMap = invoiceBillOrderDOS.stream().collect(Collectors.toMap(InvoiceBillOrderDO::getInvoiceNo, Function.identity(), (x, y) -> x));
@@ -565,7 +453,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap @@ -565,7 +453,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
565 } 453 }
566 )); 454 ));
567 Map<String, List<InvoiceOrderBaseItemVO>> baseItemMap = itemVOS.stream().collect(Collectors.groupingBy(InvoiceOrderBaseItemVO::getInvoiceCode)); 455 Map<String, List<InvoiceOrderBaseItemVO>> baseItemMap = itemVOS.stream().collect(Collectors.groupingBy(InvoiceOrderBaseItemVO::getInvoiceCode));
568 - List<InvoiceBillAnalysisExportVO> exportVOS = wrapperAnalysisExport(invoiceBillMap, baseItemMap); 456 + List<InvoiceBillAnalysisExportVO> exportVOS = wrapperAnalysisExport(invoiceBillMap, baseItemMap,customerProfitMap);
569 return wrapperAnalysisResultVO(exportVOS); 457 return wrapperAnalysisResultVO(exportVOS);
570 } 458 }
571 459
@@ -630,18 +518,37 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap @@ -630,18 +518,37 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
630 * @param baseItemMap 518 * @param baseItemMap
631 * @return 519 * @return
632 */ 520 */
633 - private List<InvoiceBillAnalysisExportVO> wrapperAnalysisExport(Map<String, InvoiceBillOrderDO> invoiceBillOrderDOMap, Map<String, List<InvoiceOrderBaseItemVO>> baseItemMap) { 521 + private List<InvoiceBillAnalysisExportVO> wrapperAnalysisExport(Map<String, InvoiceBillOrderDO> invoiceBillOrderDOMap, Map<String, List<InvoiceOrderBaseItemVO>> baseItemMap,Map<String,BigDecimal> hashMap) {
634 if (CollectionUtils.isEmpty(invoiceBillOrderDOMap)) { 522 if (CollectionUtils.isEmpty(invoiceBillOrderDOMap)) {
635 return Collections.emptyList(); 523 return Collections.emptyList();
636 } 524 }
637 List<InvoiceBillAnalysisExportVO> results = new ArrayList<>(); 525 List<InvoiceBillAnalysisExportVO> results = new ArrayList<>();
638 for (Map.Entry<String, InvoiceBillOrderDO> entry : invoiceBillOrderDOMap.entrySet()) { 526 for (Map.Entry<String, InvoiceBillOrderDO> entry : invoiceBillOrderDOMap.entrySet()) {
639 InvoiceBillOrderDO invoiceBillOrderDO = entry.getValue(); 527 InvoiceBillOrderDO invoiceBillOrderDO = entry.getValue();
  528 + //invoiceBillOrderDOMap就是总的,而baseItemMap。 例如:invoiceBillOrderMap就是多个A01的累加值。而baseItemMap就是相同的invoice中散的A01。
640 List<InvoiceBillAnalysisExportVO> exportVOS = transfer2analysisExportVO(invoiceBillOrderDO, baseItemMap); 529 List<InvoiceBillAnalysisExportVO> exportVOS = transfer2analysisExportVO(invoiceBillOrderDO, baseItemMap);
641 if (CollectionUtils.isNotEmpty(exportVOS)) { 530 if (CollectionUtils.isNotEmpty(exportVOS)) {
642 results.addAll(exportVOS); 531 results.addAll(exportVOS);
643 } 532 }
644 } 533 }
  534 + if(CollectionUtils.isNotEmpty(hashMap)){
  535 + for(Map.Entry<String,BigDecimal> entryk : hashMap.entrySet()){
  536 + //这里注释取消了只有勾选的订单中包含穿了invoice的订单才会在excel中展示,现在是不管这个订单有没有创建invoice的,直接展示。
  537 + /* if(results.stream()
  538 + .map(InvoiceBillAnalysisExportVO::getCustomerCode)
  539 + .anyMatch(customerCode -> customerCode.equals(entryk.getKey()))){*/
  540 + InvoiceBillAnalysisExportVO exportVOy = new InvoiceBillAnalysisExportVO();
  541 + exportVOy.setCustomerCode(entryk.getKey());
  542 + exportVOy.setCustomerTotalPrice(entryk.getValue().setScale(2, BigDecimal.ROUND_HALF_UP));
  543 + exportVOy.setDeductAmount(BigDecimal.ZERO);
  544 + exportVOy.setActualReceivableAmount(entryk.getValue().setScale(2, BigDecimal.ROUND_HALF_UP));
  545 + exportVOy.setActualPayedAmount(BigDecimal.ZERO);
  546 + exportVOy.setOtherAmount(BigDecimal.ZERO);
  547 + exportVOy.setOtherTotalAmount(entryk.getValue().setScale(2, BigDecimal.ROUND_HALF_UP));
  548 + results.add(exportVOy);
  549 + /*}*/
  550 + }
  551 + }
645 return results; 552 return results;
646 } 553 }
647 554
@@ -659,6 +566,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap @@ -659,6 +566,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
659 for (Map.Entry<String, List<InvoiceOrderBaseItemVO>> entry : listMap.entrySet()) { 566 for (Map.Entry<String, List<InvoiceOrderBaseItemVO>> entry : listMap.entrySet()) {
660 String customerCode = entry.getKey(); 567 String customerCode = entry.getKey();
661 List<InvoiceOrderBaseItemVO> itemVOS = entry.getValue(); 568 List<InvoiceOrderBaseItemVO> itemVOS = entry.getValue();
  569 + //invoiceBillOrderDO就是相同客户编码的总的集合。 例如:多个A01相加的值,里面的客户总价等多个A01都是累加的。
662 InvoiceBillAnalysisExportVO exportVO = buildAnalysisExportVO(invoiceBillOrderDO); 570 InvoiceBillAnalysisExportVO exportVO = buildAnalysisExportVO(invoiceBillOrderDO);
663 exportVO.setCustomerCode(customerCode); 571 exportVO.setCustomerCode(customerCode);
664 if (CollectionUtils.isEmpty(itemVOS)) { 572 if (CollectionUtils.isEmpty(itemVOS)) {
@@ -668,11 +576,33 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap @@ -668,11 +576,33 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
668 for (InvoiceOrderBaseItemVO itemVO : itemVOS) { 576 for (InvoiceOrderBaseItemVO itemVO : itemVOS) {
669 customerTotalPrice = customerTotalPrice.add(Objects.nonNull(itemVO.getCustomerTotalPrice()) ? itemVO.getCustomerTotalPrice() : new BigDecimal(Constant.ZERO)); 577 customerTotalPrice = customerTotalPrice.add(Objects.nonNull(itemVO.getCustomerTotalPrice()) ? itemVO.getCustomerTotalPrice() : new BigDecimal(Constant.ZERO));
670 } 578 }
  579 + //这里设置相同客户编码的客户总价总的价钱。
671 exportVO.setCustomerTotalPrice(customerTotalPrice.setScale(2, BigDecimal.ROUND_HALF_UP)); 580 exportVO.setCustomerTotalPrice(customerTotalPrice.setScale(2, BigDecimal.ROUND_HALF_UP));
672 } 581 }
673 results.add(exportVO); 582 results.add(exportVO);
  583 + //感觉在这里加上,如果客户编码一致就加上。
  584 + /* for(Map.Entry<String,BigDecimal> entryk : hashMap.entrySet()){
  585 + if(customerCode.equals(entryk.getKey())){
  586 + InvoiceBillAnalysisExportVO exportVOy = new InvoiceBillAnalysisExportVO();
  587 + exportVOy.setCustomerCode(entryk.getKey());
  588 + exportVOy.setCustomerTotalPrice(entryk.getValue());
  589 + results.add(exportVOy);
  590 + }
  591 + }*/
674 } 592 }
  593 + /*for(Map.Entry<String,BigDecimal> entryk : hashMap.entrySet()){
  594 + if(results.stream()
  595 + .map(InvoiceBillAnalysisExportVO::getCustomerCode)
  596 + .anyMatch(customerCode -> customerCode.equals(entryk.getKey()))){
  597 + InvoiceBillAnalysisExportVO exportVOy = new InvoiceBillAnalysisExportVO();
  598 + exportVOy.setCustomerCode(entryk.getKey());
  599 + exportVOy.setCustomerTotalPrice(entryk.getValue());
  600 + results.add(exportVOy);
  601 + }
  602 + }*/
  603 + //如果没有对的上的客户编码,就在这里加上。
675 } 604 }
  605 + //这个results集合里面存储的就是不同客户编码的累加值。 667-7878
676 return results; 606 return results;
677 } 607 }
678 608
@@ -780,19 +710,19 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap @@ -780,19 +710,19 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
780 */ 710 */
781 private List<Long> filterOrderIdsBy(InvoiceBillOrderQueryVO queryVO) { 711 private List<Long> filterOrderIdsBy(InvoiceBillOrderQueryVO queryVO) {
782 Boolean flag = false; 712 Boolean flag = false;
783 - if (StringUtils.isNotBlank(queryVO.getCustomerCode())) { 713 + if (CollectionUtils.isNotEmpty(queryVO.getCustomerCode())) {
784 flag = flag | true; 714 flag = flag | true;
785 } 715 }
786 - if (StringUtils.isNotBlank(queryVO.getProductionDepartment())) { 716 + if (CollectionUtils.isNotEmpty(queryVO.getProductionDepartment())) {
787 flag = flag | true; 717 flag = flag | true;
788 } 718 }
789 if (StringUtils.isNotBlank(queryVO.getCustomerPo())) { 719 if (StringUtils.isNotBlank(queryVO.getCustomerPo())) {
790 flag = flag | true; 720 flag = flag | true;
791 } 721 }
792 - if (StringUtils.isNotBlank(queryVO.getInnerNo())) { 722 + if (CollectionUtils.isNotEmpty(queryVO.getInnerNo())) {
793 flag = flag | true; 723 flag = flag | true;
794 } 724 }
795 - if (StringUtils.isNotBlank(queryVO.getProjectNo())) { 725 + if (CollectionUtils.isNotEmpty(queryVO.getProjectNo())) {
796 flag = flag | true; 726 flag = flag | true;
797 } 727 }
798 if(StringUtils.isNotBlank(queryVO.getCreateStartTime())){ 728 if(StringUtils.isNotBlank(queryVO.getCreateStartTime())){
@@ -818,11 +748,11 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap @@ -818,11 +748,11 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl&lt;InvoiceBillOrderMap
818 } 748 }
819 LambdaQueryWrapper<OrderBaseInfoDO> queryWrapper = new LambdaQueryWrapper<OrderBaseInfoDO>() 749 LambdaQueryWrapper<OrderBaseInfoDO> queryWrapper = new LambdaQueryWrapper<OrderBaseInfoDO>()
820 .eq(OrderBaseInfoDO::getEnableFlag, Constant.ENABLE_TEN) 750 .eq(OrderBaseInfoDO::getEnableFlag, Constant.ENABLE_TEN)
821 - .eq(StringUtils.isNotBlank(queryVO.getCustomerCode()), OrderBaseInfoDO::getCustomerCode, queryVO.getCustomerCode())  
822 - .eq(StringUtils.isNotBlank(queryVO.getProductionDepartment()), OrderBaseInfoDO::getProductionDepartment, queryVO.getProductionDepartment()) 751 + .in(CollectionUtils.isNotEmpty(queryVO.getCustomerCode()), OrderBaseInfoDO::getCustomerCode, queryVO.getCustomerCode())
  752 + .in(CollectionUtils.isNotEmpty(queryVO.getProductionDepartment()), OrderBaseInfoDO::getProductionDepartment, queryVO.getProductionDepartment())
823 .eq(StringUtils.isNotBlank(queryVO.getCustomerPo()), OrderBaseInfoDO::getCustomerPo, queryVO.getCustomerPo()) 753 .eq(StringUtils.isNotBlank(queryVO.getCustomerPo()), OrderBaseInfoDO::getCustomerPo, queryVO.getCustomerPo())
824 - .eq(StringUtils.isNotBlank(queryVO.getInnerNo()), OrderBaseInfoDO::getInnerNo, queryVO.getInnerNo())  
825 - .eq(StringUtils.isNotBlank(queryVO.getProjectNo()), OrderBaseInfoDO::getProjectNo, queryVO.getProjectNo()) 754 + .in(CollectionUtils.isNotEmpty(queryVO.getInnerNo()), OrderBaseInfoDO::getInnerNo, queryVO.getInnerNo())
  755 + .in(CollectionUtils.isNotEmpty(queryVO.getProjectNo()), OrderBaseInfoDO::getProjectNo, queryVO.getProjectNo())
826 .ge(StringUtils.isNotBlank(queryVO.getCreateStartTime()), OrderBaseInfoDO::getCreateTime, queryVO.getCreateStartTime()) 756 .ge(StringUtils.isNotBlank(queryVO.getCreateStartTime()), OrderBaseInfoDO::getCreateTime, queryVO.getCreateStartTime())
827 .le(StringUtils.isNotBlank(queryVO.getCreateEndTime()), OrderBaseInfoDO::getCreateTime, queryVO.getCreateEndTime()) 757 .le(StringUtils.isNotBlank(queryVO.getCreateEndTime()), OrderBaseInfoDO::getCreateTime, queryVO.getCreateEndTime())
828 .ge(StringUtils.isNotBlank(queryVO.getProductionDepartmentConsignStartTime()), OrderBaseInfoDO::getProductionDepartmentConsignTime, queryVO.getProductionDepartmentConsignStartTime()) 758 .ge(StringUtils.isNotBlank(queryVO.getProductionDepartmentConsignStartTime()), OrderBaseInfoDO::getProductionDepartmentConsignTime, queryVO.getProductionDepartmentConsignStartTime())
src/main/java/com/order/erp/service/order/impl/OrderFieldLockApplyServiceImpl.java
@@ -137,30 +137,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp @@ -137,30 +137,7 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
137 resultVO.setFieldInfos(fieldVO); 137 resultVO.setFieldInfos(fieldVO);
138 } 138 }
139 if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(x.getType())) { 139 if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(x.getType())) {
140 - // 解决待审批列表中的应收款要显示内部编码。 这里开始  
141 OrderLockFieldVO orderLockFieldVO = JSONObject.parseObject(fields, OrderLockFieldVO.class); 140 OrderLockFieldVO orderLockFieldVO = JSONObject.parseObject(fields, OrderLockFieldVO.class);
142 - /* if(Objects.nonNull(orderLockFieldVO.getInvoiceFieldVO()) && StringUtils.isNotBlank(orderLockFieldVO.getInvoiceFieldVO().getInvoiceNo())){  
143 - *//* List<InvoiceBillMappingDO> invoiceBillMappingDOList= invoiceBillMappingService.list(new LambdaQueryWrapper<InvoiceBillMappingDO>()  
144 - .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)  
145 - .eq(InvoiceBillMappingDO::getInvoiceNo, orderLockFieldVO.getInvoiceBillOrderDO().getInvoiceNo()));*//*  
146 - List<InvoiceBillOrderDO> invoiceBillMappingDOList = invoiceBillOrderService.list(new LambdaQueryWrapper<InvoiceBillOrderDO>().eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)  
147 - .eq(InvoiceBillOrderDO::getInvoiceNo, orderLockFieldVO.getInvoiceFieldVO().getInvoiceNo()));  
148 - if(CollectionUtils.isNotEmpty(invoiceBillMappingDOList)){  
149 - Set<Long> orderIds = invoiceBillMappingDOList.stream().map(InvoiceBillOrderDO::getOrderId).filter(Objects::nonNull).collect(Collectors.toSet());  
150 - if(CollectionUtils.isNotEmpty(orderIds)){  
151 - List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(orderIds);  
152 - if(CollectionUtils.isNotEmpty(orderBaseInfoDOList)){  
153 - Set<String> innerNoList = orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getInnerNo).filter(Objects::nonNull).collect(Collectors.toSet());  
154 - if(CollectionUtils.isNotEmpty(innerNoList)){  
155 - OrderBaseInfoVO orderBaseInfoVO = new OrderBaseInfoVO();  
156 - resultVO.setOrderBaseInfo(orderBaseInfoVO);  
157 - orderBaseInfoVO.setInnerNo(resultVO.getOrderBaseInfo().getInnerNo().join(",", innerNoList));  
158 - }  
159 - }  
160 - }  
161 - }  
162 - }*/ //这里结束 上述为待审核列表中应收款要显示内部编码。 这部分不需要了,内部编码放在里面了。  
163 - //这部分的目的是,对于跟单员和业务员他们也能查看到应收款和应付款中各自负责订单的审核情况。 而财务和admin则会执行else{},会看到所有的审核订单信息。  
164 if(RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode())){ 141 if(RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode())){
165 if(Objects.nonNull(orderLockFieldVO.getInvoiceFieldVO()) && orderLockFieldVO.getInvoiceFieldVO().getBusinesPerson().equals(loginUserName)){ 142 if(Objects.nonNull(orderLockFieldVO.getInvoiceFieldVO()) && orderLockFieldVO.getInvoiceFieldVO().getBusinesPerson().equals(loginUserName)){
166 resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class)); 143 resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class));
@@ -426,33 +403,35 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp @@ -426,33 +403,35 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl&lt;OrderFieldLockAp
426 .eq(Objects.nonNull(queryVO.getStatus()), OrderFieldLockApplyDO::getStatus, queryVO.getStatus()) 403 .eq(Objects.nonNull(queryVO.getStatus()), OrderFieldLockApplyDO::getStatus, queryVO.getStatus())
427 .in(CollectionUtils.isNotEmpty(queryVO.getStatusList()), OrderFieldLockApplyDO::getStatus, queryVO.getStatusList()) 404 .in(CollectionUtils.isNotEmpty(queryVO.getStatusList()), OrderFieldLockApplyDO::getStatus, queryVO.getStatusList())
428 .in(CollectionUtils.isNotEmpty(orderIds), OrderFieldLockApplyDO::getOrderId, orderIds); 405 .in(CollectionUtils.isNotEmpty(orderIds), OrderFieldLockApplyDO::getOrderId, orderIds);
429 - //这里应该加上应收款待审核,应付款待审核,应付款已审核,应收款已审核已审核的一个条件。 406 + //这里应该加上应收款待审核,应付款待审核,应付款已审核,应收款已审核已审核的一个条件。 目前只支持单个字符串搜索,不支持多个。
430 if(Objects.nonNull(queryVO.getType())){ 407 if(Objects.nonNull(queryVO.getType())){
  408 + //发票,应付款审核。
431 if(Constant.FOUR == String.valueOf(queryVO.getType()).length()){ 409 if(Constant.FOUR == String.valueOf(queryVO.getType()).length()){
432 int firstTwoDigits = queryVO.getType() / 100; 410 int firstTwoDigits = queryVO.getType() / 100;
433 int lastTwoDigits = queryVO.getType() % 100; 411 int lastTwoDigits = queryVO.getType() % 100;
434 queryWrapper.in(OrderFieldLockApplyDO::getType,firstTwoDigits,lastTwoDigits); 412 queryWrapper.in(OrderFieldLockApplyDO::getType,firstTwoDigits,lastTwoDigits);
  413 + //目前是只能通过内部编号查询出应付款审核,无法查询出发票信息。
435 if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){ 414 if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){
436 - String innerNoList = queryVO.getInnerNo().stream()  
437 - .map(innerNo -> "'" + innerNo + "'") // 包装为单引号  
438 - .collect(Collectors.joining(",")); 415 + String queryInnerNo = queryVO.getInnerNo().get(0).trim();
439 queryWrapper.apply( 416 queryWrapper.apply(
440 - "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.invoiceFieldVO.innerNo')) in (" + innerNoList + ")" 417 + "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.producePaymentCheckBillFieldVO.innerNo')) = {0}",
  418 + queryInnerNo
441 ); 419 );
442 } 420 }
443 }else{ 421 }else{
  422 + //应收款审核。
444 if(Objects.nonNull(queryVO.getType()) && queryVO.getType().equals(ApplyTypeEnum.INVOICE_BILL_APPLY.getType())){ 423 if(Objects.nonNull(queryVO.getType()) && queryVO.getType().equals(ApplyTypeEnum.INVOICE_BILL_APPLY.getType())){
445 queryWrapper.eq(Objects.nonNull(queryVO.getType()), OrderFieldLockApplyDO::getType, queryVO.getType()); 424 queryWrapper.eq(Objects.nonNull(queryVO.getType()), OrderFieldLockApplyDO::getType, queryVO.getType());
446 //这个内部编号单独针对于应付款申请设置的。 425 //这个内部编号单独针对于应付款申请设置的。
447 if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){ 426 if(CollectionUtils.isNotEmpty(queryVO.getInnerNo())){
448 - String innerNoList = queryVO.getInnerNo().stream()  
449 - .map(innerNo -> "'" + innerNo + "'") // 包装为单引号  
450 - .collect(Collectors.joining(",")); 427 + String queryInnerNo = queryVO.getInnerNo().get(0).trim();
451 queryWrapper.apply( 428 queryWrapper.apply(
452 - "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.producePaymentCheckBillFieldVO.innerNo')) in (" + innerNoList + ")" 429 + "JSON_UNQUOTE(JSON_EXTRACT(fields, '$.invoiceFieldVO.innerNo')) = {0}",
  430 + queryInnerNo
453 ); 431 );
454 } 432 }
455 } 433 }
  434 + //其他审核类型。
456 queryWrapper.eq(Objects.nonNull(queryVO.getType()), OrderFieldLockApplyDO::getType, queryVO.getType()); 435 queryWrapper.eq(Objects.nonNull(queryVO.getType()), OrderFieldLockApplyDO::getType, queryVO.getType());
457 } 436 }
458 } 437 }
src/main/java/com/order/erp/service/order/impl/ProducePaymentCheckBillOrderServiceImpl.java
@@ -173,6 +173,32 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce @@ -173,6 +173,32 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
173 // Map<Long, CheckBillMappingDO> orderBillMap = checkBillMappingDOS.stream().collect(Collectors.toMap(CheckBillMappingDO::getOrderId, Function.identity(), (x, y) -> x)); 173 // Map<Long, CheckBillMappingDO> orderBillMap = checkBillMappingDOS.stream().collect(Collectors.toMap(CheckBillMappingDO::getOrderId, Function.identity(), (x, y) -> x));
174 174
175 List<CheckOrderBaseItemVO> itemVOS = getCheckOrderBaseItems(orderBillMap); 175 List<CheckOrderBaseItemVO> itemVOS = getCheckOrderBaseItems(orderBillMap);
  176 + List<Long> existOrderIds = checkBillOrderDOS.stream().map(ProducePaymentCheckBillOrderDO::getOrderId).collect(Collectors.toList());
  177 + List<Long> notExistOrderIds = queryVO.getOrderIds().stream().filter(orderId -> !existOrderIds.contains(orderId))
  178 + .collect(Collectors.toList());
  179 + Map<String, BigDecimal> productionDepartmentProfitMap=null;
  180 + if(CollectionUtils.isNotEmpty(notExistOrderIds)){
  181 + List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.listByIds(notExistOrderIds);
  182 + Map<String, List<OrderBaseInfoDO>> groupedByProductionDepartMent = orderBaseInfoDOList.stream().collect(Collectors.groupingBy(OrderBaseInfoDO::getProductionDepartment));
  183 + productionDepartmentProfitMap = groupedByProductionDepartMent.entrySet().stream()
  184 + .collect(Collectors.toMap(
  185 + Map.Entry::getKey,
  186 + entry -> {
  187 + List<Long> orderIds = entry.getValue().stream()
  188 + .map(OrderBaseInfoDO::getId)
  189 + .collect(Collectors.toList());
  190 + List<OrderProfitAnalysisDO> filteredProfitAnalysisDOS = profitAnalysisService.list(
  191 + new LambdaQueryWrapper<OrderProfitAnalysisDO>()
  192 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  193 + .in(OrderProfitAnalysisDO::getOrderId, orderIds));
  194 + return filteredProfitAnalysisDOS.stream()
  195 + .map(OrderProfitAnalysisDO::getProductionDepartmentTotalPrice)
  196 + .filter(Objects::nonNull)
  197 + .map(BigDecimal::valueOf)
  198 + .reduce(BigDecimal.ZERO, BigDecimal::add);
  199 + }
  200 + ));
  201 + }
176 // Map<String, ProducePaymentCheckBillOrderDO> checkBillOrderDOMap = checkBillOrderDOS.stream().collect(Collectors.toMap(ProducePaymentCheckBillOrderDO::getCheckNo, Function.identity(), (x, y) -> x)); 202 // Map<String, ProducePaymentCheckBillOrderDO> checkBillOrderDOMap = checkBillOrderDOS.stream().collect(Collectors.toMap(ProducePaymentCheckBillOrderDO::getCheckNo, Function.identity(), (x, y) -> x));
177 Map<String, ProducePaymentCheckBillOrderDO> checkBillOrderDOMap = checkBillOrderDOS.stream() 203 Map<String, ProducePaymentCheckBillOrderDO> checkBillOrderDOMap = checkBillOrderDOS.stream()
178 .collect(Collectors.toMap( 204 .collect(Collectors.toMap(
@@ -209,7 +235,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce @@ -209,7 +235,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
209 } 235 }
210 )); 236 ));
211 Map<String, List<CheckOrderBaseItemVO>> baseItemMap = itemVOS.stream().collect(Collectors.groupingBy(CheckOrderBaseItemVO::getCheckNo)); 237 Map<String, List<CheckOrderBaseItemVO>> baseItemMap = itemVOS.stream().collect(Collectors.groupingBy(CheckOrderBaseItemVO::getCheckNo));
212 - List<CheckBillAnalysisExportVO> exportVOS = wrapperAnalysisExport(checkBillOrderDOMap, baseItemMap); 238 + List<CheckBillAnalysisExportVO> exportVOS = wrapperAnalysisExport(checkBillOrderDOMap, baseItemMap,productionDepartmentProfitMap);
213 return wrapperAnalysisResultVO(exportVOS); 239 return wrapperAnalysisResultVO(exportVOS);
214 } 240 }
215 241
@@ -261,7 +287,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce @@ -261,7 +287,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
261 * @param baseItemMap 287 * @param baseItemMap
262 * @return 288 * @return
263 */ 289 */
264 - private List<CheckBillAnalysisExportVO> wrapperAnalysisExport(Map<String, ProducePaymentCheckBillOrderDO> checkBillOrderDOMap, Map<String, List<CheckOrderBaseItemVO>> baseItemMap) { 290 + private List<CheckBillAnalysisExportVO> wrapperAnalysisExport(Map<String, ProducePaymentCheckBillOrderDO> checkBillOrderDOMap, Map<String, List<CheckOrderBaseItemVO>> baseItemMap,Map<String,BigDecimal> productionDepartmentProfitMap) {
265 if (CollectionUtils.isEmpty(checkBillOrderDOMap)) { 291 if (CollectionUtils.isEmpty(checkBillOrderDOMap)) {
266 return Collections.emptyList(); 292 return Collections.emptyList();
267 } 293 }
@@ -273,6 +299,18 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce @@ -273,6 +299,18 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl&lt;Produce
273 results.addAll(exportVOS); 299 results.addAll(exportVOS);
274 } 300 }
275 } 301 }
  302 + if(CollectionUtils.isNotEmpty(productionDepartmentProfitMap)){
  303 + for(Map.Entry<String,BigDecimal> entry : productionDepartmentProfitMap.entrySet()){
  304 + CheckBillAnalysisExportVO exportVO = new CheckBillAnalysisExportVO();
  305 + exportVO.setProductionDepartment(entry.getKey());
  306 + exportVO.setProductionDepartmentTotalPrice(entry.getValue().setScale(2, RoundingMode.HALF_UP));
  307 + exportVO.setDeductAmount(BigDecimal.ZERO);
  308 + exportVO.setActualPayedAmount(BigDecimal.ZERO);
  309 + exportVO.setUnPayedAmount(entry.getValue().setScale(2, RoundingMode.HALF_UP));
  310 + exportVO.setCalculateActualPayedAmount(entry.getValue().setScale(2, RoundingMode.HALF_UP));
  311 + results.add(exportVO);
  312 + }
  313 + }
276 return results; 314 return results;
277 } 315 }
278 316
src/main/resources/application-test.yml
@@ -57,7 +57,7 @@ spring: @@ -57,7 +57,7 @@ spring:
57 testWhileIdle: true 57 testWhileIdle: true
58 testOnBorrow: true 58 testOnBorrow: true
59 testOnReturn: true 59 testOnReturn: true
60 - password: Erp@test123456 60 + password: eJ8(bD6]wN6=gI5=
61 time-between-eviction-runs-millis: 1000 61 time-between-eviction-runs-millis: 1000
62 url: jdbc:mysql://47.104.8.35:3307/order-erp?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&allowMultiQueries=true&useAffectedRows=true&autoReconnectForPools=true 62 url: jdbc:mysql://47.104.8.35:3307/order-erp?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&allowMultiQueries=true&useAffectedRows=true&autoReconnectForPools=true
63 username: root 63 username: root
src/main/resources/application.yml
1 server: 1 server:
2 - port: 8000 2 + port: 18000
3 3
4 spring: 4 spring:
5 profiles: 5 profiles:
6 - active: prod  
7 \ No newline at end of file 6 \ No newline at end of file
  7 + active: test
8 \ No newline at end of file 8 \ No newline at end of file
src/main/resources/mapper/InvoiceBillOrderMapper.xml
@@ -133,17 +133,29 @@ @@ -133,17 +133,29 @@
133 <if test="queryVO.checkNoStatus != null"> 133 <if test="queryVO.checkNoStatus != null">
134 AND o.check_status = #{queryVO.checkNoStatus} 134 AND o.check_status = #{queryVO.checkNoStatus}
135 </if> 135 </if>
136 - <if test="queryVO.customerCode != null and queryVO.customerCode != ''">  
137 - AND o.customer_code = #{queryVO.customerCode}  
138 - </if>  
139 - <if test="queryVO.projectNo != null and queryVO.projectNo != ''">  
140 - AND o.project_no = #{queryVO.projectNo}  
141 - </if>  
142 - <if test="queryVO.productionDepartment != null and queryVO.productionDepartment != ''">  
143 - AND o.production_department = #{queryVO.productionDepartment}  
144 - </if>  
145 - <if test="queryVO.innerNo != null and queryVO.innerNo != ''">  
146 - AND o.inner_no = #{queryVO.innerNo} 136 + <if test="queryVO.customerCode != null and queryVO.customerCode.size > 0 ">
  137 + AND o.customer_code IN
  138 + <foreach collection="queryVO.customerCode" item="customerCode" open="(" separator="," close=")">
  139 + #{customerCode}
  140 + </foreach>
  141 + </if>
  142 + <if test="queryVO.projectNo != null and queryVO.projectNo.size > 0 ">
  143 + AND o.project_no IN
  144 + <foreach collection="queryVO.projectNo" item="projectNo" open="(" separator="," close=")">
  145 + #{projectNo}
  146 + </foreach>
  147 + </if>
  148 + <if test="queryVO.productionDepartment != null and queryVO.productionDepartment.size > 0 ">
  149 + AND o.production_department IN
  150 + <foreach collection="queryVO.productionDepartment" item="productionDepartment" open="(" separator="," close=")">
  151 + #{productionDepartment}
  152 + </foreach>
  153 + </if>
  154 + <if test="queryVO.innerNo != null and queryVO.innerNo.size > 0 ">
  155 + AND o.inner_no IN
  156 + <foreach collection="queryVO.innerNo" item="innerNo" open="(" separator="," close=")">
  157 + #{innerNo}
  158 + </foreach>
147 </if> 159 </if>
148 <if test="queryVO.customerPo != null and queryVO.customerPo != ''"> 160 <if test="queryVO.customerPo != null and queryVO.customerPo != ''">
149 AND o.customer_po = #{queryVO.customerPo} 161 AND o.customer_po = #{queryVO.customerPo}