Browse Source

1. 增加码表
2. 提取公共ConditionUtil处理公用查询条件

yucheng 3 years ago
parent
commit
938c8c27d1
19 changed files with 631 additions and 90 deletions
  1. 43 0
      dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/controller/CodeTableDataController.java
  2. 12 0
      dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/dao/CodeTableDataMapper.java
  3. 12 0
      dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/dao/CodeTableTypeMapper.java
  4. 48 0
      dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/entity/CodeTableData.java
  5. 44 0
      dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/entity/CodeTableType.java
  6. 56 0
      dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/service/ICodeTableDataService.java
  7. 56 0
      dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/service/ICodeTableTypeService.java
  8. 109 0
      dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/service/impl/CodeTableDataServiceImpl.java
  9. 69 0
      dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/service/impl/CodeTableTypeServiceImpl.java
  10. 38 0
      dmp-business/dmp-dic/src/main/resources/db.init/schema.sql
  11. 0 60
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/utils/DigitalCommonUtils.java
  12. 5 5
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectInfoController.java
  13. 4 4
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/ObjectTypeController.java
  14. 4 4
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/controller/RelationDefineController.java
  15. 7 7
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/define/service/impl/ObjectTypeServiceImpl.java
  16. 5 5
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectDigitalController.java
  17. 4 4
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectRelationController.java
  18. 1 1
      dmp-comp/dmp-mybatis/README.md
  19. 114 0
      dmp-comp/dmp-mybatis/src/main/java/com/persagy/dmp/mybatis/utils/ConditionUtil.java

+ 43 - 0
dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/controller/CodeTableDataController.java

@@ -0,0 +1,43 @@
+package com.persagy.dmp.codetable.controller;
+
+import cn.hutool.core.util.StrUtil;
+import com.persagy.dmp.codetable.entity.CodeTableData;
+import com.persagy.dmp.codetable.service.ICodeTableDataService;
+import com.persagy.dmp.common.context.AppContext;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.model.response.PageList;
+import com.persagy.dmp.common.utils.ResultHelper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 码表数据 Controller
+ * @author Charlie Yu
+ * @date 2021-07-27
+ */
+@RestController
+@RequestMapping(value = "/dic/code/")
+public class CodeTableDataController {
+
+    @Autowired
+    private ICodeTableDataService dataService;
+
+    /**
+     * 根据码表类型查询所有字典数据
+     * @param typeCode 码表类型编码
+     * @return List<CodeTableDetail>
+     */
+    @GetMapping("/queryAll/{typeCode}")
+    public CommonResult<PageList<CodeTableData>> queryCodeTableDetailListByCodeTableId(@PathVariable String typeCode) {
+        if (StrUtil.isBlank(typeCode)) {
+            return null;
+        }
+        List<CodeTableData> dataList = dataService.queryAllByTypeCode(AppContext.getContext().getProjectId(), typeCode);
+        return ResultHelper.multi(dataList);
+    }
+}

+ 12 - 0
dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/dao/CodeTableDataMapper.java

@@ -0,0 +1,12 @@
+package com.persagy.dmp.codetable.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.codetable.entity.CodeTableData;
+
+/**
+ * 码表数据 dao
+ * @author Charlie Yu
+ * @date 2021-07-27
+ */
+public interface CodeTableDataMapper extends BaseMapper<CodeTableData> {
+}

+ 12 - 0
dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/dao/CodeTableTypeMapper.java

@@ -0,0 +1,12 @@
+package com.persagy.dmp.codetable.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.codetable.entity.CodeTableType;
+
+/**
+ * 码表类型 dao
+ * @author Charlie Yu
+ * @date 2021-07-27
+ */
+public interface CodeTableTypeMapper extends BaseMapper<CodeTableType> {
+}

+ 48 - 0
dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/entity/CodeTableData.java

