You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

136 lines
6.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.dsideal.base.Tools;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.PathUtil;
import com.dsideal.base.DataEase.Model.DataEaseModel;
import com.dsideal.base.Plugin.YamlProp;
import com.dsideal.base.Util.ExcelCommonUtil;
import com.jfinal.kit.FileKit;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.Prop;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.hikaricp.HikariCpPlugin;
import com.jfinal.plugin.activerecord.Record;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class InitDataEaseDataSet {
public static void main(String[] args) throws IOException {
//加载配置文件
String configFile = "application_dev.yaml";
Prop PropKit = new YamlProp(configFile);
HikariCpPlugin masterPlugin = new HikariCpPlugin(PropKit.get("mysql.jdbcUrl"), PropKit.get("mysql.user"),
PropKit.get("mysql.password").trim(), PropKit.get("mysql.driverClassName"));
masterPlugin.start();
HikariCpPlugin dataEasePlugin = new HikariCpPlugin(PropKit.get("mysql.jdbcUrl").replace("ds_db", DataEaseModel.DB_NAME), PropKit.get("mysql.user"),
PropKit.get("mysql.password").trim(), PropKit.get("mysql.driverClassName"));
dataEasePlugin.start();
// 配置ActiveRecord插件
ActiveRecordPlugin arp = new ActiveRecordPlugin("master", masterPlugin);
arp.setDialect(new MysqlDialect());
ActiveRecordPlugin arpDataEase = new ActiveRecordPlugin(DataEaseModel.DB_NAME, dataEasePlugin);
arpDataEase.setDialect(new MysqlDialect());
//遍历sql目录下所有的sql文件
File sqlDir;
String basePath = InitDataEaseDataSet.class.getResource("/").getPath();
sqlDir = new File(basePath + "/Sql");
File[] sqlFiles = sqlDir.listFiles();
for (File sqlFile : sqlFiles != null ? sqlFiles : new File[0]) {
//只加载.sql文件
if (sqlFile.getName().indexOf(".sql") > 0) {
arp.addSqlTemplate("/Sql/" + sqlFile.getName());
arpDataEase.addSqlTemplate("/Sql/" + sqlFile.getName());
}
}
arp.start();
arpDataEase.start();
DataEaseModel dm = new DataEaseModel();
//1、添加到数据集表中
dm.collectDataSet();
//2、加上主键
dm.addPrimaryKey();
//3、将所有非空列去掉不允许为空的限制
dm.updateNotNullColumns();
//4、遍历所有数据集的表
int total = 0;
for (int i = 1; i <= 3; i++) {//1省管理员2市州管理员3县区管理员
switch (i) {
case 1:
System.out.println("正在处理省管理员需要看到的数据集~");
break;
case 2:
System.out.println("正在处理市州管理员需要看到的数据集~");
break;
case 3:
System.out.println("正在处理县区管理员需要看到的数据集~");
break;
}
//Excel的保存目录
String exportPath = "D:/360Downloads/Excel";
File directory = new File(exportPath);
// 检查目录是否存在
if (!directory.exists()) {
directory.mkdirs();
}
List<Record> list = dm.getDataSetByIdentityId(i);
System.out.println("数据集个数=" + list.size());
total += list.size();
for (Record record : list) {
String tableName = record.getStr("table_name");
String dataSetName = record.getStr("dataset_name");
System.out.println("正在处理数据集:" + dataSetName);
//省的导出全部,市州管理员只导出市州数据,县区管理员只导出县区数据
List<Record> tableData = new ArrayList<>();
String excelFileName = "";
String privinceName = "云南省";
Record privinceRecord = dm.getAreaByName(privinceName);
String privinceId = privinceRecord.getStr("id");
if (i == 1) {
//对此表中的数据进行直接导出EXCEL
String sql = "select * from `" + tableName + "`";
tableData = Db.use(DataEaseModel.DB_NAME).find(sql);
excelFileName = "【" + privinceName + "】" + dataSetName + ".xlsx";
ExcelCommonUtil.writeExcel(tableData, exportPath + "/" + excelFileName, true);
} else if (i == 2) {
//枚举所有的市州数据然后进行导出EXCEL
List<Record> cityList = dm.getAreaList(privinceId);
String cityName = "";
String cityId = "";
for (Record rCity : cityList) {
cityName = rCity.getStr("area_name");
cityId = rCity.getStr("id");
if (i == 3) {
//枚举所有的县区数据然后进行导出EXCEL
ExcelCommonUtil.writeExcel(tableData, exportPath + "/" + excelFileName, true);
}
}
String sql = "select * from `" + tableName + "` where `行政区划`=?";
System.out.println(tableName);
tableData = Db.use(DataEaseModel.DB_NAME).find(sql, cityName);
excelFileName = "【" + cityName + "】" + dataSetName + ".xlsx";
ExcelCommonUtil.writeExcel(tableData, exportPath + "/" + excelFileName, true);
}
}
}
System.out.println("恭喜,所有数据处理完毕,共生成数据集数量=" + total + "个。");
}
}