update - 新增转交、更新流程变量功能

This commit is contained in:
wangli 2024-05-23 16:31:56 +08:00
parent 0cab9d6e0a
commit 66d73c3579
9 changed files with 146 additions and 9 deletions

View File

@ -43,7 +43,8 @@ public enum BpmErrorCode implements IProjectRespCode {
PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF("05003", "流程取消失败,该流程不是你发起的"),
PROCESS_INSTANCE_NOT_EXISTS("05004", "流程实例不存在"),
PROCESS_INSTANCE_ID_NOT_EXISTS("05005", "流程实例【{}】不存在"),
PROCESS_INSTANCE_CREATE_ERROR("05002", ""),
PROCESS_INSTANCE_CREATE_ERROR("05006", ""),
PROCESS_INSTANCE_VARIABLES_UPDATE_NOT_SUPPORTED("05006", "该流程实例不支持更新变量"),
// ========== bpmn task 06-001 ==========
TASK_COMPLETE_FAIL_NOT_EXISTS("06001", "未找到指定审批任务"),
TASK_COMPLETE_FAIL_ASSIGN_NOT_SELF("06002", "该任务的审批人不是你"),

View File

@ -1,6 +1,12 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.*;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceCancelDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceCreateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceCreateWithFormDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceMyPageReqVO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceQueryDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessVariablesUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.HistoricProcessInstanceSearchDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessInstancePageItemVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessInstanceVO;
@ -90,4 +96,6 @@ public interface BpmnProcessInstanceService {
ObjectNode getProcessInstanceGraphical(String processInstanceId, @Nullable String tenantId);
BpmPageResult<HistoricProcessInstanceVO> historicProcessInstancePage(HistoricProcessInstanceSearchDTO dto);
Boolean updateProcessVariables(BpmnProcessVariablesUpdateDTO dto);
}

View File

@ -4,8 +4,13 @@ import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskAssigneeDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskAuditDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskCommentDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskPageSearchDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskTransferDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.*;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnHistoricTaskInstanceVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnTaskDonePageItemVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnTaskInstanceVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnTaskTodoPageItemVO;
import org.flowable.form.api.FormInfo;
import java.util.List;
@ -73,5 +78,5 @@ public interface BpmnTaskService {
void commentTask(BpmnTaskCommentDTO dto);
Boolean transferTask(BpmnTaskTransferDTO dto);
}

View File

@ -0,0 +1,21 @@
package cn.axzo.workflow.core.service.dto.request.bpmn.process;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.util.Map;
/**
* 更新流程实例变量
*
* @author wangli
* @since 2024/5/23 16:04
*/
@ApiModel("更新流程实例变量")
@Data
public class BpmnProcessVariablesUpdateDTO {
private String processInstanceId;
private Map<String, Object> variables;
}

View File

@ -0,0 +1,31 @@
package cn.axzo.workflow.core.service.dto.request.bpmn.task;
import io.swagger.annotations.ApiModel;
import lombok.Data;
/**
* 转交审批任务的入参模型
*
* @author wangli
* @since 2024/5/23 16:03
*/
@ApiModel("转交审批任务的入参模型")
@Data
public class BpmnTaskTransferDTO {
/**
* 任务id列表
*/
private String taskId;
/**
* 原任务处理人id
*/
private String originUserId;
/**
* 目标任务处理人id
*/
private String targetUserId;
}

View File

@ -13,6 +13,7 @@ import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanc
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceCreateWithFormDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceMyPageReqVO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceQueryDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessVariablesUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.HistoricProcessInstanceSearchDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessDefinitionVO;
@ -88,6 +89,7 @@ import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_DEFINITION
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_CANCEL_FAIL_NOT_EXISTS;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_NOT_EXISTS;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_INSTANCE_VARIABLES_UPDATE_NOT_SUPPORTED;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.PROCESS_OPERATION_PARAM_VALID_ERROR;
@Service
@ -930,4 +932,23 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
return stringBuilder.replace(start + 7, 10, "count(1)").toString();
}
@Override
public Boolean updateProcessVariables(BpmnProcessVariablesUpdateDTO dto) {
if (CollectionUtils.isEmpty(dto.getVariables())) {
return false;
}
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(dto.getProcessInstanceId()).includeProcessVariables().singleResult();
if (Objects.isNull(processInstance)) {
throw new WorkflowEngineException(PROCESS_INSTANCE_VARIABLES_UPDATE_NOT_SUPPORTED);
}
Map<String, Object> processVariables = processInstance.getProcessVariables();
Map<String, Object> newVariables = new HashMap<>();
dto.getVariables().forEach((key, value) -> {
if (processVariables.containsKey(key)) {
newVariables.put(key, value);
}
});
runtimeService.setVariables(dto.getProcessInstanceId(), newVariables);
return true;
}
}

