Browse Source

新增 代码生成器
修复 修复了一些bug

18339543638 2 years ago
parent
commit
c170d483a1
36 changed files with 506 additions and 573 deletions
  1. 2 1
      tr-framework/src/main/java/cn/tr/core/pojo/PageDomain.java
  2. 1 1
      tr-framework/src/main/java/cn/tr/core/strategy/PageStrategy.java
  3. 2 0
      tr-framework/src/main/java/cn/tr/core/tree/TreeNode.java
  4. 1 1
      tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/basic/entity/GenBasic.java
  5. 97 63
      tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/basic/service/impl/GenBasicServiceImpl.java
  6. 5 5
      tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/config/param/GenConfigEditParam.java
  7. 0 45
      tr-modules/tr-module-gen/src/main/resources/backend/AddParam.java.btl
  8. 41 0
      tr-modules/tr-module-gen/src/main/resources/backend/DTO.java.btl
  9. 0 45
      tr-modules/tr-module-gen/src/main/resources/backend/EditParam.java.btl
  10. 0 53
      tr-modules/tr-module-gen/src/main/resources/backend/Entity.java.btl
  11. 0 34
      tr-modules/tr-module-gen/src/main/resources/backend/Enum.java.btl
  12. 0 35
      tr-modules/tr-module-gen/src/main/resources/backend/IdParam.java.btl
  13. 26 23
      tr-modules/tr-module-gen/src/main/resources/backend/Mapper.java.btl
  14. 45 0
      tr-modules/tr-module-gen/src/main/resources/backend/PO.java.btl
  15. 0 70
      tr-modules/tr-module-gen/src/main/resources/backend/PageParam.java.btl
  16. 31 0
      tr-modules/tr-module-gen/src/main/resources/backend/QueryDTO.java.btl
  17. 18 0
      tr-modules/tr-module-gen/src/main/resources/backend/Repository.java.btl
  18. 27 52
      tr-modules/tr-module-gen/src/main/resources/backend/Service.java.btl
  19. 98 101
      tr-modules/tr-module-gen/src/main/resources/backend/ServiceImpl.java.btl
  20. 0 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/dict/po/SysDictPO.java
  21. 6 7
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/impl/SysTenantPackageMenuServiceImpl.java
  22. 0 7
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysOrgDTO.java
  23. 0 3
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysOrgTreeDTO.java
  24. 2 3
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysRoleDTO.java
  25. 0 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysMenuService.java
  26. 5 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysPortalMenuService.java
  27. 6 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysPortalService.java
  28. 2 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysRoleMenuService.java
  29. 12 9
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysMenuServiceImpl.java
  30. 15 5
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysOrgServiceImpl.java
  31. 19 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalMenuServiceImpl.java
  32. 7 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalServiceImpl.java
  33. 13 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleMenuServiceImpl.java
  34. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleServiceImpl.java
  35. 19 0
      tr-plugins/tr-spring-boot-starter-plugin-mybatis/src/main/java/cn/tr/plugin/mybatis/pojo/BetweenQuery.java
  36. 5 2
      tr-plugins/tr-spring-boot-starter-plugin-web/src/main/java/cn/tr/plugin/web/config/PageStrategyConfig.java

+ 2 - 1
tr-framework/src/main/java/cn/tr/core/pojo/PageDomain.java

@@ -25,8 +25,9 @@ public class PageDomain
     private Boolean reasonable = true;
     private Boolean reasonable = true;
 
 
 
 
-    public PageDomain(Integer current, Integer size) {
+    public PageDomain(Integer current, Integer size,List<Order> orders) {
         this.current = current;
         this.current = current;
         this.size = size;
         this.size = size;
+        this.orders=orders;
     }
     }
 }
 }

+ 1 - 1
tr-framework/src/main/java/cn/tr/core/strategy/PageStrategy.java

