Browse Source

实现源末端关系配置的逻辑处理

lijie 3 years ago
parent
commit
b796cbd107

+ 18 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/DigitalEquipClassRelController.java

@@ -3,6 +3,7 @@ package com.persagy.dmp.rwd.define.controller;
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.basic.dto.DefineRequestData;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.common.constant.CommonConstant;
@@ -53,6 +54,8 @@ public class DigitalEquipClassRelController {
         if(criteria == null) {
             throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
         }
+        //基础参数校验
+        ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE);
         return service.query(criteria);
     }
     /***
@@ -69,4 +72,19 @@ public class DigitalEquipClassRelController {
         ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
         return ResultHelper.single(service.create(vo));
     }
+    /***
+     * Description: 根据边关系名称查询项目对象类型关系列表
+     * @param defineRequestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.define.entity.DigitalEquipClassRel>>
+     * @author : lijie
+     * @date :2021/9/14 22:51
+     * Update By lijie 2021/9/14 22:51
+     */
+    @PostMapping("/queryListByRelNames")
+    public CommonResult<List<DigitalEquipClassRel>> queryListByRelNames(@RequestBody DefineRequestData defineRequestData) {
+        //基础参数校验
+        ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE);
+        return service.queryListByRelNames(defineRequestData);
+    }
+
 }

+ 10 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/DigitalEquipClassRelService.java

@@ -1,6 +1,7 @@
 package com.persagy.dmp.rwd.define.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.persagy.dmp.basic.dto.DefineRequestData;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.define.entity.DigitalEquipClassRel;
@@ -32,4 +33,13 @@ public interface DigitalEquipClassRelService extends IService<DigitalEquipClassR
      * Update By lijie 2021/9/14 21:14
      */
     CommonResult<List<DigitalEquipClassRel>> query(QueryCriteria criteria);
+    /***
+     * Description: 根据边关系名称查询项目对象类型关系列表
+     * @param defineRequestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.define.entity.DigitalEquipClassRel>>
+     * @author : lijie
+     * @date :2021/9/15 11:38
+     * Update By lijie 2021/9/15 11:38
+     */
+    CommonResult<List<DigitalEquipClassRel>> queryListByRelNames(DefineRequestData defineRequestData);
 }

+ 86 - 6
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/DigitalEquipClassRelServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.persagy.dmp.basic.dto.DefineRequestData;
 import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
