| | |
| | | @Resource |
| | | private TSystemBulletinService systemBulletinService; |
| | | |
| | | |
| | | @ApiOperation(value = "首页-系统公告") |
| | | @PostMapping(value = "/systemBulletin") |
| | | public R<TSystemBulletin> systemBulletin() { |
| | |
| | | @PostMapping(value = "/dataReport") |
| | | public R<DataReportVO> dataReport(@RequestBody DataReportDTO dto) { |
| | | DataReportQuery dataReportQuery = new DataReportQuery(); |
| | | dataReportQuery.setStartTime(dto.getStartTime()); |
| | | dataReportQuery.setEndTime(dto.getEndTime()); |
| | | dataReportQuery.setStartTime(dto.getStartTime()+" 00:00:00"); |
| | | dataReportQuery.setEndTime(dto.getEndTime()+" 23:59:59"); |
| | | dataReportQuery.setPageNum(dto.getPageNum()); |
| | | dataReportQuery.setPageSize(dto.getPageSize()); |
| | | DataReportVO res = new DataReportVO(); |
| | | List<TDictData> dataList = dictDataService.list(); |
| | | List<TProjectDept> projectDepts = projectDeptService.list(); |
| | | List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery() |
| | | .isNotNull(TTaskDetail::getClearStatus) |
| | | .eq(TTaskDetail::getHandleType,1) |
| | | .eq(TTaskDetail::getAuditStatus,1) |
| | | .groupBy(TTaskDetail::getTaskId) |
| | | .orderByDesc(BaseModel::getCreateTime) |
| | | .list(); |
| | | taskDetails = new ArrayList<>(taskDetails.stream() |
| | | .collect(Collectors.groupingBy( |
| | | TTaskDetail::getTaskId, |
| | | Collectors.collectingAndThen( |
| | | Collectors.toList(), |
| | | listAll -> listAll.get(0) |
| | | ) |
| | | )) |
| | | .values()); |
| | | List<String> userDeptIds = new ArrayList<>(); |
| | | LambdaQueryWrapper<TTask> tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); |
| | | if (StringUtils.hasLength(dto.getProjectId())) { |
| | |
| | | tTaskLambdaQueryWrapper.eq(TTask::getProjectId, projectDept.getId()); |
| | | userDeptIds.add(projectDept.getId()); |
| | | } else { |
| | | TProjectDept parent = projectDeptService.getById(projectDept.getParentId()); |
| | | List<TProjectDept> list = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, parent.getId()).list(); |
| | | userDeptIds.add(projectDept.getId()); |
| | | List<TProjectDept> list = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()).list(); |
| | | List<String> deptIds = list.stream().map(TProjectDept::getId).collect(Collectors.toList()); |
| | | if (!deptIds.isEmpty()) { |
| | | tTaskLambdaQueryWrapper.in(TTask::getProjectId, deptIds); |
| | |
| | | dataReportQuery.setProjectIds(userDeptIds); |
| | | |
| | | if (StringUtils.hasLength(dto.getStartTime())) { |
| | | tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, dto.getStartTime()); |
| | | tTaskLambdaQueryWrapper.le(TTask::getImplementTime, dto.getEndTime()); |
| | | tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, dto.getStartTime()+" 00:00:00"); |
| | | tTaskLambdaQueryWrapper.le(TTask::getImplementTime, dto.getEndTime()+" 23:59:59"); |
| | | } else { |
| | | // 获取今天凌晨00:00:00 和今天23:59:59 类型为LocalDateTime |
| | | LocalDateTime startOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); |
| | |
| | | tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, startOfToday); |
| | | tTaskLambdaQueryWrapper.le(TTask::getImplementTime, endOfToday); |
| | | } |
| | | tTaskLambdaQueryWrapper.ne(TTask::getStatus, 1); |
| | | // tTaskLambdaQueryWrapper.ne(TTask::getStatus, 1); |
| | | List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); |
| | | HashMap<String, Integer> taskMap = new HashMap<>(); |
| | | HashMap<String, Integer> statusMap = new HashMap<>(); |
| | |
| | | break; |
| | | case 5: |
| | | temp.append("已完成"); |
| | | |
| | | break; |
| | | case 6: |
| | | temp.append("已完成"); |
| | | break; |
| | | } |
| | | statusMap.put(temp.toString(), statusMap.getOrDefault(task.getStatus()+"", 0) + 1); |
| | | statusMap.put(temp.toString(), statusMap.getOrDefault(temp.toString(), 0) + 1); |
| | | TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(task.getId())).findFirst().orElse(null); |
| | | StringBuilder temp1 = new StringBuilder(); |
| | | if (tTaskDetail!=null){ |
| | |
| | | int pass=0; |
| | | int unPass=0; |
| | | List<TTask> userTaskList = tasks.stream().filter(e -> e.getPatrolInspector().equals(record.getUserId() + "")).collect(Collectors.toList()); |
| | | List<TTask> userTaskListPass = tasks.stream().filter(e -> |
| | | (e.getStatus()==5||e.getStatus()==6) |
| | | && |
| | | e.getPatrolInspector().equals(record.getUserId() + "")).collect(Collectors.toList()); |
| | | for (TTask tTask : userTaskList) { |
| | | TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId())).findFirst().orElse(null); |
| | | if (tTaskDetail!=null){ |
| | |
| | | } |
| | | record.setTotal(userTaskList.size()); |
| | | record.setRate(pass+unPass!=0?new BigDecimal(pass).divide(new BigDecimal(pass+unPass),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):BigDecimal.ZERO); |
| | | List<TTask> status1 = userTaskList.stream().filter(e -> e.getStatus() == 5 || e.getStatus() == 6).collect(Collectors.toList()); |
| | | List<TTask> status2 = userTaskList.stream().filter(e -> e.getStatus() != 5 && e.getStatus() != 6).collect(Collectors.toList()); |
| | | record.setFinish(!status1.isEmpty()?new BigDecimal(status1.size()).divide(new BigDecimal(status1.size()+status2.size()),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):BigDecimal.ZERO); |
| | | record.setFinish(!userTaskList.isEmpty()?new BigDecimal(userTaskListPass.size()).divide(new BigDecimal(userTaskList.size()),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):BigDecimal.ZERO); |
| | | |
| | | } |
| | | // PageInfo<TaskFinishListVO> taskFinishListVOPageInfo = new PageInfo<>(); |
| | |
| | | } |
| | | return R.ok(projectDeptListNoLimitVOS); |
| | | } |
| | | |
| | | @Resource |
| | | private TNoticeService noticeService; |
| | | @ApiOperation(value = "首页") |
| | | @PostMapping(value = "/index") |
| | | public R<IndexVO> index(@RequestBody IndexDTO dto) throws IOException { |
| | | // if (!StringUtils.hasLength(dto.getLon()) || !StringUtils.hasLength(dto.getLat())) { |
| | | // return R.fail("请上传经纬度"); |
| | | // } |
| | | IndexVO res = new IndexVO(); |
| | | res.setIsNotice(0); |
| | | Long userId = tokenService.getLoginUserApplet().getUserId(); |
| | | Long count = noticeService.lambdaQuery().eq(TNotice::getUserId, userId).eq(TNotice::getStatus, 1).count(); |
| | | if (count>0){ |
| | | res.setIsNotice(1); |
| | | } |
| | | List<TProjectDept> projectListAll = projectDeptService.list(); |
| | | |
| | | List<TLocation> locationList = locationService.list(); |
| | | List<TLocationType> locationTypeList = locationTypeService.list(); |
| | | List<TTask> taskAll = taskCleanerService.lambdaQuery().eq(TTask::getPatrolInspector, userId).list(); |
| | | dto.setUserId(userId); |
| | | List<TTask> taskAll = taskCleanerService.indexTask(dto); |
| | | // List<TTask> taskAll = taskCleanerService.lambdaQuery().eq(TTask::getPatrolInspector, userId).list(); |
| | | // 获取今天凌晨00:00:00 和今天23:59:59 类型为LocalDateTime |
| | | LocalDateTime startOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); |
| | | LocalDateTime endOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MAX); |
| | |
| | | |
| | | TProjectDept projectDept = projectDeptService.getById(sysUser.getDeptId()); |
| | | if (projectDept != null) { |
| | | if (!"0".equals(projectDept.getParentId())) { |
| | | if ("0".equals(projectDept.getParentId())) { |
| | | List<String> collect = projectListAll.stream().filter(e -> e.getParentId().equals(projectDept.getId())).map(TProjectDept::getId).collect(Collectors.toList()); |
| | | collect.add(projectDept.getId()); |
| | | // 查询片区下的所有人员 |
| | | users = sysUsers.stream().filter(e -> e.getDeptId() |
| | | .equals(projectDept.getId()) |
| | | users = sysUsers.stream().filter(e ->collect.contains(e.getDeptId()) |
| | | && e.getStatus().equals("0") |
| | | && e.getDeptType() == 1).collect(Collectors.toList()); |
| | | } else { |
| | |
| | | } else { |
| | | TDept dept = deptService.getById(sysUser.getDeptId()); |
| | | if (dept != null) { |
| | | if (!dept.getDeptName().equals("公司")) { |
| | | users = sysUsers.stream().filter(e -> e.getDeptId() |
| | | .equals(sysUser.getDeptId()) |
| | | && e.getStatus().equals("0") |
| | | && e.getDeptType() == 1).collect(Collectors.toList()); |
| | | if (!dept.getDeptName().contains("公司")) { |
| | | users = sysUsers.stream().filter(e -> e.getDeptType() == 1).collect(Collectors.toList()); |
| | | } |
| | | } |
| | | |
| | |
| | | .multiply(new BigDecimal(100)) |
| | | : new BigDecimal(0)); |
| | | List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery() |
| | | .eq(TTaskDetail::getAuditStatus, 1).in(TTaskDetail::getTaskId, taskIds) |
| | | .eq(TTaskDetail::getAuditStatus, 1) |
| | | .in(TTaskDetail::getTaskId, taskIds) |
| | | .isNotNull(TTaskDetail::getClearStatus) |
| | | .groupBy(TTaskDetail::getTaskId) |
| | | .eq(TTaskDetail::getHandleType,1) |
| | | .orderByDesc(TTaskDetail::getCreateTime).list(); |
| | | |
| | | |
| | | taskDetails = new ArrayList<>(taskDetails.stream() |
| | | .collect(Collectors.groupingBy( |
| | | TTaskDetail::getTaskId, |
| | | Collectors.collectingAndThen( |
| | | Collectors.toList(), |
| | | listAll -> listAll.get(0) |
| | | ) |
| | | )) |
| | | .values()); |
| | | List<TTaskDetail> status3 = taskDetails.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList()); |
| | | List<TTaskDetail> status4 = taskDetails.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList()); |
| | | if (status3.size() + status4.size() != 0) { |
| | | BigDecimal divide = new BigDecimal(status3.size() + status4.size()) |
| | | .divide(new BigDecimal(status3.size()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)); |
| | | if (!status3.isEmpty()) { |
| | | BigDecimal divide = new BigDecimal(status3.size() ) |
| | | .divide(new BigDecimal(status3.size()+ status4.size()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)); |
| | | res.setRate(divide); |
| | | } else { |
| | | res.setRate(new BigDecimal(0)); |
| | |
| | | leaveUserListVO.setCreateTime1(tLeave.getCreateTime()); |
| | | leaveUserListVO.setStartTime1(tLeave.getStartTime()); |
| | | leaveUserListVO.setEndTime1(tLeave.getEndTime()); |
| | | leaveList.add(leaveUserListVO); |
| | | } |
| | | List<TTask> taskList = taskAll.stream().filter(e -> e.getPatrolInspector().equals(userId + "") && e.getStatus() == 4).collect(Collectors.toList()); |
| | | List<String> taskIds = taskList.stream().map(TTask::getId).collect(Collectors.toList()); |
| | | // 驳回原因 |
| | | List<TTaskDetail> tTaskDetails = taskDetailService.list(new LambdaQueryWrapper<TTaskDetail>() |
| | | .eq(TTaskDetail::getHandleType,3).groupBy(TTaskDetail::getTaskId).orderByDesc(TTaskDetail::getCreateTime)); |
| | | for (TTask tTask : taskList) { |
| | | List<TTaskDetail> taskDetailsStatus1 = taskDetailService.lambdaQuery() |
| | | .eq(TTaskDetail::getAuditStatus, 1).in(TTaskDetail::getTaskId, taskIds) |
| | |
| | | taskTodayVO.setLocationLon(tLocation.getLocationLon()); |
| | | taskTodayVO.setLocationLat(tLocation.getLocationLat()); |
| | | taskTodayVO.setLocationName(tLocation.getLocationName()); |
| | | // todo |
| | | if(StringUtils.hasLength(dto.getLon())){ |
| | | Map<String, String> distance = amapApiClient.getDistance(dto.getLon() + "," + dto.getLat(), tLocation.getLocationLon() + "," + tLocation.getLocationLat(), 1); |
| | | if (distance != null) { |
| | | taskTodayVO.setDistance(new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN)); |
| | | } else { |
| | | taskTodayVO.setDistance(new BigDecimal("0")); |
| | | } |
| | | taskTodayVO.setDistance(tTask.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)); |
| | | // Map<String, String> distance = amapApiClient.getDistance(dto.getLon() + "," + dto.getLat(), tLocation.getLocationLon() + "," + tLocation.getLocationLat(), 1); |
| | | // if (distance != null) { |
| | | // taskTodayVO.setDistance(new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN)); |
| | | // } else { |
| | | // taskTodayVO.setDistance(new BigDecimal("0")); |
| | | // } |
| | | }else { |
| | | taskTodayVO.setDistance(new BigDecimal("0")); |
| | | } |
| | |
| | | taskTodayVO.setLocationTypeIcon(tLocationType.getLocationIcon()); |
| | | } |
| | | } |
| | | TTaskDetail tTaskDetail = taskDetailsStatus1.stream().filter(e -> e.getTaskId().equals(tTask.getId())).findFirst().orElse(null); |
| | | if (tTaskDetail != null) { |
| | | String unqualified = tTaskDetail.getUnqualified(); |
| | | TDictData dictData = dictDataService.lambdaQuery().eq(TDictData::getId, unqualified).one(); |
| | | if (dictData != null) { |
| | | taskTodayVO.setRemark(dictData.getDataContent()); |
| | | TTaskDetail tTaskDetail = tTaskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId())).findFirst().orElse(null); |
| | | if (tTaskDetail!=null){ |
| | | taskTodayVO.setRemark(tTaskDetail.getAuditRemark()); |
| | | } |
| | | // 任务记录ids |
| | | List<String> collect = taskAll.stream().map(TTask::getId).collect(Collectors.toList()); |
| | | if (!collect.isEmpty()){ |
| | | List<TInspector> list1 = inspectorService.lambdaQuery() |
| | | |
| | | .in(TInspector::getTaskId, collect).eq(TInspector::getStatus, 2).list(); |
| | | for (TInspector tInspector : list1) { |
| | | TaskPendingVO taskTodayVOOne = new TaskPendingVO(); |
| | | BeanUtils.copyProperties(tTask, taskTodayVOOne); |
| | | taskTodayVOOne.setId(tInspector.getId()); |
| | | TLocation tLocationOne = locationList.stream().filter(e -> e.getId().equals(tTask.getLocationId())).findFirst().orElse(null); |
| | | if (tLocationOne != null) { |
| | | taskTodayVOOne.setLocationAddress(tLocationOne.getLocationAddress()); |
| | | taskTodayVOOne.setLocationLon(tLocationOne.getLocationLon()); |
| | | taskTodayVOOne.setLocationLat(tLocationOne.getLocationLat()); |
| | | taskTodayVOOne.setLocationName(tLocationOne.getLocationName()); |
| | | if(StringUtils.hasLength(dto.getLon())){ |
| | | Map<String, String> distance = amapApiClient.getDistance(dto.getLon() + "," + dto.getLat(), tLocationOne.getLocationLon() + "," + tLocationOne.getLocationLat(), 1); |
| | | if (distance != null) { |
| | | taskTodayVOOne.setDistance(new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN)); |
| | | } else { |
| | | taskTodayVOOne.setDistance(new BigDecimal("0")); |
| | | } |
| | | }else { |
| | | taskTodayVOOne.setDistance(new BigDecimal("0")); |
| | | } |
| | | TLocationType tLocationType = locationTypeList.stream().filter(e -> e.getId().equals(tLocationOne.getLocationType())).findFirst().orElse(null); |
| | | if (tLocationType != null) { |
| | | taskTodayVOOne.setLocationTypeName(tLocationType.getLocationName()); |
| | | taskTodayVOOne.setLocationTypeIcon(tLocationType.getLocationIcon()); |
| | | } |
| | | } |
| | | taskTodayVOOne.setStatus(4); |
| | | taskTodayVOOne.setRemark(tInspector.getAuditRemark()); |
| | | pendingTask.add(taskTodayVOOne); |
| | | } |
| | | } |
| | | pendingTask.add(taskTodayVO); |
| | | } |
| | | // 将pendingTask按照距离 从小到大排序 |
| | | pendingTask.sort(Comparator.comparing(TaskPendingVO::getDistance)); |
| | | res.setPendingTask(pendingTask); |
| | | res.setLeaveList(leaveList); |
| | | List<TaskTodayVO> todayTask = new ArrayList<>(); |
| | |
| | | taskTodayVO.setLocationTypeIcon(tLocationType.getLocationIcon()); |
| | | } |
| | | } |
| | | TTaskDetail tTaskDetail = taskDetailsStatus1.stream().filter(e -> e.getTaskId().equals(tTask.getId())).findFirst().orElse(null); |
| | | if (tTaskDetail != null) { |
| | | String unqualified = tTaskDetail.getUnqualified(); |
| | | TDictData dictData = dictDataService.lambdaQuery().eq(TDictData::getId, unqualified).one(); |
| | | if (dictData != null) { |
| | | taskTodayVO.setRemark(dictData.getDataContent()); |
| | | } |
| | | TTaskDetail tTaskDetail = tTaskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId())).findFirst().orElse(null); |
| | | if (tTaskDetail!=null){ |
| | | taskTodayVO.setRemark(tTaskDetail.getAuditRemark()); |
| | | } |
| | | todayTask.add(taskTodayVO); |
| | | |
| | | } |
| | | // 将todayTask进行排序 优先根据status状态排序,优先展示未执行、超时、待整改、待确认、整改完成、已完成,然后状态一样再根据距离排序 |
| | | sortTodayTasks(todayTask); |
| | | res.setTodayTask(todayTask); |
| | | List<TaskTomorrowVO> tomorrowTask = new ArrayList<>(); |
| | | |
| | |
| | | } |
| | | Collections.shuffle(tomorrowTask); |
| | | res.setTomorrowTask(tomorrowTask); |
| | | res.setIsLeave(0); |
| | | // 查询请假状态 |
| | | List<TLeave> list2 = leaveService.lambdaQuery().eq(TLeave::getLeavePerson, userId) |
| | | .eq(TLeave::getAuditStatus, 2) |
| | | .list(); |
| | | for (TLeave tLeave : list2) { |
| | | LocalDate now = LocalDate.now(); |
| | | LocalDate startDate = tLeave.getStartTime().toLocalDate(); |
| | | LocalDate endDate = tLeave.getStartTime().toLocalDate(); |
| | | if (now.isAfter(startDate) && now.isBefore(endDate)) { |
| | | res.setIsLeave(1); |
| | | } else if (now.isEqual(startDate) || now.isEqual(endDate)) { |
| | | res.setIsLeave(1); |
| | | } |
| | | } |
| | | return R.ok(res); |
| | | } |
| | | public static void sortTodayTasks(List<TaskTodayVO> taskList) { |
| | | Map<Integer, Integer> statusOrder = new HashMap<>(); |
| | | statusOrder.put(1, 0); |
| | | statusOrder.put(2, 1); |
| | | statusOrder.put(4, 2); |
| | | statusOrder.put(3, 3); |
| | | statusOrder.put(5, 4); |
| | | statusOrder.put(6, 5); |
| | | |
| | | taskList.sort(Comparator.comparingInt((TaskTodayVO o) -> statusOrder.getOrDefault(o.getStatus(), Integer.MAX_VALUE)).thenComparing(TaskTodayVO::getDistance)); |
| | | } |
| | | |
| | | } |
| | | |