Commit 3b7af128 by 赵剑炜

整理代码,未测试

parent 276e7527
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
Target Server Version : 80032 Target Server Version : 80032
File Encoding : 65001 File Encoding : 65001
Date: 26/04/2023 13:56:28 Date: 26/04/2023 17:15:19
*/ */
SET NAMES utf8mb4; SET NAMES utf8mb4;
...@@ -2311,3 +2311,5 @@ INSERT INTO `users` VALUES (489564, '李秋香', 'liqiuxiang', '李秋香', NULL ...@@ -2311,3 +2311,5 @@ INSERT INTO `users` VALUES (489564, '李秋香', 'liqiuxiang', '李秋香', NULL
INSERT INTO `users` VALUES (568898, '王翠花', 'wangcuihua', '王翠花', NULL, NULL, '4319868', NULL, NULL, NULL, NULL, NULL); INSERT INTO `users` VALUES (568898, '王翠花', 'wangcuihua', '王翠花', NULL, NULL, '4319868', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `users` VALUES (6418616, '张三', 'zhangsan', '张三', NULL, NULL, '6179678', NULL, NULL, NULL, NULL, NULL); INSERT INTO `users` VALUES (6418616, '张三', 'zhangsan', '张三', NULL, NULL, '6179678', NULL, NULL, NULL, NULL, NULL);
INSERT INTO `users` VALUES (61769798, '李四', 'lisi', '李四', NULL, NULL, '231535', NULL, NULL, NULL, NULL, NULL); INSERT INTO `users` VALUES (61769798, '李四', 'lisi', '李四', NULL, NULL, '231535', NULL, NULL, NULL, NULL, NULL);
SET FOREIGN_KEY_CHECKS = 1;
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
<groupId>org.jeecgframework.boot</groupId> <groupId>org.jeecgframework.boot</groupId>
<artifactId>jeecg-boot-base-core</artifactId> <artifactId>jeecg-boot-base-core</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>
......
package org.jeecg.module.junmpProcess.common; package org.jeecg.modules.junmpProcess.common;
/** /**
*/ */
......
package org.jeecg.module.junmpProcess.common; package org.jeecg.modules.junmpProcess.common;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
......
package org.jeecg.module.junmpProcess.common; package org.jeecg.modules.junmpProcess.common;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
......
package org.jeecg.module.junmpProcess.common; package org.jeecg.modules.junmpProcess.common;
/** /**
* @author LoveMyOrange * @author LoveMyOrange
......
package org.jeecg.module.junmpProcess.config; package org.jeecg.modules.junmpProcess.config;
import org.jeecg.module.junmpProcess.job.CustomJobHandler;
import org.jeecg.module.junmpProcess.job.IdWorkerIdGenerator;
import org.flowable.engine.ProcessEngineConfiguration; import org.flowable.engine.ProcessEngineConfiguration;
import org.flowable.engine.cfg.HttpClientConfig; import org.flowable.engine.cfg.HttpClientConfig;
import org.flowable.engine.impl.cfg.DelegateExpressionFieldInjectionMode; import org.flowable.engine.impl.cfg.DelegateExpressionFieldInjectionMode;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.flowable.job.service.JobHandler; import org.flowable.job.service.JobHandler;
import org.flowable.spring.SpringProcessEngineConfiguration; import org.flowable.spring.SpringProcessEngineConfiguration;
import org.jeecg.modules.junmpProcess.job.CustomJobHandler;
import org.jeecg.modules.junmpProcess.job.IdWorkerIdGenerator;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
......
package org.jeecg.module.junmpProcess.config; package org.jeecg.modules.junmpProcess.config;
import org.jeecg.module.junmpProcess.utils.IdWorker; import org.jeecg.modules.junmpProcess.utils.IdWorker;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
......
package org.jeecg.module.junmpProcess.controller; package org.jeecg.modules.junmpProcess.controller;
import org.jeecg.module.junmpProcess.common.Result;
import org.jeecg.module.junmpProcess.dto.ApplyDTO;
import org.jeecg.module.junmpProcess.dto.HandleDataDTO;
import org.jeecg.module.junmpProcess.dto.StartProcessInstanceDTO;
import org.jeecg.module.junmpProcess.dto.TaskDTO;
import org.jeecg.module.junmpProcess.entity.ProcessTemplates;
import org.jeecg.module.junmpProcess.service.Bussiness.WorkProcessService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.aspect.annotation.PermissionData; import org.jeecg.common.aspect.annotation.PermissionData;
import org.jeecg.module.junmpProcess.vo.HandleDataVO; import org.jeecg.modules.junmpProcess.common.Result;
import org.jeecg.module.junmpProcess.vo.HistoryProcessInstanceVO; import org.jeecg.modules.junmpProcess.dto.ApplyDTO;
import org.jeecg.module.junmpProcess.vo.MultiVO; import org.jeecg.modules.junmpProcess.dto.HandleDataDTO;
import org.jeecg.module.junmpProcess.vo.TaskVO; import org.jeecg.modules.junmpProcess.dto.StartProcessInstanceDTO;
import org.jeecg.modules.junmpProcess.dto.TaskDTO;
import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
import org.jeecg.modules.junmpProcess.service.Bussiness.WorkProcessService;
import org.jeecg.modules.junmpProcess.vo.HandleDataVO;
import org.jeecg.modules.junmpProcess.vo.HistoryProcessInstanceVO;
import org.jeecg.modules.junmpProcess.vo.MultiVO;
import org.jeecg.modules.junmpProcess.vo.TaskVO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -41,6 +39,11 @@ public class MainProcessController { ...@@ -41,6 +39,11 @@ public class MainProcessController {
return ProcessService.detail(templateId); return ProcessService.detail(templateId);
} }
@ApiOperation("新建流程")
@PostMapping("process/create")
public Result<Object> create(@RequestBody StartProcessInstanceDTO startProcessInstanceDTO){
return ProcessService.start(startProcessInstanceDTO);
}
@ApiOperation("通过流程定义id启动流程") @ApiOperation("通过流程定义id启动流程")
@PostMapping("process/start") @PostMapping("process/start")
......
package org.jeecg.module.junmpProcess.controller; package org.jeecg.modules.junmpProcess.controller;
import org.jeecg.module.junmpProcess.service.Bussiness.OrgUserAndDeptService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.PermissionData;
import org.jeecg.modules.junmpProcess.service.Bussiness.OrgUserAndDeptService;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
...@@ -26,7 +28,9 @@ public class OrgUserAndDeptController { ...@@ -26,7 +28,9 @@ public class OrgUserAndDeptController {
* @param deptId 部门id * @param deptId 部门id
* @return 组织架构树数据 * @return 组织架构树数据
*/ */
@ApiOperation("查询组织架构树")
@GetMapping("tree") @GetMapping("tree")
// @PermissionData(pageComponent = "jeecg/JeecgDemoList")
public Object getOrgTreeData(@RequestParam(defaultValue = "0") Integer deptId, public Object getOrgTreeData(@RequestParam(defaultValue = "0") Integer deptId,
@RequestParam(defaultValue = "user") String type @RequestParam(defaultValue = "user") String type
){ ){
...@@ -38,6 +42,7 @@ public class OrgUserAndDeptController { ...@@ -38,6 +42,7 @@ public class OrgUserAndDeptController {
* @param userName 用户名/拼音/首字母 * @param userName 用户名/拼音/首字母
* @return 匹配到的用户 * @return 匹配到的用户
*/ */
@ApiOperation("模糊搜索用户")
@GetMapping("tree/search") @GetMapping("tree/search")
public Object getOrgTreeUser(@RequestParam String userName){ public Object getOrgTreeUser(@RequestParam String userName){
return orgService.getOrgTreeUser(userName.trim()); return orgService.getOrgTreeUser(userName.trim());
......
package org.jeecg.module.junmpProcess.controller; package org.jeecg.modules.junmpProcess.controller;
import org.jeecg.module.junmpProcess.common.R;
import org.jeecg.module.junmpProcess.dto.FlowEngineDTO;
import org.jeecg.module.junmpProcess.entity.ProcessTemplates;
import org.jeecg.module.junmpProcess.service.Bussiness.SettingService;
import org.jeecg.module.junmpProcess.vo.TemplateGroupVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.junmpProcess.common.R;
import org.jeecg.modules.junmpProcess.dto.FlowEngineDTO;
import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
import org.jeecg.modules.junmpProcess.service.Bussiness.SettingService;
import org.jeecg.modules.junmpProcess.vo.TemplateGroupVo;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -18,9 +17,12 @@ import java.util.List; ...@@ -18,9 +17,12 @@ import java.util.List;
* @author : willian fu * @author : willian fu
* @date : 2020/9/17 * @date : 2020/9/17
*/ */
@Slf4j
@RestController @RestController
@RequestMapping("/Setting") @RequestMapping("/Setting")
@Api(tags = "和表单有关的接口") @Api(tags = "和表单有关的接口")
public class SettingController { public class SettingController {
@Autowired @Autowired
......
package org.jeecg.module.junmpProcess.controller; package org.jeecg.modules.junmpProcess.controller;
import org.jeecg.module.junmpProcess.common.Result;
import org.jeecg.module.junmpProcess.dto.*;
import org.jeecg.module.junmpProcess.dto.json.ChildNode;
import org.jeecg.module.junmpProcess.dto.json.FormOperates;
import org.jeecg.module.junmpProcess.dto.json.SettingsInfo;
import org.jeecg.module.junmpProcess.dto.json.UserInfo;
import org.jeecg.module.junmpProcess.entity.ProcessTemplates;
import org.jeecg.module.junmpProcess.exception.WorkFlowException;
import org.jeecg.module.junmpProcess.service.Repository.ProcessTemplateService;
import org.jeecg.module.junmpProcess.service.Repository.UserService;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -31,6 +21,7 @@ import org.flowable.engine.TaskService; ...@@ -31,6 +21,7 @@ import org.flowable.engine.TaskService;
import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity; import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
import org.flowable.engine.repository.Model;
import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.Execution; import org.flowable.engine.runtime.Execution;
import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstance;
...@@ -40,16 +31,27 @@ import org.flowable.engine.task.Comment; ...@@ -40,16 +31,27 @@ import org.flowable.engine.task.Comment;
import org.flowable.task.api.DelegationState; import org.flowable.task.api.DelegationState;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstance;
import org.jeecg.module.junmpProcess.vo.*; import org.jeecg.modules.junmpProcess.common.Result;
import org.jeecg.modules.junmpProcess.dto.*;
import org.jeecg.modules.junmpProcess.dto.json.ChildNode;
import org.jeecg.modules.junmpProcess.dto.json.FormOperates;
import org.jeecg.modules.junmpProcess.dto.json.SettingsInfo;
import org.jeecg.modules.junmpProcess.dto.json.UserInfo;
import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
import org.jeecg.modules.junmpProcess.exception.WorkFlowException;
import org.jeecg.modules.junmpProcess.service.Repository.ProcessTemplateService;
import org.jeecg.modules.junmpProcess.service.Repository.UserService;
import org.jeecg.modules.junmpProcess.vo.*;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.jeecg.module.junmpProcess.common.CommonConstants.*; import static org.jeecg.modules.junmpProcess.common.CommonConstants.*;
import static org.jeecg.module.junmpProcess.common.WorkFlowConstants.PROCESS_PREFIX; import static org.jeecg.modules.junmpProcess.common.WorkFlowConstants.PROCESS_PREFIX;
import static org.jeecg.module.junmpProcess.utils.BpmnModelUtils.getChildNode; import static org.jeecg.modules.junmpProcess.utils.BpmnModelUtils.getChildNode;
/** /**
* @author : willian fu * @author : willian fu
...@@ -626,6 +628,75 @@ public class WorkspaceProcessController { ...@@ -626,6 +628,75 @@ public class WorkspaceProcessController {
} }
return Result.OK(); return Result.OK();
} }
/**
* 添加流程模型并返回modelId
*
* @param processId 流程唯一标识key
* @param processAuthor 流程作者
* @param name 流程名称
* @param modelname 模型名称
* @param description 模型描述
* @param category 模型分类
* @return
* @throws UnsupportedEncodingException
*/
protected String createModel(String processId, String processAuthor, String name, String modelname, String description, String category) throws UnsupportedEncodingException {
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode editorNode = objectMapper.createObjectNode();
editorNode.put("id", "canvs");
editorNode.put("resourceId", "canvs");
ObjectNode stencilSetNode = objectMapper.createObjectNode();
//命名空间(禁止修改)
stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
//流程节点作者
stencilSetNode.put("author", "");
editorNode.set("stencilset", stencilSetNode);
ObjectNode propertiesNode = objectMapper.createObjectNode();
//流程唯一标识
propertiesNode.put("process_id", processId);
//流程作者
propertiesNode.put("process_author", processAuthor);
//流程名称
propertiesNode.put("name", name);
editorNode.set("properties", propertiesNode);
ObjectNode modelObjectNode = objectMapper.createObjectNode();
//模型名称
modelObjectNode.put("name", modelname);
//模型版本
modelObjectNode.put("revision", 1);
//模型描述
modelObjectNode.put("description", description);
Model modelData = repositoryService.newModel();
//模型分类
modelData.setCategory(category);
modelData.setDeploymentId(null);
modelData.setKey(null);
modelData.setMetaInfo(modelObjectNode.toString());
//模型名称
modelData.setName(modelname);
modelData.setTenantId("");
modelData.setVersion(1);
//保存模型,存储数据到表:act_re_model 流程设计模型部署表
repositoryService.saveModel(modelData);
//保存资源,存储数据到表:act_ge_bytearray 二进制数据表
repositoryService.addModelEditorSource(modelData.getId(), editorNode.toString().getBytes("utf-8"));
return modelData.getId();
}
@ApiOperation("评论按钮") @ApiOperation("评论按钮")
......
package org.jeecg.module.junmpProcess.dto; package org.jeecg.modules.junmpProcess.dto;
import org.jeecg.module.junmpProcess.dto.json.UserInfo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import lombok.Data; import lombok.Data;
import org.jeecg.modules.junmpProcess.dto.json.UserInfo;
/** /**
* @author LoveMyOrange * @author LoveMyOrange
......
package org.jeecg.module.junmpProcess.dto; package org.jeecg.modules.junmpProcess.dto;
import lombok.Data; import lombok.Data;
......
package org.jeecg.modules.junmpProcess.dto;public class FlowDto { package org.jeecg.modules.junmpProcess.dto;
import lombok.Data;
/**
* 流程DTO
*/
@Data
public class FlowDTO {
//表单分类id
private String process;
private Integer groupId;
} }
package org.jeecg.module.junmpProcess.dto; package org.jeecg.modules.junmpProcess.dto;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto; package org.jeecg.modules.junmpProcess.dto;
import org.jeecg.module.junmpProcess.dto.json.UserInfo;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.jeecg.modules.junmpProcess.dto.json.UserInfo;
import java.util.List; import java.util.List;
......
package org.jeecg.module.junmpProcess.dto; package org.jeecg.modules.junmpProcess.dto;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package org.jeecg.module.junmpProcess.dto; package org.jeecg.modules.junmpProcess.dto;
import org.jeecg.module.junmpProcess.dto.json.UserInfo;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.Data; import lombok.Data;
import org.jeecg.modules.junmpProcess.dto.json.UserInfo;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
......
package org.jeecg.module.junmpProcess.dto; package org.jeecg.modules.junmpProcess.dto;
import org.jeecg.module.junmpProcess.dto.json.UserInfo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import lombok.Data; import lombok.Data;
import org.jeecg.modules.junmpProcess.dto.json.UserInfo;
/** /**
* @author LoveMyOrange * @author LoveMyOrange
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.Data; import lombok.Data;
...@@ -33,6 +33,7 @@ public class ChildNode { ...@@ -33,6 +33,7 @@ public class ChildNode {
private String desc; private String desc;
private Properties props; private Properties props;
private ChildNode children; private ChildNode children;
private List<ChildNode> branchs; private List<ChildNode> branchs;
private String parallelStr; private String parallelStr;
private JSONObject incoming=new JSONObject(); private JSONObject incoming=new JSONObject();
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json;
import lombok.Data; import lombok.Data;
......
package org.jeecg.modules.junmpProcess.dto.json.flowJson;public class FlowApproverGroups { package org.jeecg.modules.junmpProcess.dto.json.flowJson;
}
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class FlowApproverGroups {
private String id;
private int approverType;
private int levelMode;
private List<String> approverIds;
private List<String> approverNames;
}
\ No newline at end of file
...@@ -5,19 +5,25 @@ import lombok.Data; ...@@ -5,19 +5,25 @@ import lombok.Data;
import org.jeecg.modules.junmpProcess.dto.json.Properties; import org.jeecg.modules.junmpProcess.dto.json.Properties;
import java.util.List; import java.util.List;
import java.util.Map;
@Data @Data
public class ChildNode { public class FlowChildNode {
private String id; private String id;
private String parentId;
private String type;
private String name; private String name;
private String desc; private int type;
private Properties props; private int status;
private org.jeecg.modules.junmpProcess.dto.json.ChildNode children; private FlowChildNode childNode;
private boolean addable;
private List<org.jeecg.modules.junmpProcess.dto.json.ChildNode> branchs; private List<FlowChildNode> conditionNodes;
private String parallelStr; private String pid;
private JSONObject incoming=new JSONObject(); private Map<String,Object> attr;
private Boolean typeElse; private List<FlowApproverGroups> approverGroups;
//不确定什么类型
private List<String> privileges;
private Map<String,Object> configure;
private List<FlowConditionNodes> FlowConditionNodes;
private boolean deletable;
private boolean error;
private String content;
} }
package org.jeecg.modules.junmpProcess.dto.json.flowJson;
import lombok.Data;
@Data
public class FlowConditionGroup {
private String id;
private String condition;
private String name;
private int type;
private int status;
private boolean error;
private FlowChildNode childNode;
private FlowChildNode addable;
private FlowChildNode deletable;
private int conditionGroup;
private int attr;
private boolean content;
}
package org.jeecg.modules.junmpProcess.dto.json.flowJson;public class FlowConditionNodes { package org.jeecg.modules.junmpProcess.dto.json.flowJson;
import lombok.Data;
import java.util.List;
@Data
public class FlowConditionNodes {
private String id;
private String pid;
private String name;
private int type;
private int status;
private boolean error;
private FlowChildNode childNode;
private FlowChildNode addable;
private FlowChildNode deletable;
private List<FlowConditionGroup> conditionGroup;
private int attr;
private boolean content;
} }
package org.jeecg.modules.junmpProcess.dto.json; package org.jeecg.modules.junmpProcess.dto.json.flowJson;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.Data; import lombok.Data;
import org.jeecg.modules.junmpProcess.dto.json.ChildNode;
import org.jeecg.modules.junmpProcess.dto.json.Properties;
import java.util.List; import java.util.List;
......
package org.jeecg.modules.junmpProcess.dto.json.flowJson;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Inout {
private String in;
private String out;
}
package org.jeecg.module.junmpProcess.entity; package org.jeecg.modules.junmpProcess.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
......
package org.jeecg.module.junmpProcess.entity; package org.jeecg.modules.junmpProcess.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
......
package org.jeecg.module.junmpProcess.entity; package org.jeecg.modules.junmpProcess.entity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
......
package org.jeecg.module.junmpProcess.entity; package org.jeecg.modules.junmpProcess.entity;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
......
package org.jeecg.module.junmpProcess.entity; package org.jeecg.modules.junmpProcess.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
......
package org.jeecg.module.junmpProcess.entity; package org.jeecg.modules.junmpProcess.entity;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
......
package org.jeecg.module.junmpProcess.entity; package org.jeecg.modules.junmpProcess.entity;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
......
package org.jeecg.module.junmpProcess.enums; package org.jeecg.modules.junmpProcess.enums;
/** /**
* @Author:LoveMyOrange * @Author:LoveMyOrange
......
package org.jeecg.module.junmpProcess.enums; package org.jeecg.modules.junmpProcess.enums;
/** /**
* @Author:LoveMyOrange * @Author:LoveMyOrange
......
package org.jeecg.module.junmpProcess.exception; package org.jeecg.modules.junmpProcess.exception;
import org.jeecg.module.junmpProcess.common.R;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.junmpProcess.common.R;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException; import org.springframework.validation.BindException;
import org.springframework.validation.FieldError; import org.springframework.validation.FieldError;
......
package org.jeecg.module.junmpProcess.exception; package org.jeecg.modules.junmpProcess.exception;
/** /**
* 流程异常封装 * 流程异常封装
......
package org.jeecg.module.junmpProcess.job; package org.jeecg.modules.junmpProcess.job;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.flowable.common.engine.impl.interceptor.Command; import org.flowable.common.engine.impl.interceptor.Command;
......
package org.jeecg.module.junmpProcess.job; package org.jeecg.modules.junmpProcess.job;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
......
package org.jeecg.module.junmpProcess.job; package org.jeecg.modules.junmpProcess.job;
import org.jeecg.common.util.SpringContextHolder;
import org.jeecg.module.junmpProcess.utils.IdWorker;
import org.flowable.common.engine.impl.cfg.IdGenerator; import org.flowable.common.engine.impl.cfg.IdGenerator;
import org.jeecg.common.util.SpringContextHolder;
import org.jeecg.modules.junmpProcess.utils.IdWorker;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
......
package org.jeecg.module.junmpProcess.listener; package org.jeecg.modules.junmpProcess.listener;
import org.jeecg.module.junmpProcess.dto.json.ChildNode;
import org.jeecg.module.junmpProcess.dto.json.Properties;
import org.jeecg.module.junmpProcess.dto.json.UserInfo;
import org.jeecg.module.junmpProcess.enums.AssigneeTypeEnums;
import org.jeecg.module.junmpProcess.exception.WorkFlowException;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -14,6 +9,11 @@ import org.flowable.bpmn.model.UserTask; ...@@ -14,6 +9,11 @@ import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener; import org.flowable.engine.delegate.ExecutionListener;
import org.jeecg.modules.junmpProcess.dto.json.ChildNode;
import org.jeecg.modules.junmpProcess.dto.json.Properties;
import org.jeecg.modules.junmpProcess.dto.json.UserInfo;
import org.jeecg.modules.junmpProcess.enums.AssigneeTypeEnums;
import org.jeecg.modules.junmpProcess.exception.WorkFlowException;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -21,8 +21,8 @@ import java.util.ArrayList; ...@@ -21,8 +21,8 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static org.jeecg.module.junmpProcess.common.CommonConstants.START_USER_INFO; import static org.jeecg.modules.junmpProcess.common.CommonConstants.START_USER_INFO;
import static org.jeecg.module.junmpProcess.utils.BpmnModelUtils.getChildNode; import static org.jeecg.modules.junmpProcess.utils.BpmnModelUtils.getChildNode;
/** /**
* @author LoveMyOrange * @author LoveMyOrange
......
package org.jeecg.module.junmpProcess.listener; package org.jeecg.modules.junmpProcess.listener;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.DelegateExecution;
...@@ -7,8 +7,8 @@ import org.springframework.stereotype.Component; ...@@ -7,8 +7,8 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import static org.jeecg.module.junmpProcess.common.CommonConstants.BUSINESS_STATUS_4; import static org.jeecg.modules.junmpProcess.common.CommonConstants.BUSINESS_STATUS_4;
import static org.jeecg.module.junmpProcess.common.CommonConstants.PROCESS_STATUS; import static org.jeecg.modules.junmpProcess.common.CommonConstants.PROCESS_STATUS;
/** /**
* @author LoveMyOrange * @author LoveMyOrange
......
package org.jeecg.module.junmpProcess.listener; package org.jeecg.modules.junmpProcess.listener;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.DelegateExecution;
......
package org.jeecg.module.junmpProcess.listener; package org.jeecg.modules.junmpProcess.listener;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService; import org.flowable.engine.RuntimeService;
......
package org.jeecg.module.junmpProcess.listener; package org.jeecg.modules.junmpProcess.listener;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
......
package org.jeecg.module.junmpProcess.mapper; package org.jeecg.modules.junmpProcess.mapper;
import org.jeecg.module.junmpProcess.entity.Departments;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.jeecg.modules.junmpProcess.entity.Departments;
/** /**
* @author : willian fu * @author : willian fu
......
package org.jeecg.module.junmpProcess.mapper; package org.jeecg.modules.junmpProcess.mapper;
import org.jeecg.module.junmpProcess.entity.FormGroups;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.jeecg.modules.junmpProcess.entity.FormGroups;
/** /**
* @author : willian fu * @author : willian fu
......
package org.jeecg.module.junmpProcess.mapper; package org.jeecg.modules.junmpProcess.mapper;
import org.jeecg.module.junmpProcess.entity.ProcessTemplates;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
/** /**
* @author : willian fu * @author : willian fu
......
package org.jeecg.module.junmpProcess.mapper; package org.jeecg.modules.junmpProcess.mapper;
import org.jeecg.module.junmpProcess.entity.TemplateGroup;
import org.jeecg.module.junmpProcess.entity.TemplateGroupBo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import org.jeecg.modules.junmpProcess.entity.TemplateGroup;
import org.jeecg.modules.junmpProcess.entity.TemplateGroupBo;
import java.util.List; import java.util.List;
......
package org.jeecg.module.junmpProcess.mapper; package org.jeecg.modules.junmpProcess.mapper;
import org.jeecg.module.junmpProcess.entity.Users;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.jeecg.modules.junmpProcess.entity.Users;
/** /**
* @author : willian fu * @author : willian fu
......
package org.jeecg.module.junmpProcess.service.Bussiness; package org.jeecg.modules.junmpProcess.service.Bussiness;
/** /**
* @author : willian fu * @author : willian fu
......
package org.jeecg.module.junmpProcess.service.Bussiness; package org.jeecg.modules.junmpProcess.service.Bussiness;
import org.jeecg.module.junmpProcess.dto.FlowEngineDTO; import org.jeecg.modules.junmpProcess.dto.FlowEngineDTO;
import org.jeecg.module.junmpProcess.entity.ProcessTemplates; import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
import org.jeecg.module.junmpProcess.vo.TemplateGroupVo; import org.jeecg.modules.junmpProcess.vo.TemplateGroupVo;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.List; import java.util.List;
...@@ -71,5 +71,11 @@ public interface SettingService { ...@@ -71,5 +71,11 @@ public interface SettingService {
Object updateFormDetail(ProcessTemplates template); Object updateFormDetail(ProcessTemplates template);
/**
* 保存表单
* @param
* @throws InvocationTargetException
* @throws IllegalAccessException
*/
void jsonToBpmn(FlowEngineDTO flowEngineDTO) throws InvocationTargetException, IllegalAccessException; void jsonToBpmn(FlowEngineDTO flowEngineDTO) throws InvocationTargetException, IllegalAccessException;
} }
package org.jeecg.module.junmpProcess.service.Bussiness; package org.jeecg.modules.junmpProcess.service.Bussiness;
import org.jeecg.module.junmpProcess.common.Result;
import org.jeecg.module.junmpProcess.dto.ApplyDTO;
import org.jeecg.module.junmpProcess.dto.HandleDataDTO;
import org.jeecg.module.junmpProcess.dto.StartProcessInstanceDTO;
import org.jeecg.module.junmpProcess.dto.TaskDTO;
import org.jeecg.module.junmpProcess.entity.ProcessTemplates;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.module.junmpProcess.vo.HandleDataVO; import org.jeecg.modules.junmpProcess.common.Result;
import org.jeecg.module.junmpProcess.vo.HistoryProcessInstanceVO; import org.jeecg.modules.junmpProcess.dto.*;
import org.jeecg.module.junmpProcess.vo.MultiVO; import org.jeecg.modules.junmpProcess.dto.json.flowJson.FlowChildNode;
import org.jeecg.module.junmpProcess.vo.TaskVO; import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
import org.jeecg.modules.junmpProcess.vo.HandleDataVO;
import org.jeecg.modules.junmpProcess.vo.HistoryProcessInstanceVO;
import org.jeecg.modules.junmpProcess.vo.MultiVO;
import org.jeecg.modules.junmpProcess.vo.TaskVO;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import java.util.List; import java.util.List;
...@@ -19,6 +17,12 @@ import java.util.Map; ...@@ -19,6 +17,12 @@ import java.util.Map;
public interface WorkProcessService { public interface WorkProcessService {
/** /**
* 创建表单
* @return
*/
boolean createBpmn(FlowChildNode flowdto);
/**
* 获取用户可见表单 * 获取用户可见表单
* @return * @return
*/ */
......
package org.jeecg.module.junmpProcess.service.Bussiness.impl; package org.jeecg.modules.junmpProcess.service.Bussiness.impl;
import org.jeecg.module.junmpProcess.common.R;
import org.jeecg.module.junmpProcess.entity.Departments;
import org.jeecg.module.junmpProcess.service.Bussiness.OrgUserAndDeptService;
import org.jeecg.module.junmpProcess.service.Repository.DepartmentsService;
import org.jeecg.module.junmpProcess.service.Repository.UserService;
import org.jeecg.module.junmpProcess.entity.Users;
import org.jeecg.module.junmpProcess.vo.OrgTreeVo;
import cn.hutool.core.lang.Validator; import cn.hutool.core.lang.Validator;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.jeecg.modules.junmpProcess.common.R;
import org.jeecg.modules.junmpProcess.entity.Departments;
import org.jeecg.modules.junmpProcess.entity.Users;
import org.jeecg.modules.junmpProcess.service.Bussiness.OrgUserAndDeptService;
import org.jeecg.modules.junmpProcess.service.Repository.DepartmentsService;
import org.jeecg.modules.junmpProcess.service.Repository.UserService;
import org.jeecg.modules.junmpProcess.vo.OrgTreeVo;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
......
package org.jeecg.module.junmpProcess.service.Bussiness.impl; package org.jeecg.modules.junmpProcess.service.Bussiness.impl;
import org.jeecg.common.util.SpringContextHolder;
import org.jeecg.module.junmpProcess.common.R;
import org.jeecg.module.junmpProcess.common.WorkFlowConstants;
import org.jeecg.module.junmpProcess.dto.FlowEngineDTO;
import org.jeecg.module.junmpProcess.dto.json.ChildNode;
import org.jeecg.module.junmpProcess.dto.json.SettingsInfo;
import org.jeecg.module.junmpProcess.entity.FormGroups;
import org.jeecg.module.junmpProcess.entity.ProcessTemplates;
import org.jeecg.module.junmpProcess.entity.TemplateGroup;
import org.jeecg.module.junmpProcess.entity.TemplateGroupBo;
import org.jeecg.module.junmpProcess.exception.WorkFlowException;
import org.jeecg.module.junmpProcess.mapper.TemplateGroupMapper;
import org.jeecg.module.junmpProcess.service.Bussiness.SettingService;
import org.jeecg.module.junmpProcess.service.Repository.FormGroupService;
import org.jeecg.module.junmpProcess.service.Repository.ProcessTemplateService;
import org.jeecg.module.junmpProcess.service.Repository.TemplateGroupService;
import org.jeecg.module.junmpProcess.utils.IdWorker;
import org.jeecg.module.junmpProcess.vo.TemplateGroupVo;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -34,6 +13,24 @@ import org.flowable.bpmn.model.Process; ...@@ -34,6 +13,24 @@ import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.*; import org.flowable.bpmn.model.*;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
import org.flowable.engine.delegate.ExecutionListener; import org.flowable.engine.delegate.ExecutionListener;
import org.jeecg.common.util.SpringContextHolder;
import org.jeecg.modules.junmpProcess.common.R;
import org.jeecg.modules.junmpProcess.common.WorkFlowConstants;
import org.jeecg.modules.junmpProcess.dto.FlowEngineDTO;
import org.jeecg.modules.junmpProcess.dto.json.ChildNode;
import org.jeecg.modules.junmpProcess.dto.json.SettingsInfo;
import org.jeecg.modules.junmpProcess.entity.FormGroups;
import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
import org.jeecg.modules.junmpProcess.entity.TemplateGroup;
import org.jeecg.modules.junmpProcess.entity.TemplateGroupBo;
import org.jeecg.modules.junmpProcess.exception.WorkFlowException;
import org.jeecg.modules.junmpProcess.mapper.TemplateGroupMapper;
import org.jeecg.modules.junmpProcess.service.Bussiness.SettingService;
import org.jeecg.modules.junmpProcess.service.Repository.FormGroupService;
import org.jeecg.modules.junmpProcess.service.Repository.ProcessTemplateService;
import org.jeecg.modules.junmpProcess.service.Repository.TemplateGroupService;
import org.jeecg.modules.junmpProcess.utils.IdWorker;
import org.jeecg.modules.junmpProcess.vo.TemplateGroupVo;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -43,7 +40,7 @@ import javax.annotation.Resource; ...@@ -43,7 +40,7 @@ import javax.annotation.Resource;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.*; import java.util.*;
import static org.jeecg.module.junmpProcess.utils.BpmnModelUtils.*; import static org.jeecg.modules.junmpProcess.utils.BpmnModelUtils.*;
/** /**
* @author : willian fu * @author : willian fu
......
package org.jeecg.module.junmpProcess.service.Bussiness.impl; package org.jeecg.modules.junmpProcess.service.Bussiness.impl;
import org.jeecg.module.junmpProcess.common.Result;;
import org.jeecg.module.junmpProcess.dto.*;
import org.jeecg.module.junmpProcess.dto.json.ChildNode;
import org.jeecg.module.junmpProcess.dto.json.FormOperates;
import org.jeecg.module.junmpProcess.dto.json.SettingsInfo;
import org.jeecg.module.junmpProcess.dto.json.UserInfo;
import org.jeecg.module.junmpProcess.entity.ProcessTemplates;
import org.jeecg.module.junmpProcess.exception.WorkFlowException;
import org.jeecg.module.junmpProcess.service.Bussiness.WorkProcessService;
import org.jeecg.module.junmpProcess.service.Repository.ProcessTemplateService;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.sun.org.apache.bcel.internal.generic.RETURN;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.BpmnAutoLayout;
import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.converter.BpmnXMLConverter;
import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.Process;
import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.HistoryService; import org.flowable.engine.HistoryService;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService; import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService; import org.flowable.engine.TaskService;
import org.flowable.engine.delegate.ExecutionListener;
import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity; import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
...@@ -37,17 +30,35 @@ import org.flowable.engine.task.Comment; ...@@ -37,17 +30,35 @@ import org.flowable.engine.task.Comment;
import org.flowable.task.api.DelegationState; import org.flowable.task.api.DelegationState;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstance;
import org.jeecg.module.junmpProcess.vo.*; import org.jeecg.modules.junmpProcess.common.Result;
import org.jeecg.modules.junmpProcess.common.WorkFlowConstants;
import org.jeecg.modules.junmpProcess.dto.*;
import org.jeecg.modules.junmpProcess.dto.json.ChildNode;
import org.jeecg.modules.junmpProcess.dto.json.FormOperates;
import org.jeecg.modules.junmpProcess.dto.json.SettingsInfo;
import org.jeecg.modules.junmpProcess.dto.json.UserInfo;
import org.jeecg.modules.junmpProcess.dto.json.flowJson.FlowChildNode;
import org.jeecg.modules.junmpProcess.dto.json.flowJson.FlowConditionNodes;
import org.jeecg.modules.junmpProcess.dto.json.flowJson.Inout;
import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
import org.jeecg.modules.junmpProcess.entity.TemplateGroup;
import org.jeecg.modules.junmpProcess.exception.WorkFlowException;
import org.jeecg.modules.junmpProcess.service.Bussiness.WorkProcessService;
import org.jeecg.modules.junmpProcess.service.Repository.ProcessTemplateService;
import org.jeecg.modules.junmpProcess.vo.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.InvocationTargetException;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.jeecg.module.junmpProcess.common.CommonConstants.*; import static org.jeecg.modules.junmpProcess.common.CommonConstants.*;
import static org.jeecg.module.junmpProcess.common.WorkFlowConstants.PROCESS_PREFIX; import static org.jeecg.modules.junmpProcess.common.WorkFlowConstants.PROCESS_PREFIX;
import static org.jeecg.module.junmpProcess.utils.BpmnModelUtils.getChildNode; import static org.jeecg.modules.junmpProcess.utils.BpmnModelUtils.*;
;
@Service @Service
public class WorkProcessServiceImpl implements WorkProcessService { public class WorkProcessServiceImpl implements WorkProcessService {
...@@ -64,6 +75,209 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -64,6 +75,209 @@ public class WorkProcessServiceImpl implements WorkProcessService {
@Resource @Resource
private TaskService taskService; private TaskService taskService;
public boolean createBpmn(FlowChildNode FlowDTO) {
// String processJson = FlowDTO.getProcess();
// FlowChildNode childNode = JSONObject.parseObject(processJson, new TypeReference<FlowChildNode>(){});
// Integer groupId = FlowDTO.getGroupId();
// JSONObject jsonObject=new JSONObject();
// BpmnModel bpmnModel = assemBpmnModel( childNode, groupId
// );
// repositoryService.createDeployment()
//// .addBpmnModel(formName + ".bpmn", bpmnModel)
//// .name(formName)
// .category(groupId + "")
// .deploy();
// return true;
// 一.准备工作
BpmnModel bpmnModel = new BpmnModel();
Process process = new Process(); // 相当于图纸
bpmnModel.addProcess(process);
process.setId("Process_"+UUID.randomUUID());
process.setExecutable(true);
// 二.开始结束节点
StartEvent startEvent = new StartEvent();// 新建开始节点
startEvent.setId("_start");
process.addFlowElement(startEvent);// 绘制到图纸
EndEvent endEvent = new EndEvent(); // 新建结束节点
endEvent.setId("_end");// 绘制到图纸
process.addFlowElement(endEvent);
// 三.递归绘制节点
drawNode(process, FlowDTO, "_start", "_end", null);
// 四.自动布局
new BpmnAutoLayout(bpmnModel).execute();
// 五.转xml
BpmnXMLConverter bpmnXMLConverter=new BpmnXMLConverter();
byte[] convertToXML = bpmnXMLConverter.convertToXML(bpmnModel);
String xml=new String(convertToXML);
xml = xml.replaceAll("&lt;","<").replaceAll("&gt;",">");
return true;
}
/**
* 绘制节点
* @param process bpmn process 图纸
* @param node json的节点
* @param preId 上一节点id
* @param endId 结束节点
* @param preExpression 上一节点表达式
*/
public void drawNode(Process process, FlowChildNode node, String preId, String endId, String preExpression) {
// 根据type绘制不同种类的节点
Inout inout = drawNodeByType(process, node);
// 绘制前一根线
process.addFlowElement(createSequenceFlow(preId, inout.getIn(), preExpression));
if (node.getChildNode() == null) {
// 没有下一步, 绘制指向结束的线
process.addFlowElement(createSequenceFlow(inout.getOut(), endId, null));
} else {
// 有下一步, 递归绘制下一个节点
drawNode(process, node.getChildNode(), inout.getOut(), endId, null);
}
}
/**
* 绘制不同种类节点
* @param process
* @param node
* @return
*/
private Inout drawNodeByType(Process process, FlowChildNode node) {
if (node.getType()==0) {//审核节点
return drawAuditNode(process, node);
} else if (node.getType()==1) {//分支节点
return drawExclusiveNode(process, node);
} else {
throw new IllegalArgumentException();
}
}
/**
* 绘制分支节点
* @param process
* @param node
* @return
*/
private Inout drawExclusiveNode(Process process, FlowChildNode node) {
// 开始网关
String startId = "Exclusive_"+UUID.randomUUID();
ExclusiveGateway startGateway = new ExclusiveGateway();
startGateway.setId(startId);
process.addFlowElement(startGateway);
// 结束网关
String endId = "Exclusive_"+UUID.randomUUID();
ExclusiveGateway endGateway = new ExclusiveGateway();
endGateway.setId(endId);
process.addFlowElement(endGateway);
// 绘制分支
List<FlowConditionNodes> branches = node.getFlowConditionNodes();
// 针对 gateway 空任务分支 添加条件表达式
// for (FlowConditionNodes branch : branches) {
// String expression = branch.getConditionGroup();
// if (branch.getChildNode()==null) {
// // 没有子流程,直接绘制结束线
// process.addFlowElement(createSequenceFlow(startId, endId, expression));
// } else {
// // 有子流程,递归绘制子流程
// drawNode(process, branch.getChildNode(), startId, endId, expression);
// }
// }
// int和out不一样
return new Inout(startId, endId);
}
/**
* 创建连线
* @param from
* @param to
* @return
*/
public SequenceFlow createSequenceFlow(String from, String to, String conditionExpression) {
SequenceFlow flow = new SequenceFlow();
flow.setId(from + "-" + to);
flow.setSourceRef(from);
flow.setTargetRef(to);
if (conditionExpression != null) {
flow.setConditionExpression(conditionExpression);
}
return flow;
}
/**
* 绘制审核节点
* @param process
* @param node
* @return
*/
private Inout drawAuditNode(Process process, FlowChildNode node) {
// 绘制节点
String id = "Node_"+UUID.randomUUID();
UserTask userTask = new UserTask();
userTask.setId(id);
userTask.setName(node.getName());
// 设置多实例
userTask.setAssignee("${user}");
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = new MultiInstanceLoopCharacteristics();
// if (node.getAssignee().getMultiMode().equals("顺序审批")) {
// multiInstanceLoopCharacteristics.setSequential(true);
// }
multiInstanceLoopCharacteristics.setElementVariable("user");
// 完成条件
multiInstanceLoopCharacteristics.setCompletionCondition("${nrOfInstances == nrOfCompletedInstances}");
multiInstanceLoopCharacteristics.setInputDataItem("${users}");
userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics);
// 保存json节点配置到扩展属性
Map<String, Object> extensions = new HashMap<>();
extensions.put("node", node);
// BpmnUtil.addExtensionProperty(userTask, extensions);
return new Inout(id, id);
}
private BpmnModel assemBpmnModel( FlowChildNode childNode,
Integer groupId)
{
BpmnModel bpmnModel =new BpmnModel();
List<SequenceFlow> sequenceFlows = Lists.newArrayList();
Map<String,ChildNode> childNodeMap=new HashMap<>();
bpmnModel.setTargetNamespace(groupId+"");
// ExtensionAttribute extensionAttribute=new ExtensionAttribute();
// extensionAttribute.setName("Junmp");
// extensionAttribute.setNamespace("http://flowable.org/bpmn");
// extensionAttribute.setValue(jsonObject.toJSONString());
Process process =new Process();
process.setId(WorkFlowConstants.PROCESS_PREFIX);
// process.setName(formName);
// process.setDocumentation(remark);
// process.addAttribute(extensionAttribute);
bpmnModel.addProcess(process);
StartEvent startEvent = createStartEvent();
process.addFlowElement(startEvent);
String lastNode = null;
// try {
// lastNode = create(startEvent.getId(), childNode,process,bpmnModel,sequenceFlows,childNodeMap);
// } catch (InvocationTargetException e) {
// e.printStackTrace();
// throw new WorkFlowException("操作失败");
// } catch (IllegalAccessException e) {
// e.printStackTrace();
// throw new WorkFlowException("操作失败");
// }
EndEvent endEvent = createEndEvent();
process.addFlowElement(endEvent);
// process.addFlowElement(connect(lastNode, endEvent.getId(),sequenceFlows,childNodeMap,process));
List<FlowableListener> executionListeners =new ArrayList<>();
FlowableListener flowableListener=new FlowableListener();
flowableListener.setEvent(ExecutionListener.EVENTNAME_END);
flowableListener.setImplementationType(ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
flowableListener.setImplementation("${processListener}");
executionListeners.add(flowableListener);
process.setExecutionListeners(executionListeners);
new BpmnAutoLayout(bpmnModel).execute();
return bpmnModel;
}
@Override @Override
public Object getFormGroups(String templateId) { public Object getFormGroups(String templateId) {
......
package org.jeecg.module.junmpProcess.service.Repository; package org.jeecg.modules.junmpProcess.service.Repository;
import org.jeecg.module.junmpProcess.entity.Departments;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.junmpProcess.entity.Departments;
/** /**
* @author : willian fu * @author : willian fu
......
package org.jeecg.module.junmpProcess.service.Repository; package org.jeecg.modules.junmpProcess.service.Repository;
import org.jeecg.module.junmpProcess.entity.FormGroups;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.junmpProcess.entity.FormGroups;
/** /**
* @author : willian fu * @author : willian fu
......
package org.jeecg.module.junmpProcess.service.Repository; package org.jeecg.modules.junmpProcess.service.Repository;
import org.jeecg.module.junmpProcess.entity.ProcessTemplates;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
/** /**
* @author : willian fu * @author : willian fu
......
package org.jeecg.module.junmpProcess.service.Repository; package org.jeecg.modules.junmpProcess.service.Repository;
import org.jeecg.module.junmpProcess.entity.TemplateGroup;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.junmpProcess.entity.TemplateGroup;
/** /**
* @author : willian fu * @author : willian fu
......
package org.jeecg.module.junmpProcess.service.Repository; package org.jeecg.modules.junmpProcess.service.Repository;
import org.jeecg.module.junmpProcess.entity.Users;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.junmpProcess.entity.Users;
/** /**
* @author : willian fu * @author : willian fu
......
package org.jeecg.module.junmpProcess.service.Repository; package org.jeecg.modules.junmpProcess.service.Repository;
/** /**
* @author : willian fu * @author : willian fu
......
package org.jeecg.module.junmpProcess.service.Repository.impl; package org.jeecg.modules.junmpProcess.service.Repository.impl;
import org.jeecg.module.junmpProcess.entity.Departments;
import org.jeecg.module.junmpProcess.mapper.DepartmentsMapper;
import org.jeecg.module.junmpProcess.service.Repository.DepartmentsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.junmpProcess.entity.Departments;
import org.jeecg.modules.junmpProcess.mapper.DepartmentsMapper;
import org.jeecg.modules.junmpProcess.service.Repository.DepartmentsService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
......
package org.jeecg.module.junmpProcess.service.Repository.impl; package org.jeecg.modules.junmpProcess.service.Repository.impl;
import org.jeecg.module.junmpProcess.entity.FormGroups;
import org.jeecg.module.junmpProcess.mapper.FormGroupsMapper;
import org.jeecg.module.junmpProcess.service.Repository.FormGroupService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.junmpProcess.entity.FormGroups;
import org.jeecg.modules.junmpProcess.mapper.FormGroupsMapper;
import org.jeecg.modules.junmpProcess.service.Repository.FormGroupService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
......
package org.jeecg.module.junmpProcess.service.Repository.impl; package org.jeecg.modules.junmpProcess.service.Repository.impl;
import org.jeecg.module.junmpProcess.entity.ProcessTemplates;
import org.jeecg.module.junmpProcess.mapper.ProcessTemplatesMapper;
import org.jeecg.module.junmpProcess.service.Repository.ProcessTemplateService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
import org.jeecg.modules.junmpProcess.mapper.ProcessTemplatesMapper;
import org.jeecg.modules.junmpProcess.service.Repository.ProcessTemplateService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
......
package org.jeecg.module.junmpProcess.service.Repository.impl; package org.jeecg.modules.junmpProcess.service.Repository.impl;
import org.jeecg.module.junmpProcess.entity.TemplateGroup;
import org.jeecg.module.junmpProcess.mapper.TemplateGroupMapper;
import org.jeecg.module.junmpProcess.service.Repository.TemplateGroupService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.junmpProcess.entity.TemplateGroup;
import org.jeecg.modules.junmpProcess.mapper.TemplateGroupMapper;
import org.jeecg.modules.junmpProcess.service.Repository.TemplateGroupService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
......
package org.jeecg.module.junmpProcess.service.Repository.impl; package org.jeecg.modules.junmpProcess.service.Repository.impl;
import org.jeecg.module.junmpProcess.entity.Users;
import org.jeecg.module.junmpProcess.mapper.UsersMapper;
import org.jeecg.module.junmpProcess.service.Repository.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.modules.junmpProcess.entity.Users;
import org.jeecg.modules.junmpProcess.mapper.UsersMapper;
import org.jeecg.modules.junmpProcess.service.Repository.UserService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
......
package org.jeecg.module.junmpProcess.service.Repository.impl; package org.jeecg.modules.junmpProcess.service.Repository.impl;
import org.jeecg.module.junmpProcess.service.Bussiness.SettingService; import org.jeecg.modules.junmpProcess.service.Bussiness.SettingService;
import org.jeecg.module.junmpProcess.service.Repository.WorkspaceProcessService; import org.jeecg.modules.junmpProcess.service.Repository.WorkspaceProcessService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
......
package org.jeecg.module.junmpProcess.utils; package org.jeecg.modules.junmpProcess.utils;
import org.jeecg.module.junmpProcess.common.WorkFlowConstants;
import org.jeecg.module.junmpProcess.dto.json.ChildNode;
import org.jeecg.module.junmpProcess.dto.json.ConditionInfo;
import org.jeecg.module.junmpProcess.dto.json.GroupsInfo;
import org.jeecg.module.junmpProcess.dto.json.Properties;
import org.jeecg.module.junmpProcess.enums.ModeEnums;
import org.jeecg.module.junmpProcess.exception.WorkFlowException;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
...@@ -15,6 +8,14 @@ import org.flowable.bpmn.model.Process; ...@@ -15,6 +8,14 @@ import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.*; import org.flowable.bpmn.model.*;
import org.flowable.engine.delegate.ExecutionListener; import org.flowable.engine.delegate.ExecutionListener;
import org.flowable.engine.delegate.TaskListener; import org.flowable.engine.delegate.TaskListener;
import org.jeecg.modules.junmpProcess.common.WorkFlowConstants;
import org.jeecg.modules.junmpProcess.dto.json.ChildNode;
import org.jeecg.modules.junmpProcess.dto.json.ConditionInfo;
import org.jeecg.modules.junmpProcess.dto.json.GroupsInfo;
import org.jeecg.modules.junmpProcess.dto.json.Properties;
import org.jeecg.modules.junmpProcess.dto.json.flowJson.FlowChildNode;
import org.jeecg.modules.junmpProcess.enums.ModeEnums;
import org.jeecg.modules.junmpProcess.exception.WorkFlowException;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
...@@ -40,7 +41,7 @@ public class BpmnModelUtils { ...@@ -40,7 +41,7 @@ public class BpmnModelUtils {
return serviceTask; return serviceTask;
} }
public static SequenceFlow connect(String from, String to, List<SequenceFlow> sequenceFlows, Map<String, ChildNode> childNodeMap, Process process) { public static SequenceFlow connect( String from, String to, List<SequenceFlow> sequenceFlows, Map<String, ChildNode> childNodeMap, Process process) {
SequenceFlow flow = new SequenceFlow(); SequenceFlow flow = new SequenceFlow();
String sequenceFlowId = id("sequenceFlow"); String sequenceFlowId = id("sequenceFlow");
if(process.getFlowElement(from) !=null && process.getFlowElement(from) instanceof ExclusiveGateway){ if(process.getFlowElement(from) !=null && process.getFlowElement(from) instanceof ExclusiveGateway){
...@@ -217,7 +218,73 @@ public class BpmnModelUtils { ...@@ -217,7 +218,73 @@ public class BpmnModelUtils {
return endEvent; return endEvent;
} }
// public static String FlowCreate(String fromId, FlowChildNode flowNode, Process process, BpmnModel bpmnModel, List<SequenceFlow> sequenceFlows, Map<String,ChildNode> childNodeMap) throws InvocationTargetException, IllegalAccessException {
// Integer nodeType = flowNode.getType();
// if (FlowType.CONCURRENTS.isEqual(nodeType)) {
// return createParallelGatewayBuilder(fromId, flowNode,process,bpmnModel,sequenceFlows,childNodeMap);
// } else if (FlowType.CONDITIONS.isEqual(nodeType)) {
// return createExclusiveGatewayBuilder(fromId, flowNode,process,bpmnModel,sequenceFlows,childNodeMap);
// } else if (FlowType.USER_TASK.isEqual(nodeType)) {
// childNodeMap.put(flowNode.getId(),flowNode);
// JSONObject incoming = flowNode.getIncoming();
// incoming.put("incoming", Collections.singletonList(fromId));
// String id = createTask(process,flowNode,sequenceFlows,childNodeMap);
// // 如果当前任务还有后续任务,则遍历创建后续任务
// ChildNode children = flowNode.getChildren();
// if (Objects.nonNull(children) &&StringUtils.isNotBlank(children.getId())) {
// return create(id, children,process,bpmnModel,sequenceFlows,childNodeMap);
// } else {
// return id;
// }
// }
// else if(Type.ROOT.isEqual(nodeType)){
// childNodeMap.put(flowNode.getId(),flowNode);
// JSONObject incoming = flowNode.getIncoming();
// incoming.put("incoming", Collections.singletonList(fromId));
// String id = createTask(process,flowNode,sequenceFlows,childNodeMap);
// // 如果当前任务还有后续任务,则遍历创建后续任务
// ChildNode children = flowNode.getChildren();
// if (Objects.nonNull(children) &&StringUtils.isNotBlank(children.getId())) {
// return create(id, children,process,bpmnModel,sequenceFlows,childNodeMap);
// } else {
// return id;
// }
// }
// else if(Type.DELAY.isEqual(nodeType)){
// throw new WorkFlowException("还不想写这个功能");
//// childNodeMap.put(flowNode.getId(),flowNode);
//// JSONObject incoming = flowNode.getIncoming();
//// incoming.put("incoming", Collections.singletonList(fromId));
//// String id = createTask(process,flowNode,sequenceFlows,childNodeMap);
//// // 如果当前任务还有后续任务,则遍历创建后续任务
//// ChildNode children = flowNode.getChildren();
//// if (Objects.nonNull(children) &&StringUtils.isNotBlank(children.getId())) {
//// return create(id, children,process,bpmnModel,sequenceFlows,childNodeMap);
//// } else {
//// return id;
//// }
// }
// else if(Type.TRIGGER.isEqual(nodeType)){
// throw new WorkFlowException("还不想写这个功能");
// }
// else if(Type.CC.isEqual(nodeType)){
// throw new WorkFlowException("代码呗回滚了 丢了,暂时先不做");
//// childNodeMap.put(flowNode.getId(),flowNode);
//// JSONObject incoming = flowNode.getIncoming();
//// incoming.put("incoming", Collections.singletonList(fromId));
//// String id = createServiceTask(process,flowNode,sequenceFlows,childNodeMap);
//// // 如果当前任务还有后续任务,则遍历创建后续任务
//// ChildNode children = flowNode.getChildren();
//// if (Objects.nonNull(children) &&StringUtils.isNotBlank(children.getId())) {
//// return create(id, children,process,bpmnModel,sequenceFlows,childNodeMap);
//// } else {
//// return id;
//// }
// }
// else {
// throw new RuntimeException("未知节点类型: nodeType=" + nodeType);
// }
// }
public static String create(String fromId, ChildNode flowNode, Process process,BpmnModel bpmnModel,List<SequenceFlow> sequenceFlows,Map<String,ChildNode> childNodeMap) throws InvocationTargetException, IllegalAccessException { public static String create(String fromId, ChildNode flowNode, Process process,BpmnModel bpmnModel,List<SequenceFlow> sequenceFlows,Map<String,ChildNode> childNodeMap) throws InvocationTargetException, IllegalAccessException {
String nodeType = flowNode.getType(); String nodeType = flowNode.getType();
if (Type.CONCURRENTS.isEqual(nodeType)) { if (Type.CONCURRENTS.isEqual(nodeType)) {
...@@ -451,7 +518,6 @@ public class BpmnModelUtils { ...@@ -451,7 +518,6 @@ public class BpmnModelUtils {
parallelGateway.setId(id); parallelGateway.setId(id);
return parallelGateway; return parallelGateway;
} }
private static String createParallelGatewayBuilder(String formId, ChildNode flowNode,Process process,BpmnModel bpmnModel,List<SequenceFlow> sequenceFlows,Map<String,ChildNode> childNodeMap) throws InvocationTargetException, IllegalAccessException { private static String createParallelGatewayBuilder(String formId, ChildNode flowNode,Process process,BpmnModel bpmnModel,List<SequenceFlow> sequenceFlows,Map<String,ChildNode> childNodeMap) throws InvocationTargetException, IllegalAccessException {
childNodeMap.put(flowNode.getId(),flowNode); childNodeMap.put(flowNode.getId(),flowNode);
String name = flowNode.getName(); String name = flowNode.getName();
...@@ -486,7 +552,7 @@ public class BpmnModelUtils { ...@@ -486,7 +552,7 @@ public class BpmnModelUtils {
String parentId = childNode.getParentId(); String parentId = childNode.getParentId();
ChildNode parentChildNode = childNodeMap.get(parentId); ChildNode parentChildNode = childNodeMap.get(parentId);
boolean conFlag = Type.CONCURRENTS.type boolean conFlag = Type.CONCURRENTS.type
.equals(parentChildNode.getType()); .equals(parentChildNode.getType());
if(!conFlag){ if(!conFlag){
String type = childNode.getType(); String type = childNode.getType();
if(!Type.EMPTY.type.equals(type)){ if(!Type.EMPTY.type.equals(type)){
...@@ -564,6 +630,7 @@ public class BpmnModelUtils { ...@@ -564,6 +630,7 @@ public class BpmnModelUtils {
return parallelGatewayId; return parallelGatewayId;
} }
private static String createTask(Process process,ChildNode flowNode,List<SequenceFlow> sequenceFlows,Map<String,ChildNode> childNodeMap) { private static String createTask(Process process,ChildNode flowNode,List<SequenceFlow> sequenceFlows,Map<String,ChildNode> childNodeMap) {
JSONObject incomingJson = flowNode.getIncoming(); JSONObject incomingJson = flowNode.getIncoming();
List<String> incoming = incomingJson.getJSONArray("incoming").toJavaList(String.class); List<String> incoming = incomingJson.getJSONArray("incoming").toJavaList(String.class);
...@@ -666,7 +733,6 @@ public class BpmnModelUtils { ...@@ -666,7 +733,6 @@ public class BpmnModelUtils {
} }
private enum Type { private enum Type {
/** /**
* 并行事件 * 并行事件
*/ */
...@@ -708,7 +774,48 @@ public class BpmnModelUtils { ...@@ -708,7 +774,48 @@ public class BpmnModelUtils {
} }
} }
private enum FlowType {
/**
* 并行事件
*/
CONCURRENTS(0, ParallelGateway.class),
CONCURRENT(1, SequenceFlow.class),
/**
* 排他事件
*/
CONDITION(2, ExclusiveGateway.class),
CONDITIONS(3, ExclusiveGateway.class),
/**
* 任务
*/
USER_TASK(4, UserTask.class),
EMPTY(5, Object.class),
ROOT(6, UserTask.class),
CC(7, ServiceTask.class),
TRIGGER(8, ServiceTask.class),
DELAY(9, IntermediateCatchEvent.class);
private int type;
private Class<?> typeClass;
FlowType(int type, Class<?> typeClass) {
this.type = type;
this.typeClass = typeClass;
}
public final static Map<String, Class<?>> TYPE_MAP = Maps.newHashMap();
static {
for (Type element : Type.values()) {
TYPE_MAP.put(element.type, element.typeClass);
}
}
public boolean isEqual(int type) {
return this.type==(type);
}
}
public static ChildNode getChildNode(ChildNode childNode,String nodeId){ public static ChildNode getChildNode(ChildNode childNode,String nodeId){
Map<String,ChildNode> childNodeMap =new HashMap<>(); Map<String,ChildNode> childNodeMap =new HashMap<>();
......
package org.jeecg.module.junmpProcess.utils; package org.jeecg.modules.junmpProcess.utils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
......
package org.jeecg.module.junmpProcess.utils; package org.jeecg.modules.junmpProcess.utils;
import org.jeecg.module.junmpProcess.dto.json.UserInfo;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import org.jeecg.modules.junmpProcess.dto.json.UserInfo;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal; import java.math.BigDecimal;
......
package org.jeecg.module.junmpProcess.utils; package org.jeecg.modules.junmpProcess.utils;
import lombok.Cleanup; import lombok.Cleanup;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
......
package org.jeecg.module.junmpProcess.utils; package org.jeecg.modules.junmpProcess.utils;
import java.lang.management.ManagementFactory; import java.lang.management.ManagementFactory;
import java.net.InetAddress; import java.net.InetAddress;
......
package org.jeecg.module.junmpProcess.utils; package org.jeecg.modules.junmpProcess.utils;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
* *
*/ */
package org.jeecg.module.junmpProcess.utils; package org.jeecg.modules.junmpProcess.utils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.DisposableBean;
......
package org.jeecg.module.junmpProcess.utils; package org.jeecg.modules.junmpProcess.utils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.owasp.validator.html.AntiSamy; import org.owasp.validator.html.AntiSamy;
......
package org.jeecg.module.junmpProcess.vo; package org.jeecg.modules.junmpProcess.vo;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.vo; package org.jeecg.modules.junmpProcess.vo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.vo; package org.jeecg.modules.junmpProcess.vo;
import org.jeecg.module.junmpProcess.dto.json.ChildNode;
import org.jeecg.module.junmpProcess.entity.ProcessTemplates;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.jeecg.modules.junmpProcess.dto.json.ChildNode;
import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
......
package org.jeecg.module.junmpProcess.vo; package org.jeecg.modules.junmpProcess.vo;
import org.jeecg.module.junmpProcess.dto.json.UserInfo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.jeecg.modules.junmpProcess.dto.json.UserInfo;
import java.util.Date; import java.util.Date;
......
package org.jeecg.module.junmpProcess.vo; package org.jeecg.modules.junmpProcess.vo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.vo; package org.jeecg.modules.junmpProcess.vo;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.vo; package org.jeecg.modules.junmpProcess.vo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
......
package org.jeecg.module.junmpProcess.vo; package org.jeecg.modules.junmpProcess.vo;
import org.jeecg.module.junmpProcess.entity.ProcessTemplates;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import lombok.Data; import lombok.Data;
import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
import java.util.List; import java.util.List;
......
package org.jeecg.module.junmpProcess.vo; package org.jeecg.modules.junmpProcess.vo;
import lombok.Data; import lombok.Data;
......
package org.jeecg.module.junmpProcess.vo; package org.jeecg.modules.junmpProcess.vo;
import org.jeecg.module.junmpProcess.dto.json.UserInfo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.flowable.task.api.DelegationState; import org.flowable.task.api.DelegationState;
import org.jeecg.modules.junmpProcess.dto.json.UserInfo;
import java.util.Date; import java.util.Date;
......
package org.jeecg.module.junmpProcess.vo; package org.jeecg.modules.junmpProcess.vo;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
......
...@@ -101,13 +101,13 @@ public class LoginController { ...@@ -101,13 +101,13 @@ public class LoginController {
//update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906 //update-end-author:taoyan date:2022-9-13 for: VUEN-2245 【漏洞】发现新漏洞待处理20220906
Object checkCode = redisUtil.get(realKey); Object checkCode = redisUtil.get(realKey);
//当进入登录页时,有一定几率出现验证码错误 #1714 //当进入登录页时,有一定几率出现验证码错误 #1714
if(checkCode==null || !checkCode.toString().equals(lowerCaseCaptcha)) { // if(checkCode==null || !checkCode.toString().equals(lowerCaseCaptcha)) {
log.warn("验证码错误,key= {} , Ui checkCode= {}, Redis checkCode = {}", sysLoginModel.getCheckKey(), lowerCaseCaptcha, checkCode); // log.warn("验证码错误,key= {} , Ui checkCode= {}, Redis checkCode = {}", sysLoginModel.getCheckKey(), lowerCaseCaptcha, checkCode);
result.error500("验证码错误"); // result.error500("验证码错误");
// 改成特殊的code 便于前端判断 // // 改成特殊的code 便于前端判断
result.setCode(HttpStatus.PRECONDITION_FAILED.value()); // result.setCode(HttpStatus.PRECONDITION_FAILED.value());
return result; // return result;
} // }
//update-end-author:taoyan date:20190828 for:校验验证码 //update-end-author:taoyan date:20190828 for:校验验证码
//1. 校验用户是否有效 //1. 校验用户是否有效
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.system.mapper.SysUserTenantMapper"> <mapper namespace="org.jeecg.modules.system.mapper.SysUserTenantMapper">
<!-- 通过租户id获取数据 --> <!-- 通过租户id获取数据 -->
<select id="getPageUserList" resultType="org.jeecg.modules.system.entity.SysUser"> <select id="getPageUserList" resultType="org.jeecg.modules.system.entity.SysUser">
SELECT su.id,su.username,su.realname,su.sex,su.phone FROM sys_user su SELECT su.id,su.username,su.realname,su.sex,su.phone FROM sys_user su
......
...@@ -99,9 +99,9 @@ spring: ...@@ -99,9 +99,9 @@ spring:
datasource: datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
username: ${MYSQL_USER:junmp} username: ${MYSQL_USER:root}
password: ${MYSQL_PWD:123456} password: ${MYSQL_PWD:123456}
url: jdbc:mysql://${MYSQL_HOST:192.168.3.128}:${MYSQL_PORT:3306}/${MYSQL_DB:db_key_app}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&allowPublicKeyRetrieval=true&queryTimeout=2400&nullCatalogMeansCurrent=true url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DB:jeecg-boot}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&allowPublicKeyRetrieval=true&queryTimeout=2400&nullCatalogMeansCurrent=true
druid: druid:
stat-view-servlet: stat-view-servlet:
...@@ -137,8 +137,8 @@ spring: ...@@ -137,8 +137,8 @@ spring:
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
datasource: datasource:
master: master:
url: jdbc:mysql://192.168.3.128:3306/db_key_app?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: junmp username: root
password: 123456 password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
# 多数据源配置 # 多数据源配置
...@@ -169,7 +169,7 @@ mybatis-plus: ...@@ -169,7 +169,7 @@ mybatis-plus:
table-underline: true table-underline: true
configuration: configuration:
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
#log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 返回类型为Map,显示null对应的字段 # 返回类型为Map,显示null对应的字段
call-setters-on-nulls: true call-setters-on-nulls: true
#jeecg专用配置 #jeecg专用配置
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
</parent> </parent>
<properties> <properties>
<activiti.version>6.0.0</activiti.version>
<!-- spring依赖 --> <!-- spring依赖 -->
<spring-boot.version>2.7.10</spring-boot.version> <spring-boot.version>2.7.10</spring-boot.version>
<spring-security-oauth2.version>2.5.2.RELEASE</spring-security-oauth2.version> <spring-security-oauth2.version>2.5.2.RELEASE</spring-security-oauth2.version>
...@@ -177,7 +177,27 @@ ...@@ -177,7 +177,27 @@
<artifactId>spring-boot-configuration-processor</artifactId> <artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<!-- activiti -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>${activiti.version}</version>
<exclusions>
<exclusion>
<groupId>de.odysseus.juel</groupId>
<artifactId>juel-spi</artifactId>
</exclusion>
<exclusion>
<groupId>de.odysseus.juel</groupId>
<artifactId>juel-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.owasp.antisamy</groupId> <groupId>org.owasp.antisamy</groupId>
<artifactId>antisamy</artifactId> <artifactId>antisamy</artifactId>
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论