# 调度系统与盘点系统开发文档

## 1. 项目概述

### 1.1 项目背景
调度系统是用于实现仓库自动化作业的核心系统，通过与WCS（仓库控制系统）和AGV（自动导引车）系统的协作，实现货物的自动化入库、出库、移库等操作。

盘点系统是用于实现仓库库存自动盘点的系统，通过RFID设备自动采集货品信息，并与系统库存数据进行比对，以实现库存的精确管理。

### 1.2 项目目标
- 实现调度系统与WCS、AGV系统间的无缝对接
- 实现盘点系统与RFID设备的高效协作
- 提供标准化接口，确保各系统间稳定运行
- 实现出入库、盘点等核心业务流程

## 2. 调度系统

### 2.1 系统架构
调度系统作为中间层，负责协调WMS、WCS、AGV三个系统间的任务流转和状态同步。

### 2.2 业务流程描述

#### 2.2.1 入库/上架流程
1. **任务创建**：WMS系统创建入库任务
2. **任务分发**：调度系统将任务分发给WCS系统
3. **设备执行**：WCS系统控制立体库设备执行上架操作
4. **状态反馈**：WCS系统实时反馈任务执行状态
5. **完成确认**：任务完成后更新状态

#### 2.2.2 出库/下架流程
1. **任务创建**：WMS系统创建出库任务
2. **任务分发**：调度系统将任务分发给WCS系统
3. **设备执行**：WCS系统控制立体库设备执行下架操作
4. **AGV配合**：根据需要调度AGV进行货物搬运
5. **状态反馈**：WCS/AGV系统实时反馈任务执行状态
6. **完成确认**：任务完成后更新状态

#### 2.2.3 移库流程
1. **任务创建**：WMS系统创建移库任务
2. **AGV调度**：调度系统先调度AGV搬运货物
3. **WCS配合**：根据需要调度WCS进行货物存放
4. **状态监控**：实时监控任务执行状态
5. **完成确认**：任务完成后更新状态

### 2.3 核心功能

#### 2.3.1 入库/上架功能
- 接收WMS系统的入库任务
- 控制立体库设备执行上架操作
- 实时反馈任务执行状态给WMS系统

#### 2.3.2 出库/下架功能
- 接收WMS系统的出库任务
- 控制立体库设备执行下架操作
- 实时反馈任务执行状态给WMS系统

#### 2.3.3 任务调度功能
- 任务队列管理
- 任务优先级调度
- 设备资源分配

### 2.4 业务流程图

```mermaid
graph TD
    A[WMS创建任务] --> B{判断任务类型}
    B -->|入库/上架| C[WMS调用WCS /API/Ruku接口]
    B -->|出库/下架| D[WMS调用WCS /API/Chuku接口]
    
    C --> E[WCS接收任务请求]
    D --> E
    
    E --> F[WCS验证任务参数]
    F --> G{参数验证结果}
    G -->|验证失败| H[WCS返回错误信息给WMS]
    G -->|验证成功| I[WCS创建内部任务]
    
    I --> J[WCS控制立体库设备执行任务]
    J --> K[设备执行中...]
    K --> L{任务执行结果}
    L -->|执行成功| M[WCS更新任务状态]
    L -->|执行失败| N[WCS记录异常并重试]
    
    M --> O[WCS回调WMS状态更新]
    N --> P{重试次数达到上限}
    P -->|是| Q[WCS回调WMS失败状态]
    P -->|否| J
    
    O --> R[WMS接收状态更新]
    Q --> R
    H --> R
    
    R --> S{是否需要AGV配合}
    S -->|是| T[WMS调度AGV]
    S -->|否| U[任务完成]
    T --> U
```

### 2.5 接口规范

#### 2.5.1 入库接口（/API/Ruku）
- **功能说明**：WMS系统调用此接口创建入库/上架任务
- **请求方式**：POST
- **我方服务地址**：http://[IP_ADDR]:[PORT]/API/Ruku
- **第三方调用**：WCS系统需实现此接口并接受调用

#### 2.5.2 出库接口（/API/Chuku）
- **功能说明**：WMS系统调用此接口创建出库/下架任务
- **请求方式**：POST
- **我方服务地址**：http://[IP_ADDR]:[PORT]/API/Chuku
- **第三方调用**：WCS系统需实现此接口并接受调用

#### 2.5.3 任务状态回调接口
- **功能说明**：WCS/AGV系统回调任务执行状态
- **请求方式**：POST
- **我方服务地址**：http://[IP_ADDR]:[PORT]/wisdom/wcs/callback
- **第三方调用**：WCS/AGV系统需调用此接口反馈状态

### 2.6 对接流程

