From 487bbcd45afcc288c27784962d3b40d5015bcd12 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期五, 15 八月 2025 15:33:07 +0800
Subject: [PATCH] yys  修改导入导出

---
 src/main/java/com/ruoyi/common/utils/excel/ExcelUtils.java                 |   35 ++++++++++++++++-
 src/main/resources/mapper/lavorissue/LavorIssueMapper.xml                  |    3 +
 src/main/java/com/ruoyi/lavorissue/service/impl/LavorIssueServiceImpl.java |   44 ++++++++++++++++------
 pom.xml                                                                    |    6 +++
 4 files changed, 73 insertions(+), 15 deletions(-)

diff --git a/pom.xml b/pom.xml
index c802315..17973d1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -289,6 +289,12 @@
             <version>1.12.2</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>4.0.3</version>
+        </dependency>
+
     </dependencies>
 
 	<build>
diff --git a/src/main/java/com/ruoyi/common/utils/excel/ExcelUtils.java b/src/main/java/com/ruoyi/common/utils/excel/ExcelUtils.java
index d1c23ed..230bb77 100644
--- a/src/main/java/com/ruoyi/common/utils/excel/ExcelUtils.java
+++ b/src/main/java/com/ruoyi/common/utils/excel/ExcelUtils.java
@@ -843,18 +843,47 @@
                 } else {
                     merge = false;
                     if (x1 > 0) {
-                        sheet.addMergedRegion(new CellRangeAddress((x1 - 1), x2, y, y));
+                        // 妫�鏌ユ槸鍚︿笌鐜版湁鍚堝苟鍖哄煙閲嶅彔锛屽鏋滄湁鍒欏垹闄ゆ棫鍖哄煙锛屽啀鍚堝苟鏂板尯鍩�
+                        CellRangeAddress newRegion = new CellRangeAddress((x1 - 1), x2, y, y);
+                        handleOverlappingRegions(sheet, newRegion);
                     }
                     x1 = 0;
                     x2 = 0;
                 }
             }
             if (x1 > 0) {
-                sheet.addMergedRegion(new CellRangeAddress((x1 - 1), x2, y, y));
+                // 妫�鏌ユ槸鍚︿笌鐜版湁鍚堝苟鍖哄煙閲嶅彔锛屽鏋滄湁鍒欏垹闄ゆ棫鍖哄煙锛屽啀鍚堝苟鏂板尯鍩�
+                CellRangeAddress newRegion = new CellRangeAddress((x1 - 1), x2, y, y);
+                handleOverlappingRegions(sheet, newRegion);
             }
         }
     }
