ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TAppealController.java
@@ -15,6 +15,8 @@ import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.AppealDetailVO; import com.ruoyi.system.vo.system.AppealListVO; import com.ruoyi.web.controller.tool.EmailUtils; import com.ruoyi.web.controller.tool.MsgUtils; import com.tencentcloudapi.es.v20180416.models.TaskDetail; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -192,11 +194,20 @@ } @Resource private TNoticeService noticeService; @Resource private MsgUtils msgUtils; @Resource 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) { public R<Boolean> audit(@RequestBody @Valid TAppealAuditDTO dto) throws Exception { List<SysUser> sysUsers = sysUserService.selectAllList(); TAppeal appeal = appealService.getById(dto.getId()); SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(dto.getAppealPerson()))) .findFirst().orElse(null); dto.setStatus(dto.getStatus()); dto.setAuditPerson(tokenService.getLoginUser().getUserId()+""); dto.setAuditTime(LocalDateTime.now()); @@ -211,6 +222,12 @@ taskDetail.setTaskId(appeal.getTaskId()); Long count = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, appeal.getTaskId()) .eq(TTaskDetail::getHandleType, 1).count(); TNoticeSet noticeSet = noticeSetService.lambdaQuery().eq(TNoticeSet::getType, 2).last("limit 1") .one(); // 邮箱 TDictData email = dictDataService.lambdaQuery().eq(TDictData::getDataType,4).one(); // 授权码 TDictData code = dictDataService.lambdaQuery().eq(TDictData::getDataType,5).one(); if (dto.getStatus()==2){ taskDetail.setClearStatus(1); taskDetail.setAuditTime(LocalDateTime.now()); @@ -231,6 +248,20 @@ taskCleanService.updateById(byId); tNotice.setNoticeType(5); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务申诉通过"); if (sysUser!=null){ switch (noticeSet.getNoticeType()) { case 1: msgUtils.sendMsg3(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: break; } } }else{ taskDetail.setClearStatus(2); taskDetail.setAuditTime(LocalDateTime.now()); @@ -241,6 +272,20 @@ taskDetail.setAppealId(dto.getId()); tNotice.setNoticeType(4); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务申诉驳回"); if (sysUser!=null){ switch (noticeSet.getNoticeType()) { case 1: msgUtils.sendMsg3(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: break; } } } noticeService.save(tNotice); dto.setAuditPerson(tokenService.getLoginUser().getUserId()+""); ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TEarlyWarningController.java
@@ -68,18 +68,30 @@ List<TLocation> locationList = locationService.list(); List<TTask> taskList = taskCleanerService.list(); if (StringUtils.hasLength(query.getDeptName())){ List<String> projectIds = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).list() List<TProjectDept> list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).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()); projectIds.addAll(deptIds); if (projectIds.isEmpty()){ listIds.addAll(deptIds); if (listIds.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<>()); @@ -89,8 +101,9 @@ } if (StringUtils.hasLength(query.getPhonenumber())){ List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().equals(query.getPhonenumber()) sysUser.getPhonenumber().contains(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); query.setPatrolInspectorIds(patrolInspectorIds); if (!query.getPatrolInspectorIds().isEmpty()){ // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); @@ -118,9 +131,11 @@ query.setLocationIds(collect); return R.ok(new PageInfo<>()); }else{ collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList()); if (collect.isEmpty()){ return R.ok(new PageInfo<>()); if (query.getLocationIds()!=null && !query.getLocationIds().isEmpty()){ collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList()); if (collect.isEmpty()){ return R.ok(new PageInfo<>()); } } query.setLocationIds(collect); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TInspectorController.java
@@ -19,6 +19,8 @@ import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.InspectorListVO; import com.ruoyi.system.vo.system.TaskListVO; import com.ruoyi.web.controller.tool.EmailUtils; import com.ruoyi.web.controller.tool.MsgUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.usermodel.Workbook; @@ -135,6 +137,10 @@ } 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)); } @@ -254,10 +260,14 @@ private TNoticeService noticeService; @Resource private TNoticeSetService noticeSetService; @Resource private TDictDataService dictDataService; @Resource private MsgUtils msgUtils; @Log(title = "审核任务", businessType = BusinessType.UPDATE) @ApiOperation(value = "审核任务") @PostMapping(value = "/audit") public R<Boolean> audit(@RequestBody TInspectorAuditDTO dto) { public R<Boolean> audit(@RequestBody TInspectorAuditDTO dto) throws Exception { TTaskAuditDTO tTaskAuditDTO = new TTaskAuditDTO(); BeanUtils.copyProperties(dto, tTaskAuditDTO); TTask task = taskCleanerService.getById(dto.getTaskId()); @@ -269,14 +279,32 @@ 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 (dto.getClearStatus()==2){ if (byId.getClearStatus()==2){ tTaskAuditDTO.setHandleType(3); dto.setStatus(2); // 增加消息 tNotice.setNoticeType(1); 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: break; } }else{ if (dto.getAuditTime()!=null){ dto.setStatus(3); ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TLocationController.java
@@ -267,7 +267,15 @@ @ApiOperation(value = "根据部门/项目部id查询巡检员列表 不分页") @GetMapping(value = "/listUsers") public R<List<SysUser>> listUsers(@RequestParam String id) { List<SysUser> res = sysUserService.selectUserByDeptId(id); List<String> strings = new ArrayList<>(); strings.add(id); TProjectDept projectDept = projectDeptService.getById(id); if (projectDept.getParentId().equals("0")){ List<String> collect = projectDeptService.lambdaQuery().eq(TProjectDept::getParentId, projectDept.getId()) .list().stream().map(TProjectDept::getId).collect(Collectors.toList()); strings.addAll(collect); } List<SysUser> res = sysUserService.selectUserByDeptId(strings); return R.ok(res); } @Log(title = "新增点位", businessType = BusinessType.INSERT) ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TTaskController.java
@@ -1,4 +1,5 @@ package com.ruoyi.web.controller.api; import java.io.IOException; import java.math.BigDecimal; import java.net.URLEncoder; @@ -29,6 +30,8 @@ import com.ruoyi.system.query.TaskListQuery; import com.ruoyi.system.service.*; 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; import io.swagger.annotations.ApiOperation; import org.apache.poi.ss.usermodel.Workbook; @@ -62,8 +65,7 @@ private TTaskCleanService taskCleanerService; @Resource private TNoticeService noticeService; @Resource private TNoticeSetService noticeSetService; @Resource private TEarlyWarningService earlyWarningService; @Resource @@ -83,8 +85,7 @@ private TDeptService deptService; @Resource private ISysUserService sysUserService; @Resource private TDictDataService dictDataService; @Resource private TokenService tokenService; @Resource @@ -95,77 +96,77 @@ public R<PageInfo<TaskListVO>> pageList(@RequestBody TaskListQuery query) { List<SysUser> sysUsers = sysUserService.selectAllList(); List<TLocation> locationList = locationService.list(); if (StringUtils.hasLength(query.getDeptName())){ if (StringUtils.hasLength(query.getDeptName())) { List<TProjectDept> list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).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); 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()); listIds.addAll(deptIds); if (listIds.isEmpty()){ if (listIds.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())){ query.setPatrolInspectorIds(collect); if (StringUtils.hasLength(query.getPhonenumber())) { List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().contains(query.getPhonenumber()) && listIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ if (patrolInspectorIds.isEmpty()) { return R.ok(new PageInfo<>()); } query.setPatrolInspectorIds(patrolInspectorIds); } } if (StringUtils.hasLength(query.getPhonenumber())){ if (StringUtils.hasLength(query.getPhonenumber())) { List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().contains(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); query.setPatrolInspectorIds(patrolInspectorIds); if (!query.getPatrolInspectorIds().isEmpty()){ if (!query.getPatrolInspectorIds().isEmpty()) { // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()){ if (patrolInspectorIds.isEmpty()) { return R.ok(new PageInfo<>()); } } if (query.getClearStatus()!=null){ if (query.getClearStatus() != null) { List<String> collect = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getClearStatus, query.getClearStatus()) .list().stream().distinct().map(TTaskDetail::getTaskId).collect(Collectors.toList()); query.setTaskIds(collect); if (collect.isEmpty()){ if (collect.isEmpty()) { return R.ok(new PageInfo<>()); } } if (StringUtils.hasLength(query.getLocationType())){ 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()){ if (collect.isEmpty()) { return R.ok(new PageInfo<>()); } query.setLocationIds(collect); } if (StringUtils.hasLength(query.getLocationName())){ if (StringUtils.hasLength(query.getLocationName())) { List<String> collect = locationList.stream().filter(e -> e.getLocationName().contains(query.getLocationName())).map(TLocation::getId) .collect(Collectors.toList()); query.setLocationIds(collect); if (collect.isEmpty()){ if (collect.isEmpty()) { return R.ok(new PageInfo<>()); }else{ } else { collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList()); if (collect.isEmpty()){ if (collect.isEmpty()) { return R.ok(new PageInfo<>()); } query.setLocationIds(collect); @@ -190,29 +191,43 @@ taskCleanerService.save(dto); return R.ok(); } @Resource private MsgUtils msgUtils; @Resource private TNoticeSetService noticeSetService; @Resource private TDictDataService dictDataService; @Log(title = "审核任务", businessType = BusinessType.UPDATE) @ApiOperation(value = "审核任务") @PostMapping(value = "/audit") public R<Boolean> audit(@RequestBody TTaskAuditDTO dto) { public R<Boolean> audit(@RequestBody TTaskAuditDTO dto) throws Exception { dto.setAuditTime(LocalDateTime.now()); TTask task = taskCleanerService.getById(dto.getTaskId()); SysUser sysUser = sysUserService.selectUserById(Long.valueOf(task.getPatrolInspector())); TTaskDetail one = taskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, dto.getTaskId()) .eq(TTaskDetail::getHandleType,1) .eq(TTaskDetail::getHandleType, 1) .orderByDesc(BaseModel::getCreateTime).last("limit 1").one(); dto.setClearStatus(one.getClearStatus()); TLocation location = locationService.getById(task.getLocationId()); TNotice tNotice = new TNotice(); TNoticeSet noticeSet = noticeSetService.lambdaQuery().eq(TNoticeSet::getType, 2).last("limit 1") .one(); // 邮箱 TDictData email = dictDataService.lambdaQuery().eq(TDictData::getDataType,4).one(); // 授权码 TDictData code = dictDataService.lambdaQuery().eq(TDictData::getDataType,5).one(); tNotice.setUserId(task.getPatrolInspector()); tNotice.setStatus(1); tNotice.setDataId(task.getId()); tNotice.setNoticeSetType(noticeSet.getNoticeType()); if (dto.getAuditStatus()==2){ if (StringUtils.hasLength(location.getUnqualifiedTaskId())){ if (location.getUnqualifiedTaskId().split(",").length==2){ if (dto.getAuditStatus() == 2) { if (StringUtils.hasLength(location.getUnqualifiedTaskId())) { if (location.getUnqualifiedTaskId().split(",").length == 2) { // 已经两条不合格了 生成点位不合格预警记录 location.setUnqualifiedTaskId(location.getUnqualifiedTaskId()+","+dto.getTaskId()); location.setUnqualifiedTaskId(location.getUnqualifiedTaskId() + "," + dto.getTaskId()); TEarlyWarning tEarlyWarning = new TEarlyWarning(); tEarlyWarning.setWarningType(2); tEarlyWarning.setTaskId(location.getUnqualifiedTaskId()); @@ -220,7 +235,7 @@ location.setUnqualifiedTaskId(""); locationService.updateById(location); } }else{ } else { location.setUnqualifiedTaskId(dto.getTaskId()); locationService.updateById(location); } @@ -230,13 +245,30 @@ taskCleanerService.updateById(task); // 增加消息 tNotice.setNoticeType(1); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务不合格,请重新上传!"); }else{ if (dto.getClearStatus()==2){ if (StringUtils.hasLength(location.getUnqualifiedTaskId())){ if (location.getUnqualifiedTaskId().split(",").length==2){ tNotice.setNoticeContent("【" + location.getLocationName() + "】任务不合格,请重新上传!"); if (sysUser!=null){ switch (noticeSet.getNoticeType()) { case 1: msgUtils.sendMsg1(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: break; } } } else { if (dto.getClearStatus() == 2) { if (StringUtils.hasLength(location.getUnqualifiedTaskId())) { if (location.getUnqualifiedTaskId().split(",").length == 2) { // 已经两条不合格了 生成点位不合格预警记录 location.setUnqualifiedTaskId(location.getUnqualifiedTaskId()+","+dto.getTaskId()); location.setUnqualifiedTaskId(location.getUnqualifiedTaskId() + "," + dto.getTaskId()); TEarlyWarning tEarlyWarning = new TEarlyWarning(); tEarlyWarning.setWarningType(2); tEarlyWarning.setTaskId(location.getUnqualifiedTaskId()); @@ -244,7 +276,7 @@ location.setUnqualifiedTaskId(""); locationService.updateById(location); } }else{ } else { location.setUnqualifiedTaskId(dto.getTaskId()); locationService.updateById(location); } @@ -252,54 +284,70 @@ dto.setHandleType(2); // 如果是初次审核就通过 将状态设置为已完成 List<TTaskDetail> list = tTaskDetailService.lambdaQuery() .eq(TTaskDetail::getHandleType,1) .eq(TTaskDetail::getHandleType, 1) .eq(TTaskDetail::getTaskId, dto.getTaskId()).list(); if (list.size()<2){ task.setStatus(6); taskCleanerService.updateById(task); tNotice.setNoticeType(2); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务已通过"); }else{ task.setStatus(5); taskCleanerService.updateById(task); tNotice.setNoticeType(2); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务已通过"); if (list.size() < 2) { task.setStatus(6); taskCleanerService.updateById(task); tNotice.setNoticeType(2); tNotice.setNoticeContent("【" + location.getLocationName() + "】任务已通过"); } else { task.setStatus(5); taskCleanerService.updateById(task); tNotice.setNoticeType(2); tNotice.setNoticeContent("【" + location.getLocationName() + "】任务已通过"); } if (sysUser!=null){ switch (noticeSet.getNoticeType()) { case 1: msgUtils.sendMsg1(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: break; } } } noticeService.save(tNotice); dto.setAuditPerson(tokenService.getLoginUser().getUserId()+""); dto.setAuditPerson(tokenService.getLoginUser().getUserId() + ""); taskDetailService.save(dto); one.setAuditPerson(tokenService.getLoginUser().getUserId()+""); one.setAuditPerson(tokenService.getLoginUser().getUserId() + ""); one.setAuditTime(LocalDateTime.now()); one.setAuditRemark(dto.getAuditRemark()); one.setAuditStatus(dto.getAuditStatus()); taskDetailService.updateById(one); return R.ok(); } @Log(title = "批量审核任务", businessType = BusinessType.UPDATE) @ApiOperation(value = "批量审核任务") @PostMapping(value = "/auditBatch") public R<Boolean> auditBatch(@RequestBody TTaskAuditBatchDTO dto) { public R<Boolean> auditBatch(@RequestBody TTaskAuditBatchDTO dto) { List<TTaskDetail> tTaskDetails = new ArrayList<>(); for (String s : dto.getTaskIds().split(",")) { TTask byId = taskCleanerService.getById(s); TTaskDetail tTaskDetail = new TTaskDetail(); tTaskDetail.setTaskId(s); tTaskDetail.setAuditTime(LocalDateTime.now()); tTaskDetail.setAuditPerson(tokenService.getLoginUser().getUserId()+""); if (dto.getAuditStatus()==2){ tTaskDetail.setAuditPerson(tokenService.getLoginUser().getUserId() + ""); if (dto.getAuditStatus() == 2) { tTaskDetail.setHandleType(3); // 将任务修改为待整改 byId.setStatus(4); taskCleanerService.updateById(byId); }else{ } else { tTaskDetail.setHandleType(2); // 如果是初次审核就通过 将状态设置为已完成 List<TTaskDetail> list = taskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, s).list(); if (list.isEmpty()){ List<TTaskDetail> list = taskDetailService.lambdaQuery() .eq(TTaskDetail::getHandleType, 1).eq(TTaskDetail::getTaskId, s).list(); if (list.size() == 1) { byId.setStatus(6); taskCleanerService.updateById(byId); }else{ } else { byId.setStatus(5); taskCleanerService.updateById(byId); } @@ -309,6 +357,7 @@ taskDetailService.saveBatch(tTaskDetails); return R.ok(); } @ApiOperation(value = "详情任务") @GetMapping(value = "/detail") public R<TaskDetailVO> detail(@RequestParam String id) { @@ -324,26 +373,27 @@ taskDetailVO.setLocationName(byId1.getLocationName()); taskDetailVO.setLocationTypeName(byId2.getLocationName()); TTaskDetail tTaskDetail = list.stream().filter(e -> e.getHandleType() == 1).findFirst().orElse(null); if (tTaskDetail!=null && tTaskDetail.getUnqualified()!=null){ if (tTaskDetail != null && tTaskDetail.getUnqualified() != null) { TDictData byId3 = dictDataService.getById(tTaskDetail.getUnqualified()); if (byId3!=null){ if (byId3 != null) { tTaskDetail.setUnqualifiedName(byId3.getDataContent()); } } if (tTaskDetail!=null){ if (tTaskDetail != null) { tTaskDetail.setFinishTime(tTaskDetail.getCreateTime()); } taskDetailVO.setTaskDetail(tTaskDetail); taskDetailVO.setRecords(list); return R.ok(taskDetailVO); } @ApiOperation(value = "详情任务-根据任务编号") @GetMapping(value = "/detailByTaskCode") public R<TaskDetailVO> detailByTaskCode(@RequestParam String taskCode) { TTask task = taskCleanerService.lambdaQuery().eq(TTask::getTaskCode, taskCode) .last("limit 1").one(); TaskDetailVO taskDetailVO = new TaskDetailVO(); if (task!=null){ if (task != null) { String id = task.getId(); List<TTaskDetail> list = taskDetailService.lambdaQuery().eq(TTaskDetail::getTaskId, id) .orderByDesc(BaseModel::getCreateTime).list(); @@ -355,20 +405,21 @@ taskDetailVO.setLocationIcon(byId2.getLocationIcon()); taskDetailVO.setLocationName(byId2.getLocationName()); TTaskDetail tTaskDetail = list.stream().filter(e -> e.getHandleType() == 1).findFirst().orElse(null); if (tTaskDetail!=null && tTaskDetail.getUnqualified()!=null){ if (tTaskDetail != null && tTaskDetail.getUnqualified() != null) { TDictData byId3 = dictDataService.getById(tTaskDetail.getUnqualified()); if (byId3!=null){ if (byId3 != null) { tTaskDetail.setUnqualifiedName(byId3.getDataContent()); } } taskDetailVO.setTaskDetail(tTaskDetail); taskDetailVO.setRecords(list); }else{ } else { return R.fail("任务不存在"); } return R.ok(taskDetailVO); } @ApiOperation(value = "详情任务-操作记录-详情") @GetMapping(value = "/detailRecord") public R<TaskRecordDetailVO> detailRecord(@RequestParam String id) { @@ -382,21 +433,22 @@ taskDetailVO.setLocationAddress(byId1.getLocationAddress()); taskDetailVO.setLocationIcon(byId2.getLocationIcon()); taskDetailVO.setLocationName(byId2.getLocationName()); if ( byId4.getUnqualified()!=null){ if (byId4.getUnqualified() != null) { TDictData byId3 = dictDataService.getById(byId4.getUnqualified()); if (byId3!=null){ if (byId3 != null) { byId4.setUnqualifiedName(byId3.getDataContent()); } } if (byId4.getAuditPerson()!=null){ if (byId4.getAuditPerson() != null) { SysUser sysUser = sysUserService.selectUserById(Long.valueOf(byId4.getAuditPerson())); if (sysUser!=null){ if (sysUser != null) { byId4.setAuditPersonName(sysUser.getUserName()); } } taskDetailVO.setTaskDetail(byId4); return R.ok(taskDetailVO); } @Log(title = "批量删除任务", businessType = BusinessType.DELETE) @ApiOperation(value = "批量删除任务") @DeleteMapping(value = "/deleteByIds") @@ -412,14 +464,14 @@ public void exportExcel(@RequestBody TaskListQuery query) { List<SysUser> sysUsers = sysUserService.selectAllList(); List<TLocation> locationList = locationService.list(); if(CollectionUtils.isEmpty(query.getTaskIds())){ if (CollectionUtils.isEmpty(query.getTaskIds())) { if (StringUtils.hasLength(query.getDeptName())){ if (StringUtils.hasLength(query.getDeptName())) { List<TProjectDept> list = projectDeptService.lambdaQuery().like(TProjectDept::getProjectName, query.getDeptName()).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")){ 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); @@ -428,62 +480,62 @@ List<String> deptIds = deptService.lambdaQuery().like(TDept::getDeptName, query.getDeptName()).list() .stream().map(TDept::getId).collect(Collectors.toList()); listIds.addAll(deptIds); if (listIds.isEmpty()){ if (listIds.isEmpty()) { listIds.add("0"); } 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())){ query.setPatrolInspectorIds(collect); if (StringUtils.hasLength(query.getPhonenumber())) { List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().contains(query.getPhonenumber()) && listIds.contains(sysUser.getDeptId()) ).map(SysUser::getUserId).collect(Collectors.toList()); if (patrolInspectorIds.isEmpty()){ if (patrolInspectorIds.isEmpty()) { patrolInspectorIds.add(0L); } query.setPatrolInspectorIds(patrolInspectorIds); } } if (StringUtils.hasLength(query.getPhonenumber())){ if (StringUtils.hasLength(query.getPhonenumber())) { List<Long> patrolInspectorIds = sysUsers.stream().filter(sysUser -> sysUser.getPhonenumber().contains(query.getPhonenumber()) ).map(SysUser::getUserId).collect(Collectors.toList()); query.setPatrolInspectorIds(patrolInspectorIds); if (!query.getPatrolInspectorIds().isEmpty()){ if (!query.getPatrolInspectorIds().isEmpty()) { // 取交集 patrolInspectorIds = patrolInspectorIds.stream().filter(query.getPatrolInspectorIds()::contains).collect(Collectors.toList()); } query.setPatrolInspectorIds(patrolInspectorIds); if (patrolInspectorIds.isEmpty()){ if (patrolInspectorIds.isEmpty()) { patrolInspectorIds.add(0L); } } if (query.getClearStatus()!=null){ if (query.getClearStatus() != null) { List<String> collect = tTaskDetailService.lambdaQuery().eq(TTaskDetail::getClearStatus, query.getClearStatus()) .list().stream().distinct().map(TTaskDetail::getTaskId).collect(Collectors.toList()); query.setTaskIds(collect); if (collect.isEmpty()){ if (collect.isEmpty()) { collect.add("0"); } } if (StringUtils.hasLength(query.getLocationType())){ 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()){ if (collect.isEmpty()) { collect.add("0"); } query.setLocationIds(collect); } if (StringUtils.hasLength(query.getLocationName())){ if (StringUtils.hasLength(query.getLocationName())) { List<String> collect = locationList.stream().filter(e -> e.getLocationName().contains(query.getLocationName())).map(TLocation::getId) .collect(Collectors.toList()); query.setLocationIds(collect); if (collect.isEmpty()){ if (collect.isEmpty()) { collect.add("0"); }else{ } else { collect = collect.stream().filter(query.getLocationIds()::contains).collect(Collectors.toList()); if (collect.isEmpty()){ if (collect.isEmpty()) { collect.add("0"); } query.setLocationIds(collect); ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -147,7 +147,7 @@ String code = String.valueOf((int) (Math.random() * 1000000)); redisCache.setCacheObject(phone, code,5*60,TimeUnit.SECONDS); try { msgUtils.sendMsg(phone, code); // msgUtils.sendMsg(phone, code); } catch (Exception e) { throw new RuntimeException(e); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
@@ -144,15 +144,14 @@ roleInfoVo.setRoleType(role.getRoleType()); // 获取当前角色的菜单列表 List<SysMenu> menus = menuService.selectListByRoleId(roleId); if(menus.size()==0){ return AjaxResult.success(new ArrayList<>()); } List<Long> menusId = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); // 获取当前的权限菜单(有层级) List<SysMenu> levelMenus = roleService.getMenuLevelList(menusId); roleInfoVo.setMenus(menusId); if (!menusId.isEmpty()){ List<SysMenu> levelMenus = roleService.getMenuLevelList(menusId); roleInfoVo.setMenus(menusId); }else{ roleInfoVo.setMenus(new ArrayList<>()); } return AjaxResult.success(roleInfoVo); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
@@ -10,6 +10,8 @@ import com.ruoyi.system.mapper.TCleanerMapper; import com.ruoyi.system.model.*; import com.ruoyi.system.service.*; import com.ruoyi.web.controller.tool.EmailUtils; import com.ruoyi.web.controller.tool.MsgUtils; import javafx.concurrent.Task; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.formula.functions.T; @@ -17,7 +19,9 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDate; @@ -64,6 +68,8 @@ private TEarlyWarningService earlyWarningService; @Autowired private TLeaveService leaveService; @Resource private TNoticeService noticeService; // 每一个小时执行一次 @@ -86,7 +92,12 @@ e.printStackTrace(); } } @Resource private TNoticeSetService noticeSetService; @Resource private MsgUtils msgUtils; @Resource private TDictDataService dictDataService; @Scheduled(cron = "0 0 20 * * ?") public void dayOfEarlyWarning() { try { @@ -94,16 +105,61 @@ List<TTask> taskCleanList = taskCleanService.list(Wrappers.lambdaQuery(TTask.class) .like(TTask::getImplementTime, LocalDate.now()) .eq(TTask::getStatus, 1)); List<String> userIds = taskCleanList.stream().map(TTask::getPatrolInspector).distinct().collect(Collectors.toList()); List<SysUser> sysUsers = sysUserService.selectAllList(); TNoticeSet noticeSet = noticeSetService.lambdaQuery().eq(TNoticeSet::getType, 2).last("limit 1") .one(); // 邮箱 TDictData email = dictDataService.lambdaQuery().eq(TDictData::getDataType,4).one(); // 授权码 TDictData code = dictDataService.lambdaQuery().eq(TDictData::getDataType,5).one(); if (!CollectionUtils.isEmpty(taskCleanList)) { List<TEarlyWarning> earlyWarningList = new ArrayList<>(); List<TNotice> noticeList = new ArrayList<>(); List<TNotice> addNotice = new ArrayList<>(); taskCleanList.forEach(task -> { task.setStatus(2); TEarlyWarning earlyWarning = new TEarlyWarning(); earlyWarning.setWarningType(1); earlyWarning.setTaskId(task.getId()); earlyWarningList.add(earlyWarning); TNotice tNotice = new TNotice(); tNotice.setUserId(task.getPatrolInspector()); tNotice.setStatus(1); tNotice.setDataId(task.getId()); tNotice.setNoticeType(3); tNotice.setNoticeSetType(noticeSet.getNoticeType()); noticeList.add(tNotice); }); earlyWarningService.saveBatch(earlyWarningList); for (String userId : userIds) { SysUser sysUser = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(userId))).findFirst().orElse(null); long count = taskCleanList.stream().filter(e -> e.getPatrolInspector().equals(userId)).count(); TNotice tNotice = new TNotice(); tNotice.setUserId(userId); tNotice.setStatus(1); tNotice.setNoticeType(3); tNotice.setNoticeContent("今日剩余"+count+"个任务未完成,请尽快处理"); tNotice.setNoticeSetType(noticeSet.getNoticeType()); addNotice.add(tNotice); if (sysUser!=null){ switch (noticeSet.getNoticeType()) { case 1: msgUtils.sendMsg2(sysUser.getPhonenumber(),count+""); break; case 2: if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent())){ EmailUtils.sendEmail(sysUser.getEmail(),email.getDataContent(),code.getDataContent(),"今日剩余"+count+"个任务未完成,请尽快处理"); } break; case 3: break; } } } noticeService.saveBatch(addNotice); taskCleanService.updateBatchById(taskCleanList); } } catch (Exception e) { ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/EmailUtils.java
New file @@ -0,0 +1,99 @@ package com.ruoyi.web.controller.tool; import com.aliyun.dysmsapi20170525.models.SendSmsRequest; import com.aliyun.dysmsapi20170525.models.SendSmsResponse; import com.aliyun.tea.TeaException; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import lombok.extern.slf4j.Slf4j; import org.apache.commons.compress.utils.IOUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.*; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URL; import java.util.Date; import java.util.Properties; @Slf4j public class EmailUtils { public static void sendEmail(String userEmail, String sendEmail, String code, String content) throws Exception { // 发送邮箱 // 收件人电子邮箱,TODO 换成自己的收件箱 String to = userEmail; // 发件人电子邮箱,TODO 换成自己的发件箱 String from = sendEmail; // 指定发送邮件的主机为 String host = "smtp.163.com"; Properties properties = new Properties(); properties.put("mail.smtp.host", host); properties.put("mail.smtp.socketFactory.port", "465"); properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.port", "465"); properties.put("mail.smtp.ssl.enable", "true"); // 明确开启SSL // 获取默认session对象 Session session = Session.getDefaultInstance(properties,new Authenticator(){ @Override public javax.mail.PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名、授权码,换成自己的发件箱及授权码 return new PasswordAuthentication(from, code); } }); try{ // 创建默认的 MimeMessage 对象 MimeMessage message = new MimeMessage(session); // Set From,设置发件人 InternetAddress fromMail = new InternetAddress(from); //设置发件人名称,TODO 换成自己的发件箱 fromMail.setPersonal(MimeUtility.encodeText("沿海市政<" + from + ">")); message.setFrom(fromMail); // Set To: 设置收件人 InternetAddress toMail = new InternetAddress(to); // TODO 换成自己的收件箱 InternetAddress toMail2 = new InternetAddress(to); //发多个邮箱 Address[] allRecipients = {toMail, toMail2}; message.setRecipients(Message.RecipientType.TO, allRecipients); // Set Subject: 邮件主体 message.setSubject("沿海市政"); // 设置消息体 message.setSentDate(new Date()); javax.mail.internet.MimeMultipart msgMultipart = new MimeMultipart("mixed"); // 指定为混合关系 message.setContent(msgMultipart); // 邮件信息组装 //组装的顺序非常重要,一定要先组装文本域,再组装文件 javax.mail.internet.MimeBodyPart htmlPart = new javax.mail.internet.MimeBodyPart(); // 组装内容 htmlPart.setContent(content, "text/html;charset=UTF-8"); msgMultipart.addBodyPart(htmlPart); try { message.saveChanges(); //发送 //Transport.send(message, message.getAllRecipients()); Transport.send(message); System.out.println("发送成功"); } catch (Exception e) { e.printStackTrace(); } }catch (MessagingException | UnsupportedEncodingException mex) { mex.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/MsgUtils.java
@@ -13,18 +13,7 @@ @Slf4j public class MsgUtils { @Value("${code.config.accessKeyId}") private String accessKeyId; @Value("${code.config.accessKeySecret}") private String accessKeySecret; @Value("${code.config.signName}") private String signName; @Value("${code.config.templateCode}") private String templateCode; @Value("${code.config.signNameTest}") private String signNameTest; @Value("${code.config.templateCodeTest}") private String templateCodeTest; /** * 使用AK&SK初始化账号Client @@ -44,27 +33,147 @@ return new com.aliyun.dysmsapi20170525.Client(config); } public void sendMsg(String phone,String code) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient(accessKeyId,accessKeySecret); // 任务审核结果通知 public void sendMsg1(String phone,String point,String result) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient("LTAI5t6SvJEZ9Wv28ranrfLV","hL9wbTdM3rPOLMj0DAhCn90URVzvvw"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setSignName(signName) .setTemplateCode(templateCode) .setSignName("沿海市政") .setTemplateCode("SMS_490460059") .setPhoneNumbers(phone) .setTemplateParam("{\"code\":\""+code+"\"}"); .setTemplateParam("{\"point\":\""+point+"\",\"result\":\""+result+"\"}"); RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); log.info("任务审核结果通知短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); } catch (TeaException error) { // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("短信发送失败:{}",error.message); log.info("任务审核结果通知短信发送失败:{}",error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("短信发送失败:{}",error.message); log.info("任务审核结果通知短信发送失败:{}",error.message); } } // 今日任务未完成 public void sendMsg2(String phone,String count) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient("LTAI5t6SvJEZ9Wv28ranrfLV","hL9wbTdM3rPOLMj0DAhCn90URVzvvw"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setSignName("沿海市政") .setTemplateCode("SMS_490450039") .setPhoneNumbers(phone) .setTemplateParam("{\"count\":\""+count+"\"}"); RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("今日任务未完成短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); } catch (TeaException error) { // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("今日任务未完成短信发送失败:{}",error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("今日任务未完成短信发送失败:{}",error.message); } } // 申诉结果通知通知 public void sendMsg3(String phone,String point,String result) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient("LTAI5t6SvJEZ9Wv28ranrfLV","hL9wbTdM3rPOLMj0DAhCn90URVzvvw"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setSignName("沿海市政") .setTemplateCode("SMS_490535047") .setPhoneNumbers(phone) .setTemplateParam("{\"point\":\""+point+"\",\"result\":\""+result+"\"}"); RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("申诉结果通知短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); } catch (TeaException error) { // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("申诉结果通知短信发送失败:{}",error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("申诉结果通知短信发送失败:{}",error.message); } } // 请假待审核提醒 public void sendMsg3(String phone) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient("LTAI5t6SvJEZ9Wv28ranrfLV","hL9wbTdM3rPOLMj0DAhCn90URVzvvw"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setSignName("沿海市政") .setTemplateCode("SMS_490305062") .setPhoneNumbers(phone); RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("请假待审核提醒短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); } catch (TeaException error) { // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("请假待审核提醒短信发送失败:{}",error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("请假待审核提醒短信发送失败:{}",error.message); } } // 请假结果抄送 public void sendMsg4(String phone,String name,String date) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient("LTAI5t6SvJEZ9Wv28ranrfLV","hL9wbTdM3rPOLMj0DAhCn90URVzvvw"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setSignName("沿海市政") .setTemplateCode("SMS_490325051") .setPhoneNumbers(phone) .setTemplateParam("{\"name\":\""+name+"\",\"date\":\""+date+"\"}"); RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("请假结果抄送短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); } catch (TeaException error) { // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("请假结果抄送短信发送失败:{}",error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("请假结果抄送短信发送失败:{}",error.message); } } // 督察任务整改通知 public void sendMsg5(String phone,String point) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient("LTAI5t6SvJEZ9Wv28ranrfLV","hL9wbTdM3rPOLMj0DAhCn90URVzvvw"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setSignName("沿海市政") .setTemplateCode("SMS_490375046") .setPhoneNumbers(phone) .setTemplateParam("{\"point\":\""+point+"\"}"); RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("督察任务整改通知短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); } catch (TeaException error) { // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("督察任务整改通知短信发送失败:{}",error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("督察任务整改通知短信发送失败:{}",error.message); } } } ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TIndexController.java
@@ -41,6 +41,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -106,6 +107,7 @@ TSystemBulletin systemBulletin = systemBulletinService.lambdaQuery().eq(TSystemBulletin::getStatus, 1).last("limit 1").one(); return R.ok(systemBulletin); } @ApiOperation(value = "首页-数据概览-更多") @PostMapping(value = "/dataReport") @@ -186,8 +188,10 @@ // 获取今天凌晨00:00:00 和今天23:59:59 类型为LocalDateTime LocalDateTime startOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); LocalDateTime endOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MAX); tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, startOfToday); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, endOfToday); String startOfTodayStr = startOfToday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); String endOfTodayStr = endOfToday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); tTaskLambdaQueryWrapper.ge(TTask::getImplementTime, startOfTodayStr); tTaskLambdaQueryWrapper.le(TTask::getImplementTime, endOfTodayStr); } // tTaskLambdaQueryWrapper.ne(TTask::getStatus, 1); List<TTask> tasks = taskCleanerService.list(tTaskLambdaQueryWrapper); @@ -336,8 +340,10 @@ // 获取今天凌晨00:00:00 和今天23:59:59 类型为LocalDateTime LocalDateTime startOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); LocalDateTime endOfToday = LocalDateTime.of(LocalDate.now(), LocalTime.MAX); String startOfTodayStr = startOfToday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); String endOfTodayStr = endOfToday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); List<TTask> taskToday = taskCleanerService.lambdaQuery() .between(TTask::getImplementTime, startOfToday, endOfToday) .between(TTask::getImplementTime, startOfTodayStr, endOfTodayStr) .eq(TTask::getPatrolInspector, userId).list(); List<SysUser> sysUsers = sysUserService.selectAllList(); SysUser sysUser = sysUserService.selectUserById(userId); ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TUserController.java
@@ -26,6 +26,8 @@ import com.ruoyi.system.query.TaskListQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.*; import com.ruoyi.web.controller.tool.EmailUtils; import com.ruoyi.web.controller.tool.MsgUtils; import com.sun.jna.platform.win32.LMAccess; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -81,6 +83,8 @@ @Resource private TDictDataService dictDataService; @Resource private TNoticeSetService noticeSetService; @Resource private TLeaveService leaveService; @Resource private TLeaveAuditService leaveAuditService; @@ -96,6 +100,8 @@ private TProblemEscalationService problemEscalationService; @Resource private TNoticeService noticeService; @Resource private MsgUtils msgUtils; @ApiOperation(value = "消息通知列表") @PostMapping(value = "/noticeList") @@ -443,10 +449,10 @@ public R<List<TaskListAllVO>> listAllTask(@RequestBody AppealListDTO appealListDTO) { appealListDTO.setUserId(tokenService.getLoginUserApplet().getUserId() + ""); SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUserApplet().getUserId()); if (sysUser.getDeptType()==2){ // 公司部门查询所有任务 appealListDTO.setUserId(null); } // if (sysUser.getDeptType()==2){ // // 公司部门查询所有任务 // appealListDTO.setUserId(null); // } List<TaskListAllVO> res = appealService.listAllTask(appealListDTO); return R.ok(res); } @@ -463,22 +469,17 @@ @ApiOperation(value = "上传督察任务") @PostMapping(value = "/addInspector") public R<Boolean> addInspector(@RequestBody InspectorAddDTO dto) { 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); TNotice tNotice = new TNotice(); tNotice.setUserId(sysUser.getUserId()+""); tNotice.setNoticeContent("【"+location.getLocationName()+"】任务督察不合格,请及时整改!"); tNotice.setStatus(1); tNotice.setDataId(dto.getTaskId()); tNotice.setNoticeType(8); noticeService.save(tNotice); } inspectorService.save(dto); return R.ok(); @@ -636,7 +637,7 @@ @ApiOperation(value = "发起请假") @PostMapping(value = "/addLeave") public R addLeave(@RequestBody LeaveDTO leaveDTO) { public R addLeave(@RequestBody LeaveDTO leaveDTO) throws Exception { // String startTime1 = leaveDTO.getStartTime1(); // // 轉化爲LocalDateTime類型 // leaveDTO.setStartTime(LocalDateTime.parse(startTime1, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); @@ -658,6 +659,12 @@ leaveDTO.setTemplateId(user.getTemplateId()); leaveDTO.setLeavePerson(userId + ""); leaveService.save(leaveDTO); TNoticeSet noticeSet = noticeSetService.lambdaQuery().eq(TNoticeSet::getType, 2).last("limit 1") .one(); // 邮箱 TDictData email = dictDataService.lambdaQuery().eq(TDictData::getDataType,4).one(); // 授权码 TDictData code = dictDataService.lambdaQuery().eq(TDictData::getDataType,5).one(); //项目部负责人、部门负责人、公司成员提交由最终审批人审批; if (user.getDeptType() == 2 || sysRole.getRoleName().contains("项目部负责人") || sysRole.getRoleName().contains("部门负责人")) { TLeaveAudit tLeaveAudit1 = new TLeaveAudit(); @@ -696,6 +703,29 @@ tLeaveAudit1.setAuditId(sysUser.getUserId() + ""); tLeaveAudit1.setAuditType(1); leaveAuditService.save(tLeaveAudit1); // 新增消息 TNotice tNotice = new TNotice(); tNotice.setUserId(sysUser.getUserId()+""); tNotice.setNoticeContent(user.getNickName() + "提交了请假申请,请尽快审核"); tNotice.setStatus(1); tNotice.setDataId(leaveDTO.getId()); tNotice.setNoticeType(6); switch (noticeSet.getNoticeType()) { case 1: msgUtils.sendMsg4(sysUser.getPhonenumber()); break; case 2: if (StringUtils.hasLength(email.getDataContent()) && StringUtils.hasLength(code.getDataContent())) { EmailUtils.sendEmail(sysUser.getEmail(), email.getDataContent(), code.getDataContent(), "你有一条请假申请待处理,请登录沿海市政质管小程序处理。"); } break; case 3: break; } noticeService.save(tNotice); TLeaveAudit tLeaveAudit2 = new TLeaveAudit(); tLeaveAudit2.setLeaveId(leaveDTO.getId()); tLeaveAudit2.setAuditStatus(2); @@ -716,6 +746,26 @@ tLeaveAudit1.setAuditId(sysUser.getUserId() + ""); tLeaveAudit1.setAuditType(1); leaveAuditService.save(tLeaveAudit1); // 新增消息 TNotice tNotice = new TNotice(); tNotice.setUserId(sysUser.getUserId()+""); tNotice.setNoticeContent(user.getNickName() + "提交了请假申请,请尽快审核"); tNotice.setStatus(1); tNotice.setDataId(leaveDTO.getId()); tNotice.setNoticeType(6); noticeService.save(tNotice); switch (noticeSet.getNoticeType()) { case 1: msgUtils.sendMsg4(sysUser.getPhonenumber()); break; case 2: if (StringUtils.hasLength(email.getDataContent()) && StringUtils.hasLength(code.getDataContent())) { EmailUtils.sendEmail(sysUser.getEmail(), email.getDataContent(), code.getDataContent(), "你有一条请假申请待处理,请登录沿海市政质管小程序处理。"); } break; case 3: break; } TLeaveAudit tLeaveAudit2 = new TLeaveAudit(); tLeaveAudit2.setLeaveId(leaveDTO.getId()); tLeaveAudit2.setAuditStatus(2); @@ -743,6 +793,26 @@ tLeaveAudit1.setAuditId(sysUser.getUserId() + ""); tLeaveAudit1.setAuditType(1); leaveAuditService.save(tLeaveAudit1); // 新增消息 TNotice tNotice = new TNotice(); tNotice.setUserId(sysUser.getUserId()+""); tNotice.setNoticeContent(user.getNickName() + "提交了请假申请,请尽快审核"); tNotice.setStatus(1); tNotice.setDataId(leaveDTO.getId()); tNotice.setNoticeType(6); noticeService.save(tNotice); switch (noticeSet.getNoticeType()) { case 1: msgUtils.sendMsg4(sysUser.getPhonenumber()); break; case 2: if (StringUtils.hasLength(email.getDataContent()) && StringUtils.hasLength(code.getDataContent())) { EmailUtils.sendEmail(sysUser.getEmail(), email.getDataContent(), code.getDataContent(), "你有一条请假申请待处理,请登录沿海市政质管小程序处理。"); } break; case 3: break; } TLeaveAudit tLeaveAudit2 = new TLeaveAudit(); tLeaveAudit2.setLeaveId(leaveDTO.getId()); tLeaveAudit2.setAuditStatus(2); @@ -754,14 +824,7 @@ } } // 新增消息 TNotice tNotice = new TNotice(); tNotice.setUserId(leaveDTO.getAuditId()); tNotice.setNoticeContent(user.getNickName() + "提交了请假申请,请尽快审核"); tNotice.setStatus(1); tNotice.setDataId(leaveDTO.getId()); tNotice.setNoticeType(6); noticeService.save(tNotice); return R.ok(); } @@ -774,14 +837,21 @@ @ApiOperation(value = "我的审批-审批") @PostMapping(value = "/auditLeave") public R<Boolean> auditLeave(@RequestBody LeaveAuditDTO dto) { public R<Boolean> auditLeave(@RequestBody LeaveAuditDTO dto) throws Exception { dto.setAuditId(tokenService.getLoginUserApplet().getUserId() + ""); dto.setAuditTime(LocalDateTime.now()); leaveService.updateById(dto); List<SysUser> sysUsers = sysUserService.selectAllList(); SysUser sysUser = sysUserService.selectUserById(Long.valueOf(dto.getLeavePerson())); TLeaveAudit leaveAudit = leaveAuditService.lambdaQuery().eq(TLeaveAudit::getLeaveId, dto.getId()) .eq(TLeaveAudit::getAuditType, 2).one(); TNoticeSet noticeSet = noticeSetService.lambdaQuery().eq(TNoticeSet::getType, 2).last("limit 1") .one(); // 邮箱 TDictData email = dictDataService.lambdaQuery().eq(TDictData::getDataType,4).one(); // 授权码 TDictData code = dictDataService.lambdaQuery().eq(TDictData::getDataType,5).one(); TNotice tNotice = new TNotice(); tNotice.setUserId(leaveAudit.getAuditId().split(",")[0]); tNotice.setNoticeContent(sysUser.getNickName()+"的请假申请已审核,请查收"); @@ -789,6 +859,29 @@ tNotice.setDataId(dto.getId()); tNotice.setNoticeType(7); noticeService.save(tNotice); LocalDateTime startTime = dto.getStartTime(); LocalDateTime endTime = dto.getEndTime(); SysUser sysUser1 = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(leaveAudit.getAuditId().split(",")[0]))) .findFirst().orElse(null); SysUser sysUser2 = sysUsers.stream().filter(e -> e.getUserId().equals(Long.valueOf(leaveAudit.getAuditId().split(",")[1]))) .findFirst().orElse(null); // 转化为yyyy-MM-dd 格式字符串 String leaveTime = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))+"至"+endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); if (sysUser1!=null){ switch (noticeSet.getNoticeType()) { case 1: msgUtils.sendMsg5(sysUser1.getPhonenumber(),sysUser1.getNickName(),leaveTime); break; case 2: if (StringUtils.hasLength(email.getDataContent())&&StringUtils.hasLength(code.getDataContent())){ EmailUtils.sendEmail(sysUser1.getEmail(),email.getDataContent(),code.getDataContent(),sysUser1.getNickName()+"的请假申请已审核,请查收"); } break; case 3: break; } } TNotice tNotice1 = new TNotice(); tNotice1.setUserId(leaveAudit.getAuditId().split(",")[1]); tNotice1.setNoticeContent(sysUser.getNickName()+"的请假申请已审核,请查收"); @@ -796,6 +889,20 @@ tNotice1.setDataId(dto.getId()); tNotice1.setNoticeType(7); noticeService.save(tNotice1); if (sysUser2!=null) { switch (noticeSet.getNoticeType()) { case 1: msgUtils.sendMsg5(sysUser2.getPhonenumber(), sysUser2.getNickName(), leaveTime); break; case 2: if (StringUtils.hasLength(email.getDataContent()) && StringUtils.hasLength(code.getDataContent())) { EmailUtils.sendEmail(sysUser2.getEmail(), email.getDataContent(), code.getDataContent(), sysUser2.getNickName() + "的请假申请已审核,请查收"); } break; case 3: break; } } return R.ok(); } ruoyi-applet/src/main/java/com/ruoyi/web/controller/tool/EmailUtils.java
New file @@ -0,0 +1,85 @@ package com.ruoyi.web.controller.tool; import lombok.extern.slf4j.Slf4j; import javax.mail.*; import javax.mail.internet.*; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.Properties; @Slf4j public class EmailUtils { public static void sendEmail(String userEmail, String sendEmail, String code, String content) throws Exception { // 发送邮箱 // 收件人电子邮箱,TODO 换成自己的收件箱 String to = userEmail; // 发件人电子邮箱,TODO 换成自己的发件箱 String from = sendEmail; // 指定发送邮件的主机为 String host = "smtp.163.com"; Properties properties = new Properties(); properties.put("mail.smtp.host", host); properties.put("mail.smtp.socketFactory.port", "465"); properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.port", "465"); properties.put("mail.smtp.ssl.enable", "true"); // 明确开启SSL // 获取默认session对象 Session session = Session.getDefaultInstance(properties,new Authenticator(){ @Override public PasswordAuthentication getPasswordAuthentication() { //发件人邮件用户名、授权码,换成自己的发件箱及授权码 return new PasswordAuthentication(from, code); } }); try{ // 创建默认的 MimeMessage 对象 MimeMessage message = new MimeMessage(session); // Set From,设置发件人 InternetAddress fromMail = new InternetAddress(from); //设置发件人名称,TODO 换成自己的发件箱 fromMail.setPersonal(MimeUtility.encodeText("沿海市政<" + from + ">")); message.setFrom(fromMail); // Set To: 设置收件人 InternetAddress toMail = new InternetAddress(to); // TODO 换成自己的收件箱 InternetAddress toMail2 = new InternetAddress(to); //发多个邮箱 Address[] allRecipients = {toMail, toMail2}; message.setRecipients(Message.RecipientType.TO, allRecipients); // Set Subject: 邮件主体 message.setSubject("沿海市政"); // 设置消息体 message.setSentDate(new Date()); MimeMultipart msgMultipart = new MimeMultipart("mixed"); // 指定为混合关系 message.setContent(msgMultipart); // 邮件信息组装 //组装的顺序非常重要,一定要先组装文本域,再组装文件 MimeBodyPart htmlPart = new MimeBodyPart(); // 组装内容 htmlPart.setContent(content, "text/html;charset=UTF-8"); msgMultipart.addBodyPart(htmlPart); try { message.saveChanges(); //发送 //Transport.send(message, message.getAllRecipients()); Transport.send(message); System.out.println("发送成功"); } catch (Exception e) { e.printStackTrace(); } }catch (MessagingException | UnsupportedEncodingException mex) { mex.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } ruoyi-applet/src/main/java/com/ruoyi/web/controller/tool/MsgUtils.java
@@ -6,25 +6,13 @@ import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component @Slf4j public class MsgUtils { @Value("${code.config.accessKeyId}") private String accessKeyId; @Value("${code.config.accessKeySecret}") private String accessKeySecret; @Value("${code.config.signName}") private String signName; @Value("${code.config.templateCode}") private String templateCode; @Value("${code.config.signNameTest}") private String signNameTest; @Value("${code.config.templateCodeTest}") private String templateCodeTest; /** * 使用AK&SK初始化账号Client @@ -44,27 +32,147 @@ return new com.aliyun.dysmsapi20170525.Client(config); } public void sendMsg(String phone,String code) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient(accessKeyId,accessKeySecret); // 任务审核结果通知 public void sendMsg1(String phone,String point,String result) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient("LTAI5t6SvJEZ9Wv28ranrfLV","hL9wbTdM3rPOLMj0DAhCn90URVzvvw"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setSignName(signName) .setTemplateCode(templateCode) .setSignName("沿海市政") .setTemplateCode("SMS_490460059") .setPhoneNumbers(phone) .setTemplateParam("{\"code\":\""+code+"\"}"); .setTemplateParam("{\"point\":\""+point+"\",\"result\":\""+result+"\"}"); RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); log.info("任务审核结果通知短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); } catch (TeaException error) { // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("短信发送失败:{}",error.message); log.info("任务审核结果通知短信发送失败:{}",error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("短信发送失败:{}",error.message); log.info("任务审核结果通知短信发送失败:{}",error.message); } } // 今日任务未完成 public void sendMsg2(String phone,String count) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient("LTAI5t6SvJEZ9Wv28ranrfLV","hL9wbTdM3rPOLMj0DAhCn90URVzvvw"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setSignName("沿海市政") .setTemplateCode("SMS_490450039") .setPhoneNumbers(phone) .setTemplateParam("{\"count\":\""+count+"\"}"); RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("今日任务未完成短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); } catch (TeaException error) { // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("今日任务未完成短信发送失败:{}",error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("今日任务未完成短信发送失败:{}",error.message); } } // 申诉结果通知通知 public void sendMsg3(String phone,String point,String result) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient("LTAI5t6SvJEZ9Wv28ranrfLV","hL9wbTdM3rPOLMj0DAhCn90URVzvvw"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setSignName("沿海市政") .setTemplateCode("SMS_490535047") .setPhoneNumbers(phone) .setTemplateParam("{\"point\":\""+point+"\",\"result\":\""+result+"\"}"); RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("申诉结果通知短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); } catch (TeaException error) { // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("申诉结果通知短信发送失败:{}",error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("申诉结果通知短信发送失败:{}",error.message); } } // 请假待审核提醒 public void sendMsg4(String phone) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient("LTAI5t6SvJEZ9Wv28ranrfLV","hL9wbTdM3rPOLMj0DAhCn90URVzvvw"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setSignName("沿海市政") .setTemplateCode("SMS_490305062") .setPhoneNumbers(phone); RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("请假待审核提醒短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); } catch (TeaException error) { // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("请假待审核提醒短信发送失败:{}",error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("请假待审核提醒短信发送失败:{}",error.message); } } // 请假结果抄送 public void sendMsg5(String phone,String name,String date) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient("LTAI5t6SvJEZ9Wv28ranrfLV","hL9wbTdM3rPOLMj0DAhCn90URVzvvw"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setSignName("沿海市政") .setTemplateCode("SMS_490325051") .setPhoneNumbers(phone) .setTemplateParam("{\"name\":\""+name+"\",\"date\":\""+date+"\"}"); RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("请假结果抄送短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); } catch (TeaException error) { // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("请假结果抄送短信发送失败:{}",error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("请假结果抄送短信发送失败:{}",error.message); } } // 督察任务整改通知 public void sendMsg6(String phone,String point) throws Exception { com.aliyun.dysmsapi20170525.Client client = MsgUtils.createClient("LTAI5t6SvJEZ9Wv28ranrfLV","hL9wbTdM3rPOLMj0DAhCn90URVzvvw"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setSignName("沿海市政") .setTemplateCode("SMS_490375046") .setPhoneNumbers(phone) .setTemplateParam("{\"point\":\""+point+"\"}"); RuntimeOptions runtime = new RuntimeOptions(); try { // 复制代码运行请自行打印 API 的返回值 SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime); log.info("督察任务整改通知短信发送成功:{},{}",sendSmsResponse.getBody().getMessage(),sendSmsResponse.getStatusCode()); } catch (TeaException error) { // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("督察任务整改通知短信发送失败:{}",error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // 如有需要,请打印 error com.aliyun.teautil.Common.assertAsString(error.message); log.info("督察任务整改通知短信发送失败:{}",error.message); } } } ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -181,7 +181,7 @@ List<SysUser> selectUserByTempLateId(@Param("templateId")String templateId); List<SysUser> selectUserByDeptId(@Param("id")String id); List<SysUser> selectUserByDeptId(@Param("ids")List<String> ids); List<TaskFinishListVO> pageListReport(@Param("query")DataReportQuery query, @Param("pageInfo")PageInfo<TaskFinishListVO> pageInfo); ruoyi-system/src/main/java/com/ruoyi/system/mapper/TEarlyWarningMapper.java
@@ -19,6 +19,6 @@ */ public interface TEarlyWarningMapper extends BaseMapper<TEarlyWarning> { List<TaskWarningVO> pageList(@Param("query")TaskWarningQuery query, @Param("pageInfo")PageInfo<TaskWarningVO> pageInfo); List<TaskWarningVO> pageList(@Param("query")TaskWarningQuery query); } ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
@@ -287,7 +287,7 @@ */ List<SysUser> selectListByDeptIds(List<String> projectIds); List<SysUser> selectUserByDeptId(String id); List<SysUser> selectUserByDeptId(List<String> ids); PageInfo<TaskFinishListVO> pageListReport(DataReportQuery dataReportQuery); ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -746,8 +746,8 @@ } @Override public List<SysUser> selectUserByDeptId(String id) { return userMapper.selectUserByDeptId(id); public List<SysUser> selectUserByDeptId(List<String> ids) { return userMapper.selectUserByDeptId(ids); } @Override ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TEarlyWarningServiceImpl.java
@@ -9,10 +9,18 @@ import com.ruoyi.system.service.TEarlyWarningService; import com.ruoyi.system.vo.system.CleanerListVO; import com.ruoyi.system.vo.system.TaskWarningVO; import com.sun.org.apache.bcel.internal.generic.NEW; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * <p> @@ -38,9 +46,11 @@ @Override public PageInfo<TaskWarningVO> pageList(TaskWarningQuery query) { List<TTask> taskList = taskMapper.selectList(null); PageInfo<TaskWarningVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TaskWarningVO> list = this.baseMapper.pageList(query,pageInfo); List<TaskWarningVO> list = this.baseMapper.pageList(query); List<String> strings = new ArrayList<>(); List<String> taskIds = new ArrayList<>(); List<TaskWarningVO> res = new ArrayList<>(); for (TaskWarningVO taskWarningVO : list) { String[] split = taskWarningVO.getTaskId().split(","); TTask tTask = taskList.stream().filter(e -> e.getId().equals(split[0])).findFirst().orElse(null); @@ -52,33 +62,109 @@ } } // 去除最后一位 taskWarningVO.setTaskCode(taskWarningVO.getTaskCode().substring(0, taskWarningVO.getTaskCode().length() - 1)); if (tTask!=null){ TLocation tLocation = locationMapper.selectById(tTask.getLocationId()); if (tLocation!=null){ taskWarningVO.setLocationName(tLocation.getLocationName()); } SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(tTask.getPatrolInspector())); if (sysUser!=null){ taskWarningVO.setPhonenumber(sysUser.getPhonenumber()); taskWarningVO.setPatrolInspectorName(sysUser.getNickName()); if (sysUser.getDeptType() == 1){ TProjectDept tProjectDept = projectDeptMapper.selectById(sysUser.getDeptId()); if (!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); taskWarningVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); }else{ taskWarningVO.setDeptName(tProjectDept.getProjectName()); } }else{ TDept tDept = deptMapper.selectById(sysUser.getDeptId()); taskWarningVO.setDeptName(tDept.getDeptName()); } } if (StringUtils.hasLength(taskCode.toString())){ taskWarningVO.setTaskCode(taskCode.substring(0, taskCode.length() - 1)); strings.add(taskWarningVO.getTaskCode()); } String format = taskWarningVO.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); taskIds.add(taskWarningVO.getTaskId()+","+format); } pageInfo.setRecords(list); for (String string : taskIds) { if (string.split(",").length>2){ List<String> userIds = new ArrayList<>(); List<TaskWarningVO> temp = new ArrayList<>(); String s1 = string.split(",")[3]; // 转化为LocalDateTime LocalDateTime localDateTime = LocalDateTime.parse(s1, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 点位不合格预警 for (String s : string.split(",")) { TaskWarningVO taskWarningVO = new TaskWarningVO(); taskWarningVO.setWarningType(2); taskWarningVO.setCreateTime(localDateTime); TTask tTask = taskList.stream().filter(e -> e.getId().equals(s)).findFirst().orElse(null); // 任务所属巡检员 if (tTask!=null){ SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(tTask.getPatrolInspector())); if (!userIds.contains(tTask.getPatrolInspector())){ userIds.add(tTask.getPatrolInspector()); taskWarningVO.setTaskCode(tTask.getTaskCode()); TLocation tLocation = locationMapper.selectById(tTask.getLocationId()); if (tLocation!=null){ taskWarningVO.setLocationName(tLocation.getLocationName()); } if (sysUser!=null){ taskWarningVO.setPhonenumber(sysUser.getPhonenumber()); taskWarningVO.setPatrolInspectorName(sysUser.getNickName()); if (sysUser.getDeptType() == 1){ TProjectDept tProjectDept = projectDeptMapper.selectById(sysUser.getDeptId()); if (!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); taskWarningVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); }else{ taskWarningVO.setDeptName(tProjectDept.getProjectName()); } }else{ TDept tDept = deptMapper.selectById(sysUser.getDeptId()); taskWarningVO.setDeptName(tDept.getDeptName()); } } temp.add(taskWarningVO); res.add(taskWarningVO); }else{ for (TaskWarningVO warningVO : temp) { if (warningVO.getPhonenumber().equals(sysUser.getPhonenumber()+"")){ warningVO.setTaskCode(warningVO.getTaskCode()+","+tTask.getTaskCode()); break; } } } } } }else{ String s1 = string.split(",")[1]; // 转化为LocalDateTime LocalDateTime localDateTime = LocalDateTime.parse(s1, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 超时预警 TaskWarningVO taskWarningVO = new TaskWarningVO(); taskWarningVO.setCreateTime(localDateTime); taskWarningVO.setWarningType(1); TTask tTask = taskList.stream().filter(e -> e.getId().equals(string.split(",")[0])).findFirst().orElse(null); // 任务所属巡检员 if (tTask!=null){ SysUser sysUser = sysUserMapper.selectUserById(Long.valueOf(tTask.getPatrolInspector())); taskWarningVO.setTaskCode(tTask.getTaskCode()); TLocation tLocation = locationMapper.selectById(tTask.getLocationId()); if (tLocation!=null){ taskWarningVO.setLocationName(tLocation.getLocationName()); } if (sysUser!=null){ taskWarningVO.setPhonenumber(sysUser.getPhonenumber()); taskWarningVO.setPatrolInspectorName(sysUser.getNickName()); if (sysUser.getDeptType() == 1){ TProjectDept tProjectDept = projectDeptMapper.selectById(sysUser.getDeptId()); if (!tProjectDept.getParentId().equals("0")){ TProjectDept tProjectDept1 = projectDeptMapper.selectById(tProjectDept.getParentId()); taskWarningVO.setDeptName(tProjectDept1.getProjectName()+">"+tProjectDept.getProjectName()); }else{ taskWarningVO.setDeptName(tProjectDept.getProjectName()); } }else{ TDept tDept = deptMapper.selectById(sysUser.getDeptId()); taskWarningVO.setDeptName(tDept.getDeptName()); } } res.add(taskWarningVO); } } } pageInfo.setTotal(res.size()); // 手动对res进行分页 res = res.stream().skip((long) (query.getPageNum() - 1) * query.getPageSize()).limit(query.getPageSize()).collect(Collectors.toList()); pageInfo.setRecords(res); return pageInfo; } } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TInspectorServiceImpl.java
@@ -51,6 +51,7 @@ 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); if (sysUser!=null){ if (sysUser.getDeptType()==2){ ruoyi-system/src/main/java/com/ruoyi/system/vo/system/InspectorListVO.java
@@ -38,5 +38,9 @@ @Excel(name = "清洁情况 1合格2不合格", orderNum = "7", width = 20,replace = {"1_合格","2_不合格"}) private Integer clearStatus; @ApiModelProperty(value = "任务类型1日常任务 2自建任务") @Excel(name = "任务类型", orderNum = "8", width = 20,replace = {"1_日常任务","2_自建任务"}) private Integer taskType; } ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -26,7 +26,7 @@ <sql id="selectRoleVo"> select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, r.status, r.del_flag, r.create_time, r.remark,r.postType,r.removeDays r.status, r.del_flag, r.create_time, r.remark,r.postType,r.removeDays,r.role_type as roleType from sys_role r left join sys_user_role ur on ur.role_id = r.role_id left join sys_user u on u.user_id = ur.user_id ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -273,7 +273,13 @@ </select> <select id="selectUserByDeptId" resultType="com.ruoyi.common.core.domain.entity.SysUser"> select * from sys_user where deptId = #{id} where 1=1 <if test="ids != null and ids.size()>0"> AND deptId IN <foreach collection="ids" separator="," item="id" open="(" close=")"> #{id} </foreach> </if> and status = 0 and del_flag = 0 </select> ruoyi-system/src/main/resources/mapper/system/TEarlyWarningMapper.xml
@@ -29,7 +29,11 @@ <if test="query.startTime != null and startTime != ''"> and (t1.create_time between #{startTime} and #{endTime}) </if> <if test="query.warningType != null "> and t1.warning_type= #{query.warningType} </if> and t1.`disabled` = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} order by t1.create_time desc </select> </mapper> ruoyi-system/src/main/resources/mapper/system/TInspectorMapper.xml
@@ -61,9 +61,10 @@ <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 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, ruoyi-system/src/main/resources/mapper/system/TLeaveMapper.xml
@@ -77,6 +77,7 @@ #{id} </foreach> </if> order by t1.create_time desc </select> </mapper>