#### 2.6.1 WCS系统对接流程
1. **接口实现**：WCS系统需实现入库/出库接口
2. **数据格式**：按约定格式接收任务数据
3. **状态反馈**：通过回调接口实时反馈任务状态
4. **异常处理**：处理任务执行中的异常情况

#### 2.6.2 AGV系统对接流程
1. **接口实现**：AGV系统需实现搬运任务接口
2. **数据格式**：按约定格式接收任务数据
3. **状态反馈**：实时反馈任务执行状态
4. **任务协调**：与WCS系统任务进行协调执行

### 2.7 配置信息

#### 2.7.1 WCS系统配置
```yaml
wcs:
  job:
    create-url: http://[WCS_IP_ADDR]:[WCS_PORT]/API/Ruku         # WCS上架任务接口
    chuku-url: http://[WCS_IP_ADDR]:[WCS_PORT]/API/Chuku         # WCS出库任务接口
```

#### 2.7.2 AGV系统配置
```yaml
agv:
  job:
    create-url: http://[AGV_IP_ADDR]:[AGV_PORT]/api/job/create
```

## 3. 盘点系统

### 3.1 系统架构
盘点系统通过RFID设备采集数据，与库存数据进行比对，生成盘点报告。

### 3.2 业务流程描述

#### 3.2.1 盘点任务创建流程
1. **任务规划阶段**：
   - 确定盘点范围（指定仓库、库区、货位等）
   - 确定盘点类型
   - 确定盘点时间安排
   - 分配盘点人员

2. **基础数据准备**：
   - 获取指定范围内的库存数据作为基准
   - 验证库存数据完整性
   - 生成任务清单

3. **任务创建阶段**：
   - 在系统中创建盘点任务记录
   - 设置任务基本信息（名称、仓库、时间等）
   - 绑定盘点设备
   - 分配执行人员

4. **任务下发阶段**：
   - 将任务信息同步到相关设备或人员
   - 准备盘点所需的辅助数据
   - 启动任务状态监控

#### 3.2.2 盘点执行流程
1. **设备连接**：RFID设备连接到系统
2. **任务获取**：设备获取盘点任务信息
3. **标签扫描**：RFID设备在指定区域扫描标签
4. **数据传输**：将扫描数据实时传输回系统
5. **状态监控**：监控设备工作状态和任务进度

#### 3.2.3 数据处理流程
1. **数据收集**：收集从RFID设备传回的标签数据
2. **数据验证**：验证数据完整性和准确性
3. **数据比对**：将采集数据与库存数据进行比对
4. **差异分析**：分析盘点差异
5. **结果生成**：生成盘点结果报告

### 3.3 核心功能

#### 3.3.1 盘点任务管理
- 创建盘点任务（设置任务名称、仓库ID、场景ID、执行人、完成时间等）
- 任务类型：手持盘点（0）和自动盘点（1）
- 任务状态：待执行（0）、已完成（1）、已超时（2）

#### 3.3.2 自动盘点功能
- 设备连接管理：通过RFID设备IP和端口建立TCP连接
- 标签扫描：启动RFID设备进行标签扫描
- 数据传输：通过WebSocket将扫描到的EPC标签数据发送给前端
- 扫描控制：支持开始、停止、断开连接等操作

#### 3.3.3 数据匹配功能
- 将扫描数据与系统库存数据进行匹配
- 生成匹配结果（正常、未扫到、误扫）
- 统计盘点结果并生成图表

#### 3.3.4 报告管理功能
- 生成盘点统计图表
- 导出盘点报告
- 提供历史盘点记录查询

### 3.4 业务流程图

```mermaid
graph TD
    A[创建盘点任务] --> B[RFID设备连接]
    B --> C[下发盘点任务到设备]
    C --> D[设备开始标签扫描]
    D --> E[实时收集标签数据]
    E --> F{是否完成扫描?}
    F -->|是| G[停止扫描]
    F -->|否| D
    G --> H[数据比对分析]
    H --> I[生成盘点结果]
    I --> J[输出盘点报告]
    J --> K[任务完成]
```

### 3.5 接口规范

#### 3.5.1 设备连接接口（/AutoInventory/connect）
- **功能说明**：建立RFID设备连接
- **请求方式**：POST
- **我方服务地址**：http://[IP_ADDR]:[PORT]/AutoInventory/connect
- **第三方调用**：RFID设备需调用此接口建立连接

#### 3.5.2 开始盘点接口（/AutoInventory/scan）
- **功能说明**：启动RFID设备进行标签扫描
- **请求方式**：GET
- **我方服务地址**：http://[IP_ADDR]:[PORT]/AutoInventory/scan
- **第三方调用**：RFID设备需调用此接口开始扫描

