xuhy
2025-07-03 effe9fa26b86de56258755c2d9de096048f01b23
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();
    }
}