Browse Source

解析流程节点

master
Yen 3 years ago
parent
commit
8e07242cc8
  1. 26
      src/main/java/com/qs/serve/modules/bpm/common/enums/NodeType.java
  2. 57
      src/main/java/com/qs/serve/modules/bpm/common/util/DeployBpmnUtil.java
  3. 2
      src/main/java/com/qs/serve/modules/bpm/controller/FlowDefinitionController.java
  4. 26
      src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployApprovalConfigBo.java
  5. 3
      src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployBpmnBo.java
  6. 26
      src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployBucketDTO.java
  7. 15
      src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployCcConfigBo.java
  8. 65
      src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployConditionBo.java
  9. 14
      src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployConditionConfigBo.java
  10. 46
      src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployNodeBo.java
  11. 31
      src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployViewerDto.java
  12. 4
      src/main/java/com/qs/serve/modules/bpm/service/impl/IFlowDefinitionServiceImpl.java
  13. 6
      src/main/resources/application-dev.yml

26
src/main/java/com/qs/serve/modules/bpm/common/enums/NodeType.java

@ -0,0 +1,26 @@
package com.qs.serve.modules.bpm.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author YenHex
* @since 2022/9/9
*/
@Getter
@AllArgsConstructor
public enum NodeType {
Start("start"),
Approval("approval");
String name;
public boolean eq(String key){
if (this.name.equals(key)){
return true;
}
return false;
}
}

57
src/main/java/com/qs/serve/modules/bpm/common/util/DeployBpmnUtil.java

@ -1,8 +1,16 @@
package com.qs.serve.modules.bpm.common.util;
import com.qs.serve.modules.bpm.entity.dto.DeployBpmnBo;
import com.qs.serve.modules.bpm.entity.dto.DeployViewerDto;
import com.qs.serve.common.util.IdUtil;
import com.qs.serve.common.util.StringUtils;
import com.qs.serve.modules.bpm.common.enums.NodeType;
import com.qs.serve.modules.bpm.entity.dto.DeployBucketDTO;
import com.qs.serve.modules.bpm.entity.dto.DeployNodeBo;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.SequenceFlow;
import org.flowable.bpmn.model.StartEvent;
import org.flowable.bpmn.model.UserTask;
import java.util.ArrayList;
/**
* 视图转换工具类
@ -13,12 +21,51 @@ public class DeployBpmnUtil {
/**
* 视图转换
* @param viewer
* @param node
* @return
*/
public static BpmnModel toBpmnModel(DeployViewerDto viewer){
public static BpmnModel toBpmnModel(DeployNodeBo node){
DeployBucketDTO bucketDTO = new DeployBucketDTO();
bucketDTO.setSequenceFlows(new ArrayList<>());
bucketDTO.setUserTaskList(new ArrayList<>());
recursiveNode(null,node,bucketDTO);
return new BpmnModel();
}
public static void recursiveNode(DeployNodeBo parentNode,DeployNodeBo node, DeployBucketDTO bucketDTO){
String nodeType = node.getType();
if(NodeType.Start.eq(nodeType)){
node.setNodeLabel(StringUtils.hasText(node.getNodeLabel()) ? "开始节点" : node.getNodeLabel());
StartEvent startEvent = new StartEvent();
startEvent.setId(node.getNodeId());
startEvent.setName(node.getNodeLabel());
bucketDTO.setStartEvent(startEvent);
}else if (NodeType.Approval.eq(nodeType)){
UserTask userTask = new UserTask();
}else{
}
//条件解析器
String conditionExpression = null;
if(parentNode!=null){
SequenceFlow s2 = new SequenceFlow();
s2.setId(createId());
s2.setName(parentNode.getNodeLabel()+"到"+node.getNodeLabel());
s2.setSourceRef(parentNode.getNodeId());
s2.setTargetRef(node.getNodeId());
s2.setConditionExpression(conditionExpression);
bucketDTO.getSequenceFlows().add(s2);
}
}
private static String createId(){
return IdUtil.nanoId(9);
}
}

2
src/main/java/com/qs/serve/modules/bpm/controller/FlowDefinitionController.java

