xuhy
9 天以前 effe9fa26b86de56258755c2d9de096048f01b23
bug修改
3个文件已修改
160 ■■■■ 已修改文件
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/utils/ExcelPoiUtils.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/vo/system/ProjectDeptDetailsChildVO.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
    }
}
ruoyi-system/src/main/java/com/ruoyi/system/utils/ExcelPoiUtils.java
@@ -9,6 +9,7 @@
import cn.hutool.core.util.ReflectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.ruoyi.system.vo.system.ProjectDeptDetailsChildVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.BeanUtils;
@@ -62,7 +63,16 @@
            downloadExcelEntityDynamic(response, entityList, objList, fileName, title, sheetName);
        }
    }
    public static <T> void exportExcel(HttpServletResponse response, String fileName, String title, String sheetName,
                                       List<T> dataList, List<ProjectDeptDetailsChildVO> projectDeptDetailsChildVOS, String headerName, String headerValue) throws Exception {
        if (CollectionUtils.isNotEmpty(dataList)) {
            ProjectDeptDetailsChildVO dataInstance = projectDeptDetailsChildVOS.get(0);
            List<ExcelExportEntity> entityList = buildExcelExportEntityList(dataInstance, headerName, "");
            List<Object> objList = convertDataListToObjList(dataList, headerName,headerValue);
            downloadExcelEntityDynamic(response, entityList, objList, fileName, title, sheetName);
        }
    }
    public static <T> void exportExcel(HttpServletResponse response, String fileName, String title, String sheetName,
                                       List<T> dataList, String headerName, String headerValue, String ignoreCol) throws Exception {
        if (CollectionUtils.isNotEmpty(dataList)) {
@@ -82,7 +92,7 @@
     * @return Excel导出实体列表
     * @throws IllegalAccessException 如果无法访问字段
     */
    private static <T> List<ExcelExportEntity> buildExcelExportEntityList(T t, String headerName, String ignoreCol) throws IllegalAccessException {
    public static <T> List<ExcelExportEntity> buildExcelExportEntityList(T t, String headerName, String ignoreCol) throws IllegalAccessException {
        List<ExcelExportEntity> entityList = new ArrayList<>();
        Field[] fields = t.getClass().getDeclaredFields();
        int index = 0;
ruoyi-system/src/main/java/com/ruoyi/system/vo/system/ProjectDeptDetailsChildVO.java
@@ -15,34 +15,42 @@
public class ProjectDeptDetailsChildVO  {
    @ApiModelProperty("片区名称")
    @Excel(name = "片区名称", width = 20)
    @Excel(name = "片区名称", width = 20,needMerge = true)
    private String projectChildName;
    @ApiModelProperty("保洁员数量")
    @Excel(name = "巡检保洁员数", width = 20)
    @Excel(name = "巡检保洁员数", width = 20,needMerge = true)
    private Integer cleanerCount;
    @ApiModelProperty("作业类型分类")
    @ExcelCollection(name = "作业类型分类")
    private List<LocationTypeListByProjectVO> locationTypeList;
    @ApiModelProperty("任务情况汇总")
    @ExcelCollection(name = "任务情况汇总")
    private List<TaskSummaryVO> taskSummaryVOS;
    @ApiModelProperty("片区id")
    private String projectId;
    @ApiModelProperty("总数")
    @Excel(name = "总数", width = 20,needMerge = true)
    private Integer total;
    @ApiModelProperty("清洁合格")
    @Excel(name = "清洁合格", width = 20,needMerge = true)
    private Integer num1;
    @ApiModelProperty("清洁不合格")
    @Excel(name = "清洁不合格", width = 20,needMerge = true)
    private Integer num2;
    @ApiModelProperty("未执行任务")
    @Excel(name = "未执行任务", width = 20,needMerge = true)
    private Integer num3;
    @ApiModelProperty("待整改任务")
    @Excel(name = "待整改任务", width = 20,needMerge = true)
    private Integer num4;
    @ApiModelProperty("审核通过任务")
    @Excel(name = "审核通过任务", width = 20,needMerge = true)
    private Integer num5;
    @ApiModelProperty("超时未执行任务")
    @Excel(name = "超时未执行任务", width = 20,needMerge = true)
    private Integer num6;
    @ApiModelProperty("整改完成任务")
    @Excel(name = "整改完成任务", width = 20,needMerge = true)
    private Integer num7;
    @ApiModelProperty("任务情况汇总")
//    @ExcelCollection(name = "任务情况汇总")
    private List<TaskSummaryVO> taskSummaryVOS;
    @ApiModelProperty("作业类型分类")
    @ExcelCollection(name = "作业类型分类")
    private List<LocationTypeListByProjectVO> locationTypeList;
}