Commit 58a1c1d5fd3324312867b6427906cc8f55e51405

Authored by YunaiV
1 parent 09cf3017

feat(oa):README

README.md
@@ -28,8 +28,8 @@ @@ -28,8 +28,8 @@
28 | 【完整版】[ruoyi-vue-pro](https://gitee.com/zhijiantianya/ruoyi-vue-pro) | [`master`](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master-jdk17/) 分支 | [`master-jdk25`](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master-jdk25/) 分支 | 28 | 【完整版】[ruoyi-vue-pro](https://gitee.com/zhijiantianya/ruoyi-vue-pro) | [`master`](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master-jdk17/) 分支 | [`master-jdk25`](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master-jdk25/) 分支 |
29 | 【精简版】[yudao-boot-mini](https://gitee.com/yudaocode/yudao-boot-mini) | [`master`](https://gitee.com/yudaocode/yudao-boot-mini/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/yudaocode/yudao-boot-mini/tree/master-jdk17/) 分支 | [`master-jdk25`](https://gitee.com/yudaocode/yudao-boot-mini/tree/master-jdk25/) 分支 | 29 | 【精简版】[yudao-boot-mini](https://gitee.com/yudaocode/yudao-boot-mini) | [`master`](https://gitee.com/yudaocode/yudao-boot-mini/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/yudaocode/yudao-boot-mini/tree/master-jdk17/) 分支 | [`master-jdk25`](https://gitee.com/yudaocode/yudao-boot-mini/tree/master-jdk25/) 分支 |
30 30
31 -* 【完整版】:包括系统功能、基础设施、会员中心、数据报表、工作流程、商城系统、微信公众号、CRM、ERP、WMS、MES、HRM、FMS、PMS、IM 即时通讯、AI 大模型、IoT 物联网等功能  
32 -* 【精简版】:只包括系统功能、基础设施功能,不包括会员中心、数据报表、工作流程、商城系统、微信公众号、CRM、ERP、WMS、MES、HRM、FMS、PMS、IM 即时通讯、AI 大模型、IoT 物联网等功能 31 +* 【完整版】:包括系统功能、基础设施、工作流程、支付系统、数据报表、微信公众号、商城系统、会员中心、ERP、WMS、CRM、MES、HRM、FMS、PMS、OA 协同办公、AI 大模型、IoT 物联网、IM 即时通讯等功能
  32 +* 【精简版】:只包括系统功能、基础设施功能,不包括工作流程、支付系统、数据报表、微信公众号、商城系统、会员中心、ERP、WMS、CRM、MES、HRM、FMS、PMS、OA 协同办公、AI 大模型、IoT 物联网、IM 即时通讯等功能
33 33
34 可参考 [《迁移文档》](https://doc.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】 34 可参考 [《迁移文档》](https://doc.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】
35 35
@@ -112,7 +112,7 @@ @@ -112,7 +112,7 @@
112 112
113 * 通用模块(必选):系统功能、基础设施 113 * 通用模块(必选):系统功能、基础设施
114 * 通用模块(可选):工作流程、支付系统、数据报表、会员中心 114 * 通用模块(可选):工作流程、支付系统、数据报表、会员中心
115 -* 业务系统(按需):Mall 电子商城、OA 办公自动化、ERP 企业资源计划系统、WMS 仓库管理系统、CRM 客户关系管理、CMS 内容管理系统、MES 执行制造系统、HRM 人力资源管理、FMS 财务管理、PMS 项目管理、AI 大模型平台、IoT 物联网系统、IM 即时通讯系统、Mobile 手机移动端、Report 数据大屏 115 +* 业务系统(按需):Mall 电子商城、ERP 企业资源计划系统、WMS 仓库管理系统、CRM 客户关系管理、CMS 内容管理系统、MES 执行制造系统、HRM 人力资源管理、FMS 财务管理、PMS 项目管理、OA 办公自动化、AI 大模型平台、IoT 物联网系统、IM 即时通讯系统、Mobile 手机移动端、Report 数据大屏
116 116
117 > 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。 117 > 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。
118 > 118 >
@@ -147,6 +147,31 @@ @@ -147,6 +147,31 @@
147 147
148 ![功能图](/.image/common/system-feature.png) 148 ![功能图](/.image/common/system-feature.png)
149 149
  150 +### 基础设施
  151 +
  152 +| | 功能 | 描述 |
  153 +|-----|-----------|----------------------------------------------|
  154 +| 🚀 | 代码生成 | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 |
  155 +| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 |
  156 +| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 |
  157 +| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 |
  158 +| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 |
  159 +| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 |
  160 +| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 |
  161 +| 🚀 | WebSocket | 提供 WebSocket 接入示例,支持一对一、一对多发送方式 |
  162 +| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 |
  163 +| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 |
  164 +| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 |
  165 +| 🚀 | 消息队列 | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 |
  166 +| 🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 |
  167 +| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 |
  168 +| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 |
  169 +| 🚀 | 服务保障 | 基于 Redis 实现分布式锁、幂等、限流功能,满足高并发场景 |
  170 +| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
  171 +| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
  172 +
  173 +![功能图](/.image/common/infra-feature.png)
  174 +
150 ### 工作流程 175 ### 工作流程
151 176
152 ![功能图](/.image/common/bpm-feature.png) 177 ![功能图](/.image/common/bpm-feature.png)
@@ -198,31 +223,6 @@ @@ -198,31 +223,6 @@
198 | 🚀 | 回调通知 | 查看支付回调业务的【支付】【退款】的通知结果 | 223 | 🚀 | 回调通知 | 查看支付回调业务的【支付】【退款】的通知结果 |
199 | 🚀 | 接入示例 | 提供接入支付系统的【支付】【退款】的功能实战 | 224 | 🚀 | 接入示例 | 提供接入支付系统的【支付】【退款】的功能实战 |
200 225
201 -### 基础设施  
202 -  
203 -| | 功能 | 描述 |  
204 -|-----|-----------|----------------------------------------------|  
205 -| 🚀 | 代码生成 | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 |  
206 -| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 |  
207 -| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 |  
208 -| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 |  
209 -| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 |  
210 -| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 |  
211 -| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 |  
212 -| 🚀 | WebSocket | 提供 WebSocket 接入示例,支持一对一、一对多发送方式 |  
213 -| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 |  
214 -| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 |  
215 -| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 |  
216 -| 🚀 | 消息队列 | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 |  
217 -| 🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 |  
218 -| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 |  
219 -| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 |  
220 -| 🚀 | 服务保障 | 基于 Redis 实现分布式锁、幂等、限流功能,满足高并发场景 |  
221 -| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |  
222 -| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |  
223 -  
224 -![功能图](/.image/common/infra-feature.png)  
225 -  
226 ### 数据报表 226 ### 数据报表
227 227
228 | | 功能 | 描述 | 228 | | 功能 | 描述 |
@@ -316,6 +316,14 @@ @@ -316,6 +316,14 @@
316 316
317 ![预览图](/.image/common/pms-preview.png) 317 ![预览图](/.image/common/pms-preview.png)
318 318
  319 +### OA 协同办公
  320 +
  321 +演示地址:<https://doc.iocoder.cn/oa-preview/>
  322 +
  323 +![功能图](/.image/common/oa-feature.png)
  324 +
  325 +![预览图](/.image/common/oa-preview.png)
  326 +
319 ### AI 大模型 327 ### AI 大模型
320 328
321 演示地址:<https://doc.iocoder.cn/ai-preview/> 329 演示地址:<https://doc.iocoder.cn/ai-preview/>
@@ -355,23 +363,24 @@ @@ -355,23 +363,24 @@
355 | `yudao-framework` | Java 框架拓展 | 363 | `yudao-framework` | Java 框架拓展 |
356 | `yudao-server` | 管理后台 + 用户 APP 的服务端 | 364 | `yudao-server` | 管理后台 + 用户 APP 的服务端 |
357 | `yudao-module-system` | 系统功能的 Module 模块 | 365 | `yudao-module-system` | 系统功能的 Module 模块 |
358 -| `yudao-module-member` | 会员中心的 Module 模块 |  
359 | `yudao-module-infra` | 基础设施的 Module 模块 | 366 | `yudao-module-infra` | 基础设施的 Module 模块 |
360 | `yudao-module-bpm` | 工作流程的 Module 模块 | 367 | `yudao-module-bpm` | 工作流程的 Module 模块 |
361 | `yudao-module-pay` | 支付系统的 Module 模块 | 368 | `yudao-module-pay` | 支付系统的 Module 模块 |
  369 +| `yudao-module-report` | 大屏报表 Module 模块 |
  370 +| `yudao-module-mp` | 微信公众号的 Module 模块 |
362 | `yudao-module-mall` | 商城系统的 Module 模块 | 371 | `yudao-module-mall` | 商城系统的 Module 模块 |
  372 +| `yudao-module-member` | 会员中心的 Module 模块 |
363 | `yudao-module-erp` | ERP 系统的 Module 模块 | 373 | `yudao-module-erp` | ERP 系统的 Module 模块 |
  374 +| `yudao-module-wms` | WMS 系统的 Module 模块 |
364 | `yudao-module-crm` | CRM 系统的 Module 模块 | 375 | `yudao-module-crm` | CRM 系统的 Module 模块 |
365 | `yudao-module-mes` | MES 系统的 Module 模块 | 376 | `yudao-module-mes` | MES 系统的 Module 模块 |
366 -| `yudao-module-wms` | WMS 系统的 Module 模块 |  
367 | `yudao-module-hrm` | HRM 人力资源管理的 Module 模块 | 377 | `yudao-module-hrm` | HRM 人力资源管理的 Module 模块 |
368 | `yudao-module-fms` | FMS 财务管理的 Module 模块 | 378 | `yudao-module-fms` | FMS 财务管理的 Module 模块 |
369 | `yudao-module-pms` | PMS 项目管理的 Module 模块 | 379 | `yudao-module-pms` | PMS 项目管理的 Module 模块 |
370 -| `yudao-module-im` | IM 即时通讯的 Module 模块 | 380 +| `yudao-module-oa` | OA 协同办公的 Module 模块 |
371 | `yudao-module-ai` | AI 大模型的 Module 模块 | 381 | `yudao-module-ai` | AI 大模型的 Module 模块 |
372 | `yudao-module-iot` | IoT 物联网的 Module 模块 | 382 | `yudao-module-iot` | IoT 物联网的 Module 模块 |
373 -| `yudao-module-mp` | 微信公众号的 Module 模块 |  
374 -| `yudao-module-report` | 大屏报表 Module 模块 | 383 +| `yudao-module-im` | IM 即时通讯的 Module 模块 |
375 384
376 ### 框架 385 ### 框架
377 386
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/banner/core/BannerApplicationRunner.java
@@ -30,13 +30,21 @@ public class BannerApplicationRunner implements ApplicationRunner { @@ -30,13 +30,21 @@ public class BannerApplicationRunner implements ApplicationRunner {
30 "https://doc.iocoder.cn", 30 "https://doc.iocoder.cn",
31 "https://t.zsxq.com/02Yf6M7Qn"); 31 "https://t.zsxq.com/02Yf6M7Qn");
32 32
  33 + // 工作流
  34 + if (isNotPresent("cn.iocoder.yudao.module.bpm.framework.flowable.config.BpmFlowableConfiguration")) {
  35 + System.out.println("[工作流模块 yudao-module-bpm - 已禁用][参考 https://doc.iocoder.cn/bpm/ 开启]");
  36 + }
  37 + // 支付平台
  38 + if (isNotPresent("cn.iocoder.yudao.module.pay.framework.pay.config.PayConfiguration")) {
  39 + System.out.println("[支付系统 yudao-module-pay - 已禁用][参考 https://doc.iocoder.cn/pay/build/ 开启]");
  40 + }
33 // 数据报表 41 // 数据报表
34 if (isNotPresent("cn.iocoder.yudao.module.report.framework.security.config.SecurityConfiguration")) { 42 if (isNotPresent("cn.iocoder.yudao.module.report.framework.security.config.SecurityConfiguration")) {
35 System.out.println("[报表模块 yudao-module-report - 已禁用][参考 https://doc.iocoder.cn/report/ 开启]"); 43 System.out.println("[报表模块 yudao-module-report - 已禁用][参考 https://doc.iocoder.cn/report/ 开启]");
36 } 44 }
37 - // 工作流  
38 - if (isNotPresent("cn.iocoder.yudao.module.bpm.framework.flowable.config.BpmFlowableConfiguration")) {  
39 - System.out.println("[工作流模块 yudao-module-bpm - 已禁用][参考 https://doc.iocoder.cn/bpm/ 开启]"); 45 + // 微信公众号
  46 + if (isNotPresent("cn.iocoder.yudao.module.mp.framework.mp.config.MpConfiguration")) {
  47 + System.out.println("[微信公众号 yudao-module-mp - 已禁用][参考 https://doc.iocoder.cn/mp/build/ 开启]");
40 } 48 }
41 // 商城系统 49 // 商城系统
42 if (isNotPresent("cn.iocoder.yudao.module.trade.framework.web.config.TradeWebConfiguration")) { 50 if (isNotPresent("cn.iocoder.yudao.module.trade.framework.web.config.TradeWebConfiguration")) {
@@ -50,10 +58,6 @@ public class BannerApplicationRunner implements ApplicationRunner { @@ -50,10 +58,6 @@ public class BannerApplicationRunner implements ApplicationRunner {
50 if (isNotPresent("cn.iocoder.yudao.module.wms.framework.web.config.WmsWebConfiguration")) { 58 if (isNotPresent("cn.iocoder.yudao.module.wms.framework.web.config.WmsWebConfiguration")) {
51 System.out.println("[WMS 仓库管理系统 yudao-module-wms - 已禁用][参考 https://doc.iocoder.cn/wms/build/ 开启]"); 59 System.out.println("[WMS 仓库管理系统 yudao-module-wms - 已禁用][参考 https://doc.iocoder.cn/wms/build/ 开启]");
52 } 60 }
53 - // PMS 系统  
54 - if (isNotPresent("cn.iocoder.yudao.module.pms.framework.web.config.PmsWebConfiguration")) {  
55 - System.out.println("[PMS 项目管理系统 yudao-module-pms - 已禁用][请在 yudao-server 中开启]");  
56 - }  
57 // CRM 系统 61 // CRM 系统
58 if (isNotPresent("cn.iocoder.yudao.module.crm.framework.web.config.CrmWebConfiguration")) { 62 if (isNotPresent("cn.iocoder.yudao.module.crm.framework.web.config.CrmWebConfiguration")) {
59 System.out.println("[CRM 系统 yudao-module-crm - 已禁用][参考 https://doc.iocoder.cn/crm/build/ 开启]"); 63 System.out.println("[CRM 系统 yudao-module-crm - 已禁用][参考 https://doc.iocoder.cn/crm/build/ 开启]");
@@ -62,13 +66,21 @@ public class BannerApplicationRunner implements ApplicationRunner { @@ -62,13 +66,21 @@ public class BannerApplicationRunner implements ApplicationRunner {
62 if (isNotPresent("cn.iocoder.yudao.module.mes.framework.web.config.MesWebConfiguration")) { 66 if (isNotPresent("cn.iocoder.yudao.module.mes.framework.web.config.MesWebConfiguration")) {
63 System.out.println("[MES 系统 yudao-module-mes - 已禁用][参考 https://doc.iocoder.cn/mes/build/ 开启]"); 67 System.out.println("[MES 系统 yudao-module-mes - 已禁用][参考 https://doc.iocoder.cn/mes/build/ 开启]");
64 } 68 }
65 - // 微信公众号  
66 - if (isNotPresent("cn.iocoder.yudao.module.mp.framework.mp.config.MpConfiguration")) {  
67 - System.out.println("[微信公众号 yudao-module-mp - 已禁用][参考 https://doc.iocoder.cn/mp/build/ 开启]"); 69 + // HRM 人力资源管理系统
  70 + if (isNotPresent("cn.iocoder.yudao.module.hrm.framework.web.config.HrmWebConfiguration")) {
  71 + System.out.println("[HRM 人力资源管理系统 yudao-module-hrm - 已禁用][参考 https://doc.iocoder.cn/hrm/build/ 开启]");
68 } 72 }
69 - // 支付平台  
70 - if (isNotPresent("cn.iocoder.yudao.module.pay.framework.pay.config.PayConfiguration")) {  
71 - System.out.println("[支付系统 yudao-module-pay - 已禁用][参考 https://doc.iocoder.cn/pay/build/ 开启]"); 73 + // FMS 财务管理系统
  74 + if (isNotPresent("cn.iocoder.yudao.module.fms.framework.web.config.FmsWebConfiguration")) {
  75 + System.out.println("[FMS 财务管理系统 yudao-module-fms - 已禁用][参考 https://doc.iocoder.cn/fms/build/ 开启]");
  76 + }
  77 + // PMS 系统
  78 + if (isNotPresent("cn.iocoder.yudao.module.pms.framework.web.config.PmsWebConfiguration")) {
  79 + System.out.println("[PMS 项目管理系统 yudao-module-pms - 已禁用][参考 https://doc.iocoder.cn/pms/build/ 开启]");
  80 + }
  81 + // OA 办公自动化
  82 + if (isNotPresent("cn.iocoder.yudao.module.oa.framework.config.OaProperties")) {
  83 + System.out.println("[OA 协同办公 yudao-module-oa - 已禁用][参考 https://doc.iocoder.cn/oa/build/ 开启]");
72 } 84 }
73 // AI 大模型 85 // AI 大模型
74 if (isNotPresent("cn.iocoder.yudao.module.ai.framework.web.config.AiWebConfiguration")) { 86 if (isNotPresent("cn.iocoder.yudao.module.ai.framework.web.config.AiWebConfiguration")) {
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
@@ -400,78 +400,102 @@ public class GlobalExceptionHandler { @@ -400,78 +400,102 @@ public class GlobalExceptionHandler {
400 if (!message.contains("doesn't exist")) { 400 if (!message.contains("doesn't exist")) {
401 return null; 401 return null;
402 } 402 }
403 - // 1. 数据报表  
404 - if (message.contains("report_")) {  
405 - log.error("[报表模块 yudao-module-report - 表结构未导入][参考 https://cloud.iocoder.cn/report/ 开启]");  
406 - return CommonResult.error(NOT_IMPLEMENTED.getCode(),  
407 - "[报表模块 yudao-module-report - 表结构未导入][参考 https://cloud.iocoder.cn/report/ 开启]");  
408 - }  
409 - // 2. 工作流 403 + // 1. 工作流
410 if (message.contains("bpm_")) { 404 if (message.contains("bpm_")) {
411 log.error("[工作流模块 yudao-module-bpm - 表结构未导入][参考 https://cloud.iocoder.cn/bpm/ 开启]"); 405 log.error("[工作流模块 yudao-module-bpm - 表结构未导入][参考 https://cloud.iocoder.cn/bpm/ 开启]");
412 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 406 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
413 "[工作流模块 yudao-module-bpm - 表结构未导入][参考 https://cloud.iocoder.cn/bpm/ 开启]"); 407 "[工作流模块 yudao-module-bpm - 表结构未导入][参考 https://cloud.iocoder.cn/bpm/ 开启]");
414 } 408 }
415 - // 3. 微信公众号 409 + // 2. 支付平台
  410 + if (message.contains("pay_")) {
  411 + log.error("[支付模块 yudao-module-pay - 表结构未导入][参考 https://cloud.iocoder.cn/pay/build/ 开启]");
  412 + return CommonResult.error(NOT_IMPLEMENTED.getCode(),
  413 + "[支付模块 yudao-module-pay - 表结构未导入][参考 https://cloud.iocoder.cn/pay/build/ 开启]");
  414 + }
  415 + // 3. 数据报表
  416 + if (message.contains("report_")) {
  417 + log.error("[报表模块 yudao-module-report - 表结构未导入][参考 https://cloud.iocoder.cn/report/ 开启]");
  418 + return CommonResult.error(NOT_IMPLEMENTED.getCode(),
  419 + "[报表模块 yudao-module-report - 表结构未导入][参考 https://cloud.iocoder.cn/report/ 开启]");
  420 + }
  421 + // 4. 微信公众号
416 if (message.contains("mp_")) { 422 if (message.contains("mp_")) {
417 log.error("[微信公众号 yudao-module-mp - 表结构未导入][参考 https://cloud.iocoder.cn/mp/build/ 开启]"); 423 log.error("[微信公众号 yudao-module-mp - 表结构未导入][参考 https://cloud.iocoder.cn/mp/build/ 开启]");
418 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 424 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
419 "[微信公众号 yudao-module-mp - 表结构未导入][参考 https://cloud.iocoder.cn/mp/build/ 开启]"); 425 "[微信公众号 yudao-module-mp - 表结构未导入][参考 https://cloud.iocoder.cn/mp/build/ 开启]");
420 } 426 }
421 - // 4. 商城系统 427 + // 5. 商城系统
422 if (StrUtil.containsAny(message, "product_", "promotion_", "trade_")) { 428 if (StrUtil.containsAny(message, "product_", "promotion_", "trade_")) {
423 - log.error("[商城系统 yudao-module-mall - 已禁用][参考 https://cloud.iocoder.cn/mall/build/ 开启]"); 429 + log.error("[商城系统 yudao-module-mall - 表结构未导入][参考 https://cloud.iocoder.cn/mall/build/ 开启]");
424 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 430 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
425 - "[商城系统 yudao-module-mall - 已禁用][参考 https://cloud.iocoder.cn/mall/build/ 开启]"); 431 + "[商城系统 yudao-module-mall - 表结构未导入][参考 https://cloud.iocoder.cn/mall/build/ 开启]");
426 } 432 }
427 - // 5. ERP 系统 433 + // 6. ERP 系统
428 if (message.contains("erp_")) { 434 if (message.contains("erp_")) {
429 log.error("[ERP 系统 yudao-module-erp - 表结构未导入][参考 https://cloud.iocoder.cn/erp/build/ 开启]"); 435 log.error("[ERP 系统 yudao-module-erp - 表结构未导入][参考 https://cloud.iocoder.cn/erp/build/ 开启]");
430 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 436 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
431 "[ERP 系统 yudao-module-erp - 表结构未导入][参考 https://cloud.iocoder.cn/erp/build/ 开启]"); 437 "[ERP 系统 yudao-module-erp - 表结构未导入][参考 https://cloud.iocoder.cn/erp/build/ 开启]");
432 } 438 }
433 - // 6. WMS 仓库管理系统 439 + // 7. WMS 仓库管理系统
434 if (message.contains("wms_")) { 440 if (message.contains("wms_")) {
435 log.error("[WMS 仓库管理系统 yudao-module-wms - 表结构未导入][参考 https://doc.iocoder.cn/wms/build/ 开启]"); 441 log.error("[WMS 仓库管理系统 yudao-module-wms - 表结构未导入][参考 https://doc.iocoder.cn/wms/build/ 开启]");
436 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 442 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
437 "[WMS 仓库管理系统 yudao-module-wms - 表结构未导入][参考 https://doc.iocoder.cn/wms/build/ 开启]"); 443 "[WMS 仓库管理系统 yudao-module-wms - 表结构未导入][参考 https://doc.iocoder.cn/wms/build/ 开启]");
438 } 444 }
439 - // 7. CRM 系统 445 + // 8. CRM 系统
440 if (message.contains("crm_")) { 446 if (message.contains("crm_")) {
441 log.error("[CRM 系统 yudao-module-crm - 表结构未导入][参考 https://cloud.iocoder.cn/crm/build/ 开启]"); 447 log.error("[CRM 系统 yudao-module-crm - 表结构未导入][参考 https://cloud.iocoder.cn/crm/build/ 开启]");
442 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 448 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
443 "[CRM 系统 yudao-module-crm - 表结构未导入][参考 https://cloud.iocoder.cn/crm/build/ 开启]"); 449 "[CRM 系统 yudao-module-crm - 表结构未导入][参考 https://cloud.iocoder.cn/crm/build/ 开启]");
444 } 450 }
445 - // 8. MES 系统 451 + // 9. MES 系统
446 if (message.contains("mes_")) { 452 if (message.contains("mes_")) {
447 log.error("[MES 系统 yudao-module-mes - 表结构未导入][参考 https://doc.iocoder.cn/mes/build/ 开启]"); 453 log.error("[MES 系统 yudao-module-mes - 表结构未导入][参考 https://doc.iocoder.cn/mes/build/ 开启]");
448 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 454 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
449 "[MES 系统 yudao-module-mes - 表结构未导入][参考 https://doc.iocoder.cn/mes/build/ 开启]"); 455 "[MES 系统 yudao-module-mes - 表结构未导入][参考 https://doc.iocoder.cn/mes/build/ 开启]");
450 } 456 }
451 - // 9. IM 即时通讯  
452 - if (message.contains("im_")) {  
453 - log.error("[IM 即时通讯 yudao-module-im - 表结构未导入][参考 https://doc.iocoder.cn/im/build/ 开启]"); 457 + // 10. HRM 人力资源管理系统
  458 + if (message.contains("hrm_")) {
  459 + log.error("[HRM 人力资源管理系统 yudao-module-hrm - 表结构未导入][参考 https://doc.iocoder.cn/hrm/build/ 开启]");
454 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 460 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
455 - "[IM 即时通讯 yudao-module-im - 表结构未导入][参考 https://doc.iocoder.cn/im/build/ 开启]"); 461 + "[HRM 人力资源管理系统 yudao-module-hrm - 表结构未导入][参考 https://doc.iocoder.cn/hrm/build/ 开启]");
456 } 462 }
457 - // 10. 支付平台  
458 - if (message.contains("pay_")) {  
459 - log.error("[支付模块 yudao-module-pay - 表结构未导入][参考 https://cloud.iocoder.cn/pay/build/ 开启]"); 463 + // 11. FMS 财务管理系统
  464 + if (message.contains("fms_")) {
  465 + log.error("[FMS 财务管理系统 yudao-module-fms - 表结构未导入][参考 https://doc.iocoder.cn/fms/build/ 开启]");
460 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 466 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
461 - "[支付模块 yudao-module-pay - 表结构未导入][参考 https://cloud.iocoder.cn/pay/build/ 开启]"); 467 + "[FMS 财务管理系统 yudao-module-fms - 表结构未导入][参考 https://doc.iocoder.cn/fms/build/ 开启]");
  468 + }
  469 + // 12. PMS 项目管理系统
  470 + if (message.contains("pms_")) {
  471 + log.error("[PMS 项目管理系统 yudao-module-pms - 表结构未导入][参考 https://doc.iocoder.cn/pms/build/ 开启]");
  472 + return CommonResult.error(NOT_IMPLEMENTED.getCode(),
  473 + "[PMS 项目管理系统 yudao-module-pms - 表结构未导入][参考 https://doc.iocoder.cn/pms/build/ 开启]");
462 } 474 }
463 - // 11. AI 大模型 475 + // 13. OA 协同办公
  476 + if (message.contains("oa_")) {
  477 + log.error("[OA 协同办公 yudao-module-oa - 表结构未导入][参考 https://doc.iocoder.cn/oa/build/ 开启]");
  478 + return CommonResult.error(NOT_IMPLEMENTED.getCode(),
  479 + "[OA 协同办公 yudao-module-oa - 表结构未导入][参考 https://doc.iocoder.cn/oa/build/ 开启]");
  480 + }
  481 + // 14. AI 大模型
