|
|
@@ -124,7 +124,9 @@ class MigrationEntity(val passwordEncoder: PasswordEncoder, val queryNativeServi
|
|
|
queueInsertData.put((clazz as Class<out BaseEntity>) to data)
|
|
|
}
|
|
|
} else {
|
|
|
- val chunkData = rootData.chunked(1000)
|
|
|
+ val chunkData = rootData
|
|
|
+// .take(3)
|
|
|
+ .chunked(1000)
|
|
|
logger.info("data migration class ${clazz.simpleName} chunk data ${chunkData.size}")
|
|
|
chunkData.forEachIndexed { _, data ->
|
|
|
val dataMap = data.map { row ->
|
|
|
@@ -192,10 +194,9 @@ class MigrationEntity(val passwordEncoder: PasswordEncoder, val queryNativeServi
|
|
|
if (target.contains("_")) {
|
|
|
val codeKey = uniqueField.removePrefix("history.")
|
|
|
val joinCode = historyIndexById?.get(valHis)?.get(codeKey)
|
|
|
- joinCode
|
|
|
+ joinCode ?: valHis
|
|
|
} else valHis
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
sourceFull.startsWith("group.") -> {
|
|
|
@@ -382,6 +383,9 @@ class MigrationEntity(val passwordEncoder: PasswordEncoder, val queryNativeServi
|
|
|
val finalizer = finalizeMap(clazz.simpleName.camelCase(), map)
|
|
|
val phoneUserPin = finalizer["pin"]
|
|
|
val phoneUserExtension = finalizer["extension"]
|
|
|
+ val corcosNormal = finalizer["corcosNormal_id"]
|
|
|
+ val corcosReducing = finalizer["corcosReducing_id"]
|
|
|
+ val corcosBlock = finalizer["corcosBlock_id"]
|
|
|
|
|
|
// budget
|
|
|
val budgetAnnual = (finalizer["budget.maxCost"]?.toString()
|
|
|
@@ -422,12 +426,18 @@ class MigrationEntity(val passwordEncoder: PasswordEncoder, val queryNativeServi
|
|
|
"budget.warnCost",
|
|
|
"budget__warnCost",
|
|
|
"maxCost",
|
|
|
- "warnCost"
|
|
|
+ "warnCost",
|
|
|
+ "corcosNormal_id",
|
|
|
+ "corcosReducing_id",
|
|
|
+ "corcosBlock_id"
|
|
|
).any { a -> a == fi.key }
|
|
|
} as MutableMap<String, Any?>
|
|
|
finalMap["corcos"] = if (phoneUserPbxIds.isEmpty()) "" else "[${
|
|
|
phoneUserPbxIds.distinct().joinToString(",") { m ->
|
|
|
- "{\"pbx\":\"$m\",\"normal\":\"\",\"reducing\":\"\",\"block\":\"\"}"
|
|
|
+ "{\"pbx\":\"$m\"," +
|
|
|
+ "\"normal\":\"${corcosNormal ?: ""}\"," +
|
|
|
+ "\"reducing\":\"${corcosReducing ?: ""}\"," +
|
|
|
+ "\"block\":\"${corcosBlock ?: ""}\"}"
|
|
|
}
|
|
|
}]"
|
|
|
if (phoneUserPbxIds.isEmpty()) {
|
|
|
@@ -436,7 +446,7 @@ class MigrationEntity(val passwordEncoder: PasswordEncoder, val queryNativeServi
|
|
|
finalMap
|
|
|
} else finalizer
|
|
|
|
|
|
- queryNativeService.insertDataWithNativeQuery(clazz, finalMapEntity, functionAfter = { uid ->
|
|
|
+ queryNativeService.insertDataWithNativeQuery(clazz, finalMapEntity, functionAfter = { uid, isUpdate ->
|
|
|
// create budget
|
|
|
if (BudgetUserType.entries.any { a -> a.name.snakeToCamel() == clazz.simpleName.camelCase() }) {
|
|
|
queryNativeService.insertDataWithNativeQuery(
|
|
|
@@ -465,6 +475,9 @@ class MigrationEntity(val passwordEncoder: PasswordEncoder, val queryNativeServi
|
|
|
"extension" to phoneUserExtension,
|
|
|
"pbx_id" to pbxId,
|
|
|
"phoneUser_id" to uid,
|
|
|
+ "corcos_normal_uid" to corcosNormal,
|
|
|
+ "corcos_reducing_uid" to corcosReducing,
|
|
|
+ "corcos_block_uid" to corcosBlock
|
|
|
)
|
|
|
)
|
|
|
}
|
|
|
@@ -523,7 +536,8 @@ class MigrationEntity(val passwordEncoder: PasswordEncoder, val queryNativeServi
|
|
|
findUidByCode(Pbx::class.java, u ?: "PBX01")
|
|
|
} else u?.toString()?.let { code ->
|
|
|
val clazzEntity = General.clazzEntity(if (isParent) className else t.split("_")[0])
|
|
|
- clazzEntity?.let { findUidByCode(it, code) }
|
|
|
+ val field = if (t.split("_")[0].lowercase().startsWith("corcos")) "command" else "code"
|
|
|
+ clazzEntity?.let { findUidByCode(it, code, field) }
|
|
|
}
|
|
|
|
|
|
if (value != null) {
|
|
|
@@ -620,11 +634,11 @@ class MigrationEntity(val passwordEncoder: PasswordEncoder, val queryNativeServi
|
|
|
).firstOrNull()?.get("uid")
|
|
|
}
|
|
|
|
|
|
- private fun <T : BaseEntity> findUidByCode(clazz: Class<T>, value: Any): String? {
|
|
|
+ private fun <T : BaseEntity> findUidByCode(clazz: Class<T>, value: Any, field: String = "code"): String? {
|
|
|
return temporaryDataByCode["${clazz.simpleName};$value"] ?: run {
|
|
|
val uid = temporaryDataEntity["${clazz.simpleName};$value"]?.get("uid") ?: run {
|
|
|
apiService.findListPage(
|
|
|
- clazz, filter = FilterData.filter("code", FilterData.FILTEROP.EQ, "$value")
|
|
|
+ clazz, filter = FilterData.filter(field, FilterData.FILTEROP.EQ, "$value")
|
|
|
).firstOrNull()?.let { data ->
|
|
|
temporaryDataEntity["${clazz.simpleName};$value"] = data
|
|
|
temporaryDataByCode["${clazz.simpleName};$value"] = data["uid"].toString()
|
|
|
@@ -704,12 +718,17 @@ class QueryNativeService(
|
|
|
fun <T> insertDataWithNativeQuery(
|
|
|
clazz: Class<T>,
|
|
|
mapData: MutableMap<String, Any?>,
|
|
|
- functionAfter: ((uid: String) -> Unit)? = null
|
|
|
+ functionAfter: ((uid: String, isUpdate: Boolean) -> Unit)? = null
|
|
|
): String? {
|
|
|
+ val className = clazz.simpleName
|
|
|
+ val fieldUnique = when (className.lowercase()) {
|
|
|
+ "phoneuserpbx" -> "phone_user_uid;pbx_uid"
|
|
|
+ "budget" -> "user_uid"
|
|
|
+ else -> migrationSettingService.schema.firstOrNull {
|
|
|
+ it.table.equals(clazz.simpleName, ignoreCase = true)
|
|
|
+ }?.unique
|
|
|
+ }
|
|
|
|
|
|
- val fieldUnique = migrationSettingService.schema.firstOrNull {
|
|
|
- it.table.equals(clazz.simpleName, ignoreCase = true)
|
|
|
- }?.unique
|
|
|
val fieldKey = fieldUnique?.split(";")?.mapNotNull { m -> mapData[m]?.toString() }?.joinToString(";")
|
|
|
|
|
|
val uidFromDb = temporaryDataEntity["${clazz.simpleName};$fieldKey"]?.get("uid")?.toString()
|
|
|
@@ -725,19 +744,19 @@ class QueryNativeService(
|
|
|
val structure = finalMap["parent_id"]?.toString()?.let {
|
|
|
fields.add("structure")
|
|
|
val parentUid = EntityUtility(
|
|
|
- apiService, General.clazzEntity(clazz.simpleName.camelCase())!!
|
|
|
+ apiService, General.clazzEntity(className.camelCase())!!
|
|
|
).parentStructure(it)
|
|
|
"$parentUid|$uid"
|
|
|
}
|
|
|
|
|
|
- val tableName = when (clazz.simpleName.lowercase()) {
|
|
|
+ val tableName = when (className.lowercase()) {
|
|
|
"phoneuserpbx" -> "phoneuserpbx"
|
|
|
"transaction" -> {
|
|
|
fields.remove("uid")
|
|
|
"calltransaction"
|
|
|
}
|
|
|
|
|
|
- else -> clazz.simpleName.camelToSnake().lowercase()
|
|
|
+ else -> className.camelToSnake().lowercase()
|
|
|
}
|
|
|
|
|
|
val query = fieldUnique?.let { fu ->
|
|
|
@@ -760,7 +779,6 @@ class QueryNativeService(
|
|
|
// val tempField = fields.joinToString() { it.camelToSnake() }
|
|
|
// val query = "INSERT INTO $tableName ($tempField) " +
|
|
|
// "VALUES (${fields.joinToString() { ":$it" }})"
|
|
|
-
|
|
|
val sqlNative = apiService.em.createNativeQuery(query)
|
|
|
|
|
|
if (clazz.simpleName.lowercase() != "transaction") {
|
|
|
@@ -770,9 +788,7 @@ class QueryNativeService(
|
|
|
finalMap.forEach { (t, u) -> sqlNative.setParameter(t.replace("_id", "_uid"), u) }
|
|
|
sqlNative.executeUpdate()
|
|
|
|
|
|
- if (isUpdate) {
|
|
|
- functionAfter?.invoke(uid)
|
|
|
- }
|
|
|
+ functionAfter?.invoke(uid, isUpdate)
|
|
|
|
|
|
return uid
|
|
|
}
|