This commit is contained in:
雷欧(林平凡)
2025-10-10 14:24:59 +08:00
parent 939660297d
commit 4ccd5f799e
6 changed files with 323 additions and 27 deletions

View File

@@ -0,0 +1,227 @@
# 批量发品-子账号功能更新说明
## 更新时间
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. 建议在生产环境部署前,先在测试环境完整测试一遍流程