| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- namespace Admin.NET.Plugin.AiDOP.Universal;
- /// <summary>
- /// 通用物料选择服务 📦
- /// 路由前缀:/api/Universal
- /// </summary>
- [ApiDescriptionSettings(Order = 279, Description = "通用-物料选择")]
- [Route("api/Universal")]
- [AllowAnonymous]
- [NonUnify]
- public class UniversalItemService : IDynamicApiController, ITransient
- {
- private readonly ISqlSugarClient _db;
- public UniversalItemService(ISqlSugarClient db)
- {
- _db = db;
- }
- // 允许排序的字段白名单(key=前端 prop,value=数据库列名)
- private static readonly Dictionary<string, string> _sortFieldMap =
- new(StringComparer.OrdinalIgnoreCase)
- {
- ["itemnum"] = "ItemNum",
- ["descr"] = "Descr",
- ["descr1"] = "Descr1",
- ["um"] = "UM",
- ["location"] = "Location",
- ["rev"] = "Rev",
- ["drawing"] = "Drawing",
- };
- /// <summary>获取物料选择分页列表 📦</summary>
- [DisplayName("获取物料选择列表")]
- [HttpGet("item/page")]
- public async Task<object> GetItemPage([FromQuery] ItemPageInput input)
- {
- var conditions = new List<string>();
- var pars = new List<SugarParameter>();
- if (!string.IsNullOrWhiteSpace(input.ItemNum))
- {
- conditions.Add("ItemNum LIKE @ItemNum");
- pars.Add(new SugarParameter("@ItemNum", $"%{input.ItemNum.Trim()}%"));
- }
- if (!string.IsNullOrWhiteSpace(input.Descr))
- {
- conditions.Add("Descr LIKE @Descr");
- pars.Add(new SugarParameter("@Descr", $"%{input.Descr.Trim()}%"));
- }
- var where = conditions.Count > 0 ? string.Join(" AND ", conditions) : "1=1";
- var dbSortField = _sortFieldMap.TryGetValue(input.SortField ?? "", out var mapped) ? mapped : "ItemNum";
- var sortOrder = string.Equals(input.SortOrder, "desc", StringComparison.OrdinalIgnoreCase) ? "DESC" : "ASC";
- var offset = (input.Page - 1) * input.PageSize;
- var total = await _db.Ado.GetIntAsync(
- $"SELECT COUNT(*) FROM ItemMaster WHERE {where}", pars);
- var list = await _db.Ado.SqlQueryAsync<ItemRow>(
- $"SELECT RecID AS RecId, ItemNum, Descr, Descr1, UM AS Um, Location, Rev, Drawing FROM ItemMaster WHERE {where} ORDER BY {dbSortField} {sortOrder} LIMIT {input.PageSize} OFFSET {offset}",
- pars);
- return new { total, page = input.Page, pageSize = input.PageSize, list };
- }
- // ──────────────── 内部结果映射 ────────────────
- private sealed class ItemRow
- {
- public string? RecId { get; set; }
- public string? ItemNum { get; set; }
- public string? Descr { get; set; }
- public string? Descr1 { get; set; }
- public string? Um { get; set; }
- public string? Location { get; set; }
- public string? Rev { get; set; }
- public string? Drawing { get; set; }
- }
- }
- /// <summary>物料选择分页查询入参</summary>
- public class ItemPageInput
- {
- public int Page { get; set; } = 1;
- public int PageSize { get; set; } = 10;
- /// <summary>物料编号(模糊)</summary>
- public string? ItemNum { get; set; }
- /// <summary>物料名称(模糊)</summary>
- public string? Descr { get; set; }
- /// <summary>排序字段(前端 prop 名)</summary>
- public string? SortField { get; set; }
- /// <summary>排序方向:asc / desc</summary>
- public string? SortOrder { get; set; }
- }
|