using System.Diagnostics; using System.Text.Json; using Admin.NET.Plugin.AiDOP.Service; using Admin.NET.Plugin.ApprovalFlow; using Admin.NET.Plugin.ApprovalFlow.Service; using Yitter.IdGenerator; using ApprovalFlowEntity = Admin.NET.Plugin.ApprovalFlow.ApprovalFlow; namespace Admin.NET.Plugin.AiDOP.Infrastructure; /// /// 智慧诊断改善计划默认审批流种子。 /// public static class AidopImprovementApprovalSeed { public static void EnsureSeed(ISqlSugarClient db) { try { db.CodeFirst.InitTables( typeof(ApprovalBizType), typeof(ApprovalFlowEntity), typeof(ApprovalFlowVersion)); EnsureBizType(db); EnsurePublishedFlow(db); } catch (Exception ex) { Trace.TraceWarning("Ai-DOP improvement approval seed: " + ex); } } private static void EnsureBizType(ISqlSugarClient db) { var exists = db.Queryable() .Any(x => x.Code == SmartOpsImprovementBizHandler.BizTypeCode); if (exists) return; db.Insertable(new ApprovalBizType { Id = YitIdHelper.NextId(), Code = SmartOpsImprovementBizHandler.BizTypeCode, Name = "智慧诊断改善计划", Remark = "智慧运营诊断问题生成的改善计划审批", IsEnabled = true, CreateTime = DateTime.Now, UpdateTime = DateTime.Now, }).ExecuteCommand(); } private static void EnsurePublishedFlow(ISqlSugarClient db) { var orgIds = db.Queryable() .Select(x => x.Id) .ToList() .Where(x => x > 0) .Distinct() .ToList(); if (orgIds.Count == 0) orgIds.Add(0); var now = DateTime.Now; var flowJson = BuildDefaultFlowJson(); foreach (var orgId in orgIds) { var existing = db.Queryable() .Where(x => x.BizType == SmartOpsImprovementBizHandler.BizTypeCode && x.OrgId == orgId && x.IsPublished && !x.IsDelete) .OrderByDescending(x => x.Version) .First(); if (existing != null) continue; var flow = new ApprovalFlowEntity { Id = YitIdHelper.NextId(), Code = $"SMART_OPS_IMPROVE_{orgId}", Name = "智慧诊断改善计划审批", BizType = SmartOpsImprovementBizHandler.BizTypeCode, FormJson = "{}", FlowJson = flowJson, Status = 1, Remark = "系统默认流程:开始-改善计划审批-结束", Version = 1, IsPublished = true, OrgId = orgId, CreateTime = now, UpdateTime = now, }; db.Insertable(flow).ExecuteCommand(); db.Insertable(new ApprovalFlowVersion { Id = YitIdHelper.NextId(), FlowId = flow.Id, Version = flow.Version, FlowJson = flow.FlowJson, FormJson = flow.FormJson, PublishTime = now, PublisherName = "系统初始化", CreateTime = now, UpdateTime = now, }).ExecuteCommand(); } } private static string BuildDefaultFlowJson() { var item = new ApprovalFlowItem { Nodes = new List { new() { Id = "start", Type = "bpmn:startEvent", X = 100, Y = 120, Properties = new FlowProperties { NodeName = "开始" }, Text = new FlowTextItem { X = 100, Y = 154, Value = "开始" }, }, new() { Id = "approve", Type = "bpmn:userTask", X = 300, Y = 120, Properties = new FlowProperties { NodeName = "改善计划审批", ApproverType = nameof(ApproverTypeEnum.Initiator), ApproverNames = "发起人", MultiApproveMode = "Any", }, Text = new FlowTextItem { X = 300, Y = 154, Value = "改善计划审批" }, }, new() { Id = "end", Type = "bpmn:endEvent", X = 500, Y = 120, Properties = new FlowProperties { NodeName = "结束" }, Text = new FlowTextItem { X = 500, Y = 154, Value = "结束" }, }, }, Edges = new List { BuildEdge("edge-start-approve", "start", "approve", 140, 120, 260, 120), BuildEdge("edge-approve-end", "approve", "end", 340, 120, 460, 120), } }; return JsonSerializer.Serialize(item); } private static ApprovalFlowEdgeItem BuildEdge(string id, string source, string target, float sx, float sy, float ex, float ey) { return new ApprovalFlowEdgeItem { Id = id, Type = "bpmn:sequenceFlow", SourceNodeId = source, TargetNodeId = target, StartPoint = new FlowEdgePointItem { X = sx, Y = sy }, EndPoint = new FlowEdgePointItem { X = ex, Y = ey }, Properties = new FlowProperties(), PointsList = new List { new() { X = sx, Y = sy }, new() { X = ex, Y = ey }, }, }; } }