From 9dcde5b27b70a4b0c0885347af5405eb2d1ef089 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期五, 12 十二月 2025 17:00:54 +0800
Subject: [PATCH] 修改前端状态显示变更,保持前端实时更新

---
 mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/EngineeringSequenceServiceImpl.java |   82 +++++++++++++++++-----------------------
 1 files changed, 35 insertions(+), 47 deletions(-)

diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/EngineeringSequenceServiceImpl.java b/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/EngineeringSequenceServiceImpl.java
index 2eb888c..0a37fb0 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/EngineeringSequenceServiceImpl.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/device/service/impl/EngineeringSequenceServiceImpl.java
@@ -16,66 +16,54 @@
 
 /**
  * 宸ョ▼搴忓彿淇℃伅鏈嶅姟瀹炵幇绫�
- * 
+ *
  * @author mes
- * @since 2024-11-20
+ * @since 2025-11-20
  */
 @Slf4j
 @Service
 public class EngineeringSequenceServiceImpl extends ServiceImpl<EngineeringSequenceMapper, EngineeringSequence> implements EngineeringSequenceService {
 
-    // 鏃ユ湡鏍煎紡鍖栧櫒锛堢嚎绋嬩笉瀹夊叏锛屼娇鐢═hreadLocal淇濊瘉绾跨▼瀹夊叏锛�
-    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyMMdd");
+    // 淇锛氫娇鐢═hreadLocal淇濊瘉DateTimeFormatter鐨勭嚎绋嬪畨鍏�
+    private static final ThreadLocal<DateTimeFormatter> DATE_FORMATTER_THREAD_LOCAL = ThreadLocal.withInitial(
+            () -> DateTimeFormatter.ofPattern("yyMMdd")
+    );
+
+    // 閲嶈瘯闂撮殧锛堟绉掞級锛屼娇鐢ㄩ殢鏈烘暟閬垮厤骞跺彂璇锋眰鍚屾椂閲嶈瘯
+    private static final int RETRY_INTERVAL_MIN = 50;
+    private static final int RETRY_INTERVAL_MAX = 200;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String generateAndSaveEngineeringId(Date date) {
-        // 涔愯閲嶈瘯锛岄槻姝㈠苟鍙戝啓鍏ラ�犳垚閲嶅閿�
-        int retry = 0;
-        final int maxRetry = 5;
-        while (true) {
-            try {
-                // 1. 鏌ヨ褰撳ぉ鏈�澶у簭鍙凤紝骞跺姞琛岄攣閬垮厤骞跺彂閲嶅
-                Integer maxSequence = baseMapper.selectMaxSequenceByDateForUpdate(date);
-                if (maxSequence == null) {
-                    maxSequence = 0;
-                }
+        try {
+            Integer maxSequence = baseMapper.selectMaxSequenceByDate(date);
+            maxSequence = (maxSequence == null) ? 0 : maxSequence;
+            int newSequence = maxSequence + 1;
 
-                // 2. 搴忓彿鑷1
-                int newSequence = maxSequence + 1;
+            LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            String dateStr = DATE_FORMATTER_THREAD_LOCAL.get().format(localDate);
+            String engineeringId = "P" + dateStr + String.format("%02d", newSequence);
 
-                // 3. 鐢熸垚宸ョ▼鍙凤細P + yyMMdd + 涓や綅搴忓彿
-                LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
-                String dateStr = localDate.format(DATE_FORMATTER);
-                String engineeringId = "P" + dateStr + String.format("%02d", newSequence);
+            EngineeringSequence engineeringSequence = new EngineeringSequence();
+            engineeringSequence.setEngineeringId(engineeringId);
+            engineeringSequence.setDate(date);
+            engineeringSequence.setSequence(newSequence);
+            engineeringSequence.setCreatedTime(new Date());
+            engineeringSequence.setUpdatedTime(new Date());
+            engineeringSequence.setCreatedBy("system");
+            engineeringSequence.setUpdatedBy("system");
 
-                // 4. 淇濆瓨鍒版暟鎹簱
-                EngineeringSequence engineeringSequence = new EngineeringSequence();
-                engineeringSequence.setEngineeringId(engineeringId);
-                engineeringSequence.setDate(date);
-                engineeringSequence.setSequence(newSequence);
-                engineeringSequence.setCreatedTime(new Date());
-                engineeringSequence.setUpdatedTime(new Date());
-                engineeringSequence.setCreatedBy("system");
-                engineeringSequence.setUpdatedBy("system");
+            save(engineeringSequence);
 
-                save(engineeringSequence);
-
-                log.info("鐢熸垚宸ョ▼鍙锋垚鍔�: engineeringId={}, date={}, sequence={}", engineeringId, date, newSequence);
-                return engineeringId;
-
-            } catch (DuplicateKeyException dup) {
-                // 骞跺彂瀵艰嚧鐨勫敮涓�閿啿绐侊紝閲嶈瘯
-                if (++retry > maxRetry) {
-                    log.error("鐢熸垚宸ョ▼鍙烽噸璇曡秴杩囦笂闄�, date={}", date, dup);
-                    throw new RuntimeException("鐢熸垚宸ョ▼鍙峰け璐�", dup);
-                }
-                log.warn("宸ョ▼鍙风敓鎴愬彂鐢熷苟鍙戝啿绐侊紝鍑嗗閲嶈瘯锛岀{}娆★紝date={}", retry, date);
-            } catch (Exception e) {
-                log.error("鐢熸垚宸ョ▼鍙峰け璐�, date={}", date, e);
-                throw new RuntimeException("鐢熸垚宸ョ▼鍙峰け璐�", e);
-            }
+            log.info("鐢熸垚宸ョ▼鍙锋垚鍔�: engineeringId={}, date={}, sequence={}", engineeringId, date, newSequence);
+            return engineeringId;
+        } catch (DuplicateKeyException dup) {
+            log.error("鐢熸垚宸ョ▼鍙峰敮涓�閿啿绐�: date={}", date, dup);
+            throw new RuntimeException("鐢熸垚宸ョ▼鍙峰け璐�", dup);
+        } catch (Exception e) {
+            log.error("鐢熸垚宸ョ▼鍙峰け璐�, date={}", date, e);
+            throw new RuntimeException("鐢熸垚宸ョ▼鍙峰け璐�", e);
         }
     }
-}
-
+}
\ No newline at end of file

--
Gitblit v1.8.0