消息配置

This commit is contained in:
jinqiming 2021-03-03 17:55:27 +08:00
parent f65750f963
commit 29e330e467
14 changed files with 207 additions and 202 deletions

View File

@ -4,6 +4,7 @@ import java.util.List;
import com.snow.framework.util.ShiroUtils;
import com.snow.system.domain.SysUser;
import org.apache.commons.collections.CollectionUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap;
@ -53,6 +54,8 @@ public class SysNewsTriggersController extends BaseController
public TableDataInfo list(SysNewsTriggers sysNewsTriggers)
{
startPage();
SysUser sysUser = ShiroUtils.getSysUser();
sysNewsTriggers.setUserId(String.valueOf(sysUser.getUserId()));
List<SysNewsTriggers> list = sysNewsTriggersService.selectSysNewsTriggersList(sysNewsTriggers);
return getDataTable(list);
}
@ -68,6 +71,7 @@ public class SysNewsTriggersController extends BaseController
{
SysUser sysUser = ShiroUtils.getSysUser();
sysNewsTriggers.setUserId(String.valueOf(sysUser.getUserId()));
List<SysNewsTriggers> list = sysNewsTriggersService.selectSysNewsTriggersList(sysNewsTriggers);
ExcelUtil<SysNewsTriggers> util = new ExcelUtil<SysNewsTriggers>(SysNewsTriggers.class);
return util.exportExcel(list, "triggers");
@ -93,6 +97,13 @@ public class SysNewsTriggersController extends BaseController
{
SysUser sysUser = ShiroUtils.getSysUser();
sysNewsTriggers.setUserId(String.valueOf(sysUser.getUserId()));
sysNewsTriggers.setNewsOnOff(null);
List<SysNewsTriggers> sysNewsTriggersList = sysNewsTriggersService.selectSysNewsTriggersList(sysNewsTriggers);
if(CollectionUtils.isNotEmpty(sysNewsTriggersList)){
return AjaxResult.error("该配置已存在,请勿重复添加");
}
sysNewsTriggers.setNewsOnOff(sysNewsTriggers.getNewsOnOff());
sysNewsTriggers.setCreateBy(String.valueOf(sysUser.getUserId()));
return toAjax(sysNewsTriggersService.insertSysNewsTriggers(sysNewsTriggers));
}
@ -107,17 +118,6 @@ public class SysNewsTriggersController extends BaseController
return prefix + "/edit";
}
/**
* 修改保存消息通知配置
*/
@RequiresPermissions("system:triggers:edit")
@Log(title = "消息通知配置", businessType = BusinessType.UPDATE)
@PostMapping("/edit")
@ResponseBody
public AjaxResult editSave(SysNewsTriggers sysNewsTriggers)
{
return toAjax(sysNewsTriggersService.updateSysNewsTriggers(sysNewsTriggers));
}
/**
* 删除消息通知配置
@ -130,4 +130,19 @@ public class SysNewsTriggersController extends BaseController
{
return toAjax(sysNewsTriggersService.deleteSysNewsTriggersByIds(ids));
}
/**
* 开启关闭通知
*/
@RequiresPermissions("system:triggers:changeStatus")
@Log(title = "开启关闭通知", businessType = BusinessType.UPDATE)
@PostMapping("/changeStatus")
@ResponseBody
public AjaxResult changeStatus(SysNewsTriggers sysNewsTriggers)
{
SysUser sysUser = ShiroUtils.getSysUser();
sysNewsTriggers.setUpdateBy(String.valueOf(sysUser.getUserId()));
return toAjax(sysNewsTriggersService.updateSysNewsTriggers(sysNewsTriggers));
}
}

View File

@ -6,9 +6,9 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://rm-bp1j1554xv1qs04295o.mysql.rds.aliyuncs.com:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: cloud_root
password: Jin!152377
url: jdbc:mysql://localhost:3306/snow?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
# 从库数据源
slave:
# 从数据源开关/默认关闭

View File

