From b2e3d6532dbbb3929e01a598dcef7eb07f39b826 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期五, 11 七月 2025 09:30:27 +0800 Subject: [PATCH] 保洁巡检本周代码 --- ruoyi-common/src/main/java/com/ruoyi/common/utils/MultipartFileUtil.java | 4 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java | 4 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java | 49 ++++++++- ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskDetailVO.java | 8 + ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java | 1 ruoyi-system/src/main/resources/mapper/system/TLocationMapper.xml | 2 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java | 3 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java | 5 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java | 31 +++++- ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml | 25 +++- ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java | 90 ++++++++++++++--- ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java | 5 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppealServiceImpl.java | 8 + ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java | 8 + ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java | 4 ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java | 4 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java | 7 + ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java | 4 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java | 30 +++++ ruoyi-system/src/main/java/com/ruoyi/system/model/TTaskDetail.java | 3 20 files changed, 234 insertions(+), 61 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java index 2585930..f57fade 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/DataStatisticsController.java @@ -1195,7 +1195,7 @@ } } } - map.put("qualifiedRate", new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_UP)); + map.put("qualifiedRate", new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_DOWN)); return R.ok(map); } @@ -1330,7 +1330,7 @@ } } } - locationStatisticsVO.setPassRate(new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_UP)); + locationStatisticsVO.setPassRate(new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_DOWN)); return R.ok(locationStatisticsVO); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java index b0570e3..f6d0d24 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java @@ -206,7 +206,7 @@ break; } } - LocalDateTime localDateTime = tTemplate.getCreateTime().plusDays(temp); + LocalDateTime localDateTime = tTemplate.getCreateTime().plusDays(temp-1); stringBuilder.append(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); record.setTemplateDate(stringBuilder.toString()); } @@ -429,7 +429,10 @@ 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()); + List<String> locationIds = locations.stream().filter(e -> + e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId())&& + e.getLocationType().equals(locationTypeListByProjectVO.getId())) + .map(TLocation::getId).collect(Collectors.toList()); if (locationIds.isEmpty()) { locationTypeListByProjectVO.setLocationNum(0); } else { @@ -707,8 +710,8 @@ 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.ge(TLeave::getCreateTime, query.getStartTime()+" :00:00:00"); + tLeaveLambdaQueryWrapper.le(TLeave::getCreateTime, query.getEndTime()+" :23:59:59"); } tLeaveLambdaQueryWrapper.eq(TLeave::getAuditStatus,2); List<TLeave> leaves = leaveService.list(tLeaveLambdaQueryWrapper); @@ -748,15 +751,15 @@ 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()); + tTaskLambdaQueryWrapper.ge(TTask::getCreateTime, query.getStartTime()+" :00:00:00"); + tTaskLambdaQueryWrapper.le(TTask::getCreateTime, query.getEndTime()+" :23:59:59"); } 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); - + sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList()); for (SysUser sysUser : sysUsers) { PatrolInspectorVO patrolInspectorVO = new PatrolInspectorVO(); @@ -779,10 +782,22 @@ } // 查询巡检员任务ids List<String> taskIds = tasks.stream().filter(e->e.getPatrolInspector().equals(sysUser.getUserId()+"")).map(TTask::getId).collect(Collectors.toList()); + if (taskIds.isEmpty()){ + taskIds.add("-1"); + } + // 完成的任务 + List<String> taskIdsFinish = tasks.stream().filter(e-> + (e.getStatus()==5 || e.getStatus()==6) + && + e.getPatrolInspector().equals(sysUser.getUserId()+"")).map(TTask::getId).collect(Collectors.toList()); + + if (taskIdsFinish.isEmpty()){ + taskIdsFinish.add("-1"); + } 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(); + .in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIdsFinish).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()); @@ -873,6 +888,7 @@ sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); + sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList()); for (SysUser sysUser : sysUsers) { @@ -896,10 +912,22 @@ } // 查询巡检员任务ids List<String> taskIds = tasks.stream().filter(e->e.getPatrolInspector().equals(sysUser.getUserId()+"")).map(TTask::getId).collect(Collectors.toList()); + if (taskIds.isEmpty()){ + taskIds.add("-1"); + } + // 完成的任务 + List<String> taskIdsFinish = tasks.stream().filter(e-> + (e.getStatus()==5 || e.getStatus()==6) + && + e.getPatrolInspector().equals(sysUser.getUserId()+"")).map(TTask::getId).collect(Collectors.toList()); + + if (taskIdsFinish.isEmpty()){ + taskIdsFinish.add("-1"); + } 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(); + .in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIdsFinish).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()); @@ -1004,6 +1032,7 @@ } List<InspectorVO> res = new ArrayList<>(); List<TInspector> inspectors = inspectorService.list(tTaskLambdaQueryWrapper); + sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList()); for (SysUser sysUser : sysUsers) { InspectorVO inspectorVO = new InspectorVO(); inspectorVO.setNickName(sysUser.getNickName()); @@ -1091,6 +1120,8 @@ } List<InspectorVO> res = new ArrayList<>(); List<TInspector> inspectors = inspectorService.list(tTaskLambdaQueryWrapper); + sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList()); + for (SysUser sysUser : sysUsers) { InspectorVO inspectorVO = new InspectorVO(); inspectorVO.setNickName(sysUser.getNickName()); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java index b4a6ab0..4fe08ac 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java @@ -14,6 +14,7 @@ import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.AppealDetailVO; import com.ruoyi.system.vo.system.AppealListVO; +import com.tencentcloudapi.es.v20180416.models.TaskDetail; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.util.CollectionUtils; @@ -185,24 +186,49 @@ TTask task = taskCleanService.getById(appeal.getTaskId()); TLocation location = locationService.getById(task.getLocationId()); TNotice tNotice = new TNotice(); - tNotice.setUserId(dto.getAppealPerson()); + tNotice.setUserId(appeal.getAppealPerson()); tNotice.setStatus(1); tNotice.setDataId(dto.getId()); dto.setAuditTime(LocalDateTime.now()); + TTaskDetail taskDetail = new TTaskDetail(); + taskDetail.setTaskId(appeal.getTaskId()); + Long count = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, appeal.getTaskId()) + .eq(TTaskDetail::getHandleType, 1).count(); if (dto.getStatus()==2){ + taskDetail.setClearStatus(1); + taskDetail.setAuditTime(LocalDateTime.now()); + taskDetail.setAuditPerson(tokenService.getLoginUser().getUserId()+""); + taskDetail.setAuditStatus(1); + taskDetail.setAuditRemark(dto.getAuditRemark()); + taskDetail.setHandleType(5); + taskDetail.setAppealId(dto.getId()); // 通过 TTask byId = taskCleanService.getById(dto.getTaskId()); - byId.setStatus(6); + if (count>1){ + byId.setStatus(5); + }else{ + byId.setStatus(6); + + } + taskCleanService.updateById(byId); tNotice.setNoticeType(5); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务申诉通过"); }else{ + taskDetail.setClearStatus(2); + taskDetail.setAuditTime(LocalDateTime.now()); + taskDetail.setAuditPerson(tokenService.getLoginUser().getUserId()+""); + taskDetail.setAuditStatus(2); + taskDetail.setAuditRemark(dto.getAuditRemark()); + taskDetail.setHandleType(6); + taskDetail.setAppealId(dto.getId()); tNotice.setNoticeType(4); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务申诉驳回"); } noticeService.save(tNotice); dto.setAuditPerson(tokenService.getLoginUser().getUserId()+""); appealService.updateById(dto); + tTaskDetailService.save(taskDetail); return R.ok(); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java index 5c0dab0..5b70801 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java @@ -164,6 +164,9 @@ } } }); + locationTypeList.stream().filter(e -> e.getId().equals(tLocation.getLocationType())).findFirst() + .ifPresent(tLocationType -> temp.setLocationTypeName(tLocationType.getLocationName())); + } TTaskDetail one = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, tTask.getId()) .orderByDesc(TTaskDetail::getCreateTime).last("limit 1").one(); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java index 5bcbb49..fa09d0b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java @@ -9,6 +9,7 @@ import cn.afterturn.easypoi.excel.entity.TemplateExportParams; import cn.hutool.core.io.resource.ClassPathResource; import com.ruoyi.common.core.domain.BaseModel; +import com.ruoyi.common.utils.CodeGenerateUtils; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.WebUtils; import com.ruoyi.framework.web.service.TokenService; @@ -161,6 +162,9 @@ @ApiOperation(value = "新增任务") @PostMapping(value = "/add") public R<Boolean> add(@RequestBody TTaskDTO dto) { + String nameAndCode = CodeGenerateUtils.generateVolumeSn(); + dto.setTaskName(nameAndCode); + dto.setTaskCode(nameAndCode); dto.setTaskType(2); String implementTime1 = dto.getImplementTime1(); // 转化为LocalDateTime类型 @@ -177,6 +181,7 @@ dto.setAuditTime(LocalDateTime.now()); TTask task = taskCleanerService.getById(dto.getTaskId()); TTaskDetail one = taskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, dto.getTaskId()) + .eq(TTaskDetail::getHandleType,1) .orderByDesc(BaseModel::getCreateTime).last("limit 1").one(); dto.setClearStatus(one.getClearStatus()); TLocation location = locationService.getById(task.getLocationId()); @@ -197,20 +202,33 @@ tNotice.setNoticeContent("【"+location.getLocationName()+"】任务不合格,请重新上传!"); }else{ + dto.setHandleType(2); // 如果是初次审核就通过 将状态设置为已完成 - List<TTaskDetail> list = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, dto.getTaskId()).list(); - if (list.isEmpty()){ + List<TTaskDetail> list = tTaskDetailService.lambdaQuery() + .eq(TTaskDetail::getHandleType,1) + .eq(TTaskDetail::getTaskId, dto.getTaskId()).list(); + if (one.getClearStatus()==1){ + if (list.size()<2){ task.setStatus(6); taskCleanerService.updateById(task); tNotice.setNoticeType(2); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务已通过"); + }else{ + task.setStatus(5); + taskCleanerService.updateById(task); + tNotice.setNoticeType(2); + tNotice.setNoticeContent("【"+location.getLocationName()+"】任务已通过"); + } }else{ - task.setStatus(5); + // 将任务修改为待整改 + task.setStatus(4); taskCleanerService.updateById(task); - tNotice.setNoticeType(2); - tNotice.setNoticeContent("【"+location.getLocationName()+"】任务已通过"); + // 增加消息 + tNotice.setNoticeType(1); + tNotice.setNoticeContent("【"+location.getLocationName()+"】任务不合格,请重新上传!"); } + } noticeService.save(tNotice); dto.setAuditPerson(tokenService.getLoginUser().getUserId()+""); @@ -275,6 +293,9 @@ tTaskDetail.setUnqualifiedName(byId3.getDataContent()); } } + if (tTaskDetail!=null){ + tTaskDetail.setFinishTime(tTaskDetail.getCreateTime()); + } taskDetailVO.setTaskDetail(tTaskDetail); taskDetailVO.setRecords(list); return R.ok(taskDetailVO); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java index cd7f8c0..f45740d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java @@ -470,7 +470,7 @@ } } } - taskSituationVO.setPassRate(new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_UP)); + taskSituationVO.setPassRate(new BigDecimal(qualifiedWarn).divide(new BigDecimal(tasks.size()), 2, RoundingMode.HALF_DOWN)); // 过滤每天的任务 LocalDateTime start = DateUtils.stringToLocalDateTime(query.getStartTime()); @@ -508,7 +508,7 @@ if(tTasks.isEmpty()){ taskSituationDayVO.setCompleteRate(BigDecimal.ZERO); }else { - taskSituationDayVO.setCompleteRate(new BigDecimal(qualifiedWarnChild).divide(new BigDecimal(tTasks.size()), 2, RoundingMode.HALF_UP)); + taskSituationDayVO.setCompleteRate(new BigDecimal(qualifiedWarnChild).divide(new BigDecimal(tTasks.size()), 2, RoundingMode.HALF_DOWN)); } taskSituationDayVOList.add(taskSituationDayVO); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java index 52100ba..767d5fc 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java @@ -86,7 +86,10 @@ TTemplate byId = templateService.getById(templateId); SysRole sysRole = roleService.selectRoleById(byId.getRoleId()); List<SysRole> sysRoles = new ArrayList<>(); - sysRoles.add(sysRole); + if (sysRole!=null){ + sysRoles.add(sysRole); + + } return AjaxResult.success(sysRoles); } @PreAuthorize("@ss.hasPermi('system:role:count')") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java index f69a501..cbaddef 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java @@ -332,8 +332,8 @@ templateCount.setUserId(sysUser.getUserId()); templateCountService.save(templateCount); - taskCleanService.saveBatch(tasks); - taskCount = taskCount + tasks.size(); + taskCleanService.saveBatch(tasks); + taskCount = taskCount + tasks.size(); } template.setTaskCount(taskCount); templateService.updateById(template); diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java index ac756dc..fdb22cd 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java @@ -151,8 +151,7 @@ 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(); + 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); @@ -473,6 +472,8 @@ } pendingTask.add(taskTodayVO); } + // 将pendingTask按照距离 从小到大排序 + pendingTask.sort(Comparator.comparing(TaskPendingVO::getDistance)); res.setPendingTask(pendingTask); res.setLeaveList(leaveList); List<TaskTodayVO> todayTask = new ArrayList<>(); diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java index 8bb4677..f7b1ff1 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java @@ -118,6 +118,7 @@ TTaskDetail taskDetail = new TTaskDetail(); taskDetail.setTaskId(dto.getTaskId()); taskDetail.setHandleType(4); + taskDetail.setAppealId(dto.getId()); taskDetailService.save(taskDetail); return R.ok(); } diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java index 77c613d..117a79e 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java @@ -35,15 +35,13 @@ import javax.annotation.Resource; import javax.validation.Valid; 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.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -183,6 +181,8 @@ @PostMapping(value = "/userIndex") public R<UserIndexVO> userIndex() { UserIndexVO userIndexVO = new UserIndexVO(); + List<SysUser> userAll = sysUserService.selectAllList(); + List<SysUser> users = userAll.stream().filter(e -> e.getUserId() != 1).collect(Collectors.toList()); Long userId = tokenService.getLoginUserApplet().getUserId(); SysUser sysUser = sysUserService.selectUserById(userId); @@ -237,7 +237,9 @@ taskIds.add("-1"); } List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery() - .eq(TTaskDetail::getAuditStatus, 1).in(TTaskDetail::getTaskId, taskIds) + .in(TTaskDetail::getTaskId, taskIds) + .eq(TTaskDetail::getAuditStatus, 1) + .isNotNull(TTaskDetail::getClearStatus) .groupBy(TTaskDetail::getTaskId) .orderByDesc(TTaskDetail::getCreateTime).list(); @@ -253,8 +255,58 @@ } else { userIndexVO.setRate(new BigDecimal(0)); } - // todo 月排名 - userIndexVO.setRanking(0); + + // 判断时间 + String startTime = ""; + String endTime = ""; + Map<String, Date> monthDate = DateUtils.getMonthDate(new Date()); + startTime = new SimpleDateFormat("yyyy-MM-dd").format((monthDate.get("first"))) + " 00:00:00"; + endTime = new SimpleDateFormat("yyyy-MM-dd").format((monthDate.get("last"))) + " 23:59:59"; + List<TTask> taskRank = taskCleanerService.lambdaQuery().between(TTask::getImplementTime, startTime, endTime).list(); + List<String> taskIdsRank = taskRank.stream().map(TTask::getId).collect(Collectors.toList()); + if (taskIdsRank.isEmpty()){ + userIndexVO.setRanking(0); + }else{ + List<TTaskDetail> taskDetailsRank = taskDetailService.lambdaQuery().in(TTaskDetail::getTaskId) + .eq(TTaskDetail::getAuditStatus, 1) + .isNotNull(TTaskDetail::getClearStatus) + .groupBy(TTaskDetail::getTaskId) + .orderByDesc(TTaskDetail::getCreateTime).list(); + for (SysUser user : users) { + int finishCount = (int) taskRank.stream().filter(e->e.getPatrolInspector().equals(user.getUserId()+"")&&e.getStatus() == 5 || e.getStatus() == 6).count(); + int totalCount = (int) taskRank.stream().filter(e->e.getPatrolInspector().equals(user.getUserId()+"")).count(); + if (totalCount!=0){ + user.setFinish(new BigDecimal(finishCount).divide(new BigDecimal(totalCount),2, RoundingMode.HALF_DOWN)); + }else{ + user.setFinish(BigDecimal.ZERO); + } + List<TTaskDetail> status1User = taskDetails.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList()); + List<TTaskDetail> status2User = taskDetails.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList()); + if (!status1User.isEmpty()) { + BigDecimal divide = new BigDecimal(status1User.size() + status2User.size()) + .divide(new BigDecimal(status1User.size()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)); + user.setRate(divide); + } else { + user.setRate(new BigDecimal(0)); + } + } + // 将users进行排序,优先根据rate倒叙排序,如果rate相同 再finish倒叙排序 + users.sort((o1, o2) -> { + if (o1.getRate().compareTo(o2.getRate()) == 0) { + return o2.getFinish().compareTo(o1.getFinish()); + } else { + return o2.getRate().compareTo(o1.getRate()); + } + }); + // 查询当前登陆人处于哪一个排名 + for (int i = 0; i < users.size(); i++) { + if (users.get(i).getUserId().equals(userId)) { + userIndexVO.setRanking(i + 1); + break; + } + } + + } return R.ok(userIndexVO); } @@ -276,9 +328,11 @@ BeanUtils.copyProperties(byId, taskDetailVO); TLocation byId1 = locationService.getById(byId.getLocationId()); TLocationType byId2 = locationTypeService.getById(byId1.getLocationType()); + taskDetailVO.setLocationName(byId1.getLocationName()); taskDetailVO.setLocationAddress(byId1.getLocationAddress()); + taskDetailVO.setLocationAddressEnd(byId1.getLocationAddressEnd()); taskDetailVO.setLocationIcon(byId2.getLocationIcon()); - taskDetailVO.setLocationName(byId2.getLocationName()); + taskDetailVO.setLocationTypeName(byId2.getLocationName()); TTaskDetail tTaskDetail = list.stream().filter(e -> e.getHandleType() == 1).findFirst().orElse(null); TTaskDetail tTaskDetailFinish = list.stream().filter(e -> e.getHandleType() == 2).findFirst().orElse(null); if (tTaskDetail != null && tTaskDetail.getUnqualified() != null) { @@ -462,8 +516,8 @@ SysRole sysRole = roleService.selectRoleById(userRole); List<SysUser> sysUsers = sysUserService.selectAllList(); SysUser auditPerson = sysUserService.selectUserById(999L); - //项目负责人、部门负责人、公司成员提交由最终审批人审批; - if (user.getDeptType() == 2 || sysRole.getRoleName().contains("项目负责人") || sysRole.getRoleName().contains("部门负责人")) { + //项目部负责人、部门负责人、公司成员提交由最终审批人审批; + if (user.getDeptType() == 2 || sysRole.getRoleName().contains("项目部负责人") || sysRole.getRoleName().contains("部门负责人")) { LeaveAuditVO tLeaveAudit = new LeaveAuditVO(); tLeaveAudit.setAvatar(auditPerson.getAvatar()); tLeaveAudit.setNickName(auditPerson.getNickName()); @@ -471,13 +525,13 @@ res.setAuditPersonId("999"); } else if (!sysRole.getRoleName().equals("部门助理")) { // 审批人根据当前角色类型来 - if (sysRole.getRoleName().contains("现场负责人") || sysRole.getRoleName().contains("组长")) { + if (sysRole.getRoleName().contains("片区负责人") || sysRole.getRoleName().contains("组长/队长")||sysRole.getRoleName().contains("项目部助理")) { List<SysUser> collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 && e.getDeptId().equals(user.getDeptId())).collect(Collectors.toList()); for (SysUser sysUser : collect) { Long userRole1 = sysUserService.getUserRole(sysUser.getUserId()); SysRole sysRole1 = roleService.selectRoleById(userRole1); - if (sysRole1 != null && sysRole1.getRoleName().equals("项目负责人")) { + if (sysRole1 != null && sysRole1.getRoleName().equals("项目部负责人")) { LeaveAuditVO tLeaveAudit = new LeaveAuditVO(); tLeaveAudit.setAvatar(sysUser.getAvatar()); tLeaveAudit.setNickName(sysUser.getNickName()); @@ -549,8 +603,8 @@ leaveDTO.setTemplateId(user.getTemplateId()); leaveDTO.setLeavePerson(userId + ""); leaveService.save(leaveDTO); - //项目负责人、部门负责人、公司成员提交由最终审批人审批; - if (user.getDeptType() == 2 || sysRole.getRoleName().contains("项目负责人") || sysRole.getRoleName().contains("部门负责人")) { + //项目部负责人、部门负责人、公司成员提交由最终审批人审批; + if (user.getDeptType() == 2 || sysRole.getRoleName().contains("项目部负责人") || sysRole.getRoleName().contains("部门负责人")) { TLeaveAudit tLeaveAudit1 = new TLeaveAudit(); tLeaveAudit1.setLeaveId(leaveDTO.getId()); tLeaveAudit1.setAuditStatus(1); @@ -559,13 +613,13 @@ leaveAuditService.save(tLeaveAudit1); } else if (!sysRole.getRoleName().equals("部门助理")) { // 审批人根据当前角色类型来 - if (sysRole.getRoleName().contains("现场负责人") || sysRole.getRoleName().contains("组长")) { + if (sysRole.getRoleName().contains("片区负责人") || sysRole.getRoleName().contains("组长/队长")||sysRole.getRoleName().contains("项目部助理")) { List<SysUser> collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 && e.getDeptId().equals(user.getDeptId())).collect(Collectors.toList()); for (SysUser sysUser : collect) { Long userRole1 = sysUserService.getUserRole(sysUser.getUserId()); SysRole sysRole1 = roleService.selectRoleById(userRole1); - if (sysRole1 != null && sysRole1.getRoleName().equals("项目负责人")) { + if (sysRole1 != null && sysRole1.getRoleName().equals("项目部负责人")) { TLeaveAudit tLeaveAudit1 = new TLeaveAudit(); tLeaveAudit1.setLeaveId(leaveDTO.getId()); tLeaveAudit1.setAuditStatus(1); @@ -651,7 +705,7 @@ SysUser sysUser = sysUserService.selectUserById(Long.parseLong(leave.getLeavePerson())); Long userRole = sysUserService.getUserRole(sysUser.getUserId()); SysRole sysRole = roleService.selectRoleById(userRole); - if (sysRole.getRoleName().contains("现场负责人") || sysRole.getRoleName().equals("组长")) { + if (sysRole.getRoleName().contains("片区负责人") || sysRole.getRoleName().equals("组长/队长")||sysRole.getRoleName().contains("项目部助理")) { if (sysUser.getDeptType() == 1) { TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId()); if (!tProjectDept.getParentId().equals("0")) { @@ -664,7 +718,7 @@ TDept tDept = deptService.getById(sysUser.getDeptId()); leaveUserDetailVO.setDeptName(tDept.getDeptName()); } - } else if (sysRole.getRoleName().contains("项目负责人")) { + } else if (sysRole.getRoleName().contains("项目部负责人")) { TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId()); leaveUserDetailVO.setDeptName(tProjectDept.getProjectName()); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index 449b5a2..7034d98 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -11,6 +11,7 @@ import javax.validation.constraints.Email; import javax.validation.constraints.Size; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -49,6 +50,12 @@ @TableField("templateId") @ApiModelProperty(value = "所属任务模板id") private String templateId; + @TableField(exist = false) + @ApiModelProperty(value = "合格率") + private BigDecimal rate; + @TableField(exist = false) + @ApiModelProperty(value = "完成率") + private BigDecimal finish; /** 用户昵称 */ //@Excel(name = "用户名称") diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java index b6326c2..4e81d8e 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java @@ -91,7 +91,7 @@ { return BigDecimal.ZERO.doubleValue(); } - return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue(); + return b1.divide(b2, scale, RoundingMode.HALF_DOWN).doubleValue(); } /** @@ -109,6 +109,6 @@ } BigDecimal b = new BigDecimal(Double.toString(v)); BigDecimal one = BigDecimal.ONE; - return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue(); + return b.divide(one, scale, RoundingMode.HALF_DOWN).doubleValue(); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MultipartFileUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MultipartFileUtil.java index 3759d6a..31d4507 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MultipartFileUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MultipartFileUtil.java @@ -200,8 +200,8 @@ // FileInputStream fis = new FileInputStream(source); // fc= fis.getChannel(); // BigDecimal fileSize = new BigDecimal(fc.size()); -// //size = fileSize.divide(new BigDecimal(1048576), 2, RoundingMode.HALF_UP) + "MB"; -// size = fileSize.divide(new BigDecimal(1024*1024), 2, RoundingMode.HALF_UP) ; +// //size = fileSize.divide(new BigDecimal(1048576), 2, RoundingMode.HALF_DOWN) + "MB"; +// size = fileSize.divide(new BigDecimal(1024*1024), 2, RoundingMode.HALF_DOWN) ; // } catch (FileNotFoundException e) { // e.printStackTrace(); // } catch (IOException e) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TTaskDetail.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TTaskDetail.java index e9b0864..ae180eb 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TTaskDetail.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TTaskDetail.java @@ -46,6 +46,9 @@ @ApiModelProperty(value = "不合格原因名称") @TableField(exist = false) private String unqualifiedName; + @ApiModelProperty(value = "申诉记录id handleType=4 5 6 返回") + @TableField("appeal_id") + private String appealId; @ApiModelProperty(value = "备注") @TableField("remark") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppealServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppealServiceImpl.java index c40fd30..8c12ffc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppealServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppealServiceImpl.java @@ -78,7 +78,11 @@ PageInfo<AppealListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<AppealListVO> list = this.baseMapper.pageListUser(query,pageInfo); for (AppealListVO taskListVO : list) { - taskListVO.setDistance(taskListVO.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_UP)); + if (taskListVO.getDistance()!=null){ + taskListVO.setDistance(taskListVO.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)); + }else{ + taskListVO.setDistance(new BigDecimal(0)); + } } pageInfo.setRecords(list); return pageInfo; @@ -89,7 +93,7 @@ PageInfo<AppealListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TaskListAllVO> list = this.baseMapper.listAllTask(query,pageInfo); for (TaskListAllVO taskListAllVO : list) { - taskListAllVO.setDistance(taskListAllVO.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_UP)); + taskListAllVO.setDistance(taskListAllVO.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)); if (taskListAllVO.getStatus()==1 || taskListAllVO.getStatus()==2 ){ taskListAllVO.setStatus(1); }else{ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java index 833fdff..ae738b2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java @@ -20,6 +20,7 @@ import com.ruoyi.system.vo.system.TaskListVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.math.RoundingMode; @@ -90,7 +91,12 @@ PageInfo<TaskUserListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TaskUserListVO> list = this.baseMapper.pageListUser(query,pageInfo); for (TaskUserListVO taskUserListVO : list) { - taskUserListVO.setDistance(taskUserListVO.getDistance().divide(new BigDecimal("1000"),2, RoundingMode.HALF_UP)); + + if (taskUserListVO.getDistance()!=null){ + taskUserListVO.setDistance(taskUserListVO.getDistance().divide(new BigDecimal("1000"),2, RoundingMode.HALF_DOWN)); + }else{ + taskUserListVO.setDistance(new BigDecimal("0")); + } } pageInfo.setRecords(list); return pageInfo; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskDetailVO.java index 2be789e..652a3a4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskDetailVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskDetailVO.java @@ -14,12 +14,16 @@ @ApiModel(value = "任务详情VO") public class TaskDetailVO extends TTask { - @ApiModelProperty("位置") + @ApiModelProperty("起点位置") private String locationAddress; + @ApiModelProperty("结束位置") + private String locationAddressEnd; @ApiModelProperty("点位类型图标") private String locationIcon; - @ApiModelProperty("点位类型名称") + @ApiModelProperty("点位名称") private String locationName; + @ApiModelProperty("点位类型名称") + private String locationTypeName; @ApiModelProperty("完成情况") private TTaskDetail taskDetail; @ApiModelProperty("操作记录") diff --git a/ruoyi-system/src/main/resources/mapper/system/TLocationMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TLocationMapper.xml index f4b5b44..7e839ba 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TLocationMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TLocationMapper.xml @@ -46,7 +46,7 @@ and t1.location_cleaner = #{query.locationCleaner} </if> and t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} - + order by t1.create_time desc </select> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml index 8bb2557..b3120d7 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml @@ -65,7 +65,7 @@ select t1.*,t2.location_name as locationName,t3.location_name as locationTypeName, t2.location_address as locationAddress, t2.location_address_end as locationAddressEnd, - t3.location_icon as locatioTypeIcon, + t3.location_icon as locationTypeIcon, t5.clear_status as clearStatus, t4.nick_name as patrolInspectorName, t4.phonenumber as phonenumber, @@ -95,22 +95,30 @@ left join t_location t2 on t1.location_id = t2.id left join t_location_type t3 on t2.location_type = t3.id left join sys_user t4 on t1.patrol_inspector = t4.user_id - LEFT JOIN ( + inner JOIN ( SELECT t1.* FROM t_task_detail t1 - JOIN (SELECT task_id, MAX(create_time) AS max_time + left join (SELECT task_id, MAX(create_time) AS max_time FROM t_task_detail - GROUP BY task_id) AS t2 ON t1.task_id = t2.task_id AND t1.create_time = t2.max_time - where 1=1 - <if test="query.clearStatus != null"> - and t1.clear_status = #{query.clearStatus} - </if> + GROUP BY task_id + order by create_time desc + ) AS t2 ON t1.task_id = t2.task_id AND t1.create_time = t2.max_time + ) t5 on t1.id = t5.task_id where 1=1 and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} <if test="query.userId != null and query.userId != ''"> and t1.patrol_inspector = #{query.userId} + </if> + <if test="query.clearStatus != null and query.clearStatus == 1"> + and (t1.status = 5 or t1.status = 6) + </if> + <if test="query.clearStatus != null and query.clearStatus == 2"> + and (t1.status = 4 ) + </if> + <if test="query.clearStatus == null"> + and (t1.status = 4 or t1.status = 5 or t1.status = 6 ) </if> <if test="query.startTime != null and query.startTime != ''"> and (t1.implement_time between #{query.startTime} and #{query.endTime}) @@ -150,6 +158,7 @@ <if test="query.startTime != null and startTime != ''"> and (t1.implement_time between #{query.startTime} and #{query.endTime}) </if> + order by t1.update_time desc </select> <select id="taskProgress" resultType="com.ruoyi.system.vo.system.ProgressListVO"> select t1.*,t2.nick_name as nickName,t2.phonenumber,t3.template_name as templateName,count(*) as num2, -- Gitblit v1.7.1