Browse Source

打包修改

yucheng 3 years ago
parent
commit
009c70f82c

+ 0 - 93
fm-person/pom.xml

@@ -91,97 +91,4 @@
         </dependency>
 
     </dependencies>
-
-    <build>
-        <finalName>fm-person</finalName>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.8.1</version>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                    <encoding>UTF-8</encoding>
-                    <skip>true</skip>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <!-- 指定启动类 -->
-                <configuration>
-                    <mainClass>com.persagy.ServerApplication</mainClass>
-                </configuration>
-            </plugin>
-            <!-- 按照测试要求打成zip需要的配置 -->
-            <plugin>
-                <groupId>com.coderplus.maven.plugins</groupId>
-                <artifactId>copy-rename-maven-plugin</artifactId>
-                <version>1.0.1</version>
-                <executions>
-                    <execution>
-                        <id>rename-file</id>
-                        <phase>compile</phase>
-                        <goals>
-                            <goal>rename</goal>
-                        </goals>
-                        <configuration>
-                            <destinationFile>${project.build.directory}/version.txt</destinationFile>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <!--拷贝资源文件 copy-resources-->
-            <plugin>
-                <artifactId>maven-resources-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-resources</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <resources>
-                                <resource>
-                                    <directory>src/main/resources/</directory>
-                                    <includes>
-                                        <include>**/*.yml</include>
-                                    </includes>
-                                </resource>
-                                <resource>
-                                    <directory>${project.build.directory}</directory>
-                                    <includes>
-                                        <include>**/version.txt</include>
-                                    </includes>
-                                </resource>
-                            </resources>
-                            <outputDirectory>${project.build.directory}/config</outputDirectory>
-                        </configuration>
-                    </execution>
-                    <!--拷贝启动脚本-->
-                    <execution>
-                        <id>copy-version</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <resources>
-                                <resource>
-                                    <directory>src/script</directory>
-                                </resource>
-                            </resources>
-                            <outputDirectory>${project.build.directory}</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-
-        </plugins>
-    </build>
-
-
 </project>

+ 31 - 0
fm-workflow/pom.xml

