update 调整流程状态,移除过时方法,调整查询办理人
This commit is contained in:
parent
37b1c4fc79
commit
07b9f91e7e
@ -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);
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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());
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user