Your Name лет назад: 3
Родитель
Сommit
2bb222630d

+ 10 - 0
java110-interface/src/main/java/com/java110/intf/common/IOaWorkflowUserInnerServiceSMO.java

@@ -3,6 +3,8 @@ package com.java110.intf.common;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.config.feign.FeignConfiguration;
 import com.java110.dto.auditMessage.AuditMessageDto;
+import com.java110.dto.oaWorkflow.OaWorkflowDto;
+import com.java110.dto.oaWorkflowXml.OaWorkflowXmlDto;
 import com.java110.entity.audit.AuditUser;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -107,4 +109,12 @@ public interface IOaWorkflowUserInnerServiceSMO {
 
     @RequestMapping(value = "/nextAllNodeTaskList", method = RequestMethod.POST)
     List<JSONObject> nextAllNodeTaskList(@RequestBody JSONObject reqJson);
+
+    /**
+     *
+     * @param oaWorkflowXmlDto
+     * @return
+     */
+    @RequestMapping(value = "/queryFirstAuditStaff", method = RequestMethod.POST)
+    List<JSONObject> queryFirstAuditStaff(@RequestBody OaWorkflowXmlDto oaWorkflowXmlDto);
 }

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

@@ -25,6 +25,7 @@ import com.java110.intf.store.IOrgStaffRelV1InnerServiceSMO;
 import com.java110.intf.user.IOrgInnerServiceSMO;
 import com.java110.po.oaWorkflow.OaWorkflowPo;
 import com.java110.po.oaWorkflowXml.OaWorkflowXmlPo;
+import com.java110.utils.exception.CmdException;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
 import com.java110.utils.util.StringUtil;
@@ -174,6 +175,9 @@ public class QueryWorkFlowFirstStaffBMOImpl implements IQueryWorkFlowFirstStaffB
             Model modelData = repositoryService.getModel(workflowModelDto.getModelId());
             byte[] bpmnBytes = null;
             bpmnBytes = repositoryService.getModelEditorSource(workflowModelDto.getModelId());
+            if(bpmnBytes == null || bpmnBytes.length< 1){
+                throw new CmdException("未设置流程");
+            }
             String processName = modelData.getName() + ".bpmn20.xml";
             ByteArrayInputStream in = new ByteArrayInputStream(bpmnBytes);
             Deployment deployment = repositoryService.createDeployment().name(oaWorkflowDtos.get(0).getFlowName())
@@ -187,6 +191,7 @@ public class QueryWorkFlowFirstStaffBMOImpl implements IQueryWorkFlowFirstStaffB
                 .createProcessDefinitionQuery()
                 .deploymentId(deploymentid)
                 .singleResult();
+
         //更新部门流程关系表
         workflowModelDto.setDeploymentId(deploymentid);
 

+ 98 - 4
service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java

@@ -7,7 +7,9 @@ import com.java110.core.base.smo.BaseServiceSMO;
 import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.dto.PageDto;
 import com.java110.dto.auditMessage.AuditMessageDto;
+import com.java110.dto.oaWorkflow.OaWorkflowDto;
 import com.java110.dto.oaWorkflowData.OaWorkflowDataDto;
+import com.java110.dto.oaWorkflowXml.OaWorkflowXmlDto;
 import com.java110.dto.user.UserDto;
 import com.java110.dto.workflow.WorkflowDto;
 import com.java110.entity.audit.AuditUser;
@@ -16,30 +18,38 @@ import com.java110.intf.common.IWorkflowInnerServiceSMO;
 import com.java110.intf.oa.IOaWorkflowDataInnerServiceSMO;
 import com.java110.intf.user.IUserInnerServiceSMO;
 import com.java110.po.oaWorkflowData.OaWorkflowDataPo;
+import com.java110.utils.exception.SMOException;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
+import org.activiti.bpmn.converter.BpmnXMLConverter;
 import org.activiti.bpmn.model.*;
+import org.activiti.bpmn.model.Process;
 import org.activiti.engine.*;
 import org.activiti.engine.history.HistoricProcessInstance;
 import org.activiti.engine.history.HistoricTaskInstance;
 import org.activiti.engine.history.HistoricTaskInstanceQuery;
 import org.activiti.engine.impl.identity.Authentication;
 import org.activiti.engine.query.Query;
+import org.activiti.engine.repository.ProcessDefinition;
 import org.activiti.engine.runtime.ProcessInstance;
 import org.activiti.engine.task.Comment;
 import org.activiti.engine.task.Task;
 import org.activiti.engine.task.TaskQuery;
+import org.activiti.validation.ValidationError;
 import org.slf4j.Logger;
 import com.java110.core.log.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import java.io.ByteArrayInputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
 
 //@Service("resourceEntryStoreSMOImpl")
 @RestController
@@ -423,6 +433,7 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
         oaWorkflowDataInnerServiceSMOImpl.saveOaWorkflowData(oaWorkflowDataPo);
         return true;
     }
+
     @Java110Transactional
     public boolean goBackTask(@RequestBody JSONObject reqJson) {
         TaskService taskService = processEngine.getTaskService();
@@ -587,6 +598,7 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
             throw new IllegalArgumentException("任务已处理");
         }
         BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
+
         FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
         //获取当前节点输出连线
         List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows();
@@ -646,6 +658,88 @@ public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements
         return tasks;
     }
 
