Commit b4ac3ecd by guominglei

工作流的保存和创建

parent 136a6485
......@@ -49,9 +49,9 @@ public class FlowController {
@PostMapping("get")
@ApiOperation("查询工作流")
public NodeVo getFlow(@RequestBody Integer flowId){
NodeVo flow = flowService.getFlowId(flowId);
return null;
public FlowVo getFlow(@RequestBody Integer flowId){
FlowVo flow = flowService.getFlowId(flowId);
return flow;
}
@PostMapping("start")
......
package com.byit.mapper;
import com.byit.model.NodeDependencyKey;
import org.apache.ibatis.annotations.Param;
public interface NodeDependencyMapper {
int deleteById(NodeDependencyKey key);
int insert(NodeDependencyKey record);
int insert(@Param("nodeId") Integer nodeId, @Param("dependNodeId") Integer dependNodeId);
int insertSelective(NodeDependencyKey record);
/**
* 根据节点id删除依赖关系
* @param nodeId
* @return
*/
int deleteByNodeId(Integer nodeId);
}
\ No newline at end of file
......@@ -2,6 +2,8 @@ package com.byit.mapper;
import com.byit.model.Node;
import java.util.List;
public interface NodeMapper {
int deleteById(Integer nodeId);
......@@ -25,4 +27,23 @@ public interface NodeMapper {
*/
int updateOnforkDown(Integer flowId);
/**
* 查找在工作流调度上的节点
* @param flowId
* @return
*/
List<Node> findOnforkByFlowId(Integer flowId);
/**
* 查找工作流下的虚拟节点
* @param flowId
* @return
*/
List<Node> findVirtualByFlowId(Integer flowId);
/**
* 删除工作流下的虚拟节点
* @param flowId
*/
void deleteVirtualNode(Integer flowId);
}
\ No newline at end of file
......@@ -205,6 +205,12 @@ public class NodeVo implements Serializable {
@ApiModelProperty("源码")
private String runSource;
/**
* 依赖节点
*/
@ApiModelProperty("依赖节点")
private String dependNodeIds;
/**
*/
......
......@@ -2,7 +2,6 @@ package com.byit.service;
import com.byit.model.Flow;
import com.byit.model.vo.FlowVo;
import com.byit.model.vo.NodeVo;
/**
* @description: 工作流业务逻辑接口
......@@ -41,7 +40,7 @@ public interface FlowService {
* @param flowId
* @return
*/
NodeVo getFlowId(Integer flowId);
FlowVo getFlowId(Integer flowId);
/**
* 启动工作流
......
......@@ -3,6 +3,7 @@ package com.byit.service.impl;
import com.byit.job.utils.CronExpression;
import com.byit.mapper.FlowDependentMapper;
import com.byit.mapper.FlowMapper;
import com.byit.mapper.NodeDependencyMapper;
import com.byit.mapper.NodeMapper;
import com.byit.model.Flow;
import com.byit.model.FlowDependentKey;
......@@ -11,6 +12,7 @@ import com.byit.model.vo.FlowVo;
import com.byit.model.vo.NodeVo;
import com.byit.service.FlowService;
import com.byit.util.FlowInitUtil;
import com.byit.utils.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
......@@ -38,6 +40,8 @@ public class FlowServiceImpl implements FlowService {
private NodeMapper nodeMapper;
@Resource
private FlowDependentMapper flowDependentMapper;
@Resource
private NodeDependencyMapper nodeDependencyMapper;
@Override
public Flow saveJobFlow(FlowVo flowVo) {
......@@ -55,12 +59,57 @@ public class FlowServiceImpl implements FlowService {
int nodeCount = nodeVoList.size();
log.info("将【{}】个节点在工作流【{}】调度流程中", nodeCount, flow.getFlowName());
flow.setFlowNodeCount(nodeCount);
//将工作流下的所有节点设为不在工作流调度上
log.info("将工作流【{}】所有的节点移下调度", flow.getFlowName());
log.info("将工作流【{}】所有的节点移下调度,并删除相关的依赖关系", flow.getFlowName());
//查询当前工作流下所有在调度上的节点
List<Node> nodeList = nodeMapper.findOnforkByFlowId(flow.getFlowId());
//删除在调度上的节点的相关依赖
nodeList.forEach(node -> nodeDependencyMapper.deleteByNodeId(node.getNodeId()));
nodeMapper.updateOnforkDown(flow.getFlowId());
//查找并删除工作流下的虚节点
List<Node> virtualNodeList = nodeMapper.findVirtualByFlowId(flow.getFlowId());
if (null != virtualNodeList && virtualNodeList.size() > 0){
for (Node node : virtualNodeList) {
Flow virtualFlow = new Flow();
virtualFlow.setFlowId(node.getMapFlowId());
virtualFlow.setIsInner("0");
//将内嵌的工作流设置为不是内嵌
flowMapper.updateByIdSelective(virtualFlow);
}
}
//删除工作流下虚拟的节点
nodeMapper.deleteVirtualNode(flow.getFlowId());
//将对应的节点更改为在调度上
log.info("给工作流【{}】添加节点调度调度", flow.getFlowName());
nodeVoList.forEach(nodeVo -> nodeMapper.updateOnforkUp(nodeVo.getNodeId()));
for (NodeVo nodeVo : nodeVoList) {
if (StringUtils.isNotEmpty(nodeVo.getIsVirtual()) && "1".equals(nodeVo.getIsVirtual())){
//如果是虚拟节点就根据节点的id查找工作流的id
Flow virtualFlow = flowMapper.getById(nodeVo.getNodeId());
Node virtualNode = new Node();
virtualNode.setMapFlowId(nodeVo.getNodeId());
virtualNode.setIsVirtual("0");
virtualNode.setAuthor(virtualFlow.getAuthor());
virtualNode.setAddTime(new Date());
virtualNode.setOnFork("0");
virtualNode.setVersionName(virtualFlow.getVersionName());
Integer virtualNodeId = nodeMapper.insertSelective(virtualNode);
//将虚拟节点真实节点改为nodeid
nodeVo.setNodeId(virtualNode.getNodeId());
//将映射的工作流改为是内嵌工作流
virtualFlow.setIsInner("1");
flowMapper.updateByIdSelective(virtualFlow);
}else {
nodeMapper.updateOnforkUp(nodeVo.getNodeId());
}
//重新组建节点的依赖关系
if (StringUtils.isNotEmpty(nodeVo.getDependNodeIds())){
List<String> dependNodeList = Arrays.asList(nodeVo.getDependNodeIds());
dependNodeList.forEach(dependNodeId-> nodeDependencyMapper.insert(nodeVo.getNodeId(), Integer.valueOf(dependNodeId)));
}
}
}
//重组工作流依赖
......@@ -146,7 +195,10 @@ public class FlowServiceImpl implements FlowService {
}
@Override
public NodeVo getFlowId(Integer flowId) {
public FlowVo getFlowId(Integer flowId) {
ValidationUtil.dataNotNull(flowId, "工作流Id不允许为空!");
Flow flow = flowMapper.getById(flowId);
List<Node> nodeList = nodeMapper.findOnforkByFlowId(flowId);
return null;
}
......
......@@ -12,10 +12,16 @@
where node_id = #{nodeId,jdbcType=INTEGER}
and dependency_id = #{dependencyId,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.byit.model.NodeDependencyKey">
<delete id="deleteByNodeId" parameterType="integer">
delete from node_dependency
where node_id = #{nodeId,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="integer">
<!-- generated @mbg.generated date: 2019-12-25 -->
insert into node_dependency (node_id, dependency_id)
values (#{nodeId,jdbcType=INTEGER}, #{dependencyId,jdbcType=INTEGER})
values (#{nodeId,jdbcType=INTEGER}, #{dependNodeId,jdbcType=INTEGER})
</insert>
<insert id="insertSelective" parameterType="com.byit.model.NodeDependencyKey">
<!-- generated @mbg.generated date: 2019-12-25 -->
......
......@@ -60,12 +60,39 @@
from node
where node_id = #{nodeId,jdbcType=INTEGER}
</select>
<select id="findOnforkByFlowId" parameterType="integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
,
<include refid="Blob_Column_List" />
from node
where flow_id = #{flowId,jdbcType=INTEGER}
and on_fork = '0';
</select>
<select id="findVirtualByFlowId" parameterType="integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
,
<include refid="Blob_Column_List" />
from node
where flow_id = #{flowId,jdbcType=INTEGER}
and is_virtual = '0';
</select>
<delete id="deleteById" parameterType="java.lang.Integer">
<!-- generated @mbg.generated date: 2019-12-25 -->
delete from node
where node_id = #{nodeId,jdbcType=INTEGER}
</delete>
<delete id="deleteVirtualNode">
delete from node
where flow_id = #{flowId,jdbcType=INTEGER}
and is_virtual = '0';
</delete>
<insert id="insertSelective" parameterType="com.byit.model.Node">
<!-- generated @mbg.generated date: 2019-12-25 -->
insert into node
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment