From 9b1ded672b5819c3a4a46fa7d253811bf241a6ef Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期四, 03 七月 2025 17:28:19 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java |  122 ++++++++++++++++++++++++++++++++--------
 1 files changed, 96 insertions(+), 26 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java
index eb98463..1ed32fe 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java
@@ -3,6 +3,7 @@
 
 import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.entity.ExportParams;
+import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.basic.PageInfo;
@@ -37,9 +38,7 @@
 import java.net.URLEncoder;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -1079,10 +1078,6 @@
     @ApiOperation(value = "任务报表导出模板")
     @PostMapping(value = "/exportExcel")
     public void exportExcel(@RequestBody TaskDetailsQuery query,HttpServletResponse response) throws Exception{
-        // 动态标头名称字段
-        final String headerName = "locationTypeName";
-        // 动态标头值字段
-        final String headerValue = "locationNum";
         List<TLocationType> locationTypeList = locationTypeService.list();
         List<TLocation> locations = locationService.list();
         LambdaQueryWrapper<TTask> tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -1131,7 +1126,6 @@
                 int cleanerCount = cleanerService.lambdaQuery().eq(TCleaner::getProjectId, projectDeptDetailsChildVO.getProjectId()).list().size();
                 projectDeptDetailsChildVO.setCleanerCount(cleanerCount);
                 for (LocationTypeListByProjectVO locationTypeListByProjectVO : locationTypeListByProjectVOS) {
-                    List<TaskSummaryVO> taskSummaryVOS = new ArrayList<>();
                     List<String> locationIds = locations.stream().filter(e -> e.getLocationType().equals(locationTypeListByProjectVO.getId())).map(TLocation::getId).collect(Collectors.toList());
                     if (locationIds.isEmpty()) {
                         locationTypeListByProjectVO.setLocationNum(0);
@@ -1148,7 +1142,6 @@
                         int num5 = 0;
                         int num6 = 0;
                         int num7 = 0;
-                        TaskSummaryVO taskSummaryVO = new TaskSummaryVO();
                         for (TTask tTask : taskList) {
                             TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId()) && e.getClearStatus() != null).findFirst().orElse(null);
                             if (tTaskDetail!=null){
@@ -1184,29 +1177,106 @@
                                     break;
                             }
                         }
-                        taskSummaryVO.setTotal(total);
-                        taskSummaryVO.setNum1(num1);
-                        taskSummaryVO.setNum2(num2);
-                        taskSummaryVO.setNum3(num3);
-                        taskSummaryVO.setNum4(num4);
-                        taskSummaryVO.setNum5(num5);
-                        taskSummaryVO.setNum6(num6);
-                        taskSummaryVO.setNum7(num7);
-                        taskSummaryVOS.add(taskSummaryVO);
+                        projectDeptDetailsChildVO.setTotal(total);
+                        projectDeptDetailsChildVO.setNum1(num1);
+                        projectDeptDetailsChildVO.setNum2(num2);
+                        projectDeptDetailsChildVO.setNum3(num3);
+                        projectDeptDetailsChildVO.setNum4(num4);
+                        projectDeptDetailsChildVO.setNum5(num5);
+                        projectDeptDetailsChildVO.setNum6(num6);
+                        projectDeptDetailsChildVO.setNum7(num7);
                     }
-                    projectDeptDetailsChildVO.setTaskSummaryVOS(taskSummaryVOS);
                 }
                 projectDeptDetailsChildVO.setLocationTypeList(locationTypeListByProjectVOS);
             }
         }
