using Admin.NET.Plugin.ApprovalFlow; using Admin.NET.Plugin.ApprovalFlow.Service; namespace Admin.NET.Plugin.AiDOP.Order; /// /// 订单变更审批业务回调 /// 注册 BizType = "ORDER_CHANGE_REVIEW" /// public class OrderChangeReviewBizHandler : IFlowBizHandler, ITransient { public string BizType => "ORDER_CHANGE_REVIEW"; private readonly SqlSugarRepository _seOrderRep; private readonly SqlSugarRepository _seOrderEntryRep; public OrderChangeReviewBizHandler( SqlSugarRepository seOrderRep, SqlSugarRepository seOrderEntryRep) { _seOrderRep = seOrderRep; _seOrderEntryRep = seOrderEntryRep; } public async Task OnFlowStarted(long bizId, long instanceId) { try { await _seOrderRep.AsUpdateable() .SetColumns(o => o.FlowState == "审批中") .Where(o => o.Id == bizId) .ExecuteCommandAsync(); } catch (Exception) { /* 表不存在时静默跳过 */ } } public async Task OnFlowCompleted(long bizId, long instanceId, FlowInstanceStatusEnum finalStatus, long? lastApproverId) { var state = finalStatus switch { FlowInstanceStatusEnum.Approved => "审批完成", FlowInstanceStatusEnum.Rejected => "已拒绝", FlowInstanceStatusEnum.Cancelled => "已撤销", _ => "已终止", }; try { await _seOrderRep.AsUpdateable() .SetColumns(o => o.FlowState == state) .Where(o => o.Id == bizId) .ExecuteCommandAsync(); // 审批通过时将订单明细进度重置为 0(新建/再评审) if (finalStatus == FlowInstanceStatusEnum.Approved) { await _seOrderEntryRep.AsUpdateable() .SetColumns(e => e.Progress == "0") .Where(e => e.SeOrderId == bizId) .ExecuteCommandAsync(); } } catch (Exception) { /* 表不存在时静默跳过 */ } } public Task OnNodeCompleted(long bizId, long instanceId, string nodeId, string nodeName, long? approverUserId) { return Task.CompletedTask; } public async Task> GetBizData(long bizId) { try { var order = await _seOrderRep.GetByIdAsync(bizId); if (order == null) return new Dictionary(); return new Dictionary { ["urgent"] = order.Urgent ?? 0, ["customLevel"] = order.CustomLevel ?? 0, ["orderType"] = order.OrderType ?? 0, }; } catch (Exception) { return new Dictionary(); } } }