@ -1,30 +1,25 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.domain;
|
||||
package co.yixiang.domain;
|
||||
|
||||
import co.yixiang.gen.utils.GenUtil;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import co.yixiang.utils.GenUtil;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.persistence.*;
|
||||
|
||||
/**
|
||||
* 列的数据信息
|
||||
* @author Zheng Jie
|
||||
* @date 2019-01-02
|
||||
*/
|
||||
@Data
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@TableName("column_config")
|
||||
public class ColumnConfig {
|
||||
@Table(name = "column_config")
|
||||
public class ColumnInfo {
|
||||
|
||||
@TableId
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Column(name = "id")
|
||||
private Long id;
|
||||
|
||||
private String tableName;
|
||||
@ -65,7 +60,7 @@ public class ColumnConfig {
|
||||
/** 日期注解 */
|
||||
private String dateAnnotation;
|
||||
|
||||
public ColumnConfig(String tableName, String columnName, Boolean notNull, String columnType, String remark, String keyType, String extra) {
|
||||
public ColumnInfo(String tableName, String columnName, Boolean notNull, String columnType, String remark, String keyType, String extra) {
|
||||
this.tableName = tableName;
|
||||
this.columnName = columnName;
|
||||
this.columnType = columnType;
|
||||
@ -1,17 +1,9 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.domain;
|
||||
package co.yixiang.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import javax.persistence.*;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
/**
|
||||
* 代码生成配置
|
||||
@ -19,8 +11,9 @@ import lombok.NoArgsConstructor;
|
||||
* @date 2019-01-03
|
||||
*/
|
||||
@Data
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@TableName("gen_config")
|
||||
@Table(name = "gen_config")
|
||||
public class GenConfig {
|
||||
|
||||
public GenConfig(String tableName) {
|
||||
@ -29,25 +22,32 @@ public class GenConfig {
|
||||
this.tableName = tableName;
|
||||
}
|
||||
|
||||
@TableId
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Column(name = "id")
|
||||
private Long id;
|
||||
|
||||
/**表明**/
|
||||
@NotBlank
|
||||
private String tableName;
|
||||
|
||||
/** 接口名称 **/
|
||||
private String apiAlias;
|
||||
|
||||
/** 包路径 */
|
||||
@NotBlank
|
||||
private String pack;
|
||||
|
||||
/** 模块名 */
|
||||
@Column(name = "module_name")
|
||||
@NotBlank
|
||||
private String moduleName;
|
||||
|
||||
/** 前端文件路径 */
|
||||
@NotBlank
|
||||
private String path;
|
||||
|
||||
/** 前端文件路径 */
|
||||
@Column(name = "api_path")
|
||||
private String apiPath;
|
||||
|
||||
/** 作者 */
|
||||
@ -1,12 +1,4 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.domain.vo;
|
||||
package co.yixiang.domain.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@ -1,12 +1,4 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.domain.vo;
|
||||
package co.yixiang.domain.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
@ -1,33 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.service;
|
||||
|
||||
import co.yixiang.gen.domain.GenConfig;
|
||||
|
||||
/**
|
||||
* @author Zheng Jie
|
||||
* @date 2019-01-14
|
||||
*/
|
||||
public interface GenConfigService {
|
||||
|
||||
/**
|
||||
* 查询表配置
|
||||
* @param tableName 表名
|
||||
* @return 表配置
|
||||
*/
|
||||
GenConfig find(String tableName);
|
||||
|
||||
/**
|
||||
* 更新表配置
|
||||
* @param tableName 表名
|
||||
* @param genConfig 表配置
|
||||
* @return 表配置
|
||||
*/
|
||||
GenConfig update(String tableName, GenConfig genConfig);
|
||||
}
|
||||
@ -1,19 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.service.mapper;
|
||||
|
||||
import co.yixiang.gen.domain.ColumnConfig;
|
||||
import co.yixiang.common.mapper.CoreMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
@Mapper
|
||||
public interface ColumnInfoMapper extends CoreMapper<ColumnConfig> {
|
||||
}
|
||||
@ -1,19 +0,0 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.service.mapper;
|
||||
|
||||
import co.yixiang.gen.domain.GenConfig;
|
||||
import co.yixiang.common.mapper.CoreMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
@Mapper
|
||||
public interface GenConfigMapper extends CoreMapper<GenConfig> {
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
package co.yixiang.repository;
|
||||
|
||||
import co.yixiang.domain.ColumnInfo;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Zheng Jie
|
||||
* @date 2019-01-14
|
||||
*/
|
||||
public interface ColumnInfoRepository extends JpaRepository<ColumnInfo,Long> {
|
||||
|
||||
/**
|
||||
* 查询表信息
|
||||
* @param tableName 表格名
|
||||
* @return 表信息
|
||||
*/
|
||||
List<ColumnInfo> findByTableNameOrderByIdAsc(String tableName);
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
package co.yixiang.repository;
|
||||
|
||||
import co.yixiang.domain.GenConfig;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
/**
|
||||
* @author Zheng Jie
|
||||
* @date 2019-01-14
|
||||
*/
|
||||
public interface GenConfigRepository extends JpaRepository<GenConfig,Long> {
|
||||
|
||||
/**
|
||||
* 查询表配置
|
||||
* @param tableName 表名
|
||||
* @return /
|
||||
*/
|
||||
GenConfig findByTableName(String tableName);
|
||||
}
|
||||
@ -1,15 +1,7 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.rest;
|
||||
package co.yixiang.rest;
|
||||
|
||||
import co.yixiang.gen.service.GenConfigService;
|
||||
import co.yixiang.gen.domain.GenConfig;
|
||||
import co.yixiang.domain.GenConfig;
|
||||
import co.yixiang.service.GenConfigService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@ -1,16 +1,8 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.rest;
|
||||
package co.yixiang.rest;
|
||||
|
||||
import co.yixiang.gen.domain.ColumnConfig;
|
||||
import co.yixiang.gen.service.GenConfigService;
|
||||
import co.yixiang.gen.service.GeneratorService;
|
||||
import co.yixiang.domain.ColumnInfo;
|
||||
import co.yixiang.service.GenConfigService;
|
||||
import co.yixiang.service.GeneratorService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import co.yixiang.exception.BadRequestException;
|
||||
@ -62,13 +54,13 @@ public class GeneratorController {
|
||||
@ApiOperation("查询字段数据")
|
||||
@GetMapping(value = "/columns")
|
||||
public ResponseEntity<Object> getTables(@RequestParam String tableName){
|
||||
List<ColumnConfig> columnInfos = generatorService.getColumns(tableName);
|
||||
List<ColumnInfo> columnInfos = generatorService.getColumns(tableName);
|
||||
return new ResponseEntity<>(PageUtil.toPage(columnInfos,columnInfos.size()), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@ApiOperation("保存字段数据")
|
||||
@PutMapping
|
||||
public ResponseEntity<HttpStatus> save(@RequestBody List<ColumnConfig> columnInfos){
|
||||
public ResponseEntity<HttpStatus> save(@RequestBody List<ColumnInfo> columnInfos){
|
||||
generatorService.save(columnInfos);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
package co.yixiang.service;
|
||||
|
||||
import co.yixiang.domain.GenConfig;
|
||||
|
||||
/**
|
||||
* @author Zheng Jie
|
||||
* @date 2019-01-14
|
||||
*/
|
||||
public interface GenConfigService {
|
||||
|
||||
/**
|
||||
* 查询表配置
|
||||
* @param tableName 表名
|
||||
* @return 表配置
|
||||
*/
|
||||
GenConfig find(String tableName);
|
||||
|
||||
/**
|
||||
* 更新表配置
|
||||
* @param tableName 表名
|
||||
* @param genConfig 表配置
|
||||
* @return 表配置
|
||||
*/
|
||||
GenConfig update(String tableName, GenConfig genConfig);
|
||||
}
|
||||
@ -1,15 +1,7 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.service;
|
||||
package co.yixiang.service;
|
||||
|
||||
import co.yixiang.gen.domain.ColumnConfig;
|
||||
import co.yixiang.gen.domain.GenConfig;
|
||||
import co.yixiang.domain.ColumnInfo;
|
||||
import co.yixiang.domain.GenConfig;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@ -35,7 +27,7 @@ public interface GeneratorService {
|
||||
* @param name 表名
|
||||
* @return /
|
||||
*/
|
||||
List<ColumnConfig> getColumns(String name);
|
||||
List<ColumnInfo> getColumns(String name);
|
||||
|
||||
/**
|
||||
* 同步表数据
|
||||
@ -43,13 +35,13 @@ public interface GeneratorService {
|
||||
* @param columnInfoList
|
||||
*/
|
||||
@Async
|
||||
void sync(List<ColumnConfig> columnInfos, List<ColumnConfig> columnInfoList);
|
||||
void sync(List<ColumnInfo> columnInfos, List<ColumnInfo> columnInfoList);
|
||||
|
||||
/**
|
||||
* 保持数据
|
||||
* @param columnInfos /
|
||||
*/
|
||||
void save(List<ColumnConfig> columnInfos);
|
||||
void save(List<ColumnInfo> columnInfos);
|
||||
|
||||
/**
|
||||
* 获取所有table
|
||||
@ -62,7 +54,7 @@ public interface GeneratorService {
|
||||
* @param genConfig 配置信息
|
||||
* @param columns 字段信息
|
||||
*/
|
||||
void generator(GenConfig genConfig, List<ColumnConfig> columns);
|
||||
void generator(GenConfig genConfig, List<ColumnInfo> columns);
|
||||
|
||||
/**
|
||||
* 预览
|
||||
@ -70,7 +62,7 @@ public interface GeneratorService {
|
||||
* @param columns 字段信息
|
||||
* @return /
|
||||
*/
|
||||
ResponseEntity<Object> preview(GenConfig genConfig, List<ColumnConfig> columns);
|
||||
ResponseEntity<Object> preview(GenConfig genConfig, List<ColumnInfo> columns);
|
||||
|
||||
/**
|
||||
* 打包下载
|
||||
@ -79,12 +71,12 @@ public interface GeneratorService {
|
||||
* @param request /
|
||||
* @param response /
|
||||
*/
|
||||
void download(GenConfig genConfig, List<ColumnConfig> columns, HttpServletRequest request, HttpServletResponse response);
|
||||
void download(GenConfig genConfig, List<ColumnInfo> columns, HttpServletRequest request, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* 查询数据库的表字段数据数据
|
||||
* @param table /
|
||||
* @return /
|
||||
*/
|
||||
List<ColumnConfig> query(String table);
|
||||
List<ColumnInfo> query(String table);
|
||||
}
|
||||
@ -1,19 +1,12 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.service.impl;
|
||||
package co.yixiang.service.impl;
|
||||
|
||||
import co.yixiang.gen.service.mapper.GenConfigMapper;
|
||||
import co.yixiang.common.service.impl.BaseServiceImpl;
|
||||
import co.yixiang.gen.domain.GenConfig;
|
||||
import co.yixiang.gen.service.GenConfigService;
|
||||
import co.yixiang.domain.GenConfig;
|
||||
import co.yixiang.repository.GenConfigRepository;
|
||||
import co.yixiang.service.GenConfigService;
|
||||
import co.yixiang.utils.StringUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.springframework.cache.annotation.CacheConfig;
|
||||
import org.springframework.cache.annotation.CachePut;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.io.File;
|
||||
|
||||
@ -22,13 +15,19 @@ import java.io.File;
|
||||
* @date 2019-01-14
|
||||
*/
|
||||
@Service
|
||||
//@CacheConfig(cacheNames = "genConfig")
|
||||
public class GenConfigServiceImpl extends BaseServiceImpl<GenConfigMapper, GenConfig> implements GenConfigService {
|
||||
@CacheConfig(cacheNames = "genConfig")
|
||||
public class GenConfigServiceImpl implements GenConfigService {
|
||||
|
||||
private final GenConfigRepository genConfigRepository;
|
||||
|
||||
public GenConfigServiceImpl(GenConfigRepository genConfigRepository) {
|
||||
this.genConfigRepository = genConfigRepository;
|
||||
}
|
||||
|
||||
@Override
|
||||
// @Cacheable(key = "#p0")
|
||||
@Cacheable(key = "#p0")
|
||||
public GenConfig find(String tableName) {
|
||||
GenConfig genConfig = this.getOne(new QueryWrapper<GenConfig>().eq("table_name",tableName));
|
||||
GenConfig genConfig = genConfigRepository.findByTableName(tableName);
|
||||
if(genConfig == null){
|
||||
return new GenConfig(tableName);
|
||||
}
|
||||
@ -36,7 +35,7 @@ public class GenConfigServiceImpl extends BaseServiceImpl<GenConfigMapper, GenCo
|
||||
}
|
||||
|
||||
@Override
|
||||
// @CachePut(key = "#p0")
|
||||
@CachePut(key = "#p0")
|
||||
public GenConfig update(String tableName, GenConfig genConfig) {
|
||||
// 如果 api 路径为空,则自动生成路径
|
||||
if(StringUtils.isBlank(genConfig.getApiPath())){
|
||||
@ -59,7 +58,6 @@ public class GenConfigServiceImpl extends BaseServiceImpl<GenConfigMapper, GenCo
|
||||
}
|
||||
genConfig.setApiPath(api.toString());
|
||||
}
|
||||
this.saveOrUpdate(genConfig);
|
||||
return genConfig;
|
||||
return genConfigRepository.save(genConfig);
|
||||
}
|
||||
}
|
||||
@ -1,28 +1,18 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.service.impl;
|
||||
package co.yixiang.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.ZipUtil;
|
||||
import co.yixiang.gen.domain.ColumnConfig;
|
||||
import co.yixiang.gen.service.mapper.ColumnInfoMapper;
|
||||
import co.yixiang.gen.utils.GenUtil;
|
||||
import co.yixiang.common.service.impl.BaseServiceImpl;
|
||||
import co.yixiang.gen.domain.GenConfig;
|
||||
import co.yixiang.gen.domain.vo.TableInfo;
|
||||
import co.yixiang.domain.ColumnInfo;
|
||||
import co.yixiang.domain.GenConfig;
|
||||
import co.yixiang.utils.GenUtil;
|
||||
import co.yixiang.domain.vo.TableInfo;
|
||||
import co.yixiang.exception.BadRequestException;
|
||||
import co.yixiang.gen.service.GeneratorService;
|
||||
import co.yixiang.repository.ColumnInfoRepository;
|
||||
import co.yixiang.service.GeneratorService;
|
||||
import co.yixiang.utils.FileUtil;
|
||||
import co.yixiang.utils.PageUtil;
|
||||
import co.yixiang.utils.StringUtils;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -44,11 +34,16 @@ import java.util.stream.Collectors;
|
||||
*/
|
||||
@Service
|
||||
@SuppressWarnings({"unchecked","all"})
|
||||
public class GeneratorServiceImpl extends BaseServiceImpl<ColumnInfoMapper, ColumnConfig> implements GeneratorService {
|
||||
public class GeneratorServiceImpl implements GeneratorService {
|
||||
|
||||
@PersistenceContext
|
||||
private EntityManager em;
|
||||
|
||||
private final ColumnInfoRepository columnInfoRepository;
|
||||
|
||||
public GeneratorServiceImpl(ColumnInfoRepository columnInfoRepository) {
|
||||
this.columnInfoRepository = columnInfoRepository;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getTables() {
|
||||
@ -76,39 +71,35 @@ public class GeneratorServiceImpl extends BaseServiceImpl<ColumnInfoMapper, Colu
|
||||
Object[] arr = (Object[]) obj;
|
||||
tableInfos.add(new TableInfo(arr[0],arr[1],arr[2],arr[3], ObjectUtil.isNotEmpty(arr[4])? arr[4] : "-"));
|
||||
}
|
||||
Query query1 = em.createNativeQuery("SELECT COUNT(*) from information_schema.tables where table_schema = (select database()) " +
|
||||
"and table_name like ? order by create_time desc");
|
||||
query1.setParameter(1, StringUtils.isNotBlank(name) ? ("%" + name + "%") : "%%");
|
||||
Query query1 = em.createNativeQuery("SELECT COUNT(*) from information_schema.tables where table_schema = (select database())");
|
||||
Object totalElements = query1.getSingleResult();
|
||||
return PageUtil.toPage(tableInfos,totalElements);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ColumnConfig> getColumns(String tableName) {
|
||||
List<ColumnConfig> columnInfos = this.list(new QueryWrapper<ColumnConfig>()
|
||||
.eq("table_name",tableName).orderByAsc("id"));
|
||||
public List<ColumnInfo> getColumns(String tableName) {
|
||||
List<ColumnInfo> columnInfos = columnInfoRepository.findByTableNameOrderByIdAsc(tableName);
|
||||
if(CollectionUtil.isNotEmpty(columnInfos)){
|
||||
return columnInfos;
|
||||
} else {
|
||||
columnInfos = query(tableName);
|
||||
this.saveBatch(columnInfos);
|
||||
return columnInfos;
|
||||
return columnInfoRepository.saveAll(columnInfos);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ColumnConfig> query(String tableName){
|
||||
public List<ColumnInfo> query(String tableName){
|
||||
// 使用预编译防止sql注入
|
||||
String sql = "select column_name, is_nullable, data_type, column_comment, column_key, extra from information_schema.columns " +
|
||||
"where table_name = ? and table_schema = (select database()) order by ordinal_position";
|
||||
Query query = em.createNativeQuery(sql);
|
||||
query.setParameter(1,tableName);
|
||||
List result = query.getResultList();
|
||||
List<ColumnConfig> columnInfos = new ArrayList<>();
|
||||
List<ColumnInfo> columnInfos = new ArrayList<>();
|
||||
for (Object obj : result) {
|
||||
Object[] arr = (Object[]) obj;
|
||||
columnInfos.add(
|
||||
new ColumnConfig(
|
||||
new ColumnInfo(
|
||||
tableName,
|
||||
arr[0].toString(),
|
||||
"NO".equals(arr[1]),
|
||||
@ -122,44 +113,44 @@ public class GeneratorServiceImpl extends BaseServiceImpl<ColumnInfoMapper, Colu
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sync(List<ColumnConfig> columnInfos, List<ColumnConfig> columnInfoList) {
|
||||
public void sync(List<ColumnInfo> columnInfos, List<ColumnInfo> columnInfoList) {
|
||||
// 第一种情况,数据库类字段改变或者新增字段
|
||||
for (ColumnConfig columnInfo : columnInfoList) {
|
||||
for (ColumnInfo columnInfo : columnInfoList) {
|
||||
// 根据字段名称查找
|
||||
List<ColumnConfig> columns = new ArrayList<ColumnConfig>(columnInfos.stream().filter(c-> c.getColumnName().equals(columnInfo.getColumnName())).collect(Collectors.toList()));
|
||||
List<ColumnInfo> columns = new ArrayList<ColumnInfo>(columnInfos.stream().filter(c-> c.getColumnName().equals(columnInfo.getColumnName())).collect(Collectors.toList()));
|
||||
// 如果能找到,就修改部分可能被字段
|
||||
if(CollectionUtil.isNotEmpty(columns)){
|
||||
ColumnConfig column = columns.get(0);
|
||||
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());
|
||||
}
|
||||
this.save(column);
|
||||
columnInfoRepository.save(column);
|
||||
} else {
|
||||
// 如果找不到,则保存新字段信息
|
||||
this.save(columnInfo);
|
||||
columnInfoRepository.save(columnInfo);
|
||||
}
|
||||
}
|
||||
// 第二种情况,数据库字段删除了
|
||||
for (ColumnConfig columnInfo : columnInfos) {
|
||||
for (ColumnInfo columnInfo : columnInfos) {
|
||||
// 根据字段名称查找
|
||||
List<ColumnConfig> columns = new ArrayList<ColumnConfig>(columnInfoList.stream().filter(c-> c.getColumnName().equals(columnInfo.getColumnName())).collect(Collectors.toList()));
|
||||
List<ColumnInfo> columns = new ArrayList<ColumnInfo>(columnInfoList.stream().filter(c-> c.getColumnName().equals(columnInfo.getColumnName())).collect(Collectors.toList()));
|
||||
// 如果找不到,就代表字段被删除了,则需要删除该字段
|
||||
if(CollectionUtil.isEmpty(columns)){
|
||||
this.removeById(columnInfo.getId());
|
||||
columnInfoRepository.delete(columnInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(List<ColumnConfig> columnInfos) {
|
||||
this.saveOrUpdateBatch(columnInfos);
|
||||
public void save(List<ColumnInfo> columnInfos) {
|
||||
columnInfoRepository.saveAll(columnInfos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generator(GenConfig genConfig, List<ColumnConfig> columns) {
|
||||
public void generator(GenConfig genConfig, List<ColumnInfo> columns) {
|
||||
if(genConfig.getId() == null){
|
||||
throw new BadRequestException("请先配置生成器");
|
||||
}
|
||||
@ -172,7 +163,7 @@ public class GeneratorServiceImpl extends BaseServiceImpl<ColumnInfoMapper, Colu
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseEntity<Object> preview(GenConfig genConfig, List<ColumnConfig> columns) {
|
||||
public ResponseEntity<Object> preview(GenConfig genConfig, List<ColumnInfo> columns) {
|
||||
if(genConfig.getId() == null){
|
||||
throw new BadRequestException("请先配置生成器");
|
||||
}
|
||||
@ -181,7 +172,7 @@ public class GeneratorServiceImpl extends BaseServiceImpl<ColumnInfoMapper, Colu
|
||||
}
|
||||
|
||||
@Override
|
||||
public void download(GenConfig genConfig, List<ColumnConfig> columns, HttpServletRequest request, HttpServletResponse response) {
|
||||
public void download(GenConfig genConfig, List<ColumnInfo> columns, HttpServletRequest request, HttpServletResponse response) {
|
||||
if(genConfig.getId() == null){
|
||||
throw new BadRequestException("请先配置生成器");
|
||||
}
|
||||
@ -1,12 +1,4 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.utils;
|
||||
package co.yixiang.utils;
|
||||
|
||||
import org.apache.commons.configuration.*;
|
||||
|
||||
@ -1,20 +1,10 @@
|
||||
/**
|
||||
* Copyright (C) 2018-2020
|
||||
* All rights reserved, Designed By www.yixiang.co
|
||||
* 注意:
|
||||
* 本软件为www.yixiang.co开发研制,未经购买不得使用
|
||||
* 购买后可获得全部源代码(禁止转卖、分享、上传到码云、github等开源平台)
|
||||
* 一经发现盗用、分享等行为,将追究法律责任,后果自负
|
||||
*/
|
||||
package co.yixiang.gen.utils;
|
||||
package co.yixiang.utils;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.extra.template.*;
|
||||
import co.yixiang.gen.domain.GenConfig;
|
||||
import co.yixiang.utils.FileUtil;
|
||||
import co.yixiang.utils.StringUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import co.yixiang.gen.domain.ColumnConfig;
|
||||
import co.yixiang.domain.GenConfig;
|
||||
import co.yixiang.domain.ColumnInfo;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
@ -46,22 +36,14 @@ public class GenUtil {
|
||||
*/
|
||||
private static List<String> getAdminTemplateNames() {
|
||||
List<String> templateNames = new ArrayList<>();
|
||||
/*templateNames.add("Entity");
|
||||
templateNames.add("Entity");
|
||||
templateNames.add("Dto");
|
||||
templateNames.add("Mapper");
|
||||
templateNames.add("Controller");
|
||||
templateNames.add("QueryCriteria");
|
||||
templateNames.add("Service");
|
||||
templateNames.add("ServiceImpl");
|
||||
templateNames.add("Repository");*/
|
||||
templateNames.add("EntityP");
|
||||
templateNames.add("DtoP");
|
||||
templateNames.add("MapperP");
|
||||
templateNames.add("ControllerP");
|
||||
templateNames.add("QueryCriteriaP");
|
||||
templateNames.add("ServiceP");
|
||||
templateNames.add("ServiceImplP");
|
||||
//templateNames.add("Repository");
|
||||
templateNames.add("Repository");
|
||||
return templateNames;
|
||||
}
|
||||
|
||||
@ -76,7 +58,7 @@ public class GenUtil {
|
||||
return templateNames;
|
||||
}
|
||||
|
||||
public static List<Map<String, Object>> preview(List<ColumnConfig> columns, GenConfig genConfig) {
|
||||
public static List<Map<String, Object>> preview(List<ColumnInfo> columns, GenConfig genConfig) {
|
||||
Map<String,Object> genMap = getGenMap(columns, genConfig);
|
||||
List<Map<String,Object>> genList = new ArrayList<>();
|
||||
// 获取后端模版
|
||||
@ -102,7 +84,7 @@ public class GenUtil {
|
||||
return genList;
|
||||
}
|
||||
|
||||
public static String download(List<ColumnConfig> columns, GenConfig genConfig) throws IOException {
|
||||
public static String download(List<ColumnInfo> columns, GenConfig genConfig) throws IOException {
|
||||
String tempPath =System.getProperty("java.io.tmpdir") + "yshop-gen-temp" + File.separator + genConfig.getTableName() + File.separator;
|
||||
Map<String,Object> genMap = getGenMap(columns, genConfig);
|
||||
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
|
||||
@ -140,7 +122,7 @@ public class GenUtil {
|
||||
return tempPath;
|
||||
}
|
||||
|
||||
public static void generatorCode(List<ColumnConfig> columnInfos, GenConfig genConfig) throws IOException {
|
||||
public static void generatorCode(List<ColumnInfo> columnInfos, GenConfig genConfig) throws IOException {
|
||||
Map<String,Object> genMap = getGenMap(columnInfos, genConfig);
|
||||
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
|
||||
// 生成后端代码
|
||||
@ -179,7 +161,7 @@ public class GenUtil {
|
||||
}
|
||||
|
||||
// 获取模版数据
|
||||
private static Map<String,Object> getGenMap(List<ColumnConfig> columnInfos, GenConfig genConfig) {
|
||||
private static Map<String,Object> getGenMap(List<ColumnInfo> columnInfos, GenConfig genConfig) {
|
||||
// 存储模版字段数据
|
||||
Map<String,Object> genMap = new HashMap<>(16);
|
||||
// 接口别名
|
||||
@ -209,8 +191,6 @@ public class GenUtil {
|
||||
genMap.put("changeClassName", changeClassName);
|
||||
// 存在 Timestamp 字段
|
||||
genMap.put("hasTimestamp",false);
|
||||
// 存在 Images 字段
|
||||
genMap.put("hasImages",false);
|
||||
// 查询类中存在 Timestamp 字段
|
||||
genMap.put("queryHasTimestamp",false);
|
||||
// 存在 BigDecimal 字段
|
||||
@ -236,7 +216,7 @@ public class GenUtil {
|
||||
// 存储不为空的字段信息
|
||||
List<Map<String,Object>> isNotNullColumns = new ArrayList<>();
|
||||
|
||||
for (ColumnConfig column : columnInfos) {
|
||||
for (ColumnInfo column : columnInfos) {
|
||||
Map<String,Object> listMap = new HashMap<>(16);
|
||||
// 字段描述
|
||||
listMap.put("remark",column.getRemark());
|
||||
@ -256,10 +236,6 @@ public class GenUtil {
|
||||
// 存储大写开头的字段名
|
||||
genMap.put("pkCapitalColName",capitalColumnName);
|
||||
}
|
||||
if("Images".equals(column.getFormType())){
|
||||
// 存在 Images 字段
|
||||
genMap.put("hasImages",true);
|
||||
}
|
||||
// 是否存在 Timestamp 类型的字段
|
||||
if(TIMESTAMP.equals(colType)){
|
||||
genMap.put("hasTimestamp",true);
|
||||
@ -355,50 +331,30 @@ public class GenUtil {
|
||||
if ("Entity".equals(templateName)) {
|
||||
return packagePath + "domain" + File.separator + className + ".java";
|
||||
}
|
||||
if ("EntityP".equals(templateName)) {
|
||||
return packagePath + "domain" + File.separator + className + ".java";
|
||||
}
|
||||
|
||||
if ("Controller".equals(templateName)) {
|
||||
return packagePath + "rest" + File.separator + className + "Controller.java";
|
||||
}
|
||||
if ("ControllerP".equals(templateName)) {
|
||||
return packagePath + "rest" + File.separator + className + "Controller.java";
|
||||
}
|
||||
|
||||
if ("Service".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + className + "Service.java";
|
||||
}
|
||||
if ("ServiceP".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + className + "Service.java";
|
||||
}
|
||||
|
||||
if ("ServiceImpl".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + "impl" + File.separator + className + "ServiceImpl.java";
|
||||
}
|
||||
if ("ServiceImplP".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + "impl" + File.separator + className + "ServiceImpl.java";
|
||||
}
|
||||
|
||||
if ("Dto".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + "dto" + File.separator + className + "Dto.java";
|
||||
}
|
||||
if ("DtoP".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + "dto" + File.separator + className + "Dto.java";
|
||||
}
|
||||
|
||||
|
||||
if ("QueryCriteria".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + "dto" + File.separator + className + "QueryCriteria.java";
|
||||
}
|
||||
if ("QueryCriteriaP".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + "dto" + File.separator + className + "QueryCriteria.java";
|
||||
}
|
||||
|
||||
if ("Mapper".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + "mapper" + File.separator + className + "Mapper.java";
|
||||
}
|
||||
if ("MapperP".equals(templateName)) {
|
||||
return packagePath + "service" + File.separator + "mapper" + File.separator + className + "Mapper.java";
|
||||
}
|
||||
|
||||
if ("Repository".equals(templateName)) {
|
||||
return packagePath + "repository" + File.separator + className + "Repository.java";
|
||||
Reference in New Issue
Block a user