瀏覽代碼

短信发送

459242451@qq.com 3 年之前
父節點
當前提交
f5ef85b3f6
共有 19 個文件被更改,包括 374 次插入218 次删除
  1. 6 11
      ruoyi-admin/nacos/yjzh-sq-dev.yaml
  2. 4 4
      ruoyi-admin/nacos/yjzh-sq-prod.yaml
  3. 6 6
      ruoyi-admin/nacos/yjzh-sq-test.yaml
  4. 38 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/NoticeInfoListiner.java
  5. 169 163
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
  6. 13 12
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java
  7. 25 8
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java
  8. 1 0
      ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java
  9. 3 1
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/IncidentTask.java
  10. 35 0
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/SmsOutbox.java
  11. 4 5
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/bo/IncidentTaskBo.java
  12. 7 3
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/bo/IncidentTasksBo.java
  13. 2 0
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/vo/IncidentTaskVo.java
  14. 0 1
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/vo/IncidentVo.java
  15. 13 0
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/mapper/SmsOutboxMapper.java
  16. 13 0
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/ISmsOutboxService.java
  17. 13 0
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/IncidentTaskServiceImpl.java
  18. 19 0
      ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/SmsOutboxServiceImpl.java
  19. 3 2
      ruoyi-zhdd/src/main/resources/mapper/zhdd/IncidentTaskMapper.xml

+ 6 - 11
ruoyi-admin/nacos/yjzh-sq-dev.yaml

@@ -10,23 +10,18 @@ spring:
             primary: master
             datasource:
                 # 主库数据源
-                #        master:
-                #          driverClassName: com.mysql.cj.jdbc.Driver
-                #          url: jdbc:mysql://cd-cdb-mrgi4hig.sql.tencentcdb.com:63225/tocc-sq?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
-                #          username: tocc_sq
-                #          password: tocc_sq1
                 master:
                     driverClassName: org.postgresql.Driver
                     url: jdbc:postgresql://xt.wenhq.top:8284/tocc-sq?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
                     username: postgres
                     password: postgres
                 # 从库数据源
-            #        slave:
-            #          lazy: true
-            #          driverClassName: com.mysql.cj.jdbc.Driver
-            #          url:
-            #          username:
-            #          password:
+                slave:
+                    lazy: true
+                    driverClassName: org.postgresql.Driver
+                    url: jdbc:postgresql://10.11.208.200:5872/dbplugin?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+                    username: dbplugin
+                    password: db(456)plu!!
             druid:
                 # 初始连接数
                 initialSize: 5

+ 4 - 4
ruoyi-admin/nacos/yjzh-sq-prod.yaml

@@ -18,10 +18,10 @@ spring:
                 # 从库数据源
                 slave:
                     lazy: true
-                    driverClassName: com.mysql.cj.jdbc.Driver
-                    url:
-                    username:
-                    password:
+                    driverClassName: org.postgresql.Driver
+                    url: jdbc:postgresql://10.11.208.200:5872/dbplugin?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+                    username: dbplugin
+                    password: db(456)plu!!
             druid:
                 # 初始连接数
                 initialSize: 5

+ 6 - 6
ruoyi-admin/nacos/yjzh-sq-test.yaml

@@ -16,12 +16,12 @@ spring:
                     username: postgres
                     password: Superman@2021
                 # 从库数据源
-            #        slave:
-            #          lazy: true
-            #          driverClassName: com.mysql.cj.jdbc.Driver
-            #          url:
-            #          username:
-            #          password:
+                slave:
+                    lazy: true
+                    driverClassName: org.postgresql.Driver
+                    url: jdbc:postgresql://10.11.208.200:5872/dbplugin?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+                    username: dbplugin
+                    password: db(456)plu!!
             druid:
                 # 初始连接数
                 initialSize: 5

+ 38 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/NoticeInfoListiner.java

@@ -1,10 +1,15 @@
 package com.ruoyi.web.controller.task;
 
+import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.RedisUtils;
+import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.zhdd.domain.IncidentProcess;
+import com.ruoyi.zhdd.domain.SmsOutbox;
 import com.ruoyi.zhdd.domain.bo.MessagePushBo;
 import com.ruoyi.zhdd.domain.bo.MessagePushUser;
 import com.ruoyi.zhdd.domain.vo.IncidentTaskVo;