@@ -0,0 +1,48 @@
+package com.persagy.dmp.codetable.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.ObjectNode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 码表数据
+ * 业务上数据字典已表示对象类型+信息点,因此此处改用码表命名以区分
+ * @author Charlie Yu
+ * @date 2021-07-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "dt_code_data", autoResultMap = true)
+public class CodeTableData extends AuditableEntity {
+
+    /** 项目ID */
+    private String projectId;
+    /** 类型ID */
+    private String typeId;
+    /** 类型编码 - 冗余 */
+    private String typeCode;
+    /** 编码 */
+    private String code;
+    /** 名称 */
+    private String name;
+    /** 上级ID */
+    private String parentId;
+    /** 内部码 */
+    private String innerCode;
+    /** 扩展属性 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode extras;
+    /** 显示顺序 */
+    private Integer showOrder;
+    /** 备注 */
+    private String remark;
+    /** 显示属性 - 下级码表数据 */
+    @TableField(exist = false)
+    private List<CodeTableData> content;
+}

+ 44 - 0
dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/entity/CodeTableType.java

@@ -0,0 +1,44 @@
+package com.persagy.dmp.codetable.entity;
+
+import cn.hutool.core.util.BooleanUtil;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 码表类型
+ * 业务上数据字典已表示对象类型+信息点,因此此处改用码表命名以区分
+ * @author Charlie Yu
+ * @date 2021-07-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("dt_code_type")
+public class CodeTableType extends AuditableEntity {
+
+    /** 集团编码 */
+    private String groupCode;
+    /** 项目ID */
+    private String projectId;
+    /** 码表类型编码 */
+    private String code;
+    /** 码表类型名称 */
+    private String name;
+    /** 扩展属性 */
+    private String extras;
+    /** 树型标识 */
+    private Boolean treeFlag;
+    /** 显示顺序 */
+    private Integer showOrder;
+    /** 备注 */
+    private String remark;
+
+    /**
+     * 是否树结构
+     * @return
+     */
+    public boolean isTree() {
+        return BooleanUtil.isTrue(treeFlag);
+    }
+}

+ 56 - 0
dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/service/ICodeTableDataService.java

@@ -0,0 +1,56 @@
+package com.persagy.dmp.codetable.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.persagy.dmp.codetable.entity.CodeTableData;
+
+import java.util.List;
+
+/**
+ * 码表数据 service
+ * @author Charlie Yu
+ * @date 2021-07-27
+ */
+public interface ICodeTableDataService {
+
+    /**
+     * 新增
+     * @param vo
+     * @return
+     */
+    CodeTableData insert(CodeTableData vo);
+
+    /**
+     * 修改
+     * @param vo
+     * @return
+     */
+    CodeTableData update(CodeTableData vo);
+
+    /**
+     * 删除
+     * @param id
+     */
+    void delete(String id);
+
+    /**
+     * 通过ID查询
+     * @param id 主键
+     * @return
+     */
+    CodeTableData load(String id);
+
+    /**
+     * 按条件查询
+     * @param queryWrapper 查询条件
+     * @return 列表
+     */
+    List<CodeTableData> queryByCondition(Wrapper<CodeTableData> queryWrapper);
+
+    /**
+     * 通过类型查询所有码表数据
+     * @param projectId 项目ID
+     * @param typeCode 码表类型编码
+     * @return 码表数据。如果为树型,则返回树型结果
+     */
+    List<CodeTableData> queryAllByTypeCode(String projectId, String typeCode);
+}

+ 56 - 0
dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/service/ICodeTableTypeService.java

@@ -0,0 +1,56 @@
+package com.persagy.dmp.codetable.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.persagy.dmp.codetable.entity.CodeTableType;
+
+import java.util.List;
+
+/**
+ * 码表类型 service
+ * @author Charlie Yu
+ * @date 2021-07-27
+ */
+public interface ICodeTableTypeService {
+
+    /**
+     * 新增
+     * @param vo
+     * @return
+     */
+    CodeTableType insert(CodeTableType vo);
+
+    /**
+     * 修改
+     * @param vo
+     * @return
+     */
+    CodeTableType update(CodeTableType vo);
+
+    /**
+     * 删除
+     * @param id
+     */
+    void delete(String id);
+
+    /**
+     * 通过ID查询
+     * @param id 主键
+     * @return
+     */
+    CodeTableType load(String id);
+
+    /**
+     * 通过编码查询
+     * @param projectId 项目ID
+     * @param code 编码
+     * @return
+     */
+    CodeTableType loadByCode(String projectId, String code);
+
+    /**
+     * 按条件查询
+     * @param queryWrapper 查询条件
+     * @return 列表
+     */
+    List<CodeTableType> queryByCondition(Wrapper<CodeTableType> queryWrapper);
+}

