| | |
| | | package com.highdatas.mdm.service.act.impl; |
| | | |
| | | import com.highdatas.mdm.entity.TUser; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.activiti.engine.HistoryService; |
| | | import org.activiti.engine.RepositoryService; |
| | | 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.HistoricVariableInstance; |
| | | import org.activiti.engine.repository.ProcessDefinition; |
| | | import org.activiti.engine.task.Task; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.Date; |
| | | |
| | | @Slf4j |
| | | @Service |
| | |
| | | |
| | | |
| | | |
| | | public HistoricVariableInstance getRecentHistoryVariables(String key, String processId) { |
| | | HistoricVariableInstance singleResult = historyService.createHistoricVariableInstanceQuery().processInstanceId(processId).variableName(key).orderByVariableName().desc().singleResult(); |
| | | return singleResult; |
| | | |
| | | } |
| | | public List<HistoricVariableInstance> getHistoryVariables(String Key) { |
| | | List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().variableName(Key).list(); |
| | | return list; |
| | | } |
| | | @Override |
| | | public ArrayList<HistoricActivityInstance> getHistoryAction(String workflowId) { |
| | | ArrayList<HistoricActivityInstance> result = new ArrayList<HistoricActivityInstance>(); |
| | | List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().processInstanceId(workflowId).list(); |
| | | for (HistoricActivityInstance historicActivityInstance : list) { |
| | | if (!historicActivityInstance.getActivityType().equalsIgnoreCase("exclusiveGateway")) { |
| | | result.add(historicActivityInstance); |
| | | } |
| | | } |
| | | return result; |
| | | //resultPool.addValue(result); |
| | | } |
| | | @Override |
| | | public List<String> getMyHistotyApprove(String workflowId) { |
| | | TUser onlineUser = getOnlineUser(); |
| | | ArrayList<String> result = new ArrayList<String>(); |
| | | List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().processInstanceId(workflowId).list(); |
| | | for (HistoricActivityInstance historicActivityInstance : list) { |
| | | if (!historicActivityInstance.getActivityType().equalsIgnoreCase("exclusiveGateway") ) { |
| | | //TODO userType |
| | | // if (onlineUser.getSysType().equalsIgnoreCase("DM") || (historicActivityInstance.getAssignee() != null && historicActivityInstance.getAssignee().equalsIgnoreCase(onlineUser.getUserId()))) { |
| | | // result.add(historicActivityInstance.getProcessInstanceId()); |
| | | // } |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | /** |
| | | * |
| | | * @description: 检验流程是否结束 |
| | | * @param processId 流程id |
| | | * @return: 流程是否结果 |
| | | * |
| | | */ |
| | | @Override |
| | | public boolean isTaskFinished(String processId) { |
| | | if (processId.isEmpty()) { |
| | |
| | | String endActivityId = instance.getEndActivityId(); |
| | | |
| | | return (endActivityId!=null && !StringUtils.isEmpty(endActivityId) && endTime !=null); |
| | | } |
| | | @Override |
| | | public void getTaskDetail(String processId) { |
| | | String tableName = null; |
| | | String userId = null; |
| | | LinkedHashMap<String,String> variableMap = new LinkedHashMap<String, String>(); |
| | | List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().processInstanceId(processId).list(); |
| | | |
| | | for (HistoricVariableInstance historicVariableInstance : list) { |
| | | String variableName = historicVariableInstance.getVariableName(); |
| | | if (variableName.equalsIgnoreCase("tablename")) { |
| | | tableName = (String) historicVariableInstance.getValue(); |
| | | continue; |
| | | } |
| | | if (variableName.equalsIgnoreCase("applyUserId")) { |
| | | userId = (String) historicVariableInstance.getValue(); |
| | | continue; |
| | | } |
| | | variableMap.put(variableName, String.valueOf(historicVariableInstance.getValue())); |
| | | } |
| | | //TODO db |
| | | |
| | | // if (tableName != null && userId != null) { |
| | | // NamedSQL namedSQL = NamedSQL.getInstance("getLineById"); |
| | | // namedSQL.setTableName(tableName); |
| | | // namedSQL.setParam("fieldNameId", "user_id"); |
| | | // namedSQL.setParam("id", "'"+userId+"'"); |
| | | // Entity entity = SQLRunner.getEntity(namedSQL); |
| | | // TableMeta tableMeta = entity.getTableMeta(); |
| | | // List<Field> fields = tableMeta.getFields(); |
| | | // for (Field field : fields) { |
| | | // String fieldValue = entity.getString(field.getName()); |
| | | // variableMap.put(field.getName(), fieldValue); |
| | | // } |
| | | // } |
| | | //resultPool.addValue(variableMap); |
| | | } |
| | | @Override |
| | | public void getAllTask() { |
| | | List<Map<String, String>> result = new ArrayList<Map<String, String>>(); |
| | | TUser user = getOnlineUser(); |
| | | List<HistoricProcessInstance> unFinishedTaskList = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().list(); |
| | | Map<String, String> singleTask = null ; |
| | | |
| | | for (HistoricProcessInstance historicProcessInstance : unFinishedTaskList) { |
| | | String userId = historicProcessInstance.getStartUserId(); |
| | | if (user.getUserId().equalsIgnoreCase(userId)) { |
| | | if (historicProcessInstance.getEndTime() == null) { |
| | | Task Assigneetask = taskService.createTaskQuery().taskAssignee(userId).processInstanceId(historicProcessInstance.getId()).singleResult(); |
| | | if (Assigneetask != null) { |
| | | ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(historicProcessInstance.getProcessDefinitionId()).singleResult(); |
| | | singleTask = packageTaskInfo( Assigneetask, processDefinition); |
| | | singleTask.put("status", "待办理"); |
| | | } |
| | | Task CandiDateTask = taskService.createTaskQuery().taskCandidateUser(userId).processInstanceId(historicProcessInstance.getId()).singleResult(); |
| | | if (CandiDateTask != null) { |
| | | ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(historicProcessInstance.getProcessDefinitionId()).singleResult(); |
| | | singleTask = packageTaskInfo( CandiDateTask, processDefinition); |
| | | singleTask.put("status", "待接收"); |
| | | } |
| | | } |
| | | else { |
| | | String processDefinitionId = historicProcessInstance.getProcessDefinitionId(); |
| | | ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult(); |
| | | singleTask = packageTaskInfo(new SimpleDateFormat("yyyy-MM-dd hh:mm"),historicProcessInstance, processDefinition); |
| | | singleTask.put("status", "已结束"); |
| | | } |
| | | |
| | | result.add(singleTask); |
| | | } |
| | | } |
| | | //resultPool.addValue("myUnFinishedTask", result, new TodoTaskWriter()); |
| | | } |
| | | @Override |
| | | public List<HistoricProcessInstance> getHistoryTask() { |
| | | TUser user = getOnlineUser(); |
| | | List<HistoricTaskInstance> taskList = historyService.createHistoricTaskInstanceQuery().taskAssignee(user.getUserId()).list(); |
| | | HashSet<String> workflowIdSet = new HashSet<>(); |
| | | for (HistoricTaskInstance historicTaskInstance : taskList) { |
| | | String processInstanceId = historicTaskInstance.getProcessInstanceId(); |
| | | workflowIdSet.add(processInstanceId); |
| | | } |
| | | |
| | | List<HistoricProcessInstance> historicProcessInstances = historyService.createHistoricProcessInstanceQuery().processInstanceIds(workflowIdSet).list(); |
| | | return historicProcessInstances; |
| | | |
| | | } |
| | | @Override |
| | | public List<Map<String, String>> getMyRunTask() { |
| | | TUser onlineUser = getOnlineUser(); |
| | | List<Map<String, String>> result = new ArrayList<Map<String, String>>(); |
| | | List<HistoricProcessInstance> unFinishedTaskList = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().unfinished().list(); |
| | | Map<String, String> singleTask = null; |
| | | |
| | | for (HistoricProcessInstance historicProcessInstance : unFinishedTaskList) { |
| | | String userId = historicProcessInstance.getStartUserId(); |
| | | if (onlineUser.getUserId().equalsIgnoreCase(userId)) { |
| | | |
| | | Task Assigneetask = taskService.createTaskQuery().taskAssignee(userId).processInstanceId(historicProcessInstance.getId()).singleResult(); |
| | | if (Assigneetask != null) { |
| | | ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(historicProcessInstance.getProcessDefinitionId()).singleResult(); |
| | | singleTask = packageTaskInfo( Assigneetask, processDefinition); |
| | | singleTask.put("status", "待办理"); |
| | | } |
| | | Task CandiDateTask = taskService.createTaskQuery().taskCandidateUser(userId).processInstanceId(historicProcessInstance.getId()).singleResult(); |
| | | if (CandiDateTask != null) { |
| | | ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(historicProcessInstance.getProcessDefinitionId()).singleResult(); |
| | | singleTask = packageTaskInfo( CandiDateTask, processDefinition); |
| | | singleTask.put("status", "待接收"); |
| | | } |
| | | |
| | | result.add(singleTask); |
| | | } |
| | | } |
| | | return result; |
| | | //resultPool.addValue("myUnFinishedTask", result, new TodoTaskWriter()); |
| | | } |
| | | |
| | | public Map<String, String> packageTaskInfo(SimpleDateFormat sdf, HistoricProcessInstance historicProcessInstance, ProcessDefinition processDefinition) { |
| | | TUser user = getOnlineUser(); |
| | | Map<String, String> singleTask = new HashMap<String, String>(); |
| | | singleTask.put("sid", user.getUserId()); |
| | | singleTask.put("id", historicProcessInstance.getId()); |
| | | singleTask.put("name", "已结束"); |
| | | singleTask.put("createTime", sdf.format(historicProcessInstance.getStartTime())); |
| | | singleTask.put("pdname", processDefinition.getName()); |
| | | singleTask.put("pdversion", Integer.toString(processDefinition.getVersion())); |
| | | singleTask.put("pid", historicProcessInstance.getId()); |
| | | |
| | | return singleTask; |
| | | } |
| | | |
| | | public Map<String, String> packageTaskInfo(Task task, ProcessDefinition processDefinition) { |
| | | Map<String, String> singleTask = new HashMap<String, String>(); |
| | | |
| | | Map<String,Object> taskVariables = taskService.getVariables(task.getId()); |
| | | singleTask.put("sid", (String)taskVariables.get("applyUserId")); |
| | | singleTask.put("id", task.getId()); |
| | | singleTask.put("name", task.getName()); |
| | | singleTask.put("isSuspension", String.valueOf(task.isSuspended())); |
| | | singleTask.put("createTime", new SimpleDateFormat("yyyy-MM-dd hh:mm").format(task.getCreateTime())); |
| | | singleTask.put("pdname", processDefinition.getName()); |
| | | singleTask.put("pdversion", Integer.toString(processDefinition.getVersion())); |
| | | singleTask.put("pid", task.getProcessInstanceId()); |
| | | |
| | | return singleTask; |
| | | } |
| | | } |