AdmDictServiceImpl.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  1. package com.persagy.proxy.adm.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.fasterxml.jackson.databind.node.ArrayNode;
  5. import com.fasterxml.jackson.databind.node.JsonNodeFactory;
  6. import com.fasterxml.jackson.databind.node.ObjectNode;
  7. import com.persagy.dmp.basic.model.QueryCriteria;
  8. import com.persagy.dmp.define.entity.ObjectInfoCollect;
  9. import com.persagy.proxy.adm.constant.AdmDictConstant;
  10. import com.persagy.proxy.adm.constant.enums.AdmDictCategoryEnum;
  11. import com.persagy.proxy.adm.model.*;
  12. import com.persagy.proxy.adm.request.AdmCreateRequest;
  13. import com.persagy.proxy.adm.request.AdmQueryCriteria;
  14. import com.persagy.proxy.adm.request.AdmResponse;
  15. import com.persagy.proxy.adm.service.IAdmDictService;
  16. import com.persagy.proxy.common.entity.InstanceUrlParam;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.apache.commons.lang.StringUtils;
  19. import org.springframework.stereotype.Service;
  20. import java.util.ArrayList;
  21. import java.util.Iterator;
  22. import java.util.List;
  23. import java.util.Map;
  24. import java.util.stream.Collectors;
  25. /**
  26. * @ClassName AdmDictServiceImpl
  27. * @Description: 字典查询
  28. * @Author linhuili
  29. * @Date 2021/8/31 18:21
  30. * @Version V1.0
  31. **/
  32. @Slf4j
  33. @Service
  34. public class AdmDictServiceImpl<T> extends AbstractAdmDictBaseServiceImpl<T> implements IAdmDictService<T> {
  35. /**
  36. * 字典类型查询:所有设备类型、部件类型、系统类型、专业类型
  37. * 查询类型:输入设备类型:equipment,输入部件类型:component,输入系统类型:system,输入专业类型:major,业务空间类型 space ,资产 property,
  38. * 专业和系统:majorSystem(树),设备和部件equipmentAndComponent,设备类型要以及对应的部件equipmentComponent(树),
  39. * 专业下的设备类型 majorEquipment (树),专业下的系统,系统下的设备majorSystemEquip (树),systemEquip 系统下的设备类(树)
  40. * @param request
  41. * @return
  42. * @throws Exception
  43. */
  44. @Override
  45. public AdmResponse queryCategory(InstanceUrlParam context , AdmDict request, Class<T> clazz) {
  46. String type = request.getType();
  47. QueryCriteria criteria = new QueryCriteria();
  48. ObjectNode node = JsonNodeFactory.instance.objectNode();
  49. if(AdmDictCategoryEnum.MAJOR.getValue().equals(type)){
  50. //查询专业分类
  51. node.put("type",AdmDictCategoryEnum.MAJOR.getValue());
  52. criteria.setCriteria(node);
  53. return doQueryDictData(context, criteria, clazz);
  54. }
  55. List<String> baseCategory = getDictBaseCategory();
  56. if(baseCategory.contains(type)){
  57. //查询设备类型:equipment,部件类型:component,输入系统类型:system,输入专业类型:major,业务空间类型 space ,资产 property
  58. node.put("objType",type);
  59. criteria.setCriteria(node);
  60. return doQueryObjectType(context, criteria, clazz);
  61. }
  62. if(AdmDictCategoryEnum.EQUIPMENT_AND_COMPONENT.getValue().equals(type)){
  63. //查询设备类型:equipment,部件类型:component,输入系统类型:system,输入专业类型:major,业务空间类型 space ,资产 property
  64. ArrayNode arrayNode = node.putObject("objType").putArray("$in");
  65. arrayNode.add(AdmDictCategoryEnum.COMPONENT.getValue());
  66. arrayNode.add(AdmDictCategoryEnum.EQUIPMENT.getValue());
  67. criteria.setCriteria(node);
  68. return doQueryObjectType(context, criteria, clazz);
  69. }
  70. List<String> dictTreeCategory = getDictTreeCategory();
  71. if(dictTreeCategory.contains(type)){
  72. //查询树形结构:专业和系统:majorSystem(树),设备类型要以及对应的部件equipmentComponent(树),专业下的设备类型 majorEquipment(树),
  73. //专业下的系统,系统下的设备majorSystemEquip (树),systemEquip 系统下的设备类(树)
  74. return queryDictObjectTypeTree(context ,type,clazz);
  75. }
  76. return null;
  77. }
  78. /**
  79. * 查询字典树
  80. * @param context
  81. * @param type
  82. * @param clazz
  83. */
  84. private AdmResponse queryDictObjectTypeTree(InstanceUrlParam context ,String type, Class<T> clazz){
  85. //查询所有的专业
  86. List<AdmObjectType> allMajor = getAllMajor(context, clazz);
  87. //查询所有的类型
  88. AdmResponse admResponse = doQueryObjectType(context, new QueryCriteria(), clazz);
  89. List<AdmObjectType> objectTypes = (List<AdmObjectType>) admResponse.getContent();
  90. Map<String, List<AdmObjectType>> objectTypeMap = objectTypes.stream().filter(k-> StringUtils.isNotEmpty(k.getObjType()))
  91. .collect(Collectors.groupingBy(AdmObjectType::getObjType));
  92. //获取专业-设备类关系
  93. List<AdmObjectType> equipments = objectTypeMap.get(AdmDictCategoryEnum.EQUIPMENT.getValue());
  94. Map<String,List<AdmObjectType>> majorEquipMap = equipments.stream().filter(k->StringUtils.isNotEmpty(k.getMajorCode()))
  95. .collect(Collectors.groupingBy(item -> item.getMajorCode()));
  96. //获取专业-系统类关系
  97. List<AdmObjectType> systems = objectTypeMap.get(AdmDictCategoryEnum.SYSTEM.getValue());
  98. Map<String, List<AdmObjectType>> majorSystemMap = systems.stream().filter(k->StringUtils.isNotEmpty(k.getMajorCode())).collect(Collectors.groupingBy(item -> item.getMajorCode()));
  99. //获取系统-设备类关系
  100. Map<String, List<AdmObjectType>> systemEquipMap = equipments.stream().filter(k->StringUtils.isNotEmpty(k.getSystemCode())).collect(Collectors.groupingBy(item -> item.getSystemCode()));
  101. //获取设备类-部件关系
  102. List<AdmObjectType> components = objectTypeMap.get(AdmDictCategoryEnum.COMPONENT.getValue());
  103. Map<String, List<AdmObjectType>> equipComponentMap = components.stream().filter(k->StringUtils.isNotEmpty(k.getEquipmentCode())).collect(Collectors.groupingBy(item -> item.getEquipmentCode()));
  104. List<AdmObjectType> content = new ArrayList<>();
  105. if(AdmDictCategoryEnum.MAJOR_SYSTEM.getValue().equals(type)){
  106. //查询专业下的系统
  107. content = buildDictTree(allMajor,majorSystemMap,null);
  108. }
  109. if(AdmDictCategoryEnum.SYSTEM_EQUIP.getValue().equals(type)){
  110. //查询系统下的设备类
  111. content = buildDictTree(systems,systemEquipMap,null);
  112. }
  113. if(AdmDictCategoryEnum.MAJOR_SYSTEM_EQUIP.getValue().equals(type)){
  114. //专业下的系统,系统下的设备
  115. content = buildDictTree(allMajor,majorSystemMap,systemEquipMap);
  116. }
  117. if(AdmDictCategoryEnum.MAJOR_EQUIPMENT.getValue().equals(type)){
  118. //查询专业下的设备类
  119. content = buildDictTree(allMajor,majorEquipMap,null);
  120. }
  121. if(AdmDictCategoryEnum.EQUIPMENT_COMPONENT.getValue().equals(type)){
  122. //查询设备类下的部件
  123. content = buildDictTree(equipments,equipComponentMap,null);
  124. }
  125. // 设置返回值
  126. AdmResponse response = AdmResponse.success(content);
  127. response.setTotal(Long.valueOf(content.size()));
  128. return response;
  129. }
  130. /**
  131. * 构建专业-系统-设备类树形结构
  132. * @param allMajor
  133. * @param majorSystemMap
  134. * @param systemEquipMap
  135. * @return
  136. */
  137. private ArrayList<AdmObjectType> buildDictTree(List<AdmObjectType> allMajor,Map<String, List<AdmObjectType>> majorSystemMap,Map<String, List<AdmObjectType>> systemEquipMap){
  138. ArrayList<AdmObjectType> result = new ArrayList<>();
  139. if(CollUtil.isEmpty(allMajor)){
  140. return result;
  141. }
  142. //构建专业-系统-设备类树形结构
  143. for (AdmObjectType major : allMajor) {
  144. //设置专业
  145. if(CollUtil.isNotEmpty(majorSystemMap)){
  146. //专业下的系统
  147. List<AdmObjectType> systemCodes = majorSystemMap.get(major.getCode());
  148. major.setChildren(systemCodes);
  149. //系统下的设备类
  150. if(CollUtil.isNotEmpty(systemEquipMap) && CollUtil.isNotEmpty(systemCodes)){
  151. for (AdmObjectType systemType : systemCodes) {
  152. systemType.setChildren(systemEquipMap.get(systemType.getCode()));
  153. }
  154. }
  155. }
  156. result.add(major);
  157. }
  158. return result;
  159. }
  160. /**
  161. * 获取所有的专业
  162. * @param context
  163. * @param clazz
  164. * @return
  165. */
  166. private List<AdmObjectType> getAllMajor(InstanceUrlParam context, Class<T> clazz){
  167. //查询专业分类
  168. QueryCriteria criteria = new QueryCriteria();
  169. ObjectNode node = JsonNodeFactory.instance.objectNode();
  170. node.put("type",AdmDictCategoryEnum.MAJOR.getValue());
  171. criteria.setCriteria(node);
  172. AdmResponse admResponse = doQueryDictData(context, criteria, clazz);
  173. List<AdmObjectType> content = (List<AdmObjectType>) admResponse.getContent();
  174. return content;
  175. }
  176. /**
  177. * 基础数据类型
  178. * @return
  179. */
  180. private List<String> getDictBaseCategory(){
  181. List<String> category = new ArrayList<>();
  182. category.add(AdmDictCategoryEnum.EQUIPMENT.getValue());
  183. category.add(AdmDictCategoryEnum.COMPONENT.getValue());
  184. category.add(AdmDictCategoryEnum.SYSTEM.getValue());
  185. category.add(AdmDictCategoryEnum.SPACE.getValue());
  186. category.add(AdmDictCategoryEnum.PROPRTY.getValue());
  187. return category;
  188. }
  189. /**
  190. * 查询字典树形结构
  191. * @return
  192. */
  193. private List<String> getDictTreeCategory(){
  194. List<String> category = new ArrayList<>();
  195. category.add(AdmDictCategoryEnum.MAJOR_SYSTEM.getValue());
  196. category.add(AdmDictCategoryEnum.MAJOR_EQUIPMENT.getValue());
  197. category.add(AdmDictCategoryEnum.MAJOR_SYSTEM_EQUIP.getValue());
  198. category.add(AdmDictCategoryEnum.EQUIPMENT_COMPONENT.getValue());
  199. category.add(AdmDictCategoryEnum.SYSTEM_EQUIP.getValue());
  200. return category;
  201. }
  202. /**
  203. * 重置项目下的信息点
  204. * @param context
  205. * @param clazz
  206. * @return
  207. * @throws Exception
  208. */
  209. @Override
  210. public AdmResponse resetDic(InstanceUrlParam context, AdmDictQueryCriteria request, String fieldName, Class<T> clazz) throws Exception {
  211. //查询项目下点所有信息点
  212. AdmResponse admResponse = doQueryObjectInfo(context, request, fieldName, clazz);
  213. List<AdmObjectInfo> content = (List<AdmObjectInfo>) admResponse.getContent();
  214. if(CollUtil.isEmpty(content)){
  215. AdmResponse response = AdmResponse.success(new ArrayList<>());
  216. response.setTotal(Long.valueOf(0));
  217. return response;
  218. }
  219. //因BDTP根据项目查询信息点时返回的包含集团+通用信息点,需手动过滤除项目级的信息点
  220. String projectId = context.getProjectId();
  221. Iterator<AdmObjectInfo> infoIterator = content.iterator();
  222. while (infoIterator.hasNext()){
  223. String admProjectId = infoIterator.next().getProjectId();
  224. if(StringUtils.isEmpty(admProjectId) || !projectId.equals(admProjectId)){
  225. infoIterator.remove();
  226. }
  227. }
  228. //删除信息点
  229. doDeleteObjectInfo(context,(List<T>)content);
  230. // 设置返回值
  231. AdmResponse response = AdmResponse.success(content);
  232. response.setTotal(Long.valueOf(content.size()));
  233. return response;
  234. }
  235. /**
  236. * 设置-项目定制化字典
  237. * @param context
  238. * @param request
  239. * @param clazz
  240. * @return
  241. * @throws Exception
  242. */
  243. @Override
  244. public AdmResponse settingDicProject(InstanceUrlParam context, AdmCreateRequest<AdmDefFuncIdGather> request, Class<T> clazz) throws Exception {
  245. List<AdmDefFuncIdGather> content = request.getContent();
  246. if(CollUtil.isEmpty(content)){
  247. return AdmResponse.success(content);
  248. }
  249. //参数转换为中台参数
  250. List<T> list = new ArrayList<>();
  251. for (AdmDefFuncIdGather funcIdGather : content) {
  252. ObjectInfoCollect infoCollect = new ObjectInfoCollect();
  253. infoCollect.setGroupCode(funcIdGather.getGroupCode());
  254. infoCollect.setProjectId(funcIdGather.getProjectId());
  255. infoCollect.setDefineInfoId(funcIdGather.getId());
  256. infoCollect.setClassCode(funcIdGather.getClassCode());
  257. infoCollect.setCode(funcIdGather.getCode());
  258. infoCollect.setVisiable(funcIdGather.getVisible());
  259. list.add((T) infoCollect);
  260. }
  261. //设置采集信息点
  262. doSetObjectInfoCollect(context, clazz, list);
  263. return AdmResponse.success(content);
  264. }
  265. /**
  266. * 查询所有字典信息 M 和 L 类型,包括自定义信息点
  267. * @param context
  268. * @param dictTypeList
  269. * @return
  270. */
  271. @Override
  272. public AdmResponse queryMorlDict(InstanceUrlParam context, List<String> dictTypeList) {
  273. List<AdmObjectInfo> result = new ArrayList<>();
  274. for (String type : dictTypeList) {
  275. List<String> classCodes = new ArrayList<>();
  276. String name = null;
  277. //项目
  278. if(AdmDictCategoryEnum.PROJECT.getValue().equals(type)){
  279. name = AdmDictCategoryEnum.PROJECT.getDesc();
  280. classCodes.add(AdmDictCategoryEnum.PROJECT.getValue());
  281. }
  282. //建筑
  283. if(AdmDictCategoryEnum.BUILDING.getValue().equals(type)){
  284. name = AdmDictCategoryEnum.BUILDING.getDesc();
  285. classCodes.add(AdmDictCategoryEnum.BUILDING.getValue());
  286. }
  287. //楼层
  288. if(AdmDictCategoryEnum.FLOOR.getValue().equals(type)){
  289. name = AdmDictCategoryEnum.FLOOR.getDesc();
  290. classCodes.add(AdmDictCategoryEnum.FLOOR.getValue());
  291. }
  292. //设备
  293. if(AdmDictCategoryEnum.EQUIPMENT.getValue().equals(type)){
  294. name = AdmDictCategoryEnum.EQUIPMENT.getDesc();
  295. classCodes.addAll(queryDefClassType(context, AdmDictCategoryEnum.EQUIPMENT.getValue()));
  296. }
  297. //部件
  298. if(AdmDictCategoryEnum.COMPONENT.getValue().equals(type)){
  299. name = AdmDictCategoryEnum.COMPONENT.getDesc();
  300. classCodes.addAll(queryDefClassType(context, AdmDictCategoryEnum.COMPONENT.getValue()));
  301. }
  302. //系统
  303. if(AdmDictCategoryEnum.SYSTEM.getValue().equals(type)){
  304. name = AdmDictCategoryEnum.SYSTEM.getDesc();
  305. classCodes.addAll(queryDefClassType(context, AdmDictCategoryEnum.SYSTEM.getValue()));
  306. }
  307. //空间
  308. if(AdmDictCategoryEnum.SPACE.getValue().equals(type)){
  309. name = AdmDictCategoryEnum.SPACE.getDesc();
  310. classCodes.addAll(queryDefClassType(context, AdmDictCategoryEnum.SPACE.getValue()));
  311. }
  312. //查询类型下的信息点
  313. statisticObjectInfo(context,type, name, classCodes,result);
  314. }
  315. AdmResponse response = AdmResponse.success(result);
  316. response.setTotal(Long.valueOf(result.size()));
  317. return response;
  318. }
  319. /**
  320. * 查询信息点
  321. * @param context
  322. * @param request
  323. * @param fieldName
  324. * @param clazz
  325. * @return
  326. */
  327. @Override
  328. public AdmResponse query(InstanceUrlParam context, AdmDictQueryCriteria request, String fieldName, Class<T> clazz) {
  329. //转换排序字段
  330. revertSortField(request);
  331. //查询类型下的所有信息点信息
  332. AdmResponse admResponse = doQueryObjectInfo(context, request, AdmDictConstant.CLASS_CODE, clazz);
  333. List<AdmObjectInfo> admObjectInfos = (List<AdmObjectInfo>) admResponse.getContent();
  334. admObjectInfos = sortFuncidForEdit(admObjectInfos);
  335. //查询平台级信息点采集信息
  336. List<ObjectInfoCollect> commonObjectInfoCollect = queryObjectInfoCollect(context, "common", request.getType(), clazz);
  337. Map<String, Boolean> commonObjectInfoCollectMap = commonObjectInfoCollect.stream().filter(item -> StrUtil.isNotEmpty(item.getDefineInfoId())).collect(Collectors.toMap(ObjectInfoCollect::getDefineInfoId,ObjectInfoCollect::getVisiable));
  338. //查询项目级信息点采集信息
  339. List<ObjectInfoCollect> projectObjectInfoCollect = queryObjectInfoCollect(context, "project", request.getType(), clazz);
  340. Map<String, Boolean> projectObjectInfoCollectMap = projectObjectInfoCollect.stream().filter(item -> StrUtil.isNotEmpty(item.getDefineInfoId())).collect(Collectors.toMap(ObjectInfoCollect::getDefineInfoId,ObjectInfoCollect::getVisiable));
  341. String dictType = request.getDictType();
  342. //采集值配置查询
  343. if(StringUtils.isNotEmpty(dictType)){
  344. //查询平台级、项目级信息点采集信息
  345. if("common".equals(dictType)){
  346. setObjectInfoVisiable(admObjectInfos,commonObjectInfoCollectMap,dictType);
  347. }
  348. if("project".equals(dictType)){
  349. setObjectInfoVisiable(admObjectInfos,projectObjectInfoCollectMap,dictType);
  350. }
  351. admResponse.setContent(admObjectInfos);
  352. return admResponse;
  353. }
  354. //只查看采集值 todo
  355. if(CollUtil.isNotEmpty(projectObjectInfoCollectMap)){
  356. setOnlyQueryObjectInfoVisiable(admObjectInfos,projectObjectInfoCollectMap,dictType);
  357. }else{
  358. setOnlyQueryObjectInfoVisiable(admObjectInfos,commonObjectInfoCollectMap,dictType);
  359. }
  360. admResponse.setContent(admObjectInfos);
  361. return admResponse;
  362. }
  363. /**
  364. * 转换排序字段
  365. * @param request
  366. */
  367. private void revertSortField(AdmDictQueryCriteria request){
  368. request.setOrders("showOrder asc, name desc");
  369. }
  370. /**
  371. * 设置信息点是否可见
  372. * @param admObjectInfos
  373. * @param objectInfoCollectMap
  374. */
  375. private void setObjectInfoVisiable(List<AdmObjectInfo> admObjectInfos,Map<String, Boolean> objectInfoCollectMap,String dictType){
  376. if(CollUtil.isEmpty(admObjectInfos)){
  377. return;
  378. }
  379. for (AdmObjectInfo admObjectInfo : admObjectInfos) {
  380. Boolean visiable = null;
  381. String id = admObjectInfo.getId();
  382. if(CollUtil.isNotEmpty(objectInfoCollectMap)){
  383. visiable = objectInfoCollectMap.get(id);
  384. }
  385. if(visiable == null){
  386. if("common".equals(dictType)){
  387. if("localId".equals(admObjectInfo.getCode()) || "localName".equals(admObjectInfo.getCode())){
  388. visiable = true;
  389. }
  390. }
  391. if(visiable == null){
  392. visiable =false;
  393. }
  394. }
  395. admObjectInfo.setVisible(visiable);
  396. admObjectInfo.setEditable(true);
  397. admObjectInfo.setUnDisabled(true);
  398. }
  399. }
  400. /**
  401. * 设置台账管理中只查看采集值的信息点是否可见
  402. * @param admObjectInfos
  403. * @param objectInfoCollectMap
  404. */
  405. private void setOnlyQueryObjectInfoVisiable(List<AdmObjectInfo> admObjectInfos,Map<String, Boolean> objectInfoCollectMap,String dictType){
  406. if(CollUtil.isEmpty(admObjectInfos)){
  407. return;
  408. }
  409. for (AdmObjectInfo admObjectInfo : admObjectInfos) {
  410. Boolean visiable = null;
  411. String id = admObjectInfo.getId();
  412. //设置信息点是否可见
  413. if(CollUtil.isNotEmpty(objectInfoCollectMap)){
  414. visiable = objectInfoCollectMap.get(id);
  415. }
  416. if(visiable == null && ("localId".equals(admObjectInfo.getCode()) || "localName".equals(admObjectInfo.getCode()))){
  417. visiable = true;
  418. }
  419. if(visiable == null){
  420. visiable = false;
  421. }
  422. //信息点是否可编辑设置默认值
  423. if(admObjectInfo.getEditable() == null){
  424. List<String> unEditableList = checkoutDefInfoUnEditable();
  425. if(unEditableList.contains(admObjectInfo.getCode())){
  426. admObjectInfo.setEditable(false);
  427. }else {
  428. admObjectInfo.setEditable(true);
  429. }
  430. }
  431. //是否禁止操作设置默认值
  432. if(admObjectInfo.getUnDisabled() == null){
  433. List<String> unDisableList = checkoutDefInfoUnDisable();
  434. if(unDisableList.contains(admObjectInfo.getCode())){
  435. admObjectInfo.setUnDisabled(false);
  436. }else {
  437. admObjectInfo.setUnDisabled(true);
  438. }
  439. }
  440. admObjectInfo.setVisible(visiable);
  441. }
  442. }
  443. /**
  444. * 校验信息点是否可编辑
  445. * @return
  446. */
  447. public List<String> checkoutDefInfoUnEditable(){
  448. List<String> list = new ArrayList<>();
  449. list.add("id");
  450. list.add("name");
  451. list.add("qRCodePic");
  452. list.add("defaultQRCode");
  453. list.add("bimId");
  454. list.add("bimFamilyName");
  455. list.add("bimFamilySymbol");
  456. return list;
  457. }
  458. /**
  459. * 校验信息点是否禁止使用
  460. * @return
  461. */
  462. public List<String> checkoutDefInfoUnDisable(){
  463. List<String> list = new ArrayList<>();
  464. list.add("id");
  465. list.add("name");
  466. list.add("localId");
  467. list.add("localName");
  468. list.add("qRCodePic");
  469. list.add("defaultQRCode");
  470. list.add("bimId");
  471. list.add("bimFamilyName");
  472. list.add("bimFamilySymbol");
  473. return list;
  474. }
  475. /**
  476. * 查询信息点采集信息
  477. * @param context
  478. * @param dictType
  479. * @param classCode
  480. * @param clazz
  481. * @return
  482. */
  483. private List<ObjectInfoCollect> queryObjectInfoCollect(InstanceUrlParam context, String dictType,String classCode, Class<T> clazz){
  484. AdmQueryCriteria criteria = new AdmQueryCriteria();
  485. if("common".equals(dictType)){
  486. criteria.setFilters("groupCode = '0' and projectId = '0'");
  487. }else{
  488. criteria.setFilters("groupCode = '"+context.getGroupCode()+"' and projectId = '"+context.getProjectId()+"'");
  489. }
  490. criteria.setName(classCode);
  491. AdmResponse admResponse = doQueryObjectInfoCollect(context, criteria, "classCode", clazz);
  492. return (List<ObjectInfoCollect>) admResponse.getContent();
  493. }
  494. private List<AdmObjectInfo> sortFuncidForEdit(List<AdmObjectInfo> list) {
  495. List<AdmObjectInfo> resultOrders = new ArrayList<>();
  496. List<AdmObjectInfo> defaultOrders = new ArrayList<>();
  497. for (AdmObjectInfo admObjectInfo : list) {
  498. if(admObjectInfo.getSort()!=null){
  499. resultOrders.add(admObjectInfo);
  500. }else{
  501. defaultOrders.add(admObjectInfo);
  502. }
  503. }
  504. if(CollUtil.isNotEmpty(defaultOrders)){
  505. resultOrders.addAll(defaultOrders);
  506. }
  507. return resultOrders;
  508. }
  509. /**
  510. * 统计类型下的非静态信息点
  511. * @param context
  512. * @param code
  513. * @param name
  514. * @param result
  515. */
  516. private void statisticObjectInfo(InstanceUrlParam context,String code,String name,List<String> classCode,List<AdmObjectInfo> result){
  517. //根据类型查询信息点
  518. AdmQueryCriteria criteria = new AdmQueryCriteria();
  519. StringBuilder stringBuilder = new StringBuilder();
  520. classCode.stream().forEach(item -> {
  521. stringBuilder.append("'").append(item).append("'").append(",");
  522. });
  523. String filters = StrUtil.sub(stringBuilder.toString(),0, -1);
  524. criteria.setFilters("classCode in ["+filters+"]");
  525. AdmResponse response = doQueryObjectInfo(context, criteria, AdmDictConstant.CLASS_CODE, (Class<T>) AdmObjectInfo.class);
  526. List<AdmObjectInfo> content = (List<AdmObjectInfo>) response.getContent();
  527. if(CollUtil.isEmpty(content)){
  528. return ;
  529. }
  530. //过滤不需要的信息点
  531. Iterator<AdmObjectInfo> iterator = content.iterator();
  532. while (iterator.hasNext()){
  533. AdmObjectInfo objectInfo = iterator.next();
  534. if(StringUtils.isNotEmpty(objectInfo.getCategory()) && "STATIC".equals(objectInfo.getCategory())){
  535. iterator.remove();
  536. }
  537. }
  538. //返回结果拼装
  539. AdmObjectInfo admObjectInfo = new AdmObjectInfo();
  540. admObjectInfo.setCode(code);
  541. admObjectInfo.setName(name);
  542. admObjectInfo.setContent(content);
  543. result.add(admObjectInfo);
  544. }
  545. /**
  546. * 查询对象类型
  547. * @param context
  548. * @param code
  549. * @return
  550. */
  551. private List<String> queryDefClassType(InstanceUrlParam context,String code){
  552. QueryCriteria criteria = new QueryCriteria();
  553. ObjectNode node = JsonNodeFactory.instance.objectNode();
  554. node.put("parentCode",code);
  555. criteria.setCriteria(node);
  556. AdmResponse response = doQueryObjectType(context, criteria, (Class<T>) AdmObjectType.class);
  557. List<AdmObjectType> content = (List<AdmObjectType>) response.getContent();
  558. if(CollUtil.isEmpty(content)){
  559. return new ArrayList<>();
  560. }
  561. return content.stream().map(AdmObjectType::getCode).collect(Collectors.toList());
  562. }
  563. /**
  564. * 信息点转换为中台格式
  565. * @param content
  566. * @param dmpObjectInfos
  567. */
  568. private void objectInfosTransforDmp(List<AdmObjectInfo> content,List<AdmObjectInfo> dmpObjectInfos,String projectId){
  569. if(CollUtil.isEmpty(content)){
  570. return;
  571. }
  572. for (AdmObjectInfo admObjectInfo : content) {
  573. admObjectInfo.setProjectId(projectId);
  574. if(admObjectInfo.getMultiple() != null){
  575. admObjectInfo.setIsMultiple(admObjectInfo.getMultiple());
  576. }
  577. if(admObjectInfo.getIsRegion() != null){
  578. admObjectInfo.setIsRegion(admObjectInfo.getRegion());
  579. }
  580. if(StringUtils.isNotEmpty(admObjectInfo.getFirstName())){
  581. admObjectInfo.setFirstTag(admObjectInfo.getFirstName());
  582. }
  583. if(StringUtils.isNotEmpty(admObjectInfo.getSecondName())){
  584. admObjectInfo.setSecondTag(admObjectInfo.getSecondName());
  585. }
  586. admObjectInfo.setType(null);
  587. dmpObjectInfos.add(admObjectInfo);
  588. //处理子级
  589. List<AdmObjectInfo> sencondContent = admObjectInfo.getContent();
  590. if(CollUtil.isNotEmpty(sencondContent)){
  591. objectInfosTransforDmp(sencondContent,dmpObjectInfos,projectId);
  592. }
  593. }
  594. }
  595. }