|
@@ -6,172 +6,246 @@ import com.data.datarepo.utils.DataSourceOra;
|
|
|
import com.data.datarepo.utils.EquipmentNo;
|
|
|
import com.data.datarepo.utils.SM4Utils;
|
|
|
import com.mysql.cj.jdbc.MysqlDataSource;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
+import com.mysql.cj.util.StringUtils;
|
|
|
|
|
|
import javax.sql.rowset.JdbcRowSet;
|
|
|
import java.sql.*;
|
|
|
import java.text.DateFormat;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
-import java.util.ArrayList;
|
|
|
+import java.util.*;
|
|
|
import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
|
|
|
public class DataMySQL2OracleService extends DataSourceOra {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- EquipmentNo equipmentNo = new EquipmentNo();
|
|
|
DataCenterService dataCenterService = new DataCenterService();
|
|
|
- DataTypeService dataTypeService = new DataTypeService();
|
|
|
DataDeleteService dataDeleteService = new DataDeleteService();
|
|
|
|
|
|
- public DataRepoTable startProcess(String repo_name, String table_name, String up_num, String table_comment) throws Exception {
|
|
|
+ public DataRepoTable startProcess(String repo_name, String table_name, String up_num, String table_comment, String table_id) throws Exception {
|
|
|
+ dataDeleteService.DataDeleteOld(repo_name, up_num);
|
|
|
|
|
|
|
|
|
DataRepoTable dataRepoTable = new DataRepoTable();
|
|
|
MysqlDataSource basicDS = DataSource.getInstance().getMySqlDS();
|
|
|
Connection connSource = basicDS.getConnection();
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
Connection connDest = this.getConn();
|
|
|
|
|
|
|
|
|
Statement stmt = connSource.createStatement();
|
|
|
+ Statement stmtI = connSource.createStatement();
|
|
|
+ Statement stmtU = connSource.createStatement();
|
|
|
+ Statement stmtL = connSource.createStatement();
|
|
|
+ Statement stmtC = connSource.createStatement();
|
|
|
+ Statement stmtS = connSource.createStatement();
|
|
|
+ Statement stmtT = connSource.createStatement();
|
|
|
ResultSet rs = null;
|
|
|
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
|
|
- String state = "";
|
|
|
-
|
|
|
- rs = stmt.executeQuery("select * from " + table_name);
|
|
|
-
|
|
|
-
|
|
|
- rs.last();
|
|
|
- System.out.println(table_name + "表共计有:" + rs.getRow() + "条记录,正在处理......");
|
|
|
- rs.beforeFirst();
|
|
|
-
|
|
|
- DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
- java.util.Date beginTime = new Date();
|
|
|
- String start = df.format(beginTime);
|
|
|
- Long begin = beginTime.getTime();
|
|
|
- System.out.println("任务开始,开始时间为:" + start);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- String num = equipmentNo.getNewEquipmentNo(repo_name, up_num);
|
|
|
+ ResultSet rsI = null;
|
|
|
+ ResultSet rsU = null;
|
|
|
+ ResultSet rsL = null;
|
|
|
+ ResultSet rsC = null;
|
|
|
+ ResultSet rsS = null;
|
|
|
+ ResultSet rsT = null;
|
|
|
+ PreparedStatement pstmt = null;
|
|
|
+ String timeL = "";
|
|
|
+ String sqlC = "select insertSql from data_sync_table where repo_name='" + repo_name + "'";
|
|
|
+ rsC = stmtC.executeQuery(sqlC);
|
|
|
+ String sqlS = "select table_column,column_issm from data_sync_repo_column where table_id='" + table_id + "' and state='0'";
|
|
|
+ rsS = stmtS.executeQuery(sqlS);
|
|
|
+ String sqlT = "select count(*) as columnCount from data_sync_repo_column where table_id='" + table_id + "' and state='0'";
|
|
|
+ rsT = stmtT.executeQuery(sqlT);
|
|
|
|
|
|
- String type = "";
|
|
|
- List smList = new ArrayList<>();
|
|
|
-
|
|
|
-
|
|
|
- ResultSetMetaData rsmd = rs.getMetaData();
|
|
|
- int numberOfColumns = rsmd.getColumnCount();
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- sb.append("insert into " + repo_name + "_OLD (");
|
|
|
- for (int i = 1; i <= numberOfColumns - 2; i++) {
|
|
|
- sb.append(rsmd.getColumnName(i) + ",");
|
|
|
- }
|
|
|
- sb.append("UP_NUM," + "DATA_STATE");
|
|
|
-
|
|
|
- sb.append(")values(");
|
|
|
- for (int i = 1; i <= numberOfColumns - 2; i++) {
|
|
|
- sb.append("?,");
|
|
|
+ String inSql = "";
|
|
|
+ if (rsC.next()) {
|
|
|
+ inSql = rsC.getString("insertSql");
|
|
|
+ System.out.println(inSql);
|
|
|
}
|
|
|
- sb.append("?," + "?");
|
|
|
-
|
|
|
- sb.append(")");
|
|
|
- System.out.println(sb.toString());
|
|
|
-
|
|
|
- PreparedStatement pstmt = connDest.prepareStatement(sb.toString());
|
|
|
-
|
|
|
-
|
|
|
- int k = 0;
|
|
|
+ try {
|
|
|
+ String sqlL = "select create_time_str from data_sync_upnum where table_id=(select max( table_id ) from data_sync_upnum where repo_name='" + repo_name + "')";
|
|
|
+ rsL = stmtL.executeQuery(sqlL);
|
|
|
+ rs = stmt.executeQuery("select * from " + table_name);
|
|
|
+ if (rsL.next()) {
|
|
|
+ timeL = rsL.getString("create_time_str");
|
|
|
+ String sqlI = "select * from " + table_name + " where date_format(create_date,'%Y%m%d')> date_format('" + timeL + "','%Y%m%d')";
|
|
|
+ System.out.println(sqlI);
|
|
|
+ rsI = stmtI.executeQuery(sqlI);
|
|
|
+ String sqlU = "select * from " + table_name + " where date_format(create_date,'%Y%m%d')<date_format('" + timeL + "','%Y%m%d') and date_format(update_date,'%Y%m%d')>date_format('" + timeL + "','%Y%m%d')";
|
|
|
+ System.out.println(sqlU);
|
|
|
+ rsU = stmtU.executeQuery(sqlU);
|
|
|
+ }
|
|
|
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ Date beginTime = new Date();
|
|
|
+ String start = df.format(beginTime);
|
|
|
+ Long begin = beginTime.getTime();
|
|
|
+ System.out.println("任务开始,开始时间为:" + start);
|
|
|
|
|
|
- while (rs.next()) {
|
|
|
- for (int i = 1; i <= numberOfColumns - 2; i++) {
|
|
|
-
|
|
|
- String value = rs.getString(i);
|
|
|
- String columnName = rsmd.getColumnName(i);
|
|
|
- if (columnName.equals("AXCP0005") || columnName.equals("AHDX6129")
|
|
|
- || columnName.equals("AXCP0002") || columnName.equals("AHAP0026") || columnName.equals("AHAP1026")
|
|
|
- || columnName.equals("AXZX0001") || columnName.equals("AHAP0028") || columnName.equals("AHAP0029")
|
|
|
- || columnName.equals("AXZX0010") || columnName.equals("AXZX0011") || columnName.equals("AHAX1326")
|
|
|
- || columnName.equals("AHAX1328") || columnName.equals("AHAX1324") || columnName.equals("AHBX3102")
|
|
|
- || columnName.equals("AHBX3116") || columnName.equals("AHBX3115") || columnName.equals("AXZX0002")
|
|
|
- || columnName.equals("AHDP5010") || columnName.equals("AHDP5011") || columnName.equals("AHDP5020")
|
|
|
- || columnName.equals("AHDP5021") || columnName.equals("AHDP5052") || columnName.equals("AHDP5055")
|
|
|
- || columnName.equals("AHDP5057") || columnName.equals("AHDP5058") || columnName.equals("AHDP5063")
|
|
|
- || columnName.equals("AHDP5330") || columnName.equals("AHDP5098") || columnName.equals("AHDP5099")
|
|
|
- || columnName.equals("AHDP5110") || columnName.equals("AHAX1325") || columnName.equals("AHAE2327")
|
|
|
- || columnName.equals("AXBE0013") || columnName.equals("AXBE0021") || columnName.equals("AHAE0012")
|
|
|
- || columnName.equals("AXBE0018") || columnName.equals("AHAE5004") || columnName.equals("AHAE5026")
|
|
|
- || columnName.equals("AHAE5027") || columnName.equals("AHAE5029")) {
|
|
|
- SM4Utils sm4 = new SM4Utils();
|
|
|
- sm4.secretKey = "1234567887654321";
|
|
|
- value = sm4.decryptData_ECB(value);
|
|
|
- }
|
|
|
+ ResultSetMetaData rsmd = rs.getMetaData();
|
|
|
+
|
|
|
+
|
|
|
+ int numberOfColumns = 0;
|
|
|
+ if (rsT.next()) {
|
|
|
+ numberOfColumns = Integer.parseInt(rsT.getString("columnCount"));
|
|
|
+ }
|
|
|
+ Map smMap = new HashMap();
|
|
|
+ while (rsS.next()) {
|
|
|
+ String table_column = rsS.getString("table_column");
|
|
|
+ String issm = rsS.getString("column_issm");
|
|
|
+ smMap.put(table_column,issm);
|
|
|
+ }
|
|
|
+ pstmt = connDest.prepareStatement(inSql);
|
|
|
|
|
|
- if (StringUtils.isEmpty(up_num)||"null".equals(up_num)) {
|
|
|
- k = 1;
|
|
|
- state = "I";
|
|
|
- pstmt.setString(i, value);
|
|
|
- } else {
|
|
|
+ rsL.beforeFirst();
|
|
|
|
|
|
- Date cdate = sdf.parse(rs.getString("create_date"));
|
|
|
- Date udate = sdf.parse(rs.getString("update_date"));
|
|
|
- String up_date = up_num.split("_")[2];
|
|
|
- Date up_time = sdf.parse(up_date);
|
|
|
- long long1 = cdate.getTime();
|
|
|
- long long2 = up_time.getTime();
|
|
|
- long long3 = udate.getTime();
|
|
|
- if (long1 > long2) {
|
|
|
- k = 2;
|
|
|
- state = "I";
|
|
|
+ if (rsL.next()) {
|
|
|
+ rsI.beforeFirst();
|
|
|
+ rsU.beforeFirst();
|
|
|
+
|
|
|
+ int j = 0;
|
|
|
+ while (rsI.next()) {
|
|
|
+ j++;
|
|
|
+ for (int i = 1; i <= numberOfColumns - 2; i++) {
|
|
|
+ String value = rsI.getString(i);
|
|
|
+ String column_name=rsI.getMetaData().getColumnName(i);
|
|
|
+ String issm=(String)smMap.get(column_name);
|
|
|
+ if("0".equals(issm)){
|
|
|
+ SM4Utils sm4 = new SM4Utils();
|
|
|
+ sm4.secretKey = "1234567887654321";
|
|
|
+ value = sm4.decryptData_ECB(value);
|
|
|
+ }
|
|
|
pstmt.setString(i, value);
|
|
|
- } else if (long1 < long2 && long3 > long2) {
|
|
|
- k = 3;
|
|
|
- state = "U";
|
|
|
+ }
|
|
|
+ pstmt.setObject(numberOfColumns - 1, "I");
|
|
|
+ pstmt.setObject(numberOfColumns, up_num);
|
|
|
+
|
|
|
+ pstmt.addBatch();
|
|
|
+ if (j % 500 == 0) {
|
|
|
+ pstmt.executeBatch();
|
|
|
+ }
|
|
|
+ pstmt.executeBatch();
|
|
|
+ }
|
|
|
+
|
|
|
+ while (rsU.next()) {
|
|
|
+ j++;
|
|
|
+ for (int i = 1; i <= numberOfColumns - 2; i++) {
|
|
|
+ String value = rsU.getString(i);
|
|
|
+ String column_name=rsU.getMetaData().getColumnName(i);
|
|
|
+ String issm=(String)smMap.get(column_name);
|
|
|
+ if("0".equals(issm)){
|
|
|
+ SM4Utils sm4 = new SM4Utils();
|
|
|
+ sm4.secretKey = "1234567887654321";
|
|
|
+ value = sm4.decryptData_ECB(value);
|
|
|
+ }
|
|
|
pstmt.setString(i, value);
|
|
|
}
|
|
|
+ pstmt.setObject(numberOfColumns - 1, "U");
|
|
|
+ pstmt.setObject(numberOfColumns, up_num);
|
|
|
+
|
|
|
+ pstmt.addBatch();
|
|
|
+ if (j % 500 == 0) {
|
|
|
+ pstmt.executeBatch();
|
|
|
+ }
|
|
|
+ pstmt.executeBatch();
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+ pstmt.executeBatch();
|
|
|
+ } else {
|
|
|
+ int j = 0;
|
|
|
+ while (rs.next()) {
|
|
|
+ j++;
|
|
|
+ rsS.beforeFirst();
|
|
|
+ for (int i = 1; i <= numberOfColumns - 2; i++) {
|
|
|
+ String value = rs.getString(i);
|
|
|
+ String column_name=rs.getMetaData().getColumnName(i);
|
|
|
+ String issm=(String)smMap.get(column_name);
|
|
|
+ if("0".equals(issm)){
|
|
|
+ SM4Utils sm4 = new SM4Utils();
|
|
|
+ sm4.secretKey = "1234567887654321";
|
|
|
+ value = sm4.decryptData_ECB(value);
|
|
|
+ }
|
|
|
+
|
|
|
+ pstmt.setString(i, value);
|
|
|
+ }
|
|
|
+ pstmt.setObject(numberOfColumns - 1, "I");
|
|
|
+ pstmt.setObject(numberOfColumns, up_num);
|
|
|
+
|
|
|
+ pstmt.addBatch();
|
|
|
+ if (j % 500 == 0) {
|
|
|
+ pstmt.executeBatch();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ pstmt.executeBatch();
|
|
|
}
|
|
|
-
|
|
|
- if (k == 1 || k == 2 || k == 3) {
|
|
|
- pstmt.setObject(numberOfColumns - 1, num);
|
|
|
- pstmt.setObject(numberOfColumns, state);
|
|
|
- System.out.print("-");
|
|
|
- pstmt.addBatch();
|
|
|
+ Date finishTime = new Date();
|
|
|
+ Long end = finishTime.getTime();
|
|
|
+ long timeLag = end - begin;
|
|
|
+ long day = timeLag / (24 * 60 * 60 * 1000);
|
|
|
+ long hour = (timeLag / (60 * 60 * 1000) - day * 24);
|
|
|
+ long minute = ((timeLag / (60 * 1000)) - day * 24 * 60 - hour * 60);
|
|
|
+ long s = (timeLag / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60);
|
|
|
+ System.out.println("用了 " + day + "天 " + hour + "时 " + minute + "分 " + s + "秒");
|
|
|
+ System.out.println("任务结束,结束时间为:" + df.format(finishTime));
|
|
|
+ dataCenterService.updateData(up_num, repo_name);
|
|
|
+ dataDeleteService.DataDelete(repo_name);
|
|
|
+ dataRepoTable.setTable_comment(table_comment);
|
|
|
+ dataRepoTable.setTable_name(table_name);
|
|
|
+ dataRepoTable.setRepo_name(repo_name);
|
|
|
+ dataRepoTable.setUp_num(up_num);
|
|
|
+ } catch (Exception e) {
|
|
|
+ connDest.rollback();
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+
|
|
|
+ if (rs != null) {
|
|
|
+ rs.close();
|
|
|
+ }
|
|
|
+ if (rsI != null) {
|
|
|
+ rsI.close();
|
|
|
+ }
|
|
|
+ if (rsU != null) {
|
|
|
+ rsU.close();
|
|
|
+ }
|
|
|
+ if (rsL != null) {
|
|
|
+ rsL.close();
|
|
|
+ }
|
|
|
+ if (rsC != null) {
|
|
|
+ rsC.close();
|
|
|
+ }
|
|
|
+ if (rsS != null) {
|
|
|
+ rsS.close();
|
|
|
+ }
|
|
|
+ if (rsT != null) {
|
|
|
+ rsT.close();
|
|
|
+ }
|
|
|
+ if (stmt != null) {
|
|
|
+ stmt.close();
|
|
|
+ }
|
|
|
+ if (stmtI != null) {
|
|
|
+ stmtI.close();
|
|
|
+ }
|
|
|
+ if (stmtU != null) {
|
|
|
+ stmtU.close();
|
|
|
+ }
|
|
|
+ if (stmtL != null) {
|
|
|
+ stmtL.close();
|
|
|
+ }
|
|
|
+ if (stmtC != null) {
|
|
|
+ stmtC.close();
|
|
|
+ }
|
|
|
+ if (stmtS != null) {
|
|
|
+ stmtS.close();
|
|
|
+ }
|
|
|
+ if (stmtT != null) {
|
|
|
+ stmtT.close();
|
|
|
+ }
|
|
|
+ if (pstmt != null) {
|
|
|
+ pstmt.close();
|
|
|
+ }
|
|
|
+ if (connSource != null) {
|
|
|
+ connSource.close();
|
|
|
+ }
|
|
|
+ if (connDest != null) {
|
|
|
+ connDest.close();
|
|
|
}
|
|
|
- }
|
|
|
- Date finishTime = new Date();
|
|
|
- Long end = finishTime.getTime();
|
|
|
- long timeLag = end - begin;
|
|
|
- long day = timeLag / (24 * 60 * 60 * 1000);
|
|
|
- long hour = (timeLag / (60 * 60 * 1000) - day * 24);
|
|
|
- long minute = ((timeLag / (60 * 1000)) - day * 24 * 60 - hour * 60);
|
|
|
- long s = (timeLag / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60);
|
|
|
- System.out.println("用了 " + day + "天 " + hour + "时 " + minute + "分 " + s + "秒");
|
|
|
- System.out.println("任务结束,结束时间为:" + df.format(finishTime));
|
|
|
-
|
|
|
- pstmt.executeBatch();
|
|
|
- dataCenterService.updateData(num, repo_name);
|
|
|
- dataDeleteService.DataDelete(repo_name);
|
|
|
- dataRepoTable.setTable_name(table_name);
|
|
|
- dataRepoTable.setTable_comment(table_comment);
|
|
|
- dataRepoTable.setRepo_name(repo_name);
|
|
|
- dataRepoTable.setUp_num(num);
|
|
|
|
|
|
-
|
|
|
- rs.close();
|
|
|
- stmt.close();
|
|
|
- pstmt.close();
|
|
|
|
|
|
- connSource.close();
|
|
|
- connDest.close();
|
|
|
+ }
|
|
|
|
|
|
|
|
|
return dataRepoTable;
|