lmx 3 недель назад
Родитель
Сommit
ad839da679

+ 3 - 0
fs-service/src/main/java/com/fs/company/param/CompanyWorkflowSaveParam.java

@@ -34,6 +34,9 @@ public class CompanyWorkflowSaveParam implements Serializable {
     private Long companyId;
     private Long companyId;
     private Long companyUserId;
     private Long companyUserId;
 
 
+    private String startNodeKey = "start";
+    private String endNodeKey;
+
     /** 节点列表 */
     /** 节点列表 */
     private List<CompanyWorkflowNode> nodes;
     private List<CompanyWorkflowNode> nodes;
 
 

+ 6 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyWorkflowServiceImpl.java

@@ -74,6 +74,8 @@ public class CompanyWorkflowServiceImpl implements ICompanyWorkflowService {
             workflow.setStatus(1);
             workflow.setStatus(1);
             workflow.setVersion(1);
             workflow.setVersion(1);
             workflow.setCreateTime(now);
             workflow.setCreateTime(now);
+            workflow.setStartNodeKey(param.getStartNodeKey());
+            workflow.setEndNodeKey(param.getEndNodeKey());
             companyWorkflowMapper.insertCompanyWorkflow(workflow);
             companyWorkflowMapper.insertCompanyWorkflow(workflow);
             workflowId = workflow.getWorkflowId();
             workflowId = workflow.getWorkflowId();
         } else {
         } else {
@@ -85,6 +87,8 @@ public class CompanyWorkflowServiceImpl implements ICompanyWorkflowService {
             workflow.setWorkflowType(param.getWorkflowType());
             workflow.setWorkflowType(param.getWorkflowType());
             workflow.setCanvasData(param.getCanvasData());
             workflow.setCanvasData(param.getCanvasData());
             workflow.setUpdateTime(now);
             workflow.setUpdateTime(now);
+            workflow.setStartNodeKey(param.getStartNodeKey());
+            workflow.setEndNodeKey(param.getEndNodeKey());
             companyWorkflowMapper.updateCompanyWorkflow(workflow);
             companyWorkflowMapper.updateCompanyWorkflow(workflow);
             // 删除旧的节点和连线
             // 删除旧的节点和连线
             companyWorkflowNodeMapper.deleteCompanyWorkflowNodeByWorkflowId(workflowId);
             companyWorkflowNodeMapper.deleteCompanyWorkflowNodeByWorkflowId(workflowId);
@@ -169,6 +173,8 @@ public class CompanyWorkflowServiceImpl implements ICompanyWorkflowService {
         workflow.setStatus(0);
         workflow.setStatus(0);
         workflow.setVersion(1);
         workflow.setVersion(1);
         workflow.setCreateTime(now);
         workflow.setCreateTime(now);
+        workflow.setStartNodeKey(source.getStartNodeKey());
+        workflow.setEndNodeKey(source.getEndNodeKey());
         companyWorkflowMapper.insertCompanyWorkflow(workflow);
         companyWorkflowMapper.insertCompanyWorkflow(workflow);
         Long newWorkflowId = workflow.getWorkflowId();
         Long newWorkflowId = workflow.getWorkflowId();
 
 

+ 16 - 0
fs-service/src/main/java/com/fs/company/service/impl/call/node/AbstractWorkflowNode.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.exception.CustomException;
 import com.fs.common.exception.CustomException;
+import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.spring.SpringUtils;
 import com.fs.common.utils.spring.SpringUtils;
 import com.fs.company.domain.*;
 import com.fs.company.domain.*;
 import com.fs.company.mapper.*;
 import com.fs.company.mapper.*;
@@ -312,6 +313,9 @@ public abstract class AbstractWorkflowNode implements IWorkflowNode {
             CompanyAiWorkflowExec update = new CompanyAiWorkflowExec();
             CompanyAiWorkflowExec update = new CompanyAiWorkflowExec();
             update.setWorkflowInstanceId(context.getWorkflowInstanceId());
             update.setWorkflowInstanceId(context.getWorkflowInstanceId());
             update.setCurrentNodeKey(context.getCurrentNodeKey());
             update.setCurrentNodeKey(context.getCurrentNodeKey());
+            if(null  != context.getVariables() && null != context.getVariable("nodeName",String.class)){
+                update.setCurrentNodeName(context.getVariable("nodeName",String.class));
+            }
             update.setStatus(ExecutionStatusEnum.RUNNING.getValue());
             update.setStatus(ExecutionStatusEnum.RUNNING.getValue());
             update.setLastUpdateTime(LocalDateTime.now());
             update.setLastUpdateTime(LocalDateTime.now());
             update.setVariables(objectMapper.writeValueAsString(context.getVariables()));
             update.setVariables(objectMapper.writeValueAsString(context.getVariables()));
@@ -321,4 +325,16 @@ public abstract class AbstractWorkflowNode implements IWorkflowNode {
         }
         }
 
 
     }
     }
+
+    protected void runNextNode(ExecutionContext context, CompanyWorkflowEdge edge){
+        if(StringUtils.isBlank(edge.getTargetNodeKey())){
+            return;
+        }
+        ExecutionContext nextContext = context.clone();
+        nextContext.setCurrentNodeKey(edge.getTargetNodeKey());
+        execPointNextNode(nextContext);
+        CompanyWorkflowNode nextNode = companyWorkflowNodeMapper.selectNodeByNodeKey(edge.getTargetNodeKey());
+        IWorkflowNode node = workflowNodeFactory.createNode(nextNode.getNodeKey(), NodeTypeEnum.fromCode(nextNode.getNodeType()), nextNode.getNodeName(), null);
+        node.execute(nextContext);
+    }
 }
 }