464 if (message.contains("ai_")) { 482 if (message.contains("ai_")) {
465 log.error("[AI 大模型 yudao-module-ai - 表结构未导入][参考 https://cloud.iocoder.cn/ai/build/ 开启]"); 483 log.error("[AI 大模型 yudao-module-ai - 表结构未导入][参考 https://cloud.iocoder.cn/ai/build/ 开启]");
466 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 484 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
467 "[AI 大模型 yudao-module-ai - 表结构未导入][参考 https://cloud.iocoder.cn/ai/build/ 开启]"); 485 "[AI 大模型 yudao-module-ai - 表结构未导入][参考 https://cloud.iocoder.cn/ai/build/ 开启]");
468 } 486 }
469 - // 12. IoT 物联网 487 + // 15. IoT 物联网
470 if (message.contains("iot_")) { 488 if (message.contains("iot_")) {
471 log.error("[IoT 物联网 yudao-module-iot - 表结构未导入][参考 https://doc.iocoder.cn/iot/build/ 开启]"); 489 log.error("[IoT 物联网 yudao-module-iot - 表结构未导入][参考 https://doc.iocoder.cn/iot/build/ 开启]");
472 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 490 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
473 "[IoT 物联网 yudao-module-iot - 表结构未导入][参考 https://doc.iocoder.cn/iot/build/ 开启]"); 491 "[IoT 物联网 yudao-module-iot - 表结构未导入][参考 https://doc.iocoder.cn/iot/build/ 开启]");
474 } 492 }
  493 + // 16. IM 即时通讯
  494 + if (message.contains("im_")) {
  495 + log.error("[IM 即时通讯 yudao-module-im - 表结构未导入][参考 https://doc.iocoder.cn/im/build/ 开启]");
  496 + return CommonResult.error(NOT_IMPLEMENTED.getCode(),
  497 + "[IM 即时通讯 yudao-module-im - 表结构未导入][参考 https://doc.iocoder.cn/im/build/ 开启]");
  498 + }
