AdmEntityTransferUtil.kt 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package com.persagy.server.util
  2. import com.persagy.dmp.basic.utils.JsonNodeUtils
  3. import cn.hutool.core.collection.CollUtil
  4. import cn.hutool.core.util.ArrayUtil
  5. import com.fasterxml.jackson.databind.JsonNode
  6. import com.fasterxml.jackson.databind.node.ArrayNode
  7. import com.fasterxml.jackson.databind.node.ObjectNode
  8. /**
  9. * ADM通用查询条件
  10. * @author Charlie Yu
  11. * @date 2021-08-16
  12. */
  13. object AdmEntityTransferUtil {
  14. /**
  15. * 转换为数据中台对象
  16. * @param objList
  17. * @return
  18. */
  19. fun toDmpMultiEntity(objList: List<*>?): ArrayNode {
  20. return JsonNodeUtils.toArrayNode(objList, "infos", null)
  21. }
  22. /**
  23. * 转换为数据中台对象
  24. * @param obj
  25. * @return
  26. */
  27. fun toDmpSingleEntity(obj: Any?): JsonNode {
  28. return JsonNodeUtils.toObjectNode(obj, "infos", null)
  29. }
  30. /**
  31. * 转换为数据中心对象
  32. * @param array 数据中台对象
  33. * @param clazz 数据中心对象class
  34. * @param <T>
  35. * @return
  36. </T> */
  37. fun <T> toAdmMultiEntity(array: List<*>?, projection: List<String?>?, clazz: Class<T>?): List<T>? {
  38. if(CollUtil.isEmpty(array)){
  39. return null;
  40. }
  41. val dataNode = JsonNodeUtils.toArrayNode(array, null, null)
  42. return toAdmMultiEntity(dataNode, projection, clazz)
  43. }
  44. /**
  45. * 转换为数据中心对象
  46. * @param clazz
  47. * @param <T>
  48. * @return
  49. * @param array
  50. </T> */
  51. fun <T> toAdmMultiEntity(array: ArrayNode, projection: List<String?>?, clazz: Class<T>?): List<T>? {
  52. if (ArrayUtil.isEmpty(array)) {
  53. return null
  54. }
  55. // 转换属性名
  56. var i = 0
  57. val j = array.size()
  58. while (i < j) {
  59. val node = array[i]
  60. if (node != null && node.isObject) {
  61. resetAdmProperty(node as ObjectNode, projection)
  62. }
  63. i++
  64. }
  65. return JsonNodeUtils.toEntity(array, clazz, "infos")
  66. }
  67. /**
  68. * 转换为数据中心对象
  69. * @param node
  70. * @param clazz
  71. * @param <T>
  72. * @return
  73. </T> */
  74. fun <T> toAdmSingleEntity(node: ObjectNode, projection: List<String?>?, clazz: Class<T>?): T {
  75. resetAdmProperty(node, projection)
  76. return JsonNodeUtils.toEntity(node, clazz, "infos")
  77. }
  78. /**
  79. * 处理dmp转adm对象的属性名
  80. * @param node
  81. */
  82. private fun resetAdmProperty(node: ObjectNode, projection: List<String?>?) {
  83. // 转换属性名 TODO 目前只有创建时间和修改时间需要转换,后续有其他时通过建立映射在此转换即可
  84. copyProperty(node, "creationTime", "createTime")
  85. copyProperty(node, "modifiedTime", "lastUpdate")
  86. copyProperty(node, "objType", "objectType")
  87. removeProperty(node, projection)
  88. }
  89. /**
  90. * 拷贝属性
  91. * @param dmpData 数据中台对象
  92. * @param srcProp 数据中台属性名
  93. * @param desProp 对应的数据中心属性名
  94. */
  95. private fun copyProperty(dmpData: ObjectNode?, srcProp: String, desProp: String) {
  96. if (dmpData == null) {
  97. return
  98. }
  99. val value = dmpData[srcProp]
  100. if (value == null || value.isNull) {
  101. return
  102. }
  103. dmpData.set<JsonNode>(desProp, value)
  104. dmpData.remove(srcProp)
  105. }
  106. /**
  107. * 删除掉数据中心不需要的属性
  108. * @param dmpData
  109. */
  110. private fun removeProperty(dmpData: ObjectNode, projection: List<String?>?) {
  111. if (CollUtil.isNotEmpty(projection)) {
  112. // 转换为Set,提供遍历效率
  113. val fieldSet: Set<String?> = CollUtil.newHashSet(projection)
  114. val fields = dmpData.fieldNames()
  115. while (fields.hasNext()) {
  116. val field = fields.next()
  117. // 返回结果中包含的不处理
  118. if (fieldSet.contains(field)) {
  119. continue
  120. }
  121. // 去掉不包含的属性
  122. fields.remove()
  123. }
  124. } else {
  125. // 返回全部时,去掉不需要属性
  126. val removeList: List<String> = CollUtil.newArrayList("creator", "valid", "createApp", "virtualCodes", "updateApp", "grouping", "modifier")
  127. for (removeField in removeList) {
  128. dmpData.remove(removeField)
  129. }
  130. }
  131. }
  132. }