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/test/java/jnpf/limsService/impl/LimsSxtQuyangZhongzhiShenqingExecutionChecks.java | 136 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 136 insertions(+), 0 deletions(-)
diff --git a/jnpf-lims/jnpf-lims-biz/src/test/java/jnpf/limsService/impl/LimsSxtQuyangZhongzhiShenqingExecutionChecks.java b/jnpf-lims/jnpf-lims-biz/src/test/java/jnpf/limsService/impl/LimsSxtQuyangZhongzhiShenqingExecutionChecks.java
new file mode 100644
index 0000000..f6b0cc1
--- /dev/null
+++ b/jnpf-lims/jnpf-lims-biz/src/test/java/jnpf/limsService/impl/LimsSxtQuyangZhongzhiShenqingExecutionChecks.java
@@ -0,0 +1,136 @@
+package jnpf.limsService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import jnpf.limsEntity.BizStatus;
+import jnpf.limsEntity.LimsQingyandanEntity;
+import jnpf.limsEntity.LimsSxtQuyangZhongzhiShenqingZixiangEntity;
+import jnpf.limsMapper.LimsQingyandanMapper;
+import org.apache.ibatis.builder.MapperBuilderAssistant;
+import org.apache.ibatis.session.Configuration;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * 鍙栨牱缁堟瀹℃壒閫氳繃鏃惰楠屽崟鐘舵�佹洿鏂扮殑鍙墽琛屽洖褰掓鏌ワ紝鏃犻渶鏁版嵁搴撱��
+ */
+public class LimsSxtQuyangZhongzhiShenqingExecutionChecks {
+
+ public static void main(String[] args) throws Exception {
+ updatesOnlyActivePendingSxtQingyandanByDirectLink();
+ }
+
+ private static void updatesOnlyActivePendingSxtQingyandanByDirectLink() throws Exception {
+ initializeQingyandanTableInfo();
+ AtomicInteger updateCalls = new AtomicInteger();
+ AtomicReference<LambdaUpdateWrapper<LimsQingyandanEntity>> captured = new AtomicReference<>();
+ LimsQingyandanMapper mapper = mapperProxy(updateCalls, captured);
+
+ LimsSxtJihuaServiceImpl service = new LimsSxtJihuaServiceImpl(event -> {
+ });
+ setField(service, "qingyandanMapper", mapper);
+
+ LimsSxtQuyangZhongzhiShenqingZixiangEntity child = new LimsSxtQuyangZhongzhiShenqingZixiangEntity();
+ child.setQingyandanId("qingyandan-1");
+ child.setFTenantId("tenant-1");
+
+ assertTrue(invokeTerminate(service, child));
+ assertFalse(invokeTerminate(service, child));
+ assertEquals(2, updateCalls.get());
+
+ LambdaUpdateWrapper<LimsQingyandanEntity> wrapper = captured.get();
+ assertContains(wrapper.getSqlSegment(), "f_id");
+ assertContains(wrapper.getSqlSegment(), "f_tenant_id");
+ assertContains(wrapper.getSqlSegment(), "biz_type");
+ assertContains(wrapper.getSqlSegment(), "quyang_status");
+ assertContains(wrapper.getSqlSegment(), "f_delete_mark");
+
+ Map<String, Object> values = wrapper.getParamNameValuePairs();
+ assertContainsValue(values, "qingyandan-1");
+ assertContainsValue(values, "tenant-1");
+ assertContainsValue(values, "SXT");
+ assertContainsValue(values, BizStatus.PENDING_FETCH.getCode());
+ assertContainsValue(values, BizStatus.DELETED.getCode());
+ assertContainsValue(values, 1);
+ }
+
+ private static void initializeQingyandanTableInfo() {
+ if (TableInfoHelper.getTableInfo(LimsQingyandanEntity.class) == null) {
+ TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new Configuration(), ""),
+ LimsQingyandanEntity.class);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private static LimsQingyandanMapper mapperProxy(AtomicInteger updateCalls,
+ AtomicReference<LambdaUpdateWrapper<LimsQingyandanEntity>> captured) {
+ InvocationHandler handler = (proxy, method, args) -> {
+ if ("update".equals(method.getName())) {
+ captured.set((LambdaUpdateWrapper<LimsQingyandanEntity>) args[1]);
+ return updateCalls.getAndIncrement() == 0 ? 1 : 0;
+ }
+ if ("toString".equals(method.getName())) {
+ return "LimsQingyandanMapperProxy";
+ }
+ if ("hashCode".equals(method.getName())) {
+ return System.identityHashCode(proxy);
+ }
+ if ("equals".equals(method.getName())) {
+ return proxy == args[0];
+ }
+ throw new UnsupportedOperationException(method.getName());
+ };
+ return (LimsQingyandanMapper) Proxy.newProxyInstance(
+ LimsQingyandanMapper.class.getClassLoader(), new Class<?>[]{LimsQingyandanMapper.class}, handler);
+ }
+
+ private static boolean invokeTerminate(LimsSxtJihuaServiceImpl service,
+ LimsSxtQuyangZhongzhiShenqingZixiangEntity child) throws Exception {
+ Method method = LimsSxtJihuaServiceImpl.class.getDeclaredMethod("terminatePendingQingyandan",
+ LimsSxtQuyangZhongzhiShenqingZixiangEntity.class);
+ method.setAccessible(true);
+ return (Boolean) method.invoke(service, child);
+ }
+
+ private static void setField(Object target, String name, Object value) throws Exception {
+ Field field = target.getClass().getDeclaredField(name);
+ field.setAccessible(true);
+ field.set(target, value);
+ }
+
+ private static void assertContains(String source, String expected) {
+ if (!source.contains(expected)) {
+ throw new AssertionError("expected SQL to contain " + expected + ", actual=" + source);
+ }
+ }
+
+ private static void assertContainsValue(Map<String, Object> values, Object expected) {
+ if (!values.containsValue(expected)) {
+ throw new AssertionError("expected parameters to contain " + expected + ", actual=" + values);
+ }
+ }
+
+ private static void assertEquals(Object expected, Object actual) {
+ if (!expected.equals(actual)) {
+ throw new AssertionError("expected=" + expected + ", actual=" + actual);
+ }
+ }
+
+ private static void assertTrue(boolean value) {
+ if (!value) {
+ throw new AssertionError("expected true");
+ }
+ }
+
+ private static void assertFalse(boolean value) {
+ if (value) {
+ throw new AssertionError("expected false");
+ }
+ }
+}
--
Gitblit v1.8.0