From ba7efd1e011d6bbd1bdf6bc05f273256bc83da5c Mon Sep 17 00:00:00 2001 From: jinqiming <45981669@qq.com> Date: Thu, 14 Jan 2021 19:12:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=87=87=E8=B4=AD=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flowable/ActDeModelController.java | 8 ++- .../main/resources/static/ruoyi/js/ry-ui.js | 7 ++- .../templates/system/model/model.html | 2 +- .../com.snow/flowable/DMNServiceTests.java | 55 +++++++++++++++++++ .../com.snow/flowable/DeploymentTests.java | 7 ++- .../snow/flowable/config/FlowableConfig.java | 2 + .../snow/flowable/domain/DeploymentDTO.java | 5 ++ .../service/FlowablePublishService.java | 9 +++ .../impl/FlowablePublishServiceImpl.java | 44 +++++++++++++++ .../service/impl/FlowableServiceImpl.java | 7 +-- .../com/snow/system/domain/ActDeModel.java | 15 +++++ .../mapper/system/ActDeModelMapper.xml | 7 +++ 12 files changed, 154 insertions(+), 14 deletions(-) create mode 100644 snow-admin/src/test/java/com.snow/flowable/DMNServiceTests.java diff --git a/snow-admin/src/main/java/com/snow/web/controller/flowable/ActDeModelController.java b/snow-admin/src/main/java/com/snow/web/controller/flowable/ActDeModelController.java index f9e480f..6337b8c 100644 --- a/snow-admin/src/main/java/com/snow/web/controller/flowable/ActDeModelController.java +++ b/snow-admin/src/main/java/com/snow/web/controller/flowable/ActDeModelController.java @@ -1,5 +1,6 @@ package com.snow.web.controller.flowable; +import com.google.common.collect.Lists; import com.snow.common.annotation.Log; import com.snow.common.core.controller.BaseController; import com.snow.common.core.domain.AjaxResult; @@ -59,6 +60,7 @@ public class ActDeModelController extends BaseController public TableDataInfo list(ActDeModel actDeModel) { startPage(); + actDeModel.setModelTypeList(Lists.newArrayList(ActDeModel.MODEL_TYPE_BPMN,ActDeModel.MODEL_TYPE_DECISION_TABLE)); List list = actDeModelService.selectActDeModelList(actDeModel); return getDataTable(list); } @@ -155,10 +157,10 @@ public class ActDeModelController extends BaseController @RequiresPermissions("system:model:deployment") @PostMapping("/deployment") @ResponseBody - public AjaxResult deployment(String id) + public AjaxResult deployment(String id,Integer type) { - Deployment Deployment = flowablePublishServiceImpl.createBytesDeploymentByModelId(id); - if(Deployment==null){ + String deploymentId = flowablePublishServiceImpl.deploymentByModelId(id, type); + if(deploymentId==null){ return AjaxResult.error("modelId不存在"); } return AjaxResult.success("发布成功"); diff --git a/snow-admin/src/main/resources/static/ruoyi/js/ry-ui.js b/snow-admin/src/main/resources/static/ruoyi/js/ry-ui.js index fcdcc6a..cb937c5 100644 --- a/snow-admin/src/main/resources/static/ruoyi/js/ry-ui.js +++ b/snow-admin/src/main/resources/static/ruoyi/js/ry-ui.js @@ -1162,15 +1162,16 @@ var table = { $.operate.submit(url, "post", "json", data); }); }, - // 删除信息 - deployment: function(id) { + // 发布信息 + deployment: function(id,type) { + console.log("=======>"+type); table.set(); $.modal.confirm("确定发布该条" + table.options.modalName + "信息吗?", function() { var url = $.common.isEmpty(id) ? table.options.deploymentUrl : table.options.deploymentUrl.replace("{id}", id); if(table.options.type == table_type.bootstrapTreeTable) { $.operate.get(url); } else { - var data = { "id": id }; + var data = { "id": id ,"type":type}; $.operate.submit(url, "post", "json", data); } }); diff --git a/snow-admin/src/main/resources/templates/system/model/model.html b/snow-admin/src/main/resources/templates/system/model/model.html index 52615a6..6bea481 100644 --- a/snow-admin/src/main/resources/templates/system/model/model.html +++ b/snow-admin/src/main/resources/templates/system/model/model.html @@ -125,7 +125,7 @@ formatter: function(value, row, index) { var actions = []; actions.push('编辑模型 '); - actions.push('发布 '); + actions.push('发布 '); actions.push('导出 '); actions.push('删除'); return actions.join(''); diff --git a/snow-admin/src/test/java/com.snow/flowable/DMNServiceTests.java b/snow-admin/src/test/java/com.snow/flowable/DMNServiceTests.java new file mode 100644 index 0000000..fcca8b7 --- /dev/null +++ b/snow-admin/src/test/java/com.snow/flowable/DMNServiceTests.java @@ -0,0 +1,55 @@ +package com.snow.flowable; + +import com.google.common.collect.Maps; +import com.snow.JunitTestApplication; +import com.snow.common.json.JSON; +import lombok.extern.slf4j.Slf4j; +import org.flowable.dmn.api.*; +import org.flowable.dmn.engine.DmnEngineConfiguration; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; +import java.util.Map; + +/** + * @author qimingjin + * @Title: + * @Description: + * @date 2021/1/14 16:31 + */ +@Slf4j +public class DMNServiceTests extends JunitTestApplication { + + @Autowired + private DmnRuleService dmnRuleService; + + @Autowired + private DmnEngineConfiguration dmnEngineConfiguration; + + @Autowired + private DmnHistoryService dmnHistoryService; + + @Autowired + private DmnManagementService dmnManagementService; + + @Test + public void executeDecisionTest(){ + ExecuteDecisionBuilder variable = dmnRuleService.createExecuteDecisionBuilder().variable("", ""); + Map paramMap=Maps.newHashMap(); + paramMap.put("manager","网二"); + paramMap.put("zjl","张三"); + paramMap.put("rs","李四"); + Map result = dmnRuleService.createExecuteDecisionBuilder() + .decisionKey("testKey") + .variables(paramMap) + .variable("money", "50") + .executeWithSingleResult(); + + List testKey = dmnHistoryService.createHistoricDecisionExecutionQuery().decisionKey("testKey") + .orderByEndTime() + .desc() + .list(); + log.info(com.alibaba.fastjson.JSON.toJSONString(testKey)); + } +} diff --git a/snow-admin/src/test/java/com.snow/flowable/DeploymentTests.java b/snow-admin/src/test/java/com.snow/flowable/DeploymentTests.java index 8b56c3f..b236590 100644 --- a/snow-admin/src/test/java/com.snow/flowable/DeploymentTests.java +++ b/snow-admin/src/test/java/com.snow/flowable/DeploymentTests.java @@ -26,7 +26,7 @@ public class DeploymentTests extends JunitTestApplication { @Test public void createClassDeployment() throws Exception{ - InputStream in = new BufferedInputStream(new FileInputStream("D:\\ChromeCoreDownloads\\snow_leave.bpmn20.xml")); + // InputStream in = new BufferedInputStream(new FileInputStream("D:\\ChromeCoreDownloads\\snow_leave.bpmn20.xml")); DeploymentDTO classDeploymentDTO=new DeploymentDTO(); // classDeploymentDTO.setKey("snow_leave"); classDeploymentDTO.setName("请假流程"); @@ -34,7 +34,8 @@ public class DeploymentTests extends JunitTestApplication { classDeploymentDTO.setResourceName("请假流程"); // classDeploymentDTO.setTenantId("snow"); // classDeploymentDTO.setClassPathResource("D:\\modeler\\leave.bpmn20.xml"); - Deployment classDeployment = flowAblePublishService.createInputStreamDeployment(classDeploymentDTO,in); - log.info("发布结果:{}",JSON.toJSONString(classDeployment)); + // Deployment classDeployment = flowAblePublishService.createInputStreamDeployment(classDeploymentDTO,in); + flowAblePublishService.deploymentByModelId("054863dc-5629-11eb-802b-040e3c9c6b2f",4); + // log.info("发布结果:{}",JSON.toJSONString(classDeployment)); } } diff --git a/snow-flowable/src/main/java/com/snow/flowable/config/FlowableConfig.java b/snow-flowable/src/main/java/com/snow/flowable/config/FlowableConfig.java index 1c32dc2..1f9b51f 100644 --- a/snow-flowable/src/main/java/com/snow/flowable/config/FlowableConfig.java +++ b/snow-flowable/src/main/java/com/snow/flowable/config/FlowableConfig.java @@ -38,6 +38,8 @@ public class FlowableConfig { configuration.setTransactionManager(transactionManager); configuration.setDatabaseSchemaUpdate("false"); configuration.setAsyncExecutorActivate(true); + //开启历史数据异步保存 + configuration.setAsyncHistoryEnabled(true); configuration.setProcessDiagramGenerator(customProcessDiagramGenerator); //修改id生成器 configuration.setIdGenerator(new FlowIdGenerator()); diff --git a/snow-flowable/src/main/java/com/snow/flowable/domain/DeploymentDTO.java b/snow-flowable/src/main/java/com/snow/flowable/domain/DeploymentDTO.java index c77d681..4b03201 100644 --- a/snow-flowable/src/main/java/com/snow/flowable/domain/DeploymentDTO.java +++ b/snow-flowable/src/main/java/com/snow/flowable/domain/DeploymentDTO.java @@ -32,4 +32,9 @@ public class DeploymentDTO implements Serializable { * 文件名 */ private String resourceName; + + /** + * 发布类型 + */ + private Integer deploymentType; } diff --git a/snow-flowable/src/main/java/com/snow/flowable/service/FlowablePublishService.java b/snow-flowable/src/main/java/com/snow/flowable/service/FlowablePublishService.java index b9a82eb..a92f1b6 100644 --- a/snow-flowable/src/main/java/com/snow/flowable/service/FlowablePublishService.java +++ b/snow-flowable/src/main/java/com/snow/flowable/service/FlowablePublishService.java @@ -56,4 +56,13 @@ public interface FlowablePublishService { * @return */ Deployment createBytesDeploymentByModelId(String id); + + + /** + * 根据模型ID发布 + * @param id + * @param deploymentType + * @return + */ + String deploymentByModelId(String id,int deploymentType); } diff --git a/snow-flowable/src/main/java/com/snow/flowable/service/impl/FlowablePublishServiceImpl.java b/snow-flowable/src/main/java/com/snow/flowable/service/impl/FlowablePublishServiceImpl.java index 5006e0a..474c9f5 100644 --- a/snow-flowable/src/main/java/com/snow/flowable/service/impl/FlowablePublishServiceImpl.java +++ b/snow-flowable/src/main/java/com/snow/flowable/service/impl/FlowablePublishServiceImpl.java @@ -1,12 +1,19 @@ package com.snow.flowable.service.impl; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.snow.common.utils.StringUtils; import com.snow.flowable.domain.ClassDeploymentDTO; import com.snow.flowable.domain.DeploymentDTO; import com.snow.flowable.service.FlowablePublishService; +import com.snow.system.domain.ActDeModel; import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.BpmnModel; import org.flowable.common.engine.impl.util.IoUtil; +import org.flowable.dmn.api.DmnDeployment; +import org.flowable.dmn.api.DmnRepositoryService; +import org.flowable.dmn.model.DmnDefinition; +import org.flowable.editor.dmn.converter.DmnJsonConverter; import org.flowable.engine.RepositoryService; import org.flowable.engine.repository.Deployment; import org.flowable.engine.repository.DeploymentBuilder; @@ -15,6 +22,7 @@ import org.flowable.ui.modeler.service.ModelServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.ByteArrayInputStream; +import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipInputStream; @@ -46,6 +54,14 @@ public class FlowablePublishServiceImpl implements FlowablePublishService { @Autowired private ModelServiceImpl modelService; + @Autowired + private ObjectMapper objectMapper; + + + + @Autowired + private DmnRepositoryService dmnRepositoryService; + /** * class部署 * @return @@ -136,4 +152,32 @@ public class FlowablePublishServiceImpl implements FlowablePublishService { return deploy; } + @Override + public String deploymentByModelId(String id, int deploymentType) { + Model model = modelService.getModel(id); + if(StringUtils.isNull(model)){ + return null; + } + try { + if(deploymentType==ActDeModel.MODEL_TYPE_DECISION_TABLE){ + JsonNode editorJsonNode = objectMapper.readTree(model.getModelEditorJson()); + DmnJsonConverter dmnJsonConverter=new DmnJsonConverter(); + DmnDefinition dmnDefinition = dmnJsonConverter.convertToDmn(editorJsonNode, model.getId(), model.getVersion(), null); + DmnDeployment deploy = dmnRepositoryService.createDeployment() + .name(model.getName()) + .addDmnModel(model.getName()+".dmn",dmnDefinition) + .category("system_dmn") + .deploy(); + return deploy.getId(); + }else if(deploymentType==ActDeModel.MODEL_TYPE_BPMN){ + Deployment deployment = createBytesDeploymentByModelId(id); + return deployment.getId(); + } + return null; + } catch (IOException e) { + log.error("DeploymentByModelId is fail",e.getMessage()); + throw new RuntimeException("发布流程失败"); + } + } + } diff --git a/snow-flowable/src/main/java/com/snow/flowable/service/impl/FlowableServiceImpl.java b/snow-flowable/src/main/java/com/snow/flowable/service/impl/FlowableServiceImpl.java index a30e76a..4049353 100644 --- a/snow-flowable/src/main/java/com/snow/flowable/service/impl/FlowableServiceImpl.java +++ b/snow-flowable/src/main/java/com/snow/flowable/service/impl/FlowableServiceImpl.java @@ -35,6 +35,7 @@ import org.flowable.bpmn.model.*; import org.flowable.bpmn.model.Process; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.common.engine.impl.util.IoUtil; +import org.flowable.dmn.api.DmnRepositoryService; import org.flowable.engine.*; import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricProcessInstance; @@ -99,6 +100,7 @@ public class FlowableServiceImpl implements FlowableService { @Autowired private RepositoryService repositoryService; + @Autowired private HistoryService historyService; @@ -111,9 +113,6 @@ public class FlowableServiceImpl implements FlowableService { @Autowired private ExpressionServiceImpl expressionService; - @Resource - private SysUserMapper sysUserMapper; - @Autowired private ModelServiceImpl modelService; @@ -148,7 +147,7 @@ public class FlowableServiceImpl implements FlowableService { model.setCreatedBy(actDeModel.getCreatedBy()); model.setKey(actDeModel.getModelKey()); model.setModelType(actDeModel.getModelType().intValue()); - model.setVersion(1); + model.setVersion(actDeModel.getVersion().intValue()); model.setModelEditorJson(editorNode.toString()); modelService.saveModel(model); } diff --git a/snow-system/src/main/java/com/snow/system/domain/ActDeModel.java b/snow-system/src/main/java/com/snow/system/domain/ActDeModel.java index 5ad137b..d1c6197 100644 --- a/snow-system/src/main/java/com/snow/system/domain/ActDeModel.java +++ b/snow-system/src/main/java/com/snow/system/domain/ActDeModel.java @@ -1,6 +1,8 @@ package com.snow.system.domain; import java.util.Date; +import java.util.List; + import com.snow.common.annotation.Excel; import com.fasterxml.jackson.annotation.JsonFormat; import com.snow.common.core.domain.BaseEntity; @@ -78,6 +80,19 @@ public class ActDeModel extends BaseEntity @Excel(name = "租户ID") private String tenantId; + private List modelTypeList; + + public static final int MODEL_TYPE_BPMN = 0; + + public static final int MODEL_TYPE_FORM = 2; + + public static final int MODEL_TYPE_APP = 3; + + public static final int MODEL_TYPE_DECISION_TABLE = 4; + + public static final int MODEL_TYPE_CMMN = 5; + + public static final int MODEL_TYPE_DECISION_SERVICE = 6; @Override public String toString() { diff --git a/snow-system/src/main/resources/mapper/system/ActDeModelMapper.xml b/snow-system/src/main/resources/mapper/system/ActDeModelMapper.xml index 0b4958e..435d0a2 100644 --- a/snow-system/src/main/resources/mapper/system/ActDeModelMapper.xml +++ b/snow-system/src/main/resources/mapper/system/ActDeModelMapper.xml @@ -40,6 +40,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and model_editor_json = #{modelEditorJson} and model_type = #{modelType} and tenant_id = #{tenantId} + + + and model_type IN + + #{item} + +