修改:模板流程整体修改,所有退回都可以直送,完善退回、撤回和处理审批的细节;完善流程整体功能
This commit is contained in:
parent
d2da60badc
commit
2ea9e70932
@ -24,6 +24,6 @@ public class BusinessDatabase {
|
||||
|
||||
@Bean
|
||||
public MpaasQuery getTCDatabase() {
|
||||
return queryFactory.buildFromDatasource("yc_lrs_test_relsult");
|
||||
return queryFactory.buildFromDatasource(DatasourceConstant.XDAP_MYSQL_PREFIX + tenantId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@ import com.definesys.mpaas.query.db.PageQueryResult;
|
||||
import com.xdap.runtime.service.RuntimeDatasourceService;
|
||||
import com.xdap.self_development.controller.form.*;
|
||||
import com.xdap.self_development.exception.CommonException;
|
||||
import com.xdap.self_development.pojo.dto.ApprovalNodeDTO;
|
||||
import com.xdap.self_development.pojo.view.ApprovalFlowNodeView;
|
||||
import com.xdap.self_development.pojo.view.DepartmentUserView;
|
||||
import com.xdap.self_development.pojo.view.TemplateChangeView;
|
||||
@ -25,6 +26,15 @@ public class TemplateApprovalController {
|
||||
@Resource
|
||||
private RuntimeDatasourceService runtimeDatasourceService;
|
||||
|
||||
// 获取流程审批人
|
||||
@GetMapping("/getApprovalUsers")
|
||||
public Response getApprovalUsers(
|
||||
@NotBlank @RequestParam String templateId
|
||||
) {
|
||||
List<ApprovalUserNodeDTO> nodes = templateApprovalService.getApprovalUsers(templateId);
|
||||
return Response.ok().data(nodes);
|
||||
}
|
||||
|
||||
// 获取用户和部门
|
||||
@GetMapping("/getUsersByCondition")
|
||||
public Response getUsersByCondition(
|
||||
@ -51,13 +61,27 @@ public class TemplateApprovalController {
|
||||
return Response.ok().data(templateApprovalService.startApproval(request));
|
||||
}
|
||||
|
||||
// 发起人拒绝后重新发起审批
|
||||
@GetMapping("/restartApproval")
|
||||
@PostMapping("/restartApproval")
|
||||
public Response restartApproval(
|
||||
@RequestBody @Valid StartApprovalRequest request,
|
||||
BindingResult bindingResult
|
||||
) {
|
||||
if (bindingResult.hasErrors()) {
|
||||
bindingResult.getFieldErrors().forEach(error -> {
|
||||
throw new CommonException(error.getDefaultMessage());
|
||||
});
|
||||
}
|
||||
templateApprovalService.restartApproval(request);
|
||||
return Response.ok();
|
||||
}
|
||||
|
||||
// 直送回退回的节点
|
||||
@GetMapping("/directSendingApproval")
|
||||
public Response directSendingApproval(
|
||||
@RequestParam @NotBlank String templateId,
|
||||
@RequestParam @NotBlank String userId
|
||||
) {
|
||||
templateApprovalService.restartApproval(templateId, userId);
|
||||
templateApprovalService.directSendingApproval(templateId, userId);
|
||||
return Response.ok();
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
package com.xdap.self_development.controller.form;
|
||||
|
||||
import com.xdap.api.moudle.user.pojo.XdapUsers;
|
||||
import com.xdap.self_development.pojo.view.XdapUserView;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class ApprovalUserNodeDTO {
|
||||
private String nodeName;
|
||||
private List<XdapUsers> assignees;
|
||||
private Integer nodeOrder;
|
||||
}
|
||||
@ -21,6 +21,7 @@ public class ApprovalFlow extends MpaasBasePojo {
|
||||
private Integer currentNode; // 节点:PROOFREAD, REVIEW, COUNTERSIGN, APPROVE
|
||||
private String flowStatus; //DRAFT(草稿)、APPROVING(审批中)、COMPLETE(已完成)、RETURNED(已撤回)、REJECTED(已拒绝)
|
||||
private Integer returnNum;
|
||||
private Integer preNode;
|
||||
|
||||
private String createBy;
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
|
||||
@ -103,5 +103,9 @@ public class InitiatedTaskPojo implements Serializable {
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date lastUpdateDate;
|
||||
|
||||
/**
|
||||
* 是否可退回
|
||||
*/
|
||||
private Integer enableReturn;
|
||||
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import com.xdap.self_development.pojo.ApprovalConfigPojo;
|
||||
import com.xdap.self_development.pojo.ApprovalFlow;
|
||||
import com.xdap.self_development.pojo.ApprovalRecord;
|
||||
import com.xdap.self_development.pojo.Template;
|
||||
import com.xdap.self_development.pojo.dto.ApprovalNodeDTO;
|
||||
import com.xdap.self_development.pojo.view.ApprovalFlowNodeView;
|
||||
import com.xdap.self_development.pojo.view.TemplateChangeView;
|
||||
import com.xdap.self_development.pojo.view.TodoAndTemplateView;
|
||||
@ -17,7 +18,7 @@ import java.util.List;
|
||||
public interface TemplateApprovalService {
|
||||
String startApproval(StartApprovalRequest request);
|
||||
|
||||
void restartApproval(@NotBlank String templateId, @NotBlank String userId);
|
||||
void directSendingApproval(@NotBlank String templateId, @NotBlank String userId);
|
||||
|
||||
PageQueryResult<TodoAndTemplateView> getApprovalList(ApprovalListForm form);
|
||||
|
||||
@ -41,9 +42,13 @@ public interface TemplateApprovalService {
|
||||
|
||||
boolean checkNodeComplete(ApprovalFlow flow, ApprovalConfigPojo node);
|
||||
|
||||
void updateTasks(ApprovalFlow flow, String status);
|
||||
void updateTasks(ApprovalFlow flow, String status, Integer enableReturn);
|
||||
|
||||
void addNodeTodo(ApprovalFlow flow, ApprovalConfigPojo node, Template template, String createBy);
|
||||
void addNodeTodo(ApprovalFlow flow, ApprovalConfigPojo node, Template template, String createBy, Integer enableReturn);
|
||||
|
||||
List<String> getReturnNodes(@NotBlank String flowId);
|
||||
|
||||
List<ApprovalUserNodeDTO> getApprovalUsers(@NotBlank String templateId);
|
||||
|
||||
void restartApproval(@Valid StartApprovalRequest request);
|
||||
}
|
||||
|
||||
@ -47,7 +47,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String startApproval(StartApprovalRequest request) {
|
||||
// 验证模板能否发起审批
|
||||
// 验证能否发起审批
|
||||
Template template = bd.getBusinessDatabase()
|
||||
.rowid("id", request.getTemplateRowId())
|
||||
.doQueryFirst(Template.class);
|
||||
@ -75,7 +75,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
throw new CommonException("空参数模板不允许发起审批");
|
||||
}
|
||||
|
||||
// 创建审批流程
|
||||
// 新增流程
|
||||
ApprovalFlow flow = new ApprovalFlow();
|
||||
flow.setTemplateId(template.getId());
|
||||
flow.setCurrentNode(1);
|
||||
@ -86,9 +86,10 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
flow.setFlowType(1); // 设置为模板审批流程
|
||||
flow.setExplanation(request.getExplanation());
|
||||
flow.setReturnNum(template.getReturnNum());
|
||||
flow.setPreNode(-1);// 标识没有退回节点
|
||||
bd.getBusinessDatabase().doInsert(flow);
|
||||
|
||||
// 创建审批配置
|
||||
// 新增流程配置
|
||||
List<ApprovalConfigPojo> approvalConfigs = new ArrayList<>();
|
||||
ApprovalNodeDTO firstNode = new ApprovalNodeDTO();
|
||||
boolean hasUsers = false;
|
||||
@ -118,7 +119,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
}
|
||||
bd.getBusinessDatabase().doBatchInsert(approvalConfigs);
|
||||
|
||||
// 新增待办
|
||||
// 新增我的待办
|
||||
List<TodoTaskPojo> list = new ArrayList<>();
|
||||
for (String person : firstNode.getAssignees()) {
|
||||
TodoTaskPojo todoTask = new TodoTaskPojo();
|
||||
@ -152,9 +153,10 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
initiatedTask.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
|
||||
initiatedTask.setIsDelete(0);
|
||||
initiatedTask.setModelId(flow.getTemplateId());
|
||||
initiatedTask.setEnableReturn(1);
|
||||
bd.getBusinessDatabase().doInsert(initiatedTask);
|
||||
|
||||
// 增加发起记录
|
||||
// 新增发起记录
|
||||
bd.getBusinessDatabase().doInsert(
|
||||
new ApprovalRecord(
|
||||
flow.getId(),
|
||||
@ -168,7 +170,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
);
|
||||
|
||||
|
||||
// 更新模板状态为校对中
|
||||
// 更新模板状态为审批中
|
||||
template.setStatus("APPROVING");
|
||||
bd.getBusinessDatabase()
|
||||
.rowid("id", template.getRowId())
|
||||
@ -179,51 +181,50 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void restartApproval(String templateId, String userId) {
|
||||
// 判断当前模板是否存在
|
||||
public void directSendingApproval(String templateId, String userId) {
|
||||
// 获取模板
|
||||
Template template = bd.getBusinessDatabase()
|
||||
.eq("id", templateId)
|
||||
.eq("status", "DRAFT")
|
||||
.doQueryFirst(Template.class);
|
||||
if (template == null) {
|
||||
throw new CommonException("模板不存在");
|
||||
}
|
||||
|
||||
// 查找上次未完成的流程
|
||||
ApprovalFlow approvalFlow = bd.getBusinessDatabase()
|
||||
.eq("templateId", templateId)
|
||||
.eq("flow_status", "REJECTED")
|
||||
// 获取到模板最近一次未完成的流程
|
||||
ApprovalFlow flow = bd.getBusinessDatabase()
|
||||
.eq("template_id", templateId)
|
||||
.ne("pre_node", -1)
|
||||
.orderBy("created_time", "desc")
|
||||
.doQueryFirst(ApprovalFlow.class);
|
||||
if (approvalFlow == null) {
|
||||
throw new CommonException("没有上次未完成的流程");
|
||||
if (flow == null) {
|
||||
throw new CommonException("模板没有未完成的流程");
|
||||
}
|
||||
|
||||
// 查找当前节点
|
||||
ApprovalConfigPojo currentNode = bd.getBusinessDatabase()
|
||||
.eq("approval_id", approvalFlow.getId())
|
||||
.eq("node_order", approvalFlow.getCurrentNode())
|
||||
// 根据状态不同获取节点和节点层级
|
||||
ApprovalConfigPojo preNode = bd.getBusinessDatabase()
|
||||
.eq("approval_id", flow.getId())
|
||||
.eq("node_order", flow.getPreNode())
|
||||
.doQueryFirst(ApprovalConfigPojo.class);
|
||||
ApprovalRecord lastedRecord = bd.getBusinessDatabase()
|
||||
.eq("flow_id", flow.getId())
|
||||
.orderBy("approval_time", "desc")
|
||||
.doQueryFirst(ApprovalRecord.class) ;
|
||||
Integer level = Objects.equals(lastedRecord.getResult(), "MSG") ? lastedRecord.getApprovalLevel() : lastedRecord.getApprovalLevel() + 1;
|
||||
|
||||
String lockKey = FLOW_LOCK_PREFIX + approvalFlow.getId() + ":" + currentNode.getNodeName();
|
||||
String lockValue = UUID.randomUUID().toString();
|
||||
boolean lockAcquired = redisLockUtil
|
||||
.tryLock(lockKey, lockValue, FLOW_LOCK_EXPIRE_SECONDS, TimeUnit.SECONDS);
|
||||
if (!lockAcquired) {
|
||||
throw new CommonException("当前节点正在处理,请稍后重试");
|
||||
}
|
||||
try {
|
||||
// 重新创建待办继续流程
|
||||
myself.addNodeTodo(
|
||||
approvalFlow,
|
||||
currentNode,
|
||||
flow,
|
||||
preNode,
|
||||
template,
|
||||
userId
|
||||
userId,
|
||||
1
|
||||
);
|
||||
|
||||
bd.getBusinessDatabase()
|
||||
.eq("id", approvalFlow.getId())
|
||||
.eq("id", flow.getId())
|
||||
.update("flow_status", "APPROVING")
|
||||
.update("current_node", flow.getPreNode())
|
||||
.update("pre_node", -1)
|
||||
.doUpdate(ApprovalFlow.class);
|
||||
|
||||
bd.getBusinessDatabase()
|
||||
@ -233,30 +234,22 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
|
||||
// 清除拒绝提醒待办
|
||||
bd.getBusinessDatabase()
|
||||
.eq("document_no", approvalFlow.getId())
|
||||
.eq("current_node", currentNode.getNodeName())
|
||||
.eq("document_no", flow.getId())
|
||||
.eq("data_type", "模板拒绝")
|
||||
.update("is_delete", 1)
|
||||
.doUpdate(TodoTaskPojo.class);
|
||||
|
||||
// 创建直送记录
|
||||
ApprovalRecord lastedRecord = bd.getBusinessDatabase()
|
||||
.eq("flow_id", approvalFlow.getId())
|
||||
.orderBy("approval_time", "desc")
|
||||
.doQueryFirst(ApprovalRecord.class);
|
||||
ApprovalRecord record = new ApprovalRecord(
|
||||
approvalFlow.getId(),
|
||||
"直送至" + currentNode.getNodeName(),
|
||||
flow.getId(),
|
||||
"直送至" + preNode.getNodeName(),
|
||||
xdapDeptUsersService.selectUserByID(userId).getUsername(),
|
||||
"直送",
|
||||
"MSG",
|
||||
Timestamp.valueOf(LocalDateTime.now()),
|
||||
lastedRecord.getApprovalLevel() + 1
|
||||
level
|
||||
);
|
||||
bd.getBusinessDatabase().doInsert(record);
|
||||
} finally {
|
||||
redisLockUtil.unlock(lockKey, lockValue);
|
||||
}
|
||||
}
|
||||
|
||||
// 查询所有流程
|
||||
@ -293,7 +286,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void handleApproval(HandleApprovalRequest request) {
|
||||
// 验证流程状态
|
||||
// 验证流程状态和用户权限
|
||||
ApprovalFlow flow = bd.getBusinessDatabase()
|
||||
.eq("id", request.getFlowId())
|
||||
.eq("flow_type", 1)
|
||||
@ -301,14 +294,10 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
if (flow == null || !"APPROVING".equals(flow.getFlowStatus())) {
|
||||
throw new CommonException("流程不存在或已结束");
|
||||
}
|
||||
|
||||
// 获取当前流程节点
|
||||
ApprovalConfigPojo currentNode = bd.getBusinessDatabase()
|
||||
.eq("approval_id", flow.getId())
|
||||
.eq("node_order", flow.getCurrentNode())
|
||||
.doQueryFirst(ApprovalConfigPojo.class);
|
||||
|
||||
// 验证当前用户是否有权限处理
|
||||
if (!hasPermission(currentNode, request.getUserId())) {
|
||||
throw new CommonException("无权限处理或已被处理");
|
||||
}
|
||||
@ -319,7 +308,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
.orderBy("approval_time", "desc")
|
||||
.doQueryFirst(ApprovalRecord.class);
|
||||
|
||||
// 抢签节点
|
||||
// 处理审批节点
|
||||
if (!"会签".equals(currentNode.getNodeName())) {
|
||||
String lockKey = FLOW_LOCK_PREFIX + flow.getId() + ":" + currentNode.getNodeName();
|
||||
String lockValue = UUID.randomUUID().toString();
|
||||
@ -329,7 +318,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
throw new CommonException("当前节点正在处理,请稍后重试");
|
||||
}
|
||||
try {
|
||||
// 查询已完成的任务,检查当前节点是否完成
|
||||
// 抢签节点需要验证是否被处理
|
||||
int processedCount = bd.getBusinessDatabase()
|
||||
.eq("flow_id", flow.getId())
|
||||
.eq("node", currentNode.getNodeName())
|
||||
@ -359,7 +348,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
ApprovalFlow flow, HandleApprovalRequest request, ApprovalConfigPojo currentNode, ApprovalRecord lastedRecord
|
||||
) {
|
||||
|
||||
// 记录当前审批结果
|
||||
// 新增当前审批结果
|
||||
ApprovalRecord record = new ApprovalRecord(
|
||||
flow.getId(),
|
||||
currentNode.getNodeName(),
|
||||
@ -371,15 +360,26 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
);
|
||||
bd.getBusinessDatabase().doInsert(record);
|
||||
|
||||
// 当前流程当前节点的所有待办全部删除
|
||||
// 软删除当前节点当前处理人的待办
|
||||
if (!Objects.equals(currentNode.getNodeName(), "会签")) {
|
||||
// 抢签节点还需要软删除其他人的待办
|
||||
bd.getBusinessDatabase()
|
||||
.eq("document_no", flow.getId())
|
||||
.eq("current_node", currentNode.getNodeName())
|
||||
.ne("owner_id", request.getUserId())
|
||||
.update("is_delete", 1)
|
||||
.update("last_update_date", Timestamp.valueOf(LocalDateTime.now()))
|
||||
.doUpdate(TodoTaskPojo.class);
|
||||
}
|
||||
bd.getBusinessDatabase()
|
||||
.eq("document_no", flow.getId())
|
||||
.eq("current_node", currentNode.getNodeName())
|
||||
.eq("owner_id", request.getUserId())
|
||||
.update("is_delete", 1)
|
||||
.update("last_update_date", Timestamp.valueOf(LocalDateTime.now()))
|
||||
.doUpdate(TodoTaskPojo.class);
|
||||
|
||||
// 更新当前用户的已办
|
||||
// 新增当前处理人的已办
|
||||
CompletedTaskPojo completedTaskPojo = new CompletedTaskPojo();
|
||||
completedTaskPojo.setDocumentNo(flow.getId());
|
||||
completedTaskPojo.setCreatedById(request.getUserId());
|
||||
@ -406,12 +406,20 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
}
|
||||
|
||||
public void cancelProcess(ApprovalFlow flow, ApprovalConfigPojo node, String status, String userId) {
|
||||
// 删除所有待办
|
||||
bd.getBusinessDatabase()
|
||||
.eq("document_no", flow.getId())
|
||||
.eq("current_node", node.getNodeName())
|
||||
.update("is_delete", 1)
|
||||
.update("last_update_date", Timestamp.valueOf(LocalDateTime.now()))
|
||||
.doUpdate(TodoTaskPojo.class);
|
||||
// 更新流程状态
|
||||
flow.setFlowStatus(status);
|
||||
bd.getBusinessDatabase()
|
||||
.rowid("id", flow.getRowId())
|
||||
.update("flow_status", flow.getFlowStatus())
|
||||
.update("return_num", flow.getReturnNum() + 1)
|
||||
.update("pre_node", node.getNodeOrder())
|
||||
.doUpdate(ApprovalFlow.class);
|
||||
// 更新模板状态(重新打回草稿状态)
|
||||
Template template = bd.getBusinessDatabase()
|
||||
@ -443,7 +451,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
bd.getBusinessDatabase().doInsert(todoTask);
|
||||
}
|
||||
// 更新发起和已办
|
||||
myself.updateTasks(flow, Objects.equals(status, "REJECTED") ? "已拒绝" : "已撤回");
|
||||
myself.updateTasks(flow, Objects.equals(status, "REJECTED") ? "已拒绝" : "已撤回", 0);
|
||||
}
|
||||
|
||||
// 处理下一节点流转
|
||||
@ -480,12 +488,12 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
.update("published_time", Timestamp.valueOf(LocalDateTime.now()))
|
||||
.doUpdate(Template.class);
|
||||
// 待办环节修改
|
||||
myself.updateTasks(flow, "已完成");
|
||||
myself.updateTasks(flow, "已完成", 0);
|
||||
// 更新机型版本
|
||||
// dataEntryEngineModelService.updateModelForNewVersion();
|
||||
} else {
|
||||
flow.setCurrentNode(nextNode.getNodeOrder());
|
||||
myself.addNodeTodo(flow, nextNode, template, userId);
|
||||
myself.addNodeTodo(flow, nextNode, template, userId, 0);
|
||||
}
|
||||
|
||||
bd.getBusinessDatabase()
|
||||
@ -513,7 +521,13 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
}
|
||||
}
|
||||
|
||||
public void addNodeTodo(ApprovalFlow flow, ApprovalConfigPojo node, Template template, String createBy) {
|
||||
public void addNodeTodo(
|
||||
ApprovalFlow flow,
|
||||
ApprovalConfigPojo node,
|
||||
Template template,
|
||||
String createBy,
|
||||
Integer enableReturn
|
||||
) {
|
||||
// 获取处理人
|
||||
List<String> users = JSON.parseArray(node.getAssignees()).toJavaList(String.class);
|
||||
// 新增待办
|
||||
@ -538,7 +552,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
}
|
||||
|
||||
// 更新已办和发起的状态
|
||||
myself.updateTasks(flow, node.getNodeName());
|
||||
myself.updateTasks(flow, node.getNodeName(), enableReturn);
|
||||
|
||||
if (!list.isEmpty()) {
|
||||
bd.getBusinessDatabase().doBatchInsert(list);
|
||||
@ -560,7 +574,45 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public void updateTasks(ApprovalFlow flow, String status) {
|
||||
@Override
|
||||
public List<ApprovalUserNodeDTO> getApprovalUsers(String templateId) {
|
||||
List<ApprovalUserNodeDTO> list = new ArrayList<>();
|
||||
|
||||
// 获取到模板最近一次未完成的流程
|
||||
ApprovalFlow flow = bd.getBusinessDatabase()
|
||||
.eq("template_id", templateId)
|
||||
.ne("pre_node", -1)
|
||||
.orderBy("created_time", "desc")
|
||||
.doQueryFirst(ApprovalFlow.class);
|
||||
if (flow == null) {
|
||||
return list;
|
||||
}
|
||||
|
||||
// 获取流程节点
|
||||
List<ApprovalConfigPojo> approvalConfigs = bd.getBusinessDatabase()
|
||||
.eq("approval_id", flow.getId())
|
||||
.doQuery(ApprovalConfigPojo.class);
|
||||
|
||||
approvalConfigs.forEach(node -> {
|
||||
ApprovalUserNodeDTO dto = new ApprovalUserNodeDTO();
|
||||
List<String> userIds = JSON.parseArray(node.getAssignees()).toJavaList(String.class);
|
||||
dto.setNodeName(node.getNodeName());
|
||||
dto.setNodeOrder(node.getNodeOrder());
|
||||
dto.setAssignees(
|
||||
bd.getBusinessDatabase()
|
||||
.in("id", userIds)
|
||||
.doQuery(XdapUsers.class)
|
||||
);
|
||||
});
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restartApproval(StartApprovalRequest request) {
|
||||
|
||||
}
|
||||
|
||||
public void updateTasks(ApprovalFlow flow, String status, Integer enableReturn) {
|
||||
// 更新已办和发起的节点状态
|
||||
bd.getBusinessDatabase()
|
||||
.eq("document_no", flow.getId())
|
||||
@ -665,6 +717,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
for (Map.Entry<Integer, List<ApprovalRecord>> entry : levelMap.entrySet()) {
|
||||
// 获取到每一层
|
||||
int level = entry.getKey();
|
||||
Set<Integer> nodeList = new HashSet<>();
|
||||
List<ApprovalRecord> records = entry.getValue();
|
||||
List<ApprovalRecord> uniqueRecords = new ArrayList<>(records.stream()
|
||||
.collect(Collectors.toMap(
|
||||
@ -677,6 +730,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
ApprovalConfigPojo approvalConfigPojo = nodesMap.get(record.getNode());
|
||||
if (approvalConfigPojo != null) {
|
||||
flowNodes.add(getFlowNodeView(approvalConfigPojo, form.getFlowId(), level));
|
||||
nodeList.add(approvalConfigPojo.getNodeOrder());
|
||||
} else {
|
||||
FlowNode flowNode = new FlowNode();
|
||||
flowNode.setNode(record.getNode());
|
||||
@ -690,7 +744,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
if (level == maxLevel && Objects.equals(approvalFlow.getFlowStatus(), "APPROVING") ) {
|
||||
// 最后一层,添加待处理信息
|
||||
nodes.forEach(node -> {
|
||||
if (node.getNodeOrder() >= approvalFlow.getCurrentNode()) {
|
||||
if (!nodeList.contains(node.getNodeOrder()) && node.getNodeOrder() >= approvalFlow.getCurrentNode()) {
|
||||
flowNodes.add(getFlowNodeView(node, form.getFlowId(), maxLevel));
|
||||
}
|
||||
});
|
||||
@ -821,16 +875,23 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
.orderBy("approval_time", "desc")
|
||||
.doQueryFirst(ApprovalRecord.class);
|
||||
|
||||
ApprovalRecord record = new ApprovalRecord(
|
||||
// 更新流程状态
|
||||
bd.getBusinessDatabase()
|
||||
.eq("id", flow.getId())
|
||||
.update("flow_status", request.getResult())
|
||||
.update("pre_node", flow.getCurrentNode())
|
||||
.doUpdate(ApprovalFlow.class);
|
||||
|
||||
ApprovalRecord approvalRecord = new ApprovalRecord(
|
||||
flow.getId(),
|
||||
currentNode.getNodeName(),
|
||||
request.getUserId(),
|
||||
request.getOpinion(),
|
||||
request.getResult(),
|
||||
Timestamp.valueOf(LocalDateTime.now()),
|
||||
lastedRecord.getApprovalLevel()
|
||||
"已撤回",
|
||||
xdapDeptUsersService.selectUserByID(request.getUserId()).getUsername(),
|
||||
"撤回",
|
||||
"MSG",
|
||||
Timestamp.valueOf(LocalDateTime.now().plusSeconds(1)),
|
||||
lastedRecord.getApprovalLevel() + 1
|
||||
);
|
||||
bd.getBusinessDatabase().doInsert(record);
|
||||
bd.getBusinessDatabase().doInsert(approvalRecord);
|
||||
|
||||
// 申请人撤回
|
||||
myself.cancelProcess(flow, currentNode, "RETURNED", request.getUserId());
|
||||
@ -850,6 +911,10 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
.eq("id", form.getFlowId())
|
||||
.doQueryFirst(ApprovalFlow.class);
|
||||
|
||||
if (flow == null) {
|
||||
throw new CommonException("流程不存在");
|
||||
}
|
||||
|
||||
// 查找模板
|
||||
Template template = bd.getBusinessDatabase()
|
||||
.eq("id", flow.getTemplateId())
|
||||
@ -889,14 +954,15 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
if (toNode == null) {
|
||||
throw new CommonException("找不到目标节点");
|
||||
}
|
||||
flow.setCurrentNode(toNode.getNodeOrder());
|
||||
|
||||
bd.getBusinessDatabase()
|
||||
.eq("id", flow.getId())
|
||||
.update("current_node", flow.getCurrentNode())
|
||||
.update("current_node", toNode.getNodeOrder())
|
||||
.update("pre_node", flow.getCurrentNode())
|
||||
.doUpdate(ApprovalFlow.class);
|
||||
|
||||
// 生成新的待办
|
||||
myself.addNodeTodo(flow, toNode, template, form.getCreateUserId());
|
||||
myself.addNodeTodo(flow, toNode, template, form.getCreateUserId(), 0);
|
||||
|
||||
// 生成处理记录
|
||||
ApprovalRecord lastedRecord = bd.getBusinessDatabase()
|
||||
@ -906,7 +972,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
ApprovalRecord record = new ApprovalRecord(
|
||||
flow.getId(),
|
||||
currentNode.getNodeName(),
|
||||
form.getCreateUserId(),
|
||||
form.getProcessUserId(),
|
||||
"退回",
|
||||
"RETURN",
|
||||
Timestamp.valueOf(LocalDateTime.now()),
|
||||
@ -916,7 +982,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
ApprovalRecord approvalRecord = new ApprovalRecord(
|
||||
flow.getId(),
|
||||
"退回至" + toNode.getNodeName(),
|
||||
xdapDeptUsersService.selectUserByID(form.getCreateUserId()).getUsername(),
|
||||
xdapDeptUsersService.selectUserByID(form.getProcessUserId()).getUsername(),
|
||||
"退回",
|
||||
"MSG",
|
||||
Timestamp.valueOf(LocalDateTime.now().plusSeconds(1)),
|
||||
|
||||
@ -65,18 +65,6 @@ mpaas.datasource[0].username=root
|
||||
mpaas.datasource[0].password=qwer12
|
||||
mpaas.datasource[0].minPoolSize=50
|
||||
mpaas.datasource[0].maxPoolSize=1000
|
||||
mpaas.datasource[1].name=yc_lrs_test_relsult
|
||||
mpaas.datasource[1].url=jdbc:mysql://127.0.0.1:3306/yc_lrs_test_relsult?serverTimezone=GMT%2B8&characterEncoding=utf-8
|
||||
mpaas.datasource[1].username=root
|
||||
mpaas.datasource[1].password=qwer12
|
||||
mpaas.datasource[1].type=mysql
|
||||
mpaas.datasource[1].name=test_demo
|
||||
|
||||
mpaas.datasource[2].url=jdbc:mysql://127.0.0.1:3306/template_db2?serverTimezone=GMT%2B8&characterEncoding=utf-8
|
||||
mpaas.datasource[2].username=root
|
||||
mpaas.datasource[2].password=qwer12
|
||||
mpaas.datasource[2].type=mysql
|
||||
mpaas.datasource[2].name=template_db2
|
||||
|
||||
mpaas.security=false
|
||||
mpaas.query.dbadatper=mysql
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user