@ -75,7 +75,7 @@ public class FlowDefinitionController {
* @param variables 变量集合,json对象
* @return
*/
@PostMapping("/start/{procDefId}")
//@PostMapping("/start/{procDefId}")
public R start(@PathVariable(value = "procDefId") String procDefId, @RequestBody Map<String, Object> variables) {
flowDefinitionService.startProcessInstanceById(procDefId, variables);
return R.ok();

26
src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployApprovalConfigBo.java

@ -0,0 +1,26 @@
package com.qs.serve.modules.bpm.entity.dto;
import lombok.Data;
import java.util.List;
/**
* @author YenHex
* @since 2022/9/8
*/
@Data
public class DeployApprovalConfigBo {
private List<?> approvalPersonnel;
/**
* 多人审批类型 0会签 1或签
*/
private String multiplePersonnelApprovalType;
/**
* 或签通过人数
*/
private String approvalPersonnelPassCount;
}

3
src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployBpmnBo.java

@ -3,7 +3,6 @@ package com.qs.serve.modules.bpm.entity.dto;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author YenHex
@ -21,6 +20,6 @@ public class DeployBpmnBo {
/** 前端视图对象 */
@NotNull(message = "流程视图布局不可为空")
private DeployViewerDto viewer;
private DeployNodeBo viewer;
}

26
src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployBucketDTO.java

@ -0,0 +1,26 @@
package com.qs.serve.modules.bpm.entity.dto;
import lombok.Data;
import org.flowable.bpmn.model.EndEvent;
import org.flowable.bpmn.model.SequenceFlow;
import org.flowable.bpmn.model.StartEvent;
import org.flowable.bpmn.model.UserTask;
import java.util.List;
/**
* 基础Bpmn所有节点
* @author YenHex
* @since 2022/9/9
*/
@Data
public class DeployBucketDTO {
private StartEvent startEvent;
private EndEvent endEvent;
private List<UserTask> userTaskList;
private List<SequenceFlow> sequenceFlows;
}

15
src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployCcConfigBo.java

@ -0,0 +1,15 @@
package com.qs.serve.modules.bpm.entity.dto;
import lombok.Data;
import java.util.List;
/**
* @author YenHex
* @since 2022/9/8
*/
@Data
public class DeployCcConfigBo {
private List<?> ccPersonnel;
}

65
src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployConditionBo.java

@ -0,0 +1,65 @@
package com.qs.serve.modules.bpm.entity.dto;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
/**
* @author YenHex
* @since 2022/9/8
*/
@Data
@Slf4j
public class DeployConditionBo {
private String id;
private String type;
/**
* 表单项ID
*/
private String field;
private DeployCompare compares;
public DeployConditionSimpleDto toSimpleDto(){
DeployConditionSimpleDto simpleDto = new DeployConditionSimpleDto();
simpleDto.setId(this.id);
simpleDto.setType(this.type);
simpleDto.setField(this.field);
try {
simpleDto.setCompareType(this.getCompares().getCompareType().getValue());
simpleDto.setCompareValue(this.getCompares().getCompareValue().getValue());
} catch (Exception e) {
log.warn("条件获取失效");
return null;
}
return simpleDto;
}
@Data
public static class DeployCompare{
private DeployCompareType compareType;
private DeployCompareValue compareValue;
}
@Data
public static class DeployCompareType{
private String value;
}
@Data
public static class DeployCompareValue{
private String value;
}
@Data
public static class DeployConditionSimpleDto{
private String id;
private String type;
private String field;
private String compareType;
private String compareValue;
}
}

14
src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployConditionConfigBo.java

@ -0,0 +1,14 @@
package com.qs.serve.modules.bpm.entity.dto;
import lombok.Data;
import java.util.List;
/**
* @author YenHex
* @since 2022/9/8
*/
@Data
public class DeployConditionConfigBo {
private List<DeployConditionBo> conditions;
}

46
src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployNodeBo.java

@ -0,0 +1,46 @@
package com.qs.serve.modules.bpm.entity.dto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.util.List;
/**
* @author YenHex
* @since 2022/8/15
*/
@Data
public class DeployNodeBo {
private String nodeId;
private String nodeLabel;
/**
* approval -- userTask
* branch -- ex-gateway x2
* condition -- flow
* cc
* stat
* end
*/
private String type;
private DeployApprovalConfigBo approvalNodeConfig;
private DeployCcConfigBo ccNodeConfig;
private DeployConditionConfigBo conditionNodeConfig;
private List<DeployNodeBo> conditionNodes;
private DeployNodeBo childNode;
// @JsonIgnore
// private String bpmnId;
//
// @JsonIgnore
// private String bpmnName;
//
// @JsonIgnore
// private String bpmnLabel;
}

31
src/main/java/com/qs/serve/modules/bpm/entity/dto/DeployViewerDto.java

@ -1,31 +0,0 @@
package com.qs.serve.modules.bpm.entity.dto;
import lombok.Data;
import java.util.List;
/**
* @author YenHex
* @since 2022/8/15
*/
@Data
public class DeployViewerDto {
private String nodeId;
private String nodeLabel;
/**
* approval -- userTask
* branch -- ex-gateway x2
* condition -- flow
* stat
* end
*/
private String type;
private List<Object> conditions;
private List<DeployViewerDto> conditionNodes;
private List<DeployViewerDto> childNode;
}

4
src/main/java/com/qs/serve/modules/bpm/service/impl/IFlowDefinitionServiceImpl.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.bpm.service.impl;
import com.qs.serve.common.framework.security.model.LoginUser;
import com.qs.serve.common.util.Assert;
import com.qs.serve.common.util.AuthContextUtils;
import com.qs.serve.modules.bpm.common.consts.ProcessConstants;
@ -54,7 +55,8 @@ public class IFlowDefinitionServiceImpl extends FlowServiceFactory implements IF
// variables.put("skip", true);
// variables.put(ProcessConstants.FLOWABLE_SKIP_EXPRESSION_ENABLED, true);
// 设置流程发起人Id到流程中
identityService.setAuthenticatedUserId("TODO");
LoginUser loginUser = AuthContextUtils.getLoginUser();
identityService.setAuthenticatedUserId(loginUser.getUserId());
variables.put(ProcessConstants.PROCESS_INITIATOR, "");
ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables);
// 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题?

6
src/main/resources/application-dev.yml

@ -1,14 +1,14 @@
#服务配置
server:
port: 7777
port: 7200
servlet:
context-path: /
#SpringBoot相关
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
#url: jdbc:mysql://192.168.0.9:3333/qs-base-bpm-demo?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
url: jdbc:mysql://192.168.0.9:3333/qs-base-bpm-demo?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
#url: jdbc:mysql://192.168.0.9:3306/gy_oa_qs?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
url: jdbc:mysql://192.168.0.9:3333/qs-base-bpm?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 123456
redis:

Loading…
Cancel
Save