# 线报批量发品功能说明

## 功能概述

线报批量发品功能允许用户通过输入框输入线报消息，自动解析出商品信息，然后批量发品到多个ERP账号，并支持延迟自动上架。

## 主要特性

### 1. 智能解析
- 支持从线报消息中自动识别京东商品链接
- 支持多种链接格式（item.jd.com、u.jd.com短链接等）
- 自动提取SKUID并查询商品详情
- 获取商品名称、价格、图片、店铺等信息

### 2. 批量选择
- 可视化商品列表，支持全选/反选
- 展示商品图片、名称、价格、佣金等信息
- 灵活选择需要发品的商品

### 3. 多账号发品
- 支持同时选择多个ERP账号（胡歌、刘强东等）
- 每个商品会发送到所有选中的账号
- 自动生成商家编码，避免重复

### 4. 通用参数设置
- 支持统一设置：会员名、省市区、商品类型、行业类型、类目等
- 支持设置邮费、库存、成色、服务支持等
- 一次设置，应用到所有商品

### 5. 延迟队列上架
- 发品成功后自动加入延迟队列
- 可自定义延迟时间（1-60秒）
- 到时后自动调用上架接口

### 6. 进度跟踪
- 实时显示发品进度
- 展示每个商品在每个账号的发品状态
- 记录成功数、失败数、错误信息

### 7. 历史记录
- 保存所有批量发品任务记录
- 支持查看任务详情和发品明细
- 可追溯每个商品的发品结果

## 使用流程

### 第一步：输入线报消息

在输入框中粘贴线报消息，支持以下格式：

```
【京东】某某商品
https://item.jd.com/100012345678.html
原价：999元
...

【京东】另一个商品
https://u.jd.com/xxxxx
到手价：199元
...
```

点击"解析商品"按钮，系统会自动提取商品链接并查询详情。

### 第二步：选择商品

- 系统展示解析出的商品列表
- 勾选需要发品的商品（支持全选）
- 查看商品信息确认无误
- 点击"下一步"

### 第三步：设置参数

#### 3.1 基本设置
- **任务名称**（选填）：为本次批量发品任务命名
- **延迟上架**：设置发品成功后延迟多少秒自动上架（默认3秒）

#### 3.2 目标账号
- 选择一个或多个ERP账号（支持多选）
- 每个商品将发送到所有选中的账号

#### 3.3 通用参数
- **会员名**：闲鱼会员名（必填）
- **省市区**：发货地址代码（必填）
- **商品类型**：普通商品/已验货/验货宝等（必填）
- **行业类型**：手机/家电/数码等（必填）
- **类目ID**：商品类目ID（必填）
- **邮费**：邮费金额（元，必填）
- **库存**：库存数量（必填）
- **成色**：全新/99新等（选填）
- **服务支持**：七天无理由退货等（选填）

点击"开始批量发品"提交任务。

### 第四步：查看进度

- 系统创建批量发品任务
- 实时展示发品进度条
- 显示每个商品在每个账号的发品状态
- 发品成功的商品会自动加入延迟队列等待上架

## 数据库表结构

### batch_publish_task（批量发品任务表）

| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 任务ID |
| task_name | varchar(200) | 任务名称 |
| original_message | text | 原始线报消息 |
| total_products | int | 解析出的商品数量 |
| selected_products | int | 选中的商品数量 |
| target_accounts | varchar(500) | 目标ERP账号（JSON） |
| status | int | 任务状态：0待处理 1处理中 2已完成 3失败 |
| success_count | int | 成功发品数量 |
| fail_count | int | 失败发品数量 |
| common_params | text | 通用参数（JSON） |
| create_user_id | bigint | 创建人ID |
| create_user_name | varchar(100) | 创建人姓名 |
| create_time | datetime | 创建时间 |
| complete_time | datetime | 完成时间 |

### batch_publish_item（批量发品明细表）

| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 明细ID |
| task_id | bigint | 任务ID |
| skuid | varchar(100) | SKUID |
| product_name | varchar(500) | 商品名称 |
| target_account | varchar(100) | 目标ERP账号 |
| account_remark | varchar(100) | 账号备注名 |
| status | int | 发品状态：0待发布 1发布中 2发布成功 3发布失败 4上架中 5已上架 6上架失败 |
| product_id | bigint | ERP商品ID |
| product_status | int | 商品状态 |
| outer_id | varchar(100) | 商家编码 |
| publish_price | bigint | 发品价格（分） |
| error_message | varchar(1000) | 失败原因 |
| publish_time | datetime | 上架时间 |
| delay_seconds | int | 延迟上架时间（秒） |
| create_time | datetime | 创建时间 |

