Procházet zdrojové kódy

fix bug:查询信息点接口返回的classCode存在equipment类型值

lijie před 3 roky
rodič
revize
698ab10d83

+ 88 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectInfoController.java

@@ -33,7 +33,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 /**
  * 对象类型 Controller
@@ -46,6 +48,7 @@ import java.util.List;
 public class ObjectInfoController {
 
     private final IObjectInfoService service;
+    private final IObjectTypeService objectTypeService;
 
     @PostMapping("")
     public CommonResult<List<ObjectInfoDefine>> query(@RequestBody QueryCriteria criteria) {
@@ -57,8 +60,61 @@ public class ObjectInfoController {
         if (null!=objCriteria && objCriteria.size()>0){
             objCriteria.remove(CommonConstant.TYPE);
         }
-        Page<ObjectInfoDefine> page = service.queryByCondition(criteria);
-        return ResultHelper.multi(page.getRecords(), page.getTotal());
+        List<ObjectTypeDefine> objectTypeDefines = queryClassCodes(criteria);
+        // 1.如果传的参数不包含classCode走公共逻辑
+        if (CollUtil.isEmpty(objectTypeDefines)){
+            QueryWrapper<ObjectInfoDefine> wrapper = new QueryWrapper<>();
+            // 添加所属项目条件
+            ConditionUtil.ensureProjectCriteria(wrapper);
+            // 转换查询条件
+            QueryCriteriaHelper.toWrapper(wrapper, criteria, ObjectInfoDefine.class);
+            Page<ObjectInfoDefine> page = QueryCriteriaHelper.toPage(criteria);
+            // 没有排序条件时,按默认条件排序
+            if(CollUtil.isEmpty(page.getOrders())) {
+                wrapper.orderByAsc("show_order");
+            }
+            if(criteria.isOnlyCount()) {
+                page = page.setTotal(service.queryCount(wrapper));
+                return ResultHelper.multi(page.getRecords(), page.getTotal());
+            }
+            /// 20210819 临时处理,优化执行计划,解决Mysql:Out of sort memory问题
+            // wrapper.select("/*+ SET_VAR(sort_buffer_size = 2M) */*");
+            page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
+            return ResultHelper.multi(page.getRecords(), page.getTotal());
+        }
+        // 2.包含classCode则不进行分页并且获取数据集合
+        // 2.1 如果为基础类型、且为平台级,优先级100
+        // 2.2 如果为基础类型、且为集团级,优先级200
+        // 2.3 如果为基础类型、且为项目级,优先级300
+        // 2.4 如果为非基础类型、且为平台级,优先级400
+        // 2.5 如果为非基础类型、且为集团级,优先级500
+        // 2.6 如果为非基础类型、且为项目级,优先级600
+        criteria.getCriteria().remove(ObjectDigital.CLASS_CODE_HUM);
+        List<ObjectInfoDefine> result = new ArrayList<>();
+        for (ObjectTypeDefine objectTypeDefine : objectTypeDefines) {
+            // 获取classCode集合
+            Set<String> classCodes = CollUtil.newHashSet(objectTypeDefine.getCode());
+            if (StrUtil.isNotBlank(objectTypeDefine.getParentCode())){
+                classCodes.add(objectTypeDefine.getParentCode());
+            }
+            if (CollUtil.isEmpty(classCodes)){
+                continue;
+            }
+            QueryWrapper<ObjectInfoDefine> wrapper = new QueryWrapper<>();
+            // 添加所属项目条件
+            ConditionUtil.ensureProjectCriteria(wrapper);
+            // 转换查询条件
+            QueryCriteriaHelper.toWrapper(wrapper, criteria, ObjectInfoDefine.class);
+            wrapper.orderByAsc("show_order");
+            wrapper.in(ObjectDigital.CLASS_CODE,classCodes);
+            List<ObjectInfoDefine> objectInfoDefines = service.queryByClassCodes(wrapper,classCodes);
+            if (CollUtil.isEmpty(objectInfoDefines)){
+                continue;
+            }
+            objectInfoDefines.forEach(objectInfoDefine -> objectInfoDefine.setClassCode(objectTypeDefine.getCode()));
+            result.addAll(objectInfoDefines);
+        }
+        return ResultHelper.multi(result, result.size());
     }
 
     @PostMapping("/create")
@@ -117,6 +173,36 @@ public class ObjectInfoController {
         return ResultHelper.success();
     }
 
