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-dms/jnpf-dms-biz/src/test/java/jnpf/dmsMapper/DmsWenjianBianhaoMapperXmlTest.java |  122 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 122 insertions(+), 0 deletions(-)

diff --git a/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsMapper/DmsWenjianBianhaoMapperXmlTest.java b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsMapper/DmsWenjianBianhaoMapperXmlTest.java
new file mode 100644
index 0000000..835c0ab
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsMapper/DmsWenjianBianhaoMapperXmlTest.java
@@ -0,0 +1,122 @@
+package jnpf.dmsMapper;
+
+import org.apache.ibatis.builder.xml.XMLMapperBuilder;
+import org.apache.ibatis.io.Resources;
+import org.apache.ibatis.mapping.MappedStatement;
+import org.apache.ibatis.mapping.ResultMapping;
+import org.apache.ibatis.session.Configuration;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class DmsWenjianBianhaoMapperXmlTest {
+
+    private static final List<String> MAPPERS = Arrays.asList(
+            "DmsWenjianBianhaoGuizeMapper",
+            "DmsWenjianBianhaoGuizeZixiangMapper",
+            "DmsWenjianBianhaoLiushuiJishuMapper",
+            "DmsWenjianBianhaoMapper",
+            "DmsWenjianBianhaoShenqingMapper",
+            "DmsWenjianMingchengBiangengShenqingMapper");
+
+    @Test
+    void allFileNumberMappersUseXmlWithoutSelectStar() throws IOException {
+        for (String mapper : MAPPERS) {
+            String resource = resource(mapper);
+            String xml;
+            try (Reader reader = Resources.getResourceAsReader(resource)) {
+                xml = read(reader);
+            }
+            assertFalse(xml.toUpperCase().contains("SELECT *"), resource);
+            parse(resource);
+        }
+    }
+
+    @Test
+    void applicationFlowStateHasExplicitResultMapping() throws IOException {
+        Configuration configuration = parse(resource("DmsWenjianBianhaoShenqingMapper"));
+        assertMapping(configuration,
+                DmsWenjianBianhaoShenqingMapper.class.getName() + ".selectByFlowForUpdate",
+                "f_flow_state", "flowState");
+    }
+
+    @Test
+    void nameChangeFlowStateHasExplicitResultMapping() throws IOException {
+        Configuration configuration = parse(
+                resource("DmsWenjianMingchengBiangengShenqingMapper"));
+        assertMapping(configuration,
+                DmsWenjianMingchengBiangengShenqingMapper.class.getName()
+                        + ".selectByFlowForUpdate",
+                "f_flow_state", "flowState");
+    }
+
+    @Test
+    void usingNumberCandidatesExcludeActiveNameChangesButEchoRemainsAvailable()
+            throws IOException {
+        Configuration configuration = parse(resource("DmsWenjianBianhaoMapper"));
+        String statementId = DmsWenjianBianhaoMapper.class.getName() + ".selectUsingPage";
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("bianhaoId", "");
+        parameters.put("keyword", "");
+        String candidateSql = normalize(configuration.getMappedStatement(statementId)
+                .getBoundSql(parameters).getSql());
+        assertTrue(candidateSql.contains("NOT EXISTS"));
+        assertTrue(candidateSql.contains("c.f_flow_state IN (1, 5, 6, 8, 10)"));
+
+        parameters.put("bianhaoId", "number-1");
+        String echoSql = normalize(configuration.getMappedStatement(statementId)
+                .getBoundSql(parameters).getSql());
+        assertFalse(echoSql.contains("NOT EXISTS"));
+        assertTrue(echoSql.contains("b.f_id = ?"));
+    }
+
+    private Configuration parse(String resource) throws IOException {
+        Configuration configuration = new Configuration();
+        try (InputStream input = Resources.getResourceAsStream(resource)) {
+            XMLMapperBuilder builder = new XMLMapperBuilder(
+                    input, configuration, resource, configuration.getSqlFragments());
+            builder.parse();
+        }
+        return configuration;
+    }
+
+    private void assertMapping(Configuration configuration, String statementId,
+                               String column, String property) {
+        MappedStatement statement = configuration.getMappedStatement(statementId);
+        boolean mapped = statement.getResultMaps().stream()
+                .flatMap(resultMap -> resultMap.getResultMappings().stream())
+                .anyMatch(mapping -> matches(mapping, column, property));
+        assertTrue(mapped, column + " must map explicitly to " + property);
+    }
+
+    private boolean matches(ResultMapping mapping, String column, String property) {
+        return column.equals(mapping.getColumn()) && property.equals(mapping.getProperty());
+    }
+
+    private String read(Reader reader) throws IOException {
+        StringBuilder result = new StringBuilder();
+        char[] buffer = new char[2048];
+        int length;
+        while ((length = reader.read(buffer)) >= 0) {
+            result.append(buffer, 0, length);
+        }
+        return result.toString();
+    }
+
+    private String normalize(String sql) {
+        return sql.replaceAll("\\s+", " ").trim();
+    }
+
+    private String resource(String mapper) {
+        return "mapper/" + mapper + ".xml";
+    }
+}

--
Gitblit v1.8.0