## ADDED Requirements ### Requirement: 业务用户组成员与候选用户可分页查询 系统 SHALL 提供 `GET /api/admin/business-user-groups/{id}/members`,使超级管理员和平台用户分页查看指定业务用户组当前保留的全部成员关系。成员列表 MUST 支持用户名或手机号关键字和账号启用状态筛选,并返回账号标识、用户名、手机号、启用状态、已删除标记、成员关系创建时间以及当前组标识、编码、名称和启停状态。平台账号禁用或软删除后,其成员关系 SHALL 保留并继续显示;软删除账号的查询不得恢复账号或改变店铺推导。 系统 SHALL 提供 `GET /api/admin/business-user-groups/{id}/member-candidates`,分页返回全部启用且未删除的平台用户及其当前业务用户组。候选列表 MUST 支持用户名或手机号关键字,以及全部、未分组、当前组、其他组四类归属筛选;每项 MUST 返回当前组标识、编码、名称、启停状态和稳定操作提示:未分组为 `add`、已在目标组为 `already_member`、属于其他组为 `move`。目标组停用时仍可查询成员与候选,但候选 MUST 标记不可添加。 业务用户组列表与详情 SHALL 返回当前保留成员关系的实时数量。查询与计数 MUST 批量完成,列表查询次数不得随当页用户组或成员数量线性增长。上述入口仅限超级管理员和平台用户,代理与企业账号 MUST 被拒绝。 #### Scenario: 查看启用、禁用和已删除成员 - **GIVEN** 某用户组包含启用账号、禁用账号和已软删除账号的保留成员关系 - **WHEN** 授权账号查询组内成员 - **THEN** 系统返回三类成员并分别标记账号状态和已删除状态,不修改成员关系 #### Scenario: 候选列表展示当前所属组 - **GIVEN** 候选平台用户中分别存在未分组、当前组和其他组成员 - **WHEN** 授权账号查询目标组成员候选 - **THEN** 系统分别返回 `add`、`already_member`、`move` 提示及当前所属组信息 #### Scenario: 停用组仍可维护退出 - **WHEN** 授权账号查询已停用用户组的成员和候选 - **THEN** 系统仍返回查询结果,候选标记不可添加,但已有成员可通过组作用域移除接口退出该组 #### Scenario: 用户组列表返回实时成员数 - **WHEN** 成员迁入或移出用户组后查询用户组列表或详情 - **THEN** 系统立即返回新的成员数量,无需更新用户组或店铺记录 ### Requirement: 业务用户组成员按组作用域增量增加与移除 系统 SHALL 提供 `POST /api/admin/business-user-groups/{id}/members` 增量增加成员。目标组 MUST 存在、未删除且启用;请求账号去重后 MUST 非空,且全部账号必须为启用、未删除的平台用户,任一账号无效时整批不修改。未分组账号 SHALL 新增归属,其他组账号 SHALL 直接迁入目标组,已在目标组账号 SHALL 幂等保持;请求外的目标组成员 MUST 不受影响。响应 MUST 分别返回请求数、新增数、迁移数和未变化数。 系统 SHALL 提供 `DELETE /api/admin/business-user-groups/{id}/members` 增量移除成员。目标组 MUST 存在且未删除,启用或停用均可操作;所有请求账号必须在操作开始时属于目标组,任一账号无归属或属于其他组时整批拒绝。移除 MUST 仅软删除目标组内对应成员关系,不得清除其他组归属;禁用或已软删除平台账号的保留成员关系 MUST 可被移除。重复移除已不属于目标组的账号 MUST 返回状态冲突,不得静默成功。 增加和移除 MUST 在单一事务内按账号标识稳定顺序串行处理,并为每个实际变化账号记录原组、目标组、操作者和时间审计;已在目标组的幂等账号不得写虚假变更审计。成员变化后,账号负责店铺的所属业务用户组和业务线 MUST 按既有实时推导立即变化,不得写入店铺冗余组字段。 #### Scenario: 增量增加不覆盖其他成员 - **GIVEN** 目标组已有多名成员 - **WHEN** 管理员提交一组新的账号加入目标组 - **THEN** 系统只处理请求账号,原有未被请求的成员保持不变 #### Scenario: 其他组成员直接迁入 - **WHEN** 管理员把属于另一启用或停用组的平台用户增加到启用目标组 - **THEN** 系统将该账号唯一归属迁入目标组,原组成员数减少、目标组成员数增加,并记录前后组审计 #### Scenario: 当前组成员重复增加 - **WHEN** 请求包含已经属于目标组的账号 - **THEN** 系统保持其唯一成员关系并计入未变化数,不新增重复关系或虚假变更审计 #### Scenario: 增加请求含无效账号整批回滚 - **WHEN** 增加请求中任一账号不是启用且未删除的平台用户 - **THEN** 系统拒绝整批请求,其他有效账号的归属也不变化 #### Scenario: 只移除当前组成员 - **WHEN** 管理员从目标组移除一组当前成员 - **THEN** 系统只软删除这些账号在目标组的关系,目标组其他成员和其他组关系不受影响 #### Scenario: 移除请求含其他组成员整批拒绝 - **WHEN** 移除请求中任一账号不属于目标组或已无分组 - **THEN** 系统返回状态冲突且不移除任何请求账号 #### Scenario: 清理禁用或已删除账号关系 - **WHEN** 管理员从目标组移除已禁用或已软删除平台账号的保留成员关系 - **THEN** 系统允许移除并保留账号本身的禁用或删除状态不变 ### Requirement: 业务用户组成员接口干净切换 系统 MUST 以 `POST /api/admin/business-user-groups/{id}/members` 取代原 `PUT` 成员设置入口,并 MUST 移除全局 `DELETE /api/admin/business-user-groups/members`。系统 MUST NOT 保留旧方法或路径别名;调用方必须使用组作用域的增加与移除接口,避免无目标组约束的清空操作。 #### Scenario: 旧成员维护入口不可达 - **WHEN** 调用方请求原 `PUT /api/admin/business-user-groups/{id}/members` 或全局 `DELETE /api/admin/business-user-groups/members` - **THEN** 路由不提供旧成员维护能力,调用方必须迁移到新的 POST 或组作用域 DELETE 入口