+    /***
+     * Description: 处理对象类型,如果父级id存在则加上父级id
+     * @param criteria : 查询参数
+     * @return : void
+     * @author : lijie
+     * @date :2021/9/9 18:25
+     * Update By lijie 2021/9/9 18:25
+     */
+    private List<ObjectTypeDefine> queryClassCodes(QueryCriteria criteria) {
+        ObjectNode objectNode = criteria.getCriteria();
+        if (!objectNode.has(ObjectDigital.CLASS_CODE_HUM)){
+            return null;
+        }
+        JsonNode jsonNode = objectNode.get(ObjectDigital.CLASS_CODE_HUM);
+        QueryCriteria typeCriteria = new QueryCriteria();
+        typeCriteria.setCriteria(SpringHelper.getBean(ObjectMapper.class).createObjectNode());
+        typeCriteria.getCriteria().set("code",jsonNode);
+        typeCriteria.getCriteria().put("valid",true);
+        QueryWrapper<ObjectTypeDefine> wrapper = new QueryWrapper<>();
+        // 添加所属项目条件
+        ConditionUtil.ensureProjectCriteria(wrapper);
+        // 转换查询条件
+        QueryCriteriaHelper.toWrapper(wrapper, typeCriteria, ObjectTypeDefine.class);
+        List<ObjectTypeDefine> objectTypeDefines = objectTypeService.queryByCondition(wrapper);
+        if (CollUtil.isEmpty(objectTypeDefines)){
+            return null;
+        }
+        return objectTypeDefines;
+    }
+
     /**
      * 创建默认条件
      * @param voList

+ 11 - 11
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/IObjectInfoService.java

@@ -9,6 +9,7 @@ import com.persagy.dmp.define.entity.ObjectTypeDefine;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * 信息点 接口
@@ -67,16 +68,6 @@ public interface IObjectInfoService {
      */
     Page<ObjectInfoDefine> queryByCondition(Page<ObjectInfoDefine> page, Wrapper<ObjectInfoDefine> queryWrapper);
 
-    /***
-     * Description: 按条件查询
-     * @param criteria : 查询条件
-     * @return : com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.persagy.dmp.define.entity.ObjectInfoDefine>
-     * @author : lijie
-     * @date :2021/10/20 11:01
-     * Update By lijie 2021/10/20 11:01
-     */
-    Page<ObjectInfoDefine> queryByCondition(QueryCriteria criteria);
-
     /**
      * 新增
      * @param voList 待新增数据
@@ -96,5 +87,14 @@ public interface IObjectInfoService {
      * @param idList 主键
      */
     void delete(List<String> idList);
-
+    /***
+     * Description: 根据筛选条件和对象类型编码查询信息点数据
+     * @param wrapper : 筛选条件
+     * @param classCodes : 对象类型编码集合
+     * @return : java.util.List<com.persagy.dmp.define.entity.ObjectInfoDefine>
+     * @author : lijie
+     * @date :2021/10/28 14:51
+     * Update By lijie 2021/10/28 14:51
+     */
+    List<ObjectInfoDefine> queryByClassCodes(QueryWrapper<ObjectInfoDefine> wrapper, Set<String> classCodes);
 }

+ 13 - 101
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/ObjectInfoServiceImpl.java

