UniversalItemService.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. namespace Admin.NET.Plugin.AiDOP.Universal;
  2. /// <summary>
  3. /// 通用物料选择服务 📦
  4. /// 路由前缀:/api/Universal
  5. ///
  6. /// 【租户安全边界】需认证访问(已移除类级 <c>[AllowAnonymous]</c>);
  7. /// 租户一律经 <c>AidopTenantScope.ResolveOrThrow</c> 从认证后 JWT 解析,
  8. /// 无有效租户即拒绝,不读前端 tenantId、无默认回退(原实现:类级匿名 + 宽松解析,
  9. /// 未认证方可携带 <c>?tenantId=</c> 读任意租户物料)。
  10. /// </summary>
  11. [ApiDescriptionSettings(Order = 279, Description = "通用-物料选择")]
  12. [Route("api/Universal")]
  13. [NonUnify]
  14. public class UniversalItemService : IDynamicApiController, ITransient
  15. {
  16. private readonly SqlSugarRepository<ItemMaster> _itemRep;
  17. private readonly UserManager _userManager;
  18. public UniversalItemService(SqlSugarRepository<ItemMaster> itemRep, UserManager userManager)
  19. {
  20. _itemRep = itemRep;
  21. _userManager = userManager;
  22. }
  23. /// <summary>获取物料选择分页列表 📦</summary>
  24. [DisplayName("获取物料选择列表")]
  25. [HttpGet("item/page")]
  26. public async Task<object> GetItemPage([FromQuery] UniversalItemPageInput input)
  27. {
  28. var tenantId = AidopTenantScope.ResolveOrThrow(_userManager);
  29. var query = _itemRep.AsQueryable()
  30. .Where(u => u.TenantId == tenantId)
  31. .WhereIF(!string.IsNullOrWhiteSpace(input.ItemNum), u => u.ItemNum!.Contains(input.ItemNum!.Trim()))
  32. .WhereIF(!string.IsNullOrWhiteSpace(input.Descr), u => u.Descr!.Contains(input.Descr!.Trim()));
  33. bool isDesc = string.Equals(input.SortOrder, "desc", StringComparison.OrdinalIgnoreCase);
  34. query = (input.SortField?.ToLower()) switch
  35. {
  36. "descr" => isDesc ? query.OrderByDescending(u => u.Descr) : query.OrderBy(u => u.Descr),
  37. "descr1" => isDesc ? query.OrderByDescending(u => u.Descr1) : query.OrderBy(u => u.Descr1),
  38. "um" => isDesc ? query.OrderByDescending(u => u.UM) : query.OrderBy(u => u.UM),
  39. "location" => isDesc ? query.OrderByDescending(u => u.Location) : query.OrderBy(u => u.Location),
  40. "rev" => isDesc ? query.OrderByDescending(u => u.Rev) : query.OrderBy(u => u.Rev),
  41. "drawing" => isDesc ? query.OrderByDescending(u => u.Drawing) : query.OrderBy(u => u.Drawing),
  42. _ => isDesc ? query.OrderByDescending(u => u.ItemNum) : query.OrderBy(u => u.ItemNum),
  43. };
  44. var paged = await query
  45. .Select(u => new UniversalItemOutput
  46. {
  47. RecId = u.RecID.ToString(),
  48. ItemNum = u.ItemNum,
  49. Descr = u.Descr,
  50. Descr1 = u.Descr1,
  51. Um = u.UM,
  52. Location = u.Location,
  53. Rev = u.Rev,
  54. Drawing = u.Drawing,
  55. })
  56. .ToPagedListAsync(input.Page, input.PageSize);
  57. return new { total = paged.Total, page = input.Page, pageSize = input.PageSize, list = paged.Items };
  58. }
  59. }