MaterialRequirementGenerationService.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using Admin.NET.Plugin.AiDOP.Infrastructure;
  2. using Admin.NET.Plugin.AiDOP.Supply;
  3. namespace Admin.NET.Plugin.AiDOP.WorkOrder;
  4. /// <summary>物料需求生成(MRP 入口,对接 S4 采购执行闭环)。</summary>
  5. [ApiDescriptionSettings(Order = 261, Description = "物料需求生成")]
  6. [Route("api/WorkOrder")]
  7. [AllowAnonymous]
  8. [NonUnify]
  9. public class MaterialRequirementGenerationService : IDynamicApiController, ITransient
  10. {
  11. private readonly UserManager _userManager;
  12. private readonly ProcurementPipelineService _pipeline;
  13. private readonly AidopActionRunLogWriter _runLog;
  14. public MaterialRequirementGenerationService(
  15. UserManager userManager,
  16. ProcurementPipelineService pipeline,
  17. AidopActionRunLogWriter runLog)
  18. {
  19. _userManager = userManager;
  20. _pipeline = pipeline;
  21. _runLog = runLog;
  22. }
  23. /// <summary>同步/生成物料需求并执行采购闭环。</summary>
  24. [DisplayName("生成物料需求")]
  25. [HttpPost("material-requirement/generate")]
  26. public async Task<ProcurementPipelineResult> Generate([FromQuery] string domain)
  27. {
  28. var tenantId = ResolveTenantId(domain);
  29. var account = _userManager.Account ?? "system";
  30. var logId = await _runLog.StartAsync("S4_MRP_GENERATE", tenantId, "tenant", tenantId, domain ?? tenantId.ToString());
  31. try
  32. {
  33. var result = await _pipeline.ExecuteCoreAsync(tenantId, account, createFromShortage: true);
  34. await _runLog.SuccessAsync(logId, result.Message, result);
  35. return result;
  36. }
  37. catch (Exception ex)
  38. {
  39. await _runLog.FailedAsync(logId, ex.Message);
  40. throw Oops.Oh(ex.Message);
  41. }
  42. }
  43. private long ResolveTenantId(string? domain)
  44. {
  45. if (!string.IsNullOrWhiteSpace(domain) && long.TryParse(domain.Trim(), out var tid) && tid > 0)
  46. return tid;
  47. return AidopTenantHelper.Resolve(App.HttpContext);
  48. }
  49. }