@@ -53,7 +53,6 @@ public class ObjectInfoServiceImpl implements IObjectInfoService {
 
     private final ObjectInfoMapper dao;
     private final DigitalMessageHelper messageSender;
-    private final IObjectTypeService objectTypeService;
 
     @Override
     public ObjectInfoDefine load(String id) {
@@ -101,106 +100,6 @@ public class ObjectInfoServiceImpl implements IObjectInfoService {
     public Page<ObjectInfoDefine> queryByCondition(Page<ObjectInfoDefine> page, Wrapper<ObjectInfoDefine> queryWrapper) {
         return dao.selectPage(page, queryWrapper);
     }
-    /***
-     * Description: 按条件查询
-     * @param criteria : 查询条件
-     * @return : com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.persagy.dmp.define.entity.ObjectInfoDefine>
-     * @author : lijie
-     * @date :2021/10/20 11:01
-     * Update By lijie 2021/10/20 11:01
-     */
-    @Override
-    public Page<ObjectInfoDefine> queryByCondition(QueryCriteria criteria) {
-        List<ObjectTypeDefine> objectTypeDefines = queryClassCodes(criteria);
-        // 1.如果传的参数不包含classCode走公共逻辑
-        if (CollUtil.isEmpty(objectTypeDefines)){
-            QueryWrapper<ObjectInfoDefine> wrapper = new QueryWrapper<>();
-            // 添加所属项目条件
-            ConditionUtil.ensureProjectCriteria(wrapper);
-            // 转换查询条件
-            QueryCriteriaHelper.toWrapper(wrapper, criteria, ObjectInfoDefine.class);
-            Page<ObjectInfoDefine> page = QueryCriteriaHelper.toPage(criteria);
-            // 没有排序条件时,按默认条件排序
-            if(CollUtil.isEmpty(page.getOrders())) {
-                wrapper.orderByAsc("show_order");
-            }
-            if(criteria.isOnlyCount()) {
-                return page.setTotal(queryCount(wrapper));
-            }
-            /// 20210819 临时处理,优化执行计划,解决Mysql:Out of sort memory问题
-            // wrapper.select("/*+ SET_VAR(sort_buffer_size = 2M) */*");
-            return queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
-        }
-        // 2.包含classCode则不进行分页并且获取数据集合
-        // 2.1 如果为基础类型、且为平台级,优先级100
-        // 2.2 如果为基础类型、且为集团级,优先级200
-        // 2.3 如果为基础类型、且为项目级,优先级300
-        // 2.4 如果为非基础类型、且为平台级,优先级400
-        // 2.5 如果为非基础类型、且为集团级,优先级500
-        // 2.6 如果为非基础类型、且为项目级,优先级600
-        criteria.getCriteria().remove(ObjectDigital.CLASS_CODE_HUM);
-        List<ObjectInfoDefine> result = new ArrayList<>();
-        for (ObjectTypeDefine objectTypeDefine : objectTypeDefines) {
-            // 获取classCode集合
-            Set<String> classCodes = CollUtil.newHashSet(objectTypeDefine.getCode());
-            if (StrUtil.isNotBlank(objectTypeDefine.getParentCode())){
-                classCodes.add(objectTypeDefine.getParentCode());
-            }
-            if (CollUtil.isEmpty(classCodes)){
-                continue;
-            }
-            QueryWrapper<ObjectInfoDefine> wrapper = new QueryWrapper<>();
-            // 添加所属项目条件
-            ConditionUtil.ensureProjectCriteria(wrapper);
-            // 转换查询条件
-            QueryCriteriaHelper.toWrapper(wrapper, criteria, ObjectInfoDefine.class);
-            wrapper.orderByAsc("show_order");
-            wrapper.in(ObjectDigital.CLASS_CODE,classCodes);
-            List<ObjectInfoDefine> objectInfoDefines = dao.queryByClassCodes(wrapper,classCodes);
-            if (CollUtil.isEmpty(objectInfoDefines)){
-                continue;
-            }
-            objectInfoDefines.forEach(objectInfoDefine -> objectInfoDefine.setClassCode(objectInfoDefine.getClassCode()));
-            result.addAll(objectInfoDefines);
-        }
-        Page<ObjectInfoDefine> pageResult = new Page<>();
-        pageResult.setRecords(result);
-        pageResult.setSize(result.size());
-        pageResult.setTotal(result.size());
-        pageResult.setCurrent(1L);
-        return pageResult;
-    }
-
-    /***
-     * Description: 处理对象类型,如果父级id存在则加上父级id
-     * @param criteria : 查询参数
-     * @return : void
-     * @author : lijie
-     * @date :2021/9/9 18:25
-     * Update By lijie 2021/9/9 18:25
-     */
-    private List<ObjectTypeDefine> queryClassCodes(QueryCriteria criteria) {
-        ObjectNode objectNode = criteria.getCriteria();
-        if (!objectNode.has(ObjectDigital.CLASS_CODE_HUM)){
-            return null;
-        }
-        JsonNode jsonNode = objectNode.get(ObjectDigital.CLASS_CODE_HUM);
-        QueryCriteria typeCriteria = new QueryCriteria();
-        typeCriteria.setCriteria(SpringHelper.getBean(ObjectMapper.class).createObjectNode());
-        typeCriteria.getCriteria().set("code",jsonNode);
-        typeCriteria.getCriteria().put("valid",true);
-        QueryWrapper<ObjectTypeDefine> wrapper = new QueryWrapper<>();
-        // 添加所属项目条件
-        ConditionUtil.ensureProjectCriteria(wrapper);
-        // 转换查询条件
-        QueryCriteriaHelper.toWrapper(wrapper, typeCriteria, ObjectTypeDefine.class);
-        List<ObjectTypeDefine> objectTypeDefines = objectTypeService.queryByCondition(wrapper);
-        if (CollUtil.isEmpty(objectTypeDefines)){
-            return null;
-        }
-        return objectTypeDefines;
-    }
-
 
     @Override
     public List<ObjectInfoDefine> insert(List<ObjectInfoDefine> voList) {
@@ -311,4 +210,17 @@ public class ObjectInfoServiceImpl implements IObjectInfoService {
             messageSender.sendMessage(DigitalMessageConstant.OPERATE_AFTER_DELETE, null, dbVO, false);
         });
     }
+    /***
+     * Description: 根据筛选条件和对象类型编码查询信息点数据
+     * @param wrapper : 筛选条件
+     * @param classCodes : 对象类型编码集合
+     * @return : java.util.List<com.persagy.dmp.define.entity.ObjectInfoDefine>
+     * @author : lijie
+     * @date :2021/10/28 14:51
+     * Update By lijie 2021/10/28 14:51
+     */
+    @Override
+    public List<ObjectInfoDefine> queryByClassCodes(QueryWrapper<ObjectInfoDefine> wrapper, Set<String> classCodes) {
+        return dao.queryByClassCodes(wrapper,classCodes);
+    }
 }