Commit 8991885d45116f78ffc9a64a67d0ea2966c2e572
1 parent
334d3881
fix:第二版财务,应收款,应付款审核界面的内部编号筛选
Showing
8 changed files
with
210 additions
and
250 deletions
src/main/java/com/order/erp/domain/vo/order/InvoiceBillOrderQueryVO.java
... | ... | @@ -23,6 +23,7 @@ public class InvoiceBillOrderQueryVO extends BasePageVO implements Serializable |
23 | 23 | |
24 | 24 | private List<Long> ids; |
25 | 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 | 48 | /** |
48 | 49 | * order订单的客户编码 |
49 | 50 | */ |
50 | - private String customerCode; | |
51 | + private List<String> customerCode; | |
51 | 52 | |
52 | 53 | /** |
53 | 54 | * order订单的项目号 |
54 | 55 | */ |
55 | - private String projectNo; | |
56 | + private List<String> projectNo; | |
56 | 57 | |
57 | 58 | /** |
58 | 59 | * order订单的生产科 |
59 | 60 | */ |
60 | - private String productionDepartment; | |
61 | + private List<String> productionDepartment; | |
61 | 62 | |
62 | 63 | /** |
63 | 64 | * order订单的内部编号 |
64 | 65 | */ |
65 | - private String innerNo; | |
66 | + private List<String> innerNo; | |
66 | 67 | |
67 | 68 | /** |
68 | 69 | * order订单的客户po号 | ... | ... |
src/main/java/com/order/erp/domain/vo/order/ProducePaymentCheckBillOrderQueryVO.java
src/main/java/com/order/erp/service/order/impl/InvoiceBillOrderServiceImpl.java
... | ... | @@ -97,140 +97,6 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap |
97 | 97 | //例如:查询基本信息中项目号为A01-C2409,并且invoice状态为已通过,那么就先去基本信息中查找A01-C2409,然后找到对应的invoice,判断A01-C2409对应的订单集合是否有invoice,有的话,就查找已通过的invocie。 |
98 | 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 | 100 | RoleEnum role = dataScope.getRole(); |
235 | 101 | Page<FinanceOrderResultVO> page = new Page<>(queryVO.getPage(), queryVO.getPageSize()); |
236 | 102 | if(Objects.nonNull(role) && role.getId().equals(RoleEnum.TRACKER_USER.getId())) { |
... | ... | @@ -247,54 +113,6 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap |
247 | 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 | 117 | * @param queryVO |
300 | 118 | * @return |
... | ... | @@ -504,13 +322,83 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap |
504 | 322 | if (CollectionUtils.isEmpty(invoiceBillOrderDOS)) { |
505 | 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 | 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 | 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 | 402 | //第一版,上面为第二版 List<InvoiceOrderBaseItemVO> itemVOS = getInvoiceOrderBaseItems(orderBillMap); |
515 | 403 | //这里出问题了。 |
516 | 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<InvoiceBillOrderMap |
565 | 453 | } |
566 | 454 | )); |
567 | 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 | 457 | return wrapperAnalysisResultVO(exportVOS); |
570 | 458 | } |
571 | 459 | |
... | ... | @@ -630,18 +518,37 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap |
630 | 518 | * @param baseItemMap |
631 | 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 | 522 | if (CollectionUtils.isEmpty(invoiceBillOrderDOMap)) { |
635 | 523 | return Collections.emptyList(); |
636 | 524 | } |
637 | 525 | List<InvoiceBillAnalysisExportVO> results = new ArrayList<>(); |
638 | 526 | for (Map.Entry<String, InvoiceBillOrderDO> entry : invoiceBillOrderDOMap.entrySet()) { |
639 | 527 | InvoiceBillOrderDO invoiceBillOrderDO = entry.getValue(); |
528 | + //invoiceBillOrderDOMap就是总的,而baseItemMap。 例如:invoiceBillOrderMap就是多个A01的累加值。而baseItemMap就是相同的invoice中散的A01。 | |
640 | 529 | List<InvoiceBillAnalysisExportVO> exportVOS = transfer2analysisExportVO(invoiceBillOrderDO, baseItemMap); |
641 | 530 | if (CollectionUtils.isNotEmpty(exportVOS)) { |
642 | 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 | 552 | return results; |
646 | 553 | } |
647 | 554 | |
... | ... | @@ -659,6 +566,7 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap |
659 | 566 | for (Map.Entry<String, List<InvoiceOrderBaseItemVO>> entry : listMap.entrySet()) { |
660 | 567 | String customerCode = entry.getKey(); |
661 | 568 | List<InvoiceOrderBaseItemVO> itemVOS = entry.getValue(); |
569 | + //invoiceBillOrderDO就是相同客户编码的总的集合。 例如:多个A01相加的值,里面的客户总价等多个A01都是累加的。 | |
662 | 570 | InvoiceBillAnalysisExportVO exportVO = buildAnalysisExportVO(invoiceBillOrderDO); |
663 | 571 | exportVO.setCustomerCode(customerCode); |
664 | 572 | if (CollectionUtils.isEmpty(itemVOS)) { |
... | ... | @@ -668,11 +576,33 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap |
668 | 576 | for (InvoiceOrderBaseItemVO itemVO : itemVOS) { |
669 | 577 | customerTotalPrice = customerTotalPrice.add(Objects.nonNull(itemVO.getCustomerTotalPrice()) ? itemVO.getCustomerTotalPrice() : new BigDecimal(Constant.ZERO)); |
670 | 578 | } |
579 | + //这里设置相同客户编码的客户总价总的价钱。 | |
671 | 580 | exportVO.setCustomerTotalPrice(customerTotalPrice.setScale(2, BigDecimal.ROUND_HALF_UP)); |
672 | 581 | } |
673 | 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 | 606 | return results; |
677 | 607 | } |
678 | 608 | |
... | ... | @@ -780,19 +710,19 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap |
780 | 710 | */ |
781 | 711 | private List<Long> filterOrderIdsBy(InvoiceBillOrderQueryVO queryVO) { |
782 | 712 | Boolean flag = false; |
783 | - if (StringUtils.isNotBlank(queryVO.getCustomerCode())) { | |
713 | + if (CollectionUtils.isNotEmpty(queryVO.getCustomerCode())) { | |
784 | 714 | flag = flag | true; |
785 | 715 | } |
786 | - if (StringUtils.isNotBlank(queryVO.getProductionDepartment())) { | |
716 | + if (CollectionUtils.isNotEmpty(queryVO.getProductionDepartment())) { | |
787 | 717 | flag = flag | true; |
788 | 718 | } |
789 | 719 | if (StringUtils.isNotBlank(queryVO.getCustomerPo())) { |
790 | 720 | flag = flag | true; |
791 | 721 | } |
792 | - if (StringUtils.isNotBlank(queryVO.getInnerNo())) { | |
722 | + if (CollectionUtils.isNotEmpty(queryVO.getInnerNo())) { | |
793 | 723 | flag = flag | true; |
794 | 724 | } |
795 | - if (StringUtils.isNotBlank(queryVO.getProjectNo())) { | |
725 | + if (CollectionUtils.isNotEmpty(queryVO.getProjectNo())) { | |
796 | 726 | flag = flag | true; |
797 | 727 | } |
798 | 728 | if(StringUtils.isNotBlank(queryVO.getCreateStartTime())){ |
... | ... | @@ -818,11 +748,11 @@ public class InvoiceBillOrderServiceImpl extends ServiceImpl<InvoiceBillOrderMap |
818 | 748 | } |
819 | 749 | LambdaQueryWrapper<OrderBaseInfoDO> queryWrapper = new LambdaQueryWrapper<OrderBaseInfoDO>() |
820 | 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 | 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 | 756 | .ge(StringUtils.isNotBlank(queryVO.getCreateStartTime()), OrderBaseInfoDO::getCreateTime, queryVO.getCreateStartTime()) |
827 | 757 | .le(StringUtils.isNotBlank(queryVO.getCreateEndTime()), OrderBaseInfoDO::getCreateTime, queryVO.getCreateEndTime()) |
828 | 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<OrderFieldLockAp |
137 | 137 | resultVO.setFieldInfos(fieldVO); |
138 | 138 | } |
139 | 139 | if (ApplyTypeEnum.INVOICE_BILL_APPLY.getType().equals(x.getType())) { |
140 | - // 解决待审批列表中的应收款要显示内部编码。 这里开始 | |
141 | 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 | 141 | if(RoleEnum.BUSINESS_USER.getCode().equals(roleEnum.getCode())){ |
165 | 142 | if(Objects.nonNull(orderLockFieldVO.getInvoiceFieldVO()) && orderLockFieldVO.getInvoiceFieldVO().getBusinesPerson().equals(loginUserName)){ |
166 | 143 | resultVO.setFieldInfos(JSONObject.parseObject(fields, OrderLockFieldVO.class)); |
... | ... | @@ -426,33 +403,35 @@ public class OrderFieldLockApplyServiceImpl extends ServiceImpl<OrderFieldLockAp |
426 | 403 | .eq(Objects.nonNull(queryVO.getStatus()), OrderFieldLockApplyDO::getStatus, queryVO.getStatus()) |
427 | 404 | .in(CollectionUtils.isNotEmpty(queryVO.getStatusList()), OrderFieldLockApplyDO::getStatus, queryVO.getStatusList()) |
428 | 405 | .in(CollectionUtils.isNotEmpty(orderIds), OrderFieldLockApplyDO::getOrderId, orderIds); |
429 | - //这里应该加上应收款待审核,应付款待审核,应付款已审核,应收款已审核已审核的一个条件。 | |
406 | + //这里应该加上应收款待审核,应付款待审核,应付款已审核,应收款已审核已审核的一个条件。 目前只支持单个字符串搜索,不支持多个。 | |
430 | 407 | if(Objects.nonNull(queryVO.getType())){ |
408 | + //发票,应付款审核。 | |
431 | 409 | if(Constant.FOUR == String.valueOf(queryVO.getType()).length()){ |
432 | 410 | int firstTwoDigits = queryVO.getType() / 100; |
433 | 411 | int lastTwoDigits = queryVO.getType() % 100; |
434 | 412 | queryWrapper.in(OrderFieldLockApplyDO::getType,firstTwoDigits,lastTwoDigits); |
413 | + //目前是只能通过内部编号查询出应付款审核,无法查询出发票信息。 | |
435 | 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 | 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 | 421 | }else{ |
422 | + //应收款审核。 | |
444 | 423 | if(Objects.nonNull(queryVO.getType()) && queryVO.getType().equals(ApplyTypeEnum.INVOICE_BILL_APPLY.getType())){ |
445 | 424 | queryWrapper.eq(Objects.nonNull(queryVO.getType()), OrderFieldLockApplyDO::getType, queryVO.getType()); |
446 | 425 | //这个内部编号单独针对于应付款申请设置的。 |
447 | 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 | 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 | 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<Produce |
173 | 173 | // Map<Long, CheckBillMappingDO> orderBillMap = checkBillMappingDOS.stream().collect(Collectors.toMap(CheckBillMappingDO::getOrderId, Function.identity(), (x, y) -> x)); |
174 | 174 | |
175 | 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 | 202 | // Map<String, ProducePaymentCheckBillOrderDO> checkBillOrderDOMap = checkBillOrderDOS.stream().collect(Collectors.toMap(ProducePaymentCheckBillOrderDO::getCheckNo, Function.identity(), (x, y) -> x)); |
177 | 203 | Map<String, ProducePaymentCheckBillOrderDO> checkBillOrderDOMap = checkBillOrderDOS.stream() |
178 | 204 | .collect(Collectors.toMap( |
... | ... | @@ -209,7 +235,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce |
209 | 235 | } |
210 | 236 | )); |
211 | 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 | 239 | return wrapperAnalysisResultVO(exportVOS); |
214 | 240 | } |
215 | 241 | |
... | ... | @@ -261,7 +287,7 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce |
261 | 287 | * @param baseItemMap |
262 | 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 | 291 | if (CollectionUtils.isEmpty(checkBillOrderDOMap)) { |
266 | 292 | return Collections.emptyList(); |
267 | 293 | } |
... | ... | @@ -273,6 +299,18 @@ public class ProducePaymentCheckBillOrderServiceImpl extends ServiceImpl<Produce |
273 | 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 | 314 | return results; |
277 | 315 | } |
278 | 316 | ... | ... |
src/main/resources/application-test.yml
... | ... | @@ -57,7 +57,7 @@ spring: |
57 | 57 | testWhileIdle: true |
58 | 58 | testOnBorrow: true |
59 | 59 | testOnReturn: true |
60 | - password: Erp@test123456 | |
60 | + password: eJ8(bD6]wN6=gI5= | |
61 | 61 | time-between-eviction-runs-millis: 1000 |
62 | 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 | 63 | username: root | ... | ... |
src/main/resources/application.yml
src/main/resources/mapper/InvoiceBillOrderMapper.xml
... | ... | @@ -133,17 +133,29 @@ |
133 | 133 | <if test="queryVO.checkNoStatus != null"> |
134 | 134 | AND o.check_status = #{queryVO.checkNoStatus} |
135 | 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 | 159 | </if> |
148 | 160 | <if test="queryVO.customerPo != null and queryVO.customerPo != ''"> |
149 | 161 | AND o.customer_po = #{queryVO.customerPo} | ... | ... |