From a485c380200759905753498875dd260cce9cddf7 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期三, 28 十月 2026 17:02:18 +0800
Subject: [PATCH] 修改了统计

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java |  125 +++++++++++++++++++++++++++++++++++++----
 1 files changed, 112 insertions(+), 13 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java
index 3890e4a..d03d66f 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceFunddetailController.java
@@ -11,7 +11,11 @@
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.project.domain.FunddetailReqVo;
 import com.ruoyi.project.domain.ServiceFunddetail;
+import com.ruoyi.project.domain.SpStatBonus;
+import com.ruoyi.project.domain.SpStatBonusDept;
 import com.ruoyi.project.domain.SpStatBonusReq;
+import com.ruoyi.project.domain.vo.TaxMoneyByItemEO;
+import com.ruoyi.project.domain.vo.TaxMoneySumEO;
 import com.ruoyi.project.domain.vo.TaxMoneyVO;
 import com.ruoyi.project.service.IServiceFunddetailService;
 import io.swagger.annotations.Api;
@@ -20,8 +24,11 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Arrays;
-import java.util.List;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
 
 /**
  * 璐圭敤鐢宠鏄庣粏Controller
@@ -42,7 +49,7 @@
      * 鏌ヨ璐圭敤鐢宠鏄庣粏鍒楄〃
      */
     @ApiOperation("鏌ヨ璐圭敤鐢宠鏄庣粏鍒楄〃")
