update 调整流程状态,移除过时方法,调整查询办理人

This commit is contained in:
gssong 2024-11-16 01:23:15 +08:00
parent 37b1c4fc79
commit 07b9f91e7e
9 changed files with 53 additions and 194 deletions

View File

@ -22,9 +22,9 @@ public interface AssigneeService {
/**
* 通过taskId查询对应的任务办理人列表
*
* @param taskIds taskId串逗号分隔
* @param taskIdList 任务id
* @return 列表
*/
List<UserDTO> selectByIds(String taskIds);
List<UserDTO> selectByIds(List<Long> taskIdList);
}

View File

@ -19,7 +19,9 @@ public class TaskAssigneeTranslationImpl implements TranslationInterface<String>
@Override
public String translation(Object key, String other) {
if (key instanceof String id) {
if (key instanceof Long id) {
return assigneeService.selectAssigneeByIds(id.toString());
} else if (key instanceof String id) {
return assigneeService.selectAssigneeByIds(id);
}
return null;

View File

@ -4,3 +4,4 @@ org.dromara.common.translation.core.impl.DictTypeTranslationImpl
org.dromara.common.translation.core.impl.OssUrlTranslationImpl
org.dromara.common.translation.core.impl.UserNameTranslationImpl
org.dromara.common.translation.core.impl.NicknameTranslationImpl
org.dromara.common.translation.core.impl.TaskAssigneeTranslationImpl

View File

@ -1,131 +0,0 @@
package org.dromara.workflow.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.dromara.warm.flow.core.utils.ObjectUtil;
/**
* 工作流状态
*
* @author AprilWind
*/
@Getter
@AllArgsConstructor
public enum WorkflowStatus {
/**
* 待提交状态
* 流程还未提交处于待提交状态
*/
TOBESUBMIT("0", "待提交", "submitted"),
/**
* 审批中状态
* 流程正在审批过程中处于审批中状态
*/
APPROVAL("1", "审批中", "approving"),
/**
* 审批通过状态
* 流程已通过审批处于审批通过状态
*/
PASS("2", "审批通过", "passed"),
/**
* 自动完成状态
* 流程已自动完成通常不需要人工干预
*/
AUTO_PASS("3", "自动完成", "auto"),
/**
* 终止状态
* 流程已终止不能继续执行
*/
TERMINATE("4", "终止", "terminated"),
/**
* 作废状态
* 流程被作废已不再有效
*/
NULLIFY("5", "作废", "nullified"),
/**
* 撤销状态
* 流程已被撤销撤销后流程无法继续
*/
CANCEL("6", "撤销", "cancelled"),
/**
* 取回状态
* 流程被取回通常是审批被暂停重新操作后可继续
*/
RETRIEVE("7", "取回", "retrieved"),
/**
* 已完成状态
* 流程已全部完成且所有操作已结束
*/
FINISHED("8", "已完成", "done"),
/**
* 已退回状态
* 流程被退回通常是审批不通过或者需要重新处理
*/
REJECT("9", "已退回", "rejected"),
/**
* 失效状态
* 流程已失效不再有效不能继续执行
*/
INVALID("10", "失效", "invalid");
/**
* 唯一标识符
*/
private final String key;
/**
* 中文描述
*/
private final String value;
/**
* 状态
*/
private final String status;
public static WorkflowStatus getByKey(String key) {
for (WorkflowStatus workflowStatus : WorkflowStatus.values()) {
if (workflowStatus.getKey().equals(key)) {
return workflowStatus;
}
}
return null;
}
public static WorkflowStatus getByValue(String value) {
for (WorkflowStatus workflowStatus : WorkflowStatus.values()) {
if (workflowStatus.getValue().equals(value)) {
return workflowStatus;
}
}
return null;
}
public static WorkflowStatus getByStatus(String status) {
for (WorkflowStatus workflowStatus : WorkflowStatus.values()) {
if (workflowStatus.getStatus().equals(status)) {
return workflowStatus;
}
}
return null;
}
public static Boolean isFinished(String key) {
return ObjectUtil.isNotNull(key) && (WorkflowStatus.FINISHED.getKey().equals(key));
}
public static Boolean isFinished(WorkflowStatus workflowStatus) {
return ObjectUtil.isNotNull(workflowStatus) && (WorkflowStatus.FINISHED == workflowStatus);
}
}

View File

@ -12,6 +12,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController;
import org.dromara.warm.flow.core.dto.FlowParams;
import org.dromara.warm.flow.core.dto.ModifyHandler;
import org.dromara.warm.flow.core.entity.HisTask;
import org.dromara.warm.flow.core.entity.Instance;
@ -168,12 +169,12 @@ public class FlwTaskController extends BaseController {
@RepeatSubmit()
@PostMapping("/delegateTask")
public R<Void> delegateTask(@Validated({AddGroup.class}) @RequestBody DelegateBo bo) {
return toAjax(taskService.depute(
bo.getTaskId(),
LoginHelper.getUserIdStr(),
WorkflowUtils.permissionList(),
Collections.singletonList(bo.getUserId()),
bo.getMessage()));
FlowParams flowParams = new FlowParams();
flowParams.addHandlers(Collections.singletonList(bo.getUserId()));
flowParams.handler(LoginHelper.getUserIdStr());
flowParams.permissionFlag(WorkflowUtils.permissionList());
flowParams.message(bo.getMessage());
return toAjax(taskService.depute(bo.getTaskId(), flowParams));
}
/**
@ -185,12 +186,12 @@ public class FlwTaskController extends BaseController {
@RepeatSubmit()
@PostMapping("/transferTask")
public R<Void> transferTask(@Validated({AddGroup.class}) @RequestBody TransferBo bo) {
return toAjax(taskService.transfer(
bo.getTaskId(),
LoginHelper.getUserIdStr(),
WorkflowUtils.permissionList(),
Collections.singletonList(bo.getUserId()),
bo.getMessage()));
FlowParams flowParams = new FlowParams();
flowParams.addHandlers(Collections.singletonList(bo.getUserId()));
flowParams.handler(LoginHelper.getUserIdStr());
flowParams.permissionFlag(WorkflowUtils.permissionList());
flowParams.message(bo.getMessage());
return toAjax(taskService.transfer(bo.getTaskId(), flowParams));
}
/**
@ -202,12 +203,12 @@ public class FlwTaskController extends BaseController {
@RepeatSubmit()
@PostMapping("/addSignature")
public R<Void> addSignature(@Validated({AddGroup.class}) @RequestBody AddSignatureBo bo) {
return toAjax(taskService.addSignature(
bo.getTaskId(),
LoginHelper.getUserIdStr(),
WorkflowUtils.permissionList(),
bo.getUserIds(),
bo.getMessage()));
FlowParams flowParams = new FlowParams();
flowParams.addHandlers(bo.getUserIds());
flowParams.handler(LoginHelper.getUserIdStr());
flowParams.permissionFlag(WorkflowUtils.permissionList());
flowParams.message(bo.getMessage());
return toAjax(taskService.addSignature(bo.getTaskId(), flowParams));
}
/**
@ -219,12 +220,12 @@ public class FlwTaskController extends BaseController {
@RepeatSubmit()
@PostMapping("/reductionSignature")
public R<Void> reductionSignature(@Validated({AddGroup.class}) @RequestBody ReductionSignatureBo bo) {
return toAjax(taskService.reductionSignature(
bo.getTaskId(),
LoginHelper.getUserIdStr(),
WorkflowUtils.permissionList(),
bo.getUserIds(),
bo.getMessage()));
FlowParams flowParams = new FlowParams();
flowParams.reductionHandlers(bo.getUserIds());
flowParams.handler(LoginHelper.getUserIdStr());
flowParams.permissionFlag(WorkflowUtils.permissionList());
flowParams.message(bo.getMessage());
return toAjax(taskService.reductionSignature(bo.getTaskId(), flowParams));
}
/**
@ -237,15 +238,12 @@ public class FlwTaskController extends BaseController {
@RepeatSubmit()
@PutMapping("/updateAssignee/{taskId}/{userId}")
public R<Void> updateAssignee(@PathVariable Long taskId, @PathVariable String userId) {
ModifyHandler modifyHandler = new ModifyHandler()
.setTaskId(taskId)
.setAddHandlers(Collections.singletonList(userId))
.setPermissionFlag(WorkflowUtils.permissionList())
.setCooperateType(CooperateType.APPROVAL.getKey())
.setMessage("修改任务办理人")
.setCurUser(LoginHelper.getUserIdStr())
.setIgnore(false);
return toAjax(taskService.updateHandler(modifyHandler));
FlowParams flowParams = new FlowParams();
flowParams.addHandlers(Collections.singletonList(userId));
flowParams.cooperateType(CooperateType.APPROVAL.getKey());
flowParams.ignore(false);
flowParams.message("修改任务办理人");
return toAjax(taskService.updateHandler(taskId, flowParams));
}
/**

View File

@ -3,12 +3,13 @@ package org.dromara.workflow.listener;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.event.ProcessEvent;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.warm.flow.core.entity.Definition;
import org.dromara.warm.flow.core.entity.Instance;
import org.dromara.warm.flow.core.enums.FlowStatus;
import org.dromara.warm.flow.core.listener.Listener;
import org.dromara.warm.flow.core.listener.ListenerVariable;
import org.dromara.workflow.common.enums.WorkflowStatus;
import org.dromara.workflow.service.IFlwInstanceService;
import org.springframework.stereotype.Component;
@ -45,15 +46,14 @@ public class WorkflowFinishListener implements Listener {
public void notify(ListenerVariable listenerVariable) {
log.info("流程结束监听器");
Instance instance = listenerVariable.getInstance();
WorkflowStatus status = WorkflowStatus.getByKey(instance.getFlowStatus());
Definition definition = listenerVariable.getDefinition();
ProcessEvent processEvent = new ProcessEvent();
//检查流程是否已结束
if (WorkflowStatus.isFinished(status)) {
if (FlowStatus.isFinished(instance.getFlowStatus())) {
// 若流程已结束更新状态为已完成
iFlwInstanceService.updateStatus(instance.getId(), status.getStatus());
iFlwInstanceService.updateStatus(instance.getId(), BusinessStatusEnum.FINISH.getStatus());
// 流程结束监听处理结束后的业务逻辑
processEvent.setStatus(status.getStatus());
processEvent.setStatus(BusinessStatusEnum.FINISH.getStatus());
processEvent.setSubmit(false);
processEvent.setFlowCode(definition.getFlowCode());
processEvent.setBusinessKey(instance.getBusinessId());

View File

@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
@ -68,7 +69,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
@Override
public TableDataInfo<FlowInstanceVo> getPageByRunning(Instance instance, PageQuery pageQuery) {
QueryWrapper<FlowInstanceBo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("t.flow_status", FlowStatus.APPROVAL.getKey());
queryWrapper.eq("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
queryWrapper.eq("t.del_flag", SystemConstants.NORMAL);
Page<FlowInstanceVo> page = flwInstanceMapper.page(pageQuery.build(), queryWrapper);
TableDataInfo<FlowInstanceVo> build = TableDataInfo.build();
@ -86,7 +87,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
@Override
public TableDataInfo<FlowInstanceVo> getPageByFinish(Instance instance, PageQuery pageQuery) {
QueryWrapper<FlowInstanceBo> queryWrapper = new QueryWrapper<>();
queryWrapper.in("t.flow_status", Arrays.asList(FlowStatus.FINISHED.getKey(), FlowStatus.AUTO_PASS.getKey()));
queryWrapper.eq("t.flow_status", BusinessStatusEnum.FINISH.getStatus());
Page<FlowInstanceVo> page = flwInstanceMapper.page(pageQuery.build(), queryWrapper);
TableDataInfo<FlowInstanceVo> build = TableDataInfo.build();
build.setRows(BeanUtil.copyToList(page.getRecords(), FlowInstanceVo.class));

View File

@ -18,7 +18,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.warm.flow.core.dto.FlowParams;
import org.dromara.warm.flow.core.entity.*;
import org.dromara.warm.flow.core.enums.FlowStatus;
import org.dromara.warm.flow.core.enums.NodeType;
import org.dromara.warm.flow.core.enums.SkipType;
import org.dromara.warm.flow.core.service.DefService;
@ -167,16 +166,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
// 更新实例状态为待审核状态
iFlwInstanceService.updateStatus(ins.getId(), BusinessStatusEnum.WAITING.getStatus());
//判断是否流程结束
Instance instance = insService.getById(ins.getId());
// 重新获取实例信息检查流程是否已结束
if (FlowStatus.isFinished(instance.getFlowStatus())) {
// 若流程已结束更新状态为已完成
iFlwInstanceService.updateStatus(instance.getId(), BusinessStatusEnum.FINISH.getStatus());
// 流程结束监听处理结束后的业务逻辑
flowProcessEventHandler.processHandler(definition.getFlowCode(), instance.getBusinessId(),
BusinessStatusEnum.FINISH.getStatus(), false);
}
return true;
} catch (Exception e) {
log.error(e.getMessage(), e);
@ -257,7 +246,6 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
public TableDataInfo<FlowTaskVo> getPageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
queryWrapper.in("t.processed_by", WorkflowUtils.permissionList());
Page<FlowTaskVo> page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page);
}
@ -321,11 +309,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
FlowParams flowParams = new FlowParams();
flowParams.variable(bo.getVariables());
flowParams.skipType(SkipType.PASS.getKey());
if (nextNodeCode.equals(bo.getNodeCode())) {
flowParams.skipType(SkipType.REJECT.getKey());
flowParams.flowStatus(BusinessStatusEnum.BACK.getStatus());
} else {
flowParams.skipType(SkipType.PASS.getKey());
flowParams.flowStatus(BusinessStatusEnum.WAITING.getStatus());
}
flowParams.hisStatus(TaskStatusEnum.BACK.getStatus());
@ -413,15 +400,15 @@ public class FlwTaskServiceImpl implements IFlwTaskService, AssigneeService {
/**
* 通过taskId查询对应的任务办理人列表
*
* @param taskIds taskId串逗号分隔
* @param taskIdList 任务id
* @return 列表
*/
@Override
public List<UserDTO> selectByIds(String taskIds) {
if (StringUtils.isBlank(taskIds)) {
public List<UserDTO> selectByIds(List<Long> taskIdList) {
if (CollUtil.isEmpty(taskIdList)) {
return Collections.emptyList();
}
List<User> userList = userService.getByAssociateds(List.of(Long.valueOf(taskIds)));
List<User> userList = userService.getByAssociateds(taskIdList);
return WorkflowUtils.getHandlerUser(userList);
}

View File

@ -99,7 +99,8 @@
c.flow_code
from flow_his_task a
LEFT JOIN flow_instance b on a.instance_id = b.id
LEFT JOIN flow_definition c on a.definition_id = c.id
LEFT JOIN flow_definition c on a.definition_id = c.id where
a.del_flag ='0' and b.del_flag = '0' and c.del_flag = '0' and a.node_type not in ('0')
) t ${ew.getCustomSqlSegment}
</select>
@ -119,7 +120,7 @@
LEFT JOIN flow_instance b ON a.associated = b.id
LEFT JOIN flow_definition d on b.definition_id=d.id
WHERE
a.type = 4 and a.del_flag = '0'
a.type = 4 and a.del_flag = '0' and b.del_flag = '0'
) t ${ew.getCustomSqlSegment}
</select>
</mapper>