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); 
 | 
    } 
 | 
} 
 |