返回作品

工程项目管理系统

创建于 2025 年 11 月 20 日

标签
  • Java
  • Spring Boot 2.7.18
  • MyBatis-Plus
  • MySQL
  • Redis
  • Vue 3.5
  • Element Plus 2.11
  • Vite 5
  • TypeScript 5.3
  • Pinia

项目介绍

工程项目管理系统是一个基于芋道开源快速开发平台(ruoyi-vue-pro,2025.10-jdk8-SNAPSHOT)搭建的工程投标管理项目。仓库中没有针对本项目的说明文档,README 仍是芋道框架的原版内容,因此本文基于对源码与 SQL 脚本的实际探索整理。

项目分为 springboot-工程项目管理(Spring Boot 多模块后端)与 web-admin-工程项目管理(Vue 3 管理后台)两个目录。后端在芋道标准模块(yudao-module-systemyudao-module-infra)之外新增了独立的业务模块 yudao-module-project,当前实现”投标项目”(project_bid)的完整管理闭环:创建、更新、删除、详情与分页查询。业务围绕工程项目的三个核心要素建模——项目名称、项目时间窗口(开始日期 ~ 到期日期)、项目经理,并在此基础上实现了最关键的排期约束:同一项目经理同一时间段只能负责一个未结束的项目。该约束同时作用于创建与更新两个入口,体现了”单据管理 + 业务规则校验”的典型企业级后台设计。

项目架构

项目采用 Spring Boot 2.7 多模块单体架构,JDK 8,前后端分离部署:

模块技术栈说明
yudao-module-projectSpring Boot、MyBatis-Plus业务模块(包名 cn.iocoder.yudao.module.project),当前仅含投标项目(bid)子模块
yudao-module-systemSpring Boot系统管理:用户、角色、菜单、部门、租户,提供 system_users 用户表供项目经理关联
yudao-module-infraSpring Boot基础设施:文件、定时任务、代码生成、日志等框架能力
yudao-serverSpring Boot启动模块,dev 环境端口 48080,数据库 ruoyi-vue-pro(MySQL)
web-admin-工程项目管理Vue 3.5、Element Plus 2.11、Vite 5、TypeScript 5.3、Pinia管理后台前端,业务页面位于 src/views/project/bid/
sql/mysql/yudao-module-project.sqlMySQL 8投标项目表独立建表脚本,含外键与索引定义

后端业务代码按 controller → service → mapper → dataobject 标准分层,共 11 个 Java 文件:ProjectBidController 暴露 /admin/project/bid 的 create / update / delete / get / page 五个 REST 接口(Swagger 注解齐全);ProjectBidServiceImpl 承载 CRUD 与核心业务校验;ProjectBidMapper 基于 MyBatis-Plus 的 LambdaQueryWrapperX 实现条件分页;ProjectBidConvert 用 MapStruct 完成 VO 与 DO 的转换;VO 层通过 ProjectBidBaseVO 抽取公共字段,避免 Create / Update / Resp 三份重复定义。ProjectBidDO 继承框架的 TenantBaseDO,自动获得 tenant_id 多租户字段、creator/updater 审计字段与 deleted 逻辑删除能力,数据访问天然按租户隔离。

数据表 project_bid 结构简洁:id 主键、project_name(项目名称)、start_date(开始日期)、end_date(到期日期)、project_manager_id(项目经理 ID),并通过 fk_project_bid_project_manager 外键约束关联 system_users.ididx_project_manager_id 索引支撑按项目经理的查询与校验,建表脚本(sql/mysql/yudao-module-project.sql)由模块独立维护,可单独执行。

核心功能

投标项目管理(CRUD)。 后端提供完整的 REST 接口:POST /admin/project/bid/create 创建、PUT /admin/project/bid/update 更新(先 validateExists 校验记录存在)、DELETE /admin/project/bid/delete 删除、GET /admin/project/bid/get 详情、GET /admin/project/bid/page 分页。分页查询支持三个筛选条件:项目名称模糊匹配(likeIfPresent)、项目经理精确匹配(eqIfPresent)、开始日期区间(betweenIfPresent),结果按 ID 倒序返回,使用框架统一的 PageResult 分页结构。

