ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OssController.java
@@ -36,7 +36,7 @@ * @author xiaochen * @since 2025-05-28 */ @Api(tags = "任务申诉") @Api(tags = "文件上传") @RestController @RequestMapping("/oss") public class OssController { ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java
New file @@ -0,0 +1,531 @@ package com.ruoyi.web.controller.api; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.BaseModel; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.model.*; import com.ruoyi.system.query.*; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.*; import com.ruoyi.web.util.OssUploadUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.models.auth.In; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import oshi.driver.mac.net.NetStat; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * <p> * 任务申诉 前端控制器 * </p> * * @author xiaochen * @since 2025-05-28 */ @Api(tags = "绩效报表") @RestController @RequestMapping("/report") public class ReportController { @Resource private TTaskCleanService taskCleanerService; @Resource private TTaskDetailService taskDetailService; @Resource private TLocationTypeService locationTypeService; @Resource private TLocationService locationService; @Resource private TProjectDeptService projectDeptService; @Resource private TTaskDetailService tTaskDetailService; @Resource private TDeptService deptService; @Resource private ISysUserService sysUserService; @Resource private TDictDataService dictDataService; @Resource private TokenService tokenService; @Resource private TTemplateService templateService; @Resource private TTemplateDetailService templateDetailService; @Resource private TLeaveService leaveService; @Resource private TInspectorService inspectorService; @ApiOperation(value = "任务进度分页列表查询") @PostMapping(value = "/taskProgress") public R<PageInfo<ProgressListVO>> taskProgress(@RequestBody TaskProgressQuery query) { List<SysUser> sysUsers = sysUserService.selectAllList(); if (StringUtils.hasLength(query.getDeptName())) { List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); List<String> deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); projectIds.addAll(deptIds); if (projectIds.isEmpty()) { return R.ok(new PageInfo<>()); } // 用户ids List<Long> collect = sysUsers.stream().filter(e -> e.getDeptType() == 1 && projectIds.contains(e.getDeptId())).map(SysUser::getUserId) .collect(Collectors.toList()); List<Long> collect1 = sysUsers.stream().filter(e -> e.getDeptType() == 2 && deptIds.contains(e.getDeptId())).map(SysUser::getUserId) .collect(Collectors.toList()); collect.addAll(collect1); if (collect.isEmpty()) { return R.ok(new PageInfo<>()); } query.setPatrolInspectorIds(collect); if (StringUtils.hasLength(query.getPhonenumber())) { List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()) { return R.ok(new PageInfo<>()); } else { patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); query.setPatrolInspectorIds(patrolInspectorIds); } } } if (StringUtils.hasLength(query.getPhonenumber())) { List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()) { return R.ok(new PageInfo<>()); } if (!query.getPatrolInspectorIds().isEmpty()) { // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); } PageInfo<ProgressListVO> progressListVOPageInfo = taskCleanerService.taskProgress(query); List<ProgressListVO> records = progressListVOPageInfo.getRecords(); List<TTemplate> templates = templateService.list(); List<TTemplateDetail> templateDetails = templateDetailService.list(); for (ProgressListVO record : records) { SysUser sysUser1 = sysUsers.stream().filter(sysUser -> sysUser.getUserId().equals(record.getUserId())).findFirst().orElse(null); if (sysUser1 != null) { if (sysUser1.getDeptType() == 1) { TProjectDept tProjectDept = projectDeptService.getById(sysUser1.getDeptId()); if (tProjectDept != null) { if (!tProjectDept.getParentId().equals("0")) { TProjectDept tProjectDept1 = projectDeptService.getById(tProjectDept.getParentId()); if (tProjectDept1 != null) { record.setDeptName(tProjectDept1.getProjectName() + ">" + tProjectDept.getProjectName()); } } else { record.setDeptName(tProjectDept.getProjectName()); } } } else { TDept tDept = deptService.getById(sysUser1.getDeptId()); if (tDept != null) { record.setDeptName(tDept.getDeptName()); } } } TTemplate tTemplate = templates.stream().filter(e -> e.getId().equals(record.getTemplateId())).findFirst().orElse(null); // todo 应生成计划数 record.setNum1(1); LocalDateTime createTime = tTemplate.getCreateTime(); // 转化为yyyy-MM-dd字符串 StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))).append(" 至 "); List<TTemplateDetail> tTemplateDetail = templateDetails.stream().filter(e -> e.getTemplateId().equals(record.getTemplateId())).collect(Collectors.toList()); int temp = 0; if (!tTemplateDetail.isEmpty()) { for (TTemplateDetail templateDetail : tTemplateDetail) { Integer cycle = templateDetail.getCycle(); Integer cycleType = templateDetail.getCycleType(); switch (cycleType) { case 1: temp = cycle; break; case 2: temp = cycle * 7; break; case 3: temp = cycle * 30; break; case 4: temp = cycle * 90; break; case 5: temp = cycle * 365; break; } } LocalDateTime localDateTime = tTemplate.getCreateTime().plusDays(temp); stringBuilder.append(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); record.setTemplateDate(stringBuilder.toString()); if (record.getNum2() != 0) { record.setNum4(new BigDecimal((double) record.getNum2() / (double) record.getNum1() * 100).setScale(2, RoundingMode.HALF_DOWN)); } else { record.setNum4(new BigDecimal(0)); } } String templateId = record.getTemplateId(); Long count = leaveService.lambdaQuery() .eq(TLeave::getTemplateId, templateId) .eq(TLeave::getLeavePerson, record.getUserId()) .eq(TLeave::getAuditStatus, 2).count(); record.setNum5(count); } progressListVOPageInfo.setRecords(records); return R.ok(progressListVOPageInfo); } @ApiOperation(value = "任务报表") @PostMapping(value = "/taskDetails") public R<List<ProjectDeptDetailsVO>> taskDetails(@RequestBody TaskDetailsQuery query) { List<TLocationType> locationTypeList = locationTypeService.list(); List<TLocation> locations = locationService.list(); LambdaQueryWrapper<TTask> tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime()) && StringUtils.hasLength(query.getEndTime())) { tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, query.getStartTime()); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, query.getEndTime()); } List<ProjectDeptDetailsVO> res = new ArrayList<>(); List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery().orderByDesc(BaseModel::getCreateTime).list(); List<String> collect = tasks.stream().map(TTask::getProjectId).distinct().collect(Collectors.toList()); List<TProjectDept> projectDepts = projectDeptService.list(); List<String> strings = new ArrayList<>(); // 片区ids 反查项目部 List<TProjectDept> list1 = projectDeptService.lambdaQuery().in(TProjectDept::getId, collect).list(); for (TProjectDept tProjectDept : list1) { TProjectDept tProjectDept1 = projectDepts.stream().filter(e -> e.getId().equals(tProjectDept.getParentId())).findFirst().orElse(null); if (tProjectDept1 != null && !strings.contains(tProjectDept1.getId())) { ProjectDeptDetailsVO projectDeptDetailsVO = new ProjectDeptDetailsVO(); projectDeptDetailsVO.setProjectName(tProjectDept1.getProjectName()); List<TProjectDept> collect1 = list1.stream().filter(e -> e.getParentId().equals(tProjectDept1.getId())).collect(Collectors.toList()); List<ProjectDeptDetailsChildVO> projectDeptDetailsChildVOS = new ArrayList<>(); for (TProjectDept projectDept : collect1) { ProjectDeptDetailsChildVO projectDeptDetailsChildVO = new ProjectDeptDetailsChildVO(); projectDeptDetailsChildVO.setProjectChildName(projectDept.getProjectName()); projectDeptDetailsChildVO.setProjectId(projectDept.getId()); projectDeptDetailsChildVOS.add(projectDeptDetailsChildVO); } projectDeptDetailsVO.setProjectChild(projectDeptDetailsChildVOS); res.add(projectDeptDetailsVO); strings.add(tProjectDept1.getId()); } } List<LocationTypeListByProjectVO> locationTypeListByProjectVOS = new ArrayList<>(); for (TLocationType tLocationType : locationTypeList) { LocationTypeListByProjectVO locationTypeListByProjectVO = new LocationTypeListByProjectVO(); locationTypeListByProjectVO.setLocationTypeName(tLocationType.getLocationName()); locationTypeListByProjectVO.setLocationNum(0); locationTypeListByProjectVO.setId(tLocationType.getId()); locationTypeListByProjectVOS.add(locationTypeListByProjectVO); } for (ProjectDeptDetailsVO re : res) { for (ProjectDeptDetailsChildVO projectDeptDetailsChildVO : re.getProjectChild()) { List<LocationTypeListByProjectVO> locationTypeListByProjectVOS1 = new ArrayList<>(); for (LocationTypeListByProjectVO locationTypeListByProjectVO : locationTypeListByProjectVOS) { LocationTypeListByProjectVO temp = new LocationTypeListByProjectVO(); BeanUtils.copyProperties(locationTypeListByProjectVO, temp); List<String> locationIds = locations.stream().filter(e -> e.getLocationType().equals(locationTypeListByProjectVO.getId())).map(TLocation::getId).collect(Collectors.toList()); if (locationIds.isEmpty()) { locationTypeListByProjectVO.setLocationNum(0); } else { List<TTask> taskList = tasks.stream().filter(e -> e.getProjectId().equals(projectDeptDetailsChildVO.getProjectId()) && locationIds.contains(e.getLocationId())).collect(Collectors.toList()); Integer count = taskList.size(); temp.setLocationNum(count); int total = taskList.size(); int num1 = 0; int num2 = 0; int num3 = 0; int num4 = 0; int num5 = 0; int num6 = 0; int num7 = 0; for (TTask tTask : taskList) { TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(tTask.getId()) && e.getClearStatus() != null).findFirst().orElse(null); if (tTaskDetail!=null){ switch (tTaskDetail.getClearStatus()) { case 1: num1++; break; case 2: num2++; break; } } // 任务状态:1未执行、2超时、3待确认、4待整改、5整改完成、6已完成 switch (tTask.getStatus()) { case 1: if (tTaskDetail == null) { num3++; } break; case 2: num6++; break; case 3: break; case 4: num4++; break; case 5: num7++; break; case 6: num5++; break; } } projectDeptDetailsChildVO.setTotal(total); projectDeptDetailsChildVO.setNum1(num1); projectDeptDetailsChildVO.setNum2(num2); projectDeptDetailsChildVO.setNum3(num3); projectDeptDetailsChildVO.setNum4(num4); projectDeptDetailsChildVO.setNum5(num5); projectDeptDetailsChildVO.setNum6(num6); projectDeptDetailsChildVO.setNum7(num7); } locationTypeListByProjectVOS1.add(temp); } projectDeptDetailsChildVO.setLocationTypeList(locationTypeListByProjectVOS1); } } return R.ok(res); } @ApiOperation(value = "巡检人员报表") @PostMapping(value = "/patrolInspectorList") public R<List<PatrolInspectorVO>> patrolInspectorList(@RequestBody PatrolInspectorQuery query) { List<SysUser> sysUsers = sysUserService.selectAllList(); LambdaQueryWrapper<TLeave> tLeaveLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime())){ tLeaveLambdaQueryWrapper.ge(TLeave::getCreateTime, query.getStartTime()); tLeaveLambdaQueryWrapper.le(TLeave::getCreateTime, query.getEndTime()); } tLeaveLambdaQueryWrapper.eq(TLeave::getAuditStatus,2); List<TLeave> leaves = leaveService.list(tLeaveLambdaQueryWrapper); if (StringUtils.hasLength(query.getDeptName())){ List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); List<String> deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); projectIds.addAll(deptIds); if (projectIds.isEmpty()){ return R.ok(new ArrayList<>()); } if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ return R.ok(new ArrayList<>()); } query.setPatrolInspectorIds(patrolInspectorIds); } } if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()){ return R.ok(new ArrayList<>()); } } List<PatrolInspectorVO> res = new ArrayList<>(); LambdaQueryWrapper<TTask> tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); if (StringUtils.hasLength(query.getStartTime())){ tTaskLambdaQueryWrapper.ge(TTask::getCreateTime, query.getStartTime()); tTaskLambdaQueryWrapper.le(TTask::getCreateTime, query.getEndTime()); } if(query.getPatrolInspectorIds()!=null){ tTaskLambdaQueryWrapper.in(TTask::getPatrolInspector, query.getPatrolInspectorIds()); sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); for (SysUser sysUser : sysUsers) { PatrolInspectorVO patrolInspectorVO = new PatrolInspectorVO(); patrolInspectorVO.setNickName(sysUser.getNickName()); patrolInspectorVO.setPhonenumber(sysUser.getPhonenumber()); if (sysUser.getDeptType() == 1){ TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId()); if (tProjectDept!=null&&!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptService.getById(tProjectDept.getParentId()); if (tProjectDept1!=null) patrolInspectorVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); }else{ patrolInspectorVO.setDeptName(tProjectDept.getProjectName()); } }else{ TDept tDept = deptService.getById(sysUser.getDeptId()); if (tDept!=null) patrolInspectorVO.setDeptName(tDept.getDeptName()); } // 查询巡检员任务ids List<String> taskIds = tasks.stream().filter(e->e.getPatrolInspector().equals(sysUser.getUserId()+"")).map(TTask::getId).collect(Collectors.toList()); List<TTaskDetail> list = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus, 1) .isNotNull(TTaskDetail::getClearStatus).orderByDesc(BaseModel::getCreateTime) .in(!taskIds.isEmpty(), TTaskDetail::getTaskId,taskIds).groupBy(TTaskDetail::getTaskId).list(); // 查询clearStatus为1的数量 List<TTaskDetail> clearStatus1 = list.stream().filter(e -> e.getClearStatus().equals(1)).collect(Collectors.toList()); List<TTaskDetail> clearStatus2 = list.stream().filter(e -> e.getClearStatus().equals(2)).collect(Collectors.toList()); List<TTask> taskList = tasks.stream().filter(e -> e.getPatrolInspector().equals(sysUser.getUserId() + "")).collect(Collectors.toList()); patrolInspectorVO.setTotal(taskList.size()); patrolInspectorVO.setNum1(clearStatus1.size()); patrolInspectorVO.setNum2(clearStatus2.size()); patrolInspectorVO.setNum3(clearStatus1.size()+clearStatus2.size()!=0? (new BigDecimal(clearStatus1.size()).add(new BigDecimal(clearStatus2.size()))) .divide(new BigDecimal(clearStatus1.size()), 2, RoundingMode.HALF_DOWN) .multiply(new BigDecimal(100)):BigDecimal.ZERO); // 未执行 List<TTask> status1 = taskList.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList()); List<TTask> status2 = taskList.stream().filter(e -> e.getStatus() == 3).collect(Collectors.toList()); List<TTask> status3 = taskList.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList()); List<TTask> status4 = taskList.stream().filter(e -> e.getStatus() == 4).collect(Collectors.toList()); List<TTask> status5 = taskList.stream().filter(e -> e.getStatus() == 5).collect(Collectors.toList()); List<TTask> status6 = taskList.stream().filter(e -> e.getStatus() == 6).collect(Collectors.toList()); patrolInspectorVO.setNum4(status1.size()); patrolInspectorVO.setNum5(status2.size()); patrolInspectorVO.setNum6(status3.size()); patrolInspectorVO.setNum7(status4.size()); patrolInspectorVO.setNum8(status5.size()); patrolInspectorVO.setNum9(!status5.isEmpty()?new BigDecimal(status5.size()) .divide(new BigDecimal(status4.size()).add(new BigDecimal(status5.size())),2,RoundingMode.HALF_DOWN) .multiply(new BigDecimal(100)):BigDecimal.ZERO); patrolInspectorVO.setNum10(status6.size()); patrolInspectorVO.setNum11(!status6.isEmpty()?new BigDecimal(status6.size()).divide(new BigDecimal(taskList.size()),2,RoundingMode.HALF_DOWN):BigDecimal.ZERO); List<TLeave> collect1 = leaves.stream().filter(e -> e.getLeavePerson().equals(sysUser.getUserId()+"")).collect(Collectors.toList()); patrolInspectorVO.setNum12(collect1.size()); res.add(patrolInspectorVO); } return R.ok(res); } @ApiOperation(value = "随机督察报表") @PostMapping(value = "/inspectorList") public R<List<InspectorVO>> inspectorList(@RequestBody InspectorQuery query) { List<SysUser> sysUsers = sysUserService.selectAllList(); if (StringUtils.hasLength(query.getDeptName())){ List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); List<String> deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); projectIds.addAll(deptIds); if (projectIds.isEmpty()){ return R.ok(new ArrayList<>()); } if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ return R.ok(new ArrayList<>()); } query.setPatrolInspectorIds(patrolInspectorIds); } } if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()){ return R.ok(new ArrayList<>()); } } LambdaQueryWrapper<TInspector> tTaskLambdaQueryWrapper = new LambdaQueryWrapper<>(); tTaskLambdaQueryWrapper.eq(TInspector::getAuditStatus,1); tTaskLambdaQueryWrapper.isNotNull(TInspector::getClearStatus); if (StringUtils.hasLength(query.getStartTime())){ tTaskLambdaQueryWrapper.ge(TInspector::getCreateTime, query.getStartTime()); tTaskLambdaQueryWrapper.le(TInspector::getCreateTime, query.getEndTime()); } if(query.getPatrolInspectorIds()!=null){ tTaskLambdaQueryWrapper.in(TInspector::getCommitPerson, query.getPatrolInspectorIds()); sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } List<InspectorVO> res = new ArrayList<>(); List<TInspector> inspectors = inspectorService.list(tTaskLambdaQueryWrapper); for (SysUser sysUser : sysUsers) { InspectorVO inspectorVO = new InspectorVO(); inspectorVO.setNickName(sysUser.getNickName()); inspectorVO.setPhonenumber(sysUser.getPhonenumber()); if (sysUser.getDeptType() == 1){ TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId()); if (tProjectDept!=null&&!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptService.getById(tProjectDept.getParentId()); if (tProjectDept1!=null) inspectorVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); }else{ inspectorVO.setDeptName(tProjectDept.getProjectName()); } }else{ TDept tDept = deptService.getById(sysUser.getDeptId()); if (tDept!=null) inspectorVO.setDeptName(tDept.getDeptName()); } inspectorVO.setTotal(inspectors.size()); List<TInspector> status1 = inspectors.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList()); List<TInspector> status2 = inspectors.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList()); List<TInspector> status4 = inspectors.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList()); List<TInspector> status5 = inspectors.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList()); List<TInspector> status6 = inspectors.stream().filter(e -> e.getStatus() == 3).collect(Collectors.toList()); inspectorVO.setNum1(status1.size()); inspectorVO.setNum2(status2.size()); inspectorVO.setNum3(!status1.isEmpty()?new BigDecimal(status1.size()).divide(new BigDecimal(status2.size()+status1.size()),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):BigDecimal.ZERO); inspectorVO.setNum4(status4.size()); inspectorVO.setNum5(status5.size()); inspectorVO.setNum6(status6.size()); inspectorVO.setNum7(!status6.isEmpty()?new BigDecimal(status6.size()).divide(new BigDecimal(status5.size()+status6.size()),2,RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)):new BigDecimal(0)); res.add(inspectorVO); } return R.ok(res); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java
@@ -48,11 +48,12 @@ private TLocationTypeService locationTypeService; @Resource private TLocationService locationService; @Resource private TProjectDeptService projectDeptService; @Resource private TTaskDetailService tTaskDetailService; @Resource private TProjectDeptService projectDeptService; @Resource private TDeptService deptService; @Resource private ISysUserService sysUserService; ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TEarlyWarningController.java
@@ -1,9 +1,27 @@ package com.ruoyi.web.controller.api; import com.ruoyi.common.annotation.Log; 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.enums.BusinessType; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TaskListQuery; import com.ruoyi.system.query.TaskWarningQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.TaskListVO; import com.ruoyi.system.vo.system.TaskWarningVO; import io.swagger.annotations.Api; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.ApiOperation; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * <p> @@ -17,6 +35,117 @@ @RestController @RequestMapping("/t-early-warning") public class TEarlyWarningController { @Resource private TTaskCleanService taskCleanerService; @Resource private TTaskDetailService taskDetailService; @Resource private TLocationTypeService locationTypeService; @Resource private TLocationService locationService; @Resource private TProjectDeptService projectDeptService; @Resource private TTaskDetailService tTaskDetailService; @Resource private TDeptService deptService; @Resource private ISysUserService sysUserService; @Resource private TDictDataService dictDataService; @Resource private TokenService tokenService; @Resource private TEarlyWarningService earlyWarningService; @ApiOperation(value = "任务预警分页列表") @PostMapping(value = "/pageList") public R<PageInfo<TaskWarningVO>> pageList(@RequestBody TaskWarningQuery query) { List<SysUser> sysUsers = sysUserService.selectAllList(); List<TLocation> locationList = locationService.list(); List<TTask> taskList = taskCleanerService.list(); if (StringUtils.hasLength(query.getDeptName())){ List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); List<String> deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); projectIds.addAll(deptIds); if (projectIds.isEmpty()){ return R.ok(new PageInfo<>()); } if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ return R.ok(new PageInfo<>()); } query.setPatrolInspectorIds(patrolInspectorIds); } } if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()){ return R.ok(new PageInfo<>()); } } if (StringUtils.hasLength(query.getLocationType())){ List<String> collect = locationList.stream().filter( e -> e.getLocationType().equals(query.getLocationType()) ).map(TLocation::getId) .collect(Collectors.toList()); if (collect.isEmpty()){ return R.ok(new PageInfo<>()); } query.setLocationIds(collect); } if (StringUtils.hasLength(query.getLocationName())){ List<String> collect = locationList.stream().filter(e -> e.getLocationName().contains(query.getLocationName())).map(TLocation::getId) .collect(Collectors.toList()); if (collect.isEmpty()){ query.setLocationIds(collect); return R.ok(new PageInfo<>()); }else{ collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList()); if (collect.isEmpty()){ return R.ok(new PageInfo<>()); } query.setLocationIds(collect); } } if (query.getPatrolInspectorIds()!=null && !query.getPatrolInspectorIds().isEmpty()){ taskList = taskList.stream().filter(task -> query.getPatrolInspectorIds().contains(Long.valueOf(task.getPatrolInspector()))).collect(Collectors.toList()); if (taskList.isEmpty()){ return R.ok(new PageInfo<>()); } } if (query.getLocationIds()!=null && !query.getLocationIds().isEmpty()){ taskList = taskList.stream().filter(task -> query.getLocationIds().contains(task.getLocationId())).collect(Collectors.toList()); if (taskList.isEmpty()){ return R.ok(new PageInfo<>()); } } query.setTaskIds(taskList.stream().map(TTask::getId).collect(Collectors.toList())); return R.ok(earlyWarningService.pageList(query)); } @Log(title = "预警删除", businessType = BusinessType.DELETE) @ApiOperation(value = "预警删除") @DeleteMapping(value = "/delete") public R<Boolean> edit(@RequestParam String id) { earlyWarningService.removeById(id); return R.ok(); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLeaveController.java
@@ -58,15 +58,22 @@ leaveDetailVO.setPhone(sysUser.getPhonenumber()); if (sysUser.getDeptType() == 1){ TProjectDept tProjectDept = projectDeptService.getById(sysUser.getDeptId()); if (!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptService.getById(tProjectDept.getParentId()); leaveDetailVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); }else{ leaveDetailVO.setDeptName(tProjectDept.getProjectName()); if(tProjectDept!=null){ if (!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptService.getById(tProjectDept.getParentId()); if (tProjectDept1!=null){ leaveDetailVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); } }else{ leaveDetailVO.setDeptName(tProjectDept.getProjectName()); } } }else{ TDept tDept = deptService.getById(sysUser.getDeptId()); leaveDetailVO.setDeptName(tDept.getDeptName()); if (tDept!=null){ leaveDetailVO.setDeptName(tDept.getDeptName()); } } } List<TLeaveAudit> list = leaveAuditService.lambdaQuery().eq(TLeaveAudit::getLeaveId, id) ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java
@@ -20,8 +20,8 @@ import com.ruoyi.system.query.LocationListTaskQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.utils.CustomerImportFailedData; import com.ruoyi.system.vo.system.LocationListTaskVO; import com.ruoyi.system.vo.system.LocationListVO; import com.ruoyi.system.vo.system.*; import com.sun.org.apache.bcel.internal.generic.NEW; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -182,6 +182,63 @@ public R<List<TCleaner>> listCleaner(@RequestParam String id) { return R.ok(cleanerService.lambdaQuery().eq(TCleaner::getProjectId,id).list()); } @ApiOperation(value = "根据保洁员id查询点位列表 不分页") @GetMapping(value = "/listLocation") public R<List<TLocation>> listLocation(@RequestParam String id) { return R.ok(locationService.lambdaQuery().eq(TLocation::getLocationCleaner,id).list()); } @ApiOperation(value = "查询部门 项目部列表 不分页") @GetMapping(value = "/listDepts") public R<List<DeptNoLimitVO>> listDepts() { List<TProjectDept> parent = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, "0").list(); List<TProjectDept> child = projectDeptService.lambdaQuery().ne(TProjectDept::getParentId, "0").list(); List<TDept> depts = deptService.list(); List<DeptNoLimitVO> res = new ArrayList<>(); DeptNoLimitVO deptNoLimitVO1 = new DeptNoLimitVO(); deptNoLimitVO1.setDeptName("项目部"); DeptNoLimitVO deptNoLimitVO2 = new DeptNoLimitVO(); deptNoLimitVO2.setDeptName("公司"); res.add(deptNoLimitVO1); res.add(deptNoLimitVO2); for (DeptNoLimitVO re : res) { if (re.getDeptName().equals("项目部")){ List<DeptNoLimitParentVO> deptNoLimitVOS = new ArrayList<>(); for (TProjectDept tProjectDept : parent) { DeptNoLimitParentVO deptNoLimitVO = new DeptNoLimitParentVO(); deptNoLimitVO.setDeptName(tProjectDept.getProjectName()); deptNoLimitVO.setDeptId(tProjectDept.getId()); List<TProjectDept> collect = child.stream().filter(e -> e.getParentId().equals(tProjectDept.getId())).collect(Collectors.toList()); List<DeptNoLimitChildVO> deptNoLimitChildVOS = new ArrayList<>(); for (TProjectDept projectDept : collect) { DeptNoLimitChildVO deptNoLimitChildVO = new DeptNoLimitChildVO(); deptNoLimitChildVO.setDeptName(projectDept.getProjectName()); deptNoLimitChildVO.setDeptId(projectDept.getId()); deptNoLimitChildVOS.add(deptNoLimitChildVO); } deptNoLimitVO.setDeptChild(deptNoLimitChildVOS); deptNoLimitVOS.add(deptNoLimitVO); } re.setDeptChild(deptNoLimitVOS); }else { List<DeptNoLimitParentVO> deptNoLimitVOS = new ArrayList<>(); for (TDept tDept : depts) { DeptNoLimitParentVO deptNoLimitVO = new DeptNoLimitParentVO(); deptNoLimitVO.setDeptName(tDept.getDeptName()); deptNoLimitVO.setDeptId(tDept.getId()); deptNoLimitVOS.add(deptNoLimitVO); } re.setDeptChild(deptNoLimitVOS); } } return R.ok(res); } @ApiOperation(value = "根据部门/项目部id查询巡检员列表 不分页") @GetMapping(value = "/listUsers") public R<List<SysUser>> listUsers(@RequestParam String id) { List<SysUser> res = sysUserService.selectUserByDeptId(id); return R.ok(res); } @Log(title = "新增点位", businessType = BusinessType.INSERT) @ApiOperation(value = "新增点位") @PostMapping(value = "/add") ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java
@@ -38,6 +38,7 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -77,6 +78,8 @@ private TDictDataService dictDataService; @Resource private TokenService tokenService; @Resource private TCleanerService cleanerService; @ApiOperation(value = "任务记录分页列表") @PostMapping(value = "/pageList") @@ -94,7 +97,7 @@ } if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) sysUser.getPhonenumber().contains(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ @@ -105,8 +108,9 @@ } if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) sysUser.getPhonenumber().contains(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); query.setPatrolInspectorIds(patrolInspectorIds); if (!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); @@ -124,7 +128,7 @@ return R.ok(new PageInfo<>()); } } if (query.getLocationType()!=null){ if (StringUtils.hasLength(query.getLocationType())){ List<String> collect = locationList.stream().filter(e -> e.getLocationType().equals(query.getLocationType())).map(TLocation::getId) .collect(Collectors.toList()); if (collect.isEmpty()){ @@ -135,8 +139,8 @@ if (StringUtils.hasLength(query.getLocationName())){ List<String> collect = locationList.stream().filter(e -> e.getLocationName().contains(query.getLocationName())).map(TLocation::getId) .collect(Collectors.toList()); query.setLocationIds(collect); if (collect.isEmpty()){ query.setLocationIds(collect); return R.ok(new PageInfo<>()); }else{ collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList()); @@ -153,6 +157,12 @@ @ApiOperation(value = "新增任务") @PostMapping(value = "/add") public R<Boolean> add(@RequestBody TTaskDTO dto) { dto.setTaskType(2); String implementTime1 = dto.getImplementTime1(); // 转化为LocalDateTime类型 dto.setImplementTime(LocalDateTime.parse(implementTime1, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); TCleaner byId = cleanerService.getById(dto.getCleanerId()); dto.setProjectId(byId.getProjectId()); taskCleanerService.save(dto); return R.ok(); } @@ -240,6 +250,38 @@ taskDetailVO.setRecords(list); return R.ok(taskDetailVO); } @ApiOperation(value = "详情任务-根据任务编号") @GetMapping(value = "/detailByTaskCode") public R<TaskDetailVO> detailByTaskCode(@RequestParam String taskCode) { TTask task = taskCleanerService.lambdaQuery().eq(TTask::getTaskCode, taskCode) .last("limit 1").one(); TaskDetailVO taskDetailVO = new TaskDetailVO(); if (task!=null){ String id = task.getId(); List<TTaskDetail> list = taskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, id) .orderByDesc(BaseModel::getCreateTime).list(); TTask byId = taskCleanerService.getById(id); BeanUtils.copyProperties(byId, taskDetailVO); TLocation byId1 = locationService.getById(byId.getLocationId()); TLocationType byId2 = locationTypeService.getById(byId1.getLocationType()); taskDetailVO.setLocationAddress(byId1.getLocationAddress()); taskDetailVO.setLocationIcon(byId2.getLocationIcon()); taskDetailVO.setLocationName(byId2.getLocationName()); TTaskDetail tTaskDetail = list.stream().filter(e -> e.getHandleType() == 1).findFirst().orElse(null); if (tTaskDetail!=null && tTaskDetail.getUnqualified()!=null){ TDictData byId3 = dictDataService.getById(tTaskDetail.getUnqualified()); if (byId3!=null){ tTaskDetail.setUnqualifiedName(byId3.getDataContent()); } } taskDetailVO.setTaskDetail(tTaskDetail); taskDetailVO.setRecords(list); }else{ return R.fail("任务不存在"); } return R.ok(taskDetailVO); } @ApiOperation(value = "详情任务-操作记录-详情") @GetMapping(value = "/detailRecord") public R<TaskRecordDetailVO> detailRecord(@RequestParam String id) { ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTemplateController.java
@@ -103,6 +103,10 @@ templateService.updateById(dto); templateDetailService.remove(new LambdaQueryWrapper<TTemplateDetail>() .eq(TTemplateDetail::getTemplateId, dto.getId())); for (TTemplateDetail tTemplateDetail : dto.getList()) { tTemplateDetail.setTemplateId(dto.getId()); tTemplateDetail.setId(null); } templateDetailService.saveBatch(dto.getList()); // 先删除定时任务 @@ -140,29 +144,43 @@ .list(); BeanUtils.copyProperties(byId,templateDetailVO); List<String> collect = tLocationTypeService.list().stream().map(TLocationType::getId).collect(Collectors.toList()); JSONArray res = new JSONArray(); for (String s : collect) { JSONObject jsonObject = new JSONObject(); jsonObject.put("id",s); jsonObject.put("value",""); res.add(jsonObject); } for (TTemplateDetail tTemplateDetail : list) { JSONArray res = new JSONArray(); for (String s : collect) { JSONObject jsonObject = new JSONObject(); jsonObject.put("id",s); jsonObject.put("value",""); res.add(jsonObject); } JSONArray temp = new JSONArray(); String num4 = tTemplateDetail.getNum4(); JSONArray num5Array = JSONArray.parseArray(num4); for (Object o : num5Array) { JSONObject jsonObject1 = (JSONObject) o; String string = jsonObject1.getString("id"); // 如果res中有这个id,则设置num for (Object re : res) { JSONObject jsonObject2 = (JSONObject) re; for (Object re : res) { JSONObject jsonObject2 = (JSONObject) re; int i = 0; for (Object o : num5Array) { JSONObject jsonObject1 = (JSONObject) o; String string = jsonObject1.getString("id"); // 如果res中有这个id,则设置num if (jsonObject2.getString("id").equals(string)) { jsonObject2.put("num", jsonObject1.getString("num")); JSONObject jsonObject = new JSONObject(); jsonObject.put("id",string); jsonObject.put("value", jsonObject1.getString("value")); temp.add(jsonObject); break; } i++; if (i==num5Array.size()){ JSONObject jsonObject = new JSONObject(); jsonObject.put("id",string); jsonObject.put("value", ""); temp.add(jsonObject); } } } tTemplateDetail.setNum4(res.toJSONString()); tTemplateDetail.setNum4(temp.toJSONString()); } if (byId.getRoleId()!=null){ SysRole sysRole = sysRoleService.selectRoleById(byId.getRoleId()); ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
@@ -9,8 +9,9 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.system.dto.SysRoleDTO; import com.ruoyi.system.model.TTemplate; import com.ruoyi.system.query.SysRoleQuery; import com.ruoyi.system.service.ISysMenuService; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.RoleInfoVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -31,9 +32,6 @@ import com.ruoyi.framework.web.service.SysPermissionService; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.domain.SysUserRole; import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserService; /** * 角色信息 @@ -61,6 +59,8 @@ private ISysDeptService deptService; @Autowired private ISysMenuService menuService; @Autowired private TTemplateService templateService; @PreAuthorize("@ss.hasPermi('system:role')") @ApiOperation(value = "角色列表") @@ -79,6 +79,16 @@ List<SysRole> list = roleService.selectRoleList(new SysRole()); return AjaxResult.success(list); } @ApiOperation(value = "角色列表不分页根据模板id") @GetMapping("/listNotPageByTemplateId") public AjaxResult listNotPageByTemplateId(@RequestParam String templateId) { TTemplate byId = templateService.getById(templateId); SysRole sysRole = roleService.selectRoleById(byId.getRoleId()); List<SysRole> sysRoles = new ArrayList<>(); sysRoles.add(sysRole); return AjaxResult.success(sysRoles); } @PreAuthorize("@ss.hasPermi('system:role:count')") @ApiOperation(value = "角色数量统计") @PostMapping("/roleCount") ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -4,6 +4,7 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; @@ -12,6 +13,8 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.SysUserUpdateStatusDTO; import com.ruoyi.system.model.TDept; import com.ruoyi.system.model.TProjectDept; import com.ruoyi.system.query.SysUserQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.SysUserVO; @@ -23,6 +26,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -47,15 +51,37 @@ private ISysDeptService deptService; @Autowired private TokenService tokenService; @Resource private TProjectDeptService projectDeptService; @Resource private TDeptService tdeptService; /** * 获取用户列表 */ @ApiOperation(value = "获取用户列表") @PostMapping("/list") @PreAuthorize("@ss.hasPermi('system:user')") public AjaxResult list(@RequestBody SysUserQuery query) public AjaxResult<PageInfo<SysUserVO>> list(@RequestBody SysUserQuery query) { List<SysUser> sysUsers = userService.selectAllList(); if (org.springframework.util.StringUtils.hasLength(query.getDeptName())){ List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); List<String> deptIds = tdeptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); projectIds.addAll(deptIds); if (projectIds.isEmpty()){ return AjaxResult.success(new PageInfo<>()); } List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> projectIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ return AjaxResult.success(new PageInfo<>()); } query.setPatrolInspectorIds(patrolInspectorIds); } PageInfo<SysUserVO> list = userService.pageList(query); return AjaxResult.success(list); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
@@ -258,9 +258,12 @@ task.setLocationId(tLocation.getId()); task.setImplementTime(LocalDateTime.now().plusDays(1)); task.setTaskType(1); task.setTemplateId(detail.getId()); tasks.add(task); } taskCleanService.saveBatch(tasks); template.setTaskCount(tasks.size()); templateService.updateById(template); templateDetailService.updateById(detail); }); ruoyi-admin/src/main/java/com/ruoyi/web/util/AmapApiClient.java
@@ -1,11 +1,18 @@ package com.ruoyi.web.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.springframework.stereotype.Component; import java.io.IOException; import java.util.HashMap; import java.util.Map; @Component public class AmapApiClient { private static final String KEY = "e700a58329a38b2d8980790d9b1b5b06"; private static final OkHttpClient client = new OkHttpClient(); @@ -24,4 +31,31 @@ return response.body().string(); } } public static Map<String, String> getDistance(String origins, String destination, Integer type) throws IOException { String url = "https://restapi.amap.com/v3/distance?key=" + KEY + "&origins=" + origins + "&destination=" + destination + "&type=" + type; Request request = new Request.Builder() .url(url) .build(); try (Response response = client.newCall(request).execute()) { JSONObject jsonObject = JSON.parseObject(response.body().string()); String status = jsonObject.getString("status"); // gdInterfaceService.saveData("https://restapi.amap.com/v3/distance", "查询两点间的距离"); if(status.equals("1")){ JSONArray results = jsonObject.getJSONArray("results"); JSONObject jsonObject1 = results.getJSONObject(0); Map<String, String> map = new HashMap<>(); map.put("distance", jsonObject1.getString("distance"));//距离(米) map.put("duration", jsonObject1.getString("duration"));//预计时间(秒) return map; }else{ System.err.println(jsonObject); } } return null; } } ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java
New file @@ -0,0 +1,499 @@ 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.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.util.*; import java.util.stream.Collectors; /** * <p> * 任务记录 前端控制器 * </p> * * @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<TSystemBulletin> systemBulletin() { TSystemBulletin systemBulletin = systemBulletinService.lambdaQuery().eq(TSystemBulletin::getStatus, 1).last("limit 1").one(); return R.ok(systemBulletin); } @ApiOperation(value = "首页-数据概览-更多") @PostMapping(value = "/dataReport") public R<DataReportVO> dataReport(@RequestBody DataReportDTO dto) { DataReportQuery dataReportQuery = new DataReportQuery(); dataReportQuery.setStartTime(dto.getStartTime()); dataReportQuery.setEndTime(dto.getEndTime()); DataReportVO res = new DataReportVO(); List<TDictData> dataList = dictDataService.list(); List<TProjectDept> projectDepts = projectDeptService.list(); List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery() .isNotNull(TTaskDetail::getClearStatus) .eq(TTaskDetail::getAuditStatus,1) .groupBy(TTaskDetail::getTaskId) .orderByDesc(BaseModel::getCreateTime) .list(); List<String> userDeptIds = new ArrayList<>(); LambdaQueryWrapper<TTask> 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<TProjectDept> list = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()).list(); List<String> 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.getLoginUser().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 { TProjectDept parent = projectDeptService.getById(projectDept.getParentId()); List<TProjectDept> list = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, parent.getId()).list(); List<String> 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()); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, dto.getEndTime()); } else { // 获取今天凌晨00:00:00 和今天23:59:59 类型为LocalDateTime LocalDateTime startOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); LocalDateTime endOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MAX); tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, startOfToday); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, endOfToday); } tTaskLambdaQueryWrapper.ne(TTask::getStatus, 1); List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); HashMap<String, Integer> taskMap = new HashMap<>(); HashMap<String, Integer> statusMap = new HashMap<>(); HashMap<String, Integer> clearMap = new HashMap<>(); HashMap<String, Integer> unqualifiedMap = new HashMap<>(); 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(task.getStatus()+"", 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(tTaskDetail.getUnqualifiedName(), unqualifiedMap.getOrDefault(tDictData.getDataContent(), 0) + 1); } break; } clearMap.put(temp1.toString(), clearMap.getOrDefault(temp1.toString(), 0) + 1); } } PageInfo<TaskFinishListVO> taskFinishListVOPageInfo = sysUserService.pageListReport(dataReportQuery); for (TaskFinishListVO record : taskFinishListVOPageInfo.getRecords()) { int pass=0; int unPass=0; List<TTask> userTaskList = tasks.stream().filter(e -> 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); 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); } // PageInfo<TaskFinishListVO> taskFinishListVOPageInfo = new PageInfo<>(); // Page<TTask> page = new Page<>(dto.getPageNum(), dto.getPageSize()); // Page<TTask> 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<ProjectDeptListNoLimitVO>> list() { List<TProjectDept> list = projectDeptService.list(new LambdaQueryWrapper<TProjectDept>() .eq(TProjectDept::getParentId, "0") .eq(TProjectDept::getStatus, 1)); List<ProjectDeptListNoLimitVO> projectDeptListNoLimitVOS = new ArrayList<>(); for (TProjectDept tProjectDept : list) { ProjectDeptListNoLimitVO projectDeptListNoLimitVO = new ProjectDeptListNoLimitVO(); BeanUtils.copyProperties(tProjectDept, projectDeptListNoLimitVO); List<TProjectDept> list1 = projectDeptService.list(new LambdaQueryWrapper<TProjectDept>() .eq(TProjectDept::getParentId, tProjectDept.getId()) .eq(TProjectDept::getStatus, 1)); List<ProjectDeptListNoLimitVO> projectDeptListNoLimitVOS1 = new ArrayList<>(); for (TProjectDept projectDept : list1) { ProjectDeptListNoLimitVO projectDeptListNoLimitVO1 = new ProjectDeptListNoLimitVO(); BeanUtils.copyProperties(projectDept, projectDeptListNoLimitVO1); projectDeptListNoLimitVOS1.add(projectDeptListNoLimitVO1); } projectDeptListNoLimitVO.setChildren(projectDeptListNoLimitVOS1); projectDeptListNoLimitVOS.add(projectDeptListNoLimitVO); } return R.ok(projectDeptListNoLimitVOS); } @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(); Long userId = tokenService.getLoginUser().getUserId(); List<TLocation> locationList = locationService.list(); List<TLocationType> locationTypeList = locationTypeService.list(); 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); List<TTask> taskToday = taskCleanerService.lambdaQuery() .between(TTask::getImplementTime, startOfToday, endOfToday) .eq(TTask::getPatrolInspector, userId).list(); List<SysUser> sysUsers = sysUserService.selectAllList(); SysUser sysUser = sysUserService.selectUserById(userId); Long userRole = sysUserService.getUserRole(userId); SysRole sysRole = roleService.selectRoleById(userRole); List<SysUser> 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())) { // 查询片区下的所有人员 users = sysUsers.stream().filter(e -> e.getDeptId() .equals(projectDept.getId()) && 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<TProjectDept> list = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, parent.getId()).list(); List<String> deptIds = list.stream().map(TProjectDept::getId).collect(Collectors.toList()); if (!deptIds.isEmpty()) { List<SysUser> 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().equals("公司")) { users = sysUsers.stream().filter(e -> e.getDeptId() .equals(sysUser.getDeptId()) && e.getStatus().equals("0") && e.getDeptType() == 1).collect(Collectors.toList()); } } } } List<TaskTodayVO> pendingTask = new ArrayList<>(); res.setTotalUserCount(users.size()); if (!users.isEmpty()) { List<TTask> tasks = taskCleanerService.lambdaQuery().in(TTask::getPatrolInspector, users).list(); List<String> taskIds = tasks.stream().map(TTask::getId).collect(Collectors.toList()); if (!tasks.isEmpty()) { List<TTask> status1 = tasks.stream().filter(e -> e.getStatus() == 5 || e.getStatus() == 6).collect(Collectors.toList()); List<TTask> 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<TTaskDetail> taskDetails = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus, 1).in(TTaskDetail::getTaskId, taskIds) .isNotNull(TTaskDetail::getClearStatus) .groupBy(TTaskDetail::getTaskId) .orderByDesc(TTaskDetail::getCreateTime).list(); 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)); 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<LeaveUserListVO> leaveList = new ArrayList<>(); List<TLeave> 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()); } 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()); for (TTask tTask : taskList) { List<TTaskDetail> taskDetailsStatus1 = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus, 1).in(TTaskDetail::getTaskId, taskIds) .eq(TTaskDetail::getClearStatus, 2) .groupBy(TTaskDetail::getTaskId) .orderByDesc(TTaskDetail::getCreateTime).list(); TaskTodayVO taskTodayVO = new TaskTodayVO(); 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()); // todo 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")); } 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 = 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()); } } pendingTask.add(taskTodayVO); } res.setPendingTask(pendingTask); res.setLeaveList(leaveList); List<TaskTodayVO> todayTask = new ArrayList<>(); for (TTask tTask : taskToday) { TaskTodayVO taskTodayVO = new TaskTodayVO(); List<TTaskDetail> taskDetailsStatus1 = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus, 1).in(TTaskDetail::getTaskId, taskIds) .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()); 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")); } 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 = 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()); } } todayTask.add(taskTodayVO); } res.setTodayTask(todayTask); List<TaskTodayVO> tomorrowTask = new ArrayList<>(todayTask); Collections.shuffle(tomorrowTask); res.setTomorrowTask(tomorrowTask); return R.ok(res); } } ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java
@@ -150,11 +150,26 @@ List<TTask> finishTask = taskCleanerService.lambdaQuery().eq(TTask::getPatrolInspector, userId) .ge(TTask::getImplementTime, startOfMonth) .le(TTask::getImplementTime, endOfMonth).list(); List<String> taskIds = finishTask.stream().map(TTask::getId).collect(Collectors.toList()); List<TTaskDetail> taskDetails = taskDetailService.lambdaQuery() .eq(TTaskDetail::getAuditStatus,1).in(TTaskDetail::getTaskId, taskIds) .isNotNull(TTaskDetail::getClearStatus) .groupBy(TTaskDetail::getTaskId) .orderByDesc(TTaskDetail::getCreateTime).list(); int size = (int) finishTask.stream().filter(e -> e.getStatus() == 5 || e.getStatus() == 6).count(); userIndexVO.setFinishCount(size); BigDecimal divide = new BigDecimal(size).divide(new BigDecimal(finishTask.size()), 2, BigDecimal.ROUND_DOWN); userIndexVO.setRate(divide); // userIndexVO.setRanking(); List<TTaskDetail> status1 = taskDetails.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList()); List<TTaskDetail> status2 = taskDetails.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList()); if (status1.size()+status2.size()!=0){ BigDecimal divide = new BigDecimal(status1.size()+status2.size()) .divide(new BigDecimal(status1.size()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)); userIndexVO.setRate(divide); }else{ userIndexVO.setRate(new BigDecimal(0)); } // todo 月排名 userIndexVO.setRanking(0); return R.ok(userIndexVO); } @ApiOperation(value = "任务记录分页列表") @@ -267,7 +282,7 @@ @ApiOperation(value = "上传督察任务") @PostMapping(value = "/addInspector") public R<Boolean> addInspector(@RequestBody InspectorAddDTO dto) { dto.setCommit_person(tokenService.getLoginUser().getUserId()+""); dto.setCommitPerson(tokenService.getLoginUser().getUserId()+""); if (dto.getClearStatus()==1){ dto.setStatus(4); }else{ ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -58,7 +58,19 @@ private MsgUtils msgUtils; @Autowired private SmsUtil smsUtil; @ApiOperation(value = "小程序账号密码登录",notes = "账号密码登录") @PostMapping("/loginApplet") public AjaxResult loginApplet(@RequestBody LoginBody loginBody) { AjaxResult ajax = AjaxResult.success(); // 生成令牌 LoginUserApplet loginUser = loginService.loginApplet(loginBody.getUsername(), loginBody.getPassword()); ajax.put(Constants.TOKEN, tokenService.createTokenApplet(loginUser)); ajax.put("userInfo",loginUser); ajax.put("roleName",loginUser.getRoleName()); ajax.put("deptType",loginUser.getRoleName()); return ajax; } /** * 账号密码登录 * ruoyi-applet/src/main/java/com/ruoyi/web/controller/tool/AmapApiClient.java
New file @@ -0,0 +1,61 @@ package com.ruoyi.web.controller.tool; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.springframework.stereotype.Component; import java.io.IOException; import java.util.HashMap; import java.util.Map; @Component public class AmapApiClient { private static final String KEY = "e700a58329a38b2d8980790d9b1b5b06"; private static final OkHttpClient client = new OkHttpClient(); public static String getDrivingRoute(double startLat, double startLon, double endLat, double endLon) throws IOException { String url = "https://restapi.amap.com/v3/direction/driving?" + "origin=" + startLon + "," + startLat + "&destination=" + endLon + "," + endLat + "&key=" + KEY; Request request = new Request.Builder() .url(url) .build(); try (Response response = client.newCall(request).execute()) { return response.body().string(); } } public Map<String, String> getDistance(String origins, String destination, Integer type) throws IOException { String url = "https://restapi.amap.com/v3/distance?key=" + KEY + "&origins=" + origins + "&destination=" + destination + "&type=" + type; Request request = new Request.Builder() .url(url) .build(); try (Response response = client.newCall(request).execute()) { JSONObject jsonObject = JSON.parseObject(response.body().string()); String status = jsonObject.getString("status"); // gdInterfaceService.saveData("https://restapi.amap.com/v3/distance", "查询两点间的距离"); if(status.equals("1")){ JSONArray results = jsonObject.getJSONArray("results"); JSONObject jsonObject1 = results.getJSONObject(0); Map<String, String> map = new HashMap<>(); map.put("distance", jsonObject1.getString("distance"));//距离(米) map.put("duration", jsonObject1.getString("duration"));//预计时间(秒) return map; }else{ System.err.println(jsonObject); } } return null; } } ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUserApplet.java
@@ -28,7 +28,7 @@ /** * 部门ID */ private Long deptId; private String deptId; /** * 用户唯一标识 @@ -77,7 +77,7 @@ /** * 用户信息 */ private TTenantResp user; private SysUser user; private Integer deptType; @@ -85,13 +85,13 @@ { } public LoginUserApplet(TTenantResp user, Set<String> permissions) public LoginUserApplet(SysUser user, Set<String> permissions) { this.user = user; this.permissions = permissions; } public LoginUserApplet(Long userId, Long deptId, TTenantResp user, Set<String> permissions) public LoginUserApplet(Long userId, String deptId, SysUser user, Set<String> permissions) { this.userId = userId; this.deptId = deptId; @@ -109,12 +109,12 @@ this.userId = userId; } public Long getDeptId() public String getDeptId() { return deptId; } public void setDeptId(Long deptId) public void setDeptId(String deptId) { this.deptId = deptId; } @@ -139,7 +139,7 @@ @Override public String getUsername() { return user.getResidentName(); return user.getUserName(); } /** ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -112,6 +112,7 @@ .authorizeRequests() // 对于登录login 注册register 验证码captchaImage 允许匿名访问 .antMatchers("/getPrivacyAgreement/{agreementType}", "/loginApplet", "/applet/queryProtocolConfigByType","/applet/login","/oss/upload", "/login","/applet/queryProtocolConfigByType", "/register","/applet/getCode","/applet/loginCode", ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -139,6 +139,7 @@ // 用户验证 Authentication authentication = null; // 用户验证 username = username + "_applet"; SysUser user = userService.selectUserByUserName(username); if (StringUtils.isNull(user)){ log.info("登录用户:{} 不存在.", username); @@ -262,9 +263,7 @@ throw new ServiceException("短信验证码错误"); } AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); TTenantResp tTenantResp = new TTenantResp(); BeanUtils.copyProperties(user,tTenantResp); LoginUserApplet loginUser = new LoginUserApplet(user.getUserId(), null, tTenantResp, null); LoginUserApplet loginUser = new LoginUserApplet(user.getUserId(), null, user, null); // 生成token return loginUser; } ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java
@@ -1,5 +1,6 @@ package com.ruoyi.framework.web.service; import com.ruoyi.common.core.domain.model.LoginUserApplet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -37,6 +38,9 @@ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { if(username.contains("applet")){ username = username.split("_")[0]; } SysUser user = userService.selectUserByUserName(username); if (StringUtils.isNull(user)) { @@ -55,7 +59,9 @@ } passwordService.validate(user); if(username.contains("applet")){ return createLoginAppletUser(user); } return createLoginUser(user); } @@ -63,4 +69,9 @@ { return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user)); } public UserDetails createLoginAppletUser(SysUser user) { return new LoginUserApplet(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user)); } } ruoyi-system/src/main/java/com/ruoyi/system/applet/dto/DataReportDTO.java
New file @@ -0,0 +1,18 @@ package com.ruoyi.system.applet.dto; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "首页-数据概览-更多DTO") public class DataReportDTO extends BasePage { @ApiModelProperty(value = "开始时间yyyy-MM-dd HH:mm:ss") private String startTime; @ApiModelProperty(value = "结束时间yyyy-MM-dd HH:mm:ss") private String endTime; @ApiModelProperty(value = "项目部/片区id") private String projectId; } ruoyi-system/src/main/java/com/ruoyi/system/applet/dto/IndexDTO.java
New file @@ -0,0 +1,16 @@ package com.ruoyi.system.applet.dto; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "首页DTO") public class IndexDTO extends BasePage { @ApiModelProperty(value = "经度") private String lon; @ApiModelProperty(value = "纬度") private String lat; } ruoyi-system/src/main/java/com/ruoyi/system/applet/query/DataReportQuery.java
New file @@ -0,0 +1,19 @@ package com.ruoyi.system.applet.query; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "申诉任务记录分页列表query") public class DataReportQuery extends BasePage { @ApiModelProperty(value = "片区ids") private List<String> projectIds; @ApiModelProperty(value = "开始时间yyyy-MM-dd HH:mm:ss") private String startTime; @ApiModelProperty(value = "结束时间yyyy-MM-dd HH:mm:ss") private String endTime; } ruoyi-system/src/main/java/com/ruoyi/system/applet/vo/DataReportVO.java
New file @@ -0,0 +1,27 @@ package com.ruoyi.system.applet.vo; import com.ruoyi.common.basic.PageInfo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; import java.util.Map; @Data @ApiModel(value = "首页-数据概览-更多VO") public class DataReportVO { @ApiModelProperty(value = "项目任务分布") private Map<String,Integer> taskMap; @ApiModelProperty(value = "任务状态统计") private Map<String,Integer> statusMap; @ApiModelProperty(value = "清洁情况分析") private Map<String,Integer> clearMap; @ApiModelProperty(value = "不合格原因统计") private Map<String,Integer> unqualifiedMap; @ApiModelProperty(value = "巡检员任务完成情况") private PageInfo<TaskFinishListVO> taskFinishList; } ruoyi-system/src/main/java/com/ruoyi/system/applet/vo/IndexVO.java
New file @@ -0,0 +1,30 @@ package com.ruoyi.system.applet.vo; import com.ruoyi.system.model.TLeave; import com.ruoyi.system.model.TTask; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data @ApiModel(value = "首页VO") public class IndexVO { @ApiModelProperty(value = "数据预览-合计人员") private Integer totalUserCount; @ApiModelProperty(value = "数据预览-平均完成数") private BigDecimal middle; @ApiModelProperty(value = "数据预览-合格率") private BigDecimal rate; @ApiModelProperty(value = "审批列表") private List<LeaveUserListVO> leaveList; @ApiModelProperty(value = "待整改任务") private List<TaskTodayVO> pendingTask; @ApiModelProperty(value = "今日任务") private List<TaskTodayVO> todayTask; @ApiModelProperty(value = "明日任务预览") private List<TaskTodayVO> tomorrowTask; } ruoyi-system/src/main/java/com/ruoyi/system/applet/vo/LeaveUserListVO.java
@@ -1,5 +1,6 @@ package com.ruoyi.system.applet.vo; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.system.model.TLeave; import io.swagger.annotations.ApiModel; @@ -12,10 +13,18 @@ @Data @ApiModel(value = "个人中心-我审批的分页列表返回VO") public class LeaveUserListVO extends TLeave { @ApiModelProperty(value = "请假人") @ApiModelProperty(value = "请假人名称") private String leavePersonName; @ApiModelProperty(value = "申请时间") @ApiModelProperty(value = "申请时间-年月日格式") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private LocalDateTime createTime1; @ApiModelProperty(value = "请假开始日期-年月日格式") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private LocalDateTime startTime1; @ApiModelProperty(value = "请假结束日期-年月日格式") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private LocalDateTime endTime1; } ruoyi-system/src/main/java/com/ruoyi/system/applet/vo/TaskFinishListVO.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.system.applet.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; import java.util.Map; @Data @ApiModel(value = "巡检员任务完成情况VO") public class TaskFinishListVO { @ApiModelProperty(value = "用户id") private Long userId; @ApiModelProperty(value = "姓名") private String nickName; @ApiModelProperty(value = "电话") private String phonenumber; @ApiModelProperty(value = "总计任务数") private Integer total; @ApiModelProperty(value = "合格率") private BigDecimal rate; @ApiModelProperty(value = "完成率") private BigDecimal finish; } ruoyi-system/src/main/java/com/ruoyi/system/applet/vo/TaskTodayVO.java
New file @@ -0,0 +1,31 @@ package com.ruoyi.system.applet.vo; import com.ruoyi.system.model.TTask; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @ApiModel(value = "今日任务/待整改列表VO") public class TaskTodayVO extends TTask { @ApiModelProperty(value = "点位名称") private String locationName; @ApiModelProperty(value = "点位起点地址") private String locationAddress; @ApiModelProperty(value = "点位经度 起点") private String locationLon; @ApiModelProperty(value = "点位纬度 起点") private String locationLat; @ApiModelProperty(value = "点位类型名称") private String locationTypeName; @ApiModelProperty(value = "点位类型图标") private String locationTypeIcon; @ApiModelProperty(value = "驳回原因 状态为待整改时有值") private String remark; @ApiModelProperty(value = "距离 单位km") private BigDecimal distance; } ruoyi-system/src/main/java/com/ruoyi/system/applet/vo/UnqualifiedVO.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.system.applet.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; import java.util.Map; @Data @ApiModel(value = "不合格原因列表VO") public class UnqualifiedVO { @ApiModelProperty(value = "不合格原因名称") private String unqualified; @ApiModelProperty(value = "数量") private Integer count; } ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
@@ -129,4 +129,6 @@ List<SysRole> selectRoleByUserIds(@Param("roleIds")List<String> roleIds); List<SysRole> listNotPageByTemplateId(@Param("templateId")String templateId); } ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -3,6 +3,8 @@ import java.util.List; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.applet.query.DataReportQuery; import com.ruoyi.system.applet.vo.TaskFinishListVO; import com.ruoyi.system.query.SysUserQuery; import com.ruoyi.system.vo.system.SysUserVO; import org.apache.ibatis.annotations.Mapper; @@ -171,11 +173,15 @@ List<SysUser> selectAllList(); List<SysUserVO> pageList(@Param("query")SysUserQuery query); List<SysUserVO> pageList(@Param("query")SysUserQuery query,@Param("pageInfo")PageInfo<SysUserVO> pageInfo); void updatePassword(@Param("id") Long id,@Param("s") String s); long selectIdByPhone(@Param("phonenumber") String phonenumber); List<SysUser> selectUserByTempLateId(@Param("templateId")String templateId); List<SysUser> selectUserByDeptId(@Param("id")String id); List<TaskFinishListVO> pageListReport(@Param("query")DataReportQuery query, @Param("pageInfo")PageInfo<TaskFinishListVO> pageInfo); } ruoyi-system/src/main/java/com/ruoyi/system/mapper/TEarlyWarningMapper.java
@@ -1,7 +1,13 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TEarlyWarning; import com.ruoyi.system.query.TaskWarningQuery; import com.ruoyi.system.vo.system.TaskWarningVO; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> @@ -13,4 +19,6 @@ */ public interface TEarlyWarningMapper extends BaseMapper<TEarlyWarning> { List<TaskWarningVO> pageList(@Param("query")TaskWarningQuery query, @Param("pageInfo")PageInfo<TaskWarningVO> pageInfo); } ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTaskMapper.java
@@ -7,7 +7,9 @@ import com.ruoyi.system.model.TTask; import com.ruoyi.system.query.LocationListTaskQuery; import com.ruoyi.system.query.TaskListQuery; import com.ruoyi.system.query.TaskProgressQuery; import com.ruoyi.system.vo.system.LocationListTaskVO; import com.ruoyi.system.vo.system.ProgressListVO; import com.ruoyi.system.vo.system.TaskListVO; import org.apache.ibatis.annotations.Param; @@ -33,4 +35,6 @@ * @return */ List<TaskListVO> exportList(@Param("query")TaskListQuery query); List<ProgressListVO> taskProgress(@Param("query")TaskProgressQuery query, @Param("pageInfo")PageInfo<ProgressListVO> pageInfo); } ruoyi-system/src/main/java/com/ruoyi/system/model/TCleaner.java
@@ -29,7 +29,7 @@ @TableId(value = "id", type = IdType.ASSIGN_ID) private String id; @ApiModelProperty(value = "保洁员编号") @ApiModelProperty(value = "片区级编号") @TableField("cleaner_code") private String cleanerCode; ruoyi-system/src/main/java/com/ruoyi/system/model/TInspector.java
@@ -75,8 +75,8 @@ @TableField("audit_remark") private String auditRemark; @ApiModelProperty(value = "提交人id") @TableField("commitPerson") private String commit_person; @TableField("commit_person") private String commitPerson; } ruoyi-system/src/main/java/com/ruoyi/system/model/TLeave.java
@@ -79,6 +79,9 @@ @ApiModelProperty(value = "审批编号") @TableField("code") private String code; @ApiModelProperty(value = "请假的时候 处于哪个模板id") @TableField("template_id") private String templateId; } ruoyi-system/src/main/java/com/ruoyi/system/model/TTask.java
@@ -57,6 +57,10 @@ @TableField("implement_time") private LocalDateTime implementTime; @ApiModelProperty(value = "执行日期前端传递") @TableField(exist = false) private String implementTime1; @ApiModelProperty(value = "任务类型 1日常任务 2自建任务") @TableField("task_type") private Integer taskType; @@ -70,6 +74,10 @@ @ApiModelProperty(value = "任务编号") @TableField("task_code") private String taskCode; @ApiModelProperty(value = "模板id 日常任务存储") @TableField("template_id") private String templateId; @ApiModelProperty(value = "模板id 日常任务存储") @TableField("user_id") private Long userId; } ruoyi-system/src/main/java/com/ruoyi/system/model/TTemplate.java
@@ -40,6 +40,9 @@ @ApiModelProperty(value = "适用角色id") @TableField("role_id") private Long roleId; @ApiModelProperty(value = "首次生成任务数量") @TableField("task_count") private Integer taskCount; } ruoyi-system/src/main/java/com/ruoyi/system/model/TTemplateDetail.java
@@ -55,8 +55,7 @@ "\n" + "\t}, {\n" + "\t\t\"id\": \"18678093453\",\n" + "\t\t\"value\": 18\n" + "\t}]\n") "\t\t\"value\": 18\n" + "}]\n") @TableField("num4") private String num4; ruoyi-system/src/main/java/com/ruoyi/system/query/CleanerListQuery.java
@@ -12,9 +12,9 @@ @ApiModelProperty(value = "保洁员编号") private String cleanerCode; @ApiModelProperty(value = "保洁员名称") private Integer cleanerName; private String cleanerName; @ApiModelProperty(value = "所属片区id") private Integer projectId; private String projectId; ruoyi-system/src/main/java/com/ruoyi/system/query/InspectorQuery.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.system.query; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "督察人员报表query") public class InspectorQuery { @ApiModelProperty(value = "部门名称") private String deptName; @ApiModelProperty(value = "员工名称") private String nickName; @ApiModelProperty("电话") private String phonenumber; @ApiModelProperty(value = "用户ids 前端忽略") private List<Long> patrolInspectorIds; @ApiModelProperty(value = "部门ids 前端忽略") private List<Long> deptIds; @ApiModelProperty(value = "开始时间 yyyy-MM-dd HH:mm:ss") private String startTime; @ApiModelProperty(value = "结束时间 yyyy-MM-dd HH:mm:ss") private String endTime; } ruoyi-system/src/main/java/com/ruoyi/system/query/PatrolInspectorQuery.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.system.query; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "巡检人员报表query") public class PatrolInspectorQuery { @ApiModelProperty(value = "部门名称") private String deptName; @ApiModelProperty(value = "员工名称") private String nickName; @ApiModelProperty("电话") private String phonenumber; @ApiModelProperty(value = "用户ids 前端忽略") private List<Long> patrolInspectorIds; @ApiModelProperty(value = "部门ids 前端忽略") private List<Long> deptIds; @ApiModelProperty(value = "开始时间 yyyy-MM-dd HH:mm:ss") private String startTime; @ApiModelProperty(value = "结束时间 yyyy-MM-dd HH:mm:ss") private String endTime; } ruoyi-system/src/main/java/com/ruoyi/system/query/SysUserQuery.java
@@ -23,5 +23,7 @@ private String status; @ApiModelProperty(value = "引用状态") private String templateId; @ApiModelProperty(value = "用户ids 前端忽略") private List<Long> patrolInspectorIds; } ruoyi-system/src/main/java/com/ruoyi/system/query/TaskDetailsQuery.java
New file @@ -0,0 +1,19 @@ package com.ruoyi.system.query; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "任务报表列表query") public class TaskDetailsQuery { @ApiModelProperty(value = "开始时间 yyyy-MM-dd HH:mm:ss") private String startTime; @ApiModelProperty(value = "结束时间yyyy-MM-dd HH:mm:ss") private String endTime; } ruoyi-system/src/main/java/com/ruoyi/system/query/TaskProgressQuery.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.system.query; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "任务进度分页列表query") public class TaskProgressQuery extends BasePage { @ApiModelProperty(value = "部门名称") private String deptName; @ApiModelProperty(value = "员工名称") private String nickName; @ApiModelProperty("电话") private String phonenumber; @ApiModelProperty("计划名称") private String templateName; @ApiModelProperty(value = "用户ids 前端忽略") private List<Long> patrolInspectorIds; @ApiModelProperty(value = "部门ids 前端忽略") private List<Long> deptIds; @ApiModelProperty(value = "模板ids 前端忽略") private List<String> templateIds; } ruoyi-system/src/main/java/com/ruoyi/system/query/TaskWarningQuery.java
New file @@ -0,0 +1,33 @@ package com.ruoyi.system.query; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "任务预警分页列表query") public class TaskWarningQuery extends BasePage { @ApiModelProperty(value = "点位名称") private String locationName; @ApiModelProperty(value = "点位类型id") private String locationType; @ApiModelProperty("电话") private String phonenumber; @ApiModelProperty(value = "部门名称") private String deptName; @ApiModelProperty(value = "预警类型 1超时预警 2点位不合格预警") private String warningType; @ApiModelProperty(value = "开始时间 yyyy-MM-dd HH:mm:ss") private String startTime; @ApiModelProperty(value = "结束时间 yyyy-MM-dd HH:mm:ss") private String endTime; @ApiModelProperty(value = "用户ids 前端忽略") private List<Long> patrolInspectorIds; @ApiModelProperty(value = "任务ids 前端忽略") private List<String> taskIds; @ApiModelProperty(value = "点位ids 前端忽略") private List<String> locationIds; } ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
@@ -234,4 +234,7 @@ public int editRole(SysRoleDTO dto); List<SysRole> selectRoleByUserIds(List<String> roleIds); List<SysRole> listNotPageByTemplateId(String templateId); } ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -4,6 +4,8 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.applet.query.DataReportQuery; import com.ruoyi.system.applet.vo.TaskFinishListVO; import com.ruoyi.system.query.SysUserQuery; import com.ruoyi.system.vo.system.SysUserVO; @@ -263,4 +265,9 @@ long selectIdByPhone(String phonenumber); List<SysUser> selectUserByTempLateId(String templateId); List<SysUser> selectUserByDeptId(String id); PageInfo<TaskFinishListVO> pageListReport(DataReportQuery dataReportQuery); } ruoyi-system/src/main/java/com/ruoyi/system/service/TEarlyWarningService.java
@@ -1,7 +1,11 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TEarlyWarning; import com.ruoyi.system.query.TaskWarningQuery; import com.ruoyi.system.vo.system.TaskListVO; import com.ruoyi.system.vo.system.TaskWarningVO; /** * <p> @@ -13,4 +17,5 @@ */ public interface TEarlyWarningService extends IService<TEarlyWarning> { PageInfo<TaskWarningVO> pageList(TaskWarningQuery query); } ruoyi-system/src/main/java/com/ruoyi/system/service/TTaskCleanService.java
@@ -6,6 +6,8 @@ import com.ruoyi.system.applet.vo.TaskUserListVO; import com.ruoyi.system.model.TTask; import com.ruoyi.system.query.TaskListQuery; import com.ruoyi.system.query.TaskProgressQuery; import com.ruoyi.system.vo.system.ProgressListVO; import com.ruoyi.system.vo.system.TaskListVO; import java.util.List; @@ -32,4 +34,8 @@ * @return */ List<TaskListVO> exportList(TaskListQuery query); PageInfo<ProgressListVO> taskProgress(TaskProgressQuery query); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
@@ -611,4 +611,9 @@ public List<SysRole> selectRoleByUserIds(List<String> roleIds) { return roleMapper.selectRoleByUserIds(roleIds); } @Override public List<SysRole> listNotPageByTemplateId(String templateId) { return roleMapper.listNotPageByTemplateId(templateId); } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -13,6 +13,8 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.bean.BeanValidators; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.applet.query.DataReportQuery; import com.ruoyi.system.applet.vo.TaskFinishListVO; import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.domain.SysUserPost; import com.ruoyi.system.domain.SysUserRole; @@ -662,7 +664,7 @@ PageInfo<SysUserVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<SysUserVO> list = userMapper.pageList(query); List<SysUserVO> list = userMapper.pageList(query,pageInfo); if(CollectionUtils.isEmpty(list)){ return pageInfo; } @@ -709,13 +711,6 @@ } } pageInfo.setTotal(list.size()); if (org.springframework.util.StringUtils.hasLength(query.getDeptName())){ List<SysUserVO> collect = list.stream().filter(sysUserVO -> sysUserVO.getDeptName().contains(query.getDeptName())).collect(Collectors.toList()); pageInfo.setTotal(collect.size()); // 手动分页 list = collect.stream().skip((long) (query.getPageNum() - 1) * query.getPageSize()).limit(query.getPageSize()).collect(Collectors.toList()); } pageInfo.setRecords(list); return pageInfo; } @@ -736,6 +731,19 @@ } @Override public List<SysUser> selectUserByDeptId(String id) { return userMapper.selectUserByDeptId(id); } @Override public PageInfo<TaskFinishListVO> pageListReport(DataReportQuery query) { PageInfo<TaskFinishListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TaskFinishListVO> list = userMapper.pageListReport(query,pageInfo); pageInfo.setRecords(list); return pageInfo; } @Override public SysUser selectByPhone(String phonenumber) { return userMapper.selectByPhone(phonenumber); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCleanerServiceImpl.java
@@ -3,11 +3,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.mapper.TCleanerMapper; import com.ruoyi.system.mapper.TProjectDeptMapper; import com.ruoyi.system.model.TCleaner; import com.ruoyi.system.model.TProjectDept; import com.ruoyi.system.query.CleanerListQuery; import com.ruoyi.system.service.TCleanerService; import com.ruoyi.system.vo.system.CleanerListVO; import com.ruoyi.system.vo.system.DeptListVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @@ -23,10 +26,19 @@ @Service public class TCleanerServiceImpl extends ServiceImpl<TCleanerMapper, TCleaner> implements TCleanerService { @Autowired private TProjectDeptMapper projectDeptMapper; @Override public PageInfo<CleanerListVO> pageList(CleanerListQuery query) { PageInfo<CleanerListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<CleanerListVO> list = this.baseMapper.pageList(query,pageInfo); for (CleanerListVO cleanerListVO : list) { TProjectDept tProjectDept = projectDeptMapper.selectById(cleanerListVO.getProjectId()); if (tProjectDept!=null&&!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); cleanerListVO.setProjectName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); } } pageInfo.setRecords(list); return pageInfo; } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TEarlyWarningServiceImpl.java
@@ -1,10 +1,18 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.mapper.TEarlyWarningMapper; import com.ruoyi.system.model.TEarlyWarning; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.mapper.*; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TaskWarningQuery; import com.ruoyi.system.service.TEarlyWarningService; import com.ruoyi.system.vo.system.CleanerListVO; import com.ruoyi.system.vo.system.TaskWarningVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * <p> @@ -17,4 +25,60 @@ @Service public class TEarlyWarningServiceImpl extends ServiceImpl<TEarlyWarningMapper, TEarlyWarning> implements TEarlyWarningService { @Autowired private SysUserMapper sysUserMapper; @Autowired private TProjectDeptMapper projectDeptMapper; @Autowired private TDeptMapper deptMapper; @Autowired private TTaskMapper taskMapper; @Autowired private TLocationMapper locationMapper; @Override public PageInfo<TaskWarningVO> pageList(TaskWarningQuery query) { List<TTask> taskList = taskMapper.selectList(null); PageInfo<TaskWarningVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TaskWarningVO> list = this.baseMapper.pageList(query,pageInfo); for (TaskWarningVO taskWarningVO : list) { String[] split = taskWarningVO.getTaskId().split(","); TTask tTask = taskList.stream().filter(e -> e.getId().equals(split[0])).findFirst().orElse(null); StringBuilder taskCode = new StringBuilder(); for (String s : split) { TTask task = taskList.stream().filter(e -> e.getId().equals(s)).findFirst().orElse(null); if (task!=null){ taskCode.append(task.getTaskCode()).append(","); } } // 去除最后一位 taskWarningVO.setTaskCode(taskWarningVO.getTaskCode().substring(0, taskWarningVO.getTaskCode().length() - 1)); if (tTask!=null){ TLocation tLocation = locationMapper.selectById(tTask.getLocationId()); if (tLocation!=null){ taskWarningVO.setLocationName(tLocation.getLocationName()); } SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(tTask.getPatrolInspector())); if (sysUser!=null){ taskWarningVO.setPhonenumber(sysUser.getPhonenumber()); taskWarningVO.setPatrolInspectorName(sysUser.getNickName()); if (sysUser.getDeptType() == 1){ TProjectDept tProjectDept = projectDeptMapper.selectById(sysUser.getDeptId()); if (!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); taskWarningVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); }else{ taskWarningVO.setDeptName(tProjectDept.getProjectName()); } }else{ TDept tDept = deptMapper.selectById(sysUser.getDeptId()); taskWarningVO.setDeptName(tDept.getDeptName()); } } } } pageInfo.setRecords(list); return pageInfo; } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TLocationServiceImpl.java
@@ -37,13 +37,20 @@ List<LocationListVO> list = this.baseMapper.pageList(query,pageInfo); for (LocationListVO locationListVO : list) { TCleaner tCleaner = cleanerMapper.selectById(locationListVO.getLocationCleaner()); TProjectDept tProjectDept = projectDeptMapper.selectById(tCleaner.getProjectId()); if (!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); locationListVO.setProjectName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); }else{ locationListVO.setProjectName(tProjectDept.getProjectName()); if (tCleaner!=null){ TProjectDept tProjectDept = projectDeptMapper.selectById(tCleaner.getProjectId()); if (tProjectDept!=null){ if (!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); if (tProjectDept1!=null) locationListVO.setProjectName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); }else{ locationListVO.setProjectName(tProjectDept.getProjectName()); } } } } pageInfo.setRecords(list); return pageInfo; ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java
@@ -4,15 +4,16 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.BaseModel; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.system.applet.query.TaskUserListQuery; import com.ruoyi.system.applet.vo.TaskUserListVO; import com.ruoyi.system.mapper.TDeptMapper; import com.ruoyi.system.mapper.TTaskDetailMapper; import com.ruoyi.system.mapper.TTaskMapper; import com.ruoyi.system.mapper.*; import com.ruoyi.system.model.*; import com.ruoyi.system.query.TaskListQuery; import com.ruoyi.system.query.TaskProgressQuery; import com.ruoyi.system.service.TTaskCleanService; import com.ruoyi.system.vo.system.ProgressListVO; import com.ruoyi.system.vo.system.TaskListVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -38,6 +39,11 @@ private TDeptMapper deptMapper; @Autowired private TTaskDetailMapper taskDetailMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private TProjectDeptMapper projectDeptMapper; @Override public PageInfo<TaskListVO> pageList(TaskListQuery query) { PageInfo<TaskListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); @@ -47,13 +53,26 @@ .orderByDesc(BaseModel::getCreateTime) .in(TTaskDetail::getHandleType,Arrays.asList(1,4))); for (TaskListVO taskListVO : list) { TDept tDept = deptMapper.selectById(taskListVO.getPatrolInspectorDept()); taskListVO.setDeptName(tDept.getDeptName()); TTaskDetail tTaskDetail = tTaskDetails.stream().filter(e -> e.getTaskId().equals(taskListVO.getId())).findFirst().orElse(null); for (TaskListVO temp : list) { SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(temp.getPatrolInspector())); if(sysUser!=null){ if ( sysUser.getDeptType() == 1){ TProjectDept tProjectDept = projectDeptMapper.selectById(sysUser.getDeptId()); if (!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); temp.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); }else{ temp.setDeptName(tProjectDept.getProjectName()); } }else{ TDept tDept = deptMapper.selectById(sysUser.getDeptId()); temp.setDeptName(tDept.getDeptName()); } } TTaskDetail tTaskDetail = tTaskDetails.stream().filter(e -> e.getTaskId().equals(temp.getId())).findFirst().orElse(null); if (tTaskDetail!=null){ taskListVO.setPicture(tTaskDetail.getPicture()); taskListVO.setClearStatus(tTaskDetail.getClearStatus()); temp.setPicture(tTaskDetail.getPicture()); temp.setClearStatus(tTaskDetail.getClearStatus()); } } pageInfo.setRecords(list); @@ -92,4 +111,14 @@ } return list; } @Override public PageInfo<ProgressListVO> taskProgress(TaskProgressQuery query) { PageInfo<ProgressListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<ProgressListVO> list = this.baseMapper.taskProgress(query,pageInfo); pageInfo.setRecords(list); return pageInfo; } } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/DeptNoLimitChildVO.java
New file @@ -0,0 +1,17 @@ package com.ruoyi.system.vo.system; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "部门/项目部下级不分页列表VO") public class DeptNoLimitChildVO { @ApiModelProperty("部门/项目部名称") private String deptName; @ApiModelProperty("部门/项目部id") private String deptId; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/DeptNoLimitParentVO.java
New file @@ -0,0 +1,19 @@ package com.ruoyi.system.vo.system; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "片区不分页列表VO") public class DeptNoLimitParentVO { @ApiModelProperty("部门/项目部名称") private String deptName; @ApiModelProperty("部门/项目部id") private String deptId; @ApiModelProperty("下级部门/项目部") private List<DeptNoLimitChildVO> deptChild; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/DeptNoLimitVO.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.system.vo.system; import com.baomidou.mybatisplus.annotation.TableField; import com.ruoyi.system.model.TAppeal; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "部门/项目部不分页列表VO") public class DeptNoLimitVO { @ApiModelProperty("部门/项目部名称") private String deptName; @ApiModelProperty("部门/项目部id") private String deptId; @ApiModelProperty("下级部门/项目部") private List<DeptNoLimitParentVO> deptChild; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/InspectorVO.java
New file @@ -0,0 +1,35 @@ package com.ruoyi.system.vo.system; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data @ApiModel(value = "随机督察报表VO") public class InspectorVO { @ApiModelProperty("巡检员名称") private String nickName; @ApiModelProperty("电话") private String phonenumber; @ApiModelProperty("部门名称") private String deptName; @ApiModelProperty("总计督察任务数") private Integer total; @ApiModelProperty("合格") private Integer num1; @ApiModelProperty("不合格") private Integer num2; @ApiModelProperty("合格率") private BigDecimal num3; @ApiModelProperty("待确认") private Integer num4; @ApiModelProperty("待整改") private Integer num5; @ApiModelProperty("整改完成") private Integer num6; @ApiModelProperty("整改完成率") private BigDecimal num7; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/LocationTypeListByProjectVO.java
New file @@ -0,0 +1,19 @@ package com.ruoyi.system.vo.system; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "作业类型分类VO") public class LocationTypeListByProjectVO { @ApiModelProperty("类型名称") private String locationTypeName; @ApiModelProperty("数量") private Integer locationNum; @ApiModelProperty("类型id") private String id; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/PatrolInspectorVO.java
New file @@ -0,0 +1,46 @@ package com.ruoyi.system.vo.system; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data @ApiModel(value = "巡检人员报表VO") public class PatrolInspectorVO { @ApiModelProperty("巡检员名称") private String nickName; @ApiModelProperty("电话") private String phonenumber; @ApiModelProperty("项目名称") private String deptName; @ApiModelProperty("总计任务数") private Integer total; @ApiModelProperty("合格") private Integer num1; @ApiModelProperty("不合格") private Integer num2; @ApiModelProperty("合格率") private BigDecimal num3; @ApiModelProperty("未执行") private Integer num4; @ApiModelProperty("待确认") private Integer num5; @ApiModelProperty("超时") private Integer num6; @ApiModelProperty("待整改") private Integer num7; @ApiModelProperty("整改完成") private Integer num8; @ApiModelProperty("整改完成率") private BigDecimal num9; @ApiModelProperty("完成数") private Integer num10; @ApiModelProperty("完成率") private BigDecimal num11; @ApiModelProperty("请假天数") private Integer num12; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/ProgressListVO.java
New file @@ -0,0 +1,47 @@ package com.ruoyi.system.vo.system; import cn.afterturn.easypoi.excel.annotation.Excel; import com.ruoyi.system.model.TTask; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import io.swagger.models.auth.In; import lombok.Data; import java.math.BigDecimal; @Data @ApiModel(value = "任务进度列表分页VO") public class ProgressListVO extends TTask { @Excel(name = "姓名", width = 20,orderNum = "1") @ApiModelProperty(value = "姓名") private String nickName; @Excel(name = "电话", width = 20,orderNum = "2") @ApiModelProperty(value = "电话") private String phonenumber; @Excel(name = "所属部门", width = 20,orderNum = "3") @ApiModelProperty(value = "所属部门") private String deptName; @Excel(name = "计划名称", width = 20,orderNum = "4") @ApiModelProperty("计划名称") private String templateName; @Excel(name = "计划周期", width = 20,orderNum = "5") @ApiModelProperty("计划周期") private String templateDate; @Excel(name = "应生成计划数", width = 20,orderNum = "6") @ApiModelProperty(value = "应生成计划数") private Integer num1; @Excel(name = "已生成任务数", width = 20,orderNum = "7") @ApiModelProperty(value = "已生成任务数") private Integer num2; @Excel(name = "已完成任务数", width = 20,orderNum = "9") @ApiModelProperty(value = "已完成任务数") private Integer num3; @Excel(name = "任务进度(%)", width = 20,orderNum = "9") @ApiModelProperty(value = "任务进度(%)") private BigDecimal num4; @Excel(name = "计划请假天数", width = 20,orderNum = "9") @ApiModelProperty(value = "计划请假天数") private Long num5; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/ProjectDeptDetailsChildVO.java
New file @@ -0,0 +1,39 @@ package com.ruoyi.system.vo.system; import com.ruoyi.system.model.TProjectDept; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import io.swagger.models.auth.In; import lombok.Data; import java.util.List; @Data @ApiModel(value = "片区VO") public class ProjectDeptDetailsChildVO { @ApiModelProperty("作业类型分类") private List<LocationTypeListByProjectVO> locationTypeList; @ApiModelProperty("片区名称") private String projectChildName; @ApiModelProperty("片区id") private String projectId; @ApiModelProperty("总数") private Integer total; @ApiModelProperty("清洁合格") private Integer num1; @ApiModelProperty("清洁不合格") private Integer num2; @ApiModelProperty("未执行任务") private Integer num3; @ApiModelProperty("待整改任务") private Integer num4; @ApiModelProperty("审核通过任务") private Integer num5; @ApiModelProperty("超时未执行任务") private Integer num6; @ApiModelProperty("整改完成任务") private Integer num7; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/ProjectDeptDetailsVO.java
New file @@ -0,0 +1,18 @@ package com.ruoyi.system.vo.system; import com.ruoyi.system.model.TProjectDept; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "任务报表VO") public class ProjectDeptDetailsVO { @ApiModelProperty("片区") private List<ProjectDeptDetailsChildVO> projectChild; @ApiModelProperty("项目名称") private String projectName; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskDetailsVO.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.system.vo.system; import cn.afterturn.easypoi.excel.annotation.Excel; import com.ruoyi.system.model.TProjectDept; import com.ruoyi.system.model.TTask; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data @ApiModel(value = "任务报表VO") public class TaskDetailsVO { @ApiModelProperty(value = "项目") private List<ProjectDeptDetailsVO> project; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/TaskWarningVO.java
New file @@ -0,0 +1,30 @@ package com.ruoyi.system.vo.system; import cn.afterturn.easypoi.excel.annotation.Excel; import com.ruoyi.system.model.TEarlyWarning; import com.ruoyi.system.model.TTask; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "任务预警列表分页VO") public class TaskWarningVO extends TEarlyWarning { @ApiModelProperty(value = "点位名称") private String locationName; @ApiModelProperty(value = "部门名称") private String deptName; @ApiModelProperty("巡查员名称") private String patrolInspectorName; @ApiModelProperty("巡查员id") private String patrolInspector; @ApiModelProperty("电话") private String phonenumber; @ApiModelProperty("关联任务编号 多个逗号拼接") private String taskCode; } ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -161,6 +161,18 @@ #{item} </foreach> </select> <select id="listNotPageByTemplateId" resultType="com.ruoyi.common.core.domain.entity.SysRole"> select * from sys_role where template_id = #{templateId} and del_flag =0 and status = 0 </select> <insert id="insertRole" parameterType="SysRole" useGeneratedKeys="true" keyProperty="roleId"> insert into sys_role( ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -222,6 +222,8 @@ </select> <select id="selectAllList" resultType="com.ruoyi.common.core.domain.entity.SysUser"> select * from sys_user where del_flag = 0 </select> <select id="pageList" resultType="com.ruoyi.system.vo.system.SysUserVO"> select u.user_id AS userId, u.deptId AS deptId, u.user_name AS userName, u.nick_name AS nickName, u.email AS email, u.avatar AS avatar,u.disable_remark AS disableRemark, @@ -234,7 +236,12 @@ left join sys_role r on r.role_id = ur.role_id LEFT JOIN t_template t1 on t1.id = u.templateId WHERE u.del_flag = 0 <if test="query.patrolInspectorIds != null and query.patrolInspectorIds.size()>0"> AND u.user_id IN <foreach collection="query.patrolInspectorIds" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> <if test="query.nickName != null and query.nickName != ''"> AND u.nick_name LIKE concat('%',#{query.nickName},'%') </if> @@ -263,6 +270,26 @@ u.login_date AS loginDate, u.create_by AS createBy, u.create_time AS createTime, u.remark AS remark,u.templateId from sys_user u where u.templateId = #{templateId} and u.status = 0 and u.del_flag = 0 </select> <select id="selectUserByDeptId" resultType="com.ruoyi.common.core.domain.entity.SysUser"> select * from sys_user where deptId = #{id} and status = 0 and del_flag = 0 </select> <select id="pageListReport" resultType="com.ruoyi.system.applet.vo.TaskFinishListVO"> select t1.*,t1.user_id as userId from sys_user t1 where 1=1 <if test="query.projectIds != null and query.projectIds.size()>0"> AND t1.deptId IN <foreach collection="query.projectIds" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> and t1.status = '0' and t1.del_flag = '0' and t1.dept_type = 1 </select> <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId"> insert into sys_user( ruoyi-system/src/main/resources/mapper/system/TCleanerMapper.xml
@@ -29,7 +29,7 @@ and t1.cleaner_name like concat('%', #{query.cleanerName}, '%') </if> <if test="query.projectId != null and query.projectId != ''"> and t1.projectId = #{query.projectId} and t1.project_id = #{query.projectId} </if> and t1.disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} </where> ruoyi-system/src/main/resources/mapper/system/TEarlyWarningMapper.xml
@@ -18,5 +18,18 @@ <sql id="Base_Column_List"> id, create_time, update_time, create_by, update_by, disabled, warning_type, task_id </sql> <select id="pageList" resultType="com.ruoyi.system.vo.system.TaskWarningVO"> select t1.* from t_early_warning t1 where 1=1 <if test="query.taskIds != null and query.taskIds.size() > 0"> <foreach collection="query.taskIds" item="taskId" separator=" OR " open="AND (" close=")"> FIND_IN_SET(#{taskId}, t1.task_id) </foreach> </if> <if test="query.startTime != null and startTime != ''"> and (t1.create_time between #{startTime} and #{endTime}) </if> and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} </select> </mapper> ruoyi-system/src/main/resources/mapper/system/TLocationMapper.xml
@@ -26,7 +26,7 @@ id, create_time, update_time, create_by, update_by, disabled, location_code, location_name, project_id, location_leader, location_cleaner, location_type, location_address, location_lon, location_lat </sql> <select id="pageList" resultType="com.ruoyi.system.vo.system.LocationListVO"> select t1.*,t2.name as locationTypeName,t3.cleaner_name as cleanerName from t_location t1 select t1.*,t2.location_name as locationTypeName,t3.cleaner_name as cleanerName from t_location t1 left join t_location_type t2 on t1.location_type = t2.id left join t_cleaner t3 on t1.location_cleaner = t3.id where 1=1 ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml
@@ -4,31 +4,32 @@ <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.ruoyi.system.model.TTask"> <id column="id" property="id" /> <result column="create_time" property="createTime" /> <result column="update_time" property="updateTime" /> <result column="create_by" property="createBy" /> <result column="update_by" property="updateBy" /> <result column="disabled" property="disabled" /> <result column="project_id" property="projectId" /> <result column="status" property="status" /> <result column="cleaner_id" property="cleanerId" /> <result column="location_id" property="locationId" /> <result column="patrol_inspector" property="patrolInspector" /> <result column="implement_time" property="implementTime" /> <result column="task_type" property="taskType" /> <result column="patrol_inspector_dept" property="patrolInspectorDept" /> <id column="id" property="id"/> <result column="create_time" property="createTime"/> <result column="update_time" property="updateTime"/> <result column="create_by" property="createBy"/> <result column="update_by" property="updateBy"/> <result column="disabled" property="disabled"/> <result column="project_id" property="projectId"/> <result column="status" property="status"/> <result column="cleaner_id" property="cleanerId"/> <result column="location_id" property="locationId"/> <result column="patrol_inspector" property="patrolInspector"/> <result column="implement_time" property="implementTime"/> <result column="task_type" property="taskType"/> <result column="patrol_inspector_dept" property="patrolInspectorDept"/> </resultMap> <!-- 通用查询结果列 --> <sql id="Base_Column_List"> id, create_time, update_time, create_by, update_by, disabled, project_id, status, cleaner_id, location_id, patrol_inspector, implement_time, task_type, patrol_inspector_dept id , create_time, update_time, create_by, update_by, disabled, project_id, status, cleaner_id, location_id, patrol_inspector, implement_time, task_type, patrol_inspector_dept </sql> <select id="pageList" resultType="com.ruoyi.system.vo.system.LocationListTaskVO"> <select id="pageList" resultType="com.ruoyi.system.vo.system.TaskListVO"> select t1.*,t2.location_name as locationName,t3.location_name as locationTypeName, t4.nick_name as patrolInspectorName, t4.phonenumber as phonenumber from t_task t1 t4.nick_name as patrolInspectorName, t4.phonenumber as phonenumber from t_task t1 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 @@ -40,13 +41,13 @@ #{id} </foreach> </if> <if test="query.taskIds != null and query.taskIds.size()>0"> <if test="query.taskIds != null and query.taskIds.size()>0"> AND t1.id IN <foreach collection="query.taskIds" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> <if test="query.locationIds != null and query.locationIds.size()>0"> <if test="query.locationIds != null and query.locationIds.size()>0"> AND t1.location_id IN <foreach collection="query.locationIds" separator="," item="id" open="(" close=")"> #{id} @@ -55,13 +56,13 @@ <if test="query.status != null"> and t1.status = #{query.status} </if> <if test="query.startTime != null and startTime != ''"> <if test="query.startTime != null and query.startTime != ''"> and (t1.implement_time between #{query.startTime} and #{query.endTime}) </if> </select> <select id="pageListUser" resultType="com.ruoyi.system.applet.vo.TaskUserListVO"> select t1.*,t2.location_name as locationName,t3.location_name as locationTypeName, t3.location_icon as locatioTypeIcon, t3.location_icon as locatioTypeIcon, t5.clear_status as clearStatus, t4.nick_name as patrolInspectorName, t4.phonenumber as phonenumber, @@ -103,7 +104,7 @@ <if test="query.clearStatus != null"> and t2.status = #{query.clearStatus} </if> <if test="query.userId != null and query.userId != ''"> <if test="query.userId != null and query.userId != ''"> and t1.patrol_inspector = #{query.userId} </if> <if test="query.startTime != null and startTime != ''"> @@ -145,5 +146,29 @@ and (t1.implement_time between #{query.startTime} and #{query.endTime}) </if> </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, SUM(CASE WHEN t1.status = 5 or t1.status=6 THEN 1 ELSE 0 END) AS num3 from t_task t1 left join sys_user t2 on t1.user_id = t2.user_id left join t_template t3 on t1.template_id = t3.id where 1=1 and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} <if test="query.templateIds != null and query.templateIds.size()>0"> AND t1.template_id IN <foreach collection="query.templateIds" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> <if test="query.patrolInspectorIds != null and query.patrolInspectorIds.size()>0"> AND t1.user_id IN <foreach collection="query.patrolInspectorIds" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> group by t1.user_id,t1.template_id </select> </mapper> ruoyi-system/src/main/resources/mapper/system/TTemplateMapper.xml
@@ -26,6 +26,9 @@ <if test="query.templateName != null and query.templateName != ''"> and template_name like concat('%',#{query.templateName},'%') </if> <if test="query.startTime != null and query.startTime != '' and query.endTime != null and query.endTime != ''"> and create_time between #{query.startTime} and #{query.endTime} </if> and disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} </select>