add 添加流程撤销

remove 删除无用代码
This commit is contained in:
gssong 2024-12-01 15:54:35 +08:00
parent 75b17b5a58
commit 4a43f48120
21 changed files with 107 additions and 393 deletions

View File

@ -7,7 +7,8 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.warm.flow.core.entity.Instance; import org.dromara.warm.flow.core.entity.Instance;
import org.dromara.warm.flow.core.service.InsService; import org.dromara.warm.flow.core.service.InsService;
import org.dromara.workflow.domain.bo.InstanceBo; import org.dromara.workflow.domain.bo.FlowCancelBo;
import org.dromara.workflow.domain.bo.FlowInstanceBo;
import org.dromara.workflow.domain.vo.FlowInstanceVo; import org.dromara.workflow.domain.vo.FlowInstanceVo;
import org.dromara.workflow.service.IFlwInstanceService; import org.dromara.workflow.service.IFlwInstanceService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -75,11 +76,11 @@ public class FlwInstanceController extends BaseController {
/** /**
* 撤销流程 * 撤销流程
* *
* @param businessId 业务id * @param bo 参数
*/ */
@PutMapping("/cancelProcessApply/{businessId}") @PutMapping("/cancelProcessApply")
public R<Void> cancelProcessApply(@PathVariable String businessId) { public R<Void> cancelProcessApply(@RequestBody FlowCancelBo bo) {
return toAjax(flwInstanceService.cancelProcessApply(businessId)); return toAjax(flwInstanceService.cancelProcessApply(bo));
} }
/** /**
@ -101,12 +102,12 @@ public class FlwInstanceController extends BaseController {
/** /**
* 获取当前登陆人发起的流程实例 * 获取当前登陆人发起的流程实例
* *
* @param instanceBo 参数 * @param flowInstanceBo 参数
* @param pageQuery 分页 * @param pageQuery 分页
*/ */
@GetMapping("/getPageByCurrent") @GetMapping("/getPageByCurrent")
public TableDataInfo<FlowInstanceVo> getPageByCurrent(InstanceBo instanceBo, PageQuery pageQuery) { public TableDataInfo<FlowInstanceVo> getPageByCurrent(FlowInstanceBo flowInstanceBo, PageQuery pageQuery) {
return flwInstanceService.getPageByCurrent(instanceBo, pageQuery); return flwInstanceService.getPageByCurrent(flowInstanceBo, pageQuery);
} }

View File

@ -159,7 +159,7 @@ public class FlwTaskController extends BaseController {
@Log(title = "任务管理", businessType = BusinessType.INSERT) @Log(title = "任务管理", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/terminationTask") @PostMapping("/terminationTask")
public R<Boolean> terminationTask(@RequestBody TerminationBo bo) { public R<Boolean> terminationTask(@RequestBody FlowTerminationBo bo) {
return R.ok(flwTaskService.terminationTask(bo)); return R.ok(flwTaskService.terminationTask(bo));
} }
@ -171,7 +171,7 @@ public class FlwTaskController extends BaseController {
@Log(title = "任务管理", businessType = BusinessType.INSERT) @Log(title = "任务管理", businessType = BusinessType.INSERT)
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/delegateTask") @PostMapping("/delegateTask")
public R<Void> delegateTask(@Validated({AddGroup.class}) @RequestBody DelegateBo bo) { public R<Void> delegateTask(@Validated({AddGroup.class}) @RequestBody FlowDelegateBo bo) {
FlowParams flowParams = new FlowParams(); FlowParams flowParams = new FlowParams();
flowParams.addHandlers(Collections.singletonList(USER.getCode()+bo.getUserId())); flowParams.addHandlers(Collections.singletonList(USER.getCode()+bo.getUserId()));
flowParams.handler(LoginHelper.getUserIdStr()); flowParams.handler(LoginHelper.getUserIdStr());
@ -189,7 +189,7 @@ public class FlwTaskController extends BaseController {
@Log(title = "任务管理", businessType = BusinessType.UPDATE) @Log(title = "任务管理", businessType = BusinessType.UPDATE)
@RepeatSubmit() @RepeatSubmit()
@PostMapping("/transferTask") @PostMapping("/transferTask")
public R<Void> transferTask(@Validated({AddGroup.class}) @RequestBody TransferBo bo) { public R<Void> transferTask(@Validated({AddGroup.class}) @RequestBody FlowTransferBo bo) {
FlowParams flowParams = new FlowParams(); FlowParams flowParams = new FlowParams();
flowParams.addHandlers(Collections.singletonList(USER.getCode()+bo.getUserId())); flowParams.addHandlers(Collections.singletonList(USER.getCode()+bo.getUserId()));
flowParams.handler(LoginHelper.getUserIdStr()); flowParams.handler(LoginHelper.getUserIdStr());

View File

@ -1,40 +0,0 @@
package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 加签参数请求
*
* @author may
*/
@Data
public class AddMultiBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 任务ID
*/
@NotBlank(message = "任务ID不能为空", groups = AddGroup.class)
private String taskId;
/**
* 加签人员id
*/
@NotEmpty(message = "加签人员不能为空", groups = AddGroup.class)
private List<Long> assignees;
/**
* 加签人员名称
*/
@NotEmpty(message = "加签人员不能为空", groups = AddGroup.class)
private List<String> assigneeNames;
}

View File

@ -1,52 +0,0 @@
package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 减签参数请求
*
* @author may
*/
@Data
public class DeleteMultiBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 任务ID
*/
@NotBlank(message = "任务ID不能为空", groups = AddGroup.class)
private String taskId;
/**
* 减签人员
*/
@NotEmpty(message = "减签人员不能为空", groups = AddGroup.class)
private List<String> taskIds;
/**
* 执行id
*/
@NotEmpty(message = "执行id不能为空", groups = AddGroup.class)
private List<String> executionIds;
/**
* 人员id
*/
@NotEmpty(message = "减签人员id不能为空", groups = AddGroup.class)
private List<Long> assigneeIds;
/**
* 人员名称
*/
@NotEmpty(message = "减签人员不能为空", groups = AddGroup.class)
private List<String> assigneeNames;
}

View File

@ -8,24 +8,24 @@ import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
/** /**
* 流程实例作废请求对象 * 撤销任务请求对象
* *
* @author may * @author may
*/ */
@Data @Data
public class ProcessInvalidBo implements Serializable { public class FlowCancelBo implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
* 业务id * 任务ID
*/ */
@NotBlank(message = "业务id不能为空", groups = {AddGroup.class}) @NotBlank(message = "业务ID不能为空", groups = AddGroup.class)
private String businessKey; private String businessId;
/** /**
* 作废原因 * 办理意见
*/ */
private String deleteReason; private String message;
} }

View File

@ -13,7 +13,7 @@ import java.io.Serializable;
* @author may * @author may
*/ */
@Data @Data
public class DelegateBo implements Serializable { public class FlowDelegateBo implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -4,10 +4,9 @@ import lombok.Data;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
/** /**
* 任务请求对象 * 流程实例请求对象
* *
* @author may * @author may
*/ */
@ -18,27 +17,27 @@ public class FlowInstanceBo implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** /**
* 任务名称 * 流程名称
*/
private String nodeName;
/**
* 流程定义名称
*/ */
private String flowName; private String flowName;
/** /**
* 流程定义编码 * 流程编码
*/ */
private String flowCode; private String flowCode;
/** /**
* 流程实例id * 任务发起人
*/ */
private Long instanceId; private String startUserId;
/** /**
* 权限列表 * 业务id
*/ */
private List<String> permissionList; private String businessKey;
/**
* 模型分类
*/
private String categoryCode;
} }

View File

@ -13,7 +13,7 @@ import java.io.Serializable;
* @author may * @author may
*/ */
@Data @Data
public class TerminationBo implements Serializable { public class FlowTerminationBo implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -6,7 +6,6 @@ import org.dromara.common.core.validate.AddGroup;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
/** /**
* 终转办务请求对象 * 终转办务请求对象
@ -14,7 +13,7 @@ import java.util.List;
* @author may * @author may
*/ */
@Data @Data
public class TransferBo implements Serializable { public class FlowTransferBo implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -1,43 +0,0 @@
package org.dromara.workflow.domain.bo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 流程实例请求对象
*
* @author may
*/
@Data
public class InstanceBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程名称
*/
private String flowName;
/**
* 流程编码
*/
private String flowCode;
/**
* 任务发起人
*/
private String startUserId;
/**
* 业务id
*/
private String businessKey;
/**
* 模型分类
*/
private String categoryCode;
}

View File

@ -1,66 +0,0 @@
package org.dromara.workflow.domain.bo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.workflow.common.constant.FlowConstant;
import java.io.Serial;
import java.io.Serializable;
/**
* 模型请求对象
*
* @author may
*/
@Data
public class ModelBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 模型id
*/
@NotBlank(message = "模型ID不能为空", groups = {EditGroup.class})
private String id;
/**
* 模型名称
*/
@NotBlank(message = "模型名称不能为空", groups = {AddGroup.class})
private String name;
/**
* 模型标识key
*/
@NotBlank(message = "模型标识key不能为空", groups = {AddGroup.class})
@Pattern(regexp = FlowConstant.MODEL_KEY_PATTERN, message = "模型标识key只能字符或者下划线开头", groups = {AddGroup.class})
private String key;
/**
* 模型分类
*/
@NotBlank(message = "模型分类不能为空", groups = {AddGroup.class})
private String categoryCode;
/**
* 模型XML
*/
@NotBlank(message = "模型XML不能为空", groups = {AddGroup.class})
private String xml;
/**
* 模型SVG图片
*/
@NotBlank(message = "模型SVG不能为空", groups = {EditGroup.class})
private String svg;
/**
* 备注
*/
private String description;
}

View File

@ -1,34 +0,0 @@
package org.dromara.workflow.domain.bo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 流程定义请求对象
*
* @author may
*/
@Data
public class ProcessDefinitionBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程定义名称key
*/
private String key;
/**
* 流程定义名称
*/
private String name;
/**
* 模型分类
*/
private String categoryCode;
}

View File

@ -1,39 +0,0 @@
package org.dromara.workflow.domain.bo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 用户加签查询
*
* @author may
*/
@Data
public class SysUserMultiBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 人员名称
*/
private String userName;
/**
* 人员名称
*/
private String nickName;
/**
* 部门id
*/
private String deptId;
/**
* 任务id
*/
private String taskId;
}

View File

@ -1,33 +0,0 @@
package org.dromara.workflow.domain.bo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* 任务请求对象
*
* @author may
*/
@Data
public class TaskBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 任务名称
*/
private String name;
/**
* 流程定义名称
*/
private String processDefinitionName;
/**
* 流程定义key
*/
private String processDefinitionKey;
}

View File

@ -1,34 +0,0 @@
package org.dromara.workflow.domain.bo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 任务催办
*
* @author may
*/
@Data
public class TaskUrgingBo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 流程实例id
*/
private String processInstanceId;
/**
* 消息类型
*/
private List<String> messageType;
/**
* 催办内容为空默认系统内置信息
*/
private String message;
}

View File

@ -129,10 +129,15 @@ public class FlowHisTaskVo implements Serializable {
private String skipType; private String skipType;
/** /**
* 流程状态1审批中 2 审批通过 9已退回 10失效 * 流程状态
*/ */
private String flowStatus; private String flowStatus;
/**
* 任务状态
*/
private String flowTaskStatus;
/** /**
* 流程状态 * 流程状态
*/ */

View File

@ -4,7 +4,8 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.warm.flow.core.entity.Instance; import org.dromara.warm.flow.core.entity.Instance;
import org.dromara.warm.flow.orm.entity.FlowInstance; import org.dromara.warm.flow.orm.entity.FlowInstance;
import org.dromara.workflow.domain.bo.InstanceBo; import org.dromara.workflow.domain.bo.FlowCancelBo;
import org.dromara.workflow.domain.bo.FlowInstanceBo;
import org.dromara.workflow.domain.vo.FlowInstanceVo; import org.dromara.workflow.domain.vo.FlowInstanceVo;
import java.util.List; import java.util.List;
@ -62,10 +63,10 @@ public interface IFlwInstanceService {
/** /**
* 撤销流程 * 撤销流程
* *
* @param businessId 业务id * @param bo 参数
* @return 结果 * @return 结果
*/ */
boolean cancelProcessApply(String businessId); boolean cancelProcessApply(FlowCancelBo bo);
/** /**
* 获取当前登陆人发起的流程实例 * 获取当前登陆人发起的流程实例
@ -74,7 +75,7 @@ public interface IFlwInstanceService {
* @param pageQuery 分页 * @param pageQuery 分页
* @return 结果 * @return 结果
*/ */
TableDataInfo<FlowInstanceVo> getPageByCurrent(InstanceBo instanceBo, PageQuery pageQuery); TableDataInfo<FlowInstanceVo> getPageByCurrent(FlowInstanceBo instanceBo, PageQuery pageQuery);
/** /**
* 获取流程图,流程记录 * 获取流程图,流程记录

View File

@ -101,5 +101,5 @@ public interface IFlwTaskService {
* @param bo 参数 * @param bo 参数
* @return 结果 * @return 结果
*/ */
boolean terminationTask(TerminationBo bo); boolean terminationTask(FlowTerminationBo bo);
} }

View File

@ -10,28 +10,41 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.warm.flow.core.constant.ExceptionCons;
import org.dromara.warm.flow.core.dto.FlowParams;
import org.dromara.warm.flow.core.entity.Definition;
import org.dromara.warm.flow.core.entity.Instance; import org.dromara.warm.flow.core.entity.Instance;
import org.dromara.warm.flow.core.entity.Node;
import org.dromara.warm.flow.core.enums.CooperateType; import org.dromara.warm.flow.core.enums.CooperateType;
import org.dromara.warm.flow.core.enums.FlowStatus; import org.dromara.warm.flow.core.enums.FlowStatus;
import org.dromara.warm.flow.core.enums.NodeType; import org.dromara.warm.flow.core.enums.NodeType;
import org.dromara.warm.flow.core.enums.SkipType;
import org.dromara.warm.flow.core.service.DefService; import org.dromara.warm.flow.core.service.DefService;
import org.dromara.warm.flow.core.service.InsService; import org.dromara.warm.flow.core.service.InsService;
import org.dromara.warm.flow.core.service.NodeService;
import org.dromara.warm.flow.core.service.TaskService;
import org.dromara.warm.flow.core.utils.AssertUtil;
import org.dromara.warm.flow.orm.entity.FlowDefinition; import org.dromara.warm.flow.orm.entity.FlowDefinition;
import org.dromara.warm.flow.orm.entity.FlowHisTask; import org.dromara.warm.flow.orm.entity.FlowHisTask;
import org.dromara.warm.flow.orm.entity.FlowInstance; import org.dromara.warm.flow.orm.entity.FlowInstance;
import org.dromara.warm.flow.orm.entity.FlowNode;
import org.dromara.warm.flow.orm.mapper.FlowDefinitionMapper; import org.dromara.warm.flow.orm.mapper.FlowDefinitionMapper;
import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper; import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper; import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper;
import org.dromara.warm.flow.orm.mapper.FlowNodeMapper;
import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.bo.FlowCancelBo;
import org.dromara.workflow.domain.bo.FlowInstanceBo; import org.dromara.workflow.domain.bo.FlowInstanceBo;
import org.dromara.workflow.domain.bo.InstanceBo;
import org.dromara.workflow.domain.vo.FlowHisTaskVo; import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowInstanceVo; import org.dromara.workflow.domain.vo.FlowInstanceVo;
import org.dromara.workflow.domain.vo.VariableVo; import org.dromara.workflow.domain.vo.VariableVo;
import org.dromara.workflow.handler.FlowProcessEventHandler;
import org.dromara.workflow.mapper.FlwInstanceMapper; import org.dromara.workflow.mapper.FlwInstanceMapper;
import org.dromara.workflow.service.IFlwInstanceService; import org.dromara.workflow.service.IFlwInstanceService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -59,6 +72,10 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
private final FlowInstanceMapper flowInstanceMapper; private final FlowInstanceMapper flowInstanceMapper;
private final FlwInstanceMapper flwInstanceMapper; private final FlwInstanceMapper flwInstanceMapper;
private final FlowDefinitionMapper flowDefinitionMapper; private final FlowDefinitionMapper flowDefinitionMapper;
private final TaskService taskService;
private final FlowNodeMapper flowNodeMapper;
private final NodeService nodeService;
private final FlowProcessEventHandler flowProcessEventHandler;
/** /**
* 分页查询正在运行的流程实例 * 分页查询正在运行的流程实例
@ -69,7 +86,6 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
@Override @Override
public TableDataInfo<FlowInstanceVo> getPageByRunning(Instance instance, PageQuery pageQuery) { public TableDataInfo<FlowInstanceVo> getPageByRunning(Instance instance, PageQuery pageQuery) {
QueryWrapper<FlowInstanceBo> queryWrapper = new QueryWrapper<>(); QueryWrapper<FlowInstanceBo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
Page<FlowInstanceVo> page = flwInstanceMapper.page(pageQuery.build(), queryWrapper); Page<FlowInstanceVo> page = flwInstanceMapper.page(pageQuery.build(), queryWrapper);
TableDataInfo<FlowInstanceVo> build = TableDataInfo.build(); TableDataInfo<FlowInstanceVo> build = TableDataInfo.build();
build.setRows(BeanUtil.copyToList(page.getRecords(), FlowInstanceVo.class)); build.setRows(BeanUtil.copyToList(page.getRecords(), FlowInstanceVo.class));
@ -133,12 +149,42 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
/** /**
* 撤销流程 * 撤销流程
* *
* @param businessId 业务id * @param bo 参数
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean cancelProcessApply(String businessId) { public boolean cancelProcessApply(FlowCancelBo bo) {
throw new RuntimeException("暂未开发"); try {
Instance instance = instanceByBusinessId(bo.getBusinessId());
if (instance == null) {
throw new ServiceException(ExceptionCons.NOT_FOUNT_INSTANCE);
}
Definition definition = defService.getById(instance.getDefinitionId());
if (definition == null) {
throw new ServiceException(ExceptionCons.NOT_FOUNT_DEF);
}
//获取已发布的流程节点
List<FlowNode> flowNodes = flowNodeMapper.selectList(new LambdaQueryWrapper<FlowNode>().eq(FlowNode::getDefinitionId, definition.getId()));
AssertUtil.isTrue(CollUtil.isEmpty(flowNodes), ExceptionCons.NOT_PUBLISH_NODE);
Node startNode = flowNodes.stream().filter(t -> NodeType.isStart(t.getNodeType())).findFirst().orElse(null);
AssertUtil.isNull(startNode, ExceptionCons.LOST_START_NODE);
Node nextNode = nodeService.getNextNode(definition.getId(), startNode.getNodeCode(), null, SkipType.NONE.getKey());
FlowParams flowParams = FlowParams.build();
flowParams.handler(LoginHelper.getUserIdStr());
flowParams.nodeCode(nextNode.getNodeCode());
flowParams.message(bo.getMessage());
flowParams.flowStatus(BusinessStatusEnum.CANCEL.getStatus()).hisStatus(TaskStatusEnum.CANCEL.getStatus());
taskService.retrieve(instance.getId(), flowParams);
// 更新状态
updateStatus(instance.getId(), BusinessStatusEnum.CANCEL.getStatus());
//流程撤销监听
flowProcessEventHandler.processHandler(definition.getFlowCode(),
bo.getBusinessId(), BusinessStatusEnum.CANCEL.getStatus(), false);
} catch (Exception e) {
log.error("撤销失败: {}", e.getMessage(), e);
throw new ServiceException(e.getMessage());
}
return true;
} }
/** /**
@ -148,7 +194,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
* @param pageQuery 分页 * @param pageQuery 分页
*/ */
@Override @Override
public TableDataInfo<FlowInstanceVo> getPageByCurrent(InstanceBo instanceBo, PageQuery pageQuery) { public TableDataInfo<FlowInstanceVo> getPageByCurrent(FlowInstanceBo instanceBo, PageQuery pageQuery) {
LambdaQueryWrapper<FlowInstance> wrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<FlowInstance> wrapper = Wrappers.lambdaQuery();
if (StringUtils.isNotBlank(instanceBo.getFlowCode())) { if (StringUtils.isNotBlank(instanceBo.getFlowCode())) {
List<FlowDefinition> flowDefinitions = flowDefinitionMapper.selectList( List<FlowDefinition> flowDefinitions = flowDefinitionMapper.selectList(
@ -192,7 +238,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
LambdaQueryWrapper<FlowHisTask> wrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<FlowHisTask> wrapper = Wrappers.lambdaQuery();
wrapper.eq(FlowHisTask::getInstanceId, flowInstance.getId()); wrapper.eq(FlowHisTask::getInstanceId, flowInstance.getId());
wrapper.eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey()); wrapper.eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey());
wrapper.orderByDesc(FlowHisTask::getCreateTime); wrapper.orderByDesc(FlowHisTask::getCreateTime).orderByDesc(FlowHisTask::getUpdateTime);
List<FlowHisTask> flowHisTasks = flowHisTaskMapper.selectList(wrapper); List<FlowHisTask> flowHisTasks = flowHisTaskMapper.selectList(wrapper);
List<FlowHisTaskVo> list = BeanUtil.copyToList(flowHisTasks, FlowHisTaskVo.class); List<FlowHisTaskVo> list = BeanUtil.copyToList(flowHisTasks, FlowHisTaskVo.class);
for (FlowHisTaskVo vo : list) { for (FlowHisTaskVo vo : list) {

View File

@ -225,12 +225,15 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
long taskId = identifierGenerator.nextId(null).longValue(); long taskId = identifierGenerator.nextId(null).longValue();
task.setId(taskId); task.setId(taskId);
task.setNodeName("【抄送】" + task.getNodeName()); task.setNodeName("【抄送】" + task.getNodeName());
Date updateTime = new Date(flowHisTask.getUpdateTime().getTime()-1000);
FlowParams flowParams = FlowParams.build(); FlowParams flowParams = FlowParams.build();
flowParams.skipType(SkipType.NONE.getKey()); flowParams.skipType(SkipType.NONE.getKey());
flowParams.hisStatus(TaskStatusEnum.PASS.getStatus()); flowParams.hisStatus(TaskStatusEnum.COPY.getStatus());
flowParams.handler(LoginHelper.getUserIdStr()); flowParams.handler(LoginHelper.getUserIdStr());
flowParams.message("【抄送给】" + StreamUtils.join(wfCopyList, WfCopy::getUserName)); flowParams.message("【抄送给】" + StreamUtils.join(wfCopyList, WfCopy::getUserName));
HisTask hisTask = hisTaskService.setSkipHisTask(task, flowNode, flowParams); HisTask hisTask = hisTaskService.setSkipHisTask(task, flowNode, flowParams);
hisTask.setCreateTime(updateTime);
hisTask.setUpdateTime(updateTime);
hisTaskService.save(hisTask); hisTaskService.save(hisTask);
//保存抄送人员 //保存抄送人员
List<User> userList = new ArrayList<>(); List<User> userList = new ArrayList<>();
@ -399,7 +402,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
*/ */
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean terminationTask(TerminationBo bo) { public boolean terminationTask(FlowTerminationBo bo) {
try { try {
FlowTask flowTask = flowTaskMapper.selectById(bo.getTaskId()); FlowTask flowTask = flowTaskMapper.selectById(bo.getTaskId());
Instance ins = insService.getById(flowTask.getInstanceId()); Instance ins = insService.getById(flowTask.getInstanceId());

View File

@ -93,7 +93,8 @@
a.target_node_name, a.target_node_name,
a.definition_id, a.definition_id,
a.instance_id, a.instance_id,
a.flow_status, a.flow_status flow_task_status,
b.flow_status,
a.message, a.message,
a.ext, a.ext,
a.create_time, a.create_time,