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;@Resourceprivate SysUserMapper userMapper;@ResourceSysNoticeMapper sysNoticeMapper;@Resourceprivate WebSocketServer webSocket;@Resourceprivate SysNoticeSendMapper sysNoticeSendMapper;@Overridepublic 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());}}}@Overridepublic String getBaseUrl() {return msgBaseUrl;}@Overridepublic LoginUser getLoginUser() {LoginUser user = LoginHelper.getLoginUser();return user;}
}
相关文章:
ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(一)
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 1、数据库表方面 在原来sys_notice修改基础上增加一个表叫sys_notice_send 表结构如下: DROP …...

数据结构:二叉树的基本概念
文章目录 1. 二叉树的定义2. 二叉树的特点3. 特殊二叉树斜树满二叉树完全二叉树 4. 二叉树的性质 1. 二叉树的定义 如果我们猜一个100以内的数字,该怎么猜才能理论最快呢? 第一种方式:从1,2一直猜到100, 反正数字都是100以内,总能猜到的 第二种方式:先猜50,如果比结果小,猜75…...
利用Socks5代理IP加强跨界电商爬虫的网络安全
随着跨界电商的兴起,爬虫技术在这个领域变得越来越重要。然而,网络安全一直是一个值得关注的问题。在本文中,我们将讨论如何利用代理IP和Socks5代理来增强跨界电商爬虫的网络安全,确保稳定和可靠的数据采集,同时避免封…...

Spring学习笔记6 Bean的实例化方式
Spring学习笔记5 GoF之工厂模式_biubiubiu0706的博客-CSDN博客 Spring为Bean提供了多种实例化方式,通常包括4中(目的:更加灵活) 1.通过构造方法实例化 2.通过简单工厂模式实例化 3.通过factory-bean实例化 4.通过FactoryBean接口实例化 新建模块 spring-005 依赖 <!--S…...
大二毕设.3-网盘系统-用户模块讲解
目录 模块功能介绍 具体实现讲解 constants层:存放用户模块常量类 entity层:存放实体类,与数据库中的属性值基本保持一致 mapper层:对数据库进行数据持久化操作 service层:业务逻辑层,主要是针对具体…...

(Vue2)智慧商城项目
新增两个目录api、utils api接口模块:发送ajax请求的接口模块 utils工具模块:自己封装的一些工具方法模块 第三方组件库vant-ui PC端:element-ui(element-plus) ant-design-vue 移动端:vant-ui Mint UI…...

Nginx实战
虚拟主机 虚拟主机指的就是⼀个独⽴的站点,具有独⽴的域名,有完整的www服务,例如⽹站、FTP、邮件等 。Nginx⽀持多虚拟主机,在⼀台机器上可以运⾏完全独⽴的多个站点。⼀些草根流量站⻓,常会搭建个⼈站点进⾏资源分享交…...
day-57 代码随想录算法训练营(19)动态规划 part 17
647.回文子串 思路:动态规划 1.dp存储:判断以i开始,j结尾的字符串是否是回文串2.动态转移方程:当s[i]s[j]时,如果j-i<1,d[i][j]true; 如果 dp[i1][j-1]true,那么dp[i][j…...

在项目中,关于前端实现数据可视化的技术选择
前言 在项目中,数据可视化以图表、报表类型为主。 需求背景 技术框架是Vue2.x版本,组件库是Ant Design of Vue能够支撑足够多的图表类型开发图表大小/位置能够随意变动图表样式需要支持丰富多样的用户配置强大、开放的图表语法支持复杂的数据可视化场景…...

DT 卡通材质学习 一
渐变着色器 相交线 笔刷和卡通结合使用 修改器...
【游戏引擎架构】6.2 资源管理器
资源管理器可以分为离线部分系统和运行时系统 文章目录 离线资源管理数据库资产管道 运行时资源管理文件结构内存管理文件间引用 离线资源管理 数据库 UE的数据库可以直接浏览、编辑资产,看到运行时的状态;但也存在两个较大的缺点: 版本管…...

spring的ThreadPoolTaskExecutor装饰器传递调用线程信息给线程池中的线程
概述 需求是想在线程池执行任务的时候,在开始前将调用线程的信息传到子线程中,在子线程完成后,再清除传入的数据。 下面使用了spring的ThreadPoolTaskExecutor来实现这个需求. ThreadPoolTaskExecutor 在jdk中使用的是ThreadPoolExecutor…...

转载 - 洞察问题本质,解决工作难题
作者:关苏哲 高效管理者的三大技能 问题界定的6个问题 1.你所需要解决的问题是什么? 2.你为什么需要解决这个问题? 3.你期待的理想结果是什么? 4.这个问题包括哪些子问题? 5.你曾经尝试过哪些解决方式?…...

关于计算机找不到d3dx9_43.dll,无法继续执行代码修复方法
d3dx9_43.dll是一个动态链接库文件,它是DirectX的一个组件,主要用于处理游戏中的图形、声音等多媒体元素。当这个文件丢失时,可能会导致以下问题: 1. 游戏无法正常运行:由于d3dx9_43.dll负责处理游戏中的多媒体元素&a…...

《从零开始的Java世界》01基本程序设计
《从零开始的Java世界》系列主要讲解Javase部分,从最简单的程序设计到面向对象编程,再到异常处理、常用API的使用,最后到注解、反射,涵盖Java基础所需的所有知识点。学习者应该从学会如何使用,到知道其实现原理全方位式…...

【数据开发】数据全栈知识架构,数据(平台、开发、管理、分析)
文章目录 一、数据全栈知识架构1、数据方法(思维,统计学,实践,北极星)2、数据工具:数据仓库3、数据规范 二、数据分析工具1、大数据平台2、数据开发:入库计算(重点)3、数…...

基于STM32的宠物托运智能控制系统的设计(第十七届研电赛)
一、功能介绍 使用STM32作为主控设备,通过DHT11温湿度传感器、多合一空气质量检测传感器以及压力传感器对宠物的托运环境中的温湿度、二氧化碳浓度和食物与水的重量进行采集,将采集到的信息在本地LCD显示屏上显示,同时,使用4G模块…...

数据结构的奇妙世界:实用算法与实际应用
文章目录 数据结构和算法的基本概念数据结构数组链表栈队列树图 算法 常见的数据结构和算法排序算法快速排序示例 数据结构的应用数据库管理系统图像处理网络路由 数据结构和算法的性能分析时间复杂度空间复杂度 如何更好地编写代码避免常见错误结论 🎉欢迎来到数据…...

uniapp实现表格冻结
效果图如下: 思路: 1.由于APP项目需要,起初想去插件市场直接找现成的,结果找了很久没找到合适的(有的不支持vue2有的不能都支持APP和小程序) 2.后来,就只能去改uni-table源码了,因…...

Spring面试题11:什么是Spring的依赖注入
该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的依赖注入 依赖注入(Dependency Injection)是Spring框架的一个核心特性,它是指通过外部容器将对象的依赖关系注入到对象中,从而…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...