修改:数据流程整体修改,增加直送、撤回、退回

This commit is contained in:
zjh 2026-01-12 09:26:27 +08:00
parent 8e3e1d59f7
commit c45f9938e9
13 changed files with 1054 additions and 581 deletions

View File

@ -2,15 +2,22 @@ package com.xdap.self_development.controller;
import com.definesys.mpaas.common.http.Response; import com.definesys.mpaas.common.http.Response;
import com.xdap.self_development.controller.request.ApprovalByPlatformRequest; import com.xdap.self_development.controller.form.ApprovalUserNodeDTO;
import com.xdap.self_development.controller.form.HandleApprovalRequest;
import com.xdap.self_development.controller.form.HandleReturnNodeForm;
import com.xdap.self_development.controller.request.ApprovalNodeRequest; import com.xdap.self_development.controller.request.ApprovalNodeRequest;
import com.xdap.self_development.controller.request.EngineReviewListRequest; import com.xdap.self_development.controller.request.EngineReviewListRequest;
import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.pojo.EngineReviewListPojo;
import com.xdap.self_development.pojo.dto.*; import com.xdap.self_development.pojo.dto.*;
import com.xdap.self_development.service.ActivitiProcessService; import com.xdap.self_development.service.ActivitiProcessService;
import com.xdap.self_development.service.EngineReviewListService; import com.xdap.self_development.service.EngineReviewListService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List; import java.util.List;
/** /**
@ -51,7 +58,8 @@ public class ActivitiProcessController {
//查看审批详情 //查看审批详情
@PostMapping(value = "/showActiviti") @PostMapping(value = "/showActiviti")
public Response showActiviti(@RequestBody ShowActivitiDTO showActivitiDTO) { public Response showActiviti(@RequestBody ShowActivitiDTO showActivitiDTO) {
ActivitiDataAndRecordDTO activitiDataAndRecordDTO = activitiProcessService.showActivitiData(showActivitiDTO); ActivitiDataAndRecordDTO activitiDataAndRecordDTO = activitiProcessService
.showActivitiData(showActivitiDTO);
return Response.ok().data(activitiDataAndRecordDTO); return Response.ok().data(activitiDataAndRecordDTO);
} }
//操作审批 //操作审批
@ -63,7 +71,7 @@ public class ActivitiProcessController {
//查看审批 //查看审批
@PostMapping(value = "/showEngReview") @PostMapping(value = "/showEngReview")
public Response showEngReview(@RequestBody EngineReviewListRequest engineReviewListRequest) { public Response showEngReview(@RequestBody EngineReviewListRequest engineReviewListRequest) {
PageResultDTO msg = engineReviewListService.selectEngineReviewListByUserId(engineReviewListRequest); PageResultDTO<EngineReviewListPojo> msg = engineReviewListService.selectEngineReviewListByUserId(engineReviewListRequest);
return Response.ok().data(msg); return Response.ok().data(msg);
}; };
//申请人退回审批 //申请人退回审批
@ -72,33 +80,66 @@ public class ActivitiProcessController {
String msg = engineReviewListService.returnApproval(approvalId); String msg = engineReviewListService.returnApproval(approvalId);
return Response.ok().data(msg); return Response.ok().data(msg);
}; };
// 获取是否直送
// @GetMapping("/getIsDirect")
// //查询删除所有部署信息谨慎使用 public Response getIsDirect(
// @GetMapping(value = "/deleteDeployment") @RequestParam String flowId
// public void deleteDeployment() { ) {
// boolean flag = activitiProcessService.getIsDirect(flowId);
// List<Deployment> deployments = repositoryService.createDeploymentQuery().list(); return Response.ok().data(flag);
// for (Deployment deployment : deployments) { }
// System.out.println("--------" + deployment); // 获取流程审批人
// repositoryService.deleteDeployment(deployment.getId()); @GetMapping("/getApprovalUsers")
// } public Response getApprovalUsers(
// } @NotBlank @RequestParam String templateId
// //查询删除所有流程信息谨慎使用 ) {
// @GetMapping(value = "/deleteProcessInstances") List<ApprovalUserNodeDTO> nodes = activitiProcessService.getApprovalUsers(templateId);
// public void deleteProcessInstances(@RequestParam(value = "processkey")String processDefinitionKey) { return Response.ok().data(nodes);
// // 1. 查询该流程定义下的所有流程实例ID }
// List<ProcessInstance> instances = runtimeService.createProcessInstanceQuery() // 直送回退回的节点
// .processDefinitionKey(processDefinitionKey) @GetMapping("/directSendingApproval")
// .list(); public Response directSendingApproval(
// @RequestParam @NotBlank String templateId,
// // 2. 逐个删除流程实例级联删除任务变量等 @RequestParam @NotBlank String userId
// for (ProcessInstance instance : instances) { ) {
// // 删除流程实例true表示级联删除所有关联数据 activitiProcessService.directSendingApproval(templateId, userId);
// runtimeService.deleteProcessInstance(instance.getId(), "删除原因:清理测试数据"); return Response.ok();
// } }
// } // 获取可退回节点
@GetMapping("/getReturnNodes")
public Response getReturnNodes(
@NotBlank String flowId
) {
List<String> result = activitiProcessService.getReturnNodes(flowId);
return Response.ok().data(result);
}
// 处理人退回指定节点
@PostMapping("/handleReturnToNode")
public Response handleReturnToNode(
@RequestBody @Valid HandleReturnNodeForm form,
BindingResult bindingResult
) {
if (bindingResult.hasErrors()) {
bindingResult.getFieldErrors().forEach(error -> {
throw new CommonException(error.getDefaultMessage());
});
}
activitiProcessService.handleReturnToNode(form);
return Response.ok();
}
// 发起人撤回审批
@PostMapping("/handleReturn")
public Response handleReturn(
@RequestBody @Valid HandleApprovalRequest request,
BindingResult bindingResult
) {
if (bindingResult.hasErrors()) {
bindingResult.getFieldErrors().forEach(error -> {
throw new CommonException(error.getDefaultMessage());
});
}
activitiProcessService.handleReturn(request);
return Response.ok();
}
} }

View File

@ -105,6 +105,13 @@ public class EngineReviewListPojo implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date lastUpdateDate; private Date lastUpdateDate;
/**
* 退回标记
*/
private Integer returnNum;
/**
* 前一个节点
*/
private Integer preNode;
} }

