From aa3757e8e1d986a65436c2dccec82f486ee690b5 Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期三, 24 十二月 2025 09:51:31 +0800
Subject: [PATCH] 应付接口

---
 service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableBillSettlementDetailServiceImpl.java |  226 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 221 insertions(+), 5 deletions(-)

diff --git a/service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableBillSettlementDetailServiceImpl.java b/service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableBillSettlementDetailServiceImpl.java
index 75188ca..cec458b 100644
--- a/service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableBillSettlementDetailServiceImpl.java
+++ b/service/src/main/java/com/ruoyi/cwgl/service/impl/ReceivableBillSettlementDetailServiceImpl.java
@@ -18,7 +18,18 @@
 import com.ruoyi.cwgl.mapper.ReceivableBillSettlementDetailMapper;
 import com.ruoyi.cwgl.domain.ReceivableBillSettlementDetail;
 import com.ruoyi.cwgl.service.IReceivableBillSettlementDetailService;
+import com.ruoyi.cwgl.service.IReceivableBillManagementService;
+import com.ruoyi.cwgl.service.IReceivableBillManagementLogService;
+import com.ruoyi.cwgl.domain.ReceivableBillManagement;
+import com.ruoyi.cwgl.domain.ReceivableBillManagementLog;
 import com.ruoyi.common.core.text.Convert;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
