Ver código fonte

update multiple pbx phoneUser

masarifyuli 23 horas atrás
pai
commit
2d7df1e0a1

+ 1 - 1
config/general-setting.yml

@@ -182,7 +182,7 @@ redirectUrl:
 - http://localhost:4200/oauth2redirect
 - https://cmpd.telmessenger.com/oauth2redirect
 - https://app.insomnia.rest/oauth/redirect
-dataKey: jRA4iyjy1ZCaIdlJBe6Cm%2BRPGb%2BwcO85%2FWR7Z9%2B8AFVDTPuvnJwmCw6pPbMrQP92CNB%2BMwAPuisTRE8%2FccPGKB%2FuKWIvPxBslzLvfX58IuH3nZB8bPrFiSZH2n5Q7RgjOxObPvHvOIpk4r0P6%2B%2BcJw%3D%3D
+dataKey: aY6tKotSoUoMIi7JiTBZq0KhtC4bslM0qvnU1EZgmMJ9rsAaBP8fCV3cugOaHB%2BO0rdqCT8BLvRpW3zZRMyaZN%2BOgLPchzBSS4WXWMJ2e%2BWfVKtx1U0WBWevGkoDU3IK
 
 #database: 
 #  type: sqlserver

+ 9 - 1
config/migration.yml

@@ -57,6 +57,7 @@ callTransaction:
   pbx_id: pbx_code
   terminationCode: call_termination
   redirectReason: redirect_reason
+  account_id: account_code
 webUser:
   username: login_id
   password: login_password
@@ -88,4 +89,11 @@ corcos:
 provider:
   code: provider_prefix
   name: description
-  description: description
+  description: description
+account:
+  id: history.account_id
+  code: account_code
+  name: history.account_number
+  description: description
+  appliedDate: history.app_datetime
+  expiredDate: history.exp_datetime

+ 16 - 4
src/main/kotlin/com/datacomsolusindo/migration/MigrationEntity.kt

@@ -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?>
     }