Quellcode durchsuchen

清流初始化

yangcheng vor 3 Monaten
Ursprung
Commit
553cac39a5
60 geänderte Dateien mit 3019 neuen und 0 gelöschten Zeilen
  1. 28 0
      pom.xml
  2. 55 0
      src/main/java/com/kingtom/lightflow/LightFlowConst.java
  3. 118 0
      src/main/java/com/kingtom/lightflow/approvalimpl/ApprovalFlowHandler.java
  4. 57 0
      src/main/java/com/kingtom/lightflow/approvalimpl/ApprovalFlowTest.java
  5. 12 0
      src/main/java/com/kingtom/lightflow/approvalimpl/content/IContentHandler.java
  6. 38 0
      src/main/java/com/kingtom/lightflow/approvalimpl/handler/EndEventHandler.java
  7. 38 0
      src/main/java/com/kingtom/lightflow/approvalimpl/handler/MultGatewayHandler.java
  8. 27 0
      src/main/java/com/kingtom/lightflow/approvalimpl/handler/SequenceConnectHandler.java
  9. 38 0
      src/main/java/com/kingtom/lightflow/approvalimpl/handler/ShenpiTaskHandler.java
  10. 38 0
      src/main/java/com/kingtom/lightflow/approvalimpl/handler/StartEventHandler.java
  11. 38 0
      src/main/java/com/kingtom/lightflow/approvalimpl/handler/XiezuoTaskHandler.java
  12. 106 0
      src/main/java/com/kingtom/lightflow/engine/FlowEngineConst.java
  13. 57 0
      src/main/java/com/kingtom/lightflow/engine/command/AddCommand.java
  14. 52 0
      src/main/java/com/kingtom/lightflow/engine/command/CheckCommand.java
  15. 21 0
      src/main/java/com/kingtom/lightflow/engine/command/IFlowCommand.java
  16. 39 0
      src/main/java/com/kingtom/lightflow/engine/command/PublishCommand.java
  17. 66 0
      src/main/java/com/kingtom/lightflow/engine/command/SaveCommand.java
  18. 45 0
      src/main/java/com/kingtom/lightflow/engine/core/FLowConfig.java
  19. 52 0
      src/main/java/com/kingtom/lightflow/engine/core/FlowConfigContainer.java
  20. 42 0
      src/main/java/com/kingtom/lightflow/engine/core/FlowEngine.java
  21. 60 0
      src/main/java/com/kingtom/lightflow/engine/core/FlowEngineFactory.java
  22. 110 0
      src/main/java/com/kingtom/lightflow/engine/cxt/FlowContext.java
  23. 54 0
      src/main/java/com/kingtom/lightflow/engine/cxt/FlowInput.java
  24. 15 0
      src/main/java/com/kingtom/lightflow/engine/cxt/FlowOutput.java
  25. 39 0
      src/main/java/com/kingtom/lightflow/engine/cxt/FlowParam.java
  26. 55 0
      src/main/java/com/kingtom/lightflow/engine/cxt/FlowResult.java
  27. 41 0
      src/main/java/com/kingtom/lightflow/engine/cxt/ParamStruct.java
  28. 16 0
      src/main/java/com/kingtom/lightflow/engine/event/FlowDesignEvent.java
  29. 18 0
      src/main/java/com/kingtom/lightflow/engine/event/FlowEvent.java
  30. 16 0
      src/main/java/com/kingtom/lightflow/engine/event/FlowRunEvent.java
  31. 30 0
      src/main/java/com/kingtom/lightflow/engine/ext/IFlowConnectHandler.java
  32. 41 0
      src/main/java/com/kingtom/lightflow/engine/ext/IFlowHandler.java
  33. 47 0
      src/main/java/com/kingtom/lightflow/engine/ext/IFlowObjectHandler.java
  34. 12 0
      src/main/java/com/kingtom/lightflow/engine/ext/IFlowRoleHandler.java
  35. 30 0
      src/main/java/com/kingtom/lightflow/engine/ext/IFlowStorageHandler.java
  36. 85 0
      src/main/java/com/kingtom/lightflow/engine/model/bean/FlowDefConnect.java
  37. 112 0
      src/main/java/com/kingtom/lightflow/engine/model/bean/FlowDefInfo.java
  38. 67 0
      src/main/java/com/kingtom/lightflow/engine/model/bean/FlowDefNode.java
  39. 112 0
      src/main/java/com/kingtom/lightflow/engine/model/bean/FlowDefVar.java
  40. 103 0
      src/main/java/com/kingtom/lightflow/engine/model/bean/FlowRunBranch.java
  41. 85 0
      src/main/java/com/kingtom/lightflow/engine/model/bean/FlowRunElement.java
  42. 112 0
      src/main/java/com/kingtom/lightflow/engine/model/bean/FlowRunLog.java
  43. 67 0
      src/main/java/com/kingtom/lightflow/engine/model/bean/FlowRunTask.java
  44. 58 0
      src/main/java/com/kingtom/lightflow/engine/model/bean/FlowRunVar.java
  45. 68 0
      src/main/java/com/kingtom/lightflow/engine/model/biz/FlowDef.java
  46. 40 0
      src/main/java/com/kingtom/lightflow/engine/model/biz/FlowRole.java
  47. 12 0
      src/main/java/com/kingtom/lightflow/engine/model/biz/FlowRun.java
  48. 70 0
      src/main/java/com/kingtom/lightflow/engine/model/operator/FlowDefOperator.java
  49. 21 0
      src/main/java/com/kingtom/lightflow/engine/model/operator/FlowRunOperator.java
  50. 46 0
      src/main/java/com/kingtom/lightflow/engine/utils/FlowEngineMapper.java
  51. 44 0
      src/main/java/com/kingtom/lightflow/engine/utils/FlowEngineUtils.java
  52. 57 0
      src/main/java/com/kingtom/lightflow/engineimpl/service/FlowDesignServiceImpl.java
  53. 36 0
      src/main/java/com/kingtom/lightflow/engineimpl/service/FlowRunServiceImpl.java
  54. 47 0
      src/main/java/com/kingtom/lightflow/engineimpl/service/IFlowDesignService.java
  55. 49 0
      src/main/java/com/kingtom/lightflow/engineimpl/service/IFlowRunService.java
  56. 36 0
      src/main/java/com/kingtom/lightflow/engineimpl/storage/BaseFlowStorageImpl.java
  57. 15 0
      src/main/java/com/kingtom/lightflow/package-info.java
  58. 89 0
      src/main/resources/db/V1.15__20241230_initFlow.sql
  59. 5 0
      src/main/resources/flow/flow_core_conf.json
  60. 32 0
      src/main/resources/flowdemo/testFlow.json

+ 28 - 0
pom.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>kirin_spring_boot</artifactId>
+        <groupId>com.kingtom.kirin</groupId>
+        <version>2.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>freshflow</artifactId>
+    <version>2.0</version>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.kingtom.kirin</groupId>
+            <artifactId>kirin_core</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>

+ 55 - 0
src/main/java/com/kingtom/lightflow/LightFlowConst.java

@@ -0,0 +1,55 @@
+package com.kingtom.lightflow;
+
+import com.kingtom.lightflow.engine.FlowEngineConst;
+import com.kingtom.kirin.core.common.base.IBaseEnum;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ * 轻流公共常量
+ * @author King
+ * @since 2024/4/5 17:04
+ */
+public class LightFlowConst {
+
+    /** 审批流 **/
+    public static final String FLOW_Approval = "approval";
+
+    /** 工作流 **/
+    public static final String FLOW_Work = "work";
+
+    private LightFlowConst() {}
+
+    public static enum FlowStateEnum implements IBaseEnum<String> {
+        Undo("Undo", "未处理"),
+        Actived("Actived", "处理进行中"),
+        Suspended("Suspended", "处理暂停"),
+        Done("Done", "处理完成"),
+        Ignored("Ignored", "忽略");
+
+        private String key;
+
+        private String name;
+
+        private FlowStateEnum(String k, String n){
+            this.key = k;
+            this.name = n;
+        }
+
+        @Override
+        public String getKey(){
+            return key;
+        }
+
+        @Override
+        public String getName(){
+            return name;
+        }
+
+        public static FlowEngineConst.FlowStateEnum findEnumByKey(String k){
+            return IBaseEnum.findEnumByKey(FlowEngineConst.FlowStateEnum.class, k);
+        }
+    }
+
+}

+ 118 - 0
src/main/java/com/kingtom/lightflow/approvalimpl/ApprovalFlowHandler.java

@@ -0,0 +1,118 @@
+package com.kingtom.lightflow.approvalimpl;
+
+import cn.hutool.core.lang.Assert;
+import com.kingtom.lightflow.LightFlowConst;
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.lightflow.engine.ext.IFlowConnectHandler;
+import com.kingtom.lightflow.engine.ext.IFlowHandler;
+import com.kingtom.lightflow.engine.ext.IFlowObjectHandler;
+import com.kingtom.kirin.core.common.exception.AppException;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/1/30 14:56
+ */
+@Slf4j
+public class ApprovalFlowHandler implements IFlowHandler {
+
+    protected Map<String,IFlowObjectHandler> objectHandlerMap = new HashMap<>();
+
+    protected Map<String,IFlowConnectHandler> connectHandlerMap = new HashMap<>();
+
+    public ApprovalFlowHandler() {
+        init();
+    }
+
+    protected void init() {
+//        String json = ResourceUtil.readStr(CONF_APPROVAL, StandardCharsets.UTF_8);
+//        FlowApprovalConf conf = JsonUtils.toObject(json, FlowApprovalConf.class);
+//        try{
+//            for(String cstr:conf.getConnectHandlers()) {
+//                IFlowConnectHandler connectHandler = (IFlowConnectHandler)ClassUtil.loadClass(cstr).getDeclaredConstructor().newInstance();
+//                putConnecttHandler(connectHandler);
+//            }
+//            for(String ostr:conf.getObjectHandlers()) {
+//                IFlowObjectHandler objectHandler = (IFlowObjectHandler)ClassUtil.loadClass(ostr).getDeclaredConstructor().newInstance();
+//                putObjectHandler(objectHandler);
+//            }
+//            log.info("审批流加载完成:conf="+JsonUtils.toJson(conf));
+//        } catch (Exception e) {
+//            throw new AppException("审批流加载失败",e);
+//        }
+    }
+
+    public void putObjectHandler(IFlowObjectHandler objectHandler) {
+        Assert.isFalse(objectHandler==null,()->new AppException("审批流节点实现不能为空"));
+        Assert.isFalse(objectHandler.defineType()==null,()->new AppException("审批流节点实现不能没有类型名"));
+        Assert.isFalse(objectHandlerMap.containsKey(objectHandler.defineType()),()->new AppException("审批流节点实现冲突").setM(objectHandler.defineType()));
+        objectHandlerMap.put(objectHandler.defineType(),objectHandler);
+    }
+
+    public void putConnecttHandler(IFlowConnectHandler connectHandler) {
+        Assert.isFalse(connectHandler==null,()->new AppException("审批流连接实现不能为空"));
+        Assert.isFalse(connectHandler.defineType()==null,()->new AppException("审批流连接实现不能没有类型名"));
+        Assert.isFalse(connectHandlerMap.containsKey(connectHandler.defineType()),()->new AppException("审批流连接实现冲突").setM(connectHandler.defineType()));
+        connectHandlerMap.put(connectHandler.defineType(),connectHandler);
+    }
+
+    /**
+     * 申明自己针对的流程类型
+     *
+     * @return
+     */
+    @Override
+    public String defineName() {
+        return LightFlowConst.FLOW_Approval;
+    }
+
+    /**
+     * 在流程实例启动时填充FlowContext
+     *
+     * @param context
+     */
+    @Override
+    public void fillFlowContext(FlowContext context) {
+
+    }
+
+    /**
+     * 查找节点处理器
+     *
+     * @param objectType
+     * @return
+     */
+    @Override
+    public IFlowObjectHandler findFlowObjectHandler(String objectType) {
+        return objectHandlerMap.get(objectType);
+    }
+
+    public void registFlowObjectHandler(IFlowObjectHandler objectHandler) {
+        Assert.isFalse(objectHandler == null,()->new AppException("流程对象解释器不能为空"));
+        objectHandlerMap.put(objectHandler.defineType(),objectHandler);
+    }
+
+    public void registFlowConnectObjectHandler(IFlowConnectHandler connectHandler) {
+        Assert.isFalse(connectHandler == null,()->new AppException("流程连接解释器不能为空"));
+        connectHandlerMap.put(connectHandler.defineType(),connectHandler);
+    }
+
+    /**
+     * 查找连接处理器
+     *
+     * @param connectType
+     * @return
+     */
+    @Override
+    public IFlowConnectHandler findFlowConnectHandler(String connectType) {
+        return connectHandlerMap.get(connectType);
+    }
+
+}

