Compare commits

...

738 Commits
v2.2.1 ... 2.X

Author SHA1 Message Date
疯狂的狮子Li
778ee424e6
!252 fix 修复 查询条件写错问题
Merge pull request !252 from 疯狂的狮子Li/dev
2025-12-24 06:12:07 +00:00
疯狂的狮子Li
3b82076b62 fix 修复 查询条件写错问题 2025-12-24 14:11:34 +08:00
疯狂的狮子Li
43e522e35c
!251 fix 修复 判断条件写反问题
Merge pull request !251 from 疯狂的狮子Li/dev
2025-12-24 05:27:47 +00:00
疯狂的狮子Li
b4e1bf2592 fix 修复 判断条件写反问题 2025-12-24 13:11:11 +08:00
疯狂的狮子Li
577bb456a4 remove 删除无用配置类(升级之后问题解决不需要重写了) 2025-12-24 13:07:31 +08:00
疯狂的狮子Li
df130b0455 update easy-es 3.0.0 => 3.0.1 2025-12-23 16:29:40 +08:00
疯狂的狮子Li
d145e3e432 fix 修复 elasticsearch-client 被spring的依赖覆盖导致出现版本兼容问题 2025-12-23 16:21:14 +08:00
疯狂的狮子Li
8923333d3f update 优化 websocket 多线程下IO阻塞的问题 2025-12-23 15:56:20 +08:00
疯狂的狮子Li
b1a7de3bb1 update 优化 增加 HandlerMethodValidationException 参数校验异常连接 2025-12-23 15:31:06 +08:00
疯狂的狮子Li
a87450ec2c
!248 紧急修复 Ip2Region InputStream读取函数导致的OOM问题
Merge pull request !248 from 疯狂的狮子Li/dev
2025-12-23 06:45:57 +00:00
疯狂的狮子Li
672444d9d9 fix 修复 Ip2Region InputStream读取函数导致的OOM问题 2025-12-23 14:45:23 +08:00
疯狂的狮子Li
c6b4014eab update 优化 优化rpc查询实现 减少rpc调用次数 2025-12-23 10:43:27 +08:00
疯狂的狮子Li
1be37bae6b
!247 发布 2.5.2 版本 2025年最后一版
Merge pull request !247 from 疯狂的狮子Li/dev
2025-12-23 01:40:03 +00:00
疯狂的狮子Li
93f9249410 🧨🧨🧨发布 2.5.2 版本 2025年最后一版 2025-12-23 09:28:36 +08:00
疯狂的狮子Li
3ca290b7d7 update 删除错误的配置 2025-12-23 09:23:52 +08:00
疯狂的狮子Li
6f3bc78ebc update anyline 8.7.2-20250603 => 8.7.3-20251210 2025-12-22 13:12:14 +08:00
疯狂的狮子Li
bc86e7e1f0 update snailjob 1.8.0 => 1.9.0 2025-12-22 09:44:28 +08:00
疯狂的狮子Li
ec7d850445 fix 修复 创建租户同步工作流数据 在没有流程定义的情况下不会复制流程类别的问题 2025-12-19 19:39:31 +08:00
疯狂的狮子Li
c09fa60433 update 优化 增强单元格合并处理逻辑 2025-12-19 13:08:27 +08:00
疯狂的狮子Li
972b1248af fix 修复 listenerVariable.getVariable() 获取null问题 2025-12-19 13:06:46 +08:00
疯狂的狮子Li
7185bb64e4 update 优化 增加高安全脱敏方法 2025-12-19 13:06:16 +08:00
疯狂的狮子Li
16e683283e update springboot 3.5.8 => 3.5.9
update springcloud 2025.0.0 => 2025.0.1
2025-12-19 11:32:16 +08:00
疯狂的狮子Li
5a62c58fe3 remove 删除无用工具 2025-12-19 11:07:33 +08:00
疯狂的狮子Li
a24870cc05 update 优化 构建流程参数 2025-12-18 09:44:32 +08:00
疯狂的狮子Li
d68e9e27de update 代码生成字典类型字段新增更新验证策略 2025-12-18 09:43:05 +08:00
疯狂的狮子Li
e8f4828528 update 优化 测试单表和测试树表增加搜索条件 2025-12-18 09:42:27 +08:00
疯狂的狮子Li
2add71a01c update 优化 提示语与待办时间展示 2025-12-15 15:49:03 +08:00
疯狂的狮子Li
7f009f4b09 fix 修复 form_path 输入空字符串导致的问题 2025-12-15 09:42:18 +08:00
疯狂的狮子Li
2787571820 update Ip2Region version to 3.3.1,使用新的xdb文件加载函数优化xdb数据库的加载流程 2025-12-15 09:41:49 +08:00
疯狂的狮子Li
7361519474 fix 修复 工作流类别 顶节点父级可以被修改导致无法加载的问题 2025-12-12 17:16:06 +08:00
疯狂的狮子Li
30195a02f7 fix 修复 微软三方对接参数缺失 2025-12-12 11:41:50 +08:00
疯狂的狮子Li
f9e8b751d6 update ip2region 2.7.0 => 3.3.0 2025-12-12 09:35:26 +08:00
疯狂的狮子Li
fdbffa2b61 update 添加 ID 生成工具类,支持多种 ID 生成方式 2025-12-11 10:25:35 +08:00
疯狂的狮子Li
2c58beca79 fix 修复 获取可驳回节点重复问题(感谢 搬砖的小庄) 2025-12-11 10:20:33 +08:00
疯狂的狮子Li
f72182e589 update 优化 任务执行监听器 传递任务的相关数据 不传递实例相关数据了(避免并行节点覆盖问题) 2025-12-11 09:44:42 +08:00
疯狂的狮子Li
bab2b19604 update 优化 加签判断逻辑 2025-12-11 09:18:18 +08:00
疯狂的狮子Li
79a8e473ce fix 修复 excel 导出多 sheet 合并单元格失效问题 2025-12-10 17:23:18 +08:00
疯狂的狮子Li
9061bdd4cc update warm-flow 1.8.3 => 1.8.4 2025-12-10 17:02:01 +08:00
疯狂的狮子Li
ad10e576bd update warm-flow 1.8.3 => 1.8.4 2025-12-10 16:32:13 +08:00
疯狂的狮子Li
ee735ed10a update 优化 文件上传增加文件内容长度校验 2025-12-10 09:49:45 +08:00
疯狂的狮子Li
513d6cece3 fix 修复 本地文件上传 无法获取文件长度问题 2025-12-09 17:03:58 +08:00
疯狂的狮子Li
c315c41270 update kafka docker镜像升级 使用apache官方镜像 3.6.2 => 3.9.1 2025-12-09 16:47:22 +08:00
疯狂的狮子Li
9db0e10f3d update 优化 日志脱敏改用JsonNode处理提高效率 2025-12-09 16:17:08 +08:00
疯狂的狮子Li
927658cc40 fix 修复 jsonParam 参数可能为空问题 2025-12-09 15:50:25 +08:00
疯狂的狮子Li
63db3e5468 fix 修复 request.getQueryParams() 返回只读类型不可操作问题 2025-12-09 13:00:28 +08:00
疯狂的狮子Li
9d7f870ef0 add 新增 Topiam 赞助商 2025-12-08 13:04:19 +08:00
疯狂的狮子Li
b08d2d11db update 优化 接口访问日志 排除敏感参数输出 2025-12-08 10:07:25 +08:00
疯狂的狮子Li
d6849ae328 update 优化 修改 ossclient 并发配置 2025-12-08 10:03:49 +08:00
疯狂的狮子Li
85f4478d2f update 优化 任务处理增加Lock4j锁支持 2025-12-08 10:03:12 +08:00
AprilWind
23672c120a update 增加SpEL表达式解析异常处理 2025-12-02 19:03:22 +08:00
AprilWind
3be17bc145 refactor 优化工作流服务中的异常处理 2025-12-02 18:42:18 +08:00
AprilWind
d9e5f86efa update 增加SpEL表达式解析异常处理 2025-12-02 18:20:25 +08:00
AprilWind
4bd3467595 update 优化代码生成中的Lock4j锁 2025-12-02 18:18:00 +08:00
AprilWind
8cf324b936 update 优化我的任务查询条件 2025-12-02 18:16:30 +08:00
AprilWind
0e4a01bdf4 fix 修复排他网关执行后,驳回选到未执行的网关 2025-12-02 18:13:21 +08:00
AprilWind
2ef0ca8d58 update 补充操作日志 2025-12-02 18:12:29 +08:00
AprilWind
49a0d38373 fix 修复指定选人审批后 再次驳回到指定选人环节后 全部人能看到待办问题 2025-12-02 18:08:40 +08:00
疯狂的狮子Li
df372fb659 update spring-cloud-alibaba 2023.0.3.4 => 2025.0.0.0
update dubbo 3.3.5 => 3.3.6
2025-11-27 11:17:38 +08:00
疯狂的狮子Li
604856f7c2 update 优化 脱敏工具类支持灵活配置可见长度和掩码长度 2025-11-24 17:09:51 +08:00
疯狂的狮子Li
ddfa8a2601 update 优化 参数配置服务 增加多种配置获取方法,支持不同类型的配置解析 2025-11-24 17:08:45 +08:00
疯狂的狮子Li
36cc2ea1e2 update 优化 流程定义发布检查 确保流程在执行前已发布 2025-11-24 17:05:48 +08:00
疯狂的狮子Li
2043c1c158 update 增加 fory 开启日志说明 2025-11-24 11:55:13 +08:00
疯狂的狮子Li
478d6ebe33 update springboot 3.5.7 => 3.5.8
update springdoc 2.8.13 => 2.8.14
update redisson 3.51.0 => 3.52.0
update fury 更名为 fory 0.9.0 => 0.13.1
2025-11-24 10:53:59 +08:00
疯狂的狮子Li
829c19e806 reset 回滚 snailjob 1.8.1版本到1.8.0版本 出现严重依赖冲突问题 2025-11-20 17:46:49 +08:00
疯狂的狮子Li
c62425e2ea update 优化消息发送逻辑,增加异常处理并记录未处理的消息类型 2025-11-20 17:07:12 +08:00
疯狂的狮子Li
f5bf38f16f update 优化 pg 字段类型适配 2025-11-19 17:42:57 +08:00
疯狂的狮子Li
f58137c60c update 优化 将特殊方法改为私有禁止不懂的用户乱用 2025-11-19 16:32:48 +08:00
疯狂的狮子Li
4a870fa135 update 优化 删除业务ID的方法,支持字符串类型的业务ID 2025-11-19 16:32:10 +08:00
疯狂的狮子Li
0ef3439750 fix 修复 更新sql书写错误 2025-11-14 13:22:14 +08:00
疯狂的狮子Li
e840387fab update 优化 支持创建上传请求的预签名URL 2025-11-13 16:36:44 +08:00
疯狂的狮子Li
0ddb6dee67 update snailjob 1.8.0 => 1.8.1
update warmflow 1.8.2 => 1.8.3
2025-11-13 16:35:09 +08:00
疯狂的狮子Li
2e3fe5804e update 优化 更正注释描述错误 2025-11-13 16:34:12 +08:00
疯狂的狮子Li
65dad95e3b update 优化 !781Excel 模版动态数据下拉 泛型逻辑 2025-11-11 19:01:48 +08:00
疯狂的狮子Li
965fe349f6 add 增加 Excel模版动态数据下拉 2025-11-11 10:05:14 +08:00
疯狂的狮子Li
411c551f90 fix 修复 申请人提交可直接结束流程 2025-11-11 10:05:14 +08:00
LiYaoheng
f0931258a1 !243 fix 增加remote调用dictTypeVo类转换mapper。完善引用注解声明方便阅读代码
* fix 增加remote调用dictTypeVo类转换mapper。完善引用注解声明方便阅读代码
2025-11-05 06:47:29 +00:00
疯狂的狮子Li
3df354dbd4 fix 修复 变量错误问题 2025-10-28 16:51:55 +08:00
疯狂的狮子Li
7e54246af2 update 客户端管理新增客户端key唯一校验逻辑 2025-10-28 11:24:52 +08:00
疯狂的狮子Li
d568797ba4
!242 发布 2.5.1 正式版 日常依赖升级bug修复
Merge pull request !242 from 疯狂的狮子Li/dev
2025-10-28 03:22:22 +00:00
疯狂的狮子Li
00a1eeb088 fix 修复 版本号提交错误 2025-10-28 11:19:38 +08:00
疯狂的狮子Li
6bfa87a7e6 🐳🐳🐳发布 2.5.1 正式版 日常依赖升级bug修复 2025-10-28 11:16:11 +08:00
疯狂的狮子Li
299b56af4f update springboot 3.5.6 => 3.5.7 2025-10-27 09:41:09 +08:00
疯狂的狮子Li
5e2692bc43 fix 修复 seata 表字段长度可能会不够问题 2025-10-23 14:09:50 +08:00
疯狂的狮子Li
a4ac09efd9 fix 修复 全局处理器不生效问题 根据官方issue改为特殊写法(不理解为什么 https://github.com/apache/fesod/issues/648) 2025-10-22 14:21:29 +08:00
疯狂的狮子Li
17bca63e37 fix 修复 查询任务扩展数据不存在导致的空报错 2025-10-22 11:31:37 +08:00
疯狂的狮子Li
37fe228d5e update springcloud-alibaba 2023.0.3.3 => 2023.0.3.4 2025-10-22 09:51:50 +08:00
AprilWind
7a36e85b8c update 优化 sse 修复相同token历史连接未关闭问题 2025-10-20 16:15:35 +08:00
AprilWind
15d938448b update warm-flow 升级 1.8.2 2025-10-20 16:13:50 +08:00
疯狂的狮子Li
b4e645ef66 fix 修复 查询pg类型问题 2025-10-15 18:03:50 +08:00
wlb
422760dde7 !241 fix 翻译时异常导致json序列化结构体不符合预期
* fix 翻译时异常导致json序列化结构体不符合预期
2025-10-15 05:25:25 +00:00
疯狂的狮子Li
a7207e11f7 fix 修复 orderby属性书写重复问题 2025-10-14 18:54:12 +08:00
疯狂的狮子Li
81255a921e update 添加菜单可见性和状态字段到菜单树 2025-10-14 18:53:43 +08:00
疯狂的狮子Li
4be304217e fix 修复 降级方法缺失问题 2025-10-11 17:06:30 +08:00
疯狂的狮子Li
743467c021 update 优化 nginx 配置,增强性能与安全性 2025-09-30 10:10:02 +08:00
疯狂的狮子Li
0055e01dc1 update 优化 拦截sse超时异常 不需要额外处理 2025-09-29 13:35:47 +08:00
疯狂的狮子Li
362894a7ec update springboot-admin 3.5.3 -> 3.5.5 修复登录白屏问题 2025-09-29 11:57:52 +08:00
疯狂的狮子Li
5927171aea fix 修复 三方授权 钉钉回调地址未进行url编码问题 由全局编码改为单独编码 避免其他三方调用重复编码 2025-09-28 16:19:01 +08:00
疯狂的狮子Li
ae6c0a7e64 update 优化 删除Threads类 已经不需要了 2025-09-26 15:27:41 +08:00
疯狂的狮子Li
9533adea09 add 增加 同步租户参数配置功能 2025-09-26 11:59:58 +08:00
疯狂的狮子Li
bccbed47eb fix 修复 mybatis内报token异常无法正常返回前端信息 2025-09-26 11:28:03 +08:00
疯狂的狮子Li
63f1deddc3 update 优化工作流常量使用 2025-09-26 11:27:19 +08:00
疯狂的狮子Li
c87601ce39 update 添加 JSON 格式校验注解及实现 2025-09-26 11:25:25 +08:00
疯狂的狮子Li
4c71784c0e update 忽略压缩后的日志文件 *.log.gz 2025-09-26 11:21:28 +08:00
疯狂的狮子Li
905cf33897 update 隐藏 nginx 版本号以增强安全性 2025-09-26 11:21:04 +08:00
疯狂的狮子Li
5ecb06f2d9 update 优化 satoken 异常信息 强制返回json格式 2025-09-26 09:54:50 +08:00
疯狂的狮子Li
a5a86a5c15 update 更新流程案例json文件 2025-09-25 11:58:44 +08:00
疯狂的狮子Li
49b1d65af7 update 优化 后端发起流程增加扩展表对象 2025-09-24 16:58:12 +08:00
疯狂的狮子Li
50bcac1c73
!239 发布 2.5.0 喜迎国庆
Merge pull request !239 from 疯狂的狮子Li/dev
2025-09-22 03:18:10 +00:00
疯狂的狮子Li
057e3540a9 发布 2.5.0 喜迎国庆🧨🧨🧨 2025-09-22 11:15:10 +08:00
疯狂的狮子Li
26961919e1 update snailjob 1.7.2 => 1.8.0 2025-09-22 11:14:25 +08:00
疯狂的狮子Li
789273d0d9 Revert "update warm-flow 升级 1.8.2-m2"
This reverts commit 0fff64da20cfa3733ee2b8e2344b1193886ff6a1.
2025-09-22 11:09:00 +08:00
疯狂的狮子Li
35e38d5766 update 历史日志文件增加压缩 2025-09-22 11:06:24 +08:00
疯狂的狮子Li
0fff64da20 update warm-flow 升级 1.8.2-m2 2025-09-19 17:54:30 +08:00
疯狂的狮子Li
0082a60970 update 优化 更新ip2region.xdb文件 2025-09-19 17:46:14 +08:00
疯狂的狮子Li
92c13c23c9 update springboot 3.5.4 => 3.5.6 2025-09-19 14:13:17 +08:00
疯狂的狮子Li
cb83f9d9de update 增加 加密头用来判断数据是否已经被加密了 防止重复加密 2025-09-15 17:15:08 +08:00
疯狂的狮子Li
cce5f53b7a update 增加 加密头用来判断数据是否已经被加密了 防止重复加密 2025-09-15 17:12:27 +08:00
疯狂的狮子Li
8512b66746 update 生成模板前端增加fixed 2025-09-15 15:46:30 +08:00
疯狂的狮子Li
43efa94af9 update springboot-admin 3.5.1 => 3.5.3
update springdoc 2.8.11 => 2.8.13
update mybatis-plus 3.5.12 => 3.5.14
update mapstruct-plus 1.4.8 => 1.5.0
update sms4j 3.3.4 => 3.3.5
update rocketmq-client 2.3.0 => 2.3.4
2025-09-15 12:04:51 +08:00
疯狂的狮子Li
7fe1d90641 update 优化 将dubbo redis集群配置移动到common配置文件里便于修改 2025-09-12 15:15:17 +08:00
疯狂的狮子Li
3b2854adb8 update 优化 增加节点悬浮提示配置开关 2025-09-04 17:41:03 +08:00
疯狂的狮子Li
0d994c97b9 update 优化 SysMenu 的 selectObjs 查询 2025-09-04 17:38:46 +08:00
疯狂的狮子Li
61a4b96831 fix 修复 自定义sql在pg数据库类型异常问题 2025-09-04 15:48:23 +08:00
疯狂的狮子Li
52daba0b36 update 优化 全局日期格式转换逻辑 2025-09-04 15:47:11 +08:00
疯狂的狮子Li
c2c778c0c3 update 优化 岗位页面查询权限问题 2025-09-03 14:16:22 +08:00
疯狂的狮子Li
8c315c0c4d fix 修复 StreamUtils 返回不可变类型报错问题 2025-09-02 16:00:23 +08:00
疯狂的狮子Li
9439ec88ab fix 修复 StreamUtils 返回不可变类型报错问题 2025-09-02 15:59:40 +08:00
疯狂的狮子Li
1dc9bfe304 fix 修复 StreamUtils 返回不可变类型报错问题 2025-09-02 15:52:33 +08:00
疯狂的狮子Li
0122a09c27 fix 修复 工作流通知messageType参数判空逻辑错误的问题 2025-09-02 14:49:02 +08:00
疯狂的狮子Li
6551134460 update 优化 支持子菜单配置默认激活的父菜单activeMenu 2025-09-02 10:52:59 +08:00
疯狂的狮子Li
f6ddae57c4 Revert "update 优化 重写selectOne方法 自动拼接limit 1"
This reverts commit c73d3cdf890461c2db8c69a89608e1724b4dc92d.
2025-09-01 14:27:19 +08:00
疯狂的狮子Li
7316d05874 update 优化 oss远程接口增加扩展字段存储 2025-09-01 14:18:15 +08:00
疯狂的狮子Li
0766ef65c7 fix 修复 json模块配置 默认覆盖了spring module 配置问题 改为让spring自动加载注册 2025-09-01 12:04:19 +08:00
疯狂的狮子Li
66dea77421 add 新增 Excel工具类支持更灵活的自定义导出方式,以便用户分批处理导出数据 2025-09-01 12:03:33 +08:00
疯狂的狮子Li
6dcb3153c2 upadte 优化 Stream流工具类 2025-09-01 12:03:09 +08:00
疯狂的狮子Li
de6fffc6fe update 优化 工作流代码 2025-08-29 10:15:28 +08:00
疯狂的狮子Li
328f5dcdac update 优化 将返回值从bo改为vo 2025-08-29 10:11:16 +08:00
疯狂的狮子Li
4266517ead fix 修复 包名错误 2025-08-29 09:56:55 +08:00
疯狂的狮子Li
2db80ae6da update 优化 支持后端监听器解析节点扩展数据到流程变量(按钮权限 抄送人 扩展变量) 2025-08-28 18:10:39 +08:00
疯狂的狮子Li
971f0070f7 update 优化 支持前端返回节点扩展数据(按钮权限 抄送人 扩展变量) 2025-08-28 18:08:49 +08:00
疯狂的狮子Li
7c341548c4 update 解析扩展属性 JSON,构建 Node 扩展属性对象,增强代码可读性 2025-08-28 18:07:31 +08:00
疯狂的狮子Li
85160be7f7 update 添加抄送设置和变量枚举,优化扩展节点配置逻辑 2025-08-28 18:05:20 +08:00
疯狂的狮子Li
d41e373f8b update 优化 流程实例业务扩展的保存和删除逻辑,增强代码可读性 2025-08-28 18:03:01 +08:00
疯狂的狮子Li
fc6d45d8c9 fix 修复 菜单与部门 未做角色状态判断 2025-08-27 17:59:46 +08:00
疯狂的狮子Li
bf0130dea6 update hutool 5.8.38 => 5.8.40 默认支持了验证码不生成负数 2025-08-27 17:57:56 +08:00
疯狂的狮子Li
fbe9cf506b upadte 优化 Excel单元格合并处理器代码逻辑 2025-08-27 17:56:30 +08:00
疯狂的狮子Li
3151741d87 fix 修复 时间解析类异常问题 2025-08-27 17:55:49 +08:00
疯狂的狮子Li
1ebb552d7f update springdoc 2.8.10 => 2.8.11
update redisson 3.50.0 => 3.51.0
update fastexcel 1.2.0 => 1.3.0
2025-08-25 13:53:54 +08:00
疯狂的狮子Li
426a6c484e update 优化 对三方授权 redirectUri 回调地址进行url编码 2025-08-25 13:52:57 +08:00
疯狂的狮子Li
0c5173c388 update 更新 warm-flow 版本至 1.8.1 2025-08-25 13:52:35 +08:00
疯狂的狮子Li
4ae432713b update 优化 代码生成模板空格对齐 2025-08-25 13:52:05 +08:00
疯狂的狮子Li
d425383d38 update 优化 移除不必要的流程状态颜色配置 2025-08-25 13:51:10 +08:00
疯狂的狮子Li
c710b6365e update springdoc 2.8.9 => 2.8.10 2025-08-21 10:09:34 +08:00
疯狂的狮子Li
415fb76139 reset 回滚错误提交 2025-08-21 09:25:20 +08:00
疯狂的狮子Li
ee68904d59 fix 修复 校验租户账号余额 查询语句错误 2025-08-21 09:21:47 +08:00
疯狂的狮子Li
50fd75bfdd fix 修复 流程重新提交报错问题 2025-08-19 18:02:03 +08:00
疯狂的狮子Li
29af0a1423 add 增加 请假表 申请编号字段sql 2025-08-18 09:44:29 +08:00
疯狂的狮子Li
b3e7bef603 add 增加 流程扩展表sql 2025-08-16 11:48:11 +08:00
疯狂的狮子Li
943d8b0f6f add 增加 流程业务扩展表 flow_instance_biz_ext 2025-08-16 11:41:22 +08:00
疯狂的狮子Li
0ed79627b6 update 优化 验证码校验逻辑 2025-08-15 16:30:33 +08:00
疯狂的狮子Li
643fead8f4 update 优化 验证码校验逻辑 2025-08-15 14:04:48 +08:00
疯狂的狮子Li
e67399c2c7 update 优化 工作流后台发起或审批可以手动设置办理人 2025-08-15 11:29:09 +08:00
Lau
e878adb6e8 !237 update 逻辑删除注释更正改为1
* update 逻辑删除注释更正改为1
2025-08-14 11:12:59 +00:00
花生米
d1d5336762 !236 build(docker): 为 ELK 服务添加时区设置
* build(docker): 为 ELK 服务添加时区设置
2025-08-14 09:35:23 +00:00
疯狂的狮子Li
1b07733a12 update snailjob 1.7.0 => 1.7.2 2025-08-14 09:54:34 +08:00
疯狂的狮子Li
89549569d5 update warm-flow 升级 1.8.0 正式版 2025-08-14 09:54:10 +08:00
疯狂的狮子Li
f0056b0ce1 update seata-server 2.4.0 => 2.5.0 2025-08-13 11:39:17 +08:00
疯狂的狮子Li
c593ed5839 update warm-flow 升级 1.8.0-m3 2025-08-13 10:31:43 +08:00
疯狂的狮子Li
4b51157bc3 update 优化 数据库类型获取和判断逻辑,增强代码可读性 2025-08-13 10:31:06 +08:00
疯狂的狮子Li
d32ba1f92f update 优化 Excel单元格合并代码逻辑,明确处理类职责 2025-08-13 10:29:37 +08:00
疯狂的狮子Li
0daa00e24b update 优化 oss下载接口改用发布订阅的方式替代阻塞流,优化大文件下载时的内存占用 2025-08-12 16:50:26 +08:00
疯狂的狮子Li
14091133c4 update 优化 删除监控无用配置代码(升级之后不需要了) 2025-08-11 14:05:57 +08:00
疯狂的狮子Li
3cc8b1767e update 优化 由spring自己初始化线程池 2025-08-11 10:28:14 +08:00
疯狂的狮子Li
f6500b46f2 fix 修复 未注解字段导致列合并错位的问题 2025-08-07 17:41:00 +08:00
疯狂的狮子Li
8352f25fd9 update 优化 以逗号拼接元素 2025-08-06 18:16:24 +08:00
AprilWind
543be7a809 update 新增支持占位符格式的 ServiceException 构造方法
- 新增 ServiceException(String message, Object... args) 构造器,内部使用 Hutool StrFormatter.format 格式化消息
- 解决日志打印和异常抛出信息格式不统一的问题,统一使用 {} 占位符
- 优化异常消息书写,简化拼接,提升代码可读性和维护性
2025-08-06 11:03:01 +08:00
疯狂的狮子Li
e015970f79 add 增加赞助商 2025-08-06 10:21:27 +08:00
疯狂的狮子Li
b41ed6fd92 add 增加赞助商 2025-08-06 10:08:57 +08:00
疯狂的狮子Li
c8408ae750 fix 修复 撤销终止等操作 都变成退回的问题 2025-08-05 11:56:34 +08:00
疯狂的狮子Li
0f8ae82257 fix 修复 漏改代码 2025-08-04 17:18:02 +08:00
疯狂的狮子Li
a0519521a5 update 优化 调整变量修改 2025-08-04 16:11:57 +08:00
疯狂的狮子Li
986082eef3 fix 临时修复 warmflow的bug 2025-08-04 14:36:42 +08:00
疯狂的狮子Li
633252f730 update snailjob 1.6.0 => 1.7.0(新增的网卡配置有异常等待官方修复 不耽误正常使用) 2025-08-04 14:35:51 +08:00
疯狂的狮子Li
716ea1deff update work-flow 1.6.8 => 1.8.0-m1 2025-08-04 11:17:42 +08:00
疯狂的狮子Li
0eeb2a144b update 优化 办理人权限设置列表 2025-08-04 10:40:10 +08:00
疯狂的狮子Li
a8de8886ec update 全局替换为 Convert.toStr 优化 null 字符串处理 String.valueOf 这个方法有问题会把null变成"null"慎用 2025-08-04 10:33:23 +08:00
疯狂的狮子Li
78c6580e28 update 优化 升级jdk版本 2025-08-01 17:24:35 +08:00
疯狂的狮子Li
087f5d5058 update 优化 setCacheObject 简化写法 2025-08-01 16:33:07 +08:00
疯狂的狮子Li
9dc682ff03 fix 修复 最新版本gateway不传递X-Forwarded-Prefix请求头导致doc文档无法获取 2025-08-01 12:47:49 +08:00
疯狂的狮子Li
4a637756bb update 优化 isLogin 判断逻辑 2025-07-31 10:20:49 +08:00
疯狂的狮子Li
3f1e97da2b update 优化 PlusSaTokenDao 删除key同步删除本地缓存 2025-07-31 10:20:22 +08:00
疯狂的狮子Li
2bb9ec9899 fix 修复 依赖漏删 2025-07-31 09:22:11 +08:00
疯狂的狮子Li
5c6ff3fe54 fix 修复 监控代码报错问题 2025-07-30 16:58:47 +08:00
疯狂的狮子Li
64b7bd5b6c update 优化 去除nacos无用依赖 2025-07-30 16:38:43 +08:00
疯狂的狮子Li
4557bc30b6 update springboot 3.4.7 => 3.5.4
update springcloud 2024.0.0 => 2025.0.0
update springboot-admin 3.4.7 => 3.5.1
update springdoc 2.8.8 => 2.8.9
update lombok 1.18.36 => 1.18.38
2025-07-30 16:16:10 +08:00
疯狂的狮子Li
c73d3cdf89 update 优化 重写selectOne方法 自动拼接limit 1 2025-07-30 15:13:50 +08:00
疯狂的狮子Li
ba780cb444 update 优化 数据权限注解全部交给AOP处理,使用自定义动态方法匹配器匹配注解 2025-07-30 09:16:34 +08:00
疯狂的狮子Li
a2392acad6 fix 修复 snailjob 未判断配置空的情况 2025-07-29 14:28:17 +08:00
疯狂的狮子Li
44a5eb2ec9 update 优化 调整自动审批代码逻辑 2025-07-28 17:40:55 +08:00
疯狂的狮子Li
0f0fb92ff6 update 优化 getBackTaskNode 获取驳回节点接口 如果是委派直接返回当前节点 不允许驳回到其他节点 2025-07-28 17:32:59 +08:00
疯狂的狮子Li
36298c79f0 fix 修复 委托、转办时nextTasks为空导致空指针的问题 2025-07-28 17:31:59 +08:00
花生米
f8152410e3 !233 fix 日志不输出文件,add logback-common.xml
* fix 日志不输出文件,add logback-common.xml
2025-07-28 08:44:09 +00:00
疯狂的狮子Li
d5e4a069d4 update 增加国内文档加速地址 2025-07-28 13:38:42 +08:00
AprilWind
d68ff10e6f fix 修复权限判断逻辑 2025-07-26 16:59:12 +08:00
AprilWind
3cb0567b3b fix 修复权限判断逻辑 2025-07-26 16:42:13 +08:00
疯狂的狮子Li
35937624b2 fix 修复 个人中心数据被脱敏问题 2025-07-25 16:37:55 +08:00
疯狂的狮子Li
1bc23099aa fix 修复 权限为null导致报错问题 2025-07-25 15:48:26 +08:00
疯狂的狮子Li
36e18aa71e fix 修复 监听器变量使用错误 2025-07-24 15:24:10 +08:00
疯狂的狮子Li
30653c6d0f update 优化 调整上传超时时间 2025-07-23 17:47:49 +08:00
疯狂的狮子Li
f5729d040d add 增加 催办接口 调整消息发送 2025-07-22 18:15:26 +08:00
疯狂的狮子Li
7ab62a89be add 增加 修改流程变量接口 2025-07-22 18:11:04 +08:00
疯狂的狮子Li
e3b449e91e update 优化 getInfo 接口忽略数据权限 2025-07-22 18:09:01 +08:00
疯狂的狮子Li
4f42258f99 update 优化 删除无用代码 2025-07-22 10:33:21 +08:00
疯狂的狮子Li
e0f68ef605 remove 重大改动 删除sentinel所有相关功能(为什么删除 查看文档详细说明 https://plus-doc.dromara.org/#/questions/sentinel_404) 2025-07-21 16:40:56 +08:00
疯狂的狮子Li
2c93bdc5dd update 更新 snailjob 版本到1.6.0 2025-07-19 23:53:47 +08:00
疯狂的狮子Li
5f3597bffb update 新增赞助商 2025-07-19 23:48:40 +08:00
疯狂的狮子Li
3b06e02394 fix 修复 oracle数据库无法使用不等于语法问题 2025-07-17 16:19:35 +08:00
疯狂的狮子Li
946fb57116 update 优化 对登录也租户列表接口进行限流 防止盗刷 2025-07-17 15:16:18 +08:00
疯狂的狮子Li
9599f41f7e update 优化 增加请求流程后端发起demo案例 2025-07-17 14:39:03 +08:00
疯狂的狮子Li
d07b047dcc fix 修复 退回后审批记录申请人错误 #ICMEJ1 2025-07-17 14:36:35 +08:00
疯狂的狮子Li
967cc6e4f7 update 优化 支持在监听器设置流程变量 2025-07-15 17:03:57 +08:00
疯狂的狮子Li
bb51b61072 fix 修复 seata-server 缺少依赖问题 2025-07-14 15:56:26 +08:00
疯狂的狮子Li
7373a58dfb update 优化 菜单权限查询 2025-07-14 10:59:38 +08:00
疯狂的狮子Li
a899fefc13 fix 修复 设计器画线驳回到申请人后状态未修改 2025-07-14 09:35:25 +08:00
疯狂的狮子Li
792a4b7e37 update 优化 日志脱敏支持List参数 2025-07-11 18:14:56 +08:00
疯狂的狮子Li
ccacb64c47 update 优化 屏蔽无用警告 2025-07-11 15:55:13 +08:00
疯狂的狮子Li
304fa68276 update 优化 判断流程是否已结束 2025-07-10 17:40:25 +08:00
疯狂的狮子Li
33bd7c11a1 update 优化 任务创建监听器 使用下一个节点的任务数据 2025-07-10 17:07:17 +08:00
疯狂的狮子Li
df8fa77e63 update 优化 增加指定全局使用ip网段配置 并默认关闭sentinel使用 2025-07-09 17:15:26 +08:00
疯狂的狮子Li
5d2156cb5e update 优化 工作流任务创建监听器 传递流程参数 2025-07-09 10:41:08 +08:00
疯狂的狮子Li
4244567d2e update 优化 监控使用springSecurity新语法 2025-07-09 09:57:22 +08:00
疯狂的狮子Li
29a78eba27 fix 修复 代码生成 setIsRequired 标志写反 2025-07-09 09:36:45 +08:00
疯狂的狮子Li
b54bece04d update 优化 流程分类新增修改 2025-07-08 18:16:55 +08:00
疯狂的狮子Li
38feed5469 update 优化 SpEL表达式回显查询条件 2025-07-08 17:50:41 +08:00
疯狂的狮子Li
066d48f7b3 fix 修复 satokenDao 无法更新已存在数据的ttl问题 2025-07-08 14:34:30 +08:00
疯狂的狮子Li
999203665a update 优化 sse 登录校验 避免大量报错 2025-07-07 15:46:07 +08:00
疯狂的狮子Li
28daad748d update 优化 sql版本号更新 2025-07-07 15:29:37 +08:00
疯狂的狮子Li
1a6460bcc3 update 优化 删除无用接口 2025-07-07 15:28:28 +08:00
疯狂的狮子Li
d48bbab086 update 优化 接口防重和加锁 2025-07-07 09:29:30 +08:00
疯狂的狮子Li
beb7c55757 update 优化 租户字典同步逻辑代码并添加注释 2025-07-07 09:20:03 +08:00
疯狂的狮子Li
7141e855bb update 优化 SpEL表达式回显名称 2025-07-07 09:18:42 +08:00
疯狂的狮子Li
b77152357f update 优化 补充工作流动态启用注解 2025-07-07 09:15:58 +08:00
MichelleChung
a4d21e06c0 !229 新增工作流扩展spel表达式
* add: 新增 FlowSpel 相关 sql 脚本 ;
2025-07-06 07:52:47 +00:00
疯狂的狮子Li
77a245c13b update 优化根部门不允许删除以及办理人权限名称回显 2025-07-06 15:38:29 +08:00
疯狂的狮子Li
edac6074fb fix 修复 easy-es 启动报错问题 2025-07-06 15:16:46 +08:00
疯狂的狮子Li
2656fcc956 update 优化 删除无用注释 导致代码报null问题 2025-07-06 10:51:13 +08:00
疯狂的狮子Li
7488b091bc update 优化 校验角色是否有数据权限 2025-07-06 10:50:23 +08:00
疯狂的狮子Li
483107955e update 优化 删除无用注释 2025-07-04 18:20:44 +08:00
疯狂的狮子Li
8dc266055c update 优化 发号器工具类便利性优化 2025-07-04 17:48:07 +08:00
疯狂的狮子Li
09c484f496 fix 修复 错误修改导致页面逻辑错误 2025-07-04 17:43:26 +08:00
疯狂的狮子Li
348e8eb5fe update 优化 代码增加注释与深化权限判断 2025-07-04 17:02:16 +08:00
疯狂的狮子Li
753b456b4e update 优化 增加岗位修改校验 2025-07-04 15:31:04 +08:00
疯狂的狮子Li
f852949c22 update 重构用户 角色 部门 菜单的数据权限设计逻辑更符合实际业务场景与优化查询写法提高效率 2025-07-04 15:01:06 +08:00
疯狂的狮子Li
e668e524b2 update 优化 屏蔽掉无用接口 2025-07-04 09:35:02 +08:00
疯狂的狮子Li
8a2e970c54 update 优化 修改类名 避免无用扫描 2025-07-04 09:20:06 +08:00
疯狂的狮子Li
39079e53aa update 优化 优化工作流代码写法 2025-07-03 13:44:59 +08:00
疯狂的狮子Li
c690a30221 update 优化 增加 SysOssExt 附件扩展字段对象 2025-07-03 10:38:46 +08:00
疯狂的狮子Li
e93a2662a7 update 优化 流程图按审批人分组去重 2025-07-03 10:38:46 +08:00
疯狂的狮子Li
54f04c3cdf update 优化 工作流待办任务查询 2025-07-03 10:38:45 +08:00
AprilWind
0b8b47d857 update 修复分页数据缺少code 2025-07-02 17:27:32 +08:00
疯狂的狮子Li
c846fad872 fix 修复 有某些无聊人士 对一个demo案例提漏洞 CVE-2025-6925 2025-07-02 14:36:29 +08:00
疯狂的狮子Li
df7f282e41 update 优化 工作流代码小改动 2025-07-02 13:47:54 +08:00
疯狂的狮子Li
06b145cb83 update 优化 重构代码逻辑 封装简化方法 2025-07-02 13:45:53 +08:00
疯狂的狮子Li
8ed00aed21
!228 发布 2.4.1 小步迭代修复问题
Merge pull request !228 from 疯狂的狮子Li/dev
2025-07-01 01:13:16 +00:00
疯狂的狮子Li
c519815fd4 🐳🐳🐳发布 2.4.1 小步迭代修复问题 2025-07-01 09:11:21 +08:00
疯狂的狮子Li
cd3a831213 update spring-cloud-alibaba 2023.0.1.2 => 2023.0.3.3
update dubbo 3.3.4 => 3.3.5
2025-06-30 16:30:55 +08:00
疯狂的狮子Li
3b58e0952a fix 修复 修改数据权限漏改语句 2025-06-30 16:30:12 +08:00
疯狂的狮子Li
61ea1b3354 update seata-server 2.3.0 => 2.4.0 (注意此版本改动较多 升级需要严格根据提交记录处理) 2025-06-30 15:46:13 +08:00
疯狂的狮子Li
c39a816689 update 升级 nacos seata sentinel 的tomcat版本到稳定版本 2025-06-30 14:41:32 +08:00
疯狂的狮子Li
4ad0969f0a fix 修复 工作流依赖错误删除问题 2025-06-30 13:17:34 +08:00
疯狂的狮子Li
c64410d0ae update 优化 使用新版数据权限 2025-06-30 10:52:34 +08:00
疯狂的狮子Li
d37a00497d update 优化代码小改动 2025-06-30 10:45:49 +08:00
疯狂的狮子Li
1ab8750cd5 update 优化 Redis缓存监控接口 手动归还连接给连接池 提高效率 2025-06-27 10:56:46 +08:00
疯狂的狮子Li
77dcf4b0d4 update 优化代码 2025-06-27 10:56:09 +08:00
疯狂的狮子Li
af04bc74ed update 优化构建多根节点的树结构(支持多个顶级节点) 2025-06-26 15:17:47 +08:00
疯狂的狮子Li
ee7450c0e8 fix 修复 excel 备注与必填注解指定下标位置问题 去除下标跟随主要注解顺序 2025-06-26 15:15:47 +08:00
疯狂的狮子Li
6e7ecc96cb fix 修复 删除错误的注解导致前端时间不显示问题 2025-06-26 09:54:48 +08:00
疯狂的狮子Li
72001f721e update 优化 删除之前临时修复bug的类 satoken官方已经修复 2025-06-25 17:14:15 +08:00
疯狂的狮子Li
d830a7d5cf update 优化 从工作流api模块去除bus依赖 由使用者主动增加依赖 2025-06-25 17:12:24 +08:00
疯狂的狮子Li
f50d7e85c0 update 优化 全局日期格式转换配置,提升日期参数解析兼容性 2025-06-25 10:16:43 +08:00
疯狂的狮子Li
0aabd18e1c fix 修复 超时时间单位设置错误 应该是毫秒 2025-06-24 11:43:40 +08:00
疯狂的狮子Li
249d7bdcde fix 修复 超时时间单位设置错误 应该是毫秒 2025-06-24 11:42:50 +08:00
疯狂的狮子Li
1c126dc5d3 reset 回滚aws-s3版本 有未知问题 2025-06-24 11:25:15 +08:00
疯狂的狮子Li
84f0bc1832 fix 修复 办理任务时未传参数,导致执行任务无法获取到任务参数的问题 2025-06-23 16:58:50 +08:00
疯狂的狮子Li
d2f43e7f95 fix 修复 升级anyline返回值类型变更导致问题 2025-06-23 14:56:17 +08:00
疯狂的狮子Li
4263ccef62 fix 修复 升级anyline返回值类型变更导致问题 2025-06-23 14:42:47 +08:00
疯狂的狮子Li
cf64f2139f update 优化 sse 超时时间设置为一天 避免连接之后直接关闭浏览器导致连接停滞 2025-06-22 16:41:02 +08:00
疯狂的狮子Li
17c94cdc1a update 更新工作流sql(小改动) 2025-06-20 11:01:28 +08:00
疯狂的狮子Li
679c83e837 update warm-flow1.7.3 => 1.7.4 支持流程图悬浮窗 2025-06-20 10:43:09 +08:00
疯狂的狮子Li
a9f10e4fa4 update spring-boot 3.4.6 => 3.4.7
update satoken 1.42.0 => 1.44.0
update hutool 5.8.35 => 5.8.38
update redisson 3.45.1 => 3.50.0
update aws-s3 2.28.22 => 2.31.67
update anyline 8.7.2-20250101 => 8.7.2-20250603
update maven-compiler-plugin 3.11.0 => 3.14.0
update maven-surefire-plugin 3.1.2 => 3.5.3
2025-06-20 10:31:37 +08:00
疯狂的狮子Li
a6ab750508 update 优化 去除自动注入日志警告改为默认值 避免一大堆人去定时任务搞什么登录 2025-06-20 09:32:10 +08:00
疯狂的狮子Li
1efe1ac78a update 优化 加密模块 解密拦截器 将参数一起解密了 防止参数被多次加密不正常 2025-06-17 11:08:21 +08:00
疯狂的狮子Li
cb545862f4 update 优化 工作流设计器获取任务执行人默认正常状态 2025-06-17 11:05:10 +08:00
疯狂的狮子Li
d26147fb61 update 优化工作流,跳过以 $ 或 # 开头的内置变量表达式解析 2025-06-17 09:32:35 +08:00
疯狂的狮子Li
f26ef3515a fix 修复 snailjob的oracle.sql书写错误 2025-06-16 11:28:46 +08:00
疯狂的狮子Li
ef013bd653 update 删除无用功能 2025-06-13 14:25:16 +08:00
疯狂的狮子Li
751e86298f update 优化 去除snailjob的jvm参数 默认不限制 2025-06-12 17:40:42 +08:00
疯狂的狮子Li
6738d68fa4 update 优化 去除正则校验 无用配置导致问题 2025-06-09 14:54:46 +08:00
疯狂的狮子Li
d97146de98 update 优化 租户套餐菜单查询过滤掉 租户管理相关菜单 2025-06-05 18:29:12 +08:00
疯狂的狮子Li
ca7c0c94f3 update 优化 忽略租户表判断改为精确匹配 2025-06-05 16:48:13 +08:00
疯狂的狮子Li
6d319b13ad update easy-es 2.1.0 => 3.0.0 2025-06-05 15:12:50 +08:00
疯狂的狮子Li
1321a1ec38 update 优化 将debian换为更新更契合的rockylinux(centos作者写的稳定) 升级jdk版本避免漏洞 2025-06-03 17:12:24 +08:00
疯狂的狮子Li
6d7fb33ae0 fix 修复 优化dubbo调用跟satoken无关的场景会报错无上下文问题 2025-06-03 16:11:30 +08:00
疯狂的狮子Li
faa9be7e4e fix 修复 部分数据库转移符解析问题导致路由不生效 统一改为使用单斜杠处理 2025-06-03 11:17:52 +08:00
疯狂的狮子Li
36ab89d582 fix 修复 satoken异步调用需要手动传递上下文 2025-06-03 10:12:28 +08:00
疯狂的狮子Li
66bda00007 fix 修复 justauth 官方代码bug 2025-05-31 00:10:57 +08:00
疯狂的狮子Li
f0ec0811fd fix 修复 demo需要传递 version 字段才能启用乐观锁 2025-05-31 00:09:21 +08:00
疯狂的狮子Li
a28f05c145 fix 修复 地址解析工具类报错#ICBHUQ 2025-05-31 00:08:14 +08:00
疯狂的狮子Li
6d7e8e3822 Merge remote-tracking branch 'origin/dev' into 2.X 2025-05-29 18:17:53 +08:00
疯狂的狮子Li
3f0d0ad82b fix 修复 流程数据重复更新 状态被覆盖 无法完成流程问题 2025-05-29 18:16:57 +08:00
疯狂的狮子Li
b7835ec5bd update 优化 给测试用户增加菜单权限(可不更新) 2025-05-29 17:24:56 +08:00
疯狂的狮子Li
cb4e9a2006 fix 修复 PermissionService 无实现类无法启动问题 2025-05-29 16:26:53 +08:00
疯狂的狮子Li
6fb975fe6b fix 修复 监听器 flowParams 为null报错问题 2025-05-29 16:26:53 +08:00
疯狂的狮子Li
1842103a18 fix 修复 PermissionService 无实现类无法启动问题 2025-05-29 16:19:00 +08:00
疯狂的狮子Li
66e1767979 fix 修复 监听器 flowParams 为null报错问题 2025-05-29 15:42:30 +08:00
疯狂的狮子Li
b87d59aec3
!226 发布 2.4.0 正式版
Merge pull request !226 from 疯狂的狮子Li/dev
2025-05-29 03:29:52 +00:00
疯狂的狮子Li
7cfd8b4d46 🐳🐳🐳发布 2.4.0 正式版 2025-05-29 11:29:13 +08:00
疯狂的狮子Li
16a366b23c update warmflow 升级到正式版 1.7.3 2025-05-29 11:24:41 +08:00
疯狂的狮子Li
81abbb204f update 优化 用户查询添加用户昵称条件 2025-05-29 11:24:25 +08:00
疯狂的狮子Li
4b19b384d3 update 优化 调整任务监听名称 2025-05-29 11:23:40 +08:00
疯狂的狮子Li
a37597ee7d update minio 更新到最新 RELEASE.2025-04-22T22-12-26Z  minio 最后一个未阉割版本 不能再进行升级 在往上的版本功能被阉割 2025-05-29 10:15:42 +08:00
疯狂的狮子Li
44342e32cb update 优化 禁止删除默认流程分类 2025-05-28 16:57:29 +08:00
疯狂的狮子Li
67be46bbb1 update 优化 删除重复执行的代码 2025-05-28 16:56:49 +08:00
疯狂的狮子Li
3bb020c8a9 update 优化 调整菜单顺序 相关菜单放到一起 2025-05-28 11:14:01 +08:00
疯狂的狮子Li
9c9710fa4d update 调整查询流程任务记录 2025-05-28 11:12:24 +08:00
疯狂的狮子Li
bdc5791a21 update 优化 为所有服务增加 实现类模块 2025-05-27 18:18:31 +08:00
疯狂的狮子Li
acb254c867 fix 修复 接口使用错误 2025-05-27 17:56:44 +08:00
疯狂的狮子Li
47a45ab1fc update 优化 工作流代码 2025-05-27 17:28:09 +08:00
疯狂的狮子Li
be0b27a8bc update 优化 删除工作流字体文件(不需要了 改成前端渲染了) 2025-05-27 17:20:09 +08:00
疯狂的狮子Li
92afe12288 update 优化 使用前端显示流程图方式和新增办理人转换接口 2025-05-27 17:19:54 +08:00
疯狂的狮子Li
90b508eaf3 update 优化 删除退回任务bo关于驳回的节点的非空校验 2025-05-27 17:17:03 +08:00
疯狂的狮子Li
f34a92c6a4 fix 修复 dubbo redis 元数据中心 报错找不到元数据问题 官方插件代码实现类有问题 2025-05-27 11:26:20 +08:00
疯狂的狮子Li
7ecb5f3826 update 优化 权限获取 增加用户登录了但是查询的loginId是别人的场景 2025-05-26 16:32:19 +08:00
疯狂的狮子Li
f15e8f1ffa fix 修复 解决通过loginId查询角色和菜单权限 而非当前用户时 报错问题 支持跨服务查询权限信息通过satoken的api 2025-05-26 16:20:48 +08:00
疯狂的狮子Li
01bf26d39f update 重构 ruoyi-common-dict 改为为 ruoyi-common-service-impl 定位变更为通用service实现模块 2025-05-26 16:15:09 +08:00
疯狂的狮子Li
bc99124cbd update minio 更新到最新 RELEASE.2025-05-24T17-08-30Z 2025-05-26 14:44:37 +08:00
疯狂的狮子Li
85567dde0c update mapstruct-plus 1.4.6 => 1.4.8 2025-05-26 14:44:05 +08:00
疯狂的狮子Li
fd285c9c38 update 优化 表格增加border 2025-05-26 14:12:25 +08:00
疯狂的狮子Li
dd77741f75 update springboot 3.4.5 => 3.4.6
update springdoc 2.8.5 => 2.8.8
update mybatis-plus 3.5.11 => 3.5.12
update springboot-admin 3.4.5 => 3.4.7
2025-05-26 14:11:21 +08:00
疯狂的狮子Li
47ed39879d update 优化 调整优化监听 2025-05-26 14:09:08 +08:00
疯狂的狮子Li
3727d04744 add 增加 logicflow流程图预览 2025-05-26 14:03:50 +08:00
疯狂的狮子Li
281d0d336a update 优化 调整流程监听 2025-05-23 18:21:17 +08:00
疯狂的狮子Li
88bec4aaea fix 修复 请假表单菜单sql 展示状态错误问题 2025-05-23 18:18:43 +08:00
疯狂的狮子Li
1917d7234d add 新增 批量级联删除菜单接口 2025-05-23 18:16:09 +08:00
疯狂的狮子Li
845a0e57de update 优化 代码生成ServiceImpl层增加日志注解 2025-05-23 18:13:00 +08:00
疯狂的狮子Li
48fb1d92f3 fix 修复 sql补全分号 2025-05-23 18:12:01 +08:00
疯狂的狮子Li
09c03bfc76 update 优化 新增发号器工具类方法 2025-05-22 18:00:49 +08:00
疯狂的狮子Li
488a5631f4 update 优化 统一请假日期字段格式处理 2025-05-22 17:47:43 +08:00
疯狂的狮子Li
5217bd6a1f update 优化 工作流创建事件 将状态交给业务方处理 2025-05-22 17:46:08 +08:00
疯狂的狮子Li
edd372f4e4 update 优化 动态路由迁移到菜单管理 2025-05-22 17:40:23 +08:00
疯狂的狮子Li
bb11ea218d add 新增 自定义字典值校验器 2025-05-20 14:23:04 +08:00
疯狂的狮子Li
92908f435f update snailjob 1.4.0 => 1.5.0 2025-05-20 13:43:35 +08:00
疯狂的狮子Li
baa93b5337 update 升级 JustAuth的钉钉和微信第三方登录 2025-05-20 13:37:21 +08:00
疯狂的狮子Li
21d00dfcc9 update 升级 warm-flow1.7.0 -> 1.7.2 2025-05-20 13:35:51 +08:00
疯狂的狮子Li
287d5cd5dc add 增加 成员项目地址 2025-05-19 17:09:49 +08:00
疯狂的狮子Li
f77994ba6c add 增加 成员项目地址 2025-05-19 16:06:27 +08:00
疯狂的狮子Li
6c10bc8860 fix 修复 新建租户未复制工作流相关数据问题 2025-05-15 13:22:02 +08:00
疯狂的狮子Li
01b137a08e update 优化 mysql建议版本升级到8.0.42 2025-05-14 18:09:11 +08:00
疯狂的狮子Li
0364cae19a update 优化 redis建议版本升级到7.2.8 2025-05-14 18:02:36 +08:00
疯狂的狮子Li
e83e0548d0 fix 修复 重构导致的问题 2025-05-12 18:27:41 +08:00
疯狂的狮子Li
ec7aa9035a update 优化 假分页方法 2025-05-12 18:24:30 +08:00
疯狂的狮子Li
1edc373b2b add 新增 版本更新sql文件 2025-05-12 13:02:58 +08:00
疯狂的狮子Li
2a413d13df add 新增 对接 gitea 三方单点登录 2025-05-12 12:58:57 +08:00
疯狂的狮子Li
74df9e2bc0 add 新增 自定义 Date 类型反序列化处理器(支持多种格式) 2025-05-12 12:56:45 +08:00
疯狂的狮子Li
c65f3e2f2c add 新增 http请求体读取异常与json解析异常处理 2025-05-12 12:52:54 +08:00
疯狂的狮子Li
8b17bd5d5d update 优化 重构办理人接口 2025-05-12 12:51:53 +08:00
疯狂的狮子Li
21521e4d80 update warm-flow 1.6.10 => 1.7.0 适配代码 2025-05-12 11:50:23 +08:00
疯狂的狮子Li
bf6f18d7b8 update 更新 readme 增加新成员项目 2025-05-12 09:33:49 +08:00
AprilWind
55e97d7edb docs 优化EncryptUtils加解密注释 2025-05-11 13:43:58 +08:00
疯狂的狮子Li
3b5559e562 update 更新 readme 2025-05-09 15:00:52 +08:00
疯狂的狮子Li
9f936349e1 update 优化 compose编排增加snailjob端口防止集群冲突 2025-05-08 23:20:26 +08:00
疯狂的狮子Li
520ac26b88 update 更新 readme 2025-05-08 22:15:21 +08:00
疯狂的狮子Li
dc0b36ac38 update 优化 直接从ClassPath加载ip2region数据库文件 2025-05-06 13:32:07 +08:00
疯狂的狮子Li
ca85b8c223 update 优化 多租户忽略表判断支持忽略大小写 2025-05-06 13:29:13 +08:00
疯狂的狮子Li
e2063ca3c7 update 优化 删除多余的常量 避免用户误解 2025-04-30 15:19:27 +08:00
疯狂的狮子Li
d7c3a7fd67 update 查询系统菜单列表新增菜单类型与父级ID查询条件 2025-04-29 16:31:10 +08:00
疯狂的狮子Li
81817ef631 update 调整 代码顺序 2025-04-28 09:37:46 +08:00
李志家
0e79b6a744 !225 feat(social): 实现 TopIAM 的 code 换取 token功能
* feat(social): 实现 TopIAM 的 code 换取 token功能
2025-04-28 01:36:40 +00:00
疯狂的狮子Li
ccd25a5d46 fix 修复 snailjob http basic验证判断错误 2025-04-27 22:10:21 +08:00
疯狂的狮子Li
2674a0cda2 update 调整sql执行顺序 2025-04-25 18:01:05 +08:00
疯狂的狮子Li
2cc792fe32 update springboot 3.4.4 => 3.4.5 2025-04-25 16:41:40 +08:00
疯狂的狮子Li
c3aa5c3aed update springboot 3.4.4 => 3.4.5 2025-04-25 16:40:31 +08:00
AprilWind
fcf71dee33 update 优化日期与字符串工具类 2025-04-25 13:46:07 +08:00
疯狂的狮子Li
ea429e79a9 update 删除已经不存在的功能 2025-04-25 09:52:12 +08:00
疯狂的狮子Li
72bc3b6227 fix 修复 错误命名 2025-04-25 09:28:58 +08:00
疯狂的狮子Li
baf0d3ed50 update 更新协议地址 2025-04-22 16:08:47 +08:00
疯狂的狮子Li
b8d634a933 update EasyExcel升级原作者FastExcel 2025-04-18 17:46:35 +08:00
疯狂的狮子Li
38fca0c0e5 fix 修复 excel 合并单元格在导出在最后一行无法合并时,之前的数据合并失效问题 2025-04-18 13:31:52 +08:00
AprilWind
98d3f66470 update 优化返回任务指派的列表增加时间查询条件 2025-04-18 12:01:36 +08:00
疯狂的狮子Li
99210f3511 update 优化 getNextNodeList 只获取中间节点用于审批 过滤其他无用节点 2025-04-17 14:01:06 +08:00
疯狂的狮子Li
b7562259a9 fix 修复 nacos 配置文件符号错误 2025-04-16 11:11:43 +08:00
疯狂的狮子Li
6628ead2ea fix 修复 临时处理satoken对dubbo内部调用的情况考虑不周 导致无法获取上下文都bug 2025-04-16 10:25:07 +08:00
疯狂的狮子Li
5f91db4cbe update 优化 缓存注解支持关闭本地缓存 2025-04-14 10:11:10 +08:00
疯狂的狮子Li
52295bdc20 update 优化 实体类统一使用包装类型 2025-04-14 09:37:18 +08:00
疯狂的狮子Li
acb701ad59 update warm-flow 1.6.8 => 1.6.10 2025-04-14 09:34:15 +08:00
疯狂的狮子Li
ad30965ef1 add 新增 一大堆snailjob的demo案例(感谢 老马) 2025-04-13 19:17:49 +08:00
AprilWind
dbc72dea3c update 优化工作流用户查询构建 2025-04-13 15:30:42 +08:00
AprilWind
a8da093a89 update 优化Mybatis异常处理器 2025-04-13 15:27:21 +08:00
AprilWind
d879f1c763 update 优化工作流权限按钮获取,若需要扩展更多按钮权限,只需在 sources 中新增对应的枚举类或字典类型 2025-04-13 15:26:20 +08:00
疯狂的狮子Li
9e1fb0e482 update satoken 1.40.0 => 1.42.0 适配所有升级项(改动较多)
SaLoginModel -> SaLoginParameter
device -> deviceType
satoken BCrypt -> hutool BCrypt(satoken不维护了)
SaTokenDao -> SaTokenDaoBySessionFollowObject(satoken做了重构封装)
sse 适配新satoken版本拦截器变化
2025-04-11 15:37:09 +08:00
疯狂的狮子Li
e7f553fe91 update 优化 统一流程demo 权限人分隔符 2025-04-11 15:08:43 +08:00
鞠聪
fcfa6dc976 !223 更新 RabbitMQ 优化发送和消费手动确认机制
* 更新 RabbitMQ 优化发送和消费手动确认机制
2025-04-10 10:04:53 +00:00
疯狂的狮子Li
465a9a25e9 update bouncycastle 1.76 => 1.80 2025-04-10 17:30:06 +08:00
疯狂的狮子Li
1a5e01cd96 fix 修复 临时解决sa-token使用秒 redis是毫秒导致1秒的精度问题 手动补偿(等satoken官方修复) 2025-04-10 17:23:55 +08:00
AprilWind
b849b00398 update 优化工作流获取流程变量 2025-04-10 17:14:27 +08:00
AprilWind
ac0dbde532 update 统一工作流FlowParams构造方式为建造者模式,提升代码可读性 2025-04-10 17:12:43 +08:00
AprilWind
1102573da3 update 优化工作流流程监听增加节点信息 2025-04-10 17:05:58 +08:00
AprilWind
43f24051fe update 优化工作流办理人权限处理器 2025-04-10 16:56:20 +08:00
疯狂的狮子Li
0264b5f7e9 update 调整注释 删除不存在的错误的东西 2025-04-09 10:25:37 +08:00
疯狂的狮子Li
6012dbdfa8 update 增加赞助商 2025-04-08 10:19:35 +08:00
疯狂的狮子Li
7c056c5090 update 优化 统一校验注解长度 2025-04-08 10:19:24 +08:00
疯狂的狮子Li
eec5940703 update 优化 增加api审批简化方法 2025-04-03 13:35:24 +08:00
疯狂的狮子Li
09fb5bb2da fix 修复选择弹窗会签人员后,会签审批出现每个任务的审批人都是选择的多人 https://gitee.com/dromara/RuoYi-Vue-Plus/issues/IBYCY7 2025-04-03 09:25:34 +08:00
疯狂的狮子Li
33e7faa1d1 fix 修复 在线用户设置过期时间与客户端不同步问题 2025-04-02 14:05:29 +08:00
疯狂的狮子Li
39e6ac9ed4 fix 修复 模板导出多个字段下拉值超过100个异常,采用多个sheet的方案解决。 2025-04-02 13:23:04 +08:00
疯狂的狮子Li
c6b5bb0652 update 优化 Dockerfile 构建文件新增暴露 snailjob 客户端端口 2025-04-01 14:34:26 +08:00
疯狂的狮子Li
32f59ba2ee update 优化 使用 record 简化vo代码 2025-03-31 11:30:45 +08:00
疯狂的狮子Li
3b28b04775 update 优化 seata注解使用新包名 2025-03-31 11:07:41 +08:00
疯狂的狮子Li
850dd7164b update 优化 FlwNodeExtServiceImpl 代码实现 2025-03-31 10:57:43 +08:00
疯狂的狮子Li
00356eaa05 update 优化 sse 删除之后 手动触发完成 防止内存泄漏 2025-03-31 09:42:54 +08:00
疯狂的狮子Li
35b8c6d8e3 update 优化 支持excel方法抛出json异常 2025-03-28 23:13:21 +08:00
疯狂的狮子Li
d45ba32876 Revert "update 优化 支持excel方法抛出json异常"
This reverts commit 6d15b209424e6710bd17591ee8fcf47375e41fc2.
2025-03-28 23:12:57 +08:00
疯狂的狮子Li
6d15b20942 update 优化 支持excel方法抛出json异常 2025-03-28 22:53:54 +08:00
疯狂的狮子Li
0d3d558ebe Merge remote-tracking branch 'origin/dev' into 2.X 2025-03-27 11:31:49 +08:00
疯狂的狮子Li
13fc51849d
!217 update ruoyi-gateway/src/main/java/org/dromara/gateway/utils/WebFluxUtils.java.
Merge pull request !217 from java9/dev
2025-03-27 03:22:46 +00:00
疯狂的狮子Li
9cadcffd7f
!221 发布 2.3.0 正式版
Merge pull request !221 from 疯狂的狮子Li/dev
2025-03-27 02:52:31 +00:00
疯狂的狮子Li
e7b05184a7 🐳发布 2.3.0 正式版 2025-03-27 10:47:18 +08:00
疯狂的狮子Li
3f7673f16b fix 修复 excel模板导出数据被覆盖的问题 2025-03-27 10:04:49 +08:00
疯狂的狮子Li
0b020f5f99 update 优化 统一用户密码校验长度 2025-03-27 09:33:21 +08:00
疯狂的狮子Li
d808ab48cf update mybatis-plus 3.5.10.1 => 3.5.11
update snailjob 1.4.0-beta2 => 1.4.0 正式版
2025-03-26 15:19:45 +08:00
疯狂的狮子Li
058a5a107f fix 修复 workflow 的创建sql 没有包含undo_log表 2025-03-26 10:25:12 +08:00
花伤情犹在
7b47d01ce7 !220 update 使用Dubbo常量替换DUBBO_IP_TO_REGISTRY硬编码
* update 使用Dubbo常量替换DUBBO_IP_TO_REGISTRY硬编码
2025-03-26 01:50:46 +00:00
疯狂的狮子Li
7d2bc6f031 update 优化 新版本seata连接不上会报错 默认改为不启用 有需要自行开启 2025-03-26 09:50:11 +08:00
疯狂的狮子Li
b7fbff5c95 fix 修复 sentinel 配置被内置文件覆盖问题 2025-03-26 09:49:16 +08:00
疯狂的狮子Li
fd867eeebb
!219 发布 2.3.0-BETA2 公测版本
Merge pull request !219 from 疯狂的狮子Li/dev
2025-03-21 07:25:55 +00:00
疯狂的狮子Li
743bd22d79 发布 2.3.0-BETA2 公测版本 2025-03-21 15:19:09 +08:00
疯狂的狮子Li
822f1837e8 update 优化 excel导出 下拉框支持顺序 2025-03-21 15:15:04 +08:00
疯狂的狮子Li
87aef971b8 update 优化 兼容老版本数据权限用户写法 2025-03-21 14:47:07 +08:00
疯狂的狮子Li
c5e2ed541a update springboot 3.4.3 => 3.4.4 2025-03-21 14:46:26 +08:00
疯狂的狮子Li
817a31ab31 fix 修复 seata-server 打包 mysql依赖不加载的问题 2025-03-20 21:13:24 +08:00
疯狂的狮子Li
bf1c5d6611 update 优化 将nacos-server改为jar包内嵌集成 减少工程代码量 2025-03-20 18:44:24 +08:00
疯狂的狮子Li
b45646f48b update 优化 将sentinel-server改为jar包内嵌集成 减少工程代码量 2025-03-20 18:36:39 +08:00
疯狂的狮子Li
4badc08432 update 优化 增加seata-server打包配置 2025-03-20 18:35:59 +08:00
疯狂的狮子Li
6dc7519bdb update seata 1.7.1 => 2.3.0 2025-03-20 17:38:11 +08:00
疯狂的狮子Li
d2fb7da4aa fix 修复 转换id 参数为null报错问题 2025-03-20 16:54:16 +08:00
疯狂的狮子Li
1766247d2f fix 修复 easy-es 关闭开关之后初始化报错 2025-03-20 14:40:51 +08:00
java9
c611dff7f2
update ruoyi-gateway/src/main/java/org/dromara/gateway/utils/WebFluxUtils.java.
遍历ByteBuffer,不然可能会遇到body不完整,现象是日志中打印的参数不全,被截断。

Signed-off-by: java9 <qzzsunly@163.com>
2025-03-19 09:33:50 +00:00
疯狂的狮子Li
2b623c005a fix 修复pg数据库 强类型转换报错 2025-03-19 14:51:23 +08:00
疯狂的狮子Li
f80b29536b fix 修复pg数据库 强类型转换报错 2025-03-19 13:25:53 +08:00
疯狂的狮子Li
820c56cfed update warm-flow 1.6.7 => 1.6.8 2025-03-19 11:38:25 +08:00
疯狂的狮子Li
430ae3a2a4 update 优化 简化 SysTaskAssigneeServiceImpl 代码实现 2025-03-19 10:09:42 +08:00
疯狂的狮子Li
2fd1e36239 update springboot-admin 3.4.2 => 3.4.5
update redisson 3.44.0 => 3.45.1
update sms4j 3.3.3 => 3.3.4
2025-03-18 17:35:33 +08:00
疯狂的狮子Li
c197606cb5 update snailjob 1.3.0 => 1.4.0-beta2 2025-03-18 17:34:44 +08:00
疯狂的狮子Li
c6e72e16dd update 优化 打包默认跳过测试 减少心智难度 2025-03-18 13:44:45 +08:00
疯狂的狮子Li
298874b388 update 优化 修改oss枚举包名与其他模块统一 2025-03-17 09:32:18 +08:00
疯狂的狮子Li
b7633e5d83 remove 删除无用代码 2025-03-14 09:38:34 +08:00
疯狂的狮子Li
84a1540c19 fix 修复 nacos seata sentinel 低版本tomcat相关漏洞 2025-03-14 09:38:07 +08:00
疯狂的狮子Li
9981d6ad58 update 优化 描述错误 2025-03-13 18:43:10 +08:00
疯狂的狮子Li
df5433be75 fix 修复 设计器内查询用户不应该携带数据权限 2025-03-13 18:42:24 +08:00
AprilWind
5a17fb4a68 update 优化工作流办理人标识符解析 2025-03-13 18:00:49 +08:00
AprilWind
04bcc0890c update 优化获取节点扩展属性,简化节点编码 2025-03-13 17:58:41 +08:00
疯狂的狮子Li
3e4727db17 fix 修复 实体类书写错误 2025-03-13 13:39:24 +08:00
疯狂的狮子Li
ed7d11b740 fix 修复 部门树对应前端新树结构缺少字段问题 2025-03-13 12:52:51 +08:00
疯狂的狮子Li
aa7c79885a update 优化 将crt客户端替换为Netty客户端 节约17M打包大小 2025-03-13 11:38:17 +08:00
疯狂的狮子Li
2b3897c302 fix 修复 rocketmq 发送tag消息书写错误 2025-03-13 09:52:33 +08:00
疯狂的狮子Li
ddb4495571 update 优化 增加注解变量名填充 避免用户误操作导致问题 2025-03-12 17:56:47 +08:00
疯狂的狮子Li
44365e09dc fix 修复 关闭验证码后 限流注解仍然生效问题 2025-03-12 17:30:02 +08:00
疯狂的狮子Li
b09dea38f5 Merge remote-tracking branch 'origin/dev' into 2.X
# Conflicts:
#	ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java
#	ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java
#	ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessInstanceController.java
#	ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActTaskController.java
#	ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfCategoryController.java
#	ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfDefinitionConfigController.java
#	ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormManageController.java
#	script/config/nacos/ruoyi-gateway.yml
2025-03-12 15:26:54 +08:00
疯狂的狮子Li
56a6e97ef6 发布 2.3.0-BETA 公测版本 2025-03-12 15:22:24 +08:00
疯狂的狮子Li
b0480823f6 update 优化 将各种脚本文件统一放到script目录下 2025-03-11 16:46:33 +08:00
疯狂的狮子Li
ab61943cc5 update nacos 2.4.3 => 2.5.1 升级数据库需要重新执行 2025-03-11 16:12:19 +08:00
疯狂的狮子Li
08ace3680d fix 修复 流程图颜色错误 2025-03-11 16:05:49 +08:00
疯狂的狮子Li
e6729143c3 update dubbo 3.3.3 => 3.3.4 2025-03-11 14:20:29 +08:00
疯狂的狮子Li
cf8bf6a8b5 update 升级 warm-flow 1.6.7 同步vue版本按钮权限相关代码 2025-03-11 14:13:33 +08:00
疯狂的狮子Li
339cc28249 update 优化工作流设计器获取任务执行人查询正常状态 2025-03-11 13:32:50 +08:00
疯狂的狮子Li
0e28aa7509 update 优化 getLoginUser 方法 支持返回多种类型登陆实体 2025-03-07 15:12:15 +08:00
疯狂的狮子Li
8879fc6f1b update 优化 工作流代码 2025-03-06 17:36:31 +08:00
疯狂的狮子Li
2a231ec72c update 优化 重构将 WorkflowUtils 工具类改为 FlwCommonService 更通用的业务处理 2025-03-06 17:22:24 +08:00
疯狂的狮子Li
eb96432a2f update 优化 将工作流消息发送从工具类迁移到业务内 便于扩展 2025-03-06 16:47:02 +08:00
疯狂的狮子Li
da32c32259 fix 修复 前端树处理优化后 后端缺字段问题 2025-03-06 16:10:17 +08:00
疯狂的狮子Li
820fbe19fc update 优化 text 设置默认值某些版本可能有问题 改为默认null 2025-03-05 15:34:23 +08:00
李中原
4aeff18535 !213 修复 RemoteTaskAssigneeVo$TaskHandler has not implement Serializable int…
* 修复 RemoteTaskAssigneeVo$TaskHandler has not implement Serializable int…
2025-03-05 03:32:07 +00:00
疯狂的狮子Li
31e1055abd update 优化 去除掉无用的final关键字 2025-03-04 18:14:35 +08:00
疯狂的狮子Li
dfc91efff2 update 优化 字段长度使用错误 2025-03-04 10:00:29 +08:00
疯狂的狮子Li
1bbfa0c520 fix 修复 oracle sql脚本字符串类型使用错误 2025-03-04 09:59:41 +08:00
疯狂的狮子Li
58294e0f39 update 优化 sys_oss 表增加扩展字段 ext1 2025-03-04 09:57:31 +08:00
疯狂的狮子Li
3396a590f6 update mybatis-plus 3.5.10 => 3.5.10.1 修复个bug 2025-03-03 13:50:16 +08:00
AprilWind
381e0f0ea1 update 优化校验框架配置类加载顺序,确保优先于默认的验证配置 2025-02-28 16:12:20 +08:00
AprilWind
1a984330a6 update 调整注释错误,补充注释 2025-02-28 16:11:22 +08:00
AprilWind
8aefe455be update 优化删除无用排除 2025-02-27 17:30:42 +08:00
AprilWind
d7b4c5611b fix 修复 临时处理工作流设计器访问不到问题 2025-02-27 17:21:11 +08:00
AprilWind
af4eb55c27 update 删除指定dubbo线程池,改为手动配置,jdk21开启虚拟线程 2025-02-27 16:51:42 +08:00
疯狂的狮子Li
3374176e2e update 优化 由于jdk17编译器无法编译jdk21的代码 改成手动配置 2025-02-27 00:16:31 +08:00
李中原
dc54382af7 !212 修复warm-flow打不开内嵌页面问题
* 修复warm-flow打不开内嵌页面问题
2025-02-26 11:37:40 +00:00
AprilWind
1c1e097dc6 fix 修复warm-flow打不开内嵌页面问题 2025-02-26 15:52:17 +08:00
疯狂的狮子Li
4756403172 fix 修复 oracle 同步字典报错问题 2025-02-25 23:40:49 +08:00
疯狂的狮子Li
f050d8cc7f fix 修复 字段长度错误问题 2025-02-22 09:37:57 +08:00
疯狂的狮子Li
3d7bdb6bed update 优化 租户表企业名与部门表长度保持一致 防止长度不一致报错 2025-02-21 15:41:04 +08:00
疯狂的狮子Li
e98d6649cf update springboot 3.4.2 => 3.4.3
update springdoc 2.8.4 => 2.8.5
2025-02-21 10:10:16 +08:00
疯狂的狮子Li
d6e26fccd8 update 优化 删除多余响应头设置 2025-02-21 09:37:33 +08:00
疯狂的狮子Li
efa6e475ff fix 修复 oracle 新建租户报错问题 2025-02-20 17:48:41 +08:00
疯狂的狮子Li
7ff1b41e19 remove 删除无用代码 2025-02-20 14:36:14 +08:00
疯狂的狮子Li
2e86b8c61c update dubbo 3.2.14 => 3.3.3 支持虚拟线程 2025-02-20 14:35:22 +08:00
疯狂的狮子Li
f1f6e04a67 update 优化 工作流监听器消费切换动态切换租户(mq投递租户丢失) 2025-02-19 15:09:33 +08:00
疯狂的狮子Li
79775a0ac4 update 优化 增加工作流部署字体文件 2025-02-19 15:04:58 +08:00
疯狂的狮子Li
681132674b fix 修复 oracle 表别名不能写as关键字 2025-02-19 13:28:16 +08:00
疯狂的狮子Li
09ed003ea4 update 优化 ProcessTaskEvent 改名为 ProcessCreateTaskEvent 避免错误理解 2025-02-19 09:46:06 +08:00
AprilWind
0dc0e64caa update 优化部门下岗位名称重复 2025-02-19 09:14:11 +08:00
秋辞未寒
e67aa57cb3 update 优化 根部门祖级列表常量和备注,以避免歧义 2025-02-17 19:59:04 +08:00
疯狂的狮子Li
4c5ab7bcaf fix 修复 去除无用前缀 2025-02-17 17:04:36 +08:00
疯狂的狮子Li
95d8619c94 update 优化 将flowable案例更换为warmflow案例 2025-02-17 16:51:18 +08:00
疯狂的狮子Li
838a6cba5d update 重构 将flowable更换为warm-flow 2025-02-17 16:49:07 +08:00
疯狂的狮子Li
c870697c84 update 优化 类名未修改问题 2025-02-17 16:21:47 +08:00
疯狂的狮子Li
988d8e77e8 fix 修复 dubbo 官方 redis 插件 代码错误 ttl单位使用错误 2025-02-17 09:45:50 +08:00
QianRj
33214e4d6b !211 fix 修复Caffeine缓存未清空导致的部门创建显示延迟问题
* fix 修复Caffeine缓存未清空导致的部门创建显示延迟问题
2025-02-15 05:29:42 +00:00
疯狂的狮子Li
ba477a944b update 优化 将web相关的过滤器改为使用WebFilter接口实现 2025-02-12 10:12:32 +08:00
疯狂的狮子Li
35f141b001 update 优化 nginx开启静态资源压缩 增加静态文件传输效率 2025-02-11 16:03:45 +08:00
疯狂的狮子Li
74b8c44e6e update springboot-admin 3.4.1 => 3.4.2 修复重新登录404问题 2025-02-11 09:52:02 +08:00
疯狂的狮子Li
8a33c79509 update springboot 3.4.1 => 3.4.2
update springdoc 2.8.3 => 2.8.4
update satoken 1.39.0 => 1.40.0
update redisson 3.43.0 => 3.44.0
2025-02-07 14:16:47 +08:00
疯狂的狮子Li
7592019690 fix 修复 easy-es 升级后注解包迁移问题 2025-02-07 10:54:43 +08:00
疯狂的狮子Li
13d8ab4f58 fix 修复 splitTo 转换后的list包含null问题 2025-02-06 16:18:56 +08:00
疯狂的狮子Li
52734c48d0 fix 修复 sse关闭 用户id或token为空报错问题 2025-02-06 16:18:47 +08:00
疯狂的狮子Li
c930074184 update easy-es 2.0.0 => 2.1.0 同时支持ES 7.X与8.X 2025-02-06 15:41:44 +08:00
疯狂的狮子Li
81f2f67551 update snailjob 升级 1.3.0 正式版 2025-01-24 11:34:08 +08:00
疯狂的狮子Li
d621024300 update 删除无用链接 2025-01-20 18:27:00 +08:00
疯狂的狮子Li
bdd3188287 update snailjob 1.3.0-beta2 2025-01-20 15:09:42 +08:00
疯狂的狮子Li
c7a51847bd fix 修复 文件下载 设置content-length无效问题 2025-01-17 18:04:24 +08:00
疯狂的狮子Li
ab56ec5fb7 update 优化 查询oss图片url接口改为query标识符 2025-01-17 17:14:32 +08:00
疯狂的狮子Li
ef4b4285da update 优化 删除不需要放行的接口 2025-01-17 17:14:01 +08:00
疯狂的狮子Li
0f197c1934 update 优化 OSS私有桶的临时URL获取方法 2025-01-17 17:10:03 +08:00
疯狂的狮子Li
20614184ec update springcloud 2024 2025-01-17 17:01:11 +08:00
疯狂的狮子Li
3bdb837196 update 优化 编译警告问题 替换过期方法与类 2025-01-17 11:52:18 +08:00
疯狂的狮子Li
82b9a69231 update springboot 3.3.5 => 3.4.1
update springcloud 2023.0.3 => 2023.0.5
update springdoc 2.7.0 => 2.8.3
update mybatis-plus 3.5.9 => 3.5.10
update hutool 5.8.31 => 5.8.35
update springboot-admin 3.3.4 => 3.4.1
update redisson 3.39.0 => 3.43.0
update mapstruct-plus 1.4.5 => 1.4.6
update lombok 1.18.34 => 1.18.36
update anyline 20241022 => 20250101
update snailjob beta1 => beta1.1
2025-01-17 11:40:16 +08:00
疯狂的狮子Li
828d75674d update 优化 ws模块替换session的时候关闭session连接 2025-01-16 11:51:19 +08:00
疯狂的狮子Li
b10c237a0c update 优化 更正类命名 2025-01-16 11:40:11 +08:00
疯狂的狮子Li
a8434c68b6 fix 修复 实体类方法书写错误(不影响功能) 2025-01-14 23:00:36 +08:00
miracle-bean
e129035b56 !209 RemoteUserServiceImpl中selectListByIds和selectUserIdsByRoleIds方法新增判空
* 删除多余依赖
* 改成ArrayList
* 查询前判空
2025-01-14 09:55:53 +00:00
疯狂的狮子Li
fbfb0f7195 fix 修复 satoken dao层获取timeout为秒导致丢失毫秒进度问题(临时修复 等satoken官方解决) 2025-01-13 15:04:53 +08:00
疯狂的狮子Li
53b38e8ee4 Revert "fix 修复 satoken dao层获取timeout为秒导致丢失毫秒进度问题(临时修复 等satoken官方解决)"
This reverts commit c8f49c680fcda5a0bf9689be3c78239066b5b2a7.
2025-01-13 14:26:56 +08:00
疯狂的狮子Li
c8f49c680f fix 修复 satoken dao层获取timeout为秒导致丢失毫秒进度问题(临时修复 等satoken官方解决) 2025-01-13 13:37:24 +08:00
疯狂的狮子Li
6fde504ed9 update 优化 无需多余set变量 2025-01-12 20:37:49 +08:00
疯狂的狮子Li
49af8b6055 update 优化 避免重复处理 2025-01-12 20:37:49 +08:00
dhb52
4f379e01d3 !208 update snailjob 1.2.0 => 1.3.0-beta1
* update README ry—job 截图
* update snailjob 1.2.0 => 1.3.0-beta1
2025-01-10 09:39:54 +00:00
疯狂的狮子Li
30ab053db4 update 优化 数据权限 判断当前注解不满足模板则跳过 2025-01-09 14:28:25 +08:00
疯狂的狮子Li
72d3e3caa8 update 优化 增加 rpc 异常拦截器 2025-01-08 16:01:58 +08:00
疯狂的狮子Li
08e407b7f4 update 优化 将servlet改为saholder 兼容dubbo上下文 2025-01-08 15:49:45 +08:00
疯狂的狮子Li
1be1b57bde update 优化 工具类封装 2025-01-08 14:49:18 +08:00
疯狂的狮子Li
719f8e19fb update 优化 使用request存储动态租户 避免单请求多次查询redis获取 2025-01-08 10:58:02 +08:00
疯狂的狮子Li
a4084a4580 fix 修复 seata dockerfile 存在多余符号问题 2025-01-07 15:12:20 +08:00
疯狂的狮子Li
fe5cee274a fix 修复 postgresql的表元数据没有创建时间这个东西(好奇葩) 只能new Date代替 2025-01-07 13:53:17 +08:00
AprilWind
a4b19e4879 update 优化修改部门信息增加事务 2025-01-07 05:32:14 +08:00
疯狂的狮子Li
6ecb8447b6 fix 修复 数据权限 多角色多注解包含忽略权限标识符逻辑不正确问题 2025-01-05 23:04:36 +08:00
疯狂的狮子Li
6c26d9b529 update 优化 菜单选择拓展参数 2025-01-05 23:03:54 +08:00
秋辞未寒
454be09d05
fix 修复 redisson发号器未初始化发号器步长导致过期时间未生效的问题
Signed-off-by: 秋辞未寒 <545073804@qq.com>
2025-01-03 01:49:32 +00:00
疯狂的狮子Li
8101136d58 update 优化 延迟线程池 支持虚拟线程 2025-01-02 15:43:01 +08:00
疯狂的狮子Li
4f1fd8f630 update 优化 sse 如果获取token列表为空 删除userid对应的存储 2024-12-27 11:18:05 +08:00
疯狂的狮子Li
29e4da27fb update 优化 数据权限处理器 增加默认值处理 针对于表达式变量与注解不对应或者表达式变量为null的情况 2024-12-26 13:27:20 +08:00
疯狂的狮子Li
59c30fc24b update 支持xss配置热更(上一条commit信息写错了) 2024-12-25 14:54:20 +08:00
疯狂的狮子Li
7138e02aa1 fix 修复 未开启sse 找不到bean问题 2024-12-25 14:53:31 +08:00
疯狂的狮子Li
64781098f6 fix 修复 未开启sse 找不到bean问题 2024-12-25 09:30:56 +08:00
疯狂的狮子Li
c48ae42bcd update sqlkeyword 2024-12-25 09:23:56 +08:00
QianRj
322b1415e4 !204 fix 修复excel模板导出异常
* fix: 修复excel模板导出异常
2024-12-24 03:04:46 +00:00
疯狂的狮子Li
8309faae02 update 增加 赞助商 2024-12-21 13:38:39 +08:00
疯狂的狮子Li
dd110b0688 update 增加 赞助商 2024-12-21 13:32:29 +08:00
疯狂的狮子Li
7784de5a5f update 增加 赞助商 2024-12-21 13:30:27 +08:00
疯狂的狮子Li
c2285c7a23 update 优化 sse工具类 2024-12-19 10:54:23 +08:00
疯狂的狮子Li
7875e6c88c update 优化 关闭sse后 使用工具报错 2024-12-19 09:20:33 +08:00
疯狂的狮子Li
6388b9aa50 add 增加 excel 批注/是否必填 注解实现 2024-12-18 17:52:30 +08:00
疯狂的狮子Li
3423576116 update 优化 增加mybatis-plus一键开启/关闭逻辑删除功能 2024-12-18 13:29:46 +08:00
疯狂的狮子Li
ec1ba9d28d update 优化 增加mybatis-plus一键开启/关闭逻辑删除功能 2024-12-18 11:34:48 +08:00
疯狂的狮子Li
fdbfc34fd8
!201 update 修改日志颜色
Merge pull request !201 from 疯狂的牛子Li/修改日志颜色
2024-12-17 07:34:34 +00:00
疯狂的牛子Li
76c58d1c63 update 修改日志颜色 2024-12-17 15:25:02 +08:00
疯狂的狮子Li
9b76933766
!200 fix 修复数据权限导致的个人中心的修改头像和修改密码接口错误
Merge pull request !200 from QianRj/dev
2024-12-17 05:27:00 +00:00
QianRj
7e8b0b3fad fix: 修复数据权限导致的个人中心的修改头像和修改密码接口错误 2024-12-17 13:18:07 +08:00
疯狂的狮子Li
2797a9c751 fix 修复 升级justauth底层方法修改导致代码编译问题 2024-12-15 16:25:53 +08:00
疯狂的狮子Li
26b93ed48c update 使用justauth扩展功能支持微信小程序登录 2024-12-14 23:10:05 +08:00
疯狂的狮子Li
d67c6994c4 update justauth 1.16.6 => 1.16.7 支持多种登录方式 不限于三方登录 2024-12-14 23:08:31 +08:00
疯狂的狮子Li
d5a91261a5 fix 修复 数据权限缓存处理错误 null的清空下应该不缓存 直接返回-1 2024-12-14 23:07:58 +08:00
疯狂的狮子Li
d812c74535 fix 修复 xss初始化错误问题 2024-12-13 17:11:52 +08:00
疯狂的狮子Li
5414260082 update 优化 重构DateUtils工具类 更加实用 2024-12-13 00:17:14 +08:00
疯狂的狮子Li
df3eedf79f update 优化 为部门角色岗位用户增加一些常用查询方法 2024-12-13 00:16:24 +08:00
疯狂的狮子Li
02ace774a6 update 优化 登录用户增加岗位数据 2024-12-12 23:51:01 +08:00
疯狂的狮子Li
9c55e4efc8 add 新增 基于Redisson的发号器工具 2024-12-12 22:30:00 +08:00
疯狂的狮子Li
c506997810 update 优化代码 2024-12-12 22:24:56 +08:00
疯狂的狮子Li
91a36299ac update 优化 去除部门查询状态校验 改为前端过滤 便于查看禁用部门下的其他数据 2024-12-11 18:12:51 +08:00
疯狂的狮子Li
b32096ef35 update 优化 部门树增加禁用标志位 2024-12-11 15:32:16 +08:00
疯狂的狮子Li
ddaefa3f60 update 优化 workflow 模块增加接口文档生成功能 2024-12-11 14:01:31 +08:00
疯狂的狮子Li
96245cf82d update 优化 xss 处理器 从gateway获取转发路径 2024-12-11 14:01:03 +08:00
疯狂的狮子Li
5aa96c5b02 add 新增 validation支持枚举校验 2024-12-10 17:47:17 +08:00
疯狂的狮子Li
d0143f98fb fix 修复 三方缺失参数问题 2024-12-09 17:37:21 +08:00
疯狂的狮子Li
7d89a81853 update 优化 代码生成 增加buildQueryWrapper默认排序规则 2024-12-09 13:34:53 +08:00
疯狂的狮子Li
4ce2fb53a8 update 优化 代码生成 创建更新时间被覆盖问题 2024-12-09 13:34:14 +08:00
疯狂的狮子Li
3b433089e3 update 优化 接口文档服务路径从gateway转发的请求头获取 2024-12-09 11:30:42 +08:00
疯狂的狮子Li
8939df7cd3 update 优化 书写错误 2024-12-06 14:03:00 +08:00
疯狂的狮子Li
c56877c785 update 优化 在线用户查询 优先查询租户下数据 减少数据量 2024-12-06 10:12:30 +08:00
疯狂的狮子Li
f890ad4246 update 优化 prometheus sd发现 兼容携带context-path的服务 2024-12-05 16:32:50 +08:00
疯狂的狮子Li
1b34b99a75 update 优化 项目名前增加社区名 2024-12-04 10:11:16 +08:00
疯狂的狮子Li
8c47026554 update 优化 租户域名使用忽略大小写匹配 2024-12-03 11:02:37 +08:00
疯狂的狮子Li
f9fc9d2c90 fix 修复 代码生成 表名中间带有特殊字符被过滤问题 改为开头过滤 2024-12-02 23:22:36 +08:00
疯狂的狮子Li
bbc67e403f update 优化 代码生成器 将数据库字段默认转为小写 避免某些数据库大写出现的问题 2024-12-02 10:06:34 +08:00
疯狂的狮子Li
6fe4a35b03 update 优化 由于sse重试机制导致经常输出认证失败日志过多 将sse失败改为debug 2024-12-02 09:37:22 +08:00
疯狂的狮子Li
32facf7ebc update 优化 redis序列化 支持更快的apache二进制跨语言序列化方案 2024-11-27 18:25:35 +08:00
疯狂的狮子Li
f90c02bbb8 update 优化 租户日志模块名 2024-11-27 15:22:57 +08:00
疯狂的狮子Li
88601bd0af update springdoc 2.6.0 => 2.7.0
update redisson 3.37.0 => 3.39.0
2024-11-26 16:30:00 +08:00
疯狂的狮子Li
1152429d9a fix 修复 字段长度超出数据库限制问题 2024-11-26 15:40:10 +08:00
疯狂的狮子Li
540fe6c22e update 优化 数据权限处理 2024-11-25 11:59:29 +08:00
疯狂的狮子Li
a676916da2 update 优化 增加默认数据权限 "部门及以下或本人数据权限" 选项 2024-11-25 10:35:19 +08:00
疯狂的狮子Li
e330350960
!195 fix 修复 snail、dashboard 过滤器正则错误
Merge pull request !195 from 疯狂的牛子Li/修复过滤器正则错误
2024-11-23 07:58:34 +00:00
疯狂的牛子Li
9806c39e52 fix 修复 snail、dashboard 过滤器正则错误 2024-11-23 15:46:08 +08:00
秋辞未寒
be87ac9421
update 优化 校验租户判空逻辑
Signed-off-by: 秋辞未寒 <545073804@qq.com>
2024-11-23 06:58:52 +00:00
疯狂的狮子Li
591db0bdd2
update 优化 个人中心强退接口路径
Signed-off-by: 疯狂的狮子Li <15040126243@163.com>
2024-11-23 02:36:53 +00:00
疯狂的狮子Li
4e84b0d65e update 优化 代码生成器 pg数据库 主键获取不精确问题 2024-11-22 17:18:33 +08:00
疯狂的狮子Li
7b20563f2b update 优化 代码生成器类型获取 2024-11-22 17:01:52 +08:00
疯狂的狮子Li
bcfddb431d update 优化 nacos prometheus 认证访问 2024-11-22 14:03:01 +08:00
疯狂的狮子Li
5cdd7999d2 fix 修复 nacos 过滤器正则错误 2024-11-22 13:56:58 +08:00
疯狂的狮子Li
52559f1aad update 优化 prometheus http sd发现支持配置账号密码鉴权 2024-11-22 13:38:31 +08:00
疯狂的狮子Li
a2f9090cc7 fix 修复 aop 无法拦截mapper接口上的注解导致的问题 类上依旧使用扫描处理 2024-11-22 10:45:20 +08:00
疯狂的狮子Li
87feefe5f8 update 优化 xss包装器 Parameter 处理 兼容某些容器不允许改参数的情况 2024-11-21 10:18:18 +08:00
疯狂的狮子Li
08bb39d3d1 update snailjob 1.1.2 => 1.2.0 2024-11-20 14:27:19 +08:00
疯狂的狮子Li
76cf3137c5 update 优化 Dockerfile 消除warn警告 2024-11-20 11:03:30 +08:00
疯狂的狮子Li
8d6c4bb575 update 修改 readme 增加成员项目说明 2024-11-15 16:28:30 +08:00
AprilWind
85b57ca98c docs 补充客户端工具类注释 2024-11-15 15:37:30 +08:00
AprilWind
d4bee21d90 docs 补充Undertow自定义配置信息注释 2024-11-15 15:37:12 +08:00
疯狂的狮子Li
1fa0aa8e27 Revert "update 优化 加密拦截器plugin方法按规定返回代理对象"
This reverts commit edcdc7990b768f89f8b9898b2a66aea384f2d02e.
2024-11-15 11:13:59 +08:00
疯狂的狮子Li
652e9ee200 update 优化 拦截爬虫跟踪等垃圾请求 2024-11-15 11:05:43 +08:00
疯狂的狮子Li
edcdc7990b update 优化 加密拦截器plugin方法按规定返回代理对象 2024-11-15 11:05:12 +08:00
疯狂的狮子Li
ddcdbaf098 update 优化 EncryptUtils加解密错误注释 2024-11-15 11:04:42 +08:00
疯狂的狮子Li
a300e885f1 fix 修复 数据权限多角色与权限标识符共用导致的问题 https://gitee.com/dromara/RuoYi-Vue-Plus/issues/IB4CS4 2024-11-14 16:58:23 +08:00
疯狂的狮子Li
8fb2952a59 update 优化 将Log记录参数长度扩充为5000更符合实际需求 2024-11-14 16:25:02 +08:00
疯狂的狮子Li
7a5e2ea6c3 update 优化部署配置 2024-11-14 16:05:28 +08:00
疯狂的狮子Li
2ebac37d4e update 优化 xss包装器 Parameter 处理 兼容某些容器不允许改参数的情况 2024-11-12 18:18:20 +08:00
疯狂的狮子Li
449e306433 update 排除 websocket包内包含的tomcat依赖 2024-11-12 15:10:43 +08:00
疯狂的狮子Li
b3cb99118a update 优化 删除无意义的方法 2024-11-12 10:51:20 +08:00
疯狂的狮子Li
a6bc63761d fix 修复 误删代码 2024-11-12 10:48:51 +08:00
疯狂的狮子Li
5f3ce86836 update 优化 支持脱敏传多角色多权限标识 2024-11-12 10:40:53 +08:00
疯狂的狮子Li
c7eb77d730 update 优化 使用ObjectUtils新增方法封装代码 2024-11-11 14:06:25 +08:00
疯狂的狮子Li
81f1200710 update 优化 数据权限查询增加缓存 2024-11-11 13:58:56 +08:00
疯狂的狮子Li
7cff7894da update 优化 扩展 ObjectUtil 2024-11-11 11:49:43 +08:00
疯狂的狮子Li
ff5157ee99 update 优化 代码生成器数字类别判断 2024-11-11 11:03:47 +08:00
疯狂的狮子Li
8bae36c0d8 update 优化 逻辑删除状态改为1 避免误解 2024-11-11 11:03:07 +08:00
疯狂的狮子Li
0c824088f3 update 重构 将UserConstants改为SystemConstants 统一常量使用 降低使用难度避免误解 2024-11-11 11:02:34 +08:00
疯狂的狮子Li
ab828a2579 fix 修复 workflow 路由策略与其他服务不一致导致的问题 2024-11-10 00:12:02 +08:00
疯狂的狮子Li
1eaf28e985 fix 修复 workflow 路由策略与其他服务不一致导致的问题 2024-11-10 00:08:22 +08:00
疯狂的狮子Li
4675399919 fix 修复 PageQuery 转json报错问题 2024-11-09 21:03:25 +08:00
疯狂的狮子Li
263cf7725e fix 修复 sse 关闭接口无法断连问题 2024-11-08 00:31:55 +08:00
疯狂的狮子Li
b95dc22403 fix 修复 sse 关闭接口无法断连问题 2024-11-08 00:31:29 +08:00
疯狂的狮子Li
54471dfab0 add 增加 邮件多附件demo 2024-11-07 22:27:06 +08:00
疯狂的狮子Li
a8de81aba7 update 优化 封装部门基于父id查询方法 2024-11-07 15:51:19 +08:00
疯狂的狮子Li
5d29847714 fix 修复 PlusSmsDao#clean 方法书写错误 2024-11-06 22:15:07 +08:00
疯狂的狮子Li
5ad44bedcc fix 修复 大数量级联下拉导致的禁止写入错误 2024-11-06 15:52:37 +08:00
疯狂的狮子Li
7f6388e655 update 补全遗漏的seata插件 2024-11-05 18:14:22 +08:00
疯狂的狮子Li
ae20a4b8cf update 优化 不传用户id不校验数据权限 2024-11-05 16:53:18 +08:00
疯狂的狮子Li
b09bf523c3 update skywalking-agent 9.2.0 => 9.3.0 解决undertow兼容性报错问题 2024-11-05 16:38:27 +08:00
疯狂的狮子Li
c0fda663ac add 增加 gitcode 链接地址 2024-11-04 14:08:32 +08:00
疯狂的狮子Li
d9be6fbf7f update 优化 部门树多基点展示问题 支持相同名称节点并排展示 2024-11-04 11:40:42 +08:00
疯狂的狮子Li
3444a8d5f6 update nacos 2.3.2 => 2.4.3 2024-11-04 10:38:06 +08:00
疯狂的狮子Li
2812948bb6 fix 修复 gateway 不存在 mp 依赖导致方法报错问题 2024-11-02 20:00:51 +08:00
疯狂的狮子Li
612fed0428 update 优化 去除桶检测 桶不存在自然会报错无需额外检测 2024-10-31 18:00:22 +08:00
疯狂的狮子Li
dabf8e91b7 update 优化 限流注解增加固定清理时间 2024-10-30 16:45:06 +08:00
疯狂的狮子Li
9a59aded6c update 优化 代码生成页面查询增加排序条件 2024-10-30 10:53:02 +08:00
疯狂的狮子Li
87b062e8da update 优化 sys_social表 租户id增加默认值 2024-10-29 20:22:44 +08:00
疯狂的狮子Li
eb5f93325b update 优化 jackson 过期方法 2024-10-29 19:16:28 +08:00
疯狂的狮子Li
15c06c7ebe update mybatis-plus 3.5.8 => 3.5.9 2024-10-29 19:16:22 +08:00
疯狂的狮子Li
60edc820a8 update 优化 多租户插件初始化流程 2024-10-29 16:56:31 +08:00
疯狂的狮子Li
f87f473aeb update 优化 去除GenUtils设置createby逻辑 统一走自动注入设置 2024-10-29 11:20:12 +08:00
疯狂的狮子Li
aaa23a0d6e update springboot 3.2.11 => 3.3.5
update springboot-admin 3.2.3 => 3.3.4
2024-10-29 09:48:42 +08:00
疯狂的狮子Li
5f3a2ebcaa update 优化 替换RedisUtils中的废弃方法getKeysStreamByPattern及trySetRate 2024-10-29 09:33:17 +08:00
疯狂的狮子Li
36d5d612ed update 优化 删除桶自动创建代码逻辑(云厂商限制不允许操作桶) 2024-10-28 18:11:14 +08:00
疯狂的狮子Li
0892121cf7
reset 回滚错误修改
Signed-off-by: 疯狂的狮子Li <15040126243@163.com>
2024-10-28 09:47:13 +00:00
疯狂的狮子Li
04bc7a3f20 reset 回滚错误修改 2024-10-28 17:44:56 +08:00
疯狂的狮子Li
081c258943 update 优化 角色清理在线用户代码逻辑 2024-10-28 10:24:14 +08:00
疯狂的狮子Li
26b2e616ab [重大更新] update (实验性功能慎更)重构数据权限实现逻辑 支持任意mapper方法标注注解 无需再找真实mapper标注 2024-10-27 23:43:12 +08:00
疯狂的狮子Li
96364f0d3b fix 修复 注册日志记录状态错误 2024-10-25 13:10:31 +08:00
疯狂的狮子Li
31c1c69431
!191 发布 2.2.2 正式版
Merge pull request !191 from 疯狂的狮子Li/dev
2024-10-25 03:11:18 +00:00
疯狂的狮子Li
daae5a8ba9 🎀发布 2.2.2 正式版 2024-10-25 11:03:32 +08:00
疯狂的狮子Li
f4aef0eda8 update springboot 3.2.10 => 3.2.11
update redisson 3.36.0 => 3.37.0
update mapstruct-plus 1.4.4 => 1.4.5
update anyline 8.7.2-20240930 => 8.7.2-20241022
2024-10-25 10:45:53 +08:00
疯狂的狮子Li
c8cb74c52a update 优化 postgres适配findInSet写法 提高查询效率 2024-10-24 14:48:07 +08:00
疯狂的狮子Li
1096c17523 fix 修复 设置流程变量 代码使用错误问题 2024-10-23 17:59:49 +08:00
疯狂的狮子Li
87031a0995 fix 修复 xss过滤器 未过滤url参数问题 2024-10-21 14:01:34 +08:00
疯狂的狮子Li
9018dcb377 fix 修复 代码书写错误 2024-10-21 13:38:44 +08:00
疯狂的狮子Li
503a0efc31 fix 修复 经过加密的请求无法过滤xss问题 将xss实现从gateway移动到common-web解密后过滤 2024-10-20 12:26:05 +08:00
疯狂的狮子Li
f64b17b548 fix 修复 字典同步 数据异常问题 2024-10-19 14:51:50 +08:00
疯狂的狮子Li
74b897dfd7
fix 修复 重新生成租户ID未生效的问题
Signed-off-by: 疯狂的狮子Li <15040126243@163.com>
2024-10-17 15:26:50 +00:00
疯狂的狮子Li
d622d717b8 update 优化 监听器兼容所有demo案例 2024-10-17 18:12:58 +08:00
疯狂的狮子Li
12b4aefa2f update 优化 操作日志记录DELETE请求参数 2024-10-17 17:35:05 +08:00
疯狂的狮子Li
0d8a713d69 update 优化 snailjob客户端ip配置说明 2024-10-17 17:25:24 +08:00
疯狂的狮子Li
9cf3310f1e update 优化 将ip2region.xdb文件转移到web包下 防止其他项目使用core包打包太大问题 2024-10-16 16:16:49 +08:00
AprilWind
097dbdcdee fix 修复oss上传10秒超时,设置默认时间一分钟 2024-10-16 15:31:07 +08:00
AprilWind
be936ddf6b fix 修复oss云厂商更改导致上传下载报错问题 2024-10-16 10:55:20 +08:00
疯狂的狮子Li
a639753fe9 fix 修复 特性情况下自定义验证异常处理器报null问题 2024-10-15 17:36:01 +08:00
疯狂的狮子Li
c32bcfd8ad fix 修复 EncryptorManager 缓存失效问题导致的内存膨胀 2024-10-14 00:39:30 +08:00
疯狂的狮子Li
4959712df0 update 优化 补全 pg 数据类型 2024-10-12 16:23:54 +08:00
疯狂的狮子Li
791b73f1a5 update 优化 补全 @Override 注解 2024-10-08 16:31:18 +08:00
疯狂的狮子Li
0e7c7e8033 fix 修复 同一个用户不同token连接不同服务导致发送不到问题(改为全局发送) 2024-10-08 14:44:55 +08:00
疯狂的狮子Li
0db17bac6c fix 修复 同步字典存储是未忽略租户 2024-10-01 10:55:39 +08:00
疯狂的狮子Li
e00b300017 update anyline 20240808 => 20240930 2024-09-30 17:56:20 +08:00
疯狂的狮子Li
15c8b4cbfd update sms4j 3.3.2 => 3.3.3 2024-09-29 17:42:39 +08:00
疯狂的狮子Li
1529894830 fix 修复 部分web异常被CryptoFilter截胡问题 2024-09-29 17:42:30 +08:00
疯狂的狮子Li
d2b640162f fix 修复 postgres 租户菜单名称错误 2024-09-25 11:21:48 +08:00
疯狂的狮子Li
48b172e6c9 fix 修复 代码生成器 postgres 数据库主键类型映射错误问题 2024-09-24 18:18:40 +08:00
疯狂的狮子Li
048e1e3f85 fix 修复 书写错误 2024-09-20 17:18:22 +08:00
疯狂的狮子Li
f6cf5ab6ca update 优化 适配mp新版本 方法名改动 2024-09-20 15:45:50 +08:00
疯狂的狮子Li
77bf53800d update 优化 redis操作 如果无法忽略租户id则全局处理 2024-09-19 23:14:33 +08:00
疯狂的狮子Li
e6a765cd34 update springboot 3.2.9 => 3.2.10 2024-09-19 18:09:58 +08:00
疯狂的狮子Li
21bc893410 update 优化 sse 异常单独处理 避免出现异常报错问题 2024-09-19 17:53:32 +08:00
疯狂的狮子Li
9b19b09eb2 update easyexcel 4.0.2 => 4.0.3
update redisson 3.34.1 => 3.36.0
2024-09-19 13:59:42 +08:00
疯狂的狮子Li
0ee13b8814 update mybatis-plus 3.5.7 => 3.5.8 代码适配更改 2024-09-19 13:59:11 +08:00
疯狂的狮子Li
fb0d67d7df update 优化 删除掉有问题的方法(使用RedisUtils) 2024-09-18 18:07:51 +08:00
疯狂的狮子Li
28dff1831f update 优化 去除返回前端的异常信息里包含html标签问题 2024-09-13 17:43:21 +08:00
AprilWind
4be95fd878 docs 查询表名列表增加注释 2024-09-13 15:14:00 +08:00
疯狂的狮子Li
528850b28f update 优化 判断当前会话是否已经登录 2024-09-13 14:42:09 +08:00
疯狂的狮子Li
32fa5d1e8f update 优化 删除不应该set的属性 2024-09-13 09:39:15 +08:00
疯狂的狮子Li
30a7db3624 update 优化 租户状态更改接口严谨性 2024-09-12 16:58:05 +08:00
疯狂的狮子Li
992647fd14 update 优化 增加dubbo元数据中心 redis集群配置示例 2024-09-11 16:53:45 +08:00
疯狂的狮子Li
f3526100a8 fix 修复 临时处理 scala库版本漏洞问题 2024-09-11 16:05:22 +08:00
疯狂的狮子Li
d5e5875325 update 优化 删除okhttp无用版本限制(spring已经限制过了) 2024-09-11 16:04:43 +08:00
疯狂的狮子Li
a1741dd839 update 优化 操作日志查询代码 2024-09-11 12:01:22 +08:00
疯狂的狮子Li
cd0df97ed4 fix 修复 工作流分页查询语句不兼容sqlserver的问题 2024-09-11 09:30:15 +08:00
AprilWind
998ba53519 add 新增TreeUtil获取节点列表中所有节点的叶子节点 2024-09-10 10:28:33 +08:00
疯狂的狮子Li
1a52581e4e
update sql/ry-job.sql.
Signed-off-by: 疯狂的狮子Li <15040126243@163.com>
2024-09-09 14:46:24 +00:00
疯狂的狮子Li
2a6e63917f update 优化 提供生产环境默认组配置 2024-09-09 11:32:09 +08:00
疯狂的狮子Li
fddfb4389d fix 修复 commons-io 依赖冲突问题 2024-09-05 18:52:59 +08:00
疯狂的狮子Li
67f19b350a update 优化 连接SSE token过期导致的 Servlet异常 2024-09-05 18:52:48 +08:00
疯狂的狮子Li
2f52b340f2 update 优化 代码生成菜单id匹配写法 2024-09-04 16:18:00 +08:00
疯狂的狮子Li
25843a67ca update sa-token 1.38.0 => 1.39.0 2024-09-03 13:53:52 +08:00
疯狂的狮子Li
e53d49bf0a update 调整 xml 格式 2024-09-02 17:20:05 +08:00
疯狂的狮子Li
cfdfd870bb fix 修复 开启子部门 父部门未关联开启问题 2024-09-02 14:12:44 +08:00
疯狂的狮子Li
2318b48b26 update 优化 更新sql关键字 2024-09-02 13:07:01 +08:00
疯狂的狮子Li
9ad8bff4ff update 优化 删除多余的引号 2024-08-31 23:31:10 +08:00
疯狂的狮子Li
9cd7640125 fix 修复 升级依赖导致的依赖冲突 2024-08-29 20:52:55 +08:00
疯狂的狮子Li
d5ef554e5e update 优化 RegexUtils#extractFromString 方法未匹配返回null不返回默认值问题 2024-08-29 14:12:58 +08:00
疯狂的狮子Li
3542bb92aa update 优化 oss上传直接从请求头获取文件类型 2024-08-29 10:54:23 +08:00
疯狂的狮子Li
05ad9bc907 update 优化 oss上传直接从请求头获取文件类型 2024-08-29 10:53:38 +08:00
疯狂的狮子Li
a35b32ef4d update 优化 代码生成表名判断 使用开头判断避免误判 2024-08-29 10:40:47 +08:00
疯狂的狮子Li
f497b33e88 update 优化 代码生成表名判断 使用开头判断避免误判 2024-08-29 10:38:19 +08:00
疯狂的狮子Li
0ebfcf1edd add 增加 同步租户字典功能 2024-08-26 18:02:10 +08:00
疯狂的狮子Li
79bec85e27 update 优化 excel导入 适配异常结构 2024-08-26 15:42:24 +08:00
疯狂的狮子Li
1673395ad8 update 优化 excel导入 适配异常结构 2024-08-26 15:40:01 +08:00
1310 changed files with 23513 additions and 75784 deletions

1
.gitignore vendored
View File

@ -37,6 +37,7 @@ nbdist/
######################################################################
# Others
*.log
*.log.gz
*.xml.versionsBackup
*.swp

View File

@ -2,7 +2,7 @@
<configuration default="false" name="ruoyi-auth" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="ruoyi/ruoyi-auth:2.2.1" />
<option name="imageTag" value="ruoyi/ruoyi-auth:2.5.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="ruoyi-auth/Dockerfile" />
</settings>

View File

@ -2,7 +2,7 @@
<configuration default="false" name="ruoyi-gateway" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="ruoyi/ruoyi-gateway:2.2.1" />
<option name="imageTag" value="ruoyi/ruoyi-gateway:2.5.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="ruoyi-gateway/Dockerfile" />
</settings>

View File

@ -2,7 +2,7 @@
<configuration default="false" name="ruoyi-gen" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="ruoyi/ruoyi-gen:2.2.1" />
<option name="imageTag" value="ruoyi/ruoyi-gen:2.5.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="ruoyi-modules/ruoyi-gen/Dockerfile" />
</settings>

View File

@ -2,7 +2,7 @@
<configuration default="false" name="ruoyi-job" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="ruoyi/ruoyi-job:2.2.1" />
<option name="imageTag" value="ruoyi/ruoyi-job:2.5.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="ruoyi-modules/ruoyi-job/Dockerfile" />
</settings>

View File

@ -2,7 +2,7 @@
<configuration default="false" name="ruoyi-monitor" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="ruoyi/ruoyi-monitor:2.2.1" />
<option name="imageTag" value="ruoyi/ruoyi-monitor:2.5.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="ruoyi-visual/ruoyi-monitor/Dockerfile" />
</settings>

View File

@ -2,7 +2,7 @@
<configuration default="false" name="ruoyi-nacos" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="ruoyi/ruoyi-nacos:2.2.1" />
<option name="imageTag" value="ruoyi/ruoyi-nacos:2.5.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="ruoyi-visual/ruoyi-nacos/Dockerfile" />
</settings>

View File

@ -2,7 +2,7 @@
<configuration default="false" name="ruoyi-resource" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="ruoyi/ruoyi-resource:2.2.1" />
<option name="imageTag" value="ruoyi/ruoyi-resource:2.5.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="ruoyi-modules/ruoyi-resource/Dockerfile" />
</settings>

View File

@ -2,7 +2,7 @@
<configuration default="false" name="ruoyi-seata-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="ruoyi/ruoyi-seata-server:2.2.1" />
<option name="imageTag" value="ruoyi/ruoyi-seata-server:2.5.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="ruoyi-visual/ruoyi-seata-server/Dockerfile" />
</settings>

View File

@ -1,12 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="ruoyi-sentinel-dashboard" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="ruoyi/ruoyi-sentinel-dashboard:2.2.1" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="ruoyi-visual/ruoyi-sentinel-dashboard/Dockerfile" />
</settings>
</deployment>
<method v="2" />
</configuration>
</component>

View File

@ -2,7 +2,7 @@
<configuration default="false" name="ruoyi-snailjob-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="ruoyi/ruoyi-snailjob-server:2.2.1" />
<option name="imageTag" value="ruoyi/ruoyi-snailjob-server:2.5.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="ruoyi-visual/ruoyi-snailjob-server/Dockerfile" />
</settings>

View File

@ -2,7 +2,7 @@
<configuration default="false" name="ruoyi-system" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="ruoyi/ruoyi-system:2.2.1" />
<option name="imageTag" value="ruoyi/ruoyi-system:2.5.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="ruoyi-modules/ruoyi-system/Dockerfile" />
</settings>

View File

@ -2,7 +2,7 @@
<configuration default="false" name="ruoyi-workflow" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="ruoyi/ruoyi-workflow:2.2.1" />
<option name="imageTag" value="ruoyi/ruoyi-workflow:2.5.2" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="ruoyi-modules/ruoyi-workflow/Dockerfile" />
</settings>

View File

@ -6,24 +6,28 @@
[![码云Gitee](https://gitee.com/dromara/RuoYi-Cloud-Plus/badge/star.svg?theme=blue)](https://gitee.com/dromara/RuoYi-Cloud-Plus)
[![GitHub](https://img.shields.io/github/stars/dromara/RuoYi-Cloud-Plus.svg?style=social&label=Stars)](https://github.com/dromara/RuoYi-Cloud-Plus)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus/blob/master/LICENSE)
[![Star](https://gitcode.com/dromara/RuoYi-Cloud-Plus/star/badge.svg)](https://gitcode.com/dromara/RuoYi-Cloud-Plus)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus/blob/2.X/LICENSE)
[![使用IntelliJ IDEA开发维护](https://img.shields.io/badge/IntelliJ%20IDEA-提供支持-blue.svg)](https://www.jetbrains.com/?from=RuoYi-Cloud-Plus)
<br>
[![RuoYi-Cloud-Plus](https://img.shields.io/badge/RuoYi_Cloud_Plus-2.2.1-success.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus)
[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.1-blue.svg)]()
[![RuoYi-Cloud-Plus](https://img.shields.io/badge/RuoYi_Cloud_Plus-2.5.2-success.svg)](https://gitee.com/dromara/RuoYi-Cloud-Plus)
[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.4-blue.svg)]()
[![JDK-17](https://img.shields.io/badge/JDK-17-green.svg)]()
[![JDK-21](https://img.shields.io/badge/JDK-21-green.svg)]()
> RuoYi-Cloud-Plus `微服务通用权限管理系统` 重写 RuoYi-Cloud 全方位升级(不兼容原框架)
> Dromara RuoYi-Cloud-Plus `微服务通用权限管理系统` 重写 RuoYi-Cloud 全方位升级(不兼容原框架)
> 项目代码、文档 均开源免费可商用 遵循开源协议在项目中保留开源协议文件即可<br>
活到老写到老 为兴趣而开源 为学习而开源 为让大家真正可以学到技术而开源
> 系统演示: [传送门](https://plus-doc.dromara.org/#/common/demo_system)
> 前端项目地址: [plus-ui](https://gitee.com/JavaLionLi/plus-ui)
> 官方前端项目地址: [gitee](https://gitee.com/JavaLionLi/plus-ui) - [github](https://github.com/JavaLionLi/plus-ui) - [gitcode](https://gitcode.com/dromara/plus-ui)<br>
> 成员前端项目地址: 基于vben5 [ruoyi-plus-vben5](https://gitee.com/dapppp/ruoyi-plus-vben5)<br>
> 成员前端项目地址: 基于soybean [ruoyi-plus-soybean](https://gitee.com/xlsea/ruoyi-plus-soybean)<br>
> 成员项目地址: 删除多租户与工作流 [RuoYi-Vue-Plus-Single](https://gitee.com/ColorDreams/RuoYi-Vue-Plus-Single)<br>
> 文档地址: [plus-doc](https://plus-doc.dromara.org)
> 文档地址: [plus-doc](https://plus-doc.dromara.org) 国内加速: [plus-doc.top](https://plus-doc.top)
## 赞助商
@ -31,7 +35,13 @@ MaxKey 业界领先单点登录产品 - https://gitee.com/dromara/MaxKey <br>
CCFlow 驰聘低代码-流程-表单 - https://gitee.com/opencc/RuoYi-JFlow <br>
数舵科技 软件定制开发APP小程序等 - http://www.shuduokeji.com/ <br>
引迈信息 软件开发平台 - https://www.jnpfsoft.com/index.html?from=plus-doc <br>
[如何成为赞助商 加群联系作者详谈](https://plus-doc.dromara.org/#/common/add_group)
<font color="red">**启山商城系统 多租户商城源码可免费商用可二次开发 - https://www.73app.cn/** </font><br>
Mall4J 高质量Java商城系统 - https://www.mall4j.com/cn/?statId=11 <br>
aizuda flowlong 工作流 - https://gitee.com/aizuda/flowlong <br>
Ruoyi-Plus-Uniapp - https://ruoyi.plus <br>
Topiam IAM/IDaaS身份管理平台 - https://www.topiam.cn/ <br>
[如何成为赞助商 加群联系作者详谈 每日PV2500-3000 IP1700-2500](https://plus-doc.dromara.org/#/common/add_group)
# 本框架与RuoYi的功能差异
@ -81,7 +91,7 @@ CCFlow 驰聘低代码-流程-表单 - https://gitee.com/opencc/RuoYi-JFlow <br>
| 邮件 | 采用 mail-api 通用协议支持大部分邮件厂商 | 不支持 |
| 接口文档 | 采用 SpringDoc、javadoc 无注解零入侵基于java注释<br/>只需把注释写好 无需再写一大堆的文档注解了 | 采用 Springfox 已停止维护 需要编写大量的注解来支持文档生成 |
| 校验框架 | 采用 Validation 支持注解与工具类校验 注解支持国际化 | 仅支持注解 且注解不支持国际化 |
| Excel框架 | 采用 Alibaba EasyExcel 基于插件化<br/>框架对其增加了很多功能 例如 自动合并相同内容 自动排列布局 字典翻译等 | 基于 POI 手写实现 功能有限 复杂 扩展性差 |
| Excel框架 | 采用 FastExcel(原Alibaba EasyExcel) 基于插件化<br/>框架对其增加了很多功能 例如 自动合并相同内容 自动排列布局 字典翻译等 | 基于 POI 手写实现 功能有限 复杂 扩展性差 |
| 工作流支持 | 支持各种复杂审批 转办 委派 加减签 会签 或签 票签 等功能 | 无 |
| 工具类框架 | 采用 Hutool、Lombok 上百种工具覆盖90%的使用需求 基于注解自动生成 get set 等简化框架大量代码 | 手写工具稳定性差易出问题 工具数量有限 代码臃肿需自己手写 get set 等 |
| 服务监控框架 | 采用 SpringBoot-Admin 基于SpringBoot官方 actuator 探针机制<br/>实时监控服务状态 框架还为其扩展了在线日志查看监控 | 无 |
@ -118,7 +128,6 @@ CCFlow 驰聘低代码-流程-表单 - https://gitee.com/opencc/RuoYi-JFlow <br>
| 系统接口 | 根据业务代码自动生成相关的api接口文档 | 支持 | 支持 |
| 服务监控 | 监视集群系统CPU、内存、磁盘、堆栈、在线日志、Spring相关配置等 | 支持 | 仅支持单机CPU、内存、磁盘监控 |
| 缓存监控 | 对系统的缓存信息查询,命令统计等。 | 支持 | 支持 |
| 在线构建器 | 拖动表单元素生成相应的HTML代码。 | 支持 | 支持 |
| 使用案例 | 系统的一些功能案例 | 支持 | 不支持 |
## 参考文档
@ -175,8 +184,8 @@ CCFlow 驰聘低代码-流程-表单 - https://gitee.com/opencc/RuoYi-JFlow <br>
| ![输入图片说明](https://foruda.gitee.com/images/1680078779416197879/75e3ed02_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078802329118061/77e10915_1766278.png "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1680078893627848351/34a1c342_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078928175016986/f126ec4a_1766278.png "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1680078941718318363/b68a0f72_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078963175518631/3bb769a1_1766278.png "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1680078982294090567/b31c343d_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680079000642440444/77ca82a9_1766278.png "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1680079020995074177/03b7d52e_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680079039367822173/76811806_1766278.png "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1735829153637063344/3c21fd4c_1419627.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1735829181303499815/4522cefa_1419627.png "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1735829377205259767/76a705d7_1419627.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1722959592856812900/e2d0d342_1419627.png "屏幕截图") |
| ![输入图片说明](https://foruda.gitee.com/images/1680079274333484664/4dfdc7c0_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680079290467458224/d6715fcf_1766278.png "屏幕截图") |

Binary file not shown.

View File

@ -1,100 +0,0 @@
# 安全配置
security:
# 防止XSS攻击
xss:
enabled: true
excludeUrls:
- /system/notice
- /workflow/model/save
- /workflow/model/editModelXml
# 不校验白名单
ignore:
whites:
- /auth/code
- /auth/logout
- /auth/login
- /auth/binding/*
- /auth/social/callback
- /auth/register
- /auth/tenant/list
- /resource/sms/code
- /resource/sse/close
- /*/v3/api-docs
- /*/error
- /csrf
spring:
cloud:
# 网关配置
gateway:
# 打印请求日志(自定义)
requestLog: true
discovery:
locator:
lowerCaseServiceId: true
enabled: true
routes:
# 认证中心
- id: ruoyi-auth
uri: lb://ruoyi-auth
predicates:
- Path=/auth/**
filters:
- StripPrefix=1
# 代码生成
- id: ruoyi-gen
uri: lb://ruoyi-gen
predicates:
- Path=/tool/**
filters:
- StripPrefix=1
# 系统模块
- id: ruoyi-system
uri: lb://ruoyi-system
predicates:
- Path=/system/**,/monitor/**
filters:
- StripPrefix=1
# 资源服务
- id: ruoyi-resource
uri: lb://ruoyi-resource
predicates:
- Path=/resource/**
filters:
- StripPrefix=1
# workflow服务
- id: ruoyi-workflow
uri: lb://ruoyi-workflow
predicates:
- Path=/workflow/**
# 演示服务
- id: ruoyi-demo
uri: lb://ruoyi-demo
predicates:
- Path=/demo/**
filters:
- StripPrefix=1
# MQ演示服务
- id: ruoyi-test-mq
uri: lb://ruoyi-test-mq
predicates:
- Path=/test-mq/**
filters:
- StripPrefix=1
# sentinel 配置
sentinel:
filter:
enabled: false
# nacos配置持久化
datasource:
ds1:
nacos:
server-addr: ${spring.cloud.nacos.server-addr}
dataId: sentinel-${spring.application.name}.json
groupId: ${spring.cloud.nacos.config.group}
username: ${spring.cloud.nacos.username}
password: ${spring.cloud.nacos.password}
namespace: ${spring.profiles.active}
data-type: json
rule-type: gw-flow

View File

@ -1,27 +0,0 @@
spring:
mvc:
pathmatch:
# 修复 sentinel 控制台未适配 springboot 2.6 新路由方式
matching-strategy: ANT_PATH_MATCHER
server:
servlet:
encoding:
force: true
charset: UTF-8
enabled: true
session:
cookie:
name: sentinel_dashboard_cookie
logging:
level:
org.springframework.web: INFO
auth:
enabled: true
filter:
exclude-urls: /,/auth/login,/auth/logout,/registry/machine,/version,/actuator,/actuator/**
exclude-url-suffixes: htm,html,js,css,map,ico,ttf,woff,png
username: sentinel
password: sentinel

View File

@ -1,26 +0,0 @@
[
{
"resource": "ruoyi-auth",
"count": 500,
"grade": 1,
"limitApp": "default",
"strategy": 0,
"controlBehavior": 0
},
{
"resource": "ruoyi-system",
"count": 1000,
"grade": 1,
"limitApp": "default",
"strategy": 0,
"controlBehavior": 0
},
{
"resource": "ruoyi-resource",
"count": 500,
"grade": 1,
"limitApp": "default",
"strategy": 0,
"controlBehavior": 0
}
]

163
pom.xml
View File

@ -10,63 +10,60 @@
<name>RuoYi-Cloud-Plus</name>
<url>https://gitee.com/dromara/RuoYi-Cloud-Plus</url>
<description>RuoYi-Cloud-Plus微服务系统</description>
<description>Dromara RuoYi-Cloud-Plus微服务系统</description>
<properties>
<revision>2.2.1</revision>
<revision>2.5.2</revision>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>17</java.version>
<spring-boot.version>3.2.9</spring-boot.version>
<spring-cloud.version>2023.0.3</spring-cloud.version>
<spring-boot-admin.version>3.2.3</spring-boot-admin.version>
<spring-boot.version>3.5.9</spring-boot.version>
<spring-cloud.version>2025.0.1</spring-cloud.version>
<spring-boot-admin.version>3.5.5</spring-boot-admin.version>
<mybatis.version>3.5.16</mybatis.version>
<mybatis-plus.version>3.5.7</mybatis-plus.version>
<mybatis-plus.version>3.5.14</mybatis-plus.version>
<p6spy.version>3.9.1</p6spy.version>
<dynamic-ds.version>4.3.1</dynamic-ds.version>
<velocity.version>2.3</velocity.version>
<swagger.core.version>2.2.22</swagger.core.version>
<springdoc.version>2.6.0</springdoc.version>
<swagger.core.version>2.2.38</swagger.core.version>
<springdoc.version>2.8.14</springdoc.version>
<therapi-javadoc.version>0.15.0</therapi-javadoc.version>
<easyexcel.version>4.0.2</easyexcel.version>
<hutool.version>5.8.31</hutool.version>
<redisson.version>3.34.1</redisson.version>
<fastexcel.version>1.3.0</fastexcel.version>
<hutool.version>5.8.40</hutool.version>
<redisson.version>3.52.0</redisson.version>
<lock4j.version>2.2.7</lock4j.version>
<snailjob.version>1.1.2</snailjob.version>
<satoken.version>1.38.0</satoken.version>
<lombok.version>1.18.34</lombok.version>
<snailjob.version>1.9.0</snailjob.version>
<satoken.version>1.44.0</satoken.version>
<lombok.version>1.18.40</lombok.version>
<logstash.version>7.4</logstash.version>
<easy-es.version>2.0.0</easy-es.version>
<elasticsearch.version>7.14.0</elasticsearch.version>
<skywalking-toolkit.version>9.2.0</skywalking-toolkit.version>
<bouncycastle.version>1.76</bouncycastle.version>
<mapstruct-plus.version>1.4.4</mapstruct-plus.version>
<easy-es.version>3.0.1</easy-es.version>
<elasticsearch-client.version>7.17.28</elasticsearch-client.version>
<skywalking-toolkit.version>9.3.0</skywalking-toolkit.version>
<bouncycastle.version>1.80</bouncycastle.version>
<mapstruct-plus.version>1.5.0</mapstruct-plus.version>
<mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version>
<justauth.version>1.16.6</justauth.version>
<justauth.version>1.16.7</justauth.version>
<!-- 离线IP地址定位库 -->
<ip2region.version>2.7.0</ip2region.version>
<undertow.version>2.3.15.Final</undertow.version>
<ip2region.version>3.3.1</ip2region.version>
<!-- 临时修复 fastjson 漏洞 -->
<fastjson.version>1.2.83</fastjson.version>
<!-- OSS 配置 -->
<aws.sdk.version>2.25.15</aws.sdk.version>
<aws.crt.version>0.29.13</aws.crt.version>
<okhttp.version>4.10.0</okhttp.version>
<aws.sdk.version>2.28.22</aws.sdk.version>
<!-- SMS 配置 -->
<sms4j.version>3.3.2</sms4j.version>
<sms4j.version>3.3.4</sms4j.version>
<!-- 面向运行时的D-ORM依赖 -->
<anyline.version>8.7.2-20240808</anyline.version>
<anyline.version>8.7.3-20251210</anyline.version>
<!-- 工作流配置 -->
<flowable.version>7.0.1</flowable.version>
<warm-flow.version>1.8.4</warm-flow.version>
<!-- mq配置 -->
<rocketmq.version>2.3.0</rocketmq.version>
<rocketmq.version>2.3.4</rocketmq.version>
<!-- 插件版本 -->
<maven-compiler-plugin.verison>3.11.0</maven-compiler-plugin.verison>
<maven-surefire-plugin.version>3.1.2</maven-surefire-plugin.version>
<maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
<maven-surefire-plugin.version>3.5.3</maven-surefire-plugin.version>
<flatten-maven-plugin.version>1.3.0</flatten-maven-plugin.version>
<!-- 打包默认跳过测试 -->
<skipTests>true</skipTests>
</properties>
<profiles>
@ -141,13 +138,6 @@
<scope>import</scope>
</dependency>
<!-- JustAuth 的依赖配置-->
<dependency>
<groupId>me.zhyd.oauth</groupId>
<artifactId>JustAuth</artifactId>
<version>${justauth.version}</version>
</dependency>
<!-- common 的依赖配置-->
<dependency>
<groupId>org.dromara</groupId>
@ -166,14 +156,6 @@
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-bom</artifactId>
<version>${flowable.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-core</artifactId>
@ -198,6 +180,12 @@
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-jsqlparser</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
@ -235,9 +223,9 @@
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
<groupId>cn.idev.excel</groupId>
<artifactId>fastexcel</artifactId>
<version>${fastexcel.version}</version>
</dependency>
<!-- 代码生成使用模板 -->
@ -291,15 +279,17 @@
<artifactId>easy-es-boot-starter</artifactId>
<version>${easy-es.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>${elasticsearch-client.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
<artifactId>elasticsearch-rest-client</artifactId>
<version>${elasticsearch-client.version}</version>
</dependency>
<!-- skywalking 整合 logback -->
@ -314,30 +304,24 @@
<version>${skywalking-toolkit.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp.version}</version>
</dependency>
<!-- AWS SDK for Java 2.x -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
<!-- 使用AWS基于 CRT 的 S3 客户端 -->
<dependency>
<groupId>software.amazon.awssdk.crt</groupId>
<artifactId>aws-crt</artifactId>
<version>${aws.crt.version}</version>
</dependency>
<!-- 基于 AWS CRT 的 S3 客户端的性能增强的 S3 传输管理器 -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3-transfer-manager</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
<!-- 将基于 Netty 的 HTTP 客户端从类路径中移除 -->
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>netty-nio-client</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
<!--短信sms4j-->
<dependency>
@ -346,6 +330,13 @@
<version>${sms4j.version}</version>
</dependency>
<!-- JustAuth 的依赖配置-->
<dependency>
<groupId>me.zhyd.oauth</groupId>
<artifactId>JustAuth</artifactId>
<version>${justauth.version}</version>
</dependency>
<!-- 离线IP地址定位库 ip2region -->
<dependency>
<groupId>org.lionsoul</groupId>
@ -353,28 +344,6 @@
<version>${ip2region.version}</version>
</dependency>
<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-core</artifactId>
<version>${undertow.version}</version>
</dependency>
<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-servlet</artifactId>
<version>${undertow.version}</version>
</dependency>
<dependency>
<groupId>io.undertow</groupId>
<artifactId>undertow-websockets-jsr</artifactId>
<version>${undertow.version}</version>
</dependency>
<dependency>
<artifactId>commons-compress</artifactId>
<groupId>org.apache.commons</groupId>
<version>1.26.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
@ -401,6 +370,18 @@
<version>${rocketmq.version}</version>
</dependency>
<!-- Warm-Flow国产工作流引擎, 在线文档http://warm-flow.cn/ -->
<dependency>
<groupId>org.dromara.warm</groupId>
<artifactId>warm-flow-mybatis-plus-sb3-starter</artifactId>
<version>${warm-flow.version}</version>
</dependency>
<dependency>
<groupId>org.dromara.warm</groupId>
<artifactId>warm-flow-plugin-ui-sb-web</artifactId>
<version>${warm-flow.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
@ -424,7 +405,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.verison}</version>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>

View File

@ -15,7 +15,7 @@
</description>
<properties>
<revision>2.2.1</revision>
<revision>2.5.2</revision>
</properties>
<dependencyManagement>

View File

@ -1,5 +1,7 @@
package org.dromara.resource.api;
import java.util.List;
/**
* 消息服务
*
@ -13,7 +15,7 @@ public interface RemoteMessageService {
* @param sessionKey session主键 一般为用户id
* @param message 消息文本
*/
void publishMessage(Long sessionKey, String message);
void publishMessage(List<Long> sessionKey, String message);
/**
* 发布订阅的消息(群发)

View File

@ -3,6 +3,8 @@ package org.dromara.resource.api;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
/**
* 消息服务
*
@ -21,11 +23,11 @@ public class RemoteMessageServiceStub implements RemoteMessageService {
* @param message 消息文本
*/
@Override
public void publishMessage(Long sessionKey, String message) {
public void publishMessage(List<Long> sessionKey, String message) {
try {
remoteMessageService.publishMessage(sessionKey, message);
} catch (Exception e) {
log.warn("websocket 功能未开启或服务未找到");
log.warn("推送功能未开启或服务未找到");
}
}
@ -39,7 +41,7 @@ public class RemoteMessageServiceStub implements RemoteMessageService {
try {
remoteMessageService.publishAll(message);
} catch (Exception e) {
log.warn("websocket 功能未开启或服务未找到");
log.warn("推送功能未开启或服务未找到");
}
}
}

View File

@ -41,4 +41,9 @@ public class RemoteFile implements Serializable {
*/
private String fileSuffix;
/**
* 扩展字段
*/
private String ext1;
}

View File

@ -1,5 +1,11 @@
package org.dromara.system.api;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Dict;
import java.math.BigDecimal;
import java.util.List;
/**
* 配置服务
*
@ -14,4 +20,88 @@ public interface RemoteConfigService {
*/
boolean selectRegisterEnabled(String tenantId);
/**
* 根据参数 key 获取参数值
*
* @param configKey 参数 key
* @return 参数值
*/
String getConfigValue(String configKey);
/**
* 根据参数 key 获取布尔值
*
* @param configKey 参数 key
* @return Boolean
*/
default Boolean getConfigBool(String configKey) {
return Convert.toBool(getConfigValue(configKey));
}
/**
* 根据参数 key 获取整数值
*
* @param configKey 参数 key
* @return Integer
*/
default Integer getConfigInt(String configKey) {
return Convert.toInt(getConfigValue(configKey));
}
/**
* 根据参数 key 获取长整型值
*
* @param configKey 参数 key
* @return Long
*/
default Long getConfigLong(String configKey) {
return Convert.toLong(getConfigValue(configKey));
}
/**
* 根据参数 key 获取 BigDecimal
*
* @param configKey 参数 key
* @return BigDecimal
*/
default BigDecimal getConfigDecimal(String configKey) {
return Convert.toBigDecimal(getConfigValue(configKey));
}
/**
* 根据参数 key 获取 Map 类型的配置
*
* @param configKey 参数 key
* @return Dict 对象如果配置为空或无法解析返回空 Dict
*/
Dict getConfigMap(String configKey);
/**
* 根据参数 key 获取 Map 类型的配置列表
*
* @param configKey 参数 key
* @return Dict 列表如果配置为空或无法解析返回空列表
*/
List<Dict> getConfigArrayMap(String configKey);
/**
* 根据参数 key 获取指定类型的配置对象
*
* @param configKey 参数 key
* @param clazz 目标对象类型
* @param <T> 目标对象泛型
* @return 对象实例如果配置为空或无法解析返回 null
*/
<T> T getConfigObject(String configKey, Class<T> clazz);
/**
* 根据参数 key 获取指定类型的配置列表
*
* @param configKey 参数 key
* @param clazz 目标元素类型
* @param <T> 元素类型泛型
* @return 指定类型列表如果配置为空或无法解析返回空列表
*/
<T> List<T> getConfigArray(String configKey, Class<T> clazz);
}

View File

@ -1,5 +1,10 @@
package org.dromara.system.api;
import org.dromara.system.api.domain.vo.RemoteDeptVo;
import java.util.List;
import java.util.Map;
/**
* 部门服务
*
@ -15,4 +20,27 @@ public interface RemoteDeptService {
*/
String selectDeptNameByIds(String deptIds);
/**
* 根据部门ID查询部门负责人
*
* @param deptId 部门ID用于指定需要查询的部门
* @return 返回该部门的负责人ID
*/
Long selectDeptLeaderById(Long deptId);
/**
* 查询部门
*
* @return 部门列表
*/
List<RemoteDeptVo> selectDeptsByList();
/**
* 根据部门 ID 列表查询部门名称映射关系
*
* @param deptIds 部门 ID 列表
* @return Map其中 key 为部门 IDvalue 为对应的部门名称
*/
Map<Long, String> selectDeptNamesByIds(List<Long> deptIds);
}

View File

@ -1,6 +1,7 @@
package org.dromara.system.api;
import org.dromara.system.api.domain.vo.RemoteDictDataVo;
import org.dromara.system.api.domain.vo.RemoteDictTypeVo;
import java.util.List;
@ -11,6 +12,14 @@ import java.util.List;
*/
public interface RemoteDictService {
/**
* 根据字典类型查询信息
*
* @param dictType 字典类型
* @return 字典类型
*/
RemoteDictTypeVo selectDictTypeByType(String dictType);
/**
* 根据字典类型查询字典数据
*

View File

@ -0,0 +1,28 @@
package org.dromara.system.api;
import java.util.Set;
/**
* 用户权限处理
*
* @author Lion Li
*/
public interface RemotePermissionService {
/**
* 获取角色数据权限
*
* @param userId 用户id
* @return 角色权限信息
*/
Set<String> getRolePermission(Long userId);
/**
* 获取菜单数据权限
*
* @param userId 用户id
* @return 菜单权限信息
*/
Set<String> getMenuPermission(Long userId);
}

View File

@ -0,0 +1,21 @@
package org.dromara.system.api;
import java.util.List;
import java.util.Map;
/**
* 岗位服务
*
* @author Lion Li
*/
public interface RemotePostService {
/**
* 根据岗位 ID 列表查询岗位名称映射关系
*
* @param postIds 岗位 ID 列表
* @return Map其中 key 为岗位 IDvalue 为对应的岗位名称
*/
Map<Long, String> selectPostNamesByIds(List<Long> postIds);
}

View File

@ -0,0 +1,21 @@
package org.dromara.system.api;
import java.util.List;
import java.util.Map;
/**
* 角色服务
*
* @author Lion Li
*/
public interface RemoteRoleService {
/**
* 根据角色 ID 列表查询角色名称映射关系
*
* @param roleIds 角色 ID 列表
* @return Map其中 key 为角色 IDvalue 为对应的角色名称
*/
Map<Long, String> selectRoleNamesByIds(List<Long> roleIds);
}

View File

@ -0,0 +1,45 @@
package org.dromara.system.api;
import org.dromara.system.api.domain.bo.RemoteTaskAssigneeBo;
import org.dromara.system.api.domain.vo.RemoteTaskAssigneeVo;
/**
* 工作流设计器获取任务执行人
*
* @author Lion Li
*/
public interface RemoteTaskAssigneeService {
/**
* 查询角色并返回任务指派的列表支持分页
*
* @param taskQuery 查询条件
* @return 办理人
*/
RemoteTaskAssigneeVo selectRolesByTaskAssigneeList(RemoteTaskAssigneeBo taskQuery);
/**
* 查询岗位并返回任务指派的列表支持分页
*
* @param taskQuery 查询条件
* @return 办理人
*/
RemoteTaskAssigneeVo selectPostsByTaskAssigneeList(RemoteTaskAssigneeBo taskQuery);
/**
* 查询部门并返回任务指派的列表支持分页
*
* @param taskQuery 查询条件
* @return 办理人
*/
RemoteTaskAssigneeVo selectDeptsByTaskAssigneeList(RemoteTaskAssigneeBo taskQuery);
/**
* 查询用户并返回任务指派的列表支持分页
*
* @param taskQuery 查询条件
* @return 办理人
*/
RemoteTaskAssigneeVo selectUsersByTaskAssigneeList(RemoteTaskAssigneeBo taskQuery);
}

View File

@ -8,6 +8,7 @@ import org.dromara.system.api.model.LoginUser;
import org.dromara.system.api.model.XcxLoginUser;
import java.util.List;
import java.util.Map;
/**
* 用户服务
@ -131,4 +132,37 @@ public interface RemoteUserService {
* @return 用户ids
*/
List<Long> selectUserIdsByRoleIds(List<Long> roleIds);
/**
* 通过角色ID查询用户
*
* @param roleIds 角色ids
* @return 用户
*/
List<RemoteUserVo> selectUsersByRoleIds(List<Long> roleIds);
/**
* 通过部门ID查询用户
*
* @param deptIds 部门ids
* @return 用户
*/
List<RemoteUserVo> selectUsersByDeptIds(List<Long> deptIds);
/**
* 通过岗位ID查询用户
*
* @param postIds 岗位ids
* @return 用户
*/
List<RemoteUserVo> selectUsersByPostIds(List<Long> postIds);
/**
* 根据用户 ID 列表查询用户名称映射关系
*
* @param userIds 用户 ID 列表
* @return Map其中 key 为用户 IDvalue 为对应的用户名称
*/
Map<Long, String> selectUserNamesByIds(List<Long> userIds);
}

View File

@ -0,0 +1,56 @@
package org.dromara.system.api.domain.bo;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* 任务受让人
*
* @author AprilWind
*/
@Data
@NoArgsConstructor
public class RemoteTaskAssigneeBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 权限编码
*/
private String handlerCode;
/**
* 权限名称
*/
private String handlerName;
/**
* 权限分组
*/
private String groupId;
/**
* 开始时间
*/
private String beginTime;
/**
* 结束时间
*/
private String endTime;
/**
* 当前页
*/
private Integer pageNum = 1;
/**
* 每页显示条数
*/
private Integer pageSize = 10;
}

View File

@ -3,7 +3,7 @@ package org.dromara.system.api.domain.bo;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.xss.Xss;
import jakarta.validation.constraints.Email;
@ -118,7 +118,7 @@ public class RemoteUserBo implements Serializable {
}
public boolean isSuperAdmin() {
return UserConstants.SUPER_ADMIN_ID.equals(this.userId);
return SystemConstants.SUPER_ADMIN_ID.equals(this.userId);
}
}

View File

@ -0,0 +1,37 @@
package org.dromara.system.api.domain.vo;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* 部门
*
* @author AprilWind
*/
@Data
@NoArgsConstructor
public class RemoteDeptVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 部门ID
*/
private Long deptId;
/**
* 父部门ID
*/
private Long parentId;
/**
* 部门名称
*/
private String deptName;
}

View File

@ -0,0 +1,46 @@
package org.dromara.system.api.domain.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 字典类型视图对象 sys_dict_type
*
* @author Michelle.Chung
*/
@Data
public class RemoteDictTypeVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 字典主键
*/
private Long dictId;
/**
* 字典名称
*/
private String dictName;
/**
* 字典类型
*/
private String dictType;
/**
* 备注
*/
private String remark;
/**
* 创建时间
*/
private Date createTime;
}

View File

@ -0,0 +1,104 @@
package org.dromara.system.api.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 任务受让人
*
* @author AprilWind
*/
@Data
@NoArgsConstructor
public class RemoteTaskAssigneeVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 总大小
*/
private Long total = 0L;
/**
*
*/
private List<TaskHandler> list;
public RemoteTaskAssigneeVo(Long total, List<TaskHandler> list) {
this.total = total;
this.list = list;
}
/**
* 将源列表转换为 TaskHandler 列表
*
* @param <T> 通用类型
* @param sourceList 待转换的源列表
* @param storageId 提取 storageId 的函数
* @param handlerCode 提取 handlerCode 的函数
* @param handlerName 提取 handlerName 的函数
* @param groupName 提取 groupName 的函数
* @param createTimeMapper 提取 createTime 的函数
* @return 转换后的 TaskHandler 列表
*/
public static <T> List<TaskHandler> convertToHandlerList(
List<T> sourceList,
Function<T, String> storageId,
Function<T, String> handlerCode,
Function<T, String> handlerName,
Function<T, String> groupName,
Function<T, Date> createTimeMapper) {
return sourceList.stream()
.map(item -> new TaskHandler(
storageId.apply(item),
handlerCode.apply(item),
handlerName.apply(item),
groupName.apply(item),
createTimeMapper.apply(item)
)).collect(Collectors.toList());
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class TaskHandler implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private String storageId;
/**
* 权限编码
*/
private String handlerCode;
/**
* 权限名称
*/
private String handlerName;
/**
* 权限分组
*/
private String groupName;
/**
* 创建时间
*/
private Date createTime;
}
}

View File

@ -115,6 +115,11 @@ public class LoginUser implements Serializable {
*/
private List<RoleDTO> roles;
/**
* 岗位对象
*/
private List<PostDTO> posts;
/**
* 数据权限 当前角色ID
*/

View File

@ -0,0 +1,46 @@
package org.dromara.system.api.model;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* 岗位
*
* @author AprilWind
*/
@Data
@NoArgsConstructor
public class PostDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 岗位ID
*/
private Long postId;
/**
* 部门id
*/
private Long deptId;
/**
* 岗位编码
*/
private String postCode;
/**
* 岗位名称
*/
private String postName;
/**
* 岗位类别编码
*/
private String postCategory;
}

View File

@ -35,7 +35,7 @@ public class RoleDTO implements Serializable {
private String roleKey;
/**
* 数据范围1所有数据权限2自定义数据权限3本部门数据权限4本部门及以下数据权限5本人数据权限
* 数据范围1全部数据权限 2自定数据权限 3本部门数据权限 4本部门及以下数据权限 5仅本人数据权限 6部门及以下或本人数据权限
*/
private String dataScope;

View File

@ -22,9 +22,12 @@
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-core</artifactId>
</dependency>
<!-- 非必需模块 如果需要跟工作流同步数据 则需要在对应服务内引入bus模块 如果只是调用工作流api则不需要 -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-bus</artifactId>
<optional>true</optional>
</dependency>
</dependencies>

View File

@ -0,0 +1,106 @@
package org.dromara.workflow.api;
import org.dromara.workflow.api.domain.RemoteCompleteTask;
import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import java.util.List;
import java.util.Map;
/**
* 通用 工作流服务
*
* @Author ZETA
* @Date 2024/6/3
*/
public interface RemoteWorkflowService {
/**
* 运行中的实例 删除程实例删除历史记录删除业务与流程关联信息
*
* @param businessIds 业务id
* @return 结果
*/
boolean deleteInstance(List<String> businessIds);
/**
* 获取当前流程状态
*
* @param taskId 任务id
* @return 状态
*/
String getBusinessStatusByTaskId(Long taskId);
/**
* 获取当前流程状态
*
* @param businessId 业务id
* @return 状态
*/
String getBusinessStatus(String businessId);
/**
* 设置流程变量
*
* @param instanceId 流程实例id
* @param variable 流程变量
*/
void setVariable(Long instanceId, Map<String, Object> variable);
/**
* 获取流程变量
*
* @param instanceId 流程实例id
*/
Map<String, Object> instanceVariable(Long instanceId);
/**
* 按照业务id查询流程实例id
*
* @param businessId 业务id
* @return 结果
*/
Long getInstanceIdByBusinessId(String businessId);
/**
* 新增租户流程定义
*
* @param tenantId 租户id
*/
void syncDef(String tenantId);
/**
* 启动流程
*
* @param startProcess 参数
* @return 结果
*/
RemoteStartProcessReturn startWorkFlow(RemoteStartProcess startProcess);
/**
* 办理任务
*
* @param completeTask 参数
* @return 结果
*/
boolean completeTask(RemoteCompleteTask completeTask);
/**
* 办理任务
*
* @param taskId 任务ID
* @param message 办理意见
* @return 结果
*/
boolean completeTask(Long taskId, String message);
/**
* 启动流程并办理第一个任务
*
* @param startProcess 参数
* @return 结果
*/
boolean startCompleteTask(RemoteStartProcess startProcess);
}

View File

@ -0,0 +1,83 @@
package org.dromara.workflow.api;
import lombok.extern.slf4j.Slf4j;
import org.dromara.workflow.api.domain.RemoteCompleteTask;
import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.domain.RemoteStartProcessReturn;
import java.util.List;
import java.util.Map;
/**
* 工作流服务(降级处理)
*
* @author Lion Li
*/
@Slf4j
public class RemoteWorkflowServiceMock implements RemoteWorkflowService {
@Override
public boolean deleteInstance(List<String> businessIds) {
log.warn("服务调用异常 -> 降级处理");
return false;
}
@Override
public String getBusinessStatusByTaskId(Long taskId) {
log.warn("服务调用异常 -> 降级处理");
return null;
}
@Override
public String getBusinessStatus(String businessId) {
log.warn("服务调用异常 -> 降级处理");
return null;
}
@Override
public void setVariable(Long instanceId, Map<String, Object> variable) {
log.warn("服务调用异常 -> 降级处理");
}
@Override
public Map<String, Object> instanceVariable(Long instanceId) {
log.warn("服务调用异常 -> 降级处理");
return null;
}
@Override
public Long getInstanceIdByBusinessId(String businessId) {
log.warn("服务调用异常 -> 降级处理");
return null;
}
@Override
public void syncDef(String tenantId) {
log.warn("服务调用异常 -> 降级处理");
}
@Override
public RemoteStartProcessReturn startWorkFlow(RemoteStartProcess startProcess) {
log.warn("服务调用异常 -> 降级处理");
return null;
}
@Override
public boolean completeTask(RemoteCompleteTask completeTask) {
log.warn("服务调用异常 -> 降级处理");
return false;
}
@Override
public boolean completeTask(Long taskId, String message) {
log.warn("服务调用异常 -> 降级处理");
return false;
}
@Override
public boolean startCompleteTask(RemoteStartProcess startProcess) {
log.warn("服务调用异常 -> 降级处理");
return false;
}
}

View File

@ -0,0 +1,76 @@
package org.dromara.workflow.api.domain;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* 办理任务请求对象
*
* @author may
*/
@Data
public class RemoteCompleteTask implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 任务id
*/
private Long taskId;
/**
* 附件id
*/
private String fileId;
/**
* 抄送人员
*/
private List<RemoteFlowCopy> flowCopyList;
/**
* 消息类型
*/
private List<String> messageType;
/**
* 办理意见
*/
private String message;
/**
* 消息通知
*/
private String notice;
/**
* 办理人(可不填 用于覆盖当前节点办理人)
*/
private String handler;
/**
* 流程变量
*/
private Map<String, Object> variables;
/**
* 扩展变量(此处为逗号分隔的ossId)
*/
private String ext;
public Map<String, Object> getVariables() {
if (variables == null) {
return new HashMap<>(16);
}
variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
return variables;
}
}

View File

@ -1,28 +1,30 @@
package org.dromara.workflow.domain.vo;
package org.dromara.workflow.api.domain;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 流程变量
* 抄送
*
* @author may
*/
@Data
public class VariableVo implements Serializable {
public class RemoteFlowCopy implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 变量key
* 用户id
*/
private String key;
private Long userId;
/**
* 变量值
* 用户名称
*/
private String value;
private String userName;
}

View File

@ -0,0 +1,45 @@
package org.dromara.workflow.api.domain;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 流程实例业务扩展对象
*
* @author may
* @date 2025-08-05
*/
@Data
public class RemoteFlowInstanceBizExt implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
private Long id;
/**
* 流程实例ID
*/
private Long instanceId;
/**
* 业务ID
*/
private String businessId;
/**
* 业务编码
*/
private String businessCode;
/**
* 业务标题
*/
private String businessTitle;
}

View File

@ -0,0 +1,64 @@
package org.dromara.workflow.api.domain;
import cn.hutool.core.util.ObjectUtil;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* 启动流程对象
*
* @author may
*/
@Data
public class RemoteStartProcess implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 业务唯一值id
*/
private String businessId;
/**
* 流程定义编码
*/
private String flowCode;
/**
* 办理人(可不填 用于覆盖当前节点办理人)
*/
private String handler;
/**
* 流程变量前端会提交一个元素{'entity': {业务详情数据对象}}
*/
private Map<String, Object> variables;
/**
* 流程业务扩展信息
*/
private RemoteFlowInstanceBizExt bizExt;
public Map<String, Object> getVariables() {
if (variables == null) {
return new HashMap<>(16);
}
variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
return variables;
}
public RemoteFlowInstanceBizExt getBizExt() {
if (ObjectUtil.isNull(bizExt)) {
bizExt = new RemoteFlowInstanceBizExt();
}
return bizExt;
}
}

View File

@ -0,0 +1,30 @@
package org.dromara.workflow.api.domain;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 启动流程返回对象
*
* @author Lion Li
*/
@Data
public class RemoteStartProcessReturn implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程实例id
*/
private Long processInstanceId;
/**
* 任务id
*/
private Long taskId;
}

View File

@ -1,78 +0,0 @@
package org.dromara.workflow.api.domain;
import java.util.List;
import java.util.Map;
/**
* 通用 工作流服务
*
* @Author ZETA
* @Date 2024/6/3
*/
public interface RemoteWorkflowService {
/**
* 运行中的实例 删除程实例删除历史记录删除业务与流程关联信息
*
* @param businessKeys 业务id
* @return 结果
*/
boolean deleteRunAndHisInstance(List<String> businessKeys);
/**
* 获取当前流程状态
*
* @param taskId 任务id
*/
String getBusinessStatusByTaskId(String taskId);
/**
* 获取当前流程状态
*
* @param businessKey 业务id
*/
String getBusinessStatus(String businessKey);
/**
* 设置流程变量(全局变量)
*
* @param taskId 任务id
* @param variableName 变量名称
* @param value 变量值
*/
void setVariable(String taskId, String variableName, Object value);
/**
* 设置流程变量(全局变量)
*
* @param taskId 任务id
* @param variables 流程变量
*/
void setVariables(String taskId, Map<String, Object> variables);
/**
* 设置流程变量(本地变量,非全局变量)
*
* @param taskId 任务id
* @param variableName 变量名称
* @param value 变量值
*/
void setVariableLocal(String taskId, String variableName, Object value);
/**
* 设置流程变量(本地变量,非全局变量)
*
* @param taskId 任务id
* @param variables 流程变量
*/
void setVariablesLocal(String taskId, Map<String, Object> variables);
/**
* 按照业务id查询流程实例id
*
* @param businessKey 业务id
* @return 结果
*/
String getInstanceIdByBusinessKey(String businessKey);
}

View File

@ -1,4 +1,4 @@
package org.dromara.workflow.api.domain.event;
package org.dromara.workflow.api.event;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -8,38 +8,34 @@ import org.springframework.cloud.bus.event.RemoteApplicationEvent;
import java.io.Serial;
/**
* 流程办理监听
* 删除流程监听
*
* @author may
* @author AprilWind
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ProcessTaskEvent extends RemoteApplicationEvent {
public class ProcessDeleteEvent extends RemoteApplicationEvent {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程定义key
* 租户ID
*/
private String key;
private String tenantId;
/**
* 审批节点key
* 流程定义编码
*/
private String taskDefinitionKey;
/**
* 任务id
*/
private String taskId;
private String flowCode;
/**
* 业务id
*/
private String businessKey;
private String businessId;
public ProcessTaskEvent() {
public ProcessDeleteEvent() {
super(new Object(), SpringUtils.getApplicationName(), DEFAULT_DESTINATION_FACTORY.getDestination(null));
}
}

View File

@ -1,4 +1,4 @@
package org.dromara.workflow.api.domain.event;
package org.dromara.workflow.api.event;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -6,6 +6,7 @@ import org.dromara.common.core.utils.SpringUtils;
import org.springframework.cloud.bus.event.RemoteApplicationEvent;
import java.io.Serial;
import java.util.Map;
/**
* 总体流程监听
@ -20,24 +21,54 @@ public class ProcessEvent extends RemoteApplicationEvent {
private static final long serialVersionUID = 1L;
/**
* 流程定义key
* 租户ID
*/
private String key;
private String tenantId;
/**
* 流程定义编码
*/
private String flowCode;
/**
* 实例id
*/
private Long instanceId;
/**
* 业务id
*/
private String businessKey;
private String businessId;
/**
* 状态
* 节点类型0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关
*/
private Integer nodeType;
/**
* 流程节点编码
*/
private String nodeCode;
/**
* 流程节点名称
*/
private String nodeName;
/**
* 流程状态
*/
private String status;
/**
* 办理参数
*/
private Map<String, Object> params;
/**
* 当为true时为申请人节点办理
*/
private boolean submit;
private Boolean submit;
public ProcessEvent() {
super(new Object(), SpringUtils.getApplicationName(), DEFAULT_DESTINATION_FACTORY.getDestination(null));

View File

@ -0,0 +1,76 @@
package org.dromara.workflow.api.event;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.utils.SpringUtils;
import org.springframework.cloud.bus.event.RemoteApplicationEvent;
import java.io.Serial;
import java.util.Map;
/**
* 流程任务监听
*
* @author may
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ProcessTaskEvent extends RemoteApplicationEvent {
@Serial
private static final long serialVersionUID = 1L;
/**
* 租户ID
*/
private String tenantId;
/**
* 流程定义编码
*/
private String flowCode;
/**
* 节点类型0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关
*/
private Integer nodeType;
/**
* 流程节点编码
*/
private String nodeCode;
/**
* 流程节点名称
*/
private String nodeName;
/**
* 任务id
*/
private Long taskId;
/**
* 实例id
*/
private Long instanceId;
/**
* 业务id
*/
private String businessId;
/**
* 流程状态
*/
private String status;
/**
* 办理参数
*/
private Map<String, Object> params;
public ProcessTaskEvent() {
super(new Object(), SpringUtils.getApplicationName(), DEFAULT_DESTINATION_FACTORY.getDestination(null));
}
}

View File

@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
#FROM bellsoft/liberica-openjdk-debian:21.0.3-cds
FROM bellsoft/liberica-openjdk-rocky:17.0.16-cds
#FROM bellsoft/liberica-openjdk-rocky:21.0.8-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
@ -17,6 +17,8 @@ EXPOSE ${SERVER_PORT}
ADD ./target/ruoyi-auth.jar ./app.jar
SHELL ["/bin/bash", "-c"]
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${SERVER_PORT} \
#-Dskywalking.agent.service_name=ruoyi-auth \
#-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar \

View File

@ -26,11 +26,6 @@
<artifactId>hutool-captcha</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sentinel</artifactId>
</dependency>
<!-- RuoYi Common Security-->
<dependency>
<groupId>org.dromara</groupId>
@ -81,6 +76,12 @@
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-tenant</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-service-impl</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-api-resource</artifactId>

View File

@ -1,88 +0,0 @@
package org.dromara.auth.captcha;
import cn.hutool.captcha.generator.CodeGenerator;
import cn.hutool.core.math.Calculator;
import cn.hutool.core.util.CharUtil;
import cn.hutool.core.util.RandomUtil;
import org.dromara.common.core.utils.StringUtils;
import java.io.Serial;
/**
* 无符号计算生成器
*
* @author Lion Li
*/
public class UnsignedMathGenerator implements CodeGenerator {
@Serial
private static final long serialVersionUID = -5514819971774091076L;
private static final String OPERATORS = "+-*";
/**
* 参与计算数字最大长度
*/
private final int numberLength;
/**
* 构造
*/
public UnsignedMathGenerator() {
this(2);
}
/**
* 构造
*
* @param numberLength 参与计算最大数字位数
*/
public UnsignedMathGenerator(int numberLength) {
this.numberLength = numberLength;
}
@Override
public String generate() {
final int limit = getLimit();
int a = RandomUtil.randomInt(limit);
int b = RandomUtil.randomInt(limit);
String max = Integer.toString(Math.max(a,b));
String min = Integer.toString(Math.min(a,b));
max = StringUtils.rightPad(max, this.numberLength, CharUtil.SPACE);
min = StringUtils.rightPad(min, this.numberLength, CharUtil.SPACE);
return max + RandomUtil.randomChar(OPERATORS) + min + '=';
}
@Override
public boolean verify(String code, String userInputCode) {
int result;
try {
result = Integer.parseInt(userInputCode);
} catch (NumberFormatException e) {
// 用户输入非数字
return false;
}
final int calculateResult = (int) Calculator.conversion(code);
return result == calculateResult;
}
/**
* 获取验证码长度
*
* @return 验证码长度
*/
public int getLength() {
return this.numberLength * 2 + 2;
}
/**
* 根据长度获取参与计算数字最大值
*
* @return 最大值
*/
private int getLimit() {
return Integer.parseInt("1" + StringUtils.repeat('0', this.numberLength));
}
}

View File

@ -42,7 +42,6 @@ public class CaptchaController {
/**
* 生成验证码
*/
@RateLimiter(time = 60, count = 10, limitType = LimitType.IP)
@GetMapping("/code")
public R<CaptchaVo> getCode() {
CaptchaVo captchaVo = new CaptchaVo();
@ -51,28 +50,41 @@ public class CaptchaController {
captchaVo.setCaptchaEnabled(false);
return R.ok(captchaVo);
}
return R.ok(SpringUtils.getAopProxy(this).getCodeImpl());
}
/**
* 生成验证码
* 独立方法避免验证码关闭之后仍然走限流
*/
@RateLimiter(time = 60, count = 10, limitType = LimitType.IP)
public CaptchaVo getCodeImpl() {
// 保存验证码信息
String uuid = IdUtil.simpleUUID();
String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + uuid;
// 生成验证码
CaptchaType captchaType = captchaProperties.getType();
boolean isMath = CaptchaType.MATH == captchaType;
Integer length = isMath ? captchaProperties.getNumberLength() : captchaProperties.getCharLength();
CodeGenerator codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), length);
CodeGenerator codeGenerator;
if (CaptchaType.MATH == captchaType) {
codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), captchaProperties.getNumberLength(), false);
} else {
codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), captchaProperties.getCharLength());
}
AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz());
captcha.setGenerator(codeGenerator);
captcha.createCode();
// 如果是数学验证码使用SpEL表达式处理验证码结果
String code = captcha.getCode();
if (isMath) {
if (CaptchaType.MATH == captchaType) {
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression(StringUtils.remove(code, "="));
code = exp.getValue(String.class);
}
RedisUtils.setCacheObject(verifyKey, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
CaptchaVo captchaVo = new CaptchaVo();
captchaVo.setUuid(uuid);
captchaVo.setImg(captcha.getImageBase64());
return R.ok(captchaVo);
return captchaVo;
}
}

View File

@ -19,12 +19,14 @@ import org.dromara.auth.form.RegisterBody;
import org.dromara.auth.form.SocialLoginBody;
import org.dromara.auth.service.IAuthStrategy;
import org.dromara.auth.service.SysLoginService;
import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.utils.*;
import org.dromara.common.encrypt.annotation.ApiEncrypt;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.ratelimiter.annotation.RateLimiter;
import org.dromara.common.ratelimiter.enums.LimitType;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.social.config.properties.SocialLoginConfigProperties;
import org.dromara.common.social.config.properties.SocialProperties;
@ -41,6 +43,7 @@ import org.springframework.web.bind.annotation.*;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -92,7 +95,7 @@ public class TokenController {
if (ObjectUtil.isNull(clientVo) || !StringUtils.contains(clientVo.getGrantType(), grantType)) {
log.info("客户端id: {} 认证类型:{} 异常!.", clientId, grantType);
return R.fail(MessageUtils.message("auth.grant.type.error"));
} else if (!UserConstants.NORMAL.equals(clientVo.getStatus())) {
} else if (!SystemConstants.NORMAL.equals(clientVo.getStatus())) {
return R.fail(MessageUtils.message("auth.grant.type.blocked"));
}
// 校验租户
@ -102,8 +105,8 @@ public class TokenController {
Long userId = LoginHelper.getUserId();
scheduledExecutorService.schedule(() -> {
remoteMessageService.publishMessage(userId, "欢迎登录RuoYi-Cloud-Plus微服务管理系统");
}, 3, TimeUnit.SECONDS);
remoteMessageService.publishMessage(List.of(userId), DateUtils.getTodayHour(new Date()) + "好,欢迎登录 RuoYi-Cloud-Plus 后台管理系统");
}, 5, TimeUnit.SECONDS);
return R.ok(loginVo);
}
@ -190,6 +193,7 @@ public class TokenController {
*
* @return 租户列表
*/
@RateLimiter(time = 60, count = 20, limitType = LimitType.IP)
@GetMapping("/tenant/list")
public R<LoginTenantVo> tenantList(HttpServletRequest request) throws Exception {
// 返回对象
@ -223,7 +227,7 @@ public class TokenController {
}
// 根据域名进行筛选
List<TenantListVo> list = StreamUtils.filter(voList, vo ->
StringUtils.equals(vo.getDomain(), host));
StringUtils.equalsIgnoreCase(vo.getDomain(), host));
result.setVoList(CollUtil.isNotEmpty(list) ? list : voList);
return R.ok(result);
}

View File

@ -1,8 +1,8 @@
package org.dromara.auth.enums;
import cn.hutool.captcha.generator.CodeGenerator;
import cn.hutool.captcha.generator.MathGenerator;
import cn.hutool.captcha.generator.RandomGenerator;
import org.dromara.auth.captcha.UnsignedMathGenerator;
import lombok.AllArgsConstructor;
import lombok.Getter;
@ -18,7 +18,7 @@ public enum CaptchaType {
/**
* 数字
*/
MATH(UnsignedMathGenerator.class),
MATH(MathGenerator.class),
/**
* 字符

View File

@ -6,8 +6,6 @@ import lombok.EqualsAndHashCode;
import org.dromara.common.core.domain.model.LoginBody;
import org.hibernate.validator.constraints.Length;
import static org.dromara.common.core.constant.UserConstants.*;
/**
* 密码登录对象
*
@ -21,14 +19,15 @@ public class PasswordLoginBody extends LoginBody {
* 用户名
*/
@NotBlank(message = "{user.username.not.blank}")
@Length(min = USERNAME_MIN_LENGTH, max = USERNAME_MAX_LENGTH, message = "{user.username.length.valid}")
@Length(min = 2, max = 30, message = "{user.username.length.valid}")
private String username;
/**
* 用户密码
*/
@NotBlank(message = "{user.password.not.blank}")
@Length(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH, message = "{user.password.length.valid}")
@Length(min = 5, max = 30, message = "{user.password.length.valid}")
// @Pattern(regexp = RegexConstants.PASSWORD, message = "{user.password.format.valid}")
private String password;
}

View File

@ -6,8 +6,6 @@ import lombok.EqualsAndHashCode;
import org.dromara.common.core.domain.model.LoginBody;
import org.hibernate.validator.constraints.Length;
import static org.dromara.common.core.constant.UserConstants.*;
/**
* 用户注册对象
*
@ -21,14 +19,15 @@ public class RegisterBody extends LoginBody {
* 用户名
*/
@NotBlank(message = "{user.username.not.blank}")
@Length(min = USERNAME_MIN_LENGTH, max = USERNAME_MAX_LENGTH, message = "{user.username.length.valid}")
@Length(min = 2, max = 30, message = "{user.username.length.valid}")
private String username;
/**
* 用户密码
*/
@NotBlank(message = "{user.password.not.blank}")
@Length(min = PASSWORD_MIN_LENGTH, max = PASSWORD_MAX_LENGTH, message = "{user.password.length.valid}")
@Length(min = 5, max = 30, message = "{user.password.length.valid}")
// @Pattern(regexp = RegexConstants.PASSWORD, message = "{user.password.format.valid}")
private String password;
/**

View File

@ -1,9 +1,8 @@
package org.dromara.auth.listener;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.listener.SaTokenListener;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import cn.hutool.core.convert.Convert;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
@ -37,7 +36,6 @@ import java.time.Duration;
@Slf4j
public class UserActionListener implements SaTokenListener {
private final SaTokenConfig tokenConfig;
@DubboReference
private RemoteUserService remoteUserService;
@DubboReference
@ -47,7 +45,7 @@ public class UserActionListener implements SaTokenListener {
* 每次登录时触发
*/
@Override
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel) {
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginParameter loginParameter) {
UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent"));
String ip = ServletUtils.getClientIP();
SysUserOnline userOnline = new SysUserOnline();
@ -57,17 +55,17 @@ public class UserActionListener implements SaTokenListener {
userOnline.setOs(userAgent.getOs().getName());
userOnline.setLoginTime(System.currentTimeMillis());
userOnline.setTokenId(tokenValue);
String username = (String) loginModel.getExtra(LoginHelper.USER_NAME_KEY);
String tenantId = (String) loginModel.getExtra(LoginHelper.TENANT_KEY);
String username = (String) loginParameter.getExtra(LoginHelper.USER_NAME_KEY);
String tenantId = (String) loginParameter.getExtra(LoginHelper.TENANT_KEY);
userOnline.setUserName(username);
userOnline.setClientKey((String) loginModel.getExtra(LoginHelper.CLIENT_KEY));
userOnline.setDeviceType(loginModel.getDevice());
userOnline.setDeptName((String) loginModel.getExtra(LoginHelper.DEPT_NAME_KEY));
userOnline.setClientKey((String) loginParameter.getExtra(LoginHelper.CLIENT_KEY));
userOnline.setDeviceType(loginParameter.getDeviceType());
userOnline.setDeptName((String) loginParameter.getExtra(LoginHelper.DEPT_NAME_KEY));
TenantHelper.dynamic(tenantId, () -> {
if (tokenConfig.getTimeout() == -1) {
if (loginParameter.getTimeout() == -1) {
RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, userOnline);
} else {
RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, userOnline, Duration.ofSeconds(tokenConfig.getTimeout()));
RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, userOnline, Duration.ofSeconds(loginParameter.getTimeout()));
}
});
// 记录登录日志
@ -78,7 +76,7 @@ public class UserActionListener implements SaTokenListener {
logininforEvent.setMessage(MessageUtils.message("user.login.success"));
SpringUtils.context().publishEvent(logininforEvent);
// 更新登录信息
remoteUserService.recordLoginInfo((Long) loginModel.getExtra(LoginHelper.USER_KEY), ip);
remoteUserService.recordLoginInfo((Long) loginParameter.getExtra(LoginHelper.USER_KEY), ip);
log.info("user doLogin, useId:{}, token:{}", loginId, tokenValue);
}
@ -164,7 +162,7 @@ public class UserActionListener implements SaTokenListener {
* 每次Token续期时触发
*/
@Override
public void doRenewTimeout(String tokenValue, Object loginId, long timeout) {
public void doRenewTimeout(String loginType, Object loginId, String tokenValue, long timeout) {
}
}

View File

@ -1,7 +1,7 @@
package org.dromara.auth.service;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.secure.BCrypt;
import cn.hutool.crypto.digest.BCrypt;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
@ -14,12 +14,8 @@ import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.auth.form.RegisterBody;
import org.dromara.auth.properties.CaptchaProperties;
import org.dromara.auth.properties.UserPasswordProperties;
import org.dromara.common.core.constant.CacheConstants;
import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.constant.*;
import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.enums.TenantStatus;
import org.dromara.common.core.enums.UserType;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.exception.user.CaptchaException;
@ -175,11 +171,11 @@ public class SysLoginService {
String captcha = RedisUtils.getCacheObject(verifyKey);
RedisUtils.deleteObject(verifyKey);
if (captcha == null) {
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.jcaptcha.expire"));
recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
throw new CaptchaExpireException();
}
if (!code.equalsIgnoreCase(captcha)) {
recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.jcaptcha.error"));
if (!StringUtils.equalsIgnoreCase(code, captcha)) {
recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"));
throw new CaptchaException();
}
}
@ -247,17 +243,17 @@ public class SysLoginService {
if (!TenantHelper.isEnable()) {
return;
}
if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) {
return;
}
if (StringUtils.isBlank(tenantId)) {
throw new TenantException("tenant.number.not.blank");
}
if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) {
return;
}
RemoteTenantVo tenant = remoteTenantService.queryByTenantId(tenantId);
if (ObjectUtil.isNull(tenant)) {
log.info("登录租户:{} 不存在.", tenantId);
throw new TenantException("tenant.not.exists");
} else if (TenantStatus.DISABLE.getCode().equals(tenant.getStatus())) {
} else if (SystemConstants.DISABLE.equals(tenant.getStatus())) {
log.info("登录租户:{} 已被停用.", tenantId);
throw new TenantException("tenant.blocked");
} else if (ObjectUtil.isNotNull(tenant.getExpireTime())

View File

@ -1,7 +1,7 @@
package org.dromara.auth.service.impl;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
@ -54,8 +54,8 @@ public class EmailAuthStrategy implements IAuthStrategy {
});
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
SaLoginModel model = new SaLoginModel();
model.setDevice(client.getDeviceType());
SaLoginParameter model = new SaLoginParameter();
model.setDeviceType(client.getDeviceType());
// 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
// 例如: 后台用户30分钟过期 app用户1天过期
model.setTimeout(client.getTimeout());

View File

@ -1,8 +1,8 @@
package org.dromara.auth.service.impl;
import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.hutool.crypto.digest.BCrypt;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
@ -66,8 +66,8 @@ public class PasswordAuthStrategy implements IAuthStrategy {
});
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
SaLoginModel model = new SaLoginModel();
model.setDevice(client.getDeviceType());
SaLoginParameter model = new SaLoginParameter();
model.setDeviceType(client.getDeviceType());
// 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
// 例如: 后台用户30分钟过期 app用户1天过期
model.setTimeout(client.getTimeout());
@ -98,7 +98,7 @@ public class PasswordAuthStrategy implements IAuthStrategy {
loginService.recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
throw new CaptchaExpireException();
}
if (!code.equalsIgnoreCase(captcha)) {
if (!StringUtils.equalsIgnoreCase(code, captcha)) {
loginService.recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"));
throw new CaptchaException();
}

View File

@ -1,7 +1,7 @@
package org.dromara.auth.service.impl;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
@ -54,8 +54,8 @@ public class SmsAuthStrategy implements IAuthStrategy {
});
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
SaLoginModel model = new SaLoginModel();
model.setDevice(client.getDeviceType());
SaLoginParameter model = new SaLoginParameter();
model.setDeviceType(client.getDeviceType());
// 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
// 例如: 后台用户30分钟过期 app用户1天过期
model.setTimeout(client.getTimeout());

View File

@ -1,11 +1,8 @@
package org.dromara.auth.service.impl;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.model.AuthResponse;
@ -66,15 +63,6 @@ public class SocialAuthStrategy implements IAuthStrategy {
throw new ServiceException(response.getMsg());
}
AuthUser authUserData = response.getData();
if ("GITEE".equals(authUserData.getSource())) {
// 如用户使用 gitee 登录顺手 star 给作者一点支持 拒绝白嫖
HttpUtil.createRequest(Method.PUT, "https://gitee.com/api/v5/user/starred/dromara/RuoYi-Vue-Plus")
.formStr(MapUtil.of("access_token", authUserData.getToken().getAccessToken()))
.executeAsync();
HttpUtil.createRequest(Method.PUT, "https://gitee.com/api/v5/user/starred/dromara/RuoYi-Cloud-Plus")
.formStr(MapUtil.of("access_token", authUserData.getToken().getAccessToken()))
.executeAsync();
}
List<RemoteSocialVo> list = remoteSocialService.selectByAuthId(authUserData.getSource() + authUserData.getUuid());
if (CollUtil.isEmpty(list)) {
@ -94,8 +82,8 @@ public class SocialAuthStrategy implements IAuthStrategy {
LoginUser loginUser = remoteUserService.getUserInfo(socialVo.getUserId(), socialVo.getTenantId());
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
SaLoginModel model = new SaLoginModel();
model.setDevice(client.getDeviceType());
SaLoginParameter model = new SaLoginParameter();
model.setDeviceType(client.getDeviceType());
// 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
// 例如: 后台用户30分钟过期 app用户1天过期
model.setTimeout(client.getTimeout());

View File

@ -1,14 +1,22 @@
package org.dromara.auth.service.impl;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.model.AuthToken;
import me.zhyd.oauth.model.AuthUser;
import me.zhyd.oauth.request.AuthRequest;
import me.zhyd.oauth.request.AuthWechatMiniProgramRequest;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.auth.domain.vo.LoginVo;
import org.dromara.auth.form.XcxLoginBody;
import org.dromara.auth.service.IAuthStrategy;
import org.dromara.auth.service.SysLoginService;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.satoken.utils.LoginHelper;
@ -41,15 +49,29 @@ public class XcxAuthStrategy implements IAuthStrategy {
// 多个小程序识别使用
String appid = loginBody.getAppid();
// todo 以下自行实现
// 校验 appid + appsrcret + xcxCode 调用登录凭证校验接口 获取 session_key openid
String openid = "";
AuthRequest authRequest = new AuthWechatMiniProgramRequest(AuthConfig.builder()
.clientId(appid).clientSecret("自行填写密钥 可根据不同appid填入不同密钥")
.ignoreCheckRedirectUri(true).ignoreCheckState(true).build());
AuthCallback authCallback = new AuthCallback();
authCallback.setCode(xcxCode);
AuthResponse<AuthUser> resp = authRequest.login(authCallback);
String openid, unionId;
if (resp.ok()) {
AuthToken token = resp.getData().getToken();
openid = token.getOpenId();
// 微信小程序只有关联到微信开放平台下之后才能获取到 unionId因此unionId不一定能返回
unionId = token.getUnionId();
} else {
throw new ServiceException(resp.getMsg());
}
// todo getUserInfoByOpenid 方法内部查询逻辑需要自行根据业务实现
XcxLoginUser loginUser = remoteUserService.getUserInfoByOpenid(openid);
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
SaLoginModel model = new SaLoginModel();
model.setDevice(client.getDeviceType());
SaLoginParameter model = new SaLoginParameter();
model.setDeviceType(client.getDeviceType());
// 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
// 例如: 后台用户30分钟过期 app用户1天过期
model.setTimeout(client.getTimeout());

View File

@ -4,7 +4,7 @@
<property name="log.path" value="logs/${project.artifactId}"/>
<!-- 日志输出格式 -->
<property name="console.log.pattern"
value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
value="%cyan(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">

View File

@ -12,7 +12,7 @@
<module>ruoyi-common-bom</module>
<module>ruoyi-common-alibaba-bom</module>
<module>ruoyi-common-log</module>
<module>ruoyi-common-dict</module>
<module>ruoyi-common-service-impl</module>
<module>ruoyi-common-excel</module>
<module>ruoyi-common-core</module>
<module>ruoyi-common-redis</module>
@ -32,7 +32,6 @@
<module>ruoyi-common-sms</module>
<module>ruoyi-common-logstash</module>
<module>ruoyi-common-elasticsearch</module>
<module>ruoyi-common-sentinel</module>
<module>ruoyi-common-skylog</module>
<module>ruoyi-common-prometheus</module>
<module>ruoyi-common-translation</module>

View File

@ -14,13 +14,12 @@
</description>
<properties>
<revision>2.2.1</revision>
<spring-cloud-alibaba.version>2023.0.1.2</spring-cloud-alibaba.version>
<sentinel.version>1.8.8</sentinel.version>
<seata.version>1.7.1</seata.version>
<nacos.client.version>2.3.3</nacos.client.version>
<dubbo.version>3.2.14</dubbo.version>
<spring.context.support.version>1.0.11</spring.context.support.version>
<revision>2.5.2</revision>
<spring-cloud-alibaba.version>2025.0.0.0</spring-cloud-alibaba.version>
<seata.version>2.5.0</seata.version>
<nacos.client.version>2.5.1</nacos.client.version>
<dubbo.version>3.3.6</dubbo.version>
<dubbo-extensions.version>3.3.1</dubbo-extensions.version>
</properties>
<dependencyManagement>
<dependencies>
@ -35,117 +34,31 @@
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.client.version}</version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-log4j2-adapter</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-logback-adapter-12</artifactId>
</exclusion>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>logback-adapter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-parameter-flow-control</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-extension</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-apollo</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-zookeeper</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-redis</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-consul</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-web-servlet</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-annotation-aspectj</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-reactor-adapter</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-cluster-server-default</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-cluster-client-default</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-webflux-adapter</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-api-gateway-adapter-common</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-webmvc-v6x-adapter</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-dubbo-adapter</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-apache-dubbo-adapter</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-apache-dubbo3-adapter</artifactId>
<version>${sentinel.version}</version>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<groupId>org.apache.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>${seata.version}</version>
</dependency>
<dependency>
<groupId>org.apache.seata</groupId>
<artifactId>seata-all</artifactId>
<version>${seata.version}</version>
</dependency>
<!-- Apache Dubbo 配置 -->
<dependency>
@ -167,15 +80,9 @@
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<groupId>org.apache.dubbo.extensions</groupId>
<artifactId>dubbo-metadata-report-redis</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.context.support.version}</version>
<version>${dubbo-extensions.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

View File

@ -14,7 +14,7 @@
</description>
<properties>
<revision>2.2.1</revision>
<revision>2.5.2</revision>
</properties>
<dependencyManagement>
@ -54,10 +54,10 @@
<version>${revision}</version>
</dependency>
<!-- 字典 -->
<!-- 通用service实现模块 -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-dict</artifactId>
<artifactId>ruoyi-common-service-impl</artifactId>
<version>${revision}</version>
</dependency>
@ -166,13 +166,6 @@
<version>${revision}</version>
</dependency>
<!-- 限流模块 -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>ruoyi-common-sentinel</artifactId>
<version>${revision}</version>
</dependency>
<!-- skywalking日志收集模块 -->
<dependency>
<groupId>org.dromara</groupId>

View File

@ -1,52 +0,0 @@
package org.dromara.common.core.config;
import cn.hutool.core.util.ArrayUtil;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.core.task.VirtualThreadTaskExecutor;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import java.util.Arrays;
import java.util.concurrent.Executor;
/**
* 异步配置
* <p>
* 如果未使用虚拟线程则生效
*
* @author Lion Li
*/
@AutoConfiguration
public class AsyncConfig implements AsyncConfigurer {
/**
* 自定义 @Async 注解使用系统线程池
*/
@Override
public Executor getAsyncExecutor() {
if(SpringUtils.isVirtual()) {
return new VirtualThreadTaskExecutor("async-");
}
return SpringUtils.getBean("scheduledExecutorService");
}
/**
* 异步执行异常处理
*/
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return (throwable, method, objects) -> {
throwable.printStackTrace();
StringBuilder sb = new StringBuilder();
sb.append("Exception message - ").append(throwable.getMessage())
.append(", Method name - ").append(method.getName());
if (ArrayUtil.isNotEmpty(objects)) {
sb.append(", Parameter value - ").append(Arrays.toString(objects));
}
throw new ServiceException(sb.toString());
};
}
}

View File

@ -3,13 +3,12 @@ package org.dromara.common.core.config;
import jakarta.annotation.PreDestroy;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.dromara.common.core.utils.Threads;
import org.dromara.common.core.utils.SpringUtils;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.core.task.VirtualThreadTaskExecutor;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.*;
/**
* 线程池配置
@ -32,13 +31,20 @@ public class ThreadPoolConfig {
*/
@Bean(name = "scheduledExecutorService")
protected ScheduledExecutorService scheduledExecutorService() {
// daemon 必须为 true
BasicThreadFactory.Builder builder = new BasicThreadFactory.Builder().daemon(true);
if (SpringUtils.isVirtual()) {
builder.namingPattern("virtual-schedule-pool-%d").wrappedFactory(new VirtualThreadTaskExecutor().getVirtualThreadFactory());
} else {
builder.namingPattern("schedule-pool-%d");
}
ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(core,
new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(),
builder.build(),
new ThreadPoolExecutor.CallerRunsPolicy()) {
@Override
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
Threads.printException(r, t);
printException(r, t);
}
};
this.scheduledExecutorService = scheduledThreadPoolExecutor;
@ -47,15 +53,57 @@ public class ThreadPoolConfig {
/**
* 销毁事件
* 停止线程池
* 先使用shutdown, 停止接收新任务并尝试完成所有已存在任务.
* 如果超时, 则调用shutdownNow, 取消在workQueue中Pending的任务,并中断所有阻塞函数.
* 如果仍然超時則強制退出.
* 另对在shutdown时线程本身被调用中断做了处理.
*/
@PreDestroy
public void destroy() {
try {
log.info("====关闭后台任务任务线程池====");
Threads.shutdownAndAwaitTermination(scheduledExecutorService);
ScheduledExecutorService pool = scheduledExecutorService;
if (pool != null && !pool.isShutdown()) {
pool.shutdown();
try {
if (!pool.awaitTermination(120, TimeUnit.SECONDS)) {
pool.shutdownNow();
if (!pool.awaitTermination(120, TimeUnit.SECONDS)) {
log.info("Pool did not terminate");
}
}
} catch (InterruptedException ie) {
pool.shutdownNow();
Thread.currentThread().interrupt();
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
/**
* 打印线程异常信息
*/
public static void printException(Runnable r, Throwable t) {
if (t == null && r instanceof Future<?>) {
try {
Future<?> future = (Future<?>) r;
if (future.isDone()) {
future.get();
}
} catch (CancellationException ce) {
t = ce;
} catch (ExecutionException ee) {
t = ee.getCause();
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
}
}
if (t != null) {
log.error(t.getMessage(), t);
}
}
}

View File

@ -3,6 +3,7 @@ package org.dromara.common.core.config;
import jakarta.validation.Validator;
import org.hibernate.validator.HibernateValidator;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
@ -14,11 +15,11 @@ import java.util.Properties;
*
* @author Lion Li
*/
@AutoConfiguration
@AutoConfiguration(before = ValidationAutoConfiguration.class)
public class ValidatorConfig {
/**
* 配置校验框架 快速返回模式
* 配置校验框架 快速失败模式
*/
@Bean
public Validator validator(MessageSource messageSource) {
@ -28,7 +29,7 @@ public class ValidatorConfig {
// 设置使用 HibernateValidator 校验器
factoryBean.setProviderClass(HibernateValidator.class);
Properties properties = new Properties();
// 设置 快速异常返回
// 设置快速失败模式fail-fast即校验过程中一旦遇到失败立即停止并返回错误
properties.setProperty("hibernate.validator.fail_fast", "true");
factoryBean.setValidationProperties(properties);
// 加载配置

View File

@ -3,13 +3,14 @@ package org.dromara.common.core.constant;
/**
* 缓存组名称常量
* <p>
* key 格式为 cacheNames#ttl#maxIdleTime#maxSize
* key 格式为 cacheNames#ttl#maxIdleTime#maxSize#local
* <p>
* ttl 过期时间 如果设置为0则不过期 默认为0
* maxIdleTime 最大空闲时间 根据LRU算法清理空闲数据 如果设置为0则不检测 默认为0
* maxSize 组最大长度 根据LRU算法清理溢出数据 如果设置为0则无限长 默认为0
* local 默认开启本地缓存为1 关闭本地缓存为0
* <p>
* 例子: test#60stest#0#60stest#0#1m#1000test#1h#0#500
* 例子: test#60stest#0#60stest#0#1m#1000test#1h#0#500test#1h#0#500#0
*
* @author Lion Li
*/
@ -30,6 +31,11 @@ public interface CacheNames {
*/
String SYS_DICT = "sys_dict";
/**
* 数据字典类型
*/
String SYS_DICT_TYPE = "sys_dict_type";
/**
* 租户
*/
@ -60,6 +66,16 @@ public interface CacheNames {
*/
String SYS_OSS = "sys_oss#30d";
/**
* 角色自定义权限
*/
String SYS_ROLE_CUSTOM = "sys_role_custom#30d";
/**
* 部门及以下权限
*/
String SYS_DEPT_AND_CHILD = "sys_dept_and_child#30d";
/**
* OSS配置
*/

View File

@ -67,15 +67,15 @@ public interface Constants {
*/
Integer CAPTCHA_EXPIRATION = 2;
/**
* 令牌
*/
String TOKEN = "token";
/**
* 顶级部门id
*/
Long TOP_PARENT_ID = 0L;
/**
* 加密头
*/
String ENCRYPT_HEADER = "ENC_";
}

View File

@ -17,9 +17,14 @@ public interface RegexConstants extends RegexPool {
String DICTIONARY_TYPE = "^[a-z][a-z0-9_]*$";
/**
* 权限标识必须符合 tool:build:list 格式或者空字符串
* 权限标识必须符合以下格式
* 1. 标准格式xxx:yyy:zzz
* - 第一部分xxx只能包含字母数字和下划线_不能使用 `*`
* - 第二部分yyy可以包含字母数字下划线_ `*`
* - 第三部分zzz可以包含字母数字下划线_ `*`
* 2. 允许空字符串""表示没有权限标识
*/
String PERMISSION_STRING = "^(|^[a-zA-Z0-9_]+:[a-zA-Z0-9_]+:[a-zA-Z0-9_]+)$";
String PERMISSION_STRING = "^$|^[a-zA-Z0-9_]+:[a-zA-Z0-9_*]+:[a-zA-Z0-9_*]+$";
/**
* 身份证号码后6位

View File

@ -0,0 +1,80 @@
package org.dromara.common.core.constant;
/**
* 用户常量信息
*
* @author Lion Li
*/
public interface SystemConstants {
/**
* 正常状态
*/
String NORMAL = "0";
/**
* 异常状态
*/
String DISABLE = "1";
/**
* 是否为系统默认
*/
String YES = "Y";
/**
* 是否菜单外链
*/
String YES_FRAME = "0";
/**
* 是否菜单外链
*/
String NO_FRAME = "1";
/**
* 菜单类型目录
*/
String TYPE_DIR = "M";
/**
* 菜单类型菜单
*/
String TYPE_MENU = "C";
/**
* 菜单类型按钮
*/
String TYPE_BUTTON = "F";
/**
* Layout组件标识
*/
String LAYOUT = "Layout";
/**
* ParentView组件标识
*/
String PARENT_VIEW = "ParentView";
/**
* InnerLink组件标识
*/
String INNER_LINK = "InnerLink";
/**
* 超级管理员ID
*/
Long SUPER_ADMIN_ID = 1L;
/**
* 根部门祖级列表
*/
String ROOT_DEPT_ANCESTORS = "0";
/**
* 排除敏感属性字段
*/
String[] EXCLUDE_PROPERTIES = { "password", "oldPassword", "newPassword", "confirmPassword" };
}

View File

@ -7,16 +7,6 @@ package org.dromara.common.core.constant;
*/
public interface TenantConstants {
/**
* 租户正常状态
*/
String NORMAL = "0";
/**
* 租户封禁状态
*/
String DISABLE = "1";
/**
* 超级管理员ID
*/

View File

@ -1,152 +0,0 @@
package org.dromara.common.core.constant;
/**
* 用户常量信息
*
* @author ruoyi
*/
public interface UserConstants {
/**
* 平台内系统用户的唯一标志
*/
String SYS_USER = "SYS_USER";
/**
* 正常状态
*/
String NORMAL = "0";
/**
* 异常状态
*/
String EXCEPTION = "1";
/**
* 用户正常状态
*/
String USER_NORMAL = "0";
/**
* 用户封禁状态
*/
String USER_DISABLE = "1";
/**
* 角色正常状态
*/
String ROLE_NORMAL = "0";
/**
* 角色封禁状态
*/
String ROLE_DISABLE = "1";
/**
* 部门正常状态
*/
String DEPT_NORMAL = "0";
/**
* 部门停用状态
*/
String DEPT_DISABLE = "1";
/**
* 岗位正常状态
*/
String POST_NORMAL = "0";
/**
* 岗位停用状态
*/
String POST_DISABLE = "1";
/**
* 字典正常状态
*/
String DICT_NORMAL = "0";
/**
* 通用存在标志
*/
String DEL_FLAG_NORMAL = "0";
/**
* 通用删除标志
*/
String DEL_FLAG_REMOVED = "2";
/**
* 是否为系统默认
*/
String YES = "Y";
/**
* 是否菜单外链
*/
String YES_FRAME = "0";
/**
* 是否菜单外链
*/
String NO_FRAME = "1";
/**
* 菜单正常状态
*/
String MENU_NORMAL = "0";
/**
* 菜单停用状态
*/
String MENU_DISABLE = "1";
/**
* 菜单类型目录
*/
String TYPE_DIR = "M";
/**
* 菜单类型菜单
*/
String TYPE_MENU = "C";
/**
* 菜单类型按钮
*/
String TYPE_BUTTON = "F";
/**
* Layout组件标识
*/
String LAYOUT = "Layout";
/**
* ParentView组件标识
*/
String PARENT_VIEW = "ParentView";
/**
* InnerLink组件标识
*/
String INNER_LINK = "InnerLink";
/**
* 用户名长度限制
*/
int USERNAME_MIN_LENGTH = 2;
int USERNAME_MAX_LENGTH = 20;
/**
* 密码长度限制
*/
int PASSWORD_MIN_LENGTH = 5;
int PASSWORD_MAX_LENGTH = 20;
/**
* 超级管理员ID
*/
Long SUPER_ADMIN_ID = 1L;
}

View File

@ -7,6 +7,10 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StringUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 业务状态枚举
@ -16,30 +20,37 @@ import java.util.Arrays;
@Getter
@AllArgsConstructor
public enum BusinessStatusEnum {
/**
* 已撤销
*/
CANCEL("cancel", "已撤销"),
/**
* 草稿
*/
DRAFT("draft", "草稿"),
/**
* 待审核
*/
WAITING("waiting", "待审核"),
/**
* 已完成
*/
FINISH("finish", "已完成"),
/**
* 已作废
*/
INVALID("invalid", "已作废"),
/**
* 已退回
*/
BACK("back", "已退回"),
/**
* 已终止
*/
@ -55,20 +66,72 @@ public enum BusinessStatusEnum {
*/
private final String desc;
private static final Map<String, BusinessStatusEnum> STATUS_MAP = Arrays.stream(BusinessStatusEnum.values())
.collect(Collectors.toConcurrentMap(BusinessStatusEnum::getStatus, Function.identity()));
/**
* 获取业务状态
* 根据状态获取对应的 BusinessStatusEnum 枚举
*
* @param status 状态
* @param status 业务状态码
* @return 对应的 BusinessStatusEnum 枚举如果找不到则返回 null
*/
public static BusinessStatusEnum getByStatus(String status) {
// 使用 STATUS_MAP 获取对应的枚举若找不到则返回 null
return STATUS_MAP.get(status);
}
/**
* 根据状态获取对应的业务状态描述信息
*
* @param status 业务状态码
* @return 返回业务状态描述若状态码为空或未找到对应的枚举返回空字符串
*/
public static String findByStatus(String status) {
if (StringUtils.isBlank(status)) {
return StrUtil.EMPTY;
}
return Arrays.stream(BusinessStatusEnum.values())
.filter(statusEnum -> statusEnum.getStatus().equals(status))
.findFirst()
.map(BusinessStatusEnum::getDesc)
.orElse(StrUtil.EMPTY);
BusinessStatusEnum statusEnum = STATUS_MAP.get(status);
return (statusEnum != null) ? statusEnum.getDesc() : StrUtil.EMPTY;
}
/**
* 判断是否为指定的状态之一草稿已撤销或已退回
*
* @param status 要检查的状态
* @return 如果状态为草稿已撤销或已退回之一则返回 true否则返回 false
*/
public static boolean isDraftOrCancelOrBack(String status) {
return DRAFT.status.equals(status) || CANCEL.status.equals(status) || BACK.status.equals(status);
}
/**
* 判断是否为撤销退回作废终止
*
* @param status status
* @return 结果
*/
public static boolean initialState(String status) {
return CANCEL.status.equals(status) || BACK.status.equals(status) || INVALID.status.equals(status) || TERMINATION.status.equals(status);
}
/**
* 获取运行中的实例状态列表
*
* @return 包含运行中实例状态的不可变列表
* 包含 DRAFTWAITINGBACK CANCEL 状态
*/
public static List<String> runningStatus() {
return Arrays.asList(DRAFT.status, WAITING.status, BACK.status, CANCEL.status);
}
/**
* 获取结束实例的状态列表
*
* @return 包含结束实例状态的不可变列表
* 包含 FINISHINVALID TERMINATION 状态
*/
public static List<String> finishStatus() {
return Arrays.asList(FINISH.status, INVALID.status, TERMINATION.status);
}
/**
@ -148,5 +211,5 @@ public enum BusinessStatusEnum {
throw new ServiceException("流程状态为空!");
}
}
}
}

View File

@ -5,7 +5,6 @@ import lombok.Getter;
/**
* 设备类型
* 针对一套 用户体系
*
* @author Lion Li
*/
@ -26,7 +25,15 @@ public enum DeviceType {
/**
* 小程序端
*/
XCX("xcx");
XCX("xcx"),
/**
* 第三方社交登录平台
*/
SOCIAL("social");
/**
* 设备标识
*/
private final String device;
}

View File

@ -0,0 +1,146 @@
package org.dromara.common.core.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.dromara.common.core.utils.StringUtils;
/*
* 日期格式
* "yyyy"4位数的年份例如2023年表示为"2023"
* "yy"2位数的年份例如2023年表示为"23"
* "MM"2位数的月份取值范围为01到12例如7月表示为"07"
* "M"不带前导零的月份取值范围为1到12例如7月表示为"7"
* "dd"2位数的日期取值范围为01到31例如22日表示为"22"
* "d"不带前导零的日期取值范围为1到31例如22日表示为"22"
* "EEEE"星期的全名例如星期三表示为"Wednesday"
* "E"星期的缩写例如星期三表示为"Wed"
* "DDD" "D"一年中的第几天取值范围为001到366例如第200天表示为"200"
* 时间格式
* "HH"24小时制的小时数取值范围为00到23例如下午5点表示为"17"
* "hh"12小时制的小时数取值范围为01到12例如下午5点表示为"05"
* "mm"分钟数取值范围为00到59例如30分钟表示为"30"
* "ss"秒数取值范围为00到59例如45秒表示为"45"
* "SSS"毫秒数取值范围为000到999例如123毫秒表示为"123"
*/
/**
* 日期格式与时间格式枚举
*/
@Getter
@AllArgsConstructor
public enum FormatsType {
/**
* 例如2023年表示为"23"
*/
YY("yy"),
/**
* 例如2023年表示为"2023"
*/
YYYY("yyyy"),
/**
* 例例如2023年7月可以表示为 "2023-07"
*/
YYYY_MM("yyyy-MM"),
/**
* 例如日期 "2023年7月22日" 可以表示为 "2023-07-22"
*/
YYYY_MM_DD("yyyy-MM-dd"),
/**
* 例如当前时间如果是 "2023年7月22日下午3点30分"则可以表示为 "2023-07-22 15:30"
*/
YYYY_MM_DD_HH_MM("yyyy-MM-dd HH:mm"),
/**
* 例如当前时间如果是 "2023年7月22日下午3点30分45秒"则可以表示为 "2023-07-22 15:30:45"
*/
YYYY_MM_DD_HH_MM_SS("yyyy-MM-dd HH:mm:ss"),
/**
* 例如下午3点30分45秒表示为 "15:30:45"
*/
HH_MM_SS("HH:mm:ss"),
/**
* 例例如2023年7月可以表示为 "2023/07"
*/
YYYY_MM_SLASH("yyyy/MM"),
/**
* 例如日期 "2023年7月22日" 可以表示为 "2023/07/22"
*/
YYYY_MM_DD_SLASH("yyyy/MM/dd"),
/**
* 例如当前时间如果是 "2023年7月22日下午3点30分45秒"则可以表示为 "2023/07/22 15:30:45"
*/
YYYY_MM_DD_HH_MM_SLASH("yyyy/MM/dd HH:mm"),
/**
* 例如当前时间如果是 "2023年7月22日下午3点30分45秒"则可以表示为 "2023/07/22 15:30:45"
*/
YYYY_MM_DD_HH_MM_SS_SLASH("yyyy/MM/dd HH:mm:ss"),
/**
* 例例如2023年7月可以表示为 "2023.07"
*/
YYYY_MM_DOT("yyyy.MM"),
/**
* 例如日期 "2023年7月22日" 可以表示为 "2023.07.22"
*/
YYYY_MM_DD_DOT("yyyy.MM.dd"),
/**
* 例如当前时间如果是 "2023年7月22日下午3点30分"则可以表示为 "2023.07.22 15:30"
*/
YYYY_MM_DD_HH_MM_DOT("yyyy.MM.dd HH:mm"),
/**
* 例如当前时间如果是 "2023年7月22日下午3点30分45秒"则可以表示为 "2023.07.22 15:30:45"
*/
YYYY_MM_DD_HH_MM_SS_DOT("yyyy.MM.dd HH:mm:ss"),
/**
* 例如2023年7月可以表示为 "202307"
*/
YYYYMM("yyyyMM"),
/**
* 例如2023年7月22日可以表示为 "20230722"
*/
YYYYMMDD("yyyyMMdd"),
/**
* 例如2023年7月22日下午3点可以表示为 "2023072215"
*/
YYYYMMDDHH("yyyyMMddHH"),
/**
* 例如2023年7月22日下午3点30分可以表示为 "202307221530"
*/
YYYYMMDDHHMM("yyyyMMddHHmm"),
/**
* 例如2023年7月22日下午3点30分45秒可以表示为 "20230722153045"
*/
YYYYMMDDHHMMSS("yyyyMMddHHmmss");
/**
* 时间格式
*/
private final String timeFormat;
public static FormatsType getFormatsType(String str) {
for (FormatsType value : values()) {
if (StringUtils.contains(str, value.getTimeFormat())) {
return value;
}
}
throw new RuntimeException("'FormatsType' not found By " + str);
}
}

View File

@ -1,30 +0,0 @@
package org.dromara.common.core.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 用户状态
*
* @author LionLi
*/
@Getter
@AllArgsConstructor
public enum TenantStatus {
/**
* 正常
*/
OK("0", "正常"),
/**
* 停用
*/
DISABLE("1", "停用"),
/**
* 删除
*/
DELETED("2", "删除");
private final String code;
private final String info;
}

View File

@ -1,12 +1,11 @@
package org.dromara.common.core.enums;
import org.dromara.common.core.utils.StringUtils;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.dromara.common.core.utils.StringUtils;
/**
* 设备类型
* 针对多套 用户体系
* 用户类型
*
* @author Lion Li
*/
@ -15,15 +14,18 @@ import lombok.Getter;
public enum UserType {
/**
* pc端
* 后台系统用户
*/
SYS_USER("sys_user"),
/**
* app端
* 移动客户端用户
*/
APP_USER("app_user");
/**
* 用户类型标识用于 token权限识别等
*/
private final String userType;
public static UserType getUserType(String str) {

View File

@ -1,5 +1,6 @@
package org.dromara.common.core.exception;
import cn.hutool.core.text.StrFormatter;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -8,7 +9,7 @@ import lombok.NoArgsConstructor;
import java.io.Serial;
/**
* 业务异常
* 业务异常支持占位符 {}
*
* @author ruoyi
*/
@ -45,8 +46,8 @@ public final class ServiceException extends RuntimeException {
this.code = code;
}
public String getDetailMessage() {
return detailMessage;
public ServiceException(String message, Object... args) {
this.message = StrFormatter.format(message, args);
}
@Override
@ -54,10 +55,6 @@ public final class ServiceException extends RuntimeException {
return message;
}
public Integer getCode() {
return code;
}
public ServiceException setMessage(String message) {
this.message = message;
return this;

Some files were not shown because too many files have changed in this diff Show More