mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-09-30 07:06:39 +08:00
add 添加业务状态枚举。添加流程启动,审批,终止等状态
This commit is contained in:
parent
2dff183e4f
commit
db64ae65ea
@ -0,0 +1,91 @@
|
||||
package org.dromara.workflow.common.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
|
||||
/**
|
||||
* 业务状态枚举
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum BusinessStatusEnum {
|
||||
/**
|
||||
* 已撤销
|
||||
*/
|
||||
CANCEL("cancel", "已撤销"),
|
||||
/**
|
||||
* 草稿
|
||||
*/
|
||||
DRAFT("draft", "草稿"),
|
||||
/**
|
||||
* 待审核
|
||||
*/
|
||||
WAITING("waiting", "待审核"),
|
||||
/**
|
||||
* 已完成
|
||||
*/
|
||||
FINISH("finish", "已完成"),
|
||||
/**
|
||||
* 已作废
|
||||
*/
|
||||
INVALID("invalid", "已作废"),
|
||||
/**
|
||||
* 已退回
|
||||
*/
|
||||
BACK("back", "已退回"),
|
||||
/**
|
||||
* 已终止
|
||||
*/
|
||||
TERMINATION("termination", "已终止");
|
||||
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private final String status;
|
||||
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
private final String desc;
|
||||
|
||||
/**
|
||||
* 启动流程校验
|
||||
*
|
||||
* @param status 状态
|
||||
*/
|
||||
public static void checkStartStatus(String status) {
|
||||
if (status.equals(WAITING.getStatus())) {
|
||||
throw new ServiceException("该单据已提交过申请,正在审批中!");
|
||||
} else if (status.equals(FINISH.getStatus())) {
|
||||
throw new ServiceException("该单据已完成申请!");
|
||||
} else if (status.equals(INVALID.getStatus())) {
|
||||
throw new ServiceException("该单据已作废!");
|
||||
} else if (status.equals(TERMINATION.getStatus())) {
|
||||
throw new ServiceException("该单据已终止!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验流程申请
|
||||
*
|
||||
* @param status 状态
|
||||
*/
|
||||
public static void checkStatus(String status) {
|
||||
if (status.equals(FINISH.getStatus())) {
|
||||
throw new ServiceException("该单据已完成申请!");
|
||||
} else if (status.equals(INVALID.getStatus())) {
|
||||
throw new ServiceException("该单据已作废!");
|
||||
} else if (status.equals(CANCEL.getStatus())) {
|
||||
throw new ServiceException("该单据已撤销!");
|
||||
} else if (status.equals(BACK.getStatus())) {
|
||||
throw new ServiceException("该单据已退回!");
|
||||
} else if (status.equals(TERMINATION.getStatus())) {
|
||||
throw new ServiceException("该单据已终止!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
@ -78,7 +79,7 @@ public class ActProcessInstanceController extends BaseController {
|
||||
*/
|
||||
@Log(title = "流程实例管理", businessType = BusinessType.DELETE)
|
||||
@PostMapping("/deleteRuntimeProcessInst")
|
||||
public R<Void> deleteRuntimeProcessInst(@RequestBody ProcessInvalidBo processInvalidBo) {
|
||||
public R<Void> deleteRuntimeProcessInst(@Validated(AddGroup.class) @RequestBody ProcessInvalidBo processInvalidBo) {
|
||||
return toAjax(iActProcessInstanceService.deleteRuntimeProcessInst(processInvalidBo));
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
package org.dromara.workflow.domain.bo;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Data;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
@ -19,7 +21,8 @@ public class ProcessInvalidBo implements Serializable {
|
||||
/**
|
||||
* 流程实例id
|
||||
*/
|
||||
private String processInstId;
|
||||
@NotBlank(message = "流程实例id不能为空", groups = {AddGroup.class})
|
||||
private String processInstanceId;
|
||||
|
||||
/**
|
||||
* 作废原因
|
||||
|
@ -0,0 +1,37 @@
|
||||
package org.dromara.workflow.flowable.cmd;
|
||||
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.flowable.common.engine.impl.interceptor.Command;
|
||||
import org.flowable.common.engine.impl.interceptor.CommandContext;
|
||||
import org.flowable.engine.impl.persistence.entity.HistoricProcessInstanceEntity;
|
||||
import org.flowable.engine.impl.persistence.entity.HistoricProcessInstanceEntityManager;
|
||||
import org.flowable.engine.impl.util.CommandContextUtil;
|
||||
|
||||
/**
|
||||
* 修改流程状态
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
public class UpdateBusinessStatusCmd implements Command<Boolean> {
|
||||
|
||||
private final String processInstanceId;
|
||||
private final String status;
|
||||
|
||||
public UpdateBusinessStatusCmd(String processInstanceId, String status) {
|
||||
this.processInstanceId = processInstanceId;
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean execute(CommandContext commandContext) {
|
||||
try {
|
||||
HistoricProcessInstanceEntityManager manager = CommandContextUtil.getHistoricProcessInstanceEntityManager();
|
||||
HistoricProcessInstanceEntity processInstance = manager.findById(processInstanceId);
|
||||
processInstance.setBusinessStatus(status);
|
||||
manager.update(processInstance);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
@ -16,6 +16,7 @@ import org.dromara.common.tenant.helper.TenantHelper;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
import org.dromara.system.service.ISysUserService;
|
||||
import org.dromara.workflow.common.constant.FlowConstant;
|
||||
import org.dromara.workflow.common.enums.BusinessStatusEnum;
|
||||
import org.dromara.workflow.domain.bo.ProcessInstanceBo;
|
||||
import org.dromara.workflow.domain.bo.ProcessInvalidBo;
|
||||
import org.dromara.workflow.domain.vo.ActHistoryInfoVo;
|
||||
@ -326,20 +327,24 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
||||
*/
|
||||
@Override
|
||||
public boolean deleteRuntimeProcessInst(ProcessInvalidBo processInvalidBo) {
|
||||
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
|
||||
.processInstanceId(processInvalidBo.getProcessInstId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
|
||||
try {
|
||||
List<Task> list = taskService.createTaskQuery().processInstanceId(processInvalidBo.getProcessInstId())
|
||||
List<Task> list = taskService.createTaskQuery().processInstanceId(processInvalidBo.getProcessInstanceId())
|
||||
.taskTenantId(TenantHelper.getTenantId()).list();
|
||||
List<Task> subTasks = list.stream().filter(e -> StringUtils.isNotBlank(e.getParentTaskId())).collect(Collectors.toList());
|
||||
List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
|
||||
if (CollUtil.isNotEmpty(subTasks)) {
|
||||
subTasks.forEach(e -> taskService.deleteTask(e.getId()));
|
||||
}
|
||||
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceBusinessKey(processInvalidBo.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
|
||||
if (ObjectUtil.isNotEmpty(historicProcessInstance)) {
|
||||
BusinessStatusEnum.checkStatus(historicProcessInstance.getBusinessStatus());
|
||||
}
|
||||
String deleteReason = LoginHelper.getUsername() + "作废了当前申请!";
|
||||
if (StringUtils.isNotBlank(processInvalidBo.getDeleteReason())) {
|
||||
deleteReason = LoginHelper.getUsername() + "作废理由:" + processInvalidBo.getDeleteReason();
|
||||
}
|
||||
runtimeService.deleteProcessInstance(processInvalidBo.getProcessInstId(), deleteReason);
|
||||
runtimeService.updateBusinessStatus(processInvalidBo.getProcessInstanceId(), BusinessStatusEnum.INVALID.getStatus());
|
||||
runtimeService.deleteProcessInstance(processInvalidBo.getProcessInstanceId(), deleteReason);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
@ -351,7 +356,6 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
||||
* 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息
|
||||
*
|
||||
* @param processInstanceId 流程实例id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean deleteRuntimeProcessAndHisInst(String processInstanceId) {
|
||||
|
@ -14,15 +14,14 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.common.tenant.helper.TenantHelper;
|
||||
import org.dromara.workflow.common.constant.FlowConstant;
|
||||
import org.dromara.workflow.common.enums.BusinessStatusEnum;
|
||||
import org.dromara.workflow.domain.bo.*;
|
||||
import org.dromara.workflow.domain.vo.TaskVo;
|
||||
import org.dromara.workflow.flowable.cmd.UpdateBusinessStatusCmd;
|
||||
import org.dromara.workflow.service.IActTaskService;
|
||||
import org.dromara.workflow.utils.WorkflowUtils;
|
||||
import org.flowable.common.engine.impl.identity.Authentication;
|
||||
import org.flowable.engine.HistoryService;
|
||||
import org.flowable.engine.IdentityService;
|
||||
import org.flowable.engine.RuntimeService;
|
||||
import org.flowable.engine.TaskService;
|
||||
import org.flowable.engine.*;
|
||||
import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.task.api.Task;
|
||||
@ -51,6 +50,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
private final TaskService taskService;
|
||||
private final HistoryService historyService;
|
||||
private final IdentityService identityService;
|
||||
private final ManagementService managementService;
|
||||
|
||||
/**
|
||||
* 启动任务
|
||||
@ -65,11 +65,14 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
throw new ServiceException("启动工作流时必须包含业务ID");
|
||||
}
|
||||
// 判断当前业务是否启动过流程
|
||||
List<HistoricProcessInstance> instanceList = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceBusinessKey(startProcessBo.getBusinessKey()).processInstanceTenantIdLike(TenantHelper.getTenantId()).list();
|
||||
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceBusinessKey(startProcessBo.getBusinessKey()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
|
||||
if (ObjectUtil.isNotEmpty(historicProcessInstance)) {
|
||||
BusinessStatusEnum.checkStartStatus(historicProcessInstance.getBusinessStatus());
|
||||
}
|
||||
TaskQuery taskQuery = taskService.createTaskQuery();
|
||||
List<Task> taskResult = taskQuery.processInstanceBusinessKey(startProcessBo.getBusinessKey()).taskTenantId(TenantHelper.getTenantId()).list();
|
||||
if (CollUtil.isNotEmpty(instanceList)) {
|
||||
if (CollUtil.isNotEmpty(taskResult)) {
|
||||
map.put("processInstanceId", taskResult.get(0).getProcessInstanceId());
|
||||
map.put("taskId", taskResult.get(0).getId());
|
||||
return map;
|
||||
@ -89,6 +92,8 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
if (taskList.size() > 1) {
|
||||
throw new ServiceException("请检查流程第一个环节是否为申请人!");
|
||||
}
|
||||
|
||||
runtimeService.updateBusinessStatus(pi.getProcessInstanceId(), BusinessStatusEnum.DRAFT.getStatus());
|
||||
taskService.setAssignee(taskList.get(0).getId(), LoginHelper.getUserId().toString());
|
||||
taskService.setVariable(taskList.get(0).getId(), "processInstanceId", pi.getProcessInstanceId());
|
||||
map.put("processInstanceId", pi.getProcessInstanceId());
|
||||
@ -126,10 +131,16 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
taskService.complete(newTask.getId());
|
||||
return true;
|
||||
}
|
||||
runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.WAITING.getStatus());
|
||||
//办理意见
|
||||
taskService.addComment(completeTaskBo.getTaskId(), task.getProcessInstanceId(), StringUtils.isBlank(completeTaskBo.getMessage()) ? "同意" : completeTaskBo.getMessage());
|
||||
//办理任务
|
||||
taskService.complete(completeTaskBo.getTaskId(), completeTaskBo.getVariables());
|
||||
List<Task> list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list();
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus());
|
||||
managementService.executeCommand(updateBusinessStatusCmd);
|
||||
}
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
@ -233,6 +244,11 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
if (task.isSuspended()) {
|
||||
throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED);
|
||||
}
|
||||
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceBusinessKey(task.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
|
||||
if (ObjectUtil.isNotEmpty(historicProcessInstance)) {
|
||||
BusinessStatusEnum.checkStatus(historicProcessInstance.getBusinessStatus());
|
||||
}
|
||||
try {
|
||||
if (StringUtils.isBlank(terminationBo.getComment())) {
|
||||
terminationBo.setComment(LoginHelper.getUsername() + "终止了申请");
|
||||
@ -249,6 +265,7 @@ public class ActTaskServiceImpl implements IActTaskService {
|
||||
}
|
||||
runtimeService.deleteProcessInstance(task.getProcessInstanceId(), StrUtil.EMPTY);
|
||||
}
|
||||
runtimeService.updateBusinessStatus(task.getProcessInstanceId(), BusinessStatusEnum.TERMINATION.getStatus());
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
|
Loading…
Reference in New Issue
Block a user