DeliveryExceptionService.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. namespace Admin.NET.Plugin.AiDOP.Supply;
  2. /// <summary>
  3. /// 交货单异常记录服务
  4. /// </summary>
  5. [ApiDescriptionSettings(Order = 307, Description = "交货单异常记录")]
  6. [Route("api/Supply")]
  7. [AllowAnonymous]
  8. [NonUnify]
  9. public class DeliveryExceptionService : IDynamicApiController, ITransient
  10. {
  11. private const string C = "utf8mb4_general_ci";
  12. private readonly ISqlSugarClient _db;
  13. private readonly UserManager _userManager;
  14. public DeliveryExceptionService(ISqlSugarClient db, UserManager userManager)
  15. {
  16. _db = db;
  17. _userManager = userManager;
  18. }
  19. /// <summary>交货单异常记录分页列表</summary>
  20. [DisplayName("交货单异常记录列表")]
  21. [HttpGet("delivery-exception/list")]
  22. public async Task<object> GetList([FromQuery] DeliveryExceptionListInput input)
  23. {
  24. var page = input.Page <= 0 ? 1 : input.Page;
  25. var pageSize = input.PageSize <= 0 ? 20 : input.PageSize;
  26. var offset = (page - 1) * pageSize;
  27. var pars = new List<SugarParameter>();
  28. var where = new List<string> { "1=1" };
  29. if (_userManager.TenantId > 0)
  30. {
  31. where.Add("dm.tenant_id = @TenantId");
  32. pars.Add(new SugarParameter("@TenantId", _userManager.TenantId));
  33. }
  34. if (!string.IsNullOrWhiteSpace(input.OptTime))
  35. {
  36. where.Add($"(CAST(dm.OptTime AS CHAR(50)) COLLATE {C}) LIKE @OptTimeLike");
  37. pars.Add(new SugarParameter("@OptTimeLike", $"%{input.OptTime.Trim()}%"));
  38. }
  39. if (!string.IsNullOrWhiteSpace(input.ItemNum))
  40. {
  41. where.Add($"(dm.ItemNum COLLATE {C}) = @ItemNum");
  42. pars.Add(new SugarParameter("@ItemNum", input.ItemNum.Trim()));
  43. }
  44. var baseSql = BuildListBaseSql(string.Join(" AND ", where));
  45. var total = await _db.Ado.GetIntAsync($"SELECT COUNT(*) FROM ({baseSql}) AS t", pars);
  46. var list = await _db.Ado.SqlQueryAsync<DeliveryExceptionListRow>(
  47. $"SELECT * FROM ({baseSql}) AS t ORDER BY t.Id DESC LIMIT {pageSize} OFFSET {offset}", pars);
  48. return new { total, page, pageSize, list };
  49. }
  50. private static string BuildListBaseSql(string innerWhere) => $"""
  51. SELECT
  52. dm.RecID AS Id,
  53. dm.Domain AS Domain,
  54. dm.Icdsid AS IcdsId,
  55. dm.OptTime AS OptTime,
  56. dm.ItemNum AS ItemNum,
  57. im.Descr AS Descr,
  58. dm.Remark AS Remark,
  59. IFNULL(dm.NeedQty, 0) AS NeedQty
  60. FROM DeliveryExceptionMaster dm
  61. LEFT JOIN ItemMaster im
  62. ON (dm.Domain COLLATE {C}) = (im.Domain COLLATE {C})
  63. AND (dm.ItemNum COLLATE {C}) = (im.ItemNum COLLATE {C})
  64. WHERE {innerWhere}
  65. """;
  66. private sealed class DeliveryExceptionListRow
  67. {
  68. public long Id { get; set; }
  69. public string? Domain { get; set; }
  70. public long? IcdsId { get; set; }
  71. public DateTime? OptTime { get; set; }
  72. public string? ItemNum { get; set; }
  73. public string? Descr { get; set; }
  74. public decimal? NeedQty { get; set; }
  75. public string? Remark { get; set; }
  76. }
  77. }