update 调整驳回

This commit is contained in:
gssong 2024-10-06 19:47:44 +08:00
parent 7322266c8d
commit 49112f43aa
5 changed files with 75 additions and 11 deletions

View File

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.warm.flow.core.dto.FlowParams;
import com.warm.flow.core.dto.ModifyHandler;
import com.warm.flow.core.entity.HisTask;
import com.warm.flow.core.entity.Instance;
import com.warm.flow.core.entity.Task;
import com.warm.flow.core.enums.CooperateType;
@ -30,6 +31,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
@ -265,4 +267,15 @@ public class FlwTaskController extends BaseController {
return toAjax(flwTaskService.backProcess(bo));
}
/**
* 获取可驳回节点
*
* @param instanceId 实例id
*/
@GetMapping("/getBackTaskNode/{instanceId}")
public R<List<HisTask>> getBackTaskNode(@PathVariable String instanceId) {
return R.ok(flwTaskService.getBackTaskNode(instanceId));
}
}

View File

@ -39,7 +39,7 @@ public class BackProcessBo implements Serializable {
* 驳回的节点id(目前未使用直接驳回到申请人)
*/
@NotBlank(message = "驳回的节点不能为空", groups = AddGroup.class)
private String targetNodeCode;
private String nodeCode;
/**
* 办理意见

View File

@ -1,11 +1,13 @@
package org.dromara.workflow.service;
import com.warm.flow.core.entity.HisTask;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.workflow.domain.bo.*;
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo;
import java.util.List;
import java.util.Map;
/**
@ -50,7 +52,6 @@ public interface IFlwTaskService {
TableDataInfo<FlowHisTaskVo> getPageByTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery);
/**
* 查询待办任务
*
@ -85,4 +86,12 @@ public interface IFlwTaskService {
* @return 结果
*/
boolean backProcess(BackProcessBo bo);
/**
* 获取可驳回节点
*
* @param instanceId 实例id
* @return 结果
*/
List<HisTask> getBackTaskNode(String instanceId);
}

View File

@ -39,6 +39,7 @@ import org.dromara.workflow.utils.WorkflowUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Arrays;
import java.util.List;
/**
@ -85,7 +86,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
@Override
public TableDataInfo<FlowInstanceVo> getPageByFinish(Instance instance, PageQuery pageQuery) {
QueryWrapper<FlowInstanceBo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("t.flow_status", FlowStatus.FINISHED.getKey());
queryWrapper.in("t.flow_status", Arrays.asList(FlowStatus.FINISHED.getKey(), FlowStatus.AUTO_PASS.getKey()));
Page<FlowInstanceVo> page = flwInstanceMapper.page(pageQuery.build(), queryWrapper);
TableDataInfo<FlowInstanceVo> build = TableDataInfo.build();
build.setRows(BeanUtil.copyToList(page.getRecords(), FlowInstanceVo.class));

View File

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.warm.flow.core.dto.FlowParams;
import com.warm.flow.core.entity.HisTask;
import com.warm.flow.core.entity.Instance;
import com.warm.flow.core.entity.Task;
import com.warm.flow.core.entity.User;
@ -14,12 +15,15 @@ import com.warm.flow.core.enums.SkipType;
import com.warm.flow.core.service.InsService;
import com.warm.flow.core.service.TaskService;
import com.warm.flow.core.service.UserService;
import com.warm.flow.orm.entity.FlowHisTask;
import com.warm.flow.orm.entity.FlowInstance;
import com.warm.flow.orm.entity.FlowSkip;
import com.warm.flow.orm.entity.FlowTask;
import com.warm.flow.orm.mapper.FlowHisTaskMapper;
import com.warm.flow.orm.mapper.FlowSkipMapper;
import com.warm.flow.orm.mapper.FlowTaskMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.dto.UserDTO;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
@ -37,6 +41,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
import static org.dromara.workflow.common.constant.FlowConstant.*;
@ -56,8 +61,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
private final UserService userService;
private final IWfDefinitionConfigService wfDefinitionConfigService;
private final IFlwInstanceService iFlwInstanceService;
private final FlowTaskMapper flowTaskMapper;
private final FlowHisTaskMapper flowHisTaskMapper;
private final FlowSkipMapper flowSkipMapper;
/**
* 启动任务
@ -92,7 +98,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
FlowParams flowParams = new FlowParams();
flowParams.flowCode(wfDefinitionConfigVo.getProcessKey());
flowParams.variable(startProcessBo.getVariables());
flowParams.setHandler(String.valueOf(LoginHelper.getUserId()));
Instance instance;
try {
instance = insService.start(startProcessBo.getBusinessKey(), flowParams);
@ -286,17 +292,52 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
try {
String userId = String.valueOf(LoginHelper.getUserId());
Long taskId = bo.getTaskId();
List<FlowTask> flowTasks = flowTaskMapper.selectList(new LambdaQueryWrapper<>(FlowTask.class).eq(FlowTask::getId, taskId));
if (CollUtil.isEmpty(flowTasks)) {
throw new ServiceException("任务不存在!");
}
Long definitionId = flowTasks.get(0).getDefinitionId();
List<FlowSkip> flowSkips = flowSkipMapper.selectList(new LambdaQueryWrapper<>(FlowSkip.class).eq(FlowSkip::getDefinitionId, definitionId));
FlowSkip flowSkip = StreamUtils.findFirst(flowSkips, e -> NodeType.START.getKey().equals(e.getNowNodeType()));
//开始节点的下一节点
assert flowSkip != null;
String nextNodeCode = flowSkip.getNextNodeCode();
FlowParams flowParams = new FlowParams();
flowParams.variable(bo.getVariables());
if (nextNodeCode.equals(bo.getNodeCode())) {
flowParams.skipType(SkipType.REJECT.getKey());
} else {
flowParams.skipType(SkipType.PASS.getKey());
}
flowParams.message(bo.getMessage());
flowParams.handler(userId);
flowParams.nodeCode(bo.getTargetNodeCode());
taskService.skip(taskId, flowParams);
flowParams.nodeCode(bo.getNodeCode());
flowParams.setPermissionFlag(WorkflowUtils.permissionList());
Instance instance = taskService.skip(taskId, flowParams);
setHandler(instance);
return true;
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new ServiceException(e.getMessage());
}
}
/**
* 获取可驳回节点
*
* @param instanceId 实例id
*/
@Override
public List<HisTask> getBackTaskNode(String instanceId) {
LambdaQueryWrapper<FlowHisTask> lw = new LambdaQueryWrapper<>(FlowHisTask.class)
.eq(FlowHisTask::getInstanceId, instanceId)
.eq(FlowHisTask::getNodeType, 1)
.orderByDesc(FlowHisTask::getCreateTime);
List<FlowHisTask> flowHisTasks = flowHisTaskMapper.selectList(lw);
if (CollUtil.isNotEmpty(flowHisTasks)) {
return flowHisTasks.stream().distinct().collect(Collectors.toList());
}
return Collections.emptyList();
}
}