using Admin.NET.Plugin.AiDOP.Infrastructure;
namespace Admin.NET.Plugin.AiDOP.FinishedWarehouse;
///
/// S7 FQC 检规结构化判定维护(Phase 1B,语义纠偏版)。
///
/// 检规模板 qms_ccjygfzb 维护每个检验项目的"录入类型 + 数值判定条件":
/// lrlx=NUMERIC 数值型:维护 UpperToleranceLimit(上限)/LowerToleranceLimit(下限)
/// → 生成检验单时快照进 inspbillst.sx/xx,检验员按样本录 j1..j50,未来 xx≤jN≤sx 自动判定;
/// lrlx=NON_NUMERIC 非数值型:不维护上下限,检验时只录"本次实际合格数/不合格数"
/// → 落 inspbillst.NonNumericalTypeOK/NG(检验结果数量,非检规模板字段,本服务绝不写)。
/// jsyq(技术要求) 为人读原文,不解析、不覆盖。
///
/// 【语义纠偏】NonNumericalTypeOK/NG = 检验单本次实际合格/不合格数量,属 inspbillst,绝不放检规模板;
/// 本服务不再维护任何"非数值规则编码"。检规模板的非数值项目仅由 lrlx 标识类型。
/// 硬边界:不新建规则表、不从 jsyq 猜类型、不批量填限值、不改历史数据;tenant 走 ResolveTenantOrThrow;
/// 上下限长度 ≤255(保证快照进 inspbillst.sx/xx varchar(255) 无截断)。
///
[ApiDescriptionSettings(Order = 341, Description = "FQC检规判定维护")]
[Route("api/S7FqcSpecRule")]
[NonUnify]
public class FqcSpecRuleService : IDynamicApiController, ITransient
{
private readonly ISqlSugarClient _db;
private readonly UserManager _userManager;
public FqcSpecRuleService(ISqlSugarClient db, UserManager userManager)
{
_db = db;
_userManager = userManager;
}
private long ResolveTenantOrThrow() => AidopTenantScope.ResolveOrThrow(_userManager);
/// 快照承载长度上界(inspbillst.sx/xx varchar(255))。
private const int LimitMaxLen = 255;
private const string TypeNumeric = "NUMERIC";
private const string TypeNonNumeric = "NON_NUMERIC";
/// 检规主表列表(维护入口第一层:选检规)。
[DisplayName("检规主表列表")]
[HttpGet("spec-page")]
public async Task