using Admin.NET.Plugin.ApprovalFlow; using Admin.NET.Plugin.ApprovalFlow.Service; namespace Admin.NET.Plugin.AiDOP.Order; /// /// 合同评审审批业务回调(与流程定义 BizType = CONTRACT_REVIEW 一致) /// public class ContractReviewBizHandler : IFlowBizHandler, ITransient { public string BizType => "CONTRACT_REVIEW"; private readonly SqlSugarRepository _reviewRep; public ContractReviewBizHandler(SqlSugarRepository reviewRep) { _reviewRep = reviewRep; } public async Task OnFlowStarted(long bizId, long instanceId) { var id = (int)bizId; var now = DateTime.Now; var row = await _reviewRep.GetByIdAsync(id); if (row == null) return; row.FlowStatus = "reviewing"; row.CurrentStage = 1; row.CurrentDept = "审批流"; row.UpdateTime = now; await _reviewRep.UpdateAsync(row); } public async Task OnFlowCompleted(long bizId, long instanceId, FlowInstanceStatusEnum finalStatus, long? lastApproverId) { var id = (int)bizId; var now = DateTime.Now; var row = await _reviewRep.GetByIdAsync(id); if (row == null) return; switch (finalStatus) { case FlowInstanceStatusEnum.Approved: row.FlowStatus = "completed"; row.CurrentStage = 5; row.CurrentDept = "已完成"; break; case FlowInstanceStatusEnum.Rejected: case FlowInstanceStatusEnum.Terminated: row.FlowStatus = "rejected"; row.CurrentStage = 0; row.CurrentDept = null; break; case FlowInstanceStatusEnum.Cancelled: row.FlowStatus = "draft"; row.CurrentStage = 0; row.CurrentDept = null; break; default: row.FlowStatus = "draft"; row.CurrentStage = 0; row.CurrentDept = null; break; } row.UpdateTime = now; await _reviewRep.UpdateAsync(row); } public Task OnNodeCompleted(long bizId, long instanceId, string nodeId, string nodeName, long? approverUserId) { return Task.CompletedTask; } public async Task> GetBizData(long bizId) { var row = await _reviewRep.GetByIdAsync((int)bizId); if (row == null) return new Dictionary(); var winRateLevel = row.WinRate switch { "高" => 3, "中" => 2, "低" => 1, _ => 0, }; return new Dictionary { ["currentStage"] = row.CurrentStage ?? 0, ["winRateLevel"] = winRateLevel, ["hasCrmNo"] = string.IsNullOrWhiteSpace(row.CrmNo) ? 0 : 1, }; } }