当前位置: 首页 > news >正文

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源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 1、数据库表方面 在原来sys_notice修改基础上增加一个表叫sys_notice_send 表结构如下&#xff1a; DROP …...

数据结构:二叉树的基本概念

文章目录 1. 二叉树的定义2. 二叉树的特点3. 特殊二叉树斜树满二叉树完全二叉树 4. 二叉树的性质 1. 二叉树的定义 如果我们猜一个100以内的数字,该怎么猜才能理论最快呢? 第一种方式:从1,2一直猜到100, 反正数字都是100以内,总能猜到的 第二种方式:先猜50,如果比结果小,猜75…...

利用Socks5代理IP加强跨界电商爬虫的网络安全

随着跨界电商的兴起&#xff0c;爬虫技术在这个领域变得越来越重要。然而&#xff0c;网络安全一直是一个值得关注的问题。在本文中&#xff0c;我们将讨论如何利用代理IP和Socks5代理来增强跨界电商爬虫的网络安全&#xff0c;确保稳定和可靠的数据采集&#xff0c;同时避免封…...

Spring学习笔记6 Bean的实例化方式

Spring学习笔记5 GoF之工厂模式_biubiubiu0706的博客-CSDN博客 Spring为Bean提供了多种实例化方式,通常包括4中(目的:更加灵活) 1.通过构造方法实例化 2.通过简单工厂模式实例化 3.通过factory-bean实例化 4.通过FactoryBean接口实例化 新建模块 spring-005 依赖 <!--S…...

大二毕设.3-网盘系统-用户模块讲解

目录 模块功能介绍 具体实现讲解 constants层&#xff1a;存放用户模块常量类 entity层&#xff1a;存放实体类&#xff0c;与数据库中的属性值基本保持一致 mapper层&#xff1a;对数据库进行数据持久化操作 service层&#xff1a;业务逻辑层&#xff0c;主要是针对具体…...

(Vue2)智慧商城项目

新增两个目录api、utils api接口模块&#xff1a;发送ajax请求的接口模块 utils工具模块&#xff1a;自己封装的一些工具方法模块 第三方组件库vant-ui PC端&#xff1a;element-ui&#xff08;element-plus&#xff09; ant-design-vue 移动端&#xff1a;vant-ui Mint UI…...

Nginx实战

虚拟主机 虚拟主机指的就是⼀个独⽴的站点&#xff0c;具有独⽴的域名&#xff0c;有完整的www服务&#xff0c;例如⽹站、FTP、邮件等 。Nginx⽀持多虚拟主机&#xff0c;在⼀台机器上可以运⾏完全独⽴的多个站点。⼀些草根流量站⻓&#xff0c;常会搭建个⼈站点进⾏资源分享交…...

day-57 代码随想录算法训练营(19)动态规划 part 17

647.回文子串 思路&#xff1a;动态规划 1.dp存储&#xff1a;判断以i开始&#xff0c;j结尾的字符串是否是回文串2.动态转移方程&#xff1a;当s[i]s[j]时&#xff0c;如果j-i<1,d[i][j]true; 如果 dp[i1][j-1]true&#xff0c;那么dp[i][j…...

在项目中,关于前端实现数据可视化的技术选择

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

DT 卡通材质学习 一

渐变着色器 相交线 笔刷和卡通结合使用 修改器...

【游戏引擎架构】6.2 资源管理器

资源管理器可以分为离线部分系统和运行时系统 文章目录 离线资源管理数据库资产管道 运行时资源管理文件结构内存管理文件间引用 离线资源管理 数据库 UE的数据库可以直接浏览、编辑资产&#xff0c;看到运行时的状态&#xff1b;但也存在两个较大的缺点&#xff1a; 版本管…...

spring的ThreadPoolTaskExecutor装饰器传递调用线程信息给线程池中的线程

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

转载 - 洞察问题本质,解决工作难题

作者&#xff1a;关苏哲 高效管理者的三大技能 问题界定的6个问题 1.你所需要解决的问题是什么&#xff1f; 2.你为什么需要解决这个问题&#xff1f; 3.你期待的理想结果是什么&#xff1f; 4.这个问题包括哪些子问题&#xff1f; 5.你曾经尝试过哪些解决方式&#xff1f…...

