From 90c2bf906be00ee0956434dfdf5bbed42941e981 Mon Sep 17 00:00:00 2001 From: zhengjie Date: Tue, 21 May 2019 16:00:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=99=A8issues=E4=B8=AD=E7=9A=84#60=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96#64/#IWT0F=E7=9A=84=E5=89=8D=E4=B8=89=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/zhengjie/domain/vo/ColumnInfo.java | 3 ++ .../service/impl/GeneratorServiceImpl.java | 4 +-- .../main/java/me/zhengjie/utils/GenUtil.java | 15 ++++++-- .../zhengjie/modules/system/domain/Dept.java | 4 --- .../modules/system/domain/DictDetail.java | 2 +- .../system/repository/DeptRepository.java | 2 -- .../template/generator/admin/Controller.ftl | 23 ++++--------- .../template/generator/admin/Dto.ftl | 11 ++++++ .../template/generator/admin/Entity.ftl | 2 ++ .../template/generator/admin/QueryService.ftl | 4 +-- .../template/generator/admin/Service.ftl | 8 ++--- .../template/generator/admin/ServiceImpl.ftl | 34 +++++++++++++------ .../template/generator/front/api.ftl | 4 +-- .../template/generator/front/eForm.ftl | 2 +- .../template/generator/front/header.ftl | 5 ++- .../template/generator/front/index.ftl | 22 ++++++------ 16 files changed, 85 insertions(+), 60 deletions(-) diff --git a/eladmin-generator/src/main/java/me/zhengjie/domain/vo/ColumnInfo.java b/eladmin-generator/src/main/java/me/zhengjie/domain/vo/ColumnInfo.java index bff0cad8..e751cbaa 100644 --- a/eladmin-generator/src/main/java/me/zhengjie/domain/vo/ColumnInfo.java +++ b/eladmin-generator/src/main/java/me/zhengjie/domain/vo/ColumnInfo.java @@ -29,6 +29,9 @@ public class ColumnInfo { /** 数据库字段键类型 **/ private Object columnKey; + /** 额外的参数 **/ + private Object extra; + /** 查询 1:模糊 2:精确 **/ private String columnQuery; 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 index 6f2b3aec..846dac84 100644 --- a/eladmin-generator/src/main/java/me/zhengjie/service/impl/GeneratorServiceImpl.java +++ b/eladmin-generator/src/main/java/me/zhengjie/service/impl/GeneratorServiceImpl.java @@ -50,7 +50,7 @@ public class GeneratorServiceImpl implements GeneratorService { @Override public Object getColumns(String name) { - StringBuilder sql = new StringBuilder("select column_name, is_nullable, data_type, column_comment, column_key from information_schema.columns where "); + StringBuilder sql = new StringBuilder("select column_name, is_nullable, data_type, column_comment, column_key, extra from information_schema.columns where "); if(!ObjectUtils.isEmpty(name)){ sql.append("table_name = '"+name+"' "); } @@ -59,7 +59,7 @@ public class GeneratorServiceImpl implements GeneratorService { List result = query.getResultList(); List columnInfos = new ArrayList<>(); for (Object[] obj : result) { - columnInfos.add(new ColumnInfo(obj[0],obj[1],obj[2],obj[3],obj[4],null,"true")); + columnInfos.add(new ColumnInfo(obj[0],obj[1],obj[2],obj[3],obj[4],obj[5],null,"true")); } return PageUtil.toPage(columnInfos,columnInfos.size()); } diff --git a/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java b/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java index 1645f993..3f636d12 100644 --- a/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java +++ b/eladmin-generator/src/main/java/me/zhengjie/utils/GenUtil.java @@ -29,6 +29,8 @@ public class GenUtil { private static final String PK = "PRI"; + private static final String EXTRA = "auto_increment"; + /** * 获取后端代码模板名称 * @return @@ -74,10 +76,12 @@ public class GenUtil { map.put("tableName",tableName); String className = StringUtils.toCapitalizeCamelCase(tableName); map.put("className", className); + map.put("upperCaseClassName", className.toUpperCase()); map.put("changeClassName", StringUtils.toCamelCase(tableName)); map.put("hasTimestamp",false); map.put("hasBigDecimal",false); map.put("hasQuery",false); + map.put("auto",false); List> columns = new ArrayList<>(); List> queryColumns = new ArrayList<>(); @@ -87,8 +91,12 @@ public class GenUtil { listMap.put("columnKey",column.getColumnKey()); String colType = ColUtil.cloToJava(column.getColumnType().toString()); + 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(TIMESTAMP.equals(colType)){ map.put("hasTimestamp",true); @@ -96,12 +104,15 @@ public class GenUtil { if(BIGDECIMAL.equals(colType)){ map.put("hasBigDecimal",true); } + if(EXTRA.equals(column.getExtra())){ + map.put("auto",true); + } listMap.put("columnType",colType); listMap.put("columnName",column.getColumnName()); listMap.put("isNullable",column.getIsNullable()); listMap.put("columnShow",column.getColumnShow()); - listMap.put("changeColumnName",StringUtils.toCamelCase(column.getColumnName().toString())); - listMap.put("capitalColumnName",StringUtils.toCapitalizeCamelCase(column.getColumnName().toString())); + listMap.put("changeColumnName",changeColumnName); + listMap.put("capitalColumnName",capitalColumnName); if(!StringUtils.isBlank(column.getColumnQuery())){ listMap.put("columnQuery",column.getColumnQuery()); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Dept.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Dept.java index 8e342dfa..2db7efa4 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Dept.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Dept.java @@ -49,9 +49,5 @@ public class Dept implements Serializable { @CreationTimestamp private Timestamp createTime; - @ManyToMany(mappedBy = "depts") - @JsonIgnore - private Set roles; - public @interface Update {} } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/DictDetail.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/DictDetail.java index bf1a5703..7c7d96ca 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/DictDetail.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/DictDetail.java @@ -41,7 +41,7 @@ public class DictDetail implements Serializable { /** * 字典id */ - @ManyToOne + @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "dict_id") private Dict dict; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/DeptRepository.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/DeptRepository.java index 8bb3edee..4c2626cc 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/DeptRepository.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/DeptRepository.java @@ -19,6 +19,4 @@ public interface DeptRepository extends JpaRepository, JpaSpecificat * @return */ List findByPid(Long id); - - Set findByRoles_Id(Long id); } \ 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 ff0b1547..f31048b4 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/Controller.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/Controller.ftl @@ -1,7 +1,6 @@ package ${package}.rest; import me.zhengjie.aop.log.Log; -import me.zhengjie.exception.BadRequestException; import ${package}.domain.${className}; import ${package}.service.${className}Service; import ${package}.service.dto.${className}DTO; @@ -28,41 +27,33 @@ public class ${className}Controller { @Autowired private ${className}QueryService ${changeClassName}QueryService; - private static final String ENTITY_NAME = "${changeClassName}"; - @Log("查询${className}") @GetMapping(value = "/${changeClassName}") - @PreAuthorize("hasAnyRole('ADMIN')") + @PreAuthorize("hasAnyRole('ADMIN','${upperCaseClassName}_ALL','${upperCaseClassName}_SELECT')") public ResponseEntity get${className}s(${className}DTO resources, Pageable pageable){ return new ResponseEntity(${changeClassName}QueryService.queryAll(resources,pageable),HttpStatus.OK); } @Log("新增${className}") @PostMapping(value = "/${changeClassName}") - @PreAuthorize("hasAnyRole('ADMIN')") + @PreAuthorize("hasAnyRole('ADMIN','${upperCaseClassName}_ALL','${upperCaseClassName}_CREATE')") public ResponseEntity create(@Validated @RequestBody ${className} resources){ - if (resources.getId() != null) { - throw new BadRequestException("A new "+ ENTITY_NAME +" cannot already have an ID"); - } return new ResponseEntity(${changeClassName}Service.create(resources),HttpStatus.CREATED); } @Log("修改${className}") @PutMapping(value = "/${changeClassName}") - @PreAuthorize("hasAnyRole('ADMIN')") + @PreAuthorize("hasAnyRole('ADMIN','${upperCaseClassName}_ALL','${upperCaseClassName}_EDIT')") public ResponseEntity update(@Validated @RequestBody ${className} resources){ - if (resources.getId() == null) { - throw new BadRequestException(ENTITY_NAME +" ID Can not be empty"); - } ${changeClassName}Service.update(resources); return new ResponseEntity(HttpStatus.NO_CONTENT); } @Log("删除${className}") - @DeleteMapping(value = "/${changeClassName}/{id}") - @PreAuthorize("hasAnyRole('ADMIN')") - public ResponseEntity delete(@PathVariable Long id){ - ${changeClassName}Service.delete(id); + @DeleteMapping(value = "/${changeClassName}/{${pkChangeColName}}") + @PreAuthorize("hasAnyRole('ADMIN','${upperCaseClassName}_ALL','${upperCaseClassName}_DELETE')") + public ResponseEntity delete(@PathVariable ${pkColumnType} ${pkChangeColName}){ + ${changeClassName}Service.delete(${pkChangeColName}); 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 d7d8e166..63e5a9c7 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/Dto.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/Dto.ftl @@ -8,6 +8,11 @@ import java.sql.Timestamp; import java.math.BigDecimal; import java.io.Serializable; +<#if !auto && pkColumnType = 'Long'> +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; + + /** * @author ${author} @@ -23,6 +28,12 @@ public class ${className}DTO implements Serializable { * ${column.columnComment} */ + <#if column.columnKey = 'PRI'> + <#if !auto && pkColumnType = 'Long'> + // 处理精度丢失问题 + @JsonSerialize(using= ToStringSerializer.class) + + private ${column.columnType} ${column.changeColumnName}; 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 4c802550..85583c08 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/Entity.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/Entity.ftl @@ -28,8 +28,10 @@ public class ${className} implements Serializable { <#if column.columnKey = 'PRI'> @Id + <#if auto> @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "${column.columnName}"<#if column.columnKey = 'UNI'>,unique = true<#if column.isNullable = 'NO' && column.columnKey != 'PRI'>,nullable = false) private ${column.columnType} ${column.changeColumnName}; diff --git a/eladmin-system/src/main/resources/template/generator/admin/QueryService.ftl b/eladmin-system/src/main/resources/template/generator/admin/QueryService.ftl index 4226b957..2cd0af88 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/QueryService.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/QueryService.ftl @@ -85,8 +85,8 @@ public class ${className}QueryService { } - Predicate[] p = new Predicate[list.size()]; - return cb.and(list.toArray(p)); + Predicate[] p = new Predicate[list.size()]; + return cb.and(list.toArray(p)); } } } \ 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 809e242d..9458028e 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/Service.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/Service.ftl @@ -15,11 +15,11 @@ public interface ${className}Service { /** * findById - * @param id + * @param ${pkChangeColName} * @return */ @Cacheable(key = "#p0") - ${className}DTO findById(${pkColumnType} id); + ${className}DTO findById(${pkColumnType} ${pkChangeColName}); /** * create @@ -38,8 +38,8 @@ public interface ${className}Service { /** * delete - * @param id + * @param ${pkChangeColName} */ @CacheEvict(allEntries = true) - void delete(Long id); + void delete(${pkColumnType} ${pkChangeColName}); } \ 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 ef7b7dec..2dfcd02b 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl @@ -20,6 +20,13 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.Optional; +<#if !auto && pkColumnType = 'Long'> +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; + +<#if !auto && pkColumnType = 'String'> +import cn.hutool.core.util.IdUtil; + /** * @author ${author} @@ -36,15 +43,22 @@ public class ${className}ServiceImpl implements ${className}Service { private ${className}Mapper ${changeClassName}Mapper; @Override - public ${className}DTO findById(${pkColumnType} id) { - Optional<${className}> ${changeClassName} = ${changeClassName}Repository.findById(id); - ValidationUtil.isNull(${changeClassName},"${className}","id",id); + public ${className}DTO findById(${pkColumnType} ${pkChangeColName}) { + Optional<${className}> ${changeClassName} = ${changeClassName}Repository.findById(${pkChangeColName}); + ValidationUtil.isNull(${changeClassName},"${className}","${pkChangeColName}",${pkChangeColName}); return ${changeClassName}Mapper.toDto(${changeClassName}.get()); } @Override @Transactional(rollbackFor = Exception.class) public ${className}DTO create(${className} resources) { +<#if !auto && pkColumnType = 'Long'> + Snowflake snowflake = IdUtil.createSnowflake(1, 1); + resources.set${pkCapitalColName}(snowflake.nextId()); + +<#if !auto && pkColumnType = 'String'> + resources.set${pkCapitalColName}(IdUtil.simpleUUID()); + <#if columns??> <#list columns as column> <#if column.columnKey = 'UNI'> @@ -60,31 +74,31 @@ public class ${className}ServiceImpl implements ${className}Service { @Override @Transactional(rollbackFor = Exception.class) public void update(${className} resources) { - Optional<${className}> optional${className} = ${changeClassName}Repository.findById(resources.getId()); - ValidationUtil.isNull( optional${className},"${className}","id",resources.getId()); + Optional<${className}> optional${className} = ${changeClassName}Repository.findById(resources.get${pkCapitalColName}()); + ValidationUtil.isNull( optional${className},"${className}","id",resources.get${pkCapitalColName}()); ${className} ${changeClassName} = optional${className}.get(); <#if columns??> <#list columns as column> <#if column.columnKey = 'UNI'> <#if column_index = 1> - ${className} ${changeClassName}1 = null; + ${className} ${changeClassName}1 = null; ${changeClassName}1 = ${changeClassName}Repository.findBy${column.capitalColumnName}(resources.get${column.capitalColumnName}()); - if(${changeClassName}1 != null && !${changeClassName}1.getId().equals(${changeClassName}.getId())){ + if(${changeClassName}1 != null && !${changeClassName}1.get${pkCapitalColName}().equals(${changeClassName}.get${pkCapitalColName}())){ throw new EntityExistException(${className}.class,"${column.columnName}",resources.get${column.capitalColumnName}()); } // 此处需自己修改 - resources.setId(${changeClassName}.getId()); + resources.set${pkCapitalColName}(${changeClassName}.get${pkCapitalColName}()); ${changeClassName}Repository.save(resources); } @Override @Transactional(rollbackFor = Exception.class) - public void delete(Long id) { - ${changeClassName}Repository.deleteById(id); + public void delete(${pkColumnType} ${pkChangeColName}) { + ${changeClassName}Repository.deleteById(${pkChangeColName}); } } \ No newline at end of file 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 400be882..a39d3bc7 100644 --- a/eladmin-system/src/main/resources/template/generator/front/api.ftl +++ b/eladmin-system/src/main/resources/template/generator/front/api.ftl @@ -8,9 +8,9 @@ export function add(data) { }) } -export function del(id) { +export function del(${pkChangeColName}) { return request({ - url: 'api/${changeClassName}/' + id, + url: 'api/${changeClassName}/' + ${pkChangeColName}, method: 'delete' }) } 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 bbe22905..7f131988 100644 --- a/eladmin-system/src/main/resources/template/generator/front/eForm.ftl +++ b/eladmin-system/src/main/resources/template/generator/front/eForm.ftl @@ -3,7 +3,7 @@ <#if columns??> <#list columns as column> - <#if column.changeColumnName != 'id'> + <#if column.changeColumnName != '${pkChangeColName}'> diff --git a/eladmin-system/src/main/resources/template/generator/front/header.ftl b/eladmin-system/src/main/resources/template/generator/front/header.ftl index 2045a0a1..81c72e98 100644 --- a/eladmin-system/src/main/resources/template/generator/front/header.ftl +++ b/eladmin-system/src/main/resources/template/generator/front/header.ftl @@ -11,7 +11,7 @@