package com.ruoyi.web.controller.api; import cn.hutool.core.util.RandomUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.applet.dto.*; import com.ruoyi.system.applet.query.*; import com.ruoyi.system.applet.vo.*; import com.ruoyi.system.model.*; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.*; import com.ruoyi.web.controller.tool.AmapApiClient; import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ; import com.sun.org.apache.bcel.internal.generic.NEW; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** *

* 任务记录 前端控制器 *

* * @author xiaochen * @since 2025-05-28 */ @Api(tags = "首页") @RestController @RequestMapping("/t-index") public class TIndexController { @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 ISysRoleService roleService; @Resource private TDictDataService dictDataService; @Resource private TLeaveService leaveService; @Resource private TLeaveAuditService leaveAuditService; @Resource private TokenService tokenService; @Resource private TAppealService appealService; @Resource private TInspectorService inspectorService; @Resource private TFeedbackService feedbackService; @Resource private TProblemEscalationService problemEscalationService; @Autowired private AmapApiClient amapApiClient; @Resource private TSystemBulletinService systemBulletinService; @ApiOperation(value = "首页-系统公告") @PostMapping(value = "/systemBulletin") public R systemBulletin() { TSystemBulletin systemBulletin = systemBulletinService.lambdaQuery().eq(TSystemBulletin::getStatus, 1).last("limit 1").one(); return R.ok(systemBulletin); } @ApiOperation(value = "首页-数据概览-更多") @PostMapping(value = "/dataReport") public R dataReport(@RequestBody DataReportDTO dto) { DataReportQuery dataReportQuery = new DataReportQuery(); 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 dataList = dictDataService.list(); List projectDepts = projectDeptService.list(); List taskDetails = taskDetailService.lambdaQuery() .isNotNull(TTaskDetail::getClearStatus) .eq(TTaskDetail::getHandleType,1) .eq(TTaskDetail::getAuditStatus,1) .orderByDesc(BaseModel::getCreateTime) .list(); taskDetails = new ArrayList<>(taskDetails.stream() .collect(Collectors.groupingBy( TTaskDetail::getTaskId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); List userDeptIds = new ArrayList<>(); LambdaQueryWrapper tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(dto.getProjectId())) { TProjectDept projectDept = projectDeptService.getById(dto.getProjectId()); if (!projectDept.getParentId().equals("0")) { tTaskLambdaQueryWrapper.eq(TTask::getProjectId, projectDept.getId()); userDeptIds.add(projectDept.getId()); } else { List list = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()).list(); List deptIds = list.stream().map(TProjectDept::getId).collect(Collectors.toList()); if (!deptIds.isEmpty()) { userDeptIds.addAll(deptIds); tTaskLambdaQueryWrapper.in(TTask::getProjectId, deptIds); } else { tTaskLambdaQueryWrapper.eq(TTask::getProjectId, "-1"); userDeptIds.add("-1"); } } } else { // 根据当前登录人查询部门 Long userId = tokenService.getLoginUserApplet().getUserId(); SysUser sysUser = sysUserService.selectUserById(userId); if (sysUser.getDeptType() == 1) { TProjectDept projectDept = projectDeptService.getById(sysUser.getDeptId()); if (projectDept != null) { if (!"0".equals(projectDept.getParentId())) { tTaskLambdaQueryWrapper.eq(TTask::getProjectId, projectDept.getId()); userDeptIds.add(projectDept.getId()); } else { userDeptIds.add(projectDept.getId()); List list = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()).list(); List deptIds = list.stream().map(TProjectDept::getId).collect(Collectors.toList()); if (!deptIds.isEmpty()) { tTaskLambdaQueryWrapper.in(TTask::getProjectId, deptIds); userDeptIds.addAll(deptIds); } else { tTaskLambdaQueryWrapper.eq(TTask::getProjectId, "-1"); userDeptIds.add("-1"); } } } } } dataReportQuery.setProjectIds(userDeptIds); if (StringUtils.hasLength(dto.getStartTime())) { 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); LocalDateTime endOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MAX); String startOfTodayStr = startOfToday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); String endOfTodayStr = endOfToday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, startOfTodayStr); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, endOfTodayStr); } // tTaskLambdaQueryWrapper.ne(TTask::getStatus, 1); List tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); HashMap taskMap = new HashMap<>(); HashMap statusMap = new HashMap<>(); statusMap.put("未执行", 0); statusMap.put("超时", 0); statusMap.put("待确认", 0); statusMap.put("已驳回", 0); statusMap.put("已完成", 0); HashMap clearMap = new HashMap<>(); clearMap.put("合格", 0); clearMap.put("不合格", 0); HashMap unqualifiedMap = new HashMap<>(); List dictData = dataList.stream().filter(e -> e.getDataType() == 2).collect(Collectors.toList()); for (TDictData dictDatum : dictData) { unqualifiedMap.put(dictDatum.getDataContent(), 0); } for (TTask task : tasks) { TProjectDept tProjectDept = projectDepts.stream().filter(e -> e.getId().equals(task.getProjectId())).findFirst().orElse(null); if (tProjectDept == null) continue; taskMap.put(tProjectDept.getProjectName(), taskMap.getOrDefault(tProjectDept.getProjectName(), 0) + 1); StringBuilder temp = new StringBuilder(); switch (task.getStatus()) { case 1: temp.append("未执行"); break; case 2: temp.append("超时"); break; case 3: temp.append("待确认"); break; case 4: temp.append("已驳回"); break; case 5: temp.append("已完成"); break; case 6: temp.append("已完成"); break; } 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){ switch (tTaskDetail.getClearStatus()) { case 1: temp1.append("合格"); break; case 2: temp1.append("不合格"); TDictData tDictData = dataList.stream().filter(e -> e.getId().equals(tTaskDetail.getUnqualified())).findFirst().orElse(null); if (tDictData != null){ unqualifiedMap.put(tDictData.getDataContent(), unqualifiedMap.getOrDefault(tDictData.getDataContent(), 0) + 1); } break; } clearMap.put(temp1.toString(), clearMap.getOrDefault(temp1.toString(), 0) + 1); } } PageInfo taskFinishListVOPageInfo = sysUserService.pageListReport(dataReportQuery); for (TaskFinishListVO record : taskFinishListVOPageInfo.getRecords()) { int pass=0; int unPass=0; List userTaskList = tasks.stream().filter(e -> e.getPatrolInspector().equals(record.getUserId() + "")).collect(Collectors.toList()); List 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){ switch (tTaskDetail.getClearStatus()){ case 1: pass++; break; case 2: unPass++; break; } } } 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); record.setFinish(!userTaskList.isEmpty()?new BigDecimal(userTaskListPass.size()).divide(new BigDecimal(userTaskList.size()),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):BigDecimal.ZERO); } // PageInfo taskFinishListVOPageInfo = new PageInfo<>(); // Page page = new Page<>(dto.getPageNum(), dto.getPageSize()); // Page tasksPage = taskCleanerService.page(page, tTaskLambdaQueryWrapper); res.setTaskMap(taskMap); res.setStatusMap(statusMap); res.setClearMap(clearMap); res.setUnqualifiedMap(unqualifiedMap); res.setTaskFinishList(taskFinishListVOPageInfo); return R.ok(res); } @ApiOperation(value = "根据当前登陆人查询项目部/片区不分页列表") @PostMapping(value = "/list") public R> list() { List list = projectDeptService.list(new LambdaQueryWrapper() .eq(TProjectDept::getParentId, "0") .eq(TProjectDept::getStatus, 1)); List projectDeptListNoLimitVOS = new ArrayList<>(); for (TProjectDept tProjectDept : list) { ProjectDeptListNoLimitVO projectDeptListNoLimitVO = new ProjectDeptListNoLimitVO(); BeanUtils.copyProperties(tProjectDept, projectDeptListNoLimitVO); List list1 = projectDeptService.list(new LambdaQueryWrapper() .eq(TProjectDept::getParentId, tProjectDept.getId()) .eq(TProjectDept::getStatus, 1)); List projectDeptListNoLimitVOS1 = new ArrayList<>(); for (TProjectDept projectDept : list1) { ProjectDeptListNoLimitVO projectDeptListNoLimitVO1 = new ProjectDeptListNoLimitVO(); BeanUtils.copyProperties(projectDept, projectDeptListNoLimitVO1); projectDeptListNoLimitVOS1.add(projectDeptListNoLimitVO1); } projectDeptListNoLimitVO.setChildrenList(projectDeptListNoLimitVOS1); projectDeptListNoLimitVOS.add(projectDeptListNoLimitVO); } return R.ok(projectDeptListNoLimitVOS); } @Resource private TNoticeService noticeService; @ApiOperation(value = "首页") @PostMapping(value = "/index") public R index(@RequestBody IndexDTO dto) throws IOException { 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 projectListAll = projectDeptService.list(); List locationList = locationService.list(); List locationTypeList = locationTypeService.list(); dto.setUserId(userId); List taskAll = taskCleanerService.indexTask(dto); // List 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); String startOfTodayStr = startOfToday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); String endOfTodayStr = endOfToday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); List taskToday = taskCleanerService.lambdaQuery() .between(TTask::getImplementTime, startOfTodayStr, endOfTodayStr) .eq(TTask::getPatrolInspector, userId).list(); List sysUsers = sysUserService.selectAllList(); SysUser sysUser = sysUserService.selectUserById(userId); Long userRole = sysUserService.getUserRole(userId); SysRole sysRole = roleService.selectRoleById(userRole); List users = new ArrayList<>(); if (!sysRole.getRoleName().equals("现场管理员")) { if (sysUser.getDeptType() == 1) { TProjectDept projectDept = projectDeptService.getById(sysUser.getDeptId()); if (projectDept != null) { if ("0".equals(projectDept.getParentId())) { List 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 ->collect.contains(e.getDeptId()) && e.getStatus().equals("0") && e.getDeptType() == 1).collect(Collectors.toList()); } else { TProjectDept parent = projectDeptService.getById(projectDept.getParentId()); users = sysUsers.stream().filter(e -> e.getDeptId() .equals(parent.getId()) && e.getStatus().equals("0") && e.getDeptType() == 1).collect(Collectors.toList()); List list = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, parent.getId()).list(); List deptIds = list.stream().map(TProjectDept::getId).collect(Collectors.toList()); if (!deptIds.isEmpty()) { List collect = sysUsers.stream().filter(e -> deptIds .contains(e.getDeptId()) && e.getStatus().equals("0") && e.getDeptType() == 1).collect(Collectors.toList()); users.addAll(collect); } } } } else { TDept dept = deptService.getById(sysUser.getDeptId()); if (dept != null) { if (!dept.getDeptName().contains("公司")) { users = sysUsers.stream().filter(e -> e.getDeptType() == 1).collect(Collectors.toList()); } } } } List pendingTask = new ArrayList<>(); res.setTotalUserCount(users.size()); if (!users.isEmpty()) { List userIds = users.stream().map(SysUser::getUserId).collect(Collectors.toList()); List tasks = taskCleanerService.lambdaQuery().in(TTask::getPatrolInspector, userIds).list(); List taskIds = tasks.stream().map(TTask::getId).collect(Collectors.toList()); if (!tasks.isEmpty()) { List status1 = tasks.stream().filter(e -> e.getStatus() == 5 || e.getStatus() == 6).collect(Collectors.toList()); List status2 = tasks.stream().filter(e -> e.getStatus() != 5 && e.getStatus() != 6).collect(Collectors.toList()); res.setMiddle(!status1.isEmpty() ? new BigDecimal(status1.size()) .divide(new BigDecimal(status1.size() + status2.size()), 2, RoundingMode.HALF_DOWN) .multiply(new BigDecimal(100)) : new BigDecimal(0)); List taskDetails = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus, 1) .in(TTaskDetail::getTaskId, taskIds) .isNotNull(TTaskDetail::getClearStatus) .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 status3 = taskDetails.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList()); List status4 = taskDetails.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList()); 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)); } } else { res.setMiddle(new BigDecimal(0)); res.setRate(new BigDecimal(0)); } } else { res.setRate(new BigDecimal(0)); res.setMiddle(new BigDecimal(0)); res.setPendingTask(new ArrayList<>()); } List leaveList = new ArrayList<>(); List list = leaveService.lambdaQuery().eq(TLeave::getAuditId, userId).eq(TLeave::getAuditStatus, 1).list(); for (TLeave tLeave : list) { LeaveUserListVO leaveUserListVO = new LeaveUserListVO(); BeanUtils.copyProperties(tLeave, leaveUserListVO); SysUser user = sysUsers.stream() .filter(e -> e.getUserId().equals(Long.valueOf(tLeave.getLeavePerson()))).findFirst() .orElse(null); if (user == null) continue; leaveUserListVO.setLeavePersonName(user.getNickName()); leaveUserListVO.setCreateTime1(tLeave.getCreateTime()); leaveUserListVO.setStartTime1(tLeave.getStartTime()); leaveUserListVO.setEndTime1(tLeave.getEndTime()); leaveList.add(leaveUserListVO); } List taskList = taskAll.stream().filter(e -> e.getPatrolInspector().equals(userId + "") && e.getStatus() == 4).collect(Collectors.toList()); List taskIds = taskList.stream().map(TTask::getId).collect(Collectors.toList()); // 驳回原因 List tTaskDetails = taskDetailService.list(new LambdaQueryWrapper() .eq(TTaskDetail::getHandleType,3).groupBy(TTaskDetail::getTaskId).orderByDesc(TTaskDetail::getCreateTime)); for (TTask tTask : taskList) { List taskDetailsStatus1 = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus, 1).in(TTaskDetail::getTaskId, taskIds) .eq(TTaskDetail::getClearStatus, 2) .groupBy(TTaskDetail::getTaskId) .orderByDesc(TTaskDetail::getCreateTime).list(); TaskPendingVO taskTodayVO = new TaskPendingVO(); BeanUtils.copyProperties(tTask, taskTodayVO); TLocation tLocation = locationList.stream().filter(e -> e.getId().equals(tTask.getLocationId())).findFirst().orElse(null); if (tLocation != null) { taskTodayVO.setLocationAddress(tLocation.getLocationAddress()); taskTodayVO.setLocationLon(tLocation.getLocationLon()); taskTodayVO.setLocationLat(tLocation.getLocationLat()); taskTodayVO.setLocationName(tLocation.getLocationName()); if(StringUtils.hasLength(dto.getLon())){ taskTodayVO.setDistance(tTask.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)); // Map 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")); } TLocationType tLocationType = locationTypeList.stream().filter(e -> e.getId().equals(tLocation.getLocationType())).findFirst().orElse(null); if (tLocationType != null) { taskTodayVO.setLocationTypeName(tLocationType.getLocationName()); taskTodayVO.setLocationTypeIcon(tLocationType.getLocationIcon()); } } TTaskDetail tTaskDetail = tTaskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId())).findFirst().orElse(null); if (tTaskDetail!=null){ taskTodayVO.setRemark(tTaskDetail.getAuditRemark()); } // 任务记录ids List collect = taskAll.stream().map(TTask::getId).collect(Collectors.toList()); if (!collect.isEmpty()){ List 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 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 todayTask = new ArrayList<>(); List collect = taskAll.stream().map(TTask::getId).collect(Collectors.toList()); for (TTask tTask : taskToday) { TaskTodayVO taskTodayVO = new TaskTodayVO(); if(CollectionUtils.isEmpty(collect)){ break; } List taskDetailsStatus1 = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus, 1).in(TTaskDetail::getTaskId, collect) .eq(TTaskDetail::getClearStatus, 2) .groupBy(TTaskDetail::getTaskId) .orderByDesc(TTaskDetail::getCreateTime).list(); BeanUtils.copyProperties(tTask, taskTodayVO); TLocation tLocation = locationList.stream().filter(e -> e.getId().equals(tTask.getLocationId())).findFirst().orElse(null); if (tLocation != null) { taskTodayVO.setLocationAddress(tLocation.getLocationAddress()); taskTodayVO.setLocationLon(tLocation.getLocationLon()); taskTodayVO.setLocationLat(tLocation.getLocationLat()); taskTodayVO.setLocationName(tLocation.getLocationName()); if(StringUtils.hasLength(dto.getLon())){ Map 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")); } TLocationType tLocationType = locationTypeList.stream().filter(e -> e.getId().equals(tLocation.getLocationType())).findFirst().orElse(null); if (tLocationType != null) { taskTodayVO.setLocationTypeName(tLocationType.getLocationName()); taskTodayVO.setLocationTypeIcon(tLocationType.getLocationIcon()); } } 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 tomorrowTask = new ArrayList<>(); for (TaskTodayVO taskTodayVO : todayTask) { TaskTomorrowVO taskTomorrowVO = new TaskTomorrowVO(); BeanUtils.copyProperties(taskTodayVO, taskTomorrowVO); tomorrowTask.add(taskTomorrowVO); } Collections.shuffle(tomorrowTask); res.setTomorrowTask(tomorrowTask); res.setIsLeave(0); // 查询请假状态 List 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 taskList) { Map 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)); } }