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

7.1 KiB
Raw Blame History

批量发品-子账号功能更新说明

更新时间

2025-01-10 (最后更新2025-01-10 18:30)

功能描述

在批量发品功能中新增子账号选择功能。支持同时选择多个主账号,每个主账号可以多选子账号。系统会为每个商品×每个主账号×每个子账号创建发品任务。

前端修改

1. ruoyi-vue/src/views/jarvis/batchPublish/index.vue

界面改动

  • 将"目标账号"改为复选框Checkbox支持同时选择多个主账号
  • 每个选中的主账号下方自动展开对应的子账号多选下拉框
  • 子账号在首次展开或点击下拉框时自动加载
  • 支持为不同主账号选择不同的子账号组合
  • 添加加载状态提示和友好的错误提示

数据改动

// 修改后的数据结构
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

// 新增内部类
public static class AccountConfig {
    private String targetAccount;      // 目标ERP账号appid
    private List<String> subAccounts;  // 该账号下的子账号列表
}

// 修改后的字段
private List<AccountConfig> accountConfigs;  // 账号配置列表(多个主账号+子账号)

数据结构示例:

{
  "accountConfigs": [
    {
      "targetAccount": "appid1",
      "subAccounts": ["子账号1", "子账号2"]
    },
    {
      "targetAccount": "appid2",
      "subAccounts": ["子账号3"]
    }
  ]
}

2. BatchPublishItem.java

新增字段:

private String subAccount;  // 子账号(会员名)

3. BatchPublishServiceImpl.java

batchPublish方法

  • 修改任务创建逻辑,支持多主账号配置
  • 每个商品 × 每个主账号 × 每个子账号创建一条发品记录
  • 保存完整的账号配置信息到任务记录中

处理逻辑:

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

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. 前端提交数据包含:

    {
      accountConfigs: [
        { targetAccount: 'appid1', subAccounts: ['子账号1', '子账号2'] },
        { targetAccount: 'appid2', subAccounts: ['子账号A'] }
      ]
    }
    
  2. 后端处理逻辑:

    • 对于每个商品 × 每个主账号配置 × 每个子账号,创建一条发品记录
    • 每条记录包含:targetAccountappidsubAccount(会员名)
  3. 发品时:

    • 使用targetAccount确定ERP账号API密钥
    • 使用subAccount作为发品时的会员名

发品数量计算:

  • 假设选择2个商品、2个主账号每个主账号选2个子账号
  • 生成发品任务数2 × 2 × 2 = 8条发品记录

兼容性说明

向后兼容

  • 如果subAccount字段为空,系统会使用通用参数中的userName作为备选
  • 旧的发品记录不受影响,可以正常查询和显示

部署步骤

  1. 执行数据库迁移脚本:

    source sql/add_sub_account_column.sql
    
  2. 重新编译并部署后端服务:

    cd ruoyi-java
    mvn clean package
    
  3. 部署前端:

    cd ruoyi-vue
    npm run build
    
  4. 重启服务

测试要点

基础功能测试

  1. 主账号多选:勾选多个主账号,确认每个账号下都展开了子账号选择框
  2. 子账号加载:确认每个主账号的子账号列表正确加载,且互不干扰
  3. 取消主账号:取消勾选主账号时,对应的子账号数据被清理
  4. 子账号多选:每个主账号下可以独立选择多个子账号

数据验证测试

  1. 必填验证:未选择主账号时提示"请至少选择一个主账号"
  2. 子账号验证:选中主账号但未选子账号时,提示"请为账号XXX选择至少一个子账号"
  3. 发品记录数量:验证创建的发品记录数 = 商品数 × Σ(每个主账号的子账号数)

业务功能测试

  1. 任务创建:提交后正确创建任务,任务记录中保存完整的账号配置信息
  2. 发品明细:查看发品明细时,主账号和子账号信息都正确显示
  3. 实际发品验证发品时使用了正确的主账号API密钥和子账号会员名

边界情况测试

  1. 单主账号单子账号:退化到最简单情况是否正常
  2. 多主账号多子账号:同时选择所有主账号,每个主账号选择多个子账号
  3. 子账号为空:某个主账号下没有子账号时的提示是否友好
  4. 网络异常:加载子账号失败时是否有正确的错误提示

注意事项

  1. 子账号列表通过调用/erp/product/usernames接口获取
  2. 该接口需要传递appid参数即主账号的API Key
  3. 确保ERP账号已正确授权否则可能无法获取子账号列表
  4. 建议在生产环境部署前,先在测试环境完整测试一遍流程