-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/condition-expression-display-template.html b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/condition-expression-display-template.html
deleted file mode 100644
index 3b3c4fa53..000000000
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/condition-expression-display-template.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
{{property.value.expression.staticValue|limitTo:20}}
-
{{property.value|limitTo:20}}
-
{{'PROPERTY.SEQUENCEFLOW.CONDITION.NO-CONDITION-DISPLAY' | translate}}
\ No newline at end of file
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/decisiontable-reference-popup.html b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/decisiontable-reference-popup.html
deleted file mode 100644
index 0ed8a56d6..000000000
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/decisiontable-reference-popup.html
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
-
-
-
-
-
PROPERTY.DECISIONTABLEREFERENCE.ERROR.FORM
-
-
-
-
-
-
-
-
-
{{decisionTable.name}}
-
![]()
-
-
-
PROPERTY.DECISIONTABLEREFERENCE.DECISIONTABLE.LOADING
-
-
-
PROPERTY.DECISIONTABLEREFERENCE.DECISIONTABLE.EMPTY
-
-
-
-
-
-
{{'DECISION-TABLE.POPUP.CREATE-DESCRIPTION' | translate}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/decisiontable-reference-write-template.html b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/decisiontable-reference-write-template.html
deleted file mode 100644
index efbf9f9a6..000000000
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/decisiontable-reference-write-template.html
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/duedate-display-template.html b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/duedate-display-template.html
deleted file mode 100644
index a08966bb2..000000000
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/duedate-display-template.html
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
PROPERTY.DUEDATE.DEFINED
-
PROPERTY.DUEDATE.DEFINED
-
{{property.value.duedateExpression}}
-
{{property.value}}
-
PROPERTY.DUEDATE.EMPTY
\ No newline at end of file
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/duedate-popup.html b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/duedate-popup.html
deleted file mode 100644
index 7e5cf505b..000000000
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/duedate-popup.html
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/errorgrid-critical.html b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/errorgrid-critical.html
deleted file mode 100644
index d997030d8..000000000
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/errorgrid-critical.html
+++ /dev/null
@@ -1,5 +0,0 @@
-
\ No newline at end of file
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/event-listeners-popup.html b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/event-listeners-popup.html
deleted file mode 100644
index b36962171..000000000
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/event-listeners-popup.html
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
PROPERTY.EVENTLISTENERS.UNSELECTED
-
-
-
-
-
-
-
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/execution-listeners-write-template.html b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/execution-listeners-write-template.html
deleted file mode 100644
index e0de5dc9c..000000000
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/execution-listeners-write-template.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/fields-popup.html b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/fields-popup.html
deleted file mode 100644
index 3821a602f..000000000
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/main/resources/static/workflow/modeler/editor/editor-app/configuration/properties/fields-popup.html
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
PROPERTY.FIELDS.EMPTY
-
-
-
-
-
-
-
-
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/test/resources/application.yml b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/test/resources/application.yml
index 8d68569e7..1c25d9f26 100644
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/test/resources/application.yml
+++ b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/test/resources/application.yml
@@ -14,5 +14,6 @@ spring:
logging:
level:
org.flowable: debug
+ org.activiti: debug
mybatis:
dynamic-datasource: false
\ No newline at end of file
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/test/resources/processes/SimpleProcess.bpmn20.xml b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/test/resources/processes/SimpleProcess.bpmn20.xml
new file mode 100644
index 000000000..6f1896bbf
--- /dev/null
+++ b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable-modeler/src/test/resources/processes/SimpleProcess.bpmn20.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/pom.xml b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/pom.xml
index f1b0fd14f..0fb024dc3 100644
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/pom.xml
+++ b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/pom.xml
@@ -17,12 +17,6 @@
org.flowable
flowable-spring-boot-starter-basic
${flowable.version}
-
-
- log4j
- log4j
-
-
@@ -86,11 +80,6 @@
org.springframework.boot
spring-boot-starter-web
-
- org.hswebframework.web
- hsweb-authorization-api
- ${project.version}
-
org.hswebframework.web
hsweb-commons-entity
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/controller/BpmDeploymentController.java b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/controller/BpmDeploymentController.java
index 1f9f4a7fb..0bcc2cd18 100644
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/controller/BpmDeploymentController.java
+++ b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/controller/BpmDeploymentController.java
@@ -1,289 +1,289 @@
-package org.hswebframework.web.workflow.flowable.controller;
-
-import com.alibaba.fastjson.JSONObject;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.activiti.bpmn.converter.BpmnXMLConverter;
-import org.activiti.bpmn.model.BpmnModel;
-import org.activiti.editor.constants.ModelDataJsonConstants;
-import org.activiti.editor.language.json.converter.BpmnJsonConverter;
-import org.activiti.engine.history.HistoricProcessInstance;
-import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
-import org.activiti.engine.impl.pvm.process.ActivityImpl;
-import org.activiti.engine.repository.DeploymentBuilder;
-import org.activiti.engine.repository.Model;
-import org.activiti.engine.repository.ProcessDefinition;
-import org.activiti.engine.repository.ProcessDefinitionQuery;
-import org.apache.commons.io.FilenameUtils;
-import org.hsweb.ezorm.core.PropertyWrapper;
-import org.hsweb.ezorm.core.SimplePropertyWrapper;
-import org.hsweb.ezorm.core.param.TermType;
-import org.hswebframework.web.commons.entity.PagerResult;
-import org.hswebframework.web.commons.entity.param.QueryParamEntity;
-import org.hswebframework.web.controller.message.ResponseMessage;
-import org.hswebframework.web.workflow.flowable.service.BpmActivityService;
-import org.hswebframework.web.workflow.flowable.service.BpmProcessService;
-import org.hswebframework.web.workflow.flowable.service.BpmTaskService;
-import org.hswebframework.web.workflow.flowable.utils.FlowableAbstract;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletResponse;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.util.List;
-import java.util.zip.ZipInputStream;
-
-/**
- * @Author wangwei
- * @Date 2017/7/31.
- */
-@RestController
-@RequestMapping("/workflow/definition")
-public class BpmDeploymentController extends FlowableAbstract {
-
- protected Logger logger = LoggerFactory.getLogger(this.getClass());
-
- @Autowired
- BpmTaskService bpmTaskService;
-
- @Autowired
- BpmProcessService bpmProcessService;
- @Autowired
- BpmActivityService bpmActivityService;
-
- /**
- * 流程定义列表
- */
- @GetMapping("/list")
- public ResponseMessage> processList(QueryParamEntity param) {
- ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
- param.getTerms().forEach((term) -> {
-
- PropertyWrapper valueWrapper = new SimplePropertyWrapper(term.getValue());
- String stringValue = valueWrapper.toString();
- switch (term.getColumn()) {
- case "name":
- if (term.getTermType().equals(TermType.like)) {
- processDefinitionQuery.processDefinitionNameLike(stringValue);
- } else
- processDefinitionQuery.processDefinitionName(stringValue);
- break;
- case "key":
- if (term.getTermType().equals(TermType.like)) {
- processDefinitionQuery.processDefinitionKeyLike(stringValue);
- } else
- processDefinitionQuery.processDefinitionKey(stringValue);
- break;
- case "category":
- if (term.getTermType().equals(TermType.like))
- processDefinitionQuery.processDefinitionCategoryLike(stringValue);
- else
- processDefinitionQuery.processDefinitionCategory(stringValue);
- break;
- case "deploymentId":
- processDefinitionQuery.deploymentId(stringValue);
- break;
- }
- });
- int total = (int) processDefinitionQuery.count();
- param.rePaging(total);
- List models = processDefinitionQuery.listPage(param.getPageIndex(), param.getPageSize() * (param.getPageIndex() + 1));
- return ResponseMessage.ok(new PagerResult<>(total, models))
- .exclude(ProcessDefinitionEntity.class,"identityLinks");
- }
-
- /**
- * 部署流程资源
- * 加载ZIP文件中的流程
- */
- @PostMapping(value="/deploy")
- public Object deploy(@RequestParam(value = "file", required = true) MultipartFile file) {
- JSONObject modelNode = new JSONObject();
- modelNode.put("succ","false");
- // 获取上传的文件名
- String fileName = file.getOriginalFilename();
-
- try {
- // 得到输入流(字节流)对象
- InputStream fileInputStream = file.getInputStream();
-
- // 文件的扩展名
- String extension = FilenameUtils.getExtension(fileName);
-
- // zip或者bar类型的文件用ZipInputStream方式部署
- DeploymentBuilder deployment = repositoryService.createDeployment();
- if (extension.equals("zip") || extension.equals("bar")) {
- ZipInputStream zip = new ZipInputStream(fileInputStream);
- deployment.addZipInputStream(zip);
- } else {
- // 其他类型的文件直接部署
- deployment.addInputStream(fileName, fileInputStream);
- }
- deployment.deploy();
- modelNode.put("message","流程部署完成");
- } catch (Exception e) {
- modelNode.put("message","流程部署失败,获取文件流失败");
- }
-
- return modelNode;
- }
-
- /**
- * 读取流程资源
- *
- * @param processDefinitionId 流程定义ID
- * @param resourceName 资源名称
- */
- @GetMapping(value = "/read-resource/{processDefinitionId}/{resourceName}")
- public void readResource(@PathVariable String processDefinitionId, @PathVariable String resourceName, HttpServletResponse response)
- throws Exception {
- ProcessDefinitionQuery pdq = repositoryService.createProcessDefinitionQuery();
- ProcessDefinition pd = pdq.processDefinitionId(processDefinitionId).singleResult();
-
- // 通过接口读取
- InputStream resourceAsStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), resourceName);
-
- // 输出资源内容到相应对象
- byte[] b = new byte[1024];
- int len = -1;
- while ((len = resourceAsStream.read(b, 0, 1024)) != -1) {
- response.getOutputStream().write(b, 0, len);
- }
- }
-
- /***
- * 流程定义转换Model
- * @param processDefinitionId
- * @return
- * @throws UnsupportedEncodingException
- * @throws XMLStreamException
- */
- @PutMapping(value = "/convert-to-model/{processDefinitionId}")
- public Object convertToModel(@PathVariable String processDefinitionId)
- throws UnsupportedEncodingException, XMLStreamException {
- JSONObject jsonObject = new JSONObject();
- try {
- ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
- .processDefinitionId(processDefinitionId).singleResult();
- InputStream bpmnStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),
- processDefinition.getResourceName());
- XMLInputFactory xif = XMLInputFactory.newInstance();
- InputStreamReader in = new InputStreamReader(bpmnStream, "UTF-8");
- XMLStreamReader xtr = xif.createXMLStreamReader(in);
- BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr);
-
- BpmnJsonConverter converter = new BpmnJsonConverter();
- com.fasterxml.jackson.databind.node.ObjectNode modelNode = converter.convertToJson(bpmnModel);
- Model modelData = repositoryService.newModel();
- modelData.setKey(processDefinition.getKey());
- modelData.setName(processDefinition.getResourceName().substring(0, processDefinition.getResourceName().indexOf(".")));
- modelData.setCategory(processDefinition.getDeploymentId());
-
- ObjectNode modelObjectNode = new ObjectMapper().createObjectNode();
- modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefinition.getName());
- modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
- modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, processDefinition.getDescription());
- modelData.setMetaInfo(modelObjectNode.toString());
-
- repositoryService.saveModel(modelData);
-
- repositoryService.addModelEditorSource(modelData.getId(), modelNode.toString().getBytes("utf-8"));
- jsonObject.put("succ",true);
- jsonObject.put("message","转换完成");
- }catch (Exception e){
- jsonObject.put("succ",false);
- jsonObject.put("message","转换失败");
- }
- return jsonObject;
- }
-
- /**
- * 删除部署的流程,如果流程下有正在运行的流程实例则报错
- *
- * @param deploymentId 流程部署ID
- */
- @PutMapping(value = "/delete-deployment/{deploymentId}")
- @ResponseStatus(value = HttpStatus.OK)
- public Object deleteProcessDefinition(@PathVariable String deploymentId) {
- JSONObject jsonObject = new JSONObject();
- try{
- repositoryService.deleteDeployment(deploymentId);
- jsonObject.put("succ",true);
- }catch (Exception e){
- jsonObject.put("succ",false);
- }
- return jsonObject;
- }
-
- /**
- * 删除部署的流程,级联删除流程实例
- *
- * @param deploymentId 流程部署ID
- */
- @PutMapping(value = "/delete-deploy/{deploymentId}")
- @ResponseStatus(value = HttpStatus.OK)
- public Object deleteProcess(@PathVariable String deploymentId) {
- JSONObject jsonObject = new JSONObject();
- try{
- repositoryService.deleteDeployment(deploymentId,true);
- jsonObject.put("succ",true);
- }catch (Exception e){
- jsonObject.put("succ",false);
- }
- return jsonObject;
- }
-
- /**
- * 查看当前节点流程图
- * @param processInstanceId
- * @return 当前节点
- * window.open('/showImage?processInstanceId=' + processInstanceId, 'newwindow', 'height=500, width=1000, top=100,left=200, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');
- *
- <#if message??>
-
${message!}
- <#else>
-
}/workflow/document/alldoc/findPic/${procDefId!})
-
-
- #if>
-
- */
- @GetMapping("/showImage/{processInstanceId}")
- public Object showImage(@PathVariable String processInstanceId){
- JSONObject jsonObject = new JSONObject();
- HistoricProcessInstance processInstance = bpmTaskService.selectHisProInst(processInstanceId);
- if(processInstance!=null){
- ActivityImpl activity = bpmActivityService.getActivityByProcInstId(processInstance.getProcessDefinitionId(),processInstance.getId());
- jsonObject.put("activity",activity);
- jsonObject.put("procDefId",processInstance.getProcessDefinitionId());
- }else{
- jsonObject.put("message","获取流程图失败");
- logger.debug("获取流程节点,processInstanceId:"+processInstanceId);
- }
- return jsonObject;
- }
-
- @GetMapping("/findPic/{procDefId}")
- public void findPic(@PathVariable String procDefId,HttpServletResponse response){
- try{
- InputStream inputStream = bpmProcessService.findProcessPic(procDefId);
- byte[] b = new byte[1024];
- int len = 0;
- while ((len = inputStream.read(b,0,1024))!=-1){
- response.getOutputStream().write(b, 0, len);
- }
- }catch (Exception e){
- logger.debug("获取流程图失败,procDefId:"+procDefId);
- }
- }
-}
+//package org.hswebframework.web.workflow.flowable.controller;
+//
+//import com.alibaba.fastjson.JSONObject;
+//import com.fasterxml.jackson.databind.ObjectMapper;
+//import com.fasterxml.jackson.databind.node.ObjectNode;
+//import org.activiti.bpmn.converter.BpmnXMLConverter;
+//import org.activiti.bpmn.model.BpmnModel;
+//import org.activiti.editor.constants.ModelDataJsonConstants;
+//import org.activiti.editor.language.json.converter.BpmnJsonConverter;
+//import org.activiti.engine.history.HistoricProcessInstance;
+//import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
+//import org.activiti.engine.impl.pvm.process.ActivityImpl;
+//import org.activiti.engine.repository.DeploymentBuilder;
+//import org.activiti.engine.repository.Model;
+//import org.activiti.engine.repository.ProcessDefinition;
+//import org.activiti.engine.repository.ProcessDefinitionQuery;
+//import org.apache.commons.io.FilenameUtils;
+//import org.hsweb.ezorm.core.PropertyWrapper;
+//import org.hsweb.ezorm.core.SimplePropertyWrapper;
+//import org.hsweb.ezorm.core.param.TermType;
+//import org.hswebframework.web.commons.entity.PagerResult;
+//import org.hswebframework.web.commons.entity.param.QueryParamEntity;
+//import org.hswebframework.web.controller.message.ResponseMessage;
+//import org.hswebframework.web.workflow.flowable.service.BpmActivityService;
+//import org.hswebframework.web.workflow.flowable.service.BpmProcessService;
+//import org.hswebframework.web.workflow.flowable.service.BpmTaskService;
+//import org.hswebframework.web.workflow.flowable.utils.FlowableAbstract;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.http.HttpStatus;
+//import org.springframework.web.bind.annotation.*;
+//import org.springframework.web.multipart.MultipartFile;
+//
+//import javax.servlet.http.HttpServletResponse;
+//import javax.xml.stream.XMLInputFactory;
+//import javax.xml.stream.XMLStreamException;
+//import javax.xml.stream.XMLStreamReader;
+//import java.io.InputStream;
+//import java.io.InputStreamReader;
+//import java.io.UnsupportedEncodingException;
+//import java.util.List;
+//import java.util.zip.ZipInputStream;
+//
+///**
+// * @Author wangwei
+// * @Date 2017/7/31.
+// */
+//@RestController
+//@RequestMapping("/workflow/definition")
+//public class BpmDeploymentController extends FlowableAbstract {
+//
+// protected Logger logger = LoggerFactory.getLogger(this.getClass());
+//
+// @Autowired
+// BpmTaskService bpmTaskService;
+//
+// @Autowired
+// BpmProcessService bpmProcessService;
+// @Autowired
+// BpmActivityService bpmActivityService;
+//
+// /**
+// * 流程定义列表
+// */
+// @GetMapping("/list")
+// public ResponseMessage> processList(QueryParamEntity param) {
+// ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
+// param.getTerms().forEach((term) -> {
+//
+// PropertyWrapper valueWrapper = new SimplePropertyWrapper(term.getValue());
+// String stringValue = valueWrapper.toString();
+// switch (term.getColumn()) {
+// case "name":
+// if (term.getTermType().equals(TermType.like)) {
+// processDefinitionQuery.processDefinitionNameLike(stringValue);
+// } else
+// processDefinitionQuery.processDefinitionName(stringValue);
+// break;
+// case "key":
+// if (term.getTermType().equals(TermType.like)) {
+// processDefinitionQuery.processDefinitionKeyLike(stringValue);
+// } else
+// processDefinitionQuery.processDefinitionKey(stringValue);
+// break;
+// case "category":
+// if (term.getTermType().equals(TermType.like))
+// processDefinitionQuery.processDefinitionCategoryLike(stringValue);
+// else
+// processDefinitionQuery.processDefinitionCategory(stringValue);
+// break;
+// case "deploymentId":
+// processDefinitionQuery.deploymentId(stringValue);
+// break;
+// }
+// });
+// int total = (int) processDefinitionQuery.count();
+// param.rePaging(total);
+// List models = processDefinitionQuery.listPage(param.getPageIndex(), param.getPageSize() * (param.getPageIndex() + 1));
+// return ResponseMessage.ok(new PagerResult<>(total, models))
+// .exclude(ProcessDefinitionEntity.class,"identityLinks");
+// }
+//
+// /**
+// * 部署流程资源
+// * 加载ZIP文件中的流程
+// */
+// @PostMapping(value="/deploy")
+// public Object deploy(@RequestParam(value = "file", required = true) MultipartFile file) {
+// JSONObject modelNode = new JSONObject();
+// modelNode.put("succ","false");
+// // 获取上传的文件名
+// String fileName = file.getOriginalFilename();
+//
+// try {
+// // 得到输入流(字节流)对象
+// InputStream fileInputStream = file.getInputStream();
+//
+// // 文件的扩展名
+// String extension = FilenameUtils.getExtension(fileName);
+//
+// // zip或者bar类型的文件用ZipInputStream方式部署
+// DeploymentBuilder deployment = repositoryService.createDeployment();
+// if (extension.equals("zip") || extension.equals("bar")) {
+// ZipInputStream zip = new ZipInputStream(fileInputStream);
+// deployment.addZipInputStream(zip);
+// } else {
+// // 其他类型的文件直接部署
+// deployment.addInputStream(fileName, fileInputStream);
+// }
+// deployment.deploy();
+// modelNode.put("message","流程部署完成");
+// } catch (Exception e) {
+// modelNode.put("message","流程部署失败,获取文件流失败");
+// }
+//
+// return modelNode;
+// }
+//
+// /**
+// * 读取流程资源
+// *
+// * @param processDefinitionId 流程定义ID
+// * @param resourceName 资源名称
+// */
+// @GetMapping(value = "/read-resource/{processDefinitionId}/{resourceName}")
+// public void readResource(@PathVariable String processDefinitionId, @PathVariable String resourceName, HttpServletResponse response)
+// throws Exception {
+// ProcessDefinitionQuery pdq = repositoryService.createProcessDefinitionQuery();
+// ProcessDefinition pd = pdq.processDefinitionId(processDefinitionId).singleResult();
+//
+// // 通过接口读取
+// InputStream resourceAsStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), resourceName);
+//
+// // 输出资源内容到相应对象
+// byte[] b = new byte[1024];
+// int len = -1;
+// while ((len = resourceAsStream.read(b, 0, 1024)) != -1) {
+// response.getOutputStream().write(b, 0, len);
+// }
+// }
+//
+// /***
+// * 流程定义转换Model
+// * @param processDefinitionId
+// * @return
+// * @throws UnsupportedEncodingException
+// * @throws XMLStreamException
+// */
+// @PutMapping(value = "/convert-to-model/{processDefinitionId}")
+// public Object convertToModel(@PathVariable String processDefinitionId)
+// throws UnsupportedEncodingException, XMLStreamException {
+// JSONObject jsonObject = new JSONObject();
+// try {
+// ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
+// .processDefinitionId(processDefinitionId).singleResult();
+// InputStream bpmnStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),
+// processDefinition.getResourceName());
+// XMLInputFactory xif = XMLInputFactory.newInstance();
+// InputStreamReader in = new InputStreamReader(bpmnStream, "UTF-8");
+// XMLStreamReader xtr = xif.createXMLStreamReader(in);
+// BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr);
+//
+// BpmnJsonConverter converter = new BpmnJsonConverter();
+// com.fasterxml.jackson.databind.node.ObjectNode modelNode = converter.convertToJson(bpmnModel);
+// Model modelData = repositoryService.newModel();
+// modelData.setKey(processDefinition.getKey());
+// modelData.setName(processDefinition.getResourceName().substring(0, processDefinition.getResourceName().indexOf(".")));
+// modelData.setCategory(processDefinition.getDeploymentId());
+//
+// ObjectNode modelObjectNode = new ObjectMapper().createObjectNode();
+// modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, processDefinition.getName());
+// modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
+// modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, processDefinition.getDescription());
+// modelData.setMetaInfo(modelObjectNode.toString());
+//
+// repositoryService.saveModel(modelData);
+//
+// repositoryService.addModelEditorSource(modelData.getId(), modelNode.toString().getBytes("utf-8"));
+// jsonObject.put("succ",true);
+// jsonObject.put("message","转换完成");
+// }catch (Exception e){
+// jsonObject.put("succ",false);
+// jsonObject.put("message","转换失败");
+// }
+// return jsonObject;
+// }
+//
+// /**
+// * 删除部署的流程,如果流程下有正在运行的流程实例则报错
+// *
+// * @param deploymentId 流程部署ID
+// */
+// @PutMapping(value = "/delete-deployment/{deploymentId}")
+// @ResponseStatus(value = HttpStatus.OK)
+// public Object deleteProcessDefinition(@PathVariable String deploymentId) {
+// JSONObject jsonObject = new JSONObject();
+// try{
+// repositoryService.deleteDeployment(deploymentId);
+// jsonObject.put("succ",true);
+// }catch (Exception e){
+// jsonObject.put("succ",false);
+// }
+// return jsonObject;
+// }
+//
+// /**
+// * 删除部署的流程,级联删除流程实例
+// *
+// * @param deploymentId 流程部署ID
+// */
+// @PutMapping(value = "/delete-deploy/{deploymentId}")
+// @ResponseStatus(value = HttpStatus.OK)
+// public Object deleteProcess(@PathVariable String deploymentId) {
+// JSONObject jsonObject = new JSONObject();
+// try{
+// repositoryService.deleteDeployment(deploymentId,true);
+// jsonObject.put("succ",true);
+// }catch (Exception e){
+// jsonObject.put("succ",false);
+// }
+// return jsonObject;
+// }
+//
+// /**
+// * 查看当前节点流程图
+// * @param processInstanceId
+// * @return 当前节点
+// * window.open('/showImage?processInstanceId=' + processInstanceId, 'newwindow', 'height=500, width=1000, top=100,left=200, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');
+// *
+// <#if message??>
+//
${message!}
+// <#else>
+//
}/workflow/document/alldoc/findPic/${procDefId!})
+//
+//
+// #if>
+//
+// */
+// @GetMapping("/showImage/{processInstanceId}")
+// public Object showImage(@PathVariable String processInstanceId){
+// JSONObject jsonObject = new JSONObject();
+// HistoricProcessInstance processInstance = bpmTaskService.selectHisProInst(processInstanceId);
+// if(processInstance!=null){
+// ActivityImpl activity = bpmActivityService.getActivityByProcInstId(processInstance.getProcessDefinitionId(),processInstance.getId());
+// jsonObject.put("activity",activity);
+// jsonObject.put("procDefId",processInstance.getProcessDefinitionId());
+// }else{
+// jsonObject.put("message","获取流程图失败");
+// logger.debug("获取流程节点,processInstanceId:"+processInstanceId);
+// }
+// return jsonObject;
+// }
+//
+// @GetMapping("/findPic/{procDefId}")
+// public void findPic(@PathVariable String procDefId,HttpServletResponse response){
+// try{
+// InputStream inputStream = bpmProcessService.findProcessPic(procDefId);
+// byte[] b = new byte[1024];
+// int len = 0;
+// while ((len = inputStream.read(b,0,1024))!=-1){
+// response.getOutputStream().write(b, 0, len);
+// }
+// }catch (Exception e){
+// logger.debug("获取流程图失败,procDefId:"+procDefId);
+// }
+// }
+//}
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/service/BpmActivityService.java b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/service/BpmActivityService.java
index 5ee198dd9..af2f9e9bc 100644
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/service/BpmActivityService.java
+++ b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/service/BpmActivityService.java
@@ -3,6 +3,7 @@ package org.hswebframework.web.workflow.flowable.service;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import java.util.List;
+import java.util.Map;
/**
* 流程节点操作的接口
@@ -13,17 +14,17 @@ public interface BpmActivityService {
/**
* 获取指定节点
*
- * @param procDefId 流程定义ID
- * @return ActivityImpl 指定的节点资源
+ * @param procDefId 流程定义ID
+ * @return ActivityImpl 指定的节点资源,未指定返回第一节点
*/
ActivityImpl getActivityById(String procDefId, String activityId);
/**
- * 获取指定节点
+ * 获取所有节点
*
* @param procDefKey 流程定义Key
* @param activityId 图元ID
- * @return ActivityImpl 指定的节点,未指定返回当前节点
+ * @return ActivityImpl 指定的节点,未指定返回所有
*/
List getActivityByKey(String procDefKey, String activityId);
@@ -52,6 +53,24 @@ public interface BpmActivityService {
*/
List getUserTasksByProcDefKey(String procDefKey);
+ /**
+ * 获取下一环节
+ *
+ * @param procDefId 流程定义ID
+ * @param activityId 图元ID
+ * @return List 当前流程的所有节点资源
+ */
+ List getNextActivitys(String procDefId, String activityId);
+
+ /**
+ * 获取下一环节办理人
+ *
+ * @param procDefId 流程定义ID
+ * @param activityId 图元ID
+ * @return 节点id对应的办理人
+ */
+ Map> getNextClaim(String procDefId, String activityId);
+
/**
* 获取开始节点
* @param procDefKey 流程定义Key
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/service/imp/BpmActivityServiceImp.java b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/service/imp/BpmActivityServiceImp.java
index 620e0a20b..f93c53163 100644
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/service/imp/BpmActivityServiceImp.java
+++ b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/main/java/org/hswebframework/web/workflow/flowable/service/imp/BpmActivityServiceImp.java
@@ -1,5 +1,6 @@
package org.hswebframework.web.workflow.flowable.service.imp;
+import org.activiti.engine.delegate.Expression;
import org.activiti.engine.impl.RepositoryServiceImpl;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.pvm.PvmTransition;
@@ -11,10 +12,7 @@ import org.hswebframework.web.workflow.flowable.service.BpmActivityService;
import org.hswebframework.web.workflow.flowable.utils.FlowableAbstract;
import org.springframework.stereotype.Service;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
/**
* @Author wangwei
@@ -96,8 +94,42 @@ public class BpmActivityServiceImp extends FlowableAbstract implements BpmActivi
}
@Override
- public ActivityImpl getStartEvent(String procDefKey) {
- List activities = getActivityByKey("test",null);
+ public List getNextActivitys(String procDefId, String activityId) {
+ ActivityImpl activity;
+ if(activityId!=null)
+ activity = getActivityById(procDefId, activityId);
+ else
+ activity = getStartEvent(procDefId);
+ List pvmTransitions = activity.getOutgoingTransitions();
+ List activities = new ArrayList<>();
+ for(PvmTransition pvmTransition : pvmTransitions){
+ activities.add((ActivityImpl)pvmTransition.getDestination());
+ }
+ return activities;
+ }
+
+ @Override
+ public Map> getNextClaim(String procDefId, String activityId) {
+ List activities = getNextActivitys(procDefId, activityId);
+ Map> map = new HashMap<>();
+ for(ActivityImpl activity : activities){
+ List list = new ArrayList<>();
+ TaskDefinition taskDefinition = (TaskDefinition) activity.getProperty("taskDefinition");
+ if(taskDefinition.getAssigneeExpression()!=null)
+ list.add(taskDefinition.getAssigneeExpression().getExpressionText());
+ else if(taskDefinition.getCandidateUserIdExpressions()!=null){
+ for(Expression expression : taskDefinition.getCandidateUserIdExpressions()){
+ list.add(expression.getExpressionText());
+ }
+ }
+ map.put(activity.getId(),list);
+ }
+ return map;
+ }
+
+ @Override
+ public ActivityImpl getStartEvent(String procDefId) {
+ List activities = getActivitysById(procDefId,null);
ActivityImpl activity = null;
for (ActivityImpl a: activities) {
if(a.getProperty("type").equals("startEvent")){
diff --git a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/test/java/org/hswebframework/web/workflow/flowable/ControllerTest.java b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/test/java/org/hswebframework/web/workflow/flowable/ControllerTest.java
index e8f0c41db..08ea38844 100644
--- a/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/test/java/org/hswebframework/web/workflow/flowable/ControllerTest.java
+++ b/hsweb-system/hsweb-system-workflow/hsweb-system-workflow-flowable/src/test/java/org/hswebframework/web/workflow/flowable/ControllerTest.java
@@ -62,7 +62,8 @@ public class ControllerTest extends SimpleWebApplicationTests {
System.out.println(a);
List pvmTransitions = a.getOutgoingTransitions();
Assert.assertEquals(pvmTransitions.size(), 1);
- System.out.println("流程第一节点办理人:"+((TaskDefinition)pvmTransitions.get(0).getDestination().getProperty("taskDefinition")).getAssigneeExpression());
+ TaskDefinition taskDefinition = (TaskDefinition)pvmTransitions.get(0).getDestination().getProperty("taskDefinition");
+ System.out.println("流程第一节点办理人:"+taskDefinition.getAssigneeExpression());
}
}
}