java110
2021-08-28 eadc0790df8b8dcf17dcb22f4bec302ee9f57b7b
优化办理逻辑
5个文件已修改
160 ■■■■■ 已修改文件
java110-interface/src/main/java/com/java110/intf/common/IOaWorkflowUserInnerServiceSMO.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-common/pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-oa/src/main/java/com/java110/oa/api/OaWorkflowApi.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-oa/src/main/java/com/java110/oa/bmo/oaWorkflowForm/impl/GetOaWorkflowFormBMOImpl.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/common/IOaWorkflowUserInnerServiceSMO.java
@@ -68,6 +68,25 @@
    boolean completeTask(@RequestBody JSONObject reqJson);
    /**
     * 处理任务
     *
     * @param reqJson
     * @return true 为流程结束 false 为流程没有结束
     */
    @RequestMapping(value = "/changeTaskToOtherUser", method = RequestMethod.POST)
    boolean changeTaskToOtherUser(@RequestBody JSONObject reqJson);
    /**
     * 处理任务
     *
     * @param reqJson
     * @return true 为流程结束 false 为流程没有结束
     */
    @RequestMapping(value = "/goBackTask", method = RequestMethod.POST)
    boolean goBackTask(@RequestBody JSONObject reqJson);
    /**
     * 查询批注信息
     *
     * @param reqJson
service-common/pom.xml
@@ -37,6 +37,7 @@
            <artifactId>activiti-spring-boot-starter-basic</artifactId>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-json-converter</artifactId>
service-common/src/main/java/com/java110/common/smo/impl/OaWorkflowUserInnerServiceSMOImpl.java
@@ -13,19 +13,28 @@
import com.java110.intf.user.IUserInnerServiceSMO;
import com.java110.utils.util.Assert;
import com.java110.utils.util.StringUtil;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.FlowNode;
import org.activiti.bpmn.model.SequenceFlow;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricActivityInstance;
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.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.query.Query;
import org.activiti.engine.runtime.Execution;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@@ -39,6 +48,7 @@
@RestController
public class OaWorkflowUserInnerServiceSMOImpl extends BaseServiceSMO implements IOaWorkflowUserInnerServiceSMO {
    private static Logger logger = LoggerFactory.getLogger(OaWorkflowUserInnerServiceSMOImpl.class);
    @Autowired
    private ProcessEngine processEngine;
@@ -49,10 +59,16 @@
    private TaskService taskService;
    @Autowired
    private HistoryService historyService;
    @Autowired
    private IUserInnerServiceSMO userInnerServiceSMOImpl;
    @Autowired
    private IWorkflowInnerServiceSMO workflowInnerServiceSMOImpl;
    @Autowired
    private RepositoryService repositoryService;
    /**
@@ -220,13 +236,11 @@
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult();
        String processInstanceId = task.getProcessInstanceId();
        Authentication.setAuthenticatedUserId(reqJson.getString("createUserId"));
        Authentication.setAuthenticatedUserId(reqJson.getString("nextUserId"));
        taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage"));
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("auditCode", reqJson.getString("auditCode"));
        variables.put("nextUserId", reqJson.getString("nextUserId"));
        variables.put("flag", "1200".equals(reqJson.getString("auditCode")) ? "false" : "true");
        variables.put("startUserId", reqJson.getString("startUserId"));
        //variables.put("startUserId", reqJson.getString("startUserId"));
        taskService.complete(reqJson.getString("taskId"), variables);
        ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
@@ -236,6 +250,90 @@
        return false;
    }
    public boolean changeTaskToOtherUser(@RequestBody JSONObject reqJson) {
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult();
        String processInstanceId = task.getProcessInstanceId();
        taskService.addComment(reqJson.getString("taskId"), processInstanceId, reqJson.getString("auditMessage"));
        taskService.setAssignee(reqJson.getString("taskId"), reqJson.getString("nextUserId"));
        taskService.setOwner(reqJson.getString("taskId"), reqJson.getString("nextUserId"));
        return true;
    }
    public boolean goBackTask(@RequestBody JSONObject reqJson) {
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery().taskId(reqJson.getString("taskId")).singleResult();
        if (task == null) {
            throw new IllegalArgumentException("流程未启动或已执行完成,无法退回");
        }
        List<HistoricTaskInstance> htiList = historyService.createHistoricTaskInstanceQuery()
                .processInstanceBusinessKey(reqJson.getString("id"))
                .orderByTaskCreateTime()
                .asc()
                .list();
        String myTaskId = null;
        HistoricTaskInstance myTask = null;
        for (HistoricTaskInstance hti : htiList) {
            if (reqJson.getString("curUserId").equals(hti.getAssignee())) {
                myTaskId = hti.getId();
                myTask = hti;
                break;
            }
        }
        if (null == myTaskId) {
            throw new IllegalArgumentException("该任务非当前用户提交,无法退回");
        }
        String processDefinitionId = myTask.getProcessDefinitionId();
        ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
        //变量
//        Map<String, VariableInstance> variables = runtimeService.getVariableInstances(currentTask.getExecutionId());
        String myActivityId = null;
        List<HistoricActivityInstance> haiList = historyService.createHistoricActivityInstanceQuery()
                .executionId(myTask.getExecutionId()).finished().list();
        for (HistoricActivityInstance hai : haiList) {
            if (myTaskId.equals(hai.getTaskId())) {
                myActivityId = hai.getActivityId();
                break;
            }
        }
        FlowNode myFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(myActivityId);
        Execution execution = runtimeService.createExecutionQuery().executionId(task.getExecutionId()).singleResult();
        String activityId = execution.getActivityId();
        logger.warn("------->> activityId:" + activityId);
        FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(activityId);
        //记录原活动方向
        List<SequenceFlow> oriSequenceFlows = new ArrayList<SequenceFlow>();
        oriSequenceFlows.addAll(flowNode.getOutgoingFlows());
        //清理活动方向
        flowNode.getOutgoingFlows().clear();
        //建立新方向
        List<SequenceFlow> newSequenceFlowList = new ArrayList<SequenceFlow>();
        SequenceFlow newSequenceFlow = new SequenceFlow();
        newSequenceFlow.setId("newSequenceFlowId");
        newSequenceFlow.setSourceFlowElement(flowNode);
        newSequenceFlow.setTargetFlowElement(myFlowNode);
        newSequenceFlowList.add(newSequenceFlow);
        flowNode.setOutgoingFlows(newSequenceFlowList);
        Authentication.setAuthenticatedUserId(reqJson.getString("curUserId"));
        taskService.addComment(task.getId(), task.getProcessInstanceId(), "退回," + reqJson.getString("auditMessage"));
        Map<String, Object> currentVariables = new HashMap<String, Object>();
        currentVariables.put("applier", reqJson.getString("curUserId"));
        //完成任务
        taskService.complete(task.getId(), currentVariables);
        //恢复原方向
        flowNode.setOutgoingFlows(oriSequenceFlows);
        return true;
    }
    public List<AuditMessageDto> getAuditMessage(@RequestBody JSONObject reqJson) {
        TaskService taskService = processEngine.getTaskService();
service-oa/src/main/java/com/java110/oa/api/OaWorkflowApi.java
@@ -440,6 +440,7 @@
     */
    @RequestMapping(value = "/auditOaWorkflow", method = RequestMethod.POST)
    public ResponseEntity<String> auditOaWorkflow(@RequestHeader(value = "store-id") String storeId,
                                                  @RequestHeader(value = "user-id") String userId,
                                                  @RequestBody JSONObject reqJson) {
        Assert.hasKeyAndValue(reqJson, "flowId", "flowId不能为空");
        Assert.hasKeyAndValue(reqJson, "id", "id不能为空");
@@ -447,6 +448,7 @@
        Assert.hasKeyAndValue(reqJson, "auditMessage", "审核意见不能为空");
        Assert.hasKeyAndValue(reqJson, "auditCode", "审核状态不能为空");
        reqJson.put("storeId", storeId);
        reqJson.put("curUserId", userId);
        return getOaWorkflowFormBMOImpl.auditOaWorkflow(reqJson);
    }
}
service-oa/src/main/java/com/java110/oa/bmo/oaWorkflowForm/impl/GetOaWorkflowFormBMOImpl.java
@@ -249,7 +249,7 @@
        if (count > 0) {
            datas = oaWorkflowUserInnerServiceSMOImpl.getUserHistoryTasks(auditUser);
            //刷新 表单数据
            freshFormData(datas, paramIn,oaWorkflowFormDtos.get(0));
            freshFormData(datas, paramIn, oaWorkflowFormDtos.get(0));
        } else {
            datas = new ArrayList<>();
        }
