From 4e0deae13d0d14c12b13f92bbf714db61624135a Mon Sep 17 00:00:00 2001 From: Elune <201507802@qq.com> Date: Sun, 22 Dec 2019 10:38:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=E5=99=A8=EF=BC=8C=E4=BC=98=E5=8C=96=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E7=BA=A7=E5=88=AB=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/GenConfigServiceImpl.java | 37 ++--- .../src/main/java/me/zhengjie/AppRun.java | 17 ++- .../system/repository/RoleRepository.java | 7 + .../modules/system/rest/RoleController.java | 38 ++++- .../system/service/impl/RoleServiceImpl.java | 12 +- .../template/generator/admin/Controller.ftl | 9 -- .../generator/admin/QueryCriteria.ftl | 5 + .../template/generator/admin/Service.ftl | 6 - .../template/generator/admin/ServiceImpl.ftl | 28 ++-- .../template/generator/front/api.ftl | 10 +- .../template/generator/front/index.ftl | 139 ++++++++---------- 11 files changed, 160 insertions(+), 148 deletions(-) diff --git a/eladmin-generator/src/main/java/me/zhengjie/service/impl/GenConfigServiceImpl.java b/eladmin-generator/src/main/java/me/zhengjie/service/impl/GenConfigServiceImpl.java index 38a9e6ee..59dd95db 100644 --- a/eladmin-generator/src/main/java/me/zhengjie/service/impl/GenConfigServiceImpl.java +++ b/eladmin-generator/src/main/java/me/zhengjie/service/impl/GenConfigServiceImpl.java @@ -3,6 +3,7 @@ package me.zhengjie.service.impl; import me.zhengjie.domain.GenConfig; import me.zhengjie.repository.GenConfigRepository; import me.zhengjie.service.GenConfigService; +import me.zhengjie.utils.StringUtils; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; @@ -36,25 +37,27 @@ public class GenConfigServiceImpl implements GenConfigService { @Override @CachePut(key = "#p0") public GenConfig update(String tableName, GenConfig genConfig) { - // 自动设置Api路径,注释掉前需要同步取消前端的注释 - String separator = File.separator; - String[] paths; - String symbol = "\\"; - if (symbol.equals(separator)) { - paths = genConfig.getPath().split("\\\\"); - } else { - paths = genConfig.getPath().split(File.separator); - } - StringBuilder api = new StringBuilder(); - for (String path : paths) { - api.append(path); - api.append(separator); - if ("src".equals(path)) { - api.append("api"); - break; + // 如果 api 路径为空,则自动生成路径 + if(StringUtils.isBlank(genConfig.getApiPath())){ + String separator = File.separator; + String[] paths; + String symbol = "\\"; + if (symbol.equals(separator)) { + paths = genConfig.getPath().split("\\\\"); + } else { + paths = genConfig.getPath().split(File.separator); } + StringBuilder api = new StringBuilder(); + for (String path : paths) { + api.append(path); + api.append(separator); + if ("src".equals(path)) { + api.append("api"); + break; + } + } + genConfig.setApiPath(api.toString()); } - genConfig.setApiPath(api.toString()); return genConfigRepository.save(genConfig); } } diff --git a/eladmin-system/src/main/java/me/zhengjie/AppRun.java b/eladmin-system/src/main/java/me/zhengjie/AppRun.java index 94582b4f..3a913697 100644 --- a/eladmin-system/src/main/java/me/zhengjie/AppRun.java +++ b/eladmin-system/src/main/java/me/zhengjie/AppRun.java @@ -1,20 +1,23 @@ package me.zhengjie; +import me.zhengjie.annotation.AnonymousAccess; 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; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; /** * @author Zheng Jie * @date 2018/11/15 9:20:19 */ @EnableAsync +@RestController @SpringBootApplication @EnableTransactionManagement public class AppRun { @@ -31,7 +34,17 @@ public class AppRun { @Bean public ServletWebServerFactory webServerFactory() { TomcatServletWebServerFactory fa = new TomcatServletWebServerFactory(); - fa.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "[]{}")); + fa.addConnectorCustomizers(connector -> connector.setProperty("relaxedQueryChars", "[]{}")); return fa; } + + /** + * 访问首页提示 + * @return / + */ + @GetMapping("/") + @AnonymousAccess + public String index() { + return "Backend service started successfully"; + } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/RoleRepository.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/RoleRepository.java index 0479d4ee..155145f8 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/RoleRepository.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/RoleRepository.java @@ -35,4 +35,11 @@ public interface RoleRepository extends JpaRepository, JpaSpecificat @Modifying @Query(value = "delete from roles_menus where menu_id = ?1",nativeQuery = true) void untiedMenu(Long id); + + /** + * 根据角色权限查询 + * @param permission / + * @return / + */ + Role findByPermission(String permission); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java index 6f95ab6b..0dfca36e 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/RoleController.java @@ -8,6 +8,7 @@ import me.zhengjie.modules.system.domain.Role; import me.zhengjie.exception.BadRequestException; import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.UserService; +import me.zhengjie.modules.system.service.dto.RoleDto; import me.zhengjie.modules.system.service.dto.RoleQueryCriteria; import me.zhengjie.modules.system.service.dto.RoleSmallDto; import me.zhengjie.modules.system.service.dto.UserDto; @@ -21,7 +22,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; - import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collections; @@ -81,9 +81,7 @@ public class RoleController { @ApiOperation("获取用户级别") @GetMapping(value = "/level") public ResponseEntity getLevel(){ - UserDto user = userService.findByName(SecurityUtils.getUsername()); - List levels = roleService.findByUsersId(user.getId()).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList()); - return new ResponseEntity<>(Dict.create().set("level", Collections.min(levels)),HttpStatus.OK); + return new ResponseEntity<>(Dict.create().set("level", getLevels(null)),HttpStatus.OK); } @Log("新增角色") @@ -94,6 +92,7 @@ public class RoleController { if (resources.getId() != null) { throw new BadRequestException("A new "+ ENTITY_NAME +" cannot already have an ID"); } + getLevels(resources.getLevel()); return new ResponseEntity<>(roleService.create(resources),HttpStatus.CREATED); } @@ -102,6 +101,7 @@ public class RoleController { @PutMapping @PreAuthorize("@el.check('roles:edit')") public ResponseEntity update(@Validated(Role.Update.class) @RequestBody Role resources){ + getLevels(resources.getLevel()); roleService.update(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @@ -111,7 +111,9 @@ public class RoleController { @PutMapping(value = "/menu") @PreAuthorize("@el.check('roles:edit')") public ResponseEntity updateMenu(@RequestBody Role resources){ - roleService.updateMenu(resources,roleService.findById(resources.getId())); + RoleDto role = roleService.findById(resources.getId()); + getLevels(role.getLevel()); + roleService.updateMenu(resources,role); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @@ -120,7 +122,31 @@ public class RoleController { @DeleteMapping @PreAuthorize("@el.check('roles:del')") public ResponseEntity delete(@RequestBody Set ids){ - roleService.delete(ids); + for (Long id : ids) { + RoleDto role = roleService.findById(id); + getLevels(role.getLevel()); + } + try { + roleService.delete(ids); + } catch (Throwable e){ + ThrowableUtil.throwForeignKeyException(e, "所选角色存在用户关联,请取消关联后再试"); + } return new ResponseEntity<>(HttpStatus.OK); } + + /** + * 获取用户的角色级别 + * @return / + */ + private int getLevels(Integer level){ + UserDto user = userService.findByName(SecurityUtils.getUsername()); + List levels = roleService.findByUsersId(user.getId()).stream().map(RoleSmallDto::getLevel).collect(Collectors.toList()); + int min = Collections.min(levels); + if(level != null){ + if(level < min){ + throw new BadRequestException("权限不足,你的角色级别:" + min + ",低于操作的角色级别:" + level); + } + } + return min; + } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java index 14c16de1..2c31be40 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/RoleServiceImpl.java @@ -98,12 +98,16 @@ public class RoleServiceImpl implements RoleService { if(role1 != null && !role1.getId().equals(role.getId())){ throw new EntityExistException(Role.class,"username",resources.getName()); } - + role1 = roleRepository.findByPermission(resources.getPermission()); + if(role1 != null && !role1.getId().equals(role.getId())){ + throw new EntityExistException(Role.class,"permission",resources.getPermission()); + } role.setName(resources.getName()); role.setRemark(resources.getRemark()); role.setDataScope(resources.getDataScope()); role.setDepts(resources.getDepts()); role.setLevel(resources.getLevel()); + role.setPermission(resources.getPermission()); roleRepository.save(role); } @@ -127,11 +131,7 @@ public class RoleServiceImpl implements RoleService { @Transactional(rollbackFor = Exception.class) public void delete(Set ids) { for (Long id : ids) { - try { - roleRepository.deleteById(id); - }catch (Throwable e){ - ThrowableUtil.throwForeignKeyException(e, "该角色存在用户关联,请取消关联后再试"); - } + roleRepository.deleteById(id); } } 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 4a933e21..70a6970a 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/Controller.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/Controller.ftl @@ -62,18 +62,9 @@ public class ${className}Controller { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } - @DeleteMapping(value = "/{${pkChangeColName}}") @Log("删除${apiAlias}") @ApiOperation("删除${apiAlias}") @PreAuthorize("@el.check('${changeClassName}:del')") - public ResponseEntity delete(@PathVariable ${pkColumnType} ${pkChangeColName}){ - ${changeClassName}Service.delete(${pkChangeColName}); - return new ResponseEntity<>(HttpStatus.OK); - } - - @Log("多选删除${apiAlias}") - @ApiOperation("多选删除${apiAlias}") - @PreAuthorize("@el.check('${changeClassName}:del')") @DeleteMapping public ResponseEntity deleteAll(@RequestBody ${pkColumnType}[] ids) { ${changeClassName}Service.deleteAll(ids); 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 c8c55254..c7fa4b95 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/QueryCriteria.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/QueryCriteria.ftl @@ -38,6 +38,11 @@ public class ${className}QueryCriteria{ @Query(type = Query.Type.NOT_EQUAL) private ${column.columnType} ${column.changeColumnName}; +<#if column.queryType = 'NotNull'> + /** 不为空 */ + @Query(type = Query.Type.NOT_NULL) + private ${column.columnType} ${column.changeColumnName}; + <#if column.queryType = '>='> /** 大于等于 */ @Query(type = Query.Type.GREATER_THAN) 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 5321a7b3..4ba4a0e7 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/Service.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/Service.ftl @@ -50,12 +50,6 @@ public interface ${className}Service { */ void update(${className} resources); - /** - * 删除 - * @param ${pkChangeColName} / - */ - void delete(${pkColumnType} ${pkChangeColName}); - /** * 多选删除 * @param ids / 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 ecb6a80c..76eb12ee 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl @@ -27,9 +27,10 @@ import cn.hutool.core.util.IdUtil; <#if !auto && pkColumnType = 'String'> import cn.hutool.core.util.IdUtil; -import org.springframework.cache.annotation.CacheConfig; -import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; +// 默认不使用缓存 +//import org.springframework.cache.annotation.CacheConfig; +//import org.springframework.cache.annotation.CacheEvict; +//import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import me.zhengjie.utils.PageUtil; @@ -46,7 +47,7 @@ import java.util.LinkedHashMap; * @date ${date} */ @Service -@CacheConfig(cacheNames = "${changeClassName}") +//@CacheConfig(cacheNames = "${changeClassName}") @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class) public class ${className}ServiceImpl implements ${className}Service { @@ -60,20 +61,20 @@ public class ${className}ServiceImpl implements ${className}Service { } @Override - @Cacheable + //@Cacheable public Map queryAll(${className}QueryCriteria criteria, Pageable pageable){ Page<${className}> page = ${changeClassName}Repository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); return PageUtil.toPage(page.map(${changeClassName}Mapper::toDto)); } @Override - @Cacheable + //@Cacheable public List<${className}Dto> queryAll(${className}QueryCriteria criteria){ return ${changeClassName}Mapper.toDto(${changeClassName}Repository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); } @Override - @Cacheable(key = "#p0") + //@Cacheable(key = "#p0") public ${className}Dto findById(${pkColumnType} ${pkChangeColName}) { ${className} ${changeClassName} = ${changeClassName}Repository.findById(${pkChangeColName}).orElseGet(${className}::new); ValidationUtil.isNull(${changeClassName}.get${pkCapitalColName}(),"${className}","${pkChangeColName}",${pkChangeColName}); @@ -81,7 +82,7 @@ public class ${className}ServiceImpl implements ${className}Service { } @Override - @CacheEvict(allEntries = true) + //@CacheEvict(allEntries = true) @Transactional(rollbackFor = Exception.class) public ${className}Dto create(${className} resources) { <#if !auto && pkColumnType = 'Long'> @@ -104,7 +105,7 @@ public class ${className}ServiceImpl implements ${className}Service { } @Override - @CacheEvict(allEntries = true) + //@CacheEvict(allEntries = true) @Transactional(rollbackFor = Exception.class) public void update(${className} resources) { ${className} ${changeClassName} = ${changeClassName}Repository.findById(resources.get${pkCapitalColName}()).orElseGet(${className}::new); @@ -127,14 +128,7 @@ public class ${className}ServiceImpl implements ${className}Service { } @Override - @CacheEvict(allEntries = true) - @Transactional(rollbackFor = Exception.class) - public void delete(${pkColumnType} ${pkChangeColName}) { - ${changeClassName}Repository.deleteById(${pkChangeColName}); - } - - @Override - @CacheEvict(allEntries = true) + //@CacheEvict(allEntries = true) public void deleteAll(${pkColumnType}[] ids) { for (${pkColumnType} id : ids) { ${changeClassName}Repository.deleteById(${pkChangeColName}); 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 071a562f..9587d0df 100644 --- a/eladmin-system/src/main/resources/template/generator/front/api.ftl +++ b/eladmin-system/src/main/resources/template/generator/front/api.ftl @@ -8,13 +8,7 @@ export function add(data) { }) } -export function del(${pkChangeColName}) { - return request({ - url: 'api/${changeClassName}/' + ${pkChangeColName}, - method: 'delete' - }) -} -export function delAll(ids) { +export function del(ids) { return request({ url: 'api/${changeClassName}/', method: 'delete', @@ -30,4 +24,4 @@ export function edit(data) { }) } -export default { add, edit, del, delAll } +export default { add, edit, del } diff --git a/eladmin-system/src/main/resources/template/generator/front/index.ftl b/eladmin-system/src/main/resources/template/generator/front/index.ftl index b7b370a7..1d7f98d4 100644 --- a/eladmin-system/src/main/resources/template/generator/front/index.ftl +++ b/eladmin-system/src/main/resources/template/generator/front/index.ftl @@ -4,43 +4,41 @@
<#if hasQuery> - - - - - -<#if betweens??> - <#list betweens as column> - <#if column.queryType = 'BetWeen'> - +
+ + + + + + <#if betweens??> + <#list betweens as column> + <#if column.queryType = 'BetWeen'> + + + + + +
- - - 搜索 - - - 新增 - - 导出 - - 删除 + + - + :rules="rules" size="small" label-width="80px"> <#if columns??> <#list columns as column> <#if column.formShow> - prop="${column.changeColumnName}"> + prop="${column.changeColumnName}"> <#if column.formType = 'Input'> <#elseif column.formType = 'Textarea'> @@ -72,26 +70,26 @@ - + <#if columns??> <#list columns as column> <#if column.columnShow> <#if column.dictName??> - + <#elseif column.columnType != 'Timestamp'> - + <#else> - + @@ -100,51 +98,46 @@ - + - +