修改:导入修改前的保存

This commit is contained in:
zjh 2025-12-25 18:43:11 +08:00
parent e47f92f576
commit 2b63397840
6 changed files with 52 additions and 21 deletions

View File

@ -8,6 +8,5 @@ import javax.validation.constraints.NotBlank;
public class ApprovalFlowForm { public class ApprovalFlowForm {
@NotBlank(message = "流程不能为空") @NotBlank(message = "流程不能为空")
private String flowId; private String flowId;
@NotBlank(message = "模板不能为空")
private String templateId; private String templateId;
} }

View File

@ -9,7 +9,7 @@ import java.sql.Timestamp;
@SQLQuery(value = { @SQLQuery(value = {
@SQL(view = "getAllReport", @SQL(view = "getAllReport",
sql = "SELECT br.id AS \"reportId\", br.* FROM yfsjglpt_model_benchmarking_report br WHERE br.is_delete = 0 and br.title like CONCAT('%', #title, '%') and br.manufacturer_name like CONCAT('%', #manufacturerName, '%') and br.model_name like CONCAT('%', #modelName, '%') and br.product_number like CONCAT('%', #productNumber, '%') and br.module like CONCAT('%', #module, '%') and br.plate like CONCAT('%', #plate, '%') and br.platform like CONCAT('%', #platform, '%') and br.series like CONCAT('%', #series, '%') and br.market_segment like CONCAT('%', #marketSegment, '%') and br.project_name like CONCAT('%', #projectName, '%') and br.project_number like CONCAT('%', #projectNumber, '%') and br.status like CONCAT('%', #status, '%') ORDER BY CASE br.status WHEN 'COMPLETE' THEN 1 WHEN 'APPROVING' THEN 2 WHEN 'REJECTED' THEN 3 ELSE 4 END ASC") sql = "SELECT br.id AS \"reportId\", br.* FROM yfsjglpt_model_benchmarking_report br WHERE br.is_delete = 0 and br.title like CONCAT('%', #title, '%') and br.manufacturer_name like CONCAT('%', #manufacturerName, '%') and br.model_name like CONCAT('%', #modelName, '%') and br.product_number like CONCAT('%', #productNumber, '%') and br.module like CONCAT('%', #module, '%') and br.plate like CONCAT('%', #plate, '%') and br.platform like CONCAT('%', #platform, '%') and br.series like CONCAT('%', #series, '%') and br.market_segment like CONCAT('%', #marketSegment, '%') and br.project_name like CONCAT('%', #projectName, '%') and br.project_number like CONCAT('%', #projectNumber, '%') and br.status like CONCAT('%', #status, '%') ORDER BY CASE br.status WHEN 'COMPLETE' THEN 1 WHEN 'APPROVING' THEN 2 WHEN 'REJECTED' THEN 3 ELSE 4 END ASC , af.created_time DESC")
}) })
@Data @Data
public class TodoAndReportView { public class TodoAndReportView {

View File

@ -2,6 +2,9 @@ package com.xdap.self_development.service;
import com.definesys.mpaas.query.db.PageQueryResult; import com.definesys.mpaas.query.db.PageQueryResult;
import com.xdap.self_development.controller.form.*; import com.xdap.self_development.controller.form.*;
import com.xdap.self_development.pojo.ApprovalConfigPojo;
import com.xdap.self_development.pojo.ApprovalFlow;
import com.xdap.self_development.pojo.Template;
import com.xdap.self_development.pojo.view.ApprovalFlowNodeView; import com.xdap.self_development.pojo.view.ApprovalFlowNodeView;
import com.xdap.self_development.pojo.view.TemplateChangeView; import com.xdap.self_development.pojo.view.TemplateChangeView;
import com.xdap.self_development.pojo.view.TodoAndTemplateView; import com.xdap.self_development.pojo.view.TodoAndTemplateView;
@ -20,4 +23,18 @@ public interface TemplateApprovalService {
ApprovalFlowNodeView getApprovalProcess(@Valid ApprovalFlowForm form); ApprovalFlowNodeView getApprovalProcess(@Valid ApprovalFlowForm form);
void handleReturn(@Valid HandleApprovalRequest request); void handleReturn(@Valid HandleApprovalRequest request);
void processApprovalLogic(
ApprovalFlow flow, HandleApprovalRequest request, ApprovalConfigPojo currentNode
);
void cancelProcess(ApprovalFlow flow, String status);
void processNextNode(ApprovalFlow flow, ApprovalConfigPojo currentNode, String userId);
boolean checkNodeComplete(ApprovalFlow flow, ApprovalConfigPojo node);
void updateTasks(ApprovalFlow flow, String status);
void addNodeTodo(ApprovalFlow flow, ApprovalConfigPojo node, Template template, String createBy);
} }

View File

@ -131,6 +131,8 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
initiatedTask.setDataType("对标报告审核"); initiatedTask.setDataType("对标报告审核");
initiatedTask.setProcessTitle(form.getProcessTitle()); initiatedTask.setProcessTitle(form.getProcessTitle());
initiatedTask.setCreationDate(Timestamp.valueOf(LocalDateTime.now())); initiatedTask.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
initiatedTask.setIsDelete(0);
initiatedTask.setModelId(flow.getTemplateId());
bd.getBusinessDatabase().doInsert(initiatedTask); bd.getBusinessDatabase().doInsert(initiatedTask);
// 更新报告状态为校对中 // 更新报告状态为校对中
@ -343,6 +345,8 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
completedTaskPojo.setOwnerId(request.getUserId()); completedTaskPojo.setOwnerId(request.getUserId());
completedTaskPojo.setProcessTitle(flow.getProcessTitle()); completedTaskPojo.setProcessTitle(flow.getProcessTitle());
completedTaskPojo.setCreationDate(Timestamp.valueOf(LocalDateTime.now())); completedTaskPojo.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
completedTaskPojo.setIsDelete(0);
completedTaskPojo.setModelId(flow.getTemplateId());
bd.getBusinessDatabase().doInsert(completedTaskPojo); bd.getBusinessDatabase().doInsert(completedTaskPojo);
// 处理驳回逻辑 // 处理驳回逻辑
@ -445,7 +449,7 @@ public class BenchmarkingReportServiceImpl implements BenchmarkingReportService
.doUpdate(CompletedTaskPojo.class); .doUpdate(CompletedTaskPojo.class);
bd.getBusinessDatabase() bd.getBusinessDatabase()
.eq("document_no", flow.getId()) .eq("document_no", flow.getId())
.update("current_node", "已拒绝") .update("current_node", status)
.doUpdate(InitiatedTaskPojo.class); .doUpdate(InitiatedTaskPojo.class);
} }

