Browse Source

Merge remote-tracking branch 'origin/develop' into develop

# Conflicts:
#	dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectInfoController.java
#	dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectTypeController.java
#	dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectDigitalController.java
#	dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/ObjectTypeDefine.java
linhuili 3 years ago
parent
commit
8a03efaf20
48 changed files with 1137 additions and 98 deletions
  1. 13 0
      dmp-business/dmp-dic/src/main/java/com/persagy/dmp/dic/controller/DictDataController.java
  2. 43 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/dto/RequestData.java
  3. 8 2
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/GraphDefineController.java
  4. 9 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectInfoController.java
  5. 16 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectTypeController.java
  6. 9 4
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/RelationDefineController.java
  7. 7 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/IGraphDefineService.java
  8. 7 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/IObjectInfoService.java
  9. 7 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/IObjectTypeService.java
  10. 7 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/IRelationDefineService.java
  11. 5 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/GraphDefineServiceImpl.java
  12. 10 4
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/ObjectInfoServiceImpl.java
  13. 6 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/ObjectTypeServiceImpl.java
  14. 6 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/RelationDefineServiceImpl.java
  15. 51 3
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectDigitalController.java
  16. 8 2
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectRelationController.java
  17. 4 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/entity/ObjectDigital.java
  18. 8 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/IObjectDigitalService.java
  19. 7 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/IObjectRelationService.java
  20. 35 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/ProjectBusinessService.java
  21. 38 32
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ObjectDigitalServiceImpl.java
  22. 5 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ObjectRelationServiceImpl.java
  23. 79 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ProjectBusinessServiceImpl.java
  24. 3 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/utils/ObjectDigitalCriteriaHelper.java
  25. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/iot/service/impl/CurrentIotServiceImpl.java
  26. 3 1
      dmp-common/src/main/java/com/persagy/dmp/common/config/CommonWebConfigurer.java
  27. 0 7
      dmp-common/src/main/java/com/persagy/dmp/common/handler/AppContextHandler.java
  28. 16 2
      dmp-common/src/main/java/com/persagy/dmp/common/handler/CommonExceptionHandler.java
  29. 1 1
      dmp-common/src/main/java/com/persagy/dmp/common/utils/ResultHelper.java
  30. 0 1
      dmp-comp/dmp-digital-starter/pom.xml
  31. 6 0
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/config/DigitalFeignConfig.java
  32. 16 0
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/config/FeignInterceptor.java
  33. 28 0
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/dto/RequestData.java
  34. 1 0
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/model/QueryCriteria.java
  35. 1 1
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/utils/QueryCriteriaHelper.java
  36. 18 1
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/client/DigitalDefineClient.java
  37. 5 9
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/GraphDefine.java
  38. 2 5
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/ObjectInfoDefine.java
  39. 11 15
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/ObjectTypeDefine.java
  40. 1 2
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/RelationDefine.java
  41. 59 0
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalObjectClient.java
  42. 53 0
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalObjectFacade.java
  43. 52 0
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/entity/ObjectDigital.java
  44. 7 1
      dmp-comp/dmp-mybatis/src/main/java/com/persagy/dmp/mybatis/config/MybatisPlusConfig.java
  45. 5 0
      dmp-server/pom.xml
  46. 126 0
      dmp-server/src/main/java/com/persagy/aspects/RequestLogAspect.java
  47. 222 0
      dmp-server/src/main/java/com/persagy/utils/JacksonMapper.java
  48. 112 0
      dmp-server/src/main/resources/logback-spring.xml

+ 13 - 0
dmp-business/dmp-dic/src/main/java/com/persagy/dmp/dic/controller/DictDataController.java

