using Admin.NET.Plugin.AiDOP.ProcurementExecution.Dto;
using Admin.NET.Plugin.AiDOP.ProcurementExecution.Entity;
namespace Admin.NET.Plugin.AiDOP.ProcurementExecution;
///
/// S4 采购退货单(PurOrdRctMaster / PurOrdRctDetail,RctType=pt)
/// 路由:/api/ProcurementExecution/purchase-return/...
///
[ApiDescriptionSettings(Order = 321, Description = "S4采购退货单")]
[Route("api/ProcurementExecution")]
[AllowAnonymous]
[NonUnify]
public class PurchaseReturnService : IDynamicApiController, ITransient
{
private readonly ISqlSugarClient _db;
private readonly SqlSugarRepository _masterRep;
private readonly SqlSugarRepository _detailRep;
private readonly UserManager _userManager;
public PurchaseReturnService(
ISqlSugarClient db,
SqlSugarRepository masterRep,
SqlSugarRepository detailRep,
UserManager userManager)
{
_db = db;
_masterRep = masterRep;
_detailRep = detailRep;
_userManager = userManager;
}
private static string NormalizeOrderBy(string field, string order)
{
var col = (field ?? "").Trim();
var ord = string.Equals(order?.Trim(), "desc", StringComparison.OrdinalIgnoreCase) ? "DESC" : "ASC";
var map = new Dictionary(StringComparer.OrdinalIgnoreCase)
{
// 注意:列表 SQL 外层包了 SELECT * FROM (...) t,因此 ORDER BY 只能引用外层可见列名
["receiver"] = "Receiver",
["rctdate"] = "RctDate",
["ordnbr"] = "OrdNbr",
["itemnum"] = "ItemNum",
["rctqty"] = "RctQty",
["suppname"] = "SuppName",
};
if (!map.TryGetValue(col, out var sqlCol))
sqlCol = "Id";
return $"ORDER BY {sqlCol} {ord}, DetailRecId ASC";
}
[DisplayName("采购退货单分页列表")]
[HttpGet("purchase-return/list")]
public async Task