+    @Override
+    public List<JSONObject> queryFirstAuditStaff(@RequestBody OaWorkflowXmlDto oaWorkflowXmlDto) {
+        List<JSONObject> tasks = new ArrayList<>();
+        XMLInputFactory xif = XMLInputFactory.newInstance();
+        InputStreamReader in = new InputStreamReader(new ByteArrayInputStream(oaWorkflowXmlDto.getBpmnXml().getBytes()), StandardCharsets.UTF_8);
+        XMLStreamReader xtr = null;
+        try {
+            xtr = xif.createXMLStreamReader(in);
+        } catch (XMLStreamException e) {
+            throw new RuntimeException(e);
+        }
+        BpmnModel bpmnModel = new BpmnXMLConverter().convertToBpmnModel(xtr);
+
+        Process process = bpmnModel.getProcesses().get(0);
+        Collection<FlowElement> flowElements = process.getFlowElements();
+        StartEvent startEvent = null;
+        for (FlowElement flowElement : flowElements) {
+            //假设是开始节点
+            if(flowElement instanceof StartEvent){
+                 startEvent = (StartEvent)flowElement;
+            }
+        }
+        if(startEvent == null){
+            throw new SMOException("流程文件未包含开始节点");
+        }
+        List<SequenceFlow> outgoingFlows = startEvent.getOutgoingFlows();
+
+        UserTask submitUser = getUserTask(outgoingFlows);
+
+        if(submitUser == null){
+            throw new SMOException("未包含提交者");
+        }
+
+        UserTask auditUser = getUserTask(submitUser.getOutgoingFlows());
+        if(auditUser == null){
+            throw new SMOException("未包含审核人员");
+        }
+        String assignee = auditUser.getAssignee();
+        JSONObject taskObj = null;
+        taskObj = new JSONObject();
+        taskObj.put("assignee", "-1"); //  默认 不需要指定下一个处理人 表示结束
+        if (!StringUtil.isEmpty(assignee) && assignee.indexOf("${") < 0) {
+            taskObj.put("assignee", assignee); // 下一节点处理人
+        }
+        if ("${startUserId}".equals(assignee)) {
+            taskObj.put("assignee", "-2"); // 开始人
+        }
+        if ("${nextUserId}".equals(assignee)) {
+            taskObj.put("assignee", "-2"); // 需要前台指定
+        }
+        tasks.add(taskObj);
+        return tasks;
+    }
+
+    private static UserTask getUserTask(List<SequenceFlow> outgoingFlows) {
+        for (SequenceFlow outgoingFlow : outgoingFlows) {
+            //获取输出节点元素
+            FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement();
+            //排除非用户任务接点
+            if (targetFlowElement instanceof UserTask) {
+                //判断输出节点的el表达式
+                Map vars = new HashMap();
+                vars.put("auditCode", "1200");
+                if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
+                    continue;
+                }
+                vars.put("auditCode", "1400");
+                if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
+                    continue;
+                }
+                //结束
+                vars.put("auditCode", "1500");
+                if (isCondition(outgoingFlow.getConditionExpression(), vars)) {
+                    continue;
+                }
+                return ((UserTask) targetFlowElement);
+            }
+        }
+        return null;
+    }
+
+
     /**
      * el表达式判断
      *

+ 62 - 0
service-oa/src/main/java/com/java110/oa/cmd/oaWorkflow/QueryFirstAuditStaffCmd.java

@@ -0,0 +1,62 @@
+package com.java110.oa.cmd.oaWorkflow;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.context.ICmdDataFlowContext;
+import com.java110.core.event.cmd.Cmd;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.dto.oaWorkflow.OaWorkflowDto;
+import com.java110.dto.oaWorkflowXml.OaWorkflowXmlDto;
+import com.java110.intf.common.IOaWorkflowUserInnerServiceSMO;
+import com.java110.intf.oa.IOaWorkflowInnerServiceSMO;
+import com.java110.intf.oa.IOaWorkflowXmlInnerServiceSMO;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * 查询 提交---> 审核人
+ */
+@Java110Cmd(serviceCode = "oaWorkflow.queryFirstAuditStaff")
+public class QueryFirstAuditStaffCmd extends Cmd {
+
+    @Autowired
+    private IOaWorkflowInnerServiceSMO oaWorkflowInnerServiceSMOImpl;
+
+    @Autowired
+    private IOaWorkflowXmlInnerServiceSMO oaWorkflowXmlInnerServiceSMOImpl;
+
+    @Autowired
+    private IOaWorkflowUserInnerServiceSMO oaWorkflowUserInnerServiceSMOImpl;
+
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        Assert.hasKeyAndValue(reqJson, "flowId", "未包含流程ID");
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        String storeId = context.getReqHeaders().get("store-id");
+        OaWorkflowDto oaWorkflowDto = new OaWorkflowDto();
+        oaWorkflowDto.setFlowId(reqJson.getString("flowId"));
+        oaWorkflowDto.setStoreId(storeId);
+        List<OaWorkflowDto> oaWorkflowDtos = oaWorkflowInnerServiceSMOImpl.queryOaWorkflows(oaWorkflowDto);
+
+        Assert.listOnlyOne(oaWorkflowDtos, "流程不存在");
+
+        OaWorkflowXmlDto oaWorkflowXmlDto = new OaWorkflowXmlDto();
+        oaWorkflowXmlDto.setFlowId(oaWorkflowDtos.get(0).getFlowId());
+        List<OaWorkflowXmlDto> oaWorkflowXmlDtos = oaWorkflowXmlInnerServiceSMOImpl.queryOaWorkflowXmls(oaWorkflowXmlDto);
+        Assert.listOnlyOne(oaWorkflowXmlDtos, "流程不存在");
+
+        List<JSONObject> tasks = oaWorkflowUserInnerServiceSMOImpl.queryFirstAuditStaff(oaWorkflowXmlDtos.get(0));
+
+        context.setResponseEntity(ResultVo.createResponseEntity(tasks));
+
+    }
+}