WorkOrderKittingCheckService.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. namespace Admin.NET.Plugin.AiDOP.WorkOrder;
  2. /// <summary>工单齐套检查动作。</summary>
  3. public class WorkOrderKittingCheckService : ITransient
  4. {
  5. private readonly ISqlSugarClient _db;
  6. public WorkOrderKittingCheckService(ISqlSugarClient db)
  7. {
  8. _db = db;
  9. }
  10. public async Task<KittingCheckResult> CheckTenantWorkOrdersAsync(long tenantId, string account)
  11. {
  12. var workOrds = await _db.Ado.SqlQueryAsync<string>(
  13. """
  14. SELECT WorkOrd FROM WorkOrdMaster
  15. WHERE tenant_id = @TenantId
  16. AND LOWER(TRIM(IFNULL(Status,''))) IN ('p', 'r')
  17. ORDER BY WorkOrd
  18. """,
  19. new SugarParameter("@TenantId", tenantId));
  20. var result = new KittingCheckResult();
  21. foreach (var wo in workOrds)
  22. {
  23. var one = await CheckSingleAsync(tenantId, wo, account);
  24. result.CheckedCount++;
  25. if (one.IsKitted) result.KittedCount++;
  26. else result.ShortageCount++;
  27. }
  28. return result;
  29. }
  30. public async Task<SingleKittingCheckResult> CheckSingleAsync(long tenantId, string workOrd, string account)
  31. {
  32. var now = DateTime.Now;
  33. var shortage = await _db.Ado.GetIntAsync(
  34. """
  35. SELECT COUNT(*)
  36. FROM b_examine_result ber
  37. INNER JOIN b_bom_child_examine bce ON ber.Id = bce.examine_id AND bce.is_use = 1
  38. WHERE ber.tenant_id = @TenantId
  39. AND ber.IsDeleted = 0
  40. AND ber.morder_no = @WorkOrd
  41. AND IFNULL(bce.lack_qty, 0) > 0
  42. """,
  43. new SugarParameter("@TenantId", tenantId),
  44. new SugarParameter("@WorkOrd", workOrd.Trim()));
  45. var isKitted = shortage == 0;
  46. var situation = isKitted ? "齐套" : "缺料";
  47. await _db.Ado.ExecuteCommandAsync(
  48. """
  49. UPDATE mes_morder
  50. SET MaterialSituation = @Situation,
  51. update_by_name = @User,
  52. update_time = @Now
  53. WHERE tenant_id = @TenantId AND morder_no = @WorkOrd AND IsDeleted = 0
  54. """,
  55. new SugarParameter("@Situation", situation),
  56. new SugarParameter("@User", account),
  57. new SugarParameter("@Now", now),
  58. new SugarParameter("@TenantId", tenantId),
  59. new SugarParameter("@WorkOrd", workOrd.Trim()));
  60. return new SingleKittingCheckResult
  61. {
  62. WorkOrd = workOrd,
  63. IsKitted = isKitted,
  64. ShortageLineCount = shortage,
  65. MaterialSituation = situation
  66. };
  67. }
  68. public sealed class KittingCheckResult
  69. {
  70. public int CheckedCount { get; set; }
  71. public int KittedCount { get; set; }
  72. public int ShortageCount { get; set; }
  73. }
  74. public sealed class SingleKittingCheckResult
  75. {
  76. public string WorkOrd { get; set; } = string.Empty;
  77. public bool IsKitted { get; set; }
  78. public int ShortageLineCount { get; set; }
  79. public string MaterialSituation { get; set; } = string.Empty;
  80. }
  81. }