@@ -0,0 +1,31 @@
+<?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>fm-cloud</artifactId>
+        <groupId>com.persagy</groupId>
+        <version>3.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>fm-workflow</artifactId>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!-- 配置中心(包含注册中心) -->
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-config-client</artifactId>
+            <version>${platform.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.flowable</groupId>
+            <artifactId>flowable-spring-boot-starter</artifactId>
+            <version>6.6.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>fm-mybatis</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 144 - 0
fm-workflow/src/main/java/com/persagy/fm/workflow/controller/WorkflowController.java

@@ -0,0 +1,144 @@
+package com.persagy.fm.workflow.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.io.IoUtil;
+import com.persagy.fm.common.response.CommonResult;
+import com.persagy.fm.common.response.PageList;
+import com.persagy.fm.common.utils.ResultHelper;
+import org.flowable.bpmn.model.BpmnModel;
+import org.flowable.engine.*;
+import org.flowable.engine.runtime.Execution;
+import org.flowable.engine.runtime.ProcessInstance;
+import org.flowable.image.ProcessDiagramGenerator;
+import org.flowable.task.api.Task;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 工作流控制器
+ * @author Charlie Yu
+ * @date 2021-04-26
+ */
+@RestController
+@RequestMapping("workflow")
+public class WorkflowController {
+
+    @Autowired
+    private RuntimeService runtimeService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private RepositoryService repositoryService;
+    @Autowired
+    private ProcessEngine processEngine;
+
+    /**
+     * 启动流程实例
+     * @return
+     */
+    @RequestMapping(value = "start")
+    public String startInstance() {
+        Map<String, Object> valueMap = new HashMap<>(16);
+        valueMap.put("userId", "xxxxxxxx");
+        valueMap.put("userName", "yyyyyyyyy");
+        valueMap.put("taskUser", "zzzzzzz");
+        valueMap.put("money", 1000);
+        ProcessInstance instance = runtimeService.startProcessInstanceByKey("Expense", valueMap);
+        return instance.getId();
+    }
+
+    /**
+     * 查询待办
+     * @param userId
+     * @return
+     */
+    @RequestMapping(value = "queryTodo")
+    public CommonResult<PageList<String>> queryTodo(@RequestBody String userId) {
+        List<Task> tasks = taskService.createTaskQuery().taskAssignee(userId).orderByTaskCreateTime().desc().list();
+        List<String> ids = CollUtil.getFieldValues(tasks, "id", String.class);
+        return ResultHelper.multi(ids);
+    }
+
+    /**
+     * 审批通过
+     * @param taskId
+     * @return
+     */
+    @RequestMapping(value = "apply")
+    public String apply(@RequestBody String taskId) {
+        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
+        if (task == null) {
+            throw new RuntimeException("流程不存在");
+        }
+        //通过审核
+        HashMap<String, Object> map = new HashMap<>(16);
+        map.put("outcome", "通过");
+        taskService.complete(taskId, map);
+        return "processed ok!";
+    }
+
+    /**
+     * 审批不通过
+     * @param taskId
+     * @return
+     */
+    @RequestMapping(value = "reject")
+    public String reject(@RequestBody String taskId) {
+        HashMap<String, Object> map = new HashMap<>(16);
+        map.put("outcome", "驳回");
+        taskService.complete(taskId, map);
+        return "reject";
+    }
+
+    /**
+     * 生成实例流程图
+     * @param httpServletResponse
+     *
+     * @param processId
+     * @throws Exception
+     */
+    @RequestMapping(value = "processDiagram")
+    public void genProcessDiagram(HttpServletResponse httpServletResponse, @RequestBody String processId) throws Exception {
+        ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult();
+
+        //流程走完的不显示图
+        if (pi == null) {
+            return;
+        }
+        Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
+        //使用流程实例ID,查询正在执行的执行对象表,返回流程实例对象
+        String instanceId = task.getProcessInstanceId();
+        List<Execution> executions = runtimeService
+                .createExecutionQuery()
+                .processInstanceId(instanceId)
+                .list();
+
+        //得到正在执行的Activity的Id
+        List<String> activityIds = new ArrayList<>();
+        List<String> flows = new ArrayList<>();
+        for (Execution exe : executions) {
+            List<String> ids = runtimeService.getActiveActivityIds(exe.getId());
+            activityIds.addAll(ids);
+        }
+
+        //获取流程图
+        BpmnModel bpmnModel = repositoryService.getBpmnModel(pi.getProcessDefinitionId());
+        ProcessEngineConfiguration configuration = processEngine.getProcessEngineConfiguration();
+        ProcessDiagramGenerator diagramGenerator = configuration.getProcessDiagramGenerator();
+        try(InputStream in = diagramGenerator.generateDiagram(bpmnModel,
+                "png", activityIds, flows, "宋体","宋体", "宋体",
+                configuration.getClassLoader(), 1.0, true); OutputStream out = httpServletResponse.getOutputStream()){
+            IoUtil.copy(in, out);
+        }
+    }
+}

+ 229 - 0
fm-workflow/src/main/java/com/persagy/fm/workflow/controller/WorkflowModelController.java

@@ -0,0 +1,229 @@
+package com.persagy.fm.workflow.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import org.flowable.bpmn.model.Process;
+import org.flowable.bpmn.model.*;
+import org.flowable.engine.RepositoryService;
+import org.flowable.engine.repository.Deployment;
+import org.flowable.validation.ProcessValidator;
+import org.flowable.validation.ProcessValidatorFactory;
+import org.flowable.validation.ValidationError;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 工作流模型调研
+ * @author Charlie Yu
+ */
+@RestController
+@RequestMapping("workflowmodel")
+public class WorkflowModelController {
+
+    @Autowired
+    private RepositoryService repositoryService;
+
+    /**
+     * 启动流程实例
+     * @return
+     */
+    @RequestMapping(value = "create")
+    public String createModel() {
+        Deployment deploy=null;
+        try {
+            BpmnModel bpmnModel=new BpmnModel();
+            //设置流程信息
+            //此信息都可以通过前期自定义数据,使用时再查询
+            Process process = new Process();
+            process.setId("test_model_3");
+            process.setName("测试流程图三");
+            //添加流程节点信息---start
+            //创建数组存储所有流程节点信息
+            List<FlowElement> elementList=new ArrayList<>();
+            //创建开始节点
+            elementList.add(createStartFlowElement("startEvent_id_1", "开始_1"));
+            elementList.add(createEndFlowElement("endEvent_id_1", "结束_1"));
+
+            //查询普通任务节点信息
+            elementList.addAll(findUserTaskElements());
+
+            //把节点放入process
+            elementList.stream().forEach(item -> process.addFlowElement(item));
+
+            //查询各个节点的关系信息,并添加进流程
+            List<SequenceFlow> sequenceFlowList = createSequenceFlow();
+            sequenceFlowList.stream().forEach(item -> process.addFlowElement(item));
+
+            bpmnModel.addProcess(process);
+
+            //校验bpmModel
+            ProcessValidator processValidator=new ProcessValidatorFactory().createDefaultProcessValidator();
+            List<ValidationError> validationErrorList=processValidator.validate(bpmnModel);
+            if (validationErrorList.size()>0){
+                throw new RuntimeException("流程有误,请检查后重试");
+            }
+
+            String fileName="model_test_bpmn20.xml";
+
+            //生成自动布局
+///            new BpmnAutoLayout(bpmnModel).execute();
+            deploy =repositoryService.createDeployment().addBpmnModel(fileName, bpmnModel)
+//                    .tenantId("intelligentAsset")
+                    .deploy();
+        }catch (Exception e){
+
+        }finally {
+
+        }
+        return "ok";
+    }
+
+    /**
+     * 创建开始节点信息
+     * @return
+     */
+    public FlowElement createStartFlowElement(String id,String name){
+        StartEvent startEvent=new StartEvent();
+        startEvent.setId(id);
+        startEvent.setName(name);
+        return startEvent;
+    }
+
+    /**
+     * 创建结束节点信息
+     * @param id
+     * @param name
+     * @return
+     */
+    public FlowElement createEndFlowElement(String id,String name){
+        EndEvent endEvent=new EndEvent();
+        endEvent.setId(id);
+        endEvent.setName(name);
+        return endEvent;
+    }
+
+    public List<FlowElement> findUserTaskElements(){
+        List<FlowElement> taskList = new ArrayList<>();
+        taskList.add(createCommonUserTask("userTask_0", "任务0", "zhangsan"));
+        taskList.add(createCommonUserTask("userTask_1", "任务1", "zhangsan"));
+        taskList.add(createMultiUserTask("userTask_2", "任务2"));
+        return taskList;
+    }
+
+    /**
+     * 创建普通任务节点信息
+     * @param id
+     * @param name
+     * @param assignee
+     * @return
+     */
+    public FlowElement createCommonUserTask(String id,String name,String assignee){
+        UserTask userTask=new UserTask();
+        userTask.setId(id);
+        userTask.setName(name);
+        userTask.setAssignee(assignee);
+        return userTask;
+    }
+
+    /**
+     * 创建会签节点信息
+     * @param id
+     * @param name
+     * @return
+     */
+    public FlowElement createMultiUserTask(String id,String name){
+        UserTask userTask=new UserTask();
+        userTask.setId(id);
+        userTask.setName(name);
+        //分配用户
+        userTask.setAssignee("${assignee}");
+        MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics=new MultiInstanceLoopCharacteristics();
+///        multiInstanceLoopCharacteristics.setCollectionString("${collectionList}");
+        //完成条件,默认所有人都完成
+        multiInstanceLoopCharacteristics.setCompletionCondition("${completionCondition}");
+        //元素变量多实例,一般和设置的assignee变量是对应的
+        multiInstanceLoopCharacteristics.setElementVariable("assignee");
+        //集合多实例,用于接收集合数据的表达式
+        multiInstanceLoopCharacteristics.setInputDataItem("${itemList}");
+        userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics);
+        return userTask;
+
+
+    }
+
+    /**
+     * 查询各节点关联流转信息,即流转线
+     */
+    public List<SequenceFlow> createSequenceFlow() {
+        List<SequenceFlow> flowList = new ArrayList<>();
+        flowList.add(createSequenceFlow("sid_0","startEvent_id_1","userTask_0"));
+        flowList.add(createSequenceFlow("sid_1","userTask_0","userTask_1"));
+        flowList.add(createSequenceFlow("sid_2","userTask_1","userTask_2"));
+        flowList.add(createSequenceFlow("sid_3","userTask_2","endEvent_id_1"));
+        return flowList;
+    }
+
+    public SequenceFlow createSequenceFlow(String id, String sourceId, String targetId){
+        return createSequenceFlow(id, null, sourceId, targetId, null);
+    }
+
+    /**
+     * 绘制节点流转顺序
+     * @param id
+     * @param name
+     * @param targetId
+     * @param sourceId
+     * @param conditionExpression
+     * @return
+     */
+    public SequenceFlow createSequenceFlow(String id,String name,String sourceId,String targetId,String conditionExpression){
+        SequenceFlow sequenceFlow=new SequenceFlow();
+        sequenceFlow.setId(id);
+        if (ObjectUtils.isNotEmpty(name)){
+            sequenceFlow.setName(name);
+        } else {
+            sequenceFlow.setName("流转");
+        }
+        if (ObjectUtils.isNotEmpty(targetId)){
+            sequenceFlow.setTargetRef(targetId);
+        }
+        if (ObjectUtils.isNotEmpty(sourceId)){
+            sequenceFlow.setSourceRef(sourceId);
+        }
+        if (ObjectUtils.isNotEmpty(conditionExpression)){
+            sequenceFlow.setConditionExpression(conditionExpression);
+        } else {
+            sequenceFlow.setConditionExpression("${a==\"f\"}");
+        }
+        return sequenceFlow;
+    }
+
+    /**
+     * 排他网关
+     * @param id
+     * @param name
+     * @return
+     */
+    protected ExclusiveGateway createExclusiveGateway(String id, String name) {
+        ExclusiveGateway exclusiveGateway = new ExclusiveGateway();
+        exclusiveGateway.setId(id);
+        exclusiveGateway.setName(name);
+        return exclusiveGateway;
+    }
+
+    /**
+     * 并行网关
+     * @param id
+     * @param name
+     * @return
+     */
+    protected ParallelGateway createParallelGateway(String id, String name) {
+        ParallelGateway gateway = new ParallelGateway();
+        gateway.setId(id);
+        gateway.setName(name);
+        return gateway;
+    }
+}

