SmartOpsImprovementBizHandler.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using Admin.NET.Plugin.AiDOP.Entity;
  2. using Admin.NET.Plugin.AiDOP.Infrastructure;
  3. using Admin.NET.Plugin.ApprovalFlow;
  4. using Admin.NET.Plugin.ApprovalFlow.Service;
  5. namespace Admin.NET.Plugin.AiDOP.Service;
  6. /// <summary>
  7. /// 智慧运营改善计划审批回调。
  8. /// </summary>
  9. public class SmartOpsImprovementBizHandler : IFlowBizHandler, ITransient
  10. {
  11. public const string BizTypeCode = "SMART_OPS_IMPROVEMENT";
  12. public string BizType => BizTypeCode;
  13. private readonly SqlSugarRepository<AdoSmartOpsImprovementPlan> _rep;
  14. public SmartOpsImprovementBizHandler(SqlSugarRepository<AdoSmartOpsImprovementPlan> rep)
  15. {
  16. _rep = rep;
  17. }
  18. public async Task OnFlowStarted(long bizId, long instanceId)
  19. {
  20. var plan = await _rep.GetByIdAsync(bizId);
  21. if (plan == null) return;
  22. await _rep.AsUpdateable()
  23. .SetColumns(x => x.Status == "approving")
  24. .SetColumns(x => x.FlowInstanceId == instanceId)
  25. .SetColumns(x => x.UpdateTime == DateTime.Now)
  26. .Where(x => x.Id == bizId && x.TenantId == plan.TenantId)
  27. .ExecuteCommandAsync();
  28. }
  29. public async Task OnFlowCompleted(long bizId, long instanceId, FlowInstanceStatusEnum finalStatus, long? lastApproverId)
  30. {
  31. var plan = await _rep.GetByIdAsync(bizId);
  32. if (plan == null) return;
  33. var status = SmartOpsImprovementApprovalRules.MapCompletedStatus(finalStatus);
  34. await _rep.AsUpdateable()
  35. .SetColumns(x => x.Status == status)
  36. .SetColumns(x => x.UpdateTime == DateTime.Now)
  37. .Where(x => x.Id == bizId && x.TenantId == plan.TenantId)
  38. .ExecuteCommandAsync();
  39. }
  40. public async Task<Dictionary<string, object>> GetBizData(long bizId)
  41. {
  42. var plan = await _rep.GetByIdAsync(bizId);
  43. if (plan == null) return new Dictionary<string, object>();
  44. var route = SmartOpsImprovementApprovalRules.ResolveRoute(plan);
  45. return new Dictionary<string, object>
  46. {
  47. ["moduleCode"] = plan.ModuleCode,
  48. ["metricCode"] = plan.MetricCode ?? "",
  49. ["problemLevel"] = plan.ProblemLevel,
  50. ["problemName"] = plan.ProblemName,
  51. ["problemDept"] = plan.ProblemDept ?? "",
  52. ["problemSeverity"] = SmartOpsImprovementApprovalRules.NormalizeSeverity(plan.ProblemSeverity),
  53. ["isCrossDept"] = plan.IsCrossDept ? 1 : 0,
  54. ["route"] = route,
  55. ["status"] = plan.Status,
  56. };
  57. }
  58. }