From 5f41318b9dea5b7f65fa946f5a5c46d260468895 Mon Sep 17 00:00:00 2001 From: Elune <201507802@qq.com> Date: Sat, 21 Dec 2019 23:33:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=8A=9F=E8=83=BD=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/me/zhengjie/config/RedisConfig.java | 4 +-- .../me/zhengjie/rest/GeneratorController.java | 11 +++++-- .../me/zhengjie/service/GeneratorService.java | 10 +++++- .../service/impl/GeneratorServiceImpl.java | 33 +++++++++++++++++-- 4 files changed, 51 insertions(+), 7 deletions(-) diff --git a/eladmin-common/src/main/java/me/zhengjie/config/RedisConfig.java b/eladmin-common/src/main/java/me/zhengjie/config/RedisConfig.java index a4a34ae6..c6be7dda 100644 --- a/eladmin-common/src/main/java/me/zhengjie/config/RedisConfig.java +++ b/eladmin-common/src/main/java/me/zhengjie/config/RedisConfig.java @@ -42,14 +42,14 @@ import java.util.Map; public class RedisConfig extends CachingConfigurerSupport { /** - * 设置 redis 数据默认过期时间,默认6小时 + * 设置 redis 数据默认过期时间,默认2小时 * 设置@cacheable 序列化方式 */ @Bean public RedisCacheConfiguration redisCacheConfiguration(){ FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class); RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig(); - configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofHours(6)); + configuration = configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer)).entryTtl(Duration.ofHours(2)); return configuration; } diff --git a/eladmin-generator/src/main/java/me/zhengjie/rest/GeneratorController.java b/eladmin-generator/src/main/java/me/zhengjie/rest/GeneratorController.java index 1270cc29..e8cf332d 100644 --- a/eladmin-generator/src/main/java/me/zhengjie/rest/GeneratorController.java +++ b/eladmin-generator/src/main/java/me/zhengjie/rest/GeneratorController.java @@ -55,8 +55,6 @@ public class GeneratorController { @GetMapping(value = "/columns") public ResponseEntity getTables(@RequestParam String tableName){ List columnInfos = generatorService.getColumns(tableName); - // 异步同步表信息 - generatorService.sync(columnInfos); return new ResponseEntity<>(PageUtil.toPage(columnInfos,columnInfos.size()), HttpStatus.OK); } @@ -67,6 +65,15 @@ public class GeneratorController { return new ResponseEntity<>(HttpStatus.OK); } + @ApiOperation("同步字段数据") + @PostMapping(value = "sync") + public ResponseEntity sync(@RequestBody List tables){ + for (String table : tables) { + generatorService.sync(generatorService.getColumns(table), generatorService.query(table)); + } + return new ResponseEntity<>(HttpStatus.OK); + } + @ApiOperation("生成代码") @PostMapping(value = "/{tableName}/{type}") public ResponseEntity generator(@PathVariable String tableName, @PathVariable Integer type, HttpServletRequest request, HttpServletResponse response){ diff --git a/eladmin-generator/src/main/java/me/zhengjie/service/GeneratorService.java b/eladmin-generator/src/main/java/me/zhengjie/service/GeneratorService.java index c8c407fd..d340c893 100644 --- a/eladmin-generator/src/main/java/me/zhengjie/service/GeneratorService.java +++ b/eladmin-generator/src/main/java/me/zhengjie/service/GeneratorService.java @@ -32,9 +32,10 @@ public interface GeneratorService { /** * 同步表数据 * @param columnInfos / + * @param columnInfoList */ @Async - void sync(List columnInfos); + void sync(List columnInfos, List columnInfoList); /** * 保持数据 @@ -71,4 +72,11 @@ public interface GeneratorService { * @param response / */ void download(GenConfig genConfig, List columns, HttpServletRequest request, HttpServletResponse response); + + /** + * 查询数据库的表字段数据数据 + * @param table / + * @return / + */ + List query(String table); } 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 f4871639..42427695 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 @@ -26,6 +26,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @author Zheng Jie @@ -86,6 +87,7 @@ public class GeneratorServiceImpl implements GeneratorService { } } + @Override public List query(String tableName){ // 使用预编译防止sql注入 String sql = "select column_name, is_nullable, data_type, column_comment, column_key, extra from information_schema.columns " + @@ -111,8 +113,35 @@ public class GeneratorServiceImpl implements GeneratorService { } @Override - public void sync(List columnInfos) { - + public void sync(List columnInfos, List columnInfoList) { + // 第一种情况,数据库类字段改变或者新增字段 + for (ColumnInfo columnInfo : columnInfoList) { + // 根据字段名称查找 + List columns = new ArrayList(columnInfos.stream().filter(c-> c.getColumnName().equals(columnInfo.getColumnName())).collect(Collectors.toList())); + // 如果能找到,就修改部分可能被字段 + if(CollectionUtil.isNotEmpty(columns)){ + ColumnInfo column = columns.get(0); + column.setColumnType(columnInfo.getColumnType()); + column.setExtra(columnInfo.getExtra()); + column.setKeyType(columnInfo.getKeyType()); + if(StringUtils.isBlank(column.getRemark())){ + column.setRemark(columnInfo.getRemark()); + } + columnInfoRepository.save(column); + } else { + // 如果找不到,则保存新字段信息 + columnInfoRepository.save(columnInfo); + } + } + // 第二种情况,数据库字段删除了 + for (ColumnInfo columnInfo : columnInfos) { + // 根据字段名称查找 + List columns = new ArrayList(columnInfoList.stream().filter(c-> c.getColumnName().equals(columnInfo.getColumnName())).collect(Collectors.toList())); + // 如果找不到,就代表字段被删除了,则需要删除该字段 + if(CollectionUtil.isEmpty(columns)){ + columnInfoRepository.delete(columnInfo); + } + } } @Override