Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
153ddc2df1
@ -29,7 +29,7 @@ public class ParameterForm {
|
|||||||
|
|
||||||
private String numberOrFormula;
|
private String numberOrFormula;
|
||||||
|
|
||||||
@NotBlank(message = "子部门不能为空")
|
@NotBlank(message = "部门不能为空")
|
||||||
private String department;
|
private String department;
|
||||||
|
|
||||||
private String remarks;
|
private String remarks;
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import cn.hutool.core.codec.Base64;
|
|||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.xdap.runtime.service.RuntimeAppContextService;
|
import com.xdap.runtime.service.RuntimeAppContextService;
|
||||||
|
import com.xdap.self_development.common.UserPermissionGetter;
|
||||||
import com.xdap.self_development.config.BusinessDatabase;
|
import com.xdap.self_development.config.BusinessDatabase;
|
||||||
import com.xdap.self_development.controller.form.BenchmarkingReportPageForm;
|
import com.xdap.self_development.controller.form.BenchmarkingReportPageForm;
|
||||||
import com.xdap.self_development.controller.form.HandleApprovalRequest;
|
import com.xdap.self_development.controller.form.HandleApprovalRequest;
|
||||||
@ -14,14 +15,12 @@ import com.xdap.self_development.feign.ApaasMyTokenFeign;
|
|||||||
import com.xdap.self_development.feign.dto.AppTokenDTO;
|
import com.xdap.self_development.feign.dto.AppTokenDTO;
|
||||||
import com.xdap.self_development.feign.dto.FileUploadDTO;
|
import com.xdap.self_development.feign.dto.FileUploadDTO;
|
||||||
import com.xdap.self_development.feign.dto.UserTokenDT0;
|
import com.xdap.self_development.feign.dto.UserTokenDT0;
|
||||||
import com.xdap.self_development.pojo.ApprovalFlow;
|
import com.xdap.self_development.pojo.*;
|
||||||
import com.xdap.self_development.pojo.ApprovalRecord;
|
|
||||||
import com.xdap.self_development.pojo.ApprovalXdapUsers;
|
|
||||||
import com.xdap.self_development.pojo.BenchmarkingReport;
|
|
||||||
import com.xdap.self_development.pojo.view.ApprovalFlowView;
|
import com.xdap.self_development.pojo.view.ApprovalFlowView;
|
||||||
import com.xdap.self_development.pojo.view.ApprovalNodeView;
|
import com.xdap.self_development.pojo.view.ApprovalNodeView;
|
||||||
import com.xdap.self_development.pojo.view.TodoAndReportView;
|
import com.xdap.self_development.pojo.view.TodoAndReportView;
|
||||||
import com.xdap.self_development.service.BenchmarkingReportService;
|
import com.xdap.self_development.service.BenchmarkingReportService;
|
||||||
|
import com.xdap.self_development.service.XdapDeptUsersService;
|
||||||
import com.xdap.self_development.utils.RedisLockUtil;
|
import com.xdap.self_development.utils.RedisLockUtil;
|
||||||
import org.bson.types.ObjectId;
|
import org.bson.types.ObjectId;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
@ -50,6 +49,10 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
|||||||
private ApaasMyTokenFeign apaasMyTokenFeign;
|
private ApaasMyTokenFeign apaasMyTokenFeign;
|
||||||
@Resource
|
@Resource
|
||||||
private RedisLockUtil redisLockUtil;
|
private RedisLockUtil redisLockUtil;
|
||||||
|
@Resource
|
||||||
|
private UserPermissionGetter permissionGetter;
|
||||||
|
@Resource
|
||||||
|
private XdapDeptUsersService xdapDeptUsersService;
|
||||||
|
|
||||||
@Value("${apaas.token.clientId}")
|
@Value("${apaas.token.clientId}")
|
||||||
private String clientId;
|
private String clientId;
|
||||||
@ -88,12 +91,42 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
|||||||
flow.setExplanation(form.getExplanation());
|
flow.setExplanation(form.getExplanation());
|
||||||
bd.getBusinessDatabase().doInsert(flow);
|
bd.getBusinessDatabase().doInsert(flow);
|
||||||
|
|
||||||
|
// 新增待办
|
||||||
|
List<TodoTaskPojo> list = new ArrayList<>();
|
||||||
|
for (String person : form.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(report.getId());
|
||||||
|
todoTask.setModelName(report.getProjectName()+"对标报告");
|
||||||
|
todoTask.setProcessTitle("对标报告审核");
|
||||||
|
todoTask.setStatusCode(flow.getFlowStatus());
|
||||||
|
todoTask.setVersionNumber(1);
|
||||||
|
todoTask.setOwnerId(person);
|
||||||
|
list.add(todoTask);
|
||||||
|
}
|
||||||
|
bd.getBusinessDatabase().doBatchInsert(list);
|
||||||
|
|
||||||
// 3. 初始化Redis待办信息(校对节点)
|
// 3. 初始化Redis待办信息(校对节点)
|
||||||
form.getProofreadUsers().forEach(userId -> {
|
form.getProofreadUsers().forEach(userId -> {
|
||||||
redisTemplate.opsForSet().add(TODO_PREFIX + userId, flow.getId());
|
redisTemplate.opsForSet().add(TODO_PREFIX + userId, flow.getId());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getNodeName(String node) {
|
||||||
|
switch (node) {
|
||||||
|
case "PROOFREAD": return "校对";
|
||||||
|
case "REVIEW": return "审核";
|
||||||
|
case "APPROVE": return "批准";
|
||||||
|
default: return "-";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void restartReportApproval(UpdateBenchmarkingReportForm form) {
|
public void restartReportApproval(UpdateBenchmarkingReportForm form) {
|
||||||
BenchmarkingReport originalReport = bd.getBusinessDatabase()
|
BenchmarkingReport originalReport = bd.getBusinessDatabase()
|
||||||
@ -287,7 +320,8 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processApprovalLogic(ApprovalFlow flow, HandleApprovalRequest request, String currentNode) {
|
@Transactional(rollbackFor = CommonException.class)
|
||||||
|
public void processApprovalLogic(ApprovalFlow flow, HandleApprovalRequest request, String currentNode) {
|
||||||
// 记录审批结果
|
// 记录审批结果
|
||||||
ApprovalRecord record = new ApprovalRecord();
|
ApprovalRecord record = new ApprovalRecord();
|
||||||
record.setFlowId(flow.getId());
|
record.setFlowId(flow.getId());
|
||||||
@ -300,6 +334,16 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
|||||||
|
|
||||||
redisTemplate.opsForSet().add(NODE_PROCESSED_PREFIX + flow.getId() + ":" + currentNode,
|
redisTemplate.opsForSet().add(NODE_PROCESSED_PREFIX + flow.getId() + ":" + currentNode,
|
||||||
request.getUserId());
|
request.getUserId());
|
||||||
|
bd.getBusinessDatabase()
|
||||||
|
.eq("document_no", flow.getId())
|
||||||
|
.eq("owner_id", permissionGetter.getCurrentUserId())
|
||||||
|
.update("is_delete", 1)
|
||||||
|
.doUpdate(TodoTaskPojo.class);
|
||||||
|
bd.getBusinessDatabase()
|
||||||
|
.eq("document_no", flow.getId())
|
||||||
|
.ne("owner_id", permissionGetter.getCurrentUserId())
|
||||||
|
.update("is_delete", 2)
|
||||||
|
.doDelete(TodoTaskPojo.class);
|
||||||
|
|
||||||
// 处理驳回逻辑
|
// 处理驳回逻辑
|
||||||
if ("REJECT".equals(request.getResult())) {
|
if ("REJECT".equals(request.getResult())) {
|
||||||
@ -334,7 +378,7 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
|||||||
clearProcessed(flow);
|
clearProcessed(flow);
|
||||||
} else {
|
} else {
|
||||||
flow.setCurrentNode(nextNode);
|
flow.setCurrentNode(nextNode);
|
||||||
addNodeTodo(flow, nextNode);
|
addNodeTodo(flow, nextNode, report);
|
||||||
}
|
}
|
||||||
|
|
||||||
bd.getBusinessDatabase()
|
bd.getBusinessDatabase()
|
||||||
@ -358,11 +402,31 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addNodeTodo(ApprovalFlow flow, String node) {
|
private void addNodeTodo(ApprovalFlow flow, String node, BenchmarkingReport report) {
|
||||||
List<String> users = getNodeUsers(flow, node);
|
List<String> users = getNodeUsers(flow, node);
|
||||||
users.forEach(userId -> {
|
users.forEach(userId -> {
|
||||||
redisTemplate.opsForSet().add(TODO_PREFIX+ userId, flow.getId());
|
redisTemplate.opsForSet().add(TODO_PREFIX+ userId, flow.getId());
|
||||||
});
|
});
|
||||||
|
// 新增待办
|
||||||
|
List<TodoTaskPojo> list = new ArrayList<>();
|
||||||
|
for (String person : users) {
|
||||||
|
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(report.getId());
|
||||||
|
todoTask.setModelName(report.getProjectName()+"对标报告");
|
||||||
|
todoTask.setProcessTitle("对标报告审核");
|
||||||
|
todoTask.setStatusCode(flow.getFlowStatus());
|
||||||
|
todoTask.setVersionNumber(1);
|
||||||
|
todoTask.setOwnerId(person);
|
||||||
|
list.add(todoTask);
|
||||||
|
}
|
||||||
|
bd.getBusinessDatabase().doBatchInsert(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean checkNodeComplete(ApprovalFlow flow, String node) {
|
private boolean checkNodeComplete(ApprovalFlow flow, String node) {
|
||||||
@ -410,6 +474,12 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
|||||||
clearNodeTodo(flow, "PROOFREAD");
|
clearNodeTodo(flow, "PROOFREAD");
|
||||||
clearNodeTodo(flow, "REVIEW");
|
clearNodeTodo(flow, "REVIEW");
|
||||||
clearNodeTodo(flow, "APPROVE");
|
clearNodeTodo(flow, "APPROVE");
|
||||||
|
// 清除已有待办
|
||||||
|
bd.getBusinessDatabase()
|
||||||
|
.eq("document_no", flow.getId())
|
||||||
|
.ne("owner_id", permissionGetter.getCurrentUserId())
|
||||||
|
.update("is_delete", 2)
|
||||||
|
.doDelete(TodoTaskPojo.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clearProcessed(ApprovalFlow flow) {
|
private void clearProcessed(ApprovalFlow flow) {
|
||||||
|
|||||||
@ -117,7 +117,7 @@ public class ParameterServiceImpl implements ParameterService {
|
|||||||
private void validateTemplateStatus(TemplateBenchmark benchmark) {
|
private void validateTemplateStatus(TemplateBenchmark benchmark) {
|
||||||
// 当前修改的模板不为最新版
|
// 当前修改的模板不为最新版
|
||||||
if (!Objects.equals(benchmark.getLastTemplate().getId(), benchmark.getBaseTemplate().getId())) {
|
if (!Objects.equals(benchmark.getLastTemplate().getId(), benchmark.getBaseTemplate().getId())) {
|
||||||
throw new CommonException("该状态的模板不可修改");
|
throw new CommonException("该模板不可修改,请修改最新版本");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 校验模板状态(仅允许草稿/已发布)
|
// 校验模板状态(仅允许草稿/已发布)
|
||||||
@ -336,15 +336,18 @@ public class ParameterServiceImpl implements ParameterService {
|
|||||||
// 如果是原模板,就更新
|
// 如果是原模板,就更新
|
||||||
if (Objects.equals(baseTemplate.getId(), newTemplate.getId())) {
|
if (Objects.equals(baseTemplate.getId(), newTemplate.getId())) {
|
||||||
BeanUtils.copyProperties(form, updatedParameter);
|
BeanUtils.copyProperties(form, updatedParameter);
|
||||||
updatedParameter.setId(originalParameter.getId());
|
updatedParameter.setId(null);
|
||||||
updatedParameter.setCreatedBy(permissionGetter.getCurrentUserId());
|
updatedParameter.setCreatedBy(permissionGetter.getCurrentUserId());
|
||||||
detail = getParameterChange(originalParameter, updatedParameter);
|
detail = getParameterChange(originalParameter, updatedParameter);
|
||||||
bd.getBusinessDatabase().rowid("id", originalParameter.getRowId()).doUpdate(updatedParameter);
|
bd.getBusinessDatabase()
|
||||||
|
.rowid("id", originalParameter.getRowId())
|
||||||
|
.doUpdate(updatedParameter);
|
||||||
}
|
}
|
||||||
// 如果是新模板,就新增
|
// 如果是新模板,就新增
|
||||||
else {
|
else {
|
||||||
BeanUtils.copyProperties(form, updatedParameter);
|
BeanUtils.copyProperties(form, updatedParameter);
|
||||||
updatedParameter.setCreatedBy(permissionGetter.getCurrentUserId());
|
updatedParameter.setCreatedBy(permissionGetter.getCurrentUserId());
|
||||||
|
updatedParameter.setId(null);
|
||||||
detail = getParameterChange(originalParameter, updatedParameter);
|
detail = getParameterChange(originalParameter, updatedParameter);
|
||||||
bd.getBusinessDatabase().doInsert(updatedParameter);
|
bd.getBusinessDatabase().doInsert(updatedParameter);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -198,7 +198,7 @@ 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();
|
||||||
@ -224,7 +224,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
redisLockUtil.unlock(lockKey, lockValue);
|
redisLockUtil.unlock(lockKey, lockValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 抢签节点
|
// 会签节点
|
||||||
else {
|
else {
|
||||||
processApprovalLogic(flow, request, currentNode);
|
processApprovalLogic(flow, request, currentNode);
|
||||||
}
|
}
|
||||||
@ -248,15 +248,18 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
// 删除当前节点的已处理待办
|
// 删除当前节点的已处理待办
|
||||||
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 {
|
} else {
|
||||||
bd.getBusinessDatabase()
|
bd.getBusinessDatabase()
|
||||||
.eq("document_no", flow.getId())
|
.eq("document_no", flow.getId())
|
||||||
|
.ne("owner_id", permissionGetter.getCurrentUserId())
|
||||||
|
.update("is_delete", 2)
|
||||||
.doDelete(TodoTaskPojo.class);
|
.doDelete(TodoTaskPojo.class);
|
||||||
}
|
}
|
||||||
|
bd.getBusinessDatabase()
|
||||||
|
.eq("document_no", flow.getId())
|
||||||
|
.eq("owner_id", permissionGetter.getCurrentUserId())
|
||||||
|
.update("is_delete", 1)
|
||||||
|
.doUpdate(TodoTaskPojo.class);
|
||||||
|
|
||||||
// 处理驳回逻辑
|
// 处理驳回逻辑
|
||||||
if ("REJECT".equals(request.getResult())) {
|
if ("REJECT".equals(request.getResult())) {
|
||||||
@ -280,17 +283,17 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
.setVar("templateId", form.getTemplateId())
|
.setVar("templateId", form.getTemplateId())
|
||||||
.doPageQuery(form.getPageNumber(), form.getPageSize(), TemplateChangeView.class);
|
.doPageQuery(form.getPageNumber(), form.getPageSize(), TemplateChangeView.class);
|
||||||
|
|
||||||
results.getResult().forEach(item -> {
|
// results.getResult().forEach(item -> {
|
||||||
if (item.getPreTemplateId() != null) {
|
// if (item.getPreTemplateId() != null) {
|
||||||
Parameter parameter = bd.getBusinessDatabase()
|
// Parameter parameter = bd.getBusinessDatabase()
|
||||||
.viewQueryMode(true)
|
// .viewQueryMode(true)
|
||||||
.view("selectParametersByTemplateId")
|
// .view("selectParametersByTemplateId")
|
||||||
.setVar("templateId", item.getPreTemplateId())
|
// .setVar("templateId", item.getPreTemplateId())
|
||||||
.eq("parameter_number", item.getParameterNumber())
|
// .eq("parameter_number", item.getParameterNumber())
|
||||||
.doQueryFirst(Parameter.class);
|
// .doQueryFirst(Parameter.class);
|
||||||
BeanUtils.copyProperties(parameter, item);
|
// BeanUtils.copyProperties(parameter, item);
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
@ -528,6 +531,12 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
|||||||
clearNodeTodo(flow, "COUNTERSIGN");
|
clearNodeTodo(flow, "COUNTERSIGN");
|
||||||
}
|
}
|
||||||
clearNodeTodo(flow, "APPROVE");
|
clearNodeTodo(flow, "APPROVE");
|
||||||
|
// 清除已有待办
|
||||||
|
bd.getBusinessDatabase()
|
||||||
|
.eq("document_no", flow.getId())
|
||||||
|
.ne("owner_id", permissionGetter.getCurrentUserId())
|
||||||
|
.update("is_delete", 2)
|
||||||
|
.doDelete(TodoTaskPojo.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clearNodeTodoSmart(ApprovalFlow flow, String currentNode, String nextNode) {
|
private void clearNodeTodoSmart(ApprovalFlow flow, String currentNode, String nextNode) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user