#### 3.5.3 停止盘点接口（/AutoInventory/stop）
- **功能说明**：停止RFID设备扫描
- **请求方式**：GET
- **我方服务地址**：http://[IP_ADDR]:[PORT]/AutoInventory/stop
- **第三方调用**：RFID设备需调用此接口停止扫描

#### 3.5.4 断开连接接口（/AutoInventory/disconnect）
- **功能说明**：断开RFID设备连接
- **请求方式**：GET
- **我方服务地址**：http://[IP_ADDR]:[PORT]/AutoInventory/disconnect
- **第三方调用**：RFID设备需调用此接口断开连接

#### 3.5.5 设备状态查询接口（/AutoInventory/status）
- **功能说明**：查询RFID设备连接状态
- **请求方式**：GET
- **我方服务地址**：http://[IP_ADDR]:[PORT]/AutoInventory/status
- **第三方调用**：RFID设备需调用此接口查询状态

#### 3.5.6 开始匹配接口（/AutoInventory/match）
- **功能说明**：将扫描数据与系统库存数据进行匹配
- **请求方式**：POST
- **我方服务地址**：http://[IP_ADDR]:[PORT]/AutoInventory/match
- **第三方调用**：系统内部调用

#### 3.5.7 盘点任务管理接口（/Inventory/task）
- **功能说明**：管理盘点任务的增删改查
- **请求方式**：POST/GET/PUT/DELETE
- **我方服务地址**：http://[IP_ADDR]:[PORT]/Inventory/task
- **第三方调用**：系统内部调用

### 3.6 对接流程

#### 3.6.1 RFID设备对接流程
1. **连接建立**：设备通过TCP/IP连接到我方系统
2. **设备注册**：设备向我方系统注册，获取设备ID
3. **任务获取**：设备从我方系统获取当前盘点任务
4. **数据采集**：设备开始扫描，实时传输标签数据
5. **状态同步**：设备定期同步工作状态
6. **任务完成**：设备完成任务后报告完成状态

#### 3.6.2 WebSocket通信
- **连接地址**：ws://[IP_ADDR]:[PORT]/websocket
- **数据格式**：JSON格式的标签数据
- **心跳机制**：定期发送心跳包保持连接

### 3.7 配置信息

#### 3.7.1 RFID设备配置
```yaml
rfid:
  device:
    conn-id: [RFID_IP_ADDR]:[RFID_PORT]
```

## 4. 部署说明

### 4.1 环境要求
- Java 8 或更高版本
- Maven 3.6.0 或更高版本
- MySQL 5.7 或更高版本
- Redis 5.0 或更高版本

### 4.2 部署步骤
1. 配置数据库连接信息
2. 配置第三方系统接口地址
3. 启动应用服务
4. 验证接口连通性

### 4.3 配置文件
- application.yml：主配置文件
- application-druid.yml：数据库配置文件

## 5. 我方开发工作汇总

### 5.1 调度系统开发工作

#### 5.1.1 接口开发
- **入库/上架接口开发**：实现与WCS系统的入库任务下发，预计16小时
- **出库/下架接口开发**：实现与WCS系统的出库任务下发，预计16小时
- **任务状态回调接口开发**：实现任务状态反馈机制，预计24小时

#### 5.1.2 业务逻辑开发
- **货物上架逻辑实现**：实现完整的货物上架业务流程，预计32小时
- **货物下架逻辑实现**：实现完整的货物下架业务流程，预计32小时
- **任务调度与排队机制**：实现多任务排队调度算法，预计24小时

#### 5.1.3 系统集成开发
- **与WMS系统接口对接**：确保调度系统与WMS系统稳定通信，预计20小时
- **与AGV系统协调机制**：实现调度系统与AGV系统的任务协调，预计16小时

**调度系统总计：180小时**

### 5.2 盘点系统开发工作

#### 5.2.1 设备接口开发
- **RFID设备连接接口开发**：开发RFID设备连接、断开、状态查询接口，预计24小时
- **盘点控制接口开发**：开发开始盘点、停止盘点等控制接口，预计16小时

#### 5.2.2 数据处理开发
- **扫描数据处理开发**：处理RFID设备扫描的标签数据，预计28小时
- **数据匹配算法开发**：开发扫描数据与库存数据的匹配算法，预计32小时

#### 5.2.3 任务管理开发
- **盘点任务管理开发**：开发盘点任务的增删改查功能，预计24小时
- **报告生成开发**：开发盘点报告生成和统计功能，预计20小时

#### 5.2.4 系统集成开发
- **WebSocket通信开发**：实现实时数据传输功能，预计20小时

**盘点系统总计：164小时**

### 5.3 项目总计
- **调度系统开发**：180小时
- **盘点系统开发**：164小时
- **项目总计**：344小时