-    //@PreAuthorize("@ss.hasPermi('project:funddetail:list')")
+    //// @PreAuthorize("@ss.hasPermi('project:funddetail:list')")
     @GetMapping("/list")
     public TableDataInfo list(ServiceFunddetail serviceFunddetail) {
         startPage();
@@ -55,7 +62,7 @@
      * 瀵煎嚭璐圭敤鐢宠鏄庣粏鍒楄〃
      */
     @ApiOperation("瀵煎嚭璐圭敤鐢宠鏄庣粏鍒楄〃")
-    //@PreAuthorize("@ss.hasPermi('project:funddetail:export')")
+    //// @PreAuthorize("@ss.hasPermi('project:funddetail:export')")
     @Log(title = "璐圭敤鐢宠鏄庣粏", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
     public AjaxResult export(ServiceFunddetail serviceFunddetail) {
@@ -68,7 +75,7 @@
      * 鑾峰彇璐圭敤鐢宠鏄庣粏璇︾粏淇℃伅
      */
     @ApiOperation("鑾峰彇璐圭敤鐢宠鏄庣粏璇︾粏淇℃伅")
-    //@PreAuthorize("@ss.hasPermi('project:funddetail:query')")
+    //// @PreAuthorize("@ss.hasPermi('project:funddetail:query')")
     @GetMapping(value = "/{id}")
     public AjaxResult getInfo(@PathVariable("id") Long id) {
         return AjaxResult.success(serviceFunddetailService.getById(id));
@@ -78,11 +85,18 @@
      * 鏂板璐圭敤鐢宠鏄庣粏
      */
     @ApiOperation("鏂板璐圭敤鐢宠鏄庣粏")
-    //@PreAuthorize("@ss.hasPermi('project:funddetail:add')")
+    //// @PreAuthorize("@ss.hasPermi('project:funddetail:add')")
     @Log(title = "璐圭敤鐢宠鏄庣粏", businessType = BusinessType.INSERT)
     @PostMapping("/add")
     @NotRepeatCommit(key = "param:arg[1]", value = 30000)
     public AjaxResult add(@RequestBody ServiceFunddetail serviceFunddetail) {
+        // 2026-10-15锛氶檮浠舵枃浠跺悕瑙勮寖浜屾鏍¢獙锛堜笌鍓嶇 opo-web/src/utils/fileNameCheck.js 鍚屽彛寰勶紝
+        // 鐩殑鏄槻姝㈢粫杩囧墠绔洿鎺ヨ皟鎺ュ彛淇濆瓨涓嶅悎瑙勯檮浠跺悕锛夈�傛柊澧炲満鏅病鏈夊巻鍙查檮浠讹紝鐢ㄤ弗鏍兼ā寮忋��
+        String nameError = com.ruoyi.project.common.AttachmentNameValidator
+                .checkJsonList(serviceFunddetail.getInvoicefiles(), serviceFunddetail.getAnnexfiles());
+        if (nameError != null) {
+            return AjaxResult.error("闄勪欢鏂囦欢鍚嶄笉绗﹀悎瑕佹眰锛屾棤娉曚繚瀛橈細" + nameError);
+        }
         boolean save = serviceFunddetailService.save(serviceFunddetail);
         return AjaxResult.success(serviceFunddetail);
     }
@@ -91,12 +105,30 @@
      * 淇敼璐圭敤鐢宠鏄庣粏
      */
     @ApiOperation("淇敼璐圭敤鐢宠鏄庣粏")
-    //@PreAuthorize("@ss.hasPermi('project:funddetail:edit')")
+    //// @PreAuthorize("@ss.hasPermi('project:funddetail:edit')")
     @Log(title = "璐圭敤鐢宠鏄庣粏", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
     @NotRepeatCommit(key = "param:arg[1]", value = 30000)
     public AjaxResult edit(@RequestBody ServiceFunddetail serviceFunddetail) {
         log.info("淇敼鐨勬暟鎹俊鎭細{}", serviceFunddetail);
+        // 2026-10-15锛氶檮浠舵枃浠跺悕瑙勮寖浜屾鏍¢獙銆備慨鏀瑰満鏅寜涓氬姟鍙e緞"鍙牎楠屾湰娆″彉鏇寸殑闄勪欢"锛�
+        // 淇濆瓨鍓嶈鏄庣粏宸插瓨鍦ㄧ殑鍘嗗彶闄勪欢鍚嶄笉鍙備笌鏍¢獙锛屽惁鍒欒�佸崟鎹紙鍘嗗彶涓嶅悎瑙勫悕鍗犳瘮寰堥珮锛夋敼涓噾棰濋兘瀛樹笉杩涘幓銆�
+        java.util.Set<String> existingNames = new java.util.HashSet<>();
+        if (serviceFunddetail.getId() != null) {
+            ServiceFunddetail oldDetail = serviceFunddetailService.getById(serviceFunddetail.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 nameError = com.ruoyi.project.common.AttachmentNameValidator
+                .checkJsonListForUpdate(existingNames, serviceFunddetail.getInvoicefiles(),
+                        serviceFunddetail.getAnnexfiles());
+        if (nameError != null) {
+            return AjaxResult.error("闄勪欢鏂囦欢鍚嶄笉绗﹀悎瑕佹眰锛屾棤娉曚繚瀛橈細" + nameError);
+        }
         return toAjax(serviceFunddetailService.updateById(serviceFunddetail));
     }
 
@@ -104,7 +136,7 @@
      * 鍒犻櫎璐圭敤鐢宠鏄庣粏
      */
     @ApiOperation("鍒犻櫎璐圭敤鐢宠鏄庣粏")
-    //@PreAuthorize("@ss.hasPermi('project:funddetail:remove')")
+    //// @PreAuthorize("@ss.hasPermi('project:funddetail:remove')")
     @Log(title = "璐圭敤鐢宠鏄庣粏", businessType = BusinessType.DELETE)
     @GetMapping("/remove/{ids}")
     public AjaxResult remove(@PathVariable Long[] ids) {
@@ -161,11 +193,11 @@
         return AjaxResult.success(serviceFunddetailService.getFundDetail(id));
     }
 
-    @ApiOperation("鏍规嵁鏉′欢绠楃◣")
-    @PostMapping("/calculateTax")
-    public AjaxResult calculateTax(@RequestBody List<ServiceFunddetail> serviceFunddetails) {
-        return AjaxResult.success(serviceFunddetailService.calculateTax(serviceFunddetails));
-    }
+//    @ApiOperation("鏍规嵁鏉′欢绠楃◣")
+//    @PostMapping("/calculateTax")
+//    public AjaxResult calculateTax(@RequestBody List<ServiceFunddetail> serviceFunddetails) {
+//        return AjaxResult.success(serviceFunddetailService.calculateTax2(serviceFunddetails));
+//    }
 
 //    /**
 //     * 缁╂晥璁$畻
@@ -191,4 +223,71 @@
         startPage();
         return getDataTable(serviceFunddetailService.getListBySpStatBonus(spStatBonusReq));
     }
+
+    /**
+     * 瀵煎嚭缁╂晥濂栭噾缁熻
+     */
+    @ApiOperation("瀵煎嚭缁╂晥濂栭噾缁熻")
+    @Log(title = "缁╂晥缁熻", businessType = BusinessType.EXPORT)
+    @GetMapping("/exportBonus")
+    public AjaxResult exportBonus(SpStatBonusReq spStatBonusReq) {
+        List<SpStatBonus> list = serviceFunddetailService.getListBySpStatBonus(spStatBonusReq);
+        // 閲戦 0.00 涓嶆樉绀�
+        for (SpStatBonus row : list) {
+            row.setAmount(blankZero(row.getAmount()));
+            row.setMamount(blankZero(row.getMamount()));
+            row.setSamount(blankZero(row.getSamount()));
+            row.setYamount(blankZero(row.getYamount()));
+        }
+        ExcelUtil<SpStatBonus> util = new ExcelUtil<SpStatBonus>(SpStatBonus.class);
+        return util.exportExcel(list, "缁╂晥缁熻鏁版嵁");
+    }
+
+    /**
+     * 瀵煎嚭缁╂晥缁熻锛堟寜涓氬姟缁勶級
+     */
+    @ApiOperation("瀵煎嚭缁╂晥缁熻锛堟寜涓氬姟缁勶級")
+    @Log(title = "缁╂晥缁熻", businessType = BusinessType.EXPORT)
+    @GetMapping("/exportBonusDept")
+    public AjaxResult exportBonusDept(SpStatBonusReq spStatBonusReq) {
+        List<SpStatBonus> list = serviceFunddetailService.getListBySpStatBonus(spStatBonusReq);
+        Map<String, SpStatBonusDept> grouped = new LinkedHashMap<String, SpStatBonusDept>();
+        for (SpStatBonus row : list) {
+            String key = row.getDeptId() != null ? String.valueOf(row.getDeptId()) : row.getDeptName();
+            if (key == null) {
+                key = "";
+            }
+            SpStatBonusDept dept = grouped.get(key);
+            if (dept == null) {
+                dept = new SpStatBonusDept();
+                dept.setDeptname(row.getDeptName() == null ? "鏈垎缁�" : row.getDeptName());
+                dept.setAmount(BigDecimal.ZERO);
+                dept.setMamount(BigDecimal.ZERO);
+                dept.setSamount(BigDecimal.ZERO);
+                dept.setYamount(BigDecimal.ZERO);
+                grouped.put(key, dept);
+            }
+            dept.setAmount(dept.getAmount().add(nz(row.getAmount())));
+            dept.setMamount(dept.getMamount().add(nz(row.getMamount())));
+            dept.setSamount(dept.getSamount().add(nz(row.getSamount())));
+            dept.setYamount(dept.getYamount().add(nz(row.getYamount())));
+        }
+        List<SpStatBonusDept> result = new ArrayList<SpStatBonusDept>(grouped.values());
+        for (SpStatBonusDept dept : result) {
+            dept.setAmount(blankZero(dept.getAmount()));
+            dept.setMamount(blankZero(dept.getMamount()));
+            dept.setSamount(blankZero(dept.getSamount()));
+            dept.setYamount(blankZero(dept.getYamount()));
+        }
+        ExcelUtil<SpStatBonusDept> util = new ExcelUtil<SpStatBonusDept>(SpStatBonusDept.class);
+        return util.exportExcel(result, "缁╂晥缁熻锛堟寜涓氬姟缁勶級");
+    }
+
+    private BigDecimal nz(BigDecimal value) {
+        return value == null ? BigDecimal.ZERO : value;
+    }
+
+    private BigDecimal blankZero(BigDecimal value) {
+        return (value == null || value.compareTo(BigDecimal.ZERO) == 0) ? null : value;
+    }
 }

--
Gitblit v1.9.3