+ 19 - 0
fm-workflow/src/main/java/com/persagy/fm/workflow/handler/DeptTaskHandler.java

@@ -0,0 +1,19 @@
+package com.persagy.fm.workflow.handler;
+
+import org.flowable.engine.delegate.TaskListener;
+import org.flowable.task.service.delegate.DelegateTask;
+
+/**
+ * 指定部门的部门负责人
+ */
+public class DeptTaskHandler implements TaskListener {
+
+    @Override
+    public void notify(DelegateTask delegateTask) {
+        String deptId = delegateTask.getAssignee();
+        // TODO 查询指定部门负责人
+        String personId = deptId;
+        delegateTask.setAssignee(personId);
+        delegateTask.addCandidateUser(personId);
+    }
+}

+ 6 - 0
fm-workflow/src/main/resources/bootstrap.yml

@@ -0,0 +1,6 @@
+spring:
+  application:
+    name: fm-workflow
+
+
+

+ 1 - 0
fm-workflow/src/main/resources/db/init/data.sql

@@ -0,0 +1 @@
+select 1 from dual;

+ 1 - 0
fm-workflow/src/main/resources/db/init/table.sql

@@ -0,0 +1 @@
+select 1 from dual;

+ 98 - 0
fm-workflow/src/main/resources/processes/TestProcess.bpmn20.xml

