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