工作流查询列表,把字段也查出来
This commit is contained in:
parent
1adf355c3d
commit
1f23297a12
@ -1,5 +1,6 @@
|
||||
package com.wflow.workflow.bean.vo;
|
||||
|
||||
import com.wflow.bean.entity.WflowFormData;
|
||||
import com.wflow.workflow.bean.process.OrgUser;
|
||||
import com.wflow.workflow.bean.process.enums.ProcessResultEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
@ -55,4 +56,8 @@ public class ProcessInstanceVo {
|
||||
//流程实例创建时间
|
||||
private Date startTime;
|
||||
private Date finishTime;
|
||||
/**
|
||||
* 流程表单数据表
|
||||
*/
|
||||
private List<WflowFormData> wflowFormDataList;
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.wflow.workflow.bean.vo;
|
||||
|
||||
import com.wflow.bean.entity.WflowFormData;
|
||||
import com.wflow.workflow.bean.process.OrgUser;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@ -63,5 +64,9 @@ public class ProcessTaskVo {
|
||||
private Date taskCreateTime;
|
||||
//task完成时间
|
||||
private Date taskEndTime;
|
||||
/**
|
||||
* 流程表单数据表
|
||||
*/
|
||||
private List<WflowFormData> wflowFormDataList;
|
||||
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package com.wflow.workflow.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson2.JSONArray;
|
||||
@ -10,12 +10,8 @@ import com.alibaba.fastjson2.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wflow.bean.do_.DeptDo;
|
||||
import com.wflow.bean.do_.UserDeptDo;
|
||||
import com.wflow.bean.do_.UserDo;
|
||||
import com.wflow.bean.entity.WflowCcTasks;
|
||||
import com.wflow.bean.entity.WflowModelHistorys;
|
||||
import com.wflow.bean.entity.WflowModels;
|
||||
import com.wflow.bean.entity.WflowSubProcess;
|
||||
import com.wflow.bean.entity.*;
|
||||
import com.wflow.bean.vo.UserVo;
|
||||
import com.wflow.exception.BusinessException;
|
||||
import com.wflow.mapper.*;
|
||||
@ -36,9 +32,7 @@ import com.wflow.workflow.config.WflowGlobalVarDef;
|
||||
import com.wflow.workflow.service.*;
|
||||
import com.wflow.workflow.utils.Executor;
|
||||
import com.zhgd.xmgl.tenant.TenantContextHolder;
|
||||
import liquibase.pro.packaged.S;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.flowable.common.engine.impl.identity.Authentication;
|
||||
import org.flowable.engine.HistoryService;
|
||||
@ -106,7 +100,8 @@ public class ProcessInstanceServiceImpl implements ProcessInstanceService {
|
||||
|
||||
@Autowired
|
||||
private BusinessDataStorageService businessDataService;
|
||||
|
||||
@Autowired
|
||||
private WflowFormDataMapper formDataMapper;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@ -442,10 +437,10 @@ public class ProcessInstanceServiceImpl implements ProcessInstanceService {
|
||||
.ifTrueNext(Boolean.TRUE.equals(finished), instanceQuery::finished)
|
||||
.ifTrueNext(Boolean.FALSE.equals(finished), instanceQuery::unfinished)
|
||||
.ifNotBlankNext(fieldId, id -> {
|
||||
if (StrUtil.isBlank(code)){
|
||||
if (StrUtil.isBlank(code)) {
|
||||
throw new BusinessException("搜索表单值必须先指定表单流程类型");
|
||||
}
|
||||
if (StrUtil.isNotBlank(fieldVal)){
|
||||
if (StrUtil.isNotBlank(fieldVal)) {
|
||||
instanceQuery.variableValueLike(fieldId, "%" + fieldVal + "%");
|
||||
}
|
||||
});
|
||||
@ -479,9 +474,26 @@ public class ProcessInstanceServiceImpl implements ProcessInstanceService {
|
||||
page.setTotal(instanceQuery.count());
|
||||
page.setRecords(instances);
|
||||
}
|
||||
setWflowFormDataList(instances);
|
||||
return page;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置流程表单数据表
|
||||
*
|
||||
* @param instances
|
||||
*/
|
||||
private void setWflowFormDataList(List<ProcessInstanceVo> instances) {
|
||||
if (CollUtil.isNotEmpty(instances)) {
|
||||
List<String> instanceIds = instances.stream().map(ProcessInstanceVo::getInstanceId).collect(Collectors.toList());
|
||||
Map<String, List<WflowFormData>> instanceIdMap = formDataMapper.selectList(new LambdaQueryWrapper<WflowFormData>()
|
||||
.in(WflowFormData::getInstanceId, instanceIds)).stream().collect(Collectors.groupingBy(WflowFormData::getInstanceId));
|
||||
instances.forEach(vo -> {
|
||||
vo.setWflowFormDataList(instanceIdMap.get(vo.getInstanceId()));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<ProcessInstanceVo> getCcMeInstance(Integer pageSize, Integer pageNo, String code, String[] startTimes
|
||||
, String startUser, Boolean finished, String key) {
|
||||
@ -491,7 +503,7 @@ public class ProcessInstanceServiceImpl implements ProcessInstanceService {
|
||||
queryWrapper.eq(WflowCcTasks::getCode, code);
|
||||
}
|
||||
List<WflowCcTasks> tasks = ccTasksMapper.selectList(
|
||||
queryWrapper.orderByDesc(WflowCcTasks::getCreateTime));
|
||||
queryWrapper.orderByDesc(WflowCcTasks::getCreateTime));
|
||||
HistoricProcessInstanceQuery instanceQuery = historyService.createHistoricProcessInstanceQuery();
|
||||
//TODO 多租户
|
||||
instanceQuery.processInstanceTenantId(TenantContextHolder.getTenantId());
|
||||
@ -545,6 +557,7 @@ public class ProcessInstanceServiceImpl implements ProcessInstanceService {
|
||||
page.setTotal(instanceQuery.count());
|
||||
page.setRecords(instances);
|
||||
}
|
||||
setWflowFormDataList(instances);
|
||||
} else {
|
||||
page.setTotal(0);
|
||||
page.setRecords(Collections.emptyList());
|
||||
|
||||
@ -2,6 +2,7 @@ package com.wflow.workflow.service.impl;
|
||||
|
||||
import cn.hutool.cache.CacheUtil;
|
||||
import cn.hutool.cache.impl.TimedCache;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.collection.ConcurrentHashSet;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
@ -11,9 +12,11 @@ import com.alibaba.fastjson2.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wflow.bean.do_.UserDeptDo;
|
||||
import com.wflow.bean.entity.WflowFormData;
|
||||
import com.wflow.bean.entity.WflowModelHistorys;
|
||||
import com.wflow.bean.entity.WflowModels;
|
||||
import com.wflow.exception.BusinessException;
|
||||
import com.wflow.mapper.WflowFormDataMapper;
|
||||
import com.wflow.mapper.WflowModelHistorysMapper;
|
||||
import com.wflow.mapper.WflowModelsMapper;
|
||||
import com.wflow.service.OrgRepositoryService;
|
||||
@ -26,7 +29,10 @@ import com.wflow.workflow.bean.process.props.CcProps;
|
||||
import com.wflow.workflow.bean.vo.*;
|
||||
import com.wflow.workflow.config.WflowGlobalVarDef;
|
||||
import com.wflow.workflow.extension.cmd.RecallToHisApprovalNodeCmd;
|
||||
import com.wflow.workflow.service.*;
|
||||
import com.wflow.workflow.service.BusinessDataStorageService;
|
||||
import com.wflow.workflow.service.NotifyService;
|
||||
import com.wflow.workflow.service.ProcessTaskService;
|
||||
import com.wflow.workflow.service.UserDeptOrLeaderService;
|
||||
import com.wflow.workflow.utils.FlowableUtils;
|
||||
import com.zhgd.xmgl.tenant.TenantContextHolder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -49,6 +55,7 @@ import org.flowable.task.api.history.HistoricTaskInstance;
|
||||
import org.flowable.task.service.history.NativeHistoricTaskInstanceQuery;
|
||||
import org.flowable.variable.api.history.HistoricVariableInstance;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -63,42 +70,8 @@ import java.util.stream.Collectors;
|
||||
@Service("processTaskService")
|
||||
public class ProcessTaskServiceImpl implements ProcessTaskService {
|
||||
|
||||
@Autowired
|
||||
private TaskService taskService;
|
||||
|
||||
@Autowired
|
||||
private RuntimeService runtimeService;
|
||||
|
||||
@Autowired
|
||||
private NotifyService notifyService;
|
||||
|
||||
@Autowired
|
||||
private BusinessDataStorageService businessDataService;
|
||||
|
||||
@Autowired
|
||||
private UserDeptOrLeaderService userDeptOrLeaderService;
|
||||
|
||||
@Autowired
|
||||
private OrgRepositoryService orgRepositoryService;
|
||||
|
||||
@Autowired
|
||||
private HistoryService historyService;
|
||||
|
||||
@Autowired
|
||||
private RepositoryService repositoryService;
|
||||
|
||||
@Autowired
|
||||
private ManagementService managementService;
|
||||
|
||||
@Autowired
|
||||
private WflowModelHistorysMapper historysMapper;
|
||||
|
||||
@Autowired
|
||||
private WflowModelsMapper wflowModelsMapper;
|
||||
|
||||
//超时缓存,数据缓存20秒,用来存储审批人防止flowable高频调用
|
||||
private static final TimedCache<String, List<String>> taskCache = CacheUtil.newTimedCache(20000);
|
||||
|
||||
//用来存储正在处理的节点,防止并发处理
|
||||
private static final Set<String> HANDLER_NODE_LOCK = new ConcurrentHashSet<>();
|
||||
|
||||
@ -106,6 +79,32 @@ public class ProcessTaskServiceImpl implements ProcessTaskService {
|
||||
taskCache.schedulePrune(10000);
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private TaskService taskService;
|
||||
@Autowired
|
||||
private RuntimeService runtimeService;
|
||||
@Autowired
|
||||
private NotifyService notifyService;
|
||||
@Autowired
|
||||
private BusinessDataStorageService businessDataService;
|
||||
@Autowired
|
||||
private UserDeptOrLeaderService userDeptOrLeaderService;
|
||||
@Autowired
|
||||
private OrgRepositoryService orgRepositoryService;
|
||||
@Autowired
|
||||
private HistoryService historyService;
|
||||
@Autowired
|
||||
private RepositoryService repositoryService;
|
||||
@Autowired
|
||||
private ManagementService managementService;
|
||||
@Autowired
|
||||
private WflowModelHistorysMapper historysMapper;
|
||||
@Autowired
|
||||
private WflowModelsMapper wflowModelsMapper;
|
||||
@Lazy
|
||||
@Autowired
|
||||
private WflowFormDataMapper formDataMapper;
|
||||
|
||||
@Override
|
||||
public Page<ProcessTaskVo> getUserTodoList(Integer pageSize, Integer pageNo, String code, String[] startTimes, String startUser, String key) {
|
||||
String userId = UserUtil.getLoginUserId();
|
||||
@ -211,9 +210,26 @@ public class ProcessTaskServiceImpl implements ProcessTaskService {
|
||||
page.setRecords(taskVos);
|
||||
}
|
||||
}
|
||||
setWflowFormDataList(taskVos);
|
||||
return page;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置流程表单数据表
|
||||
*
|
||||
* @param taskVos
|
||||
*/
|
||||
private void setWflowFormDataList(List<ProcessTaskVo> taskVos) {
|
||||
if (CollUtil.isNotEmpty(taskVos)) {
|
||||
List<String> instIds = taskVos.stream().map(ProcessTaskVo::getInstanceId).collect(Collectors.toList());
|
||||
Map<String, List<WflowFormData>> instanceIdMap = formDataMapper.selectList(new LambdaQueryWrapper<WflowFormData>()
|
||||
.in(WflowFormData::getInstanceId, instIds)).stream().collect(Collectors.groupingBy(WflowFormData::getInstanceId));
|
||||
taskVos.forEach(vo -> {
|
||||
vo.setWflowFormDataList(instanceIdMap.get(vo.getInstanceId()));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<ProcessTaskVo> getUserIdoList(Integer pageSize, Integer pageNo, String code, String[] startTimes, String startUser, String result, String key) {
|
||||
String userId = UserUtil.getLoginUserId();
|
||||
@ -261,17 +277,17 @@ public class ProcessTaskServiceImpl implements ProcessTaskService {
|
||||
//批量获取所有任务的发起部门信息
|
||||
Map<String, Object> startDept = FlowableUtils.getProcessVars(instanceMap.keySet(), "startDept");
|
||||
List<ProcessTaskVo> taskVos = taskInstances.stream().map(task -> {
|
||||
HistoricProcessInstance instance = instanceMap.get(task.getProcessInstanceId());
|
||||
HistoricVariableInstance variableInstance = historyService.createHistoricVariableInstanceQuery()
|
||||
.processInstanceId(instance.getId()).variableName("approve_" + task.getId()).singleResult();
|
||||
if (StringUtils.isNotBlank(result)) {
|
||||
System.out.println("11111" + variableInstance.getValue());
|
||||
if (!variableInstance.getValue().toString().equals(result)) {
|
||||
return null;
|
||||
}
|
||||
HistoricProcessInstance instance = instanceMap.get(task.getProcessInstanceId());
|
||||
HistoricVariableInstance variableInstance = historyService.createHistoricVariableInstanceQuery()
|
||||
.processInstanceId(instance.getId()).variableName("approve_" + task.getId()).singleResult();
|
||||
if (StringUtils.isNotBlank(result)) {
|
||||
System.out.println("11111" + variableInstance.getValue());
|
||||
if (!variableInstance.getValue().toString().equals(result)) {
|
||||
return null;
|
||||
}
|
||||
//构造用户id -> 部门id
|
||||
staterUsers.add(instance.getStartUserId() + "_" + startDept.getOrDefault(instance.getId(),
|
||||
}
|
||||
//构造用户id -> 部门id
|
||||
staterUsers.add(instance.getStartUserId() + "_" + startDept.getOrDefault(instance.getId(),
|
||||
//如果没有就从流程变量 owner 里取(之前是存owner变量)
|
||||
FlowableUtils.getOwnerDept(instance.getId(), false)));
|
||||
return ProcessTaskVo.builder()
|
||||
@ -334,6 +350,7 @@ public class ProcessTaskServiceImpl implements ProcessTaskService {
|
||||
page.setRecords(taskVos);
|
||||
}
|
||||
}
|
||||
setWflowFormDataList(taskVos);
|
||||
return page;
|
||||
}
|
||||
|
||||
@ -352,7 +369,7 @@ public class ProcessTaskServiceImpl implements ProcessTaskService {
|
||||
if (ProcessHandlerParamsVo.Action.cancel.equals(params.getAction())) {
|
||||
params.getComment().setText("撤销:" + params.getComment().getText());
|
||||
}
|
||||
if (!(isComment || putComment)){
|
||||
if (!(isComment || putComment)) {
|
||||
throw new BusinessException("任务不存在,请刷新数据");
|
||||
}
|
||||
taskService.addComment(params.getTaskId(), params.getInstanceId(), JSONObject.toJSONString(params.getComment()));
|
||||
@ -415,11 +432,11 @@ public class ProcessTaskServiceImpl implements ProcessTaskService {
|
||||
//throw new BusinessException("暂不支持单独评论");
|
||||
break;
|
||||
}
|
||||
}catch (Exception e) {
|
||||
} catch (Exception e) {
|
||||
log.error("处理任务异常", e);
|
||||
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
||||
throw new BusinessException(e.getMessage());
|
||||
}finally {
|
||||
} finally {
|
||||
//移除锁
|
||||
HANDLER_NODE_LOCK.remove(lockKey);
|
||||
}
|
||||
@ -548,14 +565,15 @@ public class ProcessTaskServiceImpl implements ProcessTaskService {
|
||||
/**
|
||||
* 获取审批人
|
||||
*
|
||||
* @param props 节点熟悉
|
||||
* @param props 节点熟悉
|
||||
* @param tenantId
|
||||
* @return 审批人ID列表
|
||||
*/
|
||||
public List<String> getApprovalUsers(String instanceId, String nodeId, ApprovalProps props, String tenantId) {
|
||||
String userId = runtimeService.getVariable(instanceId, WflowGlobalVarDef.INITIATOR, String.class);
|
||||
String deptId = runtimeService.getVariable(instanceId, WflowGlobalVarDef.START_DEPT, String.class);
|
||||
deptId = StrUtil.isNotBlank(deptId) ? deptId : runtimeService.getVariable(instanceId, WflowGlobalVarDef.OWNER, ProcessInstanceOwnerDto.class).getOwnerDeptId();;
|
||||
deptId = StrUtil.isNotBlank(deptId) ? deptId : runtimeService.getVariable(instanceId, WflowGlobalVarDef.OWNER, ProcessInstanceOwnerDto.class).getOwnerDeptId();
|
||||
;
|
||||
Set<String> userSet = new LinkedHashSet<>();
|
||||
switch (props.getAssignedType()) {
|
||||
case REFUSE:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user