+ 109 - 0
dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/service/impl/CodeTableDataServiceImpl.java

@@ -0,0 +1,109 @@
+package com.persagy.dmp.codetable.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.persagy.dmp.codetable.dao.CodeTableDataMapper;
+import com.persagy.dmp.codetable.entity.CodeTableData;
+import com.persagy.dmp.codetable.entity.CodeTableType;
+import com.persagy.dmp.codetable.service.ICodeTableDataService;
+import com.persagy.dmp.codetable.service.ICodeTableTypeService;
+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.mybatis.utils.ConditionUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 码表数据 实现类
+ * @author Charlie Yu
+ * @date 2021-07-27
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class CodeTableDataServiceImpl implements ICodeTableDataService {
+
+    @Resource
+    private CodeTableDataMapper dao;
+    @Autowired
+    private ICodeTableTypeService typeService;
+
+    @Override
+    public CodeTableData insert(CodeTableData vo) {
+        dao.insert(vo);
+        return vo;
+    }
+
+    @Override
+    public CodeTableData update(CodeTableData vo) {
+        dao.updateById(vo);
+        return vo;
+    }
+
+    @Override
+    public void delete(String id) {
+        CodeTableData vo = load(id);
+        if(vo == null) {
+            throw new BusinessException("找不到对应的数据!");
+        }
+        vo.setValid(ValidEnum.FALSE.getType());
+        dao.updateById(vo);
+    }
+
+    @Override
+    public CodeTableData load(String id) {
+        return dao.selectById(id);
+    }
+
+    @Override
+    public List<CodeTableData> queryByCondition(Wrapper<CodeTableData> queryWrapper) {
+        return dao.selectList(queryWrapper);
+    }
+
+    @Override
+    public List<CodeTableData> queryAllByTypeCode(String projectId, String typeCode) {
+        CodeTableType codeType = typeService.loadByCode(projectId, typeCode);
+        if(codeType == null) {
+            return null;
+        }
+        LambdaQueryWrapper<CodeTableData> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(CodeTableData::getId, CodeTableData::getParentId, CodeTableData::getCode, CodeTableData::getName, CodeTableData::getExtras);
+        wrapper.eq(CodeTableData::getTypeId, codeType.getId());
+        wrapper.eq(CodeTableData::getValid, ValidEnum.TRUE.getType());
+        ConditionUtil.ensureProjectCriteria(wrapper, CodeTableData::getProjectId, projectId);
+        wrapper.orderByAsc(CodeTableData::getShowOrder);
+        List<CodeTableData> dataList = dao.selectList(wrapper);
+        if(CollUtil.isEmpty(dataList)) {
+            return null;
+        } else if(!codeType.isTree()) {
+            // 列表结构直接返回即可
+            return dataList;
+        }
+        // 转换为树型
+        Map<String, CodeTableData> dataMap = CollUtil.fieldValueMap(dataList, BaseEntity.PROP_ID);
+        List<CodeTableData> rsList = new ArrayList<>();
+        for(CodeTableData data:dataList) {
+            String parentId = data.getParentId();
+            // 如果找不到上级节点,直接添加到结果列表中
+            if(StrUtil.isBlank(parentId) || dataMap.get(parentId) == null) {
+                rsList.add(data);
+                continue;
+            }
+            // 能找到上级节点,则放入上级节点的子节点列表中
+            CodeTableData parent = dataMap.get(parentId);
+            if(parent.getContent() == null) {
+                parent.setContent(new ArrayList<>());
+            }
+            parent.getContent().add(data);
+        }
+        return rsList;
+    }
+}

+ 69 - 0
dmp-business/dmp-dic/src/main/java/com/persagy/dmp/codetable/service/impl/CodeTableTypeServiceImpl.java