475 return null; 499 return null;
476 } 500 }
477 501
yudao-server/src/main/java/cn/iocoder/yudao/server/controller/DefaultController.java
@@ -26,6 +26,18 @@ public class DefaultController { @@ -26,6 +26,18 @@ public class DefaultController {
26 "[工作流模块 yudao-module-bpm - 已禁用][参考 https://doc.iocoder.cn/bpm/ 开启]"); 26 "[工作流模块 yudao-module-bpm - 已禁用][参考 https://doc.iocoder.cn/bpm/ 开启]");
27 } 27 }
28 28
  29 + @RequestMapping(value = { "/admin-api/pay/**"})
  30 + public CommonResult<Boolean> pay404() {
  31 + return CommonResult.error(NOT_IMPLEMENTED.getCode(),
  32 + "[支付模块 yudao-module-pay - 已禁用][参考 https://doc.iocoder.cn/pay/build/ 开启]");
  33 + }
  34 +
  35 + @RequestMapping(value = { "/admin-api/report/**"})
  36 + public CommonResult<Boolean> report404() {
  37 + return CommonResult.error(NOT_IMPLEMENTED.getCode(),
  38 + "[报表模块 yudao-module-report - 已禁用][参考 https://doc.iocoder.cn/report/ 开启]");
  39 + }
  40 +
