using GetHttpData.SDK;
using GetHttpData.SDK.ThreadPool;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Lib = ESSupport.Lib;
namespace GetMembership
{
public partial class LodData : Form
{
ClientThread _ClientThread = new ClientThread();
QualityHelper _QualityHelper = new QualityHelper();
ConfigThread _ConfigThread = null; //配置类
Timer _Timer = new Timer();
Timer _TimingStart = new Timer();
bool isDeBug = false;
//Lib.OracleHelper oracleHelper;
bool isReplaceColumnName = false;
// string ServerIP;
public LodData()
{
InitializeComponent();
}
private void LodData_Load(object sender, EventArgs e)
{
this.Visible = false;
try
{
string serverpartcode = _QualityHelper.serverpartcode;
if (serverpartcode != "520030" && serverpartcode != "520040" && serverpartcode != "520200")
{
Close();
}
_ClientThread.UploadStringEvent += new ClientThread.OutputResultsUploadArg(UploadStringEvent);//监听上传事件
//数据传输定时器
_Timer.Interval = 60 * 1000;
_Timer.Tick += new EventHandler(this.timer1_Tick);
_Timer.Start();
//指定任务定时器
_TimingStart.Interval = 60 * 1000;
_TimingStart.Tick += new EventHandler(this.timer2_Tick);
_TimingStart.Start();
//TableDataService、DataServices
StringBuilder _ConfigSql = new StringBuilder();
_ConfigSql.Append("http://" + _QualityHelper.dbip + ":" + _QualityHelper.DataServicePort + "/DataServices/Service.asmx").Append(" ");
_ConfigSql.Append(_QualityHelper.authorization).Append(" ");
_ConfigSql.Append(_QualityHelper.serverpartcode).Append(" ");
_ConfigSql.Append(_QualityHelper.serverpartshop_id).Append(" ");
_ConfigSql.Append(_QualityHelper.shopcode).Append(" ");
_ConfigSql.Append(_QualityHelper.macaddress).Append(" ");
_ConfigSql.Append(_QualityHelper.machinecode);
LogHelper.WriteServiceLog(_ConfigSql.ToString());
}
catch (Exception ex)
{
try
{
LogHelper.WriteServiceLog("初始化失败:" + ex.Message);
}
catch { }
}
}
private void button1_Click(object sender, EventArgs e)
{
bool falg = _ClientThread.onState();
}
#region 方法 -> 上传、下发回调结果
///
/// 上传回调结果
///
///
///
private void UploadStringEvent(UploadResultInfo uploadResultInfo, string resultString)
{
try
{
//结束前
if (!uploadResultInfo.StartToEnd && (uploadResultInfo.InterfaceError != null || uploadResultInfo.Error != null))
{
string serverpartcode = _QualityHelper.serverpartcode;
string shopcode = _QualityHelper.shopcode;
string machinecode = _QualityHelper.machinecode;
string macaddress = _QualityHelper.macaddress;
//记录接口错误信息到文本日志中,供后续排查
if (!string.IsNullOrWhiteSpace(uploadResultInfo.InterfaceError))
{
Lib.LogHelper.WriteServiceLog("接口错误:" + uploadResultInfo.InterfaceError +
$"\n{uploadResultInfo.TableDesc}数据上传错误:[{uploadResultInfo.TableName.Replace("HIGHWAY_EXCHANGE.", "")}];" +
$"耗时:{uploadResultInfo.Elapsed.TotalSeconds.ToString("F2") + "秒"}");
Lib.LogHelper.WriteServiceLog("///--------------------------------------记录结束-------------------------------------///");
}
//记录本地错误信息到文本日志中,供后续排查
if (!string.IsNullOrWhiteSpace(uploadResultInfo.Error))
{
Lib.LogHelper.WriteServiceLog("本地错误:" + uploadResultInfo.Error +
$"\n{uploadResultInfo.TableDesc}数据上传错误:[{uploadResultInfo.TableName.Replace("HIGHWAY_EXCHANGE.", "")}];" +
$"耗时:{uploadResultInfo.Elapsed.TotalSeconds.ToString("F2") + "秒"}");
Lib.LogHelper.WriteServiceLog("///--------------------------------------记录结束-------------------------------------///");
}
}
}
catch
{
}
}
#endregion
#region 方法 -> 自定义线程配置
private void ThreadConfigure()
{
try
{
if (_ConfigThread == null)
{
_ConfigThread = new ConfigThread(_QualityHelper.serverpartcode, isReplaceColumnName);
}
_ClientThread.setConfiguration("http://" + _QualityHelper.dbip + ":" + _QualityHelper.DataServicePort + "/DataServices/Service.asmx",
_QualityHelper.authorization, _QualityHelper.serverpartcode, _QualityHelper.serverpartshop_id,
_QualityHelper.shopcode, _QualityHelper.macaddress, _QualityHelper.machinecode, int.Parse(_QualityHelper.maxdataquantity), 3);
_ClientThread.IsDownload(false);
_ClientThread.IsUpload(true, new List { "T_SELLMASTER", "T_SELLDETAILS", "T_SELLDATA" });
_ClientThread.setConfigThread(_ConfigThread);
}
catch
{
}
}
#endregion
#region 方法 -> 定时启动主线程
private void timer1_Tick(object sender, EventArgs e)
{
try
{
ThreadConfigure();//线程配置
if (!_ClientThread.onState())
{
LogHelper.WriteServiceLog("传输预启动失败");
}
}
catch
{
}
}
#endregion
#region 方法 -> 定时清理
private void timer2_Tick(object sender, EventArgs e)
{
try
{
//重启程序
onRestartFrom();
//获取时间
DateTime _DateTime = DateTime.Now;
int intHour = _DateTime.Hour;
int intMinute = _DateTime.Minute;
//int intSecond = _DateTime.Second;
if (intMinute != 0)
{
return;
}
//启动清除表数据线程
StartClearThread();
}
catch { }
}
#endregion
#region 方法 -> 启动清除表数据线程
private void StartClearThread()
{
//线程启动
System.Threading.Thread threadClear = new System.Threading.Thread(new System.Threading.ThreadStart(delegate ()
{
try
{
Lib.SyBaseHelper.ExecuteSqlTran(new List { "DELETE FROM T_TRANSMISSIONERROR WHERE (RECORD_DATE < GETDATE() - 7)" });
}
catch (Exception ex)
{
try
{
if (isDeBug)
{
LogHelper.WriteServiceLog(ex.Message.ToString());
}
}
catch { }
}
}));
threadClear.IsBackground = true;
threadClear.Start();
}
#endregion
#region 方法 -> 重启程序
private void onRestartFrom()
{
try
{
Process CurrentProcess = Process.GetCurrentProcess();
double _Working = CurrentProcess.WorkingSet64 / 1024 / 1024;
if (isDeBug)
{
LogHelper.WriteServiceLog("内存占用:" + _Working.ToString());
}
//大于500M内存占用重启当前传输工具
if (_Working > 500)
{
if (isDeBug)
{
LogHelper.WriteServiceLog("---------------程序重启----------------");
}
System.Windows.Forms.Application.Restart(); //重启当前程序
return;
}
}
catch { }
}
#endregion
#region 方法 -> 获取唯一标识
///
/// luhn计算校验位
///
/// 时间
///
public string GetCheckNumber(string serverpartcode, string shopcode, string machinecode)
{
try
{
Random _random = new Random();
string code = serverpartcode + shopcode + machinecode + DateTime.Now.ToString("yyyyMMddHHmmssfff")
+ RandomNum.getRandomNum(1, 0, 100)[0].ToString().PadLeft(2, '0');
int i, checkSum = 0;
for (i = code.Length - 1; i >= 0; i--)
{
if (i % 2 == 0)
{
int val = ((code[i] - '0') * 2);
while (val > 0)
{
checkSum += (val % 10);
val /= 10;
}
}
else
{
checkSum += (code[i] - '0');
}
}
checkSum = checkSum % 10;
return code + (10 - checkSum).ToString();
}
catch
{
return "";
}
}
#endregion
}
}