using SocketTransfer.SDK; using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace SocketTransfer { public class RemoteDataThread { protected string _OracleConnStrBD = ConfigurationManager.AppSettings["OracleConnStr"].ToString(); //本地连接 protected string _OracleConnStrHQ = ConfigurationManager.AppSettings["HostIP"].ToString().Split(',')[1]; //远程连接 protected OracleHelper _OracleBDHelper = null; //本地连接 protected OracleHelper _OracleHQHelper = null; //远程连接 private int _MaxLoadBearing = 400; //最大SQL执行量 private Dictionary _Data = null; //线程状态 System.Windows.Forms.Timer _Timer = new System.Windows.Forms.Timer(); #region 方法 -> 初始化参数 public RemoteDataThread() { try { //配置线程池 ThreadPool.SetMaxThreads(5, 5); if (_OracleBDHelper == null) { _OracleBDHelper = new OracleHelper(_OracleConnStrBD.Split(',')[0], _OracleConnStrBD.Split(',')[1], _OracleConnStrBD.Split(',')[2], _OracleConnStrBD.Split(',')[3]); } if (_OracleHQHelper == null) { _OracleHQHelper = new OracleHelper(_OracleConnStrHQ.Split(',')[0], "orcl", "HIGHWAY_EXCHANGE", "qrwl"); } } catch (Exception ex) { LogHelper.WriteReceiveLog("RemoteDataThread_RemoteDataThread:" + ex.Message, DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_RemoteDataThread)"); } } #endregion #region 方法 -> 启动 /// /// 启动 /// /// 秒 public void onStart(int second = 60) { try { //启动定时器 _Timer.Interval = second * 1000; _Timer.Tick += new System.EventHandler(this.timer1_Tick); _Timer.Start(); } catch (Exception ex) { LogHelper.WriteReceiveLog("RemoteDataThread_onStart:" + ex.Message + "", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_onStart)"); } } #endregion #region 方法 -> 启动所有线程 private void onStartThread() { try { int workerThreads; int portThreads; ThreadPool.GetAvailableThreads(out workerThreads, out portThreads); if (_Data == null) { _Data = new Dictionary(); _Data.Add(TableNameType.T_SHOPMESSAGE, true); _Data.Add(TableNameType.T_COMMODITYEX, true); _Data.Add(TableNameType.T_SELLWORKER, true); _Data.Add(TableNameType.T_HOTKEYSET, true); _Data.Add(TableNameType.STATISTICS, true); } if (workerThreads > 0) { System.Diagnostics.Debug.WriteLine("待命当前可用线程数:" + workerThreads + ",状态:" + _Data[TableNameType.T_SHOPMESSAGE], "onStartThread"); #region 门店 if (_Data.Keys.Contains(TableNameType.T_SHOPMESSAGE) && _Data[TableNameType.T_SHOPMESSAGE]) { System.Diagnostics.Debug.WriteLine("启动", "Run_T_SHOPMESSAGE"); _Data[TableNameType.T_SHOPMESSAGE] = false;//更新状态 ThreadPool.QueueUserWorkItem(Run_T_SHOPMESSAGE, null); } #endregion #region 收银员 if (_Data.Keys.Contains(TableNameType.T_SELLWORKER) && _Data[TableNameType.T_SELLWORKER]) { System.Diagnostics.Debug.WriteLine("启动", "Run_T_SELLWORKER"); _Data[TableNameType.T_SELLWORKER] = false;//更新状态 ThreadPool.QueueUserWorkItem(Run_T_SELLWORKER, null); } #endregion #region 商品 if (_Data.Keys.Contains(TableNameType.T_COMMODITYEX) && _Data[TableNameType.T_COMMODITYEX]) { System.Diagnostics.Debug.WriteLine("启动", "Run_T_COMMODITYEX"); _Data[TableNameType.T_COMMODITYEX] = false; //更新状态 ThreadPool.QueueUserWorkItem(Run_T_COMMODITYEX, null); } #endregion #region 快捷键 if (_Data.Keys.Contains(TableNameType.T_HOTKEYSET) && _Data[TableNameType.T_HOTKEYSET]) { System.Diagnostics.Debug.WriteLine("启动", "Run_T_HOTKEYSET"); _Data[TableNameType.T_HOTKEYSET] = false; //更新状态 ThreadPool.QueueUserWorkItem(Run_T_HOTKEYSET, null); } #endregion #region 统计 if (_Data.Keys.Contains(TableNameType.STATISTICS) && _Data[TableNameType.STATISTICS]) { System.Diagnostics.Debug.WriteLine("启动", "Run_Statistics"); _Data[TableNameType.STATISTICS] = false; //更新状态 ThreadPool.QueueUserWorkItem(Run_Statistics, null); } #endregion } } catch (Exception ex) { LogHelper.WriteReceiveLog("RemoteDataThread_onStartThread:" + ex.Message + "", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_onStartThread)"); } #region 删除七天前的日志 try { string FilePath = System.Windows.Forms.Application.StartupPath; DirectoryInfo _DirectoryInfo = new DirectoryInfo(FilePath); FileInfo[] files = _DirectoryInfo.GetFiles("*.log"); foreach (FileInfo _FileInfo in files) { if (_FileInfo.Name.Contains("RemoteDataThread") && _FileInfo.LastWriteTime < DateTime.Now.Date.AddDays(-7)) { _FileInfo.Delete(); } } } catch { } #endregion } #endregion #region 方法 -> 下发数据线程集合 #region 方法 -> T_SHOPMESSAGE 线程 门店 private void Run_T_SHOPMESSAGE(object obj) { string SqlString = null; string DelString = null; DataSet _DataSetBD = null; DataSet _DataSetHQ = null; DataSet _DataTemp = null; List SQLStringArray = null; List DelStringArray = null; try { Thread.Sleep(100);//启动线程业务前为CPU争取休息时间,100毫秒不能再多 foreach (DataRow _DataRow in _OracleBDHelper.ExcuteSqlGetDataSet( "SELECT SERVERPARTCODE FROM HIGHWAY_EXCHANGE.T_SYSCODE").Tables[0].Rows) { _DataSetHQ = _OracleHQHelper.ExcuteSqlGetDataSet( SelectServerData(TableNameType.T_SHOPMESSAGE, _DataRow["SERVERPARTCODE"].ToString())); if (_DataSetHQ != null && _DataSetHQ.Tables.Count > 0) { _DataTemp = SplitDataTable(_DataSetHQ.Tables[0], _MaxLoadBearing); } if (_DataTemp == null || _DataTemp.Tables.Count == 0) { continue; } foreach (DataTable _DataTableHQ in _DataTemp.Tables) { if (SQLStringArray == null) { SQLStringArray = new List(); } else { SQLStringArray.Clear(); } if (DelStringArray == null) { DelStringArray = new List(); } else { DelStringArray.Clear(); } _DataSetBD = _OracleBDHelper.ExcuteSqlGetDataSet( SelectServerData(TableNameType.T_SHOPMESSAGE, _DataRow["SERVERPARTCODE"].ToString())); LogHelper.WriteReceiveLog("T_SHOPMESSAGE:-------批次插入开始-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SHOPMESSAGE)"); foreach (DataRow _DataRowHQ in _DataTableHQ.Rows) { LogHelper.WriteReceiveLog("T_SHOPMESSAGE:" + string.Join(",", _DataRowHQ.ItemArray), DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SHOPMESSAGE)"); try { SqlString = " SERVERPARTCODE = '" + _DataRowHQ["SERVERPARTCODE"].ToString() + "' AND SERVERPARTSHOP_ID = " + _DataRowHQ["SERVERPARTSHOP_ID"].ToString(); if (_DataSetBD.Tables[0].Select(SqlString).Length > 0) { SqlString = "SERVERPARTCODE = '" + _DataRowHQ["SERVERPARTCODE"].ToString() + "' AND SERVERPARTSHOP_ID = " + _DataRowHQ["SERVERPARTSHOP_ID"].ToString() + " AND DOWNLOADDATE < '" + _DataRowHQ["DOWNLOADDATE"].ToString() + "'"; if (_DataSetBD.Tables[0].Select(SqlString).Length > 0) { SqlString = "DELETE FROM HIGHWAY_EXCHANGE.T_SHOPMESSAGE WHERE SERVERPARTCODE = '" + _DataRowHQ["SERVERPARTCODE"].ToString() + "' AND SERVERPARTSHOP_ID = " + _DataRowHQ["SERVERPARTSHOP_ID"].ToString(); SQLStringArray.Add(SqlString); SqlString = string.Format( @"INSERT INTO HIGHWAY_EXCHANGE.T_SHOPMESSAGE ( SHOPMESSAGE_ID,SERVERPARTSHOP_ID,SERVERPARTCODE,SHOPCODE, SHOPNAME,BUSINESSTYPE,DOWNLOADDATE,FLAG,VALID) VALUES ({0},{1},{2},{3},{4},{5},{6},{7},{8})", IsArrayType(ValueType.Int, _DataRowHQ["SHOPMESSAGE_ID"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["SERVERPARTSHOP_ID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SERVERPARTCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SHOPCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SHOPNAME"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["BUSINESSTYPE"].ToString()), IsArrayType(ValueType.DateTime, _DataRowHQ["DOWNLOADDATE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["FLAG"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["VALID"].ToString())); SQLStringArray.Add(SqlString); } } else { //不存在添加 SqlString = string.Format( @"INSERT INTO HIGHWAY_EXCHANGE.T_SHOPMESSAGE ( SHOPMESSAGE_ID,SERVERPARTSHOP_ID,SERVERPARTCODE,SHOPCODE, SHOPNAME,BUSINESSTYPE,DOWNLOADDATE,FLAG,VALID) VALUES ({0},{1},{2},{3},{4},{5},{6},{7},{8})", IsArrayType(ValueType.Int, _DataRowHQ["SHOPMESSAGE_ID"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["SERVERPARTSHOP_ID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SERVERPARTCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SHOPCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SHOPNAME"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["BUSINESSTYPE"].ToString()), IsArrayType(ValueType.DateTime, _DataRowHQ["DOWNLOADDATE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["FLAG"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["VALID"].ToString())); SQLStringArray.Add(SqlString); } //删除语句集合 DelString = string.Format(@"DELETE FROM HIGHWAY_EXCHANGE.T_SHOPMESSAGE WHERE SHOPMESSAGE_ID = {0} AND SERVERPARTCODE = {1}", IsArrayType(ValueType.Int, _DataRowHQ["SHOPMESSAGE_ID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SERVERPARTCODE"].ToString())); DelStringArray.Add(DelString); } catch (Exception ex) { LogHelper.WriteReceiveLog("T_SHOPMESSAGE:(SERVERPARTCODE:" + _DataRowHQ["SERVERPARTCODE"].ToString() + ",SHOPMESSAGE_ID:" + _DataRowHQ["SHOPMESSAGE_ID"].ToString() + "," + ex.Message + ")", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SHOPMESSAGE)"); } } //分批执行语句 if (SQLStringArray != null && SQLStringArray.Count > 0) { _OracleBDHelper.ExecuteSqlTran(SQLStringArray); } LogHelper.WriteReceiveLog("T_SHOPMESSAGE:-------批次插入结束-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SHOPMESSAGE)"); LogHelper.WriteReceiveLog("T_SHOPMESSAGE:-------批次删除开始-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SHOPMESSAGE)"); if (DelStringArray != null && DelStringArray.Count > 0) { //删除总部 _OracleHQHelper.ExecuteSqlTran(DelStringArray); } LogHelper.WriteReceiveLog("T_SHOPMESSAGE:-------批次删除结束-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SHOPMESSAGE)"); } } } catch (Exception ex) { LogHelper.WriteReceiveLog("T_SHOPMESSAGE:" + ex.Message + "", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SHOPMESSAGE)"); } finally { try { if (_Data != null) { //更新状态 _Data[TableNameType.T_SHOPMESSAGE] = true; } } catch { } //内存释放 SqlString = null; DelString = null; _DataSetBD = null; _DataSetHQ = null; _DataTemp = null; SQLStringArray = null; DelStringArray = null; MemoryManagement.FlushMemory(); } } #endregion. #region 方法 -> T_SELLWORKER 线程 收银员 private void Run_T_SELLWORKER(object obj) { string SqlString = null; string DelString = null; DataSet _DataSetBD = null; DataSet _DataSetHQ = null; DataSet _DataTemp = null; List SQLStringArray = null; List DelStringArray = null; try { Thread.Sleep(100);//启动线程业务前为CPU争取休息时间,100毫秒不能再多 foreach (DataRow _DataRow in _OracleBDHelper.ExcuteSqlGetDataSet( "SELECT SERVERPARTCODE FROM HIGHWAY_EXCHANGE.T_SYSCODE").Tables[0].Rows) { _DataSetHQ = _OracleHQHelper.ExcuteSqlGetDataSet( SelectServerData(TableNameType.T_SELLWORKER, _DataRow["SERVERPARTCODE"].ToString())); if (_DataSetHQ != null && _DataSetHQ.Tables.Count > 0) { _DataTemp = SplitDataTable(_DataSetHQ.Tables[0], _MaxLoadBearing); } if (_DataTemp == null || _DataTemp.Tables.Count == 0) { continue; } foreach (DataTable _DataTableHQ in _DataTemp.Tables) { if (SQLStringArray == null) { SQLStringArray = new List(); } else { SQLStringArray.Clear(); } if (DelStringArray == null) { DelStringArray = new List(); } else { DelStringArray.Clear(); } _DataSetBD = _OracleBDHelper.ExcuteSqlGetDataSet( SelectServerData(TableNameType.T_SELLWORKER, _DataRow["SERVERPARTCODE"].ToString())); LogHelper.WriteReceiveLog("T_SELLWORKER:-------批次插入开始-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SELLWORKER)"); foreach (DataRow _DataRowHQ in _DataTableHQ.Rows) { LogHelper.WriteReceiveLog("T_SELLWORKER:" + string.Join(",", _DataRowHQ.ItemArray), DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SELLWORKER)"); try { SqlString = " SERVERPARTCODE = '" + _DataRowHQ["SERVERPARTCODE"].ToString() + "' AND SELLWORKERCODE = '" + _DataRowHQ["SELLWORKERCODE"].ToString() + "'"; if (_DataSetBD.Tables[0].Select(SqlString).Length > 0) { SqlString = " SERVERPARTCODE = '" + _DataRowHQ["SERVERPARTCODE"].ToString() + "' AND SELLWORKERCODE = '" + _DataRowHQ["SELLWORKERCODE"].ToString() + "' AND DOWNLOADDATE < '" + _DataRowHQ["DOWNLOADDATE"].ToString() + "'"; if (_DataSetBD.Tables[0].Select(SqlString).Length > 0) { SqlString = "DELETE FROM HIGHWAY_EXCHANGE.T_SELLWORKER WHERE SERVERPARTCODE = '" + _DataRowHQ["SERVERPARTCODE"].ToString() + "' AND SELLWORKERCODE = '" + _DataRowHQ["SELLWORKERCODE"].ToString() + "'"; SQLStringArray.Add(SqlString); SqlString = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_SELLWORKER (SELLWORKER_ID, SERVERPARTCODE,SELLWORKERCODE,SELLWORKERNAME,PROWERRIGHT,SHOPCODE,DOWNLOADDATE, FLAG,VALID,SELLWORKERPASSWORD,DISCOUNT_RATE) VALUES ({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10})", IsArrayType(ValueType.Int, _DataRowHQ["SELLWORKER_ID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SERVERPARTCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SELLWORKERCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SELLWORKERNAME"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["PROWERRIGHT"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SHOPCODE"].ToString()), IsArrayType(ValueType.DateTime, _DataRowHQ["DOWNLOADDATE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["FLAG"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["VALID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SELLWORKERPASSWORD"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["DISCOUNT_RATE"].ToString())); SQLStringArray.Add(SqlString); } } else { //不存在添加 SqlString = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_SELLWORKER (SELLWORKER_ID, SERVERPARTCODE,SELLWORKERCODE,SELLWORKERNAME,PROWERRIGHT,SHOPCODE,DOWNLOADDATE, FLAG,VALID,SELLWORKERPASSWORD,DISCOUNT_RATE) VALUES ({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10})", IsArrayType(ValueType.Int, _DataRowHQ["SELLWORKER_ID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SERVERPARTCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SELLWORKERCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SELLWORKERNAME"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["PROWERRIGHT"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SHOPCODE"].ToString()), IsArrayType(ValueType.DateTime, _DataRowHQ["DOWNLOADDATE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["FLAG"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["VALID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SELLWORKERPASSWORD"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["DISCOUNT_RATE"].ToString())); SQLStringArray.Add(SqlString); } //删除语句集合 DelString = string.Format(@"DELETE FROM HIGHWAY_EXCHANGE.T_SELLWORKER WHERE SELLWORKER_ID = {0} AND SERVERPARTCODE = {1}", IsArrayType(ValueType.Int, _DataRowHQ["SELLWORKER_ID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SERVERPARTCODE"].ToString())); DelStringArray.Add(DelString); } catch (Exception ex) { LogHelper.WriteReceiveLog("T_SELLWORKER:(SERVERPARTCODE:" + _DataRowHQ["SERVERPARTCODE"].ToString() + ",SELLWORKER_ID:" + _DataRowHQ["SELLWORKER_ID"].ToString() + "," + ex.Message + ")", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SELLWORKER)"); } } //分批执行语句 if (SQLStringArray != null && SQLStringArray.Count > 0) { _OracleBDHelper.ExecuteSqlTran(SQLStringArray); } LogHelper.WriteReceiveLog("T_SELLWORKER:-------批次插入结束-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SELLWORKER)"); LogHelper.WriteReceiveLog("T_SELLWORKER:-------批次删除开始-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SELLWORKER)"); if (DelStringArray != null && DelStringArray.Count > 0) { //删除总部 _OracleHQHelper.ExecuteSqlTran(DelStringArray); } LogHelper.WriteReceiveLog("T_SELLWORKER:-------批次删除结束-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SELLWORKER)"); } } } catch (Exception ex) { LogHelper.WriteReceiveLog("T_SELLWORKER:" + ex.Message + "", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_SELLWORKER)"); } finally { try { if (_Data != null) { //更新状态 _Data[TableNameType.T_SELLWORKER] = true; } } catch { } //内存释放 SqlString = null; DelString = null; _DataSetBD = null; _DataSetHQ = null; _DataTemp = null; SQLStringArray = null; DelStringArray = null; MemoryManagement.FlushMemory(); } } #endregion #region 方法 -> T_COMMODITYEX 线程 商品 private void Run_T_COMMODITYEX(object obj) { string SqlString = null; string DelString = null; DataSet _DataSetBD = null; DataSet _DataSetHQ = null; DataSet _DataTemp = null; List SQLStringArray = null; List DelStringArray = null; try { Thread.Sleep(100);//启动线程业务前为CPU争取休息时间,100毫秒不能再多 foreach (DataRow _DataRow in _OracleBDHelper.ExcuteSqlGetDataSet( "SELECT SERVERPARTCODE FROM HIGHWAY_EXCHANGE.T_SYSCODE").Tables[0].Rows) { _DataSetHQ = _OracleHQHelper.ExcuteSqlGetDataSet( SelectServerData(TableNameType.T_COMMODITYEX, _DataRow["SERVERPARTCODE"].ToString())); if (_DataSetHQ != null && _DataSetHQ.Tables.Count > 0) { _DataTemp = SplitDataTable(_DataSetHQ.Tables[0], _MaxLoadBearing); } if (_DataTemp == null || _DataTemp.Tables.Count == 0) { continue; } foreach (DataTable _DataTableHQ in _DataTemp.Tables) { if (SQLStringArray == null) { SQLStringArray = new List(); } else { SQLStringArray.Clear(); } if (DelStringArray == null) { DelStringArray = new List(); } else { DelStringArray.Clear(); } _DataSetBD = _OracleBDHelper.ExcuteSqlGetDataSet(SelectServerData(TableNameType.T_COMMODITYEX, _DataRow["SERVERPARTCODE"].ToString())); LogHelper.WriteReceiveLog("T_COMMODITYEX:-------批次插入开始-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_COMMODITYEX)"); foreach (DataRow _DataRowHQ in _DataTableHQ.Rows) { LogHelper.WriteReceiveLog("T_COMMODITYEX:" + string.Join(",", _DataRowHQ.ItemArray), DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_COMMODITYEX)"); try { SqlString = "SERVERPARTCODE = '" + _DataRowHQ["SERVERPARTCODE"].ToString() + "' AND COMMODITY_CODE = '" + _DataRowHQ["COMMODITY_CODE"].ToString() + "' AND SERVERPARTSHOP_ID = " + _DataRowHQ["SERVERPARTSHOP_ID"].ToString(); if (_DataSetBD.Tables[0].Select(SqlString).Length > 0) { SqlString = "SERVERPARTCODE = '" + _DataRowHQ["SERVERPARTCODE"].ToString() + "' AND COMMODITY_CODE = '" + _DataRowHQ["COMMODITY_CODE"].ToString() + "' AND SERVERPARTSHOP_ID = " + _DataRowHQ["SERVERPARTSHOP_ID"].ToString() + " AND DOWNLOADDATE < '" + _DataRowHQ["DOWNLOADDATE"].ToString() + "'"; if (_DataSetBD.Tables[0].Select(SqlString).Length > 0) { SqlString = "DELETE FROM HIGHWAY_EXCHANGE.T_COMMODITYEX WHERE SERVERPARTCODE = '" + _DataRowHQ["SERVERPARTCODE"].ToString() + "' AND COMMODITY_CODE = '" + _DataRowHQ["COMMODITY_CODE"].ToString() + "' AND SERVERPARTSHOP_ID = " + _DataRowHQ["SERVERPARTSHOP_ID"].ToString(); SQLStringArray.Add(SqlString); SqlString = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_COMMODITYEX (COMMODITYEX_ID,SERVERPARTCODE,COMMODITY_TYPE,COMMODITY_CODE,COMMODITY_BARCODE, COMMODITY_NAME,COMMODITY_RULE,COMMODITY_UNIT,COMMODITY_RETAILPRICE,COMMODITY_MEMBERPRICE, CANCHANGEPRICE,ISVALID,COMMODITY_EN,ISBULK,METERINGMETHOD,DOWNLOADDATE,FLAG,BUSINESSTYPE, SERVERPARTSHOP_ID,PRINT_DATE,CONTAINER_CODE,COMMODITY_SYMBOL,COMMODITY_HOTKEY,USERDEFINEDTYPE_ID) VALUES ({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}, {14},{15},{16},{17},{18},{19},{20},{21},{22},{23})", IsArrayType(ValueType.Int, _DataRowHQ["COMMODITYEX_ID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SERVERPARTCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_TYPE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_CODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_BARCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_NAME"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_RULE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_UNIT"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["COMMODITY_RETAILPRICE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["COMMODITY_MEMBERPRICE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["CANCHANGEPRICE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["ISVALID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_EN"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["ISBULK"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["METERINGMETHOD"].ToString()), IsArrayType(ValueType.DateTime, _DataRowHQ["DOWNLOADDATE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["FLAG"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["BUSINESSTYPE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["SERVERPARTSHOP_ID"].ToString()), IsArrayType(ValueType.DateTime, _DataRowHQ["PRINT_DATE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["CONTAINER_CODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_SYMBOL"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_HOTKEY"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["USERDEFINEDTYPE_ID"].ToString())); SQLStringArray.Add(SqlString); } } else { //不存在添加 SqlString = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_COMMODITYEX (COMMODITYEX_ID,SERVERPARTCODE,COMMODITY_TYPE,COMMODITY_CODE,COMMODITY_BARCODE, COMMODITY_NAME,COMMODITY_RULE,COMMODITY_UNIT,COMMODITY_RETAILPRICE,COMMODITY_MEMBERPRICE, CANCHANGEPRICE,ISVALID,COMMODITY_EN,ISBULK,METERINGMETHOD,DOWNLOADDATE,FLAG,BUSINESSTYPE, SERVERPARTSHOP_ID,PRINT_DATE,CONTAINER_CODE,COMMODITY_SYMBOL,COMMODITY_HOTKEY,USERDEFINEDTYPE_ID) VALUES ({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}, {14},{15},{16},{17},{18},{19},{20},{21},{22},{23})", IsArrayType(ValueType.Int, _DataRowHQ["COMMODITYEX_ID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SERVERPARTCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_TYPE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_CODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_BARCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_NAME"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_RULE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_UNIT"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["COMMODITY_RETAILPRICE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["COMMODITY_MEMBERPRICE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["CANCHANGEPRICE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["ISVALID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_EN"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["ISBULK"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["METERINGMETHOD"].ToString()), IsArrayType(ValueType.DateTime, _DataRowHQ["DOWNLOADDATE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["FLAG"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["BUSINESSTYPE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["SERVERPARTSHOP_ID"].ToString()), IsArrayType(ValueType.DateTime, _DataRowHQ["PRINT_DATE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["CONTAINER_CODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_SYMBOL"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_HOTKEY"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["USERDEFINEDTYPE_ID"].ToString())); SQLStringArray.Add(SqlString); } //删除语句集合 DelString = string.Format(@"DELETE FROM HIGHWAY_EXCHANGE.T_COMMODITYEX WHERE COMMODITYEX_ID = {0} AND SERVERPARTCODE = {1}", IsArrayType(ValueType.Int, _DataRowHQ["COMMODITYEX_ID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SERVERPARTCODE"].ToString())); DelStringArray.Add(DelString); } catch (Exception ex) { LogHelper.WriteReceiveLog("T_COMMODITYEX:(SERVERPARTCODE:" + _DataRowHQ["SERVERPARTCODE"].ToString() + ",COMMODITYEX_ID:" + _DataRowHQ["COMMODITYEX_ID"].ToString() + "," + ex.Message + ")", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_COMMODITYEX)"); } } //分批执行语句 if (SQLStringArray != null && SQLStringArray.Count > 0) { _OracleBDHelper.ExecuteSqlTran(SQLStringArray); } LogHelper.WriteReceiveLog("T_COMMODITYEX:-------批次插入结束-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_COMMODITYEX)"); LogHelper.WriteReceiveLog("T_COMMODITYEX:-------批次删除开始-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_COMMODITYEX)"); if (DelStringArray != null && DelStringArray.Count > 0) { //删除总部 _OracleHQHelper.ExecuteSqlTran(DelStringArray); } LogHelper.WriteReceiveLog("T_COMMODITYEX:-------批次删除结束-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_COMMODITYEX)"); } } } catch (Exception ex) { LogHelper.WriteReceiveLog("T_COMMODITYEX:" + ex.Message + "", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_COMMODITYEX)"); } finally { try { if (_Data != null) { //更新状态 _Data[TableNameType.T_COMMODITYEX] = true; } } catch { } //内存释放 SqlString = null; DelString = null; _DataSetBD = null; _DataSetHQ = null; _DataTemp = null; SQLStringArray = null; DelStringArray = null; MemoryManagement.FlushMemory(); } } #endregion #region 方法 -> T_HOTKEYSET 线程 快捷键 private void Run_T_HOTKEYSET(object obj) { string SqlString = null; string DelString = null; DataSet _DataSetBD = null; DataSet _DataSetHQ = null; DataSet _DataTemp = null; List SQLStringArray = null; List DelStringArray = null; try { Thread.Sleep(100);//启动线程业务前为CPU争取休息时间,100毫秒不能再多 foreach (DataRow _DataRow in _OracleBDHelper.ExcuteSqlGetDataSet( "SELECT SERVERPARTCODE FROM HIGHWAY_EXCHANGE.T_SYSCODE").Tables[0].Rows) { _DataSetHQ = _OracleHQHelper.ExcuteSqlGetDataSet( SelectServerData(TableNameType.T_HOTKEYSET, _DataRow["SERVERPARTCODE"].ToString())); if (_DataSetHQ != null && _DataSetHQ.Tables.Count > 0) { _DataTemp = SplitDataTable(_DataSetHQ.Tables[0], _MaxLoadBearing); } if (_DataTemp == null || _DataTemp.Tables.Count == 0) { continue; } foreach (DataTable _DataTableHQ in _DataTemp.Tables) { if (SQLStringArray == null) { SQLStringArray = new List(); } else { SQLStringArray.Clear(); } if (DelStringArray == null) { DelStringArray = new List(); } else { DelStringArray.Clear(); } _DataSetBD = _OracleBDHelper.ExcuteSqlGetDataSet( SelectServerData(TableNameType.T_HOTKEYSET, _DataRow["SERVERPARTCODE"].ToString())); LogHelper.WriteReceiveLog("T_HOTKEYSET:-------批次插入开始-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_HOTKEYSET)"); foreach (DataRow _DataRowHQ in _DataTableHQ.Rows) { LogHelper.WriteReceiveLog("T_HOTKEYSET:" + string.Join(",", _DataRowHQ.ItemArray), DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_HOTKEYSET)"); try { SqlString = " SERVERPARTCODE = '" + _DataRowHQ["SERVERPARTCODE"].ToString() + "' AND COMMODITY_BARCODE = '" + _DataRowHQ["COMMODITY_BARCODE"].ToString() + "'"; if (_DataSetBD.Tables[0].Select(SqlString).Length > 0) { SqlString = " SERVERPARTCODE = '" + _DataRowHQ["SERVERPARTCODE"].ToString() + "' AND COMMODITY_BARCODE = '" + _DataRowHQ["COMMODITY_BARCODE"].ToString() + "' AND DOWNLOADDATE < '" + _DataRowHQ["DOWNLOADDATE"].ToString() + "'"; if (_DataSetBD.Tables[0].Select(SqlString).Length > 0) { SqlString = "DELETE FROM HIGHWAY_EXCHANGE.T_HOTKEYSET WHERE SERVERPARTCODE = '" + _DataRowHQ["SERVERPARTCODE"].ToString() + "' AND COMMODITY_BARCODE = '" + _DataRowHQ["COMMODITY_BARCODE"].ToString() + "'"; SQLStringArray.Add(SqlString); SqlString = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_HOTKEYSET (HOTKEYSET_ID, SERVERPARTCODE,COMMODITY_BARCODE,HOTKEY,BUSINESSTYPE,DOWNLOADDATE,FLAG,VALID) VALUES ({0},{1},{2},{3},{4},{5},{6},{7})", IsArrayType(ValueType.Int, _DataRowHQ["HOTKEYSET_ID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SERVERPARTCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_BARCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["HOTKEY"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["BUSINESSTYPE"].ToString()), IsArrayType(ValueType.DateTime, _DataRowHQ["DOWNLOADDATE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["FLAG"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["VALID"].ToString())); SQLStringArray.Add(SqlString); } } else { //不存在添加 SqlString = string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_HOTKEYSET (HOTKEYSET_ID, SERVERPARTCODE,COMMODITY_BARCODE,HOTKEY,BUSINESSTYPE,DOWNLOADDATE,FLAG,VALID) VALUES ({0},{1},{2},{3},{4},{5},{6},{7})", IsArrayType(ValueType.Int, _DataRowHQ["HOTKEYSET_ID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SERVERPARTCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["COMMODITY_BARCODE"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["HOTKEY"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["BUSINESSTYPE"].ToString()), IsArrayType(ValueType.DateTime, _DataRowHQ["DOWNLOADDATE"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["FLAG"].ToString()), IsArrayType(ValueType.Int, _DataRowHQ["VALID"].ToString())); SQLStringArray.Add(SqlString); } //删除语句集合 DelString = string.Format(@"DELETE FROM HIGHWAY_EXCHANGE.T_HOTKEYSET WHERE HOTKEYSET_ID = {0} AND SERVERPARTCODE = {1}", IsArrayType(ValueType.Int, _DataRowHQ["HOTKEYSET_ID"].ToString()), IsArrayType(ValueType.String, _DataRowHQ["SERVERPARTCODE"].ToString())); DelStringArray.Add(DelString); } catch (Exception ex) { LogHelper.WriteReceiveLog("T_HOTKEYSET:(SERVERPARTCODE:" + _DataRowHQ["SERVERPARTCODE"].ToString() + ",HOTKEYSET_ID:" + _DataRowHQ["HOTKEYSET_ID"].ToString() + "," + ex.Message + ")", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_HOTKEYSET)"); } } //分批执行语句 if (SQLStringArray != null && SQLStringArray.Count > 0) { _OracleBDHelper.ExecuteSqlTran(SQLStringArray); } LogHelper.WriteReceiveLog("T_HOTKEYSET:-------批次插入结束-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_HOTKEYSET)"); LogHelper.WriteReceiveLog("T_HOTKEYSET:-------批次删除开始-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_HOTKEYSET)"); if (DelStringArray != null && DelStringArray.Count > 0) { //删除总部 _OracleHQHelper.ExecuteSqlTran(DelStringArray); } LogHelper.WriteReceiveLog("T_HOTKEYSET:-------批次删除结束-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_HOTKEYSET)"); } } } catch (Exception ex) { LogHelper.WriteReceiveLog("T_HOTKEYSET:" + ex.Message + "", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_T_HOTKEYSET)"); } finally { try { if (_Data != null) { //更新状态 _Data[TableNameType.T_HOTKEYSET] = true; } } catch { } //内存释放 SqlString = null; DelString = null; _DataSetBD = null; _DataSetHQ = null; _DataTemp = null; SQLStringArray = null; DelStringArray = null; MemoryManagement.FlushMemory(); } } #endregion #endregion #region 方法 -> 统计线程 private void Run_Statistics(object obj) { string dataSql = null; List SQLStringArray = null; Hashtable createDateName = null; Hashtable okSqls = null; Hashtable noSqls = null; try { Thread.Sleep(100);//启动线程业务前为CPU争取休息时间,100毫秒不能再多 dataSql = "SELECT TABLENAME,NICKNAME FROM HIGHWAY_EXCHANGE.T_TRANSFERTABLEINDEX"; DataTable _DataTableNameHQ = _OracleHQHelper.ExcuteSqlGetDataSet(dataSql).Tables[0]; //3天数据统计 for (int t = 0; t < 7; t++) { string oldDate = DateTime.Now.AddDays(-t).Date.ToString(); string newDate = DateTime.Now.AddDays(-t + 1).Date.ToString(); dataSql = "SELECT TRANSFERSTATISTICS_CODE FROM HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS WHERE PID_CODE = '-1' AND OPERATE_DATE >= TO_DATE('" + oldDate + "','YYYY/MM/DD HH24:MI:SS') AND OPERATE_DATE < TO_DATE('" + newDate + "','YYYY/MM/DD HH24:MI:SS')"; createDateName = getCreateDateName(); LogHelper.WriteReceiveLog("Statistics:-------遍历统计各表开始(" + oldDate + ")-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); #region 遍历统计各表 try { foreach (DataRow _DataRow in _OracleBDHelper.ExcuteSqlGetDataSet(dataSql).Tables[0].Rows) { if (SQLStringArray == null) { SQLStringArray = new List(); } else { SQLStringArray.Clear(); } foreach (DataRow _DataRowSubgrade in _OracleBDHelper.ExcuteSqlGetDataSet( "SELECT * FROM HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS WHERE PID_CODE = '" + _DataRow["TRANSFERSTATISTICS_CODE"].ToString() + "' AND OPERATE_DATE >= TO_DATE('" + oldDate + "','YYYY/MM/DD HH24:MI:SS') AND OPERATE_DATE < TO_DATE('" + newDate + "','YYYY/MM/DD HH24:MI:SS')").Tables[0].Rows) { _DataRowSubgrade["SERVERPARTCODE"].ToString(); _DataRowSubgrade["SHOPCODE"].ToString(); _DataRowSubgrade["MACHINECODE"].ToString(); _DataRowSubgrade["TABLENAME"].ToString(); if (!createDateName.ContainsKey(_DataRowSubgrade["TABLENAME"].ToString())) { continue; } try { //已上传 okSqls = getTopOrDownCount(_DataRowSubgrade["SERVERPARTCODE"].ToString(), _DataRowSubgrade["SHOPCODE"].ToString(), _DataRowSubgrade["MACHINECODE"].ToString(), createDateName[_DataRowSubgrade["TABLENAME"].ToString()].ToString(), oldDate, newDate, true); //未上传 noSqls = getTopOrDownCount(_DataRowSubgrade["SERVERPARTCODE"].ToString(), _DataRowSubgrade["SHOPCODE"].ToString(), _DataRowSubgrade["MACHINECODE"].ToString(), createDateName[_DataRowSubgrade["TABLENAME"].ToString()].ToString(), oldDate, newDate, false); DataTable _DataTableBD = _OracleBDHelper.ExcuteSqlGetDataSet( "SELECT * FROM HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS WHERE TRANSFERSTATISTICS_CODE = '" + _DataRowSubgrade["TRANSFERSTATISTICS_CODE"].ToString() + "'").Tables[0]; if (_DataTableBD != null && _DataTableBD.Rows.Count > 0) { string okNumber = _OracleBDHelper.ExcuteSqlGetDataSet(okSqls[_DataRowSubgrade["TABLENAME"].ToString()].ToString()).Tables[0].Rows.Count.ToString(); string noNumber = _OracleBDHelper.ExcuteSqlGetDataSet(noSqls[_DataRowSubgrade["TABLENAME"].ToString()].ToString()).Tables[0].Rows.Count.ToString(); if (_DataTableBD.Rows[0]["SERVICE_UPLOADNUM"].ToString() != okNumber || _DataTableBD.Rows[0]["SERVICE_NOTUPLOADNUM"].ToString() != noNumber) { //更新 dataSql = string.Format( @"UPDATE HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS SET SERVICE_UPLOADNUM = {0},SERVICE_NOTUPLOADNUM = {1},SERVICE_UPDATETIME = {2}, TRANSFER_STATE = 0,TRANSFER_ID = 0 WHERE TRANSFERSTATISTICS_CODE = {3} AND TABLENAME = {4}", IsArrayType(ValueType.Int, okNumber), IsArrayType(ValueType.Int, noNumber), IsArrayType(ValueType.DateTime, DateTime.Now.ToString()), IsArrayType(ValueType.String, _DataRowSubgrade["TRANSFERSTATISTICS_CODE"].ToString()), IsArrayType(ValueType.String, _DataRowSubgrade["TABLENAME"].ToString())); SQLStringArray.Add(dataSql); } } } catch (Exception ex) { LogHelper.WriteReceiveLog("RemoteDataThread_Run_Statistics:(SERVERPARTCODE:" + _DataRowSubgrade["SERVERPARTCODE"].ToString() + ",SHOPCODE:" + _DataRowSubgrade["SHOPCODE"].ToString() + "," + ex.Message + ")", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); } } //分批执行语句 if (SQLStringArray != null && SQLStringArray.Count > 0) { _OracleBDHelper.ExecuteSqlTran(SQLStringArray); } } } catch (Exception ex) { LogHelper.WriteReceiveLog("Statistics:" + ex.Message + "", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); } #endregion LogHelper.WriteReceiveLog("Statistics:-------遍历统计各表结束(" + oldDate + ")-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); LogHelper.WriteReceiveLog("Statistics:-------合计各表开始(" + oldDate + ")-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); #region 合计各表 string _TRANSFERSTATISTICS_DESC = string.Empty; //备注详细 try { dataSql = "SELECT TRANSFERSTATISTICS_CODE,TRANSFERSTATISTICS_DESC,UPLOADED_MACHINE,NOTUPLOADED_MACHINE FROM HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS " + " WHERE PID_CODE = '-1' AND OPERATE_DATE >= TO_DATE('" + oldDate + "','YYYY/MM/DD HH24:MI:SS') AND OPERATE_DATE < TO_DATE('" + newDate + "','YYYY/MM/DD HH24:MI:SS')"; foreach (DataRow _DataRow in _OracleBDHelper.ExcuteSqlGetDataSet(dataSql).Tables[0].Rows) { if (SQLStringArray == null) { SQLStringArray = new List(); } else { SQLStringArray.Clear(); } #region 校验本地和服务区是否存在未上传数据 try { //OK MIDDLE NO int _TABLENUMOK = 0, _TABLEMIDDLE = 0, _TABLENUMNO = 0; List _TableNameBDList = new List(); List _TableNameHQList = new List(); foreach (DataRow _DataRowSubgrade in _OracleBDHelper.ExcuteSqlGetDataSet( "SELECT * FROM HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS WHERE PID_CODE = '" + _DataRow["TRANSFERSTATISTICS_CODE"].ToString() + "' AND OPERATE_DATE >= TO_DATE('" + oldDate + "','YYYY/MM/DD HH24:MI:SS') AND OPERATE_DATE < TO_DATE('" + newDate + "','YYYY/MM/DD HH24:MI:SS')").Tables[0].Rows) { _DataRowSubgrade["SERVERPARTCODE"].ToString(); _DataRowSubgrade["SHOPCODE"].ToString(); _DataRowSubgrade["MACHINECODE"].ToString(); _DataRowSubgrade["TABLENAME"].ToString(); try { DataRow[] _DataRows = _DataTableNameHQ. Select(" TABLENAME = '" + _DataRowSubgrade["TABLENAME"].ToString() + "'"); switch (_DataRowSubgrade["TABLENAME"].ToString()) { case "HIGHWAY_EXCHANGE.T_PERSONSELL": case "HIGHWAY_EXCHANGE.T_ENDACCOUNT": case "HIGHWAY_EXCHANGE.T_PERSONSELL_NEW": case "HIGHWAY_EXCHANGE.T_ENDACCOUNT_NEW": case "HIGHWAY_EXCHANGE.T_BUSINESSTIME": if ((!string.IsNullOrEmpty(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString())) && (!string.IsNullOrEmpty(_DataRowSubgrade["LOCAL_UPLOADNUM"].ToString())) && (int.Parse(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString()) == 1 || int.Parse(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString()) == 0)) { if (!string.IsNullOrEmpty(_DataRowSubgrade["SERVICE_NOTUPLOADNUM"].ToString()) && int.Parse(_DataRowSubgrade["SERVICE_NOTUPLOADNUM"].ToString()) == 0 && _DataRowSubgrade["TABLENAME"].ToString() != "HIGHWAY_EXCHANGE.T_BUSINESSTIME") { //需要上传总部,没问题的 _TABLEMIDDLE++; } else if (_DataRowSubgrade["TABLENAME"].ToString() == "HIGHWAY_EXCHANGE.T_BUSINESSTIME") { //不需要上传中部,没问题的 _TABLEMIDDLE++; } else { if ((!string.IsNullOrEmpty(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString())) && int.Parse(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString()) > 0) { //本地有未上传 if (_DataRows != null && _DataRows.Length > 0 && !_TableNameBDList.Contains(_DataRows[0]["NICKNAME"].ToString())) { _TableNameBDList.Add(_DataRows[0]["NICKNAME"].ToString()); } _TABLENUMNO++; } else if ((!string.IsNullOrEmpty(_DataRowSubgrade["SERVICE_NOTUPLOADNUM"].ToString())) && int.Parse(_DataRowSubgrade["SERVICE_NOTUPLOADNUM"].ToString()) > 0) { //服务区有未上传 if (_DataRows != null && _DataRows.Length > 0 && !_TableNameHQList.Contains(_DataRows[0]["NICKNAME"].ToString())) { _TableNameHQList.Add(_DataRows[0]["NICKNAME"].ToString()); } _TABLENUMNO++; } else { _TABLENUMOK++; } } } else { if (((!string.IsNullOrEmpty(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString())) && int.Parse(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString()) > 0)) { //本地有未上传 if (_DataRows != null && _DataRows.Length > 0 && !_TableNameBDList.Contains(_DataRows[0]["NICKNAME"].ToString())) { _TableNameBDList.Add(_DataRows[0]["NICKNAME"].ToString()); } _TABLENUMNO++; } else if ((!string.IsNullOrEmpty(_DataRowSubgrade["SERVICE_NOTUPLOADNUM"].ToString())) && int.Parse(_DataRowSubgrade["SERVICE_NOTUPLOADNUM"].ToString()) > 0) { //服务区有未上传 if (_DataRows != null && _DataRows.Length > 0 && !_TableNameHQList.Contains(_DataRows[0]["NICKNAME"].ToString())) { _TableNameHQList.Add(_DataRows[0]["NICKNAME"].ToString()); } _TABLENUMNO++; } else { _TABLENUMOK++; } } break; case "HIGHWAY_EXCHANGE.T_EXCEPTION": case "HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS": case "HIGHWAY_EXCHANGE.T_TRANSMISSIONERROR": _TABLEMIDDLE++; break; default: if (((!string.IsNullOrEmpty(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString())) && int.Parse(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString()) > 0)) { //本地有未上传 if (_DataRows != null && _DataRows.Length > 0 && !_TableNameBDList.Contains(_DataRows[0]["NICKNAME"].ToString())) { _TableNameBDList.Add(_DataRows[0]["NICKNAME"].ToString()); } _TABLENUMNO++; } else if ((!string.IsNullOrEmpty(_DataRowSubgrade["SERVICE_NOTUPLOADNUM"].ToString())) && int.Parse(_DataRowSubgrade["SERVICE_NOTUPLOADNUM"].ToString()) > 0) { //服务区有未上传 if (_DataRows != null && _DataRows.Length > 0 && !_TableNameHQList.Contains(_DataRows[0]["NICKNAME"].ToString())) { _TableNameHQList.Add(_DataRows[0]["NICKNAME"].ToString()); } _TABLENUMNO++; } else { _TABLENUMOK++; } break; } string _UPLOADNUM = null; try { if (!string.IsNullOrEmpty(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString()) && !string.IsNullOrEmpty(_DataRowSubgrade["LOCAL_UPLOADNUM"].ToString())) { switch (_DataRowSubgrade["TABLENAME"].ToString()) { case "HIGHWAY_EXCHANGE.T_PERSONSELL": case "HIGHWAY_EXCHANGE.T_ENDACCOUNT": case "HIGHWAY_EXCHANGE.T_PERSONSELL_NEW": case "HIGHWAY_EXCHANGE.T_ENDACCOUNT_NEW": case "HIGHWAY_EXCHANGE.T_BUSINESSTIME": if (int.Parse(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString()) > 0) { if (int.Parse(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString()) + int.Parse(_DataRowSubgrade["LOCAL_UPLOADNUM"].ToString()) != 0) { _UPLOADNUM = (int.Parse(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString()) + int.Parse(_DataRowSubgrade["LOCAL_UPLOADNUM"].ToString()) - 1).ToString(); } else { _UPLOADNUM = "0"; } } else { _UPLOADNUM = (int.Parse(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString()) + int.Parse(_DataRowSubgrade["LOCAL_UPLOADNUM"].ToString())).ToString(); } break; default: _UPLOADNUM = (int.Parse(_DataRowSubgrade["LOCAL_NOTUPLOADNUM"].ToString()) + int.Parse(_DataRowSubgrade["LOCAL_UPLOADNUM"].ToString())).ToString(); break; } } } catch { _UPLOADNUM = null; } if (_UPLOADNUM != null && _DataRowSubgrade["UPLOADNUM"].ToString() != _UPLOADNUM) { //更新 dataSql = string.Format( @"UPDATE HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS SET SERVICE_UPDATETIME = {0}, UPLOADNUM = {1},TRANSFER_STATE = 0,TRANSFER_ID = 0 WHERE TRANSFERSTATISTICS_CODE = {2} AND TABLENAME = {3}", IsArrayType(ValueType.DateTime, DateTime.Now.ToString()), IsArrayType(ValueType.String, _UPLOADNUM), IsArrayType(ValueType.String, _DataRowSubgrade["TRANSFERSTATISTICS_CODE"].ToString()), IsArrayType(ValueType.String, _DataRowSubgrade["TABLENAME"].ToString())); SQLStringArray.Add(dataSql); } } catch (Exception ex) { LogHelper.WriteReceiveLog("RemoteDataThread_Run_Statistics:(SERVERPARTCODE:" + _DataRowSubgrade["SERVERPARTCODE"].ToString() + ",SHOPCODE:" + _DataRowSubgrade["SHOPCODE"].ToString() + "," + ex.Message + ")", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); } } //初始化 _TRANSFERSTATISTICS_DESC = ""; //备注统计 if (_TableNameBDList.Count > 0) { _TRANSFERSTATISTICS_DESC += " 区服未上传:" + string.Join(",", _TableNameBDList.ToArray()) + ";"; } if (_TableNameHQList.Count > 0) { _TRANSFERSTATISTICS_DESC += " 总部未上传:" + string.Join(",", _TableNameHQList.ToArray()) + ";"; } if (_DataRow["TRANSFERSTATISTICS_DESC"].ToString() != _TRANSFERSTATISTICS_DESC || _DataRow["UPLOADED_MACHINE"].ToString() != _TABLENUMOK.ToString() || _DataRow["NOTUPLOADED_MACHINE"].ToString() != _TABLENUMNO.ToString()) { //更新 dataSql = string.Format( @"UPDATE HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS SET TRANSFERSTATISTICS_DESC = {0},SERVICE_UPDATETIME = {1}, UPLOADED_MACHINE = {2},NOTUPLOADED_MACHINE = {3}, TRANSFER_STATE = 0,TRANSFER_ID = 0 WHERE TRANSFERSTATISTICS_CODE = {4}", IsArrayType(ValueType.String, _TRANSFERSTATISTICS_DESC), IsArrayType(ValueType.DateTime, DateTime.Now.ToString()), IsArrayType(ValueType.Int, _TABLENUMOK.ToString()), IsArrayType(ValueType.Int, _TABLENUMNO.ToString()), IsArrayType(ValueType.String, _DataRow["TRANSFERSTATISTICS_CODE"].ToString())); SQLStringArray.Add(dataSql); } } catch (Exception ex) { LogHelper.WriteReceiveLog("Statistics:" + ex.Message + "", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); } #endregion //分批执行语句 if (SQLStringArray != null && SQLStringArray.Count > 0) { _OracleBDHelper.ExecuteSqlTran(SQLStringArray); } } } catch (Exception ex) { LogHelper.WriteReceiveLog("Statistics:" + ex.Message + "", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); } finally { _TRANSFERSTATISTICS_DESC = null; } #endregion LogHelper.WriteReceiveLog("Statistics:-------合计各表结束(" + oldDate + ")-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); LogHelper.WriteReceiveLog("Statistics:-------服务区、总部传输 开始(" + oldDate + ")-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); #region 服务区、总部传输 try { foreach (DataRow _DataRow in _OracleBDHelper.ExcuteSqlGetDataSet( "SELECT SERVERPARTCODE FROM T_SYSCODE WHERE SERVERPARTCODE IS NOT NULL").Tables[0].Rows) { DataSet _DataTemp = null; dataSql = "SELECT * FROM HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS WHERE OPERATE_DATE >= TO_DATE('" + oldDate + "','YYYY/MM/DD HH24:MI:SS') AND OPERATE_DATE < TO_DATE('" + newDate + "','YYYY/MM/DD HH24:MI:SS') AND SERVERPARTCODE = '" + _DataRow["SERVERPARTCODE"].ToString() + "'"; DataTable _DataTableBD = _OracleBDHelper.ExcuteSqlGetDataSet(dataSql).Tables[0]; dataSql = "SELECT TRANSFERSTATISTICS_CODE,SERVERPARTCODE,LOCAL_UPDATETIME,SERVICE_UPDATETIME,OPERATE_DATE " + "FROM HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS WHERE OPERATE_DATE >= TO_DATE('" + oldDate + "','YYYY/MM/DD HH24:MI:SS') AND OPERATE_DATE < TO_DATE('" + newDate + "','YYYY/MM/DD HH24:MI:SS') AND SERVERPARTCODE = '" + _DataRow["SERVERPARTCODE"].ToString() + "'"; DataTable _DataTableHQ = _OracleHQHelper.ExcuteSqlGetDataSet(dataSql).Tables[0]; if (_DataTableBD != null) { _DataTemp = SplitDataTable(_DataTableBD, _MaxLoadBearing); } try { foreach (DataTable _DataTableTemp in _DataTemp.Tables) { if (SQLStringArray == null) { SQLStringArray = new List(); } else { SQLStringArray.Clear(); } foreach (DataRow _DataRowBD in _DataTableTemp.Rows) { DataRow[] _DataRowHQ = _DataTableHQ.Select(" TRANSFERSTATISTICS_CODE = '" + _DataRowBD["TRANSFERSTATISTICS_CODE"].ToString() + "'"); if (_DataRowHQ.Length == 0) { LogHelper.WriteReceiveLog("Statistics:" + string.Join(",", _DataRowBD.ItemArray), DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); //添加 string _SqlString = string.Format( @"INSERT INTO HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS( TRANSFERSTATISTICS_CODE,PID_CODE, PROVINCE_CODE,SERVERPARTCODE, SHOPCODE,MACHINECODE, MACHINE_MACADDRESS,TABLENAME, UPLOADNUM,LOCAL_UPLOADNUM, LOCAL_NOTUPLOADNUM,LOCAL_UPDATETIME, LOCAL_ENDTIME,SERVICE_UPLOADNUM, SERVICE_NOTUPLOADNUM,SERVICE_UPDATETIME, STAFF_ID,STAFF_NAME, OPERATE_DATE,TRANSFERSTATISTICS_DESC, UPLOADED_MACHINE,NOTUPLOADED_MACHINE, NOTUPLOADED_TABLE) VALUES ({0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21},{22})", IsArrayType(ValueType.String, _DataRowBD["TRANSFERSTATISTICS_CODE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["PID_CODE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["PROVINCE_CODE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["SERVERPARTCODE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["SHOPCODE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["MACHINECODE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["MACHINE_MACADDRESS"].ToString()), IsArrayType(ValueType.String, _DataRowBD["TABLENAME"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["UPLOADNUM"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["LOCAL_UPLOADNUM"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["LOCAL_NOTUPLOADNUM"].ToString()), IsArrayType(ValueType.DateTime, _DataRowBD["LOCAL_UPDATETIME"].ToString()), IsArrayType(ValueType.DateTime, _DataRowBD["LOCAL_ENDTIME"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["SERVICE_UPLOADNUM"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["SERVICE_NOTUPLOADNUM"].ToString()), IsArrayType(ValueType.DateTime, _DataRowBD["SERVICE_UPDATETIME"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["STAFF_ID"].ToString()), IsArrayType(ValueType.String, _DataRowBD["STAFF_NAME"].ToString()), IsArrayType(ValueType.DateTime, _DataRowBD["OPERATE_DATE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["TRANSFERSTATISTICS_DESC"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["UPLOADED_MACHINE"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["NOTUPLOADED_MACHINE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["NOTUPLOADED_TABLE"].ToString())); SQLStringArray.Add(_SqlString); } else { if ( (!string.IsNullOrEmpty(_DataRowBD["OPERATE_DATE"].ToString()) && (string.IsNullOrEmpty(_DataRowHQ[0]["OPERATE_DATE"].ToString()) || DateTime.Parse(_DataRowHQ[0]["OPERATE_DATE"].ToString()) < DateTime.Parse(_DataRowBD["OPERATE_DATE"].ToString())) || ((!string.IsNullOrEmpty(_DataRowBD["LOCAL_UPDATETIME"].ToString()) && (string.IsNullOrEmpty(_DataRowHQ[0]["LOCAL_UPDATETIME"].ToString()) || DateTime.Parse(_DataRowHQ[0]["LOCAL_UPDATETIME"].ToString()) < DateTime.Parse(_DataRowBD["LOCAL_UPDATETIME"].ToString())))) || ((!string.IsNullOrEmpty(_DataRowBD["SERVICE_UPDATETIME"].ToString()) && (string.IsNullOrEmpty(_DataRowHQ[0]["SERVICE_UPDATETIME"].ToString()) || DateTime.Parse(_DataRowHQ[0]["SERVICE_UPDATETIME"].ToString()) < DateTime.Parse(_DataRowBD["SERVICE_UPDATETIME"].ToString()))))) ) { LogHelper.WriteReceiveLog("Statistics:" + string.Join(",", _DataRowBD.ItemArray), DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); string _SqlString = string.Format( @"UPDATE HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS SET TRANSFERSTATISTICS_CODE = {0},PID_CODE = {1}, PROVINCE_CODE = {2},SERVERPARTCODE = {3}, SHOPCODE = {4},MACHINECODE ={5}, MACHINE_MACADDRESS = {6},TABLENAME = {7}, UPLOADNUM = {8},LOCAL_UPLOADNUM = {9}, LOCAL_NOTUPLOADNUM = {10},LOCAL_UPDATETIME ={11}, LOCAL_ENDTIME = {12}, SERVICE_UPLOADNUM ={13}, SERVICE_NOTUPLOADNUM = {14},SERVICE_UPDATETIME ={15}, STAFF_ID = {16},STAFF_NAME ={17}, OPERATE_DATE ={18},TRANSFERSTATISTICS_DESC ={19}, UPLOADED_MACHINE ={20},NOTUPLOADED_MACHINE ={21}, NOTUPLOADED_TABLE = {22} WHERE TRANSFERSTATISTICS_CODE = {0}", IsArrayType(ValueType.String, _DataRowBD["TRANSFERSTATISTICS_CODE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["PID_CODE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["PROVINCE_CODE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["SERVERPARTCODE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["SHOPCODE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["MACHINECODE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["MACHINE_MACADDRESS"].ToString()), IsArrayType(ValueType.String, _DataRowBD["TABLENAME"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["UPLOADNUM"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["LOCAL_UPLOADNUM"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["LOCAL_NOTUPLOADNUM"].ToString()), IsArrayType(ValueType.DateTime, _DataRowBD["LOCAL_UPDATETIME"].ToString()), IsArrayType(ValueType.DateTime, _DataRowBD["LOCAL_ENDTIME"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["SERVICE_UPLOADNUM"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["SERVICE_NOTUPLOADNUM"].ToString()), IsArrayType(ValueType.DateTime, _DataRowBD["SERVICE_UPDATETIME"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["STAFF_ID"].ToString()), IsArrayType(ValueType.String, _DataRowBD["STAFF_NAME"].ToString()), IsArrayType(ValueType.DateTime, _DataRowBD["OPERATE_DATE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["TRANSFERSTATISTICS_DESC"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["UPLOADED_MACHINE"].ToString()), IsArrayType(ValueType.Int, _DataRowBD["NOTUPLOADED_MACHINE"].ToString()), IsArrayType(ValueType.String, _DataRowBD["NOTUPLOADED_TABLE"].ToString())); SQLStringArray.Add(_SqlString); } } } //分批执行语句(总部) if (SQLStringArray != null && SQLStringArray.Count > 0) { _OracleHQHelper.ExecuteSqlTran(SQLStringArray); } } } catch (Exception ex) { LogHelper.WriteReceiveLog("Statistics:" + ex.Message + "", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); } } } catch (Exception ex) { LogHelper.WriteReceiveLog("Statistics:" + ex.Message + "", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); } #endregion LogHelper.WriteReceiveLog("Statistics:-------服务区、总部传输 结束(" + oldDate + ")-------", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); } } catch (Exception ex) { LogHelper.WriteReceiveLog("Statistics:" + ex.Message + "", DateTime.Now.ToString("yyyyMMdd") + "日志_Sender(RemoteDataThread_Run_Statistics)"); } finally { try { if (_Data != null) { //更新状态 _Data[TableNameType.STATISTICS] = true; } } catch { } //内存释放 dataSql = null; SQLStringArray = null; createDateName = null; okSqls = null; noSqls = null; MemoryManagement.FlushMemory(); } } #endregion #region 方法 -> 获取总部数据语句 private string SelectServerData(TableNameType type, string serverpartcode) { string SQLString = string.Empty; switch (type) { //门店 case TableNameType.T_SHOPMESSAGE: SQLString = @"SELECT SHOPMESSAGE_ID,SERVERPARTSHOP_ID,SERVERPARTCODE,SHOPCODE, SHOPNAME,BUSINESSTYPE,DOWNLOADDATE,FLAG,VALID FROM ( SELECT T.*, ROW_NUMBER() OVER(PARTITION BY SERVERPARTCODE,SERVERPARTSHOP_ID ORDER BY T.DOWNLOADDATE DESC,T.SHOPMESSAGE_ID DESC) AS COLNUM FROM HIGHWAY_EXCHANGE.T_SHOPMESSAGE T ) WHERE COLNUM = 1 AND SERVERPARTCODE = '" + serverpartcode + "'"; break; //收银员 case TableNameType.T_SELLWORKER: SQLString = @"SELECT SELLWORKER_ID,SERVERPARTCODE,SELLWORKERCODE,SELLWORKERNAME,PROWERRIGHT,SHOPCODE, DOWNLOADDATE,FLAG,VALID,SELLWORKERPASSWORD,DISCOUNT_RATE FROM ( SELECT T.*, ROW_NUMBER() OVER(PARTITION BY SERVERPARTCODE,SELLWORKERCODE ORDER BY T.DOWNLOADDATE DESC,T.SELLWORKER_ID DESC) AS COLNUM FROM HIGHWAY_EXCHANGE.T_SELLWORKER T ) WHERE COLNUM = 1 AND SERVERPARTCODE = '" + serverpartcode + "'"; break; //商品 case TableNameType.T_COMMODITYEX: SQLString = @"SELECT COMMODITYEX_ID,SERVERPARTCODE,COMMODITY_TYPE,COMMODITY_CODE,COMMODITY_BARCODE, COMMODITY_NAME,COMMODITY_RULE,COMMODITY_UNIT,COMMODITY_RETAILPRICE,COMMODITY_MEMBERPRICE, CANCHANGEPRICE,ISVALID,COMMODITY_EN,ISBULK,METERINGMETHOD,DOWNLOADDATE,FLAG,BUSINESSTYPE, SERVERPARTSHOP_ID,PRINT_DATE,CONTAINER_CODE,COMMODITY_SYMBOL,COMMODITY_HOTKEY,USERDEFINEDTYPE_ID FROM ( SELECT T.*, ROW_NUMBER() OVER(PARTITION BY SERVERPARTCODE,COMMODITY_CODE,SERVERPARTSHOP_ID ORDER BY T.DOWNLOADDATE DESC,T.COMMODITYEX_ID DESC) AS COLNUM FROM HIGHWAY_EXCHANGE.T_COMMODITYEX T ) WHERE COLNUM = 1 AND SERVERPARTCODE = '" + serverpartcode + "'"; break; //快捷键 case TableNameType.T_HOTKEYSET: SQLString = @"SELECT HOTKEYSET_ID,SERVERPARTCODE,COMMODITY_BARCODE,HOTKEY,BUSINESSTYPE,DOWNLOADDATE,FLAG,VALID FROM ( SELECT T.*, ROW_NUMBER() OVER(PARTITION BY SERVERPARTCODE,COMMODITY_BARCODE ORDER BY T.DOWNLOADDATE DESC,T.HOTKEYSET_ID DESC) AS COLNUM FROM HIGHWAY_EXCHANGE.T_HOTKEYSET T ) WHERE COLNUM = 1 AND SERVERPARTCODE = '" + serverpartcode + "'"; break; } return SQLString; } #endregion #region 方法 -> 分解数据表 /// /// 分解数据表 /// /// 需要分解的表 /// 每个表包含的数据量 /// private static DataSet SplitDataTable(DataTable originalTab, int rowsNum) { //获取所需创建的表数量 int tableNum = (int)Math.Ceiling((decimal)originalTab.Rows.Count / rowsNum); //获取数据余数 int remainder = originalTab.Rows.Count % rowsNum; DataSet ds = new DataSet(); //如果只需要创建1个表,直接将原始表存入DataSet //if (originalTab.Rows.Count <= rowsNum) //{ // ds.Tables.Add(originalTab); //} //else //{ DataTable[] tableSlice = new DataTable[tableNum]; //Save orginal columns into new table. for (int c = 0; c < tableNum; c++) { tableSlice[c] = originalTab.Clone(); tableSlice[c].TableName = originalTab.TableName + c.ToString(); } //Import Rows for (int i = 0; i < tableNum; i++) { // if the current table is not the last one //if (i != tableNum - 1) //{ for (int j = i * rowsNum; j < ((i + 1) * rowsNum); j++) { if (j >= originalTab.Rows.Count) { break; } tableSlice[i].ImportRow(originalTab.Rows[j]); } //} //else //{ // for (int k = i * rowsNum; k < ((i + 1) * rowsNum + remainder); k++) // { // tableSlice[i].ImportRow(originalTab.Rows[k]); // } //} } //add all tables into a dataset foreach (DataTable dt in tableSlice) { ds.Tables.Add(dt); } //} return ds; } #endregion #region 方法 -> 定义 表名的枚举 public enum TableNameType { T_SHOPMESSAGE = 62, T_SELLWORKER = 63, T_COMMODITYEX = 64, T_HOTKEYSET = 65, STATISTICS = 66 } #endregion #region 方法 -> 枚举参数过滤处理 /// /// 枚举参数过滤处理,解决麻烦的SQL拼接 /// (对照数据表给定添加、更新的参数枚举类型ValueType) /// /// /// /// public string IsArrayType(ValueType _Type, string _String = null) { if (_String != null && _String.Length > 0) { switch (_Type) { case ValueType.String: return string.Format("'{0}'", _String.Replace("'", " ")); case ValueType.Int: case ValueType.Double: case ValueType.Boolean: return _String; case ValueType.DateTime: return string.Format("TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS')", _String); } } return "null"; } /// /// 枚举参数过滤处理,解决麻烦的SQL拼接 /// (对照数据表给定添加、更新的参数枚举类型ValueType) /// /// /// 是否使用缺省值 /// private static string IsArrayType(ValueType _Type, bool _DefaultValue = false) { if (_DefaultValue) { switch (_Type) { case ValueType.String: return "''"; case ValueType.Int: case ValueType.Double: case ValueType.Boolean: return "0"; case ValueType.DateTime: return string.Format("TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS')", DateTime.Now.ToString()); } } return "null"; } #endregion #region 方法 -> 定义 5个类型的枚举 public enum ValueType { String = 0, Int = 1, Double = 2, Boolean = 3, DateTime = 4 } #endregion #region 方法 -> 定时器 private void timer1_Tick(object sender, EventArgs e) { onStartThread(); } #endregion #region 方法 -> 获取已上传数据语句 private Hashtable getTopOrDownCount(string serverpartcode, string shopcode, string machinecode, string dateName, string oldDate, string newDate, bool isUploaded) { Hashtable _AllDataSql = new Hashtable(); // _AllDataSql.Add("HIGHWAY_EXCHANGE.T_COMMODITYEX_NEW", // @"SELECT 1 // FROM HIGHWAY_EXCHANGE.T_COMMODITYEX_NEW WHERE COMMODITYEX_ID IS NOT NULL AND // SERVERPARTCODE IS NOT NULL AND SERVERPARTSHOP_ID IS NOT NULL AND COMMODITY_CODE <> '' " + // (isUploaded == true ? " AND NVL(TRANSFER_STATE,0) = 9" : " AND NVL(TRANSFER_STATE,0) <> 9") + // (string.IsNullOrWhiteSpace(serverpartcode) ? "" : (" AND SERVERPARTCODE = '" + serverpartcode + "'")) + // (string.IsNullOrWhiteSpace(dateName) ? "" : (string.Format(" AND {0} >= {1} AND {0} < {2}", dateName, // IsArrayType(ValueType.DateTime, oldDate), IsArrayType(ValueType.DateTime, newDate))))); _AllDataSql.Add("HIGHWAY_EXCHANGE.T_ENDACCOUNT", @"SELECT 1 FROM HIGHWAY_EXCHANGE.T_ENDACCOUNT WHERE ENDACCOUNT_ID IS NOT NULL AND ENDACCOUNT_DATE IS NOT NULL AND ENDACCOUNT_STARTDATE IS NOT NULL AND SERVERPARTCODE IS NOT NULL AND SHOPCODE IS NOT NULL AND MACHINECODE IS NOT NULL AND FLAG IS NOT NULL AND ENDACCOUNT_STARTDATE > TO_DATE('2018/01/01 00:00:00','YYYY/MM/DD HH24:MI:SS')" + (isUploaded == true ? " AND NVL(TRANSFER_STATE,0) = 9" : " AND NVL(TRANSFER_STATE,0) <> 9") + (string.IsNullOrWhiteSpace(serverpartcode) ? "" : (" AND SERVERPARTCODE = '" + serverpartcode + "'")) + (string.IsNullOrWhiteSpace(shopcode) ? "" : (" AND SHOPCODE = '" + shopcode + "'")) + (string.IsNullOrWhiteSpace(machinecode) ? "" : (" AND MACHINECODE = '" + machinecode + "'")) + (string.IsNullOrWhiteSpace(dateName) ? "" : (string.Format(" AND {0} >= {1} AND {0} < {2}", dateName, IsArrayType(ValueType.DateTime, oldDate), IsArrayType(ValueType.DateTime, newDate))))); _AllDataSql.Add("HIGHWAY_EXCHANGE.T_ENDACCOUNT_NEW", @"SELECT 1 FROM HIGHWAY_EXCHANGE.T_ENDACCOUNT_NEW WHERE ENDACCOUNT_CODE IS NOT NULL AND STARTDATE IS NOT NULL AND ENDDATE IS NOT NULL " + (isUploaded == true ? " AND NVL(TRANSFER_STATE,0) = 9" : " AND NVL(TRANSFER_STATE,0) <> 9") + (string.IsNullOrWhiteSpace(serverpartcode) ? "" : (" AND SERVERPARTCODE = '" + serverpartcode + "'")) + (string.IsNullOrWhiteSpace(shopcode) ? "" : (" AND SHOPCODE = '" + shopcode + "'")) + (string.IsNullOrWhiteSpace(machinecode) ? "" : (" AND MACHINECODE = '" + machinecode + "'")) + (string.IsNullOrWhiteSpace(dateName) ? "" : (string.Format(" AND {0} >= {1} AND {0} < {2}", dateName, IsArrayType(ValueType.DateTime, oldDate), IsArrayType(ValueType.DateTime, newDate))))); _AllDataSql.Add("HIGHWAY_EXCHANGE.T_EXCEPTION", @"SELECT 1 FROM HIGHWAY_EXCHANGE.T_EXCEPTION WHERE EXCEPTION_ID IS NOT NULL AND EXCEPTION_DATE IS NOT NULL AND SERVERPARTCODE IS NOT NULL AND SHOPCODE IS NOT NULL AND MACHINECODE IS NOT NULL AND WORKERCODE IS NOT NULL AND EXCEPTIONTYPE IS NOT NULL" + (isUploaded == true ? " AND NVL(TRANSFER_STATE,0) = 9" : " AND NVL(TRANSFER_STATE,0) <> 9") + (string.IsNullOrWhiteSpace(serverpartcode) ? "" : (" AND SERVERPARTCODE = '" + serverpartcode + "'")) + (string.IsNullOrWhiteSpace(shopcode) ? "" : (" AND SHOPCODE = '" + shopcode + "'")) + (string.IsNullOrWhiteSpace(machinecode) ? "" : (" AND MACHINECODE = '" + machinecode + "'")) + (string.IsNullOrWhiteSpace(dateName) ? "" : (string.Format(" AND {0} >= {1} AND {0} < {2}", dateName, IsArrayType(ValueType.DateTime, oldDate), IsArrayType(ValueType.DateTime, newDate))))); _AllDataSql.Add("HIGHWAY_EXCHANGE.T_MOBILE_PAY", @"SELECT 1 FROM HIGHWAY_EXCHANGE.T_MOBILE_PAY WHERE MOBILE_PAY_ID IS NOT NULL AND MOBILEPAY_TYPE IS NOT NULL AND NVL(MOBILEPAY_RESULT,0) <> 9 AND TICKET_CODE IS NOT NULL AND MOBILEPAY_DATE IS NOT NULL" + (isUploaded == true ? " AND NVL(MOBILEPAY_STATE,0) = 9" : " AND NVL(MOBILEPAY_STATE,0) <> 9") + (string.IsNullOrWhiteSpace(serverpartcode) ? "" : (" AND SERVERPARTCODE = '" + serverpartcode + "'")) + (string.IsNullOrWhiteSpace(shopcode) ? "" : (" AND SHOPCODE = '" + shopcode + "'")) + (string.IsNullOrWhiteSpace(machinecode) ? "" : (" AND MACHINECODE = '" + machinecode + "'")) + (string.IsNullOrWhiteSpace(dateName) ? "" : (string.Format(" AND {0} >= {1} AND {0} < {2}", dateName, IsArrayType(ValueType.DateTime, oldDate), IsArrayType(ValueType.DateTime, newDate))))); // _AllDataSql.Add("HIGHWAY_EXCHANGE.T_MOBILE_PAYCHECK", // @"SELECT 1 // FROM HIGHWAY_EXCHANGE.T_MOBILE_PAYCHECK WHERE MOBILE_PAYCHECK_ID IS NOT NULL AND // MOBILEPAY_TYPE IS NOT NULL AND TICKET_CODE IS NOT NULL " + // (isUploaded == true ? " AND NVL(MOBILE_PAYCHECK_STATE,0) = 9" : " AND NVL(MOBILE_PAYCHECK_STATE,0) <> 9") + // (string.IsNullOrWhiteSpace(dateName) ? "" : (string.Format(" AND {0} >= {1} AND {0} < {2}", dateName, // IsArrayType(ValueType.DateTime, oldDate), IsArrayType(ValueType.DateTime, newDate))))); _AllDataSql.Add("HIGHWAY_EXCHANGE.T_PERSONSELL", @"SELECT 1 FROM HIGHWAY_EXCHANGE.T_PERSONSELL WHERE PERSONSELL_ID IS NOT NULL AND SERVERPARTCODE IS NOT NULL AND ENDDATE IS NOT NULL AND SHOPCODE IS NOT NULL AND MACHINECODE IS NOT NULL AND STARTDATE IS NOT NULL AND STARTDATE > TO_DATE('2018/01/01 00:00:00','YYYY/MM/DD HH24:MI:SS') " + (isUploaded == true ? " AND NVL(TRANSFER_STATE,0) = 9" : " AND NVL(TRANSFER_STATE,0) <> 9") + (string.IsNullOrWhiteSpace(serverpartcode) ? "" : (" AND SERVERPARTCODE = '" + serverpartcode + "'")) + (string.IsNullOrWhiteSpace(shopcode) ? "" : (" AND SHOPCODE = '" + shopcode + "'")) + (string.IsNullOrWhiteSpace(machinecode) ? "" : (" AND MACHINECODE = '" + machinecode + "'")) + (string.IsNullOrWhiteSpace(dateName) ? "" : (string.Format(" AND {0} >= {1} AND {0} < {2}", dateName, IsArrayType(ValueType.DateTime, oldDate), IsArrayType(ValueType.DateTime, newDate))))); _AllDataSql.Add("HIGHWAY_EXCHANGE.T_PERSONSELL_NEW", @"SELECT 1 FROM HIGHWAY_EXCHANGE.T_PERSONSELL_NEW WHERE ENDACCOUNT_CODE IS NOT NULL AND STARTDATE IS NOT NULL AND ENDDATE IS NOT NULL " + (isUploaded == true ? " AND NVL(TRANSFER_STATE,0) = 9" : " AND NVL(TRANSFER_STATE,0) <> 9") + (string.IsNullOrWhiteSpace(serverpartcode) ? "" : (" AND SERVERPARTCODE = '" + serverpartcode + "'")) + (string.IsNullOrWhiteSpace(shopcode) ? "" : (" AND SHOPCODE = '" + shopcode + "'")) + (string.IsNullOrWhiteSpace(machinecode) ? "" : (" AND MACHINECODE = '" + machinecode + "'")) + (string.IsNullOrWhiteSpace(dateName) ? "" : (string.Format(" AND {0} >= {1} AND {0} < {2}", dateName, IsArrayType(ValueType.DateTime, oldDate), IsArrayType(ValueType.DateTime, newDate))))); _AllDataSql.Add("HIGHWAY_EXCHANGE.T_COMMODITYSALE_EXTAR", @"SELECT COMMODITYSALE_ID, STARTDATE, ENDDATE, SERVERPARTCODE, SHOPCODE, MACHINECODE, COMMODITY_TYPE, COMMODITY_CODE, COMMODITY_NAME, TICKETCOUNT, TOTALCOUNT, TOTALSELLAMOUNT, TOTALOFFAMOUNT, FLAG,TRANSFER_STATE, TRANSFER_ID, MERGE_STATE FROM HIGHWAY_EXCHANGE.T_COMMODITYSALE_EXTAR WHERE COMMODITYSALE_ID IS NOT NULL AND STARTDATE IS NOT NULL AND ENDDATE IS NOT NULL AND SERVERPARTCODE IS NOT NULL AND SHOPCODE IS NOT NULL AND MACHINECODE IS NOT NULL" + (isUploaded == true ? " AND NVL(TRANSFER_STATE,0) = 9" : " AND NVL(TRANSFER_STATE,0) <> 9") + (string.IsNullOrWhiteSpace(serverpartcode) ? "" : (" AND SERVERPARTCODE = '" + serverpartcode + "'")) + (string.IsNullOrWhiteSpace(shopcode) ? "" : (" AND SHOPCODE = '" + shopcode + "'")) + (string.IsNullOrWhiteSpace(machinecode) ? "" : (" AND MACHINECODE = '" + machinecode + "'")) + (string.IsNullOrWhiteSpace(dateName) ? "" : (string.Format(" AND {0} >= {1} AND {0} < {2}", dateName, IsArrayType(ValueType.DateTime, oldDate), IsArrayType(ValueType.DateTime, newDate))))); // _AllDataSql.Add("HIGHWAY_EXCHANGE.T_SELLDATA", // @"SELECT 1 // FROM HIGHWAY_EXCHANGE.T_SELLDATA_EXTRA WHERE SELLDATA_ID IS NOT NULL AND SELLDATA_DATE IS NOT NULL AND // SERVERPARTCODE IS NOT NULL AND SHOPCODE IS NOT NULL AND MACHINECODE IS NOT NULL AND TICKETCODE IS NOT NULL AND // TICKETCODE <> '' AND WORKERCODE IS NOT NULL AND COMMODITY_CODE IS NOT NULL AND SELLDATA_DATE > TO_DATE('2018/01/01 00:00:00','YYYY/MM/DD HH24:MI:SS')" + // (isUploaded == true ? " AND NVL(SELLDATA_STATE,0) = 9" : " AND NVL(SELLDATA_STATE,0) <> 9") + // (string.IsNullOrWhiteSpace(serverpartcode) ? "" : (" AND SERVERPARTCODE = '" + serverpartcode + "'")) + // (string.IsNullOrWhiteSpace(shopcode) ? "" : (" AND SHOPCODE = '" + shopcode + "'")) + // (string.IsNullOrWhiteSpace(machinecode) ? "" : (" AND MACHINECODE = '" + machinecode + "'")) + // (string.IsNullOrWhiteSpace(dateName) ? "" : (string.Format(" AND {0} >= {1} AND {0} < {2}", dateName, // IsArrayType(ValueType.DateTime, oldDate), IsArrayType(ValueType.DateTime, newDate))))); _AllDataSql.Add("HIGHWAY_EXCHANGE.T_TRANSFER_SALE", @"SELECT 1 FROM HIGHWAY_EXCHANGE.T_TRANSFER_SALE WHERE TRANSFER_FIRSTDATAS IS NOT NULL AND TRANSFER_ID IS NOT NULL AND STARTDATE IS NOT NULL AND ENDDATE IS NOT NULL" + (isUploaded == true ? " AND NVL(TRANSFER_STATE,0) = 9" : " AND NVL(TRANSFER_STATE,0) <> 9") + (string.IsNullOrWhiteSpace(serverpartcode) ? "" : (" AND SERVERPARTCODE = '" + serverpartcode + "'")) + (string.IsNullOrWhiteSpace(shopcode) ? "" : (" AND SHOPCODE = '" + shopcode + "'")) + (string.IsNullOrWhiteSpace(dateName) ? "" : (string.Format(" AND {0} >= {1} AND {0} < {2}", dateName, IsArrayType(ValueType.DateTime, oldDate), IsArrayType(ValueType.DateTime, newDate))))); _AllDataSql.Add("HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS", @"SELECT 1 FROM HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS WHERE OPERATE_DATE IS NOT NULL AND TRANSFERSTATISTICS_CODE IS NOT NULL" + (isUploaded == true ? " AND NVL(TRANSFER_STATE,0) = 9" : " AND NVL(TRANSFER_STATE,0) <> 9") + (string.IsNullOrWhiteSpace(serverpartcode) ? "" : (" AND SERVERPARTCODE = '" + serverpartcode + "'")) + (string.IsNullOrWhiteSpace(shopcode) ? "" : (" AND SHOPCODE = '" + shopcode + "'")) + (string.IsNullOrWhiteSpace(machinecode) ? "" : (" AND MACHINECODE = '" + machinecode + "'")) + (string.IsNullOrWhiteSpace(dateName) ? "" : (string.Format(" AND {0} >= {1} AND {0} < {2}", dateName, IsArrayType(ValueType.DateTime, oldDate), IsArrayType(ValueType.DateTime, newDate))))); return _AllDataSql; } #endregion #region 方法 -> 对应表的时间字段 private Hashtable getCreateDateName() { Hashtable _CreateDateName = new Hashtable(); _CreateDateName.Add("HIGHWAY_EXCHANGE.T_ENDACCOUNT", "ENDACCOUNT_DATE"); _CreateDateName.Add("HIGHWAY_EXCHANGE.T_ENDACCOUNT_NEW", "ENDDATE"); _CreateDateName.Add("HIGHWAY_EXCHANGE.T_EXCEPTION", "EXCEPTION_DATE"); _CreateDateName.Add("HIGHWAY_EXCHANGE.T_MOBILE_PAY", "MOBILEPAY_DATE"); _CreateDateName.Add("HIGHWAY_EXCHANGE.T_PERSONSELL", "ENDDATE"); _CreateDateName.Add("HIGHWAY_EXCHANGE.T_PERSONSELL_NEW", "ENDDATE"); _CreateDateName.Add("HIGHWAY_EXCHANGE.T_COMMODITYSALE_EXTAR", "ENDDATE"); //_CreateDateName.Add("HIGHWAY_EXCHANGE.T_SELLDATA", "SELLDATA_DATE"); _CreateDateName.Add("HIGHWAY_EXCHANGE.T_TRANSFER_SALE", "ENDDATE"); _CreateDateName.Add("HIGHWAY_EXCHANGE.T_TRANSFERSTATISTICS", "OPERATE_DATE"); return _CreateDateName; } #endregion } }