From 86a375567eac064493b1fb7f3238bf8f81b83eed Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期二, 29 七月 2025 15:38:33 +0800
Subject: [PATCH] 新增查看费用接口

---
 service/src/main/java/com/ruoyi/cwgl/service/impl/DispatchOrderServiceImpl.java |   76 +++++++++++++++++++++++++++++++++++++-
 1 files changed, 74 insertions(+), 2 deletions(-)

diff --git a/service/src/main/java/com/ruoyi/cwgl/service/impl/DispatchOrderServiceImpl.java b/service/src/main/java/com/ruoyi/cwgl/service/impl/DispatchOrderServiceImpl.java
index dd052f5..405ba48 100644
--- a/service/src/main/java/com/ruoyi/cwgl/service/impl/DispatchOrderServiceImpl.java
+++ b/service/src/main/java/com/ruoyi/cwgl/service/impl/DispatchOrderServiceImpl.java
@@ -1,9 +1,14 @@
 package com.ruoyi.cwgl.service.impl;
 
-import java.util.List;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import com.ruoyi.common.utils.DateUtils;
 import javax.annotation.Resource;
+
+import com.ruoyi.cwgl.domain.DispatchOrderItem;
+import com.ruoyi.cwgl.domain.vo.DispatchOrderItemVo;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.stereotype.Service;
 import org.springframework.scheduling.annotation.Async;
@@ -83,7 +88,7 @@
     @Override
     public List<DispatchOrder> selectDispatchOrderList2(DispatchOrder dispatchOrder)
     {
-        return dispatchOrderMapper.selectDispatchOrderList(dispatchOrder);
+        return dispatchOrderMapper.selectDispatchOrderList2(dispatchOrder);
     }
 
     /**
@@ -191,4 +196,71 @@
     {
         return dispatchOrderMapper.deleteDispatchOrderById(id);
     }
+
+    @DataSource(DataSourceType.CWSJ)
+    @Override
+    public List<DispatchOrderItemVo> selectDispatchOrderItem(String no) {
+        // 浣跨敤Map鏉ヤ复鏃跺瓨鍌ㄥ垎缁勭粨鏋�
+        Map<String, DispatchOrderItemVo> summaryMap = new HashMap<>();
+
+        List<DispatchOrderItem> dispatchOrderItems=dispatchOrderMapper.selectDispatchOrderItemByNo(no);
+        Set<String> settableFeeItemSet = null;
+        for (DispatchOrderItem dispatchOrderItem : dispatchOrderItems) {
+            String settableFeeItems = dispatchOrderItem.getSettableFeeItems();
+            if (settableFeeItemSet==null) {
+                settableFeeItemSet = new HashSet<>(
+                        Arrays.asList(settableFeeItems.split(",")));
+            }
+            // 鍒ゆ柇鏄惁鍙粨绠�
+            String feeItem = dispatchOrderItem.getFeeItem();
+            int isSettable = isFeeItemSettable(feeItem, settableFeeItemSet);
+            // 濡傛灉Map涓笉瀛樺湪璇ヨ垂鐢ㄧ被鍨嬶紝鍒欏垱寤烘柊鏉$洰
+            if (!summaryMap.containsKey(feeItem)) {
+                DispatchOrderItemVo summary = new DispatchOrderItemVo();
+                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.setReceivableFeeCurrency(dispatchOrderItem.getCurrencyType());
+            } else if ("P".equals(dispatchOrderItem.getBillType())) { // 搴斾粯
+                summary.setActualFee(summary.getActualFee().add(dispatchOrderItem.getSettleFee()));
+                summary.setActualFeeCurrency(dispatchOrderItem.getCurrencyType());
+
+            }
+        }
+           // 杞崲涓篖ist骞惰繃婊ゃ�佹帓搴�
+        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());
+    }
+
+
+
+    /**
+     * 鍒ゆ柇璐圭敤绫诲瀷鏄惁鍙粨绠�
+     */
+    private static int isFeeItemSettable(String feeItem, Set<String> settableFeeItemSet) {
+        if (feeItem == null || settableFeeItemSet == null) {
+            return 0;
+        }
+
+
+            if (settableFeeItemSet.contains(feeItem)) {
+                return 1;
+            }
+
+        return 0;
+    }
 }

--
Gitblit v1.8.0