update 流程节点绑定审批人

This commit is contained in:
lijiarao
2023-10-16 15:35:59 +08:00
parent 2410acf525
commit 658a3d7656
31 changed files with 548 additions and 508 deletions
@@ -5,22 +5,22 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.DictPoint;
import com.jero.common.constant.enums.LanguageEnum;
import com.jero.common.util.MessageUtils;
import com.jero.modules.activiti.entity.ProcessModelNode;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.entity.ProcessNodeOrigin;
import com.jero.modules.activiti.service.LawsProcessNodeOriginService;
import com.jero.modules.activiti.service.LawsProcessNodeService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.activiti.service.ProcessNodeService;
import com.jero.modules.activiti.service.ProcessModelNodeService;
import com.jero.modules.activiti.service.ProcessService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import com.jero.modules.laws.common.constant.ResultCommon;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.activiti.bpmn.converter.BpmnXMLConverter;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
@@ -32,7 +32,6 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
@@ -57,53 +56,11 @@ public class ActivitiController {
@Resource
private TaskService taskService;
@Resource
private LawsProcessNodeOriginService processNodeOriginService;
private ProcessNodeService processNodeService;
@Resource
private LawsProcessNodeService processNodeService;
@ApiOperation(value="部署流程图")
@GetMapping("/deploy")
public Result<Map<String, String>> deploy(@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "classpathResource") String classpathResource,
@RequestParam(value = "resourceName") String resourceName,
@RequestPart(value = "files", required = false) MultipartFile file) {
if (StringUtils.isBlank(name)) {
//根据流程定义Key查询
name = "出差申请流程";
}
// 3、使用RepositoryService进行部署
Deployment deployment = null;
try {
deployment = repositoryService.createDeployment()
//.addClasspathResource("bpmn/diagram_1.bpmn20.xml") // 添加bpmn资源
//.addClasspathResource("bpmn/business-trips.png") // 添加png资源
//.addClasspathResource(classpathResource)
.addInputStream(resourceName, file.getInputStream())
.disableSchemaValidation()
.key(name)
.name(name)
.deploy();
} catch (IOException e) {
e.printStackTrace();
}
// 4、输出部署信息
Map<String, String> map = new HashMap<>();
map.put("流程部署id", deployment.getId());
map.put("流程部署名称:", deployment.getName());
map.put("流程部署key", deployment.getKey());
//创建一个流程定义查询
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
processDefinitionQuery.deploymentId(deployment.getId());
ProcessDefinition processDefinition = processDefinitionQuery.singleResult();
String processDefinitionId = processDefinition.getId();
map.put("流程定义Id", processDefinitionId);
return Result.OK(map);
}
private ProcessModelNodeService modelNodeService;
@Resource
private ProcessNodeLinkService processNodeLinkService;
@ApiOperation(value="启动流程")
@PostMapping("/start")
@@ -114,7 +71,7 @@ public class ActivitiController {
// 2、获取RunTimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
// 3、根据流程定义Id启动流程
// 3、根据流程key启动流程
ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey(key, map);
String processDefinitionId = processInstance.getProcessDefinitionId();
@@ -125,25 +82,6 @@ public class ActivitiController {
map1.put("流程实例id", processInstance.getId());
map1.put("当前活动Id", processInstance.getActivityId());
//从流程节点源表中保存一份流程节点信息到流程节点表
LambdaQueryWrapper<ProcessNodeOrigin> processNodeOriginLambdaQueryWrapper = new LambdaQueryWrapper<>();
processNodeOriginLambdaQueryWrapper.eq(ProcessNodeOrigin::getNodeType,"userTask")
.orderByAsc(ProcessNodeOrigin::getSort);
List<ProcessNodeOrigin> processNodeOrigins = processNodeOriginService.list(processNodeOriginLambdaQueryWrapper);
List<ProcessNode> processNodes = new ArrayList<>();
for (ProcessNodeOrigin processNodeOrigin : processNodeOrigins) {
ProcessNode processNode = new ProcessNode();
BeanUtils.copyProperties(processNodeOrigin, processNode);
processNode.setId(null);
processNodes.add(processNode);
}
processNodeService.saveBatch(processNodes);
for (ProcessNode processNode : processNodes) {
if (processNode.getNodeName().equals("填写基本信息,在线编辑,分发其他起草人")) {
//todo 关联关系
}
}
String mainDrafter = map.get("mainDrafter").toString();
return Result.OK(map1);
@@ -333,4 +271,28 @@ public class ActivitiController {
LanguageEnum language = MessageUtils.getLanguage();
return Result.OK(msg1 + "\n" + msg2);
}
@DictPoint
@GetMapping("/getNodeList")
@ApiImplicitParams({
@ApiImplicitParam(name = "processDefinitionId", value = "流程定义id"),
@ApiImplicitParam(name = "processInstanceId", value = "流程实例id(这个参数会去查绑定好的用户)")
})
@ApiOperation("获得节点列表")
public Result<List<ProcessNode>> getNodeList(String processDefinitionId,String processInstanceId) {
//查询节点信息
List<ProcessNode> nodeList = processNodeService.getNodeList(processDefinitionId,processInstanceId);
return Result.OK(nodeList);
}
@PostMapping("/saveNodeUserLink")
@ApiImplicitParams({
@ApiImplicitParam(name = "processDefinitionId", value = "流程定义id"),
@ApiImplicitParam(name = "processInstanceId", value = "流程实例id")
})
@ApiOperation("保存节点用户关系")
public Result<String> saveNodeUserLink(String processDefinitionId,String processInstanceId,@RequestBody Map<String,Object> map) {
processNodeLinkService.saveNodeUserLink(processDefinitionId,processInstanceId,map);
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
}
}
@@ -10,7 +10,7 @@ import com.jero.common.util.MessageUtils;
import com.jero.modules.activiti.entity.ProcessModelNode;
import com.jero.modules.activiti.listener.CompleteListener;
import com.jero.modules.activiti.listener.CreateListener;
import com.jero.modules.activiti.service.LawsProcessNodeOriginService;
import com.jero.modules.activiti.service.ProcessNodeService;
import com.jero.modules.activiti.service.ProcessModelNodeService;
import com.jero.modules.activiti.util.CreatedTools;
import com.jero.modules.activiti.vo.AddTaskVO;
@@ -35,11 +35,8 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
@@ -61,7 +58,7 @@ public class ModelerController {
@Autowired
private ObjectMapper objectMapper;
@Resource
private LawsProcessNodeOriginService processNodeOriginService;
private ProcessNodeService processNodeService;
@Resource
private ProcessModelNodeService processModelNodeService;
//@Autowired
@@ -102,12 +99,12 @@ public class ModelerController {
ActivitiListener createListener = new ActivitiListener();
createListener.setEvent(TaskListener.EVENTNAME_CREATE);
createListener.setImplementationType("class");
createListener.setImplementation(CreateListener.class.toString());
createListener.setImplementation(CreateListener.class.getName());
taskListeners.add(createListener);
ActivitiListener completeListener = new ActivitiListener();
completeListener.setEvent(TaskListener.EVENTNAME_COMPLETE);
completeListener.setImplementationType("class");
completeListener.setImplementation(CompleteListener.class.toString());
completeListener.setImplementation(CompleteListener.class.getName());
taskListeners.add(completeListener);
userTask.setTaskListeners(taskListeners);
}
@@ -119,47 +116,6 @@ public class ModelerController {
return Result.OK(modelId);
}
@ApiOperation(value = "新建模板")
@ApiImplicitParam(name = "category_id", value = "类型id")
@SuppressWarnings("deprecation")
@GetMapping("/create")
public void newModel(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// 初始化一个空模型
Model model = repositoryService.newModel();
// 设置一些默认信息
String name = "";
String description = "";
int revision = 1;
String key = "m_" + CreatedTools.getCreated();
// 设置子系统
//model.setTenantId("子系统1");
//model.setCategory(category_id);
ObjectNode modelNode = objectMapper.createObjectNode();
modelNode.put(ModelDataJsonConstants.MODEL_NAME, name);
modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);
modelNode.put(ModelDataJsonConstants.MODEL_REVISION, revision);
model.setName(name);
model.setKey(key);
model.setMetaInfo(modelNode.toString());
repositoryService.saveModel(model);
String id = model.getId();
// 完善ModelEditorSource
ObjectNode editorNode = objectMapper.createObjectNode();
editorNode.put("id", "canvas");
editorNode.put("resourceId", "canvas");
ObjectNode stencilSetNode = objectMapper.createObjectNode();
stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
editorNode.put("stencilset", stencilSetNode);
repositoryService.addModelEditorSource(id, editorNode.toString().getBytes("utf-8"));
response.sendRedirect(request.getContextPath() + "/modeler.html?modelId=" + id);
}
@ApiOperation(value = "模板列表")
@ApiImplicitParams({ @ApiImplicitParam(name = "name", value = "名称"),
@ApiImplicitParam(name = "category", value = "类型") })
@@ -281,7 +237,8 @@ public class ModelerController {
processDefinitionQuery.deploymentId(deployment.getId());
ProcessDefinition processDefinition = processDefinitionQuery.singleResult();
String processDefinitionId = processDefinition.getId();
processNodeOriginService.copyNodeFromModel(modelId,processDefinitionId);
processNodeService.copyNodeFromModel(modelId,processDefinitionId);
// 4、输出部署信息
Map<String, String> map = new HashMap<>();
map.put("流程部署id", deployment.getId());