AdmFloorController.java 11 KB

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