Browse Source

fix bug:调用/floor/query接口根据建筑id查询不到楼层信息问题

lijie 3 years ago
parent
commit
5befa01b2d

+ 13 - 0
src/main/java/com/persagy/proxy/adm/service/impl/AbstractAdmBaseServiceImpl.java

@@ -57,6 +57,8 @@ public class AbstractAdmBaseServiceImpl<T> implements IAdmBaseService<T> {
     public AdmResponse doQuery(InstanceUrlParam context, AdmQueryCriteria request, Class<T> clazz) {
         // 转换为数据中台查询条件
         QueryCriteria dmpRequest = AdmQueryCriteriaHelper.toDmpCriteria(request);
+        // 提供一个钩子方法用于处理已封装好的中台查询参数(因传参有buildingId而处理)
+        processDmpCriteria(dmpRequest);
         // 转换参数
         JSONObject para = null;
         try {
@@ -84,6 +86,17 @@ public class AbstractAdmBaseServiceImpl<T> implements IAdmBaseService<T> {
         response.setPageSize(request.getPageSize());
         return response;
     }
+    /***
+     * Description: 提供一个钩子方法用于处理已封装好的中台查询参数(因传参有buildingId而处理)
+     * @param dmpRequest : 中台查询参数
+     * @return : void
+     * @author : lijie
+     * @date :2021/10/28 20:23
+     * Update By lijie 2021/10/28 20:23
+     */
+    protected void processDmpCriteria(QueryCriteria dmpRequest) {
+        // 空方法,防止子类重写
+    }
 
     /**
      * 处理级联查询

+ 9 - 0
src/main/java/com/persagy/proxy/object/service/IAdmFloorService.java

@@ -37,4 +37,13 @@ public interface IAdmFloorService extends IAdmBaseService<AdmFloor> {
      * @return
      */
     void ensureSpecialValues(InstanceUrlParam context, List<AdmFloor> vos, boolean queryFlag);
+    /***
+     * Description: 根据条件查询
+     * @param criteria : 请求参数
+     * @return : com.persagy.proxy.adm.request.AdmResponse
+     * @author : lijie
+     * @date :2021/10/28 20:13
+     * Update By lijie 2021/10/28 20:13
+     */
+    AdmResponse query(AdmQueryCriteria criteria);
 }

+ 61 - 6
src/main/java/com/persagy/proxy/object/service/impl/AdmFloorServiceImpl.java

@@ -6,10 +6,16 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.common.helper.SpringHelper;
+import com.persagy.proxy.adm.constant.GraphCodeEnum;
+import com.persagy.proxy.adm.constant.RelCodeEnum;
 import com.persagy.proxy.adm.service.impl.AbstractAdmBaseServiceImpl;
+import com.persagy.proxy.adm.utils.AdmContextUtil;
 import com.persagy.proxy.object.model.AdmFloor;
 import com.persagy.proxy.adm.request.AdmQueryCriteria;
 import com.persagy.proxy.adm.request.AdmResponse;
+import com.persagy.proxy.object.model.AdmSpace;
 import com.persagy.proxy.object.service.IAdmFloorService;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,14 +39,63 @@ public class AdmFloorServiceImpl extends AbstractAdmBaseServiceImpl<AdmFloor> im
 
     public static final Boolean QUERY = true;
     public static final Boolean CREAT_UPDATE = false;
-
+    /***
+     * Description: 根据条件查询
+     * @param criteria : 请求参数
+     * @return : com.persagy.proxy.adm.request.AdmResponse
+     * @author : lijie
+     * @date :2021/10/28 20:13
+     * Update By lijie 2021/10/28 20:13
+     */
     @Override
-    public AdmResponse doQuery(InstanceUrlParam context, AdmQueryCriteria request, Class<AdmFloor> clazz) {
-        AdmResponse response = super.doQuery(context, request, clazz);
+    public AdmResponse query(AdmQueryCriteria criteria) {
+        // 1.查询楼层
+        InstanceUrlParam context = AdmContextUtil.toDmpContext();
+        criteria.setName(AdmFloor.OBJ_TYPE);
+        // 设置级联查询参数
+        AdmQueryCriteria buildCriteria = new AdmQueryCriteria();
+        buildCriteria.setName("building");
+        criteria.setCascade(CollUtil.newArrayList(buildCriteria));
+        AdmResponse response = this.doQuery(context, criteria, AdmFloor.class);
+        List<AdmFloor> admFloors = (List<AdmFloor>) response.getContent();
+        if (CollUtil.isNotEmpty(admFloors)){
+            admFloors.forEach(admFloor -> {
+                if (null==admFloor.getBuilding()){
+                    return;
+                }
+                admFloor.setBuildingId(admFloor.getBuilding().getId());
+            });
+        }
         // 处理properteies 特殊属性
-        ensureSpecialValues(context, (List<AdmFloor>) response.getContent(), QUERY);
+        ensureSpecialValues(context, admFloors, QUERY);
         return response;
     }
+    /***
+     * Description: 子类重写,以便处理带buildingId
+     * @param dmpRequest : 中台查询参数
+     * @return : void
+     * @author : lijie
+     * @date :2021/10/28 20:25
+     * Update By lijie 2021/10/28 20:25
+     */
+    @Override
+    protected void processDmpCriteria(QueryCriteria dmpRequest) {
+        ObjectNode criteria = dmpRequest.getCriteria();
+        if (null==criteria){
+            return;
+        }
+        if (criteria.has("buildingId")){
+            // 有建筑id过滤
+            ObjectMapper objectMapper = SpringHelper.getBean(ObjectMapper.class);
+            ObjectNode relationTo = objectMapper.createObjectNode();
+            relationTo.put("graphCode", GraphCodeEnum.ArchSubset.name());
+            relationTo.put("relCode", RelCodeEnum.Bd2Fl.name());
+            relationTo.set("objFrom",criteria.get("buildingId"));
+            criteria.set("relationTo",relationTo);
+            criteria.remove("buildingId");
+        }
+    }
+
     @Override
     public AdmResponse doQueryOutLine(InstanceUrlParam context, AdmQueryCriteria request, Class<AdmFloor> clazz) {
         request.setProjection(null);
@@ -60,7 +115,7 @@ public class AdmFloorServiceImpl extends AbstractAdmBaseServiceImpl<AdmFloor> im
         list.add("infos");
         list.add("properties");
         request.setProjection(list);
-        AdmResponse rs = doQuery(context, request, clazz);
+        AdmResponse rs = query(request);
         List<AdmFloor> vos = (List<AdmFloor>) rs.getContent();
         ensureSpecialValues(context, vos, QUERY);
         vos.forEach(vo->{
@@ -79,7 +134,7 @@ public class AdmFloorServiceImpl extends AbstractAdmBaseServiceImpl<AdmFloor> im
         request.setName(AdmFloor.OBJ_TYPE);
         request.resetRelationCond(false, "ArchSubset", "Bd2Fl", buildingId);
         request.setOrders("floorSequenceId desc");
-        AdmResponse rs = doQuery(context, request, AdmFloor.class);
+        AdmResponse rs = query(request);
         List<AdmFloor> vos = (List<AdmFloor>) rs.getContent();
         ensureSpecialValues(context, vos, QUERY);
         return vos;

+ 4 - 7
src/main/java/com/persagy/proxy/report/controller/AdmEquipFloorController.java

@@ -6,6 +6,7 @@ import com.persagy.proxy.adm.request.AdmResponse;
 import com.persagy.proxy.object.service.IAdmFloorService;
 import com.persagy.proxy.adm.utils.AdmContextUtil;
 import com.persagy.proxy.common.entity.InstanceUrlParam;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
@@ -17,13 +18,11 @@ import org.springframework.web.bind.annotation.*;
 
 @RestController
 @RequestMapping("/floor")
+@RequiredArgsConstructor
 public class AdmEquipFloorController {
 
-    @Autowired
-    private IAdmFloorService service;
+    private final IAdmFloorService service;
 
-    @Value("${middleware.group.code}")
-    private String groupCode;
     /**
      * 查询楼层信息
      * 查询楼层信息,以及使用同一个模型文件处理情况
@@ -31,8 +30,6 @@ public class AdmEquipFloorController {
      */
     @PostMapping("/query")
     public AdmResponse query(@RequestBody AdmQueryCriteria criteria) {
-        InstanceUrlParam context = AdmContextUtil.toDmpContext();
-        criteria.setName(AdmFloor.OBJ_TYPE);
-        return service.doQuery(context, criteria, AdmFloor.class);
+        return service.query(criteria);
     }
 }