+ 2 - 1
fs-service/src/main/java/com/fs/company/service/impl/call/node/AiAddWxTaskNode.java

@@ -169,7 +169,8 @@ public class AiAddWxTaskNode extends AbstractWorkflowNode {
      * @param context 执行上下文
      * @param context 执行上下文
      * @param edge 边
      * @param edge 边
      */
      */
-    private void runNextNode(ExecutionContext context, CompanyWorkflowEdge edge) {
+    @Override
+    protected void runNextNode(ExecutionContext context, CompanyWorkflowEdge edge) {
         ExecutionContext nextContext = context.clone();
         ExecutionContext nextContext = context.clone();
         nextContext.setCurrentNodeKey(edge.getTargetNodeKey());
         nextContext.setCurrentNodeKey(edge.getTargetNodeKey());
         super.execPointNextNode(nextContext);
         super.execPointNextNode(nextContext);

+ 3 - 16
fs-service/src/main/java/com/fs/company/service/impl/call/node/AiCallTaskNode.java

@@ -57,10 +57,10 @@ public class AiCallTaskNode extends AbstractWorkflowNode {
                 //如果含有意向度过滤
                 //如果含有意向度过滤
                 if(null != condition.getIntention()){
                 if(null != condition.getIntention()){
                     if( condition.getIntention().equals(callRes.getIntention())){
                     if( condition.getIntention().equals(callRes.getIntention())){
-                        this.runNextNode(context,edge);
+                        super.runNextNode(context,edge);
                     }
                     }
                 } else {
                 } else {
-                    this.runNextNode(context,edge);
+                    super.runNextNode(context,edge);
                 }
                 }
             }
             }
             //未拨通
             //未拨通
@@ -75,7 +75,7 @@ public class AiCallTaskNode extends AbstractWorkflowNode {
                 }
                 }
                 //无时间驱动
                 //无时间驱动
                 else {
                 else {
-                    this.runNextNode(context,edge);
+                    super.runNextNode(context,edge);
                 }
                 }
             }
             }
 
 
@@ -137,17 +137,4 @@ public class AiCallTaskNode extends AbstractWorkflowNode {
 //        return null;
 //        return null;
 //    }
 //    }
 
 
-    /**
-     * 运行下一个节点
-     * @param context
-     * @param edge
-     */
-    private void runNextNode(ExecutionContext context, CompanyWorkflowEdge edge){
-        ExecutionContext nextContext = context.clone();
-        nextContext.setCurrentNodeKey(edge.getTargetNodeKey());
-        super.execPointNextNode(nextContext);
-        CompanyWorkflowNode nextNode = companyWorkflowNodeMapper.selectNodeByNodeKey(edge.getTargetNodeKey());
-        IWorkflowNode node = super.workflowNodeFactory.createNode(nextNode.getNodeKey(), NodeTypeEnum.fromCode(nextNode.getNodeType()), nextNode.getNodeName(), null);
-        node.execute(nextContext);
-    }
 }
 }

+ 1 - 1
fs-service/src/main/java/com/fs/company/service/impl/call/node/EndNode.java

