当前位置: 首页 > news >正文

广州企业网站seowordpress自定义登录

广州企业网站seo,wordpress自定义登录,免费外链网盘,wordpress自动采集aote文章目录 场景整体架构流程业务界面技术细节小结 场景 这次遇到一个需求,大致就是任务组织成方案,方案组织成预案,预案可裁剪调整.预案关联事件等级配置,告警触发预案产生事件.然后任务执行是有先后的,也就是有流程概念. 整体架构流程 方案管理、预案管理构成任务流程的基础条… 文章目录 场景整体架构流程业务界面技术细节小结 场景 这次遇到一个需求,大致就是任务组织成方案,方案组织成预案,预案可裁剪调整.预案关联事件等级配置,告警触发预案产生事件.然后任务执行是有先后的,也就是有流程概念. 整体架构流程 方案管理、预案管理构成任务流程的基础条件,告警信息关联预案配置构成事件,也就是流程启动的入口信息. 业务界面 技术细节 其实也没有什么特殊的技术,也就用到了多叉树、图、最长路径计算(深搜)等. 多叉树 import lombok.Data;import java.util.ArrayList; import java.util.List;/*** author zwmac*/ Data public class MoreParentTreeNodeT {/*** 节点的唯一标识符*/private Long id;/*** 节点的名称*/private String name;/*** 节点的索引*/private Integer index;/*** 子节点list*/private ListMoreParentTreeNodeT children;/*** 父节点list*/private ListMoreParentTreeNodeT parents;/*** 扩展信息(一般就存节点对应的原始数据)*/private T extendInfo;public MoreParentTreeNode(Long id, String name,Integer index) {this.id id;this.name name;this.index index;this.children new ArrayList();this.parents new ArrayList();}public MoreParentTreeNode() {}/*** 添加子节点* param child 子节点*/public void addChild(MoreParentTreeNodeT child) {if (this.children.contains(child)) {return;}this.children.add(child);child.parents.add(this);}/*** 添加父节点* param parent 父节点*/public void addParent(MoreParentTreeNodeT parent) {if (this.parents.contains(parent)) {return;}this.parents.add(parent);parent.children.add(this);}public void traverse() {System.out.println(this.name); // 打印节点名称if (this.children.isEmpty()) {System.out.println(没有子节点);}for (MoreParentTreeNodeT child : this.children) {child.traverse(); // 递归遍历子节点}}public static void main(String[] args) {MoreParentTreeNode root new MoreParentTreeNode(1L, root,1);MoreParentTreeNode node1 new MoreParentTreeNode(2L, node1,2);MoreParentTreeNode node2 new MoreParentTreeNode(3L, node2,3);MoreParentTreeNode node3 new MoreParentTreeNode(4L, node3,4);MoreParentTreeNode node4 new MoreParentTreeNode(5L, node4,5);MoreParentTreeNode node5 new MoreParentTreeNode(5L, node5,6);MoreParentTreeNode node6 new MoreParentTreeNode(6L, node6,7);root.addChild(node1);root.addChild(node2);node1.addChild(node6);node3.addParent(node2);node4.addParent(node2);node4.addParent(node1);node5.addParent(node4);root.traverse();} } 图对象与计算基本方法 import lombok.Data;import java.util.ArrayList; import java.util.Arrays; import java.util.List;/*** 流程图对象,用于计算最长执行时间* author zwmac*/ Data public class ProcessGraph {/*** 顶点个数*/private int numVertices;/*** 邻接表*/private ListListInteger adjList;/*** 顶点执行时间(边长)*/private Double[] executionTimes;/*** 构造函数* param numVertices 顶点个数* param executionTimes 顶点执行时间(边长)*/public ProcessGraph(int numVertices, Double[] executionTimes) {this.numVertices numVertices;this.executionTimes executionTimes;adjList new ArrayList(numVertices);for (int i 0; i numVertices; i) {adjList.add(new ArrayList());}}/*** 添加边* param src 源顶点* param dest 目标顶点*/public void addEdge(int src, int dest) {adjList.get(src).add(dest);}/*** 计算最长执行时间* return 最长执行时间*/public Double findMaxExecutionTime() {Double[] maxExecutionTimes new Double[numVertices];Arrays.fill(maxExecutionTimes, -1d);Double maxExecutionTime 0d;for (int i 0; i numVertices; i) {Double currentExecutionTime dfs(i, maxExecutionTimes);if (currentExecutionTime maxExecutionTime) {maxExecutionTime currentExecutionTime;}}return maxExecutionTime;}/*** 深度优先搜索* param vertex 顶点* param maxExecutionTimes 最长执行时间数组* return 最长执行时间*/private Double dfs(int vertex, Double[] maxExecutionTimes) {if (maxExecutionTimes[vertex] ! -1) {return maxExecutionTimes[vertex];}Double maxExecutionTime executionTimes[vertex];for (int neighbor : adjList.get(vertex)) {Double neighborExecutionTime dfs(neighbor, maxExecutionTimes);if (neighborExecutionTime executionTimes[vertex] maxExecutionTime) {maxExecutionTime neighborExecutionTime executionTimes[vertex];}}maxExecutionTimes[vertex] maxExecutionTime;return maxExecutionTime;}public static void main(String[] args) {Double[] executionTimes {0d,3d, 4d, 5d, 2d, 3d,0d};ProcessGraph graph new ProcessGraph(7, executionTimes);graph.addEdge(0, 1);graph.addEdge(0, 2);graph.addEdge(1, 3);graph.addEdge(1, 4);graph.addEdge(2, 3);graph.addEdge(3, 5);graph.addEdge(3, 5);//graph.addEdge(3, 5);Double maxExecutionTime graph.findMaxExecutionTime();System.out.println(Max execution time: maxExecutionTime);} } 多叉树工具类 import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.json.JSONUtil; import com.smartPark.business.emergency.event.entity.EmergencyEventTask; import com.smartPark.business.emergency.event.entity.dto.EmergencyEventTaskDTO; import org.apache.commons.lang3.StringUtils;import java.util.*;/*** author zwmac*/ public class EventTaskTreeUtil {/*** 转换流程树* param eventTaskList 任务列表* return 流程树根节点*/public static MoreParentTreeNode? convertTreeDto(ListEmergencyEventTaskDTO eventTaskList) {MoreParentTreeNode? root new MoreParentTreeNode(0L,开始,0);EmergencyEventTaskDTO rootEventTaskDto new EmergencyEventTaskDTO();rootEventTaskDto.setTaskDuration(0d);MapLong, MoreParentTreeNode? nodeMap new HashMap();for (int i 0;i eventTaskList.size();i) {EmergencyEventTaskDTO eventTask eventTaskList.get(i);Long id eventTask.getId();String name eventTask.getTaskName();MoreParentTreeNodeEmergencyEventTaskDTO node new MoreParentTreeNode(id,name,(i1));node.setExtendInfo(eventTask);nodeMap.put(eventTask.getId(), node);}//处理父子关系(正)for (EmergencyEventTaskDTO eventTask : eventTaskList) {transNodeRef(eventTask, nodeMap, root);}//处理父子关系(反)for (int i eventTaskList.size() - 1;i -1; i--){EmergencyEventTaskDTO eventTask eventTaskList.get(i);transNodeRef(eventTask, nodeMap, root);}return root;}/*** 转换流程树* param eventTaskList 任务列表* return 流程树根节点*/public static MoreParentTreeNode? convertTree(ListEmergencyEventTask eventTaskList) {MoreParentTreeNode? root new MoreParentTreeNode(0L,开始,0);EmergencyEventTask rootEventTask new EmergencyEventTask();rootEventTask.setTaskDuration(0d);MapLong, MoreParentTreeNode? nodeMap new HashMap();for (int i 0;i eventTaskList.size();i) {EmergencyEventTask eventTask eventTaskList.get(i);Long id eventTask.getId();String name eventTask.getTaskName();MoreParentTreeNodeEmergencyEventTask node new MoreParentTreeNode(id,name,(i1));node.setExtendInfo(eventTask);nodeMap.put(eventTask.getId(), node);}//处理父子关系(正)for (EmergencyEventTask eventTask : eventTaskList) {EmergencyEventTaskDTO eventTaskDTO new EmergencyEventTaskDTO();BeanUtil.copyProperties(eventTask, eventTaskDTO);transNodeRef(eventTaskDTO, nodeMap, root);}//处理父子关系(反)for (int i eventTaskList.size() - 1;i -1; i--){EmergencyEventTask eventTask eventTaskList.get(i);EmergencyEventTaskDTO eventTaskDTO new EmergencyEventTaskDTO();BeanUtil.copyProperties(eventTask,eventTaskDTO);transNodeRef(eventTaskDTO, nodeMap, root);}return root;}/*** 转换节点关系* param eventTask 父级任务* param nodeMap 节点map* param root 根节点*/private static void transNodeRef(EmergencyEventTaskDTO eventTask, MapLong, MoreParentTreeNode? nodeMap, MoreParentTreeNode? root) {Long id eventTask.getId();MoreParentTreeNode? node nodeMap.get(id);if (node ! null){EmergencyEventTaskDTO eventTaskDTO new EmergencyEventTaskDTO();Object eventTaskObj node.getExtendInfo();if(eventTaskObj instanceof EmergencyEventTask) {EmergencyEventTask nodeEventTask (EmergencyEventTask) eventTaskObj;BeanUtil.copyProperties(nodeEventTask, eventTaskDTO);}String preIds eventTaskDTO.getBeforeTaskIds();if (StringUtils.isEmpty(preIds)){node.addParent(root);root.addChild(node);}else {String[] preIdsArr preIds.split(,);if (ArrayUtil.isNotEmpty(preIdsArr)){for (String preId : preIdsArr) {MoreParentTreeNode? preNode nodeMap.get(Long.valueOf(preId));//前置任务不为空if (preNode ! null){preNode.addChild(node);}}}}nodeMap.put(id, node);}}/*** 获取节点的子节点列表* param treeNode 节点* param eventTaskId 事件任务id* return 子节点列表*/public static List? extends MoreParentTreeNode? getNodeChildrenList(MoreParentTreeNode? treeNode, Long eventTaskId) {List? extends MoreParentTreeNode? childrenList itGetNodeChildrenList(treeNode, eventTaskId);if (CollectionUtil.isNotEmpty(childrenList)) {return childrenList;}childrenList itGetNodeParentList(treeNode, eventTaskId);return childrenList;}/*** 迭代获取节点的父节点列表* param moreParentTreeNode 父节点* param eventTaskId 事件任务id* return 父节点列表*/private static List? extends MoreParentTreeNode? itGetNodeParentList(MoreParentTreeNode? moreParentTreeNode, Long eventTaskId) {List? extends MoreParentTreeNode? children null;if (moreParentTreeNode.getId().equals(eventTaskId)){children moreParentTreeNode.getChildren();}else{List? extends MoreParentTreeNode? parentTreeNodes moreParentTreeNode.getParents();if(CollectionUtil.isNotEmpty(parentTreeNodes)) {for (MoreParentTreeNode? parentTreeNode : parentTreeNodes) {children itGetNodeParentList(parentTreeNode, eventTaskId);if (CollectionUtil.isNotEmpty(children)) {break;}}}}return children;}/*** 迭代获取节点的子节点列表* param moreParentTreeNode 子节点* param eventTaskId 事件任务id* return 子节点列表*/private static List? extends MoreParentTreeNode? itGetNodeChildrenList(MoreParentTreeNode? moreParentTreeNode, Long eventTaskId) {List? extends MoreParentTreeNode? children null;if (moreParentTreeNode.getId().equals(eventTaskId)){children moreParentTreeNode.getChildren();}else{List? extends MoreParentTreeNode? childrenChild moreParentTreeNode.getChildren();if(CollectionUtil.isNotEmpty(childrenChild)) {for (MoreParentTreeNode? parentTreeNode : childrenChild) {children itGetNodeChildrenList(parentTreeNode, eventTaskId);if (CollectionUtil.isNotEmpty(children)) {break;}}}}return children;}public static void main(String[] args) {ListEmergencyEventTaskDTO eventTaskList new ArrayList();initTestData(eventTaskList,9);System.out.println(JSONUtil.toJsonStr(eventTaskList));MoreParentTreeNode? treeNode convertTreeDto(eventTaskList);List? childrenList getNodeChildrenList(treeNode, 3L);treeNode.traverse();}private static void initTestData(ListEmergencyEventTaskDTO eventTaskList, int num) {for (int i 0;i num; i){EmergencyEventTaskDTO eventTask new EmergencyEventTaskDTO();eventTask.setId(Long.valueOf(i));eventTask.setTaskName(任务- (i 1));eventTask.setTaskDuration(RandomUtil.randomDouble(1,10));if (i 1){StringJoiner sj new StringJoiner(,);int n RandomUtil.randomInt(0,i);for(int j 0;j i - 1 - n;j){sj.add(String.valueOf(j1));}eventTask.setBeforeTaskIds(sj.toString());}eventTaskList.add(eventTask);}}} 使用思路也特别简单,实际就是将配置任务时只选择了节点上级任务的所有任务构成一个多叉树,然后跟这个树每个节点设置唯一编号,然后转化为图,计算最长路径作为事件的预计完成时间,最后就是各个任务节点的流转了. /*** 计算预计完成时间* param event 事件* return 预计完成时间*/private Date calPlanEndTime(EmergencyEvent event) {Date planStartTime event.getPlanStartTime();Date finalNow planStartTime;//先查询预案任务QueryWrapperEmergencyEventPlan eventPlanQw new QueryWrapper();eventPlanQw.eq(event_id_, event.getId());ListEmergencyEventPlan eventPlanList eventPlanService.list(eventPlanQw);if (CollectionUtil.isNotEmpty(eventPlanList)){//最终预计完成时间//再查询预案任务for (int i 0;i eventPlanList.size();i){QueryWrapperEmergencyEventTask eventTaskQw new QueryWrapper();eventTaskQw.eq(event_id_, event.getId());eventTaskQw.eq(event_plan_id_, eventPlanList.get(i).getId());ListEmergencyEventTask eventTaskList eventPlanTaskService.list(eventTaskQw);if (CollectionUtil.isNotEmpty(eventTaskList)){//再组织流程树MoreParentTreeNode? processTree EventTaskTreeUtil.convertTree(eventTaskList);//最后计算时间Date planTaskEndTime calEndTime(processTree, planStartTime, eventTaskList);if (planTaskEndTime.after(finalNow)){finalNow planTaskEndTime;}}}}return finalNow;}小结 后悔数据结构没有学好算法用的少,也有很大工具包直接提供,但是还是很有学的必要的      就随便写写,希望能帮到大家,uping!
http://www.dnsts.com.cn/news/156585.html

相关文章:

  • 漫画网站怎么做优秀企业宣传ppt
  • 如何在头条上做网站推广济南全网推广设计开发
  • 用dw做的网站生成链接吗网站建设策划书有哪些内容
  • 网站建设硬件投入表网站域名怎么解释
  • 苏州哪里做网站好赣州百度
  • 可以做猫头像的网站汶上网站开发
  • 网站模板可以自己做吗做集装箱的网站
  • 简单电子商务网站开发网站设计的基本流程是什么
  • 企业信息管理系统下载百度seo培训课程
  • 宁波网站建设公司代理网站兼容性问题
  • 03340网站建设与管理做租房网站
  • 徐州东站千博网站建设
  • 宁波网站建设设计制作网站建设不包括哪个阶段
  • 宿州网站制作建设wordpress百度影音
  • 教育网站建设的策划方案常见的c2c平台有
  • 网站服务器续费泰安肥城建设局网站
  • 公司做的网站过期了阿里云1M做网站
  • 北京城乡建设厅网站某网站seo诊断分析和优化方案
  • 温州 网站建设动画设计就业方向和发展前景
  • 深圳外贸公司网站建设公司排名提升网站关键词排名
  • 建设部网站碎发零能耗住宅广东住房和城乡建设局官网
  • 南阳网站建设培训班中环互联网网站建设套餐
  • 前端角度实现网站首页加载慢优化全国专业做美术网站的公司
  • 聊城网站seo中国世界排名前100大学
  • 中山网站建设哪家好wordpress怎么更换网站logo
  • 做个网站在线投稿页面网站建设冫金手指谷哥十四
  • 高职专业建设管理网站济南做外贸的网站公司
  • 电子商务静态网站建设实验报告网站备案 拍照
  • 响应式网站建设多少钱wordpress识别pc手机版
  • 为什么企业网站不是开源系统英文网站seo推广