@@ -25,7 +25,7 @@ public class PageStrategy {
     /**
     /**
      * 从请求中创建分页参数
      * 从请求中创建分页参数
      */
      */
-    public Supplier<PageDomain> createPage=()-> new PageDomain(1,10);
+    public Supplier<PageDomain> createPage=()-> new PageDomain(1,10,null);
 
 
     /**
     /**
      * 开始实现分页
      * 开始实现分页

+ 2 - 0
tr-framework/src/main/java/cn/tr/core/tree/TreeNode.java

@@ -3,6 +3,7 @@ package cn.tr.core.tree;
 import cn.tr.core.validation.Insert;
 import cn.tr.core.validation.Insert;
 import cn.tr.core.validation.Update;
 import cn.tr.core.validation.Update;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotEmpty;
@@ -36,6 +37,7 @@ public abstract class TreeNode<PK> implements Serializable
     /**
     /**
      * 子节点集合
      * 子节点集合
      */
      */
+    @ApiModelProperty(readOnly = true)
     private List<TreeNode<PK>> children = new ArrayList<>();
     private List<TreeNode<PK>> children = new ArrayList<>();
 
 
     /**
     /**

+ 1 - 1
tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/basic/entity/GenBasic.java

@@ -51,7 +51,7 @@ public class GenBasic extends BasePO {
 
 
     /** 所属模块 */
     /** 所属模块 */
     @ApiModelProperty(value = "所属模块", position = 6)
     @ApiModelProperty(value = "所属模块", position = 6)
-    private String module;
+    private String moduleName;
 
 
     /** 上级目录 */
     /** 上级目录 */
     @ApiModelProperty(value = "上级目录", position = 7)
     @ApiModelProperty(value = "上级目录", position = 7)

+ 97 - 63
tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/basic/service/impl/GenBasicServiceImpl.java

@@ -29,7 +29,6 @@ import cn.tr.core.exception.TRExcCode;
 import cn.tr.module.gen.core.util.CommonDownloadUtil;
 import cn.tr.module.gen.core.util.CommonDownloadUtil;
 import cn.tr.module.gen.core.util.CommonResponseUtil;
 import cn.tr.module.gen.core.util.CommonResponseUtil;
 import cn.tr.module.gen.core.util.GenDbTypeUtil;
 import cn.tr.module.gen.core.util.GenDbTypeUtil;
-import cn.tr.module.gen.modular.basic.entity.CommonPageRequest;
 import cn.tr.module.gen.modular.basic.entity.GenBasic;
 import cn.tr.module.gen.modular.basic.entity.GenBasic;
 import cn.tr.module.gen.modular.basic.enums.CommonSortOrderEnum;
 import cn.tr.module.gen.modular.basic.enums.CommonSortOrderEnum;
 import cn.tr.module.gen.modular.basic.enums.GenEffectTypeEnum;
 import cn.tr.module.gen.modular.basic.enums.GenEffectTypeEnum;
@@ -41,13 +40,13 @@ import cn.tr.module.gen.modular.basic.result.GenBasicTableColumnResult;
 import cn.tr.module.gen.modular.basic.result.GenBasicTableResult;
 import cn.tr.module.gen.modular.basic.result.GenBasicTableResult;
 import cn.tr.module.gen.modular.basic.service.GenBasicService;
 import cn.tr.module.gen.modular.basic.service.GenBasicService;
 import cn.tr.module.gen.modular.config.entity.GenConfig;
 import cn.tr.module.gen.modular.config.entity.GenConfig;
+import cn.tr.module.gen.modular.config.mapper.GenConfigMapper;
 import cn.tr.module.gen.modular.config.param.GenConfigAddParam;
 import cn.tr.module.gen.modular.config.param.GenConfigAddParam;
 import cn.tr.module.gen.modular.config.service.GenConfigService;
 import cn.tr.module.gen.modular.config.service.GenConfigService;
 import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
 import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mysql.cj.jdbc.ConnectionImpl;
 import com.mysql.cj.jdbc.ConnectionImpl;
 import org.beetl.core.Configuration;
 import org.beetl.core.Configuration;
@@ -63,10 +62,10 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
 import java.sql.*;
 import java.sql.*;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * 代码生成基础Service接口实现类
  * 代码生成基础Service接口实现类
@@ -77,13 +76,13 @@ import java.util.concurrent.atomic.AtomicBoolean;
 @Service
 @Service
 public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> implements GenBasicService {
 public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> implements GenBasicService {
 
 
-//    private static final String DB_URL_KEY = "spring.datasource.dynamic.datasource.master.url";
+    //    private static final String DB_URL_KEY = "spring.datasource.dynamic.datasource.master.url";
     private static final String DB_URL_KEY = "spring.datasource.url";
     private static final String DB_URL_KEY = "spring.datasource.url";
 
 
-//    private static final String DB_USERNAME_KEY = "spring.datasource.dynamic.datasource.master.username";
+    //    private static final String DB_USERNAME_KEY = "spring.datasource.dynamic.datasource.master.username";
     private static final String DB_USERNAME_KEY = "spring.datasource.username";
     private static final String DB_USERNAME_KEY = "spring.datasource.username";
 
 
-//    private static final String DB_PASSWORD_KEY = "spring.datasource.dynamic.datasource.master.password";
+    //    private static final String DB_PASSWORD_KEY = "spring.datasource.dynamic.datasource.master.password";
     private static final String DB_PASSWORD_KEY = "spring.datasource.password";
     private static final String DB_PASSWORD_KEY = "spring.datasource.password";
 
 
     private static final String MODULE_KEY = "biz";
     private static final String MODULE_KEY = "biz";
@@ -105,14 +104,12 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
 
 
     private static final List<JSONObject> GEN_BACKEND_FILE_LIST = CollectionUtil.newArrayList(
     private static final List<JSONObject> GEN_BACKEND_FILE_LIST = CollectionUtil.newArrayList(
             JSONUtil.createObj().set("name", "Controller.java.btl").set("path", "controller"),
             JSONUtil.createObj().set("name", "Controller.java.btl").set("path", "controller"),
-            JSONUtil.createObj().set("name", "Entity.java.btl").set("path", "entity"),
-            JSONUtil.createObj().set("name", "Enum.java.btl").set("path", "enums"),
+            JSONUtil.createObj().set("name", "PO.java.btl").set("path", "po"),
             JSONUtil.createObj().set("name", "Mapper.java.btl").set("path", "mapper"),
             JSONUtil.createObj().set("name", "Mapper.java.btl").set("path", "mapper"),
+            JSONUtil.createObj().set("name", "Repository.java.btl").set("path", "repository"),
             JSONUtil.createObj().set("name", "Mapper.xml.btl").set("path", "mapper" + File.separator + "mapping"),
             JSONUtil.createObj().set("name", "Mapper.xml.btl").set("path", "mapper" + File.separator + "mapping"),
-            JSONUtil.createObj().set("name", "AddParam.java.btl").set("path", "param"),
-            JSONUtil.createObj().set("name", "EditParam.java.btl").set("path", "param"),
-            JSONUtil.createObj().set("name", "IdParam.java.btl").set("path", "param"),
-            JSONUtil.createObj().set("name", "PageParam.java.btl").set("path", "param"),
+            JSONUtil.createObj().set("name", "DTO.java.btl").set("path", "dto"),
+            JSONUtil.createObj().set("name", "QueryDTO.java.btl").set("path", "dto"),
             JSONUtil.createObj().set("name", "Service.java.btl").set("path", "service"),
             JSONUtil.createObj().set("name", "Service.java.btl").set("path", "service"),
             JSONUtil.createObj().set("name", "ServiceImpl.java.btl").set("path", "service" + File.separator + "impl"));
             JSONUtil.createObj().set("name", "ServiceImpl.java.btl").set("path", "service" + File.separator + "impl"));
 
 
@@ -135,6 +132,8 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
     @Resource
     @Resource
     private GenConfigService genConfigService;
     private GenConfigService genConfigService;
 
 
+    @Resource
+    private GenConfigMapper genConfigMapper;
     @Override
     @Override
     public List<GenBasic> list(GenBasicPageParam genBasicPageParam) {
     public List<GenBasic> list(GenBasicPageParam genBasicPageParam) {
         QueryWrapper<GenBasic> queryWrapper = new QueryWrapper<>();
         QueryWrapper<GenBasic> queryWrapper = new QueryWrapper<>();
@@ -154,56 +153,21 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
     public GenBasic add(GenBasicAddParam genBasicAddParam) {
     public GenBasic add(GenBasicAddParam genBasicAddParam) {
         GenBasic genBasic = BeanUtil.toBean(genBasicAddParam, GenBasic.class);
         GenBasic genBasic = BeanUtil.toBean(genBasicAddParam, GenBasic.class);
         this.save(genBasic);
         this.save(genBasic);
-        GenBasicTableColumnParam tableColumnParam = new GenBasicTableColumnParam();
-        tableColumnParam.setTableName(genBasic.getDbTable());
-        List<GenBasicTableColumnResult> resultList = this.tableColumns(tableColumnParam);
-        for (int i = 0; i < resultList.size(); i++) {
-            GenBasicTableColumnResult item = resultList.get(i);
-            GenConfigAddParam addParam = new GenConfigAddParam();
-            addParam.setBasicId(genBasic.getId());
-            if (item.getColumnName().equals(genBasic.getDbTableKey())) {
-                addParam.setIsTableKey(GenYesNoEnum.Y.getValue());
-            } else {
-                addParam.setIsTableKey(GenYesNoEnum.N.getValue());
-            }
-            addParam.setFieldName(item.getColumnName());
-            addParam.setFieldType(item.getTypeName());
-            addParam.setFieldRemark(item.getColumnRemark());
-            addParam.setFieldJavaType(GenDbTypeUtil.getJavaTypeBySqlType(item.getTypeName()));
-            addParam.setEffectType(GenEffectTypeEnum.INPUT.getValue().toLowerCase());
-            // 除主键、删除标志、创建人、创建时间、修改人和修改时间外,所有默认在列表显示、在增改显示、非列省略、非必填,非查询
-            String logicDeleteField = mybatisPlusProperties.getGlobalConfig().getDbConfig().getLogicDeleteField();
-            if(ObjectUtil.isEmpty(logicDeleteField)) {
-                logicDeleteField = "DELETE_FLAG";
-            }
-            if(genBasic.getDbTableKey().equalsIgnoreCase(item.getColumnName()) ||
-                    logicDeleteField.equalsIgnoreCase(item.getColumnName()) ||
-                    CREATE_USER_KEY.equalsIgnoreCase(item.getColumnName()) ||
-                    CREATE_TIME_KEY.equalsIgnoreCase(item.getColumnName()) ||
-                    UPDATE_USER_KEY.equalsIgnoreCase(item.getColumnName()) ||
-                    UPDATE_TIME_KEY.equalsIgnoreCase(item.getColumnName())) {
-                addParam.setWhetherTable(GenYesNoEnum.N.getValue());
-                addParam.setWhetherAddUpdate(GenYesNoEnum.N.getValue());
-            } else {
-                addParam.setWhetherTable(GenYesNoEnum.Y.getValue());
-                addParam.setWhetherAddUpdate(GenYesNoEnum.Y.getValue());
-            }
-            addParam.setWhetherRetract(GenYesNoEnum.N.getValue());
-            addParam.setWhetherRequired(GenYesNoEnum.N.getValue());
-            addParam.setQueryWhether(GenYesNoEnum.N.getValue());
-            addParam.setSortCode(i);
-            GenConfig genConfig = BeanUtil.toBean(addParam, GenConfig.class);
-            genConfigService.save(genConfig);
-        }
+        addTableColumns(genBasic);
         return genBasic;
         return genBasic;
     }
     }
 
 
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     @Override
     @Override
     public GenBasic edit(GenBasicEditParam genBasicEditParam) {
     public GenBasic edit(GenBasicEditParam genBasicEditParam) {
+
         GenBasic genBasic = this.queryEntity(genBasicEditParam.getId());
         GenBasic genBasic = this.queryEntity(genBasicEditParam.getId());
+        boolean tableChanged=!StrUtil.equals(genBasicEditParam.getDbTable(), genBasic.getDbTable());
         BeanUtil.copyProperties(genBasicEditParam, genBasic);
         BeanUtil.copyProperties(genBasicEditParam, genBasic);
         this.updateById(genBasic);
         this.updateById(genBasic);
+        if(tableChanged){
+            addTableColumns(genBasic);
+        }
         return genBasic;
         return genBasic;
     }
     }
 
 
@@ -238,6 +202,11 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
         Connection conn = null;
         Connection conn = null;
         ResultSet rs = null;
         ResultSet rs = null;
         try {
         try {
+            Set<String> existTableNames =  this.list(new LambdaQueryWrapper<GenBasic>()).stream()
+                    .map(GenBasic::getDbTable)
+                    .collect(Collectors.toSet());
+
+           ;
             conn = DriverManager.getConnection(Objects.requireNonNull(environment.getProperty(DB_URL_KEY)),
             conn = DriverManager.getConnection(Objects.requireNonNull(environment.getProperty(DB_URL_KEY)),
                     Objects.requireNonNull(environment.getProperty(DB_USERNAME_KEY)),
                     Objects.requireNonNull(environment.getProperty(DB_USERNAME_KEY)),
                     Objects.requireNonNull(environment.getProperty(DB_PASSWORD_KEY)));
                     Objects.requireNonNull(environment.getProperty(DB_PASSWORD_KEY)));
@@ -260,7 +229,9 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
                     } else {
                     } else {
                         genBasicTableResult.setTableRemark(remarks);
                         genBasicTableResult.setTableRemark(remarks);
                     }
                     }
-                    tables.add(genBasicTableResult);
+                    if(!CollectionUtil.contains(existTableNames,tableName)){
+                        tables.add(genBasicTableResult);
+                    }
                 }
                 }
             }
             }
             return tables;
             return tables;
@@ -466,8 +437,9 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
             genBasicPreviewResult.setGenBasicCodeFrontendResultList(genBasicCodeFrontendResultList);
             genBasicPreviewResult.setGenBasicCodeFrontendResultList(genBasicCodeFrontendResultList);
 
 
             // 后端基础路径
             // 后端基础路径
-            String genBackendBasicPath = StrUtil.replace(genBasic.getPackageName(), StrUtil.DOT, File.separator) +
-                    File.separator + MODULE_KEY + File.separator + "modular" +  File.separator + genBasic.getBusName() + File.separator;
+//            String genBackendBasicPath = StrUtil.replace(genBasic.getPackageName(), StrUtil.DOT, File.separator) +
+//                    File.separator + MODULE_KEY + File.separator + "modular" +  File.separator + genBasic.getBusName() + File.separator;
+
             // 后端
             // 后端
             GroupTemplate groupTemplateBackEnd = new GroupTemplate(new ClasspathResourceLoader("backend"),
             GroupTemplate groupTemplateBackEnd = new GroupTemplate(new ClasspathResourceLoader("backend"),
                     Configuration.defaultConfiguration());
                     Configuration.defaultConfiguration());
@@ -475,13 +447,19 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
             GEN_BACKEND_FILE_LIST.forEach(fileJsonObject -> {
             GEN_BACKEND_FILE_LIST.forEach(fileJsonObject -> {
                 String fileTemplateName = fileJsonObject.getStr("name");
                 String fileTemplateName = fileJsonObject.getStr("name");
                 String fileTemplatePath = fileJsonObject.getStr("path");
                 String fileTemplatePath = fileJsonObject.getStr("path");
+                String genBackendBasicPath =null;
+                if (StrUtil.equals("Mapper.java.btl",fileTemplateName)) {
+                    genBackendBasicPath = StrUtil.replace(genBasic.getPackageName(), StrUtil.DOT, File.separator) +
+                            File.separator + genBasic.getModuleName()+File.separator;
+                }else {
+                    genBackendBasicPath = StrUtil.replace(genBasic.getPackageName(), StrUtil.DOT, File.separator) +
+                            File.separator + genBasic.getModuleName() +
+                            File.separator + genBasic.getBusName()+File.separator;
+                }
                 GenBasicPreviewResult.GenBasicCodeResult genBasicCodeBackendResult = new GenBasicPreviewResult.GenBasicCodeResult();
                 GenBasicPreviewResult.GenBasicCodeResult genBasicCodeBackendResult = new GenBasicPreviewResult.GenBasicCodeResult();
                 Template templateBackend = groupTemplateBackEnd.getTemplate(fileTemplateName);
                 Template templateBackend = groupTemplateBackEnd.getTemplate(fileTemplateName);
                 templateBackend.binding(bindingJsonObject);
                 templateBackend.binding(bindingJsonObject);
                 String resultName = StrUtil.removeSuffix(fileTemplateName, ".btl");
                 String resultName = StrUtil.removeSuffix(fileTemplateName, ".btl");
-                if(fileTemplateName.equalsIgnoreCase("Entity.java.btl")) {
-                    resultName = ".java";
-                }
                 genBasicCodeBackendResult.setCodeFileName(genBasic.getClassName() + resultName);
                 genBasicCodeBackendResult.setCodeFileName(genBasic.getClassName() + resultName);
                 genBasicCodeBackendResult.setCodeFileWithPathName(genBackendBasicPath + fileTemplatePath + File.separator + genBasic.getClassName() + resultName);
                 genBasicCodeBackendResult.setCodeFileWithPathName(genBackendBasicPath + fileTemplatePath + File.separator + genBasic.getClassName() + resultName);
                 genBasicCodeBackendResult.setCodeFileContent(templateBackend.render());
                 genBasicCodeBackendResult.setCodeFileContent(templateBackend.render());
@@ -504,7 +482,7 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
     public JSONObject getBindingJsonObject(GenBasic genBasic) {
     public JSONObject getBindingJsonObject(GenBasic genBasic) {
         JSONObject bindingJsonObject = JSONUtil.createObj();
         JSONObject bindingJsonObject = JSONUtil.createObj();
         // 代码模块名
         // 代码模块名
-        bindingJsonObject.set("moduleName", MODULE_KEY);
+        bindingJsonObject.set("moduleName", genBasic.getModuleName());
         // 功能名
         // 功能名
         bindingJsonObject.set("functionName", genBasic.getFunctionName());
         bindingJsonObject.set("functionName", genBasic.getFunctionName());
         // 业务名
         // 业务名
@@ -542,7 +520,7 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
         // 菜单组件
         // 菜单组件
         bindingJsonObject.set("menuComponent", MODULE_KEY + StrUtil.SLASH + genBasic.getBusName() + StrUtil.SLASH + "index");
         bindingJsonObject.set("menuComponent", MODULE_KEY + StrUtil.SLASH + genBasic.getBusName() + StrUtil.SLASH + "index");
         // 模块ID
         // 模块ID
-        bindingJsonObject.set("moduleId", genBasic.getModule());
+        bindingJsonObject.set("moduleId", genBasic.getModuleName());
         // 添加按钮ID
         // 添加按钮ID
         bindingJsonObject.set("addButtonId", IdWorker.getIdStr());
         bindingJsonObject.set("addButtonId", IdWorker.getIdStr());
         // 编辑按钮ID
         // 编辑按钮ID
@@ -559,8 +537,13 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
         List<JSONObject> configList = CollectionUtil.newArrayList();
         List<JSONObject> configList = CollectionUtil.newArrayList();
         // 定义是否有排序字段
         // 定义是否有排序字段
         AtomicBoolean hasSortCodeField = new AtomicBoolean(false);
         AtomicBoolean hasSortCodeField = new AtomicBoolean(false);
+        //是否为租户表
+        AtomicBoolean tenant=new AtomicBoolean(false);
         genConfigService.list(new LambdaQueryWrapper<GenConfig>().eq(GenConfig::getBasicId, genBasic.getId()))
         genConfigService.list(new LambdaQueryWrapper<GenConfig>().eq(GenConfig::getBasicId, genBasic.getId()))
                 .forEach(genConfig -> {
                 .forEach(genConfig -> {
+                    if ("tenant_id".equals(genConfig.getFieldName())) {
+                        tenant.set(true);
+                    }
                     // 定义字段信息
                     // 定义字段信息
                     JSONObject configItem = JSONUtil.createObj();
                     JSONObject configItem = JSONUtil.createObj();
                     if(genConfig.getFieldName().equalsIgnoreCase(SORT_CODE_KEY)) {
                     if(genConfig.getFieldName().equalsIgnoreCase(SORT_CODE_KEY)) {
@@ -626,10 +609,61 @@ public class GenBasicServiceImpl extends ServiceImpl<GenBasicMapper, GenBasic> i
                     configList.add(configItem);
                     configList.add(configItem);
 
 
                 });
                 });
+        // 是否为租户表
+        bindingJsonObject.set("isTenant", tenant.get());
         // 配置信息
         // 配置信息
         bindingJsonObject.set("configList", configList);
         bindingJsonObject.set("configList", configList);
         // 有排序字段
         // 有排序字段
         bindingJsonObject.set("hasSortCodeField", hasSortCodeField.get());
         bindingJsonObject.set("hasSortCodeField", hasSortCodeField.get());
         return bindingJsonObject;
         return bindingJsonObject;
     }
     }
+
+
+    private void addTableColumns(GenBasic genBasic){
+        if(StrUtil.isNotEmpty(genBasic.getId())){
+            genConfigMapper.delete(new LambdaQueryWrapper<GenConfig>()
+            .eq(GenConfig::getBasicId,genBasic.getId()));
+        }
+        GenBasicTableColumnParam tableColumnParam = new GenBasicTableColumnParam();
+        tableColumnParam.setTableName(genBasic.getDbTable());
+        List<GenBasicTableColumnResult> resultList = this.tableColumns(tableColumnParam);
+        for (int i = 0; i < resultList.size(); i++) {
+            GenBasicTableColumnResult item = resultList.get(i);
+            GenConfigAddParam addParam = new GenConfigAddParam();
+            addParam.setBasicId(genBasic.getId());
+            if (item.getColumnName().equals(genBasic.getDbTableKey())) {
+                addParam.setIsTableKey(GenYesNoEnum.Y.getValue());
+            } else {
+                addParam.setIsTableKey(GenYesNoEnum.N.getValue());
+            }
+            addParam.setFieldName(item.getColumnName());
+            addParam.setFieldType(item.getTypeName());
+            addParam.setFieldRemark(item.getColumnRemark());
+            addParam.setFieldJavaType(GenDbTypeUtil.getJavaTypeBySqlType(item.getTypeName()));
+            addParam.setEffectType(GenEffectTypeEnum.INPUT.getValue().toLowerCase());
+            // 除主键、删除标志、创建人、创建时间、修改人和修改时间外,所有默认在列表显示、在增改显示、非列省略、非必填,非查询
+            String logicDeleteField = mybatisPlusProperties.getGlobalConfig().getDbConfig().getLogicDeleteField();
+            if(ObjectUtil.isEmpty(logicDeleteField)) {
+                logicDeleteField = "DELETE_FLAG";
+            }
+            if(genBasic.getDbTableKey().equalsIgnoreCase(item.getColumnName()) ||
+                    logicDeleteField.equalsIgnoreCase(item.getColumnName()) ||
+                    CREATE_USER_KEY.equalsIgnoreCase(item.getColumnName()) ||
+                    CREATE_TIME_KEY.equalsIgnoreCase(item.getColumnName()) ||
+                    UPDATE_USER_KEY.equalsIgnoreCase(item.getColumnName()) ||
+                    UPDATE_TIME_KEY.equalsIgnoreCase(item.getColumnName())) {
+                addParam.setWhetherTable(GenYesNoEnum.N.getValue());
+                addParam.setWhetherAddUpdate(GenYesNoEnum.N.getValue());
+            } else {
+                addParam.setWhetherTable(GenYesNoEnum.Y.getValue());
+                addParam.setWhetherAddUpdate(GenYesNoEnum.Y.getValue());
+            }
+            addParam.setWhetherRetract(GenYesNoEnum.N.getValue());
+            addParam.setWhetherRequired(GenYesNoEnum.N.getValue());
+            addParam.setQueryWhether(GenYesNoEnum.N.getValue());
+            addParam.setSortCode(i);
+            GenConfig genConfig = BeanUtil.toBean(addParam, GenConfig.class);
+            genConfigService.save(genConfig);
+        }
+    }
 }
 }

+ 5 - 5
tr-modules/tr-module-gen/src/main/java/cn/tr/module/gen/modular/config/param/GenConfigEditParam.java

@@ -76,27 +76,27 @@ public class GenConfigEditParam {
     /** 列表显示 */
     /** 列表显示 */
     @ApiModelProperty(value = "列表显示", required = true, position = 10)
     @ApiModelProperty(value = "列表显示", required = true, position = 10)
     @NotNull(message = "whetherTable不能为空")
     @NotNull(message = "whetherTable不能为空")
-    private Boolean whetherTable;
+    private String whetherTable;
 
 
     /** 列省略 */
     /** 列省略 */
     @ApiModelProperty(value = "列省略", required = true, position = 11)
     @ApiModelProperty(value = "列省略", required = true, position = 11)
     @NotNull(message = "whetherRetract不能为空")
     @NotNull(message = "whetherRetract不能为空")
-    private Boolean whetherRetract;
+    private String whetherRetract;
 
 
     /** 增改 */
     /** 增改 */
     @ApiModelProperty(value = "增改", required = true, position = 12)
     @ApiModelProperty(value = "增改", required = true, position = 12)
     @NotNull(message = "whetherAddUpdate不能为空")
     @NotNull(message = "whetherAddUpdate不能为空")
-    private Boolean whetherAddUpdate;
+    private String whetherAddUpdate;
 
 
     /** 必填 */
     /** 必填 */
     @ApiModelProperty(value = "必填", required = true, position = 13)
     @ApiModelProperty(value = "必填", required = true, position = 13)
     @NotNull(message = "whetherRequired不能为空")
     @NotNull(message = "whetherRequired不能为空")
-    private Boolean whetherRequired;
+    private String whetherRequired;
 
 
     /** 查询 */
     /** 查询 */
     @ApiModelProperty(value = "查询", required = true, position = 14)
     @ApiModelProperty(value = "查询", required = true, position = 14)
     @NotNull(message = "queryWhether不能为空")
     @NotNull(message = "queryWhether不能为空")
-    private Boolean queryWhether;
+    private String queryWhether;
 
 
     /** 查询方式 */
     /** 查询方式 */
     @ApiModelProperty(value = "查询方式", required = true, position = 15)
     @ApiModelProperty(value = "查询方式", required = true, position = 15)

+ 0 - 45
tr-modules/tr-module-gen/src/main/resources/backend/AddParam.java.btl

@@ -1,45 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package ${packageName}.${moduleName}.modular.${busName}.param;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * ${functionName}添加参数
- *
- * @author ${authorName}
- * @date ${genTime}
- **/
-@Getter
-@Setter
-public class ${className}AddParam {
-
-    <% for(var i = 0; i < configList.~size; i++) { %>
-    <% if(configList[i].needAdd) { %>
-    /** ${configList[i].fieldRemark} */
-    @ApiModelProperty(value = "${configList[i].fieldRemark}",<% if(configList[i].required) { %> required = true,<% } %> position = ${i + 1})
-    <% if(configList[i].required) { %>
-    <% if(configList[i].fieldJavaType == 'String') { %>@NotBlank<% } else { %>@NotNull<% } %>(message = "${configList[i].fieldNameCamelCase}不能为空")
-    <% } else { %><% } %>
-    private ${configList[i].fieldJavaType} ${configList[i].fieldNameCamelCase};
-
-    <% } %>
-    <% } %>
-}

+ 41 - 0
tr-modules/tr-module-gen/src/main/resources/backend/DTO.java.btl

@@ -0,0 +1,41 @@
+package ${packageName}.${moduleName}.${busName}.dto;
+
+import cn.tr.plugin.mybatis.pojo.BaseDTO;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import cn.tr.core.validation.Insert;
+import cn.tr.core.validation.Update;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import javax.validation.constraints.NotNull;
+/**
+ * ${functionName}传输对象
+ *
+ * @author ${authorName}
+ * @date ${genTime}
+ **/
+@Data
+@ApiModel("${functionName}")
+@EqualsAndHashCode(callSuper = true)
+@ToString
+public class ${className}DTO extends BaseDTO  {
+    private static final long serialVersionUID = 1L;
+    <% for(var i = 0; i < configList.~size; i++) { %>
+    <% var fieldNameCamelCase=configList[i].fieldNameCamelCase;
+if(fieldNameCamelCase== "createTime" || fieldNameCamelCase == "createBy" || fieldNameCamelCase == "updateTime" ||fieldNameCamelCase == "updateBy" || fieldNameCamelCase == "tenantId"  || fieldNameCamelCase== "deleted" ) {
+        continue ;} %>
+    <% if(configList[i].needPage) { %>
+        continue;
+    <% } %>
+    @ApiModelProperty(value = "${configList[i].fieldRemark}", position = ${i + 1})
+    <% if(configList[i].needTableId ) { %>
+    @NotNull(message = "主键不能为空",groups = {Update.class})
+    <% } else if(configList[i].whetherRequired!=null && configList[i].whetherRequired){ %>
+    @NotNull(message = "configList[i].fieldRemark不能为空",groups = {Update.class,Insert.class})
+    <% } %>
+    private ${configList[i].fieldJavaType} ${configList[i].fieldNameCamelCase};
+
+
+    <% } %>
+}

+ 0 - 45
tr-modules/tr-module-gen/src/main/resources/backend/EditParam.java.btl

@@ -1,45 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package ${packageName}.${moduleName}.modular.${busName}.param;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * ${functionName}编辑参数
- *
- * @author ${authorName}
- * @date ${genTime}
- **/
-@Getter
-@Setter
-public class ${className}EditParam {
-
-    <% for(var i = 0; i < configList.~size; i++) { %>
-    <% if(configList[i].needEdit) { %>
-    /** ${configList[i].fieldRemark} */
-    @ApiModelProperty(value = "${configList[i].fieldRemark}",<% if(configList[i].required) { %> required = true,<% } %> position = ${i + 1})
-    <% if(configList[i].required) { %>
-    <% if(configList[i].fieldJavaType == 'String') { %>@NotBlank<% } else { %>@NotNull<% } %>(message = "${configList[i].fieldNameCamelCase}不能为空")
-    <% } else { %><% } %>
-    private ${configList[i].fieldJavaType} ${configList[i].fieldNameCamelCase};
-
-    <% } %>
-    <% } %>
-}

+ 0 - 53
tr-modules/tr-module-gen/src/main/resources/backend/Entity.java.btl

@@ -1,53 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package ${packageName}.${moduleName}.modular.${busName}.entity;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableField;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * ${functionName}实体
- *
- * @author ${authorName}
- * @date ${genTime}
- **/
-@Getter
-@Setter
-@TableName("${dbTable}")
-public class ${className} {
-
-    <% for(var i = 0; i < configList.~size; i++) { %>
-    /** ${configList[i].fieldRemark} */
-    <% if(configList[i].needTableId) { %>
-    @TableId
-    <% } else { %><% } %>
-    @ApiModelProperty(value = "${configList[i].fieldRemark}", position = ${i + 1})
-    <% if(configList[i].needAutoInsert) { %>
-    @TableField(fill = FieldFill.INSERT)
-    <% } else { %><% } %>
-    <% if(configList[i].needAutoUpdate) { %>
-    @TableField(fill = FieldFill.UPDATE)
-    <% } else { %><% } %>
-    private ${configList[i].fieldJavaType} ${configList[i].fieldNameCamelCase};
-    <% if(i == configList.~size - 1) { %><% } else { %>
-
-    <% } %>
-    <% } %>
-}

+ 0 - 34
tr-modules/tr-module-gen/src/main/resources/backend/Enum.java.btl

@@ -1,34 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package ${packageName}.${moduleName}.modular.${busName}.enums;
-
-import lombok.Getter;
-
-/**
- * ${functionName}枚举
- *
- * @author ${authorName}
- * @date ${genTime}
- **/
-@Getter
-public enum ${className}Enum {
-
-    /** 测试 */
-    TEST("TEST");
-
-    private final String value;
-
-    ${className}Enum(String value) {
-        this.value = value;
-    }
-}

+ 0 - 35
tr-modules/tr-module-gen/src/main/resources/backend/IdParam.java.btl

@@ -1,35 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package ${packageName}.${moduleName}.modular.${busName}.param;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.validation.constraints.NotBlank;
-
-/**
- * ${functionName}Id参数
- *
- * @author ${authorName}
- * @date ${genTime}
- **/
-@Getter
-@Setter
-public class ${className}IdParam {
-
-    /** ${dbTableKeyRemark} */
-    @ApiModelProperty(value = "${dbTableKeyRemark}", required = true)
-    @NotBlank(message = "${dbTableKeyCamelCase}不能为空")
-    private ${dbTableKeyJavaType} ${dbTableKeyCamelCase};
-}

+ 26 - 23
tr-modules/tr-module-gen/src/main/resources/backend/Mapper.java.btl

@@ -1,25 +1,28 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package ${packageName}.${moduleName}.modular.${busName}.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import ${packageName}.${moduleName}.modular.${busName}.entity.${className};
+package  ${packageName}.${moduleName}.mapper.${busName};
+
+import ${packageName}.${moduleName}.${busName}.po.${className}PO;
+import ${packageName}.${moduleName}.${busName}.dto.${className}DTO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
 
 
 /**
 /**
- * ${functionName}Mapper接口
- *
- * @author ${authorName}
- * @date ${genTime}
- **/
-public interface ${className}Mapper extends BaseMapper<${className}> {
-}
+* ${functionName}映射工具
+*
+* @author ${authorName}
+* @date ${genTime}
+**/
+@Mapper
+public interface ${className}Mapper {
+    ${className}Mapper INSTANCE = Mappers.getMapper(${className}Mapper.class);
+
+    ${className}PO convertPO(${className}DTO source);
+
+    ${className}DTO convertDto(${className}PO source);
+
+    List<${className}DTO> convertDtoList(List<${className}PO> source);
+
+    List<${className}PO> convertPOList(List<${className}DTO> source);
+
+}

+ 45 - 0
tr-modules/tr-module-gen/src/main/resources/backend/PO.java.btl

@@ -0,0 +1,45 @@
+package ${packageName}.${moduleName}.${busName}.po;
+
+<% if(isTenant) { %>
+import cn.tr.plugin.mybatis.pojo.TenantPO;   <% } else { %>
+import cn.tr.plugin.mybatis.pojo.BasePO;<% } %>
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+/**
+ * ${functionName}实体
+ *
+ * @author ${authorName}
+ * @date ${genTime}
+ **/
+@Data
+@TableName("${dbTable}")
+@EqualsAndHashCode(callSuper = true)
+@ToString
+public class ${className}PO extends <% if(isTenant) { %>TenantPO<% } else { %>BasePO<% } %> {
+
+    <% for(var i = 0; i < configList.~size; i++) { %>
+<%   var fieldNameCamelCase=configList[i].fieldNameCamelCase;
+ if(fieldNameCamelCase== "createTime" || fieldNameCamelCase == "createBy" || fieldNameCamelCase == "updateTime" ||fieldNameCamelCase == "updateBy" ) {
+      break ;} %>
+    /** ${configList[i].fieldRemark} */
+    <% if(configList[i].needTableId) { %>
+    @TableId
+    <% } else { %><% } %>
+    @ApiModelProperty(value = "${configList[i].fieldRemark}", position = ${i + 1})
+    <% if(configList[i].needAutoInsert) { %>
+    @TableField(fill = FieldFill.INSERT)
+    <% } else { %><% } %>
+    <% if(configList[i].needAutoUpdate) { %>
+    @TableField(fill = FieldFill.UPDATE)
+    <% } else { %><% } %>
+    private ${configList[i].fieldJavaType} ${configList[i].fieldNameCamelCase};
+    <% if(i == configList.~size - 1) { %><% } else { %>
+
+    <% } %>
+    <% } %>
+}

+ 0 - 70
tr-modules/tr-module-gen/src/main/resources/backend/PageParam.java.btl

@@ -1,70 +0,0 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package ${packageName}.${moduleName}.modular.${busName}.param;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Getter;
-import lombok.Setter;
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * ${functionName}查询参数
- *
- * @author ${authorName}
- * @date ${genTime}
- **/
-@Getter
-@Setter
-public class ${className}PageParam {
-
-    /** 当前页 */
-    @ApiModelProperty(value = "当前页码")
-    private Integer current;
-
-    /** 每页条数 */
-    @ApiModelProperty(value = "每页条数")
-    private Integer size;
-
-    /** 排序字段 */
-    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
-    private String sortField;
-
-    /** 排序方式 */
-    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
-    private String sortOrder;
-
-    /** 关键词 */
-    @ApiModelProperty(value = "关键词")
-    private String searchKey;
-
-    <% for(var i = 0; i < configList.~size; i++) { %>
-    <% if(configList[i].needPage) { %>
-    <% if(configList[i].effectType == 'datepicker') { %>
-    /** ${configList[i].fieldRemark}开始 */
-    @ApiModelProperty(value = "${configList[i].fieldRemark}开始")
-    private String start${configList[i].fieldNameCamelCaseFirstUpper};
-
-    /** ${configList[i].fieldRemark}结束 */
-    @ApiModelProperty(value = "${configList[i].fieldRemark}结束")
-    private String end${configList[i].fieldNameCamelCaseFirstUpper};
-
-    <% } else { %>
-    /** ${configList[i].fieldRemark} */
-    @ApiModelProperty(value = "${configList[i].fieldRemark}")
-    private ${configList[i].fieldJavaType} ${configList[i].fieldNameCamelCase};
-
-    <% } %>
-    <% } %>
-    <% } %>
-}

+ 31 - 0
tr-modules/tr-module-gen/src/main/resources/backend/QueryDTO.java.btl

@@ -0,0 +1,31 @@
+package ${packageName}.${moduleName}.${busName}.dto;
+
+import cn.tr.plugin.mybatis.pojo.BaseDTO;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import cn.tr.core.validation.Insert;
+import cn.tr.core.validation.Update;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import javax.validation.constraints.NotNull;
+/**
+ * ${functionName}查询参数
+ *
+ * @author ${authorName}
+ * @date ${genTime}
+ **/
+@Data
+@ApiModel("${functionName}")
+@EqualsAndHashCode(callSuper = true)
+@ToString
+public class ${className}QueryDTO  {
+    private static final long serialVersionUID = 1L;
+    <% for(var i = 0; i < configList.~size; i++) { %>
+    <% if(configList[i].queryWhether != null && configList[i].queryWhether ) { %>
+        @ApiModelProperty(value = "${configList[i].fieldRemark}", position = ${i + 1})
+
+        private <% if(configList[i].queryType == "BETWEEN"){ %>BetweenQuery<${configList[i].fieldJavaType}><% }else { %>${configList[i].fieldJavaType}<%}%> ${configList[i].fieldNameCamelCase};
+    <% } %>
+    <% } %>
+}

+ 18 - 0
tr-modules/tr-module-gen/src/main/resources/backend/Repository.java.btl

@@ -0,0 +1,18 @@
+package ${packageName}.${moduleName}.${busName}.repository;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+import java.util.*;
+import ${packageName}.${moduleName}.${busName}.po.${className}PO;
+/**
+ * ${functionName}Mapper接口
+ *
+ * @author ${authorName}
+ * @date ${genTime}
+ **/
+@Repository
+@Mapper
+public interface ${className}Repository extends BaseMapper<${className}PO> {
+}

+ 27 - 52
tr-modules/tr-module-gen/src/main/resources/backend/Service.java.btl

@@ -1,25 +1,8 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package ${packageName}.${moduleName}.modular.${busName}.service;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
-import ${packageName}.${moduleName}.modular.${busName}.entity.${className};
-import ${packageName}.${moduleName}.modular.${busName}.param.${className}AddParam;
-import ${packageName}.${moduleName}.modular.${busName}.param.${className}EditParam;
-import ${packageName}.${moduleName}.modular.${busName}.param.${className}IdParam;
-import ${packageName}.${moduleName}.modular.${busName}.param.${className}PageParam;
+package ${packageName}.${moduleName}.${busName}.service;
 
 
+import ${packageName}.${moduleName}.${busName}.po.${className}PO;
+import ${packageName}.${moduleName}.${busName}.dto.${className}DTO;
+import ${packageName}.${moduleName}.${busName}.dto.${className}QueryDTO;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -28,53 +11,45 @@ import java.util.List;
  * @author ${authorName}
  * @author ${authorName}
  * @date ${genTime}
  * @date ${genTime}
  **/
  **/
-public interface ${className}Service extends IService<${className}> {
+public interface ${className}Service{
 
 
     /**
     /**
-     * 获取${functionName}分页
-     *
-     * @author ${authorName}
-     * @date ${genTime}
+     * 根据条件查询{functionName}
+     * @param    query 查询参数
+     * @author   ${authorName}
+     * @date     ${genTime}
      */
      */
-    Page<${className}> page(${className}PageParam ${classNameFirstLower}PageParam);
+    List<${className}DTO> select${className}List(${className}QueryDTO query);
 
 
     /**
     /**
-     * 添加${functionName}
-     *
-     * @author ${authorName}
-     * @date ${genTime}
+     * 根据id查询{functionName}
+     * @param    id 主键id
+     * @author   ${authorName}
+     * @date     ${genTime}
      */
      */
-    void add(${className}AddParam ${classNameFirstLower}AddParam);
+    ${className}CommonDTO select${className}ById(String id);
 
 
     /**
     /**
      * 编辑${functionName}
      * 编辑${functionName}
-     *
-     * @author ${authorName}
-     * @date ${genTime}
+     * @param   source 编辑实体类
+     * @author  ${authorName}
+     * @date    ${genTime}
      */
      */
-    void edit(${className}EditParam ${classNameFirstLower}EditParam);
+    boolean update${className}ById(${className}DTO source);
 
 
     /**
     /**
-     * 删除${functionName}
-     *
+     * 新增{functionName}
+     * @param   source 新增实体类
      * @author ${authorName}
      * @author ${authorName}
      * @date ${genTime}
      * @date ${genTime}
      */
      */
-    void delete(List<${className}IdParam> ${classNameFirstLower}IdParamList);
+    boolean insert${className}(${className}AddDTO source);
 
 
     /**
     /**
-     * 获取${functionName}详情
-     *
+     * 删除{functionName}详情
+     * @param  ids 删除主键集合
      * @author ${authorName}
      * @author ${authorName}
-     * @date ${genTime}
+     * @date   ${genTime}
      */
      */
-    ${className} detail(${className}IdParam ${classNameFirstLower}IdParam);
-
-    /**
-     * 获取${functionName}详情
-     *
-     * @author ${authorName}
-     * @date ${genTime}
-     **/
-    ${className} queryEntity(String id);
-}
+    int delete${className}ByIds(Collection<String> ids);
+}

+ 98 - 101
tr-modules/tr-module-gen/src/main/resources/backend/ServiceImpl.java.btl

@@ -1,37 +1,18 @@
-/*
- * Copyright [2022] [https://www.xiaonuo.vip]
- *
- * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
- *
- * 1.请不要删除和修改根目录下的LICENSE文件。
- * 2.请不要删除和修改Snowy源码头部的版权声明。
- * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
- * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
- * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
- * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
- */
-package ${packageName}.${moduleName}.modular.${busName}.service.impl;
+package ${packageName}.${moduleName}.${busName}.service.impl;
 
 
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollStreamUtil;
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import ${packageName}.${moduleName}.mapper.${busName}.${className}Mapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.tr.plugin.mybatis.pojo.BetweenQuery;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
-import ${packageName}.common.enums.CommonSortOrderEnum;
-import ${packageName}.common.exception.CommonException;
-import ${packageName}.common.page.CommonPageRequest;
-import ${packageName}.${moduleName}.modular.${busName}.entity.${className};
-import ${packageName}.${moduleName}.modular.${busName}.mapper.${className}Mapper;
-import ${packageName}.${moduleName}.modular.${busName}.param.${className}AddParam;
-import ${packageName}.${moduleName}.modular.${busName}.param.${className}EditParam;
-import ${packageName}.${moduleName}.modular.${busName}.param.${className}IdParam;
-import ${packageName}.${moduleName}.modular.${busName}.param.${className}PageParam;
-import ${packageName}.${moduleName}.modular.${busName}.service.${className}Service;
-
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import ${packageName}.${moduleName}.${busName}.repository.${className}Repository;
+import ${packageName}.${moduleName}.${busName}.po.${className}PO;
+import ${packageName}.${moduleName}.${busName}.dto.${className}DTO;
+import ${packageName}.${moduleName}.${busName}.dto.${className}QueryDTO;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -41,81 +22,97 @@ import java.util.List;
  * @date ${genTime}
  * @date ${genTime}
  **/
  **/
 @Service
 @Service
-public class ${className}ServiceImpl extends ServiceImpl<${className}Mapper, ${className}> implements ${className}Service {
+public class ${className}ServiceImpl implements ${className}Service {
+    @Autowired
+    private ${className}Repository baseRepository;
 
 
-    @Override
-    public Page<${className}> page(${className}PageParam ${classNameFirstLower}PageParam) {
-        QueryWrapper<${className}> queryWrapper = new QueryWrapper<>();
-        <% for(var i = 0; i < configList.~size; i++) { %>
-        <% if(configList[i].needPage) { %>
-        <% if(configList[i].effectType == 'datepicker') { %>
-        if(ObjectUtil.isNotEmpty(${classNameFirstLower}PageParam.getStart${configList[i].fieldNameCamelCaseFirstUpper}()) && ObjectUtil.isNotEmpty(${classNameFirstLower}PageParam.getEnd${configList[i].fieldNameCamelCaseFirstUpper}())) {
-            queryWrapper.lambda().between(${className}::get${configList[i].fieldNameCamelCaseFirstUpper}, ${classNameFirstLower}PageParam.getStart${configList[i].fieldNameCamelCaseFirstUpper}(), ${classNameFirstLower}PageParam.getEnd${configList[i].fieldNameCamelCaseFirstUpper}());
-        }
-        <% } else { %>
-        if(ObjectUtil.isNotEmpty(${classNameFirstLower}PageParam.get${configList[i].fieldNameCamelCaseFirstUpper}())) {
-            queryWrapper.lambda().${configList[i].needPageType}(${className}::get${configList[i].fieldNameCamelCaseFirstUpper}, ${classNameFirstLower}PageParam.get${configList[i].fieldNameCamelCaseFirstUpper}());
-        }
-        <% } %>
-        <% } %>
-        <% } %>
-        if(ObjectUtil.isAllNotEmpty(${classNameFirstLower}PageParam.getSortField(), ${classNameFirstLower}PageParam.getSortOrder())) {
-            CommonSortOrderEnum.validate(${classNameFirstLower}PageParam.getSortOrder());
-            queryWrapper.orderBy(true, ${classNameFirstLower}PageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
-                    StrUtil.toUnderlineCase(${classNameFirstLower}PageParam.getSortField()));
-        } else {
-            <% if(hasSortCodeField) { %>
-            queryWrapper.lambda().orderByAsc(${className}::getSortCode);
-            <% } else { %>
-            queryWrapper.lambda().orderByAsc(${className}::get${dbTableKeyFirstUpper});
-            <% } %>
-        }
-        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
-    }
 
 
-    @Override
-    public void add(${className}AddParam ${classNameFirstLower}AddParam) {
-        ${className} ${classNameFirstLower} = BeanUtil.toBean(${classNameFirstLower}AddParam, ${className}.class);
-        this.save(${classNameFirstLower});
-    }
+    /**
+    * 根据条件查询{functionName}
+    * @param    query 查询参数
+    * @author   ${authorName}
+    * @date     ${genTime}
+    */
+    public List<${className}DTO> select${className}List(${className}QueryDTO query){
+        return ${className}Mapper.INSTANCE.convertDtoList(
+                baseRepository.selectList(new LambdaQueryWrapper<${className}PO>()
+                    <% for(var i = 0; i < configList.~size; i++) {  %>
+                    <% if(configList[i].queryWhether != null && configList[i].queryWhether ) {  %>
+                        <% if(configList[i].queryType == "like"){  %>
+                        .like(Objects.nonNull(query.get<%%>configList[i].fieldNameCamelCaseFirstUpper()),${className}PO::get<%%>configList[i].fieldNameCamelCaseFirstUpper,
+query.get<%%>configList[i].fieldNameCamelCaseFirstUpper())
+                        <% }  %>
+                        <% if(configList[i].queryType == "notLike"){  %>
+                        .notLike(Objects.nonNull(query.get<%%>configList[i].fieldNameCamelCaseFirstUpper()),${className}PO::get<%%>configList[i].fieldNameCamelCaseFirstUpper,query.get<%%>configList[i].fieldNameCamelCaseFirstUpper())
+                        <% }  %>
+                        <% if(configList[i].queryType == "eq"){  %>
+                        .eq(Objects.nonNull(query.get<%%>configList[i].fieldNameCamelCaseFirstUpper()),${className}PO::get<%%>configList[i].fieldNameCamelCaseFirstUpper,query.get<%%>configList[i].fieldNameCamelCaseFirstUpper())
+                        <% }  %>
+                        <% if(configList[i].queryType == "ne"){  %>
+                        .ne(Objects.nonNull(query.get<%%>configList[i].fieldNameCamelCaseFirstUpper()),${className}PO::get<%%>configList[i].fieldNameCamelCaseFirstUpper,query.get<%%>configList[i].fieldNameCamelCaseFirstUpper())
+                        <% }  %>
+                        <% if(configList[i].queryType == "gt"){  %>
+                        .gt(Objects.nonNull(query.get<%%>configList[i].fieldNameCamelCaseFirstUpper()),${className}PO::get<%%>configList[i].fieldNameCamelCaseFirstUpper,query.get<%%>configList[i].fieldNameCamelCaseFirstUpper())
+                        <% }  %>
+                        <% if(configList[i].queryType == "ge"){  %>
+                        .ge(Objects.nonNull(query.get<%%>configList[i].fieldNameCamelCaseFirstUpper()),${className}PO::get<%%>configList[i].fieldNameCamelCaseFirstUpper,query.get<%%>configList[i].fieldNameCamelCaseFirstUpper())
+                        <% }  %>
+                        <% if(configList[i].queryType == "lt"){  %>
+                        .lt(Objects.nonNull(query.get<%%>configList[i].fieldNameCamelCaseFirstUpper()),${className}PO::get<%%>configList[i].fieldNameCamelCaseFirstUpper,query.get<%%>configList[i].fieldNameCamelCaseFirstUpper())
+                        <% }  %>
+                        <% if(configList[i].queryType == "le"){  %>
+                        .le(Objects.nonNull(query.get<%%>configList[i].fieldNameCamelCaseFirstUpper()),${className}PO::get<%%>configList[i].fieldNameCamelCaseFirstUpper,query.get<%%>configList[i].fieldNameCamelCaseFirstUpper())
+                        <% }  %>
+                        <% if(configList[i].queryType == "BETWEEN"){  %>
+                        .le(Objects.nonNull(query.get<%%>configList[i].fieldNameCamelCaseFirstUpper())&&Objects.nonNull(query.get<%%>configList[i].fieldNameCamelCaseFirstUpper().getMax(),${className}PO::get<%%>configList[i].fieldNameCamelCaseFirstUpper,query.get<%%>configList[i].fieldNameCamelCaseFirstUpper().getMax()))
+                        .ge(Objects.nonNull(query.get<%%>configList[i].fieldNameCamelCaseFirstUpper())&&Objects.nonNull(query.get<%%>configList[i].fieldNameCamelCaseFirstUpper().getMin(),${className}PO::get<%%>configList[i].fieldNameCamelCaseFirstUpper,query.get<%%>configList[i].fieldNameCamelCaseFirstUpper().getMin()))
+                        <% }  %>
+                    <% }  %>
+                    <% }  %>
+                )
+        );
+    };
 
 
-    @Override
-    public void edit(${className}EditParam ${classNameFirstLower}EditParam) {
-        <% for(var i = 0; i < configList.~size; i++) { %>
-        <% if(configList[i].needTableId) { %>
-        ${className} ${classNameFirstLower} = this.queryEntity(${classNameFirstLower}EditParam.get${configList[i].fieldNameCamelCaseFirstUpper}());
-        <% } %>
-        <% } %>
-        BeanUtil.copyProperties(${classNameFirstLower}EditParam, ${classNameFirstLower});
-        this.updateById(${classNameFirstLower});
-    }
+    /**
+    * 根据id查询{functionName}
+    * @param    id 主键id
+    * @author   ${authorName}
+    * @date     ${genTime}
+    */
+    public ${className}CommonDTO select${className}ById(String id){
+        return ${className}Mapper.INSTANCE.convertDto(baseRepository.selectById(id));
+    };
 
 
+    /**
+    * 编辑${functionName}
+    * @param   source 编辑实体类
+    * @author  ${authorName}
+    * @date    ${genTime}
+    */
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void delete(List<${className}IdParam> ${classNameFirstLower}IdParamList) {
-        // 执行删除
-        <% for(var i = 0; i < configList.~size; i++) { %>
-        <% if(configList[i].needTableId) { %>
-        this.removeBatchByIds(CollStreamUtil.toList(${classNameFirstLower}IdParamList, ${className}IdParam::get${configList[i].fieldNameCamelCaseFirstUpper}));
-        <% } %>
-        <% } %>
-    }
+    public boolean update${className}ById(${className}DTO source){
+            return baseRepository.updateById(${className}Mapper.INSTANCE.convertPO(source))!=0;
+    };
 
 
-    @Override
-    public ${className} detail(${className}IdParam ${classNameFirstLower}IdParam) {
-        <% for(var i = 0; i < configList.~size; i++) { %>
-        <% if(configList[i].needTableId) { %>
-        return this.queryEntity(${classNameFirstLower}IdParam.get${configList[i].fieldNameCamelCaseFirstUpper}());
-        <% } %>
-        <% } %>
-    }
+    /**
+    * 新增{functionName}
+    * @param   source 新增实体类
+    * @author ${authorName}
+    * @date ${genTime}
+    */
+    @Transactional(rollbackFor = Exception.class)
+    public boolean insert${className}(${className}AddDTO source){
+        return baseRepository.insert(${className}Mapper.INSTANCE.convertPO(source))!=0;
+    };
 
 
-    @Override
-    public ${className} queryEntity(String id) {
-        ${className} ${classNameFirstLower} = this.getById(id);
-        if(ObjectUtil.isEmpty(${classNameFirstLower})) {
-            throw new CommonException("${functionName}不存在,id值为:{}", id);
-        }
-        return ${classNameFirstLower};
-    }
+    /**
+    * 删除{functionName}详情
+    * @param  ids 删除主键集合
+    * @author ${authorName}
+    * @date   ${genTime}
+    */
+    @Transactional(rollbackFor = Exception.class)
+    public int delete${className}ByIds(Collection<String> ids){
+        return baseRepository.deleteBatchIds(ids);
+    };
 }
 }

+ 0 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/dict/po/SysDictPO.java

@@ -1,14 +1,12 @@
 package cn.tr.module.sys.dict.po;
 package cn.tr.module.sys.dict.po;
 
 
 import cn.tr.plugin.mybatis.pojo.BasePO;
 import cn.tr.plugin.mybatis.pojo.BasePO;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 import lombok.ToString;
-import org.springframework.stereotype.Indexed;
 
 
 /**
 /**
  * 字典对象 sys_dict
  * 字典对象 sys_dict

+ 6 - 7
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/impl/SysTenantPackageMenuServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.tr.module.sys.mapper.tenant.SysTenantPackageMenuMapper;
 import cn.tr.module.sys.mapper.tenant.SysTenantPackageMenuMapper;
 import cn.tr.module.sys.tenant.dto.SysTenantPackageDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantPackageDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantPackageMenuDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantPackageMenuDTO;
+import cn.tr.module.sys.tenant.enums.PackageEnum;
 import cn.tr.module.sys.tenant.po.SysTenantPackageMenuPO;
 import cn.tr.module.sys.tenant.po.SysTenantPackageMenuPO;
 import cn.tr.module.sys.tenant.repository.SysTenantPackageMenuRepository;
 import cn.tr.module.sys.tenant.repository.SysTenantPackageMenuRepository;
 import cn.tr.module.sys.tenant.service.ISysTenantPackageMenuService;
 import cn.tr.module.sys.tenant.service.ISysTenantPackageMenuService;
@@ -83,6 +84,11 @@ public class SysTenantPackageMenuServiceImpl  extends ServiceImpl<SysTenantPacka
 
 
     @Override
     @Override
     public Set<SysMenuDTO> findMenuIdByPackageId(String packageId) {
     public Set<SysMenuDTO> findMenuIdByPackageId(String packageId) {
+        SysTenantPackageDTO packageDTO = tenantPackageService.selectSysTenantPackageById(packageId);
+        if(packageDTO!=null&&StrUtil.equals(packageDTO.getType(), PackageEnum.sys.name())){
+            //所有目录id
+            return new HashSet<>(menuService.findAllMenu());
+        }
         Set<SysMenuDTO> result = new HashSet<>();
         Set<SysMenuDTO> result = new HashSet<>();
         Set<String> menuIds = this.list(new LambdaQueryWrapper<SysTenantPackageMenuPO>().eq(SysTenantPackageMenuPO::getPackageId, packageId))
         Set<String> menuIds = this.list(new LambdaQueryWrapper<SysTenantPackageMenuPO>().eq(SysTenantPackageMenuPO::getPackageId, packageId))
                 .stream()
                 .stream()
@@ -92,13 +98,6 @@ public class SysTenantPackageMenuServiceImpl  extends ServiceImpl<SysTenantPacka
             List<SysMenuDTO> menus = menuService.selectBatchIds(menuIds);
             List<SysMenuDTO> menus = menuService.selectBatchIds(menuIds);
             result.addAll(menus);
             result.addAll(menus);
         }
         }
-
-        SysTenantPackageDTO packageDTO = tenantPackageService.selectSysTenantPackageById(packageId);
-        if(packageDTO!=null&&StrUtil.equals(packageDTO.getType(),"sys")){
-            //所有目录id
-            List<SysMenuDTO> menus = menuService.findAllMenu();
-            result.addAll(menus);
-        }
         return result;
         return result;
     }
     }
 }
 }

+ 0 - 7
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysOrgDTO.java

@@ -27,13 +27,6 @@ public class SysOrgDTO extends TreeNode<String> {
     @NotNull(message = "主键不能为空",groups = {Update.class})
     @NotNull(message = "主键不能为空",groups = {Update.class})
     private String id;
     private String id;
 
 
-    @ApiModelProperty(value = "父级id 顶级目录的父级id为0")
-    private String parentId;
-
-    @ApiModelProperty(value = "排序",required = true)
-    @NotNull(message = "排序不能为空",groups = {Insert.class, Update.class})
-    private Integer sort;
-
     @ApiModelProperty(value = "部门名称",required = true)
     @ApiModelProperty(value = "部门名称",required = true)
     @NotNull(message = "部门名称不能为空",groups = {Insert.class, Update.class})
     @NotNull(message = "部门名称不能为空",groups = {Insert.class, Update.class})
     private String name;
     private String name;

+ 0 - 3
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysOrgTreeDTO.java

@@ -17,9 +17,6 @@ public class SysOrgTreeDTO extends TreeNode<String> {
     @ApiModelProperty(value = "主键",required = true)
     @ApiModelProperty(value = "主键",required = true)
     private String id;
     private String id;
 
 
-    @ApiModelProperty(value = "父级id 顶级目录的父级id为0",required = true)
-    private String parentId;
-
     @ApiModelProperty(value = "排序",readOnly = true)
     @ApiModelProperty(value = "排序",readOnly = true)
     private Integer sort;
     private Integer sort;
 
 

+ 2 - 3
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysRoleDTO.java

@@ -21,7 +21,7 @@ import javax.validation.constraints.NotNull;
 public class SysRoleDTO extends BaseDTO {
 public class SysRoleDTO extends BaseDTO {
     private static final long serialVersionUID = -522591939307162613L;
     private static final long serialVersionUID = -522591939307162613L;
     @ApiModelProperty(value = "角色id",required = true)
     @ApiModelProperty(value = "角色id",required = true)
-    @NotEmpty(message = "角色id不能为空",groups = {Insert.class, Update.class})
+    @NotEmpty(message = "角色id不能为空",groups = { Update.class})
     private String id;
     private String id;
 
 
     @ApiModelProperty(value = "角色编码",required = true)
     @ApiModelProperty(value = "角色编码",required = true)
@@ -42,8 +42,7 @@ public class SysRoleDTO extends BaseDTO {
     /**
     /**
      * {@link cn.tr.module.sys.user.enums.RoleEnum}
      * {@link cn.tr.module.sys.user.enums.RoleEnum}
      */
      */
-    @ApiModelProperty(value = "角色类型 sys、系统角色 custom、自定义角色",required = true)
-    @NotEmpty(message = "角色类型不能为空",groups = {Insert.class, Update.class})
+    @ApiModelProperty(value = "角色类型 sys、系统角色 custom、自定义角色",readOnly = true)
     private String type;
     private String type;
 
 
     @ApiModelProperty(value = "排序",required = true)
     @ApiModelProperty(value = "排序",required = true)

+ 0 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysMenuService.java

@@ -10,7 +10,6 @@ import cn.tr.module.sys.user.vo.RouteItemVO;
 import cn.tr.module.sys.user.vo.RouteMetoVO;
 import cn.tr.module.sys.user.vo.RouteMetoVO;
 import cn.tr.plugin.mybatis.service.ITreeService;
 import cn.tr.plugin.mybatis.service.ITreeService;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.cache.annotation.Cacheable;
 
 
 import java.util.Collection;
 import java.util.Collection;
 import java.util.List;
 import java.util.List;

+ 5 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysPortalMenuService.java

@@ -5,7 +5,9 @@ import cn.tr.module.sys.user.dto.SysPortalMenuDTO;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Cacheable;
 
 
+import java.util.Collection;
 import java.util.List;
 import java.util.List;
+import java.util.Set;
 
 
 /**
 /**
  * @ClassName : ISysPortalMenuService
  * @ClassName : ISysPortalMenuService
@@ -37,7 +39,9 @@ public interface ISysPortalMenuService {
      * @param portalId
      * @param portalId
      */
      */
     @CacheEvict(value = "sys:portal:menu",key = "#portalId")
     @CacheEvict(value = "sys:portal:menu",key = "#portalId")
-    default void delMenusByPortalId(String portalId){
+    default void delCacheMenusByPortalId(String portalId){
 
 
     };
     };
+
+    Set<String> findPortalIdByMenuId(Collection<String> source, boolean containsSys);
 }
 }

+ 6 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysPortalService.java

@@ -47,4 +47,10 @@ public interface ISysPortalService {
      * @return 删除数量
      * @return 删除数量
      */
      */
     int deleteSysPortalByIds(Collection<String> ids);
     int deleteSysPortalByIds(Collection<String> ids);
+
+    /**
+     * 找到所有的系统级门户
+     * @return
+     */
+    Collection<SysPortalDTO> findAllSysPortals();
 }
 }

+ 2 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysRoleMenuService.java

@@ -26,6 +26,7 @@ public interface ISysRoleMenuService {
     /**
     /**
      * 找到角色id下的所有菜单信息
      * 找到角色id下的所有菜单信息
      * 使用{@link Cacheable} 对role相应数据进行缓存
      * 使用{@link Cacheable} 对role相应数据进行缓存
+     * {@link ISysRoleMenuService#assignRoleMenu(List)}
      * @param roleId
      * @param roleId
      * @return
      * @return
      */
      */
@@ -37,6 +38,7 @@ public interface ISysRoleMenuService {
      * 删除缓存
      * 删除缓存
      * 当调用
      * 当调用
      {@link ISysRoleMenuService#assignRoleMenu(List)} /
      {@link ISysRoleMenuService#assignRoleMenu(List)} /
+     {@link ISysMenuService#insertSysMenu(SysMenuDTO)} /
      {@link ISysMenuService#updateSysMenuById(SysMenuDTO)} /
      {@link ISysMenuService#updateSysMenuById(SysMenuDTO)} /
      {@link ISysMenuService#deleteSysMenuByIds(Collection)}
      {@link ISysMenuService#deleteSysMenuByIds(Collection)}
      等方法时刷新相应的角色缓存
      等方法时刷新相应的角色缓存

+ 12 - 9
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysMenuServiceImpl.java

@@ -14,10 +14,7 @@ import cn.tr.module.sys.user.dto.SysRoleDTO;
 import cn.tr.module.sys.user.enums.RoleEnum;
 import cn.tr.module.sys.user.enums.RoleEnum;
 import cn.tr.module.sys.user.po.SysMenuPO;
 import cn.tr.module.sys.user.po.SysMenuPO;
 import cn.tr.module.sys.user.repository.SysMenuRepository;
 import cn.tr.module.sys.user.repository.SysMenuRepository;
-import cn.tr.module.sys.user.service.ISysMenuService;
-import cn.tr.module.sys.user.service.ISysRoleMenuService;
-import cn.tr.module.sys.user.service.ISysRoleService;
-import cn.tr.module.sys.user.service.ISysUserRoleService;
+import cn.tr.module.sys.user.service.*;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.context.annotation.Lazy;
@@ -49,6 +46,10 @@ public class SysMenuServiceImpl implements ISysMenuService {
     @Lazy
     @Lazy
     private ISysTenantPackageMenuService tenantPackageMenuService;
     private ISysTenantPackageMenuService tenantPackageMenuService;
 
 
+    @Autowired
+    @Lazy
+    private ISysPortalMenuService portalMenuService;
+
     @Autowired
     @Autowired
     @Lazy
     @Lazy
     private ISysTenantService tenantService;
     private ISysTenantService tenantService;
@@ -67,11 +68,11 @@ public class SysMenuServiceImpl implements ISysMenuService {
                 .like(StrUtil.isNotEmpty(query.getName()), SysMenuPO::getName, query.getName())
                 .like(StrUtil.isNotEmpty(query.getName()), SysMenuPO::getName, query.getName())
                 .eq(ObjectUtil.isNotNull(query.getDisable()), SysMenuPO::getDisable, query.getDisable())
                 .eq(ObjectUtil.isNotNull(query.getDisable()), SysMenuPO::getDisable, query.getDisable())
                 .eq(ObjectUtil.isNotNull(query.getParentId()), SysMenuPO::getParentId, query.getParentId())));
                 .eq(ObjectUtil.isNotNull(query.getParentId()), SysMenuPO::getParentId, query.getParentId())));
-        if(CollectionUtil.isNotEmpty(selectResult)){
-            //取与当前租户菜单交集
-            Set<SysMenuDTO> tenantMenus = tenantService.currentTenantMenus();
-            return new ArrayList<>(CollectionUtil.intersection(tenantMenus,selectResult));
-        }
+//        if(CollectionUtil.isNotEmpty(selectResult)){
+//            //取与当前租户菜单交集
+//            Set<SysMenuDTO> tenantMenus = tenantService.currentTenantMenus();
+//            return new ArrayList<>(CollectionUtil.intersection(tenantMenus,selectResult));
+//        }
         return selectResult;
         return selectResult;
     }
     }
 
 
@@ -157,5 +158,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
         roleIds.parallelStream().forEach(self::delRoleMenusCache);
         roleIds.parallelStream().forEach(self::delRoleMenusCache);
         Set<String> packageIds = tenantPackageMenuService.findPackageIdByMenuId(source,true);
         Set<String> packageIds = tenantPackageMenuService.findPackageIdByMenuId(source,true);
         packageIds.parallelStream().forEach(tenantPackageMenuService::delCacheMenuIdByPackageId);
         packageIds.parallelStream().forEach(tenantPackageMenuService::delCacheMenuIdByPackageId);
+        Set<String> portalIds=portalMenuService.findPortalIdByMenuId(source,true);
+        portalIds.parallelStream().forEach(portalMenuService::delCacheMenusByPortalId);
     }
     }
 }
 }

+ 15 - 5
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysOrgServiceImpl.java

@@ -15,6 +15,7 @@ import cn.tr.module.sys.user.repository.SysOrgRepository;
 import cn.tr.module.sys.user.repository.SysUserRepository;
 import cn.tr.module.sys.user.repository.SysUserRepository;
 import cn.tr.module.sys.user.service.ISysOrgService;
 import cn.tr.module.sys.user.service.ISysOrgService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import lombok.var;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.context.annotation.Lazy;
@@ -35,6 +36,9 @@ public class SysOrgServiceImpl implements ISysOrgService {
     private SysOrgRepository orgRepository;
     private SysOrgRepository orgRepository;
     @Autowired
     @Autowired
     private SysUserRepository userRepository;
     private SysUserRepository userRepository;
+    @Autowired
+    @Lazy
+    private ISysOrgService self;
 
 
     @Override
     @Override
     public List<SysOrgDTO> selectSysOrgList(SysOrgQueryDTO query) {
     public List<SysOrgDTO> selectSysOrgList(SysOrgQueryDTO query) {
@@ -51,18 +55,23 @@ public class SysOrgServiceImpl implements ISysOrgService {
     }
     }
 
 
     @Override
     @Override
-    @CacheEvict(value = "sys:org")
     public boolean updateSysOrgById(SysOrgDTO source) {
     public boolean updateSysOrgById(SysOrgDTO source) {
-        return orgRepository.updateById(SysOrgMapper.INSTANCE.toSysOrgPO(source))!=0;
+        boolean result = orgRepository.updateById(SysOrgMapper.INSTANCE.toSysOrgPO(source)) != 0;
+        if( result){
+            self.delSysOrgTreeCache();
+        }
+        return result;
     }
     }
     @Override
     @Override
-    @CacheEvict(value = "sys:org")
     public boolean insertSysOrg(SysOrgDTO source) {
     public boolean insertSysOrg(SysOrgDTO source) {
-        return orgRepository.insert(SysOrgMapper.INSTANCE.toSysOrgPO(source))!=0;
+        boolean result = orgRepository.insert(SysOrgMapper.INSTANCE.toSysOrgPO(source)) != 0;
+        if( result){
+            self.delSysOrgTreeCache();
+        }
+        return result;
     }
     }
 
 
     @Override
     @Override
-    @CacheEvict(value = "sys:org")
     public int deleteSysOrgByIds(Collection<String> ids) {
     public int deleteSysOrgByIds(Collection<String> ids) {
         List<SysOrgPO> orgs = orgRepository.selectBatchIds(ids);
         List<SysOrgPO> orgs = orgRepository.selectBatchIds(ids);
         if(CollectionUtil.isEmpty(orgs)){
         if(CollectionUtil.isEmpty(orgs)){
@@ -82,6 +91,7 @@ public class SysOrgServiceImpl implements ISysOrgService {
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,String.format("部门 %s 下存在用户,不可删除", JsonUtils.toJsonString(existName)));
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,String.format("部门 %s 下存在用户,不可删除", JsonUtils.toJsonString(existName)));
 
 
         }
         }
+        self.delSysOrgTreeCache();
         return orgRepository.deleteBatchIds(ids);
         return orgRepository.deleteBatchIds(ids);
     }
     }
 }
 }

+ 19 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalMenuServiceImpl.java

@@ -54,7 +54,7 @@ public class SysPortalMenuServiceImpl extends ServiceImpl<SysPortalMenuRepositor
         baseMapper.delete(new LambdaQueryWrapper<SysPortalMenuPO>().in(SysPortalMenuPO::getPortalId,portalIdMap.keySet()));
         baseMapper.delete(new LambdaQueryWrapper<SysPortalMenuPO>().in(SysPortalMenuPO::getPortalId,portalIdMap.keySet()));
         saveBatch(portalMenus);
         saveBatch(portalMenus);
         portalIdMap.forEach((portalId,relations)->{
         portalIdMap.forEach((portalId,relations)->{
-            portalMenuService.delMenusByPortalId(portalId);
+            portalMenuService.delCacheMenusByPortalId(portalId);
         });
         });
     }
     }
 
 
@@ -69,4 +69,22 @@ public class SysPortalMenuServiceImpl extends ServiceImpl<SysPortalMenuRepositor
         }
         }
         return SysMenuMapper.INSTANCE.toSysMenuDTOList(menuRepository.findAllMenuByPortalId(portalId));
         return SysMenuMapper.INSTANCE.toSysMenuDTOList(menuRepository.findAllMenuByPortalId(portalId));
     }
     }