@@ -2,6 +2,7 @@ package com.persagy.dmp.dic.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.common.constant.ResponseCode;
@@ -17,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -31,6 +33,9 @@ public class DictDataController {
     @Autowired
     private DictDataService service;
 
+    private static final String STATUS="status";
+    private static final String VALID="valid";
+
     @Deprecated
     @PostMapping("/query")
     public CommonResult<List<DictData>> query(@RequestBody QueryCriteria criteria) {
@@ -38,6 +43,14 @@ public class DictDataController {
             throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
         }
         QueryWrapper<DictData> wrapper = new QueryWrapper<>();
+        ObjectNode objCriteria = criteria.getCriteria();
+        if (null!=objCriteria && objCriteria.size()>0){
+            // 2021年8月18日19:29:32 兼容旧的逻辑.因为字段改为valid了
+            if(objCriteria.has(STATUS)){
+                objCriteria.put(VALID,objCriteria.get(STATUS));
+                objCriteria.remove(STATUS);
+            }
+        }
         // 转换查询条件
         QueryCriteriaHelper.toWrapper(wrapper, criteria);
         Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);

+ 43 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/dto/RequestData.java

@@ -0,0 +1,43 @@
+package com.persagy.dmp.rwd.basic.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+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 RequestData {
+
+    /**账号id*/
+    @JsonAlias({"user_id"})
+    @JsonProperty("userId")
+    @JSONField(name = "userId",alternateNames = {"user_id"})
+    private String userId;
+    /**管理分区id*/
+    @JsonAlias({"group_manage_zone_ids"})
+    @JsonProperty("groupManageZoneIds")
+    @JSONField(name = "groupManageZoneIds",alternateNames = {"group_manage_zone_ids"})
+    private Set<String> groupManageZoneIds;
+
+
+}

+ 8 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/GraphDefineController.java

@@ -3,12 +3,12 @@ package com.persagy.dmp.rwd.define.controller;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.persagy.dmp.basic.model.QueryCriteria;
-import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.define.entity.GraphDefine;
+import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.rwd.define.service.IGraphDefineService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,7 +40,13 @@ public class GraphDefineController {
         QueryWrapper<GraphDefine> wrapper = new QueryWrapper<>();
         // 转换查询条件
         QueryCriteriaHelper.toWrapper(wrapper, criteria);
-        Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
+        Page page = QueryCriteriaHelper.toPage(criteria);
+        if(criteria.isOnlyCount()) {
+            Integer total = service.queryCount(wrapper);
+            page.setTotal(total);
+        } else {
+            page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
+        }
         return ResultHelper.multi(page.getRecords(), page.getTotal());
     }
 

+ 9 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectInfoController.java

@@ -13,6 +13,7 @@ import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.define.entity.ObjectInfoDefine;
 import com.persagy.dmp.mybatis.utils.ConditionUtil;
+import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.rwd.define.service.IObjectInfoService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -51,7 +52,14 @@ public class ObjectInfoController {
         if(CollUtil.isEmpty(page.getOrders())) {
             wrapper.orderByAsc("show_order");
         }
-        page = service.queryByCondition(page, wrapper);
+        if(criteria.isOnlyCount()) {
+            Integer total = service.queryCount(wrapper);
+            page.setTotal(total);
+        } else {
+            // 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());
     }
 

+ 16 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectTypeController.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.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.common.constant.CommonConstant;
@@ -13,6 +14,7 @@ import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.define.entity.ObjectTypeDefine;
 import com.persagy.dmp.mybatis.utils.ConditionUtil;
+import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.rwd.define.service.IObjectTypeService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,17 +38,30 @@ public class ObjectTypeController {
     @Autowired
     private IObjectTypeService service;
 
+    private final static String TYPE = "type";
+
     @PostMapping("")
     public CommonResult<List<ObjectTypeDefine>> query(@RequestBody QueryCriteria criteria) {
         if(criteria == null) {
             throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
         }
+        // 2021年8月18日20:06:24 兼容旧的查询
+        ObjectNode objCriteria = criteria.getCriteria();
+        if (null!=objCriteria && objCriteria.size()>0){
+            objCriteria.remove(TYPE);
+        }
         QueryWrapper<ObjectTypeDefine> wrapper = new QueryWrapper<>();
         // 添加所属项目条件
         ConditionUtil.ensureProjectCriteria(wrapper);
         // 转换查询条件
         QueryCriteriaHelper.toWrapper(wrapper, criteria);
-        Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
+        Page page = QueryCriteriaHelper.toPage(criteria);
+        if(criteria.isOnlyCount()) {
+            Integer total = service.queryCount(wrapper);
+            page.setTotal(total);
+        } else {
+            page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
+        }
         return ResultHelper.multi(page.getRecords(), page.getTotal());
     }
 

+ 9 - 4
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/RelationDefineController.java

@@ -3,13 +3,12 @@ package com.persagy.dmp.rwd.define.controller;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.persagy.dmp.basic.model.QueryCriteria;
-import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.define.entity.RelationDefine;
-import com.persagy.dmp.mybatis.utils.ConditionUtil;
+import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.rwd.define.service.IRelationDefineService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,10 +39,16 @@ public class RelationDefineController {
         }
         QueryWrapper<RelationDefine> wrapper = new QueryWrapper<>();
         // 添加所属项目条件
-        ConditionUtil.ensureProjectCriteria(wrapper);
+        // ConditionUtil.ensureProjectCriteria(wrapper);
         // 转换查询条件
         QueryCriteriaHelper.toWrapper(wrapper, criteria);
-        Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
+        Page page = QueryCriteriaHelper.toPage(criteria);
+        if(criteria.isOnlyCount()) {
+            Integer total = service.queryCount(wrapper);
+            page.setTotal(total);
+        } else {
+            page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
+        }
         return ResultHelper.multi(page.getRecords(), page.getTotal());
     }
 

+ 7 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/IGraphDefineService.java

@@ -21,6 +21,13 @@ public interface IGraphDefineService {
     List<GraphDefine> queryByCondition(Wrapper<GraphDefine> queryWrapper);
 
     /**
+     * 按条件计数
+     * @param queryWrapper 查询条件
+     * @return 结果数量
+     */
+    Integer queryCount(Wrapper<GraphDefine> queryWrapper);
+
+    /**
      * 按条件查询
      * @param page 分页条件
      * @param queryWrapper 查询条件

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

@@ -43,6 +43,13 @@ public interface IObjectInfoService {
     Map<String, Map<String, ObjectInfoDefine>> queryByTypes(List<String> typeCodeList);
 
     /**
+     * 按条件计数
+     * @param queryWrapper 查询条件
+     * @return 结果数量
+     */
+    Integer queryCount(Wrapper<ObjectInfoDefine> queryWrapper);
+
+    /**
      * 按条件查询
      * @param queryWrapper 查询条件
      * @return 列表

+ 7 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/IObjectTypeService.java

@@ -38,6 +38,13 @@ public interface IObjectTypeService {
     Page queryByProjectAndApp(Page page, String projectId, String appId);
 
     /**
+     * 按条件计数
+     * @param queryWrapper 查询条件
+     * @return 结果数量
+     */
+    Integer queryCount(Wrapper<ObjectTypeDefine> queryWrapper);
+
+    /**
      * 按条件查询
      * @param queryWrapper 查询条件
      * @return 列表

+ 7 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/IRelationDefineService.java

@@ -14,6 +14,13 @@ import java.util.List;
 public interface IRelationDefineService {
 
     /**
+     * 按条件计数
+     * @param queryWrapper 查询条件
+     * @return 结果数量
+     */
+    Integer queryCount(Wrapper<RelationDefine> queryWrapper);
+
+    /**
      * 按条件查询
      * @param queryWrapper 查询条件
      * @return 列表

+ 5 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/GraphDefineServiceImpl.java

@@ -30,6 +30,11 @@ public class GraphDefineServiceImpl implements IGraphDefineService {
     }
 
     @Override
+    public Integer queryCount(Wrapper<GraphDefine> queryWrapper) {
+        return dao.selectCount(queryWrapper);
+    }
+
+    @Override
     public Page queryByCondition(Page page, Wrapper<GraphDefine> queryWrapper) {
         return dao.selectPage(page, queryWrapper);
     }

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

@@ -7,14 +7,15 @@ import cn.hutool.core.text.StrFormatter;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.persagy.dmp.rwd.basic.constant.DigitalMessageConstant;
-import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
-import com.persagy.dmp.rwd.define.dao.ObjectInfoMapper;
-import com.persagy.dmp.rwd.define.service.IObjectInfoService;
 import com.persagy.dmp.common.constant.ValidEnum;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.define.entity.GraphDefine;
 import com.persagy.dmp.define.entity.ObjectInfoDefine;
+import com.persagy.dmp.rwd.basic.constant.DigitalMessageConstant;
+import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
+import com.persagy.dmp.rwd.define.dao.ObjectInfoMapper;
+import com.persagy.dmp.rwd.define.service.IObjectInfoService;
 import com.persagy.dmp.rwd.parser.service.InfoDataFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -76,6 +77,11 @@ public class ObjectInfoServiceImpl implements IObjectInfoService {
     }
 
     @Override
+    public Integer queryCount(Wrapper<ObjectInfoDefine> queryWrapper) {
+        return dao.selectCount(queryWrapper);
+    }
+
+    @Override
     public Page queryByCondition(Page page, Wrapper<ObjectInfoDefine> queryWrapper) {
         return dao.selectPage(page, queryWrapper);
     }

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

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.persagy.dmp.common.constant.ValidEnum;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.define.entity.ObjectInfoDefine;
 import com.persagy.dmp.define.entity.ObjectTypeDefine;
 import com.persagy.dmp.mybatis.utils.ConditionUtil;
 import com.persagy.dmp.rwd.basic.constant.DigitalMessageConstant;
@@ -94,6 +95,11 @@ public class ObjectTypeServiceImpl implements IObjectTypeService {
     }
 
     @Override
+    public Integer queryCount(Wrapper<ObjectTypeDefine> queryWrapper) {
+        return dao.selectCount(queryWrapper);
+    }
+
+    @Override
     public Page queryByCondition(Page page, Wrapper<ObjectTypeDefine> queryWrapper) {
         return dao.selectPage(page, queryWrapper);
     }

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

@@ -3,9 +3,9 @@ package com.persagy.dmp.rwd.define.service.impl;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.persagy.dmp.common.constant.ValidEnum;
+import com.persagy.dmp.define.entity.RelationDefine;
 import com.persagy.dmp.rwd.define.dao.RelationDefineMapper;
 import com.persagy.dmp.rwd.define.service.IRelationDefineService;
-import com.persagy.dmp.define.entity.RelationDefine;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -30,6 +30,11 @@ public class RelationDefineServiceImpl implements IRelationDefineService {
     }
 
     @Override
+    public Integer queryCount(Wrapper<RelationDefine> queryWrapper) {
+        return dao.selectCount(queryWrapper);
+    }
+
+    @Override
     public Page queryByCondition(Page page, Wrapper<RelationDefine> queryWrapper) {
         return dao.selectPage(page, queryWrapper);
     }

+ 51 - 3
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectDigitalController.java

@@ -7,7 +7,6 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.basic.utils.JsonNodeUtils;
-import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.common.constant.CommonConstant;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.context.AppContext;
@@ -16,8 +15,11 @@ import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ParamCheckUtil;
 import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.mybatis.utils.ConditionUtil;
+import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
+import com.persagy.dmp.rwd.basic.dto.RequestData;
 import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
 import com.persagy.dmp.rwd.digital.service.IObjectDigitalService;
+import com.persagy.dmp.rwd.digital.service.ProjectBusinessService;
 import com.persagy.dmp.rwd.digital.utils.ObjectDigitalCriteriaHelper;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,14 +42,17 @@ public class ObjectDigitalController{
 
     @Autowired
     private IObjectDigitalService service;
+    @Autowired
+    private ProjectBusinessService projectBusinessService;
 
     @PostMapping("/query")
+    @Deprecated
     public CommonResult<List<ObjectNode>> query(@RequestBody QueryCriteria criteria) {
         if(criteria == null) {
             throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
         }
         //基础参数校验
-        ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
+        ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE);
 
         QueryWrapper<ObjectDigital> wrapper = new QueryWrapper<>();
         // 添加所属项目条件
@@ -56,13 +61,20 @@ public class ObjectDigitalController{
         ObjectDigitalCriteriaHelper.ensureExtraCond(criteria.getCriteria());
         // 转换查询条件
         QueryCriteriaHelper.toWrapper(wrapper, criteria);
-        Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
+        Page page = QueryCriteriaHelper.toPage(criteria);
+        if(criteria.isOnlyCount()) {
+            Integer total = service.queryCount(wrapper);
+            page.setTotal(total);
+        } else {
+            page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
+        }
         // 处理扩展属性
         List<ObjectNode> records = JsonNodeUtils.toListNode(page.getRecords(), ObjectDigital.EXTRA_COLUMN, criteria.getWithColumns());
         return ResultHelper.multi(records, page.getTotal());
     }
 
     @PostMapping("/createOne")
+    @Deprecated
     public CommonResult<ObjectDigital> create(@Valid @RequestBody ObjectNode node){
         //基础参数校验
         ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
@@ -76,6 +88,7 @@ public class ObjectDigitalController{
     }
 
     @PostMapping("/create")
+    @Deprecated
     public CommonResult<List<ObjectDigital>> createBatch(@Valid @RequestBody ArrayNode array){
         //基础参数校验
         ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
@@ -88,6 +101,7 @@ public class ObjectDigitalController{
     }
 
     @PostMapping("/updateOne")
+    @Deprecated
     public CommonResult<ObjectDigital> update(@Valid @RequestBody ObjectNode node){
         //基础参数校验
         ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
@@ -101,6 +115,7 @@ public class ObjectDigitalController{
     }
 
     @PostMapping("/update")
+    @Deprecated
     public CommonResult<List<ObjectDigital>> updateBatch(@Valid @RequestBody ArrayNode array){
         //基础参数校验
         ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
@@ -113,6 +128,7 @@ public class ObjectDigitalController{
     }
 
     @PostMapping("/deleteOne")
+    @Deprecated
     public CommonResult delete(@RequestBody String id){
         if(StringUtils.isEmpty(id)){
             throw new BusinessException(ResponseCode.A0400.getCode(), "id不能为空");
@@ -122,6 +138,9 @@ public class ObjectDigitalController{
     }
 
     @PostMapping("/delete")
+    @Deprecated
+    public CommonResult deleteBatch(@RequestBody List<String> id){
+        service.delete(id);
     public CommonResult deleteBatch(@RequestBody List<String> ids){
         if(ids == null || ids.size()<=0){
             throw new BusinessException(ResponseCode.A0400.getCode(), "id不能为空");
@@ -129,6 +148,35 @@ public class ObjectDigitalController{
         service.delete(ids);
         return ResultHelper.success();
     }
+    /***
+     * Description: 根据项目id集合批量查询项目信息
+     * @param idList : 项目id集合
+     * @return : com.persagy.dmp.common.model.response.CommonResult<com.fasterxml.jackson.databind.node.ObjectNode>
+     * @author : lijie
+     * @date :2021/8/18 15:55
+     * Update By lijie 2021/8/18 15:55
+     */
+    @PostMapping("/batchQueryProjectByIds")
+    public CommonResult<List<ObjectDigital>> batchQueryProjectByIds(@RequestBody List<String> idList) {
+        //基础参数校验
+        ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE);
+        return projectBusinessService.batchQueryProjectByIds(idList);
+    }
+    /***
+     * Description: 根据管理分区id批量查询项目信息
+     * @param requestData : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<com.fasterxml.jackson.databind.node.ObjectNode>
+     * @author : lijie
+     * @date :2021/8/18 15:55
+     * Update By lijie 2021/8/18 15:55
+     */
+    @PostMapping("/batchQueryProjectByGroupManageZoneIds")
+    public CommonResult<List<ObjectDigital>> batchQueryProjectByGroupManageZoneIds(@RequestBody RequestData requestData) {
+        //基础参数校验
+        ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE);
+        return projectBusinessService.batchQueryProjectByGroupManageZoneIds(requestData.getGroupManageZoneIds());
+    }
+
 
     /**
      * 创建默认条件

+ 8 - 2
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectRelationController.java

@@ -4,7 +4,6 @@ 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.model.QueryCriteria;
-import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.common.constant.CommonConstant;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.context.AppContext;
@@ -13,6 +12,7 @@ import com.persagy.dmp.common.model.response.CommonResult;
 import com.persagy.dmp.common.utils.ParamCheckUtil;
 import com.persagy.dmp.common.utils.ResultHelper;
 import com.persagy.dmp.mybatis.utils.ConditionUtil;
+import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.rwd.digital.entity.ObjectRelation;
 import com.persagy.dmp.rwd.digital.service.IObjectRelationService;
 import org.apache.commons.lang.StringUtils;
@@ -50,7 +50,13 @@ public class ObjectRelationController {
         ConditionUtil.ensureProjectCriteria(wrapper);
         // 转换查询条件
         QueryCriteriaHelper.toWrapper(wrapper, criteria);
-        Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
+        Page page = QueryCriteriaHelper.toPage(criteria);
+        if(criteria.isOnlyCount()) {
+            Integer total = service.queryCount(wrapper);
+            page.setTotal(total);
+        } else {
+            page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
+        }
         return ResultHelper.multi(page.getRecords(), page.getTotal());
     }
 

+ 4 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/entity/ObjectDigital.java

@@ -24,6 +24,8 @@ public class ObjectDigital extends AuditableEntity {
 
     /** 扩展属性列 */
     public static final String EXTRA_COLUMN = "infos";
+    /** 扩展属性列 */
+    public static final String OBJ_TYPE = "obj_type";
 
     /** 项目ID */
     private String projectId;
@@ -45,7 +47,8 @@ public class ObjectDigital extends AuditableEntity {
     private String classCode;
     /** 集团编码 */
     private String groupCode;
-    /** 组标识 */
+    /** 组标识 mysql8中grouping是关键字,必须标识 */
+    @TableField(value = "`grouping`")
     private Integer grouping;
     /** 边类型编码 */
     @TableField(typeHandler = JacksonTypeHandler.class)

+ 8 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/IObjectDigitalService.java

@@ -2,6 +2,7 @@ package com.persagy.dmp.rwd.digital.service;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.define.entity.RelationDefine;
 import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
 
 import java.util.List;
@@ -22,6 +23,13 @@ public interface IObjectDigitalService {
     ObjectDigital load(String id);
 
     /**
+     * 按条件计数
+     * @param queryWrapper 查询条件
+     * @return 结果数量
+     */
+    Integer queryCount(Wrapper<ObjectDigital> queryWrapper);
+
+    /**
      * 按条件查询
      * @param queryWrapper 查询条件
      * @return 列表

+ 7 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/IObjectRelationService.java

@@ -23,6 +23,13 @@ public interface IObjectRelationService extends IService<ObjectRelation> {
     List<ObjectRelation> queryByCondition(Wrapper<ObjectRelation> queryWrapper);
 
     /**
+     * 按条件计数
+     * @param queryWrapper 查询条件
+     * @return 结果数量
+     */
+    Integer queryCount(Wrapper<ObjectRelation> queryWrapper);
+
+    /**
      * 按条件查询
      * @param page 分页条件
      * @param queryWrapper 查询条件

+ 35 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/ProjectBusinessService.java

@@ -0,0 +1,35 @@
+package com.persagy.dmp.rwd.digital.service;
+
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+
+import java.util.List;
+import java.util.Set;
+
+/***
+ * Description: 项目业务逻辑处理接口
+ * @author : lijie
+ * @date :2021/8/18 16:15
+ * Update By lijie 2021/8/18 16:15
+ */
+public interface ProjectBusinessService {
+
+    /***
+     * Description: 根据项目id查询项目信息
+     * @param projectIds : 项目id集合
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.rwd.digital.entity.ObjectDigital>>
+     * @author : lijie
+     * @date :2021/8/18 15:56
+     * Update By lijie 2021/8/18 15:56
+     */
+    CommonResult<List<ObjectDigital>> batchQueryProjectByIds(List<String> projectIds);
+    /***
+     * Description: 根据管理分区id批量查询项目信息
+     * @param groupManageZoneIds : 管理分区id集合
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.rwd.digital.entity.ObjectDigital>>  
+     * @author : lijie
+     * @date :2021/8/19 14:09
+     * Update By lijie 2021/8/19 14:09
+     */
+    CommonResult<List<ObjectDigital>> batchQueryProjectByGroupManageZoneIds(Set<String> groupManageZoneIds);
+}

+ 38 - 32
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ObjectDigitalServiceImpl.java

@@ -9,18 +9,16 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.constant.ValidEnum;
 import com.persagy.dmp.common.context.AppContext;
-import com.persagy.dmp.define.entity.ObjectTypeDefine;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.define.entity.ObjectInfoDefine;
 import com.persagy.dmp.rwd.basic.constant.DigitalMessageConstant;
 import com.persagy.dmp.rwd.basic.utils.DigitalCommonUtils;
 import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
 import com.persagy.dmp.rwd.define.service.IObjectInfoService;
-import com.persagy.dmp.common.constant.ValidEnum;
-import com.persagy.dmp.common.model.entity.BaseEntity;
-import com.persagy.dmp.define.entity.ObjectInfoDefine;
 import com.persagy.dmp.rwd.define.service.IObjectTypeService;
 import com.persagy.dmp.rwd.digital.dao.ObjectDigitalMapper;
 import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
@@ -63,6 +61,11 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
     }
 
     @Override
+    public Integer queryCount(Wrapper<ObjectDigital> queryWrapper) {
+        return dao.selectCount(queryWrapper);
+    }
+
+    @Override
     public Page queryByCondition(Page page, Wrapper<ObjectDigital> queryWrapper) {
         return dao.selectPage(page, queryWrapper);
     }
@@ -108,7 +111,7 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
         fillClassCodeForUpdate(voList,dbMap);
         //信息点校验
         Map<String, Map<String, ObjectInfoDefine>> allInfoMap = validateOnSave(voList, true);
-
+        List<ObjectDigital> resultList = new ArrayList<>();
         voList.forEach(vo -> {
             ObjectDigital dbVO = MapUtil.get(dbMap, vo.getId(), ObjectDigital.class);
             // 容错处理
@@ -127,10 +130,35 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
 
             // 修改
             dao.updateById(newDbVO);
+            resultList.add(newDbVO);
             // 修改后消息
             messageSender.sendMessage(DigitalMessageConstant.OPERATE_AFTER_UPDATE, dbVO, newDbVO, false);
         });
-        return voList;
+        return resultList;
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+        if(CollUtil.isEmpty(idList)) {
+            return;
+        }
+        List<ObjectDigital> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectDigital> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        idList.forEach(id -> {
+            ObjectDigital dbVO = MapUtil.get(dbMap, id, ObjectDigital.class);
+            // 容错处理
+            if(dbVO == null) {
+                return;
+            }
+            // 删除
+            ObjectDigital vo = new ObjectDigital();
+            vo.setId(id);
+            vo.setValid(ValidEnum.FALSE.getType());
+            dao.updateById(vo);
+            // 删除后消息
+            dbVO.setValid(ValidEnum.FALSE.getType());
+            messageSender.sendMessage(DigitalMessageConstant.OPERATE_AFTER_DELETE, null, dbVO, false);
+        });
     }
 
     /**
@@ -182,7 +210,7 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
                 String infoCode = infoKeys.next();
                 // 如果信息点中不存在,移除
                 if(!infoMap.containsKey(infoCode)) {
-                   // infos.remove(infoCode);
+                    // infos.remove(infoCode);
                     infoKeys.remove();
                     continue;
                 }
@@ -318,30 +346,6 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
         });
     }
 
-    @Override
-    public void delete(List<String> idList) {
-        if(CollUtil.isEmpty(idList)) {
-            return;
-        }
-        List<ObjectDigital> dbList = dao.selectBatchIds(idList);
-        Map<String, ObjectDigital> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
-        idList.forEach(id -> {
-            ObjectDigital dbVO = MapUtil.get(dbMap, id, ObjectDigital.class);
-            // 容错处理
-            if(dbVO == null) {
-                return;
-            }
-            // 删除
-            ObjectDigital vo = new ObjectDigital();
-            vo.setId(id);
-            vo.setValid(ValidEnum.FALSE.getType());
-            dao.updateById(vo);
-            // 删除后消息
-            dbVO.setValid(ValidEnum.FALSE.getType());
-            messageSender.sendMessage(DigitalMessageConstant.OPERATE_AFTER_DELETE, null, dbVO, false);
-        });
-    }
-
     /**
      * 修改时填充classCode
      * @param voList
@@ -367,6 +371,7 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
      * @param ids
      * @return
      */
+    @Override
     public Map<String, List<String>> queryVirtualCodeMap(String projectId,String groupCode,List<String> ids) {
         LambdaQueryWrapper<ObjectDigital> wrapper = new LambdaQueryWrapper<>();
         wrapper.select(ObjectDigital::getId, ObjectDigital::getVirtualCodes);
@@ -377,4 +382,5 @@ public class ObjectDigitalServiceImpl implements IObjectDigitalService {
         List<ObjectDigital> objectDigitals = queryByCondition(wrapper);
         return CollUtil.fieldValueAsMap(objectDigitals, "id", "virtual_codes");
     }
+
 }

+ 5 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ObjectRelationServiceImpl.java

@@ -46,6 +46,11 @@ public class ObjectRelationServiceImpl extends ServiceImpl<ObjectRelationMapper,
     }
 
     @Override
