package com.njcn.autocode.utils;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.po.LikeTable;
import com.njcn.autocode.pojo.Module;
import org.springframework.web.bind.annotation.RestController;

import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author hongawen
 * @version 1.0.0
 * @date 2021年12月10日 15:16
 */
public class GenerateCode {

    private static final String TARGET_DIR = "D://code";

    private static final String DB_URL = "jdbc:mysql://192.168.1.103:13306/pqsinfo_zl";
//    private static final String DB_URL = "jdbc:oracle:thin:@192.168.1.170:1521:pqsbase";

    private static final String USERNAME = "root";

    private static final String PASSWORD = "njcnpqs";

    public static void main(String[] args) {
        List<Module> modules = Stream.of(
                new Module("xy", "com.njcn.csdevice", "", Stream.of(
                        "cs_alarm_set"
                        ).collect(Collectors.toList()), "")
        ).collect(Collectors.toList());
        generateJavaFile(modules);
    }


    /**
     * 批量生成不同模块的代码
     * @param modules 模块数据
     */
    private static void generateJavaFile(List<Module> modules) {
        for (Module module : modules) {
            //文件夹提前建好，否则会报错
            FastAutoGenerator.create(DB_URL, USERNAME, PASSWORD)
                    .globalConfig(builder -> {
                        builder.author(module.getAuthor()) // 设置作者
                                .fileOverride() // 覆盖已生成文件
                                .outputDir(TARGET_DIR); // 指定输出目录
                    })
                    .packageConfig(builder -> {
                        builder.parent(module.getPackageName()) // 设置父包名
                                .moduleName(module.getModuleName()) // 设置父包模块名
                                .pathInfo(Collections.singletonMap(OutputFile.mapperXml, TARGET_DIR+ File.separator+module.getModuleName())); // 设置mapperXml生成路径
                    })
                    .strategyConfig(builder -> {
                        builder.addInclude(module.getTableNames()) // 设置需要生成的表名
                                .addTablePrefix(module.getPrefix())// 设置过滤表前缀
                        .entityBuilder()
                                .superClass(com.njcn.db.bo.BaseEntity.class) //默认实体继承指定父类
                                .enableLombok() //启用lombok
                        .controllerBuilder()
                                .superClass(com.njcn.web.controller.BaseController.class) //默认controller继承指定父类
                                .enableRestStyle() //开启生成@RestController 控制器
                        ;
                    })
                    .execute();
        }
    }


}
