| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- 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;
- /// <summary>
- /// 智慧诊断改善计划默认审批流种子。
- /// </summary>
- 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<ApprovalBizType>()
- .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<SysOrg>()
- .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<ApprovalFlowEntity>()
- .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<ApprovalFlowNodeItem>
- {
- 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<ApprovalFlowEdgeItem>
- {
- 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<FlowEdgePointItem>
- {
- new() { X = sx, Y = sy },
- new() { X = ex, Y = ey },
- },
- };
- }
- }
|