29 @RequestMapping("/admin-api/mp/**") 41 @RequestMapping("/admin-api/mp/**")
30 public CommonResult<Boolean> mp404() { 42 public CommonResult<Boolean> mp404() {
31 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 43 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
@@ -52,12 +64,6 @@ public class DefaultController { @@ -52,12 +64,6 @@ public class DefaultController {
52 "[WMS 仓库管理系统 yudao-module-wms - 已禁用][参考 https://doc.iocoder.cn/wms/build/ 开启]"); 64 "[WMS 仓库管理系统 yudao-module-wms - 已禁用][参考 https://doc.iocoder.cn/wms/build/ 开启]");
53 } 65 }
54 66
55 - @RequestMapping("/admin-api/pms/**")  
56 - public CommonResult<Boolean> pms404() {  
57 - return CommonResult.error(NOT_IMPLEMENTED.getCode(),  
58 - "[PMS 项目管理系统 yudao-module-pms - 已禁用][请在 yudao-server 中开启]");  
59 - }  
60 -  
61 @RequestMapping("/admin-api/crm/**") 67 @RequestMapping("/admin-api/crm/**")
62 public CommonResult<Boolean> crm404() { 68 public CommonResult<Boolean> crm404() {
63 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 69 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
@@ -70,22 +76,28 @@ public class DefaultController { @@ -70,22 +76,28 @@ public class DefaultController {
70 "[MES 系统 yudao-module-mes - 已禁用][参考 https://doc.iocoder.cn/mes/build/ 开启]"); 76 "[MES 系统 yudao-module-mes - 已禁用][参考 https://doc.iocoder.cn/mes/build/ 开启]");
71 } 77 }
72 78
73 - @RequestMapping(value = { "/admin-api/im/**"})  
74 - public CommonResult<Boolean> im404() { 79 + @RequestMapping("/admin-api/hrm/**")
  80 + public CommonResult<Boolean> hrm404() {
75 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 81 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
76 - "[IM 即时通讯 yudao-module-im - 已禁用][参考 https://doc.iocoder.cn/im/build/ 开启]"); 82 + "[HRM 人力资源管理系统 yudao-module-hrm - 已禁用][参考 https://doc.iocoder.cn/hrm/build/ 开启]");
77 } 83 }
78 84
79 - @RequestMapping(value = { "/admin-api/report/**"})  
80 - public CommonResult<Boolean> report404() { 85 + @RequestMapping("/admin-api/fms/**")
  86 + public CommonResult<Boolean> fms404() {
81 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 87 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
82 - "[报表模块 yudao-module-report - 已禁用][参考 https://doc.iocoder.cn/report/ 开启]"); 88 + "[FMS 财务管理系统 yudao-module-fms - 已禁用][参考 https://doc.iocoder.cn/fms/build/ 开启]");
83 } 89 }
84 90
85 - @RequestMapping(value = { "/admin-api/pay/**"})  
86 - public CommonResult<Boolean> pay404() { 91 + @RequestMapping("/admin-api/pms/**")
  92 + public CommonResult<Boolean> pms404() {
87 return CommonResult.error(NOT_IMPLEMENTED.getCode(), 93 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
88 - "[支付模块 yudao-module-pay - 已禁用][参考 https://doc.iocoder.cn/pay/build/ 开启]"); 94 + "[PMS 项目管理系统 yudao-module-pms - 已禁用][参考 https://doc.iocoder.cn/pms/build/ 开启]");
  95 + }
  96 +
  97 + @RequestMapping("/admin-api/oa/**")
  98 + public CommonResult<Boolean> oa404() {
  99 + return CommonResult.error(NOT_IMPLEMENTED.getCode(),
  100 + "[OA 协同办公 yudao-module-oa - 已禁用][参考 https://doc.iocoder.cn/oa/build/ 开启]");
89 } 101 }
90 102
91 @RequestMapping(value = { "/admin-api/ai/**"}) 103 @RequestMapping(value = { "/admin-api/ai/**"})
@@ -100,6 +112,12 @@ public class DefaultController { @@ -100,6 +112,12 @@ public class DefaultController {
100 "[IoT 物联网 yudao-module-iot - 已禁用][参考 https://doc.iocoder.cn/iot/build/ 开启]"); 112 "[IoT 物联网 yudao-module-iot - 已禁用][参考 https://doc.iocoder.cn/iot/build/ 开启]");
101 } 113 }
102 114
  115 + @RequestMapping(value = { "/admin-api/im/**"})
  116 + public CommonResult<Boolean> im404() {
  117 + return CommonResult.error(NOT_IMPLEMENTED.getCode(),
  118 + "[IM 即时通讯 yudao-module-im - 已禁用][参考 https://doc.iocoder.cn/im/build/ 开启]");
  119 + }
  120 +
103 /** 121 /**
104 * 测试接口:打印 query、header、body 122 * 测试接口:打印 query、header、body
105 */ 123 */