返回作品

改造版 ERP 系统

创建于 2025 年 7 月 1 日

标签
  • Java
  • Spring Boot
  • MyBatis
  • MySQL
  • Redis
  • Vue 2
  • Element UI
  • Element Plus

项目介绍

改造版 ERP 系统是基于若依 RuoYi-Vue 3.9.0(Spring Boot 2.5.15 + Vue 2.6 + Element UI)进行的 ERP 化二次开发项目,改造目标是让通用后台脚手架的组织与人员模型贴合 ERP 语义:在 ERP 语境中,系统中的”公司/部门”本质是组织(Organization),系统中的”用户”本质是员工(Employee),他们与财务、采购、销售、库存等业务单据强关联。项目以数据库 ruoyi-vue-erp(MySQL 8.0)承载改造后的数据模型,从组织与员工两个基础维度为后续采购、销售、库存、财务模块铺路。

数据库脚本中的初始数据即体现了 ERP 化后的组织形态:根组织”若依科技”(organization_erp_id = 100)下挂”深圳总公司”(101)与”长沙分公司”(102)两个二级组织,总公司下再细分研发、市场、测试、财务、运维部门,分公司下细分市场、财务部门——组织树结构直接对应真实企业的多级管理架构。本次改造完成了 ERP 基础层(组织 + 员工 + 组织数据权限),业务单据层可在此之上继续扩展。

项目架构

项目保持若依标准的前后端分离结构,未引入额外中间件,仅在原框架内做深度字段与逻辑改造:

  • 后端分层:ruoyi-admin(Web 入口与控制器)、ruoyi-framework(安全、权限、数据权限切面等框架层)、ruoyi-system(组织/员工等系统业务)、ruoyi-common(通用实体与工具)、ruoyi-quartz(定时任务)、ruoyi-generator(代码生成器)。
  • 技术栈:Java 8 + Spring Boot 2.5.15 + Spring Security + JWT + MyBatis + Redis + Druid 连接池(1.2.23)+ PageHelper 分页 + Swagger 3.0 接口文档;前端 Vue 2.6.12 + Element UI 2.15.14 + vue-router + vuex + axios。
  • 数据模型:核心改造集中在 sys_dept(组织表)与 sys_user(员工表)两张表。sys_dept 主键从 dept_id 改为 organization_erp_id,名称从 dept_name 改为 organization_name,保留 parent_id + ancestors 祖级列表实现无限级组织树;sys_user 主键从 user_id 改为 employee_erp_id,账号/昵称改为 employee_no / employee_name,并新增 create_organization_erp_id(创建组织)与 using_organization_erp_id(任职组织)两个字段。
  • 数据权限:ruoyi-framework 的 DataScopeAspect 数据范围切面同步改造,部门维度数据权限按组织树递归展开:{deptAlias}.dept_id IN (SELECT organization_erp_id FROM sys_dept WHERE organization_erp_id = 当前组织 OR find_in_set(当前组织, ancestors)),实现”本组织及所有下级组织”的数据范围控制。

核心功能

组织架构管理

sys_dept 表整体 ERP 化:主键 organization_erp_id、名称 organization_name、主键自增起始值 200 为后续业务组织预留空间。实体 SysDept 同步重构为 organizationErpId / organizationName 字段并保留树形 children 结构;SysDeptMapper.xml 中全部 CRUD、树查询、排除子节点、批量更新祖级列表等 SQL 均切换为新字段(如 select d.organization_erp_id, d.parent_id, d.ancestors, d.organization_name ... where d.organization_erp_id = #{organizationErpId})。组织树结构为”公司 → 分公司 → 部门”多级,天然支持集团化企业的组织建模。

员工管理

sys_user 表 ERP 化:主键 employee_erp_id、员工工号 employee_no、员工姓名 employee_name,并新增 create_organization_erp_id(创建组织)与 using_organization_erp_id(任职组织)双组织字段,用于区分员工在哪个组织下创建、当前任职于哪个组织。SysUserMapper.xml 的用户查询通过 left join sys_dept d on u.dept_id = d.organization_erp_id 联表带出组织名称,插入语句按双组织字段条件写入。

组织级数据权限

DataScopeAspect.java 数据范围切面针对部门/组织维度进行了改造,将原来按部门 ID 精确匹配的逻辑扩展为组织树递归匹配:OR {deptAlias}.dept_id IN (SELECT organization_erp_id FROM sys_dept WHERE organization_erp_id = #{user.deptId} OR find_in_set(#{user.deptId}, ancestors))。拥有某组织数据权限的角色,可以自动看到该组织及其全部下级组织的数据,符合 ERP 中”总部看全公司、分公司只看本级”的权限诉求。

前端组织与员工界面

  • 部门管理页(views/system/dept/index.vue)整体改造为组织管理:树形表格以 row-key="organizationErpId" 渲染组织树,列表列名为”组织名称”;组织选择器(treeselect)通过 normalizer 将节点映射为 { id: organizationErpId, label: organizationName },新增/修改表单包含组织名称、上级组织、负责人、联系电话、邮箱等字段。
  • 用户管理页(views/system/user/index.vue)改造为员工管理:表格展示员工 ErpId、员工工号、员工姓名、所属组织列,表单含员工工号(必填)、员工姓名、归属组织(treeselect 组织树选择)、用户密码等字段。

功能截图

暂无运行截图。

快速上手

  1. 准备环境:JDK 1.8+、Maven 3.6+、MySQL 8.0、Redis、Node.js(前端构建)。
  2. 初始化数据库:执行项目根目录的 ruoyi-vue-erp.sql(Navicat 导出脚本,含全部系统表、组织/员工改造后的表结构与初始组织数据)。
  3. 配置后端:修改 ruoyi-admin/src/main/resources/application-druid.yml 中的数据源(默认 jdbc:mysql://localhost:3306/ruoyi-vue-erp),并配置 Redis 连接与 application.yml 中的 JWT 密钥。
  4. 启动后端:在 ruoyi-admin 模块运行 RuoYiApplication 主类,默认端口 8080。
  5. 启动前端:进入 ruoyi-ui 目录执行 npm installnpm run dev,访问 http://localhost:80(开发环境代理到 8080),使用默认账号 admin 登录。
  6. 验证改造:登录后进入”系统管理 → 部门管理”查看组织树(若依科技 → 深圳总公司/长沙分公司 → 各职能部门),进入”用户管理”查看员工化字段;授予角色组织数据权限后可验证组织树级数据范围过滤。

总结

本项目是一次克制的、语义准确的若依 ERP 化改造:不动框架整体架构,只把”部门/用户”这对通用概念在数据库、实体、Mapper、数据权限切面与前端界面四个层面全面重构为”组织/员工”,并用”若依科技 → 深圳总公司/长沙分公司 → 财务/市场/研发”等真实组织示例数据验证了多级组织树的增删改查与数据权限。改造产出的组织模型、员工模型与组织级数据权限机制,是采购、销售、库存、财务等 ERP 业务单据落地的地基——单据归属组织、数据按组织隔离、员工按组织任职,这些 ERP 核心语义都已在这一阶段被代码承载,后续只需在此底座上按若依代码生成器扩展业务表即可平滑演进为完整进销存系统。