# warehouse **Repository Path**: H010323/warehouse ## Basic Information - **Project Name**: warehouse - **Description**: 仓库管理系统源码 - **Primary Language**: Unknown - **License**: ISC - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-07-10 - **Last Updated**: 2025-11-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 仓库管理系统 这是一个基于Spring Boot和React的现代化仓库管理系统。 ## 技术栈 ### 后端 - Spring Boot 3.2.3 - Spring Security - Spring Data JPA - MySQL - Thymeleaf - Apache POI (Excel导出) ### 前端 - React 18 - Axios - ECharts - Bootstrap 5 - jQuery ## 环境要求 - JDK 17+ - Node.js 16+ - MySQL 8.0+ - Maven 3.6+ ## 快速开始 ### 1. 克隆项目 ```bash git clone [项目地址] cd warehouse ``` ### 2. 配置数据库 1. 创建MySQL数据库 2. 修改 `src/main/resources/application.yml` 中的数据库配置 ### 3. 后端启动 ```bash # 使用Maven包装器 ./mvnw spring-boot:run # 或使用已安装的Maven mvn spring-boot:run ``` ### 4. 前端开发 ```bash # 安装依赖 npm install # 开发模式 npm run dev # 构建生产版本 npm run build ``` ## 项目结构 ``` warehouse/ ├── src/ # 源代码 │ ├── main/ │ │ ├── java/ # Java源代码 │ │ └── resources/ # 资源文件 │ └── test/ # 测试代码 ├── src/main/resources/static/ # 前端资源 │ ├── js/ # React组件 │ └── css/ # 样式文件 ├── pom.xml # Maven配置 ├── package.json # Node.js配置 └── webpack.config.js # Webpack配置 ``` ## 功能特性 - 用户认证和授权 - 库存管理 - 入库/出库操作 - 库存报表 - Excel导出 - 实时数据统计 ## 功能模块使用指南 ### 1. 用户认证与授权 - **登录系统**:访问`/warehouse`,使用系统默认账户(管理员:admin/admin123,仓库管理员:manager/manager123) - **用户管理**:管理员可在用户管理页面创建、编辑、删除用户,分配角色权限 - **权限级别**: - 系统管理员:拥有所有功能权限 - 仓库管理员:拥有库存管理、出入库操作等权限,无用户管理权限 ### 2. 产品管理 - **添加产品**:在产品管理页面,点击"新增产品"按钮,填写产品信息(名称、价格、分类等) - **编辑产品**:点击产品列表中的"编辑"按钮,修改产品信息 - **产品分类**:支持对产品进行分类管理,方便库存查询和统计 - **导出产品**:点击"导出Excel"按钮,将产品列表导出为Excel文件 ### 3. 供应商管理 - **添加供应商**:在供应商管理页面,点击"添加供应商",填写供应商详细信息 - **供应商详情**:查看每个供应商的详细信息和历史交易记录 - **禁用供应商**:对不活跃或问题供应商进行禁用操作,不会影响历史数据 ### 4. 入库管理 - **创建入库单**:在入库管理页面,点击"新建入库单",选择产品、供应商,填写数量和价格 - **入库流程**:创建 → 审核 → 确认入库 - **批量入库**:支持多种产品同时入库操作 - **入库记录**:系统自动记录所有入库操作,包括操作人员、时间等详细信息 ### 5. 出库管理 - **创建出库单**:在出库管理页面,点击"新建出库单",选择产品和出库数量 - **出库流程**:申请 → 审核 → 确认出库 - **库存检查**:系统自动检查库存是否充足,防止超量出库 - **出库记录**:记录所有出库操作的详细信息,包括时间、操作人等 ### 6. 库存调整 - **库存盘点**:在库存调整页面,可对实际库存与系统库存进行比对调整 - **调整记录**:所有调整操作都有详细记录,包括调整原因、数量等 - **批量调整**:支持通过Excel导入进行批量库存调整 ### 7. 报表与统计 - **库存报表**:查看当前库存状态,包括库存量、库存价值等 - **入库统计**:按时间段、产品类别等维度统计入库情况 - **出库统计**:按时间段、产品类别等维度统计出库情况 - **图表分析**:直观展示库存变化趋势、入出库对比等数据 - **报表导出**:将各类报表导出为Excel格式,方便进一步分析 ### 8. 系统设置 - **基本设置**:配置系统基本参数、显示选项等 - **数据备份**:支持数据库备份和恢复 - **日志查看**:查看系统操作日志,追踪关键操作 ## 开发指南 ### 代码规范 - 遵循Java代码规范 - 使用ESLint进行前端代码检查 - 提交前进行代码格式化 ### 分支管理 - main: 主分支,用于生产环境 - develop: 开发分支 - feature/*: 功能分支 - hotfix/*: 紧急修复分支 ## 部署 ### 生产环境部署 1. 构建前端 ```bash npm run build ``` 2. 构建后端 ```bash ./mvnw clean package ``` 3. 运行应用 ```bash java -jar target/warehouse-0.0.1-SNAPSHOT.jar ``` ## 贡献指南 1. Fork 项目 2. 创建功能分支 3. 提交更改 4. 推送到分支 5. 创建 Pull Request ## 许可证 [MIT License](LICENSE) ## 代码结构与数据库设计 ### 代码结构说明 #### 后端代码结构 ``` src/main/java/com/example/warehouse/ ├── controller/ # 控制器层,处理HTTP请求 │ ├── AuthController.java # 用户认证相关 │ ├── ProductController.java # 产品管理 │ ├── InStockController.java # 入库管理 │ └── ... ├── service/ # 服务层,处理业务逻辑 │ ├── UserService.java │ ├── ProductService.java │ ├── CategoryService.java │ └── ... ├── repository/ # 数据访问层 │ ├── UserRepository.java │ ├── ProductRepository.java │ ├── CategoryRepository.java │ └── ... ├── entity/ # 实体类,对应数据库表 │ ├── User.java │ ├── Product.java │ ├── Category.java │ └── ... └── dto/ # 数据传输对象 └── ... ``` #### 前端代码结构 ``` src/main/resources/static/ ├── js/ │ ├── components/ # React组件 │ │ ├── Reports.jsx # 报表组件 │ │ └── ... │ ├── reports.js # 报表页面入口 │ └── ... ├── css/ # 样式文件 └── plugins/ # 第三方插件 └── bootstrap-5.3.3-dist/ ``` ### 数据库设计 #### 数据库表设计(Excel格式) 1. **用户表(users)** | 字段名 | 数据类型 | 长度 | 是否可空 | 默认值 | 主键 | 外键 | 说明 | |--------|----------|------|----------|--------|------|------|------| | id | BIGINT | - | 否 | AUTO_INCREMENT | 是 | - | 用户ID | | username | VARCHAR | 50 | 否 | - | - | - | 用户名,唯一 | | password | VARCHAR | 100 | 否 | - | - | - | 密码 | | name | VARCHAR | 50 | 否 | - | - | - | 姓名 | | email | VARCHAR | 100 | 是 | - | - | - | 邮箱 | | enabled | BOOLEAN | - | 否 | TRUE | - | - | 是否启用 | | created_at | DATETIME | - | 是 | - | - | - | 创建时间 | | last_login_at | DATETIME | - | 是 | - | - | - | 最后登录时间 | | reset_token | VARCHAR | 100 | 是 | - | - | - | 重置密码令牌 | | reset_token_expiry | DATETIME | - | 是 | - | - | - | 令牌过期时间 | 2. **角色表(roles)** | 字段名 | 数据类型 | 长度 | 是否可空 | 默认值 | 主键 | 外键 | 说明 | |--------|----------|------|----------|--------|------|------|------| | id | BIGINT | - | 否 | AUTO_INCREMENT | 是 | - | 角色ID | | name | VARCHAR | 50 | 否 | - | - | - | 角色名称,唯一 | | description | VARCHAR | 200 | 是 | - | - | - | 角色描述 | 3. **用户角色关联表(user_roles)** | 字段名 | 数据类型 | 长度 | 是否可空 | 默认值 | 主键 | 外键 | 说明 | |--------|----------|------|----------|--------|------|------|------| | user_id | BIGINT | - | 否 | - | 是 | users.id | 用户ID | | role_id | BIGINT | - | 否 | - | 是 | roles.id | 角色ID | 4. **产品表(products)** | 字段名 | 数据类型 | 长度 | 是否可空 | 默认值 | 主键 | 外键 | 说明 | |--------|----------|------|----------|--------|------|------|------| | id | BIGINT | - | 否 | AUTO_INCREMENT | 是 | - | 产品ID | | code | VARCHAR | 50 | 否 | - | - | - | 产品编码,唯一 | | sku | VARCHAR | 50 | 否 | - | - | - | 库存单位编码 | | name | VARCHAR | 100 | 否 | - | - | - | 产品名称 | | description | TEXT | - | 是 | - | - | - | 产品描述 | | price | DECIMAL | 10,2 | 否 | - | - | - | 价格 | | unit | VARCHAR | 20 | 否 | '个' | - | - | 单位 | | stock_quantity | INT | - | 否 | 0 | - | - | 库存数量 | | safety_stock | INT | - | 否 | 10 | - | - | 安全库存 | | category_id | BIGINT | - | 是 | - | - | categories.id | 分类ID | | created_at | DATETIME | - | 是 | - | - | - | 创建时间 | | updated_at | DATETIME | - | 是 | - | - | - | 更新时间 | 5. **分类表(categories)** | 字段名 | 数据类型 | 长度 | 是否可空 | 默认值 | 主键 | 外键 | 说明 | |--------|----------|------|----------|--------|------|------|------| | id | BIGINT | - | 否 | AUTO_INCREMENT | 是 | - | 分类ID | | name | VARCHAR | 50 | 否 | - | - | - | 分类名称 | | description | TEXT | - | 是 | - | - | - | 分类描述 | 6. **供应商表(suppliers)** | 字段名 | 数据类型 | 长度 | 是否可空 | 默认值 | 主键 | 外键 | 说明 | |--------|----------|------|----------|--------|------|------|------| | id | BIGINT | - | 否 | AUTO_INCREMENT | 是 | - | 供应商ID | | name | VARCHAR | 100 | 否 | - | - | - | 供应商名称,唯一 | | short_name | VARCHAR | 20 | 是 | - | - | - | 简称 | | phone | VARCHAR | 20 | 是 | - | - | - | 联系电话 | | address | TEXT | - | 是 | - | - | - | 地址 | | email | VARCHAR | 100 | 是 | - | - | - | 邮箱 | | contact_person | VARCHAR | 50 | 是 | - | - | - | 联系人 | | enabled | BOOLEAN | - | 否 | TRUE | - | - | 是否启用 | 7. **入库记录表(in_stock_records)** | 字段名 | 数据类型 | 长度 | 是否可空 | 默认值 | 主键 | 外键 | 说明 | |--------|----------|------|----------|--------|------|------|------| | id | BIGINT | - | 否 | AUTO_INCREMENT | 是 | - | 记录ID | | record_code | VARCHAR | 50 | 否 | - | - | - | 入库单号,唯一 | | product_id | BIGINT | - | 否 | - | - | products.id | 产品ID | | supplier_id | BIGINT | - | 是 | - | - | suppliers.id | 供应商ID | | quantity | INT | - | 否 | - | - | - | 入库数量 | | price | DECIMAL | 10,2 | 否 | - | - | - | 单价 | | operator | VARCHAR | 50 | 是 | - | - | - | 操作人 | | batch_number | VARCHAR | 50 | 是 | - | - | - | 批次号 | | created_at | DATETIME | - | 是 | - | - | - | 创建时间 | | updated_at | DATETIME | - | 是 | - | - | - | 更新时间 | | created_by | BIGINT | - | 是 | - | - | users.id | 创建人ID | | approved_by | BIGINT | - | 是 | - | - | users.id | 审批人ID | | approved_at | DATETIME | - | 是 | - | - | - | 审批时间 | | remarks | TEXT | - | 是 | - | - | - | 备注 | | status | VARCHAR | 20 | 否 | - | - | - | 状态 | | total_amount | DECIMAL | 10,2 | 是 | - | - | - | 总金额 | 8. **出库记录表(out_stock_records)** | 字段名 | 数据类型 | 长度 | 是否可空 | 默认值 | 主键 | 外键 | 说明 | |--------|----------|------|----------|--------|------|------|------| | id | BIGINT | - | 否 | AUTO_INCREMENT | 是 | - | 记录ID | | record_code | VARCHAR | 50 | 否 | - | - | - | 出库单号,唯一 | | product_id | BIGINT | - | 否 | - | - | products.id | 产品ID | | quantity | INT | - | 否 | - | - | - | 出库数量 | | price | DECIMAL | 10,2 | 否 | - | - | - | 单价 | | recipient | VARCHAR | 50 | 是 | - | - | - | 接收人 | | operator | VARCHAR | 50 | 是 | - | - | - | 操作人 | | status | VARCHAR | 20 | 否 | - | - | - | 状态 | | created_at | DATETIME | - | 是 | - | - | - | 创建时间 | | updated_at | DATETIME | - | 是 | - | - | - | 更新时间 | | remarks | TEXT | - | 是 | - | - | - | 备注 | | destination | VARCHAR | 200 | 是 | - | - | - | 目的地 | | total_amount | DECIMAL | 10,2 | 是 | - | - | - | 总金额 | | created_by | BIGINT | - | 是 | - | - | users.id | 创建人ID | | approved_by | BIGINT | - | 是 | - | - | users.id | 审批人ID | | approved_at | DATETIME | - | 是 | - | - | - | 审批时间 | 9. **库存调整记录表(stock_adjustment_records)** | 字段名 | 数据类型 | 长度 | 是否可空 | 默认值 | 主键 | 外键 | 说明 | |--------|----------|------|----------|--------|------|------|------| | id | BIGINT | - | 否 | AUTO_INCREMENT | 是 | - | 记录ID | | product_id | BIGINT | - | 否 | - | - | products.id | 产品ID | | quantity | INT | - | 否 | - | - | - | 调整数量 | | operation | VARCHAR | 10 | 否 | - | - | - | 操作类型 | | remarks | TEXT | - | 是 | - | - | - | 备注 | | created_at | DATETIME | - | 否 | - | - | - | 创建时间 | | created_by | BIGINT | - | 是 | - | - | users.id | 创建人ID | ### 界面代码位置 1. **登录界面** - 后端:`src/main/java/com/example/warehouse/controller/AuthController.java` - 前端:`src/main/resources/templates/auth/login.html` 2. **产品管理界面** - 后端:`src/main/java/com/example/warehouse/controller/ProductController.java` - 前端:`src/main/resources/templates/product/` 3. **入库管理界面** - 后端:`src/main/java/com/example/warehouse/controller/InStockController.java` - 前端:`src/main/resources/templates/instock/` 4. **报表统计界面** - 后端:`src/main/java/com/example/warehouse/controller/ReportController.java` - 前端:`src/main/resources/static/js/components/Reports.jsx` 5. **用户管理界面** - 后端:`src/main/java/com/example/warehouse/controller/UserController.java` - 前端:`src/main/resources/templates/user/` ### 数据库初始化 数据库初始化脚本位于 `src/main/resources/db/` 目录下,包含: - `schema.sql`: 数据库表结构 - `data.sql`: 初始数据