update 优化 支持工作流关闭租户

This commit is contained in:
疯狂的狮子Li 2024-03-06 19:07:23 +08:00
parent acb6aeffd1
commit 234d8989d7
6 changed files with 274 additions and 84 deletions

View File

@ -24,10 +24,7 @@ import org.dromara.workflow.service.IActModelService;
import org.dromara.workflow.utils.ModelUtils; import org.dromara.workflow.utils.ModelUtils;
import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.BpmnModel;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
import org.flowable.engine.repository.Deployment; import org.flowable.engine.repository.*;
import org.flowable.engine.repository.Model;
import org.flowable.engine.repository.ModelQuery;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.validation.ValidationError; import org.flowable.validation.ValidationError;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -63,7 +60,9 @@ public class ActModelServiceImpl implements IActModelService {
@Override @Override
public TableDataInfo<Model> page(ModelBo modelBo) { public TableDataInfo<Model> page(ModelBo modelBo) {
ModelQuery query = repositoryService.createModelQuery(); ModelQuery query = repositoryService.createModelQuery();
query.modelTenantId(TenantHelper.getTenantId()); if (TenantHelper.isEnable()) {
query.modelTenantId(TenantHelper.getTenantId());
}
if (StringUtils.isNotEmpty(modelBo.getName())) { if (StringUtils.isNotEmpty(modelBo.getName())) {
query.modelNameLike("%" + modelBo.getName() + "%"); query.modelNameLike("%" + modelBo.getName() + "%");
} }
@ -99,7 +98,12 @@ public class ActModelServiceImpl implements IActModelService {
String description = modelBo.getDescription(); String description = modelBo.getDescription();
String categoryCode = modelBo.getCategoryCode(); String categoryCode = modelBo.getCategoryCode();
String xml = modelBo.getXml(); String xml = modelBo.getXml();
Model checkModel = repositoryService.createModelQuery().modelKey(key).modelTenantId(TenantHelper.getTenantId()).singleResult(); ModelQuery query = repositoryService.createModelQuery();
query.modelKey(key);
if (TenantHelper.isEnable()) {
query.modelTenantId(TenantHelper.getTenantId());
}
Model checkModel = query.singleResult();
if (ObjectUtil.isNotNull(checkModel)) { if (ObjectUtil.isNotNull(checkModel)) {
throw new ServiceException("模型key已存在"); throw new ServiceException("模型key已存在");
} }
@ -110,7 +114,9 @@ public class ActModelServiceImpl implements IActModelService {
model.setVersion(version); model.setVersion(version);
model.setCategory(categoryCode); model.setCategory(categoryCode);
model.setMetaInfo(description); model.setMetaInfo(description);
model.setTenantId(TenantHelper.getTenantId()); if (TenantHelper.isEnable()) {
model.setTenantId(TenantHelper.getTenantId());
}
//保存初始化的模型基本信息数据 //保存初始化的模型基本信息数据
repositoryService.saveModel(model); repositoryService.saveModel(model);
repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(xml)); repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(xml));
@ -158,7 +164,11 @@ public class ActModelServiceImpl implements IActModelService {
public boolean update(ModelBo modelBo) { public boolean update(ModelBo modelBo) {
try { try {
Model model = repositoryService.getModel(modelBo.getId()); Model model = repositoryService.getModel(modelBo.getId());
List<Model> list = repositoryService.createModelQuery().modelTenantId(TenantHelper.getTenantId()).modelKey(modelBo.getKey()).list(); ModelQuery query = repositoryService.createModelQuery();
if (TenantHelper.isEnable()) {
query.modelTenantId(TenantHelper.getTenantId());
}
List<Model> list = query.modelKey(modelBo.getKey()).list();
list.stream().filter(e -> !e.getId().equals(model.getId())).findFirst().ifPresent(e -> { list.stream().filter(e -> !e.getId().equals(model.getId())).findFirst().ifPresent(e -> {
throw new ServiceException("模型KEY已存在"); throw new ServiceException("模型KEY已存在");
}); });
@ -189,7 +199,11 @@ public class ActModelServiceImpl implements IActModelService {
BpmnModel bpmnModel = ModelUtils.xmlToBpmnModel(xml); BpmnModel bpmnModel = ModelUtils.xmlToBpmnModel(xml);
ModelUtils.checkBpmnModel(bpmnModel); ModelUtils.checkBpmnModel(bpmnModel);
Model model = repositoryService.getModel(modelId); Model model = repositoryService.getModel(modelId);
List<Model> list = repositoryService.createModelQuery().modelTenantId(TenantHelper.getTenantId()).modelKey(key).list(); ModelQuery query = repositoryService.createModelQuery();
if (TenantHelper.isEnable()) {
query.modelTenantId(TenantHelper.getTenantId());
}
List<Model> list = query.modelKey(key).list();
list.stream().filter(e -> !e.getId().equals(model.getId())).findFirst().ifPresent(e -> { list.stream().filter(e -> !e.getId().equals(model.getId())).findFirst().ifPresent(e -> {
throw new ServiceException("模型KEY已存在"); throw new ServiceException("模型KEY已存在");
}); });
@ -254,7 +268,11 @@ public class ActModelServiceImpl implements IActModelService {
// xml资源的名称 对应act_ge_bytearray表中的name_字段 // xml资源的名称 对应act_ge_bytearray表中的name_字段
String processName = model.getName() + ".bpmn20.xml"; String processName = model.getName() + ".bpmn20.xml";
// 调用部署相关的api方法进行部署流程定义 // 调用部署相关的api方法进行部署流程定义
Deployment deployment = repositoryService.createDeployment() DeploymentBuilder builder = repositoryService.createDeployment();
if (TenantHelper.isEnable()) {
builder.tenantId(TenantHelper.getTenantId());
}
Deployment deployment = builder
// 部署名称 // 部署名称
.name(model.getName()) .name(model.getName())
// 部署标识key // 部署标识key
@ -263,8 +281,6 @@ public class ActModelServiceImpl implements IActModelService {
.category(model.getCategory()) .category(model.getCategory())
// bpmn20.xml资源 // bpmn20.xml资源
.addBytes(processName, xmlBytes) .addBytes(processName, xmlBytes)
// 租户id
.tenantId(TenantHelper.getTenantId())
.deploy(); .deploy();
// 更新 部署id 到流程定义模型数据表中 // 更新 部署id 到流程定义模型数据表中

View File

@ -24,10 +24,7 @@ import org.flowable.engine.HistoryService;
import org.flowable.engine.ProcessMigrationService; import org.flowable.engine.ProcessMigrationService;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
import org.flowable.engine.impl.bpmn.deployer.ResourceNameUtil; import org.flowable.engine.impl.bpmn.deployer.ResourceNameUtil;
import org.flowable.engine.repository.Deployment; import org.flowable.engine.repository.*;
import org.flowable.engine.repository.Model;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.repository.ProcessDefinitionQuery;
import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstance;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -66,7 +63,9 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
@Override @Override
public TableDataInfo<ProcessDefinitionVo> page(ProcessDefinitionBo processDefinitionBo) { public TableDataInfo<ProcessDefinitionVo> page(ProcessDefinitionBo processDefinitionBo) {
ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery(); ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
query.processDefinitionTenantId(TenantHelper.getTenantId()); if (TenantHelper.isEnable()) {
query.processDefinitionTenantId(TenantHelper.getTenantId());
}
if (StringUtils.isNotEmpty(processDefinitionBo.getKey())) { if (StringUtils.isNotEmpty(processDefinitionBo.getKey())) {
query.processDefinitionKey(processDefinitionBo.getKey()); query.processDefinitionKey(processDefinitionBo.getKey());
} }
@ -110,7 +109,10 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
public List<ProcessDefinitionVo> getProcessDefinitionListByKey(String key) { public List<ProcessDefinitionVo> getProcessDefinitionListByKey(String key) {
List<ProcessDefinitionVo> processDefinitionVoList = new ArrayList<>(); List<ProcessDefinitionVo> processDefinitionVoList = new ArrayList<>();
ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery(); ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
List<ProcessDefinition> definitionList = query.processDefinitionTenantId(TenantHelper.getTenantId()).processDefinitionKey(key).list(); if (TenantHelper.isEnable()) {
query.processDefinitionTenantId(TenantHelper.getTenantId());
}
List<ProcessDefinition> definitionList = query.processDefinitionKey(key).list();
List<Deployment> deploymentList = null; List<Deployment> deploymentList = null;
if (CollUtil.isNotEmpty(definitionList)) { if (CollUtil.isNotEmpty(definitionList)) {
List<String> deploymentIds = definitionList.stream().map(ProcessDefinition::getDeploymentId).collect(Collectors.toList()); List<String> deploymentIds = definitionList.stream().map(ProcessDefinition::getDeploymentId).collect(Collectors.toList());
@ -192,8 +194,11 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
@Override @Override
public boolean updateProcessDefState(String processDefinitionId) { public boolean updateProcessDefState(String processDefinitionId) {
try { try {
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
.processDefinitionId(processDefinitionId).processDefinitionTenantId(TenantHelper.getTenantId()).singleResult(); if (TenantHelper.isEnable()) {
query.processDefinitionTenantId(TenantHelper.getTenantId());
}
ProcessDefinition processDefinition = query.processDefinitionId(processDefinitionId).singleResult();
//将当前为挂起状态更新为激活状态 //将当前为挂起状态更新为激活状态
//参数说明参数1流程定义id,参数2是否激活true是否级联对应流程实例激活了则对应流程实例都可以审批 //参数说明参数1流程定义id,参数2是否激活true是否级联对应流程实例激活了则对应流程实例都可以审批
//参数3什么时候激活如果为null则立即激活如果为具体时间则到达此时间后激活 //参数3什么时候激活如果为null则立即激活如果为具体时间则到达此时间后激活
@ -247,7 +252,11 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
.processDefinitionId(processDefinitionId).singleResult(); .processDefinitionId(processDefinitionId).singleResult();
InputStream inputStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), pd.getResourceName()); InputStream inputStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), pd.getResourceName());
Model model = repositoryService.createModelQuery().modelKey(pd.getKey()).modelTenantId(TenantHelper.getTenantId()).singleResult(); ModelQuery query = repositoryService.createModelQuery();
if (TenantHelper.isEnable()) {
query.modelTenantId(TenantHelper.getTenantId());
}
Model model = query.modelKey(pd.getKey()).singleResult();
try { try {
if (ObjectUtil.isNotNull(model)) { if (ObjectUtil.isNotNull(model)) {
repositoryService.addModelEditorSource(model.getId(), IoUtil.readBytes(inputStream)); repositoryService.addModelEditorSource(model.getId(), IoUtil.readBytes(inputStream));
@ -295,9 +304,12 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
InputStream inputStream = file.getInputStream(); InputStream inputStream = file.getInputStream();
Deployment deployment; Deployment deployment;
if (FlowConstant.ZIP.equals(suffix)) { if (FlowConstant.ZIP.equals(suffix)) {
deployment = repositoryService.createDeployment() DeploymentBuilder query = repositoryService.createDeployment();
.tenantId(TenantHelper.getTenantId()) if (TenantHelper.isEnable()) {
.addZipInputStream(new ZipInputStream(inputStream)).name(processName).key(processKey).category(categoryCode).deploy(); query.tenantId(TenantHelper.getTenantId());
}
deployment = query.addZipInputStream(new ZipInputStream(inputStream))
.name(processName).key(processKey).category(categoryCode).deploy();
} else { } else {
String[] list = ResourceNameUtil.BPMN_RESOURCE_SUFFIXES; String[] list = ResourceNameUtil.BPMN_RESOURCE_SUFFIXES;
boolean flag = false; boolean flag = false;
@ -308,9 +320,12 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
} }
} }
if (flag) { if (flag) {
deployment = repositoryService.createDeployment() DeploymentBuilder query = repositoryService.createDeployment();
.tenantId(TenantHelper.getTenantId()) if (TenantHelper.isEnable()) {
.addInputStream(filename, inputStream).name(processName).key(processKey).category(categoryCode).deploy(); query.tenantId(TenantHelper.getTenantId());
}
deployment = query.addInputStream(filename, inputStream)
.name(processName).key(processKey).category(categoryCode).deploy();
} else { } else {
throw new ServiceException("文件类型上传错误!"); throw new ServiceException("文件类型上传错误!");
} }

View File

@ -45,7 +45,9 @@ import org.flowable.engine.runtime.ProcessInstanceQuery;
import org.flowable.engine.task.Attachment; import org.flowable.engine.task.Attachment;
import org.flowable.engine.task.Comment; import org.flowable.engine.task.Comment;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -96,7 +98,9 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
public TableDataInfo<ProcessInstanceVo> getProcessInstanceRunningByPage(ProcessInstanceBo processInstanceBo) { public TableDataInfo<ProcessInstanceVo> getProcessInstanceRunningByPage(ProcessInstanceBo processInstanceBo) {
List<ProcessInstanceVo> list = new ArrayList<>(); List<ProcessInstanceVo> list = new ArrayList<>();
ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery(); ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();
query.processInstanceTenantId(TenantHelper.getTenantId()); if (TenantHelper.isEnable()) {
query.processInstanceTenantId(TenantHelper.getTenantId());
}
if (StringUtils.isNotBlank(processInstanceBo.getName())) { if (StringUtils.isNotBlank(processInstanceBo.getName())) {
query.processInstanceNameLikeIgnoreCase("%" + processInstanceBo.getName() + "%"); query.processInstanceNameLikeIgnoreCase("%" + processInstanceBo.getName() + "%");
} }
@ -134,7 +138,9 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
List<ProcessInstanceVo> list = new ArrayList<>(); List<ProcessInstanceVo> list = new ArrayList<>();
HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery().finished() HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery().finished()
.orderByProcessInstanceEndTime().desc(); .orderByProcessInstanceEndTime().desc();
query.processInstanceTenantId(TenantHelper.getTenantId()); if (TenantHelper.isEnable()) {
query.processInstanceTenantId(TenantHelper.getTenantId());
}
if (StringUtils.isNotEmpty(processInstanceBo.getName())) { if (StringUtils.isNotEmpty(processInstanceBo.getName())) {
query.processInstanceNameLikeIgnoreCase("%" + processInstanceBo.getName() + "%"); query.processInstanceNameLikeIgnoreCase("%" + processInstanceBo.getName() + "%");
} }
@ -315,8 +321,11 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
public Map<String, Object> getHistoryRecord(String processInstanceId) { public Map<String, Object> getHistoryRecord(String processInstanceId) {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
// 查询任务办理记录 // 查询任务办理记录
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery() HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery();
.processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).orderByHistoricTaskInstanceEndTime().desc().list(); if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
List<HistoricTaskInstance> list = query.processInstanceId(processInstanceId).orderByHistoricTaskInstanceEndTime().desc().list();
list = StreamUtils.sorted(list, Comparator.comparing(HistoricTaskInstance::getEndTime, Comparator.nullsFirst(Date::compareTo)).reversed()); list = StreamUtils.sorted(list, Comparator.comparing(HistoricTaskInstance::getEndTime, Comparator.nullsFirst(Date::compareTo)).reversed());
List<ActHistoryInfoVo> actHistoryInfoVoList = new ArrayList<>(); List<ActHistoryInfoVo> actHistoryInfoVoList = new ArrayList<>();
List<Comment> processInstanceComments = taskService.getProcessInstanceComments(processInstanceId); List<Comment> processInstanceComments = taskService.getProcessInstanceComments(processInstanceId);
@ -454,8 +463,11 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean deleteRuntimeProcessInst(ProcessInvalidBo processInvalidBo) { public boolean deleteRuntimeProcessInst(ProcessInvalidBo processInvalidBo) {
try { try {
List<Task> list = taskService.createTaskQuery().processInstanceId(processInvalidBo.getProcessInstanceId()) TaskQuery query = taskService.createTaskQuery();
.taskTenantId(TenantHelper.getTenantId()).list(); if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
List<Task> list = query.processInstanceId(processInvalidBo.getProcessInstanceId()).list();
List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
if (CollUtil.isNotEmpty(subTasks)) { if (CollUtil.isNotEmpty(subTasks)) {
subTasks.forEach(e -> taskService.deleteTask(e.getId())); subTasks.forEach(e -> taskService.deleteTask(e.getId()));
@ -467,8 +479,11 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
for (Task task : StreamUtils.filter(list, e -> StringUtils.isBlank(e.getParentTaskId()))) { for (Task task : StreamUtils.filter(list, e -> StringUtils.isBlank(e.getParentTaskId()))) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.INVALID.getStatus(), deleteReason); taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.INVALID.getStatus(), deleteReason);
} }
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() HistoricProcessInstanceQuery query1 = historyService.createHistoricProcessInstanceQuery();
.processInstanceId(processInvalidBo.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); if (TenantHelper.isEnable()) {
query1.processInstanceTenantId(TenantHelper.getTenantId());
}
HistoricProcessInstance historicProcessInstance = query1.processInstanceId(processInvalidBo.getProcessInstanceId()).singleResult();
if (ObjectUtil.isNotEmpty(historicProcessInstance) && BusinessStatusEnum.FINISH.getStatus().equals(historicProcessInstance.getBusinessStatus())) { if (ObjectUtil.isNotEmpty(historicProcessInstance) && BusinessStatusEnum.FINISH.getStatus().equals(historicProcessInstance.getBusinessStatus())) {
throw new ServiceException("该单据已完成申请!"); throw new ServiceException("该单据已完成申请!");
} }
@ -495,16 +510,22 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
public boolean deleteRuntimeProcessAndHisInst(List<String> processInstanceIds) { public boolean deleteRuntimeProcessAndHisInst(List<String> processInstanceIds) {
try { try {
// 1.删除运行中流程实例 // 1.删除运行中流程实例
List<Task> list = taskService.createTaskQuery().processInstanceIdIn(processInstanceIds) TaskQuery query = taskService.createTaskQuery();
.taskTenantId(TenantHelper.getTenantId()).list(); if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
List<Task> list = query.processInstanceIdIn(processInstanceIds).list();
List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
if (CollUtil.isNotEmpty(subTasks)) { if (CollUtil.isNotEmpty(subTasks)) {
subTasks.forEach(e -> taskService.deleteTask(e.getId())); subTasks.forEach(e -> taskService.deleteTask(e.getId()));
} }
runtimeService.bulkDeleteProcessInstances(processInstanceIds, LoginHelper.getUserId() + "删除了当前流程申请"); runtimeService.bulkDeleteProcessInstances(processInstanceIds, LoginHelper.getUserId() + "删除了当前流程申请");
// 2.删除历史记录 // 2.删除历史记录
List<HistoricProcessInstance> historicProcessInstanceList = historyService.createHistoricProcessInstanceQuery() HistoricProcessInstanceQuery query1 = historyService.createHistoricProcessInstanceQuery();
.processInstanceTenantId(TenantHelper.getTenantId()).processInstanceIds(new HashSet<>(processInstanceIds)).list(); if (TenantHelper.isEnable()) {
query1.processInstanceTenantId(TenantHelper.getTenantId());
}
List<HistoricProcessInstance> historicProcessInstanceList = query1.processInstanceIds(new HashSet<>(processInstanceIds)).list();
if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) { if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) {
historyService.bulkDeleteHistoricProcessInstances(processInstanceIds); historyService.bulkDeleteHistoricProcessInstances(processInstanceIds);
} }
@ -531,16 +552,22 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
return false; return false;
} }
List<String> processInstanceIds = StreamUtils.toList(actHiProcinsts, ActHiProcinst::getId); List<String> processInstanceIds = StreamUtils.toList(actHiProcinsts, ActHiProcinst::getId);
List<Task> list = taskService.createTaskQuery().processInstanceIdIn(processInstanceIds) TaskQuery query = taskService.createTaskQuery();
.taskTenantId(TenantHelper.getTenantId()).list(); if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
List<Task> list = query.processInstanceIdIn(processInstanceIds).list();
List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
if (CollUtil.isNotEmpty(subTasks)) { if (CollUtil.isNotEmpty(subTasks)) {
subTasks.forEach(e -> taskService.deleteTask(e.getId())); subTasks.forEach(e -> taskService.deleteTask(e.getId()));
} }
runtimeService.bulkDeleteProcessInstances(processInstanceIds, LoginHelper.getUserId() + "删除了当前流程申请"); runtimeService.bulkDeleteProcessInstances(processInstanceIds, LoginHelper.getUserId() + "删除了当前流程申请");
// 2.删除历史记录 // 2.删除历史记录
List<HistoricProcessInstance> historicProcessInstanceList = historyService.createHistoricProcessInstanceQuery() HistoricProcessInstanceQuery query1 = historyService.createHistoricProcessInstanceQuery();
.processInstanceTenantId(TenantHelper.getTenantId()).processInstanceIds(new HashSet<>(processInstanceIds)).list(); if (TenantHelper.isEnable()) {
query1.processInstanceTenantId(TenantHelper.getTenantId());
}
List<HistoricProcessInstance> historicProcessInstanceList = query1.processInstanceIds(new HashSet<>(processInstanceIds)).list();
if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) { if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) {
historyService.bulkDeleteHistoricProcessInstances(processInstanceIds); historyService.bulkDeleteHistoricProcessInstances(processInstanceIds);
} }
@ -577,8 +604,12 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean cancelProcessApply(String processInstanceId) { public boolean cancelProcessApply(String processInstanceId) {
try { try {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();
.processInstanceId(processInstanceId).processInstanceTenantId(TenantHelper.getTenantId()).startedBy(String.valueOf(LoginHelper.getUserId())).singleResult(); if (TenantHelper.isEnable()) {
query.processInstanceTenantId(TenantHelper.getTenantId());
}
ProcessInstance processInstance = query.processInstanceId(processInstanceId)
.startedBy(String.valueOf(LoginHelper.getUserId())).singleResult();
if (ObjectUtil.isNull(processInstance)) { if (ObjectUtil.isNull(processInstance)) {
throw new ServiceException("您不是流程发起人,撤销失败!"); throw new ServiceException("您不是流程发起人,撤销失败!");
} }
@ -588,7 +619,11 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
if (BusinessStatusEnum.CANCEL.getStatus().equals(processInstance.getBusinessStatus())) { if (BusinessStatusEnum.CANCEL.getStatus().equals(processInstance.getBusinessStatus())) {
throw new ServiceException("该单据已撤销!"); throw new ServiceException("该单据已撤销!");
} }
List<Task> taskList = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).list(); TaskQuery query1 = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query1.taskTenantId(TenantHelper.getTenantId());
}
List<Task> taskList = query1.processInstanceId(processInstanceId).list();
for (Task task : taskList) { for (Task task : taskList) {
taskService.setAssignee(task.getId(), String.valueOf(LoginHelper.getUserId())); taskService.setAssignee(task.getId(), String.valueOf(LoginHelper.getUserId()));
taskService.addComment(task.getId(), processInstanceId, TaskStatusEnum.CANCEL.getStatus(), LoginHelper.getLoginUser().getNickname() + ":撤销申请"); taskService.addComment(task.getId(), processInstanceId, TaskStatusEnum.CANCEL.getStatus(), LoginHelper.getLoginUser().getNickname() + ":撤销申请");
@ -598,7 +633,11 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
runtimeService.createChangeActivityStateBuilder() runtimeService.createChangeActivityStateBuilder()
.processInstanceId(processInstanceId) .processInstanceId(processInstanceId)
.moveActivityIdsToSingleActivityId(nodeIds, historicTaskInstance.getTaskDefinitionKey()).changeState(); .moveActivityIdsToSingleActivityId(nodeIds, historicTaskInstance.getTaskDefinitionKey()).changeState();
Task task = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).list().get(0); TaskQuery query2 = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query2.taskTenantId(TenantHelper.getTenantId());
}
Task task = query2.processInstanceId(processInstanceId).list().get(0);
taskService.setAssignee(task.getId(), historicTaskInstance.getAssignee()); taskService.setAssignee(task.getId(), historicTaskInstance.getAssignee());
//获取并行网关执行后保留的执行实例数据 //获取并行网关执行后保留的执行实例数据
ExecutionChildByExecutionIdCmd childByExecutionIdCmd = new ExecutionChildByExecutionIdCmd(task.getExecutionId()); ExecutionChildByExecutionIdCmd childByExecutionIdCmd = new ExecutionChildByExecutionIdCmd(task.getExecutionId());
@ -629,7 +668,9 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
public TableDataInfo<ProcessInstanceVo> getCurrentSubmitByPage(ProcessInstanceBo processInstanceBo) { public TableDataInfo<ProcessInstanceVo> getCurrentSubmitByPage(ProcessInstanceBo processInstanceBo) {
List<ProcessInstanceVo> list = new ArrayList<>(); List<ProcessInstanceVo> list = new ArrayList<>();
HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery(); HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery();
query.processInstanceTenantId(TenantHelper.getTenantId()); if (TenantHelper.isEnable()) {
query.processInstanceTenantId(TenantHelper.getTenantId());
}
query.startedBy(processInstanceBo.getStartUserId()); query.startedBy(processInstanceBo.getStartUserId());
if (StringUtils.isNotBlank(processInstanceBo.getName())) { if (StringUtils.isNotBlank(processInstanceBo.getName())) {
query.processInstanceNameLikeIgnoreCase("%" + processInstanceBo.getName() + "%"); query.processInstanceNameLikeIgnoreCase("%" + processInstanceBo.getName() + "%");
@ -648,7 +689,11 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
List<TaskVo> taskVoList = new ArrayList<>(); List<TaskVo> taskVoList = new ArrayList<>();
if (CollUtil.isNotEmpty(historicProcessInstanceList)) { if (CollUtil.isNotEmpty(historicProcessInstanceList)) {
List<String> processInstanceIds = StreamUtils.toList(historicProcessInstanceList, HistoricProcessInstance::getId); List<String> processInstanceIds = StreamUtils.toList(historicProcessInstanceList, HistoricProcessInstance::getId);
List<Task> taskList = taskService.createTaskQuery().processInstanceIdIn(processInstanceIds).taskTenantId(TenantHelper.getTenantId()).list(); TaskQuery query1 = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query1.taskTenantId(TenantHelper.getTenantId());
}
List<Task> taskList = query1.processInstanceIdIn(processInstanceIds).list();
for (Task task : taskList) { for (Task task : taskList) {
taskVoList.add(BeanUtil.toBean(task, TaskVo.class)); taskVoList.add(BeanUtil.toBean(task, TaskVo.class));
} }
@ -675,9 +720,11 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean taskUrging(TaskUrgingBo taskUrgingBo) { public boolean taskUrging(TaskUrgingBo taskUrgingBo) {
try { try {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();
.processInstanceId(taskUrgingBo.getProcessInstanceId()) if (TenantHelper.isEnable()) {
.processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); query.processInstanceTenantId(TenantHelper.getTenantId());
}
ProcessInstance processInstance = query.processInstanceId(taskUrgingBo.getProcessInstanceId()).singleResult();
if (processInstance == null) { if (processInstance == null) {
throw new ServiceException("任务已结束!"); throw new ServiceException("任务已结束!");
} }

View File

@ -35,10 +35,12 @@ import org.flowable.common.engine.api.FlowableObjectNotFoundException;
import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.common.engine.impl.identity.Authentication;
import org.flowable.engine.*; import org.flowable.engine.*;
import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.history.HistoricProcessInstanceQuery;
import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior; import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity; import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.engine.runtime.ProcessInstanceQuery;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery; import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstance;
@ -84,12 +86,19 @@ public class ActTaskServiceImpl implements IActTaskService {
throw new ServiceException("启动工作流时必须包含业务ID"); throw new ServiceException("启动工作流时必须包含业务ID");
} }
// 判断当前业务是否启动过流程 // 判断当前业务是否启动过流程
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey(startProcessBo.getBusinessKey()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery();
if (TenantHelper.isEnable()) {
query.processInstanceTenantId(TenantHelper.getTenantId());
}
HistoricProcessInstance historicProcessInstance = query.processInstanceBusinessKey(startProcessBo.getBusinessKey()).singleResult();
if (ObjectUtil.isNotEmpty(historicProcessInstance)) { if (ObjectUtil.isNotEmpty(historicProcessInstance)) {
BusinessStatusEnum.checkStartStatus(historicProcessInstance.getBusinessStatus()); BusinessStatusEnum.checkStartStatus(historicProcessInstance.getBusinessStatus());
} }
TaskQuery taskQuery = taskService.createTaskQuery(); TaskQuery taskQuery = taskService.createTaskQuery();
List<Task> taskResult = taskQuery.processInstanceBusinessKey(startProcessBo.getBusinessKey()).taskTenantId(TenantHelper.getTenantId()).list(); if (TenantHelper.isEnable()) {
taskQuery.taskTenantId(TenantHelper.getTenantId());
}
List<Task> taskResult = taskQuery.processInstanceBusinessKey(startProcessBo.getBusinessKey()).list();
if (CollUtil.isNotEmpty(taskResult)) { if (CollUtil.isNotEmpty(taskResult)) {
if (CollUtil.isNotEmpty(startProcessBo.getVariables())) { if (CollUtil.isNotEmpty(startProcessBo.getVariables())) {
taskService.setVariables(taskResult.get(0).getId(), startProcessBo.getVariables()); taskService.setVariables(taskResult.get(0).getId(), startProcessBo.getVariables());
@ -109,14 +118,22 @@ public class ActTaskServiceImpl implements IActTaskService {
variables.put(INITIATOR, (String.valueOf(LoginHelper.getUserId()))); variables.put(INITIATOR, (String.valueOf(LoginHelper.getUserId())));
ProcessInstance pi; ProcessInstance pi;
try { try {
pi = runtimeService.startProcessInstanceByKeyAndTenantId(startProcessBo.getProcessKey(), startProcessBo.getBusinessKey(), variables, TenantHelper.getTenantId()); if (TenantHelper.isEnable()) {
pi = runtimeService.startProcessInstanceByKeyAndTenantId(startProcessBo.getProcessKey(), startProcessBo.getBusinessKey(), variables, TenantHelper.getTenantId());
} else {
pi = runtimeService.startProcessInstanceByKey(startProcessBo.getProcessKey(), startProcessBo.getBusinessKey(), variables);
}
} catch (FlowableObjectNotFoundException e) { } catch (FlowableObjectNotFoundException e) {
throw new ServiceException("找不到当前【" + startProcessBo.getProcessKey() + "】流程定义!"); throw new ServiceException("找不到当前【" + startProcessBo.getProcessKey() + "】流程定义!");
} }
// 将流程定义名称 作为 流程实例名称 // 将流程定义名称 作为 流程实例名称
runtimeService.setProcessInstanceName(pi.getProcessInstanceId(), pi.getProcessDefinitionName()); runtimeService.setProcessInstanceName(pi.getProcessInstanceId(), pi.getProcessDefinitionName());
// 申请人执行流程 // 申请人执行流程
List<Task> taskList = taskService.createTaskQuery().processInstanceId(pi.getId()).taskTenantId(TenantHelper.getTenantId()).list(); TaskQuery taskQuery1 = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
taskQuery.taskTenantId(TenantHelper.getTenantId());
}
List<Task> taskList = taskQuery1.processInstanceId(pi.getId()).list();
if (taskList.size() > 1) { if (taskList.size() > 1) {
throw new ServiceException("请检查流程第一个环节是否为申请人!"); throw new ServiceException("请检查流程第一个环节是否为申请人!");
} }
@ -141,7 +158,10 @@ public class ActTaskServiceImpl implements IActTaskService {
List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles(); List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles();
String userId = String.valueOf(LoginHelper.getUserId()); String userId = String.valueOf(LoginHelper.getUserId());
TaskQuery taskQuery = taskService.createTaskQuery(); TaskQuery taskQuery = taskService.createTaskQuery();
taskQuery.taskId(completeTaskBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(userId); if (TenantHelper.isEnable()) {
taskQuery.taskTenantId(TenantHelper.getTenantId());
}
taskQuery.taskId(completeTaskBo.getTaskId()).taskCandidateOrAssigned(userId);
if (CollUtil.isNotEmpty(roles)) { if (CollUtil.isNotEmpty(roles)) {
List<String> groupIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId())); List<String> groupIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId()));
taskQuery.taskCandidateGroupIn(groupIds); taskQuery.taskCandidateGroupIn(groupIds);
@ -186,8 +206,11 @@ public class ActTaskServiceImpl implements IActTaskService {
} else { } else {
taskService.complete(completeTaskBo.getTaskId()); taskService.complete(completeTaskBo.getTaskId());
} }
ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()) ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();
.processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); if (TenantHelper.isEnable()) {
query.processInstanceTenantId(TenantHelper.getTenantId());
}
ProcessInstance pi = query.processInstanceId(task.getProcessInstanceId()).singleResult();
if (pi == null) { if (pi == null) {
UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus()); UpdateBusinessStatusCmd updateBusinessStatusCmd = new UpdateBusinessStatusCmd(task.getProcessInstanceId(), BusinessStatusEnum.FINISH.getStatus());
managementService.executeCommand(updateBusinessStatusCmd); managementService.executeCommand(updateBusinessStatusCmd);
@ -195,7 +218,11 @@ public class ActTaskServiceImpl implements IActTaskService {
processHandler.handleProcess(processInstance.getBusinessKey(), BusinessStatusEnum.FINISH.getStatus(), false); processHandler.handleProcess(processInstance.getBusinessKey(), BusinessStatusEnum.FINISH.getStatus(), false);
} }
} else { } else {
List<Task> list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list(); TaskQuery query1 = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query1.taskTenantId(TenantHelper.getTenantId());
}
List<Task> list = query1.processInstanceId(task.getProcessInstanceId()).list();
if (CollUtil.isNotEmpty(list) && CollUtil.isNotEmpty(completeTaskBo.getWfCopyList())) { if (CollUtil.isNotEmpty(list) && CollUtil.isNotEmpty(completeTaskBo.getWfCopyList())) {
TaskEntity newTask = WorkflowUtils.createNewTask(task); TaskEntity newTask = WorkflowUtils.createNewTask(task);
taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.COPY.getStatus(), taskService.addComment(newTask.getId(), task.getProcessInstanceId(), TaskStatusEnum.COPY.getStatus(),
@ -239,7 +266,7 @@ public class ActTaskServiceImpl implements IActTaskService {
List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles(); List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles();
String userId = String.valueOf(LoginHelper.getUserId()); String userId = String.valueOf(LoginHelper.getUserId());
queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus()); queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus());
queryWrapper.eq("t.tenant_id_", TenantHelper.getTenantId()); queryWrapper.eq(TenantHelper.isEnable(), "t.tenant_id_", TenantHelper.getTenantId());
queryWrapper.and(w1 -> queryWrapper.and(w1 ->
w1.eq("t.assignee_", userId) w1.eq("t.assignee_", userId)
.or(w2 -> w2.isNull("t.assignee_") .or(w2 -> w2.isNull("t.assignee_")
@ -272,7 +299,10 @@ public class ActTaskServiceImpl implements IActTaskService {
*/ */
@Override @Override
public TableDataInfo<TaskVo> getAllTaskWaitByPage(TaskBo taskBo) { public TableDataInfo<TaskVo> getAllTaskWaitByPage(TaskBo taskBo) {
TaskQuery query = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()); TaskQuery query = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
if (StringUtils.isNotBlank(taskBo.getName())) { if (StringUtils.isNotBlank(taskBo.getName())) {
query.taskNameLike("%" + taskBo.getName() + "%"); query.taskNameLike("%" + taskBo.getName() + "%");
} }
@ -317,7 +347,11 @@ public class ActTaskServiceImpl implements IActTaskService {
@Override @Override
public TableDataInfo<TaskVo> getTaskFinishByPage(TaskBo taskBo) { public TableDataInfo<TaskVo> getTaskFinishByPage(TaskBo taskBo) {
String userId = String.valueOf(LoginHelper.getUserId()); String userId = String.valueOf(LoginHelper.getUserId());
HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery().taskAssignee(userId).taskTenantId(TenantHelper.getTenantId()).finished().orderByHistoricTaskInstanceStartTime().desc(); HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery();
if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
query.taskAssignee(userId).finished().orderByHistoricTaskInstanceStartTime().desc();
if (StringUtils.isNotBlank(taskBo.getName())) { if (StringUtils.isNotBlank(taskBo.getName())) {
query.taskNameLike("%" + taskBo.getName() + "%"); query.taskNameLike("%" + taskBo.getName() + "%");
} }
@ -390,7 +424,11 @@ public class ActTaskServiceImpl implements IActTaskService {
*/ */
@Override @Override
public TableDataInfo<TaskVo> getAllTaskFinishByPage(TaskBo taskBo) { public TableDataInfo<TaskVo> getAllTaskFinishByPage(TaskBo taskBo) {
HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery().taskTenantId(TenantHelper.getTenantId()).finished().orderByHistoricTaskInstanceStartTime().desc(); HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery();
if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
query.finished().orderByHistoricTaskInstanceStartTime().desc();
if (StringUtils.isNotBlank(taskBo.getName())) { if (StringUtils.isNotBlank(taskBo.getName())) {
query.taskNameLike("%" + taskBo.getName() + "%"); query.taskNameLike("%" + taskBo.getName() + "%");
} }
@ -432,7 +470,11 @@ public class ActTaskServiceImpl implements IActTaskService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean delegateTask(DelegateBo delegateBo) { public boolean delegateTask(DelegateBo delegateBo) {
TaskEntity task = (TaskEntity) taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).taskId(delegateBo.getTaskId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); TaskQuery query = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
TaskEntity task = (TaskEntity) query.taskId(delegateBo.getTaskId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult();
if (ObjectUtil.isEmpty(task)) { if (ObjectUtil.isEmpty(task)) {
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
} }
@ -461,7 +503,11 @@ public class ActTaskServiceImpl implements IActTaskService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean terminationTask(TerminationBo terminationBo) { public boolean terminationTask(TerminationBo terminationBo) {
Task task = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).taskId(terminationBo.getTaskId()).singleResult(); TaskQuery query = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
Task task = query.taskId(terminationBo.getTaskId()).singleResult();
if (ObjectUtil.isEmpty(task)) { if (ObjectUtil.isEmpty(task)) {
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
@ -469,7 +515,11 @@ public class ActTaskServiceImpl implements IActTaskService {
if (task.isSuspended()) { if (task.isSuspended()) {
throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED); throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED);
} }
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey(task.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); HistoricProcessInstanceQuery query1 = historyService.createHistoricProcessInstanceQuery();
if (TenantHelper.isEnable()) {
query1.processInstanceTenantId(TenantHelper.getTenantId());
}
HistoricProcessInstance historicProcessInstance = query1.processInstanceBusinessKey(task.getProcessInstanceId()).singleResult();
if (ObjectUtil.isNotEmpty(historicProcessInstance) && BusinessStatusEnum.TERMINATION.getStatus().equals(historicProcessInstance.getBusinessStatus())) { if (ObjectUtil.isNotEmpty(historicProcessInstance) && BusinessStatusEnum.TERMINATION.getStatus().equals(historicProcessInstance.getBusinessStatus())) {
throw new ServiceException("该单据已终止!"); throw new ServiceException("该单据已终止!");
} }
@ -480,7 +530,11 @@ public class ActTaskServiceImpl implements IActTaskService {
terminationBo.setComment(LoginHelper.getLoginUser().getNickname() + "终止了申请:" + terminationBo.getComment()); terminationBo.setComment(LoginHelper.getLoginUser().getNickname() + "终止了申请:" + terminationBo.getComment());
} }
taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.TERMINATION.getStatus(), terminationBo.getComment()); taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.TERMINATION.getStatus(), terminationBo.getComment());
List<Task> list = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list(); TaskQuery query2 = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query2.taskTenantId(TenantHelper.getTenantId());
}
List<Task> list = query2.processInstanceId(task.getProcessInstanceId()).list();
if (CollectionUtil.isNotEmpty(list)) { if (CollectionUtil.isNotEmpty(list)) {
List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId())); List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
if (CollectionUtil.isNotEmpty(subTasks)) { if (CollectionUtil.isNotEmpty(subTasks)) {
@ -506,7 +560,11 @@ public class ActTaskServiceImpl implements IActTaskService {
*/ */
@Override @Override
public boolean transferTask(TransmitBo transmitBo) { public boolean transferTask(TransmitBo transmitBo) {
Task task = taskService.createTaskQuery().taskId(transmitBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult(); TaskQuery query = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
Task task = query.taskId(transmitBo.getTaskId()).taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())).singleResult();
if (ObjectUtil.isEmpty(task)) { if (ObjectUtil.isEmpty(task)) {
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
} }
@ -534,7 +592,9 @@ public class ActTaskServiceImpl implements IActTaskService {
public boolean addMultiInstanceExecution(AddMultiBo addMultiBo) { public boolean addMultiInstanceExecution(AddMultiBo addMultiBo) {
TaskQuery taskQuery = taskService.createTaskQuery(); TaskQuery taskQuery = taskService.createTaskQuery();
taskQuery.taskId(addMultiBo.getTaskId()); taskQuery.taskId(addMultiBo.getTaskId());
taskQuery.taskTenantId(TenantHelper.getTenantId()); if (TenantHelper.isEnable()) {
taskQuery.taskTenantId(TenantHelper.getTenantId());
}
if (!LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin()) { if (!LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin()) {
taskQuery.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())); taskQuery.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId()));
} }
@ -583,7 +643,9 @@ public class ActTaskServiceImpl implements IActTaskService {
public boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo) { public boolean deleteMultiInstanceExecution(DeleteMultiBo deleteMultiBo) {
TaskQuery taskQuery = taskService.createTaskQuery(); TaskQuery taskQuery = taskService.createTaskQuery();
taskQuery.taskId(deleteMultiBo.getTaskId()); taskQuery.taskId(deleteMultiBo.getTaskId());
taskQuery.taskTenantId(TenantHelper.getTenantId()); if (TenantHelper.isEnable()) {
taskQuery.taskTenantId(TenantHelper.getTenantId());
}
if (!LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin()) { if (!LoginHelper.isSuperAdmin() && !LoginHelper.isTenantAdmin()) {
taskQuery.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId())); taskQuery.taskCandidateOrAssigned(String.valueOf(LoginHelper.getUserId()));
} }
@ -633,7 +695,11 @@ public class ActTaskServiceImpl implements IActTaskService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public String backProcess(BackProcessBo backProcessBo) { public String backProcess(BackProcessBo backProcessBo) {
Task task = taskService.createTaskQuery().taskId(backProcessBo.getTaskId()).taskTenantId(TenantHelper.getTenantId()).taskAssignee(String.valueOf(LoginHelper.getUserId())).singleResult(); TaskQuery query = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
Task task = query.taskId(backProcessBo.getTaskId()).taskAssignee(String.valueOf(LoginHelper.getUserId())).singleResult();
if (ObjectUtil.isEmpty(task)) { if (ObjectUtil.isEmpty(task)) {
throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL); throw new ServiceException(FlowConstant.MESSAGE_CURRENT_TASK_IS_NULL);
} }
@ -651,7 +717,11 @@ public class ActTaskServiceImpl implements IActTaskService {
throw new ServiceException("该单据已退回!"); throw new ServiceException("该单据已退回!");
} }
//判断是否有多个任务 //判断是否有多个任务
List<Task> taskList = taskService.createTaskQuery().processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).list(); TaskQuery query1 = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query1.taskTenantId(TenantHelper.getTenantId());
}
List<Task> taskList = query.processInstanceId(processInstanceId).list();
//申请人节点 //申请人节点
HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0); HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId).finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0);
String backTaskDefinitionKey = historicTaskInstance.getTaskDefinitionKey(); String backTaskDefinitionKey = historicTaskInstance.getTaskDefinitionKey();
@ -663,7 +733,11 @@ public class ActTaskServiceImpl implements IActTaskService {
//当前单个节点驳回单个节点 //当前单个节点驳回单个节点
runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId).moveActivityIdTo(task.getTaskDefinitionKey(), backTaskDefinitionKey).changeState(); runtimeService.createChangeActivityStateBuilder().processInstanceId(processInstanceId).moveActivityIdTo(task.getTaskDefinitionKey(), backTaskDefinitionKey).changeState();
} }
List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId).taskTenantId(TenantHelper.getTenantId()).list(); TaskQuery query2 = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query1.taskTenantId(TenantHelper.getTenantId());
}
List<Task> list = query2.processInstanceId(processInstanceId).list();
for (Task t : list) { for (Task t : list) {
taskService.setAssignee(t.getId(), historicTaskInstance.getAssignee()); taskService.setAssignee(t.getId(), historicTaskInstance.getAssignee());
} }
@ -696,7 +770,11 @@ public class ActTaskServiceImpl implements IActTaskService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean updateAssignee(String[] taskIds, String userId) { public boolean updateAssignee(String[] taskIds, String userId) {
try { try {
List<Task> list = taskService.createTaskQuery().taskIds(Arrays.asList(taskIds)).taskTenantId(TenantHelper.getTenantId()).list(); TaskQuery query = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
List<Task> list = query.taskIds(Arrays.asList(taskIds)).list();
for (Task task : list) { for (Task task : list) {
taskService.setAssignee(task.getId(), userId); taskService.setAssignee(task.getId(), userId);
} }

View File

@ -29,6 +29,7 @@ import org.flowable.engine.TaskService;
import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior; import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
@ -92,8 +93,16 @@ public class WorkflowUserServiceImpl implements IWorkflowUserService {
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public List<TaskVo> getWorkflowDeleteMultiInstanceList(String taskId) { public List<TaskVo> getWorkflowDeleteMultiInstanceList(String taskId) {
Task task = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).taskId(taskId).singleResult(); TaskQuery query = taskService.createTaskQuery();
List<Task> taskList = taskService.createTaskQuery().taskTenantId(TenantHelper.getTenantId()).processInstanceId(task.getProcessInstanceId()).list(); if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
Task task = query.taskId(taskId).singleResult();
TaskQuery query1 = taskService.createTaskQuery();
if (TenantHelper.isEnable()) {
query1.taskTenantId(TenantHelper.getTenantId());
}
List<Task> taskList = query1.processInstanceId(task.getProcessInstanceId()).list();
MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()); MultiInstanceVo multiInstance = WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey());
List<TaskVo> taskListVo = new ArrayList<>(); List<TaskVo> taskListVo = new ArrayList<>();
if (multiInstance == null) { if (multiInstance == null) {

View File

@ -33,11 +33,14 @@ import org.flowable.bpmn.model.*;
import org.flowable.common.engine.api.delegate.Expression; import org.flowable.common.engine.api.delegate.Expression;
import org.flowable.engine.ProcessEngine; import org.flowable.engine.ProcessEngine;
import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.history.HistoricProcessInstanceQuery;
import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior; import org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior; import org.flowable.engine.impl.bpmn.behavior.SequentialMultiInstanceBehavior;
import org.flowable.identitylink.api.history.HistoricIdentityLink; import org.flowable.identitylink.api.history.HistoricIdentityLink;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery;
import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstance;
import org.flowable.task.api.history.HistoricTaskInstanceQuery;
import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import java.util.*; import java.util.*;
@ -78,7 +81,9 @@ public class WorkflowUtils {
task.setTaskDefinitionKey(currentTask.getTaskDefinitionKey()); task.setTaskDefinitionKey(currentTask.getTaskDefinitionKey());
task.setPriority(currentTask.getPriority()); task.setPriority(currentTask.getPriority());
task.setCreateTime(new Date()); task.setCreateTime(new Date());
task.setTenantId(TenantHelper.getTenantId()); if (TenantHelper.isEnable()) {
task.setTenantId(TenantHelper.getTenantId());
}
PROCESS_ENGINE.getTaskService().saveTask(task); PROCESS_ENGINE.getTaskService().saveTask(task);
} }
if (ObjectUtil.isNotNull(task)) { if (ObjectUtil.isNotNull(task)) {
@ -105,7 +110,9 @@ public class WorkflowUtils {
newTask.setProcessDefinitionId(parentTask.getProcessDefinitionId()); newTask.setProcessDefinitionId(parentTask.getProcessDefinitionId());
newTask.setProcessInstanceId(parentTask.getProcessInstanceId()); newTask.setProcessInstanceId(parentTask.getProcessInstanceId());
newTask.setTaskDefinitionKey(parentTask.getTaskDefinitionKey()); newTask.setTaskDefinitionKey(parentTask.getTaskDefinitionKey());
newTask.setTenantId(TenantHelper.getTenantId()); if (TenantHelper.isEnable()) {
newTask.setTenantId(TenantHelper.getTenantId());
}
list.add(newTask); list.add(newTask);
} }
} }
@ -118,7 +125,9 @@ public class WorkflowUtils {
actHiTaskinst.setProcDefId(processDefinitionId); actHiTaskinst.setProcDefId(processDefinitionId);
actHiTaskinst.setProcInstId(processInstanceId); actHiTaskinst.setProcInstId(processInstanceId);
actHiTaskinst.setScopeType(TaskStatusEnum.COPY.getStatus()); actHiTaskinst.setScopeType(TaskStatusEnum.COPY.getStatus());
actHiTaskinst.setTenantId(TenantHelper.getTenantId()); if (TenantHelper.isEnable()) {
actHiTaskinst.setTenantId(TenantHelper.getTenantId());
}
LambdaUpdateWrapper<ActHiTaskinst> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<ActHiTaskinst> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.in(ActHiTaskinst::getId, taskIds); updateWrapper.in(ActHiTaskinst::getId, taskIds);
ACT_HI_TASKINST_MAPPER.update(actHiTaskinst, updateWrapper); ACT_HI_TASKINST_MAPPER.update(actHiTaskinst, updateWrapper);
@ -136,7 +145,11 @@ public class WorkflowUtils {
public static ParticipantVo getCurrentTaskParticipant(String taskId) { public static ParticipantVo getCurrentTaskParticipant(String taskId) {
ParticipantVo participantVo = new ParticipantVo(); ParticipantVo participantVo = new ParticipantVo();
List<HistoricIdentityLink> linksForTask = PROCESS_ENGINE.getHistoryService().getHistoricIdentityLinksForTask(taskId); List<HistoricIdentityLink> linksForTask = PROCESS_ENGINE.getHistoryService().getHistoricIdentityLinksForTask(taskId);
Task task = PROCESS_ENGINE.getTaskService().createTaskQuery().taskTenantId(TenantHelper.getTenantId()).taskId(taskId).singleResult(); TaskQuery query = PROCESS_ENGINE.getTaskService().createTaskQuery();
if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
Task task = query.taskId(taskId).singleResult();
if (task != null && CollUtil.isNotEmpty(linksForTask)) { if (task != null && CollUtil.isNotEmpty(linksForTask)) {
List<HistoricIdentityLink> groupList = StreamUtils.filter(linksForTask, e -> StringUtils.isNotBlank(e.getGroupId())); List<HistoricIdentityLink> groupList = StreamUtils.filter(linksForTask, e -> StringUtils.isNotBlank(e.getGroupId()));
if (CollUtil.isNotEmpty(groupList)) { if (CollUtil.isNotEmpty(groupList)) {
@ -220,8 +233,16 @@ public class WorkflowUtils {
* @param taskId 任务id * @param taskId 任务id
*/ */
public static String getBusinessStatusByTaskId(String taskId) { public static String getBusinessStatusByTaskId(String taskId) {
HistoricTaskInstance historicTaskInstance = PROCESS_ENGINE.getHistoryService().createHistoricTaskInstanceQuery().taskId(taskId).taskTenantId(TenantHelper.getTenantId()).singleResult(); HistoricTaskInstanceQuery query = PROCESS_ENGINE.getHistoryService().createHistoricTaskInstanceQuery();
HistoricProcessInstance historicProcessInstance = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(historicTaskInstance.getProcessInstanceId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); if (TenantHelper.isEnable()) {
query.taskTenantId(TenantHelper.getTenantId());
}
HistoricTaskInstance historicTaskInstance = query.taskId(taskId).singleResult();
HistoricProcessInstanceQuery query1 = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery();
if (TenantHelper.isEnable()) {
query1.processInstanceTenantId(TenantHelper.getTenantId());
}
HistoricProcessInstance historicProcessInstance = query1.processInstanceId(historicTaskInstance.getProcessInstanceId()).singleResult();
return historicProcessInstance.getBusinessStatus(); return historicProcessInstance.getBusinessStatus();
} }
@ -231,7 +252,11 @@ public class WorkflowUtils {
* @param processInstanceId 流程实例id * @param processInstanceId 流程实例id
*/ */
public static String getBusinessStatus(String processInstanceId) { public static String getBusinessStatus(String processInstanceId) {
HistoricProcessInstance historicProcessInstance = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).processInstanceTenantId(TenantHelper.getTenantId()).singleResult(); HistoricProcessInstanceQuery query = PROCESS_ENGINE.getHistoryService().createHistoricProcessInstanceQuery();
if (TenantHelper.isEnable()) {
query.processInstanceTenantId(TenantHelper.getTenantId());
}
HistoricProcessInstance historicProcessInstance = query.processInstanceId(processInstanceId).singleResult();
return historicProcessInstance.getBusinessStatus(); return historicProcessInstance.getBusinessStatus();
} }