OrderChangeReviewBizHandler.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using Admin.NET.Plugin.ApprovalFlow;
  2. using Admin.NET.Plugin.ApprovalFlow.Service;
  3. namespace Admin.NET.Plugin.AiDOP.Order;
  4. /// <summary>
  5. /// 订单变更审批业务回调
  6. /// 注册 BizType = "ORDER_CHANGE_REVIEW"
  7. /// </summary>
  8. public class OrderChangeReviewBizHandler : IFlowBizHandler, ITransient
  9. {
  10. public string BizType => "ORDER_CHANGE_REVIEW";
  11. private readonly SqlSugarRepository<SeOrder> _seOrderRep;
  12. private readonly SqlSugarRepository<SeOrderEntry> _seOrderEntryRep;
  13. public OrderChangeReviewBizHandler(
  14. SqlSugarRepository<SeOrder> seOrderRep,
  15. SqlSugarRepository<SeOrderEntry> seOrderEntryRep)
  16. {
  17. _seOrderRep = seOrderRep;
  18. _seOrderEntryRep = seOrderEntryRep;
  19. }
  20. public async Task OnFlowStarted(long bizId, long instanceId)
  21. {
  22. try
  23. {
  24. await _seOrderRep.AsUpdateable()
  25. .SetColumns(o => o.FlowState == "审批中")
  26. .Where(o => o.Id == bizId)
  27. .ExecuteCommandAsync();
  28. }
  29. catch (Exception) { /* 表不存在时静默跳过 */ }
  30. }
  31. public async Task OnFlowCompleted(long bizId, long instanceId, FlowInstanceStatusEnum finalStatus, long? lastApproverId)
  32. {
  33. var state = finalStatus switch
  34. {
  35. FlowInstanceStatusEnum.Approved => "审批完成",
  36. FlowInstanceStatusEnum.Rejected => "已拒绝",
  37. FlowInstanceStatusEnum.Cancelled => "已撤销",
  38. _ => "已终止",
  39. };
  40. try
  41. {
  42. await _seOrderRep.AsUpdateable()
  43. .SetColumns(o => o.FlowState == state)
  44. .Where(o => o.Id == bizId)
  45. .ExecuteCommandAsync();
  46. // 审批通过时将订单明细进度重置为 0(新建/再评审)
  47. if (finalStatus == FlowInstanceStatusEnum.Approved)
  48. {
  49. await _seOrderEntryRep.AsUpdateable()
  50. .SetColumns(e => e.Progress == "0")
  51. .Where(e => e.SeOrderId == bizId)
  52. .ExecuteCommandAsync();
  53. }
  54. }
  55. catch (Exception) { /* 表不存在时静默跳过 */ }
  56. }
  57. public Task OnNodeCompleted(long bizId, long instanceId, string nodeId, string nodeName, long? approverUserId)
  58. {
  59. return Task.CompletedTask;
  60. }
  61. public async Task<Dictionary<string, object>> GetBizData(long bizId)
  62. {
  63. try
  64. {
  65. var order = await _seOrderRep.GetByIdAsync(bizId);
  66. if (order == null) return new Dictionary<string, object>();
  67. return new Dictionary<string, object>
  68. {
  69. ["urgent"] = order.Urgent ?? 0,
  70. ["customLevel"] = order.CustomLevel ?? 0,
  71. ["orderType"] = order.OrderType ?? 0,
  72. };
  73. }
  74. catch (Exception) { return new Dictionary<string, object>(); }
  75. }
  76. }