ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ReportController.java
@@ -77,6 +77,8 @@ @Resource private ISysUserService sysUserService; @Resource private TInspectorDetailService inspectorDetailService; @Resource private TDictDataService dictDataService; @Resource private TokenService tokenService; @@ -838,7 +840,9 @@ if (tProjectDept1 != null) patrolInspectorVO.setDeptName(tProjectDept1.getProjectName() + ">" + tProjectDept.getProjectName()); } else { if (tProjectDept != null){ patrolInspectorVO.setDeptName(tProjectDept.getProjectName()); } } } else { TDept tDept = deptService.getById(sysUser.getDeptId()); @@ -1116,8 +1120,10 @@ @PostMapping(value = "/inspectorList") public R<List<InspectorVO>> inspectorList(@RequestBody InspectorQuery query) { List<SysUser> sysUsers = sysUserService.selectAllList(); List<TInspectorDetail> list2 = inspectorDetailService.list(); List<TTask> listAll = taskCleanerService.list(); List<String> listAllTaskIds = listAll.stream().map(TTask::getId).collect(Collectors.toList()); List<TLocation> locations = locationService.list(); if (StringUtils.hasLength(query.getDeptName())) { List<TProjectDept> list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list(); List<String> projectIds = list @@ -1186,7 +1192,6 @@ query.setPatrolInspectorIds(patrolInspectorIds); } 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()); @@ -1198,16 +1203,22 @@ patrolInspectorIds.add(0L); query.setPatrolInspectorIds(patrolInspectorIds); } tTaskLambdaQueryWrapper.in(TInspector::getCommitPerson, query.getPatrolInspectorIds()); List<String> collect = locations.stream().filter(e -> query.getPatrolInspectorIds().contains(Long.valueOf(e.getLocationLeader()))) .map(TLocation::getId).collect(Collectors.toList()); tTaskLambdaQueryWrapper.in(TInspector::getLocationId, collect); sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } List<InspectorVO> res = new ArrayList<>(); List<TInspector> inspectors = inspectorService.list(tTaskLambdaQueryWrapper); List<String> users = inspectors.stream().map(TInspector::getCommitPerson).collect(Collectors.toList()); if (users.isEmpty()){ users.add("0"); List<String> locationIds = inspectors.stream().map(TInspector::getLocationId).collect(Collectors.toList()); if (locationIds.isEmpty()){ locationIds.add("0"); } sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1&&users.contains(e.getUserId()+"")).collect(Collectors.toList()); for (SysUser sysUser : sysUsers) { List<String> userIds = locations.stream().filter(e -> locationIds.contains(e.getId())).map(TLocation::getLocationLeader) .collect(Collectors.toList()); sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1&&userIds.contains(e.getUserId()+"")).collect(Collectors.toList()); for (SysUser sysUser : sysUsers) { InspectorVO inspectorVO = new InspectorVO(); inspectorVO.setNickName(sysUser.getNickName()); inspectorVO.setPhonenumber(sysUser.getPhonenumber()); @@ -1225,22 +1236,25 @@ if (tDept != null) inspectorVO.setDeptName(tDept.getDeptName()); } List<String> collect1 = listAll.stream().filter(e -> e.getPatrolInspector().equals(sysUser.getUserId() + "")).map(TTask::getId).collect(Collectors.toList()); List<TInspector> collect = inspectors.stream().filter(e -> collect1.contains(e.getTaskId())).collect(Collectors.toList()); List<String> collect1 = locations.stream().filter(e -> e.getLocationLeader().equals(sysUser.getUserId() + "")).map(TLocation::getId).collect(Collectors.toList()); List<TInspector> collect = inspectors.stream().filter(e -> collect1.contains(e.getLocationId())).collect(Collectors.toList()); List<String> collect3 = collect.stream().map(TInspector::getId).collect(Collectors.toList()); List<TInspectorDetail> collect2 = list2.stream().filter(e -> collect3.contains(e.getInspectorId())) .collect(Collectors.toList()); inspectorVO.setTotal(collect.size()); List<TInspector> status1 = collect.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList()); List<TInspector> status2 = collect.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList()); List<TInspector> status4 = collect.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList()); List<TInspector> status5 = collect.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList()); List<TInspector> status6 = collect.stream().filter(e -> e.getStatus() == 3).collect(Collectors.toList()); inspectorVO.setNum1(status1.size()); inspectorVO.setNum2(status2.size()); inspectorVO.setNum3(!status1.isEmpty() || !status2.isEmpty() ? new BigDecimal(status1.size()).divide(new BigDecimal(status2.size() + status1.size()), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)) : BigDecimal.ZERO); inspectorVO.setNum3(!status1.isEmpty() ? new BigDecimal(status1.size()).divide(new BigDecimal(status2.size() + status1.size()), 2, RoundingMode.HALF_DOWN) : BigDecimal.ZERO); inspectorVO.setNum4(status4.size()); inspectorVO.setNum5(status5.size()); inspectorVO.setNum6(status6.size()); inspectorVO.setNum7(!status6.isEmpty() || !status5.isEmpty() ? new BigDecimal(status6.size()).divide(new BigDecimal(status5.size() + status6.size()), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)) : new BigDecimal(0)); inspectorVO.setNum7(!status6.isEmpty() ? new BigDecimal(status6.size()).divide(new BigDecimal(status5.size() + status6.size()), 2, RoundingMode.HALF_DOWN) : new BigDecimal(0)); res.add(inspectorVO); } return R.ok(res); @@ -1252,8 +1266,10 @@ public void inspectorListExport(@RequestBody InspectorQuery query) { query.setPatrolInspectorIds(null); List<SysUser> sysUsers = sysUserService.selectAllList(); List<TInspectorDetail> list2 = inspectorDetailService.list(); List<TTask> listAll = taskCleanerService.list(); List<String> listAllTaskIds = listAll.stream().map(TTask::getId).collect(Collectors.toList()); List<TLocation> locations = locationService.list(); if (StringUtils.hasLength(query.getDeptName())) { List<TProjectDept> list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list(); List<String> projectIds = list @@ -1295,6 +1311,19 @@ } } } if (StringUtils.hasLength(query.getNickName())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getNickName().contains(query.getNickName()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } if (patrolInspectorIds.isEmpty()){ patrolInspectorIds.add(-1L); } query.setPatrolInspectorIds(patrolInspectorIds); } if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().contains(query.getPhonenumber()) @@ -1307,10 +1336,8 @@ patrolInspectorIds.add(-1L); } query.setPatrolInspectorIds(patrolInspectorIds); } 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()); @@ -1322,16 +1349,21 @@ patrolInspectorIds.add(0L); query.setPatrolInspectorIds(patrolInspectorIds); } tTaskLambdaQueryWrapper.in(TInspector::getCommitPerson, query.getPatrolInspectorIds()); List<String> collect = locations.stream().filter(e -> query.getPatrolInspectorIds().contains(Long.valueOf(e.getLocationLeader()))) .map(TLocation::getId).collect(Collectors.toList()); tTaskLambdaQueryWrapper.in(TInspector::getLocationId, collect); sysUsers = sysUsers.stream().filter(sysUser -> query.getPatrolInspectorIds().contains(sysUser.getUserId())).collect(Collectors.toList()); } List<InspectorVO> res = new ArrayList<>(); List<TInspector> inspectors = inspectorService.list(tTaskLambdaQueryWrapper); List<String> users = inspectors.stream().map(TInspector::getCommitPerson).collect(Collectors.toList()); if (users.isEmpty()){ users.add("0"); List<String> locationIds = inspectors.stream().map(TInspector::getLocationId).collect(Collectors.toList()); if (locationIds.isEmpty()){ locationIds.add("0"); } sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1&&users.contains(e.getUserId()+"")).collect(Collectors.toList()); List<String> userIds = locations.stream().filter(e -> locationIds.contains(e.getId())).map(TLocation::getLocationLeader) .collect(Collectors.toList()); sysUsers = sysUsers.stream().filter(e -> e.getUserId() != 1&&userIds.contains(e.getUserId()+"")).collect(Collectors.toList()); for (SysUser sysUser : sysUsers) { InspectorVO inspectorVO = new InspectorVO(); inspectorVO.setNickName(sysUser.getNickName()); @@ -1350,22 +1382,25 @@ if (tDept != null) inspectorVO.setDeptName(tDept.getDeptName()); } List<String> collect1 = listAll.stream().filter(e -> e.getPatrolInspector().equals(sysUser.getUserId() + "")).map(TTask::getId).collect(Collectors.toList()); List<TInspector> collect = inspectors.stream().filter(e -> collect1.contains(e.getTaskId())).collect(Collectors.toList()); List<String> collect1 = locations.stream().filter(e -> e.getLocationLeader().equals(sysUser.getUserId() + "")).map(TLocation::getId).collect(Collectors.toList()); List<TInspector> collect = inspectors.stream().filter(e -> collect1.contains(e.getLocationId())).collect(Collectors.toList()); List<String> collect3 = collect.stream().map(TInspector::getId).collect(Collectors.toList()); List<TInspectorDetail> collect2 = list2.stream().filter(e -> collect3.contains(e.getInspectorId())) .collect(Collectors.toList()); inspectorVO.setTotal(collect.size()); List<TInspector> status1 = collect.stream().filter(e -> e.getClearStatus() == 1).collect(Collectors.toList()); List<TInspector> status2 = collect.stream().filter(e -> e.getClearStatus() == 2).collect(Collectors.toList()); List<TInspector> status4 = collect.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList()); List<TInspector> status5 = collect.stream().filter(e -> e.getStatus() == 2).collect(Collectors.toList()); List<TInspector> status6 = collect.stream().filter(e -> e.getStatus() == 3).collect(Collectors.toList()); inspectorVO.setNum1(status1.size()); inspectorVO.setNum2(status2.size()); inspectorVO.setNum3(!status1.isEmpty() || !status2.isEmpty() ? new BigDecimal(status1.size()).divide(new BigDecimal(status2.size() + status1.size()), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)) : BigDecimal.ZERO); 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() || !status5.isEmpty() ? new BigDecimal(status6.size()).divide(new BigDecimal(status5.size() + status6.size()), 2, RoundingMode.HALF_DOWN).multiply(new BigDecimal(100)) : new BigDecimal(0)); 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); } //1.获取excel模板 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java
@@ -51,8 +51,6 @@ private TTaskCleanService taskCleanService; @Resource private TLocationTypeService locationTypeService; @Resource @@ -72,6 +70,11 @@ @Resource private TAppealService appealService; @Resource private TInspectorService inspectorService; @Resource private TInspectorDetailService inspectorDetailService; @ApiOperation(value = "申诉记录分页列表") @PostMapping(value = "/pageList") public R<PageInfo<AppealListVO>> pageList(@RequestBody InsepectorListQuery query) { @@ -162,6 +165,7 @@ } return R.ok(appealService.pageList(query)); } @Log(title = "批量删除申诉记录", businessType = BusinessType.DELETE) @ApiOperation(value = "批量删除申诉记录") @DeleteMapping(value = "/deleteByIds") @@ -170,6 +174,7 @@ appealService.removeBatchByIds(Arrays.asList(split)); return R.ok(); } @Log(title = "删除申诉记录", businessType = BusinessType.DELETE) @ApiOperation(value = "删除申诉记录") @DeleteMapping(value = "/deleteById") @@ -177,12 +182,32 @@ appealService.removeById(id); return R.ok(); } @ApiOperation(value = "详情申诉记录") @GetMapping(value = "/detail") public R<AppealDetailVO> detail(@RequestParam String id) { AppealDetailVO appealDetailVO = new AppealDetailVO(); TAppeal appeal = appealService.getById(id); BeanUtils.copyProperties(appeal,appealDetailVO); if (appeal.getInspectorId() != null) { TInspector inspector = inspectorService.getById(appeal.getInspectorId()); TLocation location = locationService.getById(inspector.getLocationId()); TLocationType byId2 = locationTypeService.getById(location.getLocationType()); appealDetailVO.setLocationAddress(location.getLocationAddress()); appealDetailVO.setLocationIcon(byId2.getLocationIcon()); appealDetailVO.setLocationName(location.getLocationName()); appealDetailVO.setLocationTypeName(byId2.getLocationName()); appealDetailVO.setTaskId(inspector.getId()); if (appeal.getAuditPerson() != null) { SysUser sysUser = sysUserService.selectUserById(Long.valueOf(appeal.getAuditPerson())); if (sysUser != null) { appealDetailVO.setAuditPersonName(sysUser.getUserName()); } } appealDetailVO.setTaskName(location.getLocationName()); return R.ok(appealDetailVO); } else { TTask byId = taskCleanService.getById(appeal.getTaskId()); TLocation byId1 = locationService.getById(byId.getLocationId()); TLocationType byId2 = locationTypeService.getById(byId1.getLocationType()); @@ -197,10 +222,14 @@ appealDetailVO.setAuditPersonName(sysUser.getUserName()); } } appealDetailVO.setTaskName(byId.getTaskName()); appealDetailVO.setTaskName(byId1.getLocationName()); appealDetailVO.setTaskCode(byId.getTaskCode()); return R.ok(appealDetailVO); } } @Resource private TNoticeService noticeService; @Resource @@ -211,12 +240,114 @@ private TNoticeSetService noticeSetService; @Resource private TDictDataService dictDataService; @Log(title = "审核申诉记录", businessType = BusinessType.UPDATE) @ApiOperation(value = "审核申诉记录") @PostMapping(value = "/audit") public R<Boolean> audit(@RequestBody @Valid TAppealAuditDTO dto) throws Exception { List<SysUser> sysUsers = sysUserService.selectAllList(); TAppeal appeal = appealService.getById(dto.getId()); if (appeal.getInspectorId() != null) { SysUser sysUser1 = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(appeal.getAppealPerson()))) .findFirst().orElse(null); dto.setStatus(dto.getStatus()); dto.setAuditPerson(tokenService.getLoginUser().getUserId() + ""); dto.setAuditTime(LocalDateTime.now()); TInspector inspector = inspectorService.getById(appeal.getInspectorId()); TLocation location1 = locationService.getById(inspector.getLocationId()); TNotice tNotice1 = new TNotice(); tNotice1.setUserId(appeal.getAppealPerson()); tNotice1.setStatus(1); tNotice1.setDataId(dto.getId()); dto.setAuditTime(LocalDateTime.now()); TInspectorDetail inspectorDetail = new TInspectorDetail(); inspectorDetail.setInspectorId(appeal.getInspectorId()); Long count1 = inspectorDetailService.lambdaQuery().eq(TInspectorDetail::getInspectorId, appeal.getInspectorId()) .eq(TInspectorDetail::getHandleType, 1).count(); TNoticeSet noticeSet1 = noticeSetService.lambdaQuery().eq(TNoticeSet::getType, 2).last("limit 1") .one(); // 邮箱 TDictData email1 = dictDataService.lambdaQuery().eq(TDictData::getDataType, 4).one(); // 授权码 TDictData code1 = dictDataService.lambdaQuery().eq(TDictData::getDataType, 5).one(); if (dto.getStatus() == 2) { inspectorDetail.setClearStatus(1); inspectorDetail.setAuditTime(LocalDateTime.now()); inspectorDetail.setAuditPerson(tokenService.getLoginUser().getUserId() + ""); inspectorDetail.setAuditStatus(1); inspectorDetail.setAuditRemark(dto.getAuditRemark()); inspectorDetail.setHandleType(5); inspectorDetail.setAppealId(dto.getId()); // 通过 TInspector byId = inspectorService.getById(dto.getInspectorId()); if (count1 > 1) { byId.setStatus(5); } else { byId.setStatus(6); } inspectorService.updateById(byId); tNotice1.setNoticeType(5); tNotice1.setNoticeContent("【" + location1.getLocationName() + "】任务申诉通过"); if (sysUser1 != null) { switch (noticeSet1.getNoticeType()) { case 1: msgUtils.sendMsg3(sysUser1.getPhonenumber(), location1.getLocationName(), "通过"); break; case 2: if (StringUtils.hasLength(email1.getDataContent()) && StringUtils.hasLength(code1.getDataContent()) &&StringUtils.hasLength(sysUser1.getEmail()) ) { EmailUtils.sendEmail(sysUser1.getEmail(), email1.getDataContent(), code1.getDataContent(), "【" + location1.getLocationName() + "】任务申诉通过"); } break; case 3: if (StringUtils.hasLength(sysUser1.getOpenId())) { Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String format = simpleDateFormat.format(date); templateMessageSendUtil.wxTemplateAppealResultRequest(sysUser1.getOpenId(), location1.getLocationName(), "通过", format, dto.getAuditRemark()); } break; } } } else { inspectorDetail.setClearStatus(2); inspectorDetail.setAuditTime(LocalDateTime.now()); inspectorDetail.setAuditPerson(tokenService.getLoginUser().getUserId() + ""); inspectorDetail.setAuditStatus(2); inspectorDetail.setAuditRemark(dto.getAuditRemark()); inspectorDetail.setHandleType(6); inspectorDetail.setAppealId(dto.getId()); tNotice1.setNoticeType(4); tNotice1.setNoticeContent("【" + location1.getLocationName() + "】任务申诉驳回"); if (sysUser1 != null) { switch (noticeSet1.getNoticeType()) { case 1: msgUtils.sendMsg3(sysUser1.getPhonenumber(), location1.getLocationName(), "通过"); break; case 2: if (StringUtils.hasLength(email1.getDataContent()) && StringUtils.hasLength(code1.getDataContent()) &&StringUtils.hasLength(sysUser1.getEmail())) { EmailUtils.sendEmail(sysUser1.getEmail(), email1.getDataContent(), code1.getDataContent(), "【" + location1.getLocationName() + "】任务申诉驳回"); } break; case 3: if (StringUtils.hasLength(sysUser1.getOpenId())) { Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String format = simpleDateFormat.format(date); templateMessageSendUtil.wxTemplateAppealResultRequest(sysUser1.getOpenId(), location1.getLocationName(), "驳回", format, dto.getAuditRemark()); } break; } } } } else { SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(appeal.getAppealPerson()))) .findFirst().orElse(null); dto.setStatus(dto.getStatus()); @@ -265,7 +396,9 @@ msgUtils.sendMsg3(sysUser.getPhonenumber(),location.getLocationName(),"通过"); break; case 2: if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent())){ if (StringUtils.hasLength(email.getDataContent()) && StringUtils.hasLength(code.getDataContent()) &&StringUtils.hasLength(sysUser.getEmail())) { EmailUtils.sendEmail(sysUser.getEmail(),email.getDataContent(),code.getDataContent(),"【"+location.getLocationName()+"】任务申诉通过"); } break; @@ -297,7 +430,8 @@ msgUtils.sendMsg3(sysUser.getPhonenumber(),location.getLocationName(),"通过"); break; case 2: if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent())){ if (StringUtils.hasLength(email.getDataContent()) && StringUtils.hasLength(code.getDataContent()) &&StringUtils.hasLength(sysUser.getEmail())) { EmailUtils.sendEmail(sysUser.getEmail(),email.getDataContent(),code.getDataContent(),"【"+location.getLocationName()+"】任务申诉驳回"); } break; @@ -318,7 +452,9 @@ dto.setAuditPerson(tokenService.getLoginUser().getUserId()+""); appealService.updateById(dto); tTaskDetailService.save(taskDetail); } return R.ok(); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TCleanerController.java
@@ -1,21 +1,49 @@ package com.ruoyi.web.controller.api; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.hutool.json.JSONObject; 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.core.exception.ServiceException; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.WebUtils; import com.ruoyi.system.dto.CleanerDTO; import com.ruoyi.system.importExcel.TCleanerImportExcel; import com.ruoyi.system.importExcel.TLocationImportExcel; import com.ruoyi.system.model.TCleaner; import com.ruoyi.system.model.TLocation; import com.ruoyi.system.model.TLocationType; import com.ruoyi.system.model.TProjectDept; import com.ruoyi.system.query.CleanerListQuery; import com.ruoyi.system.service.TCleanerService; import com.ruoyi.system.service.TProjectDeptService; import com.ruoyi.system.vo.system.CleanerListVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; /** * <p> @@ -28,9 +56,12 @@ @Api(tags = "保洁员") @RestController @RequestMapping("/t-cleaner") @Slf4j public class TCleanerController { @Resource private TCleanerService cleanerService; @Resource private TProjectDeptService projectDeptService; @ApiOperation(value = "保洁员分页列表") @@ -65,5 +96,89 @@ cleanerService.removeBatchByIds(Arrays.asList(split)); return R.ok(); } @Log(title = "保洁员导入", businessType = BusinessType.INSERT) @ApiOperation(value = "保洁员导入") @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW) @PostMapping("/importCleaner") public R<String> importCleaner(@RequestPart("file") MultipartFile file) { ImportParams params = new ImportParams(); // params.setTitleRows(1); // 标题行数 params.setHeadRows(1); //表头行数 InputStream inputStream = null; // List<CustomerImportFailedData> failedData = new ArrayList<>(); List<TCleanerImportExcel> locationExcelList; try { inputStream = file.getInputStream(); locationExcelList = ExcelImportUtil.importExcel(inputStream, TCleanerImportExcel.class, params); } catch (Exception e) { e.printStackTrace(); log.error("保洁员导入失败:{}", e.getMessage()); throw new ServiceException("保洁员导入失败!"); } finally { try { inputStream.close(); } catch (IOException e) { throw new ServiceException(e.getMessage()); } } if (CollectionUtils.isEmpty(locationExcelList)) { throw new ServiceException("保洁员数据为空!"); } JSONObject result = new JSONObject(); List<TProjectDept> projects = projectDeptService.list(); for (TCleanerImportExcel locationExcel : locationExcelList) { System.err.println(locationExcel); TCleaner tCleaner = new TCleaner(); TProjectDept projectDept = projects.stream().filter(e -> e.getProjectName().equals(locationExcel.getProjectName())).findFirst().orElse(null); if (projectDept==null){ result.append("保洁员:[", locationExcel.getCleanerName()+"]未查询到部门"); continue; }else{ if (projectDept.getParentId().equals("0")){ result.append("保洁员:[", locationExcel.getCleanerName()+"]所属片区不能指定为项目部"); continue; } } tCleaner.setCleanerCode(locationExcel.getCleanerCode()); tCleaner.setCleanerName(locationExcel.getCleanerName()); tCleaner.setProjectId(projectDept.getId()); tCleaner.setDeptCode(locationExcel.getDeptCode()); tCleaner.setProjectCode(locationExcel.getProjectCode()); cleanerService.save(tCleaner); } if(!result.isEmpty()){ return R.ok(result.toString()); } return R.ok(); } @ApiOperation(value = "保洁员导入模板下载") @GetMapping("/import-cleaner") public void importCleaner() { List<TCleanerImportExcel> locationImportExcels = new ArrayList<>(); TCleanerImportExcel tLocationImportExcel = new TCleanerImportExcel(); locationImportExcels.add(tLocationImportExcel); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TCleanerImportExcel.class, locationImportExcels); HttpServletResponse response = WebUtils.response(); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("保洁员导入模板.xls", "utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setHeader("content-Type", "application/vnd.ms-excel"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); System.out.println("保洁员导入模板下载失败!"); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectorController.java
@@ -5,6 +5,7 @@ import cn.afterturn.easypoi.excel.entity.ExportParams; 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.SysUser; import com.ruoyi.common.enums.BusinessType; @@ -18,8 +19,7 @@ import com.ruoyi.system.query.TaskListQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.utils.TemplateMessageSendUtil; import com.ruoyi.system.vo.system.InspectorListVO; import com.ruoyi.system.vo.system.TaskListVO; import com.ruoyi.system.vo.system.*; import com.ruoyi.web.controller.tool.EmailUtils; import com.ruoyi.web.controller.tool.MsgUtils; import io.swagger.annotations.Api; @@ -54,6 +54,8 @@ @Resource private TLocationService locationService; @Resource private TLocationTypeService locationTypeService; @Resource private TProjectDeptService projectDeptService; @Resource @@ -68,7 +70,10 @@ @Resource private TInspectorService inspectorService; @Resource private TInspectorDetailService inspectorDetailService; @Resource private TTaskCleanService taskCleanerService; @ApiOperation(value = "督察记录分页列表") @PostMapping(value = "/pageList") public R<PageInfo<InspectorListVO>> pageList(@RequestBody InsepectorListQuery query) { @@ -76,61 +81,59 @@ List<TLocation> locationList = locationService.list(); if (StringUtils.hasLength(query.getDeptName())) { List<TProjectDept> list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list(); List<String> projectIds = list List<String> listIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); for (TProjectDept tProjectDept : list) { if (tProjectDept.getParentId().equals("0")) { List<String> collect = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, tProjectDept.getId()).list() .stream().map(TProjectDept::getId).collect(Collectors.toList()); listIds.addAll(collect); listIds.add(tProjectDept.getId()); } } List<String> deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); for (TProjectDept projectDept : list) { if (projectDept.getParentId().equals("0")){ List<TProjectDept> list1 = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()).list(); List<String> collect = list1.stream().map(TProjectDept::getId).collect(Collectors.toList()); projectIds.addAll(collect); } } projectIds.addAll(deptIds); if (projectIds.isEmpty()) { listIds.addAll(deptIds); if (listIds.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<>()); } List<Long> collect = sysUsers.stream().filter(e -> listIds.contains(e.getDeptId())) .map(SysUser::getUserId).collect(Collectors.toList()); query.setPatrolInspectorIds(collect); if (StringUtils.hasLength(query.getPhonenumber())) { List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) && projectIds.contains(sysUser.getDeptId()) sysUser.getPhonenumber().contains(query.getPhonenumber()) && listIds.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); } query.setPatrolInspectorIds(patrolInspectorIds); } } if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().contains(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (query.getPatrolInspectorIds()!=null&&!query.getPatrolInspectorIds().isEmpty()){ query.setPatrolInspectorIds(patrolInspectorIds); 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<>()); } query.setPatrolInspectorIds(patrolInspectorIds); } if (query.getLocationType()!=null){ if (query.getClearStatus() != null) { List<String> collect = inspectorDetailService.lambdaQuery().eq(TInspectorDetail::getClearStatus, query.getClearStatus()) .list().stream().distinct().map(TInspectorDetail::getInspectorId).collect(Collectors.toList()); query.setTaskIds(collect); if (collect.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()){ @@ -141,22 +144,16 @@ 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); if (collect.isEmpty()) { return R.ok(new PageInfo<>()); }else{ if (query.getLocationIds()!=null){ collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList()); if (collect.isEmpty()){ return R.ok(new PageInfo<>()); } } query.setLocationIds(collect); } } if (StringUtils.hasLength(query.getEndTime())){ String replace = query.getEndTime().replace(" 00:00:00", " 23:59:59"); query.setEndTime(replace); } return R.ok(inspectorService.pageList(query)); } @@ -202,8 +199,8 @@ } if (query.getClearStatus()!=null){ List<String> collect = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getClearStatus, query.getClearStatus()) .list().stream().distinct().map(TTaskDetail::getTaskId).collect(Collectors.toList()); List<String> collect = inspectorDetailService.lambdaQuery().eq(TInspectorDetail::getClearStatus, query.getClearStatus()) .list().stream().distinct().map(TInspectorDetail::getInspectorId).collect(Collectors.toList()); if (collect.isEmpty()){ collect.add("-1"); } @@ -257,6 +254,64 @@ } } @ApiOperation(value = "督察详情任务") @GetMapping(value = "/detail") public R<InspectorDetailVO> detail(@RequestParam String id) { TInspector inspector = inspectorService.getById(id); List<TInspectorDetail> list = inspectorDetailService.lambdaQuery().eq(TInspectorDetail::getInspectorId, id) .orderByDesc(BaseModel::getCreateTime).list(); InspectorDetailVO taskDetailVO = new InspectorDetailVO(); BeanUtils.copyProperties(inspector, taskDetailVO); TLocation byId1 = locationService.getById(inspector.getLocationId()); TLocationType byId2 = locationTypeService.getById(byId1.getLocationType()); taskDetailVO.setLocationAddress(byId1.getLocationAddress()); taskDetailVO.setLocationIcon(byId2.getLocationIcon()); taskDetailVO.setLocationName(byId1.getLocationName()); taskDetailVO.setLocationTypeName(byId2.getLocationName()); TInspectorDetail 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()); } } if (tTaskDetail != null) { tTaskDetail.setFinishTime(tTaskDetail.getCreateTime()); } taskDetailVO.setTaskDetail(tTaskDetail); taskDetailVO.setRecords(list); return R.ok(taskDetailVO); } @ApiOperation(value = "详情任务-操作记录-详情") @GetMapping(value = "/detailRecord") public R<InspectorRecordDetailVO> detailRecord(@RequestParam String id) { InspectorRecordDetailVO taskDetailVO = new InspectorRecordDetailVO(); TInspectorDetail byId4 = inspectorDetailService.getById(id); TInspector byId = inspectorService.getById(byId4.getInspectorId()); 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()); if (byId4.getUnqualified() != null) { TDictData byId3 = dictDataService.getById(byId4.getUnqualified()); if (byId3 != null) { byId4.setUnqualifiedName(byId3.getDataContent()); } } if (byId4.getAuditPerson() != null) { SysUser sysUser = sysUserService.selectUserById(Long.valueOf(byId4.getAuditPerson())); if (sysUser != null) { byId4.setAuditPersonName(sysUser.getUserName()); } } taskDetailVO.setTaskDetail(byId4); return R.ok(taskDetailVO); } @Log(title = "批量删除督察任务", businessType = BusinessType.DELETE) @ApiOperation(value = "批量删除督察任务") @DeleteMapping(value = "/deleteByIds") @@ -265,6 +320,7 @@ inspectorService.removeBatchByIds(Arrays.asList(split)); return R.ok(); } @Log(title = "删除督察任务", businessType = BusinessType.DELETE) @ApiOperation(value = "删除督察任务") @DeleteMapping(value = "/deleteById") @@ -272,6 +328,7 @@ inspectorService.removeById(id); return R.ok(); } @Resource private TNoticeService noticeService; @Resource @@ -282,79 +339,24 @@ private MsgUtils msgUtils; @Resource private TemplateMessageSendUtil templateMessageSendUtil; @Log(title = "审核任务", businessType = BusinessType.UPDATE) @ApiOperation(value = "审核任务") @PostMapping(value = "/audit") public R<Boolean> audit(@RequestBody TInspectorAuditDTO dto) throws Exception { TTaskAuditDTO tTaskAuditDTO = new TTaskAuditDTO(); BeanUtils.copyProperties(dto, tTaskAuditDTO); TTask task = taskCleanerService.getById(dto.getTaskId()); TLocation location = locationService.getById(task.getLocationId()); TNotice tNotice = new TNotice(); TNoticeSet noticeSet = noticeSetService.lambdaQuery().eq(TNoticeSet::getType, 2).last("limit 1") .one(); tNotice.setUserId(task.getPatrolInspector()); tNotice.setStatus(1); tNotice.setDataId(task.getId()); tNotice.setNoticeSetType(noticeSet.getNoticeType()); TInspector byId = inspectorService.getById(dto.getId()); SysUser sysUser = sysUserService.selectUserById(Long.valueOf(task.getPatrolInspector())); // 邮箱 TDictData email = dictDataService.lambdaQuery().eq(TDictData::getDataType,4).one(); // 授权码 TDictData code = dictDataService.lambdaQuery().eq(TDictData::getDataType,5).one(); if (dto.getAuditStatus()==1){ if (byId.getClearStatus()==2){ tTaskAuditDTO.setHandleType(3); dto.setStatus(2); // 增加消息 tNotice.setNoticeType(8); tNotice.setNoticeContent("【"+location.getLocationName()+"】督察任务不合格,请重新上传!"); noticeService.save(tNotice); switch (noticeSet.getNoticeType()) { case 1: msgUtils.sendMsg5(sysUser.getPhonenumber(), location.getLocationName()); break; case 2: if (StringUtils.hasLength(email.getDataContent()) && StringUtils.hasLength(code.getDataContent())) { EmailUtils.sendEmail(sysUser.getEmail(), email.getDataContent(), code.getDataContent(), "【"+location.getLocationName()+"】任务督察不合格,请及时整改!"); } break; case 3: if (StringUtils.hasLength(sysUser.getOpenId())){ templateMessageSendUtil.wxTemplateProblemRectificationRequest(sysUser.getOpenId(), location.getLocationName(),dto.getAuditRemark()); } break; } }else{ if (dto.getAuditTime()!=null){ dto.setStatus(3); }else{ dto.setStatus(4); } } } dto.setAuditTime(LocalDateTime.now()); dto.setAuditPerson(tokenService.getLoginUser().getUserId()+""); inspectorService.updateById(dto); return R.ok(); // TInspector byId = inspectorService.getById(dto.getId()); // // TTaskAuditDTO tTaskAuditDTO = new TTaskAuditDTO(); // BeanUtils.copyProperties(dto, tTaskAuditDTO); // TLocation location = locationService.getById(byId.getLocationId()); // TTask task = taskCleanerService.getById(dto.getTaskId()); // TLocation location = locationService.getById(task.getLocationId()); // TNotice tNotice = new TNotice(); // TNoticeSet noticeSet = noticeSetService.lambdaQuery().eq(TNoticeSet::getType, 2).last("limit 1") // .one(); // tNotice.setUserId(location.getLocationLeader()); // tNotice.setUserId(task.getPatrolInspector()); // tNotice.setStatus(1); // tNotice.setDataId(byId.getId()); // tNotice.setDataId(task.getId()); // tNotice.setNoticeSetType(noticeSet.getNoticeType()); // SysUser sysUser = sysUserService.selectUserById(Long.valueOf(location.getLocationLeader())); // TInspector byId = inspectorService.getById(dto.getId()); // SysUser sysUser = sysUserService.selectUserById(Long.valueOf(task.getPatrolInspector())); // // 邮箱 // TDictData email = dictDataService.lambdaQuery().eq(TDictData::getDataType,4).one(); // // 授权码 @@ -377,6 +379,10 @@ // } // break; // case 3: // if (StringUtils.hasLength(sysUser.getOpenId())){ // templateMessageSendUtil.wxTemplateProblemRectificationRequest(sysUser.getOpenId(), // location.getLocationName(),dto.getAuditRemark()); // } // break; // } // }else{ @@ -388,9 +394,112 @@ // } // } // dto.setAuditTime(LocalDateTime.now()); // // dto.setAuditPerson(tokenService.getLoginUser().getUserId()+""); // inspectorService.updateById(dto); // return R.ok(); SysUser auditPerson = sysUserService.selectUserById(tokenService.getLoginUser().getUserId()); TInspector byId = inspectorService.getById(dto.getId()); TTaskAuditDTO tTaskAuditDTO = new TTaskAuditDTO(); BeanUtils.copyProperties(dto, tTaskAuditDTO); TLocation location = locationService.getById(byId.getLocationId()); TNotice tNotice = new TNotice(); TNoticeSet noticeSet = noticeSetService.lambdaQuery().eq(TNoticeSet::getType, 2).last("limit 1") .one(); tNotice.setUserId(location.getLocationLeader()); tNotice.setStatus(1); tNotice.setDataId(byId.getId()); tNotice.setNoticeSetType(noticeSet.getNoticeType()); SysUser sysUser = sysUserService.selectUserById(Long.valueOf(location.getLocationLeader())); // 邮箱 TDictData email = dictDataService.lambdaQuery().eq(TDictData::getDataType, 4).one(); // 授权码 TDictData code = dictDataService.lambdaQuery().eq(TDictData::getDataType, 5).one(); TInspectorDetail one = inspectorDetailService.lambdaQuery().eq(TInspectorDetail::getInspectorId, byId.getId()) .eq(TInspectorDetail::getHandleType, 1).orderByDesc(TInspectorDetail::getCreateTime) .last("limit 1").one(); if (dto.getAuditStatus() == 1) { TInspectorDetail tInspectorDetail = new TInspectorDetail(); tInspectorDetail.setInspectorId(byId.getId()); tInspectorDetail.setClearStatus(byId.getClearStatus()); tInspectorDetail.setUnqualified(byId.getUnqualified()); tInspectorDetail.setRemark(byId.getRemark()); tInspectorDetail.setPicture(byId.getPicture()); tInspectorDetail.setAudioUrl(byId.getAudioUrl()); tInspectorDetail.setHandleType(2); tInspectorDetail.setAuditPerson(tokenService.getLoginUser().getUserId() + ""); tInspectorDetail.setAuditTime(LocalDateTime.now()); tInspectorDetail.setAuditRemark(dto.getAuditRemark()); tInspectorDetail.setAuditStatus(dto.getAuditStatus()); inspectorDetailService.save(tInspectorDetail); Long count = inspectorDetailService.lambdaQuery().eq(TInspectorDetail::getInspectorId, byId.getId()) .eq(TInspectorDetail::getHandleType, 1).count(); if (count>2){ dto.setStatus(3); }else{ if (byId.getClearStatus() == 1) { dto.setStatus(4); }else{ dto.setStatus(3); } } } else { TInspectorDetail tInspectorDetail = new TInspectorDetail(); tInspectorDetail.setInspectorId(byId.getId()); tInspectorDetail.setClearStatus(dto.getClearStatus()); tInspectorDetail.setUnqualified(byId.getUnqualified()); tInspectorDetail.setRemark(dto.getAuditRemark()); tInspectorDetail.setPicture(byId.getPicture()); tInspectorDetail.setAudioUrl(byId.getAudioUrl()); tInspectorDetail.setHandleType(3); tInspectorDetail.setAuditPerson(tokenService.getLoginUser().getUserId() + ""); tInspectorDetail.setAuditTime(LocalDateTime.now()); tInspectorDetail.setAuditRemark(dto.getAuditRemark()); tInspectorDetail.setAuditStatus(dto.getAuditStatus()); inspectorDetailService.save(tInspectorDetail); tTaskAuditDTO.setHandleType(3); dto.setStatus(2); // 增加消息 tNotice.setNoticeType(8); tNotice.setNoticeContent("【" + location.getLocationName() + "】督察任务不合格,请重新上传!"); noticeService.save(tNotice); switch (noticeSet.getNoticeType()) { case 1: msgUtils.sendMsg5(sysUser.getPhonenumber(), location.getLocationName()); break; case 2: if (StringUtils.hasLength(email.getDataContent()) && StringUtils.hasLength(code.getDataContent()) &&StringUtils.hasLength(sysUser.getEmail())) { EmailUtils.sendEmail(sysUser.getEmail(), email.getDataContent(), code.getDataContent(), "【" + location.getLocationName() + "】任务督察不合格,请及时整改!"); } break; case 3: if (StringUtils.hasLength(sysUser.getOpenId())) { templateMessageSendUtil.wxTemplateTaskResultRequest(sysUser.getOpenId(), location.getLocationName(), "驳回", auditPerson.getNickName()); } break; } } dto.setAuditTime(LocalDateTime.now()); dto.setAuditPerson(tokenService.getLoginUser().getUserId() + ""); inspectorService.updateById(dto); one.setAuditPerson(tokenService.getLoginUser().getUserId() + ""); one.setAuditTime(LocalDateTime.now()); one.setAuditRemark(dto.getAuditRemark()); one.setAuditStatus(dto.getAuditStatus()); inspectorDetailService.updateById(one); return R.ok(); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java
@@ -45,6 +45,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URLEncoder; import java.util.*; import java.util.stream.Collectors; @@ -391,6 +393,9 @@ for (TLocationImportExcel locationExcel : locationExcelList) { System.err.println(locationExcel); if (locationExcel.getLocationName()==null){ continue; } TLocation location = new TLocation(); location.setLocationCode(locationExcel.getLocationCode()); location.setLocationName(locationExcel.getLocationName()); @@ -399,11 +404,11 @@ location.setLocationType(tLocationType.getId()); } location.setLocationAddress(locationExcel.getLocationAddress()); String[] addressLonLat = locationExcel.getLocationAddressLonLat().split(","); String[] addressLonLat = locationExcel.getLocationAddressLonLat().split("/"); location.setLocationLon(addressLonLat[0]); location.setLocationLat(addressLonLat[1]); location.setLocationAddressEnd(locationExcel.getLocationAddressEnd()); String[] addressEndLonLat = locationExcel.getLocationAddressEndLonLat().split(","); String[] addressEndLonLat = locationExcel.getLocationAddressEndLonLat().split("/"); location.setLocationLonEnd(addressEndLonLat[0]); location.setLocationLatEnd(addressEndLonLat[1]); TProjectDept projectDept = deptList.stream().filter(dept -> dept.getCode().equals(locationExcel.getDeptCode())).findFirst().orElse(null); @@ -439,5 +444,10 @@ return R.ok(); } public static void main(String[] args) { BigDecimal divide = new BigDecimal("-23").divide(new BigDecimal("40"),2, RoundingMode.HALF_UP); System.err.println(divide); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java
@@ -271,7 +271,9 @@ msgUtils.sendMsg1(sysUser.getPhonenumber(),location.getLocationName(),"驳回"); break; case 2: if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent())){ if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent()) &&StringUtils.hasLength(sysUser.getEmail())){ EmailUtils.sendEmail(sysUser.getEmail(),email.getDataContent(),code.getDataContent(),"【" + location.getLocationName() + "】任务不合格,请重新上传!"); } break; @@ -339,7 +341,8 @@ msgUtils.sendMsg1(sysUser.getPhonenumber(),location.getLocationName(),"通过"); break; case 2: if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent())){ if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent()) &&StringUtils.hasLength(sysUser.getEmail())){ EmailUtils.sendEmail(sysUser.getEmail(),email.getDataContent(),code.getDataContent(),"【" + location.getLocationName() + "】任务已通过"); } break; @@ -477,7 +480,8 @@ msgUtils.sendMsg1(sysUser.getPhonenumber(),location.getLocationName(),"驳回"); break; case 2: if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent())){ if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent()) &&StringUtils.hasLength(sysUser.getEmail())){ EmailUtils.sendEmail(sysUser.getEmail(),email.getDataContent(),code.getDataContent(),"【" + location.getLocationName() + "】任务不合格,请重新上传!"); } break; @@ -539,7 +543,8 @@ msgUtils.sendMsg1(sysUser.getPhonenumber(),location.getLocationName(),"通过"); break; case 2: if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent())){ if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent()) &&StringUtils.hasLength(sysUser.getEmail())){ EmailUtils.sendEmail(sysUser.getEmail(),email.getDataContent(),code.getDataContent(),"【" + location.getLocationName() + "】任务已通过"); } break; ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/WorkbenchesController.java
@@ -606,7 +606,11 @@ if(tTasks.isEmpty()){ taskSituationDayVO.setCompleteRate(BigDecimal.ZERO); }else { if (taskSituationDayVO.getCompletedNum() != 0){ taskSituationDayVO.setCompleteRate(new BigDecimal(qualifiedWarnChild).divide(new BigDecimal(taskSituationDayVO.getCompletedNum()), 2, RoundingMode.HALF_DOWN)); }else{ taskSituationDayVO.setCompleteRate(BigDecimal.ZERO); } } taskSituationDayVOList.add(taskSituationDayVO); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -1,5 +1,10 @@ package com.ruoyi.web.controller.system; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.hutool.json.JSONObject; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.controller.BaseController; @@ -8,25 +13,41 @@ import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.WebUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.SysUserUpdateStatusDTO; import com.ruoyi.system.importExcel.TCleanerImportExcel; import com.ruoyi.system.importExcel.TSysUserImportExcel; import com.ruoyi.system.model.TCleaner; import com.ruoyi.system.model.TDept; import com.ruoyi.system.model.TProjectDept; import com.ruoyi.system.model.TTemplate; import com.ruoyi.system.query.SysUserQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.SysUserVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -39,8 +60,7 @@ @Api(tags = "用户信息") @RestController @RequestMapping("/system/user") public class SysUserController extends BaseController { public class SysUserController extends BaseController { @Autowired private ISysUserService userService; @@ -55,13 +75,15 @@ private TProjectDeptService projectDeptService; @Resource private TDeptService tdeptService; @Resource private TTemplateService templateService; /** * 获取用户列表 */ @ApiOperation(value = "获取用户列表") @PostMapping("/list") public AjaxResult<PageInfo<SysUserVO>> 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())){ @@ -88,8 +110,7 @@ @ApiOperation(value = "获取用户列表-不分页") @PostMapping("/listNotPage") public AjaxResult listNotPage() { public AjaxResult listNotPage() { List<SysUser> list = userService.selectList(); return AjaxResult.success(list); } @@ -111,8 +132,7 @@ */ @ApiOperation(value = "获取用户详情") @GetMapping("/getDetail") public AjaxResult getDetail(@RequestParam Long userId) { public AjaxResult getDetail(@RequestParam Long userId) { SysUser sysUser = userService.selectUserById(userId); SysUserVO sysUserVO = new SysUserVO(); BeanUtils.copyProperties(sysUser,sysUserVO); @@ -125,8 +145,7 @@ */ @ApiOperation(value = "获取用户详情") @GetMapping("/queryDetail") public AjaxResult queryDetail() { public AjaxResult queryDetail() { Long userId = tokenService.getLoginUser().getUserId(); SysUser sysUser = userService.selectUserById(userId); SysUserVO sysUserVO = new SysUserVO(); @@ -141,8 +160,7 @@ */ @ApiOperation(value = "获取用户数量统计") @PostMapping("/getUserCount") public AjaxResult getUserCount() { public AjaxResult getUserCount() { Map<String,Integer> map = new HashMap<>(); Integer userCountSum = userService.selectCount(null); @@ -160,8 +178,7 @@ * 移除黑名单 */ @GetMapping("/removeBlackList") public AjaxResult removeBlackList(@RequestParam String ids) { public AjaxResult removeBlackList(@RequestParam String ids) { String[] split = ids.split(","); List<Long> id = new ArrayList<>(); for (String s : split) { @@ -177,21 +194,184 @@ @ApiOperation(value = "新增用户管理") @Log(title = "用户信息-新增用户", businessType = BusinessType.INSERT) @PostMapping("/add") public AjaxResult add(@Validated @RequestBody SysUser user) { public AjaxResult add(@Validated @RequestBody SysUser user) { user.setUserName(user.getUserName()); if (!userService.checkUserNameUnique(user)) { if (!userService.checkUserNameUnique(user)) { return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在"); } user.setCreateBy(getUsername()); user.setPassword(SecurityUtils.encryptPassword("123456")); userService.insertUser(user); return AjaxResult.success(); } @Log(title = "员工导入", businessType = BusinessType.INSERT) @ApiOperation(value = "员工导入") @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) @PostMapping("/importUser") public R<String> importUser(@RequestPart("file") MultipartFile file) { List<SysRole> sysRoles = roleService.selectRoleAll(); ImportParams params = new ImportParams(); // params.setTitleRows(1); // 标题行数 params.setHeadRows(1); //表头行数 InputStream inputStream = null; // List<CustomerImportFailedData> failedData = new ArrayList<>(); List<TSysUserImportExcel> locationExcelList; try { inputStream = file.getInputStream(); locationExcelList = ExcelImportUtil.importExcel(inputStream, TSysUserImportExcel.class, params); } catch (Exception e) { e.printStackTrace(); throw new ServiceException("员工导入失败!"); } finally { try { inputStream.close(); } catch (IOException e) { throw new ServiceException(e.getMessage()); } } if (CollectionUtils.isEmpty(locationExcelList)) { throw new ServiceException("员工数据为空!"); } JSONObject result = new JSONObject(); List<TProjectDept> projects = projectDeptService.list(); List<SysUser> sysUsers = new ArrayList<>(); for (TSysUserImportExcel locationExcel : locationExcelList) { System.err.println(locationExcel); SysUser sysUser = new SysUser(); if (locationExcel.getDeptType() == null) { result.append("所属部门", "所属部门请填写1或2"); continue; } else { sysUser.setDeptType(locationExcel.getDeptType()); switch (locationExcel.getDeptType()) { case 1: TProjectDept projectDept = projectDeptService.lambdaQuery().eq(TProjectDept::getProjectName, locationExcel.getDeptName()) .last("limit 1").one(); if (projectDept==null){ result.append("部门名称", "部门名称不存在"); continue; }else{ sysUser.setDeptId(projectDept.getId()); } break; case 2: TDept dept = tdeptService.lambdaQuery().eq(TDept::getDeptName, locationExcel.getDeptName()) .last("limit 1").one(); if (dept==null){ result.append("部门名称", "部门名称不存在"); continue; }else{ sysUser.setDeptId(dept.getId()); } break; } } if (!org.springframework.util.StringUtils.hasLength(locationExcel.getRoleName())){ result.append("角色名称", "角色名称不能为空"); continue; }else{ SysRole sysRole = sysRoles.stream().filter(e -> e.getRoleName().equals(locationExcel.getRoleName()) && e.getDelFlag().equals(0)).findFirst().orElse(null); if (sysRole==null){ result.append("角色", "角色名称不存在"); continue; }else{ if (sysRole.getStatus()==1){ result.append("角色", "角色已禁用"); continue; }else{ sysRole.setRoleId(sysRole.getRoleId()); } } } if (!org.springframework.util.StringUtils.hasLength(locationExcel.getNickName())){ result.append("员工名称", "员工名称不能为空"); continue; }else{ sysUser.setNickName(locationExcel.getNickName()); } if (!org.springframework.util.StringUtils.hasLength(locationExcel.getUserName())){ result.append("登录账号", "登录账号不能为空"); continue; }else{ sysUser.setUserName(locationExcel.getUserName()); } if (!org.springframework.util.StringUtils.hasLength(locationExcel.getEmail())){ result.append("邮箱", "邮箱不能为空"); continue; }else{ sysUser.setEmail(locationExcel.getEmail()); } if (!org.springframework.util.StringUtils.hasLength(locationExcel.getPhonenumber())){ result.append("联系电话", "联系电话不能为空"); continue; }else{ sysUser.setPhonenumber(locationExcel.getPhonenumber()); // 如果手机号小于六位 if (locationExcel.getPhonenumber().length() < 6){ result.append("联系电话", "联系电话格式错误"); continue; } // 截取手机号后六位 sysUser.setPassword(SecurityUtils.encryptPassword(locationExcel.getPhonenumber().substring(locationExcel.getPhonenumber().length() - 6))); } sysUser.setStatus("0"); sysUser.setDelFlag("0"); if (!org.springframework.util.StringUtils.hasLength(locationExcel.getTemplateName())){ result.append("模板名称", "模板名称不能为空"); continue; }else{ TTemplate template = templateService.lambdaQuery().eq(TTemplate::getTemplateName, locationExcel.getTemplateName()) .last("limit 1").one(); if (template==null){ result.append("模板名称", "模板名称不存在"); continue; }else{ sysUser.setTemplateId(template.getId()); } } sysUser.setCreateBy(getUsername()); userService.insertUser(sysUser); } if (!result.isEmpty()) { return R.ok(result.toString()); } return R.ok(); } @ApiOperation(value = "员工导入模板下载") @GetMapping("/importDownload") public void importDownload() { List<TSysUserImportExcel> locationImportExcels = new ArrayList<>(); TSysUserImportExcel tLocationImportExcel = new TSysUserImportExcel(); locationImportExcels.add(tLocationImportExcel); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TSysUserImportExcel.class, locationImportExcels); HttpServletResponse response = WebUtils.response(); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("员工导入模板.xls", "utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); response.setHeader("content-Type", "application/vnd.ms-excel"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); System.out.println("员工导入模板下载失败!"); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } /** @@ -201,17 +381,13 @@ @ApiOperation(value = "修改用户管理") @Log(title = "用户信息-修改用户", businessType = BusinessType.UPDATE) @PostMapping("/edit") public AjaxResult edit(@Validated @RequestBody SysUser user) { public AjaxResult edit(@Validated @RequestBody SysUser user) { user.setUserName(user.getPhonenumber()); // userService.checkUserAllowed(user); // userService.checkUserDataScope(user.getUserId()); if (!userService.checkUserNameUnique(user)) { if (!userService.checkUserNameUnique(user)) { return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在"); } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); } @@ -229,15 +405,13 @@ @ApiOperation(value = "批量删除用户") @Log(title = "用户信息-批量删除用户", businessType = BusinessType.DELETE) @DeleteMapping("/deleteById/{ids}") public AjaxResult remove(@PathVariable String ids) { public AjaxResult remove(@PathVariable String ids) { String[] split = ids.split(","); List<Long> userIds = new ArrayList<>(); for (String s : split) { userIds.add(Long.valueOf(s)); } if (userIds.contains(getUserId())) { if (userIds.contains(getUserId())) { return error("当前用户不能删除"); } return AjaxResult.success(userService.deleteUserByIds(userIds)); @@ -250,8 +424,7 @@ @ApiOperation(value = "重置密码") @Log(title = "用户信息-重置密码", businessType = BusinessType.UPDATE) @PostMapping("/resetPwd") public AjaxResult resetPwd(@RequestBody SysUser user) { public AjaxResult resetPwd(@RequestBody SysUser user) { userService.checkUserAllowed(user); // userService.checkUserDataScope(user.getUserId()); user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); @@ -265,8 +438,7 @@ @ApiOperation(value = "状态修改/启用禁用") @Log(title = "用户信息-状态修改", businessType = BusinessType.UPDATE) @PutMapping("/changeStatus") public AjaxResult changeStatus(@RequestBody SysUserUpdateStatusDTO dto) { public AjaxResult changeStatus(@RequestBody SysUserUpdateStatusDTO dto) { SysUser loginUser = tokenService.getLoginUser().getUser(); SysUser user = new SysUser(); user.setUserId(dto.getUserId()); @@ -284,8 +456,7 @@ */ // @PreAuthorize("@ss.hasPermi('system:user:query')") @GetMapping("/authRole/{userId}") public AjaxResult authRole(@PathVariable("userId") Long userId) { public AjaxResult authRole(@PathVariable("userId") Long userId) { AjaxResult ajax = AjaxResult.success(); SysUser user = userService.selectUserById(userId); List<SysRole> roles = roleService.selectRolesByUserId(userId); @@ -300,8 +471,7 @@ // @PreAuthorize("@ss.hasPermi('system:user:edit')") @Log(title = "用户管理", businessType = BusinessType.GRANT) @PutMapping("/authRole") public AjaxResult insertAuthRole(Long userId, Long[] roleIds) { public AjaxResult insertAuthRole(Long userId, Long[] roleIds) { userService.checkUserDataScope(userId); userService.insertUserAuth(userId, roleIds); return AjaxResult.success(); @@ -312,8 +482,7 @@ */ // @PreAuthorize("@ss.hasPermi('system:user:list')") @GetMapping("/deptTree") public AjaxResult deptTree(SysDept dept) { public AjaxResult deptTree(SysDept dept) { return AjaxResult.success(deptService.selectDeptTreeList(dept)); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
@@ -71,14 +71,10 @@ private TLeaveService leaveService; @Resource private TNoticeService noticeService; // 每一个小时执行一次 // @Scheduled(cron = "0 0 0 * * ?") // @Scheduled(fixedRate = 1500000000) // 每天晚上22点执行 @Scheduled(cron = "0 0 22 * * ?") public void dayOfCreateInspection() { try { // 查询任务模板 List<TTemplate> list = templateService.list(); if (CollectionUtils.isEmpty(list)) { @@ -152,7 +148,8 @@ msgUtils.sendMsg2(sysUser.getPhonenumber(),count+""); break; case 2: if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent())){ if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent()) &&StringUtils.hasLength(sysUser.getEmail())){ EmailUtils.sendEmail(sysUser.getEmail(),email.getDataContent(),code.getDataContent(),"今日剩余"+count+"个任务未完成,请尽快处理"); } break; ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/EmailUtils.java
@@ -26,6 +26,10 @@ public class EmailUtils { public static void sendEmail(String userEmail, String sendEmail, String code, String content) throws Exception { if (userEmail == null){ log.error("用户邮箱为空"); return; } // 发送邮箱 // 收件人电子邮箱,TODO 换成自己的收件箱 String to = userEmail; ruoyi-admin/src/main/resources/application.yml
@@ -1,4 +1,4 @@ # 项目相关配置 spring: profiles: active: prod active: test ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java
@@ -66,6 +66,8 @@ @Resource private TTaskDetailService taskDetailService; @Resource private TInspectorDetailService inspectorDetailService; @Resource @@ -330,6 +332,7 @@ IndexVO res = new IndexVO(); res.setIsNotice(0); Long userId = tokenService.getLoginUserApplet().getUserId(); List<TLocation> locations = locationService.lambdaQuery().eq(TLocation::getLocationLeader, userId).list(); Long count = noticeService.lambdaQuery().eq(TNotice::getUserId, userId).eq(TNotice::getStatus, 1).count(); if (count>0){ res.setIsNotice(1); @@ -340,6 +343,7 @@ List<TLocationType> locationTypeList = locationTypeService.list(); dto.setUserId(userId); List<TTask> taskAll = taskCleanerService.indexTask(dto); List<TInspector> inspectorAll = taskCleanerService.indexInspector(dto); // List<TTask> taskAll = taskCleanerService.lambdaQuery().eq(TTask::getPatrolInspector, userId).list(); // 获取今天凌晨00:00:00 和今天23:59:59 类型为LocalDateTime LocalDateTime startOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); @@ -491,26 +495,34 @@ if (taskDetailsStatus1!=null){ taskTodayVO.setRemark(taskDetailsStatus1.getAuditRemark()); } // 任务记录ids List<String> collect = taskAll.stream().map(TTask::getId).collect(Collectors.toList()); if (!collect.isEmpty()){ List<TInspector> list1 = inspectorService.lambdaQuery() .in(TInspector::getTaskId, collect).eq(TInspector::getStatus, 2).list(); taskTodayVO.setIsInspector(0); pendingTask.add(taskTodayVO); } // 点位ids List<String> collect = locations.stream().map(TLocation::getId).collect(Collectors.toList()); if (collect.isEmpty()){ collect.add("-1"); } List<TInspector> list1 = inspectorAll.stream().filter(e->collect.contains(e.getLocationId())).collect(Collectors.toList()); for (TInspector tInspector : list1) { TInspectorDetail taskDetailsStatus1 = inspectorDetailService.lambdaQuery() .eq(TInspectorDetail::getInspectorId, tInspector.getId()) .in(TInspectorDetail::getHandleType, Arrays.asList(3,6)) .orderByDesc(TInspectorDetail::getCreateTime).last("limit 1").one(); TaskPendingVO taskTodayVOOne = new TaskPendingVO(); BeanUtils.copyProperties(tTask, taskTodayVOOne); BeanUtils.copyProperties(tInspector, taskTodayVOOne); taskTodayVOOne.setId(tInspector.getId()); TLocation tLocationOne = locationList.stream().filter(e -> e.getId().equals(tTask.getLocationId())).findFirst().orElse(null); TLocation tLocationOne = locationList.stream().filter(e -> e.getId().equals(tInspector.getLocationId())).findFirst().orElse(null); if (tLocationOne != null) { taskTodayVOOne.setLocationAddress(tLocationOne.getLocationAddress()); taskTodayVOOne.setLocationLon(tLocationOne.getLocationLon()); taskTodayVOOne.setLocationLat(tLocationOne.getLocationLat()); taskTodayVOOne.setLocationName(tLocationOne.getLocationName()); if(StringUtils.hasLength(dto.getLon())){ taskTodayVO.setDistance(tTask.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)); taskTodayVOOne.setDistance(tInspector.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)); }else { taskTodayVO.setDistance(new BigDecimal("0")); taskTodayVOOne.setDistance(new BigDecimal("0")); } TLocationType tLocationType = locationTypeList.stream().filter(e -> e.getId().equals(tLocationOne.getLocationType())).findFirst().orElse(null); if (tLocationType != null) { @@ -519,21 +531,21 @@ } } taskTodayVOOne.setStatus(4); taskTodayVOOne.setRemark(tInspector.getAuditRemark()); if (taskDetailsStatus1!=null){ taskTodayVOOne.setRemark(taskDetailsStatus1.getAuditRemark()); } taskTodayVOOne.setIsInspector(1); pendingTask.add(taskTodayVOOne); } } pendingTask.add(taskTodayVO); } // 将pendingTask按照距离 从小到大排序 pendingTask.sort(Comparator.comparing(TaskPendingVO::getDistance)); res.setPendingTask(pendingTask); res.setLeaveList(leaveList); List<TaskTodayVO> todayTask = new ArrayList<>(); List<String> collect = taskAll.stream().map(TTask::getId).collect(Collectors.toList()); List<String> tasdids = taskAll.stream().map(TTask::getId).collect(Collectors.toList()); for (TTask tTask : taskToday) { TaskTodayVO taskTodayVO = new TaskTodayVO(); if(CollectionUtils.isEmpty(collect)){ if(CollectionUtils.isEmpty(tasdids)){ break; } TTaskDetail taskDetailsStatus1 = taskDetailService.lambdaQuery() ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TTaskDetailController.java
@@ -8,8 +8,11 @@ import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.R; 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.AppealDTO; import com.ruoyi.system.applet.dto.AppealInspectorDTO; import com.ruoyi.system.dto.InspectorDetailDto; import com.ruoyi.system.dto.TTaskAuditBatchDTO; import com.ruoyi.system.dto.TaskDetailDto; import com.ruoyi.system.model.*; @@ -57,6 +60,8 @@ private TLocationService locationService; @Resource private TInspectorService inspectorService; @Resource private TInspectorDetailService inspectorDetailService; @ApiOperation(value = "上传任务") @PostMapping(value = "/uploadTask") @@ -64,27 +69,27 @@ double radius = 50; // 单位:米 int segments = 4; // 四段,共 5 个点 TTask task = taskService.getById(dto.getTaskId()); if (task==null)return R.fail("任务不存在"); TLocation location = locationService.getById(task.getLocationId()); if (location==null)return R.fail("点位不存在"); TInspector byId = inspectorService.getById(dto.getId()); TInspector byId = inspectorService.getById(dto.getTaskId()); if (byId!=null){ UpdateWrapper<TInspector> tInspectorUpdateWrapper = new UpdateWrapper<>(); tInspectorUpdateWrapper.set("clear_status", dto.getClearStatus()); tInspectorUpdateWrapper.set("unqualified", dto.getUnqualified()); tInspectorUpdateWrapper.set("remark", dto.getRemark()); tInspectorUpdateWrapper.set("picture", dto.getPicture()); tInspectorUpdateWrapper.set("audio_url", dto.getAudioUrl()); tInspectorUpdateWrapper.set("status", 1); tInspectorUpdateWrapper.set("audit_time", 1); tInspectorUpdateWrapper.set("audit_person", 1); tInspectorUpdateWrapper.set("audit_status", 1); tInspectorUpdateWrapper.set("audit_remark", 1); tInspectorUpdateWrapper.eq("id", dto.getId()); inspectorService.update(tInspectorUpdateWrapper); TLocation location = locationService.getById(byId.getLocationId()); byId.setClearStatus( dto.getClearStatus()); byId.setUnqualified(dto.getUnqualified()); byId.setRemark( dto.getRemark()); byId.setPicture( dto.getPicture()); byId.setAudioUrl( dto.getAudioUrl()); byId.setStatus( 1); TInspectorDetail tInspectorDetail = new TInspectorDetail(); BeanUtils.copyProperties(dto, tInspectorDetail); tInspectorDetail.setInspectorId(byId.getId()); tInspectorDetail.setHandleType(1); tInspectorDetail.setInspectorId(byId.getId()); inspectorDetailService.save(tInspectorDetail); inspectorService.updateById(byId); }else{ TLocation location = locationService.getById(task.getLocationId()); // try { // String routeJson = AmapApiClient.getDrivingRoute(Double.parseDouble(location.getLocationLat()), // String routeJson = AmapApiCalient.getDrivingRoute(Double.parseDouble(location.getLocationLat()), // Double.parseDouble(location.getLocationLon()), // Double.parseDouble(location.getLocationLatEnd()), // Double.parseDouble(location.getLocationLonEnd())); @@ -111,6 +116,10 @@ // } catch (Exception e) { // e.printStackTrace(); // } dto.setTaskId(task.getId()); dto.setHandleType(1); dto.setAuditStatus(1); dto.setAuditTime(LocalDateTime.now()); taskDetailService.save(dto); // 修改任务状态 taskService.update(Wrappers.<TTask>lambdaUpdate().set(TTask::getStatus, 3).eq(TTask::getId, dto.getTaskId())); @@ -118,6 +127,7 @@ return R.ok(); } @Resource private TokenService tokenService; @@ -155,6 +165,24 @@ taskDetailService.save(taskDetail); return R.ok(); } @ApiOperation(value = "督察申诉") @PostMapping(value = "/appealInspector") public R<Boolean> appealInspector(@RequestBody AppealInspectorDTO dto) { List<TAppeal> list = appealService.lambdaQuery().eq(TAppeal::getInspectorId, dto.getInspectorId()).list(); if (!list.isEmpty()){ return R.fail("任务只有一次申诉机会"); } dto.setAppealPerson(tokenService.getLoginUserApplet().getUserId()+""); appealService.save(dto); // 添加督察任务详情 TInspectorDetail taskDetail = new TInspectorDetail(); taskDetail.setInspectorId(dto.getTaskId()); taskDetail.setHandleType(4); taskDetail.setClearStatus(taskDetail.getClearStatus()); taskDetail.setAppealId(dto.getId()); inspectorDetailService.save(taskDetail); return R.ok(); } } ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java
@@ -12,6 +12,7 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.utils.CodeGenerateUtils; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.framework.web.service.TokenService; @@ -124,6 +125,8 @@ private MsgUtils msgUtils; @Resource private TemplateMessageSendUtil templateMessageSendUtil; @Resource private TInspectorDetailService inspectorDetailService; @ApiOperation(value = "通过code获得openid,获取用户信息",tags = {"微信小程序登录"}) @GetMapping("/openIdByJsCode") public R<String> openIdByJsCode(@RequestParam String code) { @@ -377,10 +380,13 @@ @ApiOperation(value = "详情任务") @GetMapping(value = "/detail") public R<TaskDetailVO> detail(@RequestParam String id) { TTask byId = taskCleanerService.getById(id); TInspector inspector = inspectorService.getById(id); if (byId!=null){ List<TTaskDetail> list = taskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, id) .orderByDesc(BaseModel::getCreateTime).list(); TaskDetailVO taskDetailVO = new TaskDetailVO(); TTask byId = taskCleanerService.getById(id); BeanUtils.copyProperties(byId, taskDetailVO); TLocation byId1 = locationService.getById(byId.getLocationId()); TLocationType byId2 = locationTypeService.getById(byId1.getLocationType()); @@ -414,63 +420,111 @@ } } return R.ok(taskDetailVO); }else{ List<TInspectorDetail> list = inspectorDetailService.lambdaQuery().eq(TInspectorDetail::getInspectorId, id) .orderByDesc(BaseModel::getCreateTime).list(); TaskDetailVO taskDetailVO = new TaskDetailVO(); BeanUtils.copyProperties(inspector, taskDetailVO); TLocation byId1 = locationService.getById(inspector.getLocationId()); TLocationType byId2 = locationTypeService.getById(byId1.getLocationType()); taskDetailVO.setLocationName(byId1.getLocationName()); taskDetailVO.setLocationAddress(byId1.getLocationAddress()); taskDetailVO.setLocationAddressEnd(byId1.getLocationAddressEnd()); taskDetailVO.setLocationIcon(byId2.getLocationIcon()); taskDetailVO.setLocationTypeName(byId2.getLocationName()); taskDetailVO.setLocationLon(byId1.getLocationLon()); taskDetailVO.setLocationLat(byId1.getLocationLat()); taskDetailVO.setLocationLatEnd(byId1.getLocationLatEnd()); taskDetailVO.setLocationLonEnd(byId1.getLocationLonEnd()); TInspectorDetail inspectorDetail = list.stream().filter(e -> e.getHandleType() == 1).findFirst().orElse(null); if (inspectorDetail != null && inspectorDetail.getUnqualified() != null) { TTaskDetail temp = new TTaskDetail(); BeanUtils.copyProperties(inspectorDetail, temp); taskDetailVO.setTaskDetail(temp); TDictData byId3 = dictDataService.getById(inspectorDetail.getUnqualified()); if (byId3 != null) { inspectorDetail.setUnqualifiedName(byId3.getDataContent()); } @ApiOperation(value = "督察任务-详情任务") @GetMapping(value = "/detaiInspectorl") public R<InspectorDetailVO> detaiInspectorl(@RequestParam String id) { InspectorDetailVO taskDetailVO = new InspectorDetailVO(); TInspector inspector = inspectorService.getById(id); TLocation location = locationService.getById(inspector.getLocationId()); TLocationType locationType = locationTypeService.getById(location.getLocationType()); taskDetailVO.setLocationAddress(location.getLocationAddress()); taskDetailVO.setLocationAddressEnd(location.getLocationAddressEnd()); taskDetailVO.setLocationIcon(locationType.getLocationIcon()); taskDetailVO.setLocationName(locationType.getLocationName()); taskDetailVO.setLocationTypeName(locationType.getLocationName()); taskDetailVO.setLocationLonEnd(location.getLocationLonEnd()); taskDetailVO.setLocationLatEnd(location.getLocationLatEnd()); taskDetailVO.setLocationLon(location.getLocationLon()); taskDetailVO.setLocationLat(location.getLocationLat()); taskDetailVO.setLocationName(location.getLocationName()); taskDetailVO.setId(inspector.getId()); taskDetailVO.setClearStatus(inspector.getClearStatus()); taskDetailVO.setUnqualified(inspector.getUnqualified()); taskDetailVO.setRemark(inspector.getAuditRemark()); taskDetailVO.setPicture(inspector.getPicture()); taskDetailVO.setAudioUrl(inspector.getAudioUrl()); taskDetailVO.setStatus(inspector.getStatus()); taskDetailVO.setAuditPerson(inspector.getAuditPerson()); taskDetailVO.setAuditTime(inspector.getAuditTime()); taskDetailVO.setAuditStatus(inspector.getAuditStatus()); taskDetailVO.setAuditRemark(inspector.getAuditRemark()); } if (inspectorDetail != null) { inspectorDetail.setFinishTime(inspectorDetail.getCreateTime()); } List<TTaskDetail> tTaskDetails = new ArrayList<>(); for (TInspectorDetail tInspectorDetail : list) { TTaskDetail tTaskDetail = new TTaskDetail(); BeanUtils.copyProperties(tInspectorDetail, tTaskDetail); tTaskDetails.add(tTaskDetail); } taskDetailVO.setRecords(tTaskDetails); if (inspector.getStatus()==2){ TInspectorDetail reject = inspectorDetailService.lambdaQuery().eq(TInspectorDetail::getInspectorId, id) .eq(TInspectorDetail::getHandleType,3) .orderByDesc(BaseModel::getCreateTime).last("limit 1").one(); if (reject!=null){ taskDetailVO.setRejectRemark(reject.getAuditRemark()); } } return R.ok(taskDetailVO); } } @ApiOperation(value = "详情任务-操作记录-详情") @GetMapping(value = "/detailRecord") public R<TaskRecordDetailVO> detailRecord(@RequestParam String id) { TaskRecordDetailVO taskDetailVO = new TaskRecordDetailVO(); TTaskDetail byId4 = taskDetailService.getById(id); TTask byId = taskCleanerService.getById(byId4.getTaskId()); TTaskDetail taskDetail = taskDetailService.getById(id); TInspectorDetail inspectorDetail = inspectorDetailService.getById(id); if (taskDetail!=null){ TTask byId = taskCleanerService.getById(taskDetail.getTaskId()); 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()); if (byId4.getUnqualified() != null) { TDictData byId3 = dictDataService.getById(byId4.getUnqualified()); if (taskDetail.getUnqualified() != null) { TDictData byId3 = dictDataService.getById(taskDetail.getUnqualified()); if (byId3 != null) { byId4.setUnqualifiedName(byId3.getDataContent()); taskDetail.setUnqualifiedName(byId3.getDataContent()); } } byId4.setFinishTime(byId4.getCreateTime()); SysUser sysUser = sysUserService.selectUserById(Long.valueOf(byId4.getAuditPerson())); taskDetail.setFinishTime(taskDetail.getCreateTime()); SysUser sysUser = sysUserService.selectUserById(Long.valueOf(taskDetail.getAuditPerson())); if (sysUser != null) { byId4.setAuditPersonName(sysUser.getUserName()); taskDetail.setAuditPersonName(sysUser.getUserName()); } taskDetailVO.setTaskDetail(byId4); taskDetailVO.setTaskDetail(taskDetail); return R.ok(taskDetailVO); }else{ TInspector byId = inspectorService.getById(inspectorDetail.getInspectorId()); 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()); if (inspectorDetail.getUnqualified() != null) { TDictData byId3 = dictDataService.getById(inspectorDetail.getUnqualified()); if (byId3 != null) { inspectorDetail.setUnqualifiedName(byId3.getDataContent()); } } inspectorDetail.setFinishTime(inspectorDetail.getCreateTime()); SysUser sysUser = sysUserService.selectUserById(Long.valueOf(inspectorDetail.getAuditPerson())); if (sysUser != null) { inspectorDetail.setAuditPersonName(sysUser.getUserName()); } TTaskDetail tTaskDetail = new TTaskDetail(); BeanUtils.copyProperties(inspectorDetail, tTaskDetail); taskDetailVO.setTaskDetail(tTaskDetail); return R.ok(taskDetailVO); } } @ApiOperation(value = "申诉记录分页列表") @@ -527,7 +581,12 @@ List<TaskListAllVO> res = appealService.listAllTask(appealListDTO); return R.ok(res); } @ApiOperation(value = "点位列表") @PostMapping(value = "/locationList") public R<List<TaskListAllVO>> locationList(@RequestBody AppealListDTO appealListDTO) { List<TaskListAllVO> locations = appealService.locationList(appealListDTO); return R.ok(locations); } @ApiOperation(value = "不合格原因列表") @PostMapping(value = "/unqualifiedList") public R<List<TDictData>> unqualifiedList() { @@ -537,32 +596,14 @@ ); return R.ok(list); } @ApiOperation(value = "点位列表") @PostMapping(value = "/locationList") public R<List<TLocation>> locationList() { List<TLocation> locations = locationService.list(); return R.ok(locations); } @ApiOperation(value = "上传督察任务") @PostMapping(value = "/addInspector") public R<Boolean> addInspector(@RequestBody InspectorAddDTO dto) throws Exception { TTask task = taskCleanerService.getById(dto.getTaskId()); TLocation location = locationService.getById(task.getLocationId()); SysUser sysUser = sysUserService.selectUserById(Long.valueOf(task.getPatrolInspector())); dto.setCommitPerson(tokenService.getLoginUserApplet().getUserId() + ""); if (dto.getClearStatus() == 1) { dto.setStatus(4); } else { dto.setStatus(1); } inspectorService.save(dto); return R.ok(); // TLocation location = locationService.getById(dto.getLocationId()); // SysUser sysUser = sysUserService.selectUserById(Long.valueOf(location.getLocationLeader())); // TTask task = taskCleanerService.getById(dto.getTaskId()); // TLocation location = locationService.getById(task.getLocationId()); // SysUser sysUser = sysUserService.selectUserById(Long.valueOf(task.getPatrolInspector())); // dto.setCommitPerson(tokenService.getLoginUserApplet().getUserId() + ""); // // if (dto.getClearStatus() == 1) { @@ -573,6 +614,32 @@ // } // inspectorService.save(dto); // return R.ok(); TLocation location = locationService.getById(dto.getLocationId()); SysUser sysUser = sysUserService.selectUserById(Long.valueOf(location.getLocationLeader())); dto.setCommitPerson(tokenService.getLoginUserApplet().getUserId() + ""); if (dto.getClearStatus() == 1) { dto.setStatus(4); } else { dto.setStatus(2); } String nameAndCode = CodeGenerateUtils.generateVolumeSn(); dto.setTaskCode(nameAndCode); dto.setTaskName(nameAndCode); inspectorService.save(dto); TInspectorDetail tInspectorDetail = new TInspectorDetail(); tInspectorDetail.setInspectorId(dto.getId()); tInspectorDetail.setClearStatus(dto.getClearStatus()); tInspectorDetail.setUnqualified(dto.getUnqualified()); tInspectorDetail.setRemark(dto.getRemark()); tInspectorDetail.setPicture(dto.getPicture()); tInspectorDetail.setAudioUrl(dto.getAudioUrl()); tInspectorDetail.setHandleType(1); inspectorDetailService.save(tInspectorDetail); return R.ok(); } @ApiOperation(value = "上传意见反馈") @@ -748,6 +815,11 @@ leaveDTO.setCode(format + RandomUtil.randomNumbers(6)); leaveDTO.setTemplateId(user.getTemplateId()); leaveDTO.setLeavePerson(userId + ""); LocalDateTime endTime1 = leaveDTO.getEndTime(); endTime1.withHour(23); endTime1.withMinute(59); endTime1.withSecond(59); leaveDTO.setEndTime(endTime1); leaveService.save(leaveDTO); TNoticeSet noticeSet = noticeSetService.lambdaQuery().eq(TNoticeSet::getType, 2).last("limit 1") .one(); ruoyi-applet/src/main/resources/application.yml
@@ -1,4 +1,4 @@ # 项目相关配置 spring: profiles: active: prod active: test ruoyi-system/src/main/java/com/ruoyi/system/applet/dto/AppealInspectorDTO.java
New file @@ -0,0 +1,11 @@ package com.ruoyi.system.applet.dto; import com.ruoyi.system.model.TAppeal; import io.swagger.annotations.ApiModel; import lombok.Data; @Data @ApiModel(value = "督察任务申诉DTO") public class AppealInspectorDTO extends TAppeal { } ruoyi-system/src/main/java/com/ruoyi/system/applet/vo/InspectorUserListVO.java
New file @@ -0,0 +1,30 @@ package com.ruoyi.system.applet.vo; import com.ruoyi.system.model.TInspector; 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 InspectorUserListVO extends TInspector { @ApiModelProperty(value = "点位名称") private String locationName; @ApiModelProperty(value = "点位地址开始") private String locationAddress; @ApiModelProperty(value = "点位地址结束") private String locationAddressEnd; @ApiModelProperty(value = "点位类型名称") private String locationTypeName; @ApiModelProperty(value = "点位类型图标") private String locationTypeIcon; @ApiModelProperty(value = "清洁情况 1合格2不合格") private Integer clearStatus; @ApiModelProperty(value = "距离 单位km") private BigDecimal distance; } ruoyi-system/src/main/java/com/ruoyi/system/applet/vo/TaskPendingVO.java
@@ -27,5 +27,7 @@ private String remark; @ApiModelProperty(value = "距离 单位km") private BigDecimal distance; @ApiModelProperty(value = "是否为督察任务 0否1是,如果是督察任务 详情接口需要调用督察任务详情接口,上传任务需要调用督察任务上传接口,申诉需要调用督察任务申诉") private Integer isInspector; } ruoyi-system/src/main/java/com/ruoyi/system/dto/InspectorDetailDto.java
New file @@ -0,0 +1,19 @@ package com.ruoyi.system.dto; import com.ruoyi.system.model.TInspector; import com.ruoyi.system.model.TTaskDetail; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "上传督察任务DTO") public class InspectorDetailDto extends TInspector { @ApiModelProperty(value = "经度") private String lon; @ApiModelProperty(value = "纬度") private String lat; } ruoyi-system/src/main/java/com/ruoyi/system/dto/TInspectorAuditDTO.java
@@ -1,6 +1,7 @@ package com.ruoyi.system.dto; import com.ruoyi.system.model.TInspector; import com.ruoyi.system.model.TInspectorDetail; import com.ruoyi.system.model.TTaskDetail; import io.swagger.annotations.ApiModel; import lombok.Data; ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TCleanerImportExcel.java
New file @@ -0,0 +1,24 @@ package com.ruoyi.system.importExcel; import cn.afterturn.easypoi.excel.annotation.Excel; import io.swagger.annotations.ApiModel; import lombok.Data; import java.io.Serializable; @Data @ApiModel(value = "保洁员导入excel") public class TCleanerImportExcel implements Serializable { @Excel(name = "部门级编号",width = 20) private String deptCode; @Excel(name = "项目级编号",width = 20) private String projectCode; @Excel(name = "片区级编号",width = 20) private String cleanerCode; @Excel(name = "保洁员姓名",width = 20) private String cleanerName; @Excel(name = "所属片区名称",width = 20) private String projectName; } ruoyi-system/src/main/java/com/ruoyi/system/importExcel/TSysUserImportExcel.java
New file @@ -0,0 +1,31 @@ package com.ruoyi.system.importExcel; import cn.afterturn.easypoi.excel.annotation.Excel; import io.swagger.annotations.ApiModel; import lombok.Data; import java.io.Serializable; @Data @ApiModel(value = "员工导入excel") public class TSysUserImportExcel implements Serializable { @Excel(name = "编号",width = 20) private String code; @Excel(name = "员工名称",width = 20) private String nickName; @Excel(name = "联系电话",width = 20) private String phonenumber; @Excel(name = "邮箱",width = 20) private String email; @Excel(name = "所属部门(输入1为项目部 输入2为公司/部门))",width = 20) private Integer deptType; @Excel(name = "部门名称",width = 20) private String deptName; @Excel(name = "模板名称",width = 20) private String templateName; @Excel(name = "角色名称",width = 20) private String roleName; @Excel(name = "登陆账号",width = 20) private String userName; } ruoyi-system/src/main/java/com/ruoyi/system/mapper/TAppealMapper.java
@@ -28,4 +28,7 @@ List<TaskListAllVO> listAllTask(@Param("query")AppealListDTO query, @Param("pageInfo")PageInfo<AppealListVO> pageInfo); List<TaskListAllVO> locationList(@Param("query")AppealListDTO query, @Param("pageInfo")PageInfo<AppealListVO> pageInfo); List<TaskListAllVO> listAllInspector(@Param("query")AppealListDTO query, @Param("pageInfo")PageInfo<AppealListVO> pageInfo); } ruoyi-system/src/main/java/com/ruoyi/system/mapper/TInspectorDetailMapper.java
New file @@ -0,0 +1,17 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.system.model.TInspectorDetail; import com.ruoyi.system.model.TTaskDetail; /** * <p> * 任务操作记录 Mapper 接口 * </p> * * @author xiaochen * @since 2025-05-28 */ public interface TInspectorDetailMapper extends BaseMapper<TInspectorDetail> { } ruoyi-system/src/main/java/com/ruoyi/system/mapper/TInspectorMapper.java
@@ -2,8 +2,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.applet.dto.AppealListDTO; import com.ruoyi.system.applet.vo.TaskListAllVO; import com.ruoyi.system.model.TInspector; import com.ruoyi.system.query.InsepectorListQuery; import com.ruoyi.system.vo.system.AppealListVO; import com.ruoyi.system.vo.system.InspectorListVO; import com.ruoyi.system.vo.system.TaskListVO; import org.apache.ibatis.annotations.Param; @@ -22,4 +25,6 @@ List<InspectorListVO> pageList(@Param("query")InsepectorListQuery query, @Param("pageInfo")PageInfo<InspectorListVO> pageInfo); List<InspectorListVO> pageListExport(@Param("query")InsepectorListQuery query, @Param("pageInfo")PageInfo<InspectorListVO> pageInfo); List<TaskListAllVO> listAllInspector(@Param("query") AppealListDTO query, @Param("pageInfo")PageInfo<AppealListVO> pageInfo); } ruoyi-system/src/main/java/com/ruoyi/system/mapper/TTaskMapper.java
@@ -4,7 +4,9 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.applet.dto.IndexDTO; import com.ruoyi.system.applet.query.TaskUserListQuery; import com.ruoyi.system.applet.vo.InspectorUserListVO; import com.ruoyi.system.applet.vo.TaskUserListVO; import com.ruoyi.system.model.TInspector; import com.ruoyi.system.model.TTask; import com.ruoyi.system.query.LocationListTaskQuery; import com.ruoyi.system.query.PointDetailQuery; @@ -48,4 +50,8 @@ List<TTask> indexTask(@Param("query") IndexDTO dto); List<TTask> getTaskByIds(@Param("ids") List<String> collect1,@Param("lon")String lon,@Param("lat")String lat); List<InspectorUserListVO> pageListUserInspector(@Param("query")TaskUserListQuery query); List<TInspector> indexInspector(@Param("query")IndexDTO dto); } ruoyi-system/src/main/java/com/ruoyi/system/model/TAppeal.java
@@ -33,6 +33,9 @@ @ApiModelProperty(value = "任务id") @TableField("task_id") private String taskId; @ApiModelProperty(value = "督察任务id") @TableField("inspector_id") private String inspectorId; @ApiModelProperty(value = "申诉人id") @TableField("appeal_person") @@ -41,6 +44,9 @@ @ApiModelProperty(value = "状态 1待审核2通过3驳回4已取消") @TableField("status") private Integer status; @ApiModelProperty(value = "驳回次数") @TableField("fail_count") private Integer failCount; @ApiModelProperty(value = "申诉内容") @TableField("appeal_content") ruoyi-system/src/main/java/com/ruoyi/system/model/TInspector.java
@@ -11,6 +11,7 @@ import lombok.EqualsAndHashCode; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; /** @@ -31,10 +32,12 @@ @TableId(value = "id", type = IdType.ASSIGN_ID) private String id; @ApiModelProperty(value = "任务id") @TableField("task_id") private String taskId; @ApiModelProperty(value = "督察任务名称") @TableField("task_name") private String taskName; @ApiModelProperty(value = "督察任务编号") @TableField("task_code") private String taskCode; @ApiModelProperty(value = "点位id") @TableField("location_id") private String locationId; @@ -77,6 +80,10 @@ @ApiModelProperty(value = "审核状态1通过2驳回") @TableField("audit_status") private Integer auditStatus; @ApiModelProperty(value = "距离单位米") @TableField(exist = false) private BigDecimal distance; @ApiModelProperty(value = "审核备注") @TableField("audit_remark") ruoyi-system/src/main/java/com/ruoyi/system/model/TInspectorDetail.java
New file @@ -0,0 +1,97 @@ package com.ruoyi.system.model; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import javax.validation.constraints.NotBlank; import java.time.LocalDateTime; /** * <p> * 任务操作记录 * </p> * * @author xiaochen * @since 2025-05-28 */ @Data @EqualsAndHashCode(callSuper = false) @TableName("t_inspector_detail") @ApiModel(value="TInspectorDetail对象", description="督察任务操作记录") public class TInspectorDetail extends BaseModel { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.ASSIGN_ID) private String id; @ApiModelProperty(value = "任务id") @TableField("inspector_id") @NotBlank(message = "督察任务id不能为空") private String inspectorId; @ApiModelProperty(value = "清洁情况 1合格2不合格") @TableField("clear_status") private Integer clearStatus; @ApiModelProperty(value = "不合格原因id") @TableField("unqualified") private String unqualified; @ApiModelProperty(value = "不合格原因名称") @TableField(exist = false) private String unqualifiedName; @ApiModelProperty(value = "申诉记录id handleType=4 5 6 返回") @TableField("appeal_id") private String appealId; @ApiModelProperty(value = "备注") @TableField("remark") private String remark; @ApiModelProperty(value = "图片 多张逗号拼接") @TableField("picture") private String picture; @ApiModelProperty(value = "音频url") @TableField("audio_url") private String audioUrl; @ApiModelProperty(value = "审核人id") @TableField("audit_person") private String auditPerson; @ApiModelProperty(value = "审核人名称") @TableField(exist = false) private String auditPersonName; @ApiModelProperty(value = "审核时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @TableField("audit_time") private LocalDateTime auditTime; @ApiModelProperty(value = "完成时间") @TableField(exist = false) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime finishTime; @ApiModelProperty(value = "审核状态1通过2驳回") @TableField("audit_status") @NotBlank(message = "审核状态不能为空") private Integer auditStatus; @ApiModelProperty(value = "审核备注") @TableField("audit_remark") private String auditRemark; @ApiModelProperty(value = "操作类型1提交申请2审核通过3审核不通过4发起申诉5申诉通过6申诉驳回") @TableField("handle_type") private Integer handleType; } ruoyi-system/src/main/java/com/ruoyi/system/service/TAppealService.java
@@ -6,6 +6,7 @@ import com.ruoyi.system.applet.query.AppealListQuery; import com.ruoyi.system.applet.vo.TaskListAllVO; import com.ruoyi.system.model.TAppeal; import com.ruoyi.system.model.TLocation; import com.ruoyi.system.query.InsepectorListQuery; import com.ruoyi.system.vo.system.AppealListVO; @@ -28,4 +29,6 @@ List<TaskListAllVO> listAllTask(AppealListDTO appealListDTO); List<TaskListAllVO> locationList(AppealListDTO appealListDTO); } ruoyi-system/src/main/java/com/ruoyi/system/service/TInspectorDetailService.java
New file @@ -0,0 +1,17 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.system.model.TInspectorDetail; import com.ruoyi.system.model.TTaskDetail; /** * <p> * 任务操作记录 服务类 * </p> * * @author xiaochen * @since 2025-05-28 */ public interface TInspectorDetailService extends IService<TInspectorDetail> { } ruoyi-system/src/main/java/com/ruoyi/system/service/TLocationService.java
@@ -6,6 +6,8 @@ import com.ruoyi.system.query.LocationListQuery; import com.ruoyi.system.vo.system.LocationListVO; import java.util.List; /** * <p> * 点位管理 服务类 @@ -18,4 +20,7 @@ PageInfo<LocationListVO> pageList(LocationListQuery query); List<TLocation> locationList(); } ruoyi-system/src/main/java/com/ruoyi/system/service/TTaskCleanService.java
@@ -5,6 +5,7 @@ import com.ruoyi.system.applet.dto.IndexDTO; import com.ruoyi.system.applet.query.TaskUserListQuery; import com.ruoyi.system.applet.vo.TaskUserListVO; import com.ruoyi.system.model.TInspector; import com.ruoyi.system.model.TTask; import com.ruoyi.system.query.PointDetailQuery; import com.ruoyi.system.query.TaskListQuery; @@ -53,4 +54,5 @@ List<TTask> getTaskByIds(List<String> collect1,String lon,String lat); List<TInspector> indexInspector(IndexDTO dto); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -702,7 +702,7 @@ Integer deptType = sysUserVO.getDeptType(); if (1==deptType){ TProjectDept tProjectDept = projectDeptMapper.selectById(sysUserVO.getDeptId()); if (!tProjectDept.getParentId().equals("0")){ if (tProjectDept!=null&&!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); if (tProjectDept1!=null){ sysUserVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); @@ -710,14 +710,19 @@ sysUserVO.setDeptName(tProjectDept.getProjectName()); } }else{ if (tProjectDept!=null){ sysUserVO.setDeptName(tProjectDept.getProjectName()); } } }else{ if (sysUserVO.getUserId()==1){ sysUserVO.setDeptName("公司"); }else{ TDept tDept = deptMapper.selectById(sysUserVO.getDeptId()); if (tDept!=null){ sysUserVO.setDeptName(tDept.getDeptName()); } } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TAppealServiceImpl.java
@@ -20,7 +20,9 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; /** @@ -43,6 +45,10 @@ private TTaskMapper taskMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private TInspectorDetailMapper inspectorDetailMapper; @Autowired private TInspectorMapper inspectorMapper; @Override public PageInfo<AppealListVO> pageList(InsepectorListQuery query) { if (StringUtils.hasLength(query.getEndTime())){ @@ -100,8 +106,24 @@ public List<TaskListAllVO> listAllTask(AppealListDTO query) { List<TTaskDetail> tTaskDetails = taskDetailMapper.selectList(new LambdaQueryWrapper<TTaskDetail>() .eq(TTaskDetail::getHandleType,3).groupBy(TTaskDetail::getTaskId).orderByDesc(TTaskDetail::getCreateTime)); List<TInspectorDetail> inspectorDetails = inspectorDetailMapper.selectList(new LambdaQueryWrapper<TInspectorDetail>() .eq(TInspectorDetail::getHandleType,3).groupBy(TInspectorDetail::getInspectorId).orderByDesc(TInspectorDetail::getCreateTime)); PageInfo<AppealListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TaskListAllVO> list = this.baseMapper.listAllTask(query,pageInfo); List<TaskListAllVO> list1 = inspectorMapper.listAllInspector(query,pageInfo); for (TaskListAllVO taskListAllVO : list1) { taskListAllVO.setDistance(taskListAllVO.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)); if (taskListAllVO.getStatus()==1 || taskListAllVO.getStatus()==2 ){ taskListAllVO.setStatus(1); }else{ // 查询任务的驳回原因 taskListAllVO.setStatus(2); TInspectorDetail tTaskDetail = inspectorDetails.stream().filter(e -> e.getInspectorId().equals(taskListAllVO.getId())).findFirst().orElse(null); if (tTaskDetail!=null){ taskListAllVO.setRejectRemark(tTaskDetail.getAuditRemark()); } } } for (TaskListAllVO taskListAllVO : list) { taskListAllVO.setDistance(taskListAllVO.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)); if (taskListAllVO.getStatus()==1 || taskListAllVO.getStatus()==2 ){ @@ -115,6 +137,29 @@ } } } if (list1.isEmpty()){ list1=list; } else{ list1.addAll(list); } // 根据distance进行排序从小到大 list1.sort(Comparator.comparing(TaskListAllVO::getDistance)); return list1; } public static void main(String[] args) { List<Object> objects = new ArrayList<>(); List<Integer> anotherList = Arrays.asList(1,2); } @Override public List<TaskListAllVO> locationList(AppealListDTO appealListDTO) { PageInfo<AppealListVO> pageInfo = new PageInfo<>(appealListDTO.getPageNum(), appealListDTO.getPageSize()); List<TaskListAllVO> list = this.baseMapper.locationList(appealListDTO,pageInfo); for (TaskListAllVO taskListAllVO : list) { taskListAllVO.setDistance(taskListAllVO.getDistance().divide(new BigDecimal(1000),2, RoundingMode.HALF_DOWN)); } return list; } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TCleanerServiceImpl.java
@@ -36,9 +36,11 @@ TProjectDept tProjectDept = projectDeptMapper.selectById(cleanerListVO.getProjectId()); if (tProjectDept!=null&&!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); if (tProjectDept1!=null){ cleanerListVO.setProjectName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); } } } pageInfo.setRecords(list); return pageInfo; } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TEarlyWarningServiceImpl.java
@@ -146,17 +146,23 @@ taskWarningVO.setPatrolInspectorName(sysUser.getNickName()); if (sysUser.getDeptType() == 1){ TProjectDept tProjectDept = projectDeptMapper.selectById(sysUser.getDeptId()); if (!tProjectDept.getParentId().equals("0")){ if (tProjectDept!=null&&!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); if (tProjectDept1!=null){ taskWarningVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); } }else{ if (tProjectDept!=null){ taskWarningVO.setDeptName(tProjectDept.getProjectName()); } } }else{ TDept tDept = deptMapper.selectById(sysUser.getDeptId()); if (tDept!=null){ taskWarningVO.setDeptName(tDept.getDeptName()); } } } res.add(taskWarningVO); } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TInspectorDetailServiceImpl.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.mapper.TInspectorDetailMapper; import com.ruoyi.system.mapper.TTaskDetailMapper; import com.ruoyi.system.model.TInspectorDetail; import com.ruoyi.system.model.TTaskDetail; import com.ruoyi.system.service.TInspectorDetailService; import com.ruoyi.system.service.TTaskDetailService; import org.springframework.stereotype.Service; /** * <p> * 任务操作记录 服务实现类 * </p> * * @author xiaochen * @since 2025-05-28 */ @Service public class TInspectorDetailServiceImpl extends ServiceImpl<TInspectorDetailMapper, TInspectorDetail> implements TInspectorDetailService { } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TInspectorServiceImpl.java
@@ -38,6 +38,8 @@ private TTaskMapper taskMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private TLocationMapper locationMapper; @Override public PageInfo<InspectorListVO> pageList(InsepectorListQuery query) { List<SysUser> sysUsers = sysUserMapper.selectAllList(); @@ -46,18 +48,25 @@ List<TTask> tTasks = taskMapper.selectList(null); List<TLocation> locations = locationMapper.selectList(null); for (InspectorListVO taskListVO : list) { TTask tTask = tTasks.stream().filter(e -> e.getId().equals(taskListVO.getTaskId())).findFirst().orElse(null); if (tTask!=null){ taskListVO.setTaskType(tTask.getTaskType()); SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(tTask.getPatrolInspector()))).findFirst().orElse(null); // TTask tTask = tTasks.stream().filter(e -> e.getId().equals(taskListVO.getTaskId())).findFirst().orElse(null); // if (tTask!=null){ // taskListVO.setTaskType(tTask.getTaskType()); // // } TLocation tLocation = locations.stream().filter(e -> e.getId().equals(taskListVO.getLocationId())).findFirst() .orElse(null); if (tLocation == null){ continue; } SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(tLocation.getLocationLeader()))).findFirst().orElse(null); if (sysUser!=null){ if (sysUser.getDeptType()==2){ TDept tDept = deptMapper.selectById(tTask.getPatrolInspectorDept()); TDept tDept = deptMapper.selectById(sysUser.getDeptId()); if (tDept!=null){ taskListVO.setDeptName(tDept.getDeptName()); } }else{ TProjectDept tProjectDept = projectDeptMapper.selectById(sysUser.getDeptId()); if (tProjectDept != null) { @@ -73,7 +82,6 @@ } } } } pageInfo.setRecords(list); return pageInfo; } @@ -81,36 +89,33 @@ List<SysUser> sysUsers = sysUserMapper.selectAllList(); PageInfo<InspectorListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<InspectorListVO> list = this.baseMapper.pageListExport(query,pageInfo); List<TTaskDetail> tTaskDetails = taskDetailMapper.selectList(new LambdaQueryWrapper<TTaskDetail>() .orderByDesc(BaseModel::getCreateTime) .in(TTaskDetail::getHandleType, Arrays.asList(1,4))); List<TTask> tTasks = taskMapper.selectList(null); List<TLocation> locations = locationMapper.selectList(null); for (InspectorListVO taskListVO : list) { TTask tTask = tTasks.stream().filter(e -> e.getId().equals(taskListVO.getTaskId())).findFirst().orElse(null); if (tTask!=null){ SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(tTask.getPatrolInspector()))).findFirst().orElse(null); TLocation tLocation = locations.stream().filter(e -> e.getId().equals(taskListVO.getLocationId())).findFirst() .orElse(null); if (tLocation == null){ continue; } SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(tLocation.getLocationLeader()))).findFirst().orElse(null); if (sysUser!=null){ if (sysUser.getDeptType()==2){ TDept tDept = deptMapper.selectById(tTask.getPatrolInspectorDept()); TDept tDept = deptMapper.selectById(sysUser.getDeptId()); if (tDept!=null){ taskListVO.setDeptName(tDept.getDeptName()); } }else{ TProjectDept tProjectDept = projectDeptMapper.selectById(tTask.getPatrolInspectorDept()); TProjectDept tProjectDept = projectDeptMapper.selectById(sysUser.getDeptId()); if (tProjectDept!=null){ if (!tProjectDept.getParentId().equals("0")) { TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); if (tProjectDept1 != null) { taskListVO.setDeptName(tProjectDept1.getProjectName() + ">" + tProjectDept.getProjectName()); } } else { taskListVO.setDeptName(tProjectDept.getProjectName()); } } } TTaskDetail tTaskDetail = tTaskDetails.stream().filter(e -> e.getTaskId().equals(taskListVO.getId())).findFirst().orElse(null); if (tTaskDetail!=null){ taskListVO.setPicture(tTaskDetail.getPicture()); taskListVO.setClearStatus(tTaskDetail.getClearStatus()); } } } pageInfo.setRecords(list); ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TLeaveServiceImpl.java
@@ -45,6 +45,7 @@ private SysUserMapper sysUserMapper; @Override public PageInfo<LeaveListVO> pageList(LeaveListQuery query) { List<SysUser> sysUsers = sysUserMapper.selectAllList(); if (StringUtils.hasLength(query.getDeptName())){ List<String> collect = projectDeptMapper.selectList(new LambdaQueryWrapper<TProjectDept>().like(TProjectDept::getProjectName, query.getDeptName())) .stream().map(TProjectDept::getId).collect(Collectors.toList()); @@ -60,20 +61,31 @@ PageInfo<LeaveListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<LeaveListVO> list = this.baseMapper.pageList(query,pageInfo); for (LeaveListVO leaveListVO : list) { SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(leaveListVO.getAuditId()))).findFirst().orElse(null); if (sysUser!=null){ leaveListVO.setAuditName(sysUser.getNickName()); } String start = leaveListVO.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String end = leaveListVO.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); leaveListVO.setLeaveTime(start+"至"+end); if (leaveListVO.getDeptType() == 1){ TProjectDept tProjectDept = projectDeptMapper.selectById(leaveListVO.getDeptId()); if (!"0".equals(tProjectDept.getParentId())){ if (tProjectDept!=null&&!"0".equals(tProjectDept.getParentId())){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); if (tProjectDept1!=null){ leaveListVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); } }else{ if (tProjectDept!=null){ leaveListVO.setDeptName(tProjectDept.getProjectName()); } } }else{ TDept tDept = deptMapper.selectById(leaveListVO.getDeptId()); if (tDept!=null){ leaveListVO.setDeptName(tDept.getDeptName()); } } } pageInfo.setRecords(list); ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TLocationServiceImpl.java
@@ -50,4 +50,9 @@ pageInfo.setRecords(list); return pageInfo; } @Override public List<TLocation> locationList() { return null; } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTaskCleanServiceImpl.java
@@ -9,6 +9,7 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.system.applet.dto.IndexDTO; import com.ruoyi.system.applet.query.TaskUserListQuery; import com.ruoyi.system.applet.vo.InspectorUserListVO; import com.ruoyi.system.applet.vo.TaskUserListVO; import com.ruoyi.system.mapper.*; import com.ruoyi.system.model.*; @@ -19,6 +20,7 @@ import com.ruoyi.system.vo.system.ProgressListVO; import com.ruoyi.system.vo.system.TLocationTaskListVO; import com.ruoyi.system.vo.system.TaskListVO; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -51,6 +53,11 @@ private SysUserMapper sysUserMapper; @Autowired private TProjectDeptMapper projectDeptMapper; @Autowired private TInspectorMapper inspectorMapper; @Autowired private TInspectorDetailMapper inspectorDetailMapper; @Override public PageInfo<TaskListVO> pageList(TaskListQuery query) { @@ -73,17 +80,20 @@ ) )) .values()); 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")){ if (tProjectDept!=null&&!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); if (tProjectDept1!=null){ temp.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); } }else{ if (tProjectDept!=null){ temp.setDeptName(tProjectDept.getProjectName()); } } }else{ TDept tDept = deptMapper.selectById(sysUser.getDeptId()); @@ -105,8 +115,17 @@ @Override public PageInfo<TaskUserListVO> pageListUser(TaskUserListQuery query) { List<TTask> taskList = this.baseMapper.selectList(null); List<TInspector> inspectors = inspectorMapper.selectList(null); PageInfo<TaskUserListVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TaskUserListVO> list = this.baseMapper.pageListUser(query); // 督察任务 List<InspectorUserListVO> list1 = this.baseMapper.pageListUserInspector(query); for (InspectorUserListVO inspectorUserListVO : list1) { TaskUserListVO taskUserListVO = new TaskUserListVO(); BeanUtils.copyProperties(inspectorUserListVO,taskUserListVO); list.add(taskUserListVO); } List<TTaskDetail> taskDetails = taskDetailMapper.selectList(Wrappers.lambdaQuery(TTaskDetail.class) .eq(TTaskDetail::getHandleType,1) .orderByDesc(TTaskDetail::getCreateTime)); @@ -119,7 +138,21 @@ ) )) .values()); List<TInspectorDetail> inspectorDetails = inspectorDetailMapper.selectList(Wrappers.lambdaQuery(TInspectorDetail.class) .eq(TInspectorDetail::getHandleType,1) .orderByDesc(TInspectorDetail::getCreateTime)); inspectorDetails = new ArrayList<>(inspectorDetails.stream() .collect(Collectors.groupingBy( TInspectorDetail::getInspectorId, Collectors.collectingAndThen( Collectors.toList(), listAll -> listAll.get(0) ) )) .values()); for (TaskUserListVO taskUserListVO : list) { TTask tTask = taskList.stream().filter(e -> e.getId().equals(taskUserListVO.getId())).findFirst().orElse(null); if (tTask!=null){ TTaskDetail tTaskDetail = taskDetails.stream().filter(e -> e.getTaskId().equals(taskUserListVO.getId())) .findFirst().orElse(null); if (tTaskDetail!=null){ @@ -135,6 +168,22 @@ taskUserListVO.setDistance(taskUserListVO.getDistance().divide(new BigDecimal("1000"),2, RoundingMode.HALF_DOWN)); }else{ taskUserListVO.setDistance(new BigDecimal("0")); } }else{ TInspectorDetail tTaskDetail = inspectorDetails.stream().filter(e -> e.getInspectorId().equals(taskUserListVO.getId())) .findFirst().orElse(null); if (tTaskDetail!=null){ if (tTaskDetail.getClearStatus()==1){ taskUserListVO.setStatus(5); }else{ taskUserListVO.setStatus(4); } } if (taskUserListVO.getDistance()!=null){ taskUserListVO.setDistance(taskUserListVO.getDistance().divide(new BigDecimal("1000"),2, RoundingMode.HALF_DOWN)); }else{ taskUserListVO.setDistance(new BigDecimal("0")); } } } List<TaskUserListVO> res = new ArrayList<>(); @@ -243,5 +292,10 @@ return this.baseMapper.getTaskByIds(collect1,lon,lat); } @Override public List<TInspector> indexInspector(IndexDTO dto) { return this.baseMapper.indexInspector(dto); } } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/InspectorDetailVO.java
@@ -1,6 +1,7 @@ package com.ruoyi.system.vo.system; import com.ruoyi.system.model.TInspector; import com.ruoyi.system.model.TInspectorDetail; import com.ruoyi.system.model.TTask; import com.ruoyi.system.model.TTaskDetail; import io.swagger.annotations.ApiModel; @@ -31,5 +32,9 @@ private String locationLon; @ApiModelProperty(value = "点位纬度 起点") private String locationLat; @ApiModelProperty(value = "完成情况") private TInspectorDetail taskDetail; @ApiModelProperty("操作记录") private List<TInspectorDetail> records; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/InspectorRecordDetailVO.java
New file @@ -0,0 +1,24 @@ package com.ruoyi.system.vo.system; import com.ruoyi.system.model.TInspector; import com.ruoyi.system.model.TInspectorDetail; import com.ruoyi.system.model.TTask; import com.ruoyi.system.model.TTaskDetail; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "督察任务详情-操作记录-详情VO") public class InspectorRecordDetailVO extends TInspector { @ApiModelProperty("位置") private String locationAddress; @ApiModelProperty("点位类型图标") private String locationIcon; @ApiModelProperty("点位类型名称") private String locationName; @ApiModelProperty("完成情况/审核情况") private TInspectorDetail taskDetail; } ruoyi-system/src/main/resources/mapper/system/TAppealMapper.xml
@@ -156,5 +156,79 @@ AND DATE(t1.implement_time) = CURDATE() order by distance asc </select> <select id="locationList" resultType="com.ruoyi.system.applet.vo.TaskListAllVO"> select t1.*,t3.location_name as locationTypeName, t3.location_icon as locationTypeIcon, t4.nick_name as patrolInspectorName, t4.phonenumber as phonenumber, ROUND( 6378.138 * 2 * ASIN( SQRT( POW( SIN( ( #{query.lat} * PI() / 180 - t1.location_lat * PI() / 180 ) / 2 ), 2 ) + COS(#{query.lat} * PI() / 180) * COS(t1.location_lat * PI() / 180) * POW( SIN( ( #{query.lon} * PI() / 180 - t1.location_lon * PI() / 180 ) / 2 ), 2 ) ) ) * 1000 ) AS distance from t_location t1 left join t_location_type t3 on t1.location_type = t3.id left join sys_user t4 on t1.location_leader = t4.user_id where 1=1 and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} order by distance asc </select> <select id="listAllInspector" resultType="com.ruoyi.system.applet.vo.TaskListAllVO"> select t1.*,t2.location_name as locationName,t3.location_name as locationTypeName, t2.location_address as locationAddress, t2.location_lon as locationLon, t2.location_lat as locationLat, t3.location_icon as locationTypeIcon, t4.nick_name as patrolInspectorName, t4.phonenumber as phonenumber, ROUND( 6378.138 * 2 * ASIN( SQRT( POW( SIN( ( #{query.lat} * PI() / 180 - t2.location_lat * PI() / 180 ) / 2 ), 2 ) + COS(#{query.lat} * PI() / 180) * COS(t2.location_lat * PI() / 180) * POW( SIN( ( #{query.lon} * PI() / 180 - t2.location_lon * PI() / 180 ) / 2 ), 2 ) ) ) * 1000 ) AS distance from t_inspector 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 t2.location_leader = t4.user_id where 1=1 <if test="query.userId != null"> and t2.location_leader = #{query.userId} </if> and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} and t1.status =2 order by distance asc </select> </mapper> ruoyi-system/src/main/resources/mapper/system/TInspectorMapper.xml
@@ -33,27 +33,61 @@ t4.phonenumber as phonenumber from t_inspector t1 left join t_task t5 on t5.id = t1.task_id left join t_location t2 on t5.location_id = t2.id 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 t5.patrol_inspector = t4.user_id left join sys_user t4 on t2.location_leader = t4.user_id where 1=1 and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} <if test="query.patrolInspectorIds != null and query.patrolInspectorIds.size()>0"> AND t4.user_id IN AND t2.location_leader IN <foreach collection="query.patrolInspectorIds" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> <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} </foreach> </if> <if test="query.taskIds != null and query.taskIds.size()>0"> AND t1.task_id IN AND t1.id IN <foreach collection="query.taskIds" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> <if test="query.status != null"> and t1.status = #{query.status} </if> <if test="query.startTime != null and query.startTime != ''"> and (t1.create_time between #{query.startTime} and #{query.endTime}) </if> order by t1.create_time desc </select> <select id="pageListExport" resultType="com.ruoyi.system.vo.system.InspectorListVO"> select t1.*,t2.location_name as locationName,t3.location_name as locationTypeName, t4.nick_name as patrolInspectorName, t4.phonenumber as phonenumber from t_inspector 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 t2.location_leader = t4.user_id where 1=1 and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} <if test="query.patrolInspectorIds != null and query.patrolInspectorIds.size()>0"> AND t2.location_leader IN <foreach collection="query.patrolInspectorIds" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> <if test="query.locationIds != null and query.locationIds.size()>0"> AND t5.location_id IN AND t1.location_id IN <foreach collection="query.locationIds" separator="," item="id" open="(" close=")"> #{id} </foreach> @@ -69,49 +103,46 @@ </if> order by t1.create_time desc </select> <select id="pageListExport" resultType="com.ruoyi.system.vo.system.InspectorListVO"> <select id="listAllInspector" resultType="com.ruoyi.system.applet.vo.TaskListAllVO"> select t1.*,t2.location_name as locationName,t3.location_name as locationTypeName, t2.location_address as locationAddress, t2.location_lon as locationLon, t2.location_lat as locationLat, t3.location_icon as locationTypeIcon, t4.nick_name as patrolInspectorName, t4.phonenumber as phonenumber t4.phonenumber as phonenumber, ROUND( 6378.138 * 2 * ASIN( SQRT( POW( SIN( ( #{query.lat} * PI() / 180 - t2.location_lat * PI() / 180 ) / 2 ), 2 ) + COS(#{query.lat} * PI() / 180) * COS(t2.location_lat * PI() / 180) * POW( SIN( ( #{query.lon} * PI() / 180 - t2.location_lon * PI() / 180 ) / 2 ), 2 ) ) ) * 1000 ) AS distance from t_inspector t1 left join t_task t5 on t5.id = t1.task_id left join t_location t2 on t5.location_id = t2.id 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 t5.patrol_inspector = t4.user_id left join sys_user t4 on t2.location_leader = t4.user_id where 1=1 <if test="query.userId != null"> and t2.location_leader = #{query.userId} </if> and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} <if test="query.patrolInspectorIds != null and query.patrolInspectorIds.size()>0"> AND t4.user_id IN <foreach collection="query.patrolInspectorIds" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> <if test="query.taskIds != null and query.taskIds.size()>0"> AND t1.task_id IN <foreach collection="query.taskIds" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> <if test="query.locationIds != null and query.locationIds.size()>0"> AND t5.location_id IN <foreach collection="query.locationIds" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> <if test="query.insepectorIds != null and query.insepectorIds.size()>0"> AND t1.id IN <foreach collection="query.insepectorIds" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> <if test="query.status != null"> and t1.status = #{query.status} </if> <if test="query.startTime != null and startTime != ''"> and (t5.implement_time between #{startTime} and #{endTime}) </if> and t1.status =2 order by distance asc </select> </mapper> ruoyi-system/src/main/resources/mapper/system/TTaskMapper.xml
@@ -288,5 +288,82 @@ </foreach> </if> </select> <select id="pageListUserInspector" resultType="com.ruoyi.system.applet.vo.InspectorUserListVO"> select t1.*,t2.location_name as locationName,t3.location_name as locationTypeName, t2.location_address as locationAddress, t2.location_address_end as locationAddressEnd, t3.location_icon as locationTypeIcon, t4.nick_name as patrolInspectorName, t4.phonenumber as phonenumber, ROUND( 6378.138 * 2 * ASIN( SQRT( POW( SIN( ( #{query.lat} * PI() / 180 - t2.location_lat * PI() / 180 ) / 2 ), 2 ) + COS(#{query.lat} * PI() / 180) * COS(t2.location_lat * PI() / 180) * POW( SIN( ( #{query.lon} * PI() / 180 - t2.location_lon * PI() / 180 ) / 2 ), 2 ) ) ) * 1000 ) AS distance from t_inspector 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 t2.location_leader = t4.user_id where 1=1 and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} <if test="query.userId != null and query.userId != ''"> and t2.location_leader = #{query.userId} </if> <if test="query.startTime != null and query.startTime != ''"> and (t1.create_time between #{query.startTime} and #{query.endTime}) </if> and (t1.status = 3 or t1.status = 4) order by t1.update_time desc </select> <select id="indexInspector" resultType="com.ruoyi.system.model.TInspector"> select t1.*, ROUND( 6378.138 * 2 * ASIN( SQRT( POW( SIN( ( #{query.lat} * PI() / 180 - t2.location_lat * PI() / 180 ) / 2 ), 2 ) + COS(#{query.lat} * PI() / 180) * COS(t2.location_lat * PI() / 180) * POW( SIN( ( #{query.lon} * PI() / 180 - t2.location_lon * PI() / 180 ) / 2 ), 2 ) ) ) * 1000 ) AS distance from t_inspector t1 left join t_location t2 on t1.location_id = t2.id where 1=1 and t1.status=2 </select> </mapper>