AidopImprovementApprovalSeed.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. using System.Diagnostics;
  2. using System.Text.Json;
  3. using Admin.NET.Plugin.AiDOP.Service;
  4. using Admin.NET.Plugin.ApprovalFlow;
  5. using Admin.NET.Plugin.ApprovalFlow.Service;
  6. using Yitter.IdGenerator;
  7. using ApprovalFlowEntity = Admin.NET.Plugin.ApprovalFlow.ApprovalFlow;
  8. namespace Admin.NET.Plugin.AiDOP.Infrastructure;
  9. /// <summary>
  10. /// 智慧诊断改善计划默认审批流种子。
  11. /// </summary>
  12. public static class AidopImprovementApprovalSeed
  13. {
  14. public static void EnsureSeed(ISqlSugarClient db)
  15. {
  16. try
  17. {
  18. db.CodeFirst.InitTables(
  19. typeof(ApprovalBizType),
  20. typeof(ApprovalFlowEntity),
  21. typeof(ApprovalFlowVersion));
  22. EnsureBizType(db);
  23. EnsurePublishedFlow(db);
  24. }
  25. catch (Exception ex)
  26. {
  27. Trace.TraceWarning("Ai-DOP improvement approval seed: " + ex);
  28. }
  29. }
  30. private static void EnsureBizType(ISqlSugarClient db)
  31. {
  32. var exists = db.Queryable<ApprovalBizType>()
  33. .Any(x => x.Code == SmartOpsImprovementBizHandler.BizTypeCode);
  34. if (exists) return;
  35. db.Insertable(new ApprovalBizType
  36. {
  37. Id = YitIdHelper.NextId(),
  38. Code = SmartOpsImprovementBizHandler.BizTypeCode,
  39. Name = "智慧诊断改善计划",
  40. Remark = "智慧运营诊断问题生成的改善计划审批",
  41. IsEnabled = true,
  42. CreateTime = DateTime.Now,
  43. UpdateTime = DateTime.Now,
  44. }).ExecuteCommand();
  45. }
  46. private static void EnsurePublishedFlow(ISqlSugarClient db)
  47. {
  48. var orgIds = db.Queryable<SysOrg>()
  49. .Select(x => x.Id)
  50. .ToList()
  51. .Where(x => x > 0)
  52. .Distinct()
  53. .ToList();
  54. if (orgIds.Count == 0) orgIds.Add(0);
  55. var now = DateTime.Now;
  56. var flowJson = BuildDefaultFlowJson();
  57. foreach (var orgId in orgIds)
  58. {
  59. var existing = db.Queryable<ApprovalFlowEntity>()
  60. .Where(x => x.BizType == SmartOpsImprovementBizHandler.BizTypeCode && x.OrgId == orgId && x.IsPublished && !x.IsDelete)
  61. .OrderByDescending(x => x.Version)
  62. .First();
  63. if (existing != null) continue;
  64. var flow = new ApprovalFlowEntity
  65. {
  66. Id = YitIdHelper.NextId(),
  67. Code = $"SMART_OPS_IMPROVE_{orgId}",
  68. Name = "智慧诊断改善计划审批",
  69. BizType = SmartOpsImprovementBizHandler.BizTypeCode,
  70. FormJson = "{}",
  71. FlowJson = flowJson,
  72. Status = 1,
  73. Remark = "系统默认流程:开始-改善计划审批-结束",
  74. Version = 1,
  75. IsPublished = true,
  76. OrgId = orgId,
  77. CreateTime = now,
  78. UpdateTime = now,
  79. };
  80. db.Insertable(flow).ExecuteCommand();
  81. db.Insertable(new ApprovalFlowVersion
  82. {
  83. Id = YitIdHelper.NextId(),
  84. FlowId = flow.Id,
  85. Version = flow.Version,
  86. FlowJson = flow.FlowJson,
  87. FormJson = flow.FormJson,
  88. PublishTime = now,
  89. PublisherName = "系统初始化",
  90. CreateTime = now,
  91. UpdateTime = now,
  92. }).ExecuteCommand();
  93. }
  94. }
  95. private static string BuildDefaultFlowJson()
  96. {
  97. var item = new ApprovalFlowItem
  98. {
  99. Nodes = new List<ApprovalFlowNodeItem>
  100. {
  101. new()
  102. {
  103. Id = "start",
  104. Type = "bpmn:startEvent",
  105. X = 100,
  106. Y = 120,
  107. Properties = new FlowProperties { NodeName = "开始" },
  108. Text = new FlowTextItem { X = 100, Y = 154, Value = "开始" },
  109. },
  110. new()
  111. {
  112. Id = "approve",
  113. Type = "bpmn:userTask",
  114. X = 300,
  115. Y = 120,
  116. Properties = new FlowProperties
  117. {
  118. NodeName = "改善计划审批",
  119. ApproverType = nameof(ApproverTypeEnum.Initiator),
  120. ApproverNames = "发起人",
  121. MultiApproveMode = "Any",
  122. },
  123. Text = new FlowTextItem { X = 300, Y = 154, Value = "改善计划审批" },
  124. },
  125. new()
  126. {
  127. Id = "end",
  128. Type = "bpmn:endEvent",
  129. X = 500,
  130. Y = 120,
  131. Properties = new FlowProperties { NodeName = "结束" },
  132. Text = new FlowTextItem { X = 500, Y = 154, Value = "结束" },
  133. },
  134. },
  135. Edges = new List<ApprovalFlowEdgeItem>
  136. {
  137. BuildEdge("edge-start-approve", "start", "approve", 140, 120, 260, 120),
  138. BuildEdge("edge-approve-end", "approve", "end", 340, 120, 460, 120),
  139. }
  140. };
  141. return JsonSerializer.Serialize(item);
  142. }
  143. private static ApprovalFlowEdgeItem BuildEdge(string id, string source, string target, float sx, float sy, float ex, float ey)
  144. {
  145. return new ApprovalFlowEdgeItem
  146. {
  147. Id = id,
  148. Type = "bpmn:sequenceFlow",
  149. SourceNodeId = source,
  150. TargetNodeId = target,
  151. StartPoint = new FlowEdgePointItem { X = sx, Y = sy },
  152. EndPoint = new FlowEdgePointItem { X = ex, Y = ey },
  153. Properties = new FlowProperties(),
  154. PointsList = new List<FlowEdgePointItem>
  155. {
  156. new() { X = sx, Y = sy },
  157. new() { X = ex, Y = ey },
  158. },
  159. };
  160. }
  161. }