using Admin.NET.Plugin.AiDOP.MaterialWarehouse.Dto;
namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse;
///
/// S5 来料检验申请列表 服务(只读)。
///
/// 数据源:主库 aidopdev 表 qms_qcp_inspecapplyn(贴源 QMS 申请主表)。
/// 一期降级方案②:仅查询/展示表内可直接真实渲染的字段
/// FBILLNO 单据编号 / FBILLTYPE 单据类型(原值) / FAPPLYTIME 申请时间 / FCOMMENT 备注。
/// 不查询 FORGID / FBIZTYPE / FAPPLYUSER —— 名称解析源(bos_org / qcbd_biztype / bos_user)
/// 当前不在 aidopdev,不做脑补 join、不显示裸 ID。
///
/// 租户:qms_qcp_inspecapplyn 已补 tenant_id 列,按严格可信租户过滤(需认证,租户仅取认证后 JWT,忽略前端 tenantId);
/// 无 domain / factory 列,不新增前端 factory 选择,亦不脑补工厂维度。
///
/// 本接口只读:仅 SELECT,无新增/编辑/删除/任务拆分/状态回写。
///
[ApiDescriptionSettings(Order = 305, Description = "来料检验申请")]
[Route("api/IncomingInspection")]
[NonUnify]
public class IncomingInspectionApplicationService : IDynamicApiController, ITransient
{
/// 主/系统租户哨兵:超管未选择目标租户时其 JWT TenantId 即此值,拒绝作为业务租户。
private const long MainTenantId = 1300000000001L;
private readonly ISqlSugarClient _db;
private readonly UserManager _userManager;
public IncomingInspectionApplicationService(ISqlSugarClient db, UserManager userManager)
{
_db = db;
_userManager = userManager;
}
/// 严格可信租户解析:只来自认证后 JWT;无 Token(<=0) 或超管未选主租户 → 拒绝;不读前端 tenantId、无默认回退。
private long ResolveTenantOrThrow()
{
var tid = _userManager.TenantId;
if (tid <= 0)
throw Oops.Oh("无法确定当前租户,请重新登录或选择目标租户");
if (_userManager.SuperAdmin && tid == MainTenantId)
throw Oops.Oh("超级管理员操作前必须选择目标租户");
return tid;
}
///
/// 来料检验申请列表(只读分页查询)。
///
[DisplayName("来料检验申请列表")]
[HttpGet("application/list")]
public async Task