UniversalWorkOrderService.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. namespace Admin.NET.Plugin.AiDOP.Universal;
  2. /// <summary>
  3. /// 通用工单选择服务
  4. /// </summary>
  5. [ApiDescriptionSettings(Order = 281, Description = "通用-工单选择")]
  6. [Route("api/Universal")]
  7. [AllowAnonymous]
  8. [NonUnify]
  9. public class UniversalWorkOrderService : IDynamicApiController, ITransient
  10. {
  11. private readonly ISqlSugarClient _db;
  12. public UniversalWorkOrderService(ISqlSugarClient db)
  13. {
  14. _db = db;
  15. }
  16. [DisplayName("获取工单选择列表")]
  17. [HttpGet("work-order/page")]
  18. public async Task<object> GetPage([FromQuery] UniversalWorkOrderPageInput input)
  19. {
  20. var page = input.Page <= 0 ? 1 : input.Page;
  21. var pageSize = input.PageSize <= 0 ? 10 : input.PageSize;
  22. var offset = (page - 1) * pageSize;
  23. var where = new List<string>
  24. {
  25. "a.Status!='c'",
  26. "a.Workord in (select Workord from WorkOrdRouting where ProcessOut=1 and WorkOrd not in (SELECT WorkOrd from PurOrdMaster where Potype='PW' and WorkOrd is not null))"
  27. };
  28. var pars = new List<SugarParameter>();
  29. if (!string.IsNullOrWhiteSpace(input.WorkOrd))
  30. {
  31. where.Add("a.WorkOrd LIKE @WorkOrd");
  32. pars.Add(new SugarParameter("@WorkOrd", $"%{input.WorkOrd.Trim()}%"));
  33. }
  34. var fromSql = $"""
  35. FROM WorkOrdMaster a
  36. LEFT JOIN ItemMaster b ON a.ItemNum=b.ItemNum
  37. WHERE {string.Join(" AND ", where)}
  38. """;
  39. var total = await _db.Ado.GetIntAsync($"SELECT COUNT(1) {fromSql}", pars);
  40. var list = await _db.Ado.SqlQueryAsync<UniversalWorkOrderOutput>(
  41. $"""
  42. SELECT
  43. a.recid AS Id,
  44. a.Batch AS Batch,
  45. a.Drawing AS Drawing,
  46. a.Typed AS Typed,
  47. a.WorkOrd AS WorkOrd,
  48. a.OrdDate AS OrdDate,
  49. a.DueDate AS DueDate,
  50. a.ItemNum AS ItemNum,
  51. a.Project AS Project,
  52. a.QtyOrded AS QtyOrded,
  53. a.QtyCompleted AS QtyCompleted,
  54. a.Remark AS Remark,
  55. LOWER(a.Status) AS Status,
  56. a.WoTyped AS WoTyped,
  57. b.Descr AS Descr,
  58. b.Descr1 AS Descr1,
  59. a.lbrvar AS Lbrvar
  60. {fromSql}
  61. ORDER BY {BuildOrderBy(input.SortField, input.SortOrder)}
  62. LIMIT {pageSize} OFFSET {offset}
  63. """,
  64. pars);
  65. return new { total, page, pageSize, list };
  66. }
  67. private static string BuildOrderBy(string? sortField, string? sortOrder)
  68. {
  69. var dir = string.Equals(sortOrder, "asc", StringComparison.OrdinalIgnoreCase) ? "ASC" : "DESC";
  70. return sortField?.ToLowerInvariant() switch
  71. {
  72. "workord" => $"a.WorkOrd {dir}",
  73. "itemnum" => $"a.ItemNum {dir}",
  74. "descr" => $"b.Descr {dir}",
  75. "orddate" => $"a.OrdDate {dir}",
  76. _ => "a.RecID DESC"
  77. };
  78. }
  79. }