OrderResourceCheckService.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. namespace Admin.NET.Plugin.AiDOP.Order;
  2. /// <summary>订单评审资源检查编排。</summary>
  3. public class OrderResourceCheckService : ITransient
  4. {
  5. private readonly ISqlSugarClient _db;
  6. private readonly MaterialRequirementCalculator _calculator;
  7. private readonly ResourceCheckResultWriter _writer;
  8. public OrderResourceCheckService(
  9. ISqlSugarClient db,
  10. MaterialRequirementCalculator calculator,
  11. ResourceCheckResultWriter writer)
  12. {
  13. _db = db;
  14. _calculator = calculator;
  15. _writer = writer;
  16. }
  17. public async Task<OrderResourceCheckResult> RunForEntryAsync(
  18. OrderWorkOrderGenerationService.OrderHeader order,
  19. OrderWorkOrderGenerationService.OrderEntryLine entry,
  20. string workOrd,
  21. string account,
  22. List<string> warnings)
  23. {
  24. var lines = await _calculator.BuildLinesAsync(order, entry, warnings);
  25. var morderId = await ResolveMorderIdAsync(workOrd, entry.TenantId);
  26. return await _writer.WriteAsync(order, entry, workOrd, morderId, lines, account, DateTime.Now);
  27. }
  28. private async Task<long?> ResolveMorderIdAsync(string workOrd, long tenantId)
  29. {
  30. var id = await _db.Ado.GetLongAsync(
  31. """
  32. SELECT Id FROM mes_morder
  33. WHERE morder_no = @WorkOrd AND tenant_id = @TenantId AND IsDeleted = 0
  34. ORDER BY Id DESC LIMIT 1
  35. """,
  36. new List<SugarParameter>
  37. {
  38. new("@WorkOrd", workOrd),
  39. new("@TenantId", tenantId)
  40. });
  41. return id > 0 ? id : null;
  42. }
  43. }