package cc.mrbird.febs.generator.controller;
|
|
import cc.mrbird.febs.common.annotation.ControllerEndpoint;
|
import cc.mrbird.febs.common.controller.BaseController;
|
import cc.mrbird.febs.common.entity.FebsResponse;
|
import cc.mrbird.febs.common.entity.QueryRequest;
|
import cc.mrbird.febs.common.exception.FebsException;
|
import cc.mrbird.febs.common.utils.FebsUtil;
|
import cc.mrbird.febs.common.utils.FileUtil;
|
import cc.mrbird.febs.generator.entity.Column;
|
import cc.mrbird.febs.generator.entity.GeneratorConfig;
|
import cc.mrbird.febs.generator.entity.GeneratorConstant;
|
import cc.mrbird.febs.generator.helper.GeneratorHelper;
|
import cc.mrbird.febs.generator.service.IGeneratorConfigService;
|
import cc.mrbird.febs.generator.service.IGeneratorService;
|
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
|
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.RegExUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import javax.servlet.http.HttpServletResponse;
|
import javax.validation.constraints.NotBlank;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* @author MrBird
|
*/
|
@Slf4j
|
@RestController
|
@RequestMapping("generator")
|
@RequiredArgsConstructor
|
public class GeneratorController extends BaseController {
|
|
private static final String SUFFIX = "_code.zip";
|
|
private final IGeneratorService generatorService;
|
private final IGeneratorConfigService generatorConfigService;
|
private final GeneratorHelper generatorHelper;
|
private final DynamicDataSourceProperties properties;
|
|
@GetMapping("datasource")
|
@RequiresPermissions("generator:view")
|
public FebsResponse datasource() {
|
Map<String, DataSourceProperty> datasources = properties.getDatasource();
|
List<String> datasourcesName = new ArrayList<>();
|
datasources.forEach((k, v) -> {
|
String datasourceName = StringUtils.substringBefore(StringUtils.substringAfterLast(v.getUrl(), "/"), "?");
|
datasourcesName.add(datasourceName);
|
});
|
return new FebsResponse().success().data(datasourcesName);
|
}
|
|
@GetMapping("tables/info")
|
@RequiresPermissions("generator:view")
|
public FebsResponse tablesInfo(String tableName, String datasource, QueryRequest request) {
|
Map<String, Object> dataTable = getDataTable(generatorService.getTables(tableName, request, GeneratorConstant.DATABASE_TYPE, datasource));
|
return new FebsResponse().success().data(dataTable);
|
}
|
|
@GetMapping
|
@RequiresPermissions("generator:generate")
|
@ControllerEndpoint(exceptionMessage = "代码生成失败")
|
public void generate(@NotBlank(message = "{required}") String name, String remark, String datasource, HttpServletResponse response) throws Exception {
|
GeneratorConfig generatorConfig = generatorConfigService.findGeneratorConfig();
|
if (generatorConfig == null) {
|
throw new FebsException("代码生成配置为空");
|
}
|
|
String className = name;
|
if (GeneratorConfig.TRIM_YES.equals(generatorConfig.getIsTrim())) {
|
className = RegExUtils.replaceFirst(name, generatorConfig.getTrimValue(), StringUtils.EMPTY);
|
}
|
|
generatorConfig.setTableName(name);
|
generatorConfig.setClassName(FebsUtil.underscoreToCamel(className));
|
generatorConfig.setTableComment(remark);
|
// 生成代码到临时目录
|
List<Column> columns = generatorService.getColumns(GeneratorConstant.DATABASE_TYPE, datasource, name);
|
generatorHelper.generateEntityFile(columns, generatorConfig);
|
generatorHelper.generateMapperFile(columns, generatorConfig);
|
generatorHelper.generateMapperXmlFile(columns, generatorConfig);
|
generatorHelper.generateServiceFile(columns, generatorConfig);
|
generatorHelper.generateServiceImplFile(columns, generatorConfig);
|
generatorHelper.generateControllerFile(columns, generatorConfig);
|
// 打包
|
String zipFile = System.currentTimeMillis() + SUFFIX;
|
FileUtil.compress(GeneratorConstant.TEMP_PATH + "src", zipFile);
|
// 下载
|
FileUtil.download(zipFile, name + SUFFIX, true, response);
|
// 删除临时目录
|
FileUtil.delete(GeneratorConstant.TEMP_PATH);
|
}
|
}
|