You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

5.1 KiB

07 A7-1+A7-2 轻接口补码(用户/角色/权限点)

Type: task Status: resolved(2026-09-07) Blocked by: 06

Question

按 gap-report 拍板 P0,补齐 A7-1+A7-2 轻接口(素材 matrix-a7-1-a7-2.md):

  1. SystemController 增 4 端点:POST /users/assign-roles-batch(多用户全量替换角色)、GET /users/transfer-preview?id=(移交预览:名下客户/商机/线索计数)、POST /users/transfer(移交执行:全量替换归属+快照)、GET /users/export(导出,走现有 file 模块)。UserPageParam 补 username/mobile/roleId/title;UserStatsDTO 出参补 lastSyncTime/lastTransferTime/lastTransferUser。
  2. RoleController 增 4 端点:GET /stats(roleCount/userCount 维度)、POST /copy、POST /enable、POST /disable。RoleParam 补 roleType/status;RoleDTO 出参补 roleType/status/userCount。
  3. ResourceController 增 3 端点:POST /enable、POST /disable、GET /references?id=(引用清单,供删除前置校验)。
  4. 资源删除语义按原型改:现「子节点检查+级联清理引用」改为「有引用(角色绑定/菜单挂载)禁止删除,提示引用方」——执行时若发现现网调用方依赖级联语义,停下报票 06 复议。
  5. tag 修正 5 处:ResourceController 4 端点补「权限管理」一级;/sync/dingtalk 挂「A7 后台管理/用户管理/同步任务」。幻影挂账 3 项(depts/save、depts/delete、users/admin-role)保留端点、tag 挂「A7 后台管理/运维」。
  6. 出入参遵守 ADR-0017 Route A;新文件 UTF-8 无 BOM;孤立单大写字母字段 @Column 钉列名。

Answer

resolved(2026-09-07)。11 端点全落地,验收四项全过(BOM 771 文件 0 / mvn compile+test-compile 过 / 全仓 11 模块 1161 测试 0 失败 / 未提交 git)。执行记录与偏差:

  • SystemController +4(assign-roles-batch / transfer-preview / transfer / export):
    • ⚠️ 偏差存证:票面「多用户全量替换角色」与原型 u296「不会覆盖其已有角色」矛盾,按原型增量语义实现(AuthUserServiceImpl.assignRolesBatch:逐用户查已有角色集仅插缺失行)。
    • 移交走 UserTransferPort seam(crm-base.service 定义,PermissionSeeder 同位;ObjectProvider 汇总,业务模块缺席不阻断启动):LeadUserTransferPortImpl(刷 owner 三列;dept_id 为池部门不跟人)/ CustomerUserTransferPortImpl(刷 owner 四列含 getDeptNames 部门名回显)/ Opportunity 与 Project 两域同表 crm_opportunity 按 opp_status 切分(AbstractOpportunityUserTransferPort 共享,!=5 / =5 STATUS_CONVERTED);批量 update 直改 owner 不走出站 E9 transition(CAS 仅允许状态 2/3,低频管理动作需覆盖全状态),域内轨迹不做、以 sys_user_transfer_log 全局快照追溯。
    • lastSyncTime:DtOrgSyncServiceImpl 成功尾部写 Redis(crm:auth:sync:last-sync-time,任务化时迁表挂账);UserStatsDTO 4→7 参补三时间戳;lastTransferTime/lastTransferUser 取移交日志最新一行。
    • export:EasyExcel 平铺 9 列(UserExportRow,时间格式化文本)→ FileApi.upload(bizDomain="system")。
  • RoleController +4:stats(复用 crm:role:list)/ copy / enable / disable(复用 crm:role:save),不改 DataInitializer。SysRole +roleType(SYS/MANAGE/BIZ/FUNC 服务层值域校验,null 允许兼容存量)/status(default enabled,对齐 SysMenu 先例);copyRole 产出停用草稿(原名-副本、roleCode=原码_copy_+6位随机段超50重造、复制 sys_role_menu 全套+RoleScopeStore 数据范围档位、不复制人员);enableRole 两道校验(≥1 menu 类型授权 + 四域 lead/opportunity/customer/project 档位齐全,已启用幂等);⚠️ 超票面:disableRole 加内置角色保护(builtin 拒停,对齐既有 delete 守卫);deleteRoleCascade 补在职使用人数守卫(仍在职用户命中则拒删)。
  • ResourceController +3 + 语义改:enable / disable / references;删除语义级联→禁删三段(①子节点 ②仅 disabled 可删,null 视为启用 ③被角色引用禁删并提示角色 ID 清单,不再级联清理 sys_role_menu);disable 被启用中角色引用也禁。现网调用方均为本模块 Controller,无外部依赖级联语义,未触发票 06 复议。
  • tag 修正:SystemController sync/dingtalk→用户管理/同步任务,depts/save、depts/delete→运维(幻影挂账三项之二,第三项 users/admin-role 端点本票未涉及);ResourceController 4 端点→A7 后台管理/权限管理/权限点管理。
  • 新错误码:61019 移交参数非法 / 61020 资源被启用角色引用禁操作 / 61021 角色启用校验不过。
  • 测试:受影响 6 文件同步修(计划 5 + PermissionSeederImplTest 的 H2 sys_role 补 role_type/status 两列;勘误:MP 3.5 的 saveOrUpdate(id=null) 走 BaseMapper.insertOrUpdate 而非 insert,copyRole verify 按此断言)+ 新增行为测试 15 个(角色 8:启停/复制草稿/统计/删除守卫;资源 7:启停/引用清单/禁删三段)。