| | |
| | | @DataSource(DataSourceType.CWSJ) |
| | | public List<DispatchOrderItemVo> selectDispatchOrderItems( Set<String> nos) { |
| | | // 使用Map来临时存储分组结果 |
| | | Map<String, DispatchOrderItemVo> summaryMap = new HashMap<>(); |
| | | |
| | | List<DispatchOrderItemVo> vos = new ArrayList<>(); |
| | | List<DispatchOrderItem> dispatchOrderItems=dispatchOrderMapper.selectDispatchOrderItemByNos(nos); |
| | | Set<String> settableFeeItemSet = null; |
| | | for (DispatchOrderItem dispatchOrderItem : dispatchOrderItems) { |
| | | String settableFeeItems = dispatchOrderItem.getSettableFeeItems(); |
| | | if (settableFeeItemSet==null) { |
| | | settableFeeItemSet = new HashSet<>( |
| | | Arrays.asList(settableFeeItems.split(","))); |
| | | } |
| | | HashSet<String> settableFeeItemSet = new HashSet<>( |
| | | Arrays.asList(Optional.ofNullable(dispatchOrderItem.getSettableFeeItems()).orElse("").split(","))); |
| | | |
| | | // 判断是否可结算 |
| | | String feeItem = dispatchOrderItem.getFeeItem(); |
| | | int isSettable = isFeeItemSettable(feeItem, settableFeeItemSet); |
| | | String feeItem = Optional.ofNullable(dispatchOrderItem.getFeeItem()).orElse(""); |
| | | int isSettable = settableFeeItemSet.contains(feeItem)?1:0; |
| | | // 如果Map中不存在该费用类型,则创建新条目 |
| | | if (!summaryMap.containsKey(feeItem)) { |
| | | |
| | | DispatchOrderItemVo summary = new DispatchOrderItemVo(); |
| | | summary.setDispatchNo(dispatchOrderItem.getDispatchNo()); |
| | | summary.setFeeItem(feeItem); |
| | | summary.setReceivableFee(BigDecimal.ZERO); |
| | | summary.setActualFee(BigDecimal.ZERO); |
| | | summary.setIsSettlement(isSettable); |
| | | summaryMap.put(feeItem, summary); |
| | | } |
| | | // 根据账单类型累加金额 |
| | | DispatchOrderItemVo summary = summaryMap.get(feeItem); |
| | | |
| | | if ("R".equals(dispatchOrderItem.getBillType())) { // 应收 |
| | | summary.setReceivableFee(summary.getReceivableFee().add(dispatchOrderItem.getSettleFee())); |
| | | summary.setReceivableFee(dispatchOrderItem.getSettleFee()); |
| | | summary.setReceivableFeeCurrency(dispatchOrderItem.getCurrencyType()); |
| | | } else if ("P".equals(dispatchOrderItem.getBillType())) { // 应付 |
| | | summary.setActualFee(summary.getActualFee().add(dispatchOrderItem.getSettleFee())); |
| | | summary.setActualFee(dispatchOrderItem.getSettleFee()); |
| | | summary.setActualFeeCurrency(dispatchOrderItem.getCurrencyType()); |
| | | |
| | | } |
| | | vos.add( summary); |
| | | } |
| | | // 转换为List并过滤、排序 |
| | | return summaryMap.values().stream() |
| | | // 过滤掉应收应付都为0的记录 |
| | | .filter(dto -> dto.getReceivableFee().compareTo(BigDecimal.ZERO) != 0 |
| | | || dto.getActualFee().compareTo(BigDecimal.ZERO) != 0) |
| | | // 排序:可结算的在前,不可结算的在后;然后按总金额降序 |
| | | .sorted(Comparator.comparing(DispatchOrderItemVo::getIsSettlement).reversed() |
| | | .thenComparing(dto -> dto.getReceivableFee().add(dto.getActualFee()), |
| | | Comparator.reverseOrder())) |
| | | .collect(Collectors.toList()); |
| | | return vos; |
| | | } |
| | | |
| | | |