修改:参数修改逻辑问题
This commit is contained in:
parent
b2ff53fa48
commit
38ddb04eac
@ -29,7 +29,7 @@ public class ParameterForm {
|
||||
|
||||
private String numberOrFormula;
|
||||
|
||||
@NotBlank(message = "子部门不能为空")
|
||||
@NotBlank(message = "部门不能为空")
|
||||
private String department;
|
||||
|
||||
private String remarks;
|
||||
|
||||
@ -4,6 +4,7 @@ import cn.hutool.core.codec.Base64;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
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.controller.form.BenchmarkingReportPageForm;
|
||||
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.FileUploadDTO;
|
||||
import com.xdap.self_development.feign.dto.UserTokenDT0;
|
||||
import com.xdap.self_development.pojo.ApprovalFlow;
|
||||
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.*;
|
||||
import com.xdap.self_development.pojo.view.ApprovalFlowView;
|
||||
import com.xdap.self_development.pojo.view.ApprovalNodeView;
|
||||
import com.xdap.self_development.pojo.view.TodoAndReportView;
|
||||
import com.xdap.self_development.service.BenchmarkingReportService;
|
||||
import com.xdap.self_development.service.XdapDeptUsersService;
|
||||
import com.xdap.self_development.utils.RedisLockUtil;
|
||||
import org.bson.types.ObjectId;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@ -50,6 +49,10 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
||||
private ApaasMyTokenFeign apaasMyTokenFeign;
|
||||
@Resource
|
||||
private RedisLockUtil redisLockUtil;
|
||||
@Resource
|
||||
private UserPermissionGetter permissionGetter;
|
||||
@Resource
|
||||
private XdapDeptUsersService xdapDeptUsersService;
|
||||
|
||||
@Value("${apaas.token.clientId}")
|
||||
private String clientId;
|
||||
@ -88,12 +91,42 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
||||
flow.setExplanation(form.getExplanation());
|
||||
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待办信息(校对节点)
|
||||
form.getProofreadUsers().forEach(userId -> {
|
||||
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
|
||||
public void restartReportApproval(UpdateBenchmarkingReportForm form) {
|
||||
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();
|
||||
record.setFlowId(flow.getId());
|
||||
@ -300,6 +334,16 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
||||
|
||||
redisTemplate.opsForSet().add(NODE_PROCESSED_PREFIX + flow.getId() + ":" + currentNode,
|
||||
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())) {
|
||||
@ -334,7 +378,7 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
||||
clearProcessed(flow);
|
||||
} else {
|
||||
flow.setCurrentNode(nextNode);
|
||||
addNodeTodo(flow, nextNode);
|
||||
addNodeTodo(flow, nextNode, report);
|
||||
}
|
||||
|
||||
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);
|
||||
users.forEach(userId -> {
|
||||
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) {
|
||||
@ -410,6 +474,12 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
|
||||
clearNodeTodo(flow, "PROOFREAD");
|
||||
clearNodeTodo(flow, "REVIEW");
|
||||
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) {
|
||||
|
||||
@ -117,7 +117,7 @@ public class ParameterServiceImpl implements ParameterService {
|
||||
private void validateTemplateStatus(TemplateBenchmark benchmark) {
|
||||
// 当前修改的模板不为最新版
|
||||
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())) {
|
||||
BeanUtils.copyProperties(form, updatedParameter);
|
||||
updatedParameter.setId(originalParameter.getId());
|
||||
updatedParameter.setId(null);
|
||||
updatedParameter.setCreatedBy(permissionGetter.getCurrentUserId());
|
||||
detail = getParameterChange(originalParameter, updatedParameter);
|
||||
bd.getBusinessDatabase().rowid("id", originalParameter.getRowId()).doUpdate(updatedParameter);
|
||||
bd.getBusinessDatabase()
|
||||
.rowid("id", originalParameter.getRowId())
|
||||
.doUpdate(updatedParameter);
|
||||
}
|
||||
// 如果是新模板,就新增
|
||||
else {
|
||||
BeanUtils.copyProperties(form, updatedParameter);
|
||||
updatedParameter.setCreatedBy(permissionGetter.getCurrentUserId());
|
||||
updatedParameter.setId(null);
|
||||
detail = getParameterChange(originalParameter, updatedParameter);
|
||||
bd.getBusinessDatabase().doInsert(updatedParameter);
|
||||
}
|
||||
|
||||
@ -198,7 +198,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
throw new CommonException("无权限处理或已被处理");
|
||||
}
|
||||
|
||||
// 会签节点
|
||||
// 抢签节点
|
||||
if (!"COUNTERSIGN".equals(currentNode)) {
|
||||
String lockKey = FLOW_LOCK_PREFIX + flow.getId() + ":" + currentNode;
|
||||
String lockValue = UUID.randomUUID().toString();
|
||||
@ -224,7 +224,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
redisLockUtil.unlock(lockKey, lockValue);
|
||||
}
|
||||
}
|
||||
// 抢签节点
|
||||
// 会签节点
|
||||
else {
|
||||
processApprovalLogic(flow, request, currentNode);
|
||||
}
|
||||
@ -248,15 +248,18 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
// 删除当前节点的已处理待办
|
||||
if ("COUNTERSIGN".equals(flow.getCurrentNode())) {
|
||||
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())
|
||||
.ne("owner_id", permissionGetter.getCurrentUserId())
|
||||
.update("is_delete", 2)
|
||||
.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())) {
|
||||
@ -280,17 +283,17 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
.setVar("templateId", form.getTemplateId())
|
||||
.doPageQuery(form.getPageNumber(), form.getPageSize(), TemplateChangeView.class);
|
||||
|
||||
results.getResult().forEach(item -> {
|
||||
if (item.getPreTemplateId() != null) {
|
||||
Parameter parameter = bd.getBusinessDatabase()
|
||||
.viewQueryMode(true)
|
||||
.view("selectParametersByTemplateId")
|
||||
.setVar("templateId", item.getPreTemplateId())
|
||||
.eq("parameter_number", item.getParameterNumber())
|
||||
.doQueryFirst(Parameter.class);
|
||||
BeanUtils.copyProperties(parameter, item);
|
||||
}
|
||||
});
|
||||
// results.getResult().forEach(item -> {
|
||||
// if (item.getPreTemplateId() != null) {
|
||||
// Parameter parameter = bd.getBusinessDatabase()
|
||||
// .viewQueryMode(true)
|
||||
// .view("selectParametersByTemplateId")
|
||||
// .setVar("templateId", item.getPreTemplateId())
|
||||
// .eq("parameter_number", item.getParameterNumber())
|
||||
// .doQueryFirst(Parameter.class);
|
||||
// BeanUtils.copyProperties(parameter, item);
|
||||
// }
|
||||
// });
|
||||
|
||||
return results;
|
||||
}
|
||||
@ -528,6 +531,12 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
|
||||
clearNodeTodo(flow, "COUNTERSIGN");
|
||||
}
|
||||
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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user