@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
+             xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
+             typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"
+             targetNamespace="http://www.flowable.org/processdef">
+    <process id="Expense" name="ExpenseProcess" isExecutable="true">
+        <documentation>报销流程</documentation>
+        <startEvent id="start" name="开始"></startEvent>
+        <userTask id="fillTask" name="出差报销" flowable:assignee="${taskUser}">
+            <extensionElements>
+                <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler">
+                    <![CDATA[false]]></modeler:initiator-can-complete>
+            </extensionElements>
+        </userTask>
+        <exclusiveGateway id="judgeTask"></exclusiveGateway>
+        <userTask id="directorTak" name="经理审批" flowable:assignee="经理"/>
+        <userTask id="bossTask" name="老板审批" flowable:assignee="老板"/>
+        <endEvent id="end" name="结束"></endEvent>
+        <sequenceFlow id="directorNotPassFlow" name="驳回" sourceRef="directorTak" targetRef="fillTask">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='驳回'}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="bossNotPassFlow" name="驳回" sourceRef="bossTask" targetRef="fillTask">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='驳回'}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="flow1" sourceRef="start" targetRef="fillTask"></sequenceFlow>
+        <sequenceFlow id="flow2" sourceRef="fillTask" targetRef="judgeTask"></sequenceFlow>
+        <sequenceFlow id="judgeMore" name="大于500元" sourceRef="judgeTask" targetRef="bossTask">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${money > 500}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="bossPassFlow" name="通过" sourceRef="bossTask" targetRef="end">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='通过'}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="directorPassFlow" name="通过" sourceRef="directorTak" targetRef="end">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${outcome=='通过'}]]></conditionExpression>
+        </sequenceFlow>
+        <sequenceFlow id="judgeLess" name="小于500元" sourceRef="judgeTask" targetRef="directorTak">
+            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${money <= 500}]]></conditionExpression>
+        </sequenceFlow>
+    </process>
+    <bpmndi:BPMNDiagram id="BPMNDiagram_Expense">
+        <bpmndi:BPMNPlane bpmnElement="Expense" id="BPMNPlane_Expense">
+            <bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
+                <omgdc:Bounds height="30.0" width="30.0" x="285.0" y="135.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNShape bpmnElement="fillTask" id="BPMNShape_fillTask">
+                <omgdc:Bounds height="80.0" width="100.0" x="405.0" y="110.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNShape bpmnElement="judgeTask" id="BPMNShape_judgeTask">
+                <omgdc:Bounds height="40.0" width="40.0" x="585.0" y="130.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNShape bpmnElement="directorTak" id="BPMNShape_directorTak">
+                <omgdc:Bounds height="80.0" width="100.0" x="735.0" y="110.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNShape bpmnElement="bossTask" id="BPMNShape_bossTask">
+                <omgdc:Bounds height="80.0" width="100.0" x="555.0" y="255.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end">
+                <omgdc:Bounds height="28.0" width="28.0" x="771.0" y="281.0"></omgdc:Bounds>
+            </bpmndi:BPMNShape>
+            <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
+                <omgdi:waypoint x="315.0" y="150.0"></omgdi:waypoint>
+                <omgdi:waypoint x="405.0" y="150.0"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
+                <omgdi:waypoint x="505.0" y="150.16611295681062"></omgdi:waypoint>
+                <omgdi:waypoint x="585.4333333333333" y="150.43333333333334"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="judgeLess" id="BPMNEdge_judgeLess">
+                <omgdi:waypoint x="624.5530726256983" y="150.44692737430168"></omgdi:waypoint>
+                <omgdi:waypoint x="735.0" y="150.1392757660167"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="directorNotPassFlow" id="BPMNEdge_directorNotPassFlow">
+                <omgdi:waypoint x="785.0" y="110.0"></omgdi:waypoint>
+                <omgdi:waypoint x="785.0" y="37.0"></omgdi:waypoint>
+                <omgdi:waypoint x="455.0" y="37.0"></omgdi:waypoint>
+                <omgdi:waypoint x="455.0" y="110.0"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="bossPassFlow" id="BPMNEdge_bossPassFlow">
+                <omgdi:waypoint x="655.0" y="295.0"></omgdi:waypoint>
+                <omgdi:waypoint x="771.0" y="295.0"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="judgeMore" id="BPMNEdge_judgeMore">
+                <omgdi:waypoint x="605.4340277777778" y="169.56597222222223"></omgdi:waypoint>
+                <omgdi:waypoint x="605.1384083044983" y="255.0"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="directorPassFlow" id="BPMNEdge_directorPassFlow">
+                <omgdi:waypoint x="785.0" y="190.0"></omgdi:waypoint>
+                <omgdi:waypoint x="785.0" y="281.0"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+            <bpmndi:BPMNEdge bpmnElement="bossNotPassFlow" id="BPMNEdge_bossNotPassFlow">
+                <omgdi:waypoint x="555.0" y="295.0"></omgdi:waypoint>
+                <omgdi:waypoint x="455.0" y="295.0"></omgdi:waypoint>
+                <omgdi:waypoint x="455.0" y="190.0"></omgdi:waypoint>
+            </bpmndi:BPMNEdge>
+        </bpmndi:BPMNPlane>
+    </bpmndi:BPMNDiagram>
+</definitions>

+ 7 - 7
pom.xml

@@ -7,7 +7,7 @@
 
     <parent>
         <groupId>com.persagy</groupId>
-        <artifactId>fm-parent</artifactId>
+        <artifactId>fm-package</artifactId>
         <version>3.0.0</version>
     </parent>
 
@@ -21,6 +21,7 @@
         <module>fm-qrcode</module>
         <module>fm-scheduling</module>
         <module>fm-supplier</module>
+        <module>fm-workflow</module>
     </modules>
 
     <repositories>
@@ -37,6 +38,11 @@
     </repositories>
 
     <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
         <!-- 项目启动 -->
         <dependency>
             <groupId>com.persagy</groupId>
@@ -47,11 +53,5 @@
             <groupId>com.persagy</groupId>
             <artifactId>fm-common</artifactId>
         </dependency>
-<!--        &lt;!&ndash; fm 翻译器 &ndash;&gt;-->
-<!--        <dependency>-->
-<!--            <groupId>com.persagy</groupId>-->
-<!--            <artifactId>fm-translate</artifactId>-->
-<!--            <version>3.0.0</version>-->
-<!--        </dependency>-->
     </dependencies>
 </project>