20260923165454
This commit is contained in:
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,
|
||||
|
||||
Reference in new issue
Block a user