UniversalCustomerService.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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 = 280, Description = "通用-客户选择")]
  12. [Route("api/Universal")]
  13. [NonUnify]
  14. public class UniversalCustomerService : IDynamicApiController, ITransient
  15. {
  16. private readonly SqlSugarRepository<CustMaster> _custRep;
  17. private readonly UserManager _userManager;
  18. public UniversalCustomerService(SqlSugarRepository<CustMaster> custRep, UserManager userManager)
  19. {
  20. _custRep = custRep;
  21. _userManager = userManager;
  22. }
  23. /// <summary>获取客户选择分页列表 🏢</summary>
  24. [DisplayName("获取客户选择列表")]
  25. [HttpGet("customer/page")]
  26. public async Task<object> GetCustomerPage([FromQuery] UniversalCustomerPageInput input)
  27. {
  28. var tenantId = AidopTenantScope.ResolveOrThrow(_userManager);
  29. var query = _custRep.AsQueryable()
  30. .Where(u => u.TenantId == tenantId)
  31. .WhereIF(!string.IsNullOrWhiteSpace(input.CustNo), u => u.Cust!.Contains(input.CustNo!.Trim()))
  32. .WhereIF(!string.IsNullOrWhiteSpace(input.SortName), u => u.SortName!.Contains(input.SortName!.Trim()));
  33. bool isDesc = string.Equals(input.SortOrder, "desc", StringComparison.OrdinalIgnoreCase);
  34. query = (input.SortField?.ToLower()) switch
  35. {
  36. "sortname" => isDesc ? query.OrderByDescending(u => u.SortName) : query.OrderBy(u => u.SortName),
  37. _ => isDesc ? query.OrderByDescending(u => u.Cust) : query.OrderBy(u => u.Cust),
  38. };
  39. var paged = await query
  40. .Select(u => new UniversalCustomerOutput
  41. {
  42. Cust = u.Cust,
  43. SortName = u.SortName,
  44. Id = u.RecID.ToString(),
  45. })
  46. .ToPagedListAsync(input.Page, input.PageSize);
  47. return new { total = paged.Total, page = input.Page, pageSize = input.PageSize, list = paged.Items };
  48. }
  49. }