|
@@ -0,0 +1,801 @@
|
|
|
+package com.dgtly.sync.service;
|
|
|
+
|
|
|
+import com.dgtly.common.config.Global;
|
|
|
+import com.dgtly.common.utils.DateUtils;
|
|
|
+import com.dgtly.common.utils.http.HttpUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.io.*;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.sql.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Enumeration;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@Component
|
|
|
+public class HanaOrderComponent {
|
|
|
+
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(HanaOrderComponent.class);
|
|
|
+
|
|
|
+ @Value(value = "${hana.hana-driver:none}")
|
|
|
+ private String hanaDriver;
|
|
|
+ @Value(value = "${hana.hana-url:none}")
|
|
|
+ private String hanaUrl;
|
|
|
+ @Value(value = "${hana.hana-user:none}")
|
|
|
+ private String hanaUser;
|
|
|
+ @Value(value = "${hana.hana-pwd:none}")
|
|
|
+ private String hanaPwd;
|
|
|
+
|
|
|
+ @Value(value = "${hana.mysql-driver:none}")
|
|
|
+ private String mysqlDriver;
|
|
|
+ @Value(value = "${hana.mysql-url:none}")
|
|
|
+ private String mysqlUrl;
|
|
|
+ @Value(value = "${hana.mysql-user:none}")
|
|
|
+ private String mysqlUser;
|
|
|
+ @Value(value = "${hana.mysql-pwd:none}")
|
|
|
+ private String mysqlPwd;
|
|
|
+
|
|
|
+ /*清空SalesOrder缓存*/
|
|
|
+ @Value(value = "${ruoyi.orderGetDataHook}")
|
|
|
+ private String orderGetDataHook;
|
|
|
+ /*清空deliverOrder缓存*/
|
|
|
+ @Value(value = "${ruoyi.deliverGetDataHook}")
|
|
|
+ private String deliverGetDataHook;
|
|
|
+
|
|
|
+ public HanaOrderComponent() {
|
|
|
+ }
|
|
|
+
|
|
|
+ public void hanaSalesOrderSync() throws Exception {
|
|
|
+ Connection con = this.getHanaConnection();
|
|
|
+ PreparedStatement pstmt = con.prepareStatement("SELECT\t\n" +
|
|
|
+ "A.VBELN,\t\n" +
|
|
|
+ "A.POSNR,\t\n" +
|
|
|
+ "A.VKORG,\t\n" +
|
|
|
+ "A.VKORG_TXT,\t\n" +
|
|
|
+ "A.VTWEG,\t\n" +
|
|
|
+ "A.KUNNR,\t\n" +
|
|
|
+ "A.NAME1,\t\n" +
|
|
|
+ "A.ROUTE,\t\n" +
|
|
|
+ "A.SPART,\t\n" +
|
|
|
+ "A.VKGRP,\t\n" +
|
|
|
+ "A.WERKS,\t\n" +
|
|
|
+ "A.AUART,\t\n" +
|
|
|
+ "A.ERDAT,\t\n" +
|
|
|
+ "A.ERDAT_P,\t\n" +
|
|
|
+ "A.LFSTA,\t\n" +
|
|
|
+ "A.MATNR,\t\n" +
|
|
|
+ "A.ZMAKTXX,\t\n" +
|
|
|
+ "A.GROES,\t\n" +
|
|
|
+ "A.ZCMFRE,\t\n" +
|
|
|
+ "A.ZCMGST,\t\n" +
|
|
|
+ "A.ABGRU,\t\n" +
|
|
|
+ "A.ZZMENG,\t\n" +
|
|
|
+ "A.ZZMENG2,\t\n" +
|
|
|
+ "A.ZNETWR,\t\n" +
|
|
|
+ "A.ZRFMNG,\t\n" +
|
|
|
+ "A.ZRFMNG2,\t\n" +
|
|
|
+ "A.ZNETWR1,\t\n" +
|
|
|
+ "A.VSBED,\t\n" +
|
|
|
+ "A.VSBED_TXT,\t\n" +
|
|
|
+ "A.MEINS,\t\n" +
|
|
|
+ "B.TRAGR\n" +
|
|
|
+ "FROM \"_SYS_BIC\".\"com.sd/CAL_SALES\"" +
|
|
|
+ "('PLACEHOLDER' = ('$$IP_ENDDATE$$',\n" +
|
|
|
+ "\t '"+DateUtils.dateTime()+"'),\n" +
|
|
|
+ "\t 'PLACEHOLDER' = ('$$IP_STATDATE$$',\n" +
|
|
|
+ "\t '"+DateUtils.getThreeMonthDate()+"')) A LEFT JOIN ERP.MARA B ON B.MATNR = A.MATNR \n" +
|
|
|
+// "\t where A.VTWEG IN ('D9','Y9') AND A.VKORG != '4000'\n" +
|
|
|
+ "\t WHERE A.VTWEG = 'D9' AND A.SPART != '16' AND A.AUART NOT IN ('31','32','33','35','36','39') and A.ZCMGST !='信用通过' or (A.ZCMGST ='信用通过' and A.ABGRU='')\n" +
|
|
|
+ " order by A.VBELN,A.POSNR ");
|
|
|
+// " order by A.VBELN,A.POSNR limit 10000");
|
|
|
+
|
|
|
+ Long startTime = System.currentTimeMillis();
|
|
|
+ ResultSet rs = pstmt.executeQuery();
|
|
|
+ Long endTime = System.currentTimeMillis();
|
|
|
+ log.info("SalesOrder查询用时:" + (endTime - startTime)+"毫秒");
|
|
|
+// this.insertSalesOrderResult(rs);
|
|
|
+ this.createSalesOrderTxt(rs);
|
|
|
+ this.runLoadSalesOrder();
|
|
|
+ this.closeConnection(con, pstmt);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /*批量插入*/
|
|
|
+ private void insertSalesOrderResult(ResultSet rs) throws Exception {
|
|
|
+ Connection conn = null;
|
|
|
+ PreparedStatement pstm =null;
|
|
|
+ PreparedStatement pstm1 =null;
|
|
|
+ try {
|
|
|
+ conn = getMysqlConnection();
|
|
|
+ String sql1 = "TRUNCATE TABLE sap_hana_sales_order";
|
|
|
+ String sql = "INSERT INTO sap_hana_sales_order values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
|
|
|
+ pstm1 = conn.prepareStatement(sql1);
|
|
|
+ pstm1.execute();
|
|
|
+ pstm = conn.prepareStatement(sql);
|
|
|
+ Long startTime = System.currentTimeMillis();
|
|
|
+ conn.setAutoCommit(false);
|
|
|
+
|
|
|
+ if (rs.next()) {
|
|
|
+ long i=0;
|
|
|
+ ResultSetMetaData rsmd = rs.getMetaData();
|
|
|
+ /*循环遍历数据,创建执行批量插入的sql语句*/
|
|
|
+ do {
|
|
|
+ i++;
|
|
|
+ pstm.setString(1, rs.getString("VBELN"));
|
|
|
+ pstm.setString(2, rs.getString("POSNR"));
|
|
|
+ pstm.setString(3, rs.getString("VKORG"));
|
|
|
+ pstm.setString(4, rs.getString("VKORG_TXT"));
|
|
|
+ pstm.setString(5, rs.getString("VTWEG"));
|
|
|
+ pstm.setString(6, rs.getString("KUNNR"));
|
|
|
+ pstm.setString(7, rs.getString("NAME1"));
|
|
|
+ pstm.setString(8, rs.getString("ROUTE"));
|
|
|
+ pstm.setString(9, rs.getString("SPART"));
|
|
|
+ pstm.setString(10, rs.getString("VKGRP"));
|
|
|
+ pstm.setString(11, rs.getString("WERKS"));
|
|
|
+ pstm.setString(12, rs.getString("AUART"));
|
|
|
+ pstm.setString(13, rs.getString("ERDAT"));
|
|
|
+ pstm.setString(14, rs.getString("ERDAT_P"));
|
|
|
+ pstm.setString(15, rs.getString("LFSTA"));
|
|
|
+ pstm.setString(16, rs.getString("MATNR"));
|
|
|
+ pstm.setString(17, rs.getString("ZMAKTXX"));
|
|
|
+ pstm.setString(18, rs.getString("GROES"));
|
|
|
+ pstm.setString(19, "");
|
|
|
+ pstm.setString(20, rs.getString("ZCMFRE"));
|
|
|
+ pstm.setString(21, rs.getString("ZCMGST"));
|
|
|
+ pstm.setString(22, rs.getString("ABGRU"));
|
|
|
+ pstm.setBigDecimal(23, rs.getBigDecimal("ZZMENG"));
|
|
|
+ pstm.setBigDecimal(24, rs.getBigDecimal("ZZMENG2"));
|
|
|
+ pstm.setBigDecimal(25, rs.getBigDecimal("ZNETWR"));
|
|
|
+ pstm.setBigDecimal(26, rs.getBigDecimal("ZRFMNG"));
|
|
|
+ pstm.setBigDecimal(27, rs.getBigDecimal("ZRFMNG2"));
|
|
|
+ pstm.setBigDecimal(28, rs.getBigDecimal("ZNETWR1"));
|
|
|
+ pstm.setString(29, rs.getString("VSBED"));
|
|
|
+ pstm.setString(30, rs.getString("VSBED_TXT"));
|
|
|
+ pstm.addBatch();
|
|
|
+ if (i%10000==0){
|
|
|
+ pstm.executeBatch();
|
|
|
+ }
|
|
|
+ } while (rs.next());
|
|
|
+ } else {
|
|
|
+ log.info("SalesOrder查询数据为空");
|
|
|
+ }
|
|
|
+ pstm.executeBatch();
|
|
|
+ conn.commit();
|
|
|
+ Long endTime = System.currentTimeMillis();
|
|
|
+ log.info("SalesOrder插入用时:" + (endTime - startTime)+"毫秒");
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }finally{
|
|
|
+ if(pstm1!=null){
|
|
|
+ try {
|
|
|
+ pstm1.close();
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(pstm!=null){
|
|
|
+ try {
|
|
|
+ pstm.close();
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(conn!=null){
|
|
|
+ try {
|
|
|
+ conn.close();
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private int createSalesOrderTxt(ResultSet result) throws Exception {
|
|
|
+ File file = null;
|
|
|
+ FileWriter fw = null;
|
|
|
+ Connection conn = null;
|
|
|
+ PreparedStatement pstm =null;
|
|
|
+ int j =0;
|
|
|
+ try {
|
|
|
+ long i =0;
|
|
|
+
|
|
|
+ //创建IO需求的条件,并声明输出路径
|
|
|
+ file = new File((Global.getTemdataPath()+"salesOrder/"));
|
|
|
+ log.info("SalesOrder数据缓存路径:" + Global.getTemdataPath()+"salesOrder/");
|
|
|
+ if(!file.exists()){
|
|
|
+ file.mkdir();
|
|
|
+ }
|
|
|
+
|
|
|
+ file = new File(Global.getTemdataPath()+"salesOrder/"+j+".txt");
|
|
|
+// file = new File("C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\testIO"+j+".txt");
|
|
|
+ if(!file.exists()){
|
|
|
+ file.createNewFile();
|
|
|
+ }else {
|
|
|
+ //取得这个目录下的所有子文件对象
|
|
|
+ File[] files = new File(Global.getTemdataPath()+"salesOrder/").listFiles();
|
|
|
+ //遍历该目录下的文件对象
|
|
|
+ /*for (int y = 0; y < files.length; y++) {
|
|
|
+ if (files[y].isFile()){//删除子文件
|
|
|
+ files[y].delete();
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+ for (File f: files){
|
|
|
+ f.delete();
|
|
|
+ }
|
|
|
+ file.delete();
|
|
|
+ file.createNewFile();
|
|
|
+ }
|
|
|
+ fw = new FileWriter(file);
|
|
|
+ Long startTime = System.currentTimeMillis();
|
|
|
+ while (result.next()){
|
|
|
+
|
|
|
+ fw.write(
|
|
|
+ result.getString("VBELN")
|
|
|
+ +"?"+ result.getString("POSNR")
|
|
|
+ +"?"+ result.getString("VKORG")
|
|
|
+ +"?"+ result.getString("VKORG_TXT")
|
|
|
+ +"?"+ result.getString("VTWEG")
|
|
|
+ +"?"+ result.getString("KUNNR")
|
|
|
+ +"?"+ result.getString("NAME1")
|
|
|
+ +"?"+ result.getString("ROUTE")
|
|
|
+ +"?"+ result.getString("SPART")
|
|
|
+ +"?"+ result.getString("VKGRP")
|
|
|
+ +"?"+ result.getString("WERKS")
|
|
|
+ +"?"+ result.getString("AUART")
|
|
|
+ +"?"+ result.getString("ERDAT")
|
|
|
+ +"?"+ result.getString("ERDAT_P")
|
|
|
+ +"?"+ result.getString("LFSTA")
|
|
|
+ +"?"+ result.getString("MATNR")
|
|
|
+ +"?"+ result.getString("ZMAKTXX")
|
|
|
+ +"?"+ result.getString("GROES")
|
|
|
+ +"?"+ result.getString("TRAGR")
|
|
|
+ +"?"+ result.getString("ZCMFRE")
|
|
|
+ +"?"+ result.getString("ZCMGST")
|
|
|
+ +"?"+ result.getString("ABGRU")
|
|
|
+ +"?"+ checkgetBigDecimal(result.getBigDecimal("ZZMENG"))
|
|
|
+ +"?"+ checkgetBigDecimal(result.getBigDecimal("ZZMENG2"))
|
|
|
+ +"?"+ checkgetBigDecimal(result.getBigDecimal("ZNETWR"))
|
|
|
+ +"?"+ checkgetBigDecimal(result.getBigDecimal("ZRFMNG"))
|
|
|
+ +"?"+ checkgetBigDecimal(result.getBigDecimal("ZRFMNG2"))
|
|
|
+ +"?"+ checkgetBigDecimal(result.getBigDecimal("ZNETWR1"))
|
|
|
+ +"?"+ result.getString("VSBED")
|
|
|
+ +"?"+ result.getString("VSBED_TXT")
|
|
|
+ + "\r\n");
|
|
|
+
|
|
|
+
|
|
|
+ fw.flush();
|
|
|
+ i++;
|
|
|
+ if (i%50000==0){
|
|
|
+ j++;
|
|
|
+ //创建IO需求的条件,并声明输出路径
|
|
|
+ file = new File(Global.getTemdataPath()+"salesOrder/"+j+".txt");
|
|
|
+ if(!file.exists()){
|
|
|
+ file.createNewFile();
|
|
|
+ }else {
|
|
|
+ file.delete();
|
|
|
+ file.createNewFile();
|
|
|
+ }
|
|
|
+ fw = new FileWriter(file);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Long endTime = System.currentTimeMillis();
|
|
|
+ log.info("生成salesOrder-TXT用时:" + (endTime - startTime) + "毫秒");
|
|
|
+
|
|
|
+ conn = getMysqlConnection();
|
|
|
+ //测试表
|
|
|
+// String sql = "TRUNCATE TABLE sap_hana_sales_order";
|
|
|
+ //生产表
|
|
|
+ String sql = "TRUNCATE TABLE meta_hana_sales_order";
|
|
|
+ pstm = conn.prepareStatement(sql);
|
|
|
+ pstm.execute();
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }finally {
|
|
|
+ fw.close();
|
|
|
+ if(pstm!=null){
|
|
|
+ try {
|
|
|
+ pstm.close();
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(conn!=null){
|
|
|
+ try {
|
|
|
+ conn.close();
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return j;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void hanaDeliverOrderSync() throws Exception {
|
|
|
+ Connection con = this.getHanaConnection();
|
|
|
+ PreparedStatement pstmt = con.prepareStatement("SELECT\n" +
|
|
|
+ "\tA.VBELN,\n" +
|
|
|
+ "\tA.POSNR,\n" +
|
|
|
+ "\tB.VGBEL,\n" +
|
|
|
+ "\tB.VGPOS,\n" +
|
|
|
+ "\tB.VKORG,\n" +
|
|
|
+ "\tB.VKORG_TXT,\n" +
|
|
|
+ "\tB.VTWEG,\n" +
|
|
|
+ "\tB.KUNAG,\n" +
|
|
|
+ "\tB.KUNAG_TXT,\n" +
|
|
|
+ "\tB.SPART,\n" +
|
|
|
+ "\tB.VKGRP,\n" +
|
|
|
+ "\tB.WERKS,\n" +
|
|
|
+ "\tB.AUART_S,\n" +
|
|
|
+ "\tB.LFART,\n" +
|
|
|
+ "\tB.MATNR,\n" +
|
|
|
+ "\tB.ZMAKTXX,\n" +
|
|
|
+ "\tB.GROES,\n" +
|
|
|
+ "\treplace(replace(ltrim(rtrim(B.ZSTREET)),' ',''),'\"','') ZSTREET,\n" +
|
|
|
+ "\tB.ERDAT_S,\n" +
|
|
|
+ "\tB.ZERDAT2,\n" +
|
|
|
+ "\tB.ERDAT,\n" +
|
|
|
+ "\tB.WADAT_IST,\n" +
|
|
|
+ "\tB. STATUS,\n" +
|
|
|
+ "\tA.ZKWMENG,\n" +
|
|
|
+ "\tA.NTGEW_VBAP,\n" +
|
|
|
+ "\tA.LFIMG,\n" +
|
|
|
+ "\tA.NTGEW,\n" +
|
|
|
+ "\tA.KZWI4,\n" +
|
|
|
+ "\tB.WADAT_IST,\n" +
|
|
|
+ "\tB.BOLNR,\n" +
|
|
|
+ "\tB.ERZET\n" +
|
|
|
+ "FROM\n" +
|
|
|
+ "\t(\n" +
|
|
|
+ "\t\tSELECT\n" +
|
|
|
+ "\t\t\tVBELN,\n" +
|
|
|
+ "\t\t\tMIN(POSNR) AS POSNR,\n" +
|
|
|
+ "\t\t\tSUM(ZKWMENG) AS ZKWMENG,\n" +
|
|
|
+ "\t\t\tSUM(NTGEW_VBAP) AS NTGEW_VBAP,\n" +
|
|
|
+ "\t\t\tSUM(LFIMG) AS LFIMG,\n" +
|
|
|
+ "\t\t\tSUM(NTGEW) AS NTGEW,\n" +
|
|
|
+ "\t\t\tSUM(KZWI4) AS KZWI4\n" +
|
|
|
+ "\t\tFROM\n" +
|
|
|
+ "\t\t\t\"_SYS_BIC\".\"com.delivery/CAL_DELIVERY\" ('PLACEHOLDER' = ('$$IP_ENDDATE$$',\n" +
|
|
|
+ "\t\t\t\t\t'"+DateUtils.dateTime()+"'\n" +
|
|
|
+ "\t\t\t\t),'PLACEHOLDER' = ('$$IP_STATDATE$$',\n" +
|
|
|
+ "\t\t\t\t\t'"+DateUtils.getThreeMonthDate()+"'\n" +
|
|
|
+ "\t\t\t\t)\n" +
|
|
|
+ "\t\t\t)\n" +
|
|
|
+ "\t\tWHERE\n" +
|
|
|
+ "\t\t\tVTWEG = 'D9'\n" +
|
|
|
+ "\t\tAND SPART != '16'\n" +
|
|
|
+ "\t\tAND AUART_S NOT IN (\n" +
|
|
|
+ "\t\t\t'31',\n" +
|
|
|
+ "\t\t\t'32',\n" +
|
|
|
+ "\t\t\t'33',\n" +
|
|
|
+ "\t\t\t'35',\n" +
|
|
|
+ "\t\t\t'36',\n" +
|
|
|
+ "\t\t\t'39'\n" +
|
|
|
+ "\t\t)\n" +
|
|
|
+ "\t\tGROUP BY\n" +
|
|
|
+ "\t\t\tVBELN,\n" +
|
|
|
+ "\t\t\tVGBEL,\n" +
|
|
|
+ "\t\t\tVGPOS\n" +
|
|
|
+ "\t\tORDER BY\n" +
|
|
|
+ "\t\t\tVBELN,\n" +
|
|
|
+ "\t\t\tPOSNR\n" +
|
|
|
+ "\t ) A\n" +
|
|
|
+ "LEFT JOIN \"_SYS_BIC\".\"com.delivery/CAL_DELIVERY\" ('PLACEHOLDER' = ('$$IP_ENDDATE$$',\n" +
|
|
|
+ "\t\t'"+DateUtils.dateTime()+"'\n" +
|
|
|
+ "\t),'PLACEHOLDER' = ('$$IP_STATDATE$$',\n" +
|
|
|
+ "\t\t'"+DateUtils.getThreeMonthDate()+"'\n" +
|
|
|
+ "\t)\n" +
|
|
|
+ ") B ON A.VBELN = B.VBELN\n" +
|
|
|
+ "AND A.POSNR = B.POSNR\n"+
|
|
|
+ "\t\tORDER BY\n" +
|
|
|
+ "\t\t\tA.VBELN,\n" +
|
|
|
+ "\t\t\tA.POSNR\n" +
|
|
|
+ " ");
|
|
|
+// " limit 10000");
|
|
|
+
|
|
|
+ Long startTime = System.currentTimeMillis();
|
|
|
+ ResultSet rs = pstmt.executeQuery();
|
|
|
+ Long endTime = System.currentTimeMillis();
|
|
|
+ log.info("DeliverOrder查询用时:" + (endTime - startTime)+"毫秒");
|
|
|
+// this.insertDeliverOrderResult(rs);
|
|
|
+ this.createDeliverOrderTxt(rs);
|
|
|
+ this.runLoadDeliverOrder();
|
|
|
+ this.closeConnection(con, pstmt);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /*public void hanaDeliverOrderSync() throws Exception {
|
|
|
+ Connection con = this.getHanaConnection();
|
|
|
+ PreparedStatement pstmt = con.prepareStatement("SELECT\t\n" +
|
|
|
+ "\tVBELN,\t\n" +
|
|
|
+ "\tPOSNR,\t\n" +
|
|
|
+ "\tVGBEL,\t\n" +
|
|
|
+ "\tVGPOS,\t\n" +
|
|
|
+ "\tVKORG,\t\n" +
|
|
|
+ "\tVKORG_TXT,\t\n" +
|
|
|
+ "\tVTWEG,\t\n" +
|
|
|
+ "\tKUNAG,\t\n" +
|
|
|
+ "\tKUNAG_TXT,\t\n" +
|
|
|
+ "\tSPART,\t\n" +
|
|
|
+ "\tVKGRP,\t\n" +
|
|
|
+ "\tWERKS,\t\n" +
|
|
|
+ "\tAUART_S,\t\n" +
|
|
|
+ "\tLFART,\t\n" +
|
|
|
+ "\tMATNR,\t\n" +
|
|
|
+ "\tZMAKTXX,\t\n" +
|
|
|
+ "\tGROES,\t\n" +
|
|
|
+ "\tZSTREET,\t\n" +
|
|
|
+ "\tERDAT_S,\t\n" +
|
|
|
+ "\tZERDAT2,\t\n" +
|
|
|
+ "\tERDAT,\t\n" +
|
|
|
+ "\tWADAT_IST,\t\n" +
|
|
|
+ "\tSTATUS,\t\n" +
|
|
|
+ "\tZKWMENG,\t\n" +
|
|
|
+ "\tNTGEW_VBAP,\t\n" +
|
|
|
+ "\tLFIMG,\t\n" +
|
|
|
+ "\tVRKME,\t\n" +
|
|
|
+ "\tNTGEW,\t\n" +
|
|
|
+ "\tKZWI4,\t\n" +
|
|
|
+ "\tBOLNR\t\n" +
|
|
|
+ "\tERZET\t\n" +
|
|
|
+ "FROM \"_SYS_BIC\".\"com.delivery/CAL_DELIVERY\"('PLACEHOLDER' = ('$$IP_ENDDATE$$',\t\n" +
|
|
|
+ "\t '"+DateUtils.dateTime()+"'),\n" +
|
|
|
+ "\t 'PLACEHOLDER' = ('$$IP_STATDATE$$',\n" +
|
|
|
+ "\t '"+DateUtils.getThreeMonthDate()+"')) \n" +
|
|
|
+ "\t where VTWEG IN ('D9','Y9') AND VKORG != '4000'" +
|
|
|
+ " ");
|
|
|
+
|
|
|
+ Long startTime = System.currentTimeMillis();
|
|
|
+ ResultSet rs = pstmt.executeQuery();
|
|
|
+ Long endTime = System.currentTimeMillis();
|
|
|
+ log.info("DeliverOrder查询用时:" + (endTime - startTime)+"毫秒");
|
|
|
+// this.insertDeliverOrderResult(rs);
|
|
|
+ this.createDeliverOrderTxt(rs);
|
|
|
+ this.runLoadDeliverOrder();
|
|
|
+ this.closeConnection(con, pstmt);
|
|
|
+
|
|
|
+ }*/
|
|
|
+
|
|
|
+ private int createDeliverOrderTxt(ResultSet result) throws Exception {
|
|
|
+ File file = null;
|
|
|
+ FileWriter fw = null;
|
|
|
+ Connection conn = null;
|
|
|
+ PreparedStatement pstm =null;
|
|
|
+ int j =0;
|
|
|
+ try {
|
|
|
+ long i =0;
|
|
|
+
|
|
|
+ //创建IO需求的条件,并声明输出路径
|
|
|
+ file = new File((Global.getTemdataPath()+"deliverOrder/"));
|
|
|
+ log.info("deliverOrder数据缓存路径:" + Global.getTemdataPath()+"deliverOrder/");
|
|
|
+ if(!file.exists()){
|
|
|
+ file.mkdir();
|
|
|
+ }
|
|
|
+
|
|
|
+ file = new File(Global.getTemdataPath()+"deliverOrder/"+j+".txt");
|
|
|
+// file = new File("C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\testIO"+j+".txt");
|
|
|
+ if(!file.exists()){
|
|
|
+ file.createNewFile();
|
|
|
+ }else {
|
|
|
+ //取得这个目录下的所有子文件对象
|
|
|
+ File[] files = new File(Global.getTemdataPath()+"deliverOrder/").listFiles();
|
|
|
+ //遍历该目录下的文件对象
|
|
|
+ for (File f: files){
|
|
|
+ f.delete();
|
|
|
+ }
|
|
|
+ file.delete();
|
|
|
+ file.createNewFile();
|
|
|
+ }
|
|
|
+ fw = new FileWriter(file);
|
|
|
+ Long startTime = System.currentTimeMillis();
|
|
|
+ while (result.next()){
|
|
|
+
|
|
|
+ fw.write(
|
|
|
+ result.getString("VBELN")
|
|
|
+ +"?"+result.getString("POSNR")
|
|
|
+ +"?"+result.getString("VGBEL")
|
|
|
+ +"?"+result.getString("VGPOS")
|
|
|
+ +"?"+result.getString("VKORG")
|
|
|
+ +"?"+result.getString("VKORG_TXT")
|
|
|
+ +"?"+result.getString("VTWEG")
|
|
|
+ +"?"+result.getString("KUNAG")
|
|
|
+ +"?"+result.getString("KUNAG_TXT")
|
|
|
+ +"?"+result.getString("SPART")
|
|
|
+ +"?"+result.getString("VKGRP")
|
|
|
+ +"?"+result.getString("WERKS")
|
|
|
+ +"?"+result.getString("AUART_S")
|
|
|
+ +"?"+result.getString("LFART")
|
|
|
+ +"?"+result.getString("MATNR")
|
|
|
+ +"?"+result.getString("ZMAKTXX")
|
|
|
+ +"?"+result.getString("GROES")
|
|
|
+ +"?"+""
|
|
|
+ +"?"+""
|
|
|
+ +"?"+result.getString("ZSTREET")
|
|
|
+ +"?"+result.getString("ERDAT_S")
|
|
|
+ +"?"+result.getString("ZERDAT2")
|
|
|
+ +"?"+result.getString("ERDAT")
|
|
|
+ +"?"+result.getString("WADAT_IST")
|
|
|
+ +"?"+""
|
|
|
+ +"?"+""
|
|
|
+ +"?"+""
|
|
|
+ +"?"+result.getString("STATUS")
|
|
|
+ +"?"+result.getBigDecimal("ZKWMENG")
|
|
|
+ +"?"+result.getBigDecimal("NTGEW_VBAP")
|
|
|
+ +"?"+result.getBigDecimal("LFIMG")
|
|
|
+ +"?"+result.getBigDecimal("NTGEW")
|
|
|
+ +"?"+result.getBigDecimal("KZWI4")
|
|
|
+ +"?"+result.getString("WADAT_IST")
|
|
|
+ +"?"+result.getString("BOLNR")
|
|
|
+ +"?"+result.getString("ERZET")
|
|
|
+ + "\r\n");
|
|
|
+
|
|
|
+ fw.flush();
|
|
|
+ i++;
|
|
|
+ if (i%50000==0){
|
|
|
+ j++;
|
|
|
+ //创建IO需求的条件,并声明输出路径
|
|
|
+ file = new File(Global.getTemdataPath()+"deliverOrder/"+j+".txt");
|
|
|
+ if(!file.exists()){
|
|
|
+ file.createNewFile();
|
|
|
+ }else {
|
|
|
+ file.delete();
|
|
|
+ file.createNewFile();
|
|
|
+ }
|
|
|
+ fw = new FileWriter(file);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Long endTime = System.currentTimeMillis();
|
|
|
+ log.info("生成deliverOrder-TXT用时:" + (endTime - startTime) + "毫秒");
|
|
|
+
|
|
|
+ conn = getMysqlConnection();
|
|
|
+ //测试表
|
|
|
+// String sql = "TRUNCATE TABLE sap_hana_deliver_order";
|
|
|
+ //生产表
|
|
|
+ String sql = "TRUNCATE TABLE meta_hana_deliver_order";
|
|
|
+ pstm = conn.prepareStatement(sql);
|
|
|
+ pstm.execute();
|
|
|
+ }catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }finally {
|
|
|
+ fw.close();
|
|
|
+ if(pstm!=null){
|
|
|
+ try {
|
|
|
+ pstm.close();
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(conn!=null){
|
|
|
+ try {
|
|
|
+ conn.close();
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return j;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*批量插入*/
|
|
|
+ private void insertDeliverOrderResult(ResultSet rs) throws Exception {
|
|
|
+ Connection conn = null;
|
|
|
+ PreparedStatement pstm =null;
|
|
|
+ PreparedStatement pstm1 =null;
|
|
|
+ try {
|
|
|
+ conn = getMysqlConnection();
|
|
|
+ String sql1 = "TRUNCATE TABLE sap_hana_deliver_order";
|
|
|
+ String sql = "INSERT INTO sap_hana_deliver_order values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
|
|
|
+ pstm1 = conn.prepareStatement(sql1);
|
|
|
+ pstm1.execute();
|
|
|
+ pstm = conn.prepareStatement(sql);
|
|
|
+ Long startTime = System.currentTimeMillis();
|
|
|
+ conn.setAutoCommit(false);
|
|
|
+
|
|
|
+ if (rs.next()) {
|
|
|
+ long i =0;
|
|
|
+ ResultSetMetaData rsmd = rs.getMetaData();
|
|
|
+ int colNum = rsmd.getColumnCount();
|
|
|
+ /*循环遍历数据,创建执行批量插入的sql语句*/
|
|
|
+ do {
|
|
|
+ pstm.setString(1, rs.getString("VBELN"));
|
|
|
+ pstm.setString(2, rs.getString("POSNR"));
|
|
|
+ pstm.setString(3, rs.getString("VGBEL"));
|
|
|
+ pstm.setString(4, rs.getString("VGPOS"));
|
|
|
+ pstm.setString(5, rs.getString("VKORG"));
|
|
|
+ pstm.setString(6, rs.getString("VKORG_TXT"));
|
|
|
+ pstm.setString(7, rs.getString("VTWEG"));
|
|
|
+ pstm.setString(8, rs.getString("KUNAG"));
|
|
|
+ pstm.setString(9, rs.getString("KUNAG_TXT"));
|
|
|
+ pstm.setString(10, rs.getString("SPART"));
|
|
|
+ pstm.setString(11, rs.getString("VKGRP"));
|
|
|
+ pstm.setString(12, rs.getString("WERKS"));
|
|
|
+ pstm.setString(13, rs.getString("AUART_S"));
|
|
|
+ pstm.setString(14, rs.getString("LFART"));
|
|
|
+ pstm.setString(15, rs.getString("MATNR"));
|
|
|
+ pstm.setString(16, rs.getString("ZMAKTXX"));
|
|
|
+ pstm.setString(17, rs.getString("GROES"));
|
|
|
+ pstm.setString(18, "");
|
|
|
+ pstm.setString(19, "");
|
|
|
+ pstm.setString(20, rs.getString("ZSTREET"));
|
|
|
+ pstm.setString(21, rs.getString("ERDAT_S"));
|
|
|
+ pstm.setString(22, rs.getString("ZERDAT2"));
|
|
|
+ pstm.setString(23, rs.getString("ERDAT"));
|
|
|
+ pstm.setString(24, rs.getString("WADAT_IST"));
|
|
|
+ pstm.setString(25, "");
|
|
|
+ pstm.setString(26, "");
|
|
|
+ pstm.setString(27, "");
|
|
|
+ pstm.setString(28, rs.getString("STATUS"));
|
|
|
+ pstm.setBigDecimal(29, rs.getBigDecimal("ZKWMENG"));
|
|
|
+ pstm.setBigDecimal(30, rs.getBigDecimal("NTGEW_VBAP"));
|
|
|
+ pstm.setBigDecimal(31, rs.getBigDecimal("LFIMG"));
|
|
|
+ pstm.setBigDecimal(32, rs.getBigDecimal("NTGEW"));
|
|
|
+ pstm.setBigDecimal(33, rs.getBigDecimal("KZWI4"));
|
|
|
+ pstm.setString(34, "");
|
|
|
+ pstm.addBatch();
|
|
|
+ if (i%10000==0){
|
|
|
+ pstm.executeBatch();
|
|
|
+ }
|
|
|
+ } while (rs.next());
|
|
|
+ } else {
|
|
|
+ log.info("DeliverOrder查询数据为空");
|
|
|
+ }
|
|
|
+ pstm.executeBatch();
|
|
|
+ conn.commit();
|
|
|
+ Long endTime = System.currentTimeMillis();
|
|
|
+ log.info("DeliverOrder插入用时:" + (endTime - startTime)+"毫秒");
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }finally{
|
|
|
+ if(pstm1!=null){
|
|
|
+ try {
|
|
|
+ pstm1.close();
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(pstm!=null){
|
|
|
+ try {
|
|
|
+ pstm.close();
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(conn!=null){
|
|
|
+ try {
|
|
|
+ conn.close();
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public int bulkLoadFromInputStream(String loadDataSql,
|
|
|
+ InputStream dataStream) throws Exception {
|
|
|
+ if(dataStream==null){
|
|
|
+ log.info("InputStream is null ,No data is imported");
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ Connection conn = null;
|
|
|
+ conn = this.getMysqlConnection();
|
|
|
+ PreparedStatement statement = conn.prepareStatement(loadDataSql);
|
|
|
+
|
|
|
+ int result = 0;
|
|
|
+
|
|
|
+ if (statement.isWrapperFor(com.mysql.jdbc.Statement.class)) {
|
|
|
+
|
|
|
+ com.mysql.jdbc.PreparedStatement mysqlStatement = statement
|
|
|
+ .unwrap(com.mysql.jdbc.PreparedStatement.class);
|
|
|
+
|
|
|
+ mysqlStatement.setLocalInfileInputStream(dataStream);
|
|
|
+ result = mysqlStatement.executeUpdate();
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void runLoadSalesOrder() throws Exception{
|
|
|
+ //测试表
|
|
|
+// String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table sap_hana_sales_order fields terminated by '?' lines terminated by '\\n'";
|
|
|
+ //生产表
|
|
|
+ String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table meta_hana_sales_order fields terminated by '?' lines terminated by '\\n'";
|
|
|
+ try {
|
|
|
+ long beginTime=System.currentTimeMillis();
|
|
|
+ int rows=this.bulkLoadFromInputStream(testSql, mergeGetStream(new File((Global.getTemdataPath()+"salesOrder/"))));
|
|
|
+ long endTime=System.currentTimeMillis();
|
|
|
+ log.info("importing salesOrder := "+rows+" rows data into mysql and cost "+(endTime-beginTime)+" ms!");
|
|
|
+ String result = HttpUtils.sendGet(orderGetDataHook);
|
|
|
+ log.info("清空salesOrder缓存:"+result);
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void runLoadDeliverOrder() throws Exception{
|
|
|
+ //测试表
|
|
|
+// String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table sap_hana_deliver_order fields terminated by '?' lines terminated by '\\n'";
|
|
|
+ //生产表
|
|
|
+ String testSql = "LOAD DATA LOCAL INFILE 'testIO.txt' into table meta_hana_deliver_order fields terminated by '?' lines terminated by '\\n'";
|
|
|
+ try {
|
|
|
+ long beginTime=System.currentTimeMillis();
|
|
|
+ int rows=this.bulkLoadFromInputStream(testSql, mergeGetStream(new File((Global.getTemdataPath()+"deliverOrder/"))));
|
|
|
+ long endTime=System.currentTimeMillis();
|
|
|
+ log.info("importing deliverOrder := "+rows+" rows data into mysql and cost "+(endTime-beginTime)+" ms!");
|
|
|
+ String result = HttpUtils.sendGet(deliverGetDataHook);
|
|
|
+ log.info("清空deliverOrder缓存:"+result);
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static InputStream mergeGetStream(File sourceFile) throws FileNotFoundException {
|
|
|
+ String[] fileList = sourceFile.list();
|
|
|
+ List<FileInputStream> fileInputStreams = new ArrayList<>();
|
|
|
+ if (fileList != null) {
|
|
|
+ for (String fileName : fileList) {
|
|
|
+ File file = new File(sourceFile.getPath() + "/" + fileName);
|
|
|
+ fileInputStreams.add(new FileInputStream(file));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 通过流工具类,获取一个枚举对象
|
|
|
+ Enumeration<FileInputStream> en = Collections.enumeration(fileInputStreams);
|
|
|
+ // 源
|
|
|
+ SequenceInputStream sis = new SequenceInputStream(en);
|
|
|
+ return sis;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Connection getHanaConnection() throws Exception {
|
|
|
+ return getConnection(hanaDriver,hanaUrl,hanaUser,hanaPwd);
|
|
|
+ }
|
|
|
+ private Connection getMysqlConnection() throws Exception {
|
|
|
+ return getConnection(mysqlDriver,mysqlUrl,mysqlUser,mysqlPwd);
|
|
|
+ }
|
|
|
+ private Connection getConnection(String driver, String url, String user, String password) throws Exception {
|
|
|
+ Class.forName(driver);
|
|
|
+
|
|
|
+ return DriverManager.getConnection(url, user, password);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private BigDecimal checkgetBigDecimal(BigDecimal bg){
|
|
|
+ if (bg==null){
|
|
|
+ return new BigDecimal("0");
|
|
|
+ }else{
|
|
|
+ return bg;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void closeConnection(Connection con, Statement stmt)
|
|
|
+
|
|
|
+ throws Exception {
|
|
|
+ if (stmt != null) {
|
|
|
+ stmt.close();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (con != null) {
|
|
|
+ con.close();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|