View File

@ -84,5 +84,27 @@ public class ParamApprovalRecordPojo implements Serializable {
*/ */
private Date lastUpdateDate; private Date lastUpdateDate;
private Integer approvalLevel;
public ParamApprovalRecordPojo(
String approvalId,
String nodeName,
String assignee,
String operator,
Date operateTime,
String approvalComment,
Integer nodeOrder,
Date creationDate,
Integer approvalLevel
) {
this.approvalId = approvalId;
this.nodeName = nodeName;
this.assignee = assignee;
this.operator = operator;
this.operateTime = operateTime;
this.approvalComment = approvalComment;
this.nodeOrder = nodeOrder;
this.creationDate = creationDate;
this.approvalLevel = approvalLevel;
}
} }

View File

@ -1,8 +1,10 @@
package com.xdap.self_development.pojo.dto; package com.xdap.self_development.pojo.dto;
import com.xdap.self_development.pojo.view.FlowNode;
import lombok.Data; import lombok.Data;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
@Data @Data
public class ActivitiDataAndRecordDTO { public class ActivitiDataAndRecordDTO {
@ -10,6 +12,6 @@ public class ActivitiDataAndRecordDTO {
private String processTitle; private String processTitle;
private String modelName; private String modelName;
private ArrayList<ActivitiDataDTO> activitiDataDTOS; private ArrayList<ActivitiDataDTO> activitiDataDTOS;
private ArrayList<ActivitiRecordDTO> activitiRecordDTOS; private List<FlowNode> flowNodes;
} }

View File

@ -12,7 +12,7 @@ import java.util.List;
// CASE af.flow_status WHEN 'COMPLETE' THEN 1 WHEN 'APPROVING' THEN 2 WHEN 'DRAFT' THEN 3 WHEN 'REJECTED' THEN 4 ELSE 5 END ASC, // CASE af.flow_status WHEN 'COMPLETE' THEN 1 WHEN 'APPROVING' THEN 2 WHEN 'DRAFT' THEN 3 WHEN 'REJECTED' THEN 4 ELSE 5 END ASC,
@SQLQuery(value = { @SQLQuery(value = {
@SQL(view = "getAllReportApprovalList", @SQL(view = "getAllReportApprovalList",
sql = "WITH RankedFlows AS ( SELECT af.id AS flowId, r.id AS reportId, af.process_title AS title, af.flow_status AS status, af.create_by AS createBy , xu.username AS username, af.created_time AS createdTime, ac.assignees AS current_users, ROW_NUMBER() OVER (PARTITION BY af.template_id ORDER BY af.created_time DESC) AS rn FROM yfsjglpt_model_approval_flow af LEFT JOIN approval_config ac ON af.id = ac.approval_id AND af.current_node = ac.node_order LEFT JOIN yfsjglpt_model_benchmarking_report r ON af.template_id = r.id LEFT JOIN xdap_users xu ON xu.id = af.create_by WHERE af.flow_type = 2 ) SELECT flowId, reportId, title, status, createBy , username, createdTime, current_users FROM RankedFlows WHERE rn = 1 AND r.title LIKE CONCAT('%', #title, '%') AND af.flow_status LIKE CONCAT('%', #status, '%') AND af.created_time LIKE CONCAT('%', #createdTime, '%') AND xu.username LIKE CONCAT('%', #username, '%') ORDER BY createdTime DESC") sql = "WITH RankedFlows AS (SELECT af.id AS flowId, r.id AS reportId, af.process_title AS title, af.flow_status AS status, af.create_by AS createBy, xu.username AS username, af.created_time AS createdTime, ac.assignees AS current_users, ROW_NUMBER() OVER (PARTITION BY af.template_id ORDER BY af.created_time DESC) AS rn FROM yfsjglpt_model_approval_flow af LEFT JOIN approval_config ac ON af.id = ac.approval_id AND af.current_node = ac.node_order LEFT JOIN yfsjglpt_model_benchmarking_report r ON af.template_id = r.id LEFT JOIN xdap_users xu ON xu.id = af.create_by WHERE af.flow_type = 2) SELECT flowId, reportId, title, status, createBy, username, createdTime, current_users FROM RankedFlows WHERE rn = 1 AND title LIKE CONCAT('%', #title, '%') AND status LIKE CONCAT('%', #status, '%') AND createdTime LIKE CONCAT('%', #createdTime, '%') AND username LIKE CONCAT('%', #username, '%') ORDER BY createdTime DESC")
}) })
@Data @Data
public class TodoAndReportListView { public class TodoAndReportListView {

View File

@ -31,6 +31,7 @@ public class TodoAndReportView {
private String projectName; private String projectName;
private String projectNumber; private String projectNumber;
private String createBy; private String createBy;
private Integer returnNum;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Timestamp uploadTime; private Timestamp uploadTime;
private String filePath; private String filePath;

View File

@ -13,7 +13,7 @@ import java.util.List;
@SQLQuery(value = { @SQLQuery(value = {
// CASE af.flow_status WHEN 'COMPLETE' THEN 1 WHEN 'APPROVING' THEN 2 WHEN 'DRAFT' THEN 3 WHEN 'REJECTED' THEN 4 ELSE 5 END ASC // CASE af.flow_status WHEN 'COMPLETE' THEN 1 WHEN 'APPROVING' THEN 2 WHEN 'DRAFT' THEN 3 WHEN 'REJECTED' THEN 4 ELSE 5 END ASC
@SQL(view = "getAllApproval", @SQL(view = "getAllApproval",
sql = "WITH RankedFlows AS ( SELECT af.id AS flowId, t.id AS templateId, t.template_name AS templateName, t.version AS version, af.flow_status AS status , af.create_by AS createBy, xu.username AS username, af.created_time AS createdTime, ac.assignees AS current_users , ROW_NUMBER() OVER (PARTITION BY af.template_id ORDER BY af.created_time DESC) AS rn FROM yfsjglpt_model_approval_flow af LEFT JOIN approval_config ac ON af.id = ac.approval_id AND af.current_node = ac.node_order LEFT JOIN yfsjglpt_model_template t ON af.template_id = t.id LEFT JOIN xdap_users xu ON xu.id = af.create_by WHERE af.flow_type = 1 ) SELECT flowId, templateId, templateName, version, status , createBy, username, createdTime, current_users FROM RankedFlows WHERE t.template_name LIKE CONCAT('%', #templateName, '%') AND af.flow_status LIKE CONCAT('%', #status, '%') AND af.created_time LIKE CONCAT('%', #createdTime, '%') AND xu.username LIKE CONCAT('%', #username, '%') AND rn = 1 ORDER BY createdTime DESC"), sql = "WITH RankedFlows AS ( SELECT af.id AS flowId, t.id AS templateId, t.template_name AS templateName, t.version AS version, af.flow_status AS status , af.create_by AS createBy, xu.username AS username, af.created_time AS createdTime, ac.assignees AS current_users , ROW_NUMBER() OVER (PARTITION BY af.template_id ORDER BY af.created_time DESC) AS rn FROM yfsjglpt_model_approval_flow af LEFT JOIN approval_config ac ON af.id = ac.approval_id AND af.current_node = ac.node_order LEFT JOIN yfsjglpt_model_template t ON af.template_id = t.id LEFT JOIN xdap_users xu ON xu.id = af.create_by WHERE af.flow_type = 1 ) SELECT flowId, templateId, templateName, version, status , createBy, username, createdTime, current_users FROM RankedFlows WHERE rn = 1 AND templateName LIKE CONCAT('%', #templateName, '%')AND status LIKE CONCAT('%', #status, '%')AND createdTime LIKE CONCAT('%', #createdTime, '%')AND username LIKE CONCAT('%', #username, '%') ORDER BY createdTime DESC"),
@SQL(view = "getApprovalByUserIdAndIds", @SQL(view = "getApprovalByUserIdAndIds",
sql = "SELECT af.id AS \"flowId\", t.id AS \"templateId\", t.template_name AS \"templateName\", t.version AS \"version\", af.flow_status AS \"status\" , af.create_by AS \"createBy\", af.created_time AS \"createdTime\" , CASE WHEN current_node = 'PROOFREAD' THEN proofread_users WHEN current_node = 'REVIEW' THEN review_users WHEN current_node = 'COUNTERSIGN' THEN countersign_users WHEN current_node = 'APPROVE' THEN approve_users END AS current_users FROM yfsjglpt_model_approval_flow af JOIN yfsjglpt_model_template t ON af.template_id = t.id WHERE t.template_name like CONCAT('%',#templateName, '%') and af.flow_status like CONCAT('%',#status, '%') and af.flow_type = 1 and af.id NOT IN (#ids) AND af.create_by = #createBy"), sql = "SELECT af.id AS \"flowId\", t.id AS \"templateId\", t.template_name AS \"templateName\", t.version AS \"version\", af.flow_status AS \"status\" , af.create_by AS \"createBy\", af.created_time AS \"createdTime\" , CASE WHEN current_node = 'PROOFREAD' THEN proofread_users WHEN current_node = 'REVIEW' THEN review_users WHEN current_node = 'COUNTERSIGN' THEN countersign_users WHEN current_node = 'APPROVE' THEN approve_users END AS current_users FROM yfsjglpt_model_approval_flow af JOIN yfsjglpt_model_template t ON af.template_id = t.id WHERE t.template_name like CONCAT('%',#templateName, '%') and af.flow_status like CONCAT('%',#status, '%') and af.flow_type = 1 and af.id NOT IN (#ids) AND af.create_by = #createBy"),
@SQL(view = "getTodoAndTemplate", @SQL(view = "getTodoAndTemplate",

View File

@ -1,13 +1,21 @@
package com.xdap.self_development.service; package com.xdap.self_development.service;
import com.xdap.self_development.controller.form.ApprovalUserNodeDTO;
import com.xdap.self_development.controller.form.HandleApprovalRequest;
import com.xdap.self_development.controller.form.HandleReturnNodeForm;
import com.xdap.self_development.controller.request.ApprovalByPlatformRequest; import com.xdap.self_development.controller.request.ApprovalByPlatformRequest;
import com.xdap.self_development.controller.request.ApprovalNodeRequest; import com.xdap.self_development.controller.request.ApprovalNodeRequest;
import com.xdap.self_development.enums.ParamValueVersionEnum;
import com.xdap.self_development.pojo.*;
import com.xdap.self_development.pojo.dto.ActivitiDataAndRecordDTO; import com.xdap.self_development.pojo.dto.ActivitiDataAndRecordDTO;
import com.xdap.self_development.pojo.dto.ActivitiDataDTO; import com.xdap.self_development.pojo.dto.ActivitiDataDTO;
import com.xdap.self_development.pojo.dto.HandleApprovalDTO; import com.xdap.self_development.pojo.dto.HandleApprovalDTO;
import com.xdap.self_development.pojo.dto.ShowActivitiDTO; import com.xdap.self_development.pojo.dto.ShowActivitiDTO;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public interface ActivitiProcessService { public interface ActivitiProcessService {
@ -20,4 +28,47 @@ public interface ActivitiProcessService {
String handleApproval(HandleApprovalDTO handleApprovalDTO); String handleApproval(HandleApprovalDTO handleApprovalDTO);
void startActivitiByPlatform(ApprovalByPlatformRequest request); void startActivitiByPlatform(ApprovalByPlatformRequest request);
boolean getIsDirect(String flowId);
List<ApprovalUserNodeDTO> getApprovalUsers(@NotBlank String flowId);
void directSendingApproval(@NotBlank String templateId, @NotBlank String userId);
List<String> getReturnNodes(@NotBlank String flowId);
void handleReturnToNode(@Valid HandleReturnNodeForm form);
void handleReturn(@Valid HandleApprovalRequest request);
void processApproval(
EngineReviewListPojo flow,
HandleApprovalDTO request,
ApprovalConfigPojo currentNode,
ParamApprovalRecordPojo lastedRecord,
ArrayList<EngineParamDetailPojo> list
);
void cancelProcess(
EngineReviewListPojo flow,
ApprovalConfigPojo node,
ParamValueVersionEnum status,
String userId
);
void updateTasks(
EngineReviewListPojo flow,
String status,
Integer enableReturn
);
void processNextNode(
EngineReviewListPojo flow,
ApprovalConfigPojo currentNode,
String userId,
List<EngineParamDetailPojo> list
);
void addNodeTodo(
EngineReviewListPojo flow,
ApprovalConfigPojo node,
String createBy,
Integer enableReturn
);
} }

View File

@ -51,6 +51,6 @@ public interface BenchmarkingReportService {
void cancelProcess(ApprovalFlow flow, ApprovalConfigPojo node, String status, String userId); void cancelProcess(ApprovalFlow flow, ApprovalConfigPojo node, String status, String userId);
void updateTasks(ApprovalFlow flow, String status); void updateTasks(ApprovalFlow flow, String status, Integer enableReturn);
} }

View File

@ -572,7 +572,7 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
.orderBy("approval_time", "desc") .orderBy("approval_time", "desc")
.doQueryFirst(ApprovalRecord.class); .doQueryFirst(ApprovalRecord.class);
String lockKey = FLOW_LOCK_PREFIX + flow.getId() + ":" + currentNode; String lockKey = FLOW_LOCK_PREFIX + flow.getId() + ":" + currentNode.getNodeName();
String lockValue = UUID.randomUUID().toString(); String lockValue = UUID.randomUUID().toString();
boolean lockAcquired = redisLockUtil boolean lockAcquired = redisLockUtil
.tryLock(lockKey, lockValue, FLOW_LOCK_EXPIRE_SECONDS, TimeUnit.SECONDS); .tryLock(lockKey, lockValue, FLOW_LOCK_EXPIRE_SECONDS, TimeUnit.SECONDS);
@ -670,7 +670,7 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
.update("status", report.getStatus()) .update("status", report.getStatus())
.doUpdate(BenchmarkingReport.class); .doUpdate(BenchmarkingReport.class);
// 待办环节修改 // 待办环节修改
myself.updateTasks(flow, "已完成"); myself.updateTasks(flow, "已完成", 0);
} else { } else {
flow.setCurrentNode(nextNode.getNodeOrder()); flow.setCurrentNode(nextNode.getNodeOrder());
myself.addNodeTodo(flow, nextNode, report, userId, 0); myself.addNodeTodo(flow, nextNode, report, userId, 0);
@ -713,7 +713,7 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
} }
// 更新已办和发起的状态 // 更新已办和发起的状态
myself.updateTasks(flow, node.getNodeName()); myself.updateTasks(flow, node.getNodeName(), enableReturn);
if (!list.isEmpty()) { if (!list.isEmpty()) {
bd.getBusinessDatabase().doBatchInsert(list); bd.getBusinessDatabase().doBatchInsert(list);
@ -747,14 +747,32 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
report.setStatus(status); report.setStatus(status);
bd.getBusinessDatabase() bd.getBusinessDatabase()
.rowid("id", report.getRowId()) .rowid("id", report.getRowId())
.update("status", report.getStatus()) .update("status", "DRAFT")
.update("return_num", report.getReturnNum() + 1) .update("return_num", report.getReturnNum() + 1)
.doUpdate(BenchmarkingReport.class); .doUpdate(BenchmarkingReport.class);
// 增加拒绝待办
myself.updateTasks(flow, "已拒绝"); if (Objects.equals(status, "REJECTED")) {
TodoTaskPojo todoTask = new TodoTaskPojo();
todoTask.setCreatedById(userId);
todoTask.setCreatedBy(xdapDeptUsersService.selectUserByID(userId).getUsername());
todoTask.setCurrentNode(node.getNodeName());
todoTask.setDataType("对标报告拒绝");
todoTask.setDocumentNo(flow.getId());
todoTask.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
todoTask.setIsDelete(0);
todoTask.setModelId(report.getId());
todoTask.setModelName(report.getTitle());
todoTask.setProcessTitle("拒绝提醒:"+flow.getProcessTitle());
todoTask.setStatusCode(flow.getFlowStatus());
todoTask.setVersionNumber(0);
todoTask.setOwnerId(flow.getCreateBy());
todoTask.setCurrentProcessor(JSON.toJSONString(Collections.singletonList(flow.getCreateBy())));
bd.getBusinessDatabase().doInsert(todoTask);
}
myself.updateTasks(flow, Objects.equals(report.getStatus(), "RETURNED") ? "已撤回" : "已拒绝", 0);
} }
public void updateTasks(ApprovalFlow flow, String status) { public void updateTasks(ApprovalFlow flow, String status, Integer enableReturn) {
// 更新已办和发起的节点状态 // 更新已办和发起的节点状态
bd.getBusinessDatabase() bd.getBusinessDatabase()
.eq("document_no", flow.getId()) .eq("document_no", flow.getId())
@ -763,6 +781,7 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
bd.getBusinessDatabase() bd.getBusinessDatabase()
.eq("document_no", flow.getId()) .eq("document_no", flow.getId())
.update("current_node", status) .update("current_node", status)
.update("enable_return", enableReturn)
.doUpdate(InitiatedTaskPojo.class); .doUpdate(InitiatedTaskPojo.class);
} }

View File

@ -479,7 +479,11 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
} }
// 处理下一节点流转 // 处理下一节点流转
public void processNextNode(ApprovalFlow flow, ApprovalConfigPojo currentNode, String userId) { public void processNextNode(
ApprovalFlow flow,
ApprovalConfigPojo currentNode,
String userId
) {
// 检查当前节点是否满足流转条件 // 检查当前节点是否满足流转条件
if (!myself.checkNodeComplete(flow, currentNode)) { if (!myself.checkNodeComplete(flow, currentNode)) {
return; return;
@ -655,6 +659,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
bd.getBusinessDatabase() bd.getBusinessDatabase()
.eq("document_no", flow.getId()) .eq("document_no", flow.getId())
.update("current_node", status) .update("current_node", status)
.update("enable_return", enableReturn)
.doUpdate(InitiatedTaskPojo.class); .doUpdate(InitiatedTaskPojo.class);
} }

View File

@ -230,7 +230,7 @@ public class TodoTaskServiceImpl implements TodoTaskService {
ArrayList<TodoTaskPojo> todoTaskPojos = new ArrayList<>(); ArrayList<TodoTaskPojo> todoTaskPojos = new ArrayList<>();
ArrayList<InitiatedTaskPojo> taskPojos = new ArrayList<>(); ArrayList<InitiatedTaskPojo> taskPojos = new ArrayList<>();
// todo清除待办 // TODO:清除待办
XdapUsers xdapUsersPojo = xdapDeptUsersService.selectUserByID(userID); XdapUsers xdapUsersPojo = xdapDeptUsersService.selectUserByID(userID);
DataEntryEngineModelPojo modelPojo = dataEntryEngineModelService.selectBymodelId(modelId); DataEntryEngineModelPojo modelPojo = dataEntryEngineModelService.selectBymodelId(modelId);