using Admin.NET.Plugin.AiDOP.Const.S8; using Admin.NET.Plugin.AiDOP.Infrastructure.S8; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace Admin.NET.Plugin.AiDOP.Controllers.S8; /// /// 「操作员绑定」配置入口 —— 已整体退役(S8-SYSUSER-ONLY-1)。 /// /// 它原来做什么:维护 EmployeeMaster.sys_user_id,也就是把一个业务员工 /// 绑定到一个系统账号,从而让这个员工"能被 S8 当成处理人使用"。 /// /// 为什么退役:S8 的人现在就是系统账号,不再存在"这个员工对应哪个账号"这个问题。 /// 保留一个绑定页面,只会让管理员继续以为"必须先绑定员工才能用 S8", /// 而实际上绑不绑都不影响任何 S8 行为 —— 这正是最容易造成误操作的那类残留入口。 /// 真库现状也说明它从未真正被使用:1105 名员工里只有 8 个绑了账号。 /// /// 为什么返回 410 而不是删掉路由:410 Gone 让还在调用旧地址的客户端 /// 立刻拿到「已退役 + 原因」,而 404 会被当成路径写错,引出一轮无谓的排查。 /// 本控制器不再依赖任何服务,也不再触碰 EmployeeMaster —— /// 退役的入口不应该还保有写主数据的能力。 /// /// 没有动的东西EmployeeMaster 表与其中已有的 8 条 sys_user_id 绑定 /// 全部原样保留。它属于 S0 业务主数据,不归 S8 处置。 /// [ApiController] [Route("api/aidop/s8/config")] [NonUnify] public class AdoS8ConfigBindingsController : ControllerBase { private const string RetiredMessage = "「操作员绑定」已退役:S8 人员身份统一为系统账号,无需再把员工绑定到账号。" + "请在系统账号管理中维护账号,并用 GET /api/aidop/s8/master-data/users 选择人员。"; private IActionResult Retired() => StatusCode(StatusCodes.Status410Gone, new { message = RetiredMessage, replacedBy = "/api/aidop/s8/master-data/users" }); [HttpGet("operator-bindings")] [S8Permission(S8PermissionCatalog.ConfigRead)] public IActionResult ListRetired() => Retired(); [HttpPost("operator-bindings")] [S8Permission(S8PermissionCatalog.ConfigOperatorBind)] public IActionResult BindRetired() => Retired(); [HttpDelete("operator-bindings/{employeeId:long}")] [S8Permission(S8PermissionCatalog.ConfigOperatorBind)] public IActionResult UnbindRetired(long employeeId) { _ = employeeId; return Retired(); } [HttpGet("sys-users")] [S8Permission(S8PermissionCatalog.ConfigRead)] public IActionResult SysUsersRetired() => Retired(); }