diff --git a/eladmin-common/src/main/java/me/zhengjie/annotation/Query.java b/eladmin-common/src/main/java/me/zhengjie/annotation/Query.java index 0a583390..a94eeade 100644 --- a/eladmin-common/src/main/java/me/zhengjie/annotation/Query.java +++ b/eladmin-common/src/main/java/me/zhengjie/annotation/Query.java @@ -50,6 +50,10 @@ public @interface Query { , LESS_THAN_NQ // jie 2019/6/4 包含 , IN + // 不等于 + ,NOT_EQUAL + // between + ,BETWEEN } /** diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java b/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java index 7c82dc1e..607e618c 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java @@ -106,6 +106,14 @@ public class QueryHelp { list.add(getExpression(attributeName,join,root).in((Collection) val)); } break; + case NOT_EQUAL: + list.add(cb.notEqual(getExpression(attributeName,join,root), val)); + break; + case BETWEEN: + List between = new ArrayList<>((List)val); + list.add(cb.between(getExpression(attributeName, join, root).as((Class) between.get(0).getClass()), + (Comparable) between.get(0), (Comparable) between.get(1))); + break; default: break; } } diff --git a/eladmin-generator/pom.xml b/eladmin-generator/pom.xml new file mode 100644 index 00000000..1ac5ccb1 --- /dev/null +++ b/eladmin-generator/pom.xml @@ -0,0 +1,39 @@ + + + + eladmin + me.zhengjie + 2.3 + + 4.0.0 + + eladmin-generator + 代码生成模块 + + + 1.9 + + + + + me.zhengjie + eladmin-common + 2.3 + + + + + org.springframework.boot + spring-boot-starter-freemarker + + + + + commons-configuration + commons-configuration + ${configuration.version} + + + \ No newline at end of file diff --git a/eladmin-generator/src/main/java/me/zhengjie/domain/ColumnInfo.java b/eladmin-generator/src/main/java/me/zhengjie/domain/ColumnInfo.java new file mode 100644 index 00000000..fcdcfc2d --- /dev/null +++ b/eladmin-generator/src/main/java/me/zhengjie/domain/ColumnInfo.java @@ -0,0 +1,76 @@ +package me.zhengjie.domain; + +import lombok.Data; +import lombok.NoArgsConstructor; +import me.zhengjie.utils.GenUtil; +import javax.persistence.*; + +/** + * 列的数据信息 + * @author Zheng Jie + * @date 2019-01-02 + */ +@Data +@Entity +@NoArgsConstructor +@Table(name = "column_config") +public class ColumnInfo { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + private String tableName; + + // 数据库字段名称 + private String columnName; + + // 数据库字段类型 + private String columnType; + + // 数据库字段键类型 + private String keyType; + + // 字段额外的参数 + private String extra; + + // 数据库字段描述 + private String remark; + + // 必填 + private Boolean notNull; + + // 是否在列表显示 + private Boolean listShow; + + // 是否表单显示 + private Boolean formShow; + + // 表单类型 + private String formType; + + // 查询 1:模糊 2:精确 + private String queryType; + + // 字典名称 + private String dictName; + + // 日期注解 + private String dateAnnotation; + + public ColumnInfo(String tableName, String columnName, Boolean notNull, String columnType, String remark, String keyType, String extra) { + this.tableName = tableName; + this.columnName = columnName; + this.columnType = columnType; + this.keyType = keyType; + this.extra = extra; + this.notNull = notNull; + if(GenUtil.PK.equalsIgnoreCase(keyType) && GenUtil.EXTRA.equalsIgnoreCase(extra)){ + this.notNull = false; + } + this.remark = remark; + this.listShow = true; + this.formShow = true; + } +} diff --git a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/domain/GenConfig.java b/eladmin-generator/src/main/java/me/zhengjie/domain/GenConfig.java similarity index 55% rename from eladmin-tools/src/main/java/me/zhengjie/modules/generator/domain/GenConfig.java rename to eladmin-generator/src/main/java/me/zhengjie/domain/GenConfig.java index 516fc208..96a9cc36 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/domain/GenConfig.java +++ b/eladmin-generator/src/main/java/me/zhengjie/domain/GenConfig.java @@ -1,10 +1,9 @@ -package me.zhengjie.modules.generator.domain; +package me.zhengjie.domain; import lombok.Data; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import lombok.NoArgsConstructor; +import javax.persistence.*; +import javax.validation.constraints.NotBlank; /** * 代码生成配置 @@ -13,20 +12,35 @@ import javax.persistence.Table; */ @Data @Entity +@NoArgsConstructor @Table(name = "gen_config") public class GenConfig { + public GenConfig(String tableName) { + this.cover = false; + this.moduleName = "eladmin-system"; + this.tableName = tableName; + } + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") private Long id; + @NotBlank + private String tableName; + // 包路径 + @NotBlank private String pack; // 模块名 @Column(name = "module_name") + @NotBlank private String moduleName; // 前端文件路径 + @NotBlank private String path; // 前端文件路径 diff --git a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/domain/vo/TableInfo.java b/eladmin-generator/src/main/java/me/zhengjie/domain/vo/TableInfo.java similarity index 90% rename from eladmin-tools/src/main/java/me/zhengjie/modules/generator/domain/vo/TableInfo.java rename to eladmin-generator/src/main/java/me/zhengjie/domain/vo/TableInfo.java index d753a9c0..b1b6ba4e 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/domain/vo/TableInfo.java +++ b/eladmin-generator/src/main/java/me/zhengjie/domain/vo/TableInfo.java @@ -1,4 +1,4 @@ -package me.zhengjie.modules.generator.domain.vo; +package me.zhengjie.domain.vo; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/eladmin-generator/src/main/java/me/zhengjie/repository/ColumnInfoRepository.java b/eladmin-generator/src/main/java/me/zhengjie/repository/ColumnInfoRepository.java new file mode 100644 index 00000000..57d39078 --- /dev/null +++ b/eladmin-generator/src/main/java/me/zhengjie/repository/ColumnInfoRepository.java @@ -0,0 +1,14 @@ +package me.zhengjie.repository; + +import me.zhengjie.domain.ColumnInfo; +import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + +/** + * @author Zheng Jie + * @date 2019-01-14 + */ +public interface ColumnInfoRepository extends JpaRepository { + + List findByTableNameOrderByIdAsc(String tableName); +} diff --git a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/repository/GenConfigRepository.java b/eladmin-generator/src/main/java/me/zhengjie/repository/GenConfigRepository.java similarity index 61% rename from eladmin-tools/src/main/java/me/zhengjie/modules/generator/repository/GenConfigRepository.java rename to eladmin-generator/src/main/java/me/zhengjie/repository/GenConfigRepository.java index 0cd8a142..645c217c 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/repository/GenConfigRepository.java +++ b/eladmin-generator/src/main/java/me/zhengjie/repository/GenConfigRepository.java @@ -1,6 +1,6 @@ -package me.zhengjie.modules.generator.repository; +package me.zhengjie.repository; -import me.zhengjie.modules.generator.domain.GenConfig; +import me.zhengjie.domain.GenConfig; import org.springframework.data.jpa.repository.JpaRepository; /** @@ -8,4 +8,6 @@ import org.springframework.data.jpa.repository.JpaRepository; * @date 2019-01-14 */ public interface GenConfigRepository extends JpaRepository { + + GenConfig findByTableName(String tableName); } diff --git a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/rest/GenConfigController.java b/eladmin-generator/src/main/java/me/zhengjie/rest/GenConfigController.java similarity index 71% rename from eladmin-tools/src/main/java/me/zhengjie/modules/generator/rest/GenConfigController.java rename to eladmin-generator/src/main/java/me/zhengjie/rest/GenConfigController.java index 3788be8b..daf6d281 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/rest/GenConfigController.java +++ b/eladmin-generator/src/main/java/me/zhengjie/rest/GenConfigController.java @@ -1,9 +1,9 @@ -package me.zhengjie.modules.generator.rest; +package me.zhengjie.rest; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import me.zhengjie.modules.generator.domain.GenConfig; -import me.zhengjie.modules.generator.service.GenConfigService; +import me.zhengjie.domain.GenConfig; +import me.zhengjie.service.GenConfigService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; @@ -25,14 +25,14 @@ public class GenConfigController { } @ApiOperation("查询") - @GetMapping - public ResponseEntity get(){ - return new ResponseEntity<>(genConfigService.find(), HttpStatus.OK); + @GetMapping(value = "/{tableName}") + public ResponseEntity get(@PathVariable String tableName){ + return new ResponseEntity<>(genConfigService.find(tableName), HttpStatus.OK); } @ApiOperation("修改") @PutMapping public ResponseEntity emailConfig(@Validated @RequestBody GenConfig genConfig){ - return new ResponseEntity<>(genConfigService.update(genConfig),HttpStatus.OK); + return new ResponseEntity<>(genConfigService.update(genConfig.getTableName(), genConfig),HttpStatus.OK); } } diff --git a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/rest/GeneratorController.java b/eladmin-generator/src/main/java/me/zhengjie/rest/GeneratorController.java similarity index 55% rename from eladmin-tools/src/main/java/me/zhengjie/modules/generator/rest/GeneratorController.java rename to eladmin-generator/src/main/java/me/zhengjie/rest/GeneratorController.java index 1661b878..497766ae 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/rest/GeneratorController.java +++ b/eladmin-generator/src/main/java/me/zhengjie/rest/GeneratorController.java @@ -1,17 +1,16 @@ -package me.zhengjie.modules.generator.rest; +package me.zhengjie.rest; -import cn.hutool.core.util.PageUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import me.zhengjie.domain.ColumnInfo; import me.zhengjie.exception.BadRequestException; -import me.zhengjie.modules.generator.domain.vo.ColumnInfo; -import me.zhengjie.modules.generator.service.GenConfigService; -import me.zhengjie.modules.generator.service.GeneratorService; +import me.zhengjie.service.GenConfigService; +import me.zhengjie.service.GeneratorService; +import me.zhengjie.utils.PageUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; - import java.util.List; /** @@ -35,7 +34,13 @@ public class GeneratorController { this.genConfigService = genConfigService; } - @ApiOperation("查询数据库元数据") + @ApiOperation("查询数据库数据") + @GetMapping(value = "/tables/all") + public ResponseEntity getTables(){ + return new ResponseEntity<>(generatorService.getTables(), HttpStatus.OK); + } + + @ApiOperation("查询数据库数据") @GetMapping(value = "/tables") public ResponseEntity getTables(@RequestParam(defaultValue = "") String name, @RequestParam(defaultValue = "0")Integer page, @@ -44,19 +49,34 @@ public class GeneratorController { return new ResponseEntity<>(generatorService.getTables(name,startEnd), HttpStatus.OK); } - @ApiOperation("查询表内元数据") + @ApiOperation("查询字段数据") @GetMapping(value = "/columns") public ResponseEntity getTables(@RequestParam String tableName){ - return new ResponseEntity<>(generatorService.getColumns(tableName), HttpStatus.OK); + List columnInfos = generatorService.getColumns(tableName); + // 异步同步表信息 + generatorService.sync(columnInfos); + return new ResponseEntity<>(PageUtil.toPage(columnInfos,columnInfos.size()), HttpStatus.OK); + } + + @ApiOperation("保存字段数据") + @PutMapping + public ResponseEntity save(@RequestBody List columnInfos){ + generatorService.save(columnInfos); + return new ResponseEntity(HttpStatus.OK); } @ApiOperation("生成代码") - @PostMapping - public ResponseEntity generator(@RequestBody List columnInfos, @RequestParam String tableName){ + @PostMapping(value = "/{tableName}/{type}") + public ResponseEntity generator(@PathVariable String tableName, @PathVariable Integer type){ if(!generatorEnabled){ throw new BadRequestException("此环境不允许生成代码!"); } - generatorService.generator(columnInfos,genConfigService.find(),tableName); + switch (type){ + // 生成代码 + case 0: generatorService.generator(genConfigService.find(tableName), generatorService.getColumns(tableName)); + break; + default: break; + } return new ResponseEntity(HttpStatus.OK); } } diff --git a/eladmin-generator/src/main/java/me/zhengjie/service/GenConfigService.java b/eladmin-generator/src/main/java/me/zhengjie/service/GenConfigService.java new file mode 100644 index 00000000..2c61e368 --- /dev/null +++ b/eladmin-generator/src/main/java/me/zhengjie/service/GenConfigService.java @@ -0,0 +1,14 @@ +package me.zhengjie.service; + +import me.zhengjie.domain.GenConfig; + +/** + * @author Zheng Jie + * @date 2019-01-14 + */ +public interface GenConfigService { + + GenConfig find(String tableName); + + GenConfig update(String tableName, GenConfig genConfig); +} diff --git a/eladmin-generator/src/main/java/me/zhengjie/service/GeneratorService.java b/eladmin-generator/src/main/java/me/zhengjie/service/GeneratorService.java new file mode 100644 index 00000000..027d2bdd --- /dev/null +++ b/eladmin-generator/src/main/java/me/zhengjie/service/GeneratorService.java @@ -0,0 +1,56 @@ +package me.zhengjie.service; + +import me.zhengjie.domain.GenConfig; +import me.zhengjie.domain.ColumnInfo; +import org.springframework.scheduling.annotation.Async; + +import java.util.List; + +/** + * @author Zheng Jie + * @date 2019-01-02 + */ +public interface GeneratorService { + + /** + * 查询数据库元数据 + * @param name 表名 + * @param startEnd 分页参数 + * @return / + */ + Object getTables(String name, int[] startEnd); + + /** + * 得到数据表的元数据 + * @param name 表名 + * @return / + */ + List getColumns(String name); + + /** + * 同步表数据 + * @param columnInfos / + */ + @Async + void sync(List columnInfos); + + /** + * 保持数据 + * @param columnInfos / + */ + void save(List columnInfos); + + /** + * 获取所有table + * @return / + */ + Object getTables(); + + /** + * 代码生成 + * @param genConfig 配置信息 + * @param columns 字段信息 + * @return / + */ + Object generator(GenConfig genConfig, List columns); +} diff --git a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/service/impl/GenConfigServiceImpl.java b/eladmin-generator/src/main/java/me/zhengjie/service/impl/GenConfigServiceImpl.java similarity index 66% rename from eladmin-tools/src/main/java/me/zhengjie/modules/generator/service/impl/GenConfigServiceImpl.java rename to eladmin-generator/src/main/java/me/zhengjie/service/impl/GenConfigServiceImpl.java index 1d7cc19f..3f07e0c9 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/service/impl/GenConfigServiceImpl.java +++ b/eladmin-generator/src/main/java/me/zhengjie/service/impl/GenConfigServiceImpl.java @@ -1,14 +1,13 @@ -package me.zhengjie.modules.generator.service.impl; +package me.zhengjie.service.impl; -import me.zhengjie.modules.generator.domain.GenConfig; -import me.zhengjie.modules.generator.repository.GenConfigRepository; -import me.zhengjie.modules.generator.service.GenConfigService; +import me.zhengjie.domain.GenConfig; +import me.zhengjie.repository.GenConfigRepository; +import me.zhengjie.service.GenConfigService; import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.io.File; -import java.util.Optional; /** * @author Zheng Jie @@ -25,16 +24,18 @@ public class GenConfigServiceImpl implements GenConfigService { } @Override - @Cacheable(key = "'1'") - public GenConfig find() { - Optional genConfig = genConfigRepository.findById(1L); - return genConfig.orElseGet(GenConfig::new); + @Cacheable(key = "#p0") + public GenConfig find(String tableName) { + GenConfig genConfig = genConfigRepository.findByTableName(tableName); + if(genConfig == null){ + return new GenConfig(tableName); + } + return genConfig; } @Override - @CacheEvict(allEntries = true) - public GenConfig update(GenConfig genConfig) { - genConfig.setId(1L); + @CachePut(key = "#p0") + public GenConfig update(String tableName, GenConfig genConfig) { // 自动设置Api路径,注释掉前需要同步取消前端的注释 String separator = File.separator; String[] paths; diff --git a/eladmin-generator/src/main/java/me/zhengjie/service/impl/GeneratorServiceImpl.java b/eladmin-generator/src/main/java/me/zhengjie/service/impl/GeneratorServiceImpl.java new file mode 100644 index 00000000..88b6af9d --- /dev/null +++ b/eladmin-generator/src/main/java/me/zhengjie/service/impl/GeneratorServiceImpl.java @@ -0,0 +1,129 @@ +package me.zhengjie.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +import me.zhengjie.domain.GenConfig; +import me.zhengjie.domain.ColumnInfo; +import me.zhengjie.domain.vo.TableInfo; +import me.zhengjie.exception.BadRequestException; +import me.zhengjie.repository.ColumnInfoRepository; +import me.zhengjie.service.GeneratorService; +import me.zhengjie.utils.GenUtil; +import me.zhengjie.utils.PageUtil; +import me.zhengjie.utils.StringUtils; +import org.springframework.stereotype.Service; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Zheng Jie + * @date 2019-01-02 + */ +@Service +@SuppressWarnings("all") +public class GeneratorServiceImpl implements GeneratorService { + + @PersistenceContext + private EntityManager em; + + private final ColumnInfoRepository columnInfoRepository; + + public GeneratorServiceImpl(ColumnInfoRepository columnInfoRepository) { + this.columnInfoRepository = columnInfoRepository; + } + + @Override + public Object getTables() { + // 使用预编译防止sql注入 + String sql = "select table_name ,create_time , engine, table_collation, table_comment from information_schema.tables " + + "where table_schema = (select database()) " + + "order by create_time desc"; + Query query = em.createNativeQuery(sql); + return query.getResultList(); + } + + @Override + public Object getTables(String name, int[] startEnd) { + // 使用预编译防止sql注入 + String sql = "select table_name ,create_time , engine, table_collation, table_comment from information_schema.tables " + + "where table_schema = (select database()) " + + "and table_name like ? order by create_time desc"; + Query query = em.createNativeQuery(sql); + query.setFirstResult(startEnd[0]); + query.setMaxResults(startEnd[1]-startEnd[0]); + query.setParameter(1, StringUtils.isNotBlank(name) ? ("%" + name + "%") : "%%"); + List result = query.getResultList(); + List tableInfos = new ArrayList<>(); + for (Object obj : result) { + Object[] arr = (Object[]) obj; + tableInfos.add(new TableInfo(arr[0],arr[1],arr[2],arr[3], ObjectUtil.isNotEmpty(arr[4])? arr[4] : "-")); + } + Query query1 = em.createNativeQuery("SELECT COUNT(*) from information_schema.tables where table_schema = (select database())"); + Object totalElements = query1.getSingleResult(); + return PageUtil.toPage(tableInfos,totalElements); + } + + @Override + public List getColumns(String tableName) { + List columnInfos = columnInfoRepository.findByTableNameOrderByIdAsc(tableName); + if(CollectionUtil.isNotEmpty(columnInfos)){ + return columnInfos; + } else { + columnInfos = query(tableName); + return columnInfoRepository.saveAll(columnInfos); + } + } + + public List query(String tableName){ + // 使用预编译防止sql注入 + String sql = "select column_name, is_nullable, data_type, column_comment, column_key, extra from information_schema.columns " + + "where table_name = ? and table_schema = (select database()) order by ordinal_position"; + Query query = em.createNativeQuery(sql); + query.setParameter(1,tableName); + List result = query.getResultList(); + List columnInfos = new ArrayList<>(); + for (Object obj : result) { + Object[] arr = (Object[]) obj; + columnInfos.add( + new ColumnInfo( + tableName, + arr[0].toString(), + arr[1].equals("NO"), + arr[2].toString(), + ObjectUtil.isNotNull(arr[3]) ? arr[3].toString() : null, + ObjectUtil.isNotNull(arr[4]) ? arr[4].toString() : null, + ObjectUtil.isNotNull(arr[5]) ? arr[5].toString() : null) + ); + } + return columnInfos; + } + + @Override + public void sync(List columnInfos) { + + } + + @Override + public void save(List columnInfos) { + columnInfoRepository.saveAll(columnInfos); + } + + @Override + public Object generator(GenConfig genConfig, List columns) { + if(genConfig.getId() == null){ + throw new BadRequestException("请先配置生成器"); + } + try { + // 查询是否存在关联实体字段信息 + GenUtil.generatorCode(columns, genConfig); + } catch (IOException e) { + e.printStackTrace(); + throw new BadRequestException("生成失败,请手动处理已生成的文件"); + } + return null; + } +} diff --git a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/utils/ColUtil.java b/eladmin-generator/src/main/java/me/zhengjie/utils/ColUtil.java similarity index 75% rename from eladmin-tools/src/main/java/me/zhengjie/modules/generator/utils/ColUtil.java rename to eladmin-generator/src/main/java/me/zhengjie/utils/ColUtil.java index 0b9a37d2..9a119f2a 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/utils/ColUtil.java +++ b/eladmin-generator/src/main/java/me/zhengjie/utils/ColUtil.java @@ -1,8 +1,6 @@ -package me.zhengjie.modules.generator.utils; +package me.zhengjie.utils; -import org.apache.commons.configuration.Configuration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.commons.configuration.*; /** * sql字段转java diff --git a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/utils/GenUtil.java b/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java similarity index 56% rename from eladmin-tools/src/main/java/me/zhengjie/modules/generator/utils/GenUtil.java rename to eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java index 6f223b4d..ae7c352e 100644 --- a/eladmin-tools/src/main/java/me/zhengjie/modules/generator/utils/GenUtil.java +++ b/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java @@ -1,12 +1,10 @@ -package me.zhengjie.modules.generator.utils; +package me.zhengjie.utils; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.template.*; import lombok.extern.slf4j.Slf4j; -import me.zhengjie.modules.generator.domain.GenConfig; -import me.zhengjie.modules.generator.domain.vo.ColumnInfo; -import me.zhengjie.utils.FileUtil; -import me.zhengjie.utils.StringUtils; +import me.zhengjie.domain.GenConfig; +import me.zhengjie.domain.ColumnInfo; import org.springframework.util.ObjectUtils; import java.io.File; import java.io.FileWriter; @@ -30,9 +28,9 @@ public class GenUtil { private static final String BIGDECIMAL = "BigDecimal"; - private static final String PK = "PRI"; + public static final String PK = "PRI"; - private static final String EXTRA = "auto_increment"; + public static final String EXTRA = "auto_increment"; /** * 获取后端代码模板名称 @@ -63,85 +61,159 @@ public class GenUtil { return templateNames; } - /** - * 生成代码 - * @param columnInfos 表元数据 - * @param genConfig 生成代码的参数配置,如包路径,作者 - */ - public static void generatorCode(List columnInfos, GenConfig genConfig, String tableName) throws IOException { - Map map = new HashMap<>(); - map.put("package",genConfig.getPack()); - map.put("moduleName",genConfig.getModuleName()); - map.put("author",genConfig.getAuthor()); - map.put("date", LocalDate.now().toString()); - map.put("tableName",tableName); - String className = StringUtils.toCapitalizeCamelCase(tableName); - String changeClassName = StringUtils.toCamelCase(tableName); - + public static void generatorCode(List columnInfos, GenConfig genConfig) throws IOException { + // 存储模版字段数据 + Map genMap = new HashMap<>(); + // 包名称 + genMap.put("package",genConfig.getPack()); + // 模块名称 + genMap.put("moduleName",genConfig.getModuleName()); + // 作者 + genMap.put("author",genConfig.getAuthor()); + // 创建日期 + genMap.put("date", LocalDate.now().toString()); + // 表名 + genMap.put("tableName",genConfig.getTableName()); + // 大写开头的类名 + String className = StringUtils.toCapitalizeCamelCase(genConfig.getTableName()); + // 小写开头的类名 + String changeClassName = StringUtils.toCamelCase(genConfig.getTableName()); // 判断是否去除表前缀 if (StringUtils.isNotEmpty(genConfig.getPrefix())) { - className = StringUtils.toCapitalizeCamelCase(StrUtil.removePrefix(tableName,genConfig.getPrefix())); - changeClassName = StringUtils.toCamelCase(StrUtil.removePrefix(tableName,genConfig.getPrefix())); + className = StringUtils.toCapitalizeCamelCase(StrUtil.removePrefix(genConfig.getTableName(),genConfig.getPrefix())); + changeClassName = StringUtils.toCamelCase(StrUtil.removePrefix(genConfig.getTableName(),genConfig.getPrefix())); } - map.put("className", className); - map.put("upperCaseClassName", className.toUpperCase()); - map.put("changeClassName", changeClassName); - map.put("hasTimestamp",false); - map.put("queryHasTimestamp",false); - map.put("queryHasBigDecimal",false); - map.put("hasBigDecimal",false); - map.put("hasQuery",false); - map.put("auto",false); - + // 保存类名 + genMap.put("className", className); + // 保存小写开头的类名 + genMap.put("changeClassName", changeClassName); + // 存在 Timestamp 字段 + genMap.put("hasTimestamp",false); + // 查询类中存在 Timestamp 字段 + genMap.put("queryHasTimestamp",false); + // 存在 BigDecimal 字段 + genMap.put("hasBigDecimal",false); + // 查询类中存在 BigDecimal 字段 + genMap.put("queryHasBigDecimal",false); + // 是否需要创建查询 + genMap.put("hasQuery",false); + // 自增主键 + genMap.put("auto",false); + // 存在字典 + genMap.put("hasDict",false); + // 存在日期注解 + genMap.put("hasDateAnnotation",false); + // 保存字段信息 List> columns = new ArrayList<>(); + // 保存查询字段的信息 List> queryColumns = new ArrayList<>(); + // 存储字典信息 + List dicts = new ArrayList<>(); + // 存储 DateRange 信息 + List> dateRanges = new ArrayList<>(); + // 存储不为空的字段信息 + List> isNotNullColumns = new ArrayList<>(); + for (ColumnInfo column : columnInfos) { Map listMap = new HashMap<>(); - listMap.put("columnComment",column.getColumnComment()); - listMap.put("columnKey",column.getColumnKey()); - - String colType = ColUtil.cloToJava(column.getColumnType().toString()); + // 字段描述 + listMap.put("remark",column.getRemark()); + // 字段类型 + listMap.put("columnKey",column.getKeyType()); + // 主键类型 + String colType = ColUtil.cloToJava(column.getColumnType()); + // 小写开头的字段名 String changeColumnName = StringUtils.toCamelCase(column.getColumnName().toString()); + // 大写开头的字段名 String capitalColumnName = StringUtils.toCapitalizeCamelCase(column.getColumnName().toString()); - if(PK.equals(column.getColumnKey())){ - map.put("pkColumnType",colType); - map.put("pkChangeColName",changeColumnName); - map.put("pkCapitalColName",capitalColumnName); + if(PK.equals(column.getKeyType())){ + // 存储主键类型 + genMap.put("pkColumnType",colType); + // 存储小写开头的字段名 + genMap.put("pkChangeColName",changeColumnName); + // 存储大写开头的字段名 + genMap.put("pkCapitalColName",capitalColumnName); } + // 是否存在 Timestamp 类型的字段 if(TIMESTAMP.equals(colType)){ - map.put("hasTimestamp",true); + genMap.put("hasTimestamp",true); } + // 是否存在 BigDecimal 类型的字段 if(BIGDECIMAL.equals(colType)){ - map.put("hasBigDecimal",true); + genMap.put("hasBigDecimal",true); } + // 主键是否自增 if(EXTRA.equals(column.getExtra())){ - map.put("auto",true); + genMap.put("auto",true); + } + // 主键存在字典 + if(StringUtils.isNotBlank(column.getDictName())){ + genMap.put("hasDict",true); + dicts.add(column.getDictName()); } - listMap.put("columnType",colType); - listMap.put("columnName",column.getColumnName()); - listMap.put("isNullable",column.getIsNullable()); - listMap.put("columnShow",column.getColumnShow()); - listMap.put("changeColumnName",changeColumnName); - listMap.put("capitalColumnName",capitalColumnName); + // 存储字段类型 + listMap.put("columnType",colType); + // 存储字原始段名称 + listMap.put("columnName",column.getColumnName()); + // 不为空 + listMap.put("istNotNull",column.getNotNull()); + // 字段列表显示 + listMap.put("columnShow",column.getListShow()); + // 表单显示 + listMap.put("formShow",column.getFormShow()); + // 表单组件类型 + listMap.put("formType",column.getFormType()); + // 小写开头的字段名称 + listMap.put("changeColumnName",changeColumnName); + //大写开头的字段名称 + listMap.put("capitalColumnName",capitalColumnName); + // 字典名称 + listMap.put("dictName",column.getDictName()); + // 日期注解 + listMap.put("dateAnnotation",column.getDateAnnotation()); + if(StringUtils.isNotBlank(column.getDateAnnotation())){ + genMap.put("hasDateAnnotation",true); + } + // 添加非空字段信息 + if(column.getNotNull()){ + isNotNullColumns.add(listMap); + } // 判断是否有查询,如有则把查询的字段set进columnQuery - if(!StringUtils.isBlank(column.getColumnQuery())){ - listMap.put("columnQuery",column.getColumnQuery()); - map.put("hasQuery",true); + if(!StringUtils.isBlank(column.getQueryType())){ + // 查询类型 + listMap.put("queryType",column.getQueryType()); + // 是否存在查询 + genMap.put("hasQuery",true); if(TIMESTAMP.equals(colType)){ - map.put("queryHasTimestamp",true); + // 查询中存储 Timestamp 类型 + genMap.put("queryHasTimestamp",true); } if(BIGDECIMAL.equals(colType)){ - map.put("queryHasBigDecimal",true); + // 查询中存储 BigDecimal 类型 + genMap.put("queryHasBigDecimal",true); + } + if("DateRange".equalsIgnoreCase(column.getQueryType())){ + dateRanges.add(listMap); + } else { + // 添加到查询列表中 + queryColumns.add(listMap); } - queryColumns.add(listMap); } + // 添加到字段列表中 columns.add(listMap); } - map.put("columns",columns); - map.put("queryColumns",queryColumns); + // 保存字段列表 + genMap.put("columns",columns); + // 保存查询列表 + genMap.put("queryColumns",queryColumns); + // 保存字段列表 + genMap.put("dicts",dicts); + // 保存查询列表 + genMap.put("dateRanges",dateRanges); + // 保存非空字段信息 + genMap.put("isNotNullColumns",isNotNullColumns); TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH)); - // 生成后端代码 List templates = getAdminTemplateNames(); for (String templateName : templates) { @@ -156,14 +228,14 @@ public class GenUtil { continue; } // 生成代码 - genFile(file, template, map); + genFile(file, template, genMap); } // 生成前端代码 templates = getFrontTemplateNames(); for (String templateName : templates) { Template template = engine.getTemplate("generator/front/"+templateName+".ftl"); - String filePath = getFrontFilePath(templateName,genConfig,map.get("changeClassName").toString()); + String filePath = getFrontFilePath(templateName,genConfig,genMap.get("changeClassName").toString()); assert filePath != null; File file = new File(filePath); @@ -173,7 +245,7 @@ public class GenUtil { continue; } // 生成代码 - genFile(file, template, map); + genFile(file, template, genMap); } } diff --git a/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogQueryCriteria.java b/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogQueryCriteria.java index bc1499a7..651f55c2 100644 --- a/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogQueryCriteria.java +++ b/eladmin-logging/src/main/java/me/zhengjie/service/dto/LogQueryCriteria.java @@ -2,8 +2,8 @@ package me.zhengjie.service.dto; import lombok.Data; import me.zhengjie.annotation.Query; - import java.sql.Timestamp; +import java.util.List; /** * 日志查询类 @@ -20,9 +20,6 @@ public class LogQueryCriteria { @Query private String logType; - @Query(type = Query.Type.GREATER_THAN,propName = "createTime") - private Timestamp startTime; - - @Query(type = Query.Type.LESS_THAN,propName = "createTime") - private Timestamp endTime; + @Query(type = Query.Type.BETWEEN) + private List createTime; } diff --git a/eladmin-system/pom.xml b/eladmin-system/pom.xml index 168b9d69..f3eda434 100644 --- a/eladmin-system/pom.xml +++ b/eladmin-system/pom.xml @@ -17,6 +17,18 @@ + + + me.zhengjie + eladmin-generator + 2.3 + + + me.zhengjie + eladmin-common + + + diff --git a/eladmin-system/src/main/java/me/zhengjie/AppRun.java b/eladmin-system/src/main/java/me/zhengjie/AppRun.java index 1a14e9eb..94582b4f 100644 --- a/eladmin-system/src/main/java/me/zhengjie/AppRun.java +++ b/eladmin-system/src/main/java/me/zhengjie/AppRun.java @@ -3,6 +3,9 @@ package me.zhengjie; import me.zhengjie.utils.SpringContextHolder; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.boot.web.servlet.server.ServletWebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -24,4 +27,11 @@ public class AppRun { public SpringContextHolder springContextHolder() { return new SpringContextHolder(); } + + @Bean + public ServletWebServerFactory webServerFactory() { + TomcatServletWebServerFactory fa = new TomcatServletWebServerFactory(); + fa.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "[]{}")); + return fa; + } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/rest/QuartzJobController.java b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/rest/QuartzJobController.java index 518f7b0c..e0d66488 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/rest/QuartzJobController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/rest/QuartzJobController.java @@ -54,7 +54,7 @@ public class QuartzJobController { @Log("导出日志数据") @ApiOperation("导出日志数据") - @GetMapping(value = "/download/log") + @GetMapping(value = "/logs/download") @PreAuthorize("@el.check('timing:list')") public void downloadLog(HttpServletResponse response, JobQueryCriteria criteria) throws IOException { quartzJobService.downloadLog(quartzJobService.queryAllLog(criteria), response); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/dto/JobQueryCriteria.java b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/dto/JobQueryCriteria.java index 486760b0..b9351dd0 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/dto/JobQueryCriteria.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/dto/JobQueryCriteria.java @@ -4,6 +4,7 @@ import lombok.Data; import me.zhengjie.annotation.Query; import java.sql.Timestamp; +import java.util.List; /** * @author Zheng Jie @@ -18,9 +19,6 @@ public class JobQueryCriteria { @Query private Boolean isSuccess; - @Query(type = Query.Type.GREATER_THAN,propName = "createTime") - private Timestamp startTime; - - @Query(type = Query.Type.LESS_THAN,propName = "createTime") - private Timestamp endTime; + @Query(type = Query.Type.BETWEEN) + private List createTime; } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DictController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DictController.java index 99f89ff6..3751296a 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DictController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DictController.java @@ -42,6 +42,14 @@ public class DictController { dictService.download(dictService.queryAll(criteria), response); } + @Log("查询字典") + @ApiOperation("查询字典") + @GetMapping(value = "/all") + @PreAuthorize("@el.check('dict:list')") + public ResponseEntity all(){ + return new ResponseEntity<>(dictService.queryAll(new DictQueryCriteria()),HttpStatus.OK); + } + @Log("查询字典") @ApiOperation("查询字典") @GetMapping diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/JobController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/JobController.java index 97b88ae2..58b15aaf 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/JobController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/JobController.java @@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.List; /** * @author Zheng Jie @@ -51,8 +52,7 @@ public class JobController { @ApiOperation("查询岗位") @GetMapping @PreAuthorize("@el.check('job:list','user:list')") - public ResponseEntity getJobs(JobQueryCriteria criteria, - Pageable pageable){ + public ResponseEntity getJobs(JobQueryCriteria criteria, Pageable pageable){ // 数据权限 criteria.setDeptIds(dataScope.getDeptIds()); return new ResponseEntity<>(jobService.queryAll(criteria, pageable),HttpStatus.OK); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java index d15613bb..4084e068 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/UserController.java @@ -4,7 +4,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import me.zhengjie.aop.log.Log; import me.zhengjie.config.DataScope; -import me.zhengjie.modules.tools.domain.VerificationCode; +import me.zhengjie.domain.VerificationCode; import me.zhengjie.modules.system.domain.User; import me.zhengjie.exception.BadRequestException; import me.zhengjie.modules.system.domain.vo.UserPassVo; @@ -12,7 +12,7 @@ import me.zhengjie.modules.system.service.DeptService; import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.dto.RoleSmallDTO; import me.zhengjie.modules.system.service.dto.UserQueryCriteria; -import me.zhengjie.modules.tools.service.VerificationCodeService; +import me.zhengjie.service.VerificationCodeService; import me.zhengjie.utils.*; import me.zhengjie.modules.system.service.UserService; import org.springframework.data.domain.Pageable; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DeptQueryCriteria.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DeptQueryCriteria.java index 165851b7..688be144 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DeptQueryCriteria.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DeptQueryCriteria.java @@ -4,6 +4,7 @@ import lombok.Data; import me.zhengjie.annotation.Query; import java.sql.Timestamp; +import java.util.List; import java.util.Set; /** @@ -25,9 +26,6 @@ public class DeptQueryCriteria{ @Query private Long pid; - @Query(type = Query.Type.GREATER_THAN,propName = "createTime") - private Timestamp startTime; - - @Query(type = Query.Type.LESS_THAN,propName = "createTime") - private Timestamp endTime; + @Query(type = Query.Type.BETWEEN) + private List createTime; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DictDetailDTO.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DictDetailDTO.java index 6cadec24..85b65e0a 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DictDetailDTO.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DictDetailDTO.java @@ -22,5 +22,7 @@ public class DictDetailDTO implements Serializable { private String sort; + private DictSmallDTO dict; + private Timestamp createTime; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DictSmallDTO.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DictSmallDTO.java new file mode 100644 index 00000000..6748df07 --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DictSmallDTO.java @@ -0,0 +1,16 @@ +package me.zhengjie.modules.system.service.dto; + +import lombok.Getter; +import lombok.Setter; +import java.io.Serializable; + +/** +* @author Zheng Jie +* @date 2019-04-10 +*/ +@Getter +@Setter +public class DictSmallDTO implements Serializable { + + private Long id; +} diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/JobQueryCriteria.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/JobQueryCriteria.java index 313dd9e9..1e90cfbd 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/JobQueryCriteria.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/JobQueryCriteria.java @@ -3,9 +3,8 @@ package me.zhengjie.modules.system.service.dto; import lombok.Data; import lombok.NoArgsConstructor; import me.zhengjie.annotation.Query; - -import java.io.Serializable; import java.sql.Timestamp; +import java.util.List; import java.util.Set; /** @@ -28,9 +27,6 @@ public class JobQueryCriteria { @Query(propName = "id", joinName = "dept", type = Query.Type.IN) private Set deptIds; - @Query(type = Query.Type.GREATER_THAN,propName = "createTime") - private Timestamp startTime; - - @Query(type = Query.Type.LESS_THAN,propName = "createTime") - private Timestamp endTime; + @Query(type = Query.Type.BETWEEN) + private List createTime; } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/MenuQueryCriteria.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/MenuQueryCriteria.java index d0bf0693..0a4275a3 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/MenuQueryCriteria.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/MenuQueryCriteria.java @@ -4,6 +4,7 @@ import lombok.Data; import me.zhengjie.annotation.Query; import java.sql.Timestamp; +import java.util.List; /** * 公共查询类 @@ -15,9 +16,6 @@ public class MenuQueryCriteria { @Query(blurry = "name,path,component") private String blurry; - @Query(type = Query.Type.GREATER_THAN,propName = "createTime") - private Timestamp startTime; - - @Query(type = Query.Type.LESS_THAN,propName = "createTime") - private Timestamp endTime; + @Query(type = Query.Type.BETWEEN) + private List createTime; } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/RoleQueryCriteria.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/RoleQueryCriteria.java index 59b00556..29db87c6 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/RoleQueryCriteria.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/RoleQueryCriteria.java @@ -4,6 +4,7 @@ import lombok.Data; import me.zhengjie.annotation.Query; import java.sql.Timestamp; +import java.util.List; /** * 公共查询类 @@ -15,9 +16,6 @@ public class RoleQueryCriteria { @Query(blurry = "name,remark") private String blurry; - @Query(type = Query.Type.GREATER_THAN,propName = "createTime") - private Timestamp startTime; - - @Query(type = Query.Type.LESS_THAN,propName = "createTime") - private Timestamp endTime; + @Query(type = Query.Type.BETWEEN) + private List createTime; } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/UserQueryCriteria.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/UserQueryCriteria.java index 8195d732..56b1ddc0 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/UserQueryCriteria.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/UserQueryCriteria.java @@ -4,6 +4,7 @@ import lombok.Data; import me.zhengjie.annotation.Query; import java.io.Serializable; import java.sql.Timestamp; +import java.util.List; import java.util.Set; /** @@ -28,9 +29,6 @@ public class UserQueryCriteria implements Serializable { private Long deptId; - @Query(type = Query.Type.GREATER_THAN,propName = "createTime") - private Timestamp startTime; - - @Query(type = Query.Type.LESS_THAN,propName = "createTime") - private Timestamp endTime; + @Query(type = Query.Type.BETWEEN) + private List createTime; } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/mapper/DictDetailMapper.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/mapper/DictDetailMapper.java index f82c1bd5..51fd1f9c 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/mapper/DictDetailMapper.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/mapper/DictDetailMapper.java @@ -10,7 +10,7 @@ import org.mapstruct.ReportingPolicy; * @author Zheng Jie * @date 2019-04-10 */ -@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE) +@Mapper(componentModel = "spring", uses = {DictSmallMapper.class}, unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface DictDetailMapper extends BaseMapper { } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/mapper/DictSmallMapper.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/mapper/DictSmallMapper.java new file mode 100644 index 00000000..22dce56d --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/mapper/DictSmallMapper.java @@ -0,0 +1,17 @@ +package me.zhengjie.modules.system.service.mapper; + +import me.zhengjie.base.BaseMapper; +import me.zhengjie.modules.system.domain.Dict; +import me.zhengjie.modules.system.service.dto.DictDTO; +import me.zhengjie.modules.system.service.dto.DictSmallDTO; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +/** +* @author Zheng Jie +* @date 2019-04-10 +*/ +@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface DictSmallMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/eladmin-system/src/main/resources/template/generator/admin/Controller.ftl b/eladmin-system/src/main/resources/template/generator/admin/Controller.ftl index 3ea9a093..88704414 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/Controller.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/Controller.ftl @@ -70,4 +70,13 @@ public class ${className}Controller { ${changeClassName}Service.delete(${pkChangeColName}); return new ResponseEntity(HttpStatus.OK); } + + @Log("多选删除${className}") + @ApiOperation("多选删除${className}") + @PreAuthorize("@el.check('${changeClassName}:del')") + @DeleteMapping + public ResponseEntity deleteAll(@RequestBody ${pkColumnType}[] ids) { + ${changeClassName}Service.deleteAll(ids); + return new ResponseEntity(HttpStatus.OK); + } } \ No newline at end of file diff --git a/eladmin-system/src/main/resources/template/generator/admin/Dto.ftl b/eladmin-system/src/main/resources/template/generator/admin/Dto.ftl index d57910b4..c97b19fb 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/Dto.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/Dto.ftl @@ -23,8 +23,8 @@ public class ${className}DTO implements Serializable { <#if columns??> <#list columns as column> - <#if column.columnComment != ''> - // ${column.columnComment} + <#if column.remark != ''> + // ${column.remark} <#if column.columnKey = 'PRI'> <#if !auto && pkColumnType = 'Long'> diff --git a/eladmin-system/src/main/resources/template/generator/admin/Entity.ftl b/eladmin-system/src/main/resources/template/generator/admin/Entity.ftl index 5bf7eab4..d2a1494d 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/Entity.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/Entity.ftl @@ -4,6 +4,14 @@ import lombok.Data; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import javax.persistence.*; +<#if isNotNullColumns??> +import javax.validation.constraints.*; + +<#if hasDateAnnotation> +import javax.persistence.Entity; +import javax.persistence.Table; +import org.hibernate.annotations.*; + <#if hasTimestamp> import java.sql.Timestamp; @@ -23,8 +31,8 @@ public class ${className} implements Serializable { <#if columns??> <#list columns as column> - <#if column.columnComment != ''> - // ${column.columnComment} + <#if column.remark != ''> + // ${column.remark} <#if column.columnKey = 'PRI'> @Id @@ -32,7 +40,21 @@ public class ${className} implements Serializable { @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "${column.columnName}"<#if column.columnKey = 'UNI'>,unique = true<#if column.isNullable = 'NO' && column.columnKey != 'PRI'>,nullable = false) + @Column(name = "${column.columnName}"<#if column.columnKey = 'UNI'>,unique = true<#if column.istNotNull && column.columnKey != 'PRI'>,nullable = false) + <#if column.istNotNull && column.columnKey != 'PRI'> + <#if column.columnType = 'String'> + @NotBlank + <#else> + @NotNull + + + <#if column.dateAnnotation??> + <#if column.dateAnnotation = 'CreationTimestamp'> + @CreationTimestamp + <#else> + @UpdateTimestamp + + private ${column.columnType} ${column.changeColumnName}; diff --git a/eladmin-system/src/main/resources/template/generator/admin/QueryCriteria.ftl b/eladmin-system/src/main/resources/template/generator/admin/QueryCriteria.ftl index 2f5e20a7..ab87ee3f 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/QueryCriteria.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/QueryCriteria.ftl @@ -7,6 +7,9 @@ import java.sql.Timestamp; <#if queryHasBigDecimal> import java.math.BigDecimal; +<#if dateRanges??> +import java.util.List; + <#if queryColumns??> import me.zhengjie.annotation.Query; @@ -20,15 +23,37 @@ public class ${className}QueryCriteria{ <#if queryColumns??> <#list queryColumns as column> - <#if column.columnQuery = '1'> - // 模糊 - @Query(type = Query.Type.INNER_LIKE) - - <#if column.columnQuery = '2'> +<#if column.queryType = '='> // 精确 @Query - private ${column.columnType} ${column.changeColumnName}; + +<#if column.queryType = 'Like'> + // 模糊 + @Query(type = Query.Type.INNER_LIKE) + private ${column.columnType} ${column.changeColumnName}; + +<#if column.queryType = '!='> + // 不等于 + @Query(type = Query.Type.NOT_EQUAL) + private ${column.columnType} ${column.changeColumnName}; + +<#if column.queryType = '>='> + // 大于等于 + @Query(type = Query.Type.GREATER_THAN) + private ${column.columnType} ${column.changeColumnName}; + +<#if column.queryType = '<='> + // 小于等于 + @Query(type = Query.Type.LESS_THAN) + private ${column.columnType} ${column.changeColumnName}; + + + +<#if dateRanges??> + <#list dateRanges as column> + @Query(type = Query.Type.BETWEEN) + private List<${column.columnType}> createTime; } \ No newline at end of file diff --git a/eladmin-system/src/main/resources/template/generator/admin/Service.ftl b/eladmin-system/src/main/resources/template/generator/admin/Service.ftl index 18264298..ecac0ab8 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/Service.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/Service.ftl @@ -43,5 +43,7 @@ public interface ${className}Service { void delete(${pkColumnType} ${pkChangeColName}); + void deleteAll(${pkColumnType}[] ids); + void download(List<${className}DTO> all, HttpServletResponse response) throws IOException; } \ No newline at end of file diff --git a/eladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl b/eladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl index b81db3b5..e093128a 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl @@ -133,6 +133,13 @@ public class ${className}ServiceImpl implements ${className}Service { ${changeClassName}Repository.deleteById(${pkChangeColName}); } + @Override + @CacheEvict(allEntries = true) + public void deleteAll(${pkColumnType}[] ids) { + for (${pkColumnType} id : ids) { + ${changeClassName}Repository.deleteById(${pkChangeColName}); + } + } @Override public void download(List<${className}DTO> all, HttpServletResponse response) throws IOException { @@ -141,8 +148,8 @@ public class ${className}ServiceImpl implements ${className}Service { Map map = new LinkedHashMap<>(); <#list columns as column> <#if column.columnKey != 'PRI'> - <#if column.columnComment != ''> - map.put("${column.columnComment}", ${changeClassName}.get${column.capitalColumnName}()); + <#if column.remark != ''> + map.put("${column.remark}", ${changeClassName}.get${column.capitalColumnName}()); <#else> map.put(" ${column.changeColumnName}", ${changeClassName}.get${column.capitalColumnName}()); diff --git a/eladmin-system/src/main/resources/template/generator/front/api.ftl b/eladmin-system/src/main/resources/template/generator/front/api.ftl index a848db14..5a49e1be 100644 --- a/eladmin-system/src/main/resources/template/generator/front/api.ftl +++ b/eladmin-system/src/main/resources/template/generator/front/api.ftl @@ -14,6 +14,13 @@ export function del(${pkChangeColName}) { method: 'delete' }) } +export function delAll(ids) { + return request({ + url: 'api/${changeClassName}/', + method: 'delete', + data: ids + }) +} export function edit(data) { return request({ diff --git a/eladmin-system/src/main/resources/template/generator/front/eForm.ftl b/eladmin-system/src/main/resources/template/generator/front/eForm.ftl index de44a6ae..fd881ec4 100644 --- a/eladmin-system/src/main/resources/template/generator/front/eForm.ftl +++ b/eladmin-system/src/main/resources/template/generator/front/eForm.ftl @@ -1,13 +1,33 @@