|
|
@@ -150,13 +150,18 @@ class MigrationEntity(val passwordEncoder: PasswordEncoder, val queryNativeServi
|
|
|
// --- Pre-calc field names (avoid split(".") repeatedly) ---
|
|
|
val fieldMapping = fields.mapValues { it.value.substringAfterLast(".") }
|
|
|
val uniqueField = fieldMapping[unique] ?: "id"
|
|
|
+ val uniqueFieldId = fieldMapping["id"]
|
|
|
|
|
|
// --- Create Indexes (O(n)) ---
|
|
|
- val historyIndex = historyData?.associateBy { it[uniqueField]?.toString() }
|
|
|
- val groupIndex = groupData?.associateBy { it[uniqueField]?.toString() }
|
|
|
+ val historyIndex = historyData?.groupBy { it[uniqueField] }?.mapValues { (_, items) ->
|
|
|
+ items.maxByOrNull { it[uniqueFieldId!!.removePrefix("history.")].toString().toInt() }
|
|
|
+ }
|
|
|
+ //?.associateBy { it[uniqueField]?.toString() }
|
|
|
+ val groupIndex = groupData?.associateBy { it[ uniqueFieldId ?: uniqueField]?.toString() }
|
|
|
|
|
|
val fieldRoots = fields.filter { !it.value.contains(".") }
|
|
|
val joinRoots = fields.filter { it.value.contains(".") }
|
|
|
+ .toList().sortedByDescending { it.second }.toMap()
|
|
|
|
|
|
rootData.mapIndexed { index, row->
|
|
|
val data = mutableMapOf<String, Any?>()
|
|
|
@@ -179,8 +184,11 @@ class MigrationEntity(val passwordEncoder: PasswordEncoder, val queryNativeServi
|
|
|
|
|
|
sourceKeyFull.startsWith("group.") -> {
|
|
|
val sourceKey = sourceKeyFull.removePrefix("group.")
|
|
|
- groupIndex
|
|
|
+ val idKey = historyIndex
|
|
|
?.get(row[uniqueField]?.toString())
|
|
|
+ ?.get(uniqueFieldId) ?: row[uniqueFieldId]
|
|
|
+ groupIndex
|
|
|
+ ?.get(idKey.toString())
|
|
|
?.get(sourceKey.substringAfterLast("."))
|
|
|
}
|
|
|
|
|
|
@@ -347,7 +355,7 @@ class MigrationEntity(val passwordEncoder: PasswordEncoder, val queryNativeServi
|
|
|
}
|
|
|
finalizer["pbx_id"]?.toString()?.let {
|
|
|
if (it.isNotBlank()) {
|
|
|
- phoneUserPbxIds.add(it)
|
|
|
+ phoneUserPbxIds.addAll(it.split(";"))
|
|
|
}
|
|
|
}
|
|
|
val finalMap = finalizer.filterNot { fi ->
|
|
|
@@ -538,6 +546,10 @@ class MigrationEntity(val passwordEncoder: PasswordEncoder, val queryNativeServi
|
|
|
mapFinalize["limitStatus"] = 0
|
|
|
}
|
|
|
|
|
|
+ if (className == "account") {
|
|
|
+ mapFinalize["number"] = "9"
|
|
|
+ }
|
|
|
+
|
|
|
return mapFinalize.filterNot { it.key == "loginPin" }
|
|
|
.mapValues { v -> v.value?.toString() } as MutableMap<String, Any?>
|
|
|
}
|