Packing-System 是基于 RuoYi 体系二次开发的制造现场装箱管理系统。以产品码和箱码为业务标识,围绕加工测试、质检返修、包装装箱三个工站,记录产品状态、工序路线、操作时间和装箱关系,支持后续查询与追溯。
系统采用 Spring Boot + MyBatis + Thymeleaf 的服务端渲染架构。页面、静态资源与后端服务由同一个应用提供,最终打包为可执行 JAR,适合在企业内部环境部署和按业务扩展。
| 作业视角 | 系统提供的支持 |
|---|---|
| 生产操作 | 扫描产品码,登记加工测试结果,查询当天检测记录 |
| 质量管理 | 记录不良问题与返修结果,查看产品工序路线 |
| 包装作业 | 扫描箱码与产品码,绑定装箱关系,处理满箱与零数箱 |
| 管理与追溯 | 按产品码、箱码、料号及工序状态查询,并导出业务数据 |
仓库状态:六个 Maven 模块已通过编译打包;仓库提供 36 张数据库表的结构。初始化账号、菜单权限和业务基础数据需单独准备,详见数据库说明。当前验证范围不包含数据库启动和业务验收。
| 功能 | 说明 |
|---|---|
| 加工测试 | 校验产品码,登记良品 / 不良状态及问题信息,记录工序与时间 |
| 质检返修 | 处理不良产品,登记返修结果,延续产品工序记录 |
| 扫码装箱 | 检查产品状态、前置工序和已有装箱关系,绑定产品与箱子 |
| 箱子管理 | 维护箱码、产品数量、最大容量、箱子状态与备注 |
| 零数箱处理 | 支持未达到满箱数量时提交零数箱 |
| 拆箱与解绑 | 提供整箱拆箱、单个产品解绑入口,并记录相应工序信息 |
| 产品追溯 | 查询产品详情、所属箱子及工序路线 |
| 统计与导出 | 展示当日统计、检测历史,导出装箱与箱子列表 |
| 分类 | 能力 |
|---|---|
| 物料编码规则 | 客户料号、物料描述、分段编码规则,以及产品 / 箱子类型维护 |
| 问题项 | 维护物料对应的问题项,为检测与返修记录提供基础信息 |
| 组织与权限 | 用户、部门、岗位、角色、菜单和操作权限 |
| 系统管理 | 字典、参数、通知公告、操作日志、登录日志与在线用户 |
| 开发工具 | 定时任务、代码生成、Swagger 接口文档与 Druid 监控配置 |
下图描述系统的主要作业路径;具体接口的权限、事务及并发边界见项目分析。
- 产品进入包装前,需要为良品,并具有加工测试或质检返修的工序记录。
- 装箱服务会检查产品是否已经绑定箱子,以及箱子是否达到容量。
- 新建箱子的默认容量在当前业务代码中为 10;提示文本也有相应固定值,调整容量时应一并核对。
- 箱子状态包含 装箱中、已完成、零数箱;拆箱和解绑会重置相关产品状态并记录操作信息。
- 产品工序路线保存在
sq_packing.gxlxt文本字段中;产品与箱子的逻辑关联字段为box_code。
| 层次 | 技术 / 当前版本 | 用途 |
|---|---|---|
| 运行环境 | Java 8 | 应用编译与运行 |
| 应用框架 | Spring Boot 2.5.15 / Spring Framework 5.3.39 | 应用启动、依赖注入与事务 |
| 页面 | Thymeleaf / jQuery 3.7.1 / Bootstrap 3.3.7 | 服务端页面与交互 |
| 数据访问 | MyBatis / PageHelper | SQL 映射与分页 |
| 数据源 | Druid 1.2.23 / MySQL | 连接池与持久化 |
| 认证授权 | Shiro 1.13.0 | 登录、会话与权限 |
| 任务调度 | Quartz | 后台定时任务 |
| 文件导出 | Apache POI 4.1.2 | Excel 导出 |
| 构建 | Maven 多模块 | 依赖管理、编译和 JAR 打包 |
版本以 pom.xml 及模块配置为准。数据库脚本来自 MySQL 5.7.18 导出;其他数据库版本尚未做运行兼容验证。前端资源随应用保存,无需单独执行 npm 构建。
Packing-System/
├── carve-admin/ # 应用入口、控制器、页面和静态资源
│ └── src/main/
│ ├── java/com/carve/ # CarveApplication 与 Web 控制器
│ └── resources/
│ ├── application.yml
│ ├── application-druid.example.yml
│ ├── templates/ # Thymeleaf 模板
│ └── static/ # JavaScript、CSS、图片
├── carve-framework/ # Shiro、数据源与 Web 基础配置
├── carve-system/ # 系统和装箱业务:实体、Service、Mapper
├── carve-common/ # 通用模型、异常、工具及过滤器
├── carve-quartz/ # 定时任务
├── carve-generator/ # 代码生成及模板
├── sql/schema.sql # 36 张表结构,不含记录
├── docs/PROJECT_ANALYSIS.md # 代码分析、风险与验证范围
├── bin/ # Windows 辅助脚本
├── pom.xml # Maven 聚合配置
└── LICENSE # MIT 许可证
仅克隆公开仓库并导入 schema.sql,还不能直接登录和完整使用。 公开仓库没有初始化记录或自动创建管理员的脚本。下面将结构部署与完整数据恢复分开说明,避免把编译成功误认为业务可用。
| 你拥有的材料 | 可采用的路径 | 还需要什么 |
|---|---|---|
只有 GitHub 源码与 schema.sql |
创建空表结构,配置并构建应用 | 初始化账号、菜单权限、字典参数及业务规则;当前仓库未提供可直接执行的种子数据脚本 |
源码与原始 north-packing.sql |
在独立空库恢复原有结构和记录 | 导出中有效账号的登录密码、正确的环境配置,以及运行验收 |
以下步骤是部署操作指引,不是已完成的端到端运行认证。当前已实测的是 Maven 编译打包和业务表字段核对。
准备 JDK 8、Maven、MySQL 服务及数据库客户端,确保 JAVA_HOME 指向 JDK,并确认命令可用:
java -version
mvn -version
mysql --versiongit clone https://github.com/dreambet/Packing-System.git
cd Packing-System路径 A:只有公开仓库,建立空表结构。
在 MySQL 客户端中执行以下语句。数据库名称包含连字符,需要保留反引号;SOURCE 路径请替换为克隆目录的实际绝对路径。
CREATE DATABASE `North-Packing` CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `North-Packing`;
SOURCE /absolute/path/Packing-System/sql/schema.sql;Windows 客户端可以使用 SOURCE D:/projects/Packing-System/sql/schema.sql;。
表结构导入后,还需准备账号、角色、菜单权限、字典及物料规则等初始化数据。仓库没有默认可登录账号。持有原始数据库导出的维护者可在受控空库恢复完整导出;结构脚本和完整导出应选择一种建表来源,避免重复建表。
路径 B:持有完整 north-packing.sql,恢复原有数据。
先用 mysql -u your_database_user -p 登录 MySQL,再在客户端执行以下示例。使用一个尚不存在的独立本地库名;SQL 文件路径替换为实际路径。
CREATE DATABASE `packing_local` CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `packing_local`;
SOURCE D:/Desktop/north-packing.sql;
SHOW TABLES;原始导出含 DROP TABLE IF EXISTS,因此只应在选定的新库中恢复,不能用于覆盖现有业务库;此路径不再导入 schema.sql。随后将 PACKING_DB_URL 的数据库名称改为 packing_local。
完整导出包含用户记录,但数据库中的密码散列不能作为登录密码。必须使用原账号的有效密码,或另行执行受控密码重置;文档不预设通用默认账号密码。公开仓库也不能依靠空库注册来替代初始化:注册接口检查 sys.account.registerUser 参数,空库不具备该开启条件。
Windows · PowerShell
首次克隆后,复制配置示例。在已有本地配置的目录中请保留原文件。
Copy-Item carve-admin/src/main/resources/application-druid.example.yml `
carve-admin/src/main/resources/application-druid.yml
$env:PACKING_DB_URL = 'jdbc:mysql://localhost:3306/North-Packing?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8'
$env:PACKING_DB_USERNAME = 'your_database_user'
$env:PACKING_DB_PASSWORD = 'replace_with_your_database_password'Linux / macOS · Bash
cp carve-admin/src/main/resources/application-druid.example.yml \
carve-admin/src/main/resources/application-druid.yml
export PACKING_DB_URL='jdbc:mysql://localhost:3306/North-Packing?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8'
export PACKING_DB_USERNAME='your_database_user'
read -rsp 'Database password: ' PACKING_DB_PASSWORD
export PACKING_DB_PASSWORD
printf '\n'替换示例中的账号和密码,并在同一个终端会话中执行后续启动命令。上述环境变量适用于复制得到的示例配置;已有配置若仍使用固定值,需要同步改为对应占位符。应用不会自动读取 .env 文件。
若选择路径 B,请把上述 URL 中的 North-Packing 替换为 packing_local。数据库连接密码与系统网页登录密码是两套独立凭据。
按实际环境修改 application.yml 中的 carve.profile,确保应用对上传目录有写权限;同时检查 logback.xml 中的日志路径(当前为 /home/carve/logs)。
mvn clean verify构建产物为 carve-admin/target/carve-admin.jar。
java -jar carve-admin/target/carve-admin.jar默认地址:http://localhost:8080。使用已初始化的账号登录,并按实际菜单权限进入对应工站。
看到登录页只说明 Web 服务可以响应,不能证明数据库初始化和业务作业完整可用。
更改端口或上传目录可使用启动参数:
java -jar carve-admin/target/carve-admin.jar --server.port=8081 --carve.profile=/srv/packing/uploads在独立本地库中使用测试产品和测试箱码,逐项确认以下结果后,再判断是否满足自己的使用需求。
| 验收场景 | 预期结果 |
|---|---|
| 应用启动 | 日志无数据源、缺表或目录权限异常,端口可以访问 |
| 登录与菜单 | 有效账号能够登录,工站、物料规则和箱子管理菜单可见 |
| 加工测试 | 符合已配置编码规则的测试产品能保存检测结果 |
| 不良返修 | 不良产品能够进入返修流程并更新结果 |
| 良品装箱 | 绑定关系、箱内数量及工序记录能够在刷新后正确查询 |
| 满箱与重复扫码 | 满箱限制及重复装箱校验符合实际作业预期 |
| 拆箱与解绑 | 产品与箱子状态、数量和追溯记录保持一致 |
| 导出与重启 | Excel 可下载,重启应用后业务记录仍可查询 |
以上为待执行的验收步骤,本次文档维护没有导入数据库、重置账号或执行业务写入。事务回滚和并发装箱仍有已知待改进项,见项目分析。
以下变量定义于 application-druid.example.yml。
| 变量 | 默认值 | 说明 |
|---|---|---|
PACKING_DB_URL |
本机 3306 端口的 North-Packing 库 |
完整 JDBC URL;注意数据库名大小写 |
PACKING_DB_USERNAME |
root |
按部署环境设置数据库用户 |
PACKING_DB_PASSWORD |
无 | 必填,数据库连接密码 |
PACKING_DRUID_ENABLED |
false |
是否启用 Druid 监控页面 |
PACKING_DRUID_USERNAME |
monitor |
监控账号 |
PACKING_DRUID_PASSWORD |
空 | 启用监控前设置密码 |
| 文件 / 配置项 | 当前值 | 用途 |
|---|---|---|
application.yml → server.port |
8080 |
HTTP 端口 |
application.yml → spring.profiles.active |
druid |
加载数据源配置 |
application.yml → carve.profile |
D:/carve/uploadPath |
文件存储目录 |
application.yml → carve.demoEnabled |
true |
演示模式开关 |
application.yml → swagger.enabled |
true |
接口文档开关 |
application.yml → spring.servlet.multipart |
单文件 10 MB / 单请求 20 MB | 上传限制 |
logback.xml → log.path |
/home/carve/logs |
日志输出目录 |
本地 application-druid.yml 已被 Git 忽略。部署时应结合环境检查演示模式、热重载、监控页面、Swagger、CSRF 与验证码设置,配置细节见项目分析。
| 表 | 主要信息 | 索引 / 关联 |
|---|---|---|
sq_packing |
产品码、客户料号、工序状态、工序路线、问题与所属箱子 | ewm 唯一索引;box_code、cplh 普通索引 |
sq_box |
箱码、当前数量、最大容量、箱子状态 | box_code 唯一索引 |
sq_wldm |
客户料号、物料描述、分段编码、产品 / 箱子类型 | (cplh, attr) 联合唯一索引 |
sq_wtx |
物料描述与问题项 | id 主键 |
产品通过 sq_packing.box_code 与箱子逻辑关联;当前 DDL 未声明该关联的外键。唯一索引能够约束重复标识,但不等同于并发装箱一致性保障。
sql/schema.sql 从对应数据库导出提取,包含 36 张表:系统基础表、Quartz 表、代码生成表、四张业务表,以及导出中的 sq_packing_copy1 副本表。字段、索引和约束沿用导出,移除了当时的自增计数值。
脚本不包含账号、密码散列、会话、日志、生产记录,也不包含 DROP TABLE。它用于新建结构,不是增量迁移脚本,也不会自动创建可登录的管理员。
初始化数据应覆盖实际需要的用户与角色关联、菜单权限、字典参数、物料编码和问题项。原始 north-packing.sql 留在维护者本地,未提交至公开仓库。
| 入口 | 页面路径 | 对应源码 |
|---|---|---|
| 加工测试 | /system/packing/processing |
SqPackingController |
| 质检返修 | /system/packing/qualityInspection |
SqPackingController |
| 包装工站 | /system/packing/packingStation |
SqPackingController |
| 装箱记录 | /system/packing |
SqPackingController |
| 箱子管理 | /system/box |
SqBoxController |
上述地址为应用内路由,访问受登录及相关权限配置影响。控制器位于 carve-admin/src/main/java/com/carve/web/controller/system/;业务实现和 SQL 映射位于 carve-system。
新增业务通常需要同步修改 实体 → Mapper 接口 / XML → Service → Controller → 页面 → 菜单权限与数据库结构。开发时可从 com.carve.CarveApplication 启动应用;IDE 运行配置也需要提供相同的数据源环境变量。
| 验证项 | 当前结果 |
|---|---|
| Maven 编译与打包 | 2026-09-07 执行 verify,聚合项目及六个模块全部成功 |
| 自动化测试 | 当前无 src/test 测试,构建成功不代表业务测试通过 |
| 数据结构核对 | 四张业务表的 Mapper 映射字段均在对应 DDL 中存在 |
| 数据库导入与登录 | 未执行运行验证 |
| 扫码、返修、装箱及拆箱 | 已静态阅读相关代码,未完成端到端验收 |
当前代码审查记录了装箱异常回滚、并发计数与绑定、部分工站操作权限及预校验顺序等待改进项。详细依据与边界见 PROJECT_ANALYSIS.md。
为什么导入表结构后仍然无法登录?
公开 SQL 没有用户和权限记录。需要通过受控初始化过程准备账号及相关角色、菜单数据,不能直接套用其他 RuoYi 项目的默认密码。
启动提示缺少 PACKING_DB_PASSWORD 或连接数据库失败?
确认示例已复制为 application-druid.yml,环境变量在启动 Java 的同一终端或 IDE 运行配置中生效,并检查数据库服务、账号权限、JDBC URL 和数据库名称。单独创建 .env 文件不会自动加载。
为什么数据库已导入,仍提示表不存在?
先核对应用实际连接的库名和主机。旧的 new_demo.sql 不包含四张装箱业务表,当前 schema.sql 已补齐;已有数据库应核对结构后制定迁移方案,不要直接重复执行完整建表脚本。
更换 Windows / Linux 环境后上传或日志失败?
检查 carve.profile 和 logback.xml 的 log.path。项目保留了原环境的路径配置,需要替换为目标机器上存在且应用可写的目录。
欢迎通过 Issues 提交问题,或通过 Pull Request 改进文档和代码。问题描述建议包含复现步骤、预期与实际结果、相关版本,以及移除敏感数据后的错误日志。
涉及扫码流程、事务或数量统计的变更,请提供相应业务场景的验证结果。请勿提交本地密码配置、完整数据库备份或真实生产记录。
本项目遵循 MIT License,保留 RuoYi 原始版权声明。感谢 RuoYi 体系提供的后台管理基础,以及项目所使用的开源组件;第三方静态资源保留其随附许可证与声明。