Skip to content

About

基于Ruoyi框架开发的制造装箱管理系统,主要用于产品生产过程中的加工测试、质量检验、包装装箱等全流程管理。系统通过条码扫描实现产品追溯,支持多工站协同作业。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

📦 Packing System

制造装箱管理系统

从产品扫码到整箱追溯,串联加工测试、质量返修与包装作业。

Java 8 Spring Boot 2.5.15 MySQL 5.7 数据库结构 Thymeleaf MVC MIT License

功能概览 · 业务流程 · 快速开始 · 配置说明 · 项目分析


关于项目

Packing-System 是基于 RuoYi 体系二次开发的制造现场装箱管理系统。以产品码和箱码为业务标识,围绕加工测试、质检返修、包装装箱三个工站,记录产品状态、工序路线、操作时间和装箱关系,支持后续查询与追溯。

系统采用 Spring Boot + MyBatis + Thymeleaf 的服务端渲染架构。页面、静态资源与后端服务由同一个应用提供,最终打包为可执行 JAR,适合在企业内部环境部署和按业务扩展。

作业视角 系统提供的支持
生产操作 扫描产品码,登记加工测试结果,查询当天检测记录
质量管理 记录不良问题与返修结果,查看产品工序路线
包装作业 扫描箱码与产品码,绑定装箱关系,处理满箱与零数箱
管理与追溯 按产品码、箱码、料号及工序状态查询,并导出业务数据

仓库状态:六个 Maven 模块已通过编译打包;仓库提供 36 张数据库表的结构。初始化账号、菜单权限和业务基础数据需单独准备,详见数据库说明。当前验证范围不包含数据库启动和业务验收。

✨ 功能概览

生产与包装

功能 说明
加工测试 校验产品码,登记良品 / 不良状态及问题信息,记录工序与时间
质检返修 处理不良产品,登记返修结果,延续产品工序记录
扫码装箱 检查产品状态、前置工序和已有装箱关系,绑定产品与箱子
箱子管理 维护箱码、产品数量、最大容量、箱子状态与备注
零数箱处理 支持未达到满箱数量时提交零数箱
拆箱与解绑 提供整箱拆箱、单个产品解绑入口,并记录相应工序信息
产品追溯 查询产品详情、所属箱子及工序路线
统计与导出 展示当日统计、检测历史,导出装箱与箱子列表

业务基础与后台管理

分类 能力
物料编码规则 客户料号、物料描述、分段编码规则,以及产品 / 箱子类型维护
问题项 维护物料对应的问题项,为检测与返修记录提供基础信息
组织与权限 用户、部门、岗位、角色、菜单和操作权限
系统管理 字典、参数、通知公告、操作日志、登录日志与在线用户
开发工具 定时任务、代码生成、Swagger 接口文档与 Druid 监控配置

🔄 业务流程

下图描述系统的主要作业路径;具体接口的权限、事务及并发边界见项目分析。

产品扫码、加工测试、返修与装箱业务流程

查看图片 · Mermaid 源码

作业规则

  • 产品进入包装前,需要为良品,并具有加工测试或质检返修的工序记录。
  • 装箱服务会检查产品是否已经绑定箱子,以及箱子是否达到容量。
  • 新建箱子的默认容量在当前业务代码中为 10;提示文本也有相应固定值,调整容量时应一并核对。
  • 箱子状态包含 装箱中、已完成、零数箱;拆箱和解绑会重置相关产品状态并记录操作信息。
  • 产品工序路线保存在 sq_packing.gxlxt 文本字段中;产品与箱子的逻辑关联字段为 box_code。

🏗️ 系统架构

Packing-System 系统架构

查看图片 · Mermaid 源码

技术组成

层次 技术 / 当前版本 用途
运行环境 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 编译打包和业务表字段核对。

1. 准备环境

准备 JDK 8、Maven、MySQL 服务及数据库客户端,确保 JAVA_HOME 指向 JDK,并确认命令可用:

java -version
mvn -version
mysql --version

2. 获取源码

git clone https://github.com/dreambet/Packing-System.git
cd Packing-System

3. 准备数据库

路径 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 参数,空库不具备该开启条件。

4. 配置数据源

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。数据库连接密码与系统网页登录密码是两套独立凭据。

5. 检查文件目录并构建

按实际环境修改 application.yml 中的 carve.profile,确保应用对上传目录有写权限;同时检查 logback.xml 中的日志路径(当前为 /home/carve/logs)。

mvn clean verify

构建产物为 carve-admin/target/carve-admin.jar。

6. 启动并访问

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

7. 本地运行验收

在独立本地库中使用测试产品和测试箱码,逐项确认以下结果后,再判断是否满足自己的使用需求。

验收场景 预期结果
应用启动 日志无数据源、缺表或目录权限异常,端口可以访问
登录与菜单 有效账号能够登录,工站、物料规则和箱子管理菜单可见
加工测试 符合已配置编码规则的测试产品能保存检测结果
不良返修 不良产品能够进入返修流程并更新结果
良品装箱 绑定关系、箱内数量及工序记录能够在刷新后正确查询
满箱与重复扫码 满箱限制及重复装箱校验符合实际作业预期
拆箱与解绑 产品与箱子状态、数量和追溯记录保持一致
导出与重启 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 体系提供的后台管理基础,以及项目所使用的开源组件;第三方静态资源保留其随附许可证与声明。

About

基于Ruoyi框架开发的制造装箱管理系统,主要用于产品生产过程中的加工测试、质量检验、包装装箱等全流程管理。系统通过条码扫描实现产品追溯,支持多工站协同作业。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages