using Admin.NET.Plugin.AiDOP.Entity.S0.Manufacturing;
using Admin.NET.Plugin.AiDOP.Entity.S0.Warehouse;
using Admin.NET.Plugin.AiDOP.Infrastructure;
using Admin.NET.Plugin.AiDOP.Infrastructure.S8;
namespace Admin.NET.Plugin.AiDOP.Service.S8;
///
/// S8 主数据下拉:优先复用 S0 已落库主数据语义(部门等),无则返回空列表,不把「下拉查询」误建成独立业务表。
///
/// S8-P0-3-MASTERDATA-TRUSTED-SCOPE-1 作用域合同:三个入口的工厂边界
/// **一律由 从认证身份解析**,
/// 客户端传入的 factoryRefId 只被视为筛选意图,**当前实现直接忽略、不承担授权作用**。
///
/// S8-SYSUSER-ONLY-1:GetEmployeesAsync 已退役,由
/// 取代 —— S8 的"人"只有系统账号一种。
///
public class S8MasterDataAdapter : ITransient
{
private readonly SqlSugarRepository _deptRep;
private readonly SqlSugarRepository _lineRep;
private readonly SqlSugarRepository _sysUserRep;
private readonly IS8UserScopeValidator _userScope;
private readonly IS8ExceptionActionAuthorizer _actionAuthorizer;
public S8MasterDataAdapter(
SqlSugarRepository deptRep,
SqlSugarRepository lineRep,
SqlSugarRepository sysUserRep,
IS8UserScopeValidator userScope,
IS8ExceptionActionAuthorizer actionAuthorizer)
{
_deptRep = deptRep;
_lineRep = lineRep;
_sysUserRep = sysUserRep;
_userScope = userScope;
_actionAuthorizer = actionAuthorizer;
}
///
/// S8-TENANT-ONLY-BATCH6:主数据下拉的边界由 factory_ref_id 改为 tenant_id。
///
/// 这不是等价改写,是修一个真实越权。真库取证(aidopdev,只读):
/// factory_ref_id = 1000 同时属于租户 824585161322565 与 797403760988229——
/// 按工厂过滤会把另一租户的 613 名员工 / 210 个部门直接列进本租户的下拉框。
/// 工厂号从来就不是隔离维度,之前只是没人对着数据看过。
///
/// 可用性同样已验证:三张表 tenant_id 100% 非空
/// (EmployeeMaster 1105 行 / DepartmentMaster 239 行 / LineMaster 169 行,NULL 均为 0),
/// 每个租户都有非空主数据,改判据不会把下拉打空。
///
public async Task