20260923165454

This commit is contained in:
oneao committed 2026-09-23 16:54:54 +08:00
1 parent 0abe3706c8
commit e6935b8fa4
173 files changed
+14975 -2295

No files matched your search

@@ -24,6 +24,7 @@ import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
@@ -325,13 +326,21 @@ public class ExportService {
: requestedOrderBy.trim();
if (orderBy == null || orderBy.isBlank()) {
orderBy = schema.keyField() == null ? null : schema.keyField() + " ASC";
} else if (schema.keyField() != null) {
} else if (schema.keyField() != null && !sortsBy(orderBy, schema.keyField())) {
// 相同排序值以主键打破平局,明细、区间合计与各卷使用同一行顺序。
// 排序子句里已经有主键时不能再追加:同一列出现两次,SQL Server 会直接报错。
orderBy += ", " + schema.keyField() + " ASC";
}
return orderBy == null ? null : dbUtils.buildSafeOrderBy(orderBy);
}
/** 排序子句是否已经排过该列(取每段的首个词,忽略 ASC/DESC) */
private boolean sortsBy(String orderBy, String field) {
return Arrays.stream(orderBy.split(","))
.map(part -> part.trim().split("\\s+")[0])
.anyMatch(name -> name.equalsIgnoreCase(field));
}
String buildSelectSql(
ExportSchema schema,
List<ExportColumn> columns,
@@ -118,6 +118,14 @@ class ExportServiceTests {
assertThat(service.resolveOrderSql(schema("", List.of(leaf("b_name"))), null)).isEqualTo("[b_id] ASC");
}
@Test
void 排序已含主键时不再追加主键() {
// ORDER BY 同一列出现两次会被 SQL Server 拒绝(v_wf_definition 的 b_order_sql 就是 b_id ASC)
ExportSchema schema = schema("b_id ASC", List.of(leaf("b_name")));
assertThat(service.resolveOrderSql(schema, null)).isEqualTo("[b_id] ASC");
assertThat(service.resolveOrderSql(schema, "b_module_id ASC, b_id DESC")).isEqualTo("[b_module_id] ASC, [b_id] DESC");
}
@Test
void 不完整或逆序区间不能退化成全部导出() {
ExportSchema schema = schema(null, List.of(leaf("b_name")));
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" version="3.0.2" name="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.294" tests="19" errors="0" skipped="0" failures="0" flakes="0">
<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" version="3.0.2" name="cn.g3soft.fmsapi.service.ExportServiceTests" time="3.379" tests="20" errors="0" skipped="0" failures="0" flakes="0">
<properties>
<property name="java.specification.version" value="21"/>
<property name="sun.cpu.isalist" value="amd64"/>
<property name="sun.jnu.encoding" value="GBK"/>
<property name="java.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;D:\data\maven\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;D:\data\maven\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;D:\data\maven\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;D:\data\maven\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;D:\data\maven\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;D:\data\maven\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;D:\data\maven\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;D:\data\maven\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;D:\data\maven\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;D:\data\maven\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;D:\data\maven\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;D:\data\maven\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;D:\data\maven\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;D:\data\maven\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;D:\data\maven\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;D:\data\maven\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;D:\data\maven\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;D:\data\maven\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;D:\data\maven\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;D:\data\maven\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;D:\data\maven\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;D:\data\maven\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;D:\data\maven\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;D:\data\maven\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;D:\data\maven\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;D:\data\maven\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;D:\data\maven\com\alibaba\druid\1.2.18\druid-1.2.18.jar;D:\data\maven\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;D:\data\maven\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;D:\data\maven\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;D:\data\maven\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;D:\data\maven\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;D:\data\maven\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;D:\data\maven\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;D:\data\maven\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;D:\data\maven\org\yaml\snakeyaml\2.6\snakeyaml-2.6.jar;D:\data\maven\org\apache\commons\commons-collections4\4.4\commons-collections4-4.4.jar;D:\data\maven\org\apache\fesod\fesod-sheet\2.0.2-incubating\fesod-sheet-2.0.2-incubating.jar;D:\data\maven\org\apache\commons\commons-csv\1.14.1\commons-csv-1.14.1.jar;D:\data\maven\commons-io\commons-io\2.20.0\commons-io-2.20.0.jar;D:\data\maven\org\ehcache\ehcache\3.12.0\ehcache-3.12.0.jar;D:\data\maven\javax\cache\cache-api\1.1.1\cache-api-1.1.1.jar;D:\data\maven\org\glassfish\jaxb\jaxb-runtime\4.0.9\jaxb-runtime-4.0.9.jar;D:\data\maven\org\glassfish\jaxb\jaxb-core\4.0.9\jaxb-core-4.0.9.jar;D:\data\maven\org\eclipse\angus\angus-activation\2.0.3\angus-activation-2.0.3.jar;D:\data\maven\org\glassfish\jaxb\txw2\4.0.9\txw2-4.0.9.jar;D:\data\maven\com\sun\istack\istack-commons-runtime\4.1.2\istack-commons-runtime-4.1.2.jar;D:\data\maven\org\apache\fesod\fesod-common\2.0.2-incubating\fesod-common-2Line truncated
<property name="java.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\Administrator\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\Administrator\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\Administrator\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\Administrator\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\Administrator\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\Administrator\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\Administrator\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\Administrator\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\Administrator\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\Administrator\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\Administrator\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\Administrator\.m2\repository\org\lionsoLine truncated
<property name="java.vm.vendor" value="Oracle Corporation"/>
<property name="sun.arch.data.model" value="64"/>
<property name="user.variant" value=""/>
@@ -12,14 +12,13 @@
<property name="user.timezone" value="Asia/Shanghai"/>
<property name="os.name" value="Windows 10"/>
<property name="java.vm.specification.version" value="21"/>
<property name="APPLICATION_NAME" value="fms-api"/>
<property name="sun.java.launcher" value="SUN_STANDARD"/>
<property name="user.country" value="CN"/>
<property name="sun.boot.library.path" value="D:\devtool\jdk\jdk-21\bin"/>
<property name="sun.java.command" value="C:\Users\Administrator\AppData\Local\Temp\surefire9998061515327819363\surefirebooter-20260917083222844_3.jar C:\Users\Administrator\AppData\Local\Temp\surefire9998061515327819363 2026-09-17T08-32-22_323-jvmRun1 surefire-20260917083222844_1tmp surefire_0-20260917083222844_2tmp"/>
<property name="sun.java.command" value="C:\Users\Administrator\AppData\Local\Temp\surefire8096415582600681020\surefirebooter-20260923093416672_3.jar C:\Users\Administrator\AppData\Local\Temp\surefire8096415582600681020 2026-09-23T09-34-16_273-jvmRun1 surefire-20260923093416672_1tmp surefire_0-20260923093416672_2tmp"/>
<property name="jdk.debug" value="release"/>
<property name="test" value="ExportServiceTests,ExportWorkbookWriterTests,ExportServiceIntegrationTests"/>
<property name="surefire.test.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;D:\data\maven\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;D:\data\maven\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;D:\data\maven\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;D:\data\maven\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;D:\data\maven\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;D:\data\maven\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;D:\data\maven\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;D:\data\maven\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;D:\data\maven\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;D:\data\maven\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;D:\data\maven\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;D:\data\maven\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;D:\data\maven\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;D:\data\maven\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;D:\data\maven\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;D:\data\maven\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;D:\data\maven\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;D:\data\maven\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;D:\data\maven\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;D:\data\maven\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;D:\data\maven\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;D:\data\maven\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;D:\data\maven\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;D:\data\maven\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;D:\data\maven\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;D:\data\maven\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;D:\data\maven\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;D:\data\maven\com\alibaba\druid\1.2.18\druid-1.2.18.jar;D:\data\maven\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;D:\data\maven\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;D:\data\maven\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;D:\data\maven\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;D:\data\maven\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;D:\data\maven\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;D:\data\maven\org\lionsoul\ip2region\3.3.7\ip2region-3.3.7.jar;D:\data\maven\com\github\ua-parser\uap-java\1.6.1\uap-java-1.6.1.jar;D:\data\maven\org\yaml\snakeyaml\2.6\snakeyaml-2.6.jar;D:\data\maven\org\apache\commons\commons-collections4\4.4\commons-collections4-4.4.jar;D:\data\maven\org\apache\fesod\fesod-sheet\2.0.2-incubating\fesod-sheet-2.0.2-incubating.jar;D:\data\maven\org\apache\commons\commons-csv\1.14.1\commons-csv-1.14.1.jar;D:\data\maven\commons-io\commons-io\2.20.0\commons-io-2.20.0.jar;D:\data\maven\org\ehcache\ehcache\3.12.0\ehcache-3.12.0.jar;D:\data\maven\javax\cache\cache-api\1.1.1\cache-api-1.1.1.jar;D:\data\maven\org\glassfish\jaxb\jaxb-runtime\4.0.9\jaxb-runtime-4.0.9.jar;D:\data\maven\org\glassfish\jaxb\jaxb-core\4.0.9\jaxb-core-4.0.9.jar;D:\data\maven\org\eclipse\angus\angus-activation\2.0.3\angus-activation-2.0.3.jar;D:\data\maven\org\glassfish\jaxb\txw2\4.0.9\txw2-4.0.9.jar;D:\data\maven\com\sun\istack\istack-commons-runtime\4.1.2\istack-commons-runtime-4.1.2.jar;D:\data\maven\org\apache\fesod\fesod-common\2.0.2-incubating\fesodLine truncated
<property name="test" value="ExportServiceTests"/>
<property name="surefire.test.class.path" value="D:\workspace\code\fms\fms-api\target\test-classes;D:\workspace\code\fms\fms-api\target\classes;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-webmvc\4.1.0\spring-boot-starter-webmvc-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter\4.1.0\spring-boot-starter-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-logging\4.1.0\spring-boot-starter-logging-4.1.0.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-classic\1.5.34\logback-classic-1.5.34.jar;C:\Users\Administrator\.m2\repository\ch\qos\logback\logback-core\1.5.34\logback-core-1.5.34.jar;C:\Users\Administrator\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.25.4\log4j-to-slf4j-2.25.4.jar;C:\Users\Administrator\.m2\repository\org\slf4j\jul-to-slf4j\2.0.18\jul-to-slf4j-2.0.18.jar;C:\Users\Administrator\.m2\repository\jakarta\annotation\jakarta.annotation-api\3.0.0\jakarta.annotation-api-3.0.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-jackson\4.1.0\spring-boot-starter-jackson-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-jackson\4.1.0\spring-boot-jackson-4.1.0.jar;C:\Users\Administrator\.m2\repository\tools\jackson\core\jackson-databind\3.1.4\jackson-databind-3.1.4.jar;C:\Users\Administrator\.m2\repository\tools\jackson\core\jackson-core\3.1.4\jackson-core-3.1.4.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\4.1.0\spring-boot-starter-tomcat-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat-runtime\4.1.0\spring-boot-starter-tomcat-runtime-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\11.0.22\tomcat-embed-core-11.0.22.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\11.0.22\tomcat-embed-el-11.0.22.jar;C:\Users\Administrator\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\11.0.22\tomcat-embed-websocket-11.0.22.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-tomcat\4.1.0\spring-boot-tomcat-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-http-converter\4.1.0\spring-boot-http-converter-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-web\7.0.8\spring-web-7.0.8.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-beans\7.0.8\spring-beans-7.0.8.jar;C:\Users\Administrator\.m2\repository\io\micrometer\micrometer-observation\1.17.0\micrometer-observation-1.17.0.jar;C:\Users\Administrator\.m2\repository\io\micrometer\micrometer-commons\1.17.0\micrometer-commons-1.17.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-webmvc\4.1.0\spring-boot-webmvc-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-servlet\4.1.0\spring-boot-servlet-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-webmvc\7.0.8\spring-webmvc-7.0.8.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-aop\7.0.8\spring-aop-7.0.8.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-expression\7.0.8\spring-expression-7.0.8.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\4.1.0\spring-boot-starter-jdbc-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-jdbc\4.1.0\spring-boot-jdbc-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-sql\4.1.0\spring-boot-sql-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-transaction\4.1.0\spring-boot-transaction-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\boot\spring-boot-persistence\4.1.0\spring-boot-persistence-4.1.0.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-tx\7.0.8\spring-tx-7.0.8.jar;C:\Users\Administrator\.m2\repository\org\springframework\spring-jdbc\7.0.8\spring-jdbc-7.0.8.jar;C:\Users\Administrator\.m2\repository\com\zaxxer\HikariCP\7.0.2\HikariCP-7.0.2.jar;C:\Users\Administrator\.m2\repository\com\alibaba\druid\1.2.18\druid-1.2.18.jar;C:\Users\Administrator\.m2\repository\io\jsonwebtoken\jjwt-api\0.12.6\jjwt-api-0.12.6.jar;C:\Users\Administrator\.m2\repository\io\jsonwebtoken\jjwt-impl\0.12.6\jjwt-impl-0.12.6.jar;C:\Users\Administrator\.m2\repository\io\jsonwebtoken\jjwt-jackson\0.12.6\jjwt-jackson-0.12.6.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.21.4\jackson-databind-2.21.4.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.21\jackson-annotations-2.21.jar;C:\Users\Administrator\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.21.4\jackson-core-2.21.4.jar;C:\Users\Administrator\.m2\repository\oLine truncated
<property name="sun.cpu.endian" value="little"/>
<property name="user.home" value="C:\Users\Administrator"/>
<property name="user.language" value="zh"/>
@@ -32,9 +31,7 @@
<property name="line.separator" value="&#10;"/>
<property name="java.vm.specification.vendor" value="Oracle Corporation"/>
<property name="java.specification.name" value="Java Platform API Specification"/>
<property name="FILE_LOG_CHARSET" value="UTF-8"/>
<property name="java.awt.headless" value="true"/>
<property name="surefire.real.class.path" value="C:\Users\Administrator\AppData\Local\Temp\surefire9998061515327819363\surefirebooter-20260917083222844_3.jar"/>
<property name="surefire.real.class.path" value="C:\Users\Administrator\AppData\Local\Temp\surefire8096415582600681020\surefirebooter-20260923093416672_3.jar"/>
<property name="user.script" value=""/>
<property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
<property name="java.runtime.version" value="21+35-2513"/>
@@ -45,43 +42,49 @@
<property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
<property name="file.encoding" value="UTF-8"/>
<property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
<property name="localRepository" value="D:\data\maven"/>
<property name="localRepository" value="C:\Users\Administrator\.m2\repository"/>
<property name="java.vendor.url.bug" value="https://bugreport.java.com/bugreport/"/>
<property name="java.io.tmpdir" value="C:\Users\Administrator\AppData\Local\Temp\"/>
<property name="java.version" value="21"/>
<property name="user.dir" value="D:\workspace\code\fms\fms-api"/>
<property name="os.arch" value="amd64"/>
<property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
<property name="PID" value="20596"/>
<property name="failIfNoTests" value="false"/>
<property name="sun.os.patch.level" value=""/>
<property name="CONSOLE_LOG_CHARSET" value="UTF-8"/>
<property name="native.encoding" value="GBK"/>
<property name="java.library.path" value="D:\devtool\jdk\jdk-21\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;D:\devtool\anaconda3\condabin;D:/devtool/jdk/jdk-21/bin;D:\soft\PowerShell\7;C:\Users\Administrator\.codex\tmp\arg0\codex-arg00JV8wr;D:\devtool\nvm\v22.19.0\node_modules\@openai\codex\node_modules\@openai\codex-win32-x64\vendor\x86_64-pc-windows-msvc\codex-path;D:\soft\PowerShell\7;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;D:\soft\Bandizip\;D:\devtool\anaconda3;D:\devtool\anaconda3\Scripts;D:\devtool\anaconda3\Library\bin;D:\devtool\Git\cmd;D:\soft\微信web开发者工具\dll;D:\devtool\golang\go1.25.0\bin;D:\devtool\openssl\OpenSSL-3.5.1\bin;D:\devtool\nvm;D:\devtool\nodejs;D:\devtool\jdk\jdk1.7.0_75\bin;D:\data\sdk\platform-tools;D:\data\sdk\tools;D:\data\sdk\tools\bin;D:\devtool\maven\apache-maven-3.8.9\bin;D:\devtool\postgresql\18\bin;D:\devtool\golang\gopath\bin;D:\devtool\sqlc;D:\devtool\protoc-33.4-win64\bin;C:\Program Files\dotnet\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;D:\soft\PowerShell\7\;C:\Users\Administrator\AppData\Local\trae-cli\bin;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;D:\soft\Microsoft VS Code\bin;C:\Users\Administrator\AppData\Local\Programs\Ollama;D:\devtool\nvm;D:\devtool\nodejs;D:\soft\browser-stack\;D:\soft\CodeBuddy CN\bin;."/>
<property name="java.library.path" value="D:\devtool\jdk\jdk-21\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;D:\devtool\anaconda3\condabin;d:\soft\Trae CN\resources\app\modules\ai-agent\bin;\\?\C:\Users\Administrator\.trae-cn\plugins\trae-remote-official\lark\1.0.5\bin;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;D:\soft\Bandizip\;D:\devtool\anaconda3;D:\devtool\anaconda3\Scripts;D:\devtool\anaconda3\Library\bin;D:\devtool\Git\cmd;D:\soft\???web?????????\dll;D:\devtool\golang\go1.25.0\bin;D:\devtool\openssl\OpenSSL-3.5.1\bin;D:\devtool\nvm;D:\devtool\nodejs;D:\devtool\jdk\jdk1.7.0_75\bin;D:\data\sdk\platform-tools;D:\data\sdk\tools;D:\data\sdk\tools\bin;D:\devtool\maven\apache-maven-3.8.9\bin;D:\devtool\postgresql\18\bin;D:\devtool\golang\gopath\bin;D:\devtool\sqlc;D:\devtool\protoc-33.4-win64\bin;C:\Program Files\dotnet\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;D:\soft\PowerShell\7\;C:\Users\Administrator\AppData\Local\trae-cli\bin;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;D:\soft\Microsoft VS Code\bin;C:\Users\Administrator\AppData\Local\Programs\Ollama;D:\soft\browser-stack\;D:\soft\CodeBuddy CN\bin;D:\soft\PowerShell\7;d:\soft\Trae CN\resources\app\bin\lib;d:\soft\Trae CN\resources\app\node_modules\@vscode\ripgrep\bin;."/>
<property name="java.vm.info" value="mixed mode, sharing"/>
<property name="stderr.encoding" value="GBK"/>
<property name="java.vendor" value="Oracle Corporation"/>
<property name="java.vm.version" value="21+35-2513"/>
<property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
<property name="java.class.version" value="65.0"/>
<property name="LOGGED_APPLICATION_NAME" value="[fms-api] "/>
</properties>
<testcase name="无排序配置时按行范围聚合用常量排序占位" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.016"/>
<testcase name="三层表头路径完整且分组标题可为空" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.007"/>
<testcase name="排序已含主键时不再追加主键" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.245"/>
<testcase name="无排序配置时按行范围聚合用常量排序占位" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.051"/>
<testcase name="三层表头路径完整且分组标题可为空" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.032"/>
<testcase name="排序子句非法时被拒绝" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.009"/>
<testcase name="单行表头每列只有一个标题" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.003"/>
<testcase name="排序缺省时回退模块默认排序且加引号" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.003"/>
<testcase name="合计SQL能通过只读校验" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.004"/>
<testcase name="导出列采用选择顺序且跨组拖拽后保留各列分组和权限" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.021"/>
<testcase name="顶层叶子与分组混排时叶子路径更短" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.003"/>
<testcase name="条件与排序都参与拼装且标识符被加引号" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.004"/>
<testcase name="两级表头按分组路径展开且列名在最后" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.003"/>
<testcase name="只有配了summary的列参与合计" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.002"/>
<testcase name="勾选行用参数占位而不是字面量拼接" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.005"/>
<testcase name="默认无条件时只拼表名与列" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.003"/>
<testcase name="区间导出走OFFSET_FETCH且无排序时用常量占位" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.003"/>
<testcase name="调用方条件与数据范围按AND组合" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.005"/>
<testcase name="按行范围聚合时用行号子查询限定范围" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.002"/>
<testcase name="不完整或逆序区间不能退化成全部导出" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.044"/>
<testcase name="无任何条件时不生成WHERE子句" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.007"/>
<testcase name="没有可合计列时不生成合计SQL" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.008"/>
<testcase name="单行表头每列只有一个标题" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.004"/>
<testcase name="排序缺省时回退模块默认排序且加引号" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.004"/>
<testcase name="合计SQL能通过只读校验" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.005"/>
<testcase name="导出列采用选择顺序且跨组拖拽后保留各列分组和权限" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.008"/>
<testcase name="顶层叶子与分组混排时叶子路径更短" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.004"/>
<testcase name="条件与排序都参与拼装且标识符被加引号" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.007"/>
<testcase name="两级表头按分组路径展开且列名在最后" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.005"/>
<testcase name="只有配了summary的列参与合计" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.003"/>
<testcase name="勾选行用参数占位而不是字面量拼接" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="2.344">
<system-err><![CDATA[Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build as described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org.mockito/org/mockito/Mockito.html#0.3
WARNING: A Java agent has been loaded dynamically (C:\Users\Administrator\.m2\repository\net\bytebuddy\byte-buddy-agent\1.18.10\byte-buddy-agent-1.18.10.jar)
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release
]]></system-err>
</testcase>
<testcase name="默认无条件时只拼表名与列" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.012"/>
<testcase name="区间导出走OFFSET_FETCH且无排序时用常量占位" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.006"/>
<testcase name="调用方条件与数据范围按AND组合" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.012"/>
<testcase name="按行范围聚合时用行号子查询限定范围" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.007"/>
<testcase name="不完整或逆序区间不能退化成全部导出" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.007"/>
<testcase name="无任何条件时不生成WHERE子句" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.014"/>
<testcase name="没有可合计列时不生成合计SQL" classname="cn.g3soft.fmsapi.service.ExportServiceTests" time="0.009"/>
</testsuite>
@@ -1,4 +1,4 @@
-------------------------------------------------------------------------------
Test set: cn.g3soft.fmsapi.service.ExportServiceTests
-------------------------------------------------------------------------------
Tests run: 19, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.294 s -- in cn.g3soft.fmsapi.service.ExportServiceTests
Tests run: 20, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.379 s -- in cn.g3soft.fmsapi.service.ExportServiceTests