15815213711
2025-07-30 e05d842dc2b6176238c6ff957bf0d0e6ad8250c5
service/src/main/java/com/ruoyi/cwgl/service/impl/DispatchOrderServiceImpl.java
@@ -284,50 +284,35 @@
    @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;
    }