+ 57 - 0
src/main/java/com/kingtom/lightflow/approvalimpl/ApprovalFlowTest.java

@@ -0,0 +1,57 @@
+package com.kingtom.lightflow.approvalimpl;
+
+import cn.hutool.core.io.resource.ResourceUtil;
+import com.kingtom.lightflow.engine.model.biz.FlowDef;
+import com.kingtom.lightflow.engineimpl.service.IFlowDesignService;
+import com.kingtom.lightflow.engineimpl.service.IFlowRunService;
+import com.kingtom.lightflow.engine.core.FlowEngine;
+import com.kingtom.lightflow.engine.core.FlowEngineFactory;
+import com.kingtom.lightflow.engine.cxt.FlowInput;
+import com.kingtom.lightflow.engine.cxt.FlowOutput;
+import com.kingtom.kirin.core.common.base.Result;
+import com.kingtom.kirin.core.common.utils.JsonUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ * 轻流:审批流测试类
+ * @author King
+ * @since 2024/2/20 14:42
+ */
+@Slf4j
+public class ApprovalFlowTest {
+
+    private static final String TESTFLOW = "classpath:flowdemo/testFlow.json";
+
+    public static void main(String[] args) {
+        FlowEngine engine = FlowEngineFactory.getEngine();
+        IFlowDesignService designService = null;
+        IFlowRunService runService = null;
+        // 发布流程
+        String json = ResourceUtil.readStr(TESTFLOW, StandardCharsets.UTF_8);
+        FlowDef flow = JsonUtils.toObject(json, FlowDef.class);
+        Result<String> def = designService.doAdd(flow, true);
+        String defId = def.getData();
+        log.info("发布的流程ID="+defId);
+
+        // 启动流程
+        FlowInput input = new FlowInput();
+        FlowOutput output = runService.doStart(defId, input, new FlowOutput());
+        String entryId = (String)output.findMap().get("Result");
+        log.info("发布的流程实例ID="+entryId);
+
+        // 推动流程:完成任务
+        List<String> taskIds = (List<String>)output.findMap().get("Task");
+        for(String taskId:taskIds) {
+            input = new FlowInput();
+            output = runService.doTask(taskId, input, new FlowOutput());
+            log.info("流程任务执行成功,ID="+taskId);
+        }
+    }
+
+}

+ 12 - 0
src/main/java/com/kingtom/lightflow/approvalimpl/content/IContentHandler.java

@@ -0,0 +1,12 @@
+package com.kingtom.lightflow.approvalimpl.content;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/2/21 16:17
+ */
+public interface IContentHandler {
+}

+ 38 - 0
src/main/java/com/kingtom/lightflow/approvalimpl/handler/EndEventHandler.java

