PickBillCreatorFacade.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using Microsoft.Extensions.Options;
  2. namespace Admin.NET.Plugin.AiDOP.WorkOrder;
  3. /// <summary>
  4. /// WP9 · 按 <see cref="AidopPickBillOptions.Mode"/> 选择 Local / Mes 建单实现。
  5. /// 注入点应使用本类型(或 <see cref="IPickBillCreator"/>),勿直接多实现竞注。
  6. /// </summary>
  7. public sealed class PickBillCreatorFacade : IPickBillCreator, ITransient
  8. {
  9. private readonly AidopPickBillOptions _opt;
  10. private readonly WorkOrderPickBillService _local;
  11. private readonly MesPickBillCreator _mes;
  12. private readonly WorkOrderKittingCheckService _kittingCheckService;
  13. public PickBillCreatorFacade(
  14. IOptions<AidopPickBillOptions> opt,
  15. WorkOrderPickBillService local,
  16. MesPickBillCreator mes,
  17. WorkOrderKittingCheckService kittingCheckService)
  18. {
  19. _opt = opt.Value;
  20. _local = local;
  21. _mes = mes;
  22. _kittingCheckService = kittingCheckService;
  23. }
  24. public async Task<PickBillResult> CreateAsync(
  25. long tenantId,
  26. string domain,
  27. string workOrd,
  28. string account,
  29. CancellationToken ct = default)
  30. {
  31. var result = _opt.IsMes
  32. ? await _mes.CreateAsync(tenantId, domain, workOrd, account, ct)
  33. : await _local.CreateAsync(tenantId, domain, workOrd, account, ct);
  34. // 领料单新建成功后,将已有的齐套率结果回写到 NbrMaster.MFRate / NbrDetail.SatisfyQty
  35. if (result.Created)
  36. {
  37. await _kittingCheckService.WriteBackMFRateAsync(tenantId, workOrd);
  38. }
  39. return result;
  40. }
  41. }