mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-09-29 22:56:40 +08:00
add 添加流程定义删除,流程定义挂起激活,流程定义版本迁移
This commit is contained in:
parent
69ea22527b
commit
671d072d2c
@ -5,16 +5,15 @@ import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.workflow.domain.bo.ProcessDefinitionBo;
|
||||
import org.dromara.workflow.domain.vo.ProcessDefinitionVo;
|
||||
import org.dromara.workflow.service.IActProcessDefinitionService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ -77,4 +76,40 @@ public class ActProcessDefinitionController extends BaseController {
|
||||
map.put("xmlStr", xmlStr);
|
||||
return R.ok(map);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除流程定义
|
||||
*
|
||||
* @param deploymentId 部署id
|
||||
* @param processDefinitionId 流程定义id
|
||||
*/
|
||||
@Log(title = "流程定义管理", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{deploymentId}/{processDefinitionId}")
|
||||
public R<Void> deleteDeployment(@NotBlank(message = "流程部署id不能为空") @PathVariable String deploymentId,
|
||||
@NotBlank(message = "流程定义id不能为空") @PathVariable String processDefinitionId) {
|
||||
return toAjax(iActProcessDefinitionService.deleteDeployment(deploymentId, processDefinitionId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 激活或者挂起流程定义
|
||||
*
|
||||
* @param processDefinitionId 流程定义id
|
||||
*/
|
||||
@Log(title = "流程定义管理", businessType = BusinessType.UPDATE)
|
||||
@PutMapping("/updateProcessDefState/{processDefinitionId}")
|
||||
public R<Void> updateProcDefState(@PathVariable String processDefinitionId) {
|
||||
return toAjax(iActProcessDefinitionService.updateProcessDefState(processDefinitionId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 迁移流程定义
|
||||
*
|
||||
* @param currentProcessDefinitionId 当前流程定义id
|
||||
* @param fromProcessDefinitionId 需要迁移到的流程定义id
|
||||
*/
|
||||
@Log(title = "流程定义管理", businessType = BusinessType.UPDATE)
|
||||
@PutMapping("/migrationProcessDefinition/{currentProcessDefinitionId}/{fromProcessDefinitionId}")
|
||||
public R<Void> migrationProcessDefinition(@PathVariable String currentProcessDefinitionId, @PathVariable String fromProcessDefinitionId) {
|
||||
return toAjax(iActProcessDefinitionService.migrationProcessDefinition(currentProcessDefinitionId, fromProcessDefinitionId));
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,6 @@ import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.workflow.domain.bo.ProcessDefinitionBo;
|
||||
import org.dromara.workflow.domain.vo.ProcessDefinitionVo;
|
||||
import org.flowable.engine.repository.ProcessDefinition;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -45,4 +44,30 @@ public interface IActProcessDefinitionService {
|
||||
* @return 结果
|
||||
*/
|
||||
String processDefinitionXml(String processDefinitionId);
|
||||
|
||||
/**
|
||||
* 删除流程定义
|
||||
*
|
||||
* @param deploymentId 部署id
|
||||
* @param processDefinitionId 流程定义id
|
||||
* @return 结果
|
||||
*/
|
||||
boolean deleteDeployment(String deploymentId, String processDefinitionId);
|
||||
|
||||
/**
|
||||
* 激活或者挂起流程定义
|
||||
*
|
||||
* @param processDefinitionId 流程定义id
|
||||
* @return 结果
|
||||
*/
|
||||
boolean updateProcessDefState(String processDefinitionId);
|
||||
|
||||
/**
|
||||
* 迁移流程定义
|
||||
*
|
||||
* @param currentProcessDefinitionId 当前流程定义id
|
||||
* @param fromProcessDefinitionId 需要迁移到的流程定义id
|
||||
* @return 结果
|
||||
*/
|
||||
boolean migrationProcessDefinition(String currentProcessDefinitionId, String fromProcessDefinitionId);
|
||||
}
|
||||
|
@ -7,16 +7,20 @@ import jakarta.servlet.ServletOutputStream;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.workflow.domain.bo.ProcessDefinitionBo;
|
||||
import org.dromara.workflow.domain.vo.ProcessDefinitionVo;
|
||||
import org.dromara.workflow.service.IActProcessDefinitionService;
|
||||
import org.flowable.engine.HistoryService;
|
||||
import org.flowable.engine.ProcessMigrationService;
|
||||
import org.flowable.engine.RepositoryService;
|
||||
import org.flowable.engine.repository.Deployment;
|
||||
import org.flowable.engine.repository.ProcessDefinition;
|
||||
import org.flowable.engine.repository.ProcessDefinitionQuery;
|
||||
import org.flowable.task.api.history.HistoricTaskInstance;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -37,6 +41,10 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
|
||||
|
||||
private final RepositoryService repositoryService;
|
||||
|
||||
private final HistoryService historyService;
|
||||
|
||||
private final ProcessMigrationService processMigrationService;
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*
|
||||
@ -163,4 +171,79 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
|
||||
}
|
||||
return xml.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除流程定义
|
||||
*
|
||||
* @param deploymentId 部署id
|
||||
* @param processDefinitionId 流程定义id
|
||||
*/
|
||||
@Override
|
||||
public boolean deleteDeployment(String deploymentId, String processDefinitionId) {
|
||||
try {
|
||||
List<HistoricTaskInstance> taskInstanceList = historyService.createHistoricTaskInstanceQuery().processDefinitionId(processDefinitionId).list();
|
||||
if (CollectionUtil.isNotEmpty(taskInstanceList)) {
|
||||
throw new ServiceException("当前流程定义已被使用不可删除!");
|
||||
}
|
||||
//删除流程定义
|
||||
repositoryService.deleteDeployment(deploymentId);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 激活或者挂起流程定义
|
||||
*
|
||||
* @param processDefinitionId 流程定义id
|
||||
*/
|
||||
@Override
|
||||
public boolean updateProcessDefState(String processDefinitionId) {
|
||||
try {
|
||||
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
|
||||
.processDefinitionId(processDefinitionId).singleResult();
|
||||
//将当前为挂起状态更新为激活状态
|
||||
//参数说明:参数1:流程定义id,参数2:是否激活(true是否级联对应流程实例,激活了则对应流程实例都可以审批),
|
||||
//参数3:什么时候激活,如果为null则立即激活,如果为具体时间则到达此时间后激活
|
||||
if (processDefinition.isSuspended()) {
|
||||
repositoryService.activateProcessDefinitionById(processDefinitionId, true, null);
|
||||
} else {
|
||||
repositoryService.suspendProcessDefinitionById(processDefinitionId, true, null);
|
||||
}
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new ServiceException("操作失败");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 迁移流程定义
|
||||
*
|
||||
* @param currentProcessDefinitionId 当前流程定义id
|
||||
* @param fromProcessDefinitionId 需要迁移到的流程定义id
|
||||
*/
|
||||
|
||||
@Override
|
||||
public boolean migrationProcessDefinition(String currentProcessDefinitionId, String fromProcessDefinitionId) {
|
||||
try {
|
||||
// 迁移验证
|
||||
boolean migrationValid = processMigrationService.createProcessInstanceMigrationBuilder()
|
||||
.migrateToProcessDefinition(currentProcessDefinitionId)
|
||||
.validateMigrationOfProcessInstances(fromProcessDefinitionId)
|
||||
.isMigrationValid();
|
||||
if (!migrationValid) {
|
||||
throw new ServiceException("流程定义差异过大无法迁移,请修改流程图");
|
||||
}
|
||||
// 已结束的流程实例不会迁移
|
||||
processMigrationService.createProcessInstanceMigrationBuilder()
|
||||
.migrateToProcessDefinition(currentProcessDefinitionId)
|
||||
.migrateProcessInstances(fromProcessDefinitionId);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user