AdmFloorController.java 11 KB

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