• 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模块里增加一个公共的接口服务,以后一些公共需要各个模块使用的,都可以放在这里。

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

    1. package com.ruoyi.common.core.service;
    2. import com.ruoyi.common.core.domain.dto.MessageDTO;
    3. import com.ruoyi.common.core.domain.model.LoginUser;
    4. /**
    5. * 通用 公共服务
    6. *
    7. * @author nbacheng
    8. * @date 2023-09-21
    9. */
    10. public interface CommonService {
    11. /**
    12. * 1发送系统消息
    13. * @param message 使用构造器赋值参数 如果不设置category(消息类型)则默认为2 发送系统消息
    14. */
    15. void sendSysNotice(MessageDTO message);
    16. /**
    17. * 发消息
    18. * @param fromUser
    19. * @param toUser
    20. * @param title
    21. * @param msgContent
    22. * @param setMsgCategory
    23. */
    24. void sendSysNotice(String fromUser, String toUser, String title, String msgContent, String setMsgCategory);
    25. /**
    26. * 获取流程发送消息基地址
    27. * @return
    28. */
    29. String getBaseUrl();
    30. /**
    31. * 获取当前登录用户
    32. *
    33. * @return 当前登录用户信息
    34. */
    35. public LoginUser getLoginUser();
    36. }

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

    1. package com.ruoyi.system.service.impl;
    2. import java.util.Date;
    3. import javax.annotation.Resource;
    4. import org.springframework.beans.factory.annotation.Value;
    5. import org.springframework.stereotype.Service;
    6. import org.springframework.transaction.annotation.Transactional;
    7. import com.alibaba.fastjson.JSONObject;
    8. import com.ruoyi.common.constant.Constants;
    9. import com.ruoyi.common.constant.WebsocketConst;
    10. import com.ruoyi.common.core.domain.dto.MessageDTO;
    11. import com.ruoyi.common.core.domain.entity.SysUser;
    12. import com.ruoyi.common.core.domain.model.LoginUser;
    13. import com.ruoyi.common.websocket.WebSocketServer;
    14. import com.ruoyi.system.domain.SysNotice;
    15. import com.ruoyi.system.domain.SysNoticeSend;
    16. import com.ruoyi.system.mapper.SysNoticeMapper;
    17. import com.ruoyi.system.mapper.SysNoticeSendMapper;
    18. import com.ruoyi.system.mapper.SysUserMapper;
    19. import com.ruoyi.common.core.service.CommonService;
    20. import com.ruoyi.common.helper.LoginHelper;
    21. import cn.hutool.core.util.ObjectUtil;
    22. import lombok.RequiredArgsConstructor;
    23. @RequiredArgsConstructor
    24. @Service
    25. public class SysCommServiceImple implements CommonService {
    26. @Value("${flowable.message-base-url}")
    27. private String msgBaseUrl;
    28. @Resource
    29. private SysUserMapper userMapper;
    30. @Resource
    31. SysNoticeMapper sysNoticeMapper;
    32. @Resource
    33. private WebSocketServer webSocket;
    34. @Resource
    35. private SysNoticeSendMapper sysNoticeSendMapper;
    36. @Override
    37. public void sendSysNotice(MessageDTO message) {
    38. this.sendSysNotice(message.getFromUser(),
    39. message.getToUser(),
    40. message.getTitle(),
    41. message.getContent(),
    42. message.getCategory());
    43. }
    44. /**
    45. * 发消息
    46. * @param fromUser
    47. * @param toUser
    48. * @param title
    49. * @param msgContent
    50. * @param setMsgCategory
    51. */
    52. @Override
    53. @Transactional(rollbackFor = Exception.class)
    54. public void sendSysNotice(String fromUser, String toUser, String title, String msgContent, String setMsgCategory) {
    55. SysNotice notice = new SysNotice();
    56. notice.setNoticeTitle(title);
    57. notice.setNoticeContent(msgContent);
    58. notice.setNoticeType(setMsgCategory);
    59. notice.setSender(Long.valueOf(fromUser));
    60. notice.setPriority(Constants.PRIORITY_M);
    61. notice.setMsgType(Constants.MSG_TYPE_UESR);
    62. notice.setSendStatus(Constants.HAS_SEND);
    63. notice.setSendTime(new Date());
    64. notice.setMsgType(Constants.MSG_TYPE_UESR);
    65. notice.setStatus("0");
    66. sysNoticeMapper.insert(notice);
    67. // 2.插入用户通告阅读标记表记录
    68. String userId = toUser;
    69. String[] userIds = userId.split(",");
    70. Long noticeId = notice.getNoticeId();
    71. for(int i=0;i
    72. if(ObjectUtil.isNotEmpty(userIds[i])) {
    73. SysUser sysUser = userMapper.selectUserById(Long.valueOf(userIds[i]));
    74. if(sysUser==null) {
    75. continue;
    76. }
    77. SysNoticeSend noticeSend = new SysNoticeSend();
    78. noticeSend.setNoticeId(noticeId);
    79. noticeSend.setUserId(sysUser.getUserId());
    80. noticeSend.setReadFlag(Constants.NO_READ_FLAG);
    81. sysNoticeSendMapper.insert(noticeSend);
    82. JSONObject obj = new JSONObject();
    83. obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
    84. obj.put(WebsocketConst.MSG_USER_ID, sysUser.getUserName());
    85. obj.put(WebsocketConst.MSG_ID, notice.getNoticeId());
    86. obj.put(WebsocketConst.MSG_TXT, notice.getNoticeTitle());
    87. webSocket.sendMessage(sysUser.getUserName(), obj.toJSONString());
    88. }
    89. }
    90. }
    91. @Override
    92. public String getBaseUrl() {
    93. return msgBaseUrl;
    94. }
    95. @Override
    96. public LoginUser getLoginUser() {
    97. LoginUser user = LoginHelper.getLoginUser();
    98. return user;
    99. }
    100. }

  • 相关阅读:
    git查看日志
    【Starrocks docker-compose部署】
    lambda表达式
    并发编程(三)原子性(1)
    [笔记]Springboot入门《五》之单元测试读取配置
    HTTPS一定安全吗
    不用担心JDK17收费了,Oracle 推出 JDK 8 的升级替代品
    岩藻多糖-聚已内酯 Fucoidan-PCL 聚已内酯-PEG-岩藻多糖
    文件复制到u盘后文件夹是空的,怎么恢复?
    20天零基础自学Python | Day7 Number(数字)
  • 原文地址:https://blog.csdn.net/qq_40032778/article/details/133185989