925 lines
40 KiB
C#
925 lines
40 KiB
C#
using GetHttpData.SDK.ThreadPool;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Net;
|
||
using System.Threading;
|
||
using System.Windows;
|
||
using System.Windows.Controls;
|
||
using System.Windows.Input;
|
||
using System.Windows.Media;
|
||
using System.Windows.Media.Imaging;
|
||
using System.Windows.Threading;
|
||
using TouchCashier.Common;
|
||
using TouchCashier.Utils;
|
||
using TouchCashier.Parameter;
|
||
using System.IO;
|
||
|
||
namespace TouchCashier
|
||
{
|
||
/// <summary>
|
||
/// MainWindow.xaml 的交互逻辑
|
||
/// </summary>
|
||
/// <remarks>登录界面进行的操作:
|
||
/// <para>1、启动数据库,进行数据库连接检测</para>
|
||
/// <para>2、加载系统参数信息</para>
|
||
/// <para>3.1、检测是否异常重启,异常重启的情况下进行自动登录</para>
|
||
/// <para>3.2、用户输入账号及登录密码进行登录</para>
|
||
/// <para>4、检测当前账期结算情况,记录账期开始信息、工班登录信息</para>
|
||
/// <para>5、打开收银主操作界面,并启动自然日数据生成线程,对自然日数据进行检测上传</para>
|
||
/// </remarks>
|
||
public partial class MainWindow : Window
|
||
{
|
||
#region 参数属性
|
||
private Thread LoginThread;
|
||
private Thread _DataThread;
|
||
private Thread LoadThread;
|
||
private Thread DownDateThread;
|
||
private ClientThread DownClientThread { get; set; }
|
||
bool IsLogin = false;
|
||
private int Downing { get; set; }
|
||
#endregion
|
||
|
||
#region 构造函数 -> 登陆界面
|
||
public MainWindow()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
#endregion
|
||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||
{
|
||
DownClientThread = new ClientThread();
|
||
DownClientThread.DownloadStringEvent += DownClientThread_DownloadStringEvent;
|
||
|
||
tbVersion.Text = "系统版本:" + System.Windows.Forms.Application.ProductVersion;
|
||
//启动本地数据库
|
||
try
|
||
{
|
||
System.Diagnostics.Process.Start(AppDomain.CurrentDomain.BaseDirectory + "dbsrv12.exe",
|
||
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "datebase", "hydb.db") +
|
||
" -os 10240k -m -c 8m -q -n " + Dns.GetHostName());
|
||
}
|
||
catch
|
||
{ }
|
||
ConnDetection _ConnDetection = new ConnDetection();
|
||
_ConnDetection.ShowDialog();
|
||
//启动加载
|
||
LoadThread = new Thread(Loading)
|
||
{
|
||
IsBackground = true
|
||
};
|
||
//Grid_Load.Visibility = Visibility.Visible;
|
||
LoadThread.Start();
|
||
}
|
||
|
||
#region 系统加载
|
||
/// <summary>
|
||
/// 系统加载
|
||
/// </summary>
|
||
private void Loading()
|
||
{
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
|
||
{
|
||
tbUserName.IsEnabled = false;
|
||
pwbUserPassword.IsEnabled = false;
|
||
tbMessage.Text = "正在加载系统设置,请稍候......";
|
||
});
|
||
//获取参数信息
|
||
QualityHelper.GetConfiguration();
|
||
CheckUpdateConfig();
|
||
//获取版本信息并更新
|
||
string version = "YSv" + System.Windows.Forms.Application.ProductVersion;
|
||
if (QualityHelper.version != version)
|
||
{
|
||
QualityHelper.version = version;
|
||
//记录这次更新之后的版本号
|
||
QualityHelper.UpdateConfigUration("version", version);
|
||
//记录这次更新的时间
|
||
QualityHelper.UpdateConfigUration("UpdateDate",
|
||
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
||
}
|
||
|
||
try
|
||
{
|
||
_DataThread = new Thread(GetDate)
|
||
{
|
||
IsBackground = true
|
||
};
|
||
_DataThread.Start();
|
||
}
|
||
catch { }
|
||
//QualityHelper.GetDate();
|
||
//与服务器校对时间
|
||
try
|
||
{
|
||
DateTime _ServerTime = ESSupport.Lib.HttpHelper.GetBeijingTime(
|
||
$"http://{QualityHelper.dbip}:{QualityHelper.serviceport}/Service.asmx");
|
||
if (_ServerTime != DateTime.MinValue && _ServerTime > new DateTime(2021, 06, 01))
|
||
{
|
||
SyTime.SetLocalTimeByStr(_ServerTime);
|
||
QualityHelper.UpdateConfigUration("syncdtime", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
|
||
}
|
||
}
|
||
catch { }
|
||
|
||
#region 界面显示处理
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate
|
||
{
|
||
//判断是否异常重启
|
||
if (QualityHelper.autologon == "1")
|
||
{
|
||
#region 异常重启收银机自动登录
|
||
try
|
||
{
|
||
DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(
|
||
$@"SELECT A.SELLWORKERCODE,A.SELLWORKERNAME,
|
||
A.SELLWORKERPASSWORD
|
||
FROM T_SELLWORKER A,T_PERSONSELL_NEW B
|
||
WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND
|
||
UPPER(A.SELLWORKERCODE) = UPPER(B.SELLWORKER_CODE) AND
|
||
B.SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND
|
||
B.SHOPCODE = '{QualityHelper.shopcode}' AND
|
||
MACHINECODE = '{QualityHelper.machinecode}' AND ENDDATE IS NULL").Tables[0];
|
||
if (_DataTable.Rows.Count > 0)
|
||
{
|
||
tbUserName.Text = _DataTable.Rows[0]["SELLWORKERCODE"].ToString();
|
||
pwbUserPassword.Password = _DataTable.Rows[0]["SELLWORKERPASSWORD"].ToString();
|
||
ButtonLogin_Click(null, null);
|
||
}
|
||
else
|
||
{
|
||
DownDateThread = new Thread(CheckDate)
|
||
{
|
||
IsBackground = true
|
||
};
|
||
DownDateThread.Start();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ESSupport.Lib.LogHelper.WriteServiceLog("异常重启自动登录失败。原因:" + ex.Message);
|
||
LoginFail();
|
||
DownDateThread = new Thread(CheckDate)
|
||
{
|
||
IsBackground = true
|
||
};
|
||
DownDateThread.Start();
|
||
}
|
||
#endregion
|
||
}
|
||
else
|
||
{
|
||
#region 数据下载检查,更换门店或首次开机使用需要从服务器下载基本数据
|
||
DownDateThread = new Thread(CheckDate)
|
||
{
|
||
IsBackground = true
|
||
};
|
||
DownDateThread.Start();
|
||
#endregion
|
||
}
|
||
tbUserName.IsEnabled = true;
|
||
pwbUserPassword.IsEnabled = true;
|
||
tbUserName.Focus();
|
||
tbMessage.Text = "";
|
||
});
|
||
#endregion
|
||
}
|
||
#endregion
|
||
private void Window_KeyDown(object sender, KeyEventArgs e)
|
||
{
|
||
if (e.Key == Key.F5)
|
||
{
|
||
StartDownload();
|
||
}
|
||
if (e.SystemKey == Key.F4)
|
||
{
|
||
e.Handled = true;
|
||
}
|
||
}
|
||
#region 事件 -> 收银工号输入框按键事件
|
||
/// <summary>
|
||
/// 收银工号输入框按键事件
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void TextBoxUserName_KeyDown(object sender, KeyEventArgs e)
|
||
{
|
||
if (e.Key == Key.Enter)
|
||
{
|
||
//工号验证
|
||
((TextBox)sender).Text = ((TextBox)sender).Text.PadLeft(4, '0');
|
||
//跳到密码输入框
|
||
pwbUserPassword.SelectAll();
|
||
pwbUserPassword.Focus();
|
||
}
|
||
else if (e.Key == Key.F16)
|
||
{
|
||
//清空账号输入框
|
||
((TextBox)sender).Text = "";
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 事件 -> 密码输入框按键事件
|
||
private void PasswordBoxUserPassword_KeyDown(object sender, KeyEventArgs e)
|
||
{
|
||
if (e.Key == Key.Enter)
|
||
{
|
||
//登录
|
||
ButtonLogin_Click(null, null);
|
||
}
|
||
else if (e.Key == Key.F16)
|
||
{
|
||
//清空密码
|
||
((PasswordBox)sender).Password = "";
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 事件 -> 登录按钮
|
||
private void ButtonLogin_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
#region 登录按钮
|
||
#region 登录的收银工号有效性验证
|
||
tbMessage.Text = "";
|
||
//非空判断
|
||
if (tbUserName.Text.Trim() == "")
|
||
{
|
||
tbMessage.Text = "用户名不能为空!";
|
||
tbUserName.Focus();
|
||
return;
|
||
}
|
||
|
||
if (pwbUserPassword.Password == "")
|
||
{
|
||
tbMessage.Text = "密码不能为空!";
|
||
pwbUserPassword.Focus();
|
||
return;
|
||
}
|
||
string _SelectSql;
|
||
//验证登录的收银工号是否有效
|
||
try
|
||
{
|
||
#region 验证登录的收银工号是否有效
|
||
DataTable _SellWorker = ESSupport.Lib.SyBaseHelper.QueryOdbc(
|
||
$@"SELECT PROWERRIGHT,SELLWORKERCODE,SELLWORKERNAME,DISCOUNT_RATE
|
||
FROM T_SELLWORKER WHERE SERVERPARTCODE='{QualityHelper.serverpartcode}' AND
|
||
UPPER(SELLWORKERCODE)=UPPER('{tbUserName.Text}') AND
|
||
SELLWORKERPASSWORD='{pwbUserPassword.Password}' AND VALID = 1").Tables[0];
|
||
if (_SellWorker.Rows.Count > 0)
|
||
{
|
||
QualityHelper.sellworkercode = _SellWorker.Rows[0]["SELLWORKERCODE"].ToString();
|
||
QualityHelper.sellworkername = _SellWorker.Rows[0]["SELLWORKERNAME"].ToString();
|
||
//验证销售权限
|
||
if (PosSystemHelper.SellWorkerAuthority(PosDictionary.AuthorityType.销售,
|
||
_SellWorker.Rows[0]["PROWERRIGHT"].ToString()) != 0)
|
||
{
|
||
tbMessage.Text = "你没有销售权限!!";
|
||
tbUserName.Focus();
|
||
tbUserName.SelectAll();
|
||
return;
|
||
}
|
||
//更新权限串
|
||
PosControl.ProwerRight = _SellWorker.Rows[0]["PROWERRIGHT"].ToString();
|
||
//更新收银员最大折扣权限
|
||
if (decimal.TryParse(_SellWorker.Rows[0]["DISCOUNT_RATE"].ToString(), out decimal _DiscountRate))
|
||
{
|
||
PosControl.DiscountRate = _DiscountRate > 0 && _DiscountRate <= 1 ? _DiscountRate : (decimal)0.01;
|
||
}
|
||
else
|
||
{
|
||
PosControl.DiscountRate = (decimal)0.01;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
tbMessage.Text = "账号或密码错误,请核对后重新输入!";
|
||
tbUserName.Focus();
|
||
tbUserName.SelectAll();
|
||
return;
|
||
}
|
||
#endregion
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ESSupport.Lib.LogHelper.WriteServiceLog("收银工号登录异常。原因:" + ex.Message);
|
||
tbUserName.Focus();
|
||
tbUserName.SelectAll();
|
||
return;
|
||
}
|
||
#endregion
|
||
|
||
#region 24小时未结账验证,账期超过24小时要求立即进行结账操作
|
||
//判断结账校验
|
||
DataTable dt;
|
||
string sqls = "select isnull(endaccount_day,1) from sys_globle where var_name = 'g_ver'";
|
||
DataTable _tables = ESSupport.Lib.SyBaseHelper.QueryOdbc(sqls).Tables[0];
|
||
_SelectSql = "select startdate from t_endaccount_new where serverpartcode='" + QualityHelper.serverpartcode +
|
||
"' and shopcode = '" + QualityHelper.shopcode + "' and machinecode = '" + QualityHelper.machinecode +
|
||
"' and enddate is null";
|
||
try
|
||
{
|
||
dt = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSql).Tables[0];
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ESSupport.Lib.LogHelper.WriteServiceLog(ex.ToString());
|
||
tbUserName.Focus();
|
||
tbUserName.SelectAll();
|
||
return;
|
||
}
|
||
if (dt.Rows.Count > 0)
|
||
{
|
||
try
|
||
{
|
||
//24小时未结账,登录前进行结账操作
|
||
if (DateTime.Parse(dt.Rows[0][0].ToString()).AddDays(double.Parse(_tables.Rows[0][0].ToString())) < DateTime.Now &&
|
||
DateTime.Parse(dt.Rows[0][0].ToString()) < DateTime.Today.AddDays(double.Parse(_tables.Rows[0][0].ToString()) * -1))
|
||
{
|
||
//弹出结账操作窗口
|
||
CommodityShift _CommodityShift = new CommodityShift("check", "0")
|
||
{
|
||
Owner = this
|
||
};
|
||
_CommodityShift.ShowDialog();
|
||
if (_CommodityShift.DialogResult != true)
|
||
{
|
||
//GetValue(TxtMessage, "请先结账后登陆!", "#FF0000");
|
||
//Grid_User.Visibility = Visibility.Visible;
|
||
//GridLoad.Visibility = Visibility.Collapsed;
|
||
tbUserName.Focus();
|
||
tbUserName.SelectAll();
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ESSupport.Lib.LogHelper.WriteServiceLog(ex.ToString());
|
||
tbUserName.Focus();
|
||
tbUserName.SelectAll();
|
||
return;
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 上一个工班未退出检查,存在未交班的记录要求先交班再更换工号登录
|
||
//交班检测
|
||
string _SellWorkerCode = "";
|
||
string _SellWorkerName = "";
|
||
try
|
||
{
|
||
DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(
|
||
$@"SELECT A.PERSONSELL_ID,A.SELLWORKER_CODE,B.SELLWORKERNAME
|
||
FROM T_PERSONSELL_NEW A LEFT JOIN T_SELLWORKER B
|
||
ON UPPER(A.SELLWORKER_CODE) = UPPER(B.SELLWORKERCODE) AND
|
||
B.SERVERPARTCODE = '{QualityHelper.serverpartcode}'
|
||
WHERE A.ENDDATE IS NULL AND A.STARTDATE IS NOT NULL AND
|
||
A.SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND
|
||
A.SHOPCODE='{QualityHelper.shopcode}' AND A.MACHINECODE = '{QualityHelper.machinecode}'
|
||
ORDER BY A.PERSONSELL_ID DESC").Tables[0];
|
||
if (_DataTable.Rows.Count > 0)
|
||
{
|
||
_SellWorkerCode = _DataTable.Rows[0]["SELLWORKER_CODE"].ToString().ToUpper();
|
||
_SellWorkerName = _DataTable.Rows[0]["SELLWORKERNAME"].ToString();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
//GetValue(TxtMessage, "收银工班校验失败,请重试!", "#FF0000");
|
||
pwbUserPassword.Focus();
|
||
pwbUserPassword.SelectAll();
|
||
return;
|
||
}
|
||
if (tbUserName.Text.Trim().ToUpper() != _SellWorkerCode && !string.IsNullOrWhiteSpace(_SellWorkerCode))
|
||
{
|
||
CommodityPrompt _CommodityPrompt = new CommodityPrompt("",
|
||
$"收银员[{_SellWorkerCode}]{_SellWorkerName}未交班,是否交班并登陆?")
|
||
{
|
||
Owner = this
|
||
};
|
||
_CommodityPrompt.ShowDialog();
|
||
if (_CommodityPrompt.DialogResult == false)
|
||
{
|
||
GetValue(tbMessage, $"收银员[{_SellWorkerName}]工号已登录,请先进行交班再登录其他收银员工号!", "#FF0000");
|
||
tbUserName.Text = _SellWorkerCode;
|
||
pwbUserPassword.Password = "";
|
||
pwbUserPassword.Focus();
|
||
pwbUserPassword.SelectAll();
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
CommodityShift _CommodityShift = new CommodityShift("shift", "1")
|
||
{
|
||
Owner = this
|
||
};
|
||
_CommodityShift.ShowDialog();
|
||
if (_CommodityShift.DialogResult != true)
|
||
{
|
||
GetValue(tbMessage, $"收银员[{_SellWorkerName}]工号已登录,请先进行交班再登录其他收银员工号!", "#FF0000");
|
||
tbUserName.Text = _SellWorkerCode;
|
||
pwbUserPassword.Password = "";
|
||
pwbUserPassword.Focus();
|
||
pwbUserPassword.SelectAll();
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
//登录时的操作
|
||
GetValue(tbMessage, "", "#FF0000");
|
||
string UserName = tbUserName.Text.Trim().ToUpper();
|
||
string Pwd = pwbUserPassword.Password;
|
||
tbUserName.IsEnabled = false;
|
||
pwbUserPassword.IsEnabled = false;
|
||
int Edition = 0;
|
||
if ((LoginThread == null || !LoginThread.IsAlive) && !IsLogin)
|
||
{
|
||
IsLogin = true;
|
||
//登录系统
|
||
LoginThread = new Thread(() => Login_User(UserName, Pwd, Edition))
|
||
{
|
||
IsBackground = true
|
||
};
|
||
LoginThread.Start();
|
||
}
|
||
#endregion
|
||
}
|
||
#endregion
|
||
private void ButtonSet_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
ParameterPower _ParameterPower = new ParameterPower()
|
||
{
|
||
Owner = this
|
||
};
|
||
_ParameterPower.ShowDialog();
|
||
if (_ParameterPower.DialogResult == true)
|
||
{
|
||
ParConfigtion _ParConfigtion = new ParConfigtion()
|
||
{
|
||
Owner = this
|
||
};
|
||
_ParConfigtion.ShowDialog();
|
||
QualityHelper.GetConfiguration();
|
||
}
|
||
}
|
||
|
||
#region 事件 -> 关闭按钮
|
||
private void ButtonClose_Click(object sender, RoutedEventArgs e)
|
||
{
|
||
UpLoadSwitch _UpLoadSwitch = new UpLoadSwitch()
|
||
{
|
||
Owner = this
|
||
};
|
||
if (_UpLoadSwitch.ShowDialog() == true)
|
||
{
|
||
DataUpload _DataUpload = new DataUpload()
|
||
{
|
||
Owner = this
|
||
};
|
||
_DataUpload.ShowDialog();
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> Textblock加载内容
|
||
private void GetValue(TextBlock textBlock, string messageText, string colorString)
|
||
{
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate
|
||
{
|
||
textBlock.Text = messageText;
|
||
});
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 用户登录系统
|
||
/// <summary>
|
||
/// 用户登录系统
|
||
/// </summary>
|
||
/// <param name="UserName"></param>
|
||
/// <param name="Pwd"></param>
|
||
/// <param name="Edition"></param>
|
||
private void Login_User(string UserName, string Pwd, int Edition)
|
||
{
|
||
if (!LoginCheck())
|
||
{
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
|
||
{
|
||
LoginFail();
|
||
});
|
||
return;
|
||
}
|
||
if (string.IsNullOrWhiteSpace(QualityHelper.serverpartshop_id) ||
|
||
string.IsNullOrWhiteSpace(QualityHelper.businesstype))
|
||
{
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
|
||
{
|
||
//GetValue(TxtMessage, "门店信息初始化失败,请重试!", "#FF0000");
|
||
LoginFail();
|
||
});
|
||
return;
|
||
}
|
||
|
||
#region 登录工班信息处理
|
||
int _PersonResult = Currency.PersonLogin(UserName.Trim(), out string sellWorkerCode);
|
||
if (_PersonResult != 0)
|
||
{
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
|
||
{
|
||
//GetValue(TxtMessage, "账期数据插入失败,请重试!", "#FF0000");
|
||
LoginFail();
|
||
});
|
||
return;
|
||
}
|
||
#endregion
|
||
PosControl.PosWokerCode = UserName;
|
||
PosSystemHelper.PosSocket_NotifyEvent(null, new ESSupport.Model.Common.NotifyEventArgs
|
||
{
|
||
NotifyLoggerType = ESSupport.Transfer.TransferDataDictionary.LoggerType.登录通知,
|
||
NotifyLoggerTime = DateTime.Now,
|
||
NotifyLoggerMessage = $"【登录时间:{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")}】" +
|
||
$"工号:[{UserName}]{PosSystemHelper.QueryPersonName(QualityHelper.serverpartcode, UserName)} 登录成功;" +
|
||
$"当前版本:{System.Windows.Forms.Application.ProductVersion}",
|
||
NotifyUploadState = true
|
||
});
|
||
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
|
||
{
|
||
ChildWindow.CommodityManage.CashierMain cm_CashierMain = new ChildWindow.CommodityManage.CashierMain();
|
||
cm_CashierMain.Show();
|
||
Close();
|
||
});
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 登录数据校验验证
|
||
/// <summary>
|
||
/// 登录账期班期数据验证
|
||
/// </summary>
|
||
/// <param name="person">登录工号</param>
|
||
/// <returns></returns>
|
||
private bool LoginCheck()
|
||
{
|
||
try
|
||
{
|
||
#region 检查收银机服务区、门店、机器号配置
|
||
//判断收银机配置
|
||
if (QualityHelper.serverpartcode == "" || QualityHelper.shopcode == "" || QualityHelper.machinecode == "")
|
||
{
|
||
//参数错误
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
|
||
{
|
||
tbUserName.Focus();
|
||
});
|
||
return false;
|
||
}
|
||
#endregion
|
||
|
||
#region 联网校验收银机本地时间
|
||
//与服务器校对时间
|
||
try
|
||
{
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
|
||
{
|
||
GetValue(tbMessage, "正在校准系统时间......", "#FF0000");
|
||
});
|
||
DateTime _ServerTime = ESSupport.Lib.HttpHelper.GetBeijingTime($"http://{QualityHelper.dbip}:{QualityHelper.serviceport}/Service.asmx");
|
||
if (_ServerTime != DateTime.MinValue && _ServerTime > new DateTime(2020, 06, 01))
|
||
{
|
||
SyTime.SetLocalTimeByStr(_ServerTime);
|
||
QualityHelper.UpdateConfigUration("syncdtime", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
|
||
}
|
||
}
|
||
catch { }
|
||
#endregion
|
||
|
||
//判断门店状态
|
||
DataTable _ShopTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(
|
||
$@"SELECT SERVERPARTSHOP_ID,SHOPNAME,BUSINESSTYPE,VALID
|
||
FROM T_SHOPMESSAGE WHERE SHOPCODE = '{QualityHelper.shopcode}' AND
|
||
SERVERPARTCODE = '{QualityHelper.serverpartcode}'").Tables[0];
|
||
if (_ShopTable.Rows.Count > 0)
|
||
{
|
||
QualityHelper.serverpartshop_id = _ShopTable.Rows[0]["SERVERPARTSHOP_ID"].ToString();
|
||
QualityHelper.shopname = _ShopTable.Rows[0]["SHOPNAME"].ToString();
|
||
QualityHelper.businesstype = _ShopTable.Rows[0]["BUSINESSTYPE"].ToString();
|
||
if (_ShopTable.Rows[0]["VALID"].ToString() != "1")
|
||
{
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
|
||
{
|
||
GetValue(tbMessage, "门店已停业", "#FF0000");
|
||
tbUserName.Focus();
|
||
});
|
||
return false;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
|
||
{
|
||
DownDateThread = new Thread(CheckDate)
|
||
{
|
||
IsBackground = true
|
||
};
|
||
DownDateThread.Start();
|
||
tbUserName.Focus();
|
||
});
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ESSupport.Lib.LogHelper.WriteServiceLog("登录验证异常:" + ex.Message);
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
|
||
{
|
||
tbUserName.Focus();
|
||
});
|
||
return false;
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
private void LoginFail()
|
||
{
|
||
tbUserName.IsEnabled = true;
|
||
pwbUserPassword.IsEnabled = true;
|
||
tbUserName.Focus();
|
||
tbUserName.SelectAll();
|
||
IsLogin = false;
|
||
}
|
||
|
||
#region 方法 -> 校验数据库
|
||
/// <summary>
|
||
/// 数据库升级校验
|
||
/// </summary>
|
||
private void GetDate()
|
||
{
|
||
try
|
||
{
|
||
ESSupport.Lib.DataBaseUpdate.PosDataBaseUpdate();
|
||
|
||
DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc("SELECT SERVERPARTSHOP_ID FROM T_SHOPMESSAGE " +
|
||
"WHERE SERVERPARTCODE = '" + QualityHelper.serverpartcode + "' AND SHOPCODE = '" + QualityHelper.shopcode + "'").Tables[0];
|
||
if (_DataTable.Rows.Count > 0)
|
||
{
|
||
string _ServerPartShopID = _DataTable.Rows[0]["SERVERPARTSHOP_ID"].ToString();
|
||
//清理历史数据
|
||
ESSupport.Lib.DataBaseUpdate.ClearData(QualityHelper.serverpartcode,
|
||
QualityHelper.shopcode, _ServerPartShopID, int.Parse(QualityHelper.effective_day));
|
||
}
|
||
//清理历史备份文件
|
||
ESSupport.Lib.DataBaseUpdate.ClearDataBackup(
|
||
AppDomain.CurrentDomain.BaseDirectory + "\\DataBackup",
|
||
int.Parse(QualityHelper.effective_day), true);
|
||
}
|
||
catch
|
||
{ }
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 检测数据是否存在并启动下发线程
|
||
/// <summary>
|
||
/// 更换门店或首次安装开机的机器需要下载基础信息(方法重写用新的接口传输)
|
||
/// </summary>
|
||
private void CheckDate()
|
||
{
|
||
try
|
||
{
|
||
ESSupport.Lib.SyBaseHelper.ExecuteSqlTran($@"DELETE FROM T_SHOPMESSAGE
|
||
WHERE SERVERPARTCODE <> '{QualityHelper.serverpartcode}' OR SHOPCODE <> '{QualityHelper.shopcode}'");
|
||
//删除错误工号数据
|
||
ESSupport.Lib.SyBaseHelper.ExecuteSqlTran("DELETE FROM T_SELLWORKER WHERE DATALENGTH(PROWERRIGHT) < 255");
|
||
//删除无条码的商品数据
|
||
ESSupport.Lib.SyBaseHelper.ExecuteSqlTran("DELETE FROM T_COMMODITYEX WHERE COMMODITY_BARCODE IS NULL");
|
||
ESSupport.Lib.SyBaseHelper.ExecuteSqlTran("DELETE FROM T_DOWNUPDATE ");
|
||
}
|
||
catch { }
|
||
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
|
||
{
|
||
StartDownload();
|
||
});
|
||
}
|
||
|
||
private void StartDownload()
|
||
{
|
||
ConfigThread _ConfigThread = new ConfigThread(QualityHelper.serverpartcode);
|
||
DownClientThread.setConfiguration("http://" + QualityHelper.dbip + ":" + QualityHelper.DataServicePort + "/DataServices/Service.asmx",
|
||
QualityHelper.authorization, QualityHelper.serverpartcode, "", QualityHelper.shopcode, QualityHelper.macaddress, QualityHelper.machinecode, 400, 5, 20);
|
||
List<string> list_DownTable = new List<string>() { "T_SELLWORKER_UNIT", "T_SELLWORKER_CLOUD", "T_SHOPMESSAGE_EX", "T_CONFIGURATION" };
|
||
|
||
DownClientThread.IsDownload(true, list_DownTable);
|
||
DownClientThread.setConfigThread(_ConfigThread);
|
||
Downing = 0;
|
||
bool b = DownClientThread.onState();
|
||
this.IsEnabled = false;
|
||
tbMessage.Text = "正在下载基础信息,请稍候...";
|
||
if (!b)
|
||
{
|
||
this.IsEnabled = true;
|
||
}
|
||
}
|
||
|
||
private void DownClientThread_DownloadStringEvent(DownResultInfo downResultInfo, string resultString)
|
||
{
|
||
int _DownCount = DownClientThread.getStartDownTypes().Count;
|
||
if (!downResultInfo.StartToEnd)
|
||
{
|
||
Downing++;
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate
|
||
{
|
||
tbMessage.Text = "正在下载基础信息,请稍候..." + ((double)Downing / _DownCount).ToString("P0");
|
||
});
|
||
}
|
||
if (Downing == _DownCount)
|
||
{
|
||
QualityHelper.GetConfiguration();
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate
|
||
{
|
||
tbMessage.Text = "基础信息下载完成!";
|
||
this.IsEnabled = true;
|
||
tbUserName.Focus();
|
||
tbUserName.SelectAll();
|
||
});
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更换门店或首次安装开机的机器需要下载基础信息
|
||
/// </summary>
|
||
private void CashierDataDownload()
|
||
{
|
||
|
||
if (PosControl.DataTransThread == null || !PosControl.DataTransThread.IsAlive)
|
||
{
|
||
PosControl.DataTransThread = new Thread(() =>
|
||
{
|
||
#region 初始化数据传输程序
|
||
//初始化数据传输程序
|
||
if (PosControl.PosDataDownload == null)
|
||
{
|
||
if (PosControl.PosDataDownload == null)
|
||
{
|
||
//测试当前网络是否可以直接访问公网
|
||
if (ESSupport.Lib.HttpHelper.UrlIsExist(PosControl.PosDataDownloadURL))
|
||
{
|
||
//公网模式下,直接访问云端接口地址
|
||
PosControl.PosDataDownload = new ESSupport.Transfer.PosDataDownload(QualityHelper.serverpartcode,
|
||
QualityHelper.shopcode, QualityHelper.machinecode, PosControl.PosDataDownloadURL);
|
||
}
|
||
else
|
||
{
|
||
//内网模式下,通过本地服务器Nginx代理访问云端接口
|
||
PosControl.PosDataDownload = new ESSupport.Transfer.PosDataDownload(QualityHelper.serverpartcode,
|
||
QualityHelper.shopcode, QualityHelper.machinecode, $"http://{QualityHelper.dbip}:7198/webApi_publish");
|
||
}
|
||
PosControl.PosDataDownload.NotifyEvent += PosSystemHelper.PosSocket_NotifyEvent;
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 启动基础数据下载更新
|
||
#region 收银配置下载
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate
|
||
{
|
||
//Grid_Load.Visibility = Visibility.Visible;
|
||
this.IsEnabled = false;
|
||
tbMessage.Text = "正在下载基础配置信息,请稍候......";
|
||
});
|
||
PosControl.PosDataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueConfigurationToMachine, DateTime.Now);
|
||
//this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate
|
||
//{
|
||
// pbrDown.Value += 34;
|
||
//});
|
||
#endregion
|
||
#region 门店信息下载
|
||
PosSystemHelper.PosSocket_NotifyEvent(null, new ESSupport.Model.Common.NotifyEventArgs
|
||
{
|
||
NotifyLoggerType = ESSupport.Transfer.TransferDataDictionary.LoggerType.门店信息,
|
||
NotifyLoggerTime = DateTime.Now,
|
||
NotifyLoggerMessage = $"用户手动下载门店数据信息。"
|
||
});
|
||
PosControl.PosDataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueShopInfoToMachine, DateTime.Now);
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate
|
||
{
|
||
//pbrDown.Value += 34;
|
||
tbMessage.Text = "正在下载门店信息,请稍候......";
|
||
});
|
||
#endregion
|
||
#region 收银工号下载
|
||
PosSystemHelper.PosSocket_NotifyEvent(null, new ESSupport.Model.Common.NotifyEventArgs
|
||
{
|
||
NotifyLoggerType = ESSupport.Transfer.TransferDataDictionary.LoggerType.收银工号,
|
||
NotifyLoggerTime = DateTime.Now,
|
||
NotifyLoggerMessage = $"用户手动下载收银工号数据信息。"
|
||
});
|
||
PosControl.PosDataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueSellWorkerInfoToMachine, DateTime.Now);
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate
|
||
{
|
||
tbMessage.Text = "正在下载收银工号信息,请稍候......";
|
||
//pbrDown.Value += 34;
|
||
});
|
||
#endregion
|
||
#region 移动支付参数配置下载
|
||
PosSystemHelper.PosSocket_NotifyEvent(null, new ESSupport.Model.Common.NotifyEventArgs
|
||
{
|
||
NotifyLoggerType = ESSupport.Transfer.TransferDataDictionary.LoggerType.移动支付参数配置,
|
||
NotifyLoggerTime = DateTime.Now,
|
||
NotifyLoggerMessage = $"用户手动下载移动支付参数配置数据信息。"
|
||
});
|
||
PosControl.PosDataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueMobileConfigToMachine, DateTime.Now);
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate
|
||
{
|
||
tbMessage.Text = "正在下载移动支付交易参数信息,请稍候......";
|
||
//pbrDown.Value += 34;
|
||
});
|
||
#endregion
|
||
//执行日志换行
|
||
PosSystemHelper.PosSocket_NotifyEvent(this, new ESSupport.Model.Common.NotifyEventArgs()
|
||
{
|
||
NotifyLoggerType = ESSupport.Transfer.TransferDataDictionary.LoggerType.公共通知,
|
||
NotifyLoggerTime = DateTime.Now
|
||
});
|
||
|
||
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate
|
||
{
|
||
tbMessage.Text = "基础信息下载完成!";
|
||
|
||
//Grid_Load.Visibility = Visibility.Collapsed;
|
||
//pbrDown.Value = 0;
|
||
//GetValue(tbMessage, "基础信息下载完成!", "#FF0000");
|
||
this.IsEnabled = true;
|
||
tbUserName.Focus();
|
||
tbUserName.SelectAll();
|
||
});
|
||
#endregion
|
||
})
|
||
{
|
||
IsBackground = true
|
||
};
|
||
PosControl.DataTransThread.Start();
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region 方法 -> 检查更新Update.xml文件,避免出现因为Update.xml文件损坏导致的无法启动问题
|
||
/// <summary>
|
||
/// 检查更新Update.xml文件,避免出现因为Update.xml文件损坏导致的无法启动问题
|
||
/// </summary>
|
||
public static void CheckUpdateConfig()
|
||
{
|
||
#region 检查更新Update.xml文件,避免出现因为Update.xml文件损坏导致的无法启动问题
|
||
try
|
||
{
|
||
QualityHelper.UpdateConfigUration("NewSystem", "1");
|
||
string _ServerIP = QualityHelper.dbip;
|
||
string _ServerPartCode = QualityHelper.serverpartcode;
|
||
string _ShopCode = QualityHelper.shopcode;
|
||
string _XmlPath = AppDomain.CurrentDomain.BaseDirectory + "update.xml";
|
||
string _KillApp = "TouchCashier.exe|cashier.exe|Stardb.exe|dbsyc.exe|GetMembership.exe|DataUpdate.exe|InvoicingTool.exe|ConnectPoint.exe";
|
||
string _KillAppConfig = ESSupport.Lib.ConfigHelper.GetAppConfig(_XmlPath, "KillApp");
|
||
if (_KillAppConfig != _KillApp)
|
||
{
|
||
ESSupport.Lib.ConfigHelper.UpdateAppConfig(_XmlPath, "KillApp", _KillApp);
|
||
}
|
||
string _StartApp = "TouchCashier.exe|ConnectPoint.exe";
|
||
string _StartAppConfig = ESSupport.Lib.ConfigHelper.GetAppConfig(_XmlPath, "StartApp");
|
||
if (_StartAppConfig != _StartApp)
|
||
{
|
||
ESSupport.Lib.ConfigHelper.UpdateAppConfig(_XmlPath, "StartApp", _StartApp);
|
||
}
|
||
if (ESSupport.Lib.ConfigHelper.GetAppConfig(_XmlPath, "NewSystem") != "1")
|
||
{
|
||
ESSupport.Lib.ConfigHelper.UpdateAppConfig(_XmlPath, "NewSystem", "1");
|
||
}
|
||
if (ESSupport.Lib.ConfigHelper.GetAppConfig(_XmlPath, "IP") != _ServerIP && !string.IsNullOrWhiteSpace(_ServerIP))
|
||
{
|
||
ESSupport.Lib.ConfigHelper.UpdateAppConfig(_XmlPath, "IP", _ServerIP);
|
||
}
|
||
if (ESSupport.Lib.ConfigHelper.GetAppConfig(_XmlPath, "ServerPartCode") != _ServerPartCode
|
||
&& !string.IsNullOrWhiteSpace(_ServerPartCode))
|
||
{
|
||
ESSupport.Lib.ConfigHelper.UpdateAppConfig(_XmlPath, "ServerPartCode", _ServerPartCode);
|
||
}
|
||
if (ESSupport.Lib.ConfigHelper.GetAppConfig(_XmlPath, "ShopCode") != _ShopCode
|
||
&& !string.IsNullOrWhiteSpace(_ShopCode))
|
||
{
|
||
ESSupport.Lib.ConfigHelper.UpdateAppConfig(_XmlPath, "ShopCode", _ShopCode);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ESSupport.Lib.LogHelper.WriteServiceLog("启动文件校验失败:" + ex.Message);
|
||
}
|
||
#endregion
|
||
}
|
||
#endregion
|
||
|
||
}
|
||
}
|