From ee089a8ac4a9d99ef0a0491bbf1d80a2d4fbc393 Mon Sep 17 00:00:00 2001
From: sinake <sinake1@qq.com>
Date: 星期二, 10 十一月 2026 09:15:54 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java |   73 ++++++++++++++++++++++++++----------
 1 files changed, 53 insertions(+), 20 deletions(-)

diff --git a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
index 65c99ff..2d362d4 100644
--- a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
+++ b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
@@ -559,27 +559,25 @@
                     FlowLevel = 0;
                 }
             }
-
-            SysUser sysUser = sysUserService.selectUserByUserName(serviceFund.getUserno());
-            //瀹℃壒鏈�氳繃锛氬崟鎹俊鎭� + 瀹℃壒浜�/瀹℃壒鏃堕棿/鎰忚锛堟剰瑙� = "瀹℃壒鏈�氳繃銆�" + 椹冲洖鎰忚锛�
-            List<ConcurrentHashMap<String, Object>> contentList = FundNotifyMessageBuilder.newRows();
-            FundNotifyMessageBuilder.addBillInfo(contentList, serviceFund.getApplytype(),
-                    serviceFund.getUsername(), serviceFund.getPretaxcost(), serviceFund.getDonorname(),
-                    FundNotifyMessageBuilder.billNo(serviceFund.getBh(), serviceFund.getId()));
-            FundNotifyMessageBuilder.addAuditResult(contentList, loginUser.getUser().getNickName(), new Date(),
-                    FundNotifyMessageBuilder.opinion(FundNotifyMessageBuilder.CONCLUSION_REJECT,
-                            checkFundVO.getFlowcontent()));
-            try {
-                DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
-                dingTalkReqVo.setTitle(FundNotifyMessageBuilder.TITLE);
-                dingTalkReqVo.setNumber(sysUser.getPhonenumber());
-                dingTalkReqVo.setContents(contentList);
-                dingTalkService.sendNotification(dingTalkReqVo);
-            } catch (Exception e) {
-                log.error("璐圭敤---瀹℃壒鏈�氳繃閽夐拤閫氱煡澶辫触锛宖undId={}", serviceFund.getId(), e);
-            }
         }
-
+        SysUser sysUser = sysUserService.selectUserByUserName(serviceFund.getUserno());
+        //瀹℃壒鏈�氳繃锛氬崟鎹俊鎭� + 瀹℃壒浜�/瀹℃壒鏃堕棿/鎰忚锛堟剰瑙� = "瀹℃壒鏈�氳繃銆�" + 椹冲洖鎰忚锛�
+        List<ConcurrentHashMap<String, Object>> contentList = FundNotifyMessageBuilder.newRows();
+        FundNotifyMessageBuilder.addBillInfo(contentList, serviceFund.getApplytype(),
+                serviceFund.getUsername(), serviceFund.getPretaxcost(), serviceFund.getDonorname(),
+                FundNotifyMessageBuilder.billNo(serviceFund.getBh(), serviceFund.getId()));
+        FundNotifyMessageBuilder.addAuditResult(contentList, loginUser.getUser().getNickName(), new Date(),
+                FundNotifyMessageBuilder.opinion(checkFundVO.getFlowconclusion()+"",
+                        checkFundVO.getFlowcontent()));
+        try {
+            DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
+            dingTalkReqVo.setTitle(FundNotifyMessageBuilder.TITLE);
+            dingTalkReqVo.setNumber(sysUser.getPhonenumber());
+            dingTalkReqVo.setContents(contentList);
+            dingTalkService.sendNotification(dingTalkReqVo);
+        } catch (Exception e) {
+            log.error("璐圭敤---瀹℃壒鏈�氳繃閽夐拤閫氱煡澶辫触锛宖undId={}", serviceFund.getId(), e);
+        }
         serviceFund.setRecordstatus(RecordStatus);
         serviceFund.setFlowlevel(FlowLevel.longValue());
         //  serviceFund.setBackflowlevel(serviceFund.getFlowlevel());
