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 < #{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