@ -6,16 +6,25 @@
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" id="form-triggers-add">
<input name="newsNodeId" type="hidden" id="newsNodeId">
<div class="form-group">
<label class="col-sm-3 control-label is-required">归属节点:</label>
<div class="col-sm-8">
<div class="input-group">
<input name="newsNodeId" onclick="selectNodeTree()" id="treeName" type="text" placeholder="请选择归属节点" class="form-control" required>
<input name="treeName" onclick="selectNodeTree()" id="treeName" type="text" placeholder="请选择归属节点" class="form-control" required>
<span class="input-group-addon"><i class="fa fa-search"></i></span>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">消息类型:</label>
<div class="col-sm-8">
<div class="radio-box" th:each="dict : ${@dict.getType('sys_news_type')}">
<input type="radio" th:id="${dict.dictCode}" name="newsType" th:value="${dict.dictValue}" th:checked="${dict.default}">
<label th:for="${dict.dictCode}" th:text="${dict.dictLabel}"></label>
</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">消息开关:</label>
<div class="col-sm-8">
@ -55,6 +64,7 @@
function doSubmit(index, layero){
var body = layer.getChildFrame('body', index);
$("#treeId").val(body.find('#treeId').val());
$("#newsNodeId").val(body.find('#treeId').val());
$("#treeName").val(body.find('#treeName').val());
layer.close(index);
}

View File