+    public Integer queryCount(Wrapper<ObjectRelation> queryWrapper) {
+        return dao.selectCount(queryWrapper);
+    }
+
+    @Override
     public Page queryByCondition(Page page, Wrapper<ObjectRelation> queryWrapper) {
         return dao.selectPage(page, queryWrapper);
     }

+ 79 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/service/impl/ProjectBusinessServiceImpl.java

@@ -0,0 +1,79 @@
+package com.persagy.dmp.rwd.digital.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.persagy.dmp.common.constant.CommonConstant;
+import com.persagy.dmp.common.context.AppContext;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.utils.ResultHelper;
+import com.persagy.dmp.rwd.basic.constant.DigitalObjectType;
+import com.persagy.dmp.rwd.digital.dao.ObjectDigitalMapper;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+import com.persagy.dmp.rwd.digital.service.ProjectBusinessService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class ProjectBusinessServiceImpl implements ProjectBusinessService {
+
+    private final ObjectDigitalMapper objectDigitalMapper;
+
+    /***
+     * Description: 根据项目id查询项目信息
+     * @param projectIds : 项目id集合
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.rwd.digital.entity.ObjectDigital>>
+     * @author : lijie
+     * @date :2021/8/18 15:56
+     * Update By lijie 2021/8/18 15:56
+     */
+    @Override
+    public CommonResult<List<ObjectDigital>> batchQueryProjectByIds(List<String> projectIds) {
+        // 1.组装查询条件
+        LambdaQueryWrapper<ObjectDigital> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ObjectDigital::getGroupCode, AppContext.getContext().getGroupCode());
+        queryWrapper.eq(ObjectDigital::getValid,true);
+        if (CollUtil.isNotEmpty(projectIds)){
+            queryWrapper.in(ObjectDigital::getId,projectIds);
+        }
+        queryWrapper.eq(ObjectDigital::getObjType, DigitalObjectType.PROJECT.getIndex());
+        // 2.查询项目信息
+        List<ObjectDigital> objectDigitals = objectDigitalMapper.selectList(queryWrapper);
+        if (CollUtil.isEmpty(objectDigitals)){
+            return ResultHelper.success();
+        }
+        return ResultHelper.multi(objectDigitals);
+    }
+    /***
+     * Description: 根据管理分区id批量查询项目信息
+     * @param groupManageZoneIds : 管理分区id集合
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.util.List<com.persagy.dmp.rwd.digital.entity.ObjectDigital>>
+     * @author : lijie
+     * @date :2021/8/19 14:09
+     * Update By lijie 2021/8/19 14:09
+     */
+    @Override
+    public CommonResult<List<ObjectDigital>> batchQueryProjectByGroupManageZoneIds(Set<String> groupManageZoneIds) {
+        QueryWrapper<ObjectDigital> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(StrUtil.toUnderlineCase(CommonConstant.QUERY_GROUPCODE), AppContext.getContext().getGroupCode());
+        queryWrapper.eq(ObjectDigital.PROP_VALID,true);
+        queryWrapper.eq(ObjectDigital.OBJ_TYPE, DigitalObjectType.PROJECT.getIndex());
+        if (CollUtil.isNotEmpty(groupManageZoneIds)){
+            queryWrapper.in("JSON_VALUE(infos,'$.groupManageZone')",groupManageZoneIds);
+        }
+        // 2.查询项目信息
+        List<ObjectDigital> objectDigitals = objectDigitalMapper.selectList(queryWrapper);
+        if (CollUtil.isEmpty(objectDigitals)){
+            return ResultHelper.success();
+        }
+        return ResultHelper.multi(objectDigitals);
+    }
+}