关于计算机找不到d3dx9_43.dll,无法继续执行代码修复方法

d3dx9_43.dll是一个动态链接库文件&#xff0c;它是DirectX的一个组件&#xff0c;主要用于处理游戏中的图形、声音等多媒体元素。当这个文件丢失时&#xff0c;可能会导致以下问题&#xff1a; 1. 游戏无法正常运行&#xff1a;由于d3dx9_43.dll负责处理游戏中的多媒体元素&a…...

《从零开始的Java世界》01基本程序设计

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

【数据开发】数据全栈知识架构,数据(平台、开发、管理、分析)

文章目录 一、数据全栈知识架构1、数据方法&#xff08;思维&#xff0c;统计学&#xff0c;实践&#xff0c;北极星&#xff09;2、数据工具&#xff1a;数据仓库3、数据规范 二、数据分析工具1、大数据平台2、数据开发&#xff1a;入库计算&#xff08;重点&#xff09;3、数…...

基于STM32的宠物托运智能控制系统的设计(第十七届研电赛)

一、功能介绍 使用STM32作为主控设备&#xff0c;通过DHT11温湿度传感器、多合一空气质量检测传感器以及压力传感器对宠物的托运环境中的温湿度、二氧化碳浓度和食物与水的重量进行采集&#xff0c;将采集到的信息在本地LCD显示屏上显示&#xff0c;同时&#xff0c;使用4G模块…...

数据结构的奇妙世界:实用算法与实际应用

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

uniapp实现表格冻结

效果图如下&#xff1a; 思路&#xff1a; 1.由于APP项目需要&#xff0c;起初想去插件市场直接找现成的&#xff0c;结果找了很久没找到合适的&#xff08;有的不支持vue2有的不能都支持APP和小程序&#xff09; 2.后来&#xff0c;就只能去改uni-table源码了&#xff0c;因…...

Spring面试题11:什么是Spring的依赖注入

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的依赖注入 依赖注入(Dependency Injection)是Spring框架的一个核心特性,它是指通过外部容器将对象的依赖关系注入到对象中,从而…...

用于设计 CNN 的 7 种不同卷积

一 说明 最近对CNN架构的研究包括许多不同的卷积变体&#xff0c;这让我在阅读这些论文时感到困惑。我认为通过一些更流行的卷积变体的精确定义&#xff0c;效果和用例&#xff08;在计算机视觉和深度学习中&#xff09;是值得的。这些变体旨在保存参数计数、增强推理并利用目标…...

备受以太坊基金会青睐的 Hexlink,构建亿级用户涌入 Web3的入口

早在2021年9月&#xff0c;以太坊创始人Vitalik Buterin就曾提出了EIP-4337&#xff08;账户抽象&#xff09;提案&#xff0c;并在去年10月对该提案进一步更新&#xff0c;引发行业的进一步关注。在今年3月&#xff0c;EIP-4337提案正式通过审计&#xff0c;并成为了ERC-4337标…...

合约升级标准 ERC2535 的设计解析和不足

合约升级标准 ERC2535 的设计解析和不足 Safful最近审计了钻石标准的一份实现代码&#xff0c;这一标准是一种新的可升级合约模式。撰写标准是一项值得赞许的事业&#xff0c;但钻石标准及其实现有许多引人担忧的地方。这份代码是过度工程的产物&#xff0c;附带了许多不必要的…...

【Vue】ElementUI实现登录注册

一、搭建项目 二、后台交互 三、CORS跨域 好啦今天到这了&#xff0c;希望能帮到你&#xff01;&#xff01;&#xff01;...

linux 安装 wordpress

文章目录 linux 安装 wordpress1. wordpress 简介2. wordpress功能和特点3. 部署要求4. 环境搭建4.1 部署 nginx4.1.1 新增配置文件 4.2 部署 PHP74.2.1 查看当前版本4.2.2 YUM 安装 PHP74.2.3 查看 PHP 版本4.2.4 启动PHP-FPM4.2.5 修改配置文件4.2.6 重启服务 4.3 部署 mysql…...