@@ -0,0 +1,38 @@
+package com.kingtom.lightflow.approvalimpl.handler;
+
+import com.kingtom.lightflow.engine.FlowEngineConst;
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.lightflow.engine.cxt.FlowInput;
+import com.kingtom.lightflow.engine.cxt.FlowOutput;
+import com.kingtom.lightflow.engine.ext.IFlowObjectHandler;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/27 17:25
+ */
+public class EndEventHandler implements IFlowObjectHandler {
+
+    @Override
+    public String defineType() {
+        return FlowEngineConst.Flow_event_end;
+    }
+
+    @Override
+    public void doIn(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+
+    @Override
+    public void doProcess(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+
+    @Override
+    public void doOut(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+}

+ 38 - 0
src/main/java/com/kingtom/lightflow/approvalimpl/handler/MultGatewayHandler.java

@@ -0,0 +1,38 @@
+package com.kingtom.lightflow.approvalimpl.handler;
+
+import com.kingtom.lightflow.engine.FlowEngineConst;
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.lightflow.engine.cxt.FlowInput;
+import com.kingtom.lightflow.engine.cxt.FlowOutput;
+import com.kingtom.lightflow.engine.ext.IFlowObjectHandler;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/27 17:38
+ */
+public class MultGatewayHandler implements IFlowObjectHandler {
+
+    @Override
+    public String defineType() {
+        return FlowEngineConst.Flow_gateway_mult;
+    }
+
+    @Override
+    public void doIn(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+
+    @Override
+    public void doProcess(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+
+    @Override
+    public void doOut(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+}

+ 27 - 0
src/main/java/com/kingtom/lightflow/approvalimpl/handler/SequenceConnectHandler.java

@@ -0,0 +1,27 @@
+package com.kingtom.lightflow.approvalimpl.handler;
+
+import com.kingtom.lightflow.engine.FlowEngineConst;
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.lightflow.engine.ext.IFlowConnectHandler;
+import com.kingtom.kirin.core.common.transfer.Input;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/27 17:39
+ */
+public class SequenceConnectHandler implements IFlowConnectHandler {
+
+    @Override
+    public String defineType() {
+        return FlowEngineConst.Connect_sequence;
+    }
+
+    @Override
+    public String doConnect(FlowContext context, Input input) {
+        return null;
+    }
+}

+ 38 - 0
src/main/java/com/kingtom/lightflow/approvalimpl/handler/ShenpiTaskHandler.java

@@ -0,0 +1,38 @@
+package com.kingtom.lightflow.approvalimpl.handler;
+
+import com.kingtom.lightflow.engine.FlowEngineConst;
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.lightflow.engine.cxt.FlowInput;
+import com.kingtom.lightflow.engine.cxt.FlowOutput;
+import com.kingtom.lightflow.engine.ext.IFlowObjectHandler;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/27 17:27
+ */
+public class ShenpiTaskHandler implements IFlowObjectHandler {
+
+    @Override
+    public String defineType() {
+        return FlowEngineConst.Flow_activity_task_shenpi;
+    }
+
+    @Override
+    public void doIn(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+
+    @Override
+    public void doProcess(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+
+    @Override
+    public void doOut(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+}

+ 38 - 0
src/main/java/com/kingtom/lightflow/approvalimpl/handler/StartEventHandler.java

@@ -0,0 +1,38 @@
+package com.kingtom.lightflow.approvalimpl.handler;
+
+import com.kingtom.lightflow.engine.FlowEngineConst;
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.lightflow.engine.cxt.FlowInput;
+import com.kingtom.lightflow.engine.cxt.FlowOutput;
+import com.kingtom.lightflow.engine.ext.IFlowObjectHandler;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/27 17:25
+ */
+public class StartEventHandler implements IFlowObjectHandler {
+
+    @Override
+    public String defineType() {
+        return FlowEngineConst.Flow_event_start;
+    }
+
+    @Override
+    public void doIn(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+
+    @Override
+    public void doProcess(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+
+    @Override
+    public void doOut(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+}

+ 38 - 0
src/main/java/com/kingtom/lightflow/approvalimpl/handler/XiezuoTaskHandler.java

@@ -0,0 +1,38 @@
+package com.kingtom.lightflow.approvalimpl.handler;
+
+import com.kingtom.lightflow.engine.FlowEngineConst;
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.lightflow.engine.cxt.FlowInput;
+import com.kingtom.lightflow.engine.cxt.FlowOutput;
+import com.kingtom.lightflow.engine.ext.IFlowObjectHandler;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/27 17:26
+ */
+public class XiezuoTaskHandler implements IFlowObjectHandler {
+
+    @Override
+    public String defineType() {
+        return FlowEngineConst.Flow_activity_task_xiezuo;
+    }
+
+    @Override
+    public void doIn(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+
+    @Override
+    public void doProcess(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+
+    @Override
+    public void doOut(FlowContext context, FlowInput input, FlowOutput output) {
+
+    }
+}

+ 106 - 0
src/main/java/com/kingtom/lightflow/engine/FlowEngineConst.java

@@ -0,0 +1,106 @@
+package com.kingtom.lightflow.engine;
+
+import com.kingtom.kirin.core.common.base.IBaseEnum;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/22 16:31
+ */
+public class FlowEngineConst {
+
+    public static final String DEFAULT_CONF = "classpath:flow/flow_core_conf.json";
+
+    public static final String Flow_event_start = "flow:event:start";
+    @Deprecated
+    public static final String Flow_event_mid = "flow:event:mid";
+    public static final String Flow_event_end = "flow:event:end";
+    public static final String Flow_activity_task_shenpi = "flow:activity:task:shenpi";
+    public static final String Flow_activity_task_xiezuo = "flow:activity:task:xiezuo";
+    @Deprecated
+    public static final String Flow_activity_subflow = "flow:activity:subflow";
+    @Deprecated
+    public static final String Flow_gateway_xor = "flow:gateway:xor";
+    @Deprecated
+    public static final String Flow_gateway_para = "flow:gateway:para";
+    public static final String Flow_gateway_mult = "flow:gateway:mult";
+    public static final String Connect_sequence = "connect:sequence";
+    @Deprecated
+    public static final String Connect_message = "connect:message";
+    @Deprecated
+    public static final String Connect_associat = "connect:associat";
+
+    /**
+     * BPMN2.0内容
+     * 1、流对象(Flow Objects):流对象是定义业务流程的主要图形元素,主要有三种流对象
+     * 事件(Events)(开始、中间、结束)
+     * 活动(Activities)(任务、子流程)
+     * 网关(Gateways)(排他网关、并行网关、包容网关)
+     * 2、数据(Data):数据主要通过四种元素表示
+     * 数据对象(Data Objects)
+     * 数据输入(Data Inputs)
+     * 数据输出(Data Outputs)
+     * 数据存储(Data Stores)
+     * 3、连接对象(Connecting Objects):流对象彼此互相连接或者连接到其他信息的方法主要有四种
+     * 顺序流(Sequence Flows)
+     * 信息流(Message Flows)
+     * 协同(Associations)
+     * 数据协同(Data Associations)
+     * 4、泳道(Swimlanes):有两种方式通过泳道对主要的建模元素进行分组
+     * 泳池:Pools
+     * 泳道:Lanes
+     * 5、人工信息(Artifacts):主要用来提供关于流程的额外信息。BPMN2.0定义两种标准Artifacts,但是建模者或者建模工具可以增加任意多Artifacts。(Artifacts,有的地方翻译成“工件”,但是感觉不管翻译成什么都不够传神,所以本文中就不翻译这个词了。)
+     * 组:Group
+     * 文本注释:Text Annotation
+     *
+     * 本期支持内容如下(见上方静态变量)
+     * flow:event:start(开始事件)
+     * flow:event:mid(中间事件)-不支持
+     * flow:event:end(结束事件)
+     * flow:activity:task(任务活动)
+     * flow:activity:task:xxxx(具体任务活动:业务自定义)
+     * flow:activity:subflow(子流程活动)-不支持
+     * flow:gateway:xor(排他网关)-不支持
+     * flow:gateway:para(并行网关)-不支持
+     * flow:gateway:mult(包容网关)
+     * connect:sequence(顺序流)
+     * connect:message(消息流)-不支持
+     * connect:associat(协同)-不支持
+     * 泳道-不支持
+     * 人工信息-不支持
+     */
+    private FlowEngineConst() {}
+
+    public static enum FlowStateEnum implements IBaseEnum<String> {
+        UnDo("UnDo", "未处理"),
+        DoProcess("DoProcess", "处理-进行中"),
+        DoOver("DoOver", "处理-完成"),
+        UnElapsed("UnElapsed", "未经过");
+
+        private String key;
+
+        private String name;
+
+        private FlowStateEnum(String k, String n){
+            this.key = k;
+            this.name = n;
+        }
+
+        @Override
+        public String getKey(){
+            return key;
+        }
+
+        @Override
+        public String getName(){
+            return name;
+        }
+
+        public static FlowStateEnum findEnumByKey(String k){
+            return IBaseEnum.findEnumByKey(FlowStateEnum.class, k);
+        }
+    }
+}

+ 57 - 0
src/main/java/com/kingtom/lightflow/engine/command/AddCommand.java

@@ -0,0 +1,57 @@
+package com.kingtom.lightflow.engine.command;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.kingtom.lightflow.engine.model.biz.FlowDef;
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.kirin.core.common.base.Result;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/7/8 14:56
+ */
+public class AddCommand implements IFlowCommand{
+
+    protected FlowDef flowDef;
+
+    /**
+     * 默认不发布
+     */
+    protected Boolean canPublish = Boolean.FALSE;
+
+    protected Result<String> result;
+
+    public FlowDef getFlowDef() {
+        return flowDef;
+    }
+
+    public void setFlowDef(FlowDef flowDef) {
+        this.flowDef = flowDef;
+    }
+
+    public Boolean getCanPublish() {
+        return canPublish;
+    }
+
+    public void setCanPublish(Boolean canPublish) {
+        if(ObjectUtil.isNotNull(canPublish)) {
+            this.canPublish = canPublish;
+        }
+    }
+
+    public Result<String> getResult() {
+        return result;
+    }
+
+    public void setResult(Result<String> result) {
+        this.result = result;
+    }
+
+    @Override
+    public void execute(FlowContext context) {
+
+    }
+}

+ 52 - 0
src/main/java/com/kingtom/lightflow/engine/command/CheckCommand.java

@@ -0,0 +1,52 @@
+package com.kingtom.lightflow.engine.command;
+
+import com.kingtom.lightflow.engine.model.biz.FlowDef;
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.kirin.core.common.base.Result;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/7/9 18:13
+ */
+public class CheckCommand implements IFlowCommand{
+
+    /**
+     * 待检查的流程定义
+     */
+    protected FlowDef paramFlowDef;
+
+    /**
+     * 是否要做完整性填充
+     */
+    protected Boolean canFill;
+
+    /**
+     * 检查结果
+     */
+    protected Result<Boolean> result;
+
+    public FlowDef getParamFlowDef() {
+        return paramFlowDef;
+    }
+
+    public void setParamFlowDef(FlowDef paramFlowDef) {
+        this.paramFlowDef = paramFlowDef;
+    }
+
+    public Result<Boolean> getResult() {
+        return result;
+    }
+
+    public void setResult(Result<Boolean> result) {
+        this.result = result;
+    }
+
+    @Override
+    public void execute(FlowContext context) {
+
+    }
+}

+ 21 - 0
src/main/java/com/kingtom/lightflow/engine/command/IFlowCommand.java

@@ -0,0 +1,21 @@
+package com.kingtom.lightflow.engine.command;
+
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/7/7 19:57
+ */
+public interface IFlowCommand {
+
+    /**
+     * 流程命令执行
+     * @param context 流程上下文
+     */
+    void execute(FlowContext context);
+
+}

+ 39 - 0
src/main/java/com/kingtom/lightflow/engine/command/PublishCommand.java

@@ -0,0 +1,39 @@
+package com.kingtom.lightflow.engine.command;
+
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.kirin.core.common.base.Result;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/7/8 16:09
+ */
+public class PublishCommand implements IFlowCommand{
+
+    protected String flowDefId;
+
+    protected Result<Boolean> result;
+
+    public String getFlowDefId() {
+        return flowDefId;
+    }
+
+    public void setFlowDefId(String flowDefId) {
+        this.flowDefId = flowDefId;
+    }
+
+    public Result<Boolean> getResult() {
+        return result;
+    }
+
+    public void setResult(Result<Boolean> result) {
+        this.result = result;
+    }
+
+    @Override
+    public void execute(FlowContext context) {
+    }
+}

+ 66 - 0
src/main/java/com/kingtom/lightflow/engine/command/SaveCommand.java

@@ -0,0 +1,66 @@
+package com.kingtom.lightflow.engine.command;
+
+import com.kingtom.lightflow.engine.model.biz.FlowDef;
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.kirin.core.common.base.Result;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/7/9 18:11
+ */
+public class SaveCommand implements IFlowCommand {
+
+    protected FlowDef flowDef;
+
+    protected String flowDefId;
+
+    /**
+     * 默认不发布
+     */
+    protected Boolean canPublish = Boolean.FALSE;
+
+    protected Result<Boolean> result;
+
+    public FlowDef getFlowDef() {
+        return flowDef;
+    }
+
+    public void setFlowDef(FlowDef flowDef) {
+        this.flowDef = flowDef;
+    }
+
+    public String getFlowDefId() {
+        return flowDefId;
+    }
+
+    public void setFlowDefId(String flowDefId) {
+        this.flowDefId = flowDefId;
+    }
+
+    public Boolean getCanPublish() {
+        return canPublish;
+    }
+
+    public void setCanPublish(Boolean canPublish) {
+        this.canPublish = canPublish;
+    }
+
+    public Result<Boolean> getResult() {
+        return result;
+    }
+
+    public void setResult(Result<Boolean> result) {
+        this.result = result;
+    }
+
+    @Override
+    public void execute(FlowContext context) {
+        CheckCommand c = new CheckCommand();
+        context.getFlowEngine().executeCommand(c);
+
+    }
+}

+ 45 - 0
src/main/java/com/kingtom/lightflow/engine/core/FLowConfig.java

@@ -0,0 +1,45 @@
+package com.kingtom.lightflow.engine.core;
+
+import java.util.List;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ * 引擎配置对象
+ * @author King
+ * @since 2024/3/1 15:51
+ */
+public class FLowConfig {
+
+    /**
+     * 流程处理器
+     */
+    protected List<String> flowHandlers;
+
+    /**
+     * 流程存储
+     */
+    protected String flowStorage;
+
+    /**
+     * 流程角色
+     */
+    protected String flowRole;
+
+    public List<String> getFlowHandlers() {
+        return flowHandlers;
+    }
+
+    public void setFlowHandlers(List<String> flowHandlers) {
+        this.flowHandlers = flowHandlers;
+    }
+
+    public String getFlowStorage() {
+        return flowStorage;
+    }
+
+    public void setFlowStorage(String flowStorage) {
+        this.flowStorage = flowStorage;
+    }
+}

+ 52 - 0
src/main/java/com/kingtom/lightflow/engine/core/FlowConfigContainer.java

@@ -0,0 +1,52 @@
+package com.kingtom.lightflow.engine.core;
+
+import cn.hutool.core.lang.Assert;
+import com.kingtom.lightflow.engine.ext.IFlowHandler;
+import com.kingtom.lightflow.engine.ext.IFlowRoleHandler;
+import com.kingtom.lightflow.engine.ext.IFlowStorageHandler;
+import com.kingtom.kirin.core.common.exception.AppException;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/1/9 17:58
+ */
+public class FlowConfigContainer {
+
+    protected IFlowStorageHandler flowStorage;
+    protected Map<String, IFlowHandler> flowHandlerMap = new HashMap<>();
+    protected IFlowRoleHandler flowRoleHandler;
+
+    public IFlowStorageHandler getFlowStorage() {
+        return flowStorage;
+    }
+
+    public void setFlowStorage(IFlowStorageHandler storageHandler) {
+        this.flowStorage = flowStorage;
+    }
+
+    public IFlowHandler findFlowHandler(String flowType) {
+        return flowHandlerMap.get(flowType);
+    }
+
+    public IFlowRoleHandler getFlowRoleHandler() {
+        return flowRoleHandler;
+    }
+
+    public void setFlowRoleHandler(IFlowRoleHandler flowRoleHandler) {
+        this.flowRoleHandler = flowRoleHandler;
+    }
+
+    public void putFlowHandler(IFlowHandler flowHandler) {
+        Assert.isFalse(flowHandler==null,()->new AppException("流程实现不能为空"));
+        Assert.isFalse(flowHandler.defineName()==null,()->new AppException("流程实现不能没有类型名"));
+        Assert.isFalse(flowHandlerMap.containsKey(flowHandler.defineName()),()->new AppException("流程实现冲突").setM(flowHandler.defineName()));
+        flowHandlerMap.put(flowHandler.defineName(),flowHandler);
+    }
+}

+ 42 - 0
src/main/java/com/kingtom/lightflow/engine/core/FlowEngine.java

@@ -0,0 +1,42 @@
+package com.kingtom.lightflow.engine.core;
+
+import com.kingtom.lightflow.engine.command.IFlowCommand;
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.lightflow.engine.cxt.FlowInput;
+import com.kingtom.lightflow.engine.cxt.FlowOutput;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ * 流程引擎
+ * 1、对外对接:流程相关存储、数据相关接口、流程元素(对象、连接)相关接口
+ * 2、对内协作:把对接的东西按照流程的stepTOstep方式运行起来
+ * @author King
+ * @since 2023/12/25 16:19
+ */
+public class FlowEngine {
+
+    protected FlowConfigContainer flowConfigContainer;
+
+    public void setFlowConfigContainer(FlowConfigContainer flowConfigContainer) {
+        this.flowConfigContainer = flowConfigContainer;
+    }
+
+    public void executeCommand(IFlowCommand command) {
+
+    }
+
+    public void executeCommand(IFlowCommand command, FlowInput flowInput, FlowOutput flowOutput) {
+
+    }
+
+    protected FlowContext createContext() {
+        FlowContext r = new FlowContext();
+        r.setFlowDefOperator(null);
+        r.setFlowRunOperator(null);
+        r.setFlowParam(null);
+        return r;
+    }
+
+}

+ 60 - 0
src/main/java/com/kingtom/lightflow/engine/core/FlowEngineFactory.java

@@ -0,0 +1,60 @@
+package com.kingtom.lightflow.engine.core;
+
+import cn.hutool.core.io.resource.ResourceUtil;
+import cn.hutool.core.util.ClassUtil;
+import com.kingtom.lightflow.engine.FlowEngineConst;
+import com.kingtom.lightflow.engine.ext.IFlowHandler;
+import com.kingtom.lightflow.engine.ext.IFlowStorageHandler;
+import com.kingtom.kirin.core.common.exception.AppException;
+import com.kingtom.kirin.core.common.utils.JsonUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.nio.charset.StandardCharsets;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/25 16:19
+ */
+@Slf4j
+public class FlowEngineFactory {
+
+    protected static FlowEngine flowEngine;
+
+    protected static FlowConfigContainer flowConfigContainer;
+
+    public static synchronized FlowEngine getEngine() {
+        if(flowEngine == null) {
+            FlowEngine r = new FlowEngine();
+            FlowConfigContainer configContainer = findHandlerManager();
+            r.setFlowConfigContainer(configContainer);
+            flowEngine = r;
+        }
+        return flowEngine;
+    }
+
+    public static FlowConfigContainer findHandlerManager() {
+        if(flowConfigContainer == null) {
+            try{
+                FlowConfigContainer h = new FlowConfigContainer();
+                String json = ResourceUtil.readStr(FlowEngineConst.DEFAULT_CONF, StandardCharsets.UTF_8);
+                FLowConfig conf = JsonUtils.toObject(json, FLowConfig.class);
+                IFlowStorageHandler s = (IFlowStorageHandler)ClassUtil.loadClass(conf.getFlowStorage()).getDeclaredConstructor().newInstance();
+                h.setFlowStorage(s);
+                for(String handlerStr:conf.getFlowHandlers()) {
+                    IFlowHandler flowHandler = (IFlowHandler)ClassUtil.loadClass(handlerStr).getDeclaredConstructor().newInstance();
+                    h.putFlowHandler(flowHandler);
+                }
+                log.info("流程引擎加载完成:conf="+JsonUtils.toJson(conf));
+                flowConfigContainer = h;
+            } catch (Exception e) {
+                throw new AppException("流程引擎加载错误",e);
+            }
+        }
+        return flowConfigContainer;
+    }
+
+}

+ 110 - 0
src/main/java/com/kingtom/lightflow/engine/cxt/FlowContext.java

@@ -0,0 +1,110 @@
+package com.kingtom.lightflow.engine.cxt;
+
+import com.kingtom.lightflow.engine.core.FlowEngine;
+import com.kingtom.lightflow.engine.ext.IFlowHandler;
+import com.kingtom.lightflow.engine.ext.IFlowRoleHandler;
+import com.kingtom.lightflow.engine.model.operator.FlowDefOperator;
+import com.kingtom.lightflow.engine.model.operator.FlowRunOperator;
+import com.kingtom.lightflow.engine.ext.IFlowStorageHandler;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/27 17:21
+ */
+public class FlowContext {
+
+    /**
+     * 数据:流程常量集合
+     */
+    protected FlowParam flowParam;
+
+    /**
+     * 数据:流程定义操作器
+     */
+    protected FlowDefOperator flowDefOperator;
+
+    /**
+     * 数据:流程实例操作器
+     */
+    protected FlowRunOperator flowRunOperator;
+
+    /**
+     * 数据:当前用户
+     */
+    protected IFlowRoleHandler flowRoleHandler;
+
+    /**
+     * 工具:流程处理器
+     */
+    protected IFlowHandler flowHandler;
+
+    /**
+     * 工具:流程存储
+     */
+    protected IFlowStorageHandler flowStorage;
+
+    /**
+     * 工具:引擎
+     */
+    protected FlowEngine flowEngine;
+
+    public FlowParam getFlowParam() {
+        return flowParam;
+    }
+
+    public void setFlowParam(FlowParam flowParam) {
+        this.flowParam = flowParam;
+    }
+
+    public FlowDefOperator getFlowDefOperator() {
+        return flowDefOperator;
+    }
+
+    public void setFlowDefOperator(FlowDefOperator flowDefOperator) {
+        this.flowDefOperator = flowDefOperator;
+    }
+
+    public FlowRunOperator getFlowRunOperator() {
+        return flowRunOperator;
+    }
+
+    public void setFlowRunOperator(FlowRunOperator flowRunOperator) {
+        this.flowRunOperator = flowRunOperator;
+    }
+
+    public IFlowHandler getFlowHandler() {
+        return flowHandler;
+    }
+
+    public void setFlowHandler(IFlowHandler flowHandler) {
+        this.flowHandler = flowHandler;
+    }
+
+    public IFlowStorageHandler getFlowStorage() {
+        return flowStorage;
+    }
+
+    public void setFlowStorage(IFlowStorageHandler flowStorage) {
+        this.flowStorage = flowStorage;
+    }
+
+    public IFlowRoleHandler getFlowRoleHandler() {
+        return flowRoleHandler;
+    }
+
+    public void setFlowRoleHandler(IFlowRoleHandler flowRoleHandler) {
+        this.flowRoleHandler = flowRoleHandler;
+    }
+
+    public FlowEngine getFlowEngine() {
+        return flowEngine;
+    }
+
+    public void setFlowEngine(FlowEngine flowEngine) {
+        this.flowEngine = flowEngine;
+    }
+}

+ 54 - 0
src/main/java/com/kingtom/lightflow/engine/cxt/FlowInput.java

@@ -0,0 +1,54 @@
+package com.kingtom.lightflow.engine.cxt;
+
+import com.kingtom.kirin.core.common.transfer.Input;
+import com.kingtom.kirin.core.common.transfer.normal.MapInput;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/8 20:07
+ */
+public class FlowInput extends MapInput implements Input {
+
+    /**
+     * 请求的类型:Action_V_Do=做请求;Action_V_Pre=做请求准备
+     */
+    public static final String Action_K = "Action";
+    public static final String Action_V_Do = "Do";
+    public static final String Action_V_Pre = "Pre";
+
+    public static final String DefId_K = "DefId";
+
+    public static final String EntryId_K = "EntryId";
+
+    public static final String TaskId_K = "TaskId";
+
+    public FlowInput() {
+        this(Boolean.TRUE);
+    }
+
+    public FlowInput(Boolean doAction) {
+        super();
+        this.findMap().put(Action_K, doAction?Action_V_Do:Action_V_Pre);
+    }
+
+    public Boolean findIsActionDo() {
+        return Action_V_Do.equals(findParam(Action_K));
+    }
+
+    public String findDefId() {
+        return findParam(DefId_K);
+    }
+
+    public String findEntryId() {
+        return findParam(EntryId_K);
+    }
+
+    public String findTaskId() {
+        return findParam(TaskId_K);
+    }
+
+}

+ 15 - 0
src/main/java/com/kingtom/lightflow/engine/cxt/FlowOutput.java

@@ -0,0 +1,15 @@
+package com.kingtom.lightflow.engine.cxt;
+
+import com.kingtom.kirin.core.common.transfer.Output;
+import com.kingtom.kirin.core.common.transfer.normal.MapOutput;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/8 20:08
+ */
+public class FlowOutput extends MapOutput implements Output {
+}

+ 39 - 0
src/main/java/com/kingtom/lightflow/engine/cxt/FlowParam.java

@@ -0,0 +1,39 @@
+package com.kingtom.lightflow.engine.cxt;
+
+import java.text.MessageFormat;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/27 17:21
+ */
+public class FlowParam {
+
+    private Map<String,ParamStruct> attr = new LinkedHashMap<>();
+
+    public static final String ATTR_GLOBAL = "global";
+    public static final String ATTR_ELEMENT = "e_{0}";
+    public static final String ATTR_TMP = "tmp";
+
+    public ParamStruct findGlobalParam() {
+        return attr.get(ATTR_GLOBAL);
+    }
+
+    public ParamStruct findElementParam(String id) {
+        return attr.get(formatKey(id));
+    }
+
+    protected ParamStruct findEmpParam() {
+        return attr.get(ATTR_TMP);
+    }
+
+    protected String formatKey(String id) {
+        return MessageFormat.format(ATTR_ELEMENT,id);
+    }
+
+}

+ 55 - 0
src/main/java/com/kingtom/lightflow/engine/cxt/FlowResult.java

@@ -0,0 +1,55 @@
+package com.kingtom.lightflow.engine.cxt;
+
+import com.kingtom.lightflow.engine.FlowEngineConst;
+import com.kingtom.lightflow.engine.model.bean.FlowDefInfo;
+import com.kingtom.kirin.core.common.transfer.Output;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/3/15 14:59
+ */
+public class FlowResult {
+
+    /**
+     * 流程信息
+     */
+    protected FlowDefInfo flowInfo;
+
+    /**
+     * 流程状态
+     */
+    protected FlowEngineConst.FlowStateEnum flowState;
+
+    /**
+     * 流程结果
+     */
+    protected Output output;
+
+    public FlowDefInfo getFlowInfo() {
+        return flowInfo;
+    }
+
+    public void setFlowInfo(FlowDefInfo flowInfo) {
+        this.flowInfo = flowInfo;
+    }
+
+    public FlowEngineConst.FlowStateEnum getFlowState() {
+        return flowState;
+    }
+
+    public void setFlowState(FlowEngineConst.FlowStateEnum flowState) {
+        this.flowState = flowState;
+    }
+
+    public Output getOutput() {
+        return output;
+    }
+
+    public void setOutput(Output output) {
+        this.output = output;
+    }
+}

+ 41 - 0
src/main/java/com/kingtom/lightflow/engine/cxt/ParamStruct.java

@@ -0,0 +1,41 @@
+package com.kingtom.lightflow.engine.cxt;
+
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonAnySetter;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/1/16 15:01
+ */
+public class ParamStruct {
+
+    protected Map<String,Object> attr = new LinkedHashMap<>();
+
+    @JsonAnyGetter
+    public Map<String, Object> getAttr() {
+        return attr;
+    }
+
+    public void setAttr(Map<String, Object> attr) {
+        this.attr.clear();
+        if(attr != null) {
+            this.attr.putAll(attr);
+        }
+    }
+
+    @JsonAnySetter
+    public void addAttr(String k, Object o) {
+        this.attr.put(k,o);
+    }
+
+    public <T> T findAttr(String k) {
+        return (T)this.attr.get(k);
+    }
+}

+ 16 - 0
src/main/java/com/kingtom/lightflow/engine/event/FlowDesignEvent.java

@@ -0,0 +1,16 @@
+package com.kingtom.lightflow.engine.event;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/5 14:02
+ */
+public class FlowDesignEvent extends FlowEvent{
+
+    public FlowDesignEvent(Object source) {
+        super(source);
+    }
+}

+ 18 - 0
src/main/java/com/kingtom/lightflow/engine/event/FlowEvent.java

@@ -0,0 +1,18 @@
+package com.kingtom.lightflow.engine.event;
+
+import com.kingtom.kirin.core.event.model.AppEvent;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ * 流程总体事件
+ * @author King
+ * @since 2024/5/5 14:00
+ */
+public class FlowEvent extends AppEvent {
+
+    public FlowEvent(Object source) {
+        super(source);
+    }
+}

+ 16 - 0
src/main/java/com/kingtom/lightflow/engine/event/FlowRunEvent.java

@@ -0,0 +1,16 @@
+package com.kingtom.lightflow.engine.event;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/5 14:02
+ */
+public class FlowRunEvent extends FlowEvent{
+
+    public FlowRunEvent(Object source) {
+        super(source);
+    }
+}

+ 30 - 0
src/main/java/com/kingtom/lightflow/engine/ext/IFlowConnectHandler.java

@@ -0,0 +1,30 @@
+package com.kingtom.lightflow.engine.ext;
+
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.kirin.core.common.transfer.Input;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/26 17:28
+ */
+public interface IFlowConnectHandler {
+
+    /**
+     *  申明自己能够处理的类型
+     * @return 返回自己能够处理的类型
+     */
+    String defineType();
+
+    /**
+     * 连接的处理
+     * @param context 流程上下文
+     * @param input 输入
+     * @return 下一步code
+     */
+    String doConnect(FlowContext context, Input input);
+
+}

+ 41 - 0
src/main/java/com/kingtom/lightflow/engine/ext/IFlowHandler.java

@@ -0,0 +1,41 @@
+package com.kingtom.lightflow.engine.ext;
+
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/1/23 16:40
+ */
+public interface IFlowHandler {
+
+    /**
+     * 申明自己针对的流程类型
+     * @return
+     */
+    String defineName();
+
+    /**
+     * 按照本流程类型填充FlowContext
+     * @param context
+     */
+    void fillFlowContext(FlowContext context);
+
+    /**
+     * 查找节点处理器
+     * @param objectType
+     * @return
+     */
+    IFlowObjectHandler findFlowObjectHandler(String objectType);
+
+    /**
+     * 查找连接处理器
+     * @param connectType
+     * @return
+     */
+    IFlowConnectHandler findFlowConnectHandler(String connectType);
+
+}

+ 47 - 0
src/main/java/com/kingtom/lightflow/engine/ext/IFlowObjectHandler.java

@@ -0,0 +1,47 @@
+package com.kingtom.lightflow.engine.ext;
+
+import com.kingtom.lightflow.engine.cxt.FlowContext;
+import com.kingtom.lightflow.engine.cxt.FlowInput;
+import com.kingtom.lightflow.engine.cxt.FlowOutput;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/26 17:27
+ */
+public interface IFlowObjectHandler {
+
+    /**
+     *  申明自己能够处理的类型
+     * @return 自己能够处理的类型
+     */
+    String defineType();
+
+    /**
+     * 节点进入时
+     * @param context 流程上下文
+     * @param input 输入
+     * @param output 输出
+     */
+    void doIn(FlowContext context, FlowInput input, FlowOutput output);
+
+    /**
+     * 节点处理
+     * @param context 流程上下文
+     * @param input 输入
+     * @param output 输出
+     */
+    void doProcess(FlowContext context, FlowInput input, FlowOutput output);
+
+    /**
+     * 节点退出时
+     * @param context 流程上下文
+     * @param input 输入
+     * @param output 输出
+     */
+    void doOut(FlowContext context, FlowInput input, FlowOutput output);
+
+}

+ 12 - 0
src/main/java/com/kingtom/lightflow/engine/ext/IFlowRoleHandler.java

@@ -0,0 +1,12 @@
+package com.kingtom.lightflow.engine.ext;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/12 14:14
+ */
+public interface IFlowRoleHandler {
+}

+ 30 - 0
src/main/java/com/kingtom/lightflow/engine/ext/IFlowStorageHandler.java

@@ -0,0 +1,30 @@
+package com.kingtom.lightflow.engine.ext;
+
+import com.kingtom.lightflow.engine.model.biz.FlowDef;
+
+import java.util.concurrent.Flow;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/26 17:33
+ */
+public interface IFlowStorageHandler {
+
+    void saveFlowDef(FlowDef flowDef);
+
+    FlowDef findFlowByCode(String flowCode);
+
+    void saveFlowEntry(String flowCode);
+
+    /**
+     * 根据实例ID获取存储的流程实例
+     * @param entryId
+     * @return
+     */
+    Flow findFlowEntryById(String entryId);
+
+}

+ 85 - 0
src/main/java/com/kingtom/lightflow/engine/model/bean/FlowDefConnect.java

@@ -0,0 +1,85 @@
+package com.kingtom.lightflow.engine.model.bean;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/25 17:26
+ */
+public class FlowDefConnect {
+
+    protected String id;
+    protected String code;
+    protected String name;
+    protected String handler;
+    protected String srcNode;
+    protected String tarNode;
+    protected String flowId;
+    protected String flowCode;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getHandler() {
+        return handler;
+    }
+
+    public void setHandler(String handler) {
+        this.handler = handler;
+    }
+
+    public String getSrcNode() {
+        return srcNode;
+    }
+
+    public void setSrcNode(String srcNode) {
+        this.srcNode = srcNode;
+    }
+
+    public String getTarNode() {
+        return tarNode;
+    }
+
+    public void setTarNode(String tarNode) {
+        this.tarNode = tarNode;
+    }
+
+    public String getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
+
+    public String getFlowCode() {
+        return flowCode;
+    }
+
+    public void setFlowCode(String flowCode) {
+        this.flowCode = flowCode;
+    }
+}

+ 112 - 0
src/main/java/com/kingtom/lightflow/engine/model/bean/FlowDefInfo.java

@@ -0,0 +1,112 @@
+package com.kingtom.lightflow.engine.model.bean;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/1/5 15:32
+ */
+public class FlowDefInfo {
+
+    protected String id;
+    protected String code;
+    protected String group;
+    protected String name;
+    protected String handler;
+    protected String type;
+    protected String version;
+    protected String defId;
+    protected String defCode;
+    protected String sourceId;
+    protected String sourceCode;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getGroup() {
+        return group;
+    }
+
+    public void setGroup(String group) {
+        this.group = group;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getHandler() {
+        return handler;
+    }
+
+    public void setHandler(String handler) {
+        this.handler = handler;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getDefId() {
+        return defId;
+    }
+
+    public void setDefId(String defId) {
+        this.defId = defId;
+    }
+
+    public String getDefCode() {
+        return defCode;
+    }
+
+    public void setDefCode(String defCode) {
+        this.defCode = defCode;
+    }
+
+    public String getSourceId() {
+        return sourceId;
+    }
+
+    public void setSourceId(String sourceId) {
+        this.sourceId = sourceId;
+    }
+
+    public String getSourceCode() {
+        return sourceCode;
+    }
+
+    public void setSourceCode(String sourceCode) {
+        this.sourceCode = sourceCode;
+    }
+}

+ 67 - 0
src/main/java/com/kingtom/lightflow/engine/model/bean/FlowDefNode.java

@@ -0,0 +1,67 @@
+package com.kingtom.lightflow.engine.model.bean;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/25 17:25
+ */
+public class FlowDefNode {
+
+    protected String id;
+    protected String code;
+    protected String name;
+    protected String handler;
+    protected String flowId;
+    protected String flowCode;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getHandler() {
+        return handler;
+    }
+
+    public void setHandler(String handler) {
+        this.handler = handler;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
+
+    public String getFlowCode() {
+        return flowCode;
+    }
+
+    public void setFlowCode(String flowCode) {
+        this.flowCode = flowCode;
+    }
+}

+ 112 - 0
src/main/java/com/kingtom/lightflow/engine/model/bean/FlowDefVar.java

@@ -0,0 +1,112 @@
+package com.kingtom.lightflow.engine.model.bean;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/1/5 15:34
+ */
+public class FlowDefVar {
+
+    protected String key;
+    protected String name;
+    protected String value;
+    protected String meta;
+    protected String type;
+    protected String time;
+    protected String scope;
+    protected String flowId;
+    protected String flowCode;
+    protected String elementId;
+    protected String elementCode;
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getMeta() {
+        return meta;
+    }
+
+    public void setMeta(String meta) {
+        this.meta = meta;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getTime() {
+        return time;
+    }
+
+    public void setTime(String time) {
+        this.time = time;
+    }
+
+    public String getScope() {
+        return scope;
+    }
+
+    public void setScope(String scope) {
+        this.scope = scope;
+    }
+
+    public String getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
+
+    public String getFlowCode() {
+        return flowCode;
+    }
+
+    public void setFlowCode(String flowCode) {
+        this.flowCode = flowCode;
+    }
+
+    public String getElementId() {
+        return elementId;
+    }
+
+    public void setElementId(String elementId) {
+        this.elementId = elementId;
+    }
+
+    public String getElementCode() {
+        return elementCode;
+    }
+
+    public void setElementCode(String elementCode) {
+        this.elementCode = elementCode;
+    }
+}

+ 103 - 0
src/main/java/com/kingtom/lightflow/engine/model/bean/FlowRunBranch.java

@@ -0,0 +1,103 @@
+package com.kingtom.lightflow.engine.model.bean;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/31 16:05
+ */
+public class FlowRunBranch {
+
+    protected String id;
+    protected String flowId;
+    protected String flowInsId;
+    protected String parentInsId;
+    protected String startElementIns;
+    protected String endElementIns;
+    protected String mainFlag;
+    protected String elementIns;
+    protected String elementInsState;
+    protected String state;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
+
+    public String getFlowInsId() {
+        return flowInsId;
+    }
+
+    public void setFlowInsId(String flowInsId) {
+        this.flowInsId = flowInsId;
+    }
+
+    public String getParentInsId() {
+        return parentInsId;
+    }
+
+    public void setParentInsId(String parentInsId) {
+        this.parentInsId = parentInsId;
+    }
+
+    public String getStartElementIns() {
+        return startElementIns;
+    }
+
+    public void setStartElementIns(String startElementIns) {
+        this.startElementIns = startElementIns;
+    }
+
+    public String getEndElementIns() {
+        return endElementIns;
+    }
+
+    public void setEndElementIns(String endElementIns) {
+        this.endElementIns = endElementIns;
+    }
+
+    public String getMainFlag() {
+        return mainFlag;
+    }
+
+    public void setMainFlag(String mainFlag) {
+        this.mainFlag = mainFlag;
+    }
+
+    public String getElementIns() {
+        return elementIns;
+    }
+
+    public void setElementIns(String elementIns) {
+        this.elementIns = elementIns;
+    }
+
+    public String getElementInsState() {
+        return elementInsState;
+    }
+
+    public void setElementInsState(String elementInsState) {
+        this.elementInsState = elementInsState;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+}

+ 85 - 0
src/main/java/com/kingtom/lightflow/engine/model/bean/FlowRunElement.java

@@ -0,0 +1,85 @@
+package com.kingtom.lightflow.engine.model.bean;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/31 16:06
+ */
+public class FlowRunElement {
+
+    protected String id;
+    protected String flowId;
+    protected String flowInsId;
+    protected String branchInsId;
+    protected String elementId;
+    protected String name;
+    protected String sequence;
+    protected String reason;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
+
+    public String getFlowInsId() {
+        return flowInsId;
+    }
+
+    public void setFlowInsId(String flowInsId) {
+        this.flowInsId = flowInsId;
+    }
+
+    public String getBranchInsId() {
+        return branchInsId;
+    }
+
+    public void setBranchInsId(String branchInsId) {
+        this.branchInsId = branchInsId;
+    }
+
+    public String getElementId() {
+        return elementId;
+    }
+
+    public void setElementId(String elementId) {
+        this.elementId = elementId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getSequence() {
+        return sequence;
+    }
+
+    public void setSequence(String sequence) {
+        this.sequence = sequence;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+}

+ 112 - 0
src/main/java/com/kingtom/lightflow/engine/model/bean/FlowRunLog.java

@@ -0,0 +1,112 @@
+package com.kingtom.lightflow.engine.model.bean;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/31 16:06
+ */
+public class FlowRunLog {
+
+    protected String id;
+    protected String flowId;
+    protected String flowInsId;
+    protected String branchInsId;
+    protected String elementInsId;
+    protected String executeType;
+    protected String executeId;
+    protected String type;
+    protected String relational;
+    protected String summary;
+    protected String content;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
+
+    public String getFlowInsId() {
+        return flowInsId;
+    }
+
+    public void setFlowInsId(String flowInsId) {
+        this.flowInsId = flowInsId;
+    }
+
+    public String getBranchInsId() {
+        return branchInsId;
+    }
+
+    public void setBranchInsId(String branchInsId) {
+        this.branchInsId = branchInsId;
+    }
+
+    public String getElementInsId() {
+        return elementInsId;
+    }
+
+    public void setElementInsId(String elementInsId) {
+        this.elementInsId = elementInsId;
+    }
+
+    public String getExecuteType() {
+        return executeType;
+    }
+
+    public void setExecuteType(String executeType) {
+        this.executeType = executeType;
+    }
+
+    public String getExecuteId() {
+        return executeId;
+    }
+
+    public void setExecuteId(String executeId) {
+        this.executeId = executeId;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getRelational() {
+        return relational;
+    }
+
+    public void setRelational(String relational) {
+        this.relational = relational;
+    }
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+}

+ 67 - 0
src/main/java/com/kingtom/lightflow/engine/model/bean/FlowRunTask.java

@@ -0,0 +1,67 @@
+package com.kingtom.lightflow.engine.model.bean;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/12 13:56
+ */
+public class FlowRunTask {
+
+    protected String id;
+    protected String flowId;
+    protected String flowInsId;
+    protected String branchInsId;
+    protected String elementInsId;
+    protected String role;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getFlowId() {
+        return flowId;
+    }
+
+    public void setFlowId(String flowId) {
+        this.flowId = flowId;
+    }
+
+    public String getFlowInsId() {
+        return flowInsId;
+    }
+
+    public void setFlowInsId(String flowInsId) {
+        this.flowInsId = flowInsId;
+    }
+
+    public String getBranchInsId() {
+        return branchInsId;
+    }
+
+    public void setBranchInsId(String branchInsId) {
+        this.branchInsId = branchInsId;
+    }
+
+    public String getElementInsId() {
+        return elementInsId;
+    }
+
+    public void setElementInsId(String elementInsId) {
+        this.elementInsId = elementInsId;
+    }
+
+    public String getRole() {
+        return role;
+    }
+
+    public void setRole(String role) {
+        this.role = role;
+    }
+}

+ 58 - 0
src/main/java/com/kingtom/lightflow/engine/model/bean/FlowRunVar.java

@@ -0,0 +1,58 @@
+package com.kingtom.lightflow.engine.model.bean;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/31 16:06
+ */
+public class FlowRunVar {
+
+    protected String id;
+    protected String varId;
+    protected String key;
+    protected String name;
+    protected String value;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getVarId() {
+        return varId;
+    }
+
+    public void setVarId(String varId) {
+        this.varId = varId;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}

+ 68 - 0
src/main/java/com/kingtom/lightflow/engine/model/biz/FlowDef.java

@@ -0,0 +1,68 @@
+package com.kingtom.lightflow.engine.model.biz;
+
+import cn.hutool.core.collection.ListUtil;
+import com.kingtom.lightflow.engine.model.bean.FlowDefConnect;
+import com.kingtom.lightflow.engine.model.bean.FlowDefInfo;
+import com.kingtom.lightflow.engine.model.bean.FlowDefNode;
+import com.kingtom.lightflow.engine.model.bean.FlowDefVar;
+import com.kingtom.kirin.core.common.utils.JsonUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ * 流程定义对象
+ * @author King
+ * @since 2023/12/22 16:30
+ */
+public class FlowDef {
+
+    protected FlowDefInfo info;
+    protected List<FlowDefVar> confs = new ArrayList<>();
+    protected List<FlowDefNode> objects = new ArrayList<>();
+    protected List<FlowDefConnect> connects = new ArrayList<>();
+
+    public FlowDefInfo getInfo() {
+        return info;
+    }
+
+    public void setInfo(FlowDefInfo info) {
+        this.info = info;
+    }
+
+    public List<FlowDefVar> getConfs() {
+        return confs;
+    }
+
+    public void setConfs(List<FlowDefVar> confs) {
+        this.confs.clear();
+        if(confs != null) {
+            this.confs.addAll(JsonUtils.toObjectTypeList(confs, ListUtil.toList(), FlowDefVar.class));
+        }
+    }
+
+    public List<FlowDefNode> getObjects() {
+        return objects;
+    }
+
+    public void setObjects(List<FlowDefNode> objects) {
+        this.objects.clear();
+        if(objects != null) {
+            this.objects.addAll(JsonUtils.toObjectTypeList(objects, ListUtil.toList(), FlowDefNode.class));
+        }
+    }
+
+    public List<FlowDefConnect> getConnects() {
+        return connects;
+    }
+
+    public void setConnects(List<FlowDefConnect> connects) {
+        this.connects.clear();
+        if(connects != null) {
+            this.connects.addAll(JsonUtils.toObjectTypeList(connects, ListUtil.toList(), FlowDefConnect.class));
+        }
+    }
+}

+ 40 - 0
src/main/java/com/kingtom/lightflow/engine/model/biz/FlowRole.java

@@ -0,0 +1,40 @@
+package com.kingtom.lightflow.engine.model.biz;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/12 14:05
+ */
+public class FlowRole {
+
+    protected String id;
+    protected String code;
+    protected String support;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getSupport() {
+        return support;
+    }
+
+    public void setSupport(String support) {
+        this.support = support;
+    }
+}

+ 12 - 0
src/main/java/com/kingtom/lightflow/engine/model/biz/FlowRun.java

@@ -0,0 +1,12 @@
+package com.kingtom.lightflow.engine.model.biz;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/7/22 15:26
+ */
+public class FlowRun {
+}

+ 70 - 0
src/main/java/com/kingtom/lightflow/engine/model/operator/FlowDefOperator.java

@@ -0,0 +1,70 @@
+package com.kingtom.lightflow.engine.model.operator;
+
+import com.kingtom.lightflow.engine.FlowEngineConst;
+import com.kingtom.lightflow.engine.model.bean.FlowDefConnect;
+import com.kingtom.lightflow.engine.model.biz.FlowDef;
+import com.kingtom.lightflow.engine.model.bean.FlowDefInfo;
+import com.kingtom.lightflow.engine.model.bean.FlowDefNode;
+import com.kingtom.lightflow.engine.utils.FlowEngineUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/26 17:36
+ */
+public class FlowDefOperator {
+
+    protected FlowDef flowDef;
+
+    public FlowDefOperator(FlowDef def) {
+        this.flowDef = def;
+    }
+
+    public String toJson() {
+        return FlowEngineUtils.parseJson(flowDef);
+    }
+
+    /*** 流程定义查询类接口 **/
+    public FlowDefInfo findFlowInfoDef() {
+        return flowDef.getInfo();
+    }
+
+    public FlowDefNode findFlowObjectOfStart() {
+        return findFlowObject(FlowEngineConst.Flow_event_start);
+    }
+
+    public FlowDefNode findFlowObject(String code) {
+        return flowDef.getObjects().stream().filter(o->code.equals(o.getCode())).findFirst().orElse(null);
+    }
+
+    public FlowDefConnect findFlowConnect(String code) {
+        return flowDef.getConnects().stream().filter(o->code.equals(o.getCode())).findFirst().orElse(null);
+    }
+
+    public List<FlowDefConnect> findFlowConnectsOfNext(FlowDefNode odef) {
+        List<FlowDefConnect> r = new ArrayList<>();
+        String code = odef.getCode();
+        for(FlowDefConnect connectDef : flowDef.getConnects()) {
+            if(connectDef.getSrcNode().equals(code)) {
+                r.add(connectDef);
+            }
+        }
+        return r;
+    }
+
+    /*** 流程定义修改类接口 **/
+
+    public void clearModify() {
+    }
+
+    public boolean isModify() {
+        return true;
+    }
+
+}

+ 21 - 0
src/main/java/com/kingtom/lightflow/engine/model/operator/FlowRunOperator.java

@@ -0,0 +1,21 @@
+package com.kingtom.lightflow.engine.model.operator;
+
+import com.kingtom.lightflow.engine.model.biz.FlowRun;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/28 17:48
+ */
+public class FlowRunOperator {
+
+    protected FlowRun flowRun;
+
+    public FlowRunOperator(FlowRun flowRun) {
+        this.flowRun = flowRun;
+    }
+
+}

+ 46 - 0
src/main/java/com/kingtom/lightflow/engine/utils/FlowEngineMapper.java

@@ -0,0 +1,46 @@
+package com.kingtom.lightflow.engine.utils;
+
+import com.kingtom.lightflow.engine.model.bean.FlowDefConnect;
+import com.kingtom.lightflow.engine.model.bean.FlowDefInfo;
+import com.kingtom.lightflow.engine.model.bean.FlowDefNode;
+import com.kingtom.lightflow.engine.model.bean.FlowDefVar;
+import com.kingtom.lightflow.engine.model.biz.FlowDef;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/2/27 16:40
+ */
+@Mapper
+public interface FlowEngineMapper {
+
+    public static final FlowEngineMapper INSTANCT = Mappers.getMapper(FlowEngineMapper.class);
+
+    default FlowDef convert(FlowDef bean) {
+        FlowDef r = new FlowDef();
+        r.setInfo(convert(bean.getInfo()));
+        for(FlowDefNode objectDef: bean.getObjects()) {
+            r.getObjects().add(convert(objectDef));
+        }
+        for(FlowDefConnect connectDef: bean.getConnects()) {
+            r.getConnects().add(convert(connectDef));
+        }
+        for(FlowDefVar confDef: bean.getConfs()) {
+            r.getConfs().add(convert(confDef));
+        }
+        return r;
+    }
+
+    FlowDefInfo convert(FlowDefInfo bean);
+
+    FlowDefNode convert(FlowDefNode bean);
+
+    FlowDefConnect convert(FlowDefConnect bean);
+
+    FlowDefVar convert(FlowDefVar bean);
+}

+ 44 - 0
src/main/java/com/kingtom/lightflow/engine/utils/FlowEngineUtils.java

@@ -0,0 +1,44 @@
+package com.kingtom.lightflow.engine.utils;
+
+import com.kingtom.lightflow.engine.model.biz.FlowDef;
+import com.kingtom.lightflow.engine.model.operator.FlowDefOperator;
+import com.kingtom.kirin.core.common.exception.AppException;
+import com.kingtom.kirin.core.common.utils.JsonUtils;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2023 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2023/12/26 17:31
+ */
+public class FlowEngineUtils {
+
+    private FlowEngineUtils(){}
+
+    public static FlowDef copyBean(FlowDef bean) {
+        return FlowEngineMapper.INSTANCT.convert(bean);
+    }
+
+    public static FlowDefOperator pareseDefOperator(String flowJson){
+        FlowDef def = parseDef(flowJson);
+        return new FlowDefOperator(def);
+    }
+
+    public static FlowDefOperator pareseDefOperator(FlowDef flowDef){
+        return new FlowDefOperator(flowDef);
+    }
+
+    public static FlowDef parseDef(String flowDefJson) {
+        try{
+            return JsonUtils.toObject(flowDefJson, FlowDef.class);
+        } catch (Exception e) {
+            throw new AppException("解析流程JSON错误",e);
+        }
+    }
+
+    public static String parseJson(FlowDef flowDef) {
+        return JsonUtils.toJson(flowDef);
+    }
+}

+ 57 - 0
src/main/java/com/kingtom/lightflow/engineimpl/service/FlowDesignServiceImpl.java

@@ -0,0 +1,57 @@
+package com.kingtom.lightflow.engineimpl.service;
+
+import com.kingtom.lightflow.engine.model.biz.FlowDef;
+import com.kingtom.lightflow.engine.command.AddCommand;
+import com.kingtom.lightflow.engine.command.CheckCommand;
+import com.kingtom.lightflow.engine.command.PublishCommand;
+import com.kingtom.lightflow.engine.command.SaveCommand;
+import com.kingtom.lightflow.engine.core.FlowEngine;
+import com.kingtom.kirin.core.common.base.Result;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/7/8 17:52
+ */
+public class FlowDesignServiceImpl implements IFlowDesignService{
+
+    protected FlowEngine flowEngine;
+
+    @Override
+    public Result<Boolean> doCheck(FlowDef flowDef) {
+        CheckCommand c = new CheckCommand();
+        c.setParamFlowDef(flowDef);
+        flowEngine.executeCommand(c);
+        return c.getResult();
+    }
+
+    @Override
+    public Result<String> doAdd(FlowDef flowDef, Boolean doPublish) {
+        AddCommand c = new AddCommand();
+        c.setFlowDef(flowDef);
+        c.setCanPublish(doPublish);
+        flowEngine.executeCommand(c);
+        return c.getResult();
+    }
+
+    @Override
+    public Result<Boolean> doPublish(String defId) {
+        PublishCommand c = new PublishCommand();
+        c.setFlowDefId(defId);
+        flowEngine.executeCommand(c);
+        return c.getResult();
+    }
+
+    @Override
+    public Result<Boolean> doSave(String defId, FlowDef flowDef, Boolean doPublish) {
+        SaveCommand c = new SaveCommand();
+        c.setFlowDef(flowDef);
+        c.setFlowDefId(defId);
+        c.setCanPublish(doPublish);
+        flowEngine.executeCommand(c);
+        return c.getResult();
+    }
+}

+ 36 - 0
src/main/java/com/kingtom/lightflow/engineimpl/service/FlowRunServiceImpl.java

@@ -0,0 +1,36 @@
+package com.kingtom.lightflow.engineimpl.service;
+
+import com.kingtom.lightflow.engine.cxt.FlowOutput;
+import com.kingtom.kirin.core.common.transfer.Input;
+import com.kingtom.kirin.core.common.transfer.Output;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/9/9 17:45
+ */
+public class FlowRunServiceImpl implements IFlowRunService{
+
+    @Override
+    public FlowOutput doStart(String defId, Input input, Output output) {
+        return null;
+    }
+
+    @Override
+    public FlowOutput doStop(String entryId, Input input, Output output) {
+        return null;
+    }
+
+    @Override
+    public FlowOutput doPause(String entryId, Input input, Output output) {
+        return null;
+    }
+
+    @Override
+    public FlowOutput doTask(String taskId, Input input, Output output) {
+        return null;
+    }
+}

+ 47 - 0
src/main/java/com/kingtom/lightflow/engineimpl/service/IFlowDesignService.java

@@ -0,0 +1,47 @@
+package com.kingtom.lightflow.engineimpl.service;
+
+import com.kingtom.lightflow.engine.model.biz.FlowDef;
+import com.kingtom.kirin.core.common.base.Result;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/8 15:03
+ */
+public interface IFlowDesignService {
+
+    /**
+     * 检查流程定义
+     * @param flowDef 流程定义
+     * @return 检查结果(尽量不抛出异常,用结果返回)
+     */
+    Result<Boolean> doCheck(FlowDef flowDef);
+
+    /**
+     * 新增流程
+     * @param flowDef 流程定义
+     * @param doPublish 发布
+     * @return 流程ID
+     */
+    Result<String> doAdd(FlowDef flowDef, Boolean doPublish);
+
+    /**
+     * 发布流程
+     * @param defId 流程ID
+     * @return 流程ID
+     */
+    Result<Boolean> doPublish(String defId);
+
+    /**
+     * 修改并保存已存在的流程定义
+     * @param defId 流程ID
+     * @param flowDef 流程定义
+     * @param doPublish 是否发布
+     * @return 流程ID
+     */
+    Result<Boolean> doSave(String defId, FlowDef flowDef, Boolean doPublish);
+
+}

+ 49 - 0
src/main/java/com/kingtom/lightflow/engineimpl/service/IFlowRunService.java

@@ -0,0 +1,49 @@
+package com.kingtom.lightflow.engineimpl.service;
+
+import com.kingtom.lightflow.engine.cxt.FlowOutput;
+import com.kingtom.kirin.core.common.transfer.Input;
+import com.kingtom.kirin.core.common.transfer.Output;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/5/8 15:04
+ */
+public interface IFlowRunService {
+
+    /**
+     * 启动一个流程实例
+     * @param defId 流程定义ID
+     * @param input 参数集合
+     * @param output 结果反馈
+     */
+    FlowOutput doStart(String defId, Input input, Output output);
+
+    /**
+     * 停止一个流程实例
+     * @param entryId 流程实例ID
+     * @param input 参数集合
+     * @param output 结果反馈
+     */
+    FlowOutput doStop(String entryId, Input input, Output output);
+
+    /**
+     * 暂停一个流程实例
+     * @param entryId 流程实例ID
+     * @param input 参数集合
+     * @param output 结果反馈
+     */
+    FlowOutput doPause(String entryId, Input input, Output output);
+
+    /**
+     * 处理流程任务
+     * @param taskId 流程任务ID
+     * @param input 参数集合
+     * @param output 结果反馈
+     */
+    FlowOutput doTask(String taskId, Input input, Output output);
+
+}

+ 36 - 0
src/main/java/com/kingtom/lightflow/engineimpl/storage/BaseFlowStorageImpl.java

@@ -0,0 +1,36 @@
+package com.kingtom.lightflow.engineimpl.storage;
+
+import com.kingtom.lightflow.engine.model.biz.FlowDef;
+import com.kingtom.lightflow.engine.ext.IFlowStorageHandler;
+
+import java.util.concurrent.Flow;
+
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ *
+ * @author King
+ * @since 2024/3/4 17:55
+ */
+public class BaseFlowStorageImpl implements IFlowStorageHandler {
+    @Override
+    public void saveFlowDef(FlowDef flowDef) {
+
+    }
+
+    @Override
+    public FlowDef findFlowByCode(String flowCode) {
+        return null;
+    }
+
+    @Override
+    public void saveFlowEntry(String flowCode) {
+
+    }
+
+    @Override
+    public Flow findFlowEntryById(String entryId) {
+        return null;
+    }
+}

+ 15 - 0
src/main/java/com/kingtom/lightflow/package-info.java

@@ -0,0 +1,15 @@
+/**
+ * <p>
+ * Copyright: Copyright (C) 2024 KingTom, Inc. All rights reserved. <p>
+ * Company: 成都诚唐科技有限公司<p>
+ * 自研工作流引擎:轻流
+ * 两大部分:流程设计(管理流程逻辑)、流程运行(管理实际运转)
+ * 三个设计基本概念:参数(全局参数,局部参数)、节点(具体任务节点、开始节点、分支节点、结束节点等)、连接(顺序连接、条件连接等)
+ * 三个运行基本概念:运行上下文,事件及监听,处理器
+ * 二个基本逻辑:流程设计bean、流程运行bean
+ * 四大结构:引擎(总),引擎配置工厂(配置引擎相关扩展接口),设计服务,运行服务
+ * 常规扩展:存储扩展,流程扩展(类型、节点、连接)
+ * @author King
+ * @since 2024/4/5 17:03
+ */
+package com.kingtom.lightflow;

+ 89 - 0
src/main/resources/db/V1.15__20241230_initFlow.sql

@@ -0,0 +1,89 @@
+DROP TABLE IF EXISTS "public"."affair_token";
+-- ----------------------------
+-- Table structure for affair_info
+-- ----------------------------
+DROP TABLE IF EXISTS "public"."affair_info";
+CREATE TABLE "public"."affair_info" (
+    "id"               VARCHAR(36) COLLATE "pg_catalog"."default"   NOT NULL PRIMARY KEY,
+    "title"            VARCHAR(256) COLLATE "pg_catalog"."default"  NOT NULL,
+    "summary"          VARCHAR(1024) COLLATE "pg_catalog"."default" NOT NULL,
+    "source_type"      VARCHAR(64) COLLATE "pg_catalog"."default"   NOT NULL,
+    "source_id"        VARCHAR(36) COLLATE "pg_catalog"."default"   NOT NULL,
+    "type"             VARCHAR(64) COLLATE "pg_catalog"."default"   NOT NULL,
+    "data"             TEXT COLLATE "pg_catalog"."default" DEFAULT '{}',
+    "target"           TEXT COLLATE "pg_catalog"."default"          NOT NULL,
+    "action_model"     VARCHAR(1024) COLLATE "pg_catalog"."default" NOT NULL,
+    "effect_model"     VARCHAR(1024) COLLATE "pg_catalog"."default" NOT NULL,
+    "effect_condition" VARCHAR(65534) COLLATE "pg_catalog"."default",
+    "important"        VARCHAR(64) COLLATE "pg_catalog"."default"   NOT NULL,
+    "urgent"           VARCHAR(64) COLLATE "pg_catalog"."default"   NOT NULL,
+    "state"            int4                                         NOT NULL,
+    "full_name"        VARCHAR(65534) COLLATE "pg_catalog"."default",
+    "group_name"       VARCHAR(1024) COLLATE "pg_catalog"."default",
+    "affair_token"     VARCHAR(65534) COLLATE "pg_catalog"."default",
+    "affair_url"       VARCHAR(1024) COLLATE "pg_catalog"."default",
+    "ext1"             VARCHAR(1024) COLLATE "pg_catalog"."default",
+    "ext2"             VARCHAR(1024) COLLATE "pg_catalog"."default",
+    "ext3"             TEXT COLLATE "pg_catalog"."default" DEFAULT '{}',
+    "gmt_create"       TIMESTAMP(3)                                 NOT NULL,
+    "gmt_modified"     TIMESTAMP(3)                                 NOT NULL,
+    "sys_id"           VARCHAR(36) COLLATE "pg_catalog"."default"   NOT NULL
+);
+COMMENT ON TABLE "public"."affair_info" IS '事项表';
+COMMENT ON COLUMN "public"."affair_info"."id" IS '主键';
+COMMENT ON COLUMN "public"."affair_info"."title" IS '事项标题';
+COMMENT ON COLUMN "public"."affair_info"."summary" IS '事项摘要描述';
+COMMENT ON COLUMN "public"."affair_info"."source_type" IS '事项来源类型';
+COMMENT ON COLUMN "public"."affair_info"."source_id" IS '事项来源Id';
+COMMENT ON COLUMN "public"."affair_info"."type" IS '事项类型';
+COMMENT ON COLUMN "public"."affair_info"."data" IS '业务数据';
+COMMENT ON COLUMN "public"."affair_info"."target" IS '事项接收者';
+COMMENT ON COLUMN "public"."affair_info"."action_model" IS '动作模式';
+COMMENT ON COLUMN "public"."affair_info"."effect_model" IS '生效模式';
+COMMENT ON COLUMN "public"."affair_info"."effect_condition" IS '生效条件';
+COMMENT ON COLUMN "public"."affair_info"."important" IS '重要程度';
+COMMENT ON COLUMN "public"."affair_info"."urgent" IS '紧急程度';
+COMMENT ON COLUMN "public"."affair_info"."state" IS '事项状态';
+COMMENT ON COLUMN "public"."affair_info"."full_name" IS '事项全称';
+COMMENT ON COLUMN "public"."affair_info"."group_name" IS '事项分组名';
+COMMENT ON COLUMN "public"."affair_info"."affair_token" IS '事项对接业务时的关键字(由业务识别)';
+COMMENT ON COLUMN "public"."affair_info"."affair_url" IS '事项对接的URL';
+COMMENT ON COLUMN "public"."affair_info"."ext1" IS '扩展字段1';
+COMMENT ON COLUMN "public"."affair_info"."ext2" IS '扩展字段2';
+COMMENT ON COLUMN "public"."affair_info"."ext2" IS '扩展字段3';
+COMMENT ON COLUMN "public"."affair_info"."gmt_create" IS '创建时间';
+COMMENT ON COLUMN "public"."affair_info"."gmt_modified" IS '更新时间';
+COMMENT ON COLUMN "public"."affair_info"."sys_id" IS '系统ID';
+
+
+-- ----------------------------
+-- Table structure for affair_member
+-- ----------------------------
+DROP TABLE IF EXISTS "public"."affair_member";
+CREATE TABLE "public"."affair_member" (
+    "id"           VARCHAR(36) COLLATE "pg_catalog"."default" NOT NULL PRIMARY KEY,
+    "affair_id"    VARCHAR(36) COLLATE "pg_catalog"."default" NOT NULL,
+    "user_id"      VARCHAR(36) COLLATE "pg_catalog"."default" NOT NULL,
+    "state"        int4                                       NOT NULL,
+    "result"       int4,
+    "data"         TEXT COLLATE "pg_catalog"."default" DEFAULT '{}',
+    "ext1"         VARCHAR(1024) COLLATE "pg_catalog"."default",
+    "ext2"         VARCHAR(1024) COLLATE "pg_catalog"."default",
+    "ext3"         TEXT COLLATE "pg_catalog"."default" DEFAULT '{}',
+    "gmt_create"   TIMESTAMP(3)                               NOT NULL,
+    "gmt_modified" TIMESTAMP(3)                               NOT NULL,
+    "sys_id"       VARCHAR(36) COLLATE "pg_catalog"."default" NOT NULL
+);
+COMMENT ON TABLE "public"."affair_member" IS '事项成员表';
+COMMENT ON COLUMN "public"."affair_member"."id" IS '主键';
+COMMENT ON COLUMN "public"."affair_member"."affair_id" IS '事项ID';
+COMMENT ON COLUMN "public"."affair_member"."user_id" IS '用户ID';
+COMMENT ON COLUMN "public"."affair_member"."state" IS '状态';
+COMMENT ON COLUMN "public"."affair_member"."result" IS '处理结果';
+COMMENT ON COLUMN "public"."affair_member"."data" IS '处理时提交的数据';
+COMMENT ON COLUMN "public"."affair_member"."ext1" IS '扩展字段1';
+COMMENT ON COLUMN "public"."affair_member"."ext2" IS '扩展字段2';
+COMMENT ON COLUMN "public"."affair_member"."ext3" IS '扩展字段3';
+COMMENT ON COLUMN "public"."affair_member"."gmt_create" IS '创建时间';
+COMMENT ON COLUMN "public"."affair_member"."gmt_modified" IS '更新时间';
+COMMENT ON COLUMN "public"."affair_member"."sys_id" IS '系统ID';

+ 5 - 0
src/main/resources/flow/flow_core_conf.json

@@ -0,0 +1,5 @@
+{
+  "flowHandlers": [],
+  "flowStorage": "",
+  "flowRole": ""
+}

+ 32 - 0
src/main/resources/flowdemo/testFlow.json

@@ -0,0 +1,32 @@
+{
+  "info": {"key": "test1","group": "testGroup","name": "测试流程1","handler": "approval"},
+  "vars": [
+    {"handler":"var:meta","key": "contentType","value": "{contentType}","name":"付款方式","conf": "{}"}
+  ],
+  "roles": [
+    {"handler": "role:start","key": "starter","name": "发起者","conf": "{}"},
+    {"handler": "role:choose","key": "cooperation","name": "协作者","conf": "{}"},
+    {"handler": "role:choose","key": "approve1","name": "审批者1","conf": "{}"},
+    {"handler": "role:choose","key": "approve2","name": "审批者2","conf": "{}"}
+  ],
+  "nodes": [
+    {"handler": "flow:event:start","key": "start","name": "开始","role": "starter"},
+    {"handler": "flow:activity:task:cooperation","key": "team-cooperation","name": "同事协作","conf": "{}"},
+    {"handler": "flow:gateways:fork","key": "fork","name": "网关"},
+    {"handler": "flow:activity:task:approve","key": "leader-approve-1","name": "领导1审批"},
+    {"handler": "flow:activity:task:approve","key": "leader-approve-2","name": "领导2审批"},
+    {"handler": "flow:gateway:join","key": "join","name": "网关"},
+    {"handler": "flow:activity:task:approve","key": "president-approve","name": "总裁审批"},
+    {"handler": "flow:event:end","key": "end","name": "结束"}
+  ],
+  "connects": [
+    {"handler": "connect:sequence","key": "c1","src": "start","tar": "cooperation"},
+    {"handler": "connect:sequence","key": "c2","src": "cooperation","tar": "fork"},
+    {"handler": "connect:sequence","key": "c3","src": "fork","tar": "leader-approve-1"},
+    {"handler": "connect:sequence","key": "c4","src": "leader-approve-1","tar": "join"},
+    {"handler": "connect:sequence","key": "c5","src": "fork","tar": "leader-approve-2"},
+    {"handler": "connect:sequence","key": "c6","src": "leader-approve-2","tar": "join"},
+    {"handler": "connect:sequence","key": "c7","src": "join","tar": "president-approve"},
+    {"handler": "connect:sequence","key": "c8","src": "president-approve","tar": "end"}
+  ]
+}