Files
ruoyi-java/doc/子账号功能更新说明.md
雷欧(林平凡) 4ccd5f799e 1
2025-10-10 14:24:59 +08:00

228 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 批量发品-子账号功能更新说明
## 更新时间
2025-01-10 (最后更新2025-01-10 18:30)
## 功能描述
在批量发品功能中新增子账号选择功能。支持**同时选择多个主账号**,每个主账号可以**多选子账号**。系统会为每个商品×每个主账号×每个子账号创建发品任务。
## 前端修改
### 1. `ruoyi-vue/src/views/jarvis/batchPublish/index.vue`
#### 界面改动
- 将"目标账号"改为复选框Checkbox支持**同时选择多个主账号**
- 每个选中的主账号下方自动展开对应的**子账号多选下拉框**
- 子账号在首次展开或点击下拉框时自动加载
- 支持为不同主账号选择不同的子账号组合
- 添加加载状态提示和友好的错误提示
#### 数据改动
```javascript
// 修改后的数据结构
publishForm: {
selectedMainAccounts: [], // 选中的主账号列表 ['appid1', 'appid2']
accountSubAccounts: { // 每个主账号对应的子账号
'appid1': ['子账号1', '子账号2'],
'appid2': ['子账号3']
}
}
// 子账号数据
subAccountsMap: { // 每个主账号对应的子账号选项列表
'appid1': [{value, label}],
'appid2': [{value, label}]
}
loadingSubAccounts: { // 每个主账号的加载状态
'appid1': false,
'appid2': true
}
```
#### 新增/修改方法
- `onMainAccountsChange(selectedAccounts)`: 主账号变化时触发,清理未选中账号的数据,为新选中账号初始化数据结构
- `loadSubAccountsForAccount(appid)`: 为指定主账号加载子账号列表(带防重复加载逻辑)
## 后端修改
### 1. `BatchPublishRequest.java`
```java
// 新增内部类
public static class AccountConfig {
private String targetAccount; // 目标ERP账号appid
private List<String> subAccounts; // 该账号下的子账号列表
}
// 修改后的字段
private List<AccountConfig> accountConfigs; // 账号配置列表(多个主账号+子账号)
```
数据结构示例:
```json
{
"accountConfigs": [
{
"targetAccount": "appid1",
"subAccounts": ["子账号1", "子账号2"]
},
{
"targetAccount": "appid2",
"subAccounts": ["子账号3"]
}
]
}
```
### 2. `BatchPublishItem.java`
新增字段:
```java
private String subAccount; // 子账号(会员名)
```
### 3. `BatchPublishServiceImpl.java`
#### batchPublish方法
- 修改任务创建逻辑,支持多主账号配置
- 为**每个商品 × 每个主账号 × 每个子账号**创建一条发品记录
- 保存完整的账号配置信息到任务记录中
**处理逻辑:**
```java
for (ProductItem product : products) {
for (AccountConfig config : accountConfigs) {
String appid = config.getTargetAccount();
for (String subAccount : config.getSubAccounts()) {
// 创建一条发品记录
// 记录包含:商品信息 + 主账号(appid) + 子账号(会员名)
}
}
}
```
**示例:**
- 2个商品 × 2个主账号 × (每个主账号2个子账号) = 8条发品记录
#### publishProduct方法
- 使用`item.getSubAccount()`作为会员名进行发品
- 如果子账号为空,则使用通用参数中的会员名作为备选
### 4. `BatchPublishItemMapper.xml`
#### 修改内容
- `resultMap`中添加`sub_account`字段映射
- `selectBatchPublishItemVo` SQL中添加`sub_account`字段
- `insertBatchPublishItem`中添加`sub_account`字段
- `batchInsertBatchPublishItem`批量插入中添加`sub_account`字段
## 数据库修改
### SQL迁移脚本
文件:`sql/add_sub_account_column.sql`
```sql
ALTER TABLE batch_publish_item
ADD COLUMN sub_account VARCHAR(100) COMMENT '子账号(会员名)' AFTER account_remark;
```
## 使用流程
### 用户操作流程
1. 选择线报消息并解析商品
2. 选择要发品的商品
3. **勾选一个或多个主账号**(支持多选)
4. 系统自动为每个选中的主账号展开子账号下拉框
5. 在每个主账号下**选择一个或多个子账号**(支持多选)
6. 填写其他通用参数
7. 提交批量发品
**界面示例:**
```
☑ 海尔胡歌
↓ [子账号1, 子账号2, 子账号3] (多选下拉框)
☑ 方案小号
↓ [子账号A, 子账号B] (多选下拉框)
☐ 其他账号
```
### 数据流转
1. 前端提交数据包含:
```javascript
{
accountConfigs: [
{ targetAccount: 'appid1', subAccounts: ['子账号1', '子账号2'] },
{ targetAccount: 'appid2', subAccounts: ['子账号A'] }
]
}
```
2. 后端处理逻辑:
- 对于每个商品 × 每个主账号配置 × 每个子账号,创建一条发品记录
- 每条记录包含:`targetAccount`appid和 `subAccount`(会员名)
3. 发品时:
- 使用`targetAccount`确定ERP账号API密钥
- 使用`subAccount`作为发品时的会员名
**发品数量计算:**
- 假设选择2个商品、2个主账号每个主账号选2个子账号
- 生成发品任务数2 × 2 × 2 = **8条发品记录**
## 兼容性说明
### 向后兼容
- 如果`subAccount`字段为空,系统会使用通用参数中的`userName`作为备选
- 旧的发品记录不受影响,可以正常查询和显示
## 部署步骤
1. 执行数据库迁移脚本:
```sql
source sql/add_sub_account_column.sql
```
2. 重新编译并部署后端服务:
```bash
cd ruoyi-java
mvn clean package
```
3. 部署前端:
```bash
cd ruoyi-vue
npm run build
```
4. 重启服务
## 测试要点
### 基础功能测试
1. **主账号多选**:勾选多个主账号,确认每个账号下都展开了子账号选择框
2. **子账号加载**:确认每个主账号的子账号列表正确加载,且互不干扰
3. **取消主账号**:取消勾选主账号时,对应的子账号数据被清理
4. **子账号多选**:每个主账号下可以独立选择多个子账号
### 数据验证测试
5. **必填验证**:未选择主账号时提示"请至少选择一个主账号"
6. **子账号验证**:选中主账号但未选子账号时,提示"请为账号XXX选择至少一个子账号"
7. **发品记录数量**:验证创建的发品记录数 = 商品数 × Σ(每个主账号的子账号数)
### 业务功能测试
8. **任务创建**:提交后正确创建任务,任务记录中保存完整的账号配置信息
9. **发品明细**:查看发品明细时,主账号和子账号信息都正确显示
10. **实际发品**验证发品时使用了正确的主账号API密钥和子账号会员名
### 边界情况测试
11. **单主账号单子账号**:退化到最简单情况是否正常
12. **多主账号多子账号**:同时选择所有主账号,每个主账号选择多个子账号
13. **子账号为空**:某个主账号下没有子账号时的提示是否友好
14. **网络异常**:加载子账号失败时是否有正确的错误提示
## 注意事项
1. 子账号列表通过调用`/erp/product/usernames`接口获取
2. 该接口需要传递`appid`参数即主账号的API Key
3. 确保ERP账号已正确授权否则可能无法获取子账号列表
4. 建议在生产环境部署前,先在测试环境完整测试一遍流程