View File

@ -12,6 +12,7 @@ import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskAssigneeDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskAuditDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskCommentDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskPageSearchDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskTransferDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnHistoricTaskInstanceVO;
@ -547,4 +548,13 @@ public class BpmnTaskServiceImpl implements BpmnTaskService {
return multiInstanceRootExecution;
}
@Override
public Boolean transferTask(BpmnTaskTransferDTO dto) {
if (!StringUtils.hasText(dto.getTaskId())) {
return false;
}
Task task = checkTask(null, dto.getOriginUserId(), dto.getTaskId());
taskService.setAssignee(task.getId(), dto.getTargetUserId());
return true;
}
}

View File

@ -2,7 +2,13 @@ package cn.axzo.workflow.server.controller.web.bpmn;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.service.BpmnProcessInstanceService;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.*;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceCancelDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceCreateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceCreateWithFormDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceMyPageReqVO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessInstanceQueryDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.BpmnProcessVariablesUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.process.HistoricProcessInstanceSearchDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessInstancePageItemVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.process.BpmnProcessInstanceVO;
@ -14,7 +20,14 @@ import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
@ -53,6 +66,17 @@ public class BpmnProcessInstanceController {
return success(result);
}
/**
* 更新流程实例变量
*
* @return
*/
@PostMapping("/update")
public CommonResponse<Boolean> updateProcessVariables(@Validated @RequestBody BpmnProcessVariablesUpdateDTO dto) {
log.info("更新流程实例变量updateProcessVariables===>>>参数:{}", JSON.toJSONString(dto));
return success(bpmnProcessInstanceService.updateProcessVariables(dto));
}
@PostMapping("/form/create")
public CommonResponse<String> createProcessInstanceWith(@Validated @RequestBody BpmnProcessInstanceCreateWithFormDTO dto) {
log.info("发起审核createProcessInstanceWith===>>>参数:{}", JSON.toJSONString(dto));

View File

@ -4,14 +4,25 @@ import cn.axzo.workflow.core.service.BpmnTaskService;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskAssigneeDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskAuditDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskPageSearchDTO;
import cn.axzo.workflow.core.service.dto.request.bpmn.task.BpmnTaskTransferDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.*;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnHistoricTaskInstanceGroupVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnHistoricTaskInstanceVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnTaskDonePageItemVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnTaskInstanceVO;
import cn.axzo.workflow.core.service.dto.response.bpmn.task.BpmnTaskTodoPageItemVO;
import cn.azxo.framework.common.model.CommonResponse;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.flowable.form.api.FormInfo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
@ -75,7 +86,12 @@ public class BpmnTaskController {
return success(true);
}
@Operation(summary = "转办")
@PostMapping("/transfer")
public CommonResponse<Boolean> transferTask(@Validated @RequestBody BpmnTaskTransferDTO dto) {
bpmnTaskService.transferTask(dto);
return success(true);
}
/**
* 获取指定流程实例的审批过程信息
* <p>