@@ -72,10 +73,7 @@ implements DigitalEquipClassRelService {
         Map<String, RelationDefine> relationDefineMap = new HashMap<>();
         if (CollUtil.isNotEmpty(calcNames)){
             // 根据名称查询图类型编码和关系类型编码
-            LambdaQueryWrapper<RelationDefine> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.in(RelationDefine::getName,calcNames);
-            queryWrapper.eq(RelationDefine::getValid,true);
-            List<RelationDefine> defines = relationDefineService.queryByCondition(queryWrapper);
+            List<RelationDefine> defines = queryRelationDefinesByRelNames(calcNames);
             if (CollUtil.isEmpty(defines)){
                 throw new BusinessException(ResponseCode.A0402.getCode(),"关系类型编码不存在");
             }
@@ -100,6 +98,7 @@ implements DigitalEquipClassRelService {
                 vo.setRelCode(relationDefine.getCode());
             }
             vo.setProjectId(AppContext.getContext().getProjectId());
+            vo.setGroupCode(AppContext.getContext().getGroupCode());
             vo.setCreator(AppContext.getContext().getAccountId());
             updateWrapper.or(wrapper->{
                 wrapper.eq(DigitalEquipClassRel::getGraphCode,vo.getGraphCode());
@@ -116,6 +115,23 @@ implements DigitalEquipClassRelService {
         this.saveBatch(voList);
         return voList;
     }
+    /***
+     * Description: 根据边名称查询边定义数据
+     * @param calcNames :边名称列表
+     * @return : java.util.List<com.persagy.dmp.define.entity.RelationDefine>
+     * @author : lijie
+     * @date :2021/9/15 11:41
+     * Update By lijie 2021/9/15 11:41
+     */
+    private List<RelationDefine> queryRelationDefinesByRelNames(Set<String> calcNames) {
+        if (CollUtil.isEmpty(calcNames)){
+            return new ArrayList<>();
+        }
+        LambdaQueryWrapper<RelationDefine> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(RelationDefine::getName,calcNames);
+        queryWrapper.eq(RelationDefine::getValid,true);
+        return relationDefineService.queryByCondition(queryWrapper);
+    }
 
     /***
      * Description: 根据条件查询设备类关系对象列表
@@ -160,8 +176,72 @@ implements DigitalEquipClassRelService {
         });
         return ResultHelper.multi(page.getRecords(), page.getTotal());
     }
-
-
+    /***
+     * Description: 根据边关系名称查询项目对象类型关系列表
+     * @param defineRequestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.define.entity.DigitalEquipClassRel>>
+     * @author : lijie
+     * @date :2021/9/15 11:38
+     * Update By lijie 2021/9/15 11:38
+     */
+    @Override
+    public CommonResult<List<DigitalEquipClassRel>> queryListByRelNames(DefineRequestData defineRequestData) {
+        Map<String, RelationDefine> defineMap = queryRelationDefineMapByRelNames(defineRequestData.getRelNames());
+        LambdaQueryWrapper<DigitalEquipClassRel> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(DigitalEquipClassRel::getValid,true);
+        queryWrapper.eq(DigitalEquipClassRel::getGroupCode,AppContext.getContext().getGroupCode());
+        if (StrUtil.isNotBlank(AppContext.getContext().getProjectId())){
+            queryWrapper.eq(DigitalEquipClassRel::getProjectId,AppContext.getContext().getProjectId());
+        }
+        Map<String, String> relNameMap = new HashMap<>();
+        if (CollUtil.isNotEmpty(defineRequestData.getRelNames())){
+            queryWrapper.and(wrapper->{
+                Set<String> relNames = defineRequestData.getRelNames();
+                for (String relName : relNames) {
+                    if (!defineMap.containsKey(relName)){
+                        continue;
+                    }
+                    RelationDefine relationDefine = defineMap.get(relName);
+                    relNameMap.put(relationDefine.getGraphCode()+StrUtil.UNDERLINE+relationDefine.getCode(),relationDefine.getName());
+                    wrapper.or(subWrapper->{
+                        subWrapper.eq(DigitalEquipClassRel::getGraphCode,relationDefine.getGraphCode());
+                        subWrapper.eq(DigitalEquipClassRel::getRelCode,relationDefine.getCode());
+                    });
+                }
+            });
+        }
+        List<DigitalEquipClassRel> digitalEquipClassRels = this.list(queryWrapper);
+        if (CollUtil.isEmpty(digitalEquipClassRels)){
+            return ResultHelper.multi(new ArrayList<>(),0L);
+        }
+        // 填充名称
+        digitalEquipClassRels.forEach(digitalEquipClassRel ->
+                digitalEquipClassRel.setCalcName(relNameMap
+                        .getOrDefault(digitalEquipClassRel.getGraphCode()+StrUtil.UNDERLINE+digitalEquipClassRel.getRelCode(),"")));
+        return ResultHelper.multi(digitalEquipClassRels,digitalEquipClassRels.size());
+    }
+    /***
+     * Description: 根据边类型名称
+     * @param relNames : 
+     * @return : java.util.Map<java.lang.String,com.persagy.dmp.define.entity.RelationDefine>  
+     * @author : lijie
+     * @date :2021/9/15 12:01
+     * Update By lijie 2021/9/15 12:01
+     */
+    private Map<String, RelationDefine> queryRelationDefineMapByRelNames(Set<String> relNames) {
+        if (CollUtil.isEmpty(relNames)){
+            return new HashMap<>();
+        }
+        // 1.根据边类型名称查询边类型定义
+        List<RelationDefine> defines = queryRelationDefinesByRelNames(relNames);
+        if (CollUtil.isEmpty(defines)){
+            return new HashMap<>();
+        }
+        // 获得名称与边类型的映射
+        return defines.stream()
+                .collect(Collectors
+                        .toMap(RelationDefine::getName,define->define,(k1,k2)->k1));
+    }
 }
 
 

File diff suppressed because it is too large
+ 3 - 3
dmp-business/dmp-rwd/src/main/resources/db/init/data.sql


+ 1 - 0
dmp-business/dmp-rwd/src/main/resources/db/init/schema.sql

@@ -193,6 +193,7 @@ PRIMARY KEY (`id`) USING BTREE
 
 CREATE TABLE IF NOT EXISTS `dt_equip_class_rel`  (
  `id` varchar(40) NOT NULL COMMENT '主键,32位UUID',
+ `group_code` varchar(40) NULL DEFAULT NULL COMMENT '集团编码',
  `project_id` varchar(40) NULL DEFAULT NULL COMMENT '项目id',
  `source_equip_code` varchar(40) NULL DEFAULT NULL COMMENT '源端设备类编码',
  `end_equip_code` varchar(40) NULL DEFAULT NULL COMMENT '末端设备类编码',

+ 42 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/dto/DefineRequestData.java

@@ -0,0 +1,42 @@
+package com.persagy.dmp.basic.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.persagy.dmp.basic.validations.QueryClassCodeVadition;
+import com.persagy.dmp.basic.validations.QueryFloorIdVadition;
+import com.persagy.dmp.basic.validations.QuerySpaceIdVadition;
+import com.persagy.dmp.basic.validations.QuerySystemIdVadition;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotBlank;
+import java.util.List;
+import java.util.Set;
+
+/***
+ * @Description: 统一的定义请求体封装对象
+ * @author: lijie
+ * @Date:2020/7/9 10:35
+ * Update By lijie 2020/7/9 10:35
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DefineRequestData {
+
+    /**账号id*/
+    @JsonAlias({"user_id"})
+    @JsonProperty("userId")
+    @JSONField(name = "userId",alternateNames = {"user_id"})
+    private String userId;
+    /** 边类型名称数组 */
+    @JsonAlias({"relNames"})
+    @JsonProperty("relNames")
+    @JSONField(name = "relNames",alternateNames = {"rel_names","relNames"})
+    private Set<String> relNames;
+}

+ 16 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/client/DigitalEquipClassRelClient.java

@@ -1,6 +1,7 @@
 package com.persagy.dmp.define.client;
 
 import com.persagy.dmp.basic.config.DigitalFeignConfig;
+import com.persagy.dmp.basic.dto.DefineRequestData;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.define.entity.DigitalEquipClassRel;
@@ -53,4 +54,19 @@ public interface DigitalEquipClassRelClient {
                                                          @RequestParam("appId") String appId,
                                                          @RequestParam("userId") String userId,
                                                          @RequestBody List<DigitalEquipClassRel> voList);
+    /**
+     * 根据关系名称批量查询项目对象类型关系
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param requestData: 请求参数
+     * @return 项目对象类型关系对象数组
+     */
+    @PostMapping("queryListByRelNames")
+    CommonResult<List<DigitalEquipClassRel>> queryListByRelNames(@RequestParam("groupCode") String groupCode,
+                                                         @RequestParam("projectId") String projectId,
+                                                         @RequestParam("appId") String appId,
+                                                         @RequestParam("userId") String userId,
+                                                         @RequestBody DefineRequestData requestData);
 }

+ 16 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/client/DigitalEquipClassRelFacade.java

@@ -1,6 +1,7 @@
 package com.persagy.dmp.define.client;
 
 import cn.hutool.extra.spring.SpringUtil;
+import com.persagy.dmp.basic.dto.DefineRequestData;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
@@ -58,4 +59,19 @@ public class DigitalEquipClassRelFacade {
         CommonResult<List<DigitalEquipClassRel>> commonResult = client.createBatch(groupCode, projectId, appId, userId, voList);
         return commonResult.getData();
     }
+
+    /**
+     * 查询项目对象类型关系列表
+     * @param groupCode 集团编码
+     * @param projectId 项目ID
+     * @param appId 应用ID
+     * @param userId 用户ID
+     * @param requestData 查询条件
+     * @return 项目对象类型关系对象集合
+     */
+    public static CommonResult<List<DigitalEquipClassRel>> queryListByRelNames(String groupCode, String projectId,
+                                                                               String appId, String userId,
+                                                                               DefineRequestData requestData) {
+        return client.queryListByRelNames(groupCode, projectId, appId, userId, requestData);
+    }
 }

+ 6 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/DigitalEquipClassRel.java

@@ -19,6 +19,12 @@ import java.util.Date;
 public class DigitalEquipClassRel extends AuditableEntity {
 
     /**
+     * 集团编码
+     */
+    @TableField(value = "group_code")
+    private String groupCode;
+
+    /**
      * 项目id
      */
     @TableField(value = "project_id")

+ 13 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalObjectSimpleFacade.java

@@ -1,6 +1,7 @@
 package com.persagy.dmp.digital.client;
 
 import cn.hutool.extra.spring.SpringUtil;
+import com.persagy.dmp.basic.dto.RequestData;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -33,4 +34,16 @@ public class DigitalObjectSimpleFacade {
         CommonResult<List<Map<String, Object>>> result = client.queryExpectScrapCountByProjects(groupCode, appId, userId, projectIds);
         return ResultHelper.getContent(result);
     }
+    /**
+     * 根据对象信息点统计数量
+     * @param groupCode: 集团编码
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param requestData: 请求参数
+     * @return
+     */
+    public static List<Map<String, Object>> queryObjectCountByObjInfos(String groupCode, String appId, String userId, RequestData requestData) {
+        CommonResult<List<Map<String, Object>>> result = client.queryObjectCountByObjInfos(groupCode, appId, userId, requestData);
+        return ResultHelper.getContent(result);
+    }
 }