using Admin.NET.Plugin.AiDOP.ProcurementExecution.Dto;
namespace Admin.NET.Plugin.AiDOP.ProcurementExecution;
///
/// S4 IQC 退货查询(只读列表)。数据:qms_qcp_insappnentry + qms_qcp_inspecapplyn + qms_qcp_inspbill,可选 PurOrdDetail / SuppMaster。
/// 路由:/api/ProcurementExecution/iqc-return/list
///
[ApiDescriptionSettings(Order = 322, Description = "S4 IQC退货查询")]
[Route("api/ProcurementExecution")]
[AllowAnonymous]
[NonUnify]
public class IqcReturnQueryService : IDynamicApiController, ITransient
{
private readonly ISqlSugarClient _db;
public IqcReturnQueryService(ISqlSugarClient db) => _db = db;
///
/// 退货相关处理方式:NULL 视作 0;与 aidopdev 中 clfs 枚举一致时可再收紧为仅 clfs=3。
///
private const string ReturnClfsPredicate = "(IFNULL(a.clfs, 0) IN (0, 3))";
private static string NormalizeOrderBy(string field, string order)
{
var col = (field ?? "").Trim().ToLowerInvariant();
var ord = string.Equals(order?.Trim(), "desc", StringComparison.OrdinalIgnoreCase) ? "DESC" : "ASC";
var map = new Dictionary(StringComparer.OrdinalIgnoreCase)
{
["fbillno"] = "t.FBillNo",
["ordnbr"] = "t.OrdNbr",
["pch"] = "t.Pch",
["fmaterialcfg"] = "t.FMaterialCfg",
["sortname"] = "t.SortName",
["supp"] = "t.Supp",
["gysmc"] = "t.Gysmc",
["wlmc"] = "t.Wlmc",
["ggxh"] = "t.Ggxh",
["frinsqty"] = "t.FrInsQty",
["bhgsl"] = "t.Bhgsl",
["clfs"] = "t.Clfs",
["finspectstatus"] = "t.FInspectStatus",
["fapplytime"] = "t.FApplyTime",
["finspeenddate"] = "t.FInspeEndDate",
};
if (!map.TryGetValue(col, out var sqlCol))
sqlCol = "t.FApplyTime";
return $"ORDER BY {sqlCol} {ord}, t.EntryId ASC";
}
[DisplayName("IQC退货查询分页列表")]
[HttpGet("iqc-return/list")]
public async Task