ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(一)

简介: ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(一)

更多ruoyi-nbcio功能请看演示系统

gitee源代码地址

前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio

演示地址:RuoYi-Nbcio后台管理系统

1、数据库表方面

  在原来sys_notice修改基础上增加一个表叫sys_notice_send

表结构如下:

DROP TABLE IF EXISTS `sys_notice`;
CREATE TABLE `sys_notice` (
  `notice_id` bigint(20) NOT NULL COMMENT '公告ID',
  `notice_title` varchar(50) NOT NULL COMMENT '公告标题',
  `notice_type` char(1) NOT NULL COMMENT '公告类型(1通知 2公告 3待办)',
  `notice_content` longblob COMMENT '公告内容',
  `status` char(1) DEFAULT '0' COMMENT '公告状态(0正常 1关闭)',
  `sender` bigint(20) DEFAULT NULL COMMENT '发布人',
  `priority` varchar(50) DEFAULT NULL COMMENT '优先级(L低,M中,H高)',
  `msg_type` varchar(10) DEFAULT NULL COMMENT '通告对象类型(USER:指定用户,ALL:全体用户)',
  `send_status` varchar(10) DEFAULT NULL COMMENT '发布状态(0未发布,1已发布,2已撤销)',
  `send_time` datetime DEFAULT NULL COMMENT '发布时间',
  `cancel_time` datetime DEFAULT NULL COMMENT '撤销时间',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`notice_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知公告表';
DROP TABLE IF EXISTS `sys_notice_send`;
CREATE TABLE `sys_notice_send` (
  `send_id` bigint(20) NOT NULL COMMENT '公告发送ID',
  `notice_id` bigint(20) NOT NULL COMMENT '公告ID',
  `user_id` bigint(20) NOT NULL COMMENT '用户id',
  `read_flag` varchar(10) DEFAULT NULL COMMENT '阅读状态(0未读,1已读)',
  `read_time` datetime DEFAULT NULL COMMENT '阅读时间',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`send_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用户公告阅读标记表';

2、通过上面的数据导入,用系统提供的代码生成,生成前端与后端代码。

3、在common模块里增加一个公共的接口服务,以后一些公共需要各个模块使用的,都可以放在这里。

 目前先提供下面一些接口服务

package com.ruoyi.common.core.service;
import com.ruoyi.common.core.domain.dto.MessageDTO;
import com.ruoyi.common.core.domain.model.LoginUser;
/**
 * 通用 公共服务
 *
 * @author nbacheng
 * @date 2023-09-21
 */
public interface CommonService {
  /**
     * 1发送系统消息
     * @param message 使用构造器赋值参数 如果不设置category(消息类型)则默认为2 发送系统消息
     */
    void sendSysNotice(MessageDTO message);
    
    /**
   * 发消息
   * @param fromUser
   * @param toUser
   * @param title
   * @param msgContent
   * @param setMsgCategory
   */
    void sendSysNotice(String fromUser, String toUser, String title, String msgContent, String setMsgCategory);
    
    /**
     * 获取流程发送消息基地址
     * @return
     */
    String getBaseUrl();
    
    /**
     * 获取当前登录用户
     *
     * @return 当前登录用户信息
     */
    public LoginUser getLoginUser();
}

4、common接口服务实现如下:

package com.ruoyi.system.service.impl;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.WebsocketConst;
import com.ruoyi.common.core.domain.dto.MessageDTO;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.websocket.WebSocketServer;
import com.ruoyi.system.domain.SysNotice;
import com.ruoyi.system.domain.SysNoticeSend;
import com.ruoyi.system.mapper.SysNoticeMapper;
import com.ruoyi.system.mapper.SysNoticeSendMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.common.core.service.CommonService;
import com.ruoyi.common.helper.LoginHelper;
import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Service
public class SysCommServiceImple implements CommonService {
  @Value("${flowable.message-base-url}")
  private String msgBaseUrl;
    @Resource
  private SysUserMapper userMapper;
    @Resource
    SysNoticeMapper sysNoticeMapper;
  @Resource
    private WebSocketServer webSocket;
  @Resource
  private SysNoticeSendMapper sysNoticeSendMapper;
  
  @Override
  public void sendSysNotice(MessageDTO message) {
    this.sendSysNotice(message.getFromUser(),
        message.getToUser(),
        message.getTitle(),
        message.getContent(),
        message.getCategory());   
  }
  /**
   * 发消息
   * @param fromUser
   * @param toUser
   * @param title
   * @param msgContent
   * @param setMsgCategory
   */
  @Override
  @Transactional(rollbackFor = Exception.class)
  public void sendSysNotice(String fromUser, String toUser, String title, String msgContent, String setMsgCategory) {
    SysNotice notice = new SysNotice();
    notice.setNoticeTitle(title);
    notice.setNoticeContent(msgContent);
    notice.setNoticeType(setMsgCategory);
    notice.setSender(Long.valueOf(fromUser));
    notice.setPriority(Constants.PRIORITY_M);
    notice.setMsgType(Constants.MSG_TYPE_UESR);
    notice.setSendStatus(Constants.HAS_SEND);
    notice.setSendTime(new Date());
    notice.setMsgType(Constants.MSG_TYPE_UESR);
    notice.setStatus("0");
    sysNoticeMapper.insert(notice);
    // 2.插入用户通告阅读标记表记录
    String userId = toUser;
    String[] userIds = userId.split(",");
    Long noticeId = notice.getNoticeId();
    for(int i=0;i<userIds.length;i++) {
      if(ObjectUtil.isNotEmpty(userIds[i])) {
        SysUser sysUser = userMapper.selectUserById(Long.valueOf(userIds[i]));
        if(sysUser==null) {
          continue;
        }
        SysNoticeSend noticeSend = new SysNoticeSend();
        noticeSend.setNoticeId(noticeId);
        noticeSend.setUserId(sysUser.getUserId());
        noticeSend.setReadFlag(Constants.NO_READ_FLAG);
        sysNoticeSendMapper.insert(noticeSend);
        JSONObject obj = new JSONObject();
        obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
        obj.put(WebsocketConst.MSG_USER_ID, sysUser.getUserName());
        obj.put(WebsocketConst.MSG_ID, notice.getNoticeId());
        obj.put(WebsocketConst.MSG_TXT, notice.getNoticeTitle());
        webSocket.sendMessage(sysUser.getUserName(), obj.toJSONString());
      }
    }
    
  }
  @Override
  public String getBaseUrl() {
    return msgBaseUrl;
  }
  @Override
  public LoginUser getLoginUser() {
    LoginUser user = LoginHelper.getLoginUser();
    return user;
  }
}


相关文章
|
6月前
ruoyi-nbcio项目增加右上角的消息提醒
ruoyi-nbcio项目增加右上角的消息提醒
160 0
|
小程序 NoSQL JavaScript
【易售小程序项目】”我的“界面实现+“信息修改“界面实现+登出账号实现+图片上传组件【基于若依管理系统开发】
【易售小程序项目】”我的“界面实现+“信息修改“界面实现+登出账号实现+图片上传组件【基于若依管理系统开发】
104 0
|
6月前
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(三)
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(三)
170 0
|
6月前
|
搜索推荐
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(四)
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(四)
225 0
|
6月前
|
SQL 前端开发
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(八)
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(八)
204 0
|
6月前
|
前端开发
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(七)
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(七)
199 0
|
6月前
|
SQL 前端开发
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(五)
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(五)
347 0
|
6月前
|
前端开发
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(六)
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(六)
332 0
|
6月前
|
NoSQL Redis
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(二)
基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(二)
120 0
|
6月前
|
前端开发
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
595 0
下一篇
无影云桌面