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