Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
b0bc890c57
@ -7,7 +7,7 @@ import lombok.EqualsAndHashCode;
|
|||||||
|
|
||||||
@SQLQuery(value = {
|
@SQLQuery(value = {
|
||||||
@SQL(view = "getCommonAndParameters",
|
@SQL(view = "getCommonAndParameters",
|
||||||
sql = "SELECT ymcp.*, ymp.parameter_name, ymp.parameter_type, ymp.subsystem_name, ymp.parts_name FROM yfsjglpt_model_common_parameters ymcp LEFT JOIN yfsjglpt_model_parameter ymp ON ymcp.parameter_id = ymp.id WHERE ymcp.common_id IN (#ids)"),
|
sql = "SELECT ymcp.*, ymp.parameter_name as 'parameterName', ymp.parameter_type as 'parameterType', ymp.subsystem_name as 'subsystemName', ymp.parts_name as 'partsName' FROM yfsjglpt_model_common_parameters ymcp LEFT JOIN yfsjglpt_model_parameter ymp ON ymcp.parameter_id = ymp.id WHERE ymcp.common_id IN (#ids)"),
|
||||||
@SQL(view = "getCommonById",
|
@SQL(view = "getCommonById",
|
||||||
sql = "SELECT ymcp.*, ymp.parameter_name as 'parameterName', ymp.parameter_type as 'parameterType', ymp.subsystem_name as 'subsystemName' FROM yfsjglpt_model_common_parameters ymcp LEFT JOIN yfsjglpt_model_parameter ymp ON ymcp.parameter_id = ymp.id WHERE ymcp.user_id = #userId")
|
sql = "SELECT ymcp.*, ymp.parameter_name as 'parameterName', ymp.parameter_type as 'parameterType', ymp.subsystem_name as 'subsystemName' FROM yfsjglpt_model_common_parameters ymcp LEFT JOIN yfsjglpt_model_parameter ymp ON ymcp.parameter_id = ymp.id WHERE ymcp.user_id = #userId")
|
||||||
})
|
})
|
||||||
|
|||||||
@ -10,6 +10,8 @@ import java.sql.Timestamp;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@SQLQuery(value = {
|
@SQLQuery(value = {
|
||||||
|
@SQL(view = "getAllApproval",
|
||||||
|
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\" , xu.username AS \"username\", 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 LEFT JOIN xdap_users xu ON xu.id = af.create_by ORDER BY 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 = "getApprovalByUserIdAndIds",
|
@SQL(view = "getApprovalByUserIdAndIds",
|
||||||
sql = "SELECT af.id AS \"flowId\", t.id AS \"templateId\", t.template_name AS \"templateName\", t.version AS \"version\", t.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 t.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\", t.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 t.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",
|
||||||
|
|||||||
@ -213,7 +213,8 @@ public class CommonParameterServiceImpl implements CommonParameterService {
|
|||||||
param.getParameterId(),
|
param.getParameterId(),
|
||||||
param.getParameterName(),
|
param.getParameterName(),
|
||||||
param.getSubsystemName(),
|
param.getSubsystemName(),
|
||||||
null,null
|
param.getSubsystemName(),
|
||||||
|
param.getPartsName()
|
||||||
))
|
))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
item.setParameters(parameters);
|
item.setParameters(parameters);
|
||||||
|
|||||||
@ -14,6 +14,7 @@ import com.xdap.self_development.pojo.view.TemplateChangeView;
|
|||||||
import com.xdap.self_development.pojo.view.TodoAndTemplateView;
|
import com.xdap.self_development.pojo.view.TodoAndTemplateView;
|
||||||
import com.xdap.self_development.service.DataEntryEngineModelService;
|
import com.xdap.self_development.service.DataEntryEngineModelService;
|
||||||
import com.xdap.self_development.service.TemplateApprovalService;
|
import com.xdap.self_development.service.TemplateApprovalService;
|
||||||
|
import com.xdap.self_development.service.XdapDeptUsersService;
|
||||||
import com.xdap.self_development.utils.RedisLockUtil;
|
import com.xdap.self_development.utils.RedisLockUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
@ -44,6 +45,8 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
private DataEntryEngineModelService dataEntryEngineModelService;
|
private DataEntryEngineModelService dataEntryEngineModelService;
|
||||||
@Resource
|
@Resource
|
||||||
private UserPermissionGetter permissionGetter;
|
private UserPermissionGetter permissionGetter;
|
||||||
|
@Resource
|
||||||
|
private XdapDeptUsersService xdapDeptUsersService;
|
||||||
|
|
||||||
// 待办标志: userId -> flowId集合
|
// 待办标志: userId -> flowId集合
|
||||||
private static final String TODO_PREFIX = "approval:todo:";
|
private static final String TODO_PREFIX = "approval:todo:";
|
||||||
@ -55,7 +58,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
private static final int FLOW_LOCK_EXPIRE_SECONDS = 15;
|
private static final int FLOW_LOCK_EXPIRE_SECONDS = 15;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional(rollbackFor = CommonException.class)
|
||||||
public String startApproval(StartApprovalRequest request) {
|
public String startApproval(StartApprovalRequest request) {
|
||||||
// 验证模板存在
|
// 验证模板存在
|
||||||
Template template = bd.getBusinessDatabase()
|
Template template = bd.getBusinessDatabase()
|
||||||
@ -100,6 +103,27 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
flow.setExplanation(request.getExplanation());
|
flow.setExplanation(request.getExplanation());
|
||||||
bd.getBusinessDatabase().doInsert(flow);
|
bd.getBusinessDatabase().doInsert(flow);
|
||||||
|
|
||||||
|
// 新增待办
|
||||||
|
// List<TodoTaskPojo> list = new ArrayList<>();
|
||||||
|
// for (String person : request.getProofreadUsers()) {
|
||||||
|
// TodoTaskPojo todoTask = new TodoTaskPojo();
|
||||||
|
// todoTask.setCreatedById(permissionGetter.getCurrentUserId());
|
||||||
|
// todoTask.setCreatedBy(xdapDeptUsersService.selectUserByID(permissionGetter.getCurrentUserId()).getUsername());
|
||||||
|
// todoTask.setCurrentNode(getNodeName(flow.getCurrentNode()));
|
||||||
|
// todoTask.setDataType("-");
|
||||||
|
// todoTask.setDocumentNo(flow.getId());
|
||||||
|
// todoTask.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
|
||||||
|
// todoTask.setIsDelete(0);
|
||||||
|
// todoTask.setModelId(template.getId());
|
||||||
|
// todoTask.setModelName(template.getTemplateName());
|
||||||
|
// todoTask.setProcessTitle("模板审核");
|
||||||
|
// todoTask.setStatusCode(flow.getFlowStatus());
|
||||||
|
// todoTask.setVersionNumber(template.getVersion());
|
||||||
|
// todoTask.setOwnerId(person);
|
||||||
|
// list.add(todoTask);
|
||||||
|
// }
|
||||||
|
// bd.getBusinessDatabase().doBatchInsert(list);
|
||||||
|
|
||||||
// 3. 更新模板状态为校对中
|
// 3. 更新模板状态为校对中
|
||||||
template.setStatus("APPROVING");
|
template.setStatus("APPROVING");
|
||||||
bd.getBusinessDatabase()
|
bd.getBusinessDatabase()
|
||||||
@ -118,6 +142,11 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<TodoAndTemplateView> getApprovalList(ApprovalListForm form) {
|
public List<TodoAndTemplateView> getApprovalList(ApprovalListForm form) {
|
||||||
|
|
||||||
|
// List<TodoAndTemplateView> todoAndTemplateViews = bd.getBusinessDatabase()
|
||||||
|
// .viewQueryMode(true)
|
||||||
|
// .view("getAllApproval")
|
||||||
|
// .doQuery(TodoAndTemplateView.class);
|
||||||
List<TodoAndTemplateView> approvalList = new ArrayList<>();
|
List<TodoAndTemplateView> approvalList = new ArrayList<>();
|
||||||
Set<String> flowIds = new HashSet<>(Objects.requireNonNull(redisTemplate.opsForSet().members(TODO_PREFIX + permissionGetter.getCurrentUserId())));
|
Set<String> flowIds = new HashSet<>(Objects.requireNonNull(redisTemplate.opsForSet().members(TODO_PREFIX + permissionGetter.getCurrentUserId())));
|
||||||
List<String> ids = new ArrayList<>(flowIds);
|
List<String> ids = new ArrayList<>(flowIds);
|
||||||
@ -131,26 +160,26 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
.setVar("createdTime", form.getCreateDate() == null ? "" : form.getCreateDate())
|
.setVar("createdTime", form.getCreateDate() == null ? "" : form.getCreateDate())
|
||||||
.setVar("username",form.getUsername())
|
.setVar("username",form.getUsername())
|
||||||
.doQuery(TodoAndTemplateView.class);
|
.doQuery(TodoAndTemplateView.class);
|
||||||
setCurrentApprovers(approvalList, todoList);
|
|
||||||
return approvalList;
|
return approvalList;
|
||||||
|
// return todoAndTemplateViews;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setCurrentApprovers(List<TodoAndTemplateView> approvalList, List<TodoAndTemplateView> todoAndTemplateViews) {
|
// private void setCurrentApprovers(List<TodoAndTemplateView> approvalList, List<TodoAndTemplateView> todoAndTemplateViews) {
|
||||||
todoAndTemplateViews.forEach(item -> {
|
// todoAndTemplateViews.forEach(item -> {
|
||||||
if (item.getCurrentUsers() == null || item.getCurrentUsers().isEmpty()) {
|
// if (item.getCurrentUsers() == null || item.getCurrentUsers().isEmpty()) {
|
||||||
item.setCurrentApprovers(null);
|
// item.setCurrentApprovers(null);
|
||||||
item.setCurrentUsers(null);
|
// item.setCurrentUsers(null);
|
||||||
} else {
|
// } else {
|
||||||
List<String> userIds = JSON.parseArray(item.getCurrentUsers()).toJavaList(String.class);
|
// List<String> userIds = JSON.parseArray(item.getCurrentUsers()).toJavaList(String.class);
|
||||||
List<ApprovalXdapUsers> approvalXdapUsers = bd.getBusinessDatabase()
|
// List<ApprovalXdapUsers> approvalXdapUsers = bd.getBusinessDatabase()
|
||||||
.in("id", userIds)
|
// .in("id", userIds)
|
||||||
.doQuery(ApprovalXdapUsers.class);
|
// .doQuery(ApprovalXdapUsers.class);
|
||||||
item.setCurrentApprovers(approvalXdapUsers);
|
// item.setCurrentApprovers(approvalXdapUsers);
|
||||||
item.setCurrentUsers(null);
|
// item.setCurrentUsers(null);
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
approvalList.addAll(todoAndTemplateViews);
|
// approvalList.addAll(todoAndTemplateViews);
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = CommonException.class)
|
@Transactional(rollbackFor = CommonException.class)
|
||||||
@ -169,12 +198,14 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
throw new CommonException("无权限处理或已被处理");
|
throw new CommonException("无权限处理或已被处理");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 会签节点
|
||||||
if (!"COUNTERSIGN".equals(currentNode)) {
|
if (!"COUNTERSIGN".equals(currentNode)) {
|
||||||
String lockKey = FLOW_LOCK_PREFIX + flow.getId() + ":" + currentNode;
|
String lockKey = FLOW_LOCK_PREFIX + flow.getId() + ":" + currentNode;
|
||||||
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);
|
||||||
|
|
||||||
|
// 其他人正在处理
|
||||||
if (!lockAcquired) {
|
if (!lockAcquired) {
|
||||||
throw new CommonException("当前节点正在处理,请稍后重试");
|
throw new CommonException("当前节点正在处理,请稍后重试");
|
||||||
}
|
}
|
||||||
@ -183,6 +214,8 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
String processedKey = NODE_PROCESSED_PREFIX + flow.getId() + ":" + currentNode;
|
String processedKey = NODE_PROCESSED_PREFIX + flow.getId() + ":" + currentNode;
|
||||||
long processedCount = Optional.ofNullable(redisTemplate.opsForSet().size(processedKey))
|
long processedCount = Optional.ofNullable(redisTemplate.opsForSet().size(processedKey))
|
||||||
.orElse(0L);
|
.orElse(0L);
|
||||||
|
|
||||||
|
// 已被其他人处理
|
||||||
if (processedCount > 0) {
|
if (processedCount > 0) {
|
||||||
throw new CommonException("此节点已被他人处理");
|
throw new CommonException("此节点已被他人处理");
|
||||||
}
|
}
|
||||||
@ -190,7 +223,9 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
} finally {
|
} finally {
|
||||||
redisLockUtil.unlock(lockKey, lockValue);
|
redisLockUtil.unlock(lockKey, lockValue);
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
// 抢签节点
|
||||||
|
else {
|
||||||
processApprovalLogic(flow, request, currentNode);
|
processApprovalLogic(flow, request, currentNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -210,8 +245,17 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
redisTemplate.opsForSet().add(NODE_PROCESSED_PREFIX + flow.getId() + ":" + currentNode,
|
redisTemplate.opsForSet().add(NODE_PROCESSED_PREFIX + flow.getId() + ":" + currentNode,
|
||||||
request.getUserId());
|
request.getUserId());
|
||||||
|
|
||||||
|
// 删除当前节点的已处理待办
|
||||||
if ("COUNTERSIGN".equals(flow.getCurrentNode())) {
|
if ("COUNTERSIGN".equals(flow.getCurrentNode())) {
|
||||||
redisTemplate.opsForSet().remove(TODO_PREFIX + request.getUserId(), flow.getId());
|
redisTemplate.opsForSet().remove(TODO_PREFIX + request.getUserId(), flow.getId());
|
||||||
|
// bd.getBusinessDatabase()
|
||||||
|
// .eq("document_no", flow.getId())
|
||||||
|
// .eq("owner_id", permissionGetter.getCurrentUserId())
|
||||||
|
// .doDelete(TodoTaskPojo.class);
|
||||||
|
// } else {
|
||||||
|
// bd.getBusinessDatabase()
|
||||||
|
// .eq("document_no", flow.getId())
|
||||||
|
// .doDelete(TodoTaskPojo.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理驳回逻辑
|
// 处理驳回逻辑
|
||||||
@ -439,6 +483,8 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
users.forEach(userId -> {
|
users.forEach(userId -> {
|
||||||
redisTemplate.opsForSet().add(TODO_PREFIX+ userId, flow.getId());
|
redisTemplate.opsForSet().add(TODO_PREFIX+ userId, flow.getId());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clearNodeTodo(ApprovalFlow flow, String node) {
|
private void clearNodeTodo(ApprovalFlow flow, String node) {
|
||||||
@ -487,4 +533,14 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
default: return Collections.emptyList();
|
default: return Collections.emptyList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getNodeName(String node) {
|
||||||
|
switch (node) {
|
||||||
|
case "PROOFREAD": return "校对";
|
||||||
|
case "REVIEW": return "审核";
|
||||||
|
case "COUNTERSIGN": return "会签";
|
||||||
|
case "APPROVE": return "批准";
|
||||||
|
default: return "-";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user