- 
+
+    /**
+     * 妫�鏌ユ槸鍚︿笌鐜版湁鍚堝苟鍖哄煙閲嶅彔锛屽鏋滄湁鍒欏垹闄ゆ棫鍖哄煙锛屽啀鍚堝苟鏂板尯鍩�
+     * @param sheet Excel宸ヤ綔琛�
+     * @param newRegion 鏂扮殑鍚堝苟鍖哄煙
+     */
+    private static void handleOverlappingRegions(Sheet sheet, CellRangeAddress newRegion) {
+        // 绉婚櫎閲嶅彔鐨勭幇鏈夊尯鍩�
+        List<CellRangeAddress> overlappingRegions = new ArrayList<>();
+        for (int i = sheet.getNumMergedRegions() - 1; i >= 0; i--) {
+            CellRangeAddress existingRegion = sheet.getMergedRegion(i);
+            if (newRegion.intersects(existingRegion)) {
+                overlappingRegions.add(existingRegion);
+                sheet.removeMergedRegion(i);
+            }
+        }
+        // 鍚堝苟鍒版柊鍖哄煙锛堣繖閲岀畝鍗曞湴灏嗗畠浠坊鍔犲埌鏂扮殑鍚堝苟鍖哄煙鍒楄〃涓紝瀹為檯搴旂敤涓彲鑳介渶瑕佹洿澶嶆潅鐨勯�昏緫鏉ョ湡姝b�滃悎骞垛�濆尯鍩燂級
+        // 娉ㄦ剰锛歅OI鐨凜ellRangeAddress娌℃湁鎻愪緵鐩存帴鍚堝苟涓や釜鍖哄煙鐨勬柟娉曪紝鎵�浠ヨ繖閲屽彧鏄ず渚�
+        // 濡傛灉闇�瑕佺湡姝g殑鍚堝苟锛屽彲鑳介渶瑕佽嚜瀹氫箟閫昏緫鏉ヨ绠楁柊鐨勮竟鐣�
+        for (CellRangeAddress overlappingRegion : overlappingRegions) {
+            sheet.addMergedRegion(overlappingRegion);
+        }
+        sheet.addMergedRegion(newRegion);
+    }
+
+
     private static void write(HttpServletResponse response, SXSSFWorkbook book, String fileName) throws IOException {
         response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
         response.setCharacterEncoding("utf-8");
diff --git a/src/main/java/com/ruoyi/lavorissue/service/impl/LavorIssueServiceImpl.java b/src/main/java/com/ruoyi/lavorissue/service/impl/LavorIssueServiceImpl.java
index 77fe335..b85975f 100644
--- a/src/main/java/com/ruoyi/lavorissue/service/impl/LavorIssueServiceImpl.java
+++ b/src/main/java/com/ruoyi/lavorissue/service/impl/LavorIssueServiceImpl.java
@@ -20,10 +20,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -132,21 +129,19 @@
         head.add(ExcelUtils.COLUMN_MERGE);
         head.add("浼佷笟绠$悊绉�");
         head.add(ExcelUtils.COLUMN_MERGE);
-        head.add("浼佷笟绠$悊绉�2025骞�1鏈�-2025骞�3鏈堝姵淇濆彂鏀捐鍒掕〃");
+        head.add("");
         for (int i = 0; i < sys_lavor_issue.size(); i++) {
-            if (i == 0) {
-                head.add(ExcelUtils.COLUMN_MERGE);
-            } else {
-                head.add(ExcelUtils.COLUMN_MERGE);
-            }
+            head.add(ExcelUtils.COLUMN_MERGE);
         }
+
         List<Object> head1 = new ArrayList<>();
         head1.add("寮�濮嬪勾/鏈�");
         head1.add(ExcelUtils.COLUMN_MERGE);
         head1.add("缁撴潫骞�/鏈�");
         head1.add(ExcelUtils.COLUMN_MERGE);
+        head1.add("");
         for (int i = 0; i < sys_lavor_issue.size(); i++) {
-            head1.add("");
+            head1.add(ExcelUtils.COLUMN_MERGE);
         }
 
         List<Object> head2 = new ArrayList<>();
@@ -154,9 +149,11 @@
         head2.add("1");
         head2.add("2025");
         head2.add("3");
+        head2.add("浼佷笟绠$悊绉�2025骞�1鏈�-2025骞�3鏈堝姵淇濆彂鏀捐鍒掕〃");
         for (int i = 0; i < sys_lavor_issue.size(); i++) {
-            head2.add("");
+            head2.add(ExcelUtils.COLUMN_MERGE);
         }
+
         List<Object> head3 = new ArrayList<>();
         head3.add("閮ㄩ棬鍚嶇О");
         head3.add(ExcelUtils.COLUMN_MERGE);
@@ -165,12 +162,35 @@
         for (SysDictData sysDictData : sys_lavor_issue) {
             head3.add(sysDictData.getDictLabel());
         }
+        head3.add("绛惧悕");
+
+        // 濉厖鏁版嵁
+        List<Object> head4 = new ArrayList<>();
+        List<LaborIssue> laborIssues = lavorIssueMapper.selectList(null);
+        if(CollectionUtils.isEmpty(laborIssues)){
+            throw new RuntimeException("鏁版嵁涓虹┖");
+        }
+
+        Map<String, List<LaborIssue>> collect = laborIssues.stream().collect(Collectors.groupingBy(LaborIssue::getStaffNo));
+        collect.forEach((k,v)->{
+            head4.add(v.get(0).getDeptName());
+            head4.add(ExcelUtils.COLUMN_MERGE);
+            head4.add(v.get(0).getStaffName());
+            head4.add(v.get(0).getStaffNo());
+            // 鍒ゆ柇瀛楀吀鏁版嵁
+            for (SysDictData sysDictData : sys_lavor_issue) {
+                long sum = v.stream().filter(laborIssue -> laborIssue.getDictId().equals(sysDictData.getDictValue())).mapToLong(LaborIssue::getNum).sum();
+                head4.add(sum);
+            }
+
+        });
 
         List<List<Object>> sheetDataList = new ArrayList<>();
         sheetDataList.add(head);
         sheetDataList.add(head1);
         sheetDataList.add(head2);
         sheetDataList.add(head3);
+        sheetDataList.add(head4);
         ExcelUtils.export(response, "鍔充繚鍙戞斁璁″垝琛�", sheetDataList);
     }
 
diff --git a/src/main/resources/mapper/lavorissue/LavorIssueMapper.xml b/src/main/resources/mapper/lavorissue/LavorIssueMapper.xml
index fabf558..f98344e 100644
--- a/src/main/resources/mapper/lavorissue/LavorIssueMapper.xml
+++ b/src/main/resources/mapper/lavorissue/LavorIssueMapper.xml
@@ -55,6 +55,9 @@
             <if test="req.issueDate != null">
                 and t1.issue_date &lt; #{req.issueDate}
             </if>
+            <if test="req.staffId != null">
+                and t1.staff_id = #{req.staffId}
+            </if>
         </where>
     </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3