123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- package com.persagy.proxy.object.controller;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.util.StrUtil;
- import com.persagy.dmp.common.model.entity.BaseEntity;
- import com.persagy.proxy.adm.request.AdmCreateRequest;
- import com.persagy.proxy.adm.request.AdmCreateResponse;
- import com.persagy.proxy.adm.request.AdmQueryCriteria;
- import com.persagy.proxy.adm.request.AdmResponse;
- import com.persagy.proxy.adm.service.IAdmRelationService;
- import com.persagy.proxy.adm.utils.AdmContextUtil;
- import com.persagy.proxy.adm.utils.ObjectNameUtil;
- import com.persagy.proxy.common.entity.DmpResult;
- import com.persagy.proxy.common.entity.RelationDTO;
- import com.persagy.proxy.object.model.AdmEquipment;
- import com.persagy.proxy.object.model.AdmFloor;
- import com.persagy.proxy.object.model.AdmISpace;
- import com.persagy.proxy.object.model.AdmSpace;
- import com.persagy.proxy.object.service.IAdmEquipmentService;
- import com.persagy.proxy.object.service.IAdmFloorService;
- import com.persagy.proxy.object.service.IAdmISpaceService;
- import com.persagy.proxy.object.service.IAdmSpaceService;
- import com.persagy.proxy.object.service.impl.AdmFloorServiceImpl;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- /**
- * Adm 楼层 API
- * @author lvxy
- * @date 2021/8/16
- */
- @RestController
- @RequestMapping("/object/floor")
- public class AdmFloorController {
- @Autowired
- private IAdmFloorService service;
- @Autowired
- private IAdmEquipmentService equipmentService;
- @Autowired
- private IAdmISpaceService iAdmISpaceService;
- @Autowired
- private IAdmSpaceService spaceService;
- @Autowired
- private IAdmRelationService relationService;
- /**
- * 创建
- * @param createRequest
- * @return
- * @throws Exception
- */
- @PostMapping("/create")
- public AdmCreateResponse create(@RequestBody AdmCreateRequest<AdmFloor> createRequest) throws Exception {
- List<AdmFloor> vos = createRequest.getContent();
- service.ensureSpecialValues(AdmContextUtil.toDmpContext(), vos, AdmFloorServiceImpl.CREAT_UPDATE);
- for(AdmFloor floor : vos){
- if(StrUtil.isEmpty(floor.getName())){
- floor.setName(ObjectNameUtil.objectName("楼层-"));
- }
- if(floor.getFloorSequenceID() == null){
- return AdmCreateResponse.failure("楼层顺序号不可以为空或类型错误");
- }
- }
- Map<String, AdmFloor> admFloorMap = CollUtil.fieldValueMap(vos, "buildingId");
- if (CollUtil.isNotEmpty(admFloorMap)){
- AdmQueryCriteria admQueryCriteria = new AdmQueryCriteria();
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append("buildingId in [");
- admFloorMap.keySet().stream().forEach(buildingId -> {
- stringBuilder.append("'").append(buildingId).append("'").append(",");
- });
- String filters = StrUtil.sub(stringBuilder.toString(),0, -1);
- filters+= "]";
- admQueryCriteria.setFilters(filters);
- admQueryCriteria.setName("floor");
- AdmResponse admResponseF = service.doQuery(AdmContextUtil.toDmpContext(), admQueryCriteria, AdmFloor.class);
- if(DmpResult.SUCCESS.equals(admResponseF.getResult()) && admResponseF.getTotal() > 0){
- List<AdmFloor> vosOld = (List<AdmFloor>) admResponseF.getContent();
- for(AdmFloor admFloorOld : vosOld){
- if(admFloorMap.containsKey(admFloorOld.getBuildingId())){
- AdmFloor admFloorNew = admFloorMap.get(admFloorOld.getBuildingId());
- //楼层序列号相同
- if(admFloorOld.getFloorSequenceID() !=null && admFloorNew.getFloorSequenceID().equals(admFloorOld.getFloorSequenceID())){
- return AdmCreateResponse.failure("楼层顺序号不可以重复");
- }
- }
- }
- }
- }
- List<AdmFloor> admFloors = service.doInsert(AdmContextUtil.toDmpContext(), AdmFloor.class, createRequest.getContent());
- //更新关系
- //楼层:新增楼层,添加floor和building的关系,如果后期关系计算支持,此部分去掉
- if(CollUtil.isNotEmpty(admFloors)){
- //建筑id一定存在
- String buildingId = vos.get(0).getBuildingId();
- List<RelationDTO> relationDTOS = new ArrayList<>(admFloors.size());
- admFloors.forEach(admFloor -> {
- String floorId = admFloor.getId();
- relationDTOS.add(new RelationDTO(null, "ArchSubset", "Bd2Fl", null, buildingId , floorId));
- });
- relationService.doSave(AdmContextUtil.toDmpContext(), relationDTOS);
- }
- return AdmCreateResponse.success(admFloors);
- }
- /**
- * 根据ID删除
- * @param vos
- * @return
- * @throws Exception
- */
- @PostMapping("/delete")
- public AdmResponse delete( @RequestBody List<AdmFloor> vos) throws Exception {
- String msg = "楼层下包含其他对象实例,请解除关系后删除";
- Map<String, AdmFloor> admFloorMap = CollUtil.fieldValueMap(vos, BaseEntity.PROP_ID);
- AdmQueryCriteria admQueryCriteria = new AdmQueryCriteria();
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append("floorId in [");
- admFloorMap.keySet().stream().forEach(buildingId -> {
- stringBuilder.append("'").append(buildingId).append("'").append(",");
- });
- String filters = StrUtil.sub(stringBuilder.toString(),0, -1);
- filters+= "]";
- admQueryCriteria.setFilters(filters);
- admQueryCriteria.setOnlyCount(true);
- admQueryCriteria.setName(AdmSpace.OBJ_TYPE);
- AdmResponse admResponseSpace = spaceService.query(admQueryCriteria);
- if(admResponseSpace.getResult().equals(DmpResult.SUCCESS) && admResponseSpace.getCount() > 0){
- return AdmResponse.failure(msg);
- }
- admQueryCriteria.setName(AdmISpace.OBJ_TYPE);
- AdmResponse admResponseISpace = iAdmISpaceService.doQuery(AdmContextUtil.toDmpContext(), admQueryCriteria, AdmISpace.class);
- if(admResponseISpace.getResult().equals(DmpResult.SUCCESS) && admResponseISpace.getCount() > 0){
- return AdmResponse.failure(msg);
- }
- admQueryCriteria.setName(AdmEquipment.OBJ_TYPE);
- AdmResponse admResponseEuip = equipmentService.query(admQueryCriteria);
- if(admResponseEuip.getResult().equals(DmpResult.SUCCESS) && admResponseEuip.getCount() > 0){
- return AdmResponse.failure(msg);
- }
- service.doDelete(AdmContextUtil.toDmpContext(), vos);
- return AdmResponse.success();
- }
- /**
- * 根据ID删除 - 单条删除
- * @param vos
- * @return
- * @throws Exception
- */
- @PostMapping("/single/delete")
- public AdmResponse deleteSingle( @RequestBody List<AdmFloor> vos) throws Exception {
- return delete(vos);
- }
- /**
- * 更新
- * @param admFloor
- * @return
- * @throws Exception
- */
- @PostMapping("/update")
- public AdmResponse update(@RequestBody AdmCreateRequest<AdmFloor> admFloor) throws Exception {
- List<AdmFloor> vos = CollUtil.newArrayList(admFloor.getContent());
- service.ensureSpecialValues(AdmContextUtil.toDmpContext(), vos, AdmFloorServiceImpl.CREAT_UPDATE);
- /** 遍历楼层列表 */
- Map<String, AdmFloor> admFloorBdMap = CollUtil.fieldValueMap(vos, "buildingId");
- if (CollUtil.isNotEmpty(admFloorBdMap)){
- AdmQueryCriteria admQueryCriteria = new AdmQueryCriteria();
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append("buildingId in [");
- admFloorBdMap.keySet().stream().forEach(buildingId -> {
- stringBuilder.append("'").append(buildingId).append("'").append(",");
- });
- String filters = StrUtil.sub(stringBuilder.toString(),0, -1);
- filters+= "]";
- admQueryCriteria.setFilters(filters);
- admQueryCriteria.setName("floor");
- AdmResponse admResponseF = service.query(admQueryCriteria);
- if(DmpResult.SUCCESS.equals(admResponseF.getResult()) && admResponseF.getTotal() > 0 && CollUtil.isNotEmpty(admResponseF.getContent())){
- List<AdmFloor> vosOld = (List<AdmFloor>) admResponseF.getContent();
- for(AdmFloor admFloorOld : vosOld){
- if(admFloorBdMap.containsKey(admFloorOld.getBuildingId())){
- AdmFloor admFloorNew = admFloorBdMap.get(admFloorOld.getBuildingId());
- //楼层序列号相同
- if(admFloorOld.getFloorSequenceID()!=null && admFloorNew.getFloorSequenceID()!= null && !admFloorOld.getId().equals(admFloorNew.getId()) && admFloorNew.getFloorSequenceID().equals(admFloorOld.getFloorSequenceID())){
- return AdmResponse.failure("楼层顺序号不可以重复");
- }
- }
- }
- }
- }
- vos = service.doUpdate(AdmContextUtil.toDmpContext(), AdmFloor.class, vos);
- return AdmResponse.success(vos);
- }
- /**
- * 更新 outline
- * TODO 暂时不知道具体的参数,先做所有字段的更新,之后有具体场景再做细化
- * @param admFloor
- * @return
- * @throws Exception
- */
- @PostMapping("/update-outline")
- public AdmResponse updateOutline(@RequestBody AdmCreateRequest<AdmFloor> admFloor) throws Exception {
- // 组装上下文条件
- AdmResponse admResponse = update(admFloor);
- //TODO 处理关系
- /** 处理关系标记 */
- /* val listtype = ArrayList<String>()
- listtype.add("sh2bd")
- listtype.add("bd2sp")
- listtype.add("fl2sp")
- listtype.add("syeq2bd")
- listtype.add("sy2fl")
- listtype.add("eq2fl")
- listtype.add("pe2bd")
- listtype.add("pe2fl")
- for (type in listtype){
- val entity = EquipmentService.relationTypeProjectservice.select(SFilter.eq("projectId", Opt.projectId!!), SFilter.eq("relationType", type)).entity()
- if (entity!=null){
- entity.computationalState = 2
- EquipmentService.relationTypeProjectservice.update(entity)
- }
- }*/
- return admResponse;
- }
- /**
- * 查询
- *
- * @param request
- * @return
- * @throws Exception
- */
- @PostMapping("/query")
- public AdmResponse query(@RequestBody AdmQueryCriteria request) throws Exception {
- request.setName(AdmFloor.OBJ_TYPE);
- return service.query(request);
- }
- /**
- * 查询
- *
- * @param request
- * @return
- * @throws Exception
- */
- @PostMapping("/query-outline")
- public AdmResponse queryOutline(@RequestBody AdmQueryCriteria request) throws Exception {
- request.setName(AdmFloor.OBJ_TYPE);
- return service.doQueryOutLine(AdmContextUtil.toDmpContext(), request, AdmFloor.class);
- }
- }
|