fix - 修复台账接口的租户字段没参与查询条件的问题

This commit is contained in:
wangli 2023-08-02 17:00:51 +08:00
parent fa66575c41
commit 34b110c022
13 changed files with 67 additions and 32 deletions

View File

@ -341,7 +341,7 @@ public class BpmTransformUtil {
createExecutionListener(EVENTNAME_START, executionListeners);
// End 事件,主要想用于多实例节点保留一条历史的任务信息, 后续研究过程中, 发现通过更优的解决方案, 所以注释掉下面一行
// createExecutionListener(EVENTNAME_END, executionListeners);
userTask.setExecutionListeners(executionListeners);
if (!ObjectUtils.isEmpty(flowNode.getProperty()) && Boolean.TRUE.equals(flowNode.getProperty().getIsMultiTask())) {
BpmnJsonNodeProperty property = flowNode.getProperty();

View File

@ -60,7 +60,7 @@ public interface BpmnTaskService {
List<BpmnTaskInstanceVO> getActiveTasksByProcessInstanceId(String processInstanceId, String tenantId);
FormInfo getTaskFormModel(String taskId);
FormInfo getTaskFormModel(String taskId, String tenantId);
/**
* 修改审批任务审批人

View File

@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.util.Date;
/**
@ -23,6 +24,7 @@ public class BpmnTaskPageSearchDTO extends BpmPageParam {
private String userId;
@ApiModelProperty(value = "租户Id", example = "1")
@NotBlank(message = "租户不能为空")
private String tenantId;
@ApiModelProperty(value = "审核单类型,多选就'逗号'分隔", example = "1")

View File

@ -23,4 +23,7 @@ public class FormDefinitionUpdateDTO {
@ApiModelProperty(value = "表单定义内容")
private FormDefinitionDTO formDefinition;
@NotBlank(message = "租户不能为空")
private String tenantId;
}

View File

@ -31,4 +31,7 @@ public class FormContentUpdateDTO {
@ApiModelProperty(value = "任务归属人标识", example = "1")
@NotBlank(message = "任务归属人不能为空")
private String userId;
@NotBlank(message = "租户不能为空")
private String tenantId;
}

View File

@ -53,7 +53,7 @@ public class BpmnProcessDefinitionServiceImpl implements BpmnProcessDefinitionSe
.key(model.getKey())
.name(model.getName())
.category(model.getCategory())
.tenantId(String.valueOf(model.getTenantId()))
.tenantId(model.getTenantId())
.addBytes(model.getKey() + BPMN_FILE_SUFFIX, bpmnBytes)
// 关闭 BPMN 文件内容校验
.disableBpmnValidation()

View File

@ -112,6 +112,9 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
if (Objects.nonNull(dto.getResult())) {
query.processInstanceBusinessStatus(dto.getResult().getStatus());
}
if (StringUtils.isNotBlank(dto.getTenantId())) {
query.processInstanceTenantId(dto.getTenantId());
}
List<HistoricProcessInstance> instances = query.orderByProcessInstanceStartTime().desc()
.listPage((dto.getPageNo() - 1) * dto.getPageSize(), dto.getPageSize());
@ -132,7 +135,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
}
@Override
public HistoricProcessInstance getProcessInstance(String id, String tenantId, Boolean hasVariable) {
public HistoricProcessInstance getProcessInstance(String id, @Nullable String tenantId, Boolean hasVariable) {
HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery().processInstanceId(id);
if (Boolean.TRUE.equals(hasVariable)) {
query.includeProcessVariables();

View File

@ -141,6 +141,9 @@ public class BpmnProcessModelServiceImpl implements BpmnProcessModelService {
if (Objects.isNull(model) && !Objects.equals(model.getMetaInfo(), MODEL_META_INFO_PROCESS)) {
throw new WorkflowEngineException(MODEL_ID_NOT_EXISTS, processModelId);
}
if (StringUtils.hasLength(tenantId) && !Objects.equals(model.getTenantId(), tenantId)) {
throw new WorkflowEngineException(MODEL_ID_NOT_EXISTS, tenantId);
}
return bpmnModelConverter.toVo(model);
}
@ -153,15 +156,21 @@ public class BpmnProcessModelServiceImpl implements BpmnProcessModelService {
if (Objects.isNull(model) && !Objects.equals(model.getMetaInfo(), MODEL_META_INFO_PROCESS)) {
throw new WorkflowEngineException(MODEL_KEY_NOT_EXISTS, processModelKey);
}
if (StringUtils.hasLength(tenantId) && !Objects.equals(model.getTenantId(), tenantId)) {
throw new WorkflowEngineException(MODEL_ID_NOT_EXISTS, tenantId);
}
return bpmnModelConverter.toVo(model);
}
@Override
public void updateBpmModel(BpmnModelUpdateDTO dto) {
Model originModel = repositoryService.createModelQuery()
ModelQuery query = repositoryService.createModelQuery()
.modelId(dto.getProcessModelId())
.modelKey(dto.getKey())
.singleResult();
.modelKey(dto.getKey());
if (StringUtils.hasLength(dto.getTenantId())) {
query.modelTenantId(dto.getTenantId());
}
Model originModel = query.singleResult();
if (ObjectUtils.isEmpty(originModel)) {
throw new WorkflowEngineException(MODEL_ID_NOT_EXISTS, dto.getProcessModelId());
}
@ -181,9 +190,12 @@ public class BpmnProcessModelServiceImpl implements BpmnProcessModelService {
@Override
@Transactional(rollbackFor = Exception.class)
public String deployBpmModelById(String processModelId, String tenantId) {
public String deployBpmModelById(String processModelId, @Nullable String tenantId) {
Model model = this.repositoryService.getModel(processModelId);
if (Objects.isNull(model) || Objects.equals(model.getTenantId(), tenantId)) {
if (Objects.isNull(model)) {
throw new WorkflowEngineException(MODEL_ID_NOT_EXISTS, processModelId);
}
if (StringUtils.hasLength(tenantId) && !Objects.equals(model.getTenantId(), tenantId)) {
throw new WorkflowEngineException(MODEL_ID_NOT_EXISTS, processModelId);
}
@ -195,8 +207,12 @@ public class BpmnProcessModelServiceImpl implements BpmnProcessModelService {
String definitionId = this.processDefinitionService.createProcessDefinition(model, bpmnBytes);
// 挂起原来的流程定义
this.updateProcessDefinitionSuspended(model.getDeploymentId());
ProcessDefinition definition =
repositoryService.createProcessDefinitionQuery().processDefinitionId(definitionId).singleResult();
ProcessDefinitionQuery definitionQuery =
repositoryService.createProcessDefinitionQuery().processDefinitionId(definitionId);
if (StringUtils.hasLength(tenantId)) {
definitionQuery.processDefinitionTenantId(tenantId);
}
ProcessDefinition definition = definitionQuery.singleResult();
model.setDeploymentId(definition.getDeploymentId());
this.repositoryService.saveModel(model);
return definition.getId();

View File

@ -78,9 +78,11 @@ public class BpmnTaskServiceImpl implements BpmnTaskService {
HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery()
.unfinished()
.taskAssignee(dto.getUserId()) // 分配给自己
.taskTenantId(dto.getTenantId())
.orderByTaskCreateTime()
.desc();
if (StringUtils.hasLength(dto.getTenantId())) {
query.taskTenantId(dto.getTenantId());
}
if (StringUtils.hasLength(dto.getCategories())) {
List<String> categories = Arrays.stream(dto.getCategories().split(","))
.map(String::trim).collect(Collectors.toList());
@ -115,9 +117,11 @@ public class BpmnTaskServiceImpl implements BpmnTaskService {
HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery()
.finished() // 已完成
.taskAssignee(dto.getUserId()) // 分配给自己
.taskTenantId(dto.getTenantId())
.orderByHistoricTaskInstanceEndTime()
.desc(); // 审批时间倒序
if (StringUtils.hasLength(dto.getTenantId())) {
query.taskTenantId(dto.getTenantId());
}
if (StrUtil.isNotBlank(dto.getName())) {
query.taskNameLike("%" + dto.getName() + "%");
}
@ -269,14 +273,6 @@ public class BpmnTaskServiceImpl implements BpmnTaskService {
} else {
vo.setResult(APPROVED);
}
// if (!taskDefinitionKeys.contains(vo.getTaskDefinitionKey()) && count == 0) {
// vo.setResult(finalBusinessStatus);
// } else if (Objects.equals(finalBusinessStatus, REJECTED)) {
// vo.setResult(SKIP);
// } else {
// vo.setResult(APPROVED);
// }
taskDefinitionKeys.add(vo.getTaskDefinitionKey());
List<Comment> taskComments = commentByTaskIdMap.getOrDefault(vo.getTaskId(), Collections.emptyList());
@ -356,8 +352,8 @@ public class BpmnTaskServiceImpl implements BpmnTaskService {
}
@Override
public FormInfo getTaskFormModel(String taskId) {
Task task = getTask(taskId, null, null);
public FormInfo getTaskFormModel(String taskId, String tenantId) {
Task task = getTask(taskId, null, tenantId);
if (StringUtils.hasLength(task.getFormKey())) {
return taskService.getTaskFormModel(taskId);
}
@ -366,8 +362,11 @@ public class BpmnTaskServiceImpl implements BpmnTaskService {
@Override
public void assigneeTask(BpmnTaskAssigneeDTO dto) {
Task task =
taskService.createTaskQuery().taskId(dto.getTaskId()).taskTenantId(dto.getTenantId()).singleResult();
TaskQuery query = taskService.createTaskQuery().taskId(dto.getTaskId());
if (StringUtils.hasLength(dto.getTenantId())) {
query.taskTenantId(dto.getTenantId());
}
Task task = query.singleResult();
if (Objects.nonNull(task) && !Objects.equals(task.getAssignee(), dto.getOriginUserId())) {
throw new WorkflowEngineException(TASK_COMPLETE_FAIL_ASSIGN_NOT_SELF);
}

View File

@ -70,6 +70,9 @@ public class FormDefinitionServiceImpl implements FormDefinitionService {
if (Objects.isNull(model)) {
throw new WorkflowEngineException(FORM_MODEL_ID_NOT_EXISTS, dto.getFormModelId());
}
if (StringUtils.hasLength(dto.getTenantId()) && !Objects.equals(model.getTenantId(), dto.getTenantId())) {
throw new WorkflowEngineException(FORM_MODEL_ID_NOT_EXISTS, dto.getFormModelId());
}
FormDefinitionDTO formDefinition = dto.getFormDefinition();
formDefinition.setKey(model.getKey());
formDefinition.setName(model.getName());

View File

@ -10,7 +10,9 @@ import org.flowable.form.api.FormInfo;
import org.flowable.form.api.FormRepositoryService;
import org.flowable.form.api.FormService;
import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.Objects;
@ -38,14 +40,17 @@ public class FormInstanceServiceImpl implements FormInstanceService {
@Override
public void updateFormContent(FormContentUpdateDTO dto) {
Task task = taskService.createTaskQuery().taskId(dto.getTaskId()).singleResult();
if (Objects.nonNull(task) && !Objects.equals(dto.getUserId(), task.getAssignee())) {
throw new WorkflowEngineException(TASK_COMPLETE_FAIL_ASSIGN_NOT_SELF);
TaskQuery query = taskService.createTaskQuery().taskId(dto.getTaskId());
if (StringUtils.hasLength(dto.getTenantId())) {
query.taskTenantId(dto.getTenantId());
}
Task task = query.singleResult();
if (Objects.isNull(task)) {
throw new WorkflowEngineException(TASK_COMPLETE_FAIL_NOT_EXISTS);
}
if (!Objects.equals(dto.getUserId(), task.getAssignee())) {
throw new WorkflowEngineException(TASK_COMPLETE_FAIL_ASSIGN_NOT_SELF);
}
FormInfo formInfo = formRepositoryService.getFormModelById(dto.getFormDefinitionId());
if (Objects.nonNull(task.getProcessInstanceId())) {

View File

@ -182,7 +182,7 @@ public class FormModelServiceImpl implements FormModelService {
throw new WorkflowEngineException(FORM_MODEL_NOT_EXISTS);
}
return deployFormModelById(model.getId(), null);
return deployFormModelById(model.getId(), tenantId);
}
@Override

View File

@ -111,8 +111,9 @@ public class BpmnTaskController {
}
@GetMapping("/form")
public CommonResponse<FormInfo> getTaskForm(@NotBlank(message = "任务 ID 不能为空") @RequestParam String taskId) {
return success(bpmnTaskService.getTaskFormModel(taskId));
public CommonResponse<FormInfo> getTaskForm(@NotBlank(message = "任务 ID 不能为空") @RequestParam String taskId,
@NotBlank(message = "租户不能为空") @RequestParam String tenantId) {
return success(bpmnTaskService.getTaskFormModel(taskId, tenantId));
}
}