|
@@ -20,6 +20,7 @@ import kotlin.time.measureTimedValue
|
|
|
val temporaryPrepareCallTransactionCallTo: MutableMap<String, Map<String, Any?>?> = mutableMapOf()
|
|
val temporaryPrepareCallTransactionCallTo: MutableMap<String, Map<String, Any?>?> = mutableMapOf()
|
|
|
val temporaryPrepareCallTransactionCallFrom: MutableMap<String, String?> = mutableMapOf()
|
|
val temporaryPrepareCallTransactionCallFrom: MutableMap<String, String?> = mutableMapOf()
|
|
|
|
|
|
|
|
|
|
+
|
|
|
@Service
|
|
@Service
|
|
|
class FinalizedDataService(
|
|
class FinalizedDataService(
|
|
|
private val cpDecrypt: CpDecrypt,
|
|
private val cpDecrypt: CpDecrypt,
|
|
@@ -318,7 +319,8 @@ class FinalizedDataService(
|
|
|
temporaryDataByCode[keyCode]
|
|
temporaryDataByCode[keyCode]
|
|
|
} else {
|
|
} else {
|
|
|
try {
|
|
try {
|
|
|
- val fd = if (table == "trunk") " AND (subscribed_no != 'new trunk' OR subscribed_no IS NULL) " else " "
|
|
|
|
|
|
|
+ val fd =
|
|
|
|
|
+ if (table == "trunk") " AND (subscribed_no != 'new trunk' OR subscribed_no IS NULL) " else " "
|
|
|
apiService.transaction { em ->
|
|
apiService.transaction { em ->
|
|
|
val result = em.createNativeQuery("SELECT $select FROM $tableName WHERE $field = :$field $fd")
|
|
val result = em.createNativeQuery("SELECT $select FROM $tableName WHERE $field = :$field $fd")
|
|
|
.setParameter(field, value.toString())
|
|
.setParameter(field, value.toString())
|
|
@@ -444,7 +446,8 @@ class FinalizedDataService(
|
|
|
val finalMapEntity = when (table) {
|
|
val finalMapEntity = when (table) {
|
|
|
"calltransaction" -> {
|
|
"calltransaction" -> {
|
|
|
val callMap = prepareDataCallTransaction(finalizer)
|
|
val callMap = prepareDataCallTransaction(finalizer)
|
|
|
- callMap["additionalData1"] = "migration"
|
|
|
|
|
|
|
+ callMap["additionalData1"] =
|
|
|
|
|
+ "migration-${LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"))}"
|
|
|
callMap
|
|
callMap
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -601,25 +604,28 @@ class FinalizedDataService(
|
|
|
data["transferType"] = when {
|
|
data["transferType"] = when {
|
|
|
(data["extTransferFrom"]?.toString()?.isBlank() ?: false)
|
|
(data["extTransferFrom"]?.toString()?.isBlank() ?: false)
|
|
|
&& (data["extTransferTo"]?.toString()?.isBlank() ?: false) -> TransferType.DIRECT
|
|
&& (data["extTransferTo"]?.toString()?.isBlank() ?: false) -> TransferType.DIRECT
|
|
|
|
|
+
|
|
|
(data["extTransferFrom"]?.toString()?.isBlank() ?: false)
|
|
(data["extTransferFrom"]?.toString()?.isBlank() ?: false)
|
|
|
&& (data["extTransferTo"]?.toString()?.isNotBlank() ?: false) -> TransferType.TRANSFER_TO
|
|
&& (data["extTransferTo"]?.toString()?.isNotBlank() ?: false) -> TransferType.TRANSFER_TO
|
|
|
|
|
+
|
|
|
(data["extTransferFrom"]?.toString()?.isNotBlank() ?: false)
|
|
(data["extTransferFrom"]?.toString()?.isNotBlank() ?: false)
|
|
|
&& (data["extTransferTo"]?.toString()?.isBlank() ?: false) -> TransferType.TRANSFER_FROM
|
|
&& (data["extTransferTo"]?.toString()?.isBlank() ?: false) -> TransferType.TRANSFER_FROM
|
|
|
|
|
+
|
|
|
else -> null
|
|
else -> null
|
|
|
}
|
|
}
|
|
|
val buildRawData = buildRawData(data)
|
|
val buildRawData = buildRawData(data)
|
|
|
val rawData = buildRawData.joinToString(",")
|
|
val rawData = buildRawData.joinToString(",")
|
|
|
|
|
|
|
|
data["rawData"] = rawData
|
|
data["rawData"] = rawData
|
|
|
- getCallTo(buildRawData[12].toString())?.forEach { (t, u) -> data[t] = u }
|
|
|
|
|
-
|
|
|
|
|
- data["area_uid"]?.toString()?.let { area ->
|
|
|
|
|
- val domainFrom = getCallFrom(area, buildRawData[10]?.toString(), buildRawData[1]?.toString())
|
|
|
|
|
- data["zone_uid"]?.toString()?.let {
|
|
|
|
|
- val zoneDomain = if (data["domain"] == domainFrom) "LOC" else "NDD"
|
|
|
|
|
- data["zone_uid"] = findUidByCode("zone", zoneDomain)
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+// getCallTo(buildRawData[12].toString())?.forEach { (t, u) -> data[t] = u }
|
|
|
|
|
+//
|
|
|
|
|
+// data["area_uid"]?.toString()?.let { area ->
|
|
|
|
|
+// val domainFrom = getCallFrom(area, buildRawData[10]?.toString(), buildRawData[1]?.toString())
|
|
|
|
|
+// data["zone_uid"]?.toString()?.let {
|
|
|
|
|
+// val zoneDomain = if (data["domain"] == domainFrom) "LOC" else "NDD"
|
|
|
|
|
+// data["zone_uid"] = findUidByCode("zone", zoneDomain)
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
data["transferType"]?.let {
|
|
data["transferType"]?.let {
|
|
|
data["transferType"] = (it as TransferType).ordinal
|
|
data["transferType"] = (it as TransferType).ordinal
|
|
|
}
|
|
}
|
|
@@ -688,6 +694,33 @@ class FinalizedDataService(
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ fun prepareDataCallTransaction() {
|
|
|
|
|
+ apiService.findListAll(PhoneUser::class.java, select = listOf("uid", "code")).forEach {
|
|
|
|
|
+ val keyCode = "phone_user;uid;${it["code"] ?: "#"}"
|
|
|
|
|
+ temporaryDataByCode[keyCode] = it["uid"]?.toString()
|
|
|
|
|
+ }
|
|
|
|
|
+ apiService.findListAll(Organization::class.java, select = listOf("uid", "code")).forEach {
|
|
|
|
|
+ val keyCode = "organization;uid;${it["code"] ?: "#"}"
|
|
|
|
|
+ temporaryDataByCode[keyCode] = it["uid"]?.toString()
|
|
|
|
|
+ }
|
|
|
|
|
+ apiService.findListAll(CostCenter::class.java, select = listOf("uid", "code")).forEach {
|
|
|
|
|
+ val keyCode = "cost_center;uid;${it["code"] ?: "#"}"
|
|
|
|
|
+ temporaryDataByCode[keyCode] = it["uid"]?.toString()
|
|
|
|
|
+ }
|
|
|
|
|
+ apiService.findListAll(Pbx::class.java, select = listOf("uid", "code")).forEach {
|
|
|
|
|
+ val keyCode = "pbx;uid;${it["code"] ?: "#"}"
|
|
|
|
|
+ temporaryDataByCode[keyCode] = it["uid"]?.toString()
|
|
|
|
|
+ }
|
|
|
|
|
+ apiService.findListAll(Trunk::class.java, select = listOf("uid", "code")).forEach {
|
|
|
|
|
+ val keyCode = "trunk;uid;${it["code"] ?: "#"}"
|
|
|
|
|
+ temporaryDataByCode[keyCode] = it["uid"]?.toString()
|
|
|
|
|
+ }
|
|
|
|
|
+ apiService.findListAll(Account::class.java, select = listOf("uid", "code")).forEach {
|
|
|
|
|
+ val keyCode = "account;uid;${it["code"] ?: "#"}"
|
|
|
|
|
+ temporaryDataByCode[keyCode] = it["uid"]?.toString()
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -763,10 +796,12 @@ class InsertDataService(
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- val query = fieldUnique?.let { fu ->
|
|
|
|
|
- val uniqueOn = fu.split(";").joinToString(" AND ") { m -> "t.$m = s.$m" }
|
|
|
|
|
- """
|
|
|
|
|
|
|
+ val query = if (table == "calltransaction") "INSERT INTO $table (${fields.joinToString() { it.camelToSnake() }}) " +
|
|
|
|
|
+ "VALUES (${fields.joinToString() { ":$it" }})"
|
|
|
|
|
+ else {
|
|
|
|
|
+ fieldUnique?.let { fu ->
|
|
|
|
|
+ val uniqueOn = fu.split(";").joinToString(" AND ") { m -> "t.$m = s.$m" }
|
|
|
|
|
+ """
|
|
|
MERGE INTO $table WITH (HOLDLOCK) AS t
|
|
MERGE INTO $table WITH (HOLDLOCK) AS t
|
|
|
USING (VALUES (${fields.joinToString() { ":$it" }}))
|
|
USING (VALUES (${fields.joinToString() { ":$it" }}))
|
|
|
AS s(${fields.joinToString() { it.camelToSnake() }})
|
|
AS s(${fields.joinToString() { it.camelToSnake() }})
|
|
@@ -778,8 +813,10 @@ class InsertDataService(
|
|
|
INSERT (${fields.joinToString { it.camelToSnake() }})
|
|
INSERT (${fields.joinToString { it.camelToSnake() }})
|
|
|
VALUES (${fields.joinToString { "s.${it.camelToSnake()}" }});
|
|
VALUES (${fields.joinToString { "s.${it.camelToSnake()}" }});
|
|
|
""".trimIndent()
|
|
""".trimIndent()
|
|
|
- } ?: ("INSERT INTO $table (${fields.joinToString() { it.camelToSnake() }}) " +
|
|
|
|
|
- "VALUES (${fields.joinToString() { ":$it" }})")
|
|
|
|
|
|
|
+ } ?: ("INSERT INTO $table (${fields.joinToString() { it.camelToSnake() }}) " +
|
|
|
|
|
+ "VALUES (${fields.joinToString() { ":$it" }})")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
val sqlNative = apiService.em.createNativeQuery(query)
|
|
val sqlNative = apiService.em.createNativeQuery(query)
|
|
|
|
|
|
|
@@ -796,53 +833,77 @@ class InsertDataService(
|
|
|
return uid
|
|
return uid
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ fun createTableCallTransactionTemporary() {
|
|
|
|
|
+ try {
|
|
|
|
|
+ apiService.transaction { em ->
|
|
|
|
|
+ em.createNativeQuery(
|
|
|
|
|
+ "IF OBJECT_ID('dbo.calltransaction_temp', 'U') IS NOT NULL\n" +
|
|
|
|
|
+ "BEGIN\n" +
|
|
|
|
|
+ " TRUNCATE TABLE dbo.calltransaction_temp;\n" +
|
|
|
|
|
+ "END\n" +
|
|
|
|
|
+ "ELSE\n" +
|
|
|
|
|
+ "BEGIN\n" +
|
|
|
|
|
+ " SELECT TOP 0 *\n" +
|
|
|
|
|
+ " INTO dbo.calltransaction_temp\n" +
|
|
|
|
|
+ " FROM dbo.calltransaction;\n" +
|
|
|
|
|
+ "END"
|
|
|
|
|
+ )
|
|
|
|
|
+ .executeUpdate()
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (e: Exception) {
|
|
|
|
|
+ SimpleLogger.getLogger(this::class.java).error("failed create table call transaction temporary", e)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
fun updateRawData() {
|
|
fun updateRawData() {
|
|
|
try {
|
|
try {
|
|
|
apiService.transaction { em ->
|
|
apiService.transaction { em ->
|
|
|
- em.createNativeQuery("UPDATE ct\n" +
|
|
|
|
|
- "SET raw_data = CONCAT_WS(',',\n" +
|
|
|
|
|
- "\t'CDR',\n" +
|
|
|
|
|
- " ISNULL(pbx.code, ''),\n" +
|
|
|
|
|
- " CASE \n" +
|
|
|
|
|
- " WHEN ct.direction = 0 THEN 'G'\n" +
|
|
|
|
|
- " WHEN ct.direction = 1 THEN 'C'\n" +
|
|
|
|
|
- " ELSE 'I'\n" +
|
|
|
|
|
- " END,\n" +
|
|
|
|
|
- " CONVERT(VARCHAR, ct.start_of_call, 120),\n" +
|
|
|
|
|
- " CONVERT(VARCHAR, ct.start_of_call, 120),\n" +
|
|
|
|
|
- " CONVERT(VARCHAR, DATEADD(SECOND, ct.duration, ct.start_of_call), 120),\n" +
|
|
|
|
|
- " '',\n" +
|
|
|
|
|
- " ct.duration,\n" +
|
|
|
|
|
- " ISNULL(ct.access_number, ''),\n" +
|
|
|
|
|
- " '',\n" +
|
|
|
|
|
- " ISNULL(trunk.code, ''),\n" +
|
|
|
|
|
- " '',\n" +
|
|
|
|
|
- " ISNULL(ct.number,''),\n" +
|
|
|
|
|
- " ISNULL(ct.caller_number,''),\n" +
|
|
|
|
|
- " ISNULL(ct.pin,''),\n" +
|
|
|
|
|
- " '',\n" +
|
|
|
|
|
- " ISNULL(ct.extension,''),\n" +
|
|
|
|
|
- " ISNULL(ct.ext_transfer_from,''),\n" +
|
|
|
|
|
- " ISNULL(ct.ext_transfer_to,''),\n" +
|
|
|
|
|
- " ISNULL(CASE WHEN ct.transfer_type = 0 THEN 'D'\n" +
|
|
|
|
|
- "\tWHEN ct.transfer_type = 1 THEN 'TF'\n" +
|
|
|
|
|
- "\tWHEN ct.transfer_type = 2 THEN 'TT'\n" +
|
|
|
|
|
- "\tELSE 'F' END,''),\n" +
|
|
|
|
|
- " '',\n" +
|
|
|
|
|
- " '',\n" +
|
|
|
|
|
- " ISNULL(ct.redirect_reason,''),\n" +
|
|
|
|
|
- " ISNULL(ct.termination_code,''),\n" +
|
|
|
|
|
- " CASE \n" +
|
|
|
|
|
- " WHEN ct.additional_data1 = 'migration' THEN ''\n" +
|
|
|
|
|
- " ELSE ISNULL(ct.additional_data1,'')\n" +
|
|
|
|
|
- " END,\n" +
|
|
|
|
|
- " ISNULL(ct.additional_data2,'')\n" +
|
|
|
|
|
- ")\n" +
|
|
|
|
|
- "FROM calltransaction ct\n" +
|
|
|
|
|
- "LEFT JOIN pbx pbx ON pbx.uid = ct.pbx_uid\n" +
|
|
|
|
|
- "LEFT JOIN trunk trunk ON trunk.uid = ct.trunk_uid\n" +
|
|
|
|
|
- "WHERE ct.raw_data IS NULL OR ct.raw_data = ''")
|
|
|
|
|
|
|
+ em.createNativeQuery(
|
|
|
|
|
+ "UPDATE ct\n" +
|
|
|
|
|
+ "SET raw_data = CONCAT_WS(',',\n" +
|
|
|
|
|
+ "\t'CDR',\n" +
|
|
|
|
|
+ " ISNULL(pbx.code, ''),\n" +
|
|
|
|
|
+ " CASE \n" +
|
|
|
|
|
+ " WHEN ct.direction = 0 THEN 'G'\n" +
|
|
|
|
|
+ " WHEN ct.direction = 1 THEN 'C'\n" +
|
|
|
|
|
+ " ELSE 'I'\n" +
|
|
|
|
|
+ " END,\n" +
|
|
|
|
|
+ " CONVERT(VARCHAR, ct.start_of_call, 120),\n" +
|
|
|
|
|
+ " CONVERT(VARCHAR, ct.start_of_call, 120),\n" +
|
|
|
|
|
+ " CONVERT(VARCHAR, DATEADD(SECOND, ct.duration, ct.start_of_call), 120),\n" +
|
|
|
|
|
+ " '',\n" +
|
|
|
|
|
+ " ct.duration,\n" +
|
|
|
|
|
+ " ISNULL(ct.access_number, ''),\n" +
|
|
|
|
|
+ " '',\n" +
|
|
|
|
|
+ " ISNULL(trunk.code, ''),\n" +
|
|
|
|
|
+ " '',\n" +
|
|
|
|
|
+ " ISNULL(ct.number,''),\n" +
|
|
|
|
|
+ " ISNULL(ct.caller_number,''),\n" +
|
|
|
|
|
+ " ISNULL(ct.pin,''),\n" +
|
|
|
|
|
+ " '',\n" +
|
|
|
|
|
+ " ISNULL(ct.extension,''),\n" +
|
|
|
|
|
+ " ISNULL(ct.ext_transfer_from,''),\n" +
|
|
|
|
|
+ " ISNULL(ct.ext_transfer_to,''),\n" +
|
|
|
|
|
+ " ISNULL(CASE WHEN ct.transfer_type = 0 THEN 'D'\n" +
|
|
|
|
|
+ "\tWHEN ct.transfer_type = 1 THEN 'TF'\n" +
|
|
|
|
|
+ "\tWHEN ct.transfer_type = 2 THEN 'TT'\n" +
|
|
|
|
|
+ "\tELSE 'F' END,''),\n" +
|
|
|
|
|
+ " '',\n" +
|
|
|
|
|
+ " '',\n" +
|
|
|
|
|
+ " ISNULL(ct.redirect_reason,''),\n" +
|
|
|
|
|
+ " ISNULL(ct.termination_code,''),\n" +
|
|
|
|
|
+ " CASE \n" +
|
|
|
|
|
+ " WHEN ct.additional_data1 = 'migration' THEN ''\n" +
|
|
|
|
|
+ " ELSE ISNULL(ct.additional_data1,'')\n" +
|
|
|
|
|
+ " END,\n" +
|
|
|
|
|
+ " ISNULL(ct.additional_data2,'')\n" +
|
|
|
|
|
+ ")\n" +
|
|
|
|
|
+ "FROM calltransaction ct\n" +
|
|
|
|
|
+ "LEFT JOIN pbx pbx ON pbx.uid = ct.pbx_uid\n" +
|
|
|
|
|
+ "LEFT JOIN trunk trunk ON trunk.uid = ct.trunk_uid\n" +
|
|
|
|
|
+ "WHERE ct.raw_data IS NULL OR ct.raw_data = ''"
|
|
|
|
|
+ )
|
|
|
}.executeUpdate()
|
|
}.executeUpdate()
|
|
|
} catch (e: Exception) {
|
|
} catch (e: Exception) {
|
|
|
SimpleLogger.getLogger(this::class.java).error("failed update raw data blank data", e)
|
|
SimpleLogger.getLogger(this::class.java).error("failed update raw data blank data", e)
|