@@ -0,0 +1,69 @@
+package com.persagy.dmp.codetable.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.persagy.dmp.codetable.dao.CodeTableTypeMapper;
+import com.persagy.dmp.codetable.entity.CodeTableType;
+import com.persagy.dmp.codetable.service.ICodeTableTypeService;
+import com.persagy.dmp.common.constant.ValidEnum;
+import com.persagy.dmp.common.exception.BusinessException;
+import com.persagy.dmp.mybatis.utils.ConditionUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 码表类型 实现类
+ * @author Charlie Yu
+ * @date 2021-07-27
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class CodeTableTypeServiceImpl implements ICodeTableTypeService {
+
+    @Resource
+    private CodeTableTypeMapper dao;
+
+    @Override
+    public CodeTableType insert(CodeTableType vo) {
+        dao.insert(vo);
+        return vo;
+    }
+
+    @Override
+    public CodeTableType update(CodeTableType vo) {
+        dao.updateById(vo);
+        return vo;
+    }
+
+    @Override
+    public void delete(String id) {
+        CodeTableType vo = load(id);
+        if(vo == null) {
+            throw new BusinessException("找不到对应的数据!");
+        }
+        vo.setValid(ValidEnum.FALSE.getType());
+        dao.updateById(vo);
+    }
+
+    @Override
+    public CodeTableType load(String id) {
+        return dao.selectById(id);
+    }
+
+    @Override
+    public CodeTableType loadByCode(String projectId, String code) {
+        LambdaQueryWrapper<CodeTableType> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CodeTableType::getCode, code);
+        wrapper.eq(CodeTableType::getValid, ValidEnum.TRUE.getType());
+        ConditionUtil.ensureProjectCriteria(wrapper, CodeTableType::getProjectId, projectId);
+        return dao.selectOne(wrapper);
+    }
+
+    @Override
+    public List<CodeTableType> queryByCondition(Wrapper<CodeTableType> queryWrapper) {
+        return dao.selectList(queryWrapper);
+    }
+}

+ 38 - 0
dmp-business/dmp-dic/src/main/resources/db.init/schema.sql