@@ -1585,6 +1583,28 @@
 
             // 淇濆瓨璇︽儏鏁版嵁
             for (ServiceFunddetailVO serviceFunddetailVO : serviceFunddetails) {
+                // 2026-10-15锛氶檮浠舵枃浠跺悕瑙勮寖浜屾鏍¢獙锛堜笌鍓嶇 fileNameCheck 鍚屽彛寰勶紱鍙牎楠屾湰娆″彉鏇寸殑闄勪欢锛屽巻鍙查檮浠舵斁琛岋級
+                java.util.Set<String> existingNames = new java.util.HashSet<>();
+                if (serviceFunddetailVO.getId() != null) {
+                    ServiceFunddetail oldDetail = serviceFunddetailMapper.selectById(serviceFunddetailVO.getId());
+                    if (oldDetail != null) {
+                        existingNames.addAll(com.ruoyi.project.common.AttachmentNameValidator
+                                .collectNames(oldDetail.getInvoicefiles()));
+                        existingNames.addAll(com.ruoyi.project.common.AttachmentNameValidator
+                                .collectNames(oldDetail.getAnnexfiles()));
+                    }
+                }
+                String invoiceJson = CollectionUtils.isEmpty(serviceFunddetailVO.getInvoicefilesList())
+                        ? serviceFunddetailVO.getInvoicefiles()
+                        : JSON.toJSONString(serviceFunddetailVO.getInvoicefilesList());
+                String annexJson = CollectionUtils.isEmpty(serviceFunddetailVO.getAnnexfilesList())
+                        ? serviceFunddetailVO.getAnnexfiles()
+                        : JSON.toJSONString(serviceFunddetailVO.getAnnexfilesList());
+                String nameError = com.ruoyi.project.common.AttachmentNameValidator
+                        .checkJsonListForUpdate(existingNames, invoiceJson, annexJson);
+                if (nameError != null) {
+                    throw new BaseException("闄勪欢鏂囦欢鍚嶄笉绗﹀悎瑕佹眰锛屾棤娉曚繚瀛橈細" + nameError);
+                }
                 //鍘绘帀韬唤璇佺殑棣栧熬绌烘牸
                 if (StringUtils.isNotEmpty(serviceFunddetailVO.getIdcardno())) {
                     serviceFunddetailVO.setIdcardno(serviceFunddetailVO.getIdcardno().trim());
@@ -1685,10 +1705,23 @@
             //閫氳繃鍙楃泭浜哄悕绉帮紝灏嗙◣鍓嶃�佺◣鍚庣殑鍊肩浉鍔�
             Map<String, Double> sumAmount = serviceFunddetails.stream().collect(Collectors.groupingBy(ServiceFunddetail::getBeneficiaryname, Collectors.summingDouble(ServiceFunddetail::getAmount)));
             Map<String, Double> sumTaxdAmount = serviceFunddetails.stream().collect(Collectors.groupingBy(ServiceFunddetail::getBeneficiaryname, Collectors.summingDouble(ServiceFunddetail::getTaxedamount)));
+            // 鏂板鍙e緞锛氬鍊肩◣銆佸煄寤虹◣銆佸姵鍔$◣鍓嶃�佸姵鍔′釜绋庢寜鍙楃泭浜哄悎璁�
+            Map<String, Double> sumVat = serviceFunddetails.stream().collect(Collectors.groupingBy(ServiceFunddetail::getBeneficiaryname,
+                    Collectors.summingDouble(d -> d.getVatAmount() == null ? 0.0 : d.getVatAmount())));
+            Map<String, Double> sumCityTax = serviceFunddetails.stream().collect(Collectors.groupingBy(ServiceFunddetail::getBeneficiaryname,
+                    Collectors.summingDouble(d -> d.getCityTaxAmount() == null ? 0.0 : d.getCityTaxAmount())));
+            Map<String, Double> sumLaborPretax = serviceFunddetails.stream().collect(Collectors.groupingBy(ServiceFunddetail::getBeneficiaryname,
+                    Collectors.summingDouble(d -> d.getLaborPretaxAmount() == null ? 0.0 : d.getLaborPretaxAmount())));
+            Map<String, Double> sumTax = serviceFunddetails.stream().collect(Collectors.groupingBy(ServiceFunddetail::getBeneficiaryname,
+                    Collectors.summingDouble(d -> d.getTaxamount() == null ? 0.0 : d.getTaxamount())));
 
             for (String key : sumAmount.keySet()) {
                 ServiceFunddetailExcel serviceFunddetailExcel = new ServiceFunddetailExcel();
                 serviceFunddetailExcel.setAmount(sumAmount.getOrDefault(key, 0.0));
+                serviceFunddetailExcel.setVatAmount(sumVat.getOrDefault(key, 0.0));
+                serviceFunddetailExcel.setCityTaxAmount(sumCityTax.getOrDefault(key, 0.0));
+                serviceFunddetailExcel.setLaborPretaxAmount(sumLaborPretax.getOrDefault(key, 0.0));
+                serviceFunddetailExcel.setTaxamount(sumTax.getOrDefault(key, 0.0));
                 serviceFunddetailExcel.setTaxedamount(sumTaxdAmount.getOrDefault(key, 0.0));
                 for (ServiceFunddetail serviceFunddetail2 : serviceFunddetails) {
                     if (serviceFunddetail2.getBeneficiaryname().equals(key)) {

--
Gitblit v1.9.3