add 添加流程定义删除,流程定义挂起激活,流程定义版本迁移

This commit is contained in:
songgaoshuai 2023-06-05 16:42:18 +08:00
parent 69ea22527b
commit 671d072d2c
3 changed files with 148 additions and 5 deletions

View File

@ -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));
}
}

View File

@ -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);
}

View File

@ -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());
}
}
}