@@ -1,6 +1,3 @@
 CREATE TABLE IF NOT EXISTS `dic_dt_data` (
 `id` varchar(80) NOT NULL,
 `dict_type_id` varchar(80) NOT NULL COMMENT '字典类型ID',
@@ -18,9 +15,6 @@ CREATE TABLE IF NOT EXISTS `dic_dt_data` (
 PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='字典数据';
 
 CREATE TABLE IF NOT EXISTS  `dic_dt_data` (
 `id` varchar(80) NOT NULL,
 `dict_type_id` varchar(80) NOT NULL COMMENT '字典类型ID',
@@ -38,4 +32,42 @@ CREATE TABLE IF NOT EXISTS  `dic_dt_data` (
 PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='字典数据';
 
+CREATE TABLE IF NOT EXISTS `dt_code_type` (
+  `id` varchar(40) NOT NULL,
+  `group_code` varchar(40) DEFAULT NULL,
+  `project_id` varchar(40) NOT NULL,
+  `code` varchar(40) DEFAULT NULL COMMENT '编码',
+  `name` varchar(200) DEFAULT NULL COMMENT '名称',
+  `extras` varchar(60) DEFAULT NULL COMMENT '扩展属性',
+  `tree_flag` tinyint DEFAULT NULL COMMENT '树标识',
+  `show_order` int(11) DEFAULT NULL COMMENT '显示顺序',
+  `remark` varchar(1024) DEFAULT NULL COMMENT '备注',
+  `creator` varchar(32) DEFAULT NULL COMMENT '创建人',
+  `creation_time` char(14) NULL DEFAULT NULL COMMENT '创建时间',
+  `modifier` varchar(32) DEFAULT NULL COMMENT '最后修改人',
+  `modified_time` char(14) NULL DEFAULT NULL COMMENT '最后修改时间',
+  `valid` tinyint DEFAULT NULL COMMENT '合法标识',
+  `ts` timestamp default current_timestamp on update current_timestamp NOT NULL COMMENT '乐观锁',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='码表类型';
 
+CREATE TABLE IF NOT EXISTS `dt_code_data` (
+  `id` varchar(40) NOT NULL,
+  `group_code` varchar(40) DEFAULT NULL,
+  `project_id` varchar(40) NOT NULL,
+  `type_id` varchar(40) DEFAULT NULL COMMENT '类型ID',
+  `type_code` varchar(40) DEFAULT NULL COMMENT '类型编码',
+  `code` varchar(40) DEFAULT NULL COMMENT '编码',
+  `name` varchar(200) DEFAULT NULL COMMENT '名称',
+  `parent_id` varchar(40) DEFAULT NULL COMMENT '上级ID',
+  `extras` varchar(60) DEFAULT NULL COMMENT '扩展属性',
+  `show_order` int(11) DEFAULT NULL COMMENT '显示顺序',
+  `remark` varchar(1024) DEFAULT NULL COMMENT '备注',
+  `creator` varchar(32) DEFAULT NULL COMMENT '创建人',
+  `creation_time` char(14) NULL DEFAULT NULL COMMENT '创建时间',
+  `modifier` varchar(32) DEFAULT NULL COMMENT '最后修改人',
+  `modified_time` char(14) NULL DEFAULT NULL COMMENT '最后修改时间',
+  `valid` tinyint DEFAULT NULL COMMENT '合法标识',
+  `ts` timestamp default current_timestamp on update current_timestamp NOT NULL COMMENT '乐观锁',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='码表数据';

+ 0 - 60
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/utils/DigitalCommonUtils.java

@@ -2,15 +2,8 @@ package com.persagy.dmp.rwd.basic.utils;
 
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.persagy.dmp.rwd.basic.constant.DigitalObjectType;
 import com.persagy.dmp.rwd.basic.constant.DigitalObjectTypeShort;
-import com.persagy.dmp.common.constant.CommonConstant;
-import com.persagy.dmp.common.context.AppContext;
-import com.persagy.dmp.common.model.entity.BaseEntity;
-
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * 数据孪生通用工具
@@ -20,59 +13,6 @@ import java.util.List;
 public class DigitalCommonUtils {
 
     /**
-     * 确认项目范围条件
-     * @param wrapper 查询条件
-     */
-    public static <T extends BaseEntity> void ensureProjectCriteria(QueryWrapper<T> wrapper) {
-        List<String> inSql = new ArrayList<>();
-        // 0-平台级数据
-        inSql.add(CommonConstant.DEFAULT_ID);
-        // groupCode-集团级数据
-        if(StrUtil.isNotBlank(AppContext.getContext().getGroupCode())) {
-            inSql.add(AppContext.getContext().getGroupCode());
-        }
-        // projectId-项目级数据
-        if(StrUtil.isNotBlank(AppContext.getContext().getProjectId())) {
-            inSql.add(AppContext.getContext().getProjectId());
-        }
-        wrapper.in(StrUtil.toUnderlineCase(AppContext.PROJECT_ID), inSql);
-    }
-
-    /**
-     * 确认项目范围条件
-     * @param wrapper 查询条件
-     */
-    public static <T extends BaseEntity> void ensureProjectCriteria(QueryWrapper<T> wrapper, String projectId) {
-        List<String> inSql = new ArrayList<>();
-        // 0-平台级数据
-        inSql.add(CommonConstant.DEFAULT_ID);
-        // groupCode-集团级数据
-        if(!CommonConstant.DEFAULT_ID.equalsIgnoreCase(projectId)) {
-            inSql.add(AppContext.getContext().getGroupCode());
-        }
-        if(StrUtil.isNotBlank(projectId)) {
-            inSql.add(projectId);
-        }
-        wrapper.in(StrUtil.toUnderlineCase(AppContext.PROJECT_ID), inSql);
-    }
-
-    /**
-     * 获取数据范围ID
-     * @return 0-平台级数据,groupCode-集团级数据,projectId-项目级数据
-     */
-    public static String getProjectId() {
-        // projectId-项目级数据
-        if(StrUtil.isNotBlank(AppContext.getContext().getProjectId())) {
-            return AppContext.getContext().getProjectId();
-        } else if(StrUtil.isNotBlank(AppContext.getContext().getGroupCode())) {
-            // groupCode-集团级数据
-            return AppContext.getContext().getGroupCode();
-        } else {
-            return CommonConstant.DEFAULT_ID;
-        }
-    }
-
-    /**
      * 生成对象主键
      * @param projectId 项目ID
      * @param category 对象类型

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

@@ -3,16 +3,16 @@ 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.rwd.define.service.IObjectInfoService;
-import com.persagy.dmp.rwd.basic.utils.DigitalCommonUtils;
-import com.persagy.dmp.rwd.basic.utils.QueryCriteriaHelper;
+import com.persagy.dmp.basic.model.QueryCriteria;
 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.model.response.PageList;
-import com.persagy.dmp.basic.model.QueryCriteria;
 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.rwd.basic.utils.QueryCriteriaHelper;
+import com.persagy.dmp.rwd.define.service.IObjectInfoService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -41,7 +41,7 @@ public class ObjectInfoController {
         }
         QueryWrapper<ObjectInfoDefine> wrapper = new QueryWrapper<>();
         // 添加所属项目条件
-        DigitalCommonUtils.ensureProjectCriteria(wrapper);
+        ConditionUtil.ensureProjectCriteria(wrapper);
         // 转换查询条件
         QueryCriteriaHelper.toWrapper(wrapper, criteria);
         Page page = QueryCriteriaHelper.toPage(criteria);

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

@@ -3,15 +3,15 @@ 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.rwd.basic.utils.DigitalCommonUtils;
-import com.persagy.dmp.rwd.basic.utils.QueryCriteriaHelper;
+import com.persagy.dmp.basic.model.QueryCriteria;
 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.model.response.PageList;
-import com.persagy.dmp.basic.model.QueryCriteria;
 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.rwd.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.rwd.define.service.IObjectTypeService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -41,7 +41,7 @@ public class ObjectTypeController {
         }
         QueryWrapper<ObjectTypeDefine> wrapper = new QueryWrapper<>();
         // 添加所属项目条件
-        DigitalCommonUtils.ensureProjectCriteria(wrapper);
+        ConditionUtil.ensureProjectCriteria(wrapper);
         // 转换查询条件
         QueryCriteriaHelper.toWrapper(wrapper, criteria);
         Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);

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

@@ -2,15 +2,15 @@ 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.rwd.basic.utils.DigitalCommonUtils;
-import com.persagy.dmp.rwd.basic.utils.QueryCriteriaHelper;
+import com.persagy.dmp.basic.model.QueryCriteria;
 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.model.response.PageList;
-import com.persagy.dmp.basic.model.QueryCriteria;
 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.rwd.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.rwd.define.service.IRelationDefineService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -37,7 +37,7 @@ public class RelationDefineController {
         }
         QueryWrapper<RelationDefine> wrapper = new QueryWrapper<>();
         // 添加所属项目条件
-        DigitalCommonUtils.ensureProjectCriteria(wrapper);
+        ConditionUtil.ensureProjectCriteria(wrapper);
         // 转换查询条件
         QueryCriteriaHelper.toWrapper(wrapper, criteria);
         Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);

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

@@ -9,15 +9,15 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-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.dao.ObjectTypeMapper;
-import com.persagy.dmp.rwd.define.service.IObjectTypeService;
 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.ObjectTypeDefine;
+import com.persagy.dmp.mybatis.utils.ConditionUtil;
+import com.persagy.dmp.rwd.basic.constant.DigitalMessageConstant;
+import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
+import com.persagy.dmp.rwd.define.dao.ObjectTypeMapper;
+import com.persagy.dmp.rwd.define.service.IObjectTypeService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheConfig;
 import org.springframework.cache.annotation.CacheEvict;
@@ -48,7 +48,7 @@ public class ObjectTypeServiceImpl implements IObjectTypeService {
     public List<ObjectTypeDefine> queryByProjectAndApp(String projectId, String appId) {
         // TODO 指定条件查询使用Redis
         QueryWrapper<ObjectTypeDefine> wrapper = new QueryWrapper<>();
-        DigitalCommonUtils.ensureProjectCriteria(wrapper, projectId);
+        ConditionUtil.ensureProjectCriteria(wrapper, projectId);
         if(StrUtil.isNotBlank(appId)) {
             // TODO 根据应用ID关联订阅条件
 
@@ -70,7 +70,7 @@ public class ObjectTypeServiceImpl implements IObjectTypeService {
     public Page queryByProjectAndApp(Page page, String projectId, String appId) {
         // TODO 分页查询使用ES
         QueryWrapper<ObjectTypeDefine> wrapper = new QueryWrapper<>();
-        DigitalCommonUtils.ensureProjectCriteria(wrapper, projectId);
+        ConditionUtil.ensureProjectCriteria(wrapper, projectId);
         if(StrUtil.isNotBlank(appId)) {
             // TODO 根据应用ID关联订阅条件
 

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

@@ -3,16 +3,16 @@ package com.persagy.dmp.rwd.digital.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.rwd.basic.utils.DigitalCommonUtils;
-import com.persagy.dmp.rwd.basic.utils.QueryCriteriaHelper;
-import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
-import com.persagy.dmp.rwd.digital.service.IObjectDigitalService;
 import com.persagy.dmp.basic.model.QueryCriteria;
 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.model.response.PageList;
 import com.persagy.dmp.common.utils.ResultHelper;
+import com.persagy.dmp.mybatis.utils.ConditionUtil;
+import com.persagy.dmp.rwd.basic.utils.QueryCriteriaHelper;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+import com.persagy.dmp.rwd.digital.service.IObjectDigitalService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -41,7 +41,7 @@ public class ObjectDigitalController {
         }
         QueryWrapper<ObjectDigital> wrapper = new QueryWrapper<>();
         // 添加所属项目条件
-        DigitalCommonUtils.ensureProjectCriteria(wrapper);
+        ConditionUtil.ensureProjectCriteria(wrapper);
         // 转换查询条件
         QueryCriteriaHelper.toWrapper(wrapper, criteria);
         Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);

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

@@ -3,16 +3,16 @@ package com.persagy.dmp.rwd.digital.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.rwd.basic.utils.DigitalCommonUtils;
-import com.persagy.dmp.rwd.basic.utils.QueryCriteriaHelper;
+import com.persagy.dmp.basic.model.QueryCriteria;
 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.model.response.PageList;
 import com.persagy.dmp.common.utils.ResultHelper;
+import com.persagy.dmp.mybatis.utils.ConditionUtil;
+import com.persagy.dmp.rwd.basic.utils.QueryCriteriaHelper;
 import com.persagy.dmp.rwd.digital.entity.ObjectRelation;
 import com.persagy.dmp.rwd.digital.service.IObjectRelationService;
-import com.persagy.dmp.basic.model.QueryCriteria;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -41,7 +41,7 @@ public class ObjectRelationController {
         }
         QueryWrapper<ObjectRelation> wrapper = new QueryWrapper<>();
         // 添加所属项目条件
-        DigitalCommonUtils.ensureProjectCriteria(wrapper);
+        ConditionUtil.ensureProjectCriteria(wrapper);
         // 转换查询条件
         QueryCriteriaHelper.toWrapper(wrapper, criteria);
         Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);

+ 1 - 1
dmp-comp/dmp-mybatis/README.md

@@ -167,7 +167,7 @@ spring:
 	
 自定义DB数据格式转换器
 * 放入此目录中即可: com.persagy.**.typehandler
-
+* json类型自动转换,需要配置@TableName(value = "tableName", autoResultMap = true)和字段@TableField(typeHandler = JacksonTypeHandler.class)
 最新变化
 ---------------
 

+ 114 - 0
dmp-comp/dmp-mybatis/src/main/java/com/persagy/dmp/mybatis/utils/ConditionUtil.java

@@ -0,0 +1,114 @@
+package com.persagy.dmp.mybatis.utils;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import com.persagy.dmp.common.constant.CommonConstant;
+import com.persagy.dmp.common.context.AppContext;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 查询条件 通用工具
+ * @author Charlie Yu
+ * @date 2021-06-25
+ */
+public class ConditionUtil {
+
+    /**
+     * 确认项目范围条件
+     * @param wrapper 查询条件
+     * @param wrapper 查询条件
+     */
+    public static <T extends BaseEntity> void ensureProjectCriteria(QueryWrapper<T> wrapper) {
+        List<String> inSql = new ArrayList<>();
+        // 0-平台级数据
+        inSql.add(CommonConstant.DEFAULT_ID);
+        // groupCode-集团级数据
+        if(StrUtil.isNotBlank(AppContext.getContext().getGroupCode())) {
+            inSql.add(AppContext.getContext().getGroupCode());
+        }
+        // projectId-项目级数据
+        if(StrUtil.isNotBlank(AppContext.getContext().getProjectId())) {
+            inSql.add(AppContext.getContext().getProjectId());
+        }
+        wrapper.in(StrUtil.toUnderlineCase(AppContext.PROJECT_ID), inSql);
+    }
+
+    /**
+     * 确认项目范围条件
+     * @param wrapper 查询条件
+     */
+    public static <T extends BaseEntity> void ensureProjectCriteria(QueryWrapper<T> wrapper, String projectId) {
+        List<String> inSql = new ArrayList<>();
+        // 0-平台级数据
+        inSql.add(CommonConstant.DEFAULT_ID);
+        // groupCode-集团级数据
+        if(!CommonConstant.DEFAULT_ID.equalsIgnoreCase(projectId)) {
+            inSql.add(AppContext.getContext().getGroupCode());
+        }
+        if(StrUtil.isNotBlank(projectId)) {
+            inSql.add(projectId);
+        }
+        wrapper.in(StrUtil.toUnderlineCase(AppContext.PROJECT_ID), inSql);
+    }
+
+    /**
+     * 确认项目范围条件
+     * @param wrapper 查询条件
+     * @param column 项目ID列
+     */
+    public static <T extends BaseEntity> void ensureProjectCriteria(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> column) {
+        List<String> inSql = new ArrayList<>();
+        // 0-平台级数据
+        inSql.add(CommonConstant.DEFAULT_ID);
+        // groupCode-集团级数据
+        if(StrUtil.isNotBlank(AppContext.getContext().getGroupCode())) {
+            inSql.add(AppContext.getContext().getGroupCode());
+        }
+        // projectId-项目级数据
+        if(StrUtil.isNotBlank(AppContext.getContext().getProjectId())) {
+            inSql.add(AppContext.getContext().getProjectId());
+        }
+        wrapper.in(column, inSql);
+    }
+
+    /**
+     * 确认项目范围条件
+     * @param wrapper 查询条件
+     * @param column 项目ID列
+     * @param projectId 项目ID值
+     */
+    public static <T extends BaseEntity> void ensureProjectCriteria(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> column, String projectId) {
+        List<String> inSql = new ArrayList<>();
+        // 0-平台级数据
+        inSql.add(CommonConstant.DEFAULT_ID);
+        // groupCode-集团级数据
+        if(!CommonConstant.DEFAULT_ID.equalsIgnoreCase(projectId)) {
+            inSql.add(AppContext.getContext().getGroupCode());
+        }
+        if(StrUtil.isNotBlank(projectId)) {
+            inSql.add(projectId);
+        }
+        wrapper.in(column, inSql);
+    }
+
+    /**
+     * 获取数据范围ID
+     * @return 0-平台级数据,groupCode-集团级数据,projectId-项目级数据
+     */
+    public static String getProjectId() {
+        // projectId-项目级数据
+        if(StrUtil.isNotBlank(AppContext.getContext().getProjectId())) {
+            return AppContext.getContext().getProjectId();
+        } else if(StrUtil.isNotBlank(AppContext.getContext().getGroupCode())) {
+            // groupCode-集团级数据
+            return AppContext.getContext().getGroupCode();
+        } else {
+            return CommonConstant.DEFAULT_ID;
+        }
+    }
+}