699 lines
30 KiB
C#
699 lines
30 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// MainWindow.xaml 的交互逻辑
|
||
/// </summary>
|
||
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"];
|
||
|
||
/// <summary>
|
||
/// 会员数据传输线程
|
||
/// </summary>
|
||
ClientThread MSPClientThread = new ClientThread();
|
||
|
||
/// <summary>
|
||
/// 会员数据传输配置
|
||
/// </summary>
|
||
ConfigThread MSPConfigThread = null;
|
||
|
||
/// <summary>
|
||
/// 经营数据传输线程
|
||
/// </summary>
|
||
ClientThread HWSClientThread = new ClientThread();
|
||
|
||
/// <summary>
|
||
/// 经营数据传输配置
|
||
/// </summary>
|
||
ConfigThread HWSConfigThread = null;
|
||
|
||
/// <summary>
|
||
/// 销售流水数据传输线程
|
||
/// </summary>
|
||
ClientThread ExClientThread = new ClientThread();
|
||
|
||
/// <summary>
|
||
/// 销售流水数据传输配置
|
||
/// </summary>
|
||
ConfigThread ExConfigThread = null;
|
||
|
||
/// <summary>
|
||
/// 传输客户端定时器
|
||
/// </summary>
|
||
DispatcherTimer CilentTimer = new DispatcherTimer();
|
||
|
||
/// <summary>
|
||
/// MOBILESERVICE_PLATFORM数据库连接类
|
||
/// </summary>
|
||
Transmission.SDK.OracleHelper MSPOracle;
|
||
|
||
/// <summary>
|
||
/// HIGHWAY_STORAGE数据库连接类
|
||
/// </summary>
|
||
Transmission.SDK.OracleHelper HWSOracle;
|
||
|
||
/// <summary>
|
||
/// HIGHWAY_EXCHANGE数据库连接类
|
||
/// </summary>
|
||
Transmission.SDK.OracleHelper ExOracle;
|
||
|
||
/// <summary>
|
||
/// 运行状态上报时间
|
||
/// </summary>
|
||
DateTime StateUploadTime;
|
||
|
||
/// <summary>
|
||
/// 运行状态上报线程
|
||
/// </summary>
|
||
Thread StateUploadThread;
|
||
|
||
/// <summary>
|
||
/// 运行日志记录
|
||
/// </summary>
|
||
DataTable TransResultTable;
|
||
|
||
/// <summary>
|
||
/// 是否首次执行
|
||
/// </summary>
|
||
bool IsFirstRun = true;
|
||
|
||
/// <summary>
|
||
/// 流水数据校验定时器
|
||
/// </summary>
|
||
DispatcherTimer CheckTimer = new DispatcherTimer();
|
||
|
||
/// <summary>
|
||
/// 流水数据校验线程
|
||
/// </summary>
|
||
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 事件 -> 主窗体按钮事件
|
||
/// <summary>
|
||
/// 主窗体按钮事件
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
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 事件 -> 主线程定时器
|
||
/// <summary>
|
||
/// 主线程定时器
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
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 方法 -> 会员数据上传配置
|
||
/// <summary>
|
||
/// 移动业务数据上传配置
|
||
/// </summary>
|
||
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<string>
|
||
{
|
||
"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 方法 -> 经营数据上传配置
|
||
/// <summary>
|
||
/// 普通业务数据上传配置
|
||
/// </summary>
|
||
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<string>
|
||
{
|
||
"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 方法 -> 销售流水数据上传配置
|
||
/// <summary>
|
||
/// 销售流水数据上传配置
|
||
/// </summary>
|
||
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<string>
|
||
{
|
||
"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 事件 -> 上传回调事件
|
||
/// <summary>
|
||
/// 上传回调事件
|
||
/// </summary>
|
||
/// <param name="uploadResultInfo"></param>
|
||
/// <param name="resultString"></param>
|
||
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 });
|
||
}
|
||
|
||
/// <summary>
|
||
/// 运行日志呈现
|
||
/// </summary>
|
||
/// <param name="triggerTime">日志时间</param>
|
||
/// <param name="resultMessage">日志内容</param>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 运行日志记录表结构
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
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<string> _SqlList = new List<string>();
|
||
_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
|
||
}
|
||
}
|