diff --git a/pom.xml b/pom.xml index 1960b41..611dd5b 100644 --- a/pom.xml +++ b/pom.xml @@ -122,9 +122,9 @@ - postgresql + org.postgresql postgresql - 8.2-504.jdbc3 + 42.2.27 diff --git a/src/main/java/Tools/SyncXtData2022.java b/src/main/java/Tools/SyncXtData2022.java index 9e24649..e160d1b 100644 --- a/src/main/java/Tools/SyncXtData2022.java +++ b/src/main/java/Tools/SyncXtData2022.java @@ -7,6 +7,7 @@ import com.dsideal.FengHuang.Util.CommonUtil; import com.dsideal.FengHuang.Util.PkUtil; import com.jfinal.kit.PathKit; import com.jfinal.kit.PropKit; +import com.jfinal.kit.StrKit; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; @@ -15,7 +16,9 @@ import com.jfinal.plugin.druid.DruidPlugin; import com.jfinal.plugin.redis.RedisPlugin; import java.io.File; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.UUID; public class SyncXtData2022 { @@ -42,14 +45,44 @@ public class SyncXtData2022 { for (Record tableRecord : tableList) { String tableName = tableRecord.getStr("tablename"); - List list = Db.findAll(tableName); - int i = 0; - for (Record record : list) { - record.set("record_year", 2022); - i++; - //保存 - Db.use("target").save(tableName, record); - System.out.println("正在处理表【" + tableName + "】,第" + i + "条数据,当前表共" + list.size() + "条。"); + sql = "select a.attname as name from pg_class as c,pg_attribute as a where c.relname = '" + tableName + "' and a.attrelid = c.oid and a.attnum>0"; + List colsListTarge = Db.use("target").find(sql); + List colsListSource = Db.use("source").find(sql); + Set targetSet = new HashSet<>(); + for (Record rCol : colsListTarge) { + targetSet.add(rCol.getStr("name")); + } + Set sourceSet = new HashSet<>(); + for (Record rCol : colsListSource) { + sourceSet.add(rCol.getStr("name")); + } + + List list = Db.use("source").findAll(tableName); + + int cnt = 0; + for (Record sourceRecord : list) { + cnt++; + //1、找出有用的列 + Record rWrite = new Record(); + for (int j = 0; j < sourceRecord.getColumnNames().length; j++) { + String colName = sourceRecord.getColumnNames()[j]; + if (targetSet.contains(colName)) { + String value = sourceRecord.getStr(colName); + if (StrKit.isBlank(value)) value = ""; + rWrite.set(colName, value); + } + } + //2、找出缺少的列 + Set resSet = new HashSet<>(); + resSet.addAll(targetSet); + resSet.removeAll(sourceSet); + for (String str : resSet) { + rWrite.set(str, "");//加上默认值 + } + rWrite.set("recordyear", 2022); + //3、保存 + Db.use("target").save(tableName, "id", rWrite); + System.out.println("正在处理表【" + tableName + "】,第" + cnt + "条数据,当前表共" + list.size() + "条。"); } } CommonUtil.printf("恭喜,所有导入工作成功完成!");