AdmSpaceController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. package com.persagy.proxy.adm.controller;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import cn.hutool.json.JSONUtil;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.fasterxml.jackson.databind.node.JsonNodeFactory;
  7. import com.fasterxml.jackson.databind.node.ObjectNode;
  8. import com.persagy.dmp.basic.model.QueryCriteria;
  9. import com.persagy.proxy.adm.model.*;
  10. import com.persagy.proxy.adm.request.AdmCreateRequest;
  11. import com.persagy.proxy.adm.request.AdmQueryCriteria;
  12. import com.persagy.proxy.adm.request.AdmResponse;
  13. import com.persagy.proxy.adm.service.IAdmBuildingService;
  14. import com.persagy.proxy.adm.service.IAdmFloorService;
  15. import com.persagy.proxy.adm.service.IAdmRelationService;
  16. import com.persagy.proxy.adm.service.IAdmSpaceService;
  17. import com.persagy.proxy.adm.utils.AdmContextUtil;
  18. import com.persagy.proxy.common.entity.RelationDTO;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.web.bind.annotation.PostMapping;
  21. import org.springframework.web.bind.annotation.RequestBody;
  22. import org.springframework.web.bind.annotation.RequestMapping;
  23. import org.springframework.web.bind.annotation.RestController;
  24. import javax.ws.rs.QueryParam;
  25. import java.util.ArrayList;
  26. import java.util.List;
  27. /**
  28. * Adm 空间 API
  29. * @author lvxy
  30. * @date 2021/8/16
  31. */
  32. @RestController
  33. @RequestMapping("/object/zone")
  34. public class AdmSpaceController {
  35. @Autowired
  36. private IAdmSpaceService service;
  37. @Autowired
  38. private IAdmBuildingService buildingService;
  39. @Autowired
  40. private IAdmRelationService relationService;
  41. @Autowired
  42. private IAdmFloorService floorService;
  43. /**
  44. * 统计
  45. *
  46. * @param request
  47. * @return
  48. * @throws Exception
  49. */
  50. @PostMapping("/count")
  51. public AdmResponse count(@RequestBody AdmQueryCriteria request) throws Exception {
  52. request.setName("space");
  53. request.setOnlyCount(true);
  54. return service.doQuery( AdmContextUtil.toDmpContext(), request, AdmSpace.class);
  55. }
  56. /**
  57. * 创建
  58. * @param createRequest
  59. * @return
  60. * @throws Exception
  61. */
  62. @PostMapping("/create")
  63. public AdmResponse create(@RequestBody AdmCreateRequest<AdmSpace> createRequest) throws Exception {
  64. List<AdmSpace> vos = CollUtil.newArrayList(createRequest.getContent());
  65. String msg = null;
  66. for (AdmSpace admSpace : vos) {
  67. if(StrUtil.isEmpty(admSpace.getClassCode())){
  68. msg = "classCode不可以为空!";
  69. break;
  70. }
  71. }
  72. if(StrUtil.isNotEmpty(msg)){
  73. vos = service.doInsertExt( AdmContextUtil.toDmpContext(), AdmSpace.class, vos);
  74. return AdmResponse.success(vos);
  75. }else{
  76. return AdmResponse.failure(msg);
  77. }
  78. }
  79. /**
  80. * 根据ID删除
  81. * @param vos
  82. * @return
  83. * @throws Exception
  84. */
  85. @PostMapping("/delete")
  86. public AdmResponse delete( @RequestBody List<AdmSpace> vos) throws Exception {
  87. service.doDelete( AdmContextUtil.toDmpContext(), vos);
  88. QueryCriteria queryCriteria = new QueryCriteria();
  89. vos.forEach(vo -> {
  90. /** 清除空间和建筑楼层的的数据 */
  91. dealRelation(vo.getId(), queryCriteria,"Bd2Sp");
  92. dealRelation(vo.getId(), queryCriteria,"Fl2Sp");
  93. });
  94. return AdmResponse.success();
  95. }
  96. /**
  97. * 更新分区对象信息
  98. * @param createRequest
  99. * @return
  100. * @throws Exception
  101. */
  102. @PostMapping("/update")
  103. public AdmResponse update(@RequestBody AdmCreateRequest<AdmSpace> createRequest, @QueryParam("projectId") String projectId) throws Exception {
  104. List<AdmSpace> vos = CollUtil.newArrayList(createRequest.getContent());
  105. vos = service.doUpdate( AdmContextUtil.toDmpContext(), AdmSpace.class, vos);
  106. return AdmResponse.success(vos);
  107. }
  108. /**
  109. * 查询
  110. *
  111. * @param request
  112. * @return
  113. * @throws Exception
  114. */
  115. @PostMapping("/query")
  116. public AdmResponse query(@RequestBody AdmDCSQueryRequest request) throws Exception {
  117. return service.doQuerySpaces( AdmContextUtil.toDmpContext(), request);
  118. }
  119. /**
  120. * 查询业务空间的建筑楼层,包含受影响的空间数量
  121. *
  122. * @param request
  123. * @return
  124. * @throws Exception
  125. */
  126. @PostMapping("/building-floor")
  127. public AdmResponse queryBuildingFloor(@RequestBody AdmQueryCriteria request) throws Exception {
  128. request.setName(AdmBuilding.OBJ_TYPE);
  129. AdmQueryCriteria criteriaFloor = new AdmQueryCriteria();
  130. criteriaFloor.setName(AdmFloor.OBJ_TYPE);
  131. AdmQueryCriteria criteriaSpace = new AdmQueryCriteria();
  132. criteriaSpace.setName("spaceList");
  133. criteriaSpace.setFilters("state = 1");
  134. criteriaFloor.setCascade(CollUtil.newArrayList(criteriaSpace));
  135. request.setCascade(CollUtil.newArrayList(criteriaFloor));
  136. AdmResponse response = buildingService.doQueryBuildingFloor( AdmContextUtil.toDmpContext(), request);
  137. List<AdmBuilding> buildings = (List<AdmBuilding>) response.getContent();
  138. buildings.stream().forEach(building -> {
  139. if(CollUtil.isNotEmpty(building.getFloor())){
  140. List<AdmFloor> floors = building.getFloor();
  141. floors.stream().forEach(floor -> {
  142. if(CollUtil.isNotEmpty(floor.getSpaceList())){
  143. floor.setCount(String.valueOf(floor.getSpaceList().size()));
  144. floor.setSpaceList(null);
  145. }else{
  146. floor.setCount("0");
  147. }
  148. });
  149. }
  150. });
  151. return response;
  152. }
  153. /**
  154. * 修改业务空间对象和建筑楼层的关系
  155. * spaceId 业务空间id,id 楼层或建筑id,type 业务空间的类型
  156. * @param voList
  157. * @return
  158. * @throws Exception
  159. */
  160. @PostMapping("/update-fl-bd")
  161. public AdmResponse updateFlBd(@RequestBody List<AdmUpDataFloorAndBuildingRequests> voList, @QueryParam("projectId") String projectId) throws Exception {
  162. if(CollUtil.isEmpty(voList)){
  163. return AdmResponse.failure("不可以传入空数据");
  164. }
  165. //TODO 循环删除 需要改为 批量删除
  166. List<RelationDTO> RSpInBd_up = new ArrayList<>();
  167. List<RelationDTO> RSpInFl_up = new ArrayList<>();
  168. List<AdmSpace> space_up = new ArrayList<>();
  169. QueryCriteria queryCriteria = new QueryCriteria();
  170. voList.stream().forEach(requestData -> {
  171. String spaceId = requestData.getSpaceId();
  172. String id = requestData.getId();
  173. String type = requestData.getType();//classCode
  174. /** 清除空间和建筑楼层的的数据 */
  175. dealRelation(spaceId, queryCriteria,"Bd2Sp");
  176. dealRelation(spaceId, queryCriteria,"Fl2Sp");
  177. if(StrUtil.isNotEmpty(id)){
  178. if(id.startsWith("Fl") && StrUtil.isNotEmpty(spaceId)){
  179. AdmQueryCriteria admQueryCriteria = new AdmQueryCriteria();
  180. admQueryCriteria.setName(AdmFloor.OBJ_TYPE);
  181. AdmResponse admResponseFl = floorService.doQuery( AdmContextUtil.toDmpContext(), admQueryCriteria, AdmFloor.class);
  182. if(CollUtil.isNotEmpty(admResponseFl.getContent())){
  183. AdmFloor floor = JSONUtil.toBean(admResponseFl.getContent().get(0).toString(), AdmFloor.class);
  184. if (floor!=null){
  185. //更新关系
  186. RelationDTO rBd_up = new RelationDTO();
  187. rBd_up.setObjTo(spaceId);
  188. rBd_up.setRelCode("Bd2Sp");
  189. rBd_up.setObjFrom(floor.getBuildingId());
  190. RSpInBd_up.add(rBd_up);
  191. RelationDTO rFl_up = new RelationDTO();
  192. rFl_up.setObjTo(spaceId);
  193. rFl_up.setRelCode("Fl2Sp");
  194. rFl_up.setObjFrom(floor.getId());
  195. RSpInFl_up.add(rFl_up);
  196. //更新实体
  197. AdmSpace space = new AdmSpace();
  198. space.setId(spaceId);
  199. space.setObjectType(AdmSpace.OBJ_TYPE);
  200. space.setZoneType(type);
  201. space.setClassCode(type);
  202. space.setBuildingId(floor.getBuildingId());
  203. space.setFloorId(floor.getId());
  204. space_up.add(space);
  205. }
  206. }
  207. }else if(id.startsWith("Bd")){
  208. //更新关系
  209. RelationDTO rBd_up = new RelationDTO();
  210. rBd_up.setObjTo(spaceId);
  211. rBd_up.setRelCode("Bd2Sp");
  212. rBd_up.setObjFrom(id);
  213. RSpInBd_up.add(rBd_up);
  214. //更新实体
  215. AdmSpace space = new AdmSpace();
  216. space.setId(spaceId);
  217. space.setObjectType(AdmSpace.OBJ_TYPE);
  218. space.setZoneType(type);
  219. space.setClassCode(type);
  220. space.setBuildingId(id);
  221. space.setFloorId(null);
  222. space_up.add(space);
  223. }
  224. }
  225. });
  226. service.doUpdate( AdmContextUtil.toDmpContext(), AdmSpace.class, space_up);
  227. relationService.doSave( AdmContextUtil.toDmpContext(), RSpInBd_up);
  228. relationService.doSave( AdmContextUtil.toDmpContext(), RSpInFl_up);
  229. return AdmResponse.success(space_up);
  230. }
  231. /**
  232. * 更新分区对象信息-Outline
  233. * @param createRequest
  234. * @return
  235. * @throws Exception
  236. */
  237. @PostMapping("/update-outline")
  238. public AdmResponse updateOutLine(@RequestBody AdmCreateRequest<AdmSpace> createRequest) throws Exception {
  239. List<AdmSpace> vos = CollUtil.newArrayList(createRequest.getContent());
  240. vos = service.doUpdate( AdmContextUtil.toDmpContext(), AdmSpace.class, vos);
  241. //TODO 更新计算关系ZoneSpaceBaseService.upDateOutline
  242. return AdmResponse.success(vos);
  243. }
  244. /**
  245. * 查询空间信息-outline 级联查询:建筑(building),楼层(floor),空间类型(objectType)
  246. *
  247. * @param request
  248. * @return
  249. * @throws Exception
  250. */
  251. @PostMapping("/query-outline")
  252. public AdmResponse queryOutline(@RequestBody AdmDCSQueryRequest request) throws Exception {
  253. request.setName(AdmSpace.OBJ_TYPE);
  254. request.setProjection(null);
  255. List<String> list = new ArrayList<>();
  256. list.add("id");
  257. list.add("name");
  258. list.add("localId");
  259. list.add("localName");
  260. list.add("outline");
  261. list.add("floorSequenceId");
  262. list.add("modelId");
  263. list.add("infos");
  264. list.add("properties");
  265. request.setProjection(list);
  266. return service.doQuerySpaces( AdmContextUtil.toDmpContext(), request);
  267. }
  268. /**
  269. * 获取项目下已有的空间类型
  270. *
  271. * @return
  272. * @throws Exception
  273. */
  274. @PostMapping("/space-type")
  275. public List<JSONObject> querySpaceType() throws Exception {
  276. return service.doQuerySpaceTypes( AdmContextUtil.toDmpContext());
  277. }
  278. /**
  279. * 查询业务空间所有类型
  280. *
  281. * @param request
  282. * @return
  283. * @throws Exception
  284. */
  285. @PostMapping("/type")
  286. public AdmResponse queryType(@RequestBody AdmDCSQueryRequest request) throws Exception {
  287. return service.doQueryType( AdmContextUtil.toDmpContext(), request);
  288. }
  289. /**
  290. * 上传EXCEL 识别镜头信息点
  291. *
  292. * @param request
  293. * @return
  294. * @throws Exception
  295. */
  296. @PostMapping("/import")
  297. public AdmResponse importExcel(@RequestBody AdmQueryCriteria request) throws Exception {
  298. request.setName(AdmSpace.OBJ_TYPE);
  299. return service.doQuery( AdmContextUtil.toDmpContext(), request, AdmSpace.class);
  300. }
  301. private void dealRelation(String spaceId, QueryCriteria queryCriteria, String relCode){
  302. ObjectNode rBd = JsonNodeFactory.instance.objectNode();
  303. rBd.put("objTo",spaceId);
  304. rBd.put("relCode",relCode);
  305. queryCriteria.setCriteria(rBd);
  306. relationService.doDelete( AdmContextUtil.toDmpContext(), queryCriteria);
  307. }
  308. }