@@ -26,7 +26,7 @@ public class EndNode extends AbstractWorkflowNode {
 
 
     @Override
     @Override
     public ExecutionResult doExecute(ExecutionContext context) {
     public ExecutionResult doExecute(ExecutionContext context) {
-        return null;
+        return ExecutionResult.success().nextNodeKey(null).outputData(null).build();
     }
     }
 
 
     @Override
     @Override

+ 6 - 0
fs-service/src/main/java/com/fs/company/service/impl/call/node/StartNode.java

@@ -1,5 +1,6 @@
 package com.fs.company.service.impl.call.node;
 package com.fs.company.service.impl.call.node;
 
 
+import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.CompanyAiWorkflowExec;
 import com.fs.company.domain.CompanyAiWorkflowExec;
 import com.fs.company.domain.CompanyAiWorkflowExecLog;
 import com.fs.company.domain.CompanyAiWorkflowExecLog;
 import com.fs.company.domain.CompanyWorkflowEdge;
 import com.fs.company.domain.CompanyWorkflowEdge;
@@ -37,6 +38,7 @@ public class StartNode extends AbstractWorkflowNode {
     @Override
     @Override
     public ExecutionResult doExecute(ExecutionContext context) {
     public ExecutionResult doExecute(ExecutionContext context) {
         return ExecutionResult.success()
         return ExecutionResult.success()
+                .outputData(null)
                 .nextNodeKey(super.getNextNodeKey(context.getWorkflowInstanceId(), nodeKey)).build();
                 .nextNodeKey(super.getNextNodeKey(context.getWorkflowInstanceId(), nodeKey)).build();
     }
     }
 
 
@@ -65,10 +67,14 @@ public class StartNode extends AbstractWorkflowNode {
      * @param res
      * @param res
      */
      */
     private void runNextNode(ExecutionContext context, ExecutionResult res){
     private void runNextNode(ExecutionContext context, ExecutionResult res){
+        if(StringUtils.isBlank(res.getNextNodeKey())){
+            return;
+        }
         ExecutionContext nextContext = context.clone();
         ExecutionContext nextContext = context.clone();
         nextContext.setCurrentNodeKey(res.getNextNodeKey());
         nextContext.setCurrentNodeKey(res.getNextNodeKey());
         CompanyWorkflowNode nextNode = companyWorkflowNodeMapper.selectNodeByNodeKey(res.getNextNodeKey());
         CompanyWorkflowNode nextNode = companyWorkflowNodeMapper.selectNodeByNodeKey(res.getNextNodeKey());
         IWorkflowNode node = super.workflowNodeFactory.createNode(nextNode.getNodeKey(), NodeTypeEnum.fromCode(nextNode.getNodeType()), nextNode.getNodeName(), null);
         IWorkflowNode node = super.workflowNodeFactory.createNode(nextNode.getNodeKey(), NodeTypeEnum.fromCode(nextNode.getNodeType()), nextNode.getNodeName(), null);
+        nextContext.setVariable("nodeName",nextNode.getNodeName());
         super.execPointNextNode(nextContext);
         super.execPointNextNode(nextContext);
         node.execute(nextContext);
         node.execute(nextContext);
     }
     }

+ 9 - 1
fs-service/src/main/resources/mapper/company/CompanyWorkflowMapper.xml

@@ -20,11 +20,13 @@
         <result property="delFlag" column="del_flag"/>
         <result property="delFlag" column="del_flag"/>
         <result property="companyUserId" column="company_user_id"/>
         <result property="companyUserId" column="company_user_id"/>
         <result property="companyId" column="company_id"/>
         <result property="companyId" column="company_id"/>
+        <result property="startNodeKey" column="start_node_key"/>
+        <result property="endNodeKey" column="end_node_key"/>
     </resultMap>
     </resultMap>
 
 
     <sql id="selectCompanyWorkflowVo">
     <sql id="selectCompanyWorkflowVo">
         select workflow_id, workflow_name, workflow_desc, workflow_type, status, version,
         select workflow_id, workflow_name, workflow_desc, workflow_type, status, version,
-               canvas_data, start_node_key, end_node_key, create_by, create_time, update_by, update_time, remark, del_flag, company_user_id, company_id
+               canvas_data, start_node_key, end_node_key, create_by, create_time, update_by, update_time, remark, del_flag, company_user_id, company_id,start_node_key,end_node_key
         from company_ai_workflow
         from company_ai_workflow
     </sql>
     </sql>
     <update id="deleteAiWorkflowCompanyUserVoice" >
     <update id="deleteAiWorkflowCompanyUserVoice" >
@@ -127,6 +129,8 @@
             <if test="createTime != null">create_time,</if>
             <if test="createTime != null">create_time,</if>
             <if test="remark != null">remark,</if>
             <if test="remark != null">remark,</if>
             <if test="companyUserId != null">company_user_id,</if>
             <if test="companyUserId != null">company_user_id,</if>
+            <if test="startNodeKey != null">start_node_key,</if>
+            <if test="endNodeKey != null">end_node_key,</if>
         </trim>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="workflowName != null and workflowName != ''">#{workflowName},</if>
             <if test="workflowName != null and workflowName != ''">#{workflowName},</if>
@@ -139,6 +143,8 @@
             <if test="createTime != null">#{createTime},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="remark != null">#{remark},</if>
             <if test="remark != null">#{remark},</if>
             <if test="companyUserId != null">#{companyUserId},</if>
             <if test="companyUserId != null">#{companyUserId},</if>
+            <if test="startNodeKey != null">#{startNodeKey},</if>
+            <if test="endNodeKey != null">#{endNodeKey},</if>
         </trim>
         </trim>
     </insert>
     </insert>
     <insert id="insertCompanyWorkflowCompanyUser">
     <insert id="insertCompanyWorkflowCompanyUser">
@@ -179,6 +185,8 @@
             <if test="updateBy != null">update_by = #{updateBy},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="remark != null">remark = #{remark},</if>
             <if test="remark != null">remark = #{remark},</if>
+            <if test="startNodeKey != null">start_node_key = #{startNodeKey},</if>
+            <if test="endNodeKey != null">end_node_key = #{endNodeKey},</if>
         </trim>
         </trim>
         where workflow_id = #{workflowId}
         where workflow_id = #{workflowId}
     </update>
     </update>