Bläddra i källkod

支持再次派发

459242451@qq.com 3 år sedan
förälder
incheckning
8a1401b884

+ 67 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/NoticeInfoListiner.java

@@ -180,6 +180,73 @@ public class NoticeInfoListiner {
         });
     }
 
+    /**
+     * 指定用户发送
+     */
+    @Bean
+    public void sendNoticeSingle() {
+        RedisUtils.subscribe(Constants.NOTICE_PUSH_SINGLE, JSONObject.class, msg -> {
+            try {
+                TimeUnit.MILLISECONDS.sleep(2000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            log.info("发送指定用户订阅事件消息 => {}", msg);
+            String des = msg.getStr("des");
+            int incidentStatus = msg.getInt("incidentStatus");
+            String incidentId = msg.getStr("incidentId");
+            List<MessagePushUser> messagePushUsers = JSONUtil.toList(msg.getStr("messagePushUsers"), MessagePushUser.class);
+
+            // 查询事件信息并发送消息
+            MessagePushBo messagePushBo = new MessagePushBo();
+            String title;
+            String synopsis;
+            String text;
+
+            IncidentProcess incidentProcess = new IncidentProcess();
+            incidentProcess.setDes(des);
+            incidentProcess.setIncidentStatus(incidentStatus);
+            incidentProcess.setStatus(1);
+            incidentProcess.setIncidentId(incidentId);
+            incidentProcessService.save(incidentProcess);
+
+            IncidentVo incidentVo = incidentService.queryById(incidentId);
+            title = StrUtil.concat(true, "应急事件:", incidentVo.getName());
+            synopsis = "系统给您派发了应急事件,请查看";
+            text = StrUtil.concat(true, incidentVo.getAddr(), "发生应急事件,请关注消息,做好应急准备");
+
+            // 普通消息
+            messagePushBo.setMsTitle(title);
+            messagePushBo.setMsSynopsis(synopsis);
+            messagePushBo.setMsText(text);
+            messagePushBo.setMsNo(incidentProcess.getId());
+            messagePushBo.setMessageReadInfoList(messagePushUsers);
+            log.info("发送普通消息 => {}", messagePushBo);
+            if (!"dev".equals(env)) {
+                feignNoticeInfoService.messagePush(messagePushBo);
+            }
+
+            // 查询发送用户的手机号
+            List<String> collect = messagePushUsers.stream().map(MessagePushUser::getUserId).collect(Collectors.toList());
+            List<SysUser> list = sysUserService.list(Wrappers.<SysUser>lambdaQuery().in(SysUser::getUserId, collect));
+            // 组装短信内容
+            List<SmsOutbox> smsOutboxes = new ArrayList<>();
+            for (SysUser sysUser : list) {
+                if (StrUtil.isNotBlank(sysUser.getPhonenumber()) && Validator.isMobile(sysUser.getPhonenumber())) {
+                    SmsOutbox smsOutbox = new SmsOutbox();
+                    smsOutbox.setDestaddr(sysUser.getPhonenumber());
+                    smsOutbox.setMessagecontent("有新的应急事件或应急方案,请登录APP注意查看!");
+                    smsOutbox.setRequesttime(new Date());
+                    smsOutboxes.add(smsOutbox);
+                }
+            }
+            if (!"dev".equals(env)) {
+                smsOutboxService.saveBatch(smsOutboxes);
+                log.debug("发送短信 => {}", smsOutboxes);
+            }
+        });
+    }
+
     @Bean
     public void processRecord() {
         RedisUtils.subscribe(Constants.PROCESS_RECORD, JSONObject.class, msg -> {

+ 1 - 0
ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java

@@ -149,6 +149,7 @@ public class Constants {
     public static final String LOOKUP_LDAP = "ldap://";
 
     public static final String NOTICE_PUSH = "notice_push";
+    public static final String NOTICE_PUSH_SINGLE = "notice_push_single";
     public static final String PROCESS_RECORD = "process_record";
 
     /**

+ 28 - 18
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/IncidentServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ruoyi.zhdd.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
@@ -21,6 +22,7 @@ import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.zhdd.domain.Incident;
 import com.ruoyi.zhdd.domain.bo.IncidentBo;
+import com.ruoyi.zhdd.domain.bo.MessagePushUser;
 import com.ruoyi.zhdd.domain.vo.IncidentVo;
 import com.ruoyi.zhdd.mapper.IncidentMapper;
 import com.ruoyi.zhdd.service.IIncidentProcessService;
@@ -140,6 +142,8 @@ public class IncidentServiceImpl extends ServicePlusImpl<IncidentMapper, Inciden
         IncidentVo beforeInfo = getVoById(bo.getId());
         if (beforeInfo != null) {
             flag = !(beforeInfo.getStatus().equals(bo.getStatus()));
+        } else {
+            throw new ServiceException("事件不存在!");
         }
         Incident update = BeanUtil.toBean(bo, Incident.class);
         validEntityBeforeSave(update);
@@ -169,30 +173,36 @@ public class IncidentServiceImpl extends ServicePlusImpl<IncidentMapper, Inciden
                     update.setAssistDeptText(sysDepts.stream().map(SysDept::getDeptName).collect(Collectors.joining(",")));
                 }
             }
-
-//            // 查询初始设置的处置方案
-//            List<PlanTask> planTask = planService.queryTask(bo.getMadinDept(), bo.getType(), bo.getLevel());
-//            List<IncidentTask> incidentTasks = new ArrayList<>();
-//            for (PlanTask task : planTask) {
-//                IncidentTask incidentTask = new IncidentTask();
-//                incidentTask.setIncidentId(update.getId());
-//                incidentTask.setTaskName(task.getTaskName());
-//                incidentTask.setTaskDes(task.getTaskDes());
-//                incidentTask.setSource(1);
-//                incidentTasks.add(incidentTask);
-//            }
-//            incidentTaskService.saveAll(incidentTasks);
         } else if (flag && bo.getStatus() == 4) {
             if (StrUtil.isBlank(bo.getConclusion())) {
                 throw new ServiceException("请填写归档总结!");
             }
+        } else if (!flag && !StrUtil.equals(bo.getAssistDept(), beforeInfo.getAssistDept())) {
+            // 第二次对协办部门派发
+            // 重新冗余协办部门
+            if (StrUtil.isBlank(bo.getAssistDept())) {
+                update.setAssistDeptText("");
+            } else {
+                List<SysDept> sysDepts = sysDeptService.listByIds(Arrays.asList(bo.getAssistDept().split(",")));
+                if (sysDepts != null && sysDepts.size() > 0) {
+                    update.setAssistDeptText(sysDepts.stream().map(SysDept::getDeptName).collect(Collectors.joining(",")));
+                }
+            }
+            // 查询新增的部门数据。此处需要单独发送消息给相关的人
+            List<MessagePushUser> oldAssistDeptUser = JSONUtil.toList(beforeInfo.getAssistDeptUser(), MessagePushUser.class);
+            List<MessagePushUser> newAssistDeptUser = JSONUtil.toList(bo.getAssistDeptUser(), MessagePushUser.class);
+            List<MessagePushUser> messagePushUsers = CollUtil.subtractToList(newAssistDeptUser, oldAssistDeptUser);
+
+            jsonObject.set("des", "再次派发协办部门");
+            jsonObject.set("incidentStatus", bo.getStatus());
+            jsonObject.set("incidentId", bo.getId());
+            jsonObject.set("messagePushUsers", messagePushUsers);
+
+            RedisUtils.publish(Constants.NOTICE_PUSH_SINGLE, jsonObject);
         }
+        // 更新事件信息
         boolean b = updateById(update);
-        /*if (bo.isSendFlag()) {
-            RedisUtils.publish(Constants.NOTICE_PUSH, update.getId(), msg -> {
-                log.info("发布事件接报消息 => " + msg);
-            });
-        }*/
+
         if (flag) {
             if (bo.getStatus() == 3) {
                 // 推送到派发的待办消息中