+import java.math.BigDecimal;
+import java.util.Set;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.HashSet;
 
 /**
  * 搴旀敹璐﹀崟缁撶畻鏄庣粏Service涓氬姟灞傚鐞�
@@ -33,6 +44,12 @@
     protected final Logger logger = LoggerFactory.getLogger(getClass());
     @Resource
     private ReceivableBillSettlementDetailMapper receivableBillSettlementDetailMapper;
+    
+    @Resource
+    private IReceivableBillManagementService receivableBillManagementService;
+    
+    @Resource
+    private IReceivableBillManagementLogService receivableBillManagementLogService;
 
 
     /**
@@ -102,8 +119,85 @@
     @Override
     public int insertReceivableBillSettlementDetail(ReceivableBillSettlementDetail receivableBillSettlementDetail)
     {
+        // 1. 璁剧疆鍒涘缓鏃堕棿
         receivableBillSettlementDetail.setCreateTime(DateUtils.getNowDate());
-        return receivableBillSettlementDetailMapper.insertReceivableBillSettlementDetail(receivableBillSettlementDetail);
+        
+        // 2. 鎻掑叆缁撶畻鏄庣粏璁板綍
+        int result = receivableBillSettlementDetailMapper.insertReceivableBillSettlementDetail(receivableBillSettlementDetail);
+        
+        // 3. 濡傛灉鎻掑叆鎴愬姛涓攂illId涓嶄负绌猴紝鍒欐洿鏂颁富琛ㄩ噾棰濆拰鐘舵��
+        if (result > 0 && receivableBillSettlementDetail.getBillId() != null) {
+            updateReceivableBillAmountAndStatus(receivableBillSettlementDetail.getBillId());
+            
+            // 璁板綍娣诲姞缁撶畻鏄庣粏鎿嶄綔鏃ュ織
+            ReceivableBillManagement billManagement = receivableBillManagementService.selectReceivableBillManagementById(receivableBillSettlementDetail.getBillId());
+            if (billManagement != null) {
+                ReceivableBillManagementLog log = new ReceivableBillManagementLog();
+                log.setBillId(receivableBillSettlementDetail.getBillId());
+                log.setCreateBy(SecurityUtils.getUsername());
+                log.setCreateTime(DateUtils.getNowDate());
+                log.setOperation("娣诲姞缁撶畻鏄庣粏锛岃处鍗曠紪鍙凤細" + billManagement.getSystemNo());
+                receivableBillManagementLogService.insertReceivableBillManagementLog(log);
+            }
+        }
+        
+        return result;
+    }
+    
+    /**
+     * 鏇存柊搴旀敹璐﹀崟涓昏〃鐨勯噾棰濆拰鐘舵��
+     * 
+     * @param billId 搴旀敹璐﹀崟ID
+     */
+    private void updateReceivableBillAmountAndStatus(Integer billId) {
+        // 1. 鏌ヨ搴旀敹璐﹀崟涓昏〃璁板綍
+        ReceivableBillManagement billManagement = receivableBillManagementService.selectReceivableBillManagementById(billId);
+        if (billManagement == null) {
+            throw new ServiceException("搴旀敹璐﹀崟涓昏〃璁板綍涓嶅瓨鍦紝ID锛�" + billId);
+        }
+        
+        // 2. 鏌ヨ璇ヨ处鍗曠殑鎵�鏈夌粨绠楁槑缁嗚褰�
+        ReceivableBillSettlementDetail queryDetail = new ReceivableBillSettlementDetail();
+        queryDetail.setBillId(billId);
+        List<ReceivableBillSettlementDetail> settlementDetails = receivableBillSettlementDetailMapper.selectReceivableBillSettlementDetailList(queryDetail);
+        
+        // 3. 璁$畻鎬绘敹娆鹃噾棰�
+        BigDecimal totalReceiptAmount = settlementDetails.stream()
+                .map(ReceivableBillSettlementDetail::getReceiptAmount)
+                .filter(amount -> amount != null)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        
+        // 4. 楠岃瘉閲戦涓嶈兘涓鸿礋鏁�
+        if (totalReceiptAmount.compareTo(BigDecimal.ZERO) < 0) {
+            throw new ServiceException("鏀舵閲戦涓嶈兘涓鸿礋鏁�");
+        }
+        
+        // 5. 璁$畻寰呮敹閲戦锛堝簲缁撶畻閲戦 - 宸叉敹閲戦 - 鍑忓厤閲戦锛�
+        BigDecimal totalAmount = billManagement.getTotalAmount() != null ? billManagement.getTotalAmount() : BigDecimal.ZERO;
+        BigDecimal discountAmount = billManagement.getDiscountAmount() != null ? billManagement.getDiscountAmount() : BigDecimal.ZERO;
+        BigDecimal pendingAmount = totalAmount.subtract(totalReceiptAmount).subtract(discountAmount);
+        
+        // 6. 楠岃瘉寰呮敹閲戦涓嶈兘涓鸿礋鏁�
+        if (pendingAmount.compareTo(BigDecimal.ZERO) < 0) {
+            throw new ServiceException("寰呮敹閲戦涓嶈兘涓鸿礋鏁帮紝褰撳墠璁$畻鍊硷細" + pendingAmount);
+        }
+        
+        // 7. 鏇存柊涓昏〃閲戦
+        billManagement.setReceivedAmount(totalReceiptAmount);
+        billManagement.setPendingAmount(pendingAmount);
+        
+        // 8. 鏍规嵁寰呮敹閲戦鏇存柊鐘舵��
+        if (pendingAmount.compareTo(BigDecimal.ZERO) == 0) {
+            // 寰呮敹閲戦涓�0锛岀姸鎬佹敼涓�3锛堝凡缁撶畻锛�
+            billManagement.setStatus("3");
+        } else {
+            // 寰呮敹閲戦澶т簬0锛岀姸鎬佹敼涓�1锛堢粨绠椾腑锛�
+            billManagement.setStatus("1");
+        }
+        
+        // 9. 鏇存柊涓昏〃璁板綍
+        billManagement.setUpdateTime(DateUtils.getNowDate());
+        receivableBillManagementService.updateReceivableBillManagement(billManagement);
     }
 
     /**
@@ -115,7 +209,49 @@
     @Override
     public int insertReceivableBillSettlementDetailBatch(List<ReceivableBillSettlementDetail> receivableBillSettlementDetails)
     {
+        // 1. 璁剧疆鍒涘缓鏃堕棿
+        for (ReceivableBillSettlementDetail detail : receivableBillSettlementDetails) {
+            detail.setCreateTime(DateUtils.getNowDate());
+        }
+        
+        // 2. 鎵归噺鎻掑叆缁撶畻鏄庣粏璁板綍
         int rows = receivableBillSettlementDetailMapper.insertReceivableBillSettlementDetailBatch(receivableBillSettlementDetails);
+        
+        // 3. 濡傛灉鎻掑叆鎴愬姛锛屽垯鏇存柊鐩稿叧涓昏〃閲戦鍜岀姸鎬�
+        if (rows > 0) {
+            // 鑾峰彇鎵�鏈変笉閲嶅鐨刡illId
+            Set<Integer> billIds = receivableBillSettlementDetails.stream()
+                    .map(ReceivableBillSettlementDetail::getBillId)
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.toSet());
+            
+            // 鏇存柊姣忎釜璐﹀崟涓昏〃鐨勯噾棰濆拰鐘舵��
+            for (Integer billId : billIds) {
+                updateReceivableBillAmountAndStatus(billId);
+            }
+            
+            // 璁板綍娣诲姞缁撶畻鏄庣粏鎿嶄綔鏃ュ織
+            if (!billIds.isEmpty()) {
+                for (Integer billId : billIds) {
+                    ReceivableBillManagement billManagement = receivableBillManagementService.selectReceivableBillManagementById(billId);
+                    if (billManagement != null) {
+                        ReceivableBillManagementLog log = new ReceivableBillManagementLog();
+                        log.setBillId(billId);
+                        log.setCreateBy(SecurityUtils.getUsername());
+                        log.setCreateTime(DateUtils.getNowDate());
+                        
+                        // 璁$畻鏈娣诲姞鐨勬槑缁嗘暟閲�
+                        long detailCount = receivableBillSettlementDetails.stream()
+                                .filter(detail -> billId.equals(detail.getBillId()))
+                                .count();
+                        
+                        log.setOperation("娣诲姞" + detailCount + "鏉$粨绠楁槑缁嗭紝璐﹀崟缂栧彿锛�" + billManagement.getSystemNo());
+                        receivableBillManagementLogService.insertReceivableBillManagementLog(log);
+                    }
+                }
+            }
+        }
+        
         return rows;
     }
 
@@ -128,8 +264,32 @@
     @Override
     public int updateReceivableBillSettlementDetail(ReceivableBillSettlementDetail receivableBillSettlementDetail)
     {
+        // 1. 鑾峰彇淇敼鍓嶇殑璁板綍锛岀敤浜庡悗缁洿鏂颁富琛�
+        ReceivableBillSettlementDetail oldDetail = null;
+        if (receivableBillSettlementDetail.getId() != null) {
+            oldDetail = receivableBillSettlementDetailMapper.selectReceivableBillSettlementDetailById(receivableBillSettlementDetail.getId());
+        }
+        
+        // 2. 璁剧疆鏇存柊鏃堕棿
         receivableBillSettlementDetail.setUpdateTime(DateUtils.getNowDate());
-        return receivableBillSettlementDetailMapper.updateReceivableBillSettlementDetail(receivableBillSettlementDetail);
+        
+        // 3. 鏇存柊缁撶畻鏄庣粏璁板綍
+        int result = receivableBillSettlementDetailMapper.updateReceivableBillSettlementDetail(receivableBillSettlementDetail);
+        
+        // 4. 濡傛灉鏇存柊鎴愬姛锛屽垯鏇存柊鐩稿叧涓昏〃閲戦鍜岀姸鎬�
+        if (result > 0) {
+            // 鑾峰彇闇�瑕佹洿鏂扮殑billId锛堜紭鍏堜娇鐢ㄦ柊璁板綍鐨刡illId锛屽鏋滄病鏈夊垯浣跨敤鏃ц褰曠殑billId锛�
+            Integer billId = receivableBillSettlementDetail.getBillId();
+            if (billId == null && oldDetail != null) {
+                billId = oldDetail.getBillId();
+            }
+            
+            if (billId != null) {
+                updateReceivableBillAmountAndStatus(billId);
+            }
+        }
+        
+        return result;
     }
 
     /**
@@ -140,7 +300,29 @@
      */
     @Override
     public int updateReceivableBillSettlementDetailBatch(List<ReceivableBillSettlementDetail> receivableBillSettlementDetails){
-        return receivableBillSettlementDetailMapper.updateReceivableBillSettlementDetailBatch(receivableBillSettlementDetails);
+        // 1. 璁剧疆鏇存柊鏃堕棿
+        for (ReceivableBillSettlementDetail detail : receivableBillSettlementDetails) {
+            detail.setUpdateTime(DateUtils.getNowDate());
+        }
+        
+        // 2. 鎵归噺鏇存柊缁撶畻鏄庣粏璁板綍
+        int result = receivableBillSettlementDetailMapper.updateReceivableBillSettlementDetailBatch(receivableBillSettlementDetails);
+        
+        // 3. 濡傛灉鏇存柊鎴愬姛锛屽垯鏇存柊鐩稿叧涓昏〃閲戦鍜岀姸鎬�
+        if (result > 0) {
+            // 鑾峰彇鎵�鏈変笉閲嶅鐨刡illId
+            Set<Integer> billIds = receivableBillSettlementDetails.stream()
+                    .map(ReceivableBillSettlementDetail::getBillId)
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.toSet());
+            
+            // 鏇存柊姣忎釜璐﹀崟涓昏〃鐨勯噾棰濆拰鐘舵��
+            for (Integer billId : billIds) {
+                updateReceivableBillAmountAndStatus(billId);
+            }
+        }
+        
+        return result;
     }
 
     /**
@@ -165,7 +347,26 @@
     @Override
     public int deleteReceivableBillSettlementDetailByIds(Integer[] ids)
     {
-        return receivableBillSettlementDetailMapper.deleteReceivableBillSettlementDetailByIds(ids);
+        // 1. 鑾峰彇鍒犻櫎鍓嶇殑璁板綍锛岀敤浜庡悗缁洿鏂颁富琛�
+        Set<Integer> billIds = new HashSet<>();
+        for (Integer id : ids) {
+            ReceivableBillSettlementDetail detail = receivableBillSettlementDetailMapper.selectReceivableBillSettlementDetailById(id);
+            if (detail != null && detail.getBillId() != null) {
+                billIds.add(detail.getBillId());
+            }
+        }
+        
+        // 2. 鍒犻櫎缁撶畻鏄庣粏璁板綍
+        int result = receivableBillSettlementDetailMapper.deleteReceivableBillSettlementDetailByIds(ids);
+        
+        // 3. 濡傛灉鍒犻櫎鎴愬姛锛屽垯鏇存柊鐩稿叧涓昏〃閲戦鍜岀姸鎬�
+        if (result > 0) {
+            for (Integer billId : billIds) {
+                updateReceivableBillAmountAndStatus(billId);
+            }
+        }
+        
+        return result;
     }
 
     /**
@@ -177,6 +378,21 @@
     @Override
     public int deleteReceivableBillSettlementDetailById(Integer id)
     {
-        return receivableBillSettlementDetailMapper.deleteReceivableBillSettlementDetailById(id);
+        // 1. 鑾峰彇鍒犻櫎鍓嶇殑璁板綍锛岀敤浜庡悗缁洿鏂颁富琛�
+        Integer billId = null;
+        ReceivableBillSettlementDetail detail = receivableBillSettlementDetailMapper.selectReceivableBillSettlementDetailById(id);
+        if (detail != null && detail.getBillId() != null) {
+            billId = detail.getBillId();
+        }
+        
+        // 2. 鍒犻櫎缁撶畻鏄庣粏璁板綍
+        int result = receivableBillSettlementDetailMapper.deleteReceivableBillSettlementDetailById(id);
+        
+        // 3. 濡傛灉鍒犻櫎鎴愬姛锛屽垯鏇存柊鐩稿叧涓昏〃閲戦鍜岀姸鎬�
+        if (result > 0 && billId != null) {
+            updateReceivableBillAmountAndStatus(billId);
+        }
+        
+        return result;
     }
 }

--
Gitblit v1.8.0