feat(业务用户组): AUG26-003 业务用户组与店铺负责人分组导入
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 1h43m42s

- 迁移 000221:新增 tb_business_user_group、tb_business_user_group_member、tb_shop_business_owner_import_task,成员一账号一行由部分唯一索引保证,店铺所属组按当前负责人实时推导,不回填历史分组。
- 用户组 CRUD、成员改组/清空归属、店铺批量交接(原子失败不部分写入)。
- 店铺负责人 CSV 导入任务:逐行独立事务、逐行明细、任务级与行级失败分离。
- 读侧推导与筛选:未分组、业务线、停用组可筛出并带停用标记。
- 补齐操作审计动作与资源、openapi 清单、发布门禁巡检表清单。
- 归档 add-shop-salesperson-groups 变更并同步 openspec/specs/business-user-group,补齐 AUG26-003 验证证据链。
This commit is contained in:
2026-09-14 16:51:44 +08:00
parent 957a235585
commit c7f9e005af
56 changed files with 4166 additions and 344 deletions

View File

@@ -1164,7 +1164,8 @@
"entry": "GET /api/admin/shops",
"capability": "identity-access",
"requirements": [
"identity-access::数据范围拒绝"
"identity-access::数据范围拒绝",
"business-user-group::店铺负责人和所属组实时推导"
],
"classification": "behavior"
},
@@ -1201,7 +1202,8 @@
"entry": "GET /api/admin/shops/{id}",
"capability": "identity-access",
"requirements": [
"identity-access::数据范围拒绝"
"identity-access::数据范围拒绝",
"business-user-group::店铺负责人和所属组实时推导"
],
"classification": "behavior"
},
@@ -1223,6 +1225,16 @@
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "GET /api/admin/shops/{shop_id}/commission-records/{id}",
"capability": "agent-funds-commission",
"requirements": [
"agent-funds-commission::回溯明细关联查询与导出",
"identity-access::数据范围拒绝"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "GET /api/admin/shops/{shop_id}/commission-stats",
@@ -3585,6 +3597,7 @@
"requirements": [
"agent-funds-commission::退款佣金回扣可靠完成",
"agent-funds-commission::退款后处理可补偿",
"agent-funds-commission::套餐退款佣金回溯",
"order-refund-exchange::退款终态事实与失败分类"
],
"classification": "route_index_or_infrastructure"
@@ -4010,5 +4023,114 @@
"agent-distribution-withdrawal::提现冻结与企业微信终审"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "POST /api/admin/business-user-groups",
"capability": "business-user-group",
"requirements": [
"business-user-group::业务用户组生命周期与成员归属"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "GET /api/admin/business-user-groups",
"capability": "business-user-group",
"requirements": [
"business-user-group::业务用户组生命周期与成员归属"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "GET /api/admin/business-user-groups/{id}",
"capability": "business-user-group",
"requirements": [
"business-user-group::业务用户组生命周期与成员归属"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "PUT /api/admin/business-user-groups/{id}",
"capability": "business-user-group",
"requirements": [
"business-user-group::业务用户组生命周期与成员归属"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "DELETE /api/admin/business-user-groups/{id}",
"capability": "business-user-group",
"requirements": [
"business-user-group::业务用户组生命周期与成员归属"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "PUT /api/admin/business-user-groups/{id}/members",
"capability": "business-user-group",
"requirements": [
"business-user-group::业务用户组生命周期与成员归属"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "DELETE /api/admin/business-user-groups/members",
"capability": "business-user-group",
"requirements": [
"business-user-group::业务用户组生命周期与成员归属"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "PUT /api/admin/shops/business-owner/batch",
"capability": "business-user-group",
"requirements": [
"business-user-group::店铺负责人批量交接",
"identity-access::数据范围拒绝"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "POST /api/admin/shops/business-owner-imports",
"capability": "business-user-group",
"requirements": [
"business-user-group::店铺负责人 CSV 导入"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "GET /api/admin/shops/business-owner-imports",
"capability": "business-user-group",
"requirements": [
"business-user-group::店铺负责人 CSV 导入"
],
"classification": "behavior"
},
{
"entry_type": "http",
"entry": "GET /api/admin/shops/business-owner-imports/{id}",
"capability": "business-user-group",
"requirements": [
"business-user-group::店铺负责人 CSV 导入"
],
"classification": "behavior"
},
{
"entry_type": "async",
"entry": "constants.TaskTypeShopBusinessOwnerImport",
"capability": "infrastructure",
"requirements": [
"business-user-group::店铺负责人 CSV 导入"
],
"classification": "route_index_or_infrastructure"
}
]