|
@ -1,5 +1,7 @@ |
|
|
package io.sc.platform.flowable.service.impl; |
|
|
package io.sc.platform.flowable.service.impl; |
|
|
|
|
|
|
|
|
|
|
|
import io.sc.platform.core.support.KeyValue; |
|
|
|
|
|
import io.sc.platform.flowable.jpa.entity.ProcessEntity; |
|
|
import io.sc.platform.flowable.service.AssigneeQueryService; |
|
|
import io.sc.platform.flowable.service.AssigneeQueryService; |
|
|
import io.sc.platform.flowable.service.ProcessEntityService; |
|
|
import io.sc.platform.flowable.service.ProcessEntityService; |
|
|
import io.sc.platform.flowable.service.ProcessQueryService; |
|
|
import io.sc.platform.flowable.service.ProcessQueryService; |
|
@ -10,6 +12,7 @@ import io.sc.platform.orm.service.support.QueryResult; |
|
|
import io.sc.platform.orm.service.support.criteria.Criteria; |
|
|
import io.sc.platform.orm.service.support.criteria.Criteria; |
|
|
import io.sc.platform.orm.service.support.criteria.impl.Equals; |
|
|
import io.sc.platform.orm.service.support.criteria.impl.Equals; |
|
|
import io.sc.platform.util.CollectionUtil; |
|
|
import io.sc.platform.util.CollectionUtil; |
|
|
|
|
|
import io.sc.platform.util.StringUtil; |
|
|
import org.flowable.bpmn.model.BpmnModel; |
|
|
import org.flowable.bpmn.model.BpmnModel; |
|
|
import org.flowable.bpmn.model.EndEvent; |
|
|
import org.flowable.bpmn.model.EndEvent; |
|
|
import org.flowable.bpmn.model.FlowElement; |
|
|
import org.flowable.bpmn.model.FlowElement; |
|
@ -274,6 +277,7 @@ public class ProcessQueryServiceImpl implements ProcessQueryService { |
|
|
|
|
|
|
|
|
List<ProcessTaskWrapper> wrappers =new ArrayList<>(); |
|
|
List<ProcessTaskWrapper> wrappers =new ArrayList<>(); |
|
|
Set<String> processIntanceIds =new HashSet<>(); |
|
|
Set<String> processIntanceIds =new HashSet<>(); |
|
|
|
|
|
Map<String,Map<String, BusinessKeyAndDescription>> processDefineAndInstanceAndBusinessMap =new HashMap<>(); |
|
|
for(Task item : items){ |
|
|
for(Task item : items){ |
|
|
ProcessTaskWrapper wrapper =new ProcessTaskWrapper(); |
|
|
ProcessTaskWrapper wrapper =new ProcessTaskWrapper(); |
|
|
wrapper.setId(item.getId()); |
|
|
wrapper.setId(item.getId()); |
|
@ -298,23 +302,86 @@ public class ProcessQueryServiceImpl implements ProcessQueryService { |
|
|
wrapper.setFormKey(item.getFormKey()); |
|
|
wrapper.setFormKey(item.getFormKey()); |
|
|
wrapper.setClaimTime(item.getClaimTime()); |
|
|
wrapper.setClaimTime(item.getClaimTime()); |
|
|
wrappers.add(wrapper); |
|
|
wrappers.add(wrapper); |
|
|
|
|
|
Map<String,BusinessKeyAndDescription> processInstanceAndBusinessMap =processDefineAndInstanceAndBusinessMap.get(item.getProcessDefinitionId()); |
|
|
|
|
|
if(processInstanceAndBusinessMap==null){ |
|
|
|
|
|
processInstanceAndBusinessMap =new HashMap<>(); |
|
|
|
|
|
processDefineAndInstanceAndBusinessMap.put(item.getProcessDefinitionId(),processInstanceAndBusinessMap); |
|
|
|
|
|
} |
|
|
|
|
|
processInstanceAndBusinessMap.put(item.getProcessInstanceId(),new BusinessKeyAndDescription()); |
|
|
processIntanceIds.add(item.getProcessInstanceId()); |
|
|
processIntanceIds.add(item.getProcessInstanceId()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 建立流程实例和业务Key的关系
|
|
|
Map<String,String[]> businessKeyMap =new HashMap<>(); |
|
|
|
|
|
List<ProcessInstance> processInstances =runtimeService.createProcessInstanceQuery().processInstanceIds(processIntanceIds).list(); |
|
|
List<ProcessInstance> processInstances =runtimeService.createProcessInstanceQuery().processInstanceIds(processIntanceIds).list(); |
|
|
if(CollectionUtil.hasElements(processInstances)) { |
|
|
if(CollectionUtil.hasElements(processInstances)) { |
|
|
for (ProcessInstance processInstance : processInstances) { |
|
|
for (ProcessInstance processInstance : processInstances) { |
|
|
businessKeyMap.put(processInstance.getId(), new String[]{processInstance.getBusinessKey(),processInstance.getProcessDefinitionName()}); |
|
|
Map<String,BusinessKeyAndDescription> processInstanceAndBusinessMap =processDefineAndInstanceAndBusinessMap.get(processInstance.getProcessDefinitionId()); |
|
|
|
|
|
if(processInstanceAndBusinessMap!=null){ |
|
|
|
|
|
BusinessKeyAndDescription businessKeyAndDescription =processInstanceAndBusinessMap.get(processInstance.getId()); |
|
|
|
|
|
if(businessKeyAndDescription!=null){ |
|
|
|
|
|
businessKeyAndDescription.setProcessDefinitionName(processInstance.getProcessDefinitionName()); |
|
|
|
|
|
businessKeyAndDescription.setBusinessKey(processInstance.getBusinessKey()); |
|
|
|
|
|
businessKeyAndDescription.setBusinessDescription(processInstance.getProcessDefinitionName()); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
for(String processDefineId : processDefineAndInstanceAndBusinessMap.keySet()) { |
|
|
|
|
|
Map<String,BusinessKeyAndDescription> processInstanceAndBusinessMap =processDefineAndInstanceAndBusinessMap.get(processDefineId); |
|
|
|
|
|
if(processInstanceAndBusinessMap==null || processInstanceAndBusinessMap.size()<=0){ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
ProcessEntity processEntity =processEntityService.getRepository().findByDeployedId(processDefineId); |
|
|
|
|
|
for(String processInstanceId : processInstanceAndBusinessMap.keySet()){ |
|
|
|
|
|
BusinessKeyAndDescription businessKeyAndDescription =processInstanceAndBusinessMap.get(processInstanceId); |
|
|
|
|
|
if(businessKeyAndDescription!=null){ |
|
|
|
|
|
businessKeyAndDescription.setRoutePath(processEntity.getRoutePath()); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
if(processEntity==null){ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
String sql =processEntity.getBusinessDescriptionSql(); |
|
|
|
|
|
if(!StringUtils.hasText(sql)){ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Set<String> businessKeys =new HashSet<>(); |
|
|
|
|
|
for(Map.Entry<String,BusinessKeyAndDescription> entry: processInstanceAndBusinessMap.entrySet()){ |
|
|
|
|
|
businessKeys.add(entry.getValue().getBusinessKey()); |
|
|
|
|
|
} |
|
|
|
|
|
if(!CollectionUtil.hasElements(businessKeys)){ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
Map<String,Object> variables =new HashMap<>(); |
|
|
|
|
|
variables.put("bussinessKeys","'" + StringUtil.combine("','",businessKeys) + "'"); |
|
|
|
|
|
sql =StringUtil.format(sql,variables); |
|
|
|
|
|
List<Map<String,Object>> result =jdbcTemplate.queryForList(sql); |
|
|
|
|
|
if(!CollectionUtil.hasElements(result)){ |
|
|
|
|
|
continue; |
|
|
|
|
|
} |
|
|
|
|
|
for(Map<String,Object> row : result){ |
|
|
|
|
|
String bussinessKey =row.get("BUSSINESS_KEY").toString(); |
|
|
|
|
|
String bussinessDescription =row.get("BUSSINESS_DESCRIPTION").toString(); |
|
|
|
|
|
for(String processInstanceId : processInstanceAndBusinessMap.keySet()){ |
|
|
|
|
|
BusinessKeyAndDescription businessKeyAndDescription =processInstanceAndBusinessMap.get(processInstanceId); |
|
|
|
|
|
if(businessKeyAndDescription.getBusinessKey().equals(bussinessKey)){ |
|
|
|
|
|
businessKeyAndDescription.setBusinessDescription(bussinessDescription); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//合并
|
|
|
//合并
|
|
|
for(ProcessTaskWrapper wrapper : wrappers){ |
|
|
for(ProcessTaskWrapper wrapper : wrappers){ |
|
|
String[] item =businessKeyMap.get(wrapper.getProcessInstanceId()); |
|
|
Map<String,BusinessKeyAndDescription> processInstanceAndBusinessMap =processDefineAndInstanceAndBusinessMap.get(wrapper.getProcessDefinitionId()); |
|
|
wrapper.setBusinessKey(item[0]); |
|
|
BusinessKeyAndDescription businessKeyAndDescription =processInstanceAndBusinessMap.get(wrapper.getProcessInstanceId()); |
|
|
wrapper.setProcessDefinitionName(item[1]); |
|
|
wrapper.setBusinessKey(businessKeyAndDescription.getBusinessKey()); |
|
|
|
|
|
wrapper.setBusinessDescription(businessKeyAndDescription.getBusinessDescription()); |
|
|
|
|
|
wrapper.setProcessDefinitionName(businessKeyAndDescription.getProcessDefinitionName()); |
|
|
|
|
|
wrapper.setRoutePath(businessKeyAndDescription.getRoutePath()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return new PageImpl<ProcessTaskWrapper>(wrappers,pageable,total); |
|
|
return new PageImpl<ProcessTaskWrapper>(wrappers,pageable,total); |
|
|