项目经理防冲突校验。 这是本项目最有业务价值的一段逻辑:ProjectBidServiceImpl.validateManagerAvailability() 在创建与更新时都会执行——以 LocalDate.now() 为基准,通过 selectLatestActiveByManager() 查询该经理名下 end_date >= 今天 的未结束项目(LIMIT 1 取最早到期的一条),若存在则抛出错误码 PROJECT_MANAGER_HAS_ACTIVE_PROJECT(值 1000000001,“该项目经理已有未结束的项目,无法重复分配”),从而保证项目经理在同一时间段内只接手一个项目;更新场景传入 excludeId,在查询条件中用 ne 排除当前记录自身,避免”编辑自身时误判冲突”。

用户体系打通与前端交互。 前端 index.vue 通过 UserApi.getSimpleUserList() 加载系统用户列表作为”项目经理”下拉数据源,列表页用 userNameMapprojectManagerId 翻译成昵称/账号展示;ProjectBidForm.vue 提供新增/编辑对话框,表单必填校验齐全,并内置自定义校验器”到期日期不能小于开始日期”,项目名称限制 200 字。列表页还支持项目名称、项目经理、开始日期区间的组合搜索、分页与删除二次确认(message.delConfirm()),形成完整的管理体验。

框架底座能力。 模块继承芋道框架的标准能力:TenantBaseDO 多租户数据隔离、逻辑删除(deleted 字段)、统一错误码体系(ErrorCodeConstants,错误码区间 1-000-000-000 ~ 1-000-000-999)、Springdoc OpenAPI 接口文档、MapStruct 对象转换与 MyBatis-Plus 条件构造器封装。前端采用芋道 Vue3 模板的标准结构(ContentWrap 布局、Pagination 分页组件、useMessage 消息钩子、TypeScript 接口定义于 src/api/project/bid/index.ts),便于后续继续扩展工程项目管理的其他子模块。

功能截图

暂无运行截图。

快速上手

  1. 初始化数据库:先导入芋道框架基础脚本 sql/mysql/ruoyi-vue-pro.sql(系统用户、菜单、租户等框架数据),再执行业务表脚本:
mysql -u root -p ruoyi-vue-pro < sql/mysql/ruoyi-vue-pro.sql
mysql -u root -p ruoyi-vue-pro < sql/mysql/yudao-module-project.sql
  1. 启动后端:进入 springboot-工程项目管理,确认 yudao-server/src/main/resources/application-dev.yaml 中的数据库(默认 jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro)与 Redis 配置,然后执行:
mvn install -DskipTests
cd yudao-server && mvn spring-boot:run   # http://localhost:48080
  1. 启动管理后台前端:
cd web-admin-工程项目管理 && pnpm install && pnpm dev
  1. 使用框架预置账号 admin / admin123 登录,在”工程项目管理”菜单下即可对投标项目进行新增、编辑、删除、搜索操作;新增或编辑时若所选项目经理已有未结束项目,系统会返回”该项目经理已有未结束的项目,无法重复分配”的提示。

总结

工程项目管理系统是在芋道 ruoyi-vue-pro 工程化底座上迈出的第一步:当前以”投标项目”为核心实现了一个五脏俱全的业务模块——从 project_bid 表设计(外键关联用户表、多租户、审计字段)到后端 CRUD 与分页检索,再到”同一项目经理不得同时负责多个未结束项目”的业务规则校验,最后落到 Vue 3 前端完整的列表、搜索、表单与交互提示。项目体量虽小,但代码分层规范、命名清晰、注释完整,错误码、Swagger、MapStruct、MyBatis-Plus 条件构造器、多租户等框架能力一应俱全,是学习芋道框架模块开发流程(建表 → DO/Mapper → Service 校验 → Controller/VO → 前端页面)的极佳参考样本,也为后续扩展合同、进度、成本等工程项目子模块预留了清晰的结构。