| | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.ruoyi.common.basic.PageInfo; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | |
| | | import com.ruoyi.system.query.DataStatisticsQuery; |
| | | import com.ruoyi.system.query.DataStatisticsRankQuery; |
| | | import com.ruoyi.system.query.InsepectorListQuery; |
| | | import com.ruoyi.system.query.PointDetailQuery; |
| | | import com.ruoyi.system.service.*; |
| | | import com.ruoyi.system.vo.system.AnalysisUnqualifiedCleaningDetailVO; |
| | | import com.ruoyi.system.vo.system.AnalysisUnqualifiedCleaningVO; |
| | | import com.ruoyi.system.vo.system.DataStatisticsRankVO; |
| | | import com.ruoyi.system.vo.system.*; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDate; |
| | | import java.util.*; |
| | |
| | | return R.ok(result); |
| | | } |
| | | |
| | | |
| | | @ApiOperation(value = "点位巡检热力图-数量统计") |
| | | @PostMapping(value = "/pointInspectionHeatStatistics") |
| | | public R<Map<String, Object>> pointInspectionHeatStatistics(@RequestBody DataStatisticsQuery query) { |
| | | Map<String, Object> map = new HashMap<>(); |
| | | Integer deptType = tokenService.getLoginUser().getUser().getDeptType(); |
| | | String deptId = tokenService.getLoginUser().getUser().getDeptId(); |
| | | Long userId = tokenService.getLoginUser().getUserId(); |
| | | |
| | | LambdaQueryWrapper<TTask> wrapper = new LambdaQueryWrapper<>(); |
| | | |
| | | Map<String, Date> yearDate = DateUtils.getYearDate(new Date()); |
| | | String startTime = new SimpleDateFormat("yyyy-MM-dd").format(yearDate.get("first")); |
| | | String endTime = new SimpleDateFormat("yyyy-MM-dd").format(yearDate.get("last")); |
| | | wrapper.between(TTask::getImplementTime, startTime, endTime); |
| | | |
| | | List<TTask> list; |
| | | if (userId != 1L) { |
| | | // 查询点位类型 |
| | | if(StringUtils.isNotEmpty(query.getLocationTypeId())){ |
| | | // 查询点位 |
| | | List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) |
| | | .in(TLocation::getLocationType, query.getLocationTypeId())); |
| | | if(!CollectionUtils.isEmpty(locationList)){ |
| | | List<String> locationIds = locationList.stream().map(TLocation::getId).collect(Collectors.toList()); |
| | | wrapper.in(TTask::getLocationId, locationIds); |
| | | } |
| | | map.put("totalLocationNum", locationList.size()); |
| | | } |
| | | List<TTask> taskList = new ArrayList<>(); |
| | | if (deptType == 1) { |
| | | // 项目部人员 |
| | | if(CollectionUtils.isEmpty(query.getProjectId())){ |
| | | List<String> projectIds = new ArrayList<>(); |
| | | projectIds.add(deptId); |
| | | query.setProjectId(projectIds); |
| | | } |
| | | }else { |
| | | // 公司人员 |
| | | // 查询自己的任务列表 |
| | | taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) |
| | | .eq(TTask::getPatrolInspector, userId)); |
| | | if(CollectionUtils.isEmpty(query.getProjectId())){ |
| | | // 查询所有项目部的任务列表 |
| | | List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) |
| | | .eq(TProjectDept::getStatus, 1) |
| | | .ne(TProjectDept::getParentId, 0)); |
| | | if(!CollectionUtils.isEmpty(tProjectDeptList)){ |
| | | List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); |
| | | query.setProjectId(projectIds); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 查询片区 |
| | | if(!CollectionUtils.isEmpty(query.getProjectId())){ |
| | | wrapper.in(TTask::getProjectId, query.getProjectId()); |
| | | // 查询点位数 |
| | | List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) |
| | | .in(TLocation::getProjectId, query.getProjectId())); |
| | | map.put("totalLocationNum", locationList.size()); |
| | | } |
| | | |
| | | list = taskCleanService.list(wrapper); |
| | | if(CollectionUtils.isEmpty(list)){ |
| | | return R.ok(); |
| | | } |
| | | |
| | | if(!CollectionUtils.isEmpty(taskList)){ |
| | | list.addAll(taskList); |
| | | } |
| | | }else { |
| | | // 超级管理员 |
| | | // 查询点位类型 |
| | | if(StringUtils.isNotEmpty(query.getLocationTypeId())){ |
| | | // 查询点位 |
| | | List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) |
| | | .in(TLocation::getLocationType, query.getLocationTypeId())); |
| | | if(!CollectionUtils.isEmpty(locationList)){ |
| | | List<String> locationIds = locationList.stream().map(TLocation::getId).collect(Collectors.toList()); |
| | | wrapper.in(TTask::getLocationId, locationIds); |
| | | } |
| | | map.put("totalLocationNum", locationList.size()); |
| | | } |
| | | // 超级管理员 查询所有的任务列表 |
| | | List<TTask> taskList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class)); |
| | | if(CollectionUtils.isEmpty(query.getProjectId())){ |
| | | // 查询所有项目部的任务列表 |
| | | List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) |
| | | .eq(TProjectDept::getStatus, 1) |
| | | .ne(TProjectDept::getParentId, 0)); |
| | | if(!CollectionUtils.isEmpty(tProjectDeptList)){ |
| | | List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); |
| | | query.setProjectId(projectIds); |
| | | } |
| | | } |
| | | |
| | | // 查询片区 |
| | | if(!CollectionUtils.isEmpty(query.getProjectId())){ |
| | | wrapper.in(TTask::getProjectId, query.getProjectId()); |
| | | List<TLocation> locationList = locationService.list(Wrappers.lambdaQuery(TLocation.class) |
| | | .in(TLocation::getProjectId, query.getProjectId())); |
| | | map.put("totalLocationNum", locationList.size()); |
| | | } |
| | | |
| | | list = taskCleanService.list(wrapper); |
| | | if(CollectionUtils.isEmpty(list)){ |
| | | return R.ok(); |
| | | } |
| | | |
| | | if(!CollectionUtils.isEmpty(taskList)){ |
| | | list.addAll(taskList); |
| | | } |
| | | } |
| | | |
| | | // 查询任务相关数据 |
| | | // 总计任务数 |
| | | map.put("totalTaskNum", list.size()); |
| | | // 片区数量 |
| | | map.put("totalProjectNum", query.getProjectId().size()); |
| | | |
| | | // 巡检员数 |
| | | Integer totalEmployeeNum = sysUserService.selectUserCount(query.getProjectId(),deptType); |
| | | if (deptType != 1) { |
| | | totalEmployeeNum = totalEmployeeNum + 1; |
| | | } |
| | | map.put("totalEmployeeNum", totalEmployeeNum); |
| | | |
| | | // 合格率 |
| | | // 匹配任务详情查看合格数量 |
| | | List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList()); |
| | | if(CollectionUtils.isEmpty(tasks)){ |
| | | map.put("qualifiedRate",BigDecimal.ZERO); |
| | | return R.ok(map); |
| | | } |
| | | List<String> taskIds = tasks.stream().map(TTask::getId).collect(Collectors.toList()); |
| | | List<TTaskDetail> taskDetails = tTaskDetailService.list(Wrappers.lambdaQuery(TTaskDetail.class) |
| | | .in(TTaskDetail::getTaskId, taskIds) |
| | | .orderByDesc(TTaskDetail::getCreateTime)); |
| | | int qualifiedWarn = 0; |
| | | for (TTask task : list) { |
| | | TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null); |
| | | if(Objects.nonNull(tTaskDetail)){ |
| | | if(Objects.nonNull(tTaskDetail.getClearStatus()) && tTaskDetail.getClearStatus() == 1){ |
| | | qualifiedWarn++; |
| | | } |
| | | } |
| | | } |
| | | map.put("qualifiedRate", new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_UP)); |
| | | |
| | | return R.ok(map); |
| | | } |
| | | |
| | | @ApiOperation(value = "点位巡检热力图-点位地图") |
| | | @PostMapping(value = "/pointInspectionHeatMap") |
| | | public R<List<TLocation>> pointInspectionHeatMap(@RequestBody DataStatisticsQuery query) { |
| | | Integer deptType = tokenService.getLoginUser().getUser().getDeptType(); |
| | | String deptId = tokenService.getLoginUser().getUser().getDeptId(); |
| | | Long userId = tokenService.getLoginUser().getUserId(); |
| | | |
| | | LambdaQueryWrapper<TLocation> wrapper = new LambdaQueryWrapper<>(); |
| | | |
| | | Map<String, Date> yearDate = DateUtils.getYearDate(new Date()); |
| | | String startTime = new SimpleDateFormat("yyyy-MM-dd").format(yearDate.get("first")); |
| | | String endTime = new SimpleDateFormat("yyyy-MM-dd").format(yearDate.get("last")); |
| | | wrapper.between(TLocation::getCreateTime, startTime, endTime); |
| | | |
| | | // 查询点位类型 |
| | | if(StringUtils.isNotEmpty(query.getLocationTypeId())){ |
| | | // 查询点位 |
| | | wrapper.in(TLocation::getLocationType, query.getLocationTypeId()); |
| | | } |
| | | if(StringUtils.isNotEmpty(query.getLocationNameOrCode())){ |
| | | wrapper.and(e->e.like(TLocation::getLocationName, query.getLocationNameOrCode()).or() |
| | | .like(TLocation::getLocationCode, query.getLocationNameOrCode())); |
| | | } |
| | | if (userId != 1L) { |
| | | if (deptType == 1) { |
| | | // 项目部人员 |
| | | if(CollectionUtils.isEmpty(query.getProjectId())){ |
| | | List<String> projectIds = new ArrayList<>(); |
| | | projectIds.add(deptId); |
| | | query.setProjectId(projectIds); |
| | | } |
| | | }else { |
| | | // 公司人员 |
| | | if(CollectionUtils.isEmpty(query.getProjectId())){ |
| | | // 查询所有项目部的任务列表 |
| | | List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) |
| | | .eq(TProjectDept::getStatus, 1) |
| | | .ne(TProjectDept::getParentId, 0)); |
| | | if(!CollectionUtils.isEmpty(tProjectDeptList)){ |
| | | List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); |
| | | query.setProjectId(projectIds); |
| | | } |
| | | } |
| | | } |
| | | }else { |
| | | // 超级管理员 |
| | | if(CollectionUtils.isEmpty(query.getProjectId())){ |
| | | // 查询所有项目部的任务列表 |
| | | List<TProjectDept> tProjectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) |
| | | .eq(TProjectDept::getStatus, 1) |
| | | .ne(TProjectDept::getParentId, 0)); |
| | | if(!CollectionUtils.isEmpty(tProjectDeptList)){ |
| | | List<String> projectIds = tProjectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); |
| | | query.setProjectId(projectIds); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 查询片区 |
| | | if(!CollectionUtils.isEmpty(query.getProjectId())){ |
| | | wrapper.in(TLocation::getProjectId, query.getProjectId()); |
| | | } |
| | | |
| | | // 查询点位 |
| | | List<TLocation> locationList = locationService.list(wrapper); |
| | | |
| | | if(CollectionUtils.isEmpty(locationList)){ |
| | | return R.ok(locationList); |
| | | } |
| | | |
| | | List<String> locationIds = locationList.stream().map(TLocation::getId).collect(Collectors.toList()); |
| | | |
| | | // 查询任务 |
| | | List<TTask> tasks = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) |
| | | .in(TTask::getLocationId, locationIds)); |
| | | |
| | | for (TLocation tLocation : locationList) { |
| | | long count = tasks.stream().filter(task -> task.getLocationId().equals(tLocation.getId())).count(); |
| | | tLocation.setTaskNum(count); |
| | | } |
| | | return R.ok(locationList); |
| | | } |
| | | |
| | | |
| | | @ApiOperation(value = "点位巡检热力图-点位详情和统计") |
| | | @PostMapping(value = "/pointInspectionHeatDetailStatistics") |
| | | public R<TLocationStatisticsVO> pointInspectionHeatDetailStatistics(@Validated @RequestBody PointDetailQuery query) { |
| | | |
| | | TLocation location = locationService.getById(query.getLocationId()); |
| | | TLocationStatisticsVO locationStatisticsVO = new TLocationStatisticsVO(); |
| | | BeanUtils.copyProperties(location, locationStatisticsVO); |
| | | |
| | | List<TTask> list = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) |
| | | .eq(TTask::getLocationId, query.getLocationId())); |
| | | // 总数 |
| | | locationStatisticsVO.setTotalInspection(list.size()); |
| | | |
| | | // 完成数 |
| | | long completeInspection = list.stream().filter(task -> task.getStatus() == 6).count(); |
| | | locationStatisticsVO.setCompleteInspection(completeInspection); |
| | | |
| | | // 合格率 |
| | | List<TTask> tasks = list.stream().filter(task -> task.getStatus() != 1 && task.getStatus() != 2).collect(Collectors.toList()); |
| | | if(CollectionUtils.isEmpty(tasks)){ |
| | | locationStatisticsVO.setPassRate(new BigDecimal(0)); |
| | | return R.ok(locationStatisticsVO); |
| | | } |
| | | List<String> taskIds = tasks.stream().map(TTask::getId).collect(Collectors.toList()); |
| | | List<TTaskDetail> taskDetails = tTaskDetailService.list(Wrappers.lambdaQuery(TTaskDetail.class) |
| | | .in(TTaskDetail::getTaskId, taskIds) |
| | | .orderByDesc(TTaskDetail::getCreateTime)); |
| | | int qualifiedWarn = 0; |
| | | for (TTask task : list) { |
| | | TTaskDetail tTaskDetail = taskDetails.stream().filter(taskDetail -> taskDetail.getTaskId().equals(task.getId())).findFirst().orElse(null); |
| | | if(Objects.nonNull(tTaskDetail)){ |
| | | if(Objects.nonNull(tTaskDetail.getClearStatus()) && tTaskDetail.getClearStatus() == 1){ |
| | | qualifiedWarn++; |
| | | } |
| | | } |
| | | } |
| | | locationStatisticsVO.setPassRate(new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_UP)); |
| | | return R.ok(locationStatisticsVO); |
| | | } |
| | | |
| | | @ApiOperation(value = "点位巡检热力图-点位详情任务列表") |
| | | @PostMapping(value = "/pointInspectionHeatDetailTaskList") |
| | | public R<PageInfo<TLocationTaskListVO>> pointInspectionHeatDetailTaskList(@Validated @RequestBody PointDetailQuery query) { |
| | | |
| | | if(StringUtils.isNotBlank(query.getDeptName())){ |
| | | |
| | | List<TProjectDept> projectDeptList = projectDeptService.list(Wrappers.lambdaQuery(TProjectDept.class) |
| | | .like(TProjectDept::getProjectName, query.getDeptName())); |
| | | List<String> projectIds = projectDeptList.stream().map(TProjectDept::getId).collect(Collectors.toList()); |
| | | |
| | | List<TDept> deptList = deptService.list(Wrappers.lambdaQuery(TDept.class) |
| | | .like(TDept::getDeptName, query.getDeptName())); |
| | | List<String> deptIds = deptList.stream().map(TDept::getId).collect(Collectors.toList()); |
| | | |
| | | projectIds.addAll(deptIds); |
| | | if (projectIds.isEmpty()){ |
| | | projectIds.add("-1"); |
| | | } |
| | | query.setProjectIds(projectIds); |
| | | } |
| | | |
| | | PageInfo<TLocationTaskListVO> pageInfo = taskCleanService.pointInspectionHeatDetailTaskList(query); |
| | | return R.ok(pageInfo); |
| | | } |
| | | |
| | | } |
| | | |