AdmFloorController.java 11 KB

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