## API接口

### 1. 解析线报消息
```
POST /jarvis/batchPublish/parse
Content-Type: application/json

{
  "message": "线报消息内容"
}

返回：
{
  "code": 200,
  "msg": "操作成功",
  "data": [
    {
      "skuid": "100012345678",
      "productName": "商品名称",
      "price": 199.0,
      "productImage": "http://...",
      "shopName": "店铺名称",
      "shopId": "12345",
      "commissionInfo": "10%"
    }
  ]
}
```

### 2. 批量发品
```
POST /jarvis/batchPublish/publish
Content-Type: application/json

{
  "taskName": "任务名称",
  "originalMessage": "原始消息",
  "products": [
    {
      "skuid": "100012345678",
      "productName": "商品名称",
      "price": 199.0
    }
  ],
  "targetAccounts": ["1016208368633221", "1206879680251333"],
  "delaySeconds": 3,
  "commonParams": {
    "userName": "会员名",
    "province": 110000,
    "city": 110100,
    "district": 110101,
    "itemBizType": 2,
    "spBizType": 3,
    "channelCatId": "12345",
    "expressFee": 0.0,
    "stock": 1,
    "stuffStatus": 100
  }
}

返回：
{
  "code": 200,
  "msg": "任务已创建",
  "data": 123 // 任务ID
}
```

### 3. 查询任务列表
```
GET /jarvis/batchPublish/task/list?pageNum=1&pageSize=10

返回：
{
  "code": 200,
  "msg": "查询成功",
  "rows": [...],
  "total": 10
}
```

### 4. 查询任务详情
```
GET /jarvis/batchPublish/task/{taskId}

返回任务详细信息
```

### 5. 查询任务明细
```
GET /jarvis/batchPublish/item/list/{taskId}

返回任务所有发品明细
```

## 状态说明

### 任务状态
- 0：待处理
- 1：处理中
- 2：已完成
- 3：失败

### 发品状态
- 0：待发布
- 1：发布中
- 2：发布成功
- 3：发布失败
- 4：上架中
- 5：已上架
- 6：上架失败

## 技术实现

### 后端
- **解析工具**：LineReportParser - 正则表达式提取链接和SKUID
- **Service**：BatchPublishServiceImpl - 核心业务逻辑
- **异步任务**：@Async注解 + CompletableFuture实现延迟队列
- **数据库**：MyBatis + MySQL存储任务和明细

### 前端
- **框架**：Vue 2 + Element UI
- **步骤条**：el-steps实现4步向导
- **实时刷新**：定时器轮询任务状态
- **组件**：表格、表单、对话框等

## 注意事项

1. **线报消息格式**：尽量包含完整的京东商品链接，便于准确识别
2. **价格获取**：价格从京东API实时查询，可能与线报价格有差异
3. **账号限制**：请确保ERP账号有足够的发品额度
4. **延迟上架**：建议设置3-5秒延迟，避免频繁操作
5. **参数设置**：通用参数会应用到所有商品，请仔细核对
6. **批量操作**：大批量发品时请分批进行，避免超时

## 常见问题

### Q1: 解析不到商品怎么办？
A: 确保线报消息中包含完整的京东商品链接，如：https://item.jd.com/xxxxx.html

### Q2: 发品失败是什么原因？
A: 可能原因：账号额度不足、商品信息不完整、网络异常等，查看错误信息了解详情

### Q3: 可以同时发多少个商品？
A: 理论上无限制，但建议每次不超过50个商品，避免超时

### Q4: 延迟上架的作用是什么？
A: 避免频繁操作触发平台限制，给系统缓冲时间

### Q5: 如何查看历史记录？
A: 点击页面右上角的"历史记录"按钮，可以查看所有批量发品任务

## 未来优化方向

1. [ ] 集成实际的发品接口（目前为模拟）
2. [ ] 支持商品价格批量调整
3. [ ] 支持文案自动生成
4. [ ] 支持图片批量处理
5. [ ] 支持发品模板保存
6. [ ] 支持定时发品
7. [ ] 支持发品失败自动重试
8. [ ] 支持发品结果通知（钉钉/企微）

## 更新日志

### v1.0.0 (2025-01-10)
- ✅ 初始版本
- ✅ 实现线报消息解析
- ✅ 实现批量发品
- ✅ 实现延迟队列上架
- ✅ 实现多账号支持
- ✅ 实现历史记录查询

