AdmFloorController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. package com.persagy.proxy.object.controller;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import com.persagy.dmp.common.model.entity.BaseEntity;
  5. import com.persagy.proxy.adm.request.AdmCreateRequest;
  6. import com.persagy.proxy.adm.request.AdmCreateResponse;
  7. import com.persagy.proxy.adm.request.AdmQueryCriteria;
  8. import com.persagy.proxy.adm.request.AdmResponse;
  9. import com.persagy.proxy.adm.service.IAdmRelationService;
  10. import com.persagy.proxy.adm.utils.AdmContextUtil;
  11. import com.persagy.proxy.adm.utils.ObjectNameUtil;
  12. import com.persagy.proxy.common.entity.DmpResult;
  13. import com.persagy.proxy.common.entity.RelationDTO;
  14. import com.persagy.proxy.object.model.AdmEquipment;
  15. import com.persagy.proxy.object.model.AdmFloor;
  16. import com.persagy.proxy.object.model.AdmISpace;
  17. import com.persagy.proxy.object.model.AdmSpace;
  18. import com.persagy.proxy.object.service.IAdmEquipmentService;
  19. import com.persagy.proxy.object.service.IAdmFloorService;
  20. import com.persagy.proxy.object.service.IAdmISpaceService;
  21. import com.persagy.proxy.object.service.IAdmSpaceService;
  22. import com.persagy.proxy.object.service.impl.AdmFloorServiceImpl;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.web.bind.annotation.PostMapping;
  25. import org.springframework.web.bind.annotation.RequestBody;
  26. import org.springframework.web.bind.annotation.RequestMapping;
  27. import org.springframework.web.bind.annotation.RestController;
  28. import java.util.ArrayList;
  29. import java.util.List;
  30. import java.util.Map;
  31. /**
  32. * Adm 楼层 API
  33. * @author lvxy
  34. * @date 2021/8/16
  35. */
  36. @RestController
  37. @RequestMapping("/object/floor")
  38. public class AdmFloorController {
  39. @Autowired
  40. private IAdmFloorService service;
  41. @Autowired
  42. private IAdmEquipmentService equipmentService;
  43. @Autowired
  44. private IAdmISpaceService iAdmISpaceService;
  45. @Autowired
  46. private IAdmSpaceService spaceService;
  47. @Autowired
  48. private IAdmRelationService relationService;
  49. /**
  50. * 创建
  51. * @param createRequest
  52. * @return
  53. * @throws Exception
  54. */
  55. @PostMapping("/create")
  56. public AdmCreateResponse create(@RequestBody AdmCreateRequest<AdmFloor> createRequest) throws Exception {
  57. List<AdmFloor> vos = createRequest.getContent();
  58. service.ensureSpecialValues(AdmContextUtil.toDmpContext(), vos, AdmFloorServiceImpl.CREAT_UPDATE);
  59. for(AdmFloor floor : vos){
  60. if(StrUtil.isEmpty(floor.getName())){
  61. floor.setName(ObjectNameUtil.objectName("楼层-"));
  62. }
  63. if(floor.getFloorSequenceID() == null){
  64. return AdmCreateResponse.failure("楼层顺序号不可以为空或类型错误");
  65. }
  66. }
  67. Map<String, AdmFloor> admFloorMap = CollUtil.fieldValueMap(vos, "buildingId");
  68. if (CollUtil.isNotEmpty(admFloorMap)){
  69. AdmQueryCriteria admQueryCriteria = new AdmQueryCriteria();
  70. StringBuilder stringBuilder = new StringBuilder();
  71. stringBuilder.append("buildingId in [");
  72. admFloorMap.keySet().stream().forEach(buildingId -> {
  73. stringBuilder.append("'").append(buildingId).append("'").append(",");
  74. });
  75. String filters = StrUtil.sub(stringBuilder.toString(),0, -1);
  76. filters+= "]";
  77. admQueryCriteria.setFilters(filters);
  78. admQueryCriteria.setName("floor");
  79. AdmResponse admResponseF = service.doQuery(AdmContextUtil.toDmpContext(), admQueryCriteria, AdmFloor.class);
  80. if(DmpResult.SUCCESS.equals(admResponseF.getResult()) && admResponseF.getTotal() > 0){
  81. List<AdmFloor> vosOld = (List<AdmFloor>) admResponseF.getContent();
  82. for(AdmFloor admFloorOld : vosOld){
  83. if(admFloorMap.containsKey(admFloorOld.getBuildingId())){
  84. AdmFloor admFloorNew = admFloorMap.get(admFloorOld.getBuildingId());
  85. //楼层序列号相同
  86. if(admFloorOld.getFloorSequenceID() !=null && admFloorNew.getFloorSequenceID().equals(admFloorOld.getFloorSequenceID())){
  87. return AdmCreateResponse.failure("楼层顺序号不可以重复");
  88. }
  89. }
  90. }
  91. }
  92. }
  93. List<AdmFloor> admFloors = service.doInsert(AdmContextUtil.toDmpContext(), AdmFloor.class, createRequest.getContent());
  94. //更新关系
  95. //楼层:新增楼层,添加floor和building的关系,如果后期关系计算支持,此部分去掉
  96. if(CollUtil.isNotEmpty(admFloors)){
  97. //建筑id一定存在
  98. String buildingId = vos.get(0).getBuildingId();
  99. List<RelationDTO> relationDTOS = new ArrayList<>(admFloors.size());
  100. admFloors.forEach(admFloor -> {
  101. String floorId = admFloor.getId();
  102. relationDTOS.add(new RelationDTO(null, "ArchSubset", "Bd2Fl", null, buildingId , floorId));
  103. });
  104. relationService.doSave(AdmContextUtil.toDmpContext(), relationDTOS);
  105. }
  106. return AdmCreateResponse.success(admFloors);
  107. }
  108. /**
  109. * 根据ID删除
  110. * @param vos
  111. * @return
  112. * @throws Exception
  113. */
  114. @PostMapping("/delete")
  115. public AdmResponse delete( @RequestBody List<AdmFloor> vos) throws Exception {
  116. String msg = "楼层下包含其他对象实例,请解除关系后删除";
  117. Map<String, AdmFloor> admFloorMap = CollUtil.fieldValueMap(vos, BaseEntity.PROP_ID);
  118. AdmQueryCriteria admQueryCriteria = new AdmQueryCriteria();
  119. StringBuilder stringBuilder = new StringBuilder();
  120. stringBuilder.append("floorId in [");
  121. admFloorMap.keySet().stream().forEach(buildingId -> {
  122. stringBuilder.append("'").append(buildingId).append("'").append(",");
  123. });
  124. String filters = StrUtil.sub(stringBuilder.toString(),0, -1);
  125. filters+= "]";
  126. admQueryCriteria.setFilters(filters);
  127. admQueryCriteria.setOnlyCount(true);
  128. admQueryCriteria.setName(AdmSpace.OBJ_TYPE);
  129. AdmResponse admResponseSpace = spaceService.query(admQueryCriteria);
  130. if(admResponseSpace.getResult().equals(DmpResult.SUCCESS) && admResponseSpace.getCount() > 0){
  131. return AdmResponse.failure(msg);
  132. }
  133. admQueryCriteria.setName(AdmISpace.OBJ_TYPE);
  134. AdmResponse admResponseISpace = iAdmISpaceService.doQuery(AdmContextUtil.toDmpContext(), admQueryCriteria, AdmISpace.class);
  135. if(admResponseISpace.getResult().equals(DmpResult.SUCCESS) && admResponseISpace.getCount() > 0){
  136. return AdmResponse.failure(msg);
  137. }
  138. admQueryCriteria.setName(AdmEquipment.OBJ_TYPE);
  139. AdmResponse admResponseEuip = equipmentService.query(admQueryCriteria);
  140. if(admResponseEuip.getResult().equals(DmpResult.SUCCESS) && admResponseEuip.getCount() > 0){
  141. return AdmResponse.failure(msg);
  142. }
  143. service.doDelete(AdmContextUtil.toDmpContext(), vos);
  144. return AdmResponse.success();
  145. }
  146. /**
  147. * 根据ID删除 - 单条删除
  148. * @param vos
  149. * @return
  150. * @throws Exception
  151. */
  152. @PostMapping("/single/delete")
  153. public AdmResponse deleteSingle( @RequestBody List<AdmFloor> vos) throws Exception {
  154. return delete(vos);
  155. }
  156. /**
  157. * 更新
  158. * @param admFloor
  159. * @return
  160. * @throws Exception
  161. */
  162. @PostMapping("/update")
  163. public AdmResponse update(@RequestBody AdmCreateRequest<AdmFloor> admFloor) throws Exception {
  164. List<AdmFloor> vos = CollUtil.newArrayList(admFloor.getContent());
  165. service.ensureSpecialValues(AdmContextUtil.toDmpContext(), vos, AdmFloorServiceImpl.CREAT_UPDATE);
  166. /** 遍历楼层列表 */
  167. Map<String, AdmFloor> admFloorBdMap = CollUtil.fieldValueMap(vos, "buildingId");
  168. if (CollUtil.isNotEmpty(admFloorBdMap)){
  169. AdmQueryCriteria admQueryCriteria = new AdmQueryCriteria();
  170. StringBuilder stringBuilder = new StringBuilder();
  171. stringBuilder.append("buildingId in [");
  172. admFloorBdMap.keySet().stream().forEach(buildingId -> {
  173. stringBuilder.append("'").append(buildingId).append("'").append(",");
  174. });
  175. String filters = StrUtil.sub(stringBuilder.toString(),0, -1);
  176. filters+= "]";
  177. admQueryCriteria.setFilters(filters);
  178. admQueryCriteria.setName("floor");
  179. AdmResponse admResponseF = service.query(admQueryCriteria);
  180. if(DmpResult.SUCCESS.equals(admResponseF.getResult()) && admResponseF.getTotal() > 0 && CollUtil.isNotEmpty(admResponseF.getContent())){
  181. List<AdmFloor> vosOld = (List<AdmFloor>) admResponseF.getContent();
  182. for(AdmFloor admFloorOld : vosOld){
  183. if(admFloorBdMap.containsKey(admFloorOld.getBuildingId())){
  184. AdmFloor admFloorNew = admFloorBdMap.get(admFloorOld.getBuildingId());
  185. //楼层序列号相同
  186. if(admFloorOld.getFloorSequenceID()!=null && admFloorNew.getFloorSequenceID()!= null && !admFloorOld.getId().equals(admFloorNew.getId()) && admFloorNew.getFloorSequenceID().equals(admFloorOld.getFloorSequenceID())){
  187. return AdmResponse.failure("楼层顺序号不可以重复");
  188. }
  189. }
  190. }
  191. }
  192. }
  193. vos = service.doUpdate(AdmContextUtil.toDmpContext(), AdmFloor.class, vos);
  194. return AdmResponse.success(vos);
  195. }
  196. /**
  197. * 更新 outline
  198. * TODO 暂时不知道具体的参数,先做所有字段的更新,之后有具体场景再做细化
  199. * @param admFloor
  200. * @return
  201. * @throws Exception
  202. */
  203. @PostMapping("/update-outline")
  204. public AdmResponse updateOutline(@RequestBody AdmCreateRequest<AdmFloor> admFloor) throws Exception {
  205. // 组装上下文条件
  206. AdmResponse admResponse = update(admFloor);
  207. //TODO 处理关系
  208. /** 处理关系标记 */
  209. /* val listtype = ArrayList<String>()
  210. listtype.add("sh2bd")
  211. listtype.add("bd2sp")
  212. listtype.add("fl2sp")
  213. listtype.add("syeq2bd")
  214. listtype.add("sy2fl")
  215. listtype.add("eq2fl")
  216. listtype.add("pe2bd")
  217. listtype.add("pe2fl")
  218. for (type in listtype){
  219. val entity = EquipmentService.relationTypeProjectservice.select(SFilter.eq("projectId", Opt.projectId!!), SFilter.eq("relationType", type)).entity()
  220. if (entity!=null){
  221. entity.computationalState = 2
  222. EquipmentService.relationTypeProjectservice.update(entity)
  223. }
  224. }*/
  225. return admResponse;
  226. }
  227. /**
  228. * 查询
  229. *
  230. * @param request
  231. * @return
  232. * @throws Exception
  233. */
  234. @PostMapping("/query")
  235. public AdmResponse query(@RequestBody AdmQueryCriteria request) throws Exception {
  236. request.setName(AdmFloor.OBJ_TYPE);
  237. return service.query(request);
  238. }
  239. /**
  240. * 查询
  241. *
  242. * @param request
  243. * @return
  244. * @throws Exception
  245. */
  246. @PostMapping("/query-outline")
  247. public AdmResponse queryOutline(@RequestBody AdmQueryCriteria request) throws Exception {
  248. request.setName(AdmFloor.OBJ_TYPE);
  249. return service.doQueryOutLine(AdmContextUtil.toDmpContext(), request, AdmFloor.class);
  250. }
  251. }