+
+    @Override
+    public Set<String> findPortalIdByMenuId(Collection<String> menuIds, boolean containsSys) {
+        Set<String> portalIds = this.list(new LambdaQueryWrapper<SysPortalMenuPO>()
+                .in(SysPortalMenuPO::getMenuId, menuIds))
+                .stream()
+                .map(SysPortalMenuPO::getPortalId)
+                .collect(Collectors.toSet());
+        Set<String> sysPortalIds=new HashSet<>();
+        if(containsSys){
+            sysPortalIds = portalService.findAllSysPortals().stream()
+                    .map(SysPortalDTO::getId)
+                    .collect(Collectors.toSet());
+
+        }
+        sysPortalIds.addAll(portalIds);
+        return sysPortalIds;
+    }
 }
 }

+ 7 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalServiceImpl.java

@@ -12,7 +12,6 @@ import cn.tr.module.sys.user.po.SysPortalMenuPO;
 import cn.tr.module.sys.user.po.SysPortalPO;
 import cn.tr.module.sys.user.po.SysPortalPO;
 import cn.tr.module.sys.user.repository.SysPortalMenuRepository;
 import cn.tr.module.sys.user.repository.SysPortalMenuRepository;
 import cn.tr.module.sys.user.repository.SysPortalRepository;
 import cn.tr.module.sys.user.repository.SysPortalRepository;
