|
@@ -17,6 +17,9 @@ import java.util.*
|
|
|
import kotlin.math.log
|
|
import kotlin.math.log
|
|
|
import kotlin.time.measureTimedValue
|
|
import kotlin.time.measureTimedValue
|
|
|
|
|
|
|
|
|
|
+val temporaryPrepareCallTransactionCallTo: MutableMap<String, Map<String, Any?>?> = mutableMapOf()
|
|
|
|
|
+val temporaryPrepareCallTransactionCallFrom: MutableMap<String, String?> = mutableMapOf()
|
|
|
|
|
+
|
|
|
@Service
|
|
@Service
|
|
|
class FinalizedDataService(
|
|
class FinalizedDataService(
|
|
|
private val cpDecrypt: CpDecrypt,
|
|
private val cpDecrypt: CpDecrypt,
|
|
@@ -310,43 +313,82 @@ class FinalizedDataService(
|
|
|
private fun findUidByCode(table: String, value: Any, field: String = "code", select: String = "uid"): String? {
|
|
private fun findUidByCode(table: String, value: Any, field: String = "code", select: String = "uid"): String? {
|
|
|
return if (value.toString().isBlank()) null else {
|
|
return if (value.toString().isBlank()) null else {
|
|
|
val tableName = General.toTableName(table)
|
|
val tableName = General.toTableName(table)
|
|
|
- temporaryDataByCode["$tableName;$select;$value"] ?: run {
|
|
|
|
|
|
|
+ val keyCode = "$tableName;$select;$value"
|
|
|
|
|
+ if (temporaryDataByCode.any { a -> a.key == keyCode }) {
|
|
|
|
|
+ temporaryDataByCode[keyCode]
|
|
|
|
|
+ } else {
|
|
|
try {
|
|
try {
|
|
|
- val fd = if (table == "trunk") " AND subscribed_no != 'new trunk' " 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())
|
|
|
.resultList
|
|
.resultList
|
|
|
.first() as String?
|
|
.first() as String?
|
|
|
- temporaryDataByCode["$tableName;$select;$value"] = result
|
|
|
|
|
|
|
+ temporaryDataByCode[keyCode] = result
|
|
|
result
|
|
result
|
|
|
}
|
|
}
|
|
|
} catch (e: Exception) {
|
|
} catch (e: Exception) {
|
|
|
|
|
+ temporaryDataByCode[keyCode] = null
|
|
|
logger.info("failed find uid $tableName $field $value")
|
|
logger.info("failed find uid $tableName $field $value")
|
|
|
null
|
|
null
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+// temporaryDataByCode["$tableName;$select;$value"] ?: run {
|
|
|
|
|
+// try {
|
|
|
|
|
+// val fd = if (table == "trunk") " AND subscribed_no != 'new trunk' " else " "
|
|
|
|
|
+// apiService.transaction { em ->
|
|
|
|
|
+// val result = em.createNativeQuery("SELECT $select FROM $tableName WHERE $field = :$field $fd")
|
|
|
|
|
+// .setParameter(field, value.toString())
|
|
|
|
|
+// .resultList
|
|
|
|
|
+// .first() as String?
|
|
|
|
|
+// temporaryDataByCode["$tableName;$select;$value"] = result
|
|
|
|
|
+// result
|
|
|
|
|
+// }
|
|
|
|
|
+// } catch (e: Exception) {
|
|
|
|
|
+// logger.info("failed find uid $tableName $field $value")
|
|
|
|
|
+// null
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private fun findCodeByUid(table: String, value: Any, field: String = "uid", select: String = "code"): String? {
|
|
private fun findCodeByUid(table: String, value: Any, field: String = "uid", select: String = "code"): String? {
|
|
|
return if (value.toString().isBlank()) null else {
|
|
return if (value.toString().isBlank()) null else {
|
|
|
val tableName = General.toTableName(table)
|
|
val tableName = General.toTableName(table)
|
|
|
- temporaryDataByCode["$tableName;$select;$value"] ?: run {
|
|
|
|
|
|
|
+ val keyCode = "$tableName;$select;$value"
|
|
|
|
|
+ if (temporaryDataByCode.any { a -> a.key == keyCode }) {
|
|
|
|
|
+ temporaryDataByCode[keyCode]
|
|
|
|
|
+ } else {
|
|
|
try {
|
|
try {
|
|
|
apiService.transaction { em ->
|
|
apiService.transaction { em ->
|
|
|
val result = em.createNativeQuery("SELECT $select FROM $tableName WHERE $field = :$field")
|
|
val result = em.createNativeQuery("SELECT $select FROM $tableName WHERE $field = :$field")
|
|
|
.setParameter(field, value.toString())
|
|
.setParameter(field, value.toString())
|
|
|
.resultList
|
|
.resultList
|
|
|
.first() as String?
|
|
.first() as String?
|
|
|
- temporaryDataByCode["$tableName;$select;$value"] = result
|
|
|
|
|
|
|
+ temporaryDataByCode[keyCode] = result
|
|
|
result
|
|
result
|
|
|
}
|
|
}
|
|
|
} catch (e: Exception) {
|
|
} catch (e: Exception) {
|
|
|
|
|
+ temporaryDataByCode[keyCode] = null
|
|
|
logger.info("failed find code $tableName $field $value")
|
|
logger.info("failed find code $tableName $field $value")
|
|
|
null
|
|
null
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+// temporaryDataByCode["$tableName;$select;$value"] ?: run {
|
|
|
|
|
+// try {
|
|
|
|
|
+// apiService.transaction { em ->
|
|
|
|
|
+// val result = em.createNativeQuery("SELECT $select FROM $tableName WHERE $field = :$field")
|
|
|
|
|
+// .setParameter(field, value.toString())
|
|
|
|
|
+// .resultList
|
|
|
|
|
+// .first() as String?
|
|
|
|
|
+// temporaryDataByCode["$tableName;$select;$value"] = result
|
|
|
|
|
+// result
|
|
|
|
|
+// }
|
|
|
|
|
+// } catch (e: Exception) {
|
|
|
|
|
+// logger.info("failed find code $tableName $field $value")
|
|
|
|
|
+// null
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -500,6 +542,7 @@ class FinalizedDataService(
|
|
|
|
|
|
|
|
1
|
|
1
|
|
|
} catch (e: Exception) {
|
|
} catch (e: Exception) {
|
|
|
|
|
+ println(Util.mapper.writeValueAsString(map))
|
|
|
logger.error("failed insert data $table", e)
|
|
logger.error("failed insert data $table", e)
|
|
|
0
|
|
0
|
|
|
}
|
|
}
|
|
@@ -522,7 +565,7 @@ class FinalizedDataService(
|
|
|
val seg8 = data["duration"]
|
|
val seg8 = data["duration"]
|
|
|
val seg9 = data["accessNumber"] ?: ""
|
|
val seg9 = data["accessNumber"] ?: ""
|
|
|
val seg10 = ""
|
|
val seg10 = ""
|
|
|
- val seg11 = data["trunk_id"]?.let { findCodeByUid("trunk", it) ?: "" }
|
|
|
|
|
|
|
+ val seg11 = data["trunk_id"]?.let { findCodeByUid("trunk", it) ?: "" } ?: ""
|
|
|
val seg12 = ""
|
|
val seg12 = ""
|
|
|
val seg13 = data["number"] ?: ""
|
|
val seg13 = data["number"] ?: ""
|
|
|
val seg14 = data["callerNumber"] ?: ""
|
|
val seg14 = data["callerNumber"] ?: ""
|
|
@@ -586,49 +629,62 @@ class FinalizedDataService(
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private fun getCallTo(number: String): Map<String, Any?>? {
|
|
private fun getCallTo(number: String): Map<String, Any?>? {
|
|
|
- return try {
|
|
|
|
|
- apiService.transaction { em ->
|
|
|
|
|
- val hlr = em.createNativeQuery(
|
|
|
|
|
- "SELECT TOP 1 prefix, provider_uid, area_uid, phone_type, zone_uid, domain \n" +
|
|
|
|
|
- "FROM hlr\n" +
|
|
|
|
|
|
|
+ val keyCode = "getCall-$number"
|
|
|
|
|
+ return if (temporaryPrepareCallTransactionCallTo.any { a -> a.key == keyCode })
|
|
|
|
|
+ temporaryPrepareCallTransactionCallTo[keyCode]
|
|
|
|
|
+ else {
|
|
|
|
|
+ try {
|
|
|
|
|
+ apiService.transaction { em ->
|
|
|
|
|
+ val hlr = em.createNativeQuery(
|
|
|
|
|
+ "SELECT TOP 1 prefix, provider_uid, area_uid, phone_type, zone_uid, domain \n" +
|
|
|
|
|
+ "FROM hlr\n" +
|
|
|
// "WHERE '$number' LIKE prefix + '%'\n" +
|
|
// "WHERE '$number' LIKE prefix + '%'\n" +
|
|
|
- "WHERE '$number' LIKE prefix + '%'\n" +
|
|
|
|
|
- "ORDER BY LEN(prefix) DESC"
|
|
|
|
|
- ).singleResult as Array<Any?>
|
|
|
|
|
- mapOf(
|
|
|
|
|
- "prefix" to hlr[0].toString(),
|
|
|
|
|
- "provider_to_uid" to hlr[1].toString(),
|
|
|
|
|
- "area_uid" to hlr[2].toString(),
|
|
|
|
|
- "phone_type" to hlr[3].toString(),
|
|
|
|
|
- "zone_uid" to hlr[4].toString(),
|
|
|
|
|
- "domain" to hlr[5].toString()
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ "WHERE '$number' LIKE prefix + '%'\n" +
|
|
|
|
|
+ "ORDER BY LEN(prefix) DESC"
|
|
|
|
|
+ ).singleResult as Array<Any?>
|
|
|
|
|
+ val result = mapOf(
|
|
|
|
|
+ "prefix" to hlr[0].toString(),
|
|
|
|
|
+ "provider_to_uid" to hlr[1].toString(),
|
|
|
|
|
+ "area_uid" to hlr[2].toString(),
|
|
|
|
|
+ "phone_type" to hlr[3].toString(),
|
|
|
|
|
+ "zone_uid" to hlr[4].toString(),
|
|
|
|
|
+ "domain" to hlr[5].toString()
|
|
|
|
|
+ )
|
|
|
|
|
+ temporaryPrepareCallTransactionCallTo[keyCode] = result
|
|
|
|
|
+ result
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (e: Exception) {
|
|
|
|
|
+ temporaryPrepareCallTransactionCallTo[keyCode] = null
|
|
|
|
|
+ logger.info("failed get call to attribute number $number")
|
|
|
|
|
+ null
|
|
|
}
|
|
}
|
|
|
- } catch (e: Exception) {
|
|
|
|
|
- logger.info("failed get call to attribute number $number")
|
|
|
|
|
-// logger.error("failed get call to attribute number $number", e)
|
|
|
|
|
- null
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private fun getCallFrom(areaUid: String, trunkCode: String?, pbxCode: String?): String? {
|
|
private fun getCallFrom(areaUid: String, trunkCode: String?, pbxCode: String?): String? {
|
|
|
- return try {
|
|
|
|
|
- val trunk = trunkCode?.let { findUidByCode("trunk", it, select = "provider_uid") }
|
|
|
|
|
- val pbx = pbxCode?.let { findUidByCode("pbx", it, select = "provider_uid") }
|
|
|
|
|
|
|
+ val keyCode = "getCallFrom-$areaUid-${trunkCode ?: "#"}-${pbxCode ?: "#"}"
|
|
|
|
|
+ return if (temporaryPrepareCallTransactionCallFrom.any { a -> a.key == keyCode })
|
|
|
|
|
+ temporaryPrepareCallTransactionCallFrom[keyCode]
|
|
|
|
|
+ else {
|
|
|
|
|
+ try {
|
|
|
|
|
+ val trunk = trunkCode?.let { findUidByCode("trunk", it, select = "provider_uid") }
|
|
|
|
|
+ val pbx = pbxCode?.let { findUidByCode("pbx", it, select = "provider_uid") }
|
|
|
|
|
|
|
|
- apiService.transaction { em ->
|
|
|
|
|
- val hlr = em.createNativeQuery(
|
|
|
|
|
- "SELECT TOP 1 domain \n" +
|
|
|
|
|
- "FROM hlr\n" +
|
|
|
|
|
-// "WHERE '$number' LIKE prefix + '%'\n" +
|
|
|
|
|
- "WHERE area_uid = '$areaUid' AND provider_uid = '${trunk ?: pbx ?: "#uid"}' \n"
|
|
|
|
|
- ).singleResult as Array<Any?>
|
|
|
|
|
- hlr[0].toString()
|
|
|
|
|
|
|
+ apiService.transaction { em ->
|
|
|
|
|
+ val hlr = em.createNativeQuery(
|
|
|
|
|
+ "SELECT TOP 1 domain \n" +
|
|
|
|
|
+ "FROM hlr\n" +
|
|
|
|
|
+ "WHERE area_uid = '$areaUid' AND provider_uid = '${trunk ?: pbx ?: "#uid"}' \n"
|
|
|
|
|
+ ).singleResult as Array<Any?>
|
|
|
|
|
+ val result = hlr[0].toString()
|
|
|
|
|
+ temporaryPrepareCallTransactionCallFrom[keyCode] = result
|
|
|
|
|
+ result
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (e: Exception) {
|
|
|
|
|
+ temporaryPrepareCallTransactionCallFrom[keyCode] = null
|
|
|
|
|
+ logger.info("failed get call from attribute area ${areaUid} trunk $trunkCode pbx $pbxCode")
|
|
|
|
|
+ null
|
|
|
}
|
|
}
|
|
|
- } catch (e: Exception) {
|
|
|
|
|
- logger.info("failed get call from attribute trunk $trunkCode pbx $pbxCode")
|
|
|
|
|
-// logger.error("failed get call to attribute number $number", e)
|
|
|
|
|
- null
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|