+ 3 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/utils/ObjectDigitalCriteriaHelper.java

@@ -32,6 +32,9 @@ public class ObjectDigitalCriteriaHelper {
      * @param criteria
      */
     public static void ensureExtraCond(ObjectNode criteria) {
+        if(criteria == null || criteria.isNull()) {
+            return;
+        }
         ensureSearchCond(criteria);
         ensureRelationCond(criteria);
         ensureJsonCond(criteria);

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/iot/service/impl/CurrentIotServiceImpl.java

@@ -7,9 +7,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.basic.model.QueryCriteria;
-import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.common.context.AppContext;
 import com.persagy.dmp.mybatis.utils.ConditionUtil;
+import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.rwd.basic.constant.IotUrlConstant;
 import com.persagy.dmp.rwd.basic.utils.MeterUtils;
 import com.persagy.dmp.rwd.digital.entity.ObjectDigital;

+ 3 - 1
dmp-common/src/main/java/com/persagy/dmp/common/config/CommonWebConfigurer.java

@@ -25,8 +25,10 @@ public class CommonWebConfigurer implements WebMvcConfigurer {
 
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
+        String[] includePaths = {"/**"};
+        String[] excludePaths = {"/**/*.html", "/**/*.js", "/**/*.css", "/swagger-resources"};
         // 设置拦截的路径、不拦截的路径、优先级等等
-        registry.addInterceptor(appContextHandler()).order(10).addPathPatterns("/**");
+        registry.addInterceptor(appContextHandler()).order(10).addPathPatterns(includePaths).excludePathPatterns(excludePaths);
     }
 
 }

+ 0 - 7
dmp-common/src/main/java/com/persagy/dmp/common/handler/AppContextHandler.java

@@ -18,15 +18,8 @@ import javax.servlet.http.HttpServletResponse;
  */
 public class AppContextHandler extends HandlerInterceptorAdapter {
 
-    /** 忽略的url - swagger的文档不校验 */
-    private static final String[] IGNORE_URL = {".html", ".js", ".css", "/swagger-resources"};
-
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-        String requestURI = request.getRequestURI();
-        if (StrUtil.containsAny(requestURI, IGNORE_URL)) {
-            return true;
-        }
         // 运维平台token认证
         if(StrUtil.isNotBlank(request.getHeader("token"))) {
             accessTokenInfo(request.getHeader("token"));

+ 16 - 2
dmp-common/src/main/java/com/persagy/dmp/common/handler/CommonExceptionHandler.java

@@ -1,5 +1,6 @@
 package com.persagy.dmp.common.handler;
 
+import cn.hutool.core.exceptions.ExceptionUtil;
 import com.persagy.dmp.common.constant.ResponseCode;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
@@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
 import org.springframework.web.servlet.NoHandlerFoundException;
 
 import javax.validation.ValidationException;
+import java.sql.SQLException;
 
 /**
  * @description: 通用异常处理类
@@ -31,7 +33,7 @@ public class CommonExceptionHandler {
     @ExceptionHandler(NullPointerException.class)
     public CommonResult handleBusinessRuntimeException(NullPointerException e) {
         log.error(e.getMessage(), e);
-        return ResultHelper.failure(ResponseCode.B0001.getCode(), e.getMessage());
+        return ResultHelper.failure(ResponseCode.B0001.getCode(), ExceptionUtil.getRootCauseMessage(e));
     }
 
     /**
@@ -44,6 +46,17 @@ public class CommonExceptionHandler {
     }
 
     /**
+     * SQL异常
+     * @param e
+     * @return
+     */
+    @ExceptionHandler(SQLException.class)
+    public CommonResult handleSQLException(SQLException e) {
+        log.error(e.getMessage(), e);
+        return ResultHelper.failure(ResponseCode.A0400.getCode(), e.getMessage());
+    }
+
+    /**
      * 入参校验异常
      */
     @ExceptionHandler(MethodArgumentNotValidException.class)
@@ -106,6 +119,7 @@ public class CommonExceptionHandler {
     @ExceptionHandler(Exception.class)
     public CommonResult handleException(Exception e) {
         log.error(e.getMessage(), e);
-        return ResultHelper.failure(ResponseCode.Z9999.getCode(), ResponseCode.Z9999.getDesc());
+        // 20210819 返回实际的异常信息
+        return ResultHelper.failure(ResponseCode.Z9999.getCode(), ExceptionUtil.getRootCauseMessage(e));
     }
 }

+ 1 - 1
dmp-common/src/main/java/com/persagy/dmp/common/utils/ResultHelper.java

@@ -109,7 +109,7 @@ public class ResultHelper {
     public static <T> CommonResult<List<T>> multi(List<T> records, long total) {
         // 容错处理,出现总数比实际数少时,以实际数为准(page查询全部时,total为0)
         int size = CollUtil.size(records);
-        if(total < CollUtil.size(records)) {
+        if(total < size) {
             total = size;
         }
         CommonResult<List<T>> result = success();

+ 0 - 1
dmp-comp/dmp-digital-starter/pom.xml

@@ -11,7 +11,6 @@
     <groupId>com.persagy</groupId>
     <artifactId>dmp-digital-starter</artifactId>
     <version>1.0.0</version>
-
     <dependencies>
         <!-- fm 工具包 -->
         <dependency>

+ 6 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/config/DigitalFeignConfig.java

@@ -1,6 +1,7 @@
 package com.persagy.dmp.basic.config;
 
 import feign.Logger;
+import feign.RequestInterceptor;
 import feign.codec.Encoder;
 import feign.form.spring.SpringFormEncoder;
 import org.springframework.beans.factory.ObjectFactory;
@@ -38,4 +39,9 @@ public class DigitalFeignConfig {
     Logger.Level feignLevel(){
         return Logger.Level.FULL;
     }
+
+    @Bean
+    RequestInterceptor feignInterceptor(){
+        return new FeignInterceptor();
+    }
 }

+ 16 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/config/FeignInterceptor.java

@@ -0,0 +1,16 @@
+package com.persagy.dmp.basic.config;
+
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@Slf4j
+public class FeignInterceptor implements RequestInterceptor {
+
+    @Override
+    public void apply(RequestTemplate template) {
+        // 暂时什么都不做,后续有需求再补充
+    }
+}

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

@@ -0,0 +1,28 @@
+package com.persagy.dmp.basic.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+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 RequestData {
+
+    /**账号id*/
+    private String userId;
+    /**管理分区id*/
+    private Set<String> groupManageZoneIds;
+
+
+}

+ 1 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/model/QueryCriteria.java

@@ -57,4 +57,5 @@ public class QueryCriteria {
     private List<OrderItem> orders;
     /** 额外返回的扩展字段清单 */
     private Set<String> withColumns;
+
 }

+ 1 - 1
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/utils/QueryCriteriaHelper.java

@@ -71,7 +71,7 @@ public class QueryCriteriaHelper {
             String dbField = StrUtil.startWith(field, "#JSON#")?field.substring(6):StrUtil.toUnderlineCase(field);
             // 20210813增加ADM传sql特殊处理 - 不公开到接口文档中
             if("$sql".equalsIgnoreCase(field)) {
-                wrapper.apply((String)JsonNodeUtils.getNodeValue(fieldValue));
+                wrapper.apply((String) JsonNodeUtils.getNodeValue(fieldValue));
                 continue;
             }
             // 20210816增加or条件支持

+ 18 - 1
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/client/DigitalDefineClient.java

@@ -3,6 +3,7 @@ package com.persagy.dmp.define.client;
 import com.persagy.dmp.basic.config.DigitalFeignConfig;
 import com.persagy.dmp.basic.model.QueryCriteria;
 import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.digital.entity.ObjectDigital;
 import com.persagy.dmp.define.entity.ObjectTypeDefine;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -16,7 +17,7 @@ import java.util.List;
  * @author Charlie Yu
  * @date 2021-05-15
  */
-@FeignClient(name = "dmp-rwd", configuration = DigitalFeignConfig.class)
+@FeignClient(name = "dmp-rwd", configuration = DigitalFeignConfig.class,url = "${dmp.rwd.service:}")
 public interface DigitalDefineClient {
 
     /**
@@ -35,4 +36,20 @@ public interface DigitalDefineClient {
             @RequestParam("appId") String appId,
             @RequestParam("userId") String userId,
             @RequestBody QueryCriteria criteria);
+    /**
+     * 查询类型定义
+     * @param groupCode 集团编码
+     * @param projectId 项目ID
+     * @param appId 应用ID
+     * @param userId 用户ID
+     * @param criteria 查询条件
+     * @return 类型定义
+     */
+    @PostMapping("/rwd/instance/object/batchQueryProjectByGroupManageZoneIds")
+    CommonResult<List<ObjectDigital>> batchQueryProjectByGroupManageZoneIds(
+            @RequestParam("groupCode") String groupCode,
+            @RequestParam("projectId") String projectId,
+            @RequestParam("appId") String appId,
+            @RequestParam("userId") String userId,
+            @RequestBody QueryCriteria criteria);
 }

+ 5 - 9
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/GraphDefine.java

@@ -1,12 +1,8 @@
 package com.persagy.dmp.define.entity;
 
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.persagy.dmp.common.model.entity.AuditableEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.hibernate.validator.constraints.Length;
-
-import javax.validation.constraints.NotNull;
 
 /**
  * 图例定义
@@ -15,15 +11,15 @@ import javax.validation.constraints.NotNull;
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-@TableName(value = "dt_define_graph", autoResultMap = true)
+// @TableName(value = "dt_define_graph", autoResultMap = true)
 public class GraphDefine extends AuditableEntity {
     /** 编码 */
-    @NotNull(message = "编码不允许为空")
-    @Length(max = 40)
+    //@NotNull(message = "编码不允许为空")
+    //@Length(max = 40)
     private String code;
     /** 名称 */
-    @NotNull(message = "名称不允许为空")
-    @Length(max = 200)
+    //@NotNull(message = "名称不允许为空")
+    //@Length(max = 200)
     private String name;
     /** 一级分类 */
     private String firstCategory;

+ 2 - 5
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/ObjectInfoDefine.java

@@ -1,8 +1,5 @@
 package com.persagy.dmp.define.entity;
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.persagy.dmp.common.model.entity.AuditableEntity;
 import lombok.Data;
@@ -18,7 +15,7 @@ import javax.validation.constraints.NotNull;
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-@TableName(value = "dt_define_info", autoResultMap = true)
+//@TableName(value = "dt_define_info", autoResultMap = true)
 public class ObjectInfoDefine extends AuditableEntity {
     /** 项目ID */
     private String projectId;
@@ -66,7 +63,7 @@ public class ObjectInfoDefine extends AuditableEntity {
     /** 数据格式 */
     private String formater;
     /** 取值范围 */
-    @TableField(typeHandler = JacksonTypeHandler.class)
+    //@TableField(typeHandler = JacksonTypeHandler.class)
     private ArrayNode dataSource;
     /** 备注 */
     private String remark;

+ 11 - 15
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/ObjectTypeDefine.java

@@ -1,12 +1,8 @@
 package com.persagy.dmp.define.entity;
 
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.persagy.dmp.common.model.entity.AuditableEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.hibernate.validator.constraints.Length;
-
-import javax.validation.constraints.NotNull;
 
 /**
  * 对象类型定义
@@ -15,30 +11,30 @@ import javax.validation.constraints.NotNull;
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-@TableName(value = "dt_define_type", autoResultMap = true)
+// @TableName(value = "dt_define_type", autoResultMap = true)
 public class ObjectTypeDefine extends AuditableEntity {
     /** 编码 */
-    @NotNull(message = "编码不允许为空")
-    @Length(max = 40)
+//    @NotNull(message = "编码不允许为空")
+//    @Length(max = 40)
     private String code;
     /** 名称 */
-    @NotNull(message = "名称不允许为空")
-    @Length(max = 200)
+//    @NotNull(message = "名称不允许为空")
+//    @Length(max = 200)
     private String name;
     /** 别名编码 */
-    @NotNull(message = "别名编码不允许为空")
-    @Length(max = 40)
+//    @NotNull(message = "别名编码不允许为空")
+//    @Length(max = 40)
     private String aliasCode;
     /** 别名名称 */
-    @NotNull(message = "别名名称不允许为空")
-    @Length(max = 200)
+//    @NotNull(message = "别名名称不允许为空")
+//    @Length(max = 200)
     private String aliasName;
     /** 大类:project-项目, building-建筑, floor-楼层, space-空间,
      * system-系统, equipment-设备, shaft-竖井, component-部件,
      * virtual-虚拟, tool-工具, material-耗材
      **/
-    @NotNull(message = "对象类型不允许为空")
-    @Length(max = 40)
+    //@NotNull(message = "对象类型不允许为空")
+    //@Length(max = 40)
     private String objType;
     //** 管理层级:common-平台级,group-集团级,project-项目级 */
     //private String type;

+ 1 - 2
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/define/entity/RelationDefine.java

@@ -1,6 +1,5 @@
 package com.persagy.dmp.define.entity;
 
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.persagy.dmp.common.model.entity.AuditableEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -15,7 +14,7 @@ import javax.validation.constraints.NotNull;
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-@TableName(value = "dt_define_rel", autoResultMap = true)
+//@TableName(value = "dt_define_rel", autoResultMap = true)
 public class RelationDefine extends AuditableEntity {
     /** 编码 */
     @NotNull(message = "编码不允许为空")

+ 59 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalObjectClient.java

@@ -0,0 +1,59 @@
+package com.persagy.dmp.digital.client;
+
+import com.persagy.dmp.basic.config.DigitalFeignConfig;
+import com.persagy.dmp.basic.dto.RequestData;
+import com.persagy.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.digital.entity.ObjectDigital;
+import com.persagy.dmp.define.entity.ObjectTypeDefine;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+import java.util.Set;
+
+/***
+ * Description:对象管理Client
+ * @author : lijie
+ * @date :2021/8/19 17:38
+ * Update By lijie 2021/8/19 17:38
+ */
+@FeignClient(name = "dmp-rwd", configuration = DigitalFeignConfig.class,url = "${dmp.rwd.service:}")
+public interface DigitalObjectClient {
+
+    /**
+     * 根据项目id批量查询项目信息
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param projectIds: 项目id数组
+     * @return 类型定义
+     */
+    @PostMapping("/rwd/instance/object/batchQueryProjectByIds")
+    CommonResult<List<ObjectDigital>> batchQueryProjectByIds(
+            @RequestParam("groupCode") String groupCode,
+            @RequestParam("projectId") String projectId,
+            @RequestParam("appId") String appId,
+            @RequestParam("userId") String userId,
+            @RequestBody Set<String> projectIds);
+
+    /**
+     * 根据管理分区id批量查询项目信息
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param requestData: 查询条件
+     * @return 类型定义
+     */
+    @PostMapping("/rwd/instance/object/batchQueryProjectByGroupManageZoneIds")
+    CommonResult<List<ObjectDigital>> batchQueryProjectByGroupManageZoneIds(
+            @RequestParam("groupCode") String groupCode,
+            @RequestParam("projectId") String projectId,
+            @RequestParam("appId") String appId,
+            @RequestParam("userId") String userId,
+            @RequestBody RequestData requestData);
+}

+ 53 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/client/DigitalObjectFacade.java

@@ -0,0 +1,53 @@
+package com.persagy.dmp.digital.client;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.persagy.dmp.basic.dto.RequestData;
+import com.persagy.dmp.basic.model.QueryCriteria;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.utils.ResultHelper;
+import com.persagy.dmp.define.entity.ObjectTypeDefine;
+import com.persagy.dmp.digital.entity.ObjectDigital;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 数据字典Client门面
+ * @author Charlie Yu
+ * @date 2021-05-15
+ */
+public class DigitalObjectFacade {
+
+    private static DigitalObjectClient client = SpringUtil.getBean(DigitalObjectClient.class);
+
+    /**
+     * 根据项目id批量查询项目信息
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param projectIds: 项目id数组
+     * @return 类型定义
+     */
+    public static List<ObjectDigital> batchQueryProjectByIds(String groupCode, String projectId, String appId,
+                                                             String userId, Set<String> projectIds) {
+        CommonResult<List<ObjectDigital>> result = client.batchQueryProjectByIds(groupCode, projectId, appId,
+                userId, projectIds);
+        return ResultHelper.getContent(result);
+    }
+    /**
+     * 根据管理分区id批量查询项目信息
+     * @param groupCode: 集团编码
+     * @param projectId: 项目ID
+     * @param appId: 应用ID
+     * @param userId: 用户ID
+     * @param requestData: 请求参数
+     * @return 类型定义
+     */
+    public static List<ObjectDigital> batchQueryProjectByGroupManageZoneIds(String groupCode, String projectId, String appId,
+                                                             String userId, RequestData requestData) {
+        CommonResult<List<ObjectDigital>> result = client.batchQueryProjectByGroupManageZoneIds(groupCode, projectId, appId,
+                userId, requestData);
+        return ResultHelper.getContent(result);
+    }
+}

+ 52 - 0
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/digital/entity/ObjectDigital.java

@@ -0,0 +1,52 @@
+package com.persagy.dmp.digital.entity;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 对象数据
+ * @author Charlie Yu
+ * @date 2021-06-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+//@TableName(value = "dt_object",autoResultMap = true)
+public class ObjectDigital extends AuditableEntity {
+
+    /** 扩展属性列 */
+    public static final String EXTRA_COLUMN = "infos";
+    /** 扩展属性列 */
+    public static final String OBJ_TYPE = "obj_type";
+
+    /** 项目ID */
+    private String projectId;
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** 对象分类 */
+    private String objType;
+    /** 类型编码 */
+    private String classCode;
+    /** 集团编码 */
+    private String groupCode;
+    /** 组标识 mysql8中grouping是关键字,必须标识 */
+    //@TableField(value = "`grouping`")
+    private Integer grouping;
+    /** 边类型编码 */
+    //@TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode infos;
+    /** 虚点清单 */
+    //@TableField(typeHandler = JacksonTypeHandler.class)
+    private List<String> virtualCodes;
+    /** 创建应用 */
+    private String createApp;
+    /** 最后修改应用 */
+    private String updateApp;
+}

+ 7 - 1
dmp-comp/dmp-mybatis/src/main/java/com/persagy/dmp/mybatis/config/MybatisPlusConfig.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -25,6 +26,8 @@ public class MybatisPlusConfig implements CommandLineRunner {
 
     @Resource
     private ObjectMapper objectMapper;
+    @Value("${persagy.common.sql.limit:500}")
+    private long sqlLimit;
 
     @Override
     public void run(String... args) throws Exception {
@@ -38,7 +41,10 @@ public class MybatisPlusConfig implements CommandLineRunner {
      */
     @Bean
     public PaginationInterceptor paginationInterceptor() {
-        return new PaginationInterceptor();
+        PaginationInterceptor interceptor = new PaginationInterceptor();
+        // 设置每页查询记录上限,默认500(与mp相同)
+        interceptor.setLimit(sqlLimit);
+        return interceptor;
     }
 
     /**

+ 5 - 0
dmp-server/pom.xml

@@ -28,5 +28,10 @@
             <artifactId>spring-cloud-commons</artifactId>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.persagy</groupId>
+            <artifactId>integrated-log-spring-boot-starter</artifactId>
+            <version>1.0.0</version>
+        </dependency>
     </dependencies>
 </project>

+ 126 - 0
dmp-server/src/main/java/com/persagy/aspects/RequestLogAspect.java

@@ -0,0 +1,126 @@
+package com.persagy.aspects;
+
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.extra.servlet.ServletUtil;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.utils.JacksonMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.*;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-22
+ * @verison: 1.0
+ */
+@Slf4j
+@Aspect
+@Component
+@EnableAspectJAutoProxy
+public class RequestLogAspect {
+
+	private static final ThreadLocal<LogData> dataStorage = new ThreadLocal<>();
+
+	@Pointcut("execution(public * com.persagy.dmp..*.controller.*.*(..))")
+	//@Pointcut("execution(* *(..))")
+	public void controllerPoint() {
+	}
+
+	@Before("controllerPoint()")
+	public void doBefore(JoinPoint joinPoint) {
+		ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+		if (null == attributes) {
+			log.warn("获取请求参数失败!!");
+			return;
+		}
+		HttpServletRequest request = attributes.getRequest();
+		LogData data = initFlag(request);
+		dataStorage.set(data);
+		log.info("{} REQUEST URL      : {} {} {} {}", data.intFlag, data.method, data.url, data.remoteIp, data.remotePort);
+		log.info("{} REQUEST ARGS     : {} ", data.intFlag, JacksonMapper.toSimpleJson(prepare(joinPoint)));
+	}
+
+	public static List<Object> prepare(JoinPoint joinPoint) {
+		Object[] args = joinPoint.getArgs();
+		List<Object> list = new LinkedList<>();
+		if (args != null && args.length > 0) {
+			for (Object arg : args) {
+				if (arg instanceof ServletRequest) {
+					continue;
+				}
+				if (arg instanceof ServletResponse) {
+					continue;
+				}
+				if (arg instanceof MultipartFile) {
+					continue;
+				}
+				list.add(arg);
+			}
+		}
+		return list;
+	}
+
+	@AfterReturning(returning = "ret", pointcut = "controllerPoint()")
+	public void doAfterReturning(Object ret) {
+		LogData data = dataStorage.get();
+		if (ret != null) {
+			if (ret instanceof CommonResult) {
+				log.info("{} REQUEST DURATION : {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, ((CommonResult) ret).getResult(), data.url);
+			} else {
+				log.info("{} REQUEST DURATION : {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, ret.getClass().getName(), data.url);
+			}
+		} else {
+			log.info("{} REQUEST DURATION : {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, "null", data.url);
+		}
+		dataStorage.remove();
+	}
+
+	@AfterThrowing(throwing = "ex", pointcut = "controllerPoint()")
+	public void doAfterThrowing(Throwable ex) {
+		LogData data = dataStorage.get();
+		log.error("{} REQUEST EXCEPTION: {} {} {}", data.intFlag, System.currentTimeMillis() - data.timestamp, data.url, ex);
+		dataStorage.remove();
+	}
+
+	private static LogData initFlag(HttpServletRequest request) {
+		LogData data = new LogData();
+		// 请求IP
+		data.remoteIp = ServletUtil.getClientIP(request, null);
+		// 请求端口
+		data.remotePort = request.getRemotePort();
+		data.timestamp = System.currentTimeMillis();
+		data.method = request.getMethod();
+		String requestURI = request.getRequestURI();
+		String queryString = request.getQueryString();
+		data.url = requestURI + (queryString == null ? "" : "?" + queryString);
+		data.intFlag = IdUtil.fastSimpleUUID();
+		dataStorage.set(data);
+		return data;
+	}
+
+	/***
+	 * Description: 日志数据实体
+	 * @author : lijie
+	 * @date :2021/8/18 10:36
+	 * Update By lijie 2021/8/18 10:36
+	 */
+	private static class LogData {
+		private String intFlag;
+		private Long timestamp;
+		private String url;
+		private String method;
+		private String remoteIp;
+		private Integer remotePort;
+	}
+}

+ 222 - 0
dmp-server/src/main/java/com/persagy/utils/JacksonMapper.java

@@ -0,0 +1,222 @@
+package com.persagy.utils;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeType;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+/**
+ * @author: yaoll
+ * @date: 2020-09-04
+ * @verison: 1.0
+ */
+@Slf4j
+public class JacksonMapper {
+
+	public static final ObjectMapper nonEmptyMapper;
+	public static final ObjectMapper nonDefaultMapper;
+	public static final ObjectMapper nonEmptyFormatMapper;
+
+	static {
+		nonEmptyMapper = new ObjectMapper();
+		nonEmptyMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
+		nonEmptyMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+		nonEmptyMapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
+
+		nonDefaultMapper = new ObjectMapper();
+		nonDefaultMapper.setSerializationInclusion(JsonInclude.Include.NON_DEFAULT);
+		nonDefaultMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+		nonDefaultMapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
+
+		nonEmptyFormatMapper = new ObjectMapper();
+		nonEmptyFormatMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
+		nonEmptyFormatMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+		nonEmptyFormatMapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
+		nonEmptyFormatMapper.enable(SerializationFeature.INDENT_OUTPUT);
+	}
+
+	private static boolean isEmpty(final CharSequence cs) {
+		return cs == null || cs.length() == 0;
+	}
+
+	public static <T> T toObject(String jsonString, Class<T> clazz) {
+		if (!isEmpty(jsonString)) {
+			try {
+				return nonEmptyMapper.readValue(jsonString, clazz);
+			} catch (IOException e) {
+				log.warn("parse json string to {} error: {}", clazz.getName(), jsonString, e);
+			}
+		}
+		return null;
+	}
+
+	public static <T> T toObject(String jsonString, TypeReference<T> typeRef) {
+		if (!isEmpty(jsonString)) {
+			try {
+				return nonEmptyMapper.readValue(jsonString, typeRef);
+			} catch (IOException e) {
+				log.warn("parse json string to {} error: {}", typeRef.toString(), jsonString, e);
+			}
+		}
+		return null;
+	}
+
+	public static <T> T toObject(String jsonString, JavaType javaType) {
+		if (!isEmpty(jsonString)) {
+			try {
+				return (T) nonEmptyMapper.readValue(jsonString, javaType);
+			} catch (IOException e) {
+				log.warn("parse json string to {} error: {}", javaType.toString(), jsonString, e);
+			}
+		}
+		return null;
+	}
+
+	public static <T> T toObject(String jsonString, Class cla, Class... clb) {
+		if (!isEmpty(jsonString)) {
+			try {
+				JavaType javaType = nonEmptyMapper.getTypeFactory().constructParametricType(cla, clb);
+				return (T) nonEmptyMapper.readValue(jsonString, javaType);
+			} catch (IOException e) {
+				log.warn("parse json string to {} error: {}", cla.getName(), jsonString, e);
+			}
+		}
+		return null;
+	}
+
+	public static JavaType constructParametricType(Class<?> parametrized, Class<?>... parameterClasses) {
+		return nonEmptyMapper.getTypeFactory().constructParametricType(parametrized, parameterClasses);
+	}
+
+	public static JavaType constructParametricType(Class<?> rawType, JavaType... parameterTypes) {
+		return nonEmptyMapper.getTypeFactory().constructParametricType(rawType, parameterTypes);
+	}
+
+	public static String toSimpleJson(Object object) {
+		try {
+			return nonEmptyMapper.writeValueAsString(object);
+		} catch (JsonProcessingException e) {
+			log.error("write to json string error:" + object, e);
+		}
+		return null;
+	}
+
+	public static String toFormatJson(Object object) {
+		try {
+			return nonEmptyFormatMapper.writeValueAsString(object);
+		} catch (JsonProcessingException e) {
+			log.error("write to json string error:" + object, e);
+		}
+		return null;
+	}
+
+	public static final String getString(ObjectNode obj, String key) {
+		return getString(obj, key, null);
+	}
+
+	public static final String getString(ObjectNode obj, String key, String defaultValue) {
+		if (obj == null) {
+			return defaultValue;
+		}
+		if (!obj.has(key)) {
+			return defaultValue;
+		}
+		return obj.get(key).asText();
+	}
+
+	public static final Integer getInteger(ObjectNode obj, String key) {
+		return getInteger(obj, key, null);
+	}
+
+	public static final Integer getInteger(ObjectNode obj, String key, Integer defaultValue) {
+		if (obj == null) {
+			return defaultValue;
+		}
+		if (!obj.has(key)) {
+			return defaultValue;
+		}
+		JsonNode jsonNode = obj.get(key);
+
+		return Integer.valueOf(jsonNode.asText());
+	}
+
+	public static final Double getDouble(ObjectNode obj, String key) {
+		return getDouble(obj, key, null);
+	}
+
+	public static final Double getDouble(ObjectNode obj, String key, Double defaultValue) {
+		if (obj == null) {
+			return defaultValue;
+		}
+		if (!obj.has(key)) {
+			return defaultValue;
+		}
+		return Double.valueOf(obj.get(key).asText());
+	}
+
+	public static final Boolean getBoolean(ObjectNode obj, String key) {
+		return getBoolean(obj, key, null);
+	}
+
+	public static final Boolean getBoolean(ObjectNode obj, String key, Boolean defaultValue) {
+		if (obj == null) {
+			return defaultValue;
+		}
+		if (!obj.has(key)) {
+			return defaultValue;
+		}
+		return Boolean.valueOf(obj.get(key).toString());
+	}
+
+	public static final ObjectNode getObject(ObjectNode obj, String key) {
+		return getObject(obj, key, null);
+	}
+
+	public static final ObjectNode getObject(ObjectNode obj, String key, ObjectNode defaultValue) {
+		if (obj == null) {
+			return defaultValue;
+		}
+		if (!obj.has(key)) {
+			return defaultValue;
+		}
+		JsonNode jsonNode = obj.get(key);
+		JsonNodeType nodeType = jsonNode.getNodeType();
+		if (nodeType == JsonNodeType.STRING) {
+			return toObject(jsonNode.asText(), ObjectNode.class);
+		} else if (nodeType == JsonNodeType.OBJECT) {
+			return (ObjectNode) jsonNode;
+		}
+		return defaultValue;
+	}
+
+
+	public static final ArrayNode getArray(ObjectNode obj, String key) {
+		return getArray(obj, key, null);
+	}
+
+	public static final ArrayNode getArray(ObjectNode obj, String key, ArrayNode defaultValue) {
+		if (obj == null) {
+			return defaultValue;
+		}
+		if (!obj.has(key)) {
+			return defaultValue;
+		}
+		JsonNode jsonNode = obj.get(key);
+		JsonNodeType nodeType = jsonNode.getNodeType();
+		if (nodeType == JsonNodeType.STRING) {
+			return toObject(jsonNode.asText(), ArrayNode.class);
+		} else if (nodeType == JsonNodeType.ARRAY) {
+			return (ArrayNode) jsonNode;
+		}
+		return defaultValue;
+	}
+
+}

+ 112 - 0
dmp-server/src/main/resources/logback-spring.xml

@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <contextName>${APP_NAME}</contextName>
+    <springProperty name="APP_NAME" scope="context" source="spring.application.name"/>
+    <springProperty name="LOG_FILE" scope="context" source="logging.file" defaultValue="../logs/${APP_NAME}"/>
+    <springProperty name="LOG_POINT_FILE" scope="context" source="logging.file" defaultValue="../logs/point"/>
+    <springProperty name="LOG_AUDIT_FILE" scope="context" source="logging.file" defaultValue="../logs/audit"/>
+    <springProperty name="LOG_MAXFILESIZE" scope="context" source="logback.filesize" defaultValue="50MB"/>
+    <springProperty name="LOG_TOTAL_SIZE_CAP" scope="context" source="logback.total.size.cap" defaultValue="2GB"/>
+    <springProperty name="LOG_FILEMAXDAY" scope="context" source="logback.filemaxday" defaultValue="7"/>
+    <springProperty name="ServerIP" scope="context" source="spring.cloud.client.ip-address" defaultValue="0.0.0.0"/>
+    <springProperty name="ServerPort" scope="context" source="server.port" defaultValue="0000"/>
+
+    <!-- 彩色日志 -->
+    <!-- 彩色日志依赖的渲染类 -->
+    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
+    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
+    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
+
+    <!-- 彩色日志格式 -->
+    <property name="CONSOLE_LOG_PATTERN"
+              value="[${APP_NAME}:${ServerIP}:${ServerPort}] %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%level){blue} %clr(${PID}){magenta} %clr([%X{traceId}]){yellow} %clr([%thread]){orange} %clr(%logger){cyan} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
+    <property name="CONSOLE_LOG_PATTERN_NO_COLOR" value="[${APP_NAME}:${ServerIP}:${ServerPort}] %d{yyyy-MM-dd HH:mm:ss.SSS} %level ${PID} [%X{traceId}] [%thread] %logger %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
+
+    <!-- 控制台日志 -->
+    <appender name="StdoutAppender" class="ch.qos.logback.core.ConsoleAppender">
+        <withJansi>true</withJansi>
+        <encoder>
+            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+    </appender>
+    <!-- 按照每天生成常规日志文件 -->
+    <appender name="FileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${LOG_FILE}/${APP_NAME}.log</file>
+        <encoder>
+            <pattern>${CONSOLE_LOG_PATTERN_NO_COLOR}</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+        <!-- 基于时间的分包策略 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_FILE}/${APP_NAME}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <!--保留时间,单位:天-->
+            <maxHistory>${LOG_FILEMAXDAY}</maxHistory>
+            <!-- 日志总保存量为2GB -->
+            <totalSizeCap>${LOG_TOTAL_SIZE_CAP}</totalSizeCap>
+            <maxFileSize>${LOG_MAXFILESIZE}</maxFileSize>
+        </rollingPolicy>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>INFO</level>
+        </filter>
+    </appender>
+
+    <appender name="point_log" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${LOG_POINT_FILE}/${APP_NAME}.point.log</file>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}|${APP_NAME}|%msg%n</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+        <!-- 基于时间的分包策略 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_FILE}/${APP_NAME}.point.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <!--保留时间,单位:天-->
+            <maxHistory>${LOG_FILEMAXDAY}</maxHistory>
+            <!-- 日志总保存量为2GB -->
+            <totalSizeCap>${LOG_TOTAL_SIZE_CAP}</totalSizeCap>
+            <maxFileSize>${LOG_MAXFILESIZE}</maxFileSize>
+        </rollingPolicy>
+    </appender>
+
+    <appender name="audit_log" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${LOG_AUDIT_FILE}/${APP_NAME}.audit.log</file>
+        <encoder>
+            <pattern>%msg%n</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+        <!-- 基于时间的分包策略 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${LOG_FILE}/${APP_NAME}.audit.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <!--保留时间,单位:天-->
+            <maxHistory>${LOG_FILEMAXDAY}</maxHistory>
+            <!-- 日志总保存量为2GB -->
+            <totalSizeCap>${LOG_TOTAL_SIZE_CAP}</totalSizeCap>
+            <maxFileSize>${LOG_MAXFILESIZE}</maxFileSize>
+        </rollingPolicy>
+    </appender>
+
+    <appender name="point_log_async" class="ch.qos.logback.classic.AsyncAppender">
+        <discardingThreshold>0</discardingThreshold>
+        <appender-ref ref="point_log"/>
+    </appender>
+    <appender name="file_async" class="ch.qos.logback.classic.AsyncAppender">
+        <discardingThreshold>0</discardingThreshold>
+        <appender-ref ref="FileAppender"/>
+    </appender>
+    <appender name="audit_log_async" class="ch.qos.logback.classic.AsyncAppender">
+        <discardingThreshold>0</discardingThreshold>
+        <appender-ref ref="audit_log"/>
+    </appender>
+    <logger name="com.persagy.log.monitor" level="debug" addtivity="false">
+        <appender-ref ref="point_log_async" />
+    </logger>
+    <logger name="com.persagy.log.service.impl.LoggerAuditServiceImpl" level="debug" addtivity="false">
+        <appender-ref ref="audit_log_async" />
+    </logger>
+
+    <root level="INFO">
+        <appender-ref ref="StdoutAppender"/>
+        <appender-ref ref="file_async"/>
+        <appender-ref ref="audit_log_async"/>
+    </root>
+</configuration>