using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Threading; using System.Windows; using System.Windows.Controls; using System.Windows.Threading; using Transmission.SDK.ThreadPool; namespace DataTransferClient { /// /// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : Window { #region 方法 -> 初始化配置参数 protected string TimerInterval = ConfigurationManager.AppSettings["Interval"]; protected string _ServerIp = ConfigurationManager.AppSettings["SERVERIP"]; protected string _ServerPort = ConfigurationManager.AppSettings["SERVERPORT"]; protected string _PassWord = ConfigurationManager.AppSettings["PASSWORD"]; protected string _UserName = ConfigurationManager.AppSettings["USERNAME"]; protected string _ConnName = ConfigurationManager.AppSettings["CONNNAME"]; protected string _CheckInterval = ConfigurationManager.AppSettings["CHECKINTERVAL"]; protected string _ServerPartCode = ConfigurationManager.AppSettings["SERVERPARTCODE"]; /// /// 会员数据传输线程 /// ClientThread MSPClientThread = new ClientThread(); /// /// 会员数据传输配置 /// ConfigThread MSPConfigThread = null; /// /// 经营数据传输线程 /// ClientThread HWSClientThread = new ClientThread(); /// /// 经营数据传输配置 /// ConfigThread HWSConfigThread = null; /// /// 销售流水数据传输线程 /// ClientThread ExClientThread = new ClientThread(); /// /// 销售流水数据传输配置 /// ConfigThread ExConfigThread = null; /// /// 传输客户端定时器 /// DispatcherTimer CilentTimer = new DispatcherTimer(); /// /// MOBILESERVICE_PLATFORM数据库连接类 /// Transmission.SDK.OracleHelper MSPOracle; /// /// HIGHWAY_STORAGE数据库连接类 /// Transmission.SDK.OracleHelper HWSOracle; /// /// HIGHWAY_EXCHANGE数据库连接类 /// Transmission.SDK.OracleHelper ExOracle; /// /// 运行状态上报时间 /// DateTime StateUploadTime; /// /// 运行状态上报线程 /// Thread StateUploadThread; /// /// 运行日志记录 /// DataTable TransResultTable; /// /// 是否首次执行 /// bool IsFirstRun = true; /// /// 流水数据校验定时器 /// DispatcherTimer CheckTimer = new DispatcherTimer(); /// /// 流水数据校验线程 /// Thread CheckThread; #endregion #region 方法 -> 主窗体加载事件 public MainWindow() { InitializeComponent(); //绑定上传回调事件 MSPClientThread.UploadStringEvent += new ClientThread.OutputResultsUploadArg(ClientThread_UploadStringEvent); HWSClientThread.UploadStringEvent += new ClientThread.OutputResultsUploadArg(ClientThread_UploadStringEvent); ExClientThread.UploadStringEvent += new ClientThread.OutputResultsUploadArg(ClientThread_UploadStringEvent); CilentTimer.Tick += CilentTimer_Tick; double timeInterval = 0; try { //if (!double.TryParse(TimerInterval, out timeInterval) || timeInterval < 1 || timeInterval > 60) //{ // timeInterval = 5; //} timeInterval = double.Parse(TimerInterval); } catch { timeInterval = 5; } timeInterval = timeInterval * 60 * 1000; CilentTimer.Interval = TimeSpan.FromMilliseconds(timeInterval); CilentTimer.Start(); BtnTimerState.Content = "停止"; Title = "数据中台传输工具 DCTCv" + System.Windows.Forms.Application.ProductVersion; int _FileCount = 0; string[] _masks = { ".log" }; try { Transmission.SDK.LogHelper.DeleteFiles( AppDomain.CurrentDomain.BaseDirectory + "\\log", new string[] { ".log" }, false, false, ref _FileCount); } catch { } //工具打开就启动程序 CilentTimer_Tick(null, null); Double.TryParse(_CheckInterval,out double CheckInterval); CheckTimer.Tick += CheckTimer_Tick; CheckTimer.Interval = TimeSpan.FromMinutes(CheckInterval); //CheckTimer.Start(); } #endregion #region 事件 -> 主窗体按钮事件 /// /// 主窗体按钮事件 /// /// /// private void Button_Click(object sender, RoutedEventArgs e) { Button _Button = (Button)sender; switch (_Button.Name) { case "BtnTimerState": if (CilentTimer != null) { if (CilentTimer.IsEnabled) { CilentTimer.Stop(); _Button.Content = "启动"; TransResultBeginInvoke(DateTime.Now, "数据传输定时器已停止"); } else { CilentTimer.Start(); _Button.Content = "停止"; TransResultBeginInvoke(DateTime.Now, "数据传输定时器已启动"); } } else { TransResultBeginInvoke(DateTime.Now, "数据传输定时器初始化失败,请重启程序!"); } break; case "BtnClosed": if (CilentTimer != null && CilentTimer.IsEnabled) { CilentTimer.Stop(); } Close(); break; } } #endregion #region 事件 -> 主线程定时器 /// /// 主线程定时器 /// /// /// private void CilentTimer_Tick(object sender, EventArgs e) { try { if (MSPOracle == null || !MSPOracle.ConnTest()) { string _MSPConnString = ConfigurationManager.AppSettings["MOBILESERVICE_PLATFORM"]; MSPOracle = new Transmission.SDK.OracleHelper(_MSPConnString.Split(',')[0], _MSPConnString.Split(',')[4], _MSPConnString.Split(',')[1], _MSPConnString.Split(',')[2], _MSPConnString.Split(',')[3]); } if (HWSOracle == null || !HWSOracle.ConnTest()) { string _HWSConnString = ConfigurationManager.AppSettings["HIGHWAY_STORAGE"]; HWSOracle = new Transmission.SDK.OracleHelper(_HWSConnString.Split(',')[0], _HWSConnString.Split(',')[4], _HWSConnString.Split(',')[1], _HWSConnString.Split(',')[2], _HWSConnString.Split(',')[3]); } if (ExOracle == null || !ExOracle.ConnTest()) { string _ExConnString = ConfigurationManager.AppSettings["HIGHWAY_EXCHANGE"]; ExOracle = new Transmission.SDK.OracleHelper(_ExConnString.Split(',')[0], _ExConnString.Split(',')[4], _ExConnString.Split(',')[1], _ExConnString.Split(',')[2], _ExConnString.Split(',')[3]); } TransResultBeginInvoke(DateTime.Now, "正在预启动上传子线程......"); if (MSPConfigThreadConfigure()) { if (MSPClientThread.onState(MSPOracle)) { TransResultBeginInvoke(DateTime.Now, "会员数据上传线程预启动成功"); } else { TransResultBeginInvoke(DateTime.Now, "会员数据上传线程预启动失败"); } } if (HWSConfigThreadConfigure()) { if (HWSClientThread.onState(HWSOracle)) { TransResultBeginInvoke(DateTime.Now, "经营数据上传线程预启动成功"); } else { TransResultBeginInvoke(DateTime.Now, "经营数据上传线程预启动失败"); } } if (ExConfigThreadConfigure()) { if (ExClientThread.onState(ExOracle)) { TransResultBeginInvoke(DateTime.Now, "销售流水数据上传线程预启动成功"); } else { TransResultBeginInvoke(DateTime.Now, "销售流水数据上传线程预启动失败"); } } } catch (Exception ex) { TransResultBeginInvoke(DateTime.Now, "传输启动失败:" + ex.Message); Transmission.SDK.LogHelper.WriteServiceLog("传输启动失败:" + ex.Message); } } #endregion #region 方法 -> 会员数据上传配置 /// /// 移动业务数据上传配置 /// private bool MSPConfigThreadConfigure() { string _MobileServicePlatformDataUrl; try { _MobileServicePlatformDataUrl = ConfigurationManager.AppSettings["MobileServicePlatformDataUrl"]; } catch { _MobileServicePlatformDataUrl = ""; } if (string.IsNullOrWhiteSpace(_MobileServicePlatformDataUrl)) { TransResultBeginInvoke(DateTime.Now, $"会员数据上传线程启动失败。原因:参数[MobileServicePlatformDataUrl]未配置。"); return false; } if (MSPConfigThread == null) { MSPConfigThread = new ConfigThread(""); } MSPClientThread.IsUpload(true, new List { "T_MEMBERSHIP", "T_MEMBERSHIPPOINTS", "T_MALLORDER", "T_CONSUMPTIONRECORD", "T_MEMBERSHIPCOUPON" }); MSPClientThread.IsDownload(false); try { MSPClientThread.setConfiguration($"{_MobileServicePlatformDataUrl}", "", "888888", "", "", "", "", 50, 1); MSPClientThread.setConfigThread(MSPConfigThread); } catch (Exception ex) { TransResultBeginInvoke(DateTime.Now, "会员数据上传配置失败:" + ex.Message); Transmission.SDK.LogHelper.WriteServiceLog("会员数据上传配置失败:" + ex.Message); } return true; } #endregion #region 方法 -> 经营数据上传配置 /// /// 普通业务数据上传配置 /// private bool HWSConfigThreadConfigure() { string _HighwayStorageDataUrl; try { _HighwayStorageDataUrl = ConfigurationManager.AppSettings["HighwayStorageDataUrl"]; } catch { _HighwayStorageDataUrl = ""; } if (string.IsNullOrWhiteSpace(_HighwayStorageDataUrl)) { TransResultBeginInvoke(DateTime.Now, $"经营数据上传线程启动失败。原因:参数[HighwayStorageDataUrl]未配置。"); return false; } if (HWSConfigThread == null) { HWSConfigThread = new ConfigThread(""); } HWSClientThread.IsUpload(true, new List { "T_SERVERPARTSHOP", "T_COMMODITY", "T_REVENUE", "T_COMPACT", "T_CHECK" }); HWSClientThread.IsDownload(false); try { HWSClientThread.setConfiguration($"{_HighwayStorageDataUrl}", "", "888888", "", "", "", "", 50, 1); HWSClientThread.setConfigThread(HWSConfigThread); } catch (Exception ex) { TransResultBeginInvoke(DateTime.Now, "经营数据上传配置失败:" + ex.Message); Transmission.SDK.LogHelper.WriteServiceLog("经营数据上传配置失败:" + ex.Message); } return true; } #endregion #region 方法 -> 销售流水数据上传配置 /// /// 销售流水数据上传配置 /// private bool ExConfigThreadConfigure() { bool IsRunning = false; if (!string.IsNullOrEmpty(_ServerIp) && !string.IsNullOrEmpty(_ServerPort) && !string.IsNullOrEmpty(_PassWord) && !string.IsNullOrEmpty(_UserName) && !string.IsNullOrEmpty(_ConnName)) { OracleHelper _OracleHelper = new OracleHelper( _ServerIp, _ServerPort, _ConnName, _UserName, _PassWord); if (!string.IsNullOrEmpty(_ServerPartCode)) { DataTable _DataTable = _OracleHelper.ExcuteSqlGetDataSet( @"SELECT SERVERPARTCODE FROM HIGHWAY_EXCHANGE.T_SYSCODE").Tables[0]; foreach (DataRow _DataRow in _DataTable.Rows) { if (("," + _ServerPartCode + ",").Contains(_DataRow[0].ToString())) { IsRunning = true; } } } else { IsRunning = true; } } else { IsRunning = true; } if (IsRunning) { string _ExchangeDataUrl; try { _ExchangeDataUrl = ConfigurationManager.AppSettings["ExchangeDataUrl"]; } catch { _ExchangeDataUrl = ""; } if (string.IsNullOrWhiteSpace(_ExchangeDataUrl)) { TransResultBeginInvoke(DateTime.Now, $"销售流水数据上传线程启动失败。原因:参数[ExchangeDataUrl]未配置。"); return false; } if (ExConfigThread == null) { ExConfigThread = new ConfigThread(""); } ExClientThread.IsUpload(true, new List { "T_SELLDATA", "T_SELLMASTER" }); ExClientThread.IsDownload(false); try { ExClientThread.setConfiguration($"{_ExchangeDataUrl}", "", "888888", "", "", "", "", 50, 1); ExClientThread.setConfigThread(ExConfigThread); } catch (Exception ex) { TransResultBeginInvoke(DateTime.Now, "销售流水数据上传配置失败:" + ex.Message); Transmission.SDK.LogHelper.WriteServiceLog("销售流水数据上传配置失败:" + ex.Message); } return true; } else { TransResultBeginInvoke(DateTime.Now, "当前服务区未配置流水启动!"); Transmission.SDK.LogHelper.WriteServiceLog("当前服务区未配置流水启动!"); } return false; } #endregion #region 事件 -> 上传回调事件 /// /// 上传回调事件 /// /// /// private void ClientThread_UploadStringEvent(UploadResultInfo uploadResultInfo, string resultString) { if (uploadResultInfo.StartToEnd) { TransResultBeginInvoke(DateTime.Now, resultString); } else { TransResultBeginInvoke(DateTime.Now, string.Format("上传完成:[{0}]\n     总数:{1};成功:{2};过滤:{3};失败:{5};耗时:{4}{6}", uploadResultInfo.TableName, uploadResultInfo.TotalNumber, uploadResultInfo.SuccessNumber, uploadResultInfo.FilterNumber, uploadResultInfo.Elapsed.TotalSeconds.ToString("F2") + "秒", uploadResultInfo.TotalNumber - uploadResultInfo.SuccessNumber - uploadResultInfo.FilterNumber, (string.IsNullOrWhiteSpace(uploadResultInfo.InterfaceError) ? "" : (";\n     接口错误:" + uploadResultInfo.InterfaceError)) + (string.IsNullOrWhiteSpace(uploadResultInfo.Error) ? "" : (";\n     本地错误:" + uploadResultInfo.Error)))); if (!string.IsNullOrWhiteSpace(uploadResultInfo.InterfaceError) || !string.IsNullOrWhiteSpace(uploadResultInfo.Error)) { Transmission.SDK.LogHelper.WriteServiceLog(string.Format("上传完成:[{0}]总数:{1};成功:{2};过滤:{3};失败:{5};耗时:{4}{6}", uploadResultInfo.TableName, uploadResultInfo.TotalNumber, uploadResultInfo.SuccessNumber, uploadResultInfo.FilterNumber, uploadResultInfo.Elapsed.TotalSeconds.ToString("F2") + "秒", uploadResultInfo.TotalNumber - uploadResultInfo.SuccessNumber - uploadResultInfo.FilterNumber, (string.IsNullOrWhiteSpace(uploadResultInfo.InterfaceError) ? "" : (";接口错误:" + uploadResultInfo.InterfaceError)) + (string.IsNullOrWhiteSpace(uploadResultInfo.Error) ? "" : (";本地错误:" + uploadResultInfo.Error)))); } } } #endregion #region 委托 -> 运行日志委托处理事件 private delegate void DelegateTransResult(DateTime triggerTime, string resultMessage); private void TransResultBeginInvoke(DateTime triggerTime, string resultMessage) { Dispatcher.BeginInvoke(new DelegateTransResult(TransResult), new object[] { triggerTime, resultMessage }); } /// /// 运行日志呈现 /// /// 日志时间 /// 日志内容 private void TransResult(DateTime triggerTime, string resultMessage) { if (TransResultTable == null) { TransResultTable = ResultTable(); } foreach (DataRow _RowTemp in TransResultTable.Select(string.Format("TransDate < '{0}'", DateTime.Now.AddHours(-1)))) { TransResultTable.Rows.Remove(_RowTemp); } TransResultTable.AcceptChanges(); DataRow _DataRow = TransResultTable.NewRow(); _DataRow["TransDate"] = triggerTime; _DataRow["TransResult"] = resultMessage; TransResultTable.Rows.InsertAt(_DataRow, 0); DataTransResult.AutoGenerateColumns = false; DataTransResult.SelectionMode = DataGridSelectionMode.Single; DataTransResult.ItemsSource = TransResultTable.DefaultView; } /// /// 运行日志记录表结构 /// /// private DataTable ResultTable() { DataTable _DataTable = new DataTable(); _DataTable.Columns.Add("TransDate", typeof(DateTime)); _DataTable.Columns.Add("TransResult", typeof(string)); return _DataTable; } #endregion #region 方法 -> 服务区流水校验 private void CheckTimer_Tick(object sender, EventArgs e) { if (CheckThread == null || !CheckThread.IsAlive) { CheckThread = new Thread(CheckSalesData) { IsBackground = true }; CheckThread.Start(); } } private void CheckSalesData() { try { if (!string.IsNullOrEmpty(_ServerIp) && !string.IsNullOrEmpty(_ServerPort) && !string.IsNullOrEmpty(_PassWord) && !string.IsNullOrEmpty(_UserName) && !string.IsNullOrEmpty(_ConnName)) { OracleHelper _OracleHelper = new OracleHelper( _ServerIp, _ServerPort, _ConnName, _UserName, _PassWord); string _UnionSql = ""; DataTable CheckTable = _OracleHelper.ExcuteSqlGetDataSet( @"SELECT WM_CONCAT(ENDACCOUNT_CODE) AS ENDACCOUNT_CODE,ENDACCOUNT_TYPE FROM HIGHWAY_EXCHANGE.T_ENDACCOUNTCHECK GROUP BY ENDACCOUNT_TYPE").Tables[0]; if (CheckTable.Rows.Count > 0) { DataRow[] _DataRow = CheckTable.Select("ENDACCOUNT_TYPE = 0"); if (_DataRow.Length > 0) { _UnionSql += @" UNION ALL SELECT SERVERPARTCODE,SHOPCODE,MACHINECODE,TOTALCOUNT AS TOTAL_COUNT, TICKETCOUNT AS TICKET_COUNT,TOTALSELLAMOUNT AS TOTAL_AMOUNT, ENDACCOUNT_STARTDATE AS STARTDATE,ENDACCOUNT_DATE AS ENDDATE, SERVERPARTCODE || SHOPCODE || MACHINECODE || TO_CHAR(ENDACCOUNT_DATE, 'YYYYMMDDHH24MISS') AS ENDACCOUNT_CODE FROM HIGHWAY_EXCHANGE.T_ENDACCOUNT WHERE ENDACCOUNT_STATE = 1 AND SERVERPARTCODE || SHOPCODE || MACHINECODE || TO_CHAR(ENDACCOUNT_DATE,'YYYYMMDDHH24MISS') IN ('" + _DataRow[0]["ENDACCOUNT_CODE"].ToString().Replace(",", "','") + "')"; } _DataRow = CheckTable.Select("ENDACCOUNT_TYPE = 1"); if (_DataRow.Length > 0) { _UnionSql += @" UNION ALL SERVERPARTCODE,SHOPCODE,MACHINECODE,TOTAL_COUNT, TICKET_COUNT,TOTAL_AMOUNT,STARTDATE,ENDDATE,ENDACCOUNT_CODE FROM HIGHWAY_EXCHANGE.T_ENDACCOUNT_NEW WHERE ENDACCOUNT_TYPE = 1 AND ENDACCOUNT_CODE IN ('" + _DataRow[0]["ENDACCOUNT_CODE"].ToString().Replace(",", "','") + "')"; } } DataTable dataTable = _OracleHelper.ExcuteSqlGetDataSet(string.Format( @"SELECT SERVERPARTCODE,SHOPCODE,MACHINECODE,TOTAL_COUNT,TYPES, TICKET_COUNT,TOTAL_AMOUNT,STARTDATE,ENDDATE,ENDACCOUNT_CODE FROM ( SELECT SERVERPARTCODE,SHOPCODE,MACHINECODE,TOTAL_COUNT,TICKET_COUNT, TOTAL_AMOUNT,STARTDATE,ENDDATE,ENDACCOUNT_CODE,1 AS TYPES FROM HIGHWAY_EXCHANGE.T_ENDACCOUNT_NEW WHERE ENDDATE BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) - 1 AND ENDACCOUNT_TYPE = 1 UNION ALL SELECT SERVERPARTCODE,SHOPCODE,MACHINECODE,TOTALCOUNT AS TOTAL_COUNT, TICKETCOUNT AS TICKET_COUNT,TOTALSELLAMOUNT AS TOTAL_AMOUNT,0 AS TYPES, ENDACCOUNT_STARTDATE AS STARTDATE,ENDACCOUNT_DATE AS ENDDATE, SERVERPARTCODE || SHOPCODE || MACHINECODE || TO_CHAR(ENDACCOUNT_DATE,'YYYYMMDDHH24MISS') AS ENDACCOUNT_CODE FROM HIGHWAY_EXCHANGE.T_ENDACCOUNT WHERE ENDACCOUNT_DATE BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) - 1 AND ENDACCOUNT_STATE = 1 {0} )", _UnionSql)).Tables[0]; string _StartDate = dataTable.Compute("MIN(STARTDATE)", "").ToString(); string _EndDate = dataTable.Compute("MAX(ENDDATE)", "").ToString(); DataTable _SaleDataTable = _OracleHelper.ExcuteSqlGetDataSet(string.Format( @"SELECT SERVERPARTCODE,SHOPCODE,MACHINECODE,SELLDATA_DATE,FACTAMOUNT FROM ( SELECT SERVERPARTCODE,SHOPCODE,MACHINECODE,SELLDATA_DATE,FACTAMOUNT,0 AS TYPES FROM HIGHWAY_EXCHANGE.T_SELLDATA WHERE SELLDATA_DATE BETWEEN TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('{1}','YYYY/MM/DD HH24:MI:SS') UNION ALL SELECT SERVERPARTCODE,SHOPCODE,MACHINECODE,SELLMASTER_DATE AS SELLDATA_DATE, SELLMASTER_AMOUNT AS FACTAMOUNT,1 AS TYPES FROM HIGHWAY_EXCHANGE.T_SELLMASTER WHERE SELLMASTER_DATE BETWEEN TO_DATE('{0}','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('{1}','YYYY/MM/DD HH24:MI:SS') )", _StartDate, _EndDate)).Tables[0]; List _SqlList = new List(); _SqlList.Add("DELETE FROM HIGHWAY_EXCHANGE.T_ENDACCOUNTCHECK"); foreach (DataRow _DataRow in dataTable.Rows) { if (_DataRow["TYPES"].ToString() == "0") { decimal.TryParse(_DataRow["TOTAL_AMOUNT"].ToString(), out decimal TOTAL_AMOUNT); decimal.TryParse(_SaleDataTable.Compute("SUM(FACTAMOUNT)", string.Format( @"TYPES = 0 AND SERVERPARTCODE = '{0}' AND SHOPCODE = '{1}' AND MACHINECODE = '{2}' AND SELLDATA_DATE BETWEEN '{3}' AND '{4}'", _DataRow["SERVERPARTCODE"], _DataRow["SHOPCODE"], _DataRow["MACHINECODE"], _DataRow["STARTDATE"], _DataRow["ENDDATE"])).ToString(), out decimal _FACTAMOUNT); if (TOTAL_AMOUNT != _FACTAMOUNT) { _SqlList.Add(string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_ENDACCOUNTCHECK ( ENDACCOUNTCHECK_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,ENDACCOUNT_DATE,ENDACCOUNT_TYPE) VALUES (SEQ_ENDACCOUNTCHECK.NEXTVAL,'{0}','{1}','{2}',TO_DATE('{3}', 'YYYY/MM/DD HH24:MI:SS'),'{4}')", _DataRow["SERVERPARTCODE"], _DataRow["SHOPCODE"], _DataRow["MACHINECODE"], _DataRow["ENDDATE"], _DataRow["TYPES"])); } } else { decimal.TryParse(_DataRow["TOTAL_AMOUNT"].ToString(), out decimal TOTAL_AMOUNT); decimal.TryParse(_SaleDataTable.Compute("SUM(FACTAMOUNT)", string.Format( @"TYPES = 1 AND SERVERPARTCODE = '{0}' AND SHOPCODE = '{1}' AND MACHINECODE = '{2}' AND SELLDATA_DATE BETWEEN '{3}' AND '{4}'", _DataRow["SERVERPARTCODE"], _DataRow["SHOPCODE"], _DataRow["MACHINECODE"], _DataRow["STARTDATE"], _DataRow["ENDDATE"])).ToString(), out decimal _FACTAMOUNT); if (TOTAL_AMOUNT != _FACTAMOUNT) { _SqlList.Add(string.Format(@"INSERT INTO HIGHWAY_EXCHANGE.T_ENDACCOUNTCHECK ( ENDACCOUNTCHECK_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE,ENDACCOUNT_DATE,ENDACCOUNT_TYPE) VALUES (SEQ_ENDACCOUNTCHECK.NEXTVAL,'{0}','{1}','{2}',TO_DATE('{3}', 'YYYY/MM/DD HH24:MI:SS'),'{4}')", _DataRow["SERVERPARTCODE"], _DataRow["SHOPCODE"], _DataRow["MACHINECODE"], _DataRow["ENDDATE"], _DataRow["TYPES"])); } } } try { _OracleHelper.ExecuteSqlTran(_SqlList); } catch (Exception ex) { TransResultBeginInvoke(DateTime.Now, "流水校验失败:" + ex.Message); Transmission.SDK.LogHelper.WriteServiceLog("流水校验失败:" + ex.Message); } } else { TransResultBeginInvoke(DateTime.Now, "流水校验启动失败,配置不完整!"); } } catch (Exception ex) { Transmission.SDK.LogHelper.WriteServiceLog("流水校验失败:" + ex.Message); } } #endregion } }