feat: 1、Vo包装识别增强 2、去除 位置&类型 的色块
All checks were successful
序列化结构检查 / serialization-schema-check (push) Has been skipped
All checks were successful
序列化结构检查 / serialization-schema-check (push) Has been skipped
This commit is contained in:
@@ -58,16 +58,21 @@ public class SchemaDiffer {
|
||||
added.removeAll(oldLeaves.keySet());
|
||||
added.removeAll(typeChangedPaths);
|
||||
|
||||
// 路径迁移检测(removed 的路径是某 added 路径的后缀)
|
||||
// 路径迁移:
|
||||
// - 下沉(加包装):旧路径是新路径后缀,如 dbName → vo.dbName
|
||||
// - 上提(拆包装):新路径是旧路径后缀,如 vo.dbName → dbName
|
||||
List<String[]> moves = new ArrayList<>();
|
||||
Set<String> matchedRemoved = new LinkedHashSet<>();
|
||||
Set<String> matchedAdded = new LinkedHashSet<>();
|
||||
for (String r : removed) {
|
||||
if (matchedRemoved.contains(r)) {
|
||||
continue;
|
||||
}
|
||||
for (String a : added) {
|
||||
if (matchedAdded.contains(a)) {
|
||||
continue;
|
||||
}
|
||||
if (isSuffix(a, r)) {
|
||||
if (isSuffix(a, r) || isSuffix(r, a)) {
|
||||
moves.add(new String[]{r, a});
|
||||
matchedRemoved.add(r);
|
||||
matchedAdded.add(a);
|
||||
@@ -76,16 +81,16 @@ public class SchemaDiffer {
|
||||
}
|
||||
}
|
||||
|
||||
// 包装层检测:多个迁移共享同一新前缀
|
||||
Map<String, Integer> prefixCount = new LinkedHashMap<>();
|
||||
// 新增包装层:多个迁移共享同一新前缀
|
||||
Map<String, Integer> newPrefixCount = new LinkedHashMap<>();
|
||||
for (String[] move : moves) {
|
||||
String a = move[1];
|
||||
if (a.contains(".")) {
|
||||
String prefix = a.substring(0, a.indexOf('.'));
|
||||
prefixCount.merge(prefix, 1, Integer::sum);
|
||||
newPrefixCount.merge(prefix, 1, Integer::sum);
|
||||
}
|
||||
}
|
||||
for (Map.Entry<String, Integer> e : prefixCount.entrySet()) {
|
||||
for (Map.Entry<String, Integer> e : newPrefixCount.entrySet()) {
|
||||
if (e.getValue() >= 2) {
|
||||
SchemaChange c = new SchemaChange(ChangeType.WRAPPER_ADDED);
|
||||
c.setFieldPath(e.getKey());
|
||||
@@ -95,6 +100,25 @@ public class SchemaDiffer {
|
||||
}
|
||||
}
|
||||
|
||||
// 删除包装层:多个迁移共享同一旧前缀
|
||||
Map<String, Integer> oldPrefixCount = new LinkedHashMap<>();
|
||||
for (String[] move : moves) {
|
||||
String r = move[0];
|
||||
if (r.contains(".")) {
|
||||
String prefix = r.substring(0, r.indexOf('.'));
|
||||
oldPrefixCount.merge(prefix, 1, Integer::sum);
|
||||
}
|
||||
}
|
||||
for (Map.Entry<String, Integer> e : oldPrefixCount.entrySet()) {
|
||||
if (e.getValue() >= 2) {
|
||||
SchemaChange c = new SchemaChange(ChangeType.WRAPPER_REMOVED);
|
||||
c.setFieldPath(e.getKey());
|
||||
c.setOldValue(e.getKey());
|
||||
c.setMessage("删除包装层 " + e.getKey() + ",其下字段被提升为外层(影响 " + e.getValue() + " 个字段)");
|
||||
changes.add(c);
|
||||
}
|
||||
}
|
||||
|
||||
for (String[] move : moves) {
|
||||
SchemaChange c = new SchemaChange(ChangeType.FIELD_PATH_MOVED);
|
||||
c.setFieldPath(move[1]);
|
||||
|
||||
Reference in New Issue
Block a user