diff --git a/eladmin-common/pom.xml b/eladmin-common/pom.xml index 49018491..c7467180 100644 --- a/eladmin-common/pom.xml +++ b/eladmin-common/pom.xml @@ -10,5 +10,6 @@ 4.0.0 eladmin-common + 公共模块 \ No newline at end of file diff --git a/eladmin-common/src/main/java/me/zhengjie/redis/RedisConfig.java b/eladmin-common/src/main/java/me/zhengjie/redis/RedisConfig.java index a9486165..beb0170a 100644 --- a/eladmin-common/src/main/java/me/zhengjie/redis/RedisConfig.java +++ b/eladmin-common/src/main/java/me/zhengjie/redis/RedisConfig.java @@ -3,14 +3,14 @@ package me.zhengjie.redis; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.ParserConfig; import lombok.extern.slf4j.Slf4j; -import me.zhengjie.utils.StringUtils; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.data.redis.RedisProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cache.Cache; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.interceptor.CacheErrorHandler; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -61,6 +61,7 @@ public class RedisConfig extends CachingConfigurerSupport { // 建议使用这种方式,小范围指定白名单 ParserConfig.getGlobalInstance().addAccept("me.zhengjie.domain"); ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.system.service.dto"); + ParserConfig.getGlobalInstance().addAccept("me.zhengjie.service.dto"); ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.system.domain"); ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.quartz.domain"); ParserConfig.getGlobalInstance().addAccept("me.zhengjie.modules.monitor.domain"); @@ -73,8 +74,8 @@ public class RedisConfig extends CachingConfigurerSupport { } /** - * 自定义缓存key生成策略 - * 使用方法 @Cacheable(keyGenerator="keyGenerator") + * 自定义缓存key生成策略,默认将使用该策略 + * 使用方法 @Cacheable * @return */ @Bean @@ -90,4 +91,34 @@ public class RedisConfig extends CachingConfigurerSupport { return sb.toString(); }; } + + @Bean + @Override + public CacheErrorHandler errorHandler() { + // 异常处理,当Redis发生异常时,打印日志,但是程序正常走 + log.info("初始化 -> [{}]", "Redis CacheErrorHandler"); + CacheErrorHandler cacheErrorHandler = new CacheErrorHandler() { + @Override + public void handleCacheGetError(RuntimeException e, Cache cache, Object key) { + log.error("Redis occur handleCacheGetError:key -> [{}]", key, e); + } + + @Override + public void handleCachePutError(RuntimeException e, Cache cache, Object key, Object value) { + log.error("Redis occur handleCachePutError:key -> [{}];value -> [{}]", key, value, e); + } + + @Override + public void handleCacheEvictError(RuntimeException e, Cache cache, Object key) { + log.error("Redis occur handleCacheEvictError:key -> [{}]", key, e); + } + + @Override + public void handleCacheClearError(RuntimeException e, Cache cache) { + log.error("Redis occur handleCacheClearError:", e); + } + }; + return cacheErrorHandler; + } + } diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/FileUtil.java b/eladmin-common/src/main/java/me/zhengjie/utils/FileUtil.java index 5549b814..0bd59edd 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/FileUtil.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/FileUtil.java @@ -1,10 +1,21 @@ package me.zhengjie.utils; +import cn.hutool.core.codec.Base64; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.poi.excel.BigExcelWriter; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; +import me.zhengjie.exception.BadRequestException; import org.springframework.web.multipart.MultipartFile; - +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; import java.io.*; import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; /** * File工具类,扩展 hutool 工具包 @@ -100,7 +111,7 @@ public class FileUtil extends cn.hutool.core.io.FileUtil { * @param size * @return */ - public static String getSize(int size){ + public static String getSize(long size){ String resultSize = ""; if (size / GB >= 1) { //如果当前Byte的值大于等于1GB @@ -139,4 +150,91 @@ public class FileUtil extends cn.hutool.core.io.FileUtil { ins.close(); return file; } + + /** + * 将文件名解析成文件的上传路径 + * + * @param file + * @param filePath + * @return 上传到服务器的文件名 + */ + public static File upload(MultipartFile file, String filePath) { + Date date = new Date(); + SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmssS"); + String name = getFileNameNoEx(file.getOriginalFilename()); + String suffix = getExtensionName(file.getOriginalFilename()); + String nowStr = "-" + format.format(date); + try { + String fileName = name + nowStr + "." + suffix; + String path = filePath + fileName; + File dest = new File(path); + // 检测是否存在目录 + if (!dest.getParentFile().exists()) { + dest.getParentFile().mkdirs();// 新建文件夹 + } + String d = dest.getPath(); + file.transferTo(dest);// 文件写入 + return dest; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String fileToBase64(File file) throws Exception { + FileInputStream inputFile = new FileInputStream(file); + String base64 =null; + byte[] buffer = new byte[(int)file.length()]; + inputFile.read(buffer); + inputFile.close(); + base64=new Base64().encode(buffer); + String encoded = base64.replaceAll("[\\s*\t\n\r]", ""); + return encoded; + } + + /** + * 导出excel + * @param list + * @return + * @throws Exception + */ + public static void downloadExcel(List> list, HttpServletResponse response) throws IOException { + String tempPath =System.getProperty("java.io.tmpdir") + IdUtil.fastSimpleUUID() + ".xlsx"; + File file = new File(tempPath); + BigExcelWriter writer= ExcelUtil.getBigWriter(file); + // 一次性写出内容,使用默认样式,强制输出标题 + writer.write(list, true); + //response为HttpServletResponse对象 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); + //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码 + response.setHeader("Content-Disposition","attachment;filename=file.xlsx"); + ServletOutputStream out=response.getOutputStream(); + // 终止后删除临时文件 + file.deleteOnExit(); + writer.flush(out, true); + //此处记得关闭输出Servlet流 + IoUtil.close(out); + } + + public static String getFileType(String type) { + String documents = "txt doc pdf ppt pps xlsx xls"; + String music = "mp3 wav wma mpa ram ra aac aif m4a"; + String video = "avi mpg mpe mpeg asf wmv mov qt rm mp4 flv m4v webm ogv ogg"; + String image = "bmp dib pcp dif wmf gif jpg tif eps psd cdr iff tga pcd mpt png jpeg"; + if(image.indexOf(type) != -1){ + return "图片"; + } else if(documents.indexOf(type) != -1){ + return "文档"; + } else if(music.indexOf(type) != -1){ + return "音乐"; + } else if(video.indexOf(type) != -1){ + return "视频"; + } else return "其他"; + } + + public static void checkSize(long maxSize, long size) { + if(size > (maxSize * 1024 * 1024)){ + throw new BadRequestException("文件超出规定大小"); + } + } } diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/PageUtil.java b/eladmin-common/src/main/java/me/zhengjie/utils/PageUtil.java index 7c4c7e70..8ca67b0a 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/PageUtil.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/PageUtil.java @@ -1,10 +1,7 @@ package me.zhengjie.utils; import org.springframework.data.domain.Page; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 分页工具 @@ -39,11 +36,9 @@ public class PageUtil extends cn.hutool.core.util.PageUtil { * @return */ public static Map toPage(Page page) { - Map map = new HashMap(); - + Map map = new LinkedHashMap<>(2); map.put("content",page.getContent()); map.put("totalElements",page.getTotalElements()); - return map; } @@ -53,8 +48,7 @@ public class PageUtil extends cn.hutool.core.util.PageUtil { * @return */ public static Map toPage(Object object, Object totalElements) { - Map map = new HashMap(); - + Map map = new LinkedHashMap<>(2); map.put("content",object); map.put("totalElements",totalElements); 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 8b0876c0..0ea14822 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java @@ -58,13 +58,24 @@ public class QueryHelp { continue; } if (ObjectUtil.isNotEmpty(joinName)) { - switch (q.join()) { - case LEFT: - join = root.join(joinName, JoinType.LEFT); - break; - case RIGHT: - join = root.join(joinName, JoinType.RIGHT); - break; + String[] joinNames = joinName.split(">"); + for (String name : joinNames) { + switch (q.join()) { + case LEFT: + if(ObjectUtil.isNotEmpty(join)){ + join = join.join(name, JoinType.LEFT); + } else { + join = root.join(name, JoinType.LEFT); + } + break; + case RIGHT: + if(ObjectUtil.isNotEmpty(join)){ + join = join.join(name, JoinType.RIGHT); + } else { + join = root.join(name, JoinType.RIGHT); + } + break; + } } } switch (q.type()) { diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/ThrowableUtil.java b/eladmin-common/src/main/java/me/zhengjie/utils/ThrowableUtil.java index 3725a1a1..6faa8c61 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/ThrowableUtil.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/ThrowableUtil.java @@ -1,5 +1,8 @@ package me.zhengjie.utils; +import me.zhengjie.exception.BadRequestException; +import org.hibernate.exception.ConstraintViolationException; + import java.io.PrintWriter; import java.io.StringWriter; @@ -25,4 +28,15 @@ public class ThrowableUtil { pw.close(); } } + + public static void throwForeignKeyException(Throwable e, String msg){ + Throwable t = e.getCause(); + while ((t != null) && !(t instanceof ConstraintViolationException)) { + t = t.getCause(); + } + if (t instanceof ConstraintViolationException) { + throw new BadRequestException(msg); + } + throw new BadRequestException("删除失败:" + t.getMessage()); + } } diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/TranslatorUtil.java b/eladmin-common/src/main/java/me/zhengjie/utils/TranslatorUtil.java new file mode 100644 index 00000000..1f34b54c --- /dev/null +++ b/eladmin-common/src/main/java/me/zhengjie/utils/TranslatorUtil.java @@ -0,0 +1,52 @@ +package me.zhengjie.utils; + +import cn.hutool.json.JSONArray; +import lombok.var; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; + +public class TranslatorUtil { + + public static String translate(String word){ + try { + String url = "https://translate.googleapis.com/translate_a/single?" + + "client=gtx&" + + "sl=en" + + "&tl=zh-CN" + + "&dt=t&q=" + URLEncoder.encode(word, "UTF-8"); + + URL obj = new URL(url); + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + con.setRequestProperty("User-Agent", "Mozilla/5.0"); + + BufferedReader in = new BufferedReader( + new InputStreamReader(con.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + return parseResult(response.toString()); + }catch (Exception e){ + return word; + } + } + + private static String parseResult(String inputJson) throws Exception { + JSONArray jsonArray = new JSONArray(inputJson); + JSONArray jsonArray2 = (JSONArray) jsonArray.get(0); + String result =""; + + for(var i = 0; i < jsonArray2.size(); i ++){ + result += ((JSONArray) jsonArray2.get(i)).get(0).toString(); + } + return result; + } + +} diff --git a/eladmin-generator/pom.xml b/eladmin-generator/pom.xml index bf69a3a4..7ced1116 100644 --- a/eladmin-generator/pom.xml +++ b/eladmin-generator/pom.xml @@ -10,6 +10,7 @@ 4.0.0 eladmin-generator + 代码生成模块 1.9 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 ec53052e..165cd5a1 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 @@ -5,6 +5,8 @@ import me.zhengjie.repository.GenConfigRepository; import me.zhengjie.service.GenConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import java.io.File; import java.util.Optional; /** @@ -30,6 +32,22 @@ public class GenConfigServiceImpl implements GenConfigService { @Override public GenConfig update(GenConfig genConfig) { genConfig.setId(1L); + // 自动设置Api路径,注释掉前需要同步取消前端的注释 + String separator = File.separator; + String[] paths = null; + if (separator.equals("\\")) { + paths = genConfig.getPath().split("\\\\"); + } else paths = genConfig.getPath().split(File.separator); + StringBuffer api = new StringBuffer(); + for (int i = 0; i < paths.length; i++) { + api.append(paths[i]); + api.append(separator); + if(paths[i].equals("src")){ + api.append("api"); + break; + } + } + genConfig.setApiPath(api.toString()); return genConfigRepository.save(genConfig); } } diff --git a/eladmin-logging/pom.xml b/eladmin-logging/pom.xml index d899d23b..e58fe26a 100644 --- a/eladmin-logging/pom.xml +++ b/eladmin-logging/pom.xml @@ -10,6 +10,7 @@ 4.0.0 eladmin-logging + 日志模块 diff --git a/eladmin-system/pom.xml b/eladmin-system/pom.xml index 62691647..d2d4f5f9 100644 --- a/eladmin-system/pom.xml +++ b/eladmin-system/pom.xml @@ -10,6 +10,7 @@ 4.0.0 eladmin-system + 核心模块 0.9.1 diff --git a/eladmin-system/src/main/java/me/zhengjie/config/ConfigurerAdapter.java b/eladmin-system/src/main/java/me/zhengjie/config/ConfigurerAdapter.java index 24d0b831..87d2d15d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/config/ConfigurerAdapter.java +++ b/eladmin-system/src/main/java/me/zhengjie/config/ConfigurerAdapter.java @@ -3,6 +3,7 @@ package me.zhengjie.config; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; @@ -25,6 +26,12 @@ import java.util.List; @EnableWebMvc public class ConfigurerAdapter implements WebMvcConfigurer { + @Value("${file.path}") + private String path; + + @Value("${file.avatar}") + private String avatar; + @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") @@ -35,27 +42,12 @@ public class ConfigurerAdapter implements WebMvcConfigurer { } -// 可解决Long 类型在 前端精度丢失的问题, 如不想全局 直接添加注解 @JsonSerialize(using= ToStringSerializer.class) 到相应的字段 - -// @Override -// public void configureMessageConverters(List> converters) { -// -// MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = -// new MappingJackson2HttpMessageConverter(); -// -// ObjectMapper objectMapper = new ObjectMapper(); -// SimpleModule simpleModule = new SimpleModule(); -// simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance); -// simpleModule.addSerializer(Long.class, ToStringSerializer.instance); -// simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); -// objectMapper.registerModule(simpleModule); -// jackson2HttpMessageConverter.setObjectMapper(objectMapper); -// converters.add(jackson2HttpMessageConverter); -// converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8"))); -// } - @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { + String avatarUtl = "file:" + avatar.replace("\\","/"); + String pathUtl = "file:" + path.replace("\\","/"); + registry.addResourceHandler("/avatar/**").addResourceLocations(avatarUtl).setCachePeriod(0); + registry.addResourceHandler("/file/**").addResourceLocations(pathUtl).setCachePeriod(0); registry.addResourceHandler("/**").addResourceLocations("classpath:/META-INF/resources/").setCachePeriod(0); } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/QuartzJobService.java b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/QuartzJobService.java index 4acd76fb..a5ade06d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/QuartzJobService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/service/QuartzJobService.java @@ -21,7 +21,7 @@ public interface QuartzJobService { * @param pageable * @return */ - @Cacheable(keyGenerator = "keyGenerator") + @Cacheable Object queryAll(JobQueryCriteria criteria, Pageable pageable); /** diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/task/TestTask.java b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/task/TestTask.java index 757703bb..680e9f1d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/task/TestTask.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/task/TestTask.java @@ -1,6 +1,7 @@ package me.zhengjie.modules.quartz.task; import lombok.extern.slf4j.Slf4j; +import me.zhengjie.exception.BadRequestException; import org.springframework.stereotype.Component; /** diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/utils/ExecutionJob.java b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/utils/ExecutionJob.java index 756c0fe2..221d665d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/utils/ExecutionJob.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/utils/ExecutionJob.java @@ -25,6 +25,7 @@ public class ExecutionJob extends QuartzJobBean { private Logger logger = LoggerFactory.getLogger(this.getClass()); + // 建议自定义线程池实现方式,该处仅供参考 private ExecutorService executorService = Executors.newSingleThreadExecutor(); @Override @@ -61,8 +62,7 @@ public class ExecutionJob extends QuartzJobBean { // 任务状态 0:成功 1:失败 log.setIsSuccess(false); log.setExceptionDetail(ThrowableUtil.getStackTrace(e)); - //出错就暂停任务 - quartzManage.pauseJob(quartzJob); + quartzJob.setIsPause(false); //更新状态 quartzJobService.updateIsPause(quartzJob); } finally { diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/utils/QuartzRunnable.java b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/utils/QuartzRunnable.java index 810cc8f2..d9407291 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/quartz/utils/QuartzRunnable.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/quartz/utils/QuartzRunnable.java @@ -1,17 +1,19 @@ package me.zhengjie.modules.quartz.utils; import lombok.extern.slf4j.Slf4j; +import me.zhengjie.exception.BadRequestException; import me.zhengjie.utils.SpringContextHolder; import org.apache.commons.lang3.StringUtils; import org.springframework.util.ReflectionUtils; import java.lang.reflect.Method; +import java.util.concurrent.Callable; /** * 执行定时任务 * @author */ @Slf4j -public class QuartzRunnable implements Runnable { +public class QuartzRunnable implements Callable { private Object target; private Method method; @@ -30,17 +32,13 @@ public class QuartzRunnable implements Runnable { } @Override - public void run() { - try { - ReflectionUtils.makeAccessible(method); - if (StringUtils.isNotBlank(params)) { - method.invoke(target, params); - } else { - method.invoke(target); - } - } catch (Exception e) { - log.error("定时任务执行失败",e); + public Object call() throws Exception { + ReflectionUtils.makeAccessible(method); + if (StringUtils.isNotBlank(params)) { + method.invoke(target, params); + } else { + method.invoke(target); } + return null; } - } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java index d7f006c1..d10bd218 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java @@ -106,6 +106,11 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { // 接口限流测试 .antMatchers("/test/**").anonymous() + // 文件 + .antMatchers("/avatar/**").anonymous() + .antMatchers("/file/**").anonymous() + + // 放行OPTIONS请求 .antMatchers(HttpMethod.OPTIONS, "/**").anonymous() .antMatchers("/druid/**").anonymous() diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Menu.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Menu.java index b9f684f0..16846e57 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Menu.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/Menu.java @@ -34,13 +34,23 @@ public class Menu implements Serializable { @NotNull private Long sort; + @NotBlank @Column(name = "path") private String path; private String component; + @Column(unique = true) + private String componentName; + private String icon; + @Column(columnDefinition = "bit(1) default 0") + private Boolean cache; + + @Column(columnDefinition = "bit(1) default 0") + private Boolean hidden; + /** * 上级菜单ID */ diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/User.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/User.java index b801b558..0bb62850 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/User.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/User.java @@ -31,7 +31,9 @@ public class User implements Serializable { @Column(unique = true) private String username; - private String avatar; + @OneToOne + @JoinColumn(name = "avatar_id") + private UserAvatar userAvatar; @NotBlank @Pattern(regexp = "([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}",message = "格式错误") @@ -69,7 +71,6 @@ public class User implements Serializable { return "User{" + "id=" + id + ", username='" + username + '\'' + - ", avatar='" + avatar + '\'' + ", email='" + email + '\'' + ", enabled=" + enabled + ", password='" + password + '\'' + diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/UserAvatar.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/UserAvatar.java new file mode 100644 index 00000000..bba30dc2 --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/UserAvatar.java @@ -0,0 +1,36 @@ +package me.zhengjie.modules.system.domain; + +import cn.hutool.core.util.ObjectUtil; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.*; +import java.sql.Timestamp; + +/** + * @author Zheng Jie + * @date 2019年9月7日 16:16:59 + */ +@Entity +@Table(name = "user_avatar") +@Data +@NoArgsConstructor +public class UserAvatar { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String realName; + + private String path; + + private String size; + + public UserAvatar(UserAvatar userAvatar,String realName, String path, String size) { + this.id = ObjectUtil.isNotEmpty(userAvatar) ? userAvatar.getId() : null; + this.realName = realName; + this.path = path; + this.size = size; + } +} diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/vo/MenuMetaVo.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/vo/MenuMetaVo.java index d6fc9ddd..00856fb1 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/vo/MenuMetaVo.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/vo/MenuMetaVo.java @@ -15,4 +15,6 @@ public class MenuMetaVo implements Serializable { private String title; private String icon; + + private Boolean noCache; } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/vo/MenuVo.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/vo/MenuVo.java index ea0610ba..c511c3db 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/vo/MenuVo.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/domain/vo/MenuVo.java @@ -19,6 +19,8 @@ public class MenuVo implements Serializable { private String path; + private Boolean hidden; + private String redirect; private String component; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/MenuRepository.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/MenuRepository.java index 220ca061..91c6d798 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/MenuRepository.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/MenuRepository.java @@ -23,6 +23,13 @@ public interface MenuRepository extends JpaRepository, JpaSpecificat */ Menu findByName(String name); + /** + * findByName + * @param name + * @return + */ + Menu findByComponentName(String name); + /** * findByPid * @param pid diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/PermissionRepository.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/PermissionRepository.java index 3d586fcd..f27e8653 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/PermissionRepository.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/PermissionRepository.java @@ -1,13 +1,9 @@ package me.zhengjie.modules.system.repository; import me.zhengjie.modules.system.domain.Permission; -import me.zhengjie.modules.system.domain.Role; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; - -import java.util.Collection; import java.util.List; -import java.util.Set; /** * @author Zheng Jie 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 1cd840b7..1e2b15ae 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 @@ -3,6 +3,8 @@ package me.zhengjie.modules.system.repository; import me.zhengjie.modules.system.domain.Role; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import java.util.Set; @@ -21,5 +23,11 @@ public interface RoleRepository extends JpaRepository, JpaSpecificat Set findByUsers_Id(Long id); - Set findByMenus_Id(Long id); + @Modifying + @Query(value = "delete from roles_permissions where permission_id = ?1",nativeQuery = true) + void untiedPermission(Long id); + + @Modifying + @Query(value = "delete from roles_menus where menu_id = ?1",nativeQuery = true) + void untiedMenu(Long id); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/UserAvatarRepository.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/UserAvatarRepository.java new file mode 100644 index 00000000..38136f85 --- /dev/null +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/repository/UserAvatarRepository.java @@ -0,0 +1,15 @@ +package me.zhengjie.modules.system.repository; + +import me.zhengjie.modules.system.domain.UserAvatar; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; + +import java.util.Date; + +/** + * @author Zheng Jie + * @date 2018-11-22 + */ +public interface UserAvatarRepository extends JpaRepository, JpaSpecificationExecutor { + +} diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DeptController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DeptController.java index 39d90436..b57946bf 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DeptController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/DeptController.java @@ -7,6 +7,7 @@ import me.zhengjie.modules.system.domain.Dept; import me.zhengjie.modules.system.service.DeptService; import me.zhengjie.modules.system.service.dto.DeptDTO; import me.zhengjie.modules.system.service.dto.DeptQueryCriteria; +import me.zhengjie.utils.ThrowableUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -63,7 +64,11 @@ public class DeptController { @DeleteMapping(value = "/dept/{id}") @PreAuthorize("hasAnyRole('ADMIN','DEPT_ALL','DEPT_DELETE')") public ResponseEntity delete(@PathVariable Long id){ - deptService.delete(id); + try { + deptService.delete(id); + }catch (Throwable e){ + ThrowableUtil.throwForeignKeyException(e, "该部门存在岗位或者角色关联,请取消关联后再试"); + } return new ResponseEntity(HttpStatus.OK); } } \ No newline at end of file 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 372bfe09..9480bb60 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 @@ -4,7 +4,6 @@ import me.zhengjie.aop.log.Log; import me.zhengjie.exception.BadRequestException; import me.zhengjie.modules.system.domain.Dict; import me.zhengjie.modules.system.service.DictService; -import me.zhengjie.modules.system.service.dto.DictDTO; import me.zhengjie.modules.system.service.dto.DictQueryCriteria; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; 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 76d94886..5694ea0c 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 @@ -6,6 +6,7 @@ import me.zhengjie.exception.BadRequestException; import me.zhengjie.modules.system.domain.Job; import me.zhengjie.modules.system.service.JobService; import me.zhengjie.modules.system.service.dto.JobQueryCriteria; +import me.zhengjie.utils.ThrowableUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; @@ -64,7 +65,11 @@ public class JobController { @DeleteMapping(value = "/job/{id}") @PreAuthorize("hasAnyRole('ADMIN','USERJOB_ALL','USERJOB_DELETE')") public ResponseEntity delete(@PathVariable Long id){ - jobService.delete(id); + try { + jobService.delete(id); + }catch (Throwable e){ + ThrowableUtil.throwForeignKeyException(e, "该岗位存在用户关联,请取消关联后再试"); + } return new ResponseEntity(HttpStatus.OK); } } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java index 6d3f06c1..37a65a2b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/MenuController.java @@ -16,7 +16,9 @@ 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 java.util.HashSet; import java.util.List; +import java.util.Set; /** * @author Zheng Jie @@ -90,14 +92,10 @@ public class MenuController { @PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_DELETE')") public ResponseEntity delete(@PathVariable Long id){ List menuList = menuService.findByPid(id); - - // 特殊情况,对级联删除进行处理 - for (Menu menu : menuList) { - roleService.untiedMenu(menu); - menuService.delete(menu.getId()); - } - roleService.untiedMenu(menuService.findOne(id)); - menuService.delete(id); + Set menuSet = new HashSet<>(); + menuSet.add(menuService.findOne(id)); + menuSet = menuService.getDeleteMenus(menuList, menuSet); + menuService.delete(menuSet); return new ResponseEntity(HttpStatus.OK); } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/PermissionController.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/PermissionController.java index b27ea7c3..216c838a 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/PermissionController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/rest/PermissionController.java @@ -6,6 +6,7 @@ import me.zhengjie.exception.BadRequestException; import me.zhengjie.modules.system.service.PermissionService; import me.zhengjie.modules.system.service.dto.PermissionDTO; import me.zhengjie.modules.system.service.dto.PermissionQueryCriteria; +import me.zhengjie.modules.system.service.mapper.PermissionMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -13,7 +14,9 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @author Zheng Jie @@ -26,6 +29,9 @@ public class PermissionController { @Autowired private PermissionService permissionService; + @Autowired + private PermissionMapper permissionMapper; + private static final String ENTITY_NAME = "permission"; /** @@ -68,7 +74,11 @@ public class PermissionController { @DeleteMapping(value = "/permissions/{id}") @PreAuthorize("hasAnyRole('ADMIN','PERMISSION_ALL','PERMISSION_DELETE')") public ResponseEntity delete(@PathVariable Long id){ - permissionService.delete(id); + List permissions = permissionService.findByPid(id); + Set permissionSet = new HashSet<>(); + permissionSet.add(permissionMapper.toEntity(permissionService.findById(id))); + permissionSet = permissionService.getDeletePermission(permissions, permissionSet); + permissionService.delete(permissionSet); return new ResponseEntity(HttpStatus.OK); } } 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 ce28bca3..340aa63c 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 @@ -5,10 +5,11 @@ import me.zhengjie.aop.log.Log; 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.dto.MenuQueryCriteria; import me.zhengjie.modules.system.service.dto.RoleQueryCriteria; import me.zhengjie.modules.system.service.dto.RoleSmallDTO; import me.zhengjie.utils.SecurityUtils; +import me.zhengjie.utils.ThrowableUtil; +import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @@ -16,6 +17,7 @@ import org.springframework.data.web.PageableDefault; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.TransactionSystemException; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.Collections; @@ -107,7 +109,11 @@ public class RoleController { @DeleteMapping(value = "/roles/{id}") @PreAuthorize("hasAnyRole('ADMIN','ROLES_ALL','ROLES_DELETE')") public ResponseEntity delete(@PathVariable Long id){ - roleService.delete(id); + try { + roleService.delete(id); + }catch (Throwable e){ + ThrowableUtil.throwForeignKeyException(e, "该角色存在用户关联,请取消关联后再试"); + } return new ResponseEntity(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 d5634e48..96bf7657 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 @@ -26,6 +26,8 @@ import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @@ -55,6 +57,13 @@ public class UserController { @Autowired private VerificationCodeService verificationCodeService; + @Log("导出用户数据") + @GetMapping(value = "/users/download") + @PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_SELECT')") + public void update(HttpServletResponse response, UserQueryCriteria criteria) throws IOException { + userService.download(userService.queryAll(criteria), response); + } + @Log("查询用户") @GetMapping(value = "/users") @PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_SELECT')") @@ -147,8 +156,7 @@ public class UserController { */ @PostMapping(value = "/users/updateAvatar") public ResponseEntity updateAvatar(@RequestParam MultipartFile file){ - Picture picture = pictureService.upload(file, SecurityUtils.getUsername()); - userService.updateAvatar(SecurityUtils.getUsername(),picture.getUrl()); + userService.updateAvatar(file); return new ResponseEntity(HttpStatus.OK); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java index 4ed093fb..792ea137 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DeptService.java @@ -22,7 +22,7 @@ public interface DeptService { * @param criteria * @return */ - @Cacheable(keyGenerator = "keyGenerator") + @Cacheable List queryAll(DeptQueryCriteria criteria); /** @@ -60,7 +60,7 @@ public interface DeptService { * @param deptDTOS * @return */ - @Cacheable(keyGenerator = "keyGenerator") + @Cacheable Object buildTree(List deptDTOS); /** @@ -68,7 +68,7 @@ public interface DeptService { * @param pid * @return */ - @Cacheable(keyGenerator = "keyGenerator") + @Cacheable List findByPid(long pid); Set findByRoleIds(Long id); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DictDetailService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DictDetailService.java index 2566984b..fe89a027 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DictDetailService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DictDetailService.java @@ -47,6 +47,6 @@ public interface DictDetailService { @CacheEvict(allEntries = true) void delete(Long id); - @Cacheable(keyGenerator = "keyGenerator") + @Cacheable Map queryAll(DictDetailQueryCriteria criteria, Pageable pageable); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DictService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DictService.java index 6b4f595a..e6f10538 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DictService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/DictService.java @@ -21,7 +21,7 @@ public interface DictService { * @param pageable * @return */ - @Cacheable(keyGenerator = "keyGenerator") + @Cacheable Object queryAll(DictQueryCriteria dict, Pageable pageable); /** diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java index 057b3755..3958c05f 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/MenuService.java @@ -9,6 +9,7 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import java.util.List; import java.util.Map; +import java.util.Set; /** * @author Zheng Jie @@ -22,7 +23,7 @@ public interface MenuService { * @param criteria * @return */ - @Cacheable(keyGenerator = "keyGenerator") + @Cacheable List queryAll(MenuQueryCriteria criteria); /** @@ -49,11 +50,12 @@ public interface MenuService { void update(Menu resources); /** - * delete - * @param id + * getDeleteMenus + * @param menuList + * @param menuSet + * @return */ - @CacheEvict(allEntries = true) - void delete(Long id); + Set getDeleteMenus(List menuList, Set menuSet); /** * permission tree @@ -92,4 +94,11 @@ public interface MenuService { Object buildMenus(List byRoles); Menu findOne(Long id); + + /** + * delete + * @param menuSet + */ + @CacheEvict(allEntries = true) + void delete(Set menuSet); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/PermissionService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/PermissionService.java index eb424e5c..ec6ebc23 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/PermissionService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/PermissionService.java @@ -8,6 +8,7 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import java.util.List; +import java.util.Set; /** * @author Zheng Jie @@ -41,10 +42,10 @@ public interface PermissionService { /** * delete - * @param id + * @param permissions */ @CacheEvict(allEntries = true) - void delete(Long id); + void delete(Set permissions); /** * permission tree @@ -66,7 +67,7 @@ public interface PermissionService { * @param permissionDTOS * @return */ - @Cacheable(keyGenerator = "keyGenerator") + @Cacheable Object buildTree(List permissionDTOS); /** @@ -74,6 +75,8 @@ public interface PermissionService { * @param criteria * @return */ - @Cacheable(keyGenerator = "keyGenerator") + @Cacheable List queryAll(PermissionQueryCriteria criteria); + + Set getDeletePermission(List permissions, Set permissionSet); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java index eccb2459..39973fce 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/RoleService.java @@ -1,6 +1,5 @@ package me.zhengjie.modules.system.service; -import me.zhengjie.modules.system.domain.Menu; import me.zhengjie.modules.system.domain.Role; import me.zhengjie.modules.system.service.dto.RoleDTO; import me.zhengjie.modules.system.service.dto.RoleQueryCriteria; @@ -59,7 +58,7 @@ public interface RoleService { @Cacheable(key = "'findByUsers_Id:' + #p0") List findByUsers_Id(Long id); - @Cacheable(keyGenerator = "keyGenerator") + @Cacheable Integer findByRoles(Set roles); /** @@ -79,13 +78,14 @@ public interface RoleService { void updateMenu(Role resources, RoleDTO roleDTO); @CacheEvict(allEntries = true) - void untiedMenu(Menu menu); + void untiedMenu(Long id); /** * queryAll * @param pageable * @return */ + @Cacheable Object queryAll(Pageable pageable); /** @@ -94,5 +94,17 @@ public interface RoleService { * @param criteria * @return */ + @Cacheable Object queryAll(RoleQueryCriteria criteria, Pageable pageable); + + /** + * queryAll + * @param criteria + * @return + */ + @Cacheable + List queryAll(RoleQueryCriteria criteria); + + @CacheEvict(allEntries = true) + void untiedPermission(Long id); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java index 5fe40b5f..bedae91a 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/UserService.java @@ -8,6 +8,11 @@ import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Pageable; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; /** * @author Zheng Jie @@ -64,11 +69,10 @@ public interface UserService { /** * 修改头像 - * @param username - * @param url + * @param file */ @CacheEvict(allEntries = true) - void updateAvatar(String username, String url); + void updateAvatar(MultipartFile file); /** * 修改邮箱 @@ -78,6 +82,11 @@ public interface UserService { @CacheEvict(allEntries = true) void updateEmail(String username, String email); - @Cacheable(keyGenerator = "keyGenerator") + @Cacheable Object queryAll(UserQueryCriteria criteria, Pageable pageable); + + @Cacheable + List queryAll(UserQueryCriteria criteria); + + void download(List queryAll, HttpServletResponse response) throws IOException; } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/MenuDTO.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/MenuDTO.java index 9dd8bd61..3b9aaae6 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/MenuDTO.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/MenuDTO.java @@ -27,6 +27,12 @@ public class MenuDTO { private Boolean iFrame; + private Boolean cache; + + private Boolean hidden; + + private String componentName; + private String icon; private List children; diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java index 7d081559..1f8afdf4 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MenuServiceImpl.java @@ -1,5 +1,7 @@ package me.zhengjie.modules.system.service.impl; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import me.zhengjie.modules.system.domain.Menu; import me.zhengjie.modules.system.domain.vo.MenuMetaVo; @@ -8,11 +10,13 @@ import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.EntityExistException; import me.zhengjie.modules.system.repository.MenuRepository; import me.zhengjie.modules.system.service.MenuService; +import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.dto.MenuDTO; import me.zhengjie.modules.system.service.dto.MenuQueryCriteria; import me.zhengjie.modules.system.service.dto.RoleSmallDTO; import me.zhengjie.modules.system.service.mapper.MenuMapper; import me.zhengjie.utils.QueryHelp; +import me.zhengjie.utils.StringUtils; import me.zhengjie.utils.ValidationUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -31,6 +35,9 @@ public class MenuServiceImpl implements MenuService { @Autowired private MenuMapper menuMapper; + @Autowired + private RoleService roleService; + @Override public List queryAll(MenuQueryCriteria criteria){ return menuMapper.toDto(menuRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); @@ -58,6 +65,11 @@ public class MenuServiceImpl implements MenuService { if(menuRepository.findByName(resources.getName()) != null){ throw new EntityExistException(Menu.class,"name",resources.getName()); } + if(StringUtils.isNotBlank(resources.getComponentName())){ + if(menuRepository.findByComponentName(resources.getComponentName()) != null){ + throw new EntityExistException(Menu.class,"componentName",resources.getComponentName()); + } + } if(resources.getIFrame()){ if (!(resources.getPath().toLowerCase().startsWith("http://")||resources.getPath().toLowerCase().startsWith("https://"))) { throw new BadRequestException("外链必须以http://或者https://开头"); @@ -85,6 +97,13 @@ public class MenuServiceImpl implements MenuService { if(menu1 != null && !menu1.getId().equals(menu.getId())){ throw new EntityExistException(Menu.class,"name",resources.getName()); } + + if(StringUtils.isNotBlank(resources.getComponentName())){ + menu1 = menuRepository.findByComponentName(resources.getComponentName()); + if(menu1 != null && !menu1.getId().equals(menu.getId())){ + throw new EntityExistException(Menu.class,"componentName",resources.getComponentName()); + } + } menu.setName(resources.getName()); menu.setComponent(resources.getComponent()); menu.setPath(resources.getPath()); @@ -92,12 +111,32 @@ public class MenuServiceImpl implements MenuService { menu.setIFrame(resources.getIFrame()); menu.setPid(resources.getPid()); menu.setSort(resources.getSort()); + menu.setCache(resources.getCache()); + menu.setHidden(resources.getHidden()); + menu.setComponentName(resources.getComponentName()); menuRepository.save(menu); } @Override - public void delete(Long id) { - menuRepository.deleteById(id); + public Set getDeleteMenus(List menuList, Set menuSet) { + // 递归找出待删除的菜单 + for (Menu menu1 : menuList) { + menuSet.add(menu1); + List menus = menuRepository.findByPid(menu1.getId()); + if(menus!=null && menus.size()!=0){ + getDeleteMenus(menus, menuSet); + } + } + return menuSet; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Set menuSet) { + for (Menu menu : menuSet) { + roleService.untiedMenu(menu.getId()); + menuRepository.deleteById(menu.getId()); + } } @Override @@ -127,24 +166,26 @@ public class MenuServiceImpl implements MenuService { @Override public Map buildTree(List menuDTOS) { List trees = new ArrayList(); - + Set ids = new HashSet<>(); for (MenuDTO menuDTO : menuDTOS) { - - if ("0".equals(menuDTO.getPid().toString())) { + if (menuDTO.getPid() == 0) { trees.add(menuDTO); } - for (MenuDTO it : menuDTOS) { if (it.getPid().equals(menuDTO.getId())) { if (menuDTO.getChildren() == null) { menuDTO.setChildren(new ArrayList()); } menuDTO.getChildren().add(it); + ids.add(it.getId()); } } } Map map = new HashMap(); - map.put("content",trees.size() == 0?menuDTOS:trees); + if(trees.size() == 0){ + trees = menuDTOS.stream().filter(s -> !ids.contains(s.getId())).collect(Collectors.toList()); + } + map.put("content",trees); map.put("totalElements",menuDTOS!=null?menuDTOS.size():0); return map; } @@ -156,26 +197,25 @@ public class MenuServiceImpl implements MenuService { if (menuDTO!=null){ List menuDTOList = menuDTO.getChildren(); MenuVo menuVo = new MenuVo(); - menuVo.setName(menuDTO.getName()); - menuVo.setPath(menuDTO.getPath()); - + menuVo.setName(ObjectUtil.isNotEmpty(menuDTO.getComponentName()) ? menuDTO.getComponentName() : menuDTO.getName()); + // 一级目录需要加斜杠,不然会报警告 + menuVo.setPath(menuDTO.getPid() == 0 ? "/" + menuDTO.getPath() :menuDTO.getPath()); + menuVo.setHidden(menuDTO.getHidden()); // 如果不是外链 if(!menuDTO.getIFrame()){ - if(menuDTO.getPid().equals(0L)){ - //一级目录需要加斜杠,不然访问 会跳转404页面 - menuVo.setPath("/" + menuDTO.getPath()); + if(menuDTO.getPid() == 0){ menuVo.setComponent(StrUtil.isEmpty(menuDTO.getComponent())?"Layout":menuDTO.getComponent()); }else if(!StrUtil.isEmpty(menuDTO.getComponent())){ menuVo.setComponent(menuDTO.getComponent()); } } - menuVo.setMeta(new MenuMetaVo(menuDTO.getName(),menuDTO.getIcon())); + menuVo.setMeta(new MenuMetaVo(menuDTO.getName(),menuDTO.getIcon(),!menuDTO.getCache())); if(menuDTOList!=null && menuDTOList.size()!=0){ menuVo.setAlwaysShow(true); menuVo.setRedirect("noredirect"); menuVo.setChildren(buildMenus(menuDTOList)); // 处理是一级菜单并且没有子菜单的情况 - } else if(menuDTO.getPid().equals(0L)){ + } else if(menuDTO.getPid() == 0){ MenuVo menuVo1 = new MenuVo(); menuVo1.setMeta(menuVo.getMeta()); // 非外链 diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/PermissionServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/PermissionServiceImpl.java index ea521a79..e8c48c76 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/PermissionServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/PermissionServiceImpl.java @@ -5,6 +5,7 @@ import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.EntityExistException; import me.zhengjie.modules.system.repository.PermissionRepository; import me.zhengjie.modules.system.service.PermissionService; +import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.dto.PermissionDTO; import me.zhengjie.modules.system.service.dto.PermissionQueryCriteria; import me.zhengjie.modules.system.service.mapper.PermissionMapper; @@ -30,6 +31,9 @@ public class PermissionServiceImpl implements PermissionService { @Autowired private PermissionMapper permissionMapper; + @Autowired + private RoleService roleService; + @Override public List queryAll(PermissionQueryCriteria criteria) { return permissionMapper.toDto(permissionRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); @@ -74,14 +78,26 @@ public class PermissionServiceImpl implements PermissionService { permissionRepository.save(permission); } + @Override + public Set getDeletePermission(List permissions, Set permissionSet) { + // 递归找出待删除的菜单 + for (Permission permission : permissions) { + permissionSet.add(permission); + List permissionList = permissionRepository.findByPid(permission.getId()); + if(permissionList!=null && permissionList.size()!=0){ + getDeletePermission(permissionList, permissionSet); + } + } + return permissionSet; + } + @Override @Transactional(rollbackFor = Exception.class) - public void delete(Long id) { - List permissionList = permissionRepository.findByPid(id); - for (Permission permission : permissionList) { + public void delete(Set permissions) { + for (Permission permission : permissions) { + roleService.untiedPermission(permission.getId()); permissionRepository.delete(permission); } - permissionRepository.deleteById(id); } @Override 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 cc68febb..bc33f266 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 @@ -1,6 +1,5 @@ package me.zhengjie.modules.system.service.impl; -import me.zhengjie.modules.system.domain.Menu; import me.zhengjie.modules.system.domain.Role; import me.zhengjie.exception.EntityExistException; import me.zhengjie.modules.system.repository.RoleRepository; @@ -44,6 +43,11 @@ public class RoleServiceImpl implements RoleService { return roleMapper.toDto(roleRepository.findAll(pageable).getContent()); } + @Override + public List queryAll(RoleQueryCriteria criteria) { + return roleMapper.toDto(roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); + } + @Override public Object queryAll(RoleQueryCriteria criteria, Pageable pageable) { Page page = roleRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); @@ -104,13 +108,15 @@ public class RoleServiceImpl implements RoleService { } @Override - public void untiedMenu(Menu menu) { - Set roles = roleRepository.findByMenus_Id(menu.getId()); - for (Role role : roles) { - menu.getRoles().remove(role); - role.getMenus().remove(menu); - roleRepository.save(role); - } + @Transactional(rollbackFor = Exception.class) + public void untiedMenu(Long id) { + roleRepository.untiedMenu(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void untiedPermission(Long id) { + roleRepository.untiedPermission(id); } @Override diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java index 8a951b38..2685d743 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java @@ -1,25 +1,36 @@ package me.zhengjie.modules.system.service.impl; +import cn.hutool.core.io.IoUtil; +import cn.hutool.poi.excel.ExcelUtil; +import cn.hutool.poi.excel.ExcelWriter; import me.zhengjie.modules.monitor.service.RedisService; import me.zhengjie.modules.system.domain.User; import me.zhengjie.exception.EntityExistException; import me.zhengjie.exception.EntityNotFoundException; +import me.zhengjie.modules.system.domain.UserAvatar; +import me.zhengjie.modules.system.repository.UserAvatarRepository; import me.zhengjie.modules.system.repository.UserRepository; import me.zhengjie.modules.system.service.UserService; +import me.zhengjie.modules.system.service.dto.RoleSmallDTO; import me.zhengjie.modules.system.service.dto.UserDTO; import me.zhengjie.modules.system.service.dto.UserQueryCriteria; import me.zhengjie.modules.system.service.mapper.UserMapper; -import me.zhengjie.utils.PageUtil; -import me.zhengjie.utils.QueryHelp; -import me.zhengjie.utils.ValidationUtil; +import me.zhengjie.utils.*; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.Optional; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; /** * @author Zheng Jie @@ -38,12 +49,24 @@ public class UserServiceImpl implements UserService { @Autowired private RedisService redisService; + @Autowired + private UserAvatarRepository userAvatarRepository; + + @Value("${file.avatar}") + private String avatar; + @Override public Object queryAll(UserQueryCriteria criteria, Pageable pageable) { Page page = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); return PageUtil.toPage(page.map(userMapper::toDto)); } + @Override + public List queryAll(UserQueryCriteria criteria) { + List users = userRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)); + return userMapper.toDto(users); + } + @Override public UserDTO findById(long id) { Optional user = userRepository.findById(id); @@ -65,7 +88,6 @@ public class UserServiceImpl implements UserService { // 默认密码 123456,此密码是加密后的字符 resources.setPassword("e10adc3949ba59abbe56e057f20f883e"); - resources.setAvatar("https://i.loli.net/2019/04/04/5ca5b971e1548.jpeg"); return userMapper.toDto(userRepository.save(resources)); } @@ -135,8 +157,20 @@ public class UserServiceImpl implements UserService { @Override @Transactional(rollbackFor = Exception.class) - public void updateAvatar(String username, String url) { - userRepository.updateAvatar(username,url); + public void updateAvatar(MultipartFile multipartFile) { + User user = userRepository.findByUsername(SecurityUtils.getUsername()); + UserAvatar userAvatar = user.getUserAvatar(); + String oldPath = ""; + if(userAvatar != null){ + oldPath = userAvatar.getPath(); + } + File file = FileUtil.upload(multipartFile, avatar); + userAvatar = userAvatarRepository.save(new UserAvatar(userAvatar,file.getName(), file.getPath(), FileUtil.getSize(multipartFile.getSize()))); + user.setUserAvatar(userAvatar); + userRepository.save(user); + if(StringUtils.isNotBlank(oldPath)){ + FileUtil.del(oldPath); + } } @Override @@ -144,4 +178,25 @@ public class UserServiceImpl implements UserService { public void updateEmail(String username, String email) { userRepository.updateEmail(username,email); } + + @Override + public void download(List queryAll, HttpServletResponse response) throws IOException { + List> list = new ArrayList<>(); + for (UserDTO userDTO : queryAll) { + List roles = userDTO.getRoles().stream().map(RoleSmallDTO::getName).collect(Collectors.toList()); + Map map = new LinkedHashMap(); + map.put("用户名", userDTO.getUsername()); + map.put("头像", userDTO.getAvatar()); + map.put("邮箱", userDTO.getEmail()); + map.put("状态", userDTO.getEnabled() ? "启用" : "禁用"); + map.put("手机号码", userDTO.getPhone()); + map.put("角色", roles); + map.put("部门", userDTO.getDept().getName()); + map.put("岗位", userDTO.getJob().getName()); + map.put("最后修改密码的时间", userDTO.getLastPasswordResetTime()); + map.put("创建日期", userDTO.getCreateTime()); + list.add(map); + } + FileUtil.downloadExcel(list, response); + } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/mapper/UserMapper.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/mapper/UserMapper.java index 50cbfb8f..248003a3 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/mapper/UserMapper.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/mapper/UserMapper.java @@ -4,8 +4,11 @@ import me.zhengjie.modules.system.domain.User; import me.zhengjie.mapper.EntityMapper; import me.zhengjie.modules.system.service.dto.UserDTO; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; import org.mapstruct.ReportingPolicy; +import java.util.List; + /** * @author Zheng Jie * @date 2018-11-23 @@ -13,4 +16,6 @@ import org.mapstruct.ReportingPolicy; @Mapper(componentModel = "spring",uses = {RoleMapper.class, DeptMapper.class, JobMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface UserMapper extends EntityMapper { + @Mapping(source = "user.userAvatar.realName",target = "avatar") + UserDTO toDto(User user); } diff --git a/eladmin-system/src/main/resources/config/application-dev.yml b/eladmin-system/src/main/resources/config/application-dev.yml index 96eeef78..45b7a500 100644 --- a/eladmin-system/src/main/resources/config/application-dev.yml +++ b/eladmin-system/src/main/resources/config/application-dev.yml @@ -45,8 +45,8 @@ spring: jwt: header: Authorization secret: mySecret - # token 过期时间 2个小时 - expiration: 7200000 + # token 过期时间 6个小时 + expiration: 21000000 auth: # 授权路径 path: /login @@ -59,4 +59,12 @@ generator: #是否开启 swagger-ui swagger: - enabled: true \ No newline at end of file + enabled: true + +# 文件存储路径 +file: + path: C:\eladmin\file\ + avatar: C:\eladmin\avatar\ + # 文件大小 /M + maxSize: 100 + avatarMaxSize: 5 \ No newline at end of file diff --git a/eladmin-system/src/main/resources/config/application-prod.yml b/eladmin-system/src/main/resources/config/application-prod.yml index dfd1d716..a1ae2b74 100644 --- a/eladmin-system/src/main/resources/config/application-prod.yml +++ b/eladmin-system/src/main/resources/config/application-prod.yml @@ -68,4 +68,12 @@ generator: #是否开启 swagger-ui swagger: - enabled: false \ No newline at end of file + enabled: false + +# 文件存储路径 +file: + path: /home/eladmin/file/ + avatar: /home/eladmin/avatar/ + # 文件大小 /M + maxSize: 100 + avatarMaxSize: 5 \ No newline at end of file diff --git a/eladmin-system/src/main/resources/generator.properties b/eladmin-system/src/main/resources/generator.properties index b4d3d644..2ed93706 100644 --- a/eladmin-system/src/main/resources/generator.properties +++ b/eladmin-system/src/main/resources/generator.properties @@ -1,4 +1,4 @@ -#ݿתjava +#数据库类型转Java类型 tinyint=Integer smallint=Integer mediumint=Integer diff --git a/eladmin-system/src/main/resources/logback.xml b/eladmin-system/src/main/resources/logback.xml index 5d7e59d8..ec1ccfa3 100644 --- a/eladmin-system/src/main/resources/logback.xml +++ b/eladmin-system/src/main/resources/logback.xml @@ -24,7 +24,8 @@ - + + 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 e6aa6b9e..ba236c16 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/Service.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/Service.ftl @@ -3,10 +3,12 @@ package ${package}.service; import ${package}.domain.${className}; import ${package}.service.dto.${className}DTO; import ${package}.service.dto.${className}QueryCriteria; -//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.Pageable; +import java.util.Map; +import java.util.List; /** * @author ${author} @@ -16,24 +18,24 @@ import org.springframework.data.domain.Pageable; public interface ${className}Service { /** - * queryAll 分页 + * 查询数据分页 * @param criteria * @param pageable * @return */ - //@Cacheable(keyGenerator = "keyGenerator") - Object queryAll(${className}QueryCriteria criteria, Pageable pageable); + //@Cacheable + Map queryAll(${className}QueryCriteria criteria, Pageable pageable); /** - * queryAll 不分页 + * 查询所有数据不分页 * @param criteria * @return */ - //@Cacheable(keyGenerator = "keyGenerator") - public Object queryAll(${className}QueryCriteria criteria); + //@Cacheable + List<${className}DTO> queryAll(${className}QueryCriteria criteria); /** - * findById + * 根据ID查询 * @param ${pkChangeColName} * @return */ @@ -41,7 +43,7 @@ public interface ${className}Service { ${className}DTO findById(${pkColumnType} ${pkChangeColName}); /** - * create + * 创建 * @param resources * @return */ @@ -49,14 +51,14 @@ public interface ${className}Service { ${className}DTO create(${className} resources); /** - * update + * 编辑 * @param resources */ //@CacheEvict(allEntries = true) void update(${className} resources); /** - * delete + * 删除 * @param ${pkChangeColName} */ //@CacheEvict(allEntries = true) 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 efa5e89b..d22a9536 100644 --- a/eladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl +++ b/eladmin-system/src/main/resources/template/generator/admin/ServiceImpl.ftl @@ -32,6 +32,8 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import me.zhengjie.utils.PageUtil; import me.zhengjie.utils.QueryHelp; +import java.util.List; +import java.util.Map; /** * @author ${author} @@ -48,13 +50,13 @@ public class ${className}ServiceImpl implements ${className}Service { private ${className}Mapper ${changeClassName}Mapper; @Override - public Object queryAll(${className}QueryCriteria criteria, Pageable pageable){ + 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 - public Object queryAll(${className}QueryCriteria criteria){ + public List<${className}DTO> queryAll(${className}QueryCriteria criteria){ return ${changeClassName}Mapper.toDto(${changeClassName}Repository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); } 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 84acd88f..1e8fbcd9 100644 --- a/eladmin-system/src/main/resources/template/generator/front/eForm.ftl +++ b/eladmin-system/src/main/resources/template/generator/front/eForm.ftl @@ -1,5 +1,5 @@