Fix-deduplication-logic

This commit is contained in:
yeyijiu 2026-05-28 20:28:38 +08:00
parent f3231395d1
commit 04bc3d96c9
2 changed files with 98 additions and 2 deletions

View File

@ -17,7 +17,7 @@ import java.util.Date;
*/
@SQLQuery(value = {
@SQL(view = "selectLastedComment"
, sql = "SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY subsystem_name, parameter_name ORDER BY creation_date DESC) AS rn FROM data_change_comment WHERE param_detail_id IN (#paramIds) ) ranked WHERE rn = 1 ORDER BY subsystem_name, parameter_name")
, sql = "SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY param_detail_id ORDER BY creation_date DESC) AS rn FROM data_change_comment WHERE param_detail_id IN (#paramIds) ) ranked WHERE rn = 1 ORDER BY subsystem_name, parameter_name")
})
@Data
@EqualsAndHashCode(callSuper = false)

View File

@ -15,7 +15,7 @@ import com.xdap.self_development.domain.view.FlowNode;
import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.service.*;
import com.xdap.self_development.utils.RedisLockUtils;
import groovy.util.logging.Slf4j;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
@ -173,6 +173,9 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
public void startActiviti(ApprovalNodeRequest approvalNodeRequest) {
String processTitle = approvalNodeRequest.getProcessTitle();
String userId = approvalNodeRequest.getUserId();
log.info("startActiviti 开始执行, modelId: {}, userId: {}, processTitle: {}",
approvalNodeRequest.getModelId(), userId, processTitle);
// 1. 获取第一个审批环节按nodeOrder排序取最小
ApprovalNodeDTO firstNode = approvalNodeRequest.getNodeList().stream()
.min(Comparator.comparingInt(ApprovalNodeDTO::getNodeOrder))
@ -182,9 +185,15 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
.eq("id", approvalNodeRequest.getModelId())
.doQueryFirst(DataEntryEngineModelPojo.class);
if (ObjectUtils.isEmpty(model)) {
log.error("机型不存在, modelId: {}", approvalNodeRequest.getModelId());
throw new CommonException("机型不存在,请检查");
}
log.info("查询机型成功, modelId: {}, modelName: {}, versionNumber: {}",
model.getId(), model.getModelName(), model.getVersionNumber());
// 检查当前参数是否全部填写完成
log.info("查询待办任务: model_id={}, data_type={}, owner_id={}, process_title={}",
model.getId(), CurrentNodeEnum.REPAIR.getDesc(), userId, model.getModelName() + "-" + "填写参数任务");
TodoTaskPojo filledTodo = bd.getBusinessDatabase()
.eq("model_id", model.getId())
.eq("data_type", CurrentNodeEnum.REPAIR.getDesc())
@ -192,7 +201,11 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
.eq("owner_id", userId)
.eq("process_title", model.getModelName() + "-" + "填写参数任务")
.doQueryFirst(TodoTaskPojo.class);
log.info("查询待办任务结果: {}", filledTodo != null ? "找到待办" : "未找到待办");
if (filledTodo != null) {
log.info("查询待填写参数: engine_model_id={}, major_version={}, filled_by={}",
model.getId(), model.getVersionNumber(), userId);
List<EngineParamDetailPojo> toBeFilledParams = bd.getBusinessDatabase()
.eq("engine_model_id", model.getId())
.eq("major_version", model.getVersionNumber())
@ -200,6 +213,8 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
.isNull("minor_version")
.in("version_status", Arrays.asList(1, null))
.doQuery(EngineParamDetailPojo.class);
log.info("查询待填写参数结果: 数量={}", toBeFilledParams.size());
if (!ObjectUtils.isEmpty(toBeFilledParams)) {
StringBuilder errorMsg = new StringBuilder("填写人在当前机型的参数未全部填写完成,请检查:\n");
for (EngineParamDetailPojo param : toBeFilledParams) {
@ -215,11 +230,14 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
}
// 查询机型最新版本的参数过滤出操作为更新且由当前用户更新的参数
log.info("查询用户更新的参数: engine_model_id={}, major_version={}, last_updated_by={}",
model.getId(), model.getVersionNumber(), userId);
List<EngineParamDetailPojo> paramList = bd.getBusinessDatabase()
.eq("engine_model_id", model.getId())
.eq("major_version", model.getVersionNumber())
.eq("last_updated_by", userId)
.doQuery(EngineParamDetailPojo.class);
log.info("查询用户更新的参数结果: 数量={}", paramList.size());
if (paramList.isEmpty()) {
throw new CommonException("没有找到您需要填写的参数");
@ -232,6 +250,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
if (approvalNodeRequest.getFlowId() != null && !approvalNodeRequest.getFlowId().isEmpty()) {
// 清除拒绝提醒待办
log.info("清除拒绝提醒待办: document_no={}, data_type=数据拒绝", approvalNodeRequest.getFlowId());
bd.getBusinessDatabase()
.eq("document_no", approvalNodeRequest.getFlowId())
.eq("data_type", "数据拒绝")
@ -258,6 +277,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
engineReviewListPojo.setReturnNum(0);
engineReviewListPojo.setPreNode(-1);
log.info("插入审批记录: approvalId={}, modelId={}, statusCode={}", approvalId, model.getId(), ParamValueVersionEnum.UNDER.getCode());
bd.getBusinessDatabase().doInsert(engineReviewListPojo);
//分发待办
@ -279,6 +299,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
todoTaskPojo.setIsDelete(0);
list.add(todoTaskPojo);
}
log.info("批量插入待办任务: 数量={}", list.size());
bd.getBusinessDatabase().doBatchInsert(list);
//创建审批发起
@ -294,10 +315,12 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
initiatedTaskPojo.setCreationDate(engineReviewListPojo.getCreationDate());
initiatedTaskPojo.setIsDelete(0);
initiatedTaskPojo.setEnableReturn(1);
log.info("插入发起任务: approvalId={}", approvalId);
bd.getBusinessDatabase().doInsert(initiatedTaskPojo);
//将参数绑定到该机型审批流程中
List<String> collected = paramList.stream().map(EngineParamDetailPojo::getId).collect(Collectors.toList());
log.info("更新参数状态: approvalId={}, 参数数量={}", approvalId, collected.size());
bd.getBusinessDatabase()
.update("version_status", ParamValueVersionEnum.UNDER.getCode()) // 更新版本状态为审核中
.update("approval_id", approvalId) // 关联审批ID
@ -327,9 +350,11 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
approvalConfigs.add(config);
b = false;
}
log.info("批量插入审批配置: 数量={}", approvalConfigs.size());
bd.getBusinessDatabase().doBatchInsert(approvalConfigs);
//记录审批提交操作
log.info("插入审批记录: approvalId={}, 操作=发起审批", approvalId);
bd.getBusinessDatabase().doInsert(
new ParamApprovalRecordPojo(
approvalId,
@ -345,14 +370,18 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
);
// 参数发起审批后删除填写人的待办
log.info("查询用户待办: owner_id={}, model_id={}, data_type=数据维护", userId, model.getId());
TodoTaskPojo todoTaskPojo = bd.getBusinessDatabase()
.eq("owner_id", userId)
.eq("model_id", model.getId())
.eq("data_type", "数据维护")
.eq("is_delete", 0)
.doQueryFirst(TodoTaskPojo.class);
log.info("查询用户待办结果: {}", todoTaskPojo != null ? "找到待办" : "未找到待办");
if (todoTaskPojo != null) {
// 修改待办和发起的任务状态
log.info("删除待办: document_no={}", todoTaskPojo.getDocumentNo());
bd.getBusinessDatabase()
.update("is_delete", 1)
.update("current_node", "已维护")
@ -369,6 +398,7 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
completedTaskPojo.setCreationDate(engineReviewListPojo.getCreationDate());
completedTaskPojo.setIsDelete(0);
completedTaskPojo.setCurrentNode("已维护");
log.info("插入已办任务: document_no={}", todoTaskPojo.getDocumentNo());
bd.getBusinessDatabase().doInsert(completedTaskPojo);
InitiatedTaskPojo initiatedTask = new InitiatedTaskPojo();
@ -379,8 +409,10 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
initiatedTask.setCreationDate(engineReviewListPojo.getCreationDate());
initiatedTask.setIsDelete(0);
initiatedTask.setCurrentNode("已维护");
log.info("插入发起任务: document_no={}", todoTaskPojo.getDocumentNo());
bd.getBusinessDatabase().doInsert(initiatedTask);
}
log.info("startActiviti 执行完成");
}
/**
@ -907,6 +939,70 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
.doUpdate(EngineReviewListPojo.class);
}
// 清理旧的 data_change_comment 数据并重新生成
List<EngineParamDetailPojo> paramDetailPojos = bd.getBusinessDatabase()
.eq("approval_id", reviewListPojo.getId())
.doQuery(EngineParamDetailPojo.class);
if (!ObjectUtils.isEmpty(paramDetailPojos)) {
Set<String> paramDetailIds = paramDetailPojos.stream()
.map(EngineParamDetailPojo::getId)
.collect(Collectors.toSet());
// 删除旧的变更说明数据
bd.getBusinessDatabase()
.in("param_detail_id", paramDetailIds)
.doDelete(DataChangeCommentPojo.class);
// 重新生成变更说明数据
List<DataChangeCommentPojo> newDataChangeComments = new ArrayList<>();
for (EngineParamDetailPojo paramDetail : paramDetailPojos) {
String parameterId = paramDetail.getParameterId();
List<ParameterPojo> parameters = bd.getBusinessDatabase()
.eq("id", parameterId)
.doQuery(ParameterPojo.class);
ParameterPojo parameter = ObjectUtils.isEmpty(parameters) ? null : parameters.get(0);
String com = "";
String operation = paramDetail.getOperation();
if (ParamOperationEnum.UPDATE.toString().equals(operation)) {
String parameterValue = StringUtils.isEmpty(paramDetail.getParameterValue()) ?
"" : paramDetail.getParameterValue();
if (ObjectUtils.isEmpty(parameterValue)) {
com = "填写为:" + paramDetail.getMinorVersion();
} else {
com = "修改:" + parameterValue + "改为" + paramDetail.getMinorVersion();
}
}
if (ParamOperationEnum.INSERT.toString().equals(operation)) {
com = "新增";
}
if (ParamOperationEnum.DELETE.toString().equals(operation)) {
com = "删除";
}
DataChangeCommentPojo dataChangeCommentPojo = new DataChangeCommentPojo();
BeanUtils.copyProperties(paramDetail, dataChangeCommentPojo, "id");
if (parameter != null) {
dataChangeCommentPojo.setPartsName(parameter.getPartsName());
dataChangeCommentPojo.setUnit(parameter.getUnit());
}
dataChangeCommentPojo.setParamDetailId(paramDetail.getId());
dataChangeCommentPojo.setChangeComment(com);
dataChangeCommentPojo.setParameterValue(paramDetail.getMinorVersion());
dataChangeCommentPojo.setCreatedBy(userId);
dataChangeCommentPojo.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
newDataChangeComments.add(dataChangeCommentPojo);
}
// 批量插入新的变更说明数据
if (!ObjectUtils.isEmpty(newDataChangeComments)) {
bd.getBusinessDatabase().doBatchInsert(newDataChangeComments);
}
}
// 添加新待办
myself.addNodeTodo(
reviewListPojo,