java110 4 vuotta sitten
vanhempi
commit
c876906524

+ 10 - 0
java110-bean/src/main/java/com/java110/dto/workflow/WorkflowModelDto.java

@@ -22,6 +22,8 @@ public class WorkflowModelDto implements Serializable {
     private String json_xml;
     private String svg_xml;
 
+    private String deploymentId;
+
     public String getName() {
         return name;
     }
@@ -69,4 +71,12 @@ public class WorkflowModelDto implements Serializable {
     public void setSvg_xml(String svg_xml) {
         this.svg_xml = svg_xml;
     }
+
+    public String getDeploymentId() {
+        return deploymentId;
+    }
+
+    public void setDeploymentId(String deploymentId) {
+        this.deploymentId = deploymentId;
+    }
 }

+ 4 - 3
java110-db/src/main/resources/mapper/oa/OaWorkflowServiceDaoImplMapper.xml

@@ -73,9 +73,7 @@
         <if test="flowKey !=null and flowKey != ''">
             , t.flow_key= #{flowKey}
         </if>
-        <if test="storeId !=null and storeId != ''">
-            , t.store_id= #{storeId}
-        </if>
+
         <if test="flowName !=null and flowName != ''">
             , t.flow_name= #{flowName}
         </if>
@@ -89,6 +87,9 @@
         <if test="flowId !=null and flowId != ''">
             and t.flow_id= #{flowId}
         </if>
+        <if test="storeId !=null and storeId != ''">
+            and t.store_id= #{storeId}
+        </if>
 
     </update>
 

+ 37 - 19
service-common/src/main/java/com/java110/common/api/WorkflowApi.java

@@ -1,24 +1,37 @@
 package com.java110.common.api;
 
+import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.java110.common.bmo.workflow.IQueryWorkFlowFirstStaffBMO;
 import com.java110.dto.workflow.WorkflowDto;
+import com.java110.dto.workflow.WorkflowModelDto;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.vo.ResultVo;
 import org.activiti.editor.constants.ModelDataJsonConstants;
 import org.activiti.engine.ActivitiException;
+import org.activiti.engine.ProcessEngine;
+import org.activiti.engine.ProcessEngines;
 import org.activiti.engine.RepositoryService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.repository.Deployment;
 import org.activiti.engine.repository.Model;
 import org.apache.batik.transcoder.TranscoderInput;
 import org.apache.batik.transcoder.TranscoderOutput;
 import org.apache.batik.transcoder.image.PNGTranscoder;
-import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -35,12 +48,15 @@ public class WorkflowApi {
     @Autowired
     private ObjectMapper objectMapper;
 
+
+
     String MODEL_ID = "modelId";
     String MODEL_NAME = "name";
     String MODEL_REVISION = "revision";
     String MODEL_DESCRIPTION = "description";
 
 
+
     @Autowired
     private IQueryWorkFlowFirstStaffBMO queryWorkFlowFirstStaffBMOImpl;
 
@@ -59,29 +75,25 @@ public class WorkflowApi {
     /**
      * 更新流程
      *
-     * @param modelId     模型ID
-     * @param name        流程模型名称
-     * @param description
-     * @param json_xml    流程文件
-     * @param svg_xml     图片
+     * @param reqJson 模型ID
+     * @ServiceCode /workflow/saveModel
      */
-    @RequestMapping(value = "/model/{modelId}/save", method = RequestMethod.PUT)
+    @RequestMapping(value = "/saveModel", method = RequestMethod.POST)
     @ResponseStatus(value = HttpStatus.OK)
-    public void saveModel(@PathVariable String modelId
-            , String name, String description
-            , String json_xml, String svg_xml) {
+    public ResponseEntity<String> saveModel(@RequestBody JSONObject reqJson) {
+        WorkflowModelDto workflowModelDto = BeanConvertUtil.covertBean(reqJson, WorkflowModelDto.class);
         try {
-            Model model = repositoryService.getModel(modelId);
+            Model model = repositoryService.getModel(workflowModelDto.getModelId());
             ObjectNode modelJson = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
-            modelJson.put(MODEL_NAME, name);
-            modelJson.put(MODEL_DESCRIPTION, description);
+            modelJson.put(MODEL_NAME, workflowModelDto.getName());
+            modelJson.put(MODEL_DESCRIPTION, workflowModelDto.getDescription());
             modelJson.put(ModelDataJsonConstants.MODEL_REVISION, model.getVersion() + 1);
             model.setMetaInfo(modelJson.toString());
-            model.setName(name);
+            model.setName(workflowModelDto.getName());
             repositoryService.saveModel(model);
-            repositoryService.addModelEditorSource(model.getId(), json_xml.getBytes("utf-8"));
+            repositoryService.addModelEditorSource(model.getId(), workflowModelDto.getJson_xml().getBytes("utf-8"));
 
-            InputStream svgStream = new ByteArrayInputStream(svg_xml.getBytes("utf-8"));
+            InputStream svgStream = new ByteArrayInputStream(workflowModelDto.getSvg_xml().getBytes("utf-8"));
             TranscoderInput input = new TranscoderInput(svgStream);
 
             PNGTranscoder transcoder = new PNGTranscoder();
@@ -94,18 +106,25 @@ public class WorkflowApi {
             final byte[] result = outStream.toByteArray();
             repositoryService.addModelEditorSourceExtra(model.getId(), result);
             outStream.close();
+
+
         } catch (Exception e) {
             logger.error("Error saving model", e);
             throw new ActivitiException("Error saving model", e);
         }
+
+        //部署model
+        return queryWorkFlowFirstStaffBMOImpl.deployModel(workflowModelDto);
+
     }
 
 
     /**
      * 获取model的节点信息,编辑器根据返回的json进行绘图
-     * @ServiceCode /workflow/getEditorJson
+     *
      * @param modelId
      * @return
+     * @ServiceCode /workflow/getEditorJson
      */
     @SuppressWarnings("deprecation")
     @RequestMapping(value = "/getEditorJson", method = RequestMethod.GET)
@@ -133,5 +152,4 @@ public class WorkflowApi {
     }
 
 
-
 }

+ 3 - 0
service-common/src/main/java/com/java110/common/bmo/workflow/IQueryWorkFlowFirstStaffBMO.java

@@ -2,6 +2,7 @@ package com.java110.common.bmo.workflow;
 
 import com.java110.dto.user.StaffDto;
 import com.java110.dto.workflow.WorkflowDto;
+import com.java110.dto.workflow.WorkflowModelDto;
 import org.springframework.http.ResponseEntity;
 
 public interface IQueryWorkFlowFirstStaffBMO {
@@ -12,4 +13,6 @@ public interface IQueryWorkFlowFirstStaffBMO {
      * @return
      */
     ResponseEntity<String> query(WorkflowDto workflowDto);
+
+    ResponseEntity<String> deployModel(WorkflowModelDto workflowModelDto);
 }

+ 79 - 0
service-common/src/main/java/com/java110/common/bmo/workflow/impl/QueryWorkFlowFirstStaffBMOImpl.java

@@ -1,18 +1,37 @@
 package com.java110.common.bmo.workflow.impl;
 
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.java110.common.bmo.workflow.IQueryWorkFlowFirstStaffBMO;
 import com.java110.common.dao.IWorkflowServiceDao;
 import com.java110.common.dao.IWorkflowStepServiceDao;
 import com.java110.common.dao.IWorkflowStepStaffServiceDao;
+import com.java110.dto.oaWorkflow.OaWorkflowDto;
 import com.java110.dto.org.OrgDto;
 import com.java110.dto.workflow.WorkflowDto;
+import com.java110.dto.workflow.WorkflowModelDto;
+import com.java110.intf.oa.IOaWorkflowInnerServiceSMO;
 import com.java110.intf.user.IOrgInnerServiceSMO;
+import com.java110.po.oaWorkflow.OaWorkflowPo;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.Base64Convert;
 import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
+import org.activiti.bpmn.converter.BpmnXMLConverter;
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.editor.language.json.converter.BpmnJsonConverter;
+import org.activiti.engine.ProcessEngine;
+import org.activiti.engine.ProcessEngines;
+import org.activiti.engine.RepositoryService;
+import org.activiti.engine.repository.Deployment;
+import org.activiti.engine.repository.Model;
+import org.activiti.engine.repository.ProcessDefinition;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
+import java.io.ByteArrayInputStream;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -32,6 +51,9 @@ public class QueryWorkFlowFirstStaffBMOImpl implements IQueryWorkFlowFirstStaffB
     @Autowired
     private IOrgInnerServiceSMO orgInnerServiceSMOImpl;
 
+    @Autowired
+    private IOaWorkflowInnerServiceSMO oaWorkflowInnerServiceSMOImpl;
+
     @Override
     public ResponseEntity<String> query(WorkflowDto workflowDto) {
 
@@ -84,4 +106,61 @@ public class QueryWorkFlowFirstStaffBMOImpl implements IQueryWorkFlowFirstStaffB
 
         return ResultVo.createResponseEntity(orgDto);
     }
+
+    @Override
+    public ResponseEntity<String> deployModel(WorkflowModelDto workflowModelDto) {
+        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
+        RepositoryService repositoryService = processEngine.getRepositoryService();
+
+        OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
+        oaWorkflowDto.setModelId(workflowModelDto.getModelId());
+        List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto);
+
+        Assert.listOnlyOne(oaWorkflowDtos, "未包含流程");
+
+        String deploymentid = "";
+        try {
+            Model modelData = repositoryService.getModel(workflowModelDto.getModelId());
+            byte[] bpmnBytes = null;
+            JsonNode editorNode = new ObjectMapper().readTree(repositoryService.getModelEditorSource(workflowModelDto.getModelId()));
+            BpmnJsonConverter jsonConverter = new BpmnJsonConverter();
+            BpmnModel model = jsonConverter.convertToBpmnModel(editorNode);
+            bpmnBytes = new BpmnXMLConverter().convertToXML(model);
+            String encoded = Base64Convert.byteToBase64(bpmnBytes);
+            byte[] decoded = Base64Convert.base64ToByte(encoded);
+            String xml = new String(decoded);
+            String processName = modelData.getName() + ".bpmn20.xml";
+            ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes);
+            Deployment deployment = repositoryService.createDeployment().name(oaWorkflowDtos.get(0).getFlowName())
+                    .addInputStream(processName, in).deploy();
+            deploymentid = deployment.getId();
+        } catch (Exception e) {
+            System.out.println(e);
+        }
+        Assert.isTrue(!StringUtil.isEmpty(deploymentid), "流程部署出错");
+        ProcessDefinition processDefinition = repositoryService
+                .createProcessDefinitionQuery()
+                .deploymentId(deploymentid)
+                .singleResult();
+        //更新部门流程关系表
+        workflowModelDto.setDeploymentId(deploymentid);
+
+        OaWorkflowPo oaWorkflowPo = new OaWorkflowPo();
+        oaWorkflowPo.setFlowId(oaWorkflowDtos.get(0).getFlowId());
+        oaWorkflowPo.setStoreId(oaWorkflowDtos.get(0).getStoreId());
+        oaWorkflowPo.setProcessDefinitionKey(deploymentid);
+        oaWorkflowInnerServiceSMOImpl.updateOaWorkflow(oaWorkflowPo);
+//        //部署历史表
+//        List<DeployHistoryEntity> deployHistoryEntities = deployHistoryRepository.getDeployHistoryByDeptWithProcessKeyId(deptWithProcessKeyId);
+//        for (DeployHistoryEntity deployHistoryEntity : deployHistoryEntities) {
+//            if (deployHistoryEntity.getModelKeyid().equals(modelId)) {
+//                deployHistoryEntity.setDeploy(true);
+//            } else {
+//                deployHistoryEntity.setDeploy(false);
+//            }
+//            deployHistoryRepository.update(deployHistoryEntity);
+//        }
+        return ResultVo.success();
+    }
+
 }