ModelScanTaskService.kt 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873
  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 cn.hutool.core.collection.CollUtil
  28. import cn.sagacloud.server.scanbuilding.User
  29. import com.alibaba.fastjson.JSONObject
  30. import com.fasterxml.jackson.databind.node.JsonNodeFactory
  31. import com.google.gson.Gson
  32. import com.google.gson.reflect.TypeToken
  33. import com.persagy.base.extensions.toJson
  34. import com.persagy.database.SFilter
  35. import com.persagy.database.SPageQueryInfo
  36. import com.persagy.mybatis.SMybatisDao
  37. import com.persagy.server.Opts
  38. import com.persagy.server.datacenter.models.entities.assistant.TaskPic
  39. import com.persagy.server.datacenter.models.entities.objects.Equipment
  40. import com.persagy.server.datacenter.models.entities.task.*
  41. import com.persagy.server.datacenter.models.requests.ModelScanSQueryRequest
  42. import com.persagy.server.mappers.StatisticsCountMapper
  43. import com.persagy.server.scanbuilding.UserLog
  44. import com.persagy.server.services.AdmBaseService
  45. import com.persagy.server.services.DmpBaseService
  46. import com.persagy.server.services.StatisticsCountService
  47. import com.persagy.server.services.base.RService
  48. import com.persagy.server.util.AdmEntityTransferUtil
  49. import com.persagy.server.util.GeoToolsUtil
  50. import com.persagy.server.util.IdUtils
  51. import com.persagy.service.SBaseService
  52. import com.persagy.service.SObjectService
  53. import com.persagy.service.SPageContext
  54. import com.persagy.service.models.enums.SResponseType
  55. import com.persagy.service.models.requests.SCreateRequest
  56. import com.persagy.service.models.requests.SQueryRequest
  57. import com.persagy.service.models.responses.SQueryResponse
  58. import com.persagy.service.utils.SSpringContextUtil
  59. import org.slf4j.LoggerFactory
  60. import org.springframework.beans.factory.annotation.Autowired
  61. import org.springframework.web.bind.annotation.RequestBody
  62. import java.util.*
  63. import java.util.stream.Collectors
  64. import kotlin.collections.ArrayList
  65. /**
  66. * 模型任务
  67. *
  68. * @author 邓婷婷
  69. */
  70. object ModelScanTaskService : RService<ModelScanTask>(SMybatisDao(ModelScanTask::class.java)) {
  71. // 日志
  72. private val logger = LoggerFactory.getLogger(ModelScanTaskService::class.java)
  73. val modelScanTaskService = SBaseService(SMybatisDao(ModelScanTask::class.java))
  74. /** 设备类型 */
  75. // val equipCategoryService = SObjectService(SMybatisDao(EquipCategory::class.java))
  76. /** 扫楼日志 */
  77. var userLogService = SObjectService(SMybatisDao(UserLog::class.java))
  78. /** 用户 */
  79. var userService = SObjectService(SMybatisDao(User::class.java))
  80. @Autowired
  81. private val admBaseService: AdmBaseService? = AdmBaseService()
  82. @Autowired
  83. private val dmpBaseService: DmpBaseService? = DmpBaseService()
  84. @Autowired
  85. private val statisticsCountService: StatisticsCountService? = StatisticsCountService()
  86. /** 实例化 mapper 对象 */
  87. val mapper by lazy {
  88. SSpringContextUtil.getBean(StatisticsCountMapper::class.java) as StatisticsCountMapper
  89. }
  90. /**
  91. * 插入之前先过滤已经存在未验证任务的对象,返回新列表
  92. */
  93. fun createBefore(@RequestBody request: SCreateRequest<ModelScanTask>): SCreateRequest<ModelScanTask> {
  94. val modelList = request.content;
  95. var newList = arrayListOf<ModelScanTask>()
  96. for(model in modelList){
  97. // val modelTask = ModelScanTaskService.select("equipId" to model.equipId!!,"taskState" to 1).entity()
  98. val modelTask = ModelScanTaskService.select(SFilter.eq("equipId", model.equipId!!),SFilter.eq("taskState", 1)).entity()
  99. if(modelTask==null){//表示当前设备不存在未验证的任务
  100. newList.add(model)
  101. }
  102. }
  103. request.content = newList
  104. println(newList.size)
  105. return request
  106. } // Fun createBefore
  107. /**
  108. * 创建之前操作
  109. */
  110. override fun onCreateBefore(modelScanTask: ModelScanTask): Boolean {
  111. try {
  112. val gson = Gson()
  113. var flag = false
  114. if (modelScanTask.taskState == -1) {//前台传数据过来状态为-1 表示当前任务是未找到状态 重新生成任务,将之前的设备任务状态和部件任务改为已完成
  115. flag = true
  116. resetTaskStatus(modelScanTask)
  117. }
  118. val projectId = SPageContext.getHeader("projectId")
  119. if (modelScanTask.id.isNullOrEmpty()) {
  120. modelScanTask.id = UUID.randomUUID().toString()
  121. }
  122. if (!projectId.isNullOrEmpty()) {
  123. modelScanTask.projectId = projectId
  124. }
  125. modelScanTask.taskSource = 1//数据源为模型
  126. modelScanTask.taskState = 1//任务状态为待验证
  127. modelScanTask.taskType = "1"
  128. if (!modelScanTask.equipId.isNullOrEmpty()) {//当设备id不为空时,去设备表查询对应的详细信息
  129. //val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
  130. //val equipment = equipmentService.select("id" to modelScanTask.equipId!!).entity()
  131. // val equipment = equipmentService.select(SFilter.eq("id", modelScanTask.equipId!!)).entity()
  132. //2021.10.26调整为从中间件查询设备信息
  133. var equipRequest = SQueryRequest()
  134. equipRequest.filters = "id = '"+modelScanTask.equipId+"'"
  135. val equipmentList = admBaseService?.queryEquip(equipRequest)
  136. if(CollUtil.isEmpty(equipmentList)){
  137. return false
  138. logger.info("设备不存在 id "+modelScanTask.equipId)
  139. }
  140. val equipment = equipmentList?.get(0)
  141. if (modelScanTask.schemeId.isNullOrEmpty()){
  142. modelScanTask.schemeId = SchemeUtils.setScheme(equipment!!.classCode!!)
  143. }
  144. // equipment.ledgerParam.PhotoDoc.Pic
  145. if(equipment!!.infos != null){//设备图片信息
  146. val photoDoc = equipment!!.infos!!.get("photoDoc")
  147. if( photoDoc != null){
  148. val obj = JSONObject.parseObject(photoDoc!!.toJson())
  149. val pic = obj.getString("pic")
  150. val type = object : TypeToken<ArrayList<TaskPic>>() {
  151. }.type
  152. val siInSpList = gson.fromJson<ArrayList<TaskPic>>(pic, type)
  153. modelScanTask.taskPicList = siInSpList
  154. }
  155. val containsKey = equipment.infos!!.containsKey(Opts.INSTALLLOCATION)
  156. if (containsKey){
  157. modelScanTask.installLocation = equipment.infos!![Opts.INSTALLLOCATION].toString()
  158. }
  159. }
  160. try {
  161. if (!equipment.infos.isNullOrEmpty()){
  162. val containsKey = equipment.infos!!.containsKey(Opts.MANUFACTURER)
  163. if (containsKey){
  164. modelScanTask.manufacturer = equipment.infos!![Opts.MANUFACTURER].toString()
  165. }
  166. val containsKey2 = equipment.infos!!.containsKey(Opts.SPECIFICATION)
  167. if(containsKey2) {
  168. modelScanTask.specification = equipment.infos!![Opts.SPECIFICATION].toString()
  169. }
  170. val containsKeys = equipment.infos!!.containsKey(Opts.SUPPLIER)
  171. if (containsKeys){
  172. modelScanTask.supplier = equipment.infos!![Opts.SUPPLIER].toString()
  173. }
  174. }
  175. } catch (e: Exception) {
  176. e.printStackTrace()
  177. }
  178. if (flag) {
  179. modelScanTask.equipName = equipment!!.name
  180. modelScanTask.localId = equipment!!.localId
  181. modelScanTask.localName = equipment!!.localName
  182. modelScanTask.bimId = equipment!!.bimId
  183. modelScanTask.classCode = equipment!!.classCode
  184. modelScanTask.buildingId = equipment!!.buildingId
  185. modelScanTask.floorId = equipment!!.floorId
  186. modelScanTask.cadId = equipment!!.cadId
  187. modelScanTask.bimLocation = equipment.bimLocation
  188. if (equipment.codeType!=null){
  189. modelScanTask.taskType = equipment.codeType.toString()
  190. }else{
  191. modelScanTask.taskType = "1"
  192. }
  193. } else {
  194. if (modelScanTask.equipName.isNullOrEmpty()) {
  195. modelScanTask.equipName = equipment!!.name
  196. }
  197. if (modelScanTask.localId.isNullOrEmpty()) {
  198. modelScanTask.localId = equipment!!.localId
  199. }
  200. if (modelScanTask.localName.isNullOrEmpty()) {
  201. modelScanTask.localName = equipment!!.localName
  202. }
  203. if (modelScanTask.bimId.isNullOrEmpty()) {
  204. modelScanTask.bimId = equipment!!.bimId
  205. }
  206. if (modelScanTask.classCode.isNullOrEmpty()) {
  207. modelScanTask.classCode = equipment!!.classCode
  208. }
  209. if (modelScanTask.buildingId.isNullOrEmpty()) {
  210. modelScanTask.buildingId = equipment!!.buildingId
  211. }
  212. if (modelScanTask.floorId.isNullOrEmpty()) {
  213. modelScanTask.floorId = equipment!!.floorId
  214. }
  215. if (modelScanTask.cadId.isNullOrEmpty()) {
  216. modelScanTask.cadId = equipment!!.cadId
  217. }
  218. if (modelScanTask.bimLocation.isNullOrEmpty()){
  219. modelScanTask.bimLocation = equipment.bimLocation
  220. }
  221. if (modelScanTask.taskType.isNullOrEmpty()){
  222. if (equipment.codeType!=null){
  223. modelScanTask.taskType = equipment.codeType.toString()
  224. }else{
  225. modelScanTask.taskType = "1"
  226. }
  227. }
  228. }
  229. }
  230. } catch (e: Exception) {
  231. e.printStackTrace()
  232. }
  233. return true
  234. } // Function onCreateBefore()
  235. /**
  236. * 创建设备台账任务成功之后,设备级联部件,所有部件也增加任务
  237. */
  238. override fun onCreateSuccess(modelScanTaskList: ArrayList<ModelScanTask>) {
  239. val projectId = SPageContext.getHeader("projectId")
  240. for(task in modelScanTaskList){
  241. //val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
  242. // val componentList = equipmentService.select(SFilter.eq("parentId", task.equipId!!)).exec()
  243. val componentList = task.equipId?.let { EquipScanTaskService.queryComponyByEquipId(it) }
  244. if (componentList != null) {
  245. for(equipment in componentList){
  246. val modelScanTask = ModelScanTask()
  247. modelScanTask.id = IdUtils.uuidCreate()
  248. if(!task.projectId.isNullOrEmpty()){
  249. modelScanTask.projectId = task.projectId
  250. }else{
  251. modelScanTask.projectId = projectId
  252. }
  253. modelScanTask.taskSource = 4//数据源为模型任务
  254. modelScanTask.taskState = 1//任务状态为待验证
  255. modelScanTask.parentId = task.equipId
  256. modelScanTask.equipId = equipment!!.id
  257. modelScanTask.equipName = equipment!!.name
  258. modelScanTask.localId = equipment!!.localId
  259. modelScanTask.localName = equipment!!.localName
  260. modelScanTask.bimId = equipment!!.bimId
  261. modelScanTask.classCode = equipment!!.classCode
  262. modelScanTask.buildingId = equipment!!.buildingId
  263. modelScanTask.floorId = equipment!!.floorId
  264. modelScanTask.cadId = equipment!!.cadId
  265. modelScanTask.bimLocation = equipment.bimLocation
  266. modelScanTask.taskParentId = task.id
  267. if (equipment.codeType!=null){
  268. modelScanTask.taskType = equipment.codeType.toString()
  269. }else{
  270. modelScanTask.taskType = "1"
  271. }
  272. ModelScanTaskService.insert(modelScanTask)
  273. }
  274. }
  275. resetObjStatus(task)
  276. }
  277. } // Fun onCreateSuccess
  278. /**
  279. * 状态修改完成之后,若修改为 已完成状态 则级联部件任务状态全部修改为 已完成
  280. */
  281. override fun onUpdateSuccess(list: ArrayList<ModelScanTask>) {
  282. val projectId = SPageContext.getHeader("projectId")
  283. for (task in list) {
  284. // val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
  285. if(task.equipId == null ){
  286. val modelScanTaskScanTask = ModelScanTaskService.select(SFilter.eq("id", task.id!!)).entity()
  287. task.equipId = modelScanTaskScanTask!!.equipId
  288. }
  289. if (!task.confirmingPersonId.isNullOrEmpty()&&task.taskState == 0){
  290. task.taskState = -1
  291. //更改部件对象状态
  292. updateComponetObjStatus(task)
  293. //更改部件任务状态
  294. updateComponetTaskStatus(task)
  295. }else if(task.confirmingPersonId.isNullOrEmpty()&&task.taskState == 0) {
  296. task.taskState = 0
  297. //更改部件对象状态
  298. updateComponetObjStatus(task)
  299. //更改部件任务状态
  300. updateComponetTaskStatus(task)
  301. }
  302. //更改设备对象的状态
  303. val equipmentOld = admBaseService?.queryEquipById(task.equipId!!)?.get(0)
  304. if(equipmentOld!!.taskState != -1){//未找到
  305. val equip = Equipment()
  306. equip.id = task.equipId!!
  307. /* equip.taskState = task.taskState
  308. equipmentService.update(equip)*/
  309. val infos = HashMap<String, Any?>()
  310. infos.put("taskState",task.taskState!!)
  311. equip.infos = infos
  312. admBaseService?.updateEquip(arrayListOf(equip))
  313. }
  314. try {
  315. if (!Opts.coming.isNullOrEmpty()&&Opts.coming == "app"){
  316. val entity = userService.select(SFilter.eq("projectId", projectId!!), SFilter.eq("phone", Opts.account!!)).entity()
  317. val userLog = UserLog()
  318. userLog.comming = "app"
  319. userLog.action = "修改任务"
  320. userLog.id = IdUtils.uuidCreate()
  321. userLog.note = "确认模型设备任务"
  322. userLog.phone = entity?.phone
  323. userLog.projectId = projectId
  324. userLog.userId = entity!!.id
  325. userLog.name = entity.name
  326. userLog.objectId = task.equipId
  327. userLogService.insert(userLog)
  328. }
  329. } catch (e: Exception) {
  330. e.printStackTrace()
  331. }
  332. }
  333. } // Fun onUpdateSuccess
  334. /**
  335. * 更新设备对象状态时,对应更改部件对象状态,当为未找到状态时,特殊处理
  336. */
  337. fun updateComponetObjStatus(task: ModelScanTask){
  338. // val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
  339. // val componentList = equipmentService.select(SFilter.eq("parentId", task.equipId!!)).exec()
  340. val componentList = task.equipId?.let { EquipScanTaskService.queryComponyByEquipId(it) }
  341. if(task.taskState == 1 || task.taskState == -1){ // 待验证和未找到
  342. if (componentList != null) {
  343. for(component in componentList){
  344. component.taskState = task.taskState
  345. // equipmentService.update(component)
  346. val infos = HashMap<String, Any?>()
  347. infos.put("taskState",task.taskState!!)
  348. component.infos = infos
  349. admBaseService?.updateComponent(arrayListOf(component))
  350. }
  351. }
  352. }else if(task.taskState == 0){ // 已完成
  353. if (componentList != null) {
  354. for(component in componentList){
  355. if(component.taskState != -1){//如果部件状态为未找到,则不改变状态
  356. component.taskState = task.taskState
  357. //equipmentService.update(component)
  358. val infos = HashMap<String, Any?>()
  359. infos.put("taskState",task.taskState!!)
  360. component.infos = infos
  361. admBaseService?.updateComponent(arrayListOf(component))
  362. }
  363. }
  364. }
  365. }
  366. }
  367. /**
  368. * 更新设备任务状态时,对应更改部件任务状态
  369. */
  370. fun updateComponetTaskStatus(task: ModelScanTask){
  371. val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
  372. val modelScanTaskService = SBaseService(SMybatisDao(ModelScanTask::class.java))
  373. val componentTaskList = modelScanTaskService.select(SFilter.eq("parentId", task.equipId!!)).exec()
  374. for(childTask in componentTaskList){
  375. childTask.taskState = task.taskState
  376. ModelScanTaskService.update(childTask)
  377. }
  378. } // Fun updateStatus
  379. /**
  380. * 更新设备对象状态时,对应更改部件对象状态
  381. */
  382. fun resetComponetObjStatus(task: ModelScanTask){
  383. // val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
  384. // val componentList = equipmentService.select(SFilter.eq("parentId", task.equipId!!)).exec()
  385. val componentList = EquipScanTaskService.queryComponyByEquipId(task!!.equipId!!)
  386. if (componentList != null) {
  387. for(component in componentList){
  388. /*component.taskState = task.taskState
  389. equipmentService.update(component)*/
  390. val infos = HashMap<String, Any?>()
  391. infos.put("taskState",task.taskState!!)
  392. component.infos = infos
  393. //equipmentService.update(component)
  394. admBaseService?.updateComponent(arrayListOf(component))
  395. }
  396. }
  397. }
  398. /**
  399. * 重新生成任务时,将任务状态改为已完成
  400. */
  401. fun resetTaskStatus(task: ModelScanTask) {
  402. //val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
  403. val modelScanTaskService = SBaseService(SMybatisDao(ModelScanTask::class.java))
  404. val resetTask = modelScanTaskService.select(SFilter.eq("equipId", task.equipId!!), SFilter.eq("taskState", -1)).entity()
  405. if (resetTask != null) {
  406. resetTask.taskState = 0
  407. modelScanTaskService.update(resetTask)//更改设备任务状态
  408. updateComponetTaskStatus(resetTask)//更改部件任务状态
  409. }
  410. }
  411. /**
  412. * 重新生成任务时,将设备和部件状态改变为待验证
  413. */
  414. fun resetObjStatus(task: ModelScanTask){
  415. /*val equipmentService = SBaseService(SMybatisDao(Equipment::class.java))
  416. //更改设备对象状态
  417. val equip = Equipment()
  418. equip.id = task.equipId!!
  419. equip.taskState = task.taskState
  420. equipmentService.update(equip)
  421. //更改部件对象状态
  422. resetComponetObjStatus(task)*/
  423. val equip = Equipment()
  424. equip.id = task.equipId!!
  425. val infos = HashMap<String, Any?>()
  426. infos.put("taskState",task.taskState!!)
  427. equip.infos = infos
  428. admBaseService?.updateEquip(arrayListOf(equip))
  429. //更改部件对象状态
  430. resetComponetObjStatus(task)
  431. }
  432. /**
  433. * 查询所有模型文件夹和文件
  434. */
  435. fun modelFileQuery(): SQueryResponse<ModelFolder> {
  436. val pageQuery = SPageQueryInfo<ModelFolder>(1, 1000)
  437. val gson = Gson()
  438. return try {
  439. var request = SQueryRequest()
  440. request.filters = "ProjectId = '${SPageContext.getHeader("ProjectId")}'";
  441. request.distinct = true
  442. val response = pageQuery(request, null);
  443. //文件夹集合
  444. val folderMap = HashMap<String,String>()
  445. //集合封装:文件夹->模型文件
  446. /* val modelFiles = arrayListOf<ModelFile>()*/
  447. val folderFileMap = HashMap<String,ArrayList<ModelFile>>()
  448. for(folder in response.content!!){
  449. folder.folderName?.let { folder.folderName?.let { it1 -> folderMap.put(it, it1) } }
  450. //获取文件夹中的所有文件
  451. var modelFiles: ArrayList<ModelFile>? = folderFileMap.get(folder.folderName)
  452. if (CollUtil.isEmpty(modelFiles)) {
  453. modelFiles =ArrayList<ModelFile>()
  454. }
  455. val modelFile = ModelFile()
  456. modelFile.fileId = folder.fileId
  457. modelFile.fileName = folder.fileName
  458. val fileIds = modelFiles?.stream()?.map(ModelFile::fileId)?.collect(Collectors.toList<String>())
  459. if (fileIds != null) {
  460. if(fileIds.contains(folder.fileId)){
  461. continue
  462. }
  463. }
  464. if (modelFiles != null) {
  465. modelFiles.add(modelFile)
  466. }
  467. folder.folderName?.let { folderFileMap.put(it, modelFiles as ArrayList<ModelFile>) }
  468. }
  469. //结果集封装:文件夹->模型文件
  470. val modelFolders = arrayListOf<ModelFolder>()
  471. for ((folderId, folderName) in folderMap.entries) {
  472. val fileList = folderFileMap.get(folderId)
  473. val modelFolder = ModelFolder()
  474. // modelFolder.folderId = folderId
  475. modelFolder.folderName = folderName
  476. modelFolder.fileList = fileList
  477. modelFolder.fileListStr = null
  478. modelFolders.add(modelFolder)
  479. }
  480. //历史逻辑:
  481. /*val modelFolderService = SBaseService(SMybatisDao(ModelFolder::class.java))
  482. val modelFolderQueryBuilder = modelFolderService.select(request.filters)
  483. modelFolderQueryBuilder.tableName = "scantask.f_get_modelfile('$projectId')"
  484. pageQuery = modelFolderQueryBuilder.pageQuery(1, 1000)
  485. for(folder in pageQuery.content!!){
  486. if(folder.fileListStr != null){
  487. val listStr = folder.fileListStr!!.replace("/\\","")
  488. val newStr = "["+listStr.substring(1,listStr.length-1)+"]"
  489. val type = object : TypeToken<ArrayList<ModelFile>>() {
  490. }.type
  491. val siInSpList = gson.fromJson<ArrayList<ModelFile>>(newStr, type)
  492. folder.fileList = siInSpList
  493. folder.fileListStr = null
  494. }
  495. }*/
  496. pageQuery.content = modelFolders;
  497. SQueryResponse(pageQuery)
  498. } catch (e: Exception) {
  499. e.printStackTrace()
  500. SQueryResponse(SResponseType.failure, e.message!!)
  501. }
  502. } // Fun modelFileQuery
  503. /**
  504. * 根据元空间id查询设备
  505. */
  506. fun equipQuery(request: ModelScanSQueryRequest): SQueryResponse<EquipmentTaskTwo>{
  507. return try{
  508. val projectId = SPageContext.getHeader("projectId")
  509. val modelScanTaskService = SBaseService(SMybatisDao(EquipmentTaskTwo::class.java))
  510. if (!request.modelId.isNullOrEmpty()&&!request.idList.isNullOrEmpty()&&request.idList!!.size>0){
  511. val list = ArrayList<EquipmentTaskTwo>()
  512. for ( bimId in request.idList!!){
  513. if (request.category.isNullOrEmpty()){
  514. val equipInISpaceList = statisticsCountService?.equipInISpace(projectId!!, request.modelId!!, bimId)
  515. if (equipInISpaceList != null) {
  516. if (equipInISpaceList.size>0){
  517. logger.debug("数据22222 = ${equipInISpaceList.toJson()}")
  518. if (equipInISpaceList != null) {
  519. list.addAll(equipInISpaceList)
  520. }
  521. }
  522. }
  523. }else{
  524. val equipInISpaceList = statisticsCountService?.equipInISpaceTwo(projectId!!, request.modelId!!, bimId,request.category!!)
  525. if (equipInISpaceList != null) {
  526. if (equipInISpaceList.size>0){
  527. if (equipInISpaceList != null) {
  528. logger.debug("数据111 = ${equipInISpaceList.toJson()}")
  529. }
  530. list.addAll(equipInISpaceList)
  531. }
  532. }
  533. }
  534. }
  535. if (list.size>0){
  536. val pageNumber = request.pageNumber
  537. val pageSize = request.pageSize
  538. /** 开始条数 */
  539. var fromIndex = pageSize* (pageNumber-1)
  540. var toIndex = fromIndex + pageSize
  541. if (toIndex>=list.size){
  542. toIndex = list.size
  543. }
  544. val sQueryResponse = SQueryResponse<EquipmentTaskTwo>(SResponseType.success)
  545. sQueryResponse.total = list.size.toLong()
  546. val subList = list.subList(fromIndex, toIndex)
  547. if (subList.size>0){
  548. for (equip in subList){
  549. logger.debug("数据 = ${equip.toJson()}")
  550. try {
  551. /*val entity = equipCategoryService.select(SFilter.eq("code", equip.classCode!!)).entity()
  552. if (entity!=null){
  553. equip.equipCategory = entity
  554. }*/
  555. val equipCategoryList = dmpBaseService?.getEquipCategory(equip.classCode!!)
  556. if (equipCategoryList != null) {
  557. equip.equipCategory = equipCategoryList.get(0)
  558. }
  559. val exec = modelScanTaskService.select(SFilter.eq("parentId", equip.id!!)).exec()
  560. if (exec.size>0){
  561. equip.component = exec
  562. }
  563. //val entity1 = EquipmentService.select(SFilter.eq("id", equip.id!!)).entity()
  564. val entity1 = admBaseService?.queryEquipById(equip.id!!)?.get(0)
  565. equip.bimId = entity1!!.bimId
  566. equip.localId = entity1.localId
  567. equip.localName = entity1.localName
  568. } catch (e: Exception) {
  569. e.printStackTrace()
  570. }
  571. }
  572. }
  573. sQueryResponse.content = subList
  574. sQueryResponse.pageSize = pageSize
  575. sQueryResponse.pageNumber = pageNumber
  576. sQueryResponse
  577. }else{
  578. val sQueryResponse = SQueryResponse<EquipmentTaskTwo>(SResponseType.success)
  579. sQueryResponse.content = ArrayList<EquipmentTaskTwo>()
  580. sQueryResponse.pageNumber = request.pageNumber
  581. sQueryResponse.pageSize = request.pageSize
  582. sQueryResponse
  583. }
  584. }else{
  585. val sQueryResponse = SQueryResponse<EquipmentTaskTwo>(SResponseType.failure)
  586. sQueryResponse.message = "入参错误"
  587. sQueryResponse
  588. }
  589. // if (!request.idList.isNullOrEmpty()){
  590. // return EquipmentService.pageQuery(request, arrayListOf(SFilter.inList(SEndWithChar("bimId",":"),request.idList!!) ,
  591. // SFilter.eq("projectId",projectId!!)))
  592. // }else{
  593. // return EquipmentService.pageQuery(request, arrayListOf(
  594. // SFilter.eq("projectId",projectId!!)))
  595. // }
  596. // return EquipmentService.pageQuery(request, arrayListOf(SFilter.inList(SEndWithChar("bimId",":"),listId) ,
  597. // SFilter.eq("projectId",projectId!!)))
  598. } catch (e: Exception) {
  599. e.printStackTrace()
  600. SQueryResponse(SResponseType.failure, e.message!!)
  601. }
  602. }
  603. // private fun getDatas(list: ArrayList<Equipment>,firstIndex: Int, lastIndex: Int): List<Equipment> {
  604. // val resList = ArrayList<Equipment>()
  605. // for (i in firstIndex until lastIndex) {
  606. // if (i < list.size) {
  607. // resList.add(list[i])
  608. // }
  609. // }
  610. // return resList
  611. // }
  612. override fun onDeleteBefore(entity: ModelScanTask): Boolean {
  613. try {
  614. val entity2 = EquipScanTaskService.select(SFilter.eq("id", entity.id!!)).entity()
  615. if(entity2 == null){
  616. return false
  617. }
  618. //val entity1 = EquipmentService.select(SFilter.eq("id", entity2!!.equipId!!)).entity()
  619. val entity1 = admBaseService?.queryEquipById(entity2!!.equipId!!)?.get(0)
  620. if (entity1!=null){
  621. if (entity1.taskState == 1){
  622. /* entity1.taskState = null
  623. EquipmentService.update(entity1, arrayListOf("TaskState"))*/
  624. val infos = HashMap<String, Any?>()
  625. infos.put("taskState",null)
  626. entity1.infos = infos
  627. admBaseService?.updateEquip(arrayListOf(entity1))
  628. }
  629. }
  630. } catch (e: Exception) {
  631. e.printStackTrace()
  632. }
  633. return super.onDeleteBefore(entity)
  634. }
  635. /**
  636. * 统计设备下部件的类型以及数量
  637. */
  638. fun categoryCounts(equipScanTask: ModelScanTask): SQueryResponse<CategoryStatistics>{
  639. try {
  640. val projectId = SPageContext.getHeader("projectId")
  641. if (!equipScanTask.id.isNullOrEmpty()&&!equipScanTask.equipId.isNullOrEmpty()){
  642. val categoryStatistics = statisticsCountService?.categoryStatisticsModel(projectId!!,equipScanTask.id!!, equipScanTask.equipId!!)
  643. val sQueryResponse = SQueryResponse<CategoryStatistics>()
  644. sQueryResponse.total = categoryStatistics?.size?.toLong()
  645. sQueryResponse.content = categoryStatistics
  646. sQueryResponse.result = SResponseType.success
  647. return sQueryResponse
  648. }else{
  649. val sQueryResponse = SQueryResponse<CategoryStatistics>(SResponseType.failure)
  650. sQueryResponse.message = "入参错误"
  651. return sQueryResponse
  652. }
  653. } catch (e: Exception) {
  654. e.printStackTrace()
  655. return SQueryResponse(SResponseType.failure,e.message.toString())
  656. }
  657. } // Fun
  658. /**
  659. * 查询 当前模型文件下指定元空间内的设备
  660. */
  661. fun equipInISpace(projectId: String,modelId: String,bimId: String): ArrayList<EquipmentTaskTwo>? {
  662. //@Select("SELECT id,name,local_id as localId ,local_name as localName ,cad_id as cadId ,bim_id as bimId ,class_code as classCode FROM equipment e WHERE project_id = #{projectId} AND bim_location IS NOT null AND model_id = #{modelId} AND is_point_in_polygon_v2_str(split_part(e.bim_location, E',', 1) , split_part(e.bim_location, E',', 2) , (SELECT outline FROM zone_ispace WHERE project_id= #{projectId} AND bim_id = #{bimId})) AND (e.task_state IS null OR e.task_state = 0 OR task_state = -1) ORDER BY create_time , e.id")
  663. //查询设备信息
  664. var equipRequest = SQueryRequest()
  665. val filters = StringBuilder()
  666. filters.append("modelId = '$modelId' ")
  667. equipRequest.filters = filters.toString();
  668. equipRequest.orders = "createTime desc , id desc"
  669. val equipmentList = admBaseService?.queryEquip(equipRequest)
  670. if(CollUtil.isEmpty(equipmentList)){
  671. logger.info("查询模型文件中的设备信息为空")
  672. return ArrayList<EquipmentTaskTwo>()
  673. }
  674. //查询元空间信息
  675. var ispaceRequest = SQueryRequest()
  676. ispaceRequest.filters = "bimId = '$bimId' "
  677. val ispaceList = admBaseService?.queryIspace(ispaceRequest)
  678. if(CollUtil.isEmpty(ispaceList)){
  679. logger.info("元空间不存在,bimId:"+ bimId)
  680. return ArrayList<EquipmentTaskTwo>()
  681. }
  682. val outline = ispaceList?.get(0)?.outline
  683. if(CollUtil.isEmpty(outline)){
  684. logger.info("元空间轮廓线为空,元空间id:" + ispaceList?.get(0)?.id)
  685. return ArrayList<EquipmentTaskTwo>()
  686. }
  687. //判断设备是否在元空间内
  688. val result = ArrayList<Equipment>()
  689. if (equipmentList != null) {
  690. for(equip in equipmentList){
  691. val bimLocation = equip.bimLocation
  692. if(bimLocation.isNullOrEmpty()){
  693. continue
  694. }
  695. val taskState = equip.taskState
  696. if(taskState != null && (taskState != 0 || taskState != -1)){
  697. continue
  698. }
  699. val bimLocalJson = equip.locationJson
  700. val node = JsonNodeFactory.instance.objectNode()
  701. if (bimLocalJson != null) {
  702. node.put("x", bimLocalJson.x)
  703. }
  704. if (bimLocalJson != null) {
  705. node.put("y", bimLocalJson.y)
  706. }
  707. if (bimLocalJson != null) {
  708. node.put("z", bimLocalJson.z)
  709. }
  710. val flag = GeoToolsUtil.isPointInPoly(node, outline)
  711. if(flag){
  712. result.add(equip)
  713. }
  714. }
  715. }
  716. if(CollUtil.isEmpty(result)){
  717. return ArrayList<EquipmentTaskTwo>()
  718. }
  719. return AdmEntityTransferUtil.toAdmMultiEntity(result,null,EquipmentTaskTwo::class.java) as ArrayList<EquipmentTaskTwo>
  720. }
  721. /**
  722. * 查询 当前模型文件下指定元空间内的设备
  723. */
  724. fun equipInISpaceTwo(projectId: String, modelId: String, bimId: String, category: String): ArrayList<EquipmentTaskTwo>{
  725. //@Select("SELECT id,name,local_id as localId ,local_name as localName ,cad_id as cadId ,bim_id as bimId ,class_code as classCode FROM equipment e WHERE project_id = #{projectId} AND bim_location IS NOT null AND model_id = #{modelId} AND is_point_in_polygon_v2_str(split_part(e.bim_location, E',', 1) , split_part(e.bim_location, E',', 2) , (SELECT outline FROM zone_ispace WHERE project_id= #{projectId} AND bim_id = #{bimId})) AND (e.task_state IS null OR e.task_state = 0 OR task_state = -1) ORDER BY create_time , e.id")
  726. //查询设备信息
  727. var equipRequest = SQueryRequest()
  728. val filters = StringBuilder()
  729. filters.append("classCode = '$category' and ")
  730. filters.append("modelId = '$modelId' ")
  731. equipRequest.filters = filters.toString();
  732. equipRequest.orders = "createTime desc , id desc"
  733. val equipmentList = admBaseService?.queryEquip(equipRequest)
  734. if(CollUtil.isEmpty(equipmentList)){
  735. logger.info("查询模型文件中的设备信息为空")
  736. return ArrayList<EquipmentTaskTwo>()
  737. }
  738. //查询元空间信息
  739. var ispaceRequest = SQueryRequest()
  740. ispaceRequest.filters = "bimId = '$bimId' "
  741. val ispaceList = admBaseService?.queryIspace(ispaceRequest)
  742. if(CollUtil.isEmpty(ispaceList)){
  743. logger.info("元空间不存在,bimId:"+ bimId)
  744. return ArrayList<EquipmentTaskTwo>()
  745. }
  746. val outline = ispaceList?.get(0)?.outline
  747. if(CollUtil.isEmpty(outline)){
  748. logger.info("元空间轮廓线为空,元空间id:" + ispaceList?.get(0)?.id)
  749. return ArrayList<EquipmentTaskTwo>()
  750. }
  751. //判断设备是否在元空间内
  752. val result = ArrayList<Equipment>()
  753. if (equipmentList != null) {
  754. for(equip in equipmentList){
  755. val bimLocation = equip.bimLocation
  756. if(bimLocation.isNullOrEmpty()){
  757. continue
  758. }
  759. val taskState = equip.taskState
  760. if(taskState != null && (taskState != 0 || taskState != -1)){
  761. continue
  762. }
  763. val bimLocalJson = equip.locationJson
  764. val node = JsonNodeFactory.instance.objectNode()
  765. if (bimLocalJson != null) {
  766. node.put("x", bimLocalJson.x)
  767. }
  768. if (bimLocalJson != null) {
  769. node.put("y", bimLocalJson.y)
  770. }
  771. if (bimLocalJson != null) {
  772. node.put("z", bimLocalJson.z)
  773. }
  774. val flag = GeoToolsUtil.isPointInPoly(node, outline)
  775. if(flag){
  776. result.add(equip)
  777. }
  778. }
  779. }
  780. if(CollUtil.isEmpty(result)){
  781. return ArrayList<EquipmentTaskTwo>()
  782. }
  783. return AdmEntityTransferUtil.toAdmMultiEntity(result,null,EquipmentTaskTwo::class.java) as ArrayList<EquipmentTaskTwo>
  784. }
  785. } // Class ModelScanTaskService