package com.ruoyi.web.controller.api; 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; import com.ruoyi.common.core.domain.BaseModel; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.WebUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.model.*; import com.ruoyi.system.query.*; import com.ruoyi.system.service.*; import com.ruoyi.system.utils.ExcelPoiUtils; import com.ruoyi.system.vo.system.*; import com.ruoyi.web.util.OssUploadUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.models.auth.In; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import oshi.driver.mac.net.NetStat; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** *

* 任务申诉 前端控制器 *

* * @author xiaochen * @since 2025-05-28 */ @Api(tags = "绩效报表") @RestController @RequestMapping("/report") public class ReportController { @Resource private TTaskCleanService taskCleanerService; @Resource private TTaskDetailService taskDetailService; @Resource private TLocationTypeService locationTypeService; @Resource private TLocationService locationService; @Resource private TProjectDeptService projectDeptService; @Resource private TTaskDetailService tTaskDetailService; @Resource private TDeptService deptService; @Resource private TTemplateCountService templateCountService; @Resource private ISysUserService sysUserService; @Resource private TDictDataService dictDataService; @Resource private TokenService tokenService; @Resource private TTemplateService templateService; @Resource private TTemplateDetailService templateDetailService; @Resource private TLeaveService leaveService; @Resource private TInspectorService inspectorService; @Resource private TCleanerService cleanerService; @ApiOperation(value = "任务进度分页列表查询") @PostMapping(value = "/taskProgress") public R> taskProgress(@RequestBody TaskProgressQuery query) { List sysUsers = sysUserService.selectAllList(); if (StringUtils.hasLength(query.getDeptName())) { List projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); List deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); projectIds.addAll(deptIds); if (projectIds.isEmpty()) { return R.ok(new PageInfo<>()); } // 用户ids List collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 && projectIds.contains(e.getDeptId())).map(SysUser::getUserId) .collect(Collectors.toList()); List collect1 = sysUsers.stream().filter(e -> e.getDeptType() == 2 && deptIds.contains(e.getDeptId())).map(SysUser::getUserId) .collect(Collectors.toList()); collect.addAll(collect1); if (collect.isEmpty()) { return R.ok(new PageInfo<>()); } query.setPatrolInspectorIds(collect); if (StringUtils.hasLength(query.getPhonenumber())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()) { return R.ok(new PageInfo<>()); } else { patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); query.setPatrolInspectorIds(patrolInspectorIds); } } } if (StringUtils.hasLength(query.getPhonenumber())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()) { return R.ok(new PageInfo<>()); } if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()) { // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); } PageInfo progressListVOPageInfo = taskCleanerService.taskProgress(query); List records = progressListVOPageInfo.getRecords(); List templates = templateService.list(); List templateDetails = templateDetailService.list(); for (ProgressListVO record : records) { SysUser sysUser1 = sysUsers.stream().filter(sysUser -> sysUser.getUserId().equals(record.getUserId())).findFirst().orElse(null); if (sysUser1 != null) { if (sysUser1.getDeptType() == 1) { TProjectDept tProjectDept = projectDeptService.getById(sysUser1.getDeptId()); if (tProjectDept != null) { if (!tProjectDept.getParentId().equals("0")) { TProjectDept tProjectDept1 = projectDeptService.getById(tProjectDept.getParentId()); if (tProjectDept1 != null) { record.setDeptName(tProjectDept1.getProjectName() + ">" + tProjectDept.getProjectName()); } } else { record.setDeptName(tProjectDept.getProjectName()); } } } else { TDept tDept = deptService.getById(sysUser1.getDeptId()); if (tDept != null) { record.setDeptName(tDept.getDeptName()); } } } TTemplate tTemplate = templates.stream().filter(e -> e.getId().equals(record.getTemplateId())).findFirst().orElse(null); record.setNum1(1); if (Objects.nonNull(tTemplate)) { TTemplateCount templateCount = templateCountService.lambdaQuery().eq(TTemplateCount::getUserId, record.getUserId()) .eq(TTemplateCount::getTemplateId, tTemplate.getId()) .orderByDesc(TTemplateCount::getCreateTime).last("limit 1").one(); if (templateCount != null) { record.setNum1(templateCount.getTaskCount()); } // todo 应生成计划数 LocalDateTime createTime = tTemplate.getCreateTime(); // 转化为yyyy-MM-dd字符串 StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))).append(" 至 "); List tTemplateDetail = templateDetails.stream().filter(e -> e.getTemplateId().equals(record.getTemplateId())).collect(Collectors.toList()); int temp = 0; if (!tTemplateDetail.isEmpty()) { for (TTemplateDetail templateDetail : tTemplateDetail) { Integer cycle = templateDetail.getCycle(); Integer cycleType = templateDetail.getCycleType(); switch (cycleType) { case 1: temp = cycle; break; case 2: temp = cycle * 7; break; case 3: temp = cycle * 30; break; case 4: temp = cycle * 90; break; case 5: temp = cycle * 365; break; } } LocalDateTime localDateTime = tTemplate.getCreateTime().plusDays(temp - 1); stringBuilder.append(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); record.setTemplateDate(stringBuilder.toString()); } } if (record.getNum1() != 0) { record.setNum4(new BigDecimal((double) record.getNum2() / (double) record.getNum1() * 100).setScale(2, RoundingMode.HALF_DOWN)); } else { record.setNum4(new BigDecimal(0)); } String templateId = record.getTemplateId(); Long count = leaveService.lambdaQuery() .eq(TLeave::getTemplateId, templateId) .eq(TLeave::getLeavePerson, record.getUserId()) .eq(TLeave::getAuditStatus, 2).count(); record.setNum5(count); } progressListVOPageInfo.setRecords(records); return R.ok(progressListVOPageInfo); } @ApiOperation(value = "任务进度导出") @Log(title = "任务进度导出", businessType = BusinessType.OTHER) @PostMapping(value = "/taskProgressExport") public void taskProgressExport(@RequestBody TaskProgressQuery query) { List sysUsers = sysUserService.selectAllList(); if (StringUtils.hasLength(query.getDeptName())) { List list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list(); List projectIds = list .stream().map(TProjectDept::getId).collect(Collectors.toList()); List deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); for (TProjectDept projectDept : list) { if (projectDept.getParentId().equals("0")){ List list1 = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()).list(); List collect = list1.stream().map(TProjectDept::getId).collect(Collectors.toList()); projectIds.addAll(collect); } } projectIds.addAll(deptIds); if (projectIds.isEmpty()) { projectIds.add("0"); } // 用户ids List collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 && projectIds.contains(e.getDeptId())).map(SysUser::getUserId) .collect(Collectors.toList()); List collect1 = sysUsers.stream().filter(e -> e.getDeptType() == 2 && deptIds.contains(e.getDeptId())).map(SysUser::getUserId) .collect(Collectors.toList()); collect.addAll(collect1); if (collect.isEmpty()) { projectIds.add("0"); } query.setPatrolInspectorIds(collect); if (StringUtils.hasLength(query.getPhonenumber())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()) { patrolInspectorIds.add(0L); } else { patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); query.setPatrolInspectorIds(patrolInspectorIds); } } } if (StringUtils.hasLength(query.getPhonenumber())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()) { patrolInspectorIds.add(0L); } if (!query.getPatrolInspectorIds().isEmpty()) { // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); } List records = taskCleanerService.taskProgressExport(query); List templates = templateService.list(); List templateDetails = templateDetailService.list(); for (ProgressListVO record : records) { SysUser sysUser1 = sysUsers.stream().filter(sysUser -> sysUser.getUserId().equals(record.getUserId())).findFirst().orElse(null); if (sysUser1 != null) { if (sysUser1.getDeptType() == 1) { TProjectDept tProjectDept = projectDeptService.getById(sysUser1.getDeptId()); if (tProjectDept != null) { if (!tProjectDept.getParentId().equals("0")) { TProjectDept tProjectDept1 = projectDeptService.getById(tProjectDept.getParentId()); if (tProjectDept1 != null) { record.setDeptName(tProjectDept1.getProjectName() + ">" + tProjectDept.getProjectName()); } } else { record.setDeptName(tProjectDept.getProjectName()); } } } else { TDept tDept = deptService.getById(sysUser1.getDeptId()); if (tDept != null) { record.setDeptName(tDept.getDeptName()); } } } TTemplate tTemplate = templates.stream().filter(e -> e.getId().equals(record.getTemplateId())).findFirst().orElse(null); // todo 应生成计划数 record.setNum1(1); LocalDateTime createTime = tTemplate.getCreateTime(); // 转化为yyyy-MM-dd字符串 StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))).append(" 至 "); List tTemplateDetail = templateDetails.stream().filter(e -> e.getTemplateId().equals(record.getTemplateId())).collect(Collectors.toList()); int temp = 0; if (!tTemplateDetail.isEmpty()) { for (TTemplateDetail templateDetail : tTemplateDetail) { Integer cycle = templateDetail.getCycle(); Integer cycleType = templateDetail.getCycleType(); switch (cycleType) { case 1: temp = cycle; break; case 2: temp = cycle * 7; break; case 3: temp = cycle * 30; break; case 4: temp = cycle * 90; break; case 5: temp = cycle * 365; break; } } LocalDateTime localDateTime = tTemplate.getCreateTime().plusDays(temp); stringBuilder.append(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); record.setTemplateDate(stringBuilder.toString()); if (record.getNum2() != 0) { record.setNum4(new BigDecimal((double) record.getNum2() / (double) record.getNum1() * 100).setScale(2, RoundingMode.HALF_DOWN)); } else { record.setNum4(new BigDecimal(0)); } } String templateId = record.getTemplateId(); Long count = leaveService.lambdaQuery() .eq(TLeave::getTemplateId, templateId) .eq(TLeave::getLeavePerson, record.getUserId()) .eq(TLeave::getAuditStatus, 2).count(); record.setNum5(count); } //1.获取excel模板 Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), ProgressListVO.class, records); HttpServletResponse response = WebUtils.response(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("任务进度列表.xls", "utf-8"); response.setHeader("Content-dispodition", "attachment;filename=" + fileName); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } @ApiOperation(value = "任务报表") @PostMapping(value = "/taskDetails") public R> taskDetails(@RequestBody TaskDetailsQuery query) { List locationTypeList = locationTypeService.list(); List locations = locationService.list(); LambdaQueryWrapper tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime()) && StringUtils.hasLength(query.getEndTime())) { String endTime = query.getEndTime(); String replace = endTime.replace(" 00:00:00", " 23:59:59"); query.setEndTime(replace); tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, query.getStartTime()); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, query.getEndTime()); } List res = new ArrayList<>(); List tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); if (CollectionUtils.isEmpty(tasks)) { return R.ok(res); } List taskDetails = taskDetailService.lambdaQuery().orderByDesc(BaseModel::getCreateTime).list(); List collect = tasks.stream().map(TTask::getProjectId).distinct().collect(Collectors.toList()); List projectDepts = projectDeptService.list(); List strings = new ArrayList<>(); // 片区ids 反查项目部 List list1 = projectDeptService.lambdaQuery().in(TProjectDept::getId, collect).list(); for (TProjectDept tProjectDept : list1) { TProjectDept tProjectDept1 = projectDepts.stream().filter(e -> e.getId().equals(tProjectDept.getParentId())).findFirst().orElse(null); if (tProjectDept1 != null && !strings.contains(tProjectDept1.getId())) { ProjectDeptDetailsVO projectDeptDetailsVO = new ProjectDeptDetailsVO(); projectDeptDetailsVO.setProjectName(tProjectDept1.getProjectName()); List collect1 = list1.stream().filter(e -> e.getParentId().equals(tProjectDept1.getId())).collect(Collectors.toList()); List projectDeptDetailsChildVOS = new ArrayList<>(); for (TProjectDept projectDept : collect1) { ProjectDeptDetailsChildVO projectDeptDetailsChildVO = new ProjectDeptDetailsChildVO(); projectDeptDetailsChildVO.setProjectChildName(projectDept.getProjectName()); projectDeptDetailsChildVO.setProjectId(projectDept.getId()); projectDeptDetailsChildVOS.add(projectDeptDetailsChildVO); } projectDeptDetailsVO.setProjectChild(projectDeptDetailsChildVOS); res.add(projectDeptDetailsVO); strings.add(tProjectDept1.getId()); } } List locationTypeListByProjectVOS = new ArrayList<>(); for (TLocationType tLocationType : locationTypeList) { LocationTypeListByProjectVO locationTypeListByProjectVO = new LocationTypeListByProjectVO(); locationTypeListByProjectVO.setLocationTypeName(tLocationType.getLocationName()); locationTypeListByProjectVO.setLocationNum(0); locationTypeListByProjectVO.setId(tLocationType.getId()); locationTypeListByProjectVOS.add(locationTypeListByProjectVO); } for (ProjectDeptDetailsVO re : res) { for (ProjectDeptDetailsChildVO projectDeptDetailsChildVO : re.getProjectChild()) { int cleanerCount = cleanerService.lambdaQuery().eq(TCleaner::getProjectId, projectDeptDetailsChildVO.getProjectId()).list().size(); projectDeptDetailsChildVO.setCleanerCount(cleanerCount); List locationTypeListByProjectVOS1 = new ArrayList<>(); for (LocationTypeListByProjectVO locationTypeListByProjectVO : locationTypeListByProjectVOS) { LocationTypeListByProjectVO temp = new LocationTypeListByProjectVO(); BeanUtils.copyProperties(locationTypeListByProjectVO, temp); List locationIds = locations.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId()) && e.getLocationType().equals(locationTypeListByProjectVO.getId())) .map(TLocation::getId).collect(Collectors.toList()); if (locationIds.isEmpty()) { locationTypeListByProjectVO.setLocationNum(0); } else { List taskList = tasks.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId()) && locationIds.contains(e.getLocationId())).collect(Collectors.toList()); Integer count = taskList.size(); temp.setLocationNum(count); } locationTypeListByProjectVOS1.add(temp); } List taskList = tasks.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId()) ).collect(Collectors.toList()); int total = taskList.size(); int num1 = 0; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; int num7 = 0; for (TTask tTask : taskList) { TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId()) && e.getClearStatus() != null).findFirst().orElse(null); if (tTaskDetail != null && (tTask.getStatus() == 5 || tTask.getStatus() == 6)) { switch (tTaskDetail.getClearStatus()) { case 1: num1++; break; case 2: num2++; break; } } // 任务状态:1未执行、2超时、3待确认、4待整改、5整改完成、6已完成 switch (tTask.getStatus()) { case 1: if (tTaskDetail == null) { num3++; } break; case 2: num6++; break; case 3: break; case 4: num4++; break; case 5: num7++; break; case 6: num5++; break; } } 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.setLocationTypeList(locationTypeListByProjectVOS1); } } return R.ok(res); } @ApiOperation(value = "任务报表导出") @PostMapping(value = "/taskDetailsExport") public void taskDetailsExport(@RequestBody TaskDetailsQuery query, HttpServletResponse response) throws IOException { List locationTypeList = locationTypeService.list(); List locations = locationService.list(); LambdaQueryWrapper tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime()) && StringUtils.hasLength(query.getEndTime())) { String endTime = query.getEndTime(); String replace = endTime.replace(" 00:00:00", " 23:59:59"); query.setEndTime(replace); tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, query.getStartTime()); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, query.getEndTime()); } List res = new ArrayList<>(); List tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); List taskDetails = taskDetailService.lambdaQuery().orderByDesc(BaseModel::getCreateTime).list(); List collect = tasks.stream().map(TTask::getProjectId).distinct().collect(Collectors.toList()); List projectDepts = projectDeptService.list(); List strings = new ArrayList<>(); // 片区ids 反查项目部 List list1 = projectDeptService.lambdaQuery().in(TProjectDept::getId, collect).list(); for (TProjectDept tProjectDept : list1) { TProjectDept tProjectDept1 = projectDepts.stream().filter(e -> e.getId().equals(tProjectDept.getParentId())).findFirst().orElse(null); if (tProjectDept1 != null && !strings.contains(tProjectDept1.getId())) { ProjectDeptDetailsVO projectDeptDetailsVO = new ProjectDeptDetailsVO(); projectDeptDetailsVO.setProjectName(tProjectDept1.getProjectName()); List collect1 = list1.stream().filter(e -> e.getParentId().equals(tProjectDept1.getId())).collect(Collectors.toList()); List projectDeptDetailsChildVOS = new ArrayList<>(); for (TProjectDept projectDept : collect1) { ProjectDeptDetailsChildVO projectDeptDetailsChildVO = new ProjectDeptDetailsChildVO(); projectDeptDetailsChildVO.setProjectChildName(projectDept.getProjectName()); projectDeptDetailsChildVO.setProjectId(projectDept.getId()); projectDeptDetailsChildVOS.add(projectDeptDetailsChildVO); } projectDeptDetailsVO.setProjectChild(projectDeptDetailsChildVOS); res.add(projectDeptDetailsVO); strings.add(tProjectDept1.getId()); } } List locationTypeListByProjectVOS = new ArrayList<>(); for (TLocationType tLocationType : locationTypeList) { LocationTypeListByProjectVO locationTypeListByProjectVO = new LocationTypeListByProjectVO(); locationTypeListByProjectVO.setLocationTypeName(tLocationType.getLocationName()); locationTypeListByProjectVO.setLocationNum(0); locationTypeListByProjectVO.setId(tLocationType.getId()); locationTypeListByProjectVOS.add(locationTypeListByProjectVO); } for (ProjectDeptDetailsVO re : res) { for (ProjectDeptDetailsChildVO projectDeptDetailsChildVO : re.getProjectChild()) { int cleanerCount = cleanerService.lambdaQuery().eq(TCleaner::getProjectId, projectDeptDetailsChildVO.getProjectId()).list().size(); projectDeptDetailsChildVO.setCleanerCount(cleanerCount); List locationTypeListByProjectVOS1 = new ArrayList<>(); for (LocationTypeListByProjectVO locationTypeListByProjectVO : locationTypeListByProjectVOS) { LocationTypeListByProjectVO temp = new LocationTypeListByProjectVO(); BeanUtils.copyProperties(locationTypeListByProjectVO, temp); List locationIds = locations.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId()) && e.getLocationType().equals(locationTypeListByProjectVO.getId())) .map(TLocation::getId).collect(Collectors.toList()); if (locationIds.isEmpty()) { locationTypeListByProjectVO.setLocationNum(0); } else { List taskList = tasks.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId()) && locationIds.contains(e.getLocationId())).collect(Collectors.toList()); Integer count = taskList.size(); temp.setLocationNum(count); } locationTypeListByProjectVOS1.add(temp); } List taskList = tasks.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId()) ).collect(Collectors.toList()); int total = taskList.size(); int num1 = 0; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; int num7 = 0; for (TTask tTask : taskList) { TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId()) && e.getClearStatus() != null).findFirst().orElse(null); if (tTaskDetail != null && (tTask.getStatus() == 5 || tTask.getStatus() == 6)) { switch (tTaskDetail.getClearStatus()) { case 1: num1++; break; case 2: num2++; break; } } // 任务状态:1未执行、2超时、3待确认、4待整改、5整改完成、6已完成 switch (tTask.getStatus()) { case 1: if (tTaskDetail == null) { num3++; } break; case 2: num6++; break; case 3: break; case 4: num4++; break; case 5: num7++; break; case 6: num5++; break; } } 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.setLocationTypeList(locationTypeListByProjectVOS1); } } Set allTypeNames = new LinkedHashSet<>(); for (ProjectDeptDetailsVO row : res) { for (ProjectDeptDetailsChildVO lt : row.getProjectChild()) { for (LocationTypeListByProjectVO locationTypeListByProjectVO : lt.getLocationTypeList()) { allTypeNames.add(locationTypeListByProjectVO.getLocationTypeName()); } } } List 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 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("整改完成任务", "num7", 15); excelExportEntity8.setGroupName("任务情况汇总"); entityList.add(excelExportEntity8); ExcelExportEntity excelExportEntity7 = new ExcelExportEntity("超时未执行任务", "num6", 15); excelExportEntity7.setGroupName("任务情况汇总"); entityList.add(excelExportEntity7); ExcelExportEntity excelExportEntity6 = new ExcelExportEntity("审核通过任务", "num5", 15); excelExportEntity6.setGroupName("任务情况汇总"); entityList.add(excelExportEntity6); ExcelExportEntity excelExportEntity5 = new ExcelExportEntity("待整改任务", "num4", 15); excelExportEntity5.setGroupName("任务情况汇总"); entityList.add(excelExportEntity5); ExcelExportEntity excelExportEntity4 = new ExcelExportEntity("未执行任务", "num3", 15); excelExportEntity4.setGroupName("任务情况汇总"); entityList.add(excelExportEntity4); ExcelExportEntity excelExportEntity3 = new ExcelExportEntity("清洁不合格", "num2", 15); excelExportEntity3.setGroupName("任务情况汇总"); entityList.add(excelExportEntity3); ExcelExportEntity excelExportEntity2 = new ExcelExportEntity("清洁合格", "num1", 15); excelExportEntity2.setGroupName("任务情况汇总"); entityList.add(excelExportEntity2); ExcelExportEntity excelExportEntity1 = new ExcelExportEntity("总数", "total", 15); excelExportEntity1.setGroupName("任务情况汇总"); entityList.add(excelExportEntity1); List> mapList = new ArrayList<>(); for (ProjectDeptDetailsVO projectDeptDetailsVO : res) { List projectChild = projectDeptDetailsVO.getProjectChild(); for (ProjectDeptDetailsChildVO row : projectChild) { Map 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); break; } } 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(); } @ApiOperation(value = "巡检人员报表") @PostMapping(value = "/patrolInspectorList") public R> patrolInspectorList(@RequestBody PatrolInspectorQuery query) { List sysUsers = sysUserService.selectAllList(); LambdaQueryWrapper tLeaveLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime())) { tLeaveLambdaQueryWrapper.ge(TLeave::getCreateTime, query.getStartTime() + " :00:00:00"); tLeaveLambdaQueryWrapper.le(TLeave::getCreateTime, query.getEndTime() + " :23:59:59"); } tLeaveLambdaQueryWrapper.eq(TLeave::getAuditStatus, 2); List leaves = leaveService.list(tLeaveLambdaQueryWrapper); if (StringUtils.hasLength(query.getDeptName())) { List projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); List deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); projectIds.addAll(deptIds); if (projectIds.isEmpty()) { return R.ok(new ArrayList<>()); } query.setDeptIds(projectIds); if (StringUtils.hasLength(query.getPhonenumber())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().contains(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()) { return R.ok(new ArrayList<>()); } query.setPatrolInspectorIds(patrolInspectorIds); } if (StringUtils.hasLength(query.getNickName())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getNickName().contains(query.getNickName()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()) { return R.ok(new ArrayList<>()); } query.setPatrolInspectorIds(patrolInspectorIds); } } if (StringUtils.hasLength(query.getPhonenumber())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().contains(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds() != null && !query.getPatrolInspectorIds().isEmpty()) { // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()) { return R.ok(new ArrayList<>()); } } if (StringUtils.hasLength(query.getNickName())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getNickName().contains(query.getNickName()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds() != null && !query.getPatrolInspectorIds().isEmpty()) { // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()) { return R.ok(new ArrayList<>()); } } if (query.getDeptIds() != null && !query.getDeptIds().isEmpty()) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> query.getDeptIds().contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds() != null && !query.getPatrolInspectorIds().isEmpty()) { // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()) { return R.ok(new ArrayList<>()); } } List res = new ArrayList<>(); LambdaQueryWrapper tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime())) { tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, query.getStartTime() + " :00:00:00"); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, query.getEndTime() + " :23:59:59"); } if (query.getPatrolInspectorIds() != null && !query.getPatrolInspectorIds().isEmpty()) { tTaskLambdaQueryWrapper.in(TTask::getPatrolInspector, query.getPatrolInspectorIds()); sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } List tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList()); for (SysUser sysUser : sysUsers) { PatrolInspectorVO patrolInspectorVO = new PatrolInspectorVO(); patrolInspectorVO.setNickName(sysUser.getNickName()); patrolInspectorVO.setPhonenumber(sysUser.getPhonenumber()); if (sysUser.getDeptType() == 1) { TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId()); if (tProjectDept != null && !tProjectDept.getParentId().equals("0")) { TProjectDept tProjectDept1 = projectDeptService.getById(tProjectDept.getParentId()); if (tProjectDept1 != null) patrolInspectorVO.setDeptName(tProjectDept1.getProjectName() + ">" + tProjectDept.getProjectName()); } else { patrolInspectorVO.setDeptName(tProjectDept.getProjectName()); } } else { TDept tDept = deptService.getById(sysUser.getDeptId()); if (tDept != null) patrolInspectorVO.setDeptName(tDept.getDeptName()); } // 查询巡检员任务ids List taskIds = tasks.stream().filter(e -> e.getPatrolInspector().equals(sysUser.getUserId() + "")).map(TTask::getId).collect(Collectors.toList()); if (taskIds.isEmpty()) { taskIds.add("-1"); } // 完成的任务 List taskIdsFinish = tasks.stream().filter(e -> (e.getStatus() == 5 || e.getStatus() == 6) && e.getPatrolInspector().equals(sysUser.getUserId() + "")).map(TTask::getId).collect(Collectors.toList()); if (taskIdsFinish.isEmpty()) { taskIdsFinish.add("-1"); } List list = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus, 1) .eq(TTaskDetail::getHandleType, 1) .isNotNull(TTaskDetail::getClearStatus).orderByDesc(BaseModel::getCreateTime) .in(!taskIds.isEmpty(), TTaskDetail::getTaskId, taskIdsFinish).list(); list = new ArrayList<>(list.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); // 查询clearStatus为1的数量 List clearStatus1 = list.stream().filter(e -> e.getClearStatus().equals(1)).collect(Collectors.toList()); List clearStatus2 = list.stream().filter(e -> e.getClearStatus().equals(2)).collect(Collectors.toList()); List taskList = tasks.stream().filter(e -> e.getPatrolInspector().equals(sysUser.getUserId() + "")).collect(Collectors.toList()); patrolInspectorVO.setTotal(taskList.size()); patrolInspectorVO.setNum1(clearStatus1.size()); patrolInspectorVO.setNum2(clearStatus2.size()); patrolInspectorVO.setNum3(!clearStatus1.isEmpty() ? (new BigDecimal(clearStatus1.size())) .divide(new BigDecimal(clearStatus1.size() + clearStatus2.size()), 2, RoundingMode.HALF_DOWN) .multiply(new BigDecimal(100)) : BigDecimal.ZERO); // 未执行 List status1 = taskList.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList()); List status2 = taskList.stream().filter(e -> e.getStatus() == 3).collect(Collectors.toList()); List status3 = taskList.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList()); List status4 = taskList.stream().filter(e -> e.getStatus() == 4).collect(Collectors.toList()); List status5 = taskList.stream().filter(e -> e.getStatus() == 5).collect(Collectors.toList()); List status6 = taskList.stream().filter(e -> e.getStatus() == 6).collect(Collectors.toList()); patrolInspectorVO.setNum4(status1.size()); patrolInspectorVO.setNum5(status2.size()); patrolInspectorVO.setNum6(status3.size()); patrolInspectorVO.setNum7(status4.size()); patrolInspectorVO.setNum8(status5.size()); patrolInspectorVO.setNum9(!status5.isEmpty() || !status4.isEmpty() ? new BigDecimal(status5.size()) .divide(new BigDecimal(status4.size()).add(new BigDecimal(status5.size())), 2, RoundingMode.HALF_DOWN) .multiply(new BigDecimal(100)) : BigDecimal.ZERO); patrolInspectorVO.setNum10(status6.size()); patrolInspectorVO.setNum11(!taskList.isEmpty() ? new BigDecimal(status6.size()).divide(new BigDecimal(taskList.size()), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)) : BigDecimal.ZERO); List collect1 = leaves.stream().filter(e -> e.getLeavePerson().equals(sysUser.getUserId() + "")).collect(Collectors.toList()); patrolInspectorVO.setNum12(collect1.size()); res.add(patrolInspectorVO); } return R.ok(res); } @ApiOperation(value = "巡检人员报表导出") @PostMapping(value = "/patrolInspectorListExport") @Log(title = "巡检人员报表导出", businessType = BusinessType.OTHER) public void patrolInspectorListExport(@RequestBody PatrolInspectorQuery query) { List sysUsers = sysUserService.selectAllList(); LambdaQueryWrapper tLeaveLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime())) { tLeaveLambdaQueryWrapper.ge(TLeave::getCreateTime, query.getStartTime() + " :00:00:00"); tLeaveLambdaQueryWrapper.le(TLeave::getCreateTime, query.getEndTime() + " :23:59:59"); } tLeaveLambdaQueryWrapper.eq(TLeave::getAuditStatus, 2); List leaves = leaveService.list(tLeaveLambdaQueryWrapper); if (StringUtils.hasLength(query.getDeptName())) { List list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list(); List projectIds = list .stream().map(TProjectDept::getId).collect(Collectors.toList()); List deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); for (TProjectDept projectDept : list) { if (projectDept.getParentId().equals("0")){ List list1 = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()).list(); List collect = list1.stream().map(TProjectDept::getId).collect(Collectors.toList()); projectIds.addAll(collect); } } projectIds.addAll(deptIds); if (projectIds.isEmpty()) { projectIds.add("-1"); } query.setDeptIds(projectIds); if (StringUtils.hasLength(query.getPhonenumber())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()) { patrolInspectorIds.add(0L); } query.setPatrolInspectorIds(patrolInspectorIds); } if (StringUtils.hasLength(query.getNickName())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getNickName().contains(query.getNickName()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()) { patrolInspectorIds.add(0L); } query.setPatrolInspectorIds(patrolInspectorIds); } } if (StringUtils.hasLength(query.getPhonenumber())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds() != null && !query.getPatrolInspectorIds().isEmpty()) { // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()) { patrolInspectorIds.add(0L); } } if (StringUtils.hasLength(query.getNickName())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getNickName().contains(query.getNickName()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds() != null && !query.getPatrolInspectorIds().isEmpty()) { // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()) { patrolInspectorIds.add(0L); } } if (query.getDeptIds() != null && !query.getDeptIds().isEmpty()) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> query.getDeptIds().contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds() != null && !query.getPatrolInspectorIds().isEmpty()) { // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()) { patrolInspectorIds.add(0L); } } List res = new ArrayList<>(); LambdaQueryWrapper tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime())) { tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, query.getStartTime() + " :00:00:00"); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, query.getEndTime() + " :23:59:59"); } if (query.getPatrolInspectorIds() != null && !query.getPatrolInspectorIds().isEmpty()) { tTaskLambdaQueryWrapper.in(TTask::getPatrolInspector, query.getPatrolInspectorIds()); sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } List tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList()); for (SysUser sysUser : sysUsers) { PatrolInspectorVO patrolInspectorVO = new PatrolInspectorVO(); patrolInspectorVO.setNickName(sysUser.getNickName()); patrolInspectorVO.setPhonenumber(sysUser.getPhonenumber()); if (sysUser.getDeptType() == 1) { TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId()); if (tProjectDept != null && !tProjectDept.getParentId().equals("0")) { TProjectDept tProjectDept1 = projectDeptService.getById(tProjectDept.getParentId()); if (tProjectDept1 != null) patrolInspectorVO.setDeptName(tProjectDept1.getProjectName() + ">" + tProjectDept.getProjectName()); } else { patrolInspectorVO.setDeptName(tProjectDept.getProjectName()); } } else { TDept tDept = deptService.getById(sysUser.getDeptId()); if (tDept != null) patrolInspectorVO.setDeptName(tDept.getDeptName()); } // 查询巡检员任务ids List taskIds = tasks.stream().filter(e -> e.getPatrolInspector().equals(sysUser.getUserId() + "")).map(TTask::getId).collect(Collectors.toList()); if (taskIds.isEmpty()) { taskIds.add("-1"); } // 完成的任务 List taskIdsFinish = tasks.stream().filter(e -> (e.getStatus() == 5 || e.getStatus() == 6) && e.getPatrolInspector().equals(sysUser.getUserId() + "")).map(TTask::getId).collect(Collectors.toList()); if (taskIdsFinish.isEmpty()) { taskIdsFinish.add("-1"); } List list = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus, 1) .eq(TTaskDetail::getHandleType, 1) .isNotNull(TTaskDetail::getClearStatus).orderByDesc(BaseModel::getCreateTime) .in(!taskIds.isEmpty(), TTaskDetail::getTaskId, taskIdsFinish).list(); list = new ArrayList<>(list.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); // 查询clearStatus为1的数量 List clearStatus1 = list.stream().filter(e -> e.getClearStatus().equals(1)).collect(Collectors.toList()); List clearStatus2 = list.stream().filter(e -> e.getClearStatus().equals(2)).collect(Collectors.toList()); List taskList = tasks.stream().filter(e -> e.getPatrolInspector().equals(sysUser.getUserId() + "")).collect(Collectors.toList()); patrolInspectorVO.setTotal(taskList.size()); patrolInspectorVO.setNum1(clearStatus1.size()); patrolInspectorVO.setNum2(clearStatus2.size()); patrolInspectorVO.setNum3(!clearStatus1.isEmpty() ? (new BigDecimal(clearStatus1.size())) .divide(new BigDecimal(clearStatus1.size() + clearStatus2.size()), 2, RoundingMode.HALF_DOWN) .multiply(new BigDecimal(100)) : BigDecimal.ZERO); // 未执行 List status1 = taskList.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList()); List status2 = taskList.stream().filter(e -> e.getStatus() == 3).collect(Collectors.toList()); List status3 = taskList.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList()); List status4 = taskList.stream().filter(e -> e.getStatus() == 4).collect(Collectors.toList()); List status5 = taskList.stream().filter(e -> e.getStatus() == 5).collect(Collectors.toList()); List status6 = taskList.stream().filter(e -> e.getStatus() == 6).collect(Collectors.toList()); patrolInspectorVO.setNum4(status1.size()); patrolInspectorVO.setNum5(status2.size()); patrolInspectorVO.setNum6(status3.size()); patrolInspectorVO.setNum7(status4.size()); patrolInspectorVO.setNum8(status5.size()); patrolInspectorVO.setNum9(!status5.isEmpty() || !status4.isEmpty() ? new BigDecimal(status5.size()) .divide(new BigDecimal(status4.size()).add(new BigDecimal(status5.size())), 2, RoundingMode.HALF_DOWN) .multiply(new BigDecimal(100)) : BigDecimal.ZERO); patrolInspectorVO.setNum10(status6.size()); patrolInspectorVO.setNum11(!taskList.isEmpty() ? new BigDecimal(status6.size()).divide(new BigDecimal(taskList.size()), 2, RoundingMode.HALF_DOWN) : BigDecimal.ZERO); List collect1 = leaves.stream().filter(e -> e.getLeavePerson().equals(sysUser.getUserId() + "")).collect(Collectors.toList()); patrolInspectorVO.setNum12(collect1.size()); res.add(patrolInspectorVO); } //1.获取excel模板 Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), PatrolInspectorVO.class, res); HttpServletResponse response = WebUtils.response(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("巡检人员列表.xls", "utf-8"); response.setHeader("Content-dispodition", "attachment;filename=" + fileName); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } @ApiOperation(value = "随机督察报表") @PostMapping(value = "/inspectorList") public R> inspectorList(@RequestBody InspectorQuery query) { List sysUsers = sysUserService.selectAllList(); List listAll = taskCleanerService.list(); List listAllTaskIds = listAll.stream().map(TTask::getId).collect(Collectors.toList()); if (StringUtils.hasLength(query.getDeptName())) { List list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list(); List projectIds = list .stream().map(TProjectDept::getId).collect(Collectors.toList()); List deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); for (TProjectDept projectDept : list) { if (projectDept.getParentId().equals("0")){ List list1 = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()).list(); List collect = list1.stream().map(TProjectDept::getId).collect(Collectors.toList()); projectIds.addAll(collect); } } projectIds.addAll(deptIds); if (projectIds.isEmpty()) { projectIds.add("0"); } // 用户ids List collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 && projectIds.contains(e.getDeptId())).map(SysUser::getUserId) .collect(Collectors.toList()); List collect1 = sysUsers.stream().filter(e -> e.getDeptType() == 2 && deptIds.contains(e.getDeptId())).map(SysUser::getUserId) .collect(Collectors.toList()); collect.addAll(collect1); if (collect.isEmpty()) { collect.add(-1L); } query.setPatrolInspectorIds(collect); if (StringUtils.hasLength(query.getPhonenumber())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()) { patrolInspectorIds.add(-1L); } else { patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); query.setPatrolInspectorIds(patrolInspectorIds); } } } if (StringUtils.hasLength(query.getNickName())){ List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getNickName().contains(query.getNickName()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } if (patrolInspectorIds.isEmpty()){ patrolInspectorIds.add(-1L); } query.setPatrolInspectorIds(patrolInspectorIds); } if (StringUtils.hasLength(query.getPhonenumber())){ List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().contains(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } if (patrolInspectorIds.isEmpty()){ patrolInspectorIds.add(-1L); } query.setPatrolInspectorIds(patrolInspectorIds); } LambdaQueryWrapper tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); tTaskLambdaQueryWrapper.eq(TInspector::getAuditStatus, 1); tTaskLambdaQueryWrapper.isNotNull(TInspector::getClearStatus); if (StringUtils.hasLength(query.getStartTime())) { tTaskLambdaQueryWrapper.ge(TInspector::getCreateTime, query.getStartTime()); tTaskLambdaQueryWrapper.le(TInspector::getCreateTime, query.getEndTime()); } if (query.getPatrolInspectorIds() != null) { if (query.getPatrolInspectorIds().isEmpty()) { List patrolInspectorIds = query.getPatrolInspectorIds(); patrolInspectorIds.add(0L); query.setPatrolInspectorIds(patrolInspectorIds); } tTaskLambdaQueryWrapper.in(TInspector::getCommitPerson, query.getPatrolInspectorIds()); sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } List res = new ArrayList<>(); List inspectors = inspectorService.list(tTaskLambdaQueryWrapper); List users = inspectors.stream().map(TInspector::getCommitPerson).collect(Collectors.toList()); if (users.isEmpty()){ users.add("0"); } sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1&&users.contains(e.getUserId()+"")).collect(Collectors.toList()); for (SysUser sysUser : sysUsers) { InspectorVO inspectorVO = new InspectorVO(); inspectorVO.setNickName(sysUser.getNickName()); inspectorVO.setPhonenumber(sysUser.getPhonenumber()); if (sysUser.getDeptType() == 1) { TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId()); if (tProjectDept != null && !tProjectDept.getParentId().equals("0")) { TProjectDept tProjectDept1 = projectDeptService.getById(tProjectDept.getParentId()); if (tProjectDept1 != null) inspectorVO.setDeptName(tProjectDept1.getProjectName() + ">" + tProjectDept.getProjectName()); } else { inspectorVO.setDeptName(tProjectDept.getProjectName()); } } else { TDept tDept = deptService.getById(sysUser.getDeptId()); if (tDept != null) inspectorVO.setDeptName(tDept.getDeptName()); } List collect1 = listAll.stream().filter(e -> e.getPatrolInspector().equals(sysUser.getUserId() + "")).map(TTask::getId).collect(Collectors.toList()); List collect = inspectors.stream().filter(e -> collect1.contains(e.getTaskId())).collect(Collectors.toList()); inspectorVO.setTotal(collect.size()); List status1 = collect.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList()); List status2 = collect.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList()); List status4 = collect.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList()); List status5 = collect.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList()); List status6 = collect.stream().filter(e -> e.getStatus() == 3).collect(Collectors.toList()); inspectorVO.setNum1(status1.size()); inspectorVO.setNum2(status2.size()); inspectorVO.setNum3(!status1.isEmpty() || !status2.isEmpty() ? new BigDecimal(status1.size()).divide(new BigDecimal(status2.size() + status1.size()), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)) : BigDecimal.ZERO); inspectorVO.setNum4(status4.size()); inspectorVO.setNum5(status5.size()); inspectorVO.setNum6(status6.size()); inspectorVO.setNum7(!status6.isEmpty() || !status5.isEmpty() ? new BigDecimal(status6.size()).divide(new BigDecimal(status5.size() + status6.size()), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)) : new BigDecimal(0)); res.add(inspectorVO); } return R.ok(res); } @ApiOperation(value = "随机督察报表导出") @PostMapping(value = "/inspectorListExport") @Log(title = "随机督察报表导出", businessType = BusinessType.OTHER) public void inspectorListExport(@RequestBody InspectorQuery query) { query.setPatrolInspectorIds(null); List sysUsers = sysUserService.selectAllList(); List listAll = taskCleanerService.list(); List listAllTaskIds = listAll.stream().map(TTask::getId).collect(Collectors.toList()); if (StringUtils.hasLength(query.getDeptName())) { List list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list(); List projectIds = list .stream().map(TProjectDept::getId).collect(Collectors.toList()); List deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); for (TProjectDept projectDept : list) { if (projectDept.getParentId().equals("0")){ List list1 = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()).list(); List collect = list1.stream().map(TProjectDept::getId).collect(Collectors.toList()); projectIds.addAll(collect); } } projectIds.addAll(deptIds); if (projectIds.isEmpty()) { projectIds.add("0"); } // 用户ids List collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 && projectIds.contains(e.getDeptId())).map(SysUser::getUserId) .collect(Collectors.toList()); List collect1 = sysUsers.stream().filter(e -> e.getDeptType() == 2 && deptIds.contains(e.getDeptId())).map(SysUser::getUserId) .collect(Collectors.toList()); collect.addAll(collect1); if (collect.isEmpty()) { collect.add(-1L); } query.setPatrolInspectorIds(collect); if (StringUtils.hasLength(query.getPhonenumber())) { List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()) { patrolInspectorIds.add(-1L); } else { patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); query.setPatrolInspectorIds(patrolInspectorIds); } } } if (StringUtils.hasLength(query.getPhonenumber())){ List patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().contains(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } if (patrolInspectorIds.isEmpty()){ patrolInspectorIds.add(-1L); } query.setPatrolInspectorIds(patrolInspectorIds); } LambdaQueryWrapper tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); tTaskLambdaQueryWrapper.eq(TInspector::getAuditStatus, 1); tTaskLambdaQueryWrapper.isNotNull(TInspector::getClearStatus); if (StringUtils.hasLength(query.getStartTime())) { tTaskLambdaQueryWrapper.ge(TInspector::getCreateTime, query.getStartTime()); tTaskLambdaQueryWrapper.le(TInspector::getCreateTime, query.getEndTime()); } if (query.getPatrolInspectorIds() != null) { if (query.getPatrolInspectorIds().isEmpty()) { List patrolInspectorIds = query.getPatrolInspectorIds(); patrolInspectorIds.add(0L); query.setPatrolInspectorIds(patrolInspectorIds); } tTaskLambdaQueryWrapper.in(TInspector::getCommitPerson, query.getPatrolInspectorIds()); sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } List res = new ArrayList<>(); List inspectors = inspectorService.list(tTaskLambdaQueryWrapper); List users = inspectors.stream().map(TInspector::getCommitPerson).collect(Collectors.toList()); if (users.isEmpty()){ users.add("0"); } sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1&&users.contains(e.getUserId()+"")).collect(Collectors.toList()); for (SysUser sysUser : sysUsers) { InspectorVO inspectorVO = new InspectorVO(); inspectorVO.setNickName(sysUser.getNickName()); inspectorVO.setPhonenumber(sysUser.getPhonenumber()); if (sysUser.getDeptType() == 1) { TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId()); if (tProjectDept != null && !tProjectDept.getParentId().equals("0")) { TProjectDept tProjectDept1 = projectDeptService.getById(tProjectDept.getParentId()); if (tProjectDept1 != null) inspectorVO.setDeptName(tProjectDept1.getProjectName() + ">" + tProjectDept.getProjectName()); } else { inspectorVO.setDeptName(tProjectDept.getProjectName()); } } else { TDept tDept = deptService.getById(sysUser.getDeptId()); if (tDept != null) inspectorVO.setDeptName(tDept.getDeptName()); } List collect1 = listAll.stream().filter(e -> e.getPatrolInspector().equals(sysUser.getUserId() + "")).map(TTask::getId).collect(Collectors.toList()); List collect = inspectors.stream().filter(e -> collect1.contains(e.getTaskId())).collect(Collectors.toList()); inspectorVO.setTotal(collect.size()); List status1 = collect.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList()); List status2 = collect.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList()); List status4 = collect.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList()); List status5 = collect.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList()); List status6 = collect.stream().filter(e -> e.getStatus() == 3).collect(Collectors.toList()); inspectorVO.setNum1(status1.size()); inspectorVO.setNum2(status2.size()); inspectorVO.setNum3(!status1.isEmpty() || !status2.isEmpty() ? new BigDecimal(status1.size()).divide(new BigDecimal(status2.size() + status1.size()), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)) : BigDecimal.ZERO); inspectorVO.setNum4(status4.size()); inspectorVO.setNum5(status5.size()); inspectorVO.setNum6(status6.size()); inspectorVO.setNum7(!status6.isEmpty() || !status5.isEmpty() ? new BigDecimal(status6.size()).divide(new BigDecimal(status5.size() + status6.size()), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)) : new BigDecimal(0)); res.add(inspectorVO); } //1.获取excel模板 Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), InspectorVO.class, res); HttpServletResponse response = WebUtils.response(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("随机督察列表.xls", "utf-8"); response.setHeader("Content-dispodition", "attachment;filename=" + fileName); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } @ApiOperation(value = "任务报表导出模板") @PostMapping(value = "/exportExcel") public void exportExcel(@RequestBody TaskDetailsQuery query, HttpServletResponse response) throws Exception { List locationTypeList = locationTypeService.list(); List locations = locationService.list(); LambdaQueryWrapper tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime()) && StringUtils.hasLength(query.getEndTime())) { tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, query.getStartTime()); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, query.getEndTime()); } List res = new ArrayList<>(); List tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); List taskDetails = taskDetailService.lambdaQuery().orderByDesc(BaseModel::getCreateTime).list(); List collect = tasks.stream().map(TTask::getProjectId).distinct().collect(Collectors.toList()); List projectDepts = projectDeptService.list(); List strings = new ArrayList<>(); // 片区ids 反查项目部 List list1 = projectDeptService.lambdaQuery().in(TProjectDept::getId, collect).list(); for (TProjectDept tProjectDept : list1) { TProjectDept tProjectDept1 = projectDepts.stream().filter(e -> e.getId().equals(tProjectDept.getParentId())).findFirst().orElse(null); if (tProjectDept1 != null && !strings.contains(tProjectDept1.getId())) { ProjectDeptDetailsVO projectDeptDetailsVO = new ProjectDeptDetailsVO(); projectDeptDetailsVO.setProjectName(tProjectDept1.getProjectName()); List collect1 = list1.stream().filter(e -> e.getParentId().equals(tProjectDept1.getId())).collect(Collectors.toList()); List projectDeptDetailsChildVOS = new ArrayList<>(); for (TProjectDept projectDept : collect1) { ProjectDeptDetailsChildVO projectDeptDetailsChildVO = new ProjectDeptDetailsChildVO(); projectDeptDetailsChildVO.setProjectChildName(projectDept.getProjectName()); projectDeptDetailsChildVO.setProjectId(projectDept.getId()); projectDeptDetailsChildVOS.add(projectDeptDetailsChildVO); } projectDeptDetailsVO.setProjectChild(projectDeptDetailsChildVOS); res.add(projectDeptDetailsVO); strings.add(tProjectDept1.getId()); } } List locationTypeListByProjectVOS = new ArrayList<>(); for (TLocationType tLocationType : locationTypeList) { LocationTypeListByProjectVO locationTypeListByProjectVO = new LocationTypeListByProjectVO(); locationTypeListByProjectVO.setLocationTypeName(tLocationType.getLocationName()); locationTypeListByProjectVO.setLocationNum(0); locationTypeListByProjectVO.setId(tLocationType.getId()); locationTypeListByProjectVOS.add(locationTypeListByProjectVO); } for (ProjectDeptDetailsVO re : res) { List projectChild = re.getProjectChild(); for (ProjectDeptDetailsChildVO projectDeptDetailsChildVO : projectChild) { int cleanerCount = cleanerService.lambdaQuery().eq(TCleaner::getProjectId, projectDeptDetailsChildVO.getProjectId()).list().size(); projectDeptDetailsChildVO.setCleanerCount(cleanerCount); for (LocationTypeListByProjectVO locationTypeListByProjectVO : locationTypeListByProjectVOS) { List locationIds = locations.stream().filter(e -> e.getLocationType().equals(locationTypeListByProjectVO.getId())).map(TLocation::getId).collect(Collectors.toList()); if (locationIds.isEmpty()) { locationTypeListByProjectVO.setLocationNum(0); } else { List taskList = tasks.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId()) && locationIds.contains(e.getLocationId())).collect(Collectors.toList()); Integer count = taskList.size(); locationTypeListByProjectVO.setLocationNum(count); int total = taskList.size(); int num1 = 0; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; int num7 = 0; for (TTask tTask : taskList) { TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId()) && e.getClearStatus() != null).findFirst().orElse(null); if (tTaskDetail != null) { switch (tTaskDetail.getClearStatus()) { case 1: num1++; break; case 2: num2++; break; } } // 任务状态:1未执行、2超时、3待确认、4待整改、5整改完成、6已完成 switch (tTask.getStatus()) { case 1: if (tTaskDetail == null) { num3++; } break; case 2: num6++; break; case 3: break; case 4: num4++; break; case 5: num7++; break; case 6: num5++; break; } } 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.setLocationTypeList(locationTypeListByProjectVOS); } } Set allTypeNames = new LinkedHashSet<>(); for (ProjectDeptDetailsVO row : res) { for (ProjectDeptDetailsChildVO lt : row.getProjectChild()) { for (LocationTypeListByProjectVO locationTypeListByProjectVO : lt.getLocationTypeList()) { allTypeNames.add(locationTypeListByProjectVO.getLocationTypeName()); } } } List 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 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> mapList = new ArrayList<>(); for (ProjectDeptDetailsVO projectDeptDetailsVO : res) { List projectChild = projectDeptDetailsVO.getProjectChild(); for (ProjectDeptDetailsChildVO row : projectChild) { Map 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(); } }