@@ -276,14 +276,34 @@
        List<OaWorkflowFormDto> oaWorkflowFormDtos = oaWorkflowFormInnerServiceSMOImpl.queryOaWorkflowForms(oaWorkflowFormDto);
        Assert.listOnlyOne(oaWorkflowFormDtos, "未包含流程表单,请先设置表单");
        reqJson.put("nextUserId", reqJson.getString("taskId"));
        boolean isLastTask = oaWorkflowUserInnerServiceSMOImpl.completeTask(reqJson);
        if (isLastTask) {
            reqJson.put("state", "1005");
        //业务办理
        if ("1100".equals(reqJson.getString("auditCode"))) {
            reqJson.put("nextUserId", reqJson.getString("staffId"));
            boolean isLastTask = oaWorkflowUserInnerServiceSMOImpl.completeTask(reqJson);
            if (isLastTask) {
                reqJson.put("state", "1005");
            } else {
                reqJson.put("state", "1002");
            }
            reqJson.put("tableName", oaWorkflowFormDtos.get(0).getTableName());
            oaWorkflowFormInnerServiceSMOImpl.updateOaWorkflowFormData(reqJson);
        } else if ("1300".equals(reqJson.getString("auditCode"))) {
            reqJson.put("nextUserId", reqJson.getString("staffId"));
            oaWorkflowUserInnerServiceSMOImpl.changeTaskToOtherUser(reqJson);
            reqJson.put("state", "1004");
            reqJson.put("tableName", oaWorkflowFormDtos.get(0).getTableName());
            oaWorkflowFormInnerServiceSMOImpl.updateOaWorkflowFormData(reqJson);
        } else if ("1200".equals(reqJson.getString("auditCode"))) {
            reqJson.put("curUserId", reqJson.getString("curUserId"));
            oaWorkflowUserInnerServiceSMOImpl.goBackTask(reqJson);
            reqJson.put("state", "1003");
            reqJson.put("tableName", oaWorkflowFormDtos.get(0).getTableName());
            oaWorkflowFormInnerServiceSMOImpl.updateOaWorkflowFormData(reqJson);
        } else {
            throw new IllegalArgumentException("不支持的类型");
        }
        return ResultVo.success();
    }