-import cn.tr.module.sys.user.repository.SysUserPortalRepository;
 import cn.tr.module.sys.user.service.ISysPortalService;
 import cn.tr.module.sys.user.service.ISysPortalService;
 import cn.tr.module.sys.user.service.ISysUserPortalService;
 import cn.tr.module.sys.user.service.ISysUserPortalService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -86,12 +85,18 @@ public class SysPortalServiceImpl implements ISysPortalService {
         return result;
         return result;
     }
     }
 
 
+    @Override
+    public Collection<SysPortalDTO> findAllSysPortals() {
+        return SysPortalMapper.INSTANCE.toSysPortalDTOList(portalRepository.selectList(new LambdaQueryWrapper<SysPortalPO>()
+                .eq(SysPortalPO::getType, PortalEnum.sys.name())));
+    }
+
 
 
     private void validatePortalSource(SysPortalPO source){
     private void validatePortalSource(SysPortalPO source){
         SysPortalPO role = portalRepository.selectOne(new LambdaQueryWrapper<SysPortalPO>()
         SysPortalPO role = portalRepository.selectOne(new LambdaQueryWrapper<SysPortalPO>()
                 .eq(SysPortalPO::getCode, source.getCode())
                 .eq(SysPortalPO::getCode, source.getCode())
                 .last("limit 1"));
                 .last("limit 1"));
-        if(role!=null&& StrUtil.equals(role.getId(),source.getId())){
+        if(role!=null&& !StrUtil.equals(role.getId(),source.getId())){
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,String.format("门户编码{%s}不能重复",source.getCode()));
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,String.format("门户编码{%s}不能重复",source.getCode()));
         }
         }
         if(StrUtil.equals(source.getType(), PortalEnum.sys.name())){
         if(StrUtil.equals(source.getType(), PortalEnum.sys.name())){

+ 13 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleMenuServiceImpl.java

@@ -1,6 +1,9 @@
 package cn.tr.module.sys.user.service.impl;
 package cn.tr.module.sys.user.service.impl;
 
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.tr.core.exception.ServiceException;
+import cn.tr.core.exception.TRExcCode;
 import cn.tr.module.sys.mapper.user.SysMenuMapper;
 import cn.tr.module.sys.mapper.user.SysMenuMapper;
 import cn.tr.module.sys.mapper.user.SysRoleMenuMapper;
 import cn.tr.module.sys.mapper.user.SysRoleMenuMapper;
 import cn.tr.module.sys.tenant.service.ISysTenantService;
 import cn.tr.module.sys.tenant.service.ISysTenantService;
@@ -9,8 +12,10 @@ import cn.tr.module.sys.user.dto.SysRoleDTO;
 import cn.tr.module.sys.user.dto.SysRoleMenuDTO;
 import cn.tr.module.sys.user.dto.SysRoleMenuDTO;
 import cn.tr.module.sys.user.enums.RoleEnum;
 import cn.tr.module.sys.user.enums.RoleEnum;
 import cn.tr.module.sys.user.po.SysRoleMenuPO;
 import cn.tr.module.sys.user.po.SysRoleMenuPO;
+import cn.tr.module.sys.user.po.SysRolePO;
 import cn.tr.module.sys.user.repository.SysMenuRepository;
 import cn.tr.module.sys.user.repository.SysMenuRepository;
 import cn.tr.module.sys.user.repository.SysRoleMenuRepository;
 import cn.tr.module.sys.user.repository.SysRoleMenuRepository;
+import cn.tr.module.sys.user.repository.SysRoleRepository;
 import cn.tr.module.sys.user.service.ISysRoleMenuService;
 import cn.tr.module.sys.user.service.ISysRoleMenuService;
 import cn.tr.module.sys.user.service.ISysRoleService;
 import cn.tr.module.sys.user.service.ISysRoleService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -42,6 +47,9 @@ public class SysRoleMenuServiceImpl extends ServiceImpl<SysRoleMenuRepository,Sy
     @Lazy
     @Lazy
     private ISysTenantService tenantService;
     private ISysTenantService tenantService;
 
 
+    @Autowired
+    private SysRoleRepository roleRepository;
+
     @Autowired
     @Autowired
     @Lazy
     @Lazy
     private ISysRoleMenuService self;
     private ISysRoleMenuService self;
@@ -51,6 +59,11 @@ public class SysRoleMenuServiceImpl extends ServiceImpl<SysRoleMenuRepository,Sy
         List<SysRoleMenuPO> roleMenus = SysRoleMenuMapper.INSTANCE.toSysRoleMenuPOList(source);
         List<SysRoleMenuPO> roleMenus = SysRoleMenuMapper.INSTANCE.toSysRoleMenuPOList(source);
         Map<String, List<SysRoleMenuPO>> roleIdMap = roleMenus.stream()
         Map<String, List<SysRoleMenuPO>> roleIdMap = roleMenus.stream()
                 .collect(Collectors.groupingBy(SysRoleMenuPO::getRoleId));
                 .collect(Collectors.groupingBy(SysRoleMenuPO::getRoleId));
+        List<SysRolePO> sysRoles = roleRepository.selectList(new LambdaQueryWrapper<SysRolePO>().in(SysRolePO::getId, roleIdMap.keySet())
+                .eq(SysRolePO::getType, RoleEnum.sys.name()));
+        if(CollectionUtil.isNotEmpty(sysRoles)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"无法对系统角色进行操作");
+        }
         baseMapper.delete(new LambdaQueryWrapper<SysRoleMenuPO>().in(SysRoleMenuPO::getRoleId,roleIdMap.keySet()));
         baseMapper.delete(new LambdaQueryWrapper<SysRoleMenuPO>().in(SysRoleMenuPO::getRoleId,roleIdMap.keySet()));
         saveBatch(roleMenus);
         saveBatch(roleMenus);
         roleIdMap.keySet().forEach(self::delRoleMenusCache);
         roleIdMap.keySet().forEach(self::delRoleMenusCache);

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleServiceImpl.java

@@ -105,7 +105,7 @@ public class SysRoleServiceImpl implements ISysRoleService {
         SysRolePO role = roleRepository.selectOne(new LambdaQueryWrapper<SysRolePO>()
         SysRolePO role = roleRepository.selectOne(new LambdaQueryWrapper<SysRolePO>()
                 .eq(SysRolePO::getCode, source.getCode())
                 .eq(SysRolePO::getCode, source.getCode())
                 .last("limit 1"));
                 .last("limit 1"));
-        if(role!=null&& StrUtil.equals(role.getId(),source.getId())){
+        if(role!=null&& !StrUtil.equals(role.getId(),source.getId())){
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,String.format("角色编码{%s}不能重复",source.getCode()));
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,String.format("角色编码{%s}不能重复",source.getCode()));
         }
         }
         if(StrUtil.equals(source.getType(), RoleEnum.sys.name())){
         if(StrUtil.equals(source.getType(), RoleEnum.sys.name())){

+ 19 - 0
tr-plugins/tr-spring-boot-starter-plugin-mybatis/src/main/java/cn/tr/plugin/mybatis/pojo/BetweenQuery.java

@@ -0,0 +1,19 @@
+package cn.tr.plugin.mybatis.pojo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @ClassName : BetweenQuery
+ * @Description : 区间查询参数
+ * @Author : JR
+ * @Date: 2022年11月21日
+ */
+@Data
+@AllArgsConstructor(staticName = "of")
+@NoArgsConstructor
+public class BetweenQuery<T> {
+    private T min;
+    private T max;
+}

+ 5 - 2
tr-plugins/tr-spring-boot-starter-plugin-web/src/main/java/cn/tr/plugin/web/config/PageStrategyConfig.java

@@ -1,13 +1,14 @@
 package cn.tr.plugin.web.config;
 package cn.tr.plugin.web.config;
 
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.db.sql.Order;
 import cn.tr.core.pojo.PageDomain;
 import cn.tr.core.pojo.PageDomain;
 import cn.tr.core.strategy.PageStrategy;
 import cn.tr.core.strategy.PageStrategy;
 import cn.tr.core.utils.JsonUtils;
 import cn.tr.core.utils.JsonUtils;
 import cn.tr.plugin.web.context.RequestContextHolder;
 import cn.tr.plugin.web.context.RequestContextHolder;
 
 
 import java.util.Map;
 import java.util.Map;
-
+import java.util.*;
 /**
 /**
  * @ClassName : PageStrategyConfig
  * @ClassName : PageStrategyConfig
  * @Description :  创建分页参数
  * @Description :  创建分页参数
@@ -21,14 +22,16 @@ public class PageStrategyConfig {
             String body = RequestContextHolder.getRequestBody();
             String body = RequestContextHolder.getRequestBody();
             Integer current=0;
             Integer current=0;
             Integer size=10;
             Integer size=10;
+            List<Order> orders=null;
             try {
             try {
                 Map<String, Object> pageMap = JsonUtils.parseMap(JsonUtils.toJsonString(JsonUtils.parseMap(body).get("page")));
                 Map<String, Object> pageMap = JsonUtils.parseMap(JsonUtils.toJsonString(JsonUtils.parseMap(body).get("page")));
                 current= ObjectUtil.isNull(pageMap.get("current"))?1:Integer.valueOf(String.valueOf(pageMap.get("current")));
                 current= ObjectUtil.isNull(pageMap.get("current"))?1:Integer.valueOf(String.valueOf(pageMap.get("current")));
                 size=ObjectUtil.isNull(pageMap.get("size"))?10:Integer.valueOf(String.valueOf(pageMap.get("size")));
                 size=ObjectUtil.isNull(pageMap.get("size"))?10:Integer.valueOf(String.valueOf(pageMap.get("size")));
+                orders=JsonUtils.parseArray(JsonUtils.toJsonString(pageMap.get("orders")), Order.class);
             }catch (Exception e){
             }catch (Exception e){
 
 
             }
             }
-            return new PageDomain(current,size);
+            return new PageDomain(current,size,orders);
         };
         };
 
 
     }
     }