using Admin.NET.Plugin.AiDOP.MaterialWarehouse.Dto;
namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse;
///
/// S5 盘点标签确认 只读 list 服务。
///
/// 数据源:aidopdev.MissedPrint(IsTag=1) LEFT JOIN ItemMaster(物料名称/规格/单位)。
/// 参考本仓既有 MissedPrint 直读只读投影先例:LabelQueryService / StockQueryService / PendingInspectionService。
///
/// 本服务仅 SELECT:无新增/编辑/删除/确认写回/批量确认/反确认/库存事务/状态流转;扁平列表,无 detail。
/// 派生列:diffQty=CompQty-Qty;status(Status='Q'→冻结);stocktakeResult(CompQty<>Qty→有差异/正常)。
///
/// 【认证】类级已去 [AllowAnonymous]:原先该接口可被**完全未认证**调用
/// (实测匿名 GET —— 无 Authorization 头、credentials:'omit' 连 cookie 也不发 —— 返回 HTTP 200)。
/// 当时 IsTag=1 恰好 0 行故未造成实际泄漏,但端点是公开的,一旦出现盘点标签数据即形成匿名读取。
/// 现收敛为需认证访问。
///
/// 【仍未解决 · DATA-MODEL DEBT】租户边界。查询仍是 WHERE IsTag=1,无 Tenant/Domain 条件:
/// MissedPrint 的 tenant_id 列存在但实测 152 行全为 NULL,且 150 行 Location 为空,
/// 既无法按 tenant_id 过滤(会把页面整体查空),也无法拿 Location 当租户边界(会误删绝大多数行)。
/// 本批只关闭匿名访问,**不代表 tenant isolation 已 CLOSED**。
///
[ApiDescriptionSettings(Order = 308, Description = "盘点标签确认")]
[Route("api/S5StocktakeLabelConfirm")]
[NonUnify]
public class StocktakeLabelConfirmService : IDynamicApiController, ITransient
{
private readonly ISqlSugarClient _db;
public StocktakeLabelConfirmService(ISqlSugarClient db)
{
_db = db;
}
///
/// 盘点标签确认列表(只读分页查询)。
///
[DisplayName("盘点标签确认列表")]
[HttpGet("list")]
public async Task