LeetCode902最大为 N 的数字组合(相关话题:数位DP问题,递归遍历和减枝)

目录 题目描述 方法一递归遍历和减枝 方法二动态规划 数位DP问题拓展 通用方法论引入 <...

USB总线-Linux内核USB3.0主机控制器驱动框架分析(十二)

1.概述 如下图所示&#xff0c;Linux内核中USB主机体系结构由五部分组成&#xff0c;分别为Application Software、USB Class Driver、USB Core(USB Driver)、USB Host Controller Driver、USB Host Controller。应用程序处于用户空间&#xff0c;通过系统调用访问Class Drive…...

SQL模板-用户留存率计算

在这段实习中&#xff0c;我遇到了用户留存率计算的需求&#xff0c;这里做个总结。 首先来讲下&#xff0c;什么是用户留存&#xff1f; 在互联网行业中&#xff0c;用户在某段时间内开始使用应用&#xff0c;经过一段时间后&#xff0c;仍然继续使用该应用的用户。用户留存一…...

LeakCanary 源码详解(3)

上一篇&#xff1a;LeakCanary源码详解&#xff08;2&#xff09; 如果你是直接刷到这篇的&#xff0c;建议还是从1开始看&#xff0c;然后2&#xff0c;然后是这篇3&#xff0c;如果你只关注这篇的重点hprof 文件定位泄漏位置的感兴趣&#xff0c;可以试试直接读这篇&#xff…...

springboot使用SSE

1、pom文件 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> 2、前端代码 <!DOCTYPE html> <html lang"en"> <head><meta ch…...

医院做网站的意义/网站案例分析

javaGC回收机制 在面试java后端开发的时候一般都会问到java的自动回收机制&#xff08;GC&#xff09;。在了解java的GC回收机制之前&#xff0c;我们得先了解下Java虚拟机的内存区域。 java虚拟机运行时数据区 java虚拟机在执行的过程中会将其管理的内存划分为不用的数据区域&…...

温州市营销网站建设/推广普通话手抄报内容怎么写

我们想要用Python获得一些有关系统的各种信息的时候就不得不想到os的environ&#xff0c;那这里面都具体包含了那些内容呢&#xff1f; 简介 对于官方的解释&#xff0c;environ是一个字符串所对应环境的映像对象。这是什么意思呢&#xff1f;举个例子来说&#xff0c;environ[…...

个人网站与建设毕业论文/seo关键词推广公司

电脑桌面背景不能设置怎么办?一个好的桌面背景会让大家工作或是休闲娱乐的时候感到更加的心情愉悦&#xff0c;而且现在很多人都寻求个性化&#xff0c;系统配置的单一桌面已满足不了他们的需求&#xff0c;如何修改桌面背景成了大家考虑的问题。下面&#xff0c;我们就来看看…...

家电网站设计/泰安做网站公司

问题其他情况情况一情况二情况三总结问题 今日在练习SSM整合时&#xff0c;启动服务访问时遇见一个405异常 前端请求的方式是POST方式 后端页面响应使用的是请求转发 显式修改后端接收方式也不行 后将页面响应的改为重定向就可以了 其他情况 情况一 前端使用post方式…...

网站服务器迁移步骤/小说推广平台有哪些

代理模式的定义是&#xff1a;为一个对象提供代理&#xff0c;来控制对这个对象的访问。 在某些情况下&#xff0c;直接访问对象不方便或者对访问对象增强一些功能&#xff0c;可以使用到代理模式。比如想请一个明星来办一场商业演出&#xff0c;一般都是联系明星的经纪人&…...

图片网站怎么做/手机优化大师下载安装

环境&#xff1a; Nacos 1.4.4 Nginx 1.23.1背景&#xff1a; 部署了Nacos集群&#xff0c;同时使用了Nginx进行负载均衡转发&#xff0c;登陆时提示账号密码错误。不通过转发直接去访问Nacos节点发现能够正常登录。去Nacos的github仓库的Issue查找相关问题&#xff0c;发现已…...