@@ -13,13 +18,18 @@ import com.ruoyi.zhdd.feign.FeignNoticeInfoService;
 import com.ruoyi.zhdd.service.IIncidentProcessService;
 import com.ruoyi.zhdd.service.IIncidentService;
 import com.ruoyi.zhdd.service.IIncidentTaskService;
+import com.ruoyi.zhdd.service.ISmsOutboxService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @Description: TODO
@@ -36,6 +46,11 @@ public class NoticeInfoListiner {
     private final IIncidentService incidentService;
     private final IIncidentTaskService incidentTaskService;
     private final IIncidentProcessService incidentProcessService;
+    private final ISmsOutboxService smsOutboxService;
+    private final ISysUserService sysUserService;
+
+    @Value("${spring.profiles.active}")
+    private String env;
 
     /**
      * 消息发送
@@ -69,9 +84,10 @@ public class NoticeInfoListiner {
                 text = StrUtil.concat(true, "请查看", incidentVo.getName(), "事件的", incidentTaskVo.getTaskName(), "方案");
                 incidentProcess.setDes("发送处置方案");
                 incidentProcess.setIncidentId(incidentTaskVo.getIncidentId());
-                messageUser = incidentVo.getExprJson();
+                messageUser = incidentTaskVo.getExprJson();
             }
             if (StrUtil.isBlank(messageUser)) {
+                log.info("无发送人员");
                 return;
             }
             List<MessagePushUser> messagePushUsers = JSONUtil.toList(messageUser, MessagePushUser.class);
@@ -82,7 +98,27 @@ public class NoticeInfoListiner {
             messagePushBo.setMsText(text);
             messagePushBo.setMsNo(incidentProcess.getId());
             messagePushBo.setMessageReadInfoList(messagePushUsers);
-            feignNoticeInfoService.messagePush(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("有新的应急事件或应急方案,请注意查看!");
+                    smsOutbox.setRequesttime(new Date());
+                    smsOutboxes.add(smsOutbox);
+                }
+            }
+            if (!"dev".equals(env)) {
+                smsOutboxService.saveBatch(smsOutboxes);
+            }
+            log.debug("发送短信:{}", smsOutboxes);
             log.info("发送消息体 => {}", messagePushBo);
             log.info("订阅事件消息 => {}", msg);
         });

+ 169 - 163
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

@@ -1,6 +1,12 @@
 package com.ruoyi.common.core.domain.entity;
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
@@ -27,154 +33,154 @@ import java.util.Map;
 @Accessors(chain = true)
 @TableName("sys_user")
 public class SysUser implements Serializable {
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 用户ID
-	 */
-	@TableId(value = "user_id", type = IdType.ASSIGN_ID)
-	private String userId;
-
-	/**
-	 * 部门ID
-	 */
-	private String deptId;
-
-	/**
-	 * 用户账号
-	 */
-	@NotBlank(message = "用户账号不能为空")
-	@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
-	private String userName;
-
-	/**
-	 * 用户昵称
-	 */
-	@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
-	private String nickName;
-
-	/**
-	 * 用户邮箱
-	 */
-	@Email(message = "邮箱格式不正确")
-	@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
-	private String email;
-
-	/**
-	 * 手机号码
-	 */
-	private String phonenumber;
-
-	/**
-	 * 用户性别
-	 */
-	private String sex;
-
-	/**
-	 * 用户头像
-	 */
-	private String avatar;
-
-	/**
-	 * 密码
-	 */
-	@TableField(
-			insertStrategy = FieldStrategy.NOT_EMPTY,
-			updateStrategy = FieldStrategy.NOT_EMPTY,
-			whereStrategy = FieldStrategy.NOT_EMPTY
-	)
-	private String password;
-
-	@JsonIgnore
-	@JsonProperty
-	public String getPassword() {
-		return password;
-	}
-
-	/**
-	 * 盐加密
-	 */
-	private String salt;
-
-	/**
-	 * 帐号状态(0正常 1停用)
-	 */
-	private String status;
-
-	/**
-	 * 删除标志(0代表存在 2代表删除)
-	 */
-	@TableLogic
-	private String delFlag;
-
-	/**
-	 * 最后登录IP
-	 */
-	private String loginIp;
-
-	/**
-	 * 最后登录时间
-	 */
-	private Date loginDate;
-
-	/**
-	 * 创建者
-	 */
-	@TableField(fill = FieldFill.INSERT)
-	private String createBy;
-
-	/**
-	 * 创建时间
-	 */
-	@TableField(fill = FieldFill.INSERT)
-	private Date createTime;
-
-	/**
-	 * 更新者
-	 */
-	@TableField(fill = FieldFill.INSERT_UPDATE)
-	private String updateBy;
-
-	/**
-	 * 更新时间
-	 */
-	@TableField(fill = FieldFill.INSERT_UPDATE)
-	private Date updateTime;
-
-	/**
-	 * 备注
-	 */
-	private String remark;
-
-	/**
-	 * 请求参数
-	 */
-	@TableField(exist = false)
-	private Map<String, Object> params = new HashMap<>();
-
-	/**
-	 * 部门对象
-	 */
-	@TableField(exist = false)
-	private SysDept dept;
-
-	/**
-	 * 角色对象
-	 */
-	@TableField(exist = false)
-	private List<SysRole> roles;
-
-	/**
-	 * 角色组
-	 */
-	@TableField(exist = false)
-	private String[] roleIds;
-
-	/**
-	 * 岗位组
-	 */
-	@TableField(exist = false)
-	private Long[] postIds;
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户ID
+     */
+    @TableId(value = "user_id", type = IdType.ASSIGN_ID)
+    private String userId;
+
+    /**
+     * 部门ID
+     */
+    private String deptId;
+
+    /**
+     * 用户账号
+     */
+    @NotBlank(message = "用户账号不能为空")
+    @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
+    private String userName;
+
+    /**
+     * 用户昵称
+     */
+    @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
+    private String nickName;
+
+    /**
+     * 用户邮箱
+     */
+    @Email(message = "邮箱格式不正确")
+    @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
+    private String email;
+
+    /**
+     * 手机号码
+     */
+    private String phonenumber;
+
+    /**
+     * 用户性别
+     */
+    private String sex;
+
+    /**
+     * 用户头像
+     */
+    private String avatar;
+
+    /**
+     * 密码
+     */
+    @TableField(
+        insertStrategy = FieldStrategy.NOT_EMPTY,
+        updateStrategy = FieldStrategy.NOT_EMPTY,
+        whereStrategy = FieldStrategy.NOT_EMPTY
+    )
+    private String password;
+
+    @JsonIgnore
+    @JsonProperty
+    public String getPassword() {
+        return password;
+    }
+
+    /**
+     * 盐加密
+     */
+//	private String salt;
+
+    /**
+     * 帐号状态(0正常 1停用)
+     */
+    private String status;
+
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 最后登录IP
+     */
+    private String loginIp;
+
+    /**
+     * 最后登录时间
+     */
+    private Date loginDate;
+
+    /**
+     * 创建者
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /**
+     * 更新者
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 请求参数
+     */
+    @TableField(exist = false)
+    private Map<String, Object> params = new HashMap<>();
+
+    /**
+     * 部门对象
+     */
+    @TableField(exist = false)
+    private SysDept dept;
+
+    /**
+     * 角色对象
+     */
+    @TableField(exist = false)
+    private List<SysRole> roles;
+
+    /**
+     * 角色组
+     */
+    @TableField(exist = false)
+    private String[] roleIds;
+
+    /**
+     * 岗位组
+     */
+    @TableField(exist = false)
+    private Long[] postIds;
 
     private String otherId;
 
@@ -186,22 +192,22 @@ public class SysUser implements Serializable {
 
     private String idNumber;
 
-	/**
-	 * 角色ID
-	 */
-	@TableField(exist = false)
-	private String roleId;
+    /**
+     * 角色ID
+     */
+    @TableField(exist = false)
+    private String roleId;
 
-	public SysUser(String userId) {
-		this.userId = userId;
-	}
+    public SysUser(String userId) {
+        this.userId = userId;
+    }
 
-	public boolean isAdmin() {
-		return isAdmin(this.userId);
-	}
+    public boolean isAdmin() {
+        return isAdmin(this.userId);
+    }
 
-	public static boolean isAdmin(String userId) {
-		return "1".equals(userId);
-	}
+    public static boolean isAdmin(String userId) {
+        return "1".equals(userId);
+    }
 
 }

+ 13 - 12
ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java

@@ -7,7 +7,11 @@ import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-import javax.servlet.*;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
 import java.io.IOException;
 
 /**
@@ -21,11 +25,10 @@ public class DruidConfig {
     /**
      * 去除监控页面底部的广告
      */
-    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @SuppressWarnings({"rawtypes", "unchecked"})
     @Bean
     @ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true")
-    public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties)
-    {
+    public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties) {
         // 获取web监控页面的参数
         DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
         // 提取common.js的配置路径
@@ -33,16 +36,14 @@ public class DruidConfig {
         String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
         final String filePath = "support/http/resources/js/common.js";
         // 创建filter进行过滤
-        Filter filter = new Filter()
-        {
+        Filter filter = new Filter() {
             @Override
-            public void init(javax.servlet.FilterConfig filterConfig) throws ServletException
-            {
+            public void init(javax.servlet.FilterConfig filterConfig) throws ServletException {
             }
+
             @Override
             public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
-                    throws IOException, ServletException
-            {
+                throws IOException, ServletException {
                 chain.doFilter(request, response);
                 // 重置缓冲区,响应头不会被重置
 //                response.resetBuffer();
@@ -53,9 +54,9 @@ public class DruidConfig {
                 text = text.replaceAll("powered.*?shrek.wang</a>", "");
                 response.getWriter().write(text);
             }
+
             @Override
-            public void destroy()
-            {
+            public void destroy() {
             }
         };
         FilterRegistrationBean registrationBean = new FilterRegistrationBean();

+ 25 - 8
ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java

@@ -4,9 +4,12 @@ import com.ruoyi.framework.interceptor.RepeatSubmitInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.web.context.request.async.TimeoutCallableProcessingInterceptor;
 import org.springframework.web.cors.CorsConfiguration;
 import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
 import org.springframework.web.filter.CorsFilter;
+import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -17,22 +20,19 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  * @author ruoyi
  */
 @Configuration
-public class ResourcesConfig implements WebMvcConfigurer
-{
+public class ResourcesConfig implements WebMvcConfigurer {
     @Autowired
     private RepeatSubmitInterceptor repeatSubmitInterceptor;
 
     @Override
-    public void addResourceHandlers(ResourceHandlerRegistry registry)
-    {
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
     }
 
     /**
      * 自定义拦截规则
      */
     @Override
-    public void addInterceptors(InterceptorRegistry registry)
-    {
+    public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
     }
 
@@ -40,8 +40,7 @@ public class ResourcesConfig implements WebMvcConfigurer
      * 跨域配置
      */
     @Bean
-    public CorsFilter corsFilter()
-    {
+    public CorsFilter corsFilter() {
         UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
         CorsConfiguration config = new CorsConfiguration();
         config.setAllowCredentials(true);
@@ -56,4 +55,22 @@ public class ResourcesConfig implements WebMvcConfigurer
         source.registerCorsConfiguration("/**", config);
         return new CorsFilter(source);
     }
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**").
+            allowedOrigins("*").allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE").
+            maxAge(3600).allowCredentials(true);
+    }
+
+    @Override
+    public void configureAsyncSupport(final AsyncSupportConfigurer configurer) {
+        configurer.setDefaultTimeout(5000);
+        configurer.registerCallableInterceptors(timeoutInterceptor());
+    }
+
+    @Bean
+    public TimeoutCallableProcessingInterceptor timeoutInterceptor() {
+        return new TimeoutCallableProcessingInterceptor();
+    }
 }

+ 1 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java

@@ -37,6 +37,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
             authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
             SecurityContextHolder.getContext().setAuthentication(authenticationToken);
         }
+        response.addHeader("Access-Control-Allow-Origin", "*");
         chain.doFilter(request, response);
     }
 }

+ 3 - 1
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/IncidentTask.java

@@ -25,7 +25,7 @@ import java.util.Date;
 @TableName("b_incident_task")
 public class IncidentTask implements Serializable {
 
-    private static final long serialVersionUID=1L;
+    private static final long serialVersionUID = 1L;
 
 
     /**
@@ -56,4 +56,6 @@ public class IncidentTask implements Serializable {
     @TableField(fill = FieldFill.INSERT)
     private String createBy;
 
+    private String exprJson;
+
 }

+ 35 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/SmsOutbox.java

@@ -0,0 +1,35 @@
+package com.ruoyi.zhdd.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: TODO
+ * @Author: huangcheng
+ * @Date: 2022/1/13
+ * @Version V1.0
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("sms_outbox")
+public class SmsOutbox implements Serializable {
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private String sismsid;
+    private String extcode;
+    private String destaddr;
+    private String messagecontent;
+    private Integer reqdeliveryreport = 1;
+    private Integer msgfmt = 8;
+    private Integer sendmethod = 2;
+    private Date requesttime;
+    private String applicationid = "APP544";
+
+}

+ 4 - 5
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/bo/IncidentTaskBo.java

@@ -3,15 +3,12 @@ package com.ruoyi.zhdd.domain.bo;
 import com.ruoyi.common.core.domain.BaseEntity;
 import com.ruoyi.common.core.validate.AddGroup;
 import com.ruoyi.common.core.validate.EditGroup;
-import com.ruoyi.zhdd.domain.IncidentTaskPerson;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.util.List;
 
 /**
  * 事件处置流程业务对象 b_incident_process
@@ -35,11 +32,11 @@ public class IncidentTaskBo extends BaseEntity {
      * 所属事件id
      */
     @ApiModelProperty(value = "所属事件id")
-    @NotBlank(message = "incidentId不能为空", groups = { AddGroup.class, EditGroup.class })
+    @NotBlank(message = "incidentId不能为空", groups = {AddGroup.class, EditGroup.class})
     private String incidentId;
 
     @ApiModelProperty(value = "任务名称")
-    @NotBlank(message = "taskName不能为空", groups = { AddGroup.class, EditGroup.class })
+    @NotBlank(message = "taskName不能为空", groups = {AddGroup.class, EditGroup.class})
     private String taskName;
 
     private String delFlag;
@@ -68,4 +65,6 @@ public class IncidentTaskBo extends BaseEntity {
     @ApiModelProperty(value = "排序的方向", example = "asc,desc")
     private String isAsc;
 
+    private String exprJson;
+
 }

+ 7 - 3
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/bo/IncidentTasksBo.java

@@ -1,9 +1,9 @@
 package com.ruoyi.zhdd.domain.bo;
 
 import com.ruoyi.common.core.validate.AddGroup;
-import com.ruoyi.zhdd.domain.IncidentTask;
 import com.ruoyi.zhdd.domain.IncidentTaskCommand;
 import com.ruoyi.zhdd.domain.IncidentTaskPerson;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
@@ -19,10 +19,14 @@ import java.util.List;
 public class IncidentTasksBo {
 
     private String id;
-    @NotBlank(message = "incidentId不能为空", groups = { AddGroup.class })
+    @NotBlank(message = "incidentId不能为空", groups = {AddGroup.class})
     private String incidentId;
-    @NotBlank(message = "taskName不能为空", groups = { AddGroup.class })
+    @NotBlank(message = "taskName不能为空", groups = {AddGroup.class})
     private String taskName;
     private List<IncidentTaskCommand> incidentTaskCommands;
     private List<IncidentTaskPerson> incidentTaskPeoples;
+    @ApiModelProperty("消息是否发送")
+    private boolean sendFlag = false;
+    @ApiModelProperty("消息发送的人")
+    private List<MessagePushUser> messagePushUsers;
 }

+ 2 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/vo/IncidentTaskVo.java

@@ -48,4 +48,6 @@ public class IncidentTaskVo {
     @Excel(name = "创建时间")
     @ApiModelProperty("创建时间")
     private Date createTime;
+
+    private String exprJson;
 }

+ 0 - 1
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/vo/IncidentVo.java

@@ -106,7 +106,6 @@ public class IncidentVo {
     /**
      * json拓展,用于存取多出的字段
      */
-    @Excel(name = "json拓展,用于存取多出的字段")
     @ApiModelProperty("json拓展,用于存取多出的字段")
     private String exprJson;
 

+ 13 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/mapper/SmsOutboxMapper.java

@@ -0,0 +1,13 @@
+package com.ruoyi.zhdd.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.zhdd.domain.SmsOutbox;
+
+/**
+ * @Description: TODO
+ * @Author: huangcheng
+ * @Date: 2022/1/13
+ * @Version V1.0
+ */
+public interface SmsOutboxMapper extends BaseMapper<SmsOutbox> {
+}

+ 13 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/ISmsOutboxService.java

@@ -0,0 +1,13 @@
+package com.ruoyi.zhdd.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.zhdd.domain.SmsOutbox;
+
+/**
+ * @Description: TODO
+ * @Author: huangcheng
+ * @Date: 2022/1/13
+ * @Version V1.0
+ */
+public interface ISmsOutboxService extends IService<SmsOutbox> {
+}

+ 13 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/IncidentTaskServiceImpl.java

@@ -2,12 +2,15 @@ package com.ruoyi.zhdd.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
 import com.ruoyi.common.core.page.PagePlus;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.utils.RedisUtils;
 import com.ruoyi.zhdd.domain.IncidentTask;
 import com.ruoyi.zhdd.domain.IncidentTaskCommand;
 import com.ruoyi.zhdd.domain.IncidentTaskPerson;
@@ -18,6 +21,7 @@ import com.ruoyi.zhdd.mapper.IncidentTaskMapper;
 import com.ruoyi.zhdd.service.IIncidentTaskCommandService;
 import com.ruoyi.zhdd.service.IIncidentTaskPersonService;
 import com.ruoyi.zhdd.service.IIncidentTaskService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -33,6 +37,7 @@ import java.util.Map;
  * @date 2021-09-28
  */
 @Service
+@Slf4j
 public class IncidentTaskServiceImpl extends ServicePlusImpl<IncidentTaskMapper, IncidentTask, IncidentTaskVo> implements IIncidentTaskService {
 
     @Autowired
@@ -74,6 +79,7 @@ public class IncidentTaskServiceImpl extends ServicePlusImpl<IncidentTaskMapper,
         }
         IncidentTask add = BeanUtil.toBean(bo, IncidentTask.class);
         add.setId(null);
+        add.setExprJson(JSONUtil.toJsonStr(bo.getMessagePushUsers()));
         save(add);
         // 新增指令和人员
         if (bo.getIncidentTaskCommands() != null) {
@@ -90,6 +96,13 @@ public class IncidentTaskServiceImpl extends ServicePlusImpl<IncidentTaskMapper,
         }
         incidentTaskCommandService.saveAll(bo.getIncidentTaskCommands());
         incidentTaskPersonService.saveAll(bo.getIncidentTaskPeoples());
+        // 发送消息
+        if (bo.isSendFlag()) {
+            // A:事件接报。B:处置方案
+            RedisUtils.publish(Constants.NOTICE_PUSH, "B" + add.getId(), msg -> {
+                log.info("发布应急方案消息 => " + msg);
+            });
+        }
         return true;
     }
 

+ 19 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/SmsOutboxServiceImpl.java

@@ -0,0 +1,19 @@
+package com.ruoyi.zhdd.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.zhdd.domain.SmsOutbox;
+import com.ruoyi.zhdd.mapper.SmsOutboxMapper;
+import com.ruoyi.zhdd.service.ISmsOutboxService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: TODO
+ * @Author: huangcheng
+ * @Date: 2022/1/13
+ * @Version V1.0
+ */
+@DS("slave")
+@Service
+public class SmsOutboxServiceImpl extends ServiceImpl<SmsOutboxMapper, SmsOutbox> implements ISmsOutboxService {
+}

+ 3 - 2
ruoyi-zhdd/src/main/resources/mapper/zhdd/IncidentTaskMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
-PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.zhdd.mapper.IncidentTaskMapper">
 
     <resultMap type="com.ruoyi.zhdd.domain.IncidentTask" id="IncidentTaskResult">
@@ -10,6 +10,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="taskName" column="task_name"/>
         <result property="createTime" column="create_time"/>
         <result property="createBy" column="create_by"/>
+        <result property="exprJson" column="expr_json"/>
     </resultMap>