-        try {
-            String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy_MM_dd_HH_mm_ss"));
-            ExcelPoiUtils.exportExcel(response,  "任务报表_"+time, "任务报表导出模板",
-                    "sheet", res, headerName, headerValue);
-        } catch (Exception e) {
-            System.out.println("导出错误,"+e.getMessage());
-            throw new RuntimeException(e.getMessage());
+
+        Set<String> allTypeNames = new LinkedHashSet<>();
+        for (ProjectDeptDetailsVO row : res) {
+            for (ProjectDeptDetailsChildVO lt : row.getProjectChild()) {
+                for (LocationTypeListByProjectVO locationTypeListByProjectVO : lt.getLocationTypeList()) {
+                    allTypeNames.add(locationTypeListByProjectVO.getLocationTypeName());
+                }
+            }
         }
+
+        List<ExcelExportEntity> entityList = new ArrayList<>();
+        ExcelExportEntity excelExportEntity = new ExcelExportEntity("项目", "projectName", 15);
+        excelExportEntity.setMergeVertical(true);
+        entityList.add(excelExportEntity);
+        entityList.add(new ExcelExportEntity("片区名称", "areaName",15));
+        entityList.add(new ExcelExportEntity("巡检保洁员数", "inspectorCount",15));
+
+        // 动态添加作业类型分类
+        List<String> list = new ArrayList<>(allTypeNames);
+        Collections.reverse(list);
+        for (String typeName : list) {
+            ExcelExportEntity excelExportEntity1 = new ExcelExportEntity(typeName, typeName, 15);
+            excelExportEntity1.setGroupName("作业类型分类");
+            entityList.add(excelExportEntity1);
+        }
+
+        ExcelExportEntity excelExportEntity8 = new ExcelExportEntity("整改完成任务", "total", 15);
+        excelExportEntity8.setGroupName("任务情况汇总");
+        entityList.add(excelExportEntity8);
+        ExcelExportEntity excelExportEntity7 = new ExcelExportEntity("超时未执行任务", "total", 15);
+        excelExportEntity7.setGroupName("任务情况汇总");
+        entityList.add(excelExportEntity7);
+        ExcelExportEntity excelExportEntity6 = new ExcelExportEntity("审核通过任务", "total", 15);
+        excelExportEntity6.setGroupName("任务情况汇总");
+        entityList.add(excelExportEntity6);
+        ExcelExportEntity excelExportEntity5 = new ExcelExportEntity("待整改任务", "total", 15);
+        excelExportEntity5.setGroupName("任务情况汇总");
+        entityList.add(excelExportEntity5);
+        ExcelExportEntity excelExportEntity4 = new ExcelExportEntity("未执行任务", "total", 15);
+        excelExportEntity4.setGroupName("任务情况汇总");
+        entityList.add(excelExportEntity4);
+        ExcelExportEntity excelExportEntity3 = new ExcelExportEntity("清洁不合格", "total", 15);
+        excelExportEntity3.setGroupName("任务情况汇总");
+        entityList.add(excelExportEntity3);
+        ExcelExportEntity excelExportEntity2 = new ExcelExportEntity("清洁合格", "total", 15);
+        excelExportEntity2.setGroupName("任务情况汇总");
+        entityList.add(excelExportEntity2);
+        ExcelExportEntity excelExportEntity1 = new ExcelExportEntity("总数", "total", 15);
+        excelExportEntity1.setGroupName("任务情况汇总");
+        entityList.add(excelExportEntity1);
+
+        List<Map<String, Object>> mapList = new ArrayList<>();
+        for (ProjectDeptDetailsVO projectDeptDetailsVO : res) {
+            List<ProjectDeptDetailsChildVO> projectChild = projectDeptDetailsVO.getProjectChild();
+            for (ProjectDeptDetailsChildVO row : projectChild) {
+                Map<String, Object> map = new HashMap<>();
+                map.put("projectName", projectDeptDetailsVO.getProjectName());
+                map.put("areaName", row.getProjectChildName());
+                map.put("inspectorCount", row.getCleanerCount());
+                // 动态作业类型
+                for (LocationTypeListByProjectVO lt : row.getLocationTypeList()) {
+                    map.put(lt.getLocationTypeName(), lt.getLocationNum());
+                }
+                // 没有的类型补0
+                for (String typeName : allTypeNames) {
+                    map.putIfAbsent(typeName, 0);
+                }
+                map.put("total", row.getTotal());
+                map.put("num1", row.getNum1());
+                map.put("num2", row.getNum2());
+                map.put("num3", row.getNum3());
+                map.put("num4", row.getNum4());
+                map.put("num5", row.getNum5());
+                map.put("num6", row.getNum6());
+                map.put("num7", row.getNum7());
+                mapList.add(map);
+            }
+        }
+
+        ExportParams params = new ExportParams("任务报表", "数据表");
+        Workbook workbook = ExcelExportUtil.exportExcel(params, entityList, mapList);
+
+        response.setHeader("content-type", "application/vnd.ms-excel");
+        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("任务情况汇总.xlsx", "UTF-8"));
+        workbook.write(response.getOutputStream());
+        workbook.close();
+
     }
 
 }

--
Gitblit v1.7.1