View File

@ -35,6 +35,8 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
private RedisLockUtil redisLockUtil; private RedisLockUtil redisLockUtil;
@Resource @Resource
private XdapDeptUsersService xdapDeptUsersService; private XdapDeptUsersService xdapDeptUsersService;
@Resource
private TemplateApprovalService myself;
// 分布式锁标志 // 分布式锁标志
private static final String FLOW_LOCK_PREFIX = "approval:lock:"; private static final String FLOW_LOCK_PREFIX = "approval:lock:";
@ -141,11 +143,14 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo(); InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo();
initiatedTask.setDocumentNo(flow.getId()); initiatedTask.setDocumentNo(flow.getId());
initiatedTask.setCreatedById(request.getUserId()); initiatedTask.setCreatedById(request.getUserId());
initiatedTask.setCreatedBy(xdapDeptUsersService.selectUserByID(request.getUserId()).getUsername());
initiatedTask.setCurrentNode(firstNode.getNodeName()); initiatedTask.setCurrentNode(firstNode.getNodeName());
initiatedTask.setCurrentProcessor(JSON.toJSONString(firstNode.getAssignees())); initiatedTask.setCurrentProcessor(JSON.toJSONString(firstNode.getAssignees()));
initiatedTask.setDataType("模板审核"); initiatedTask.setDataType("模板审核");
initiatedTask.setProcessTitle(request.getProcessTitle()); initiatedTask.setProcessTitle(request.getProcessTitle());
initiatedTask.setCreationDate(Timestamp.valueOf(LocalDateTime.now())); initiatedTask.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
initiatedTask.setIsDelete(0);
initiatedTask.setModelId(flow.getTemplateId());
bd.getBusinessDatabase().doInsert(initiatedTask); bd.getBusinessDatabase().doInsert(initiatedTask);
// 更新模板状态为校对中 // 更新模板状态为校对中
@ -229,14 +234,14 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
if (processedCount > 0) { if (processedCount > 0) {
throw new CommonException("此节点已被他人处理"); throw new CommonException("此节点已被他人处理");
} }
processApprovalLogic(flow, request, currentNode); myself.processApprovalLogic(flow, request, currentNode);
} finally { } finally {
redisLockUtil.unlock(lockKey, lockValue); redisLockUtil.unlock(lockKey, lockValue);
} }
} }
// 会签节点 // 会签节点
else { else {
processApprovalLogic(flow, request, currentNode); myself.processApprovalLogic(flow, request, currentNode);
} }
} }
@ -246,7 +251,9 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
.toJavaList(String.class).contains(userId); .toJavaList(String.class).contains(userId);
} }
private void processApprovalLogic(ApprovalFlow flow, HandleApprovalRequest request, ApprovalConfigPojo currentNode) { public void processApprovalLogic(
ApprovalFlow flow, HandleApprovalRequest request, ApprovalConfigPojo currentNode
) {
// 记录审批结果 // 记录审批结果
ApprovalRecord record = new ApprovalRecord(); ApprovalRecord record = new ApprovalRecord();
record.setFlowId(flow.getId()); record.setFlowId(flow.getId());
@ -269,30 +276,33 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
CompletedTaskPojo completedTaskPojo = new CompletedTaskPojo(); CompletedTaskPojo completedTaskPojo = new CompletedTaskPojo();
completedTaskPojo.setDocumentNo(flow.getId()); completedTaskPojo.setDocumentNo(flow.getId());
completedTaskPojo.setCreatedById(request.getUserId()); completedTaskPojo.setCreatedById(request.getUserId());
completedTaskPojo.setCreatedBy(xdapDeptUsersService.selectUserByID(request.getUserId()).getUsername());
completedTaskPojo.setCurrentNode(currentNode.getNodeName()); completedTaskPojo.setCurrentNode(currentNode.getNodeName());
completedTaskPojo.setCurrentProcessor(JSON.toJSONString(currentNode.getAssignees())); completedTaskPojo.setCurrentProcessor(currentNode.getAssignees());
completedTaskPojo.setDataType("模板审核"); completedTaskPojo.setDataType("模板审核");
completedTaskPojo.setOwnerId(request.getUserId()); completedTaskPojo.setOwnerId(request.getUserId());
completedTaskPojo.setProcessTitle(flow.getProcessTitle()); completedTaskPojo.setProcessTitle(flow.getProcessTitle());
completedTaskPojo.setCreationDate(Timestamp.valueOf(LocalDateTime.now())); completedTaskPojo.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
completedTaskPojo.setIsDelete(0);
completedTaskPojo.setModelId(flow.getTemplateId());
bd.getBusinessDatabase().doInsert(completedTaskPojo); bd.getBusinessDatabase().doInsert(completedTaskPojo);
// 处理驳回逻辑 // 处理驳回逻辑
if ("REJECT".equals(request.getResult())) { if ("REJECT".equals(request.getResult())) {
// 审批人退回 // 审批人退回
cancelProcess(flow, "REJECTED"); myself.cancelProcess(flow, "REJECTED");
return; return;
} else if ("RETURN".equals(request.getResult())) { } else if ("RETURN".equals(request.getResult())) {
// 申请人撤回 // 申请人撤回
cancelProcess(flow, "RETURNED"); myself.cancelProcess(flow, "RETURNED");
return; return;
} }
// 处理通过逻辑流转到下一节点 // 处理通过逻辑流转到下一节点
processNextNode(flow, currentNode, request.getUserId()); myself.processNextNode(flow, currentNode, request.getUserId());
} }
private void cancelProcess(ApprovalFlow flow, String status) { public void cancelProcess(ApprovalFlow flow, String status) {
// 更新流程状态 // 更新流程状态
flow.setFlowStatus(status); flow.setFlowStatus(status);
bd.getBusinessDatabase() bd.getBusinessDatabase()
@ -310,13 +320,13 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
.update("return_num", template.getReturnNum() + 1) .update("return_num", template.getReturnNum() + 1)
.doUpdate(Template.class); .doUpdate(Template.class);
updateTasks(flow, "已拒绝"); myself.updateTasks(flow, "已拒绝");
} }
// 处理下一节点流转 // 处理下一节点流转
private void processNextNode(ApprovalFlow flow, ApprovalConfigPojo currentNode, String userId) { public void processNextNode(ApprovalFlow flow, ApprovalConfigPojo currentNode, String userId) {
// 检查当前节点是否满足流转条件 // 检查当前节点是否满足流转条件
if (!checkNodeComplete(flow, currentNode)) { if (!myself.checkNodeComplete(flow, currentNode)) {
return; return;
} }
@ -347,12 +357,12 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
.update("published_time", Timestamp.valueOf(LocalDateTime.now())) .update("published_time", Timestamp.valueOf(LocalDateTime.now()))
.doUpdate(Template.class); .doUpdate(Template.class);
// 待办环节修改 // 待办环节修改
updateTasks(flow, "已完成"); myself.updateTasks(flow, "已完成");
// 更新机型版本 // 更新机型版本
// dataEntryEngineModelService.updateModelForNewVersion(); // dataEntryEngineModelService.updateModelForNewVersion();
} else { } else {
flow.setCurrentNode(nextNode.getNodeOrder()); flow.setCurrentNode(nextNode.getNodeOrder());
addNodeTodo(flow, nextNode, template, userId); myself.addNodeTodo(flow, nextNode, template, userId);
} }
bd.getBusinessDatabase() bd.getBusinessDatabase()
@ -363,7 +373,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
} }
// 检查节点是否完成 // 检查节点是否完成
private boolean checkNodeComplete(ApprovalFlow flow, ApprovalConfigPojo node) { public boolean checkNodeComplete(ApprovalFlow flow, ApprovalConfigPojo node) {
Integer processedCount = bd.getBusinessDatabase() Integer processedCount = bd.getBusinessDatabase()
.eq("flow_id", flow.getId()) .eq("flow_id", flow.getId())
.eq("node", node.getNodeName()) .eq("node", node.getNodeName())
@ -375,7 +385,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
} }
} }
private void addNodeTodo(ApprovalFlow flow, ApprovalConfigPojo node, Template template, String createBy) { public void addNodeTodo(ApprovalFlow flow, ApprovalConfigPojo node, Template template, String createBy) {
// 获取处理人 // 获取处理人
List<String> users = JSON.parseArray(node.getAssignees()).toJavaList(String.class); List<String> users = JSON.parseArray(node.getAssignees()).toJavaList(String.class);
// 新增待办 // 新增待办
@ -400,14 +410,14 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
} }
// 更新已办和发起的状态 // 更新已办和发起的状态
updateTasks(flow, node.getNodeName()); myself.updateTasks(flow, node.getNodeName());
if (!list.isEmpty()) { if (!list.isEmpty()) {
bd.getBusinessDatabase().doBatchInsert(list); bd.getBusinessDatabase().doBatchInsert(list);
} }
} }
private void updateTasks(ApprovalFlow flow, String status) { public void updateTasks(ApprovalFlow flow, String status) {
// 更新已办和发起的节点状态 // 更新已办和发起的节点状态
bd.getBusinessDatabase() bd.getBusinessDatabase()
.eq("document_no", flow.getId()) .eq("document_no", flow.getId())
@ -415,7 +425,7 @@ public class TemplateApprovalServiceImpl implements TemplateApprovalService {
.doUpdate(CompletedTaskPojo.class); .doUpdate(CompletedTaskPojo.class);
bd.getBusinessDatabase() bd.getBusinessDatabase()
.eq("document_no", flow.getId()) .eq("document_no", flow.getId())
.update("current_node", "已拒绝") .update("current_node", status)
.doUpdate(InitiatedTaskPojo.class); .doUpdate(InitiatedTaskPojo.class);
} }

View File

@ -227,6 +227,7 @@ public class TemplateServiceImpl implements TemplateService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void processSheetData(List<Parameter> dataList, String sheetName, public void processSheetData(List<Parameter> dataList, String sheetName,
String templateRowId, String createBy, MyResponse problems) { String templateRowId, String createBy, MyResponse problems) {
if (dataList.isEmpty()) { if (dataList.isEmpty()) {