diff --git a/.image/common/erp-feature.png b/.image/common/erp-feature.png
new file mode 100644
index 000000000..d30b30eed
Binary files /dev/null and b/.image/common/erp-feature.png differ
diff --git a/README.md b/README.md
index 99aa50650..a4a059acd 100644
--- a/README.md
+++ b/README.md
@@ -128,6 +128,8 @@
* 数据报表
* 商城系统
* 微信公众号
+* ERP 系统
+* CRM 系统
> 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。
>
@@ -247,23 +249,31 @@
| 🚀 | 会员分组 | 对会员进行分组,用于用户画像、内容推送等运营手段 |
| 🚀 | 积分签到 | 回馈给签到、消费等行为的积分,会员可订单抵现、积分兑换等途径消耗 |
+### ERP 系统
+
+![功能图](/.image/common/erp-preview.png)
+
+演示地址:
+
## 🐨 技术栈
### 模块
-| 项目 | 说明 |
-|--------------------------------------------------------------------------|--------------------|
-| `yudao-dependencies` | Maven 依赖版本管理 |
-| `yudao-framework` | Java 框架拓展 |
-| `yudao-server` | 管理后台 + 用户 APP 的服务端 |
-| `yudao-module-system` | 系统功能的 Module 模块 |
-| `yudao-module-member` | 会员中心的 Module 模块 |
-| `yudao-module-infra` | 基础设施的 Module 模块 |
-| `yudao-module-bpm` | 工作流程的 Module 模块 |
-| `yudao-module-pay` | 支付系统的 Module 模块 |
-| `yudao-module-mall` | 商城系统的 Module 模块 |
-| `yudao-module-mp` | 微信公众号的 Module 模块 |
-| `yudao-module-report` | 大屏报表 Module 模块 |
+| 项目 | 说明 |
+|-----------------------|--------------------|
+| `yudao-dependencies` | Maven 依赖版本管理 |
+| `yudao-framework` | Java 框架拓展 |
+| `yudao-server` | 管理后台 + 用户 APP 的服务端 |
+| `yudao-module-system` | 系统功能的 Module 模块 |
+| `yudao-module-member` | 会员中心的 Module 模块 |
+| `yudao-module-infra` | 基础设施的 Module 模块 |
+| `yudao-module-bpm` | 工作流程的 Module 模块 |
+| `yudao-module-pay` | 支付系统的 Module 模块 |
+| `yudao-module-mall` | 商城系统的 Module 模块 |
+| `yudao-module-erp` | ERP 系统的 Module 模块 |
+| `yudao-module-crm` | CRM 系统的 Module 模块 |
+| `yudao-module-mp` | 微信公众号的 Module 模块 |
+| `yudao-module-report` | 大屏报表 Module 模块 |
### 框架
diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/banner/core/BannerApplicationRunner.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/banner/core/BannerApplicationRunner.java
index 19aaf046c..028ac8d71 100644
--- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/banner/core/BannerApplicationRunner.java
+++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/banner/core/BannerApplicationRunner.java
@@ -46,6 +46,10 @@ public class BannerApplicationRunner implements ApplicationRunner {
if (isNotPresent("cn.iocoder.yudao.module.trade.framework.web.config.TradeWebConfiguration")) {
System.out.println("[商城系统 yudao-module-mall - 已禁用][参考 https://doc.iocoder.cn/mall/build/ 开启]");
}
+ // ERP 系统
+ if (isNotPresent("cn.iocoder.yudao.module.erp.framework.web.config.ErpWebConfiguration")) {
+ System.out.println("[ERP 系统 yudao-module-erp - 已禁用][参考 https://doc.iocoder.cn/erp/build/ 开启]");
+ }
// 支付平台
if (isNotPresent("cn.iocoder.yudao.module.pay.framework.pay.config.PayConfiguration")) {
System.out.println("[支付系统 yudao-module-pay - 已禁用][参考 https://doc.iocoder.cn/pay/build/ 开启]");
diff --git a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
index c26628b9a..c3a8f0c62 100644
--- a/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
+++ b/yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/core/handler/GlobalExceptionHandler.java
@@ -313,7 +313,13 @@ public class GlobalExceptionHandler {
return CommonResult.error(NOT_IMPLEMENTED.getCode(),
"[商城系统 yudao-module-mall - 已禁用][参考 https://doc.iocoder.cn/mall/build/ 开启]");
}
- // 5. 支付平台
+ // 5. ERP 系统
+ if (message.contains("erp_")) {
+ log.error("[ERP 系统 yudao-module-erp - 表结构未导入][参考 https://doc.iocoder.cn/erp/build/ 开启]");
+ return CommonResult.error(NOT_IMPLEMENTED.getCode(),
+ "[ERP 系统 yudao-module-erp - 表结构未导入][参考 https://doc.iocoder.cn/erp/build/ 开启]");
+ }
+ // 6. 支付平台
if (message.contains("pay_")) {
log.error("[支付模块 yudao-module-pay - 表结构未导入][参考 https://doc.iocoder.cn/pay/build/ 开启]");
return CommonResult.error(NOT_IMPLEMENTED.getCode(),
diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/package-info.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/package-info.java
new file mode 100644
index 000000000..af7bc123c
--- /dev/null
+++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/package-info.java
@@ -0,0 +1,6 @@
+/**
+ * 属于 erp 模块的 framework 封装
+ *
+ * @author 芋道源码
+ */
+package cn.iocoder.yudao.module.erp.framework;
diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/web/config/ErpWebConfiguration.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/web/config/ErpWebConfiguration.java
new file mode 100644
index 000000000..f87e04047
--- /dev/null
+++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/web/config/ErpWebConfiguration.java
@@ -0,0 +1,24 @@
+package cn.iocoder.yudao.module.erp.framework.web.config;
+
+import cn.iocoder.yudao.framework.swagger.config.YudaoSwaggerAutoConfiguration;
+import org.springdoc.core.models.GroupedOpenApi;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * erp 模块的 web 组件的 Configuration
+ *
+ * @author 芋道源码
+ */
+@Configuration(proxyBeanMethods = false)
+public class ErpWebConfiguration {
+
+ /**
+ * erp 模块的 API 分组
+ */
+ @Bean
+ public GroupedOpenApi tradeGroupedOpenApi() {
+ return YudaoSwaggerAutoConfiguration.buildGroupedOpenApi("erp");
+ }
+
+}
diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/web/package-info.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/web/package-info.java
new file mode 100644
index 000000000..70f70c035
--- /dev/null
+++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/web/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * trade 模块的 web 配置
+ */
+package cn.iocoder.yudao.module.erp.framework.web;
diff --git a/yudao-server/pom.xml b/yudao-server/pom.xml
index ff17b298d..4ead0bba8 100644
--- a/yudao-server/pom.xml
+++ b/yudao-server/pom.xml
@@ -88,11 +88,11 @@
-
- cn.iocoder.boot
- yudao-module-crm-biz
- ${revision}
-
+
+
+
+
+
diff --git a/yudao-server/src/main/java/cn/iocoder/yudao/server/controller/DefaultController.java b/yudao-server/src/main/java/cn/iocoder/yudao/server/controller/DefaultController.java
index ab626b1e7..7aba89997 100644
--- a/yudao-server/src/main/java/cn/iocoder/yudao/server/controller/DefaultController.java
+++ b/yudao-server/src/main/java/cn/iocoder/yudao/server/controller/DefaultController.java
@@ -35,6 +35,12 @@ public class DefaultController {
"[商城系统 yudao-module-mall - 已禁用][参考 https://doc.iocoder.cn/mall/build/ 开启]");
}
+ @RequestMapping("/admin-api/erp/**")
+ public CommonResult erp404() {
+ return CommonResult.error(NOT_IMPLEMENTED.getCode(),
+ "[ERP 模块 yudao-module-erp - 已禁用][参考 https://doc.iocoder.cn/erp/build/ 开启]");
+ }
+
@RequestMapping(value = {"/admin-api/report/**"})
public CommonResult report404() {
return CommonResult.error(NOT_IMPLEMENTED.getCode(),