@ -30,17 +30,17 @@
<div class="row">
<div class="col-sm-12 search-collapse">
<form id="user-form">
<input type="hidden" id="deptId" name="deptId">
<input type="hidden" id="newsNodeId" name="newsNodeId">
<input type="hidden" id="parentId" name="parentId">
<div class="select-list">
<ul>
<li>
<label>节点key</label>
<input type="text" name="newsNodeId"/>
<input type="text" name="newsNodeKey"/>
</li>
<li>
消息类型:<select name="status" th:with="type=${@dict.getType('sys_normal_disable')}">
消息类型:<select name="newsType" th:with="type=${@dict.getType('sys_news_type')}">
<option value="">所有</option>
<option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
</select>
@ -56,19 +56,16 @@
</div>
<div class="btn-group-sm" id="toolbar" role="group">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:user:add">
<a class="btn btn-success" onclick="$.operate.add()" shiro:hasPermission="system:triggers:add">
<i class="fa fa-plus"></i> 新增
</a>
<a class="btn btn-primary single disabled" onclick="$.operate.editTab()" shiro:hasPermission="system:user:edit">
<i class="fa fa-edit"></i> 修改
</a>
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="system:user:remove">
<a class="btn btn-danger multiple disabled" onclick="$.operate.removeAll()" shiro:hasPermission="system:triggers:remove">
<i class="fa fa-remove"></i> 删除
</a>
<a class="btn btn-info" onclick="$.table.importExcel()" shiro:hasPermission="system:user:import">
<a class="btn btn-info" onclick="$.table.importExcel()" shiro:hasPermission="system:triggers:import">
<i class="fa fa-upload"></i> 导入
</a>
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:user:export">
<a class="btn btn-warning" onclick="$.table.exportExcel()" shiro:hasPermission="system:triggers:export">
<i class="fa fa-download"></i> 导出
</a>
</div>
@ -86,6 +83,7 @@
<script th:inline="javascript">
var editFlag = [[${@permission.hasPermi('system:triggers:edit')}]];
var removeFlag = [[${@permission.hasPermi('system:triggers:remove')}]];
var sysNewsType = [[${@dict.getType('sys_news_type')}]];
var prefix = ctx + "system/triggers";
$(function() {
@ -114,17 +112,24 @@
title: 'null',
visible: false
},
{
field: 'newsNodeId',
title: '流程消息节点key'
field: 'sysNewsNode.newsNodeName',
align: 'center',
title: '消息节点'
},
{
field: 'sysNewsNode.newsNodeKey',
align: 'center',
title: '节点key'
},
{
field: 'newsType',
title: '消息类型'
},
{
field: 'newsOnOff',
title: '消息开关'
title: '消息类型',
align: 'center',
formatter: function(value, row, index) {
return $.table.selectDictLabel(sysNewsType, value);
}
},
{
visible: editFlag == 'hidden' ? false : true,
@ -134,16 +139,11 @@
return statusTools(row);
}
},
{
field: 'userId',
title: '用户id'
},
{
title: '操作',
align: 'center',
formatter: function(value, row, index) {
var actions = [];
actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> ');
actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="javascript:void(0)" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>');
return actions.join('');
}
@ -163,7 +163,8 @@
$.tree.init(options);
function zOnClick(event, treeId, treeNode) {
$("#deptId").val(treeNode.id);
//$.tree.notAllowParents();
$("#newsNodeId").val(treeNode.id);
$("#parentId").val(treeNode.pId);
$.table.search();
}
@ -190,58 +191,32 @@
function newsNode() {
var url = ctx + "system/node";
$.modal.openTab("部门管理", url);
$.modal.openTab("消息节点管理", url);
}
/* 用户管理-重置密码 */
function resetPwd(userId) {
var url = prefix + '/resetPwd/' + userId;
$.modal.open("重置密码", url, '800', '300');
}
/* 用户管理-分配角色 */
function authRole(userId) {
var url = prefix + '/authRole/' + userId;
$.modal.openTab("用户分配角色", url);
}
/* 用户状态显示 */
function statusTools(row) {
if (row.status == 1) {
return '<i class=\"fa fa-toggle-off text-info fa-2x\" onclick="enable(\'' + row.userId + '\')"></i> ';
if (row.newsOnOff == 1) {
return '<i class=\"fa fa-toggle-off text-info fa-2x\" onclick="enable(\'' + row.id + '\')"></i> ';
} else {
return '<i class=\"fa fa-toggle-on text-info fa-2x\" onclick="disable(\'' + row.userId + '\')"></i> ';
return '<i class=\"fa fa-toggle-on text-info fa-2x\" onclick="disable(\'' + row.id + '\')"></i> ';
}
}
/* 用户管理-停用 */
function disable(userId) {
$.modal.confirm("确认要停用用户吗?", function() {
$.operate.post(prefix + "/changeStatus", { "userId": userId, "status": 1 });
$.modal.confirm("确认要关闭消息通知吗?", function() {
$.operate.post(prefix + "/changeStatus", { "id": userId, "newsOnOff": 1 });
})
}
/* 用户管理启用 */
function enable(userId) {
$.modal.confirm("确认要启用用户吗?", function() {
$.operate.post(prefix + "/changeStatus", { "userId": userId, "status": 0 });
$.modal.confirm("确认要启用消息通知吗?", function() {
$.operate.post(prefix + "/changeStatus", { "id": userId, "newsOnOff": 0 });
})
}
</script>
</body>
<!-- 导入区域 -->
<script id="importTpl" type="text/template">
<form enctype="multipart/form-data" class="mt20 mb10">
<div class="col-xs-offset-1">
<input type="file" id="file" name="file"/>
<div class="mt10 pt5">
<input type="checkbox" id="updateSupport" name="updateSupport" title="如果登录账户已经存在,更新这条数据。"> 是否更新已经存在的用户数据
&nbsp; <a onclick="$.table.importTemplate()" class="btn btn-default btn-xs"><i class="fa fa-file-excel-o"></i> 下载模板</a>
</div>
<font color="red" class="pull-left mt10">
提示仅允许导入“xls”或“xlsx”格式文件
</font>
</div>
</form>
</script>
</html>

View File

@ -125,4 +125,15 @@ public class Constants
* 钉钉回调失败返回
*/
public static final String CALL_BACK_FAIL_RETURN="fail";
/**
* dingding消息类型
*/
public static final Integer NEWS_DINGDING_TYPE=1;
/**
* 邮件消息类型
*/
public static final Integer NEWS_EMAIL_TYPE=2;
}

View File

@ -0,0 +1,71 @@
package com.snow.framework.web.service;
import com.snow.common.constant.Constants;
import com.snow.framework.util.ShiroUtils;
import com.snow.system.domain.SysNewsNode;
import com.snow.system.domain.SysNewsTriggers;
import com.snow.system.domain.SysUser;
import com.snow.system.service.impl.SysNewsNodeServiceImpl;
import com.snow.system.service.impl.SysNewsTriggersServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author qimingjin
* @Title:
* @Description:
* @date 2021/3/3 17:03
*/
@Service("newsTrigger")
public class NewsTriggerService {
@Autowired
private SysNewsNodeServiceImpl sysNewsNodeService;
@Autowired
private SysNewsTriggersServiceImpl sysNewsTriggersService;
/**
* 获取Email消息通知开关
* @param nodeKey
* @return
*/
public boolean getEmailOnOff(String nodeKey)
{
return getNewsOnOff(nodeKey,Constants.NEWS_EMAIL_TYPE);
}
/**
* 获取钉钉开关
* @param nodeKey
* @return
*/
public boolean getDingTalkOnOff(String nodeKey)
{
return getNewsOnOff(nodeKey,Constants.NEWS_DINGDING_TYPE);
}
private boolean getNewsOnOff(String nodeKey,Integer newsType){
SysNewsNode sysNewsNode = sysNewsNodeService.selectSysNewsNodeByKey(nodeKey);
if(null == sysNewsNode){
return false;
}
SysNewsTriggers sysNewsTriggers=new SysNewsTriggers();
sysNewsTriggers.setNewsNodeId(sysNewsNode.getId());
sysNewsTriggers.setNewsType(newsType);
SysUser sysUser = ShiroUtils.getSysUser();
sysNewsTriggers.setUserId(String.valueOf(sysUser.getUserId()));
List<SysNewsTriggers> sysNewsTriggersList = sysNewsTriggersService.selectSysNewsTriggersList(sysNewsTriggers);
if(CollectionUtils.isNotEmpty(sysNewsTriggersList)){
Integer newsOnOff = sysNewsTriggersList.get(0).getNewsOnOff();
return newsOnOff==1;
}
return false;
}
}

View File

@ -4,6 +4,7 @@ import com.snow.common.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.snow.common.core.domain.BaseEntity;
import com.snow.common.core.domain.TreeEntity;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@ -13,6 +14,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
* @author qimingjin
* @date 2021-03-02
*/
@Data
public class SysNewsNode extends TreeEntity
{
private static final long serialVersionUID = 1L;
@ -32,57 +34,4 @@ public class SysNewsNode extends TreeEntity
@Excel(name = "是否删除", readConverterExp = "0=--否1--是")
private Long isDelete;
public void setId(Integer id)
{
this.id = id;
}
public Integer getId()
{
return id;
}
public void setNewsNodeName(String newsNodeName)
{
this.newsNodeName = newsNodeName;
}
public String getNewsNodeName()
{
return newsNodeName;
}
public void setNewsNodeKey(String newsNodeKey)
{
this.newsNodeKey = newsNodeKey;
}
public String getNewsNodeKey()
{
return newsNodeKey;
}
public void setIsDelete(Long isDelete)
{
this.isDelete = isDelete;
}
public Long getIsDelete()
{
return isDelete;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("newsNodeName", getNewsNodeName())
.append("newsNodeKey", getNewsNodeKey())
.append("parentId", getParentId())
.append("ancestors", getAncestors())
.append("orderNum", getOrderNum())
.append("isDelete", getIsDelete())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}

View File

@ -3,6 +3,7 @@ package com.snow.system.domain;
import com.snow.common.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.snow.common.core.domain.BaseEntity;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
@ -12,6 +13,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
* @author qimingjin
* @date 2021-03-02
*/
@Data
public class SysNewsTriggers extends BaseEntity
{
private static final long serialVersionUID = 1L;
@ -21,15 +23,15 @@ public class SysNewsTriggers extends BaseEntity
/** 流程消息节点key */
@Excel(name = "流程消息节点key")
private Long newsNodeId;
private Integer newsNodeId;
/** 消息类型1-钉钉2-邮件3-短信4-站内消息) */
@Excel(name = "消息类型", readConverterExp = "1=-钉钉2-邮件3-短信4-站内消息")
private Long newsType;
private Integer newsType;
/** 消息开关0--关1--开) */
@Excel(name = "消息开关", readConverterExp = "0=--关1--开")
private Long newsOnOff;
private Integer newsOnOff;
/** 用户id */
@Excel(name = "用户id")
@ -39,74 +41,8 @@ public class SysNewsTriggers extends BaseEntity
@Excel(name = "是否删除", readConverterExp = "0=--否1--是")
private Long isDelete;
public void setId(Integer id)
{
this.id = id;
}
public Integer getId()
{
return id;
}
public void setNewsNodeId(Long newsNodeId)
{
this.newsNodeId = newsNodeId;
}
public Long getNewsNodeId()
{
return newsNodeId;
}
public void setNewsType(Long newsType)
{
this.newsType = newsType;
}
public Long getNewsType()
{
return newsType;
}
public void setNewsOnOff(Long newsOnOff)
{
this.newsOnOff = newsOnOff;
}
public Long getNewsOnOff()
{
return newsOnOff;
}
public void setUserId(String userId)
{
this.userId = userId;
}
public String getUserId()
{
return userId;
}
public void setIsDelete(Long isDelete)
{
this.isDelete = isDelete;
}
public Long getIsDelete()
{
return isDelete;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("newsNodeId", getNewsNodeId())
.append("newsType", getNewsType())
.append("newsOnOff", getNewsOnOff())
.append("userId", getUserId())
.append("isDelete", getIsDelete())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
/**
* 节点信息
*/
private SysNewsNode sysNewsNode;
}

View File

@ -19,6 +19,13 @@ public interface SysNewsNodeMapper
*/
public SysNewsNode selectSysNewsNodeById(Integer id);
/**
* 查询消息配置节点
* @param newsNodeKey 配置节点key
* @return
*/
public SysNewsNode selectSysNewsNodeByKey(String newsNodeKey);
/**
* 查询消息配置节点列表
*

View File

@ -20,6 +20,13 @@ public interface ISysNewsNodeService
*/
public SysNewsNode selectSysNewsNodeById(Integer id);
/**
* 查询消息配置节点
* @param newsNodeKey 配置节点key
* @return
*/
public SysNewsNode selectSysNewsNodeByKey(String newsNodeKey);
/**
* 查询消息配置节点列表
*

View File

@ -35,6 +35,11 @@ public class SysNewsNodeServiceImpl implements ISysNewsNodeService
return sysNewsNodeMapper.selectSysNewsNodeById(id);
}
@Override
public SysNewsNode selectSysNewsNodeByKey(String newsNodeKey) {
return sysNewsNodeMapper.selectSysNewsNodeByKey(newsNodeKey);
}
/**
* 查询消息配置节点列表
*

View File

@ -1,7 +1,10 @@
package com.snow.system.service.impl;
import java.util.ArrayList;
import java.util.List;
import com.snow.common.utils.DateUtils;
import com.snow.common.utils.StringUtils;
import com.snow.system.domain.SysNewsNode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.snow.system.mapper.SysNewsTriggersMapper;
@ -21,6 +24,9 @@ public class SysNewsTriggersServiceImpl implements ISysNewsTriggersService
@Autowired
private SysNewsTriggersMapper sysNewsTriggersMapper;
@Autowired
private SysNewsNodeServiceImpl sysNewsNodeService;
/**
* 查询消息通知配置
*
@ -42,7 +48,16 @@ public class SysNewsTriggersServiceImpl implements ISysNewsTriggersService
@Override
public List<SysNewsTriggers> selectSysNewsTriggersList(SysNewsTriggers sysNewsTriggers)
{
return sysNewsTriggersMapper.selectSysNewsTriggersList(sysNewsTriggers);
List<SysNewsTriggers> sysNewsTriggersList=new ArrayList<>();
if(StringUtils.isNotNull(sysNewsTriggers.getNewsNodeId())){
SysNewsNode sysNewsNode = sysNewsNodeService.selectSysNewsNodeById(sysNewsTriggers.getNewsNodeId().intValue());
sysNewsTriggersList = sysNewsTriggersMapper.selectSysNewsTriggersList(sysNewsTriggers);
sysNewsTriggersList.parallelStream().forEach(t->{
t.setSysNewsNode(sysNewsNode);
});
}
return sysNewsTriggersList;
}
/**

View File

@ -43,6 +43,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where t.id = #{id}
</select>
<select id="selectSysNewsNodeByKey" parameterType="String" resultMap="SysNewsNodeResult">
<include refid="selectSysNewsNodeVo"/>
where news_node_key = #{newsNodeKey} and is_delete=0
</select>
<insert id="insertSysNewsNode" parameterType="SysNewsNode" useGeneratedKeys="true" keyProperty="id">
insert into sys_news_node
<trim prefix="(" suffix=")" suffixOverrides=",">