ScanTaskBaseService.kt 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. /*
  2. * *********************************************************************************************************************
  3. *
  4. * !!
  5. * .F88X
  6. * X8888Y
  7. * .}888888N;
  8. * i888888N; .:! .I$WI:
  9. * R888888I .'N88~ i8}+8Y&8"l8i$8>8W~'>W8}8]KW+8IIN"8&
  10. * .R888888I .;N8888~ .X8' "8I.!,/8" !%NY8`"8I8~~8>,88I
  11. * +888888N; .8888888Y "&&8Y.}8,
  12. * ./888888N; .R888888Y .'}~ .>}'.`+> i}! "i' +/' .'i~ !11,.:">, .~]! .i}i
  13. * ~888888%: .I888888l .]88~`1/iY88Ii+1'.R$8$8]"888888888> Y8$ W8E X8E W8888'188Il}Y88$*
  14. * 18888888 E8888881 .]W%8$`R8X'&8%++N8i,8N%N8+l8%` .}8N:.R$RE%N88N%N$K$R 188,FE$8%~Y88I
  15. * .E888888I .i8888888' .:$8I;88+`E8R:/8N,.>881.`$8E/1/]N8X.Y8N`"KF&&FK!'88*."88K./$88%RN888+~
  16. * 8888888I .,N888888~ ~88i"8W,!N8*.I88.}888%F,i$88"F88" 888:E8X.>88!i88>`888*.}Fl1]*}1YKi'
  17. * i888888N' I888Y ]88;/EX*IFKFK88X K8R .l8W 88Y ~88}'88E&%8W.X8N``]88!.$8K .:W8I
  18. * .i888888N; I8Y .&8$ .X88! i881.:%888>I88 ;88] +88+.';;;;:.Y88X 18N.,88l .+88/
  19. * .:R888888I
  20. * .&888888I Copyright (c) 2009-2020. 博锐尚格科技股份有限公司
  21. * ~8888'
  22. * .!88~ All rights reserved.
  23. *
  24. * *********************************************************************************************************************
  25. */
  26. package com.persagy.server.services.task
  27. import com.alibaba.fastjson.JSONObject
  28. import com.persagy.database.SFilter
  29. import com.persagy.database.SPageQueryInfo
  30. import com.persagy.mybatis.SMybatisDao
  31. import com.persagy.server.datacenter.models.entities.objects.Building
  32. import com.persagy.server.datacenter.models.entities.task.*
  33. import com.persagy.server.datacenter.models.entities.task.base.ScanTaskBase
  34. import com.persagy.server.mappers.StatisticsCountMapper
  35. import com.persagy.server.services.AdmBaseService
  36. import com.persagy.server.services.DmpBaseService
  37. import com.persagy.server.services.StatisticsCountService
  38. import com.persagy.server.services.base.RService
  39. import com.persagy.server.util.AdmEntityTransferUtil
  40. import com.persagy.service.SPageContext
  41. import com.persagy.service.models.SCascadeQuery
  42. import com.persagy.service.models.enums.SResponseType
  43. import com.persagy.service.models.requests.SQueryRequest
  44. import com.persagy.service.models.responses.SQueryResponse
  45. import com.persagy.service.utils.SSpringContextUtil
  46. import org.springframework.beans.factory.annotation.Autowired
  47. /**
  48. * 任务父表
  49. *
  50. * @author 邓婷婷
  51. */
  52. object ScanTaskBaseService : RService<ScanTaskBase>(SMybatisDao(ScanTaskBase::class.java)) {
  53. /** 实例化 mapper 对象 */
  54. val mapper by lazy {
  55. SSpringContextUtil.getBean(StatisticsCountMapper::class.java) as StatisticsCountMapper
  56. }
  57. @Autowired
  58. private val dmpBaseService: DmpBaseService? = DmpBaseService()
  59. @Autowired
  60. private val admBaseService: AdmBaseService? = AdmBaseService()
  61. @Autowired
  62. private val statisticsCountService: StatisticsCountService? = StatisticsCountService()
  63. /**
  64. * 查询所有设备类型或设备族
  65. */
  66. fun equipCategoryQuery(type: String): SQueryResponse<EquipCategoryDic> {
  67. val sQueryResponse = SQueryResponse<EquipCategoryDic>(SResponseType.success)
  68. var request = SQueryRequest()
  69. request.filters = "ProjectId = '${SPageContext.getHeader("ProjectId")}'";
  70. request.projection = arrayListOf("classCode")
  71. request.distinct = true
  72. val tasks = ArrayList<ScanTaskBase>()
  73. //查询设备,资产,模型文件现有的数据
  74. if(type == "equip") {
  75. // 如果是equip
  76. val response = EquipScanTaskService.pageQuery(request, null)
  77. tasks.addAll(response.content!!)
  78. } else if(type == "property") {
  79. // 如果是property
  80. val response = PropertyScanTaskService.pageQuery(request, null)
  81. tasks.addAll(response.content!!)
  82. } else if(type == "model") {
  83. // 如果是model
  84. val response = ModelScanTaskService.pageQuery(request, null)
  85. tasks.addAll(response.content!!)
  86. }
  87. //查询中台类型数据
  88. val param = JSONObject()
  89. val criteria = JSONObject()
  90. if ("equip" == type) {
  91. val objTypes = JSONObject()
  92. val objTypeList: MutableList<String> = java.util.ArrayList()
  93. objTypeList.add("equipment")
  94. objTypeList.add("component")
  95. objTypes["\$in"] = objTypeList
  96. }else{
  97. criteria["objType"] = type
  98. }
  99. param["criteria"] = criteria
  100. val queryDictType = dmpBaseService!!.queryDictType(param)
  101. if(queryDictType == null || queryDictType.size<=0){
  102. return sQueryResponse
  103. }
  104. val queryDictMap = HashMap<String, String>()
  105. for (dict in queryDictType){
  106. dict.code?.let { dict.name?.let { it1 -> queryDictMap.put(it, it1) } }
  107. }
  108. //结果集封装
  109. val equipCategoryList = ArrayList<EquipCategoryDic>()
  110. for(task in tasks!!){
  111. val equipCategoryDic = EquipCategoryDic()
  112. equipCategoryDic.code = task.classCode
  113. if(queryDictMap.get(task.classCode) == null){
  114. continue
  115. }
  116. equipCategoryDic.name = queryDictMap.get(task.classCode)
  117. equipCategoryList.add(equipCategoryDic)
  118. }
  119. //历史逻辑:
  120. /*val pageQuery: SPageQueryInfo<EquipCategoryDic>
  121. return try {
  122. val equipCategoryDicService = SBaseService(SMybatisDao(EquipCategoryDic::class.java))
  123. var request = SQueryRequest()
  124. val queryBuilder = equipCategoryDicService.select(request.filters)
  125. val projectId = SPageContext.getHeader("projectId").toString()
  126. queryBuilder.tableName = "scantask.f_get_category('$type','$projectId')"
  127. pageQuery = queryBuilder.pageQuery(1, 1000)
  128. SQueryResponse(pageQuery)
  129. } catch (e: Exception) {
  130. e.printStackTrace()
  131. SQueryResponse(SResponseType.failure, e.message!!)
  132. }*/
  133. sQueryResponse.content = equipCategoryList
  134. return sQueryResponse
  135. }
  136. /**
  137. * 查询所有建筑和楼层
  138. */
  139. fun buildingQuery(type: String): SQueryResponse<BuildingDic> {
  140. val pageQuery = SPageQueryInfo<BuildingDic>(1, 1000)
  141. return try {
  142. val projectId = SPageContext.getHeader("projectId").toString()
  143. var request = SQueryRequest()
  144. request.filters = "not buildingId isnull ; not floorId isnull";
  145. request.projection = arrayListOf("buildingId", "floorId")
  146. request.distinct = true
  147. val tasks = ArrayList<ScanTaskBase>()
  148. if(type == "equip") {
  149. // 如果是equip
  150. val response = EquipScanTaskService.pageQuery(request, null)
  151. tasks.addAll(response.content!!)
  152. } else if(type == "property") {
  153. // 如果是property
  154. val response = PropertyScanTaskService.pageQuery(request, null)
  155. tasks.addAll(response.content!!)
  156. } else if(type == "model") {
  157. // 如果是model
  158. val response = ModelScanTaskService.pageQuery(request, null)
  159. tasks.addAll(response.content!!)
  160. }
  161. val resultList = ArrayList<BuildingDic>()
  162. pageQuery.content = resultList
  163. if(tasks!!.isNotEmpty()) {
  164. // 转换为<buildId, List<floorId>>
  165. val builds = tasks.map { it.buildingId }
  166. val floors = tasks.map { it.floorId }
  167. var buildingRequest = SQueryRequest()
  168. // buildingRequest.filters = "id in (" +builds!!.joinToString(",", ",", "'").substring(1) + ")"
  169. buildingRequest.filters = "id in "+"(\'" + java.lang.String.join("\',\'", builds) + "\')"
  170. buildingRequest.pageSize = 1000
  171. buildingRequest.pageNumber = 1
  172. var cascade = SCascadeQuery()
  173. cascade.name = "floor"
  174. //cascade.filters = "id in (" +floors!!.joinToString(",", ",", "'").substring(1) + ")"
  175. cascade.filters = "id in "+"(\'" + java.lang.String.join("\',\'", floors) + "\')"
  176. buildingRequest.cascade = arrayListOf(cascade)
  177. //调用adm-middleware建筑查询接口
  178. val buildingList = admBaseService?.queryBuilding(buildingRequest) as ArrayList<Building>?
  179. //转换为BuildingDic
  180. val buildingDicList = AdmEntityTransferUtil.toAdmMultiEntity(buildingList, null, BuildingDic::class.java)
  181. pageQuery.content = buildingDicList as ArrayList<BuildingDic>?
  182. }
  183. // val queryBuilder = service.select(request.filters)
  184. // queryBuilder.tableName = "scantask.f_get_building_dic('$type','$projectId')"
  185. // pageQuery = queryBuilder.pageQuery(1, 1000)
  186. if (pageQuery.content!!.size>0){
  187. // for(floor in resultList!!){
  188. // if(floor.floorListStr != null){
  189. // val listStr = floor.floorListStr!!.replace("/\\","")
  190. // val newStr = "["+listStr.substring(1,listStr.length-1)+"]"
  191. // val type = object : TypeToken<ArrayList<FloorDic>>() {
  192. // }.type
  193. // val siInSpList = gson.fromJson<ArrayList<FloorDic>>(newStr, type)
  194. // floor.floor = siInSpList
  195. // floor.floorListStr = null
  196. // }
  197. // }
  198. if (type == "equip"||type == "property"){
  199. var taskSource: String
  200. if (type == "equip"){
  201. taskSource = "2"
  202. }else {
  203. taskSource = "3"
  204. }
  205. /** 处理楼层是否有未明确楼层 */
  206. for(building in pageQuery.content!!){
  207. if (building.floor!=null&&building.floor!!.size>0){
  208. val equipScanTaskList = select(
  209. SFilter.eq("projectId", projectId), SFilter.eq("buildingId", building.id!!),
  210. SFilter.isNull("floorId"),SFilter.eq("taskSource", taskSource)).exec()
  211. if (equipScanTaskList.size>0){
  212. val floorDic = FloorDic()
  213. floorDic.localName = "未明确楼层"
  214. building.floor!!.add(0,floorDic)
  215. }
  216. }else{
  217. val equipScanTaskList = select(SFilter.eq("projectId", projectId), SFilter.eq("buildingId", building.id!!),
  218. SFilter.isNull("floorId"),SFilter.eq("taskSource", taskSource)).exec()
  219. if (equipScanTaskList.size>0){
  220. val list = ArrayList<FloorDic>()
  221. val floorDic = FloorDic()
  222. floorDic.localName = "未明确楼层"
  223. list.add(floorDic)
  224. building.floor= list
  225. }
  226. }
  227. }
  228. /** 未明确建筑 */
  229. val equipScanTaskList = select(SFilter.eq("projectId", projectId), SFilter.isNull("buildingId"),SFilter.eq("taskSource", taskSource)).exec()
  230. if (equipScanTaskList.size>0){
  231. val buildingDic = BuildingDic()
  232. buildingDic.localName = "未明确建筑"
  233. pageQuery.content!!.add(0,buildingDic)
  234. }
  235. }
  236. }else{
  237. if (type == "equip"||type == "property") {
  238. var taskSource: String
  239. if (type == "equip") {
  240. taskSource = "2"
  241. } else {
  242. taskSource = "3"
  243. }
  244. val equipScanTaskList = select(SFilter.eq("projectId", projectId), SFilter.isNull("buildingId")
  245. ,SFilter.eq("taskSource", taskSource)).exec()
  246. if (equipScanTaskList.size > 0) {
  247. val list = ArrayList<BuildingDic>()
  248. val buildingDic = BuildingDic()
  249. buildingDic.localName = "未明确建筑"
  250. list.add(buildingDic)
  251. pageQuery.content = list
  252. }
  253. }
  254. }
  255. SQueryResponse(pageQuery)
  256. } catch (e: Exception) {
  257. e.printStackTrace()
  258. SQueryResponse(SResponseType.failure, e.message!!)
  259. }
  260. } // Fun modelFileQuery
  261. /**
  262. * 统计设备下部件的类型以及数量
  263. */
  264. fun categoryCounts(equipScanTask: EquipScanTask): SQueryResponse<CategoryStatistics>{
  265. try {
  266. val projectId = SPageContext.getHeader("projectId").toString()
  267. if (!equipScanTask.id.isNullOrEmpty()&&!equipScanTask.equipId.isNullOrEmpty()){
  268. val categoryStatistics = statisticsCountService?.categoryStatistics(projectId,equipScanTask.id!!, equipScanTask.equipId!!)
  269. val sQueryResponse = SQueryResponse<CategoryStatistics>()
  270. sQueryResponse.total = categoryStatistics?.size?.toLong()
  271. sQueryResponse.content = categoryStatistics
  272. sQueryResponse.result = SResponseType.success
  273. return sQueryResponse
  274. }else{
  275. val sQueryResponse = SQueryResponse<CategoryStatistics>(SResponseType.failure)
  276. sQueryResponse.message = "入参错误"
  277. return sQueryResponse
  278. }
  279. } catch (e: Exception) {
  280. e.printStackTrace()
  281. return SQueryResponse(SResponseType.failure,e.message.toString())
  282. }
  283. } // Fun
  284. /**
  285. * 统计设备下部件的类型以及数量
  286. */
  287. fun categoryCountsModel(type: String?,equipScanTask: ModelScanTask): SQueryResponse<CategoryStatistics>{
  288. try {
  289. val projectId = SPageContext.getHeader("projectId")
  290. if (!equipScanTask.id.isNullOrEmpty()&&!equipScanTask.equipId.isNullOrEmpty()){
  291. if (!type.isNullOrEmpty()&&type == "model"){
  292. val categoryStatistics = statisticsCountService?.categoryStatisticsModel(projectId!!,equipScanTask.id!!, equipScanTask.equipId!!)
  293. val sQueryResponse = SQueryResponse<CategoryStatistics>()
  294. sQueryResponse.total = categoryStatistics?.size?.toLong()
  295. sQueryResponse.content = categoryStatistics
  296. sQueryResponse.result = SResponseType.success
  297. return sQueryResponse
  298. }else{
  299. val categoryStatistics = statisticsCountService?.categoryStatistics(projectId!!,equipScanTask.id!!, equipScanTask.equipId!!)
  300. val sQueryResponse = SQueryResponse<CategoryStatistics>()
  301. sQueryResponse.total = categoryStatistics?.size?.toLong()
  302. sQueryResponse.content = categoryStatistics
  303. sQueryResponse.result = SResponseType.success
  304. return sQueryResponse
  305. }
  306. }else{
  307. val sQueryResponse = SQueryResponse<CategoryStatistics>(SResponseType.failure)
  308. sQueryResponse.message = "入参错误"
  309. return sQueryResponse
  310. }
  311. } catch (e: Exception) {
  312. e.printStackTrace()
  313. return SQueryResponse(SResponseType.failure,e.message.toString())
  314. }
  315. } // Fun
  316. } // Fun