From e5d1fb3d5ce9468b92e79825bbcb38f05ea73aff Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期一, 12 十月 2026 18:12:34 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
cnas-process/src/main/java/com/ruoyi/process/listener/StandardMethodSearchNewListener.java | 82 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 82 insertions(+), 0 deletions(-)
diff --git a/cnas-process/src/main/java/com/ruoyi/process/listener/StandardMethodSearchNewListener.java b/cnas-process/src/main/java/com/ruoyi/process/listener/StandardMethodSearchNewListener.java
new file mode 100644
index 0000000..0ce0eee
--- /dev/null
+++ b/cnas-process/src/main/java/com/ruoyi/process/listener/StandardMethodSearchNewListener.java
@@ -0,0 +1,82 @@
+package com.ruoyi.process.listener;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.basic.event.StandardMethodSavedEvent;
+import com.ruoyi.basic.mapper.StandardMethodMapper;
+import com.ruoyi.basic.pojo.StandardMethod;
+import com.ruoyi.process.mapper.ProcessMethodSearchNewFileSeqMapper;
+import com.ruoyi.process.mapper.ProcessMethodSearchNewMapper;
+import com.ruoyi.process.pojo.ProcessMethodSearchNew;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+
+/** 鏍规嵁鏍囧噯缁存姢淇濆瓨鍔ㄤ綔鍚屾鐢熸垚銆佸綊妗f爣鍑嗘煡鏂拌褰曘�� */
+@Component
+@RequiredArgsConstructor
+public class StandardMethodSearchNewListener {
+
+ private static final ZoneId CHINA_ZONE = ZoneId.of("Asia/Shanghai");
+ private static final DateTimeFormatter FILE_DATE = DateTimeFormatter.BASIC_ISO_DATE;
+
+ private final StandardMethodMapper standardMethodMapper;
+ private final ProcessMethodSearchNewMapper searchNewMapper;
+ private final ProcessMethodSearchNewFileSeqMapper fileSeqMapper;
+
+ @EventListener
+ public void onStandardMethodSaved(StandardMethodSavedEvent event) {
+ if (!Integer.valueOf(1).equals(event.getNeedSearchNew())) {
+ return;
+ }
+
+ StandardMethod standard = standardMethodMapper.selectOne(Wrappers.<StandardMethod>lambdaQuery()
+ .eq(StandardMethod::getId, event.getStandardMethodId())
+ .last("FOR UPDATE"));
+ if (standard == null) {
+ return;
+ }
+
+ ProcessMethodSearchNew current = searchNewMapper.selectOne(Wrappers.<ProcessMethodSearchNew>lambdaQuery()
+ .eq(ProcessMethodSearchNew::getCurrentAutoStandardId, event.getStandardMethodId())
+ .last("FOR UPDATE"));
+ if (!event.isEdit() && current != null) {
+ return;
+ }
+
+ LocalDateTime now = LocalDateTime.now(CHINA_ZONE);
+ if (current != null) {
+ searchNewMapper.update(null, Wrappers.<ProcessMethodSearchNew>lambdaUpdate()
+ .eq(ProcessMethodSearchNew::getMethodSearchNewId, current.getMethodSearchNewId())
+ .set(ProcessMethodSearchNew::getIsNewStandard, 0)
+ .set(ProcessMethodSearchNew::getIsAutoArchived, 1)
+ .set(ProcessMethodSearchNew::getCurrentAutoStandardId, null)
+ .set(ProcessMethodSearchNew::getAutoArchivedTime, now));
+ }
+
+ ProcessMethodSearchNew created = new ProcessMethodSearchNew();
+ created.setMethodName(event.getName());
+ created.setStandardNo(event.getCode());
+ created.setFileNo(nextFileNo(now.toLocalDate()));
+ created.setIsNewStandard(1);
+ created.setSearchNewSource(null);
+ created.setStandardMethodId(event.getStandardMethodId());
+ created.setCurrentAutoStandardId(event.getStandardMethodId());
+ created.setIsAutoArchived(0);
+ searchNewMapper.insert(created);
+ }
+
+ private String nextFileNo(LocalDate date) {
+ String prefix = date.format(FILE_DATE);
+ fileSeqMapper.insertIfAbsent(date);
+ Integer stored = fileSeqMapper.selectForUpdate(date);
+ Integer existing = fileSeqMapper.selectMaxExisting(prefix);
+ int next = Math.max(stored == null ? 0 : stored, existing == null ? 0 : existing) + 1;
+ fileSeqMapper.updateValue(date, next);
+ return prefix + String.format("%03d", next);
+ }
+}
--
Gitblit v1.9.3