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.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;
|
|
/**
|
* <p>
|
* 任务申诉 前端控制器
|
* </p>
|
*
|
* @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 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<PageInfo<ProgressListVO>> taskProgress(@RequestBody TaskProgressQuery query) {
|
List<SysUser> sysUsers = sysUserService.selectAllList();
|
if (StringUtils.hasLength(query.getDeptName())) {
|
List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list()
|
.stream().map(TProjectDept::getId).collect(Collectors.toList());
|
List<String> 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<Long> collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 && projectIds.contains(e.getDeptId())).map(SysUser::getUserId)
|
.collect(Collectors.toList());
|
List<Long> 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<Long> 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<Long> 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().isEmpty()) {
|
// 取交集
|
patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList());
|
}
|
query.setPatrolInspectorIds(patrolInspectorIds);
|
}
|
PageInfo<ProgressListVO> progressListVOPageInfo = taskCleanerService.taskProgress(query);
|
List<ProgressListVO> records = progressListVOPageInfo.getRecords();
|
List<TTemplate> templates = templateService.list();
|
List<TTemplateDetail> 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)){
|
// todo 应生成计划数
|
LocalDateTime createTime = tTemplate.getCreateTime();
|
// 转化为yyyy-MM-dd字符串
|
StringBuilder stringBuilder = new StringBuilder();
|
stringBuilder.append(createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))).append(" 至 ");
|
List<TTemplateDetail> 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);
|
}
|
progressListVOPageInfo.setRecords(records);
|
return R.ok(progressListVOPageInfo);
|
}
|
@ApiOperation(value = "任务进度导出")
|
@Log(title = "任务进度导出", businessType = BusinessType.EXPORT)
|
@PostMapping(value = "/taskProgressExport")
|
public void taskProgressExport(@RequestBody TaskProgressQuery query) {
|
List<SysUser> sysUsers = sysUserService.selectAllList();
|
if (StringUtils.hasLength(query.getDeptName())) {
|
List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list()
|
.stream().map(TProjectDept::getId).collect(Collectors.toList());
|
List<String> deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list()
|
.stream().map(TDept::getId).collect(Collectors.toList());
|
projectIds.addAll(deptIds);
|
if (projectIds.isEmpty()) {
|
projectIds.add("-1");
|
}
|
// 用户ids
|
List<Long> collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 && projectIds.contains(e.getDeptId())).map(SysUser::getUserId)
|
.collect(Collectors.toList());
|
List<Long> 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(0L);
|
}
|
query.setPatrolInspectorIds(collect);
|
|
if (StringUtils.hasLength(query.getPhonenumber())) {
|
List<Long> 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<Long> 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<ProgressListVO> records = taskCleanerService.taskProgressExport(query);
|
List<TTemplate> templates = templateService.list();
|
List<TTemplateDetail> 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> 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<List<ProjectDeptDetailsVO>> taskDetails(@RequestBody TaskDetailsQuery query) {
|
List<TLocationType> locationTypeList = locationTypeService.list();
|
List<TLocation> locations = locationService.list();
|
LambdaQueryWrapper<TTask> 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<ProjectDeptDetailsVO> res = new ArrayList<>();
|
List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper);
|
List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery().orderByDesc(BaseModel::getCreateTime).list();
|
List<String> collect = tasks.stream().map(TTask::getProjectId).distinct().collect(Collectors.toList());
|
List<TProjectDept> projectDepts = projectDeptService.list();
|
List<String> strings = new ArrayList<>();
|
|
// 片区ids 反查项目部
|
List<TProjectDept> 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<TProjectDept> collect1 = list1.stream().filter(e -> e.getParentId().equals(tProjectDept1.getId())).collect(Collectors.toList());
|
List<ProjectDeptDetailsChildVO> 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<LocationTypeListByProjectVO> 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<LocationTypeListByProjectVO> locationTypeListByProjectVOS1 = new ArrayList<>();
|
for (LocationTypeListByProjectVO locationTypeListByProjectVO : locationTypeListByProjectVOS) {
|
LocationTypeListByProjectVO temp = new LocationTypeListByProjectVO();
|
BeanUtils.copyProperties(locationTypeListByProjectVO, temp);
|
List<String> locationIds = locations.stream().filter(e -> e.getLocationType().equals(locationTypeListByProjectVO.getId())).map(TLocation::getId).collect(Collectors.toList());
|
if (locationIds.isEmpty()) {
|
locationTypeListByProjectVO.setLocationNum(0);
|
} else {
|
List<TTask> taskList = tasks.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId())
|
&& locationIds.contains(e.getLocationId())).collect(Collectors.toList());
|
Integer count = taskList.size();
|
temp.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);
|
}
|
locationTypeListByProjectVOS1.add(temp);
|
}
|
projectDeptDetailsChildVO.setLocationTypeList(locationTypeListByProjectVOS1);
|
|
}
|
|
}
|
return R.ok(res);
|
}
|
@ApiOperation(value = "任务报表导出")
|
@PostMapping(value = "/taskDetailsExport")
|
public void taskDetailsExport(@RequestBody TaskDetailsQuery query) {
|
List<TLocationType> locationTypeList = locationTypeService.list();
|
List<TLocation> locations = locationService.list();
|
LambdaQueryWrapper<TTask> 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<ProjectDeptDetailsVO> res = new ArrayList<>();
|
List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper);
|
List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery().orderByDesc(BaseModel::getCreateTime).list();
|
List<String> collect = tasks.stream().map(TTask::getProjectId).distinct().collect(Collectors.toList());
|
List<TProjectDept> projectDepts = projectDeptService.list();
|
List<String> strings = new ArrayList<>();
|
|
// 片区ids 反查项目部
|
List<TProjectDept> 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<TProjectDept> collect1 = list1.stream().filter(e -> e.getParentId().equals(tProjectDept1.getId())).collect(Collectors.toList());
|
List<ProjectDeptDetailsChildVO> 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<LocationTypeListByProjectVO> 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<LocationTypeListByProjectVO> locationTypeListByProjectVOS1 = new ArrayList<>();
|
for (LocationTypeListByProjectVO locationTypeListByProjectVO : locationTypeListByProjectVOS) {
|
LocationTypeListByProjectVO temp = new LocationTypeListByProjectVO();
|
BeanUtils.copyProperties(locationTypeListByProjectVO, temp);
|
List<String> locationIds = locations.stream().filter(e -> e.getLocationType().equals(locationTypeListByProjectVO.getId())).map(TLocation::getId).collect(Collectors.toList());
|
if (locationIds.isEmpty()) {
|
locationTypeListByProjectVO.setLocationNum(0);
|
} else {
|
List<TTask> taskList = tasks.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId())
|
&& locationIds.contains(e.getLocationId())).collect(Collectors.toList());
|
Integer count = taskList.size();
|
temp.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);
|
}
|
locationTypeListByProjectVOS1.add(temp);
|
}
|
projectDeptDetailsChildVO.setLocationTypeList(locationTypeListByProjectVOS1);
|
projectDeptDetailsChildVO.setCleanerCount(0);
|
|
}
|
|
}
|
//1.获取excel模板
|
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), ProjectDeptDetailsVO.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 = "/patrolInspectorList")
|
public R<List<PatrolInspectorVO>> patrolInspectorList(@RequestBody PatrolInspectorQuery query) {
|
List<SysUser> sysUsers = sysUserService.selectAllList();
|
LambdaQueryWrapper<TLeave> tLeaveLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
if (StringUtils.hasLength(query.getStartTime())){
|
tLeaveLambdaQueryWrapper.ge(TLeave::getCreateTime, query.getStartTime());
|
tLeaveLambdaQueryWrapper.le(TLeave::getCreateTime, query.getEndTime());
|
}
|
tLeaveLambdaQueryWrapper.eq(TLeave::getAuditStatus,2);
|
List<TLeave> leaves = leaveService.list(tLeaveLambdaQueryWrapper);
|
if (StringUtils.hasLength(query.getDeptName())){
|
List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list()
|
.stream().map(TProjectDept::getId).collect(Collectors.toList());
|
List<String> 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<>());
|
}
|
if (StringUtils.hasLength(query.getPhonenumber())){
|
List<Long> 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 ArrayList<>());
|
}
|
query.setPatrolInspectorIds(patrolInspectorIds);
|
}
|
}
|
if (StringUtils.hasLength(query.getPhonenumber())){
|
List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser ->
|
sysUser.getPhonenumber().equals(query.getPhonenumber())
|
).map(SysUser::getUserId).collect(Collectors.toList());
|
if (!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<PatrolInspectorVO> res = new ArrayList<>();
|
LambdaQueryWrapper<TTask> tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
if (StringUtils.hasLength(query.getStartTime())){
|
tTaskLambdaQueryWrapper.ge(TTask::getCreateTime, query.getStartTime());
|
tTaskLambdaQueryWrapper.le(TTask::getCreateTime, query.getEndTime());
|
}
|
if(query.getPatrolInspectorIds()!=null){
|
tTaskLambdaQueryWrapper.in(TTask::getPatrolInspector, query.getPatrolInspectorIds());
|
sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList());
|
}
|
List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper);
|
|
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<String> taskIds = tasks.stream().filter(e->e.getPatrolInspector().equals(sysUser.getUserId()+"")).map(TTask::getId).collect(Collectors.toList());
|
List<TTaskDetail> list = taskDetailService.lambdaQuery()
|
.eq(TTaskDetail::getAuditStatus, 1)
|
.isNotNull(TTaskDetail::getClearStatus).orderByDesc(BaseModel::getCreateTime)
|
.in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIds).groupBy(TTaskDetail::getTaskId).list();
|
// 查询clearStatus为1的数量
|
List<TTaskDetail> clearStatus1 = list.stream().filter(e -> e.getClearStatus().equals(1)).collect(Collectors.toList());
|
List<TTaskDetail> clearStatus2 = list.stream().filter(e -> e.getClearStatus().equals(2)).collect(Collectors.toList());
|
List<TTask> 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.size()+clearStatus2.size()!=0?
|
(new BigDecimal(clearStatus1.size()).add(new BigDecimal(clearStatus2.size())))
|
.divide(new BigDecimal(clearStatus1.size()), 2, RoundingMode.HALF_DOWN)
|
.multiply(new BigDecimal(100)):BigDecimal.ZERO);
|
// 未执行
|
List<TTask> status1 = taskList.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList());
|
List<TTask> status2 = taskList.stream().filter(e -> e.getStatus() == 3).collect(Collectors.toList());
|
List<TTask> status3 = taskList.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList());
|
List<TTask> status4 = taskList.stream().filter(e -> e.getStatus() == 4).collect(Collectors.toList());
|
List<TTask> status5 = taskList.stream().filter(e -> e.getStatus() == 5).collect(Collectors.toList());
|
List<TTask> 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()?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(!status6.isEmpty()?new BigDecimal(status6.size()).divide(new BigDecimal(taskList.size()),2,RoundingMode.HALF_DOWN):BigDecimal.ZERO);
|
List<TLeave> 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.EXPORT)
|
public void patrolInspectorListExport(@RequestBody PatrolInspectorQuery query) {
|
List<SysUser> sysUsers = sysUserService.selectAllList();
|
LambdaQueryWrapper<TLeave> tLeaveLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
if (StringUtils.hasLength(query.getStartTime())){
|
tLeaveLambdaQueryWrapper.ge(TLeave::getCreateTime, query.getStartTime());
|
tLeaveLambdaQueryWrapper.le(TLeave::getCreateTime, query.getEndTime());
|
}
|
tLeaveLambdaQueryWrapper.eq(TLeave::getAuditStatus,2);
|
List<TLeave> leaves = leaveService.list(tLeaveLambdaQueryWrapper);
|
if (StringUtils.hasLength(query.getDeptName())){
|
List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list()
|
.stream().map(TProjectDept::getId).collect(Collectors.toList());
|
List<String> deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list()
|
.stream().map(TDept::getId).collect(Collectors.toList());
|
projectIds.addAll(deptIds);
|
if (projectIds.isEmpty()){
|
projectIds.add("0");
|
}
|
if (StringUtils.hasLength(query.getPhonenumber())){
|
List<Long> 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.getPhonenumber())){
|
List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser ->
|
sysUser.getPhonenumber().equals(query.getPhonenumber())
|
).map(SysUser::getUserId).collect(Collectors.toList());
|
if (!query.getPatrolInspectorIds().isEmpty()){
|
// 取交集
|
patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList());
|
}
|
query.setPatrolInspectorIds(patrolInspectorIds);
|
if (patrolInspectorIds.isEmpty()){
|
patrolInspectorIds.add(0L);
|
}
|
}
|
List<PatrolInspectorVO> res = new ArrayList<>();
|
LambdaQueryWrapper<TTask> tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
if (StringUtils.hasLength(query.getStartTime())){
|
tTaskLambdaQueryWrapper.ge(TTask::getCreateTime, query.getStartTime());
|
tTaskLambdaQueryWrapper.le(TTask::getCreateTime, query.getEndTime());
|
}
|
if(query.getPatrolInspectorIds()!=null){
|
tTaskLambdaQueryWrapper.in(TTask::getPatrolInspector, query.getPatrolInspectorIds());
|
sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList());
|
}
|
List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper);
|
|
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<String> taskIds = tasks.stream().filter(e->e.getPatrolInspector().equals(sysUser.getUserId()+"")).map(TTask::getId).collect(Collectors.toList());
|
List<TTaskDetail> list = taskDetailService.lambdaQuery()
|
.eq(TTaskDetail::getAuditStatus, 1)
|
.isNotNull(TTaskDetail::getClearStatus).orderByDesc(BaseModel::getCreateTime)
|
.in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIds).groupBy(TTaskDetail::getTaskId).list();
|
// 查询clearStatus为1的数量
|
List<TTaskDetail> clearStatus1 = list.stream().filter(e -> e.getClearStatus().equals(1)).collect(Collectors.toList());
|
List<TTaskDetail> clearStatus2 = list.stream().filter(e -> e.getClearStatus().equals(2)).collect(Collectors.toList());
|
List<TTask> 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.size()+clearStatus2.size()!=0?
|
(new BigDecimal(clearStatus1.size()).add(new BigDecimal(clearStatus2.size())))
|
.divide(new BigDecimal(clearStatus1.size()), 2, RoundingMode.HALF_DOWN)
|
.multiply(new BigDecimal(100)):BigDecimal.ZERO);
|
// 未执行
|
List<TTask> status1 = taskList.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList());
|
List<TTask> status2 = taskList.stream().filter(e -> e.getStatus() == 3).collect(Collectors.toList());
|
List<TTask> status3 = taskList.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList());
|
List<TTask> status4 = taskList.stream().filter(e -> e.getStatus() == 4).collect(Collectors.toList());
|
List<TTask> status5 = taskList.stream().filter(e -> e.getStatus() == 5).collect(Collectors.toList());
|
List<TTask> 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()?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(!status6.isEmpty()?new BigDecimal(status6.size()).divide(new BigDecimal(taskList.size()),2,RoundingMode.HALF_DOWN):BigDecimal.ZERO);
|
List<TLeave> 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<List<InspectorVO>> inspectorList(@RequestBody InspectorQuery query) {
|
List<SysUser> sysUsers = sysUserService.selectAllList();
|
if (StringUtils.hasLength(query.getDeptName())){
|
List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list()
|
.stream().map(TProjectDept::getId).collect(Collectors.toList());
|
List<String> 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<>());
|
}
|
if (StringUtils.hasLength(query.getPhonenumber())){
|
List<Long> 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 ArrayList<>());
|
}
|
query.setPatrolInspectorIds(patrolInspectorIds);
|
}
|
}
|
if (StringUtils.hasLength(query.getPhonenumber())){
|
List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser ->
|
sysUser.getPhonenumber().equals(query.getPhonenumber())
|
).map(SysUser::getUserId).collect(Collectors.toList());
|
if (!query.getPatrolInspectorIds().isEmpty()){
|
// 取交集
|
patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList());
|
}
|
query.setPatrolInspectorIds(patrolInspectorIds);
|
if (patrolInspectorIds.isEmpty()){
|
return R.ok(new ArrayList<>());
|
}
|
}
|
LambdaQueryWrapper<TInspector> 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){
|
tTaskLambdaQueryWrapper.in(TInspector::getCommitPerson, query.getPatrolInspectorIds());
|
sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList());
|
}
|
List<InspectorVO> res = new ArrayList<>();
|
List<TInspector> inspectors = inspectorService.list(tTaskLambdaQueryWrapper);
|
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());
|
}
|
inspectorVO.setTotal(inspectors.size());
|
List<TInspector> status1 = inspectors.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList());
|
List<TInspector> status2 = inspectors.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList());
|
List<TInspector> status4 = inspectors.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList());
|
List<TInspector> status5 = inspectors.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList());
|
List<TInspector> status6 = inspectors.stream().filter(e -> e.getStatus() == 3).collect(Collectors.toList());
|
|
inspectorVO.setNum1(status1.size());
|
inspectorVO.setNum2(status2.size());
|
inspectorVO.setNum3(!status1.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()?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.EXPORT)
|
public void inspectorListExport(@RequestBody InspectorQuery query) {
|
List<SysUser> sysUsers = sysUserService.selectAllList();
|
if (StringUtils.hasLength(query.getDeptName())){
|
List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list()
|
.stream().map(TProjectDept::getId).collect(Collectors.toList());
|
List<String> deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list()
|
.stream().map(TDept::getId).collect(Collectors.toList());
|
projectIds.addAll(deptIds);
|
if (projectIds.isEmpty()){
|
projectIds.add("-1");
|
}
|
if (StringUtils.hasLength(query.getPhonenumber())){
|
List<Long> 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.getPhonenumber())){
|
List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser ->
|
sysUser.getPhonenumber().equals(query.getPhonenumber())
|
).map(SysUser::getUserId).collect(Collectors.toList());
|
if (!query.getPatrolInspectorIds().isEmpty()){
|
// 取交集
|
patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList());
|
}
|
query.setPatrolInspectorIds(patrolInspectorIds);
|
if (patrolInspectorIds.isEmpty()){
|
patrolInspectorIds.add(0L);
|
}
|
}
|
LambdaQueryWrapper<TInspector> 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){
|
tTaskLambdaQueryWrapper.in(TInspector::getCommitPerson, query.getPatrolInspectorIds());
|
sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList());
|
}
|
List<InspectorVO> res = new ArrayList<>();
|
List<TInspector> inspectors = inspectorService.list(tTaskLambdaQueryWrapper);
|
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());
|
}
|
inspectorVO.setTotal(inspectors.size());
|
List<TInspector> status1 = inspectors.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList());
|
List<TInspector> status2 = inspectors.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList());
|
List<TInspector> status4 = inspectors.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList());
|
List<TInspector> status5 = inspectors.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList());
|
List<TInspector> status6 = inspectors.stream().filter(e -> e.getStatus() == 3).collect(Collectors.toList());
|
|
inspectorVO.setNum1(status1.size());
|
inspectorVO.setNum2(status2.size());
|
inspectorVO.setNum3(!status1.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()?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<TLocationType> locationTypeList = locationTypeService.list();
|
List<TLocation> locations = locationService.list();
|
LambdaQueryWrapper<TTask> 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<ProjectDeptDetailsVO> res = new ArrayList<>();
|
List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper);
|
List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery().orderByDesc(BaseModel::getCreateTime).list();
|
List<String> collect = tasks.stream().map(TTask::getProjectId).distinct().collect(Collectors.toList());
|
List<TProjectDept> projectDepts = projectDeptService.list();
|
List<String> strings = new ArrayList<>();
|
|
// 片区ids 反查项目部
|
List<TProjectDept> 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<TProjectDept> collect1 = list1.stream().filter(e -> e.getParentId().equals(tProjectDept1.getId())).collect(Collectors.toList());
|
List<ProjectDeptDetailsChildVO> 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<LocationTypeListByProjectVO> 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<ProjectDeptDetailsChildVO> 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<String> locationIds = locations.stream().filter(e -> e.getLocationType().equals(locationTypeListByProjectVO.getId())).map(TLocation::getId).collect(Collectors.toList());
|
if (locationIds.isEmpty()) {
|
locationTypeListByProjectVO.setLocationNum(0);
|
} else {
|
List<TTask> 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<String> allTypeNames = new LinkedHashSet<>();
|
for (ProjectDeptDetailsVO row : res) {
|
for (ProjectDeptDetailsChildVO lt : row.getProjectChild()) {
|
for (LocationTypeListByProjectVO locationTypeListByProjectVO : lt.getLocationTypeList()) {
|
allTypeNames.add(locationTypeListByProjectVO.getLocationTypeName());
|
}
|
}
|
}
|
|
List<ExcelExportEntity> entityList = new ArrayList<>();
|
ExcelExportEntity excelExportEntity = new ExcelExportEntity("项目", "projectName", 15);
|
excelExportEntity.setMergeVertical(true);
|
entityList.add(excelExportEntity);
|
entityList.add(new ExcelExportEntity("片区名称", "areaName",15));
|
entityList.add(new ExcelExportEntity("巡检保洁员数", "inspectorCount",15));
|
|
// 动态添加作业类型分类
|
List<String> list = new ArrayList<>(allTypeNames);
|
Collections.reverse(list);
|
for (String typeName : list) {
|
ExcelExportEntity excelExportEntity1 = new ExcelExportEntity(typeName, typeName, 15);
|
excelExportEntity1.setGroupName("作业类型分类");
|
entityList.add(excelExportEntity1);
|
}
|
|
ExcelExportEntity excelExportEntity8 = new ExcelExportEntity("整改完成任务", "total", 15);
|
excelExportEntity8.setGroupName("任务情况汇总");
|
entityList.add(excelExportEntity8);
|
ExcelExportEntity excelExportEntity7 = new ExcelExportEntity("超时未执行任务", "total", 15);
|
excelExportEntity7.setGroupName("任务情况汇总");
|
entityList.add(excelExportEntity7);
|
ExcelExportEntity excelExportEntity6 = new ExcelExportEntity("审核通过任务", "total", 15);
|
excelExportEntity6.setGroupName("任务情况汇总");
|
entityList.add(excelExportEntity6);
|
ExcelExportEntity excelExportEntity5 = new ExcelExportEntity("待整改任务", "total", 15);
|
excelExportEntity5.setGroupName("任务情况汇总");
|
entityList.add(excelExportEntity5);
|
ExcelExportEntity excelExportEntity4 = new ExcelExportEntity("未执行任务", "total", 15);
|
excelExportEntity4.setGroupName("任务情况汇总");
|
entityList.add(excelExportEntity4);
|
ExcelExportEntity excelExportEntity3 = new ExcelExportEntity("清洁不合格", "total", 15);
|
excelExportEntity3.setGroupName("任务情况汇总");
|
entityList.add(excelExportEntity3);
|
ExcelExportEntity excelExportEntity2 = new ExcelExportEntity("清洁合格", "total", 15);
|
excelExportEntity2.setGroupName("任务情况汇总");
|
entityList.add(excelExportEntity2);
|
ExcelExportEntity excelExportEntity1 = new ExcelExportEntity("总数", "total", 15);
|
excelExportEntity1.setGroupName("任务情况汇总");
|
entityList.add(excelExportEntity1);
|
|
List<Map<String, Object>> mapList = new ArrayList<>();
|
for (ProjectDeptDetailsVO projectDeptDetailsVO : res) {
|
List<ProjectDeptDetailsChildVO> projectChild = projectDeptDetailsVO.getProjectChild();
|
for (ProjectDeptDetailsChildVO row : projectChild) {
|
Map<String, Object> map = new HashMap<>();
|
map.put("projectName", projectDeptDetailsVO.getProjectName());
|
map.put("areaName", row.getProjectChildName());
|
map.put("inspectorCount", row.getCleanerCount());
|
// 动态作业类型
|
for (LocationTypeListByProjectVO lt : row.getLocationTypeList()) {
|
map.put(lt.getLocationTypeName(), lt.getLocationNum());
|
}
|
// 没有的类型补0
|
for (String typeName : allTypeNames) {
|
map.putIfAbsent(typeName, 0);
|
}
|
map.put("total", row.getTotal());
|
map.put("num1", row.getNum1());
|
map.put("num2", row.getNum2());
|
map.put("num3", row.getNum3());
|
map.put("num4", row.getNum4());
|
map.put("num5", row.getNum5());
|
map.put("num6", row.getNum6());
|
map.put("num7", row.getNum7());
|
mapList.add(map);
|
}
|
}
|
|
ExportParams params = new ExportParams("任务报表", "数据表");
|
Workbook workbook = ExcelExportUtil.exportExcel(params, entityList, mapList);
|
|
response.setHeader("content-type", "application/vnd.ms-excel");
|
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("任务情况汇总.xlsx", "UTF-8"));
|
workbook.write(response.getOutputStream());
|
workbook.close();
|
|
}
|
|
}
|