70002f51 张雷

feat(module): 新增巡检任务提醒功能

- 在 IInspectionTaskService 接口中添加 getInspectionTaskList 方法
- 在 InspectionTaskServiceImpl 中实现 getInspectionTaskList 方法,获取巡检任务列表
- 在 TaskRemindJob 中添加巡检任务提醒逻辑,定时推送巡检消息
- 更新 application-dev.yml 和 application-prod.yml,启用定时任务自动启动
1 个父辈 6b61ae59
......@@ -27,7 +27,7 @@ spring:
misfireThreshold: 60000
job-store-type: jdbc
#决定当前服务定时是否启用
auto-startup: false
auto-startup: true
#json 时间戳统一转换
jackson:
date-format: yyyy-MM-dd HH:mm:ss
......@@ -86,7 +86,7 @@ spring:
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
datasource:
master:
url: jdbc:mysql://47.104.179.187:6003/sk-zhongye?characterEncoding=UTF-8&useUnicode=true&useSSL=false
......@@ -133,7 +133,7 @@ mybatis-plus:
configuration:
call-setters-on-nulls: true
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
#log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#数矿专用配置
skua:
web-url: http://103.85.171.27:8096
......
......@@ -27,7 +27,7 @@ spring:
misfireThreshold: 60000
job-store-type: jdbc
#决定当前服务定时是否启用
auto-startup: false
auto-startup: true
#json 时间戳统一转换
jackson:
date-format: yyyy-MM-dd HH:mm:ss
......
......@@ -27,6 +27,12 @@
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency>
<groupId>org.jeecgframework.boot</groupId>
<artifactId>sk-module-inspection</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
......
package com.skua.modules.equipment.quartz;
import com.alibaba.fastjson.JSONObject;
import com.skua.core.util.ConvertUtils;
import com.skua.core.util.push.MessageEntity;
import com.skua.modules.equipment.service.IEquipmentMaintainTaskService;
import com.skua.modules.inspection.service.IInspectionTaskService;
import com.skua.modules.system.entity.SysUser;
import com.skua.modules.system.service.ISysUserService;
import com.skua.modules.system.service.WebNoticePushServiceExt;
import com.skua.modules.system.service.impl.SysUserServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
......@@ -14,6 +20,7 @@ import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -33,6 +40,11 @@ public class TaskRemindJob implements Job {
@Autowired
private WebNoticePushServiceExt webNoticePushServiceExt;
@Autowired
private IInspectionTaskService inspectionTaskService;
@Autowired
private ISysUserService sysUserService;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
log.info("人员任务提醒定时任务开始");
......@@ -46,10 +58,42 @@ public class TaskRemindJob implements Job {
List<Map<String, Object>> wbList = getWbList(startTime,endTime);
//推送维保消息
pushWbMessage(wbList);
//巡检记录
List<JSONObject> inspectionTaskList = inspectionTaskService.getInspectionTaskList();
//推送巡检消息
pushInspectionMessage(inspectionTaskList);
log.info("人员任务提醒定时任务结束");
}
private boolean pushInspectionMessage(List<JSONObject> inspectionTaskList) {
List<SysUser> userList = sysUserService.list();
Map<String,String> cidMap = new HashMap<>();
for (SysUser sysUser : userList) {
if(ConvertUtils.isNotEmpty(sysUser.getCid())){
cidMap.put(sysUser.getId(), sysUser.getCid());
}
}
for (JSONObject inspectionTask : inspectionTaskList){
//获取用户列表后做消息推送
List<String> userIds = new ArrayList<>();
userIds.add(inspectionTask.get("taskStartUser").toString());
if(cidMap.get(inspectionTask.get("taskStartUser").toString()) != null){
List<String> userCIds = new ArrayList<>();
userCIds.add(cidMap.get(inspectionTask.get("taskStartUser").toString()));
MessageEntity messageEntity = new MessageEntity();
messageEntity.setMessageTitle("任务提醒消息");
messageEntity.setMessageBody("您有一条【" + inspectionTask.get("planName") + "】巡检任务需要完成,请及时处理");
messageEntity.setReceiveUser(userIds);
messageEntity.setReceiveUserCid(userCIds);
messageEntity.setSendUser("系统");
messageEntity.setForwardTag("2");
webNoticePushServiceExt.pushMessage(messageEntity, "inspection", "M");
}
}
return true;
}
private boolean pushWbMessage(List<Map<String, Object>> wbList) {
for (Map<String, Object> wbMap : wbList) {
//获取用户列表后做消息推送
......
......@@ -41,4 +41,6 @@ public interface IInspectionTaskService extends IService<InspectionTask> {
IPage<InspectionTask> getPage(Page<InspectionTask> page, InspectionTaskVO inspectionTaskVO);
List<String> getIsExceptionInspectionTask(QueryWrapper isExceptionQueryWrapper);
List<JSONObject> getInspectionTaskList();
}
......
......@@ -935,4 +935,99 @@ public class InspectionTaskServiceImpl extends ServiceImpl<InspectionTaskMapper,
}
@Override
public List<JSONObject> getInspectionTaskList() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//根据班组ID集合,得到班组对应的所有巡检计划
QueryWrapper<InspectionPlan> inspectionPlanQueryWrapper = new QueryWrapper<>();
inspectionPlanQueryWrapper.eq("del_flag", "0");
List<InspectionPlan> inspectionPlanList = inspectionPlanService.list(inspectionPlanQueryWrapper);
List<InspectionTaskVO> inspectionTaskVOList = new ArrayList<>();
InspectionTaskVO inspectionTaskVO = null;
for (InspectionPlan inspectionPlan : inspectionPlanList) {
inspectionTaskVO = new InspectionTaskVO();
try {
// 获取当前时间并加上一小时
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
Date afterDate = calendar.getTime();
calendar.add(Calendar.HOUR_OF_DAY, 1);
Date nowDate = sdf.parse(sdf.format(new Date()));
//判断当天的开始时间
String startTime = new SimpleDateFormat("yyyy-MM-dd").format(inspectionPlan.getPlanStartDate()) + " " + inspectionPlan.getPlanTaskStartTime() + ":00";
String endTime = new SimpleDateFormat("yyyy-MM-dd").format(inspectionPlan.getPlanEndDate()) + " " + "23:59:59";
//判断当前时间是否在巡检计划的有效时间 sdf.parse(startTime) nowDate afterDate
if (isEffectiveDate(sdf.parse(startTime), nowDate, afterDate)) {
//根据持续时长、计划开始时间和计划结束时间,得到巡检时间的时间段分组
List<String[]> cycleList = new ArrayList<>();
if (StringUtils.isNotBlank(inspectionPlan.getContinueTime()) && Double.parseDouble(inspectionPlan.getContinueTime()) != 0) {
cycleList = getCycleList(Integer.parseInt(inspectionPlan.getContinueTime()), startTime, endTime);
}
//根据当前时间得到该时间所属的时间段
SimpleDateFormat taskSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
String nowTaskTime = taskSimpleDateFormat.format(new Date());
//当前时间段对应的巡检周期
String[] nowPlanTaskDateArr = null;
int inspectionCycleIndex = 0;
for (String[] cycleArr : cycleList) {
inspectionCycleIndex++;
if (isEffectiveDate(taskSimpleDateFormat.parse(nowTaskTime), taskSimpleDateFormat.parse(cycleArr[0]), taskSimpleDateFormat.parse(cycleArr[1]))) {
nowPlanTaskDateArr = cycleArr;
break;
}
}
//如果不设置时间间隔
if (nowPlanTaskDateArr == null){
nowPlanTaskDateArr = new String[2];
nowPlanTaskDateArr[0] = startTime;
nowPlanTaskDateArr[1] = endTime;
}
//通过巡检计划ID,得到该计划的上一次任务执行时间
QueryWrapper<InspectionTask> inspectionTaskQueryWrapper = new QueryWrapper<>();
inspectionTaskQueryWrapper.eq("inspection_plan_id", inspectionPlan.getId());
inspectionTaskQueryWrapper.orderByDesc("task_start_time");
inspectionTaskQueryWrapper.ne("task_state","3");
inspectionTaskQueryWrapper.last("limit 1");
InspectionTaskVO lastInspectionTaskVO = getTaskByInspectionPlanId(inspectionTaskQueryWrapper);
//判断该计划的上次任务开始周期和当前日期的是否相同
if (lastInspectionTaskVO != null &&
isEffectiveDate(taskSimpleDateFormat.parse(taskSimpleDateFormat.format(lastInspectionTaskVO.getTaskStartTime())), taskSimpleDateFormat.parse(nowPlanTaskDateArr[0]), taskSimpleDateFormat.parse(nowPlanTaskDateArr[1]))) {
inspectionTaskVOList.add(lastInspectionTaskVO);
continue;
}
if (inspectionPlan.getDelFlag() == 1) {
continue;
}
//如果计划为单次常规任务,并且上次任务状态为完成,则不在需要显示该任务
if ("2".equals(inspectionPlan.getTaskType()) && lastInspectionTaskVO != null && "2".equals(lastInspectionTaskVO.getTaskState())) {
continue;
}
inspectionTaskVO.setId("");
inspectionTaskVO.setPlanName(inspectionPlan.getPlanName());
inspectionTaskVO.setInspectionPlanId(inspectionPlan.getId());
inspectionTaskVO.setTaskState("0");
if (nowPlanTaskDateArr != null) {
inspectionTaskVO.setInspectionCycleStartDate(taskSimpleDateFormat.parse(nowPlanTaskDateArr[0]));
}
inspectionTaskVO.setTaskDuration(inspectionPlan.getTaskDuration());
inspectionTaskVO.setDepartId(inspectionPlan.getDepartId());
inspectionTaskVO.setInspectionWorkingGroupId(inspectionPlan.getInspectionWorkingGroupId());
inspectionTaskVO.setTaskType(inspectionPlan.getTaskType());
inspectionTaskVO.setInspectionCycleIndex(inspectionCycleIndex);
inspectionTaskVO.setPlanStartDate(inspectionPlan.getPlanStartDate());
inspectionTaskVO.setPlanEndDate(inspectionPlan.getPlanEndDate());
inspectionTaskVO.setPlanTaskStartTime(inspectionPlan.getPlanTaskStartTime());
inspectionTaskVO.setContinueTime(inspectionPlan.getContinueTime());
inspectionTaskVOList.add(inspectionTaskVO);
}
}catch(Exception e){
e.printStackTrace();
continue;
}
}
List<JSONObject> jsonObjectList = sysDictService.translateListDictValue(inspectionTaskVOList);
return jsonObjectList;
}
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!