DeliveryExceptionService.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. public DeliveryExceptionService(ISqlSugarClient db)
  14. {
  15. _db = db;
  16. }
  17. /// <summary>交货单异常记录分页列表</summary>
  18. [DisplayName("交货单异常记录列表")]
  19. [HttpGet("delivery-exception/list")]
  20. public async Task<object> GetList([FromQuery] DeliveryExceptionListInput input)
  21. {
  22. var page = input.Page <= 0 ? 1 : input.Page;
  23. var pageSize = input.PageSize <= 0 ? 20 : input.PageSize;
  24. var offset = (page - 1) * pageSize;
  25. var pars = new List<SugarParameter>();
  26. var where = new List<string> { "1=1" };
  27. if (!string.IsNullOrWhiteSpace(input.OptTime))
  28. {
  29. where.Add($"(CAST(dm.OptTime AS CHAR(50)) COLLATE {C}) LIKE @OptTimeLike");
  30. pars.Add(new SugarParameter("@OptTimeLike", $"%{input.OptTime.Trim()}%"));
  31. }
  32. if (!string.IsNullOrWhiteSpace(input.ItemNum))
  33. {
  34. where.Add($"(dm.ItemNum COLLATE {C}) = @ItemNum");
  35. pars.Add(new SugarParameter("@ItemNum", input.ItemNum.Trim()));
  36. }
  37. var baseSql = BuildListBaseSql(string.Join(" AND ", where));
  38. var total = await _db.Ado.GetIntAsync($"SELECT COUNT(*) FROM ({baseSql}) AS t", pars);
  39. var list = await _db.Ado.SqlQueryAsync<DeliveryExceptionListRow>(
  40. $"SELECT * FROM ({baseSql}) AS t ORDER BY t.Id DESC LIMIT {pageSize} OFFSET {offset}", pars);
  41. return new { total, page, pageSize, list };
  42. }
  43. private static string BuildListBaseSql(string innerWhere) => $"""
  44. SELECT
  45. dm.RecID AS Id,
  46. dm.Domain AS Domain,
  47. dm.Icdsid AS IcdsId,
  48. dm.OptTime AS OptTime,
  49. dm.ItemNum AS ItemNum,
  50. im.Descr AS Descr,
  51. dm.Remark AS Remark,
  52. IFNULL(dm.NeedQty, 0) AS NeedQty
  53. FROM DeliveryExceptionMaster dm
  54. LEFT JOIN ItemMaster im
  55. ON (dm.Domain COLLATE {C}) = (im.Domain COLLATE {C})
  56. AND (dm.ItemNum COLLATE {C}) = (im.ItemNum COLLATE {C})
  57. WHERE {innerWhere}
  58. """;
  59. private sealed class DeliveryExceptionListRow
  60. {
  61. public long Id { get; set; }
  62. public string? Domain { get; set; }
  63. public long? IcdsId { get; set; }
  64. public DateTime? OptTime { get; set; }
  65. public string? ItemNum { get; set; }
  66. public string? Descr { get; set; }
  67. public decimal? NeedQty { get; set; }
  68. public string? Remark { get; set; }
  69. }
  70. }