Commit 58a1c1d5fd3324312867b6427906cc8f55e51405

Authored by YunaiV
1 parent 09cf3017

feat(oa):README

README.md
... ... @@ -28,8 +28,8 @@
28 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 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 34 可参考 [《迁移文档》](https://doc.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】
35 35  
... ... @@ -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 117 > 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。
118 118 >
... ... @@ -147,6 +147,31 @@
147 147  
148 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 177 ![功能图](/.image/common/bpm-feature.png)
... ... @@ -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 316  
317 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 327 ### AI 大模型
320 328  
321 329 演示地址:<https://doc.iocoder.cn/ai-preview/>
... ... @@ -355,23 +363,24 @@
355 363 | `yudao-framework` | Java 框架拓展 |
356 364 | `yudao-server` | 管理后台 + 用户 APP 的服务端 |
357 365 | `yudao-module-system` | 系统功能的 Module 模块 |
358   -| `yudao-module-member` | 会员中心的 Module 模块 |
359 366 | `yudao-module-infra` | 基础设施的 Module 模块 |
360 367 | `yudao-module-bpm` | 工作流程的 Module 模块 |
361 368 | `yudao-module-pay` | 支付系统的 Module 模块 |
  369 +| `yudao-module-report` | 大屏报表 Module 模块 |
  370 +| `yudao-module-mp` | 微信公众号的 Module 模块 |
362 371 | `yudao-module-mall` | 商城系统的 Module 模块 |
  372 +| `yudao-module-member` | 会员中心的 Module 模块 |
363 373 | `yudao-module-erp` | ERP 系统的 Module 模块 |
  374 +| `yudao-module-wms` | WMS 系统的 Module 模块 |
364 375 | `yudao-module-crm` | CRM 系统的 Module 模块 |
365 376 | `yudao-module-mes` | MES 系统的 Module 模块 |
366   -| `yudao-module-wms` | WMS 系统的 Module 模块 |
367 377 | `yudao-module-hrm` | HRM 人力资源管理的 Module 模块 |
368 378 | `yudao-module-fms` | FMS 财务管理的 Module 模块 |
369 379 | `yudao-module-pms` | PMS 项目管理的 Module 模块 |
370   -| `yudao-module-im` | IM 即时通讯的 Module 模块 |
  380 +| `yudao-module-oa` | OA 协同办公的 Module 模块 |
371 381 | `yudao-module-ai` | AI 大模型的 Module 模块 |
372 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 30 "https://doc.iocoder.cn",
31 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 42 if (isNotPresent("cn.iocoder.yudao.module.report.framework.security.config.SecurityConfiguration")) {
35 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 50 if (isNotPresent("cn.iocoder.yudao.module.trade.framework.web.config.TradeWebConfiguration")) {
... ... @@ -50,10 +58,6 @@ public class BannerApplicationRunner implements ApplicationRunner {
50 58 if (isNotPresent("cn.iocoder.yudao.module.wms.framework.web.config.WmsWebConfiguration")) {
51 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 61 // CRM 系统
58 62 if (isNotPresent("cn.iocoder.yudao.module.crm.framework.web.config.CrmWebConfiguration")) {
59 63 System.out.println("[CRM 系统 yudao-module-crm - 已禁用][参考 https://doc.iocoder.cn/crm/build/ 开启]");
... ... @@ -62,13 +66,21 @@ public class BannerApplicationRunner implements ApplicationRunner {
62 66 if (isNotPresent("cn.iocoder.yudao.module.mes.framework.web.config.MesWebConfiguration")) {
63 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 85 // AI 大模型
74 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 400 if (!message.contains("doesn't exist")) {
401 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 404 if (message.contains("bpm_")) {
411 405 log.error("[工作流模块 yudao-module-bpm - 表结构未导入][参考 https://cloud.iocoder.cn/bpm/ 开启]");
412 406 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
413 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 422 if (message.contains("mp_")) {
417 423 log.error("[微信公众号 yudao-module-mp - 表结构未导入][参考 https://cloud.iocoder.cn/mp/build/ 开启]");
418 424 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
419 425 "[微信公众号 yudao-module-mp - 表结构未导入][参考 https://cloud.iocoder.cn/mp/build/ 开启]");
420 426 }
421   - // 4. 商城系统
  427 + // 5. 商城系统
422 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 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 434 if (message.contains("erp_")) {
429 435 log.error("[ERP 系统 yudao-module-erp - 表结构未导入][参考 https://cloud.iocoder.cn/erp/build/ 开启]");
430 436 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
431 437 "[ERP 系统 yudao-module-erp - 表结构未导入][参考 https://cloud.iocoder.cn/erp/build/ 开启]");
432 438 }
433   - // 6. WMS 仓库管理系统
  439 + // 7. WMS 仓库管理系统
434 440 if (message.contains("wms_")) {
435 441 log.error("[WMS 仓库管理系统 yudao-module-wms - 表结构未导入][参考 https://doc.iocoder.cn/wms/build/ 开启]");
436 442 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
437 443 "[WMS 仓库管理系统 yudao-module-wms - 表结构未导入][参考 https://doc.iocoder.cn/wms/build/ 开启]");
438 444 }
439   - // 7. CRM 系统
  445 + // 8. CRM 系统
440 446 if (message.contains("crm_")) {
441 447 log.error("[CRM 系统 yudao-module-crm - 表结构未导入][参考 https://cloud.iocoder.cn/crm/build/ 开启]");
442 448 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
443 449 "[CRM 系统 yudao-module-crm - 表结构未导入][参考 https://cloud.iocoder.cn/crm/build/ 开启]");
444 450 }
445   - // 8. MES 系统
  451 + // 9. MES 系统
446 452 if (message.contains("mes_")) {
447 453 log.error("[MES 系统 yudao-module-mes - 表结构未导入][参考 https://doc.iocoder.cn/mes/build/ 开启]");
448 454 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
449 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 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 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 482 if (message.contains("ai_")) {
465 483 log.error("[AI 大模型 yudao-module-ai - 表结构未导入][参考 https://cloud.iocoder.cn/ai/build/ 开启]");
466 484 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
467 485 "[AI 大模型 yudao-module-ai - 表结构未导入][参考 https://cloud.iocoder.cn/ai/build/ 开启]");
468 486 }
469   - // 12. IoT 物联网
  487 + // 15. IoT 物联网
470 488 if (message.contains("iot_")) {
471 489 log.error("[IoT 物联网 yudao-module-iot - 表结构未导入][参考 https://doc.iocoder.cn/iot/build/ 开启]");
472 490 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
473 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 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 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 41 @RequestMapping("/admin-api/mp/**")
30 42 public CommonResult<Boolean> mp404() {
31 43 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
... ... @@ -52,12 +64,6 @@ public class DefaultController {
52 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 67 @RequestMapping("/admin-api/crm/**")
62 68 public CommonResult<Boolean> crm404() {
63 69 return CommonResult.error(NOT_IMPLEMENTED.getCode(),
... ... @@ -70,22 +76,28 @@ public class DefaultController {
70 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 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 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 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 103 @RequestMapping(value = { "/admin-api/ai/**"})
... ... @@ -100,6 +112,12 @@ public class DefaultController {
100 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 122 * 测试接口:打印 query、header、body
105 123 */
... ...