package com.gci.boot.modules.demo.generator;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.util.Collections;

public class GciMybatisPlusCodeGenerator {
    /**
     * 生成 mapper,mapperXml,service,controler代码
     * @param url 数据库连接url
     * @param username 数据库连接用户名
     * @param password 数据库连接密码
     * @param schemaName 使用的数据库实例
     * @param tables 要生成代码的表
     * @param outputDir 生成代码文件输出地址
     * @param packages 包名
     * @param author 作者
     */
    public static void generate(String url, String username, String password, String schemaName, String[] tables, String outputDir, String packages, String author,String moduleName){
        String mapperDir = outputDir.concat(File.separator).concat(packages.replace(".", File.separator)).concat(File.separator).concat("mapper").concat(File.separator).concat("xml");
        FastAutoGenerator.create(new DataSourceConfig.Builder(url, username, password).schema(schemaName))
                .globalConfig(builder -> {
                    builder.author(StringUtils.isBlank(author)?"admin":author) // 设置作者
                            .dateType(DateType.ONLY_DATE)
                            .enableSwagger() // 开启 swagger 模式
                            .outputDir(outputDir); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent(packages) // 设置父包名
//                            .moduleName(moduleName) // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, mapperDir)); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude(tables)
                            //.likeTable(new LikeTable("sys_"))
                            .entityBuilder().enableLombok()
                            .idType(IdType.ASSIGN_ID)
                            .controllerBuilder().enableRestStyle()
                    ;
                })
                .templateConfig(builder -> {
                    builder.controller("/templates/controller.java");
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }

    public static void main(String[] args) {
        String url = "jdbc:postgresql://10.91.123.4:5432/cdenv-manage";
        String username = "postgres";
        String password = "DATA123-4@ceshi";

        generate(url, username, password, "public",  new String[]{
                "tb_gis_speeding_threshold"
        }, "D:\\ideaWork\\gci-202342-cdenv-manage-platform-backend\\src\\main\\java", "com.gci.boot.modules.vehicles", "2464","/customer/tbVehicle");
    }
}
