305 lines
8.4 KiB
Markdown
305 lines
8.4 KiB
Markdown
# WMS 微服务实现总结
|
||
|
||
## ✅ 已完成的工作
|
||
|
||
### 1️⃣ 基础服务 (cpte-wms-basic-service)
|
||
|
||
#### Entity 实体类(4 个)
|
||
- ✅ `Item.java` - 物料实体
|
||
- ✅ `Area.java` - 库区实体
|
||
- ✅ `Point.java` - 库位实体
|
||
- ✅ `Container.java` - 容器实体
|
||
|
||
#### Mapper 接口(4 个)
|
||
- ✅ `ItemMapper.java`
|
||
- ✅ `AreaMapper.java`
|
||
- ✅ `PointMapper.java`
|
||
- ✅ `ContainerMapper.java`
|
||
|
||
#### Service 接口和实现(8 个)
|
||
- ✅ `IItemService.java` + `ItemServiceImpl.java`
|
||
- ✅ `IAreaService.java` + `AreaServiceImpl.java`
|
||
- ✅ `IPointService.java` + `PointServiceImpl.java`
|
||
- ✅ `IContainerService.java` + `ContainerServiceImpl.java`
|
||
|
||
#### Controller(1 个已完成)
|
||
- ✅ `ItemController.java` - 物料管理(增删改查、分页查询)
|
||
|
||
### 2️⃣ 入库服务 (cpte-wms-service\cpte-wms-inbound-service)
|
||
|
||
待实现:
|
||
- ⏳ 入库单 Entity
|
||
- ⏳ 入库单 DTO
|
||
- ⏳ 入库单 Controller
|
||
- ⏳ Feign 调用基础服务
|
||
|
||
---
|
||
|
||
## 📋 接下来要实现的内容
|
||
|
||
### 第一步:完成基础服务的 Controller
|
||
|
||
1. **AreaController** - 库区管理
|
||
- 新增库区
|
||
- 修改库区
|
||
- 删除库区
|
||
- 查询库区(分页、详情)
|
||
|
||
2. **PointController** - 库位管理
|
||
- 新增库位
|
||
- 修改库位
|
||
- 删除库位
|
||
- 查询库位(分页、详情)
|
||
|
||
3. **ContainerController** - 容器管理
|
||
- 新增容器
|
||
- 修改容器
|
||
- 删除容器
|
||
- 查询容器(分页、详情)
|
||
|
||
### 第二步:实现入库服务
|
||
|
||
1. **创建入库单 Entity**
|
||
- 入库单主表
|
||
- 入库单明细表
|
||
|
||
2. **创建 Feign Client**
|
||
- 调用基础服务查询物料
|
||
- 调用基础服务查询库位
|
||
|
||
3. **实现入库 Controller**
|
||
- 新增入库单
|
||
- 审核入库单
|
||
- 执行入库
|
||
- 查询入库单
|
||
|
||
### 第三步:数据库建表脚本
|
||
|
||
创建 SQL 建表脚本,包括:
|
||
- wms_basic_item(物料表)
|
||
- wms_basic_area(库区表)
|
||
- wms_basic_point(库位表)
|
||
- wms_basic_container(容器表)
|
||
- wms_inbound_order(入库单主表)
|
||
- wms_inbound_order_detail(入库单明细表)
|
||
|
||
---
|
||
|
||
## 🎯 业务流程说明
|
||
|
||
### 入库业务流程
|
||
|
||
```
|
||
1. 创建入库单
|
||
↓
|
||
2. 调用基础服务查询物料信息(验证物料是否存在)
|
||
↓
|
||
3. 调用基础服务查询库位信息(验证库位是否存在)
|
||
↓
|
||
4. 保存入库单
|
||
↓
|
||
5. 审核入库单
|
||
↓
|
||
6. 执行入库(调用库存服务增加库存)
|
||
↓
|
||
7. 调用调度服务创建 AGV 上架任务
|
||
```
|
||
|
||
### Feign 服务间调用
|
||
|
||
```java
|
||
// 入库服务中通过 Feign 调用基础服务
|
||
@Autowired
|
||
private BasicServiceClient basicServiceClient;
|
||
|
||
// 查询物料信息
|
||
Result<Item> itemResult = basicServiceClient.getItemById(itemId);
|
||
if (!itemResult.isSuccess()) {
|
||
return Result.error("物料不存在");
|
||
}
|
||
|
||
// 查询库位信息
|
||
Result<Point> pointResult = basicServiceClient.getPointById(pointId);
|
||
if (!pointResult.isSuccess()) {
|
||
return Result.error("库位不存在");
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 数据库表结构(待创建)
|
||
|
||
### 基础数据表
|
||
|
||
```sql
|
||
-- 物料表
|
||
CREATE TABLE wms_basic_item (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
item_code VARCHAR(50) NOT NULL COMMENT '物料编码',
|
||
item_name VARCHAR(100) NOT NULL COMMENT '物料名称',
|
||
item_spec VARCHAR(100) COMMENT '规格型号',
|
||
item_model VARCHAR(100) COMMENT '物料模型',
|
||
item_unit VARCHAR(20) COMMENT '单位',
|
||
item_category VARCHAR(50) COMMENT '物料分类',
|
||
item_brand VARCHAR(50) COMMENT '品牌',
|
||
safe_stock INT DEFAULT 0 COMMENT '安全库存',
|
||
min_stock INT DEFAULT 0 COMMENT '最小库存',
|
||
max_stock INT DEFAULT 0 COMMENT '最大库存',
|
||
status INT DEFAULT 1 COMMENT '状态',
|
||
remark VARCHAR(500) COMMENT '备注',
|
||
create_by VARCHAR(50),
|
||
create_time DATETIME,
|
||
update_by VARCHAR(50),
|
||
update_time DATETIME,
|
||
del_flag INT DEFAULT 0
|
||
);
|
||
|
||
-- 库区表
|
||
CREATE TABLE wms_basic_area (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
area_code VARCHAR(50) NOT NULL,
|
||
area_name VARCHAR(100) NOT NULL,
|
||
area_type INT COMMENT '库区类型',
|
||
warehouse_code VARCHAR(50),
|
||
warehouse_name VARCHAR(100),
|
||
manager VARCHAR(50),
|
||
phone VARCHAR(20),
|
||
area_size DOUBLE COMMENT '面积',
|
||
capacity INT COMMENT '库容',
|
||
status INT DEFAULT 1,
|
||
remark VARCHAR(500),
|
||
create_by VARCHAR(50),
|
||
create_time DATETIME,
|
||
update_by VARCHAR(50),
|
||
update_time DATETIME,
|
||
del_flag INT DEFAULT 0
|
||
);
|
||
|
||
-- 库位表
|
||
CREATE TABLE wms_basic_point (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
point_code VARCHAR(50) NOT NULL,
|
||
point_name VARCHAR(100) NOT NULL,
|
||
point_type INT COMMENT '库位类型',
|
||
area_code VARCHAR(50),
|
||
area_name VARCHAR(100),
|
||
warehouse_code VARCHAR(50),
|
||
warehouse_name VARCHAR(100),
|
||
row VARCHAR(20) COMMENT '排',
|
||
column VARCHAR(20) COMMENT '列',
|
||
level VARCHAR(20) COMMENT '层',
|
||
max_length DOUBLE COMMENT '最大长度',
|
||
max_width DOUBLE COMMENT '最大宽度',
|
||
max_height DOUBLE COMMENT '最大高度',
|
||
max_weight DOUBLE COMMENT '最大重量',
|
||
current_stock INT DEFAULT 0 COMMENT '当前库存',
|
||
status INT DEFAULT 1,
|
||
remark VARCHAR(500),
|
||
create_by VARCHAR(50),
|
||
create_time DATETIME,
|
||
update_by VARCHAR(50),
|
||
update_time DATETIME,
|
||
del_flag INT DEFAULT 0
|
||
);
|
||
|
||
-- 容器表
|
||
CREATE TABLE wms_basic_container (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
container_code VARCHAR(50) NOT NULL,
|
||
container_name VARCHAR(100) NOT NULL,
|
||
container_type INT COMMENT '容器类型',
|
||
container_spec VARCHAR(100) COMMENT '容器规格',
|
||
length DOUBLE COMMENT '长度',
|
||
width DOUBLE COMMENT '宽度',
|
||
height DOUBLE COMMENT '高度',
|
||
self_weight DOUBLE COMMENT '自重',
|
||
max_weight DOUBLE COMMENT '最大载重',
|
||
material INT COMMENT '材质',
|
||
color VARCHAR(20) COMMENT '颜色',
|
||
supplier VARCHAR(100) COMMENT '供应商',
|
||
status INT DEFAULT 1,
|
||
remark VARCHAR(500),
|
||
create_by VARCHAR(50),
|
||
create_time DATETIME,
|
||
update_by VARCHAR(50),
|
||
update_time DATETIME,
|
||
del_flag INT DEFAULT 0
|
||
);
|
||
```
|
||
|
||
### 入库业务表
|
||
|
||
```sql
|
||
-- 入库单主表
|
||
CREATE TABLE wms_inbound_order (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
order_no VARCHAR(50) NOT NULL COMMENT '入库单号',
|
||
order_type INT COMMENT '入库类型',
|
||
source_type INT COMMENT '来源类型',
|
||
source_no VARCHAR(50) COMMENT '来源单号',
|
||
warehouse_code VARCHAR(50) COMMENT '仓库编码',
|
||
warehouse_name VARCHAR(100) COMMENT '仓库名称',
|
||
total_quantity INT DEFAULT 0 COMMENT '总数量',
|
||
total_boxes INT DEFAULT 0 COMMENT '总箱数',
|
||
status INT DEFAULT 0 COMMENT '状态',
|
||
supplier_code VARCHAR(50) COMMENT '供应商编码',
|
||
supplier_name VARCHAR(100) COMMENT '供应商名称',
|
||
arrival_date DATETIME COMMENT '到货日期',
|
||
plan_inbound_date DATETIME COMMENT '计划入库日期',
|
||
actual_inbound_date DATETIME COMMENT '实际入库日期',
|
||
remark VARCHAR(500) COMMENT '备注',
|
||
create_by VARCHAR(50),
|
||
create_time DATETIME,
|
||
update_by VARCHAR(50),
|
||
update_time DATETIME,
|
||
del_flag INT DEFAULT 0
|
||
);
|
||
|
||
-- 入库单明细表
|
||
CREATE TABLE wms_inbound_order_detail (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
order_id VARCHAR(64) NOT NULL COMMENT '入库单 ID',
|
||
order_no VARCHAR(50) NOT NULL COMMENT '入库单号',
|
||
item_id VARCHAR(64) NOT NULL COMMENT '物料 ID',
|
||
item_code VARCHAR(50) NOT NULL COMMENT '物料编码',
|
||
item_name VARCHAR(100) NOT NULL COMMENT '物料名称',
|
||
item_spec VARCHAR(100) COMMENT '规格',
|
||
expected_quantity INT NOT NULL COMMENT '应收数量',
|
||
actual_quantity INT DEFAULT 0 COMMENT '实收数量',
|
||
unit VARCHAR(20) COMMENT '单位',
|
||
batch_no VARCHAR(50) COMMENT '批次号',
|
||
production_date DATETIME COMMENT '生产日期',
|
||
expiry_date DATETIME COMMENT '有效期',
|
||
point_id VARCHAR(64) COMMENT '库位 ID',
|
||
point_code VARCHAR(50) COMMENT '库位编码',
|
||
status INT DEFAULT 0 COMMENT '状态',
|
||
remark VARCHAR(500),
|
||
create_by VARCHAR(50),
|
||
create_time DATETIME,
|
||
update_by VARCHAR(50),
|
||
update_time DATETIME,
|
||
del_flag INT DEFAULT 0
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 下一步行动
|
||
|
||
请告诉我是否需要我继续实现:
|
||
|
||
1. ✅ 基础服务的其他 Controller(Area、Point、Container)
|
||
2. ✅ 入库服务的完整实现(Entity、DTO、Controller)
|
||
3. ✅ Feign 调用集成
|
||
4. ✅ 数据库建表脚本
|
||
|
||
或者你有其他优先级安排?
|
||
|
||
---
|
||
|
||
## 📖 相关文档
|
||
|
||
- [ApiFox 测试指南](APIFOX_TEST_GUIDE.md)
|
||
- [Feign 使用指南](FEIGN_USAGE.md)
|
||
- [本地开发配置](LOCAL_DEV_FEIGN_CONFIG.md)
|