From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/support/LimsAuditTargetIds.java |  228 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 228 insertions(+), 0 deletions(-)

diff --git a/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/support/LimsAuditTargetIds.java b/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/support/LimsAuditTargetIds.java
new file mode 100644
index 0000000..7bc0870
--- /dev/null
+++ b/jnpf-lims/jnpf-lims-biz/src/main/java/jnpf/limsService/support/LimsAuditTargetIds.java
@@ -0,0 +1,228 @@
+package jnpf.limsService.support;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import jnpf.limsMapper.LimsHaocaiRukuYanshouMapper;
+import jnpf.limsMapper.LimsHaocaiRukuZixiangMapper;
+import jnpf.limsMapper.LimsHaocaiXiaohuiShenqingMapper;
+import jnpf.limsMapper.LimsHaocaiXiaohuiShenqingZixiangMapper;
+import jnpf.limsMapper.LimsHuanjingJianceBaogaoMapper;
+import jnpf.limsMapper.LimsHuanjingJianceJihuaMapper;
+import jnpf.limsMapper.LimsHuanjingJianceJihuaZhongzhiMapper;
+import jnpf.limsMapper.LimsLiuyangJihuaBiangengShenqingMapper;
+import jnpf.limsMapper.LimsQingyandanYichangShenqingMapper;
+import jnpf.limsMapper.LimsShebeiYiqiJiaozhunNeibuMapper;
+import jnpf.limsMapper.LimsShebeiYiqiJiaozhunWaibuMapper;
+import jnpf.limsMapper.LimsShebeiYiqiJiliangMapper;
+import jnpf.limsMapper.LimsShebeiYiqiPeijianGenghuanZixiangMapper;
+import jnpf.limsMapper.LimsShebeiYiqiQijuBaofeiMapper;
+import jnpf.limsMapper.LimsShebeiYiqiYanzhengMapper;
+import jnpf.limsMapper.LimsShebeiYiqiWeibaoZixiangMapper;
+import jnpf.limsMapper.LimsWendingxingChurukuMapper;
+import jnpf.limsMapper.LimsWendingxingChurukuZixiangMapper;
+import jnpf.limsMapper.LimsWendingxingKaocaJihuaBiangengMapper;
+import jnpf.limsMapper.LimsWendingxingKaocaJihuaBiangengZhouqiMapper;
+import jnpf.limsMapper.LimsWendingxingXiaohuiShenqingMapper;
+import jnpf.util.context.SpringContext;
+
+import java.util.List;
+import java.util.Map;
+
+/** 涓� @AuditLog 鐨� SpEL 鍦ㄤ笟鍔℃墽琛屽墠瑙f瀽鍏宠仈琛ㄧ湡瀹炰富閿�� */
+public final class LimsAuditTargetIds {
+
+    private LimsAuditTargetIds() {
+    }
+
+    public static String liuyangJihuaByChangeFlow(String flowId, String taskId) {
+        return lookup(LimsLiuyangJihuaBiangengShenqingMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "liuyang_jihua_id");
+    }
+
+    public static String huanjingJihuaByFlow(String flowId, String taskId) {
+        return lookup(LimsHuanjingJianceJihuaMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "f_id");
+    }
+
+    public static String huanjingJihuaByTerminateFlow(String flowId, String taskId) {
+        return lookup(LimsHuanjingJianceJihuaZhongzhiMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "jihua_id");
+    }
+
+    public static String huanjingBaogaoByFlow(String flowId, String taskId) {
+        return lookup(LimsHuanjingJianceBaogaoMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "f_id");
+    }
+
+    public static String qingyandanByExceptionFlow(String flowId, String taskId) {
+        return lookup(LimsQingyandanYichangShenqingMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "qingyandan_id");
+    }
+
+    public static String qijuByExternalCalibration(String calibrationId) {
+        return lookupById(LimsShebeiYiqiJiaozhunWaibuMapper.class, calibrationId, "qiju_id");
+    }
+
+    public static String qijuByInternalCalibrationFlow(String flowId, String taskId) {
+        return lookup(LimsShebeiYiqiJiaozhunNeibuMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "qiju_id");
+    }
+
+    public static String qijuByScrapFlow(String flowId, String taskId) {
+        return lookup(LimsShebeiYiqiQijuBaofeiMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "qiju_id");
+    }
+
+    public static String yiqiByVerification(String verificationId) {
+        return lookupById(LimsShebeiYiqiYanzhengMapper.class, verificationId, "yiqi_id");
+    }
+
+    public static String yiqiByMeasurement(String measurementId) {
+        return lookupById(LimsShebeiYiqiJiliangMapper.class, measurementId, "yiqi_id");
+    }
+
+    public static String wendingxingDestroyByFlow(String flowId, String taskId) {
+        return lookup(LimsWendingxingXiaohuiShenqingMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "f_id");
+    }
+
+    public static String haocaiAcceptanceByFlow(String flowId, String taskId) {
+        return lookup(LimsHaocaiRukuYanshouMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "f_id");
+    }
+
+    public static String haocaiAcceptanceRequestByFlow(String flowId, String taskId) {
+        return lookup(LimsHaocaiRukuYanshouMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "shenqing_id");
+    }
+
+    public static String firstPartReplacementItem(String replacementId) {
+        return lookupFirst(LimsShebeiYiqiPeijianGenghuanZixiangMapper.class,
+                "f_foreign_id", replacementId, "f_id");
+    }
+
+    public static String firstMaintenanceItem(String maintenanceId) {
+        return lookupFirst(LimsShebeiYiqiWeibaoZixiangMapper.class,
+                "f_foreign_id", maintenanceId, "f_id");
+    }
+
+    public static String firstHaocaiRukuItem(List<String> rukuIds) {
+        return lookupFirstIn(LimsHaocaiRukuZixiangMapper.class,
+                "f_foreign_id", rukuIds, "f_id");
+    }
+
+    public static String firstHaocaiDestroyItem(String destroyNumber) {
+        String requestId = lookupFirst(LimsHaocaiXiaohuiShenqingMapper.class,
+                "xiaohui_danhao", destroyNumber, "f_id");
+        return firstHaocaiDestroyItemByRequest(requestId);
+    }
+
+    public static String firstHaocaiDestroyItemByFlow(String flowId, String taskId) {
+        String requestId = lookup(LimsHaocaiXiaohuiShenqingMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "f_id");
+        return firstHaocaiDestroyItemByRequest(requestId);
+    }
+
+    public static String firstWendingxingChurukuItemByFlow(String flowId, String taskId) {
+        String churukuId = lookup(LimsWendingxingChurukuMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "f_id");
+        return lookupFirst(LimsWendingxingChurukuZixiangMapper.class,
+                "f_foreign_id", churukuId, "f_id");
+    }
+
+    public static String firstWendingxingChangedPeriod(String flowId, String taskId) {
+        String changeId = lookup(LimsWendingxingKaocaJihuaBiangengMapper.class,
+                "f_flow_id", flowId, "f_flow_task_id", taskId, "f_id");
+        return lookupFirstNotBlank(LimsWendingxingKaocaJihuaBiangengZhouqiMapper.class,
+                "biangeng_id", changeId, "yuanjihua_zhouqi_id");
+    }
+
+    private static String firstHaocaiDestroyItemByRequest(String requestId) {
+        String barcode = lookupFirstNotBlank(LimsHaocaiXiaohuiShenqingZixiangMapper.class,
+                "f_foreign_id", requestId, "tiaoma_bianma");
+        return lookupFirst(LimsHaocaiRukuZixiangMapper.class,
+                "tiaoma_bianma", barcode, "f_id");
+    }
+
+    private static String lookupById(Class<? extends BaseMapper<?>> mapperType,
+                                     String id, String selectedColumn) {
+        return lookup(mapperType, "f_id", id, null, null, selectedColumn);
+    }
+
+    private static String lookupFirst(Class<? extends BaseMapper<?>> mapperType,
+                                      String conditionColumn, String conditionValue,
+                                      String selectedColumn) {
+        if (isBlank(conditionValue)) {
+            return null;
+        }
+        return selectFirst(mapperType, new QueryWrapper<>().eq(conditionColumn, conditionValue),
+                selectedColumn, false);
+    }
+
+    private static String lookupFirstNotBlank(Class<? extends BaseMapper<?>> mapperType,
+                                              String conditionColumn, String conditionValue,
+                                              String selectedColumn) {
+        if (isBlank(conditionValue)) {
+            return null;
+        }
+        QueryWrapper<Object> query = new QueryWrapper<>();
+        query.eq(conditionColumn, conditionValue).isNotNull(selectedColumn).ne(selectedColumn, "");
+        return selectFirst(mapperType, query, selectedColumn, false);
+    }
+
+    private static String lookupFirstIn(Class<? extends BaseMapper<?>> mapperType,
+                                        String conditionColumn, List<String> conditionValues,
+                                        String selectedColumn) {
+        if (conditionValues == null || conditionValues.isEmpty()) {
+            return null;
+        }
+        return selectFirst(mapperType, new QueryWrapper<>().in(conditionColumn, conditionValues),
+                selectedColumn, false);
+    }
+
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    private static String selectFirst(Class<? extends BaseMapper<?>> mapperType,
+                                      QueryWrapper<?> conditions, String selectedColumn,
+                                      boolean requireUnique) {
+        BaseMapper mapper = SpringContext.getBean(mapperType);
+        QueryWrapper query = conditions.select(selectedColumn).orderByAsc("f_id");
+        List<Map<String, Object>> rows = mapper.selectMaps(query);
+        if (rows == null || rows.isEmpty() || (requireUnique && rows.size() != 1)) {
+            return null;
+        }
+        return mapValue(rows.get(0), selectedColumn);
+    }
+
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    private static String lookup(Class<? extends BaseMapper<?>> mapperType,
+                                 String firstColumn, String firstValue,
+                                 String secondColumn, String secondValue,
+                                 String selectedColumn) {
+        if (isBlank(firstValue) || (secondColumn != null && isBlank(secondValue))) {
+            return null;
+        }
+        BaseMapper mapper = SpringContext.getBean(mapperType);
+        QueryWrapper<Object> query = new QueryWrapper<>();
+        query.select(selectedColumn).eq(firstColumn, firstValue);
+        if (secondColumn != null) {
+            query.eq(secondColumn, secondValue);
+        }
+        List<Map<String, Object>> rows = mapper.selectMaps(query);
+        if (rows == null || rows.size() != 1) {
+            return null;
+        }
+        return mapValue(rows.get(0), selectedColumn);
+    }
+
+    private static String mapValue(Map<String, Object> row, String column) {
+        Object value = row.get(column);
+        if (value == null) {
+            value = row.get(column.toUpperCase());
+        }
+        return value == null ? null : String.valueOf(value);
+    }
+
+    private static boolean isBlank(String value) {
+        return value == null || value.trim().isEmpty();
+    }
+}

--
Gitblit v1.8.0