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 { /// /// MainWindow.xaml 的交互逻辑 /// /// 登录界面进行的操作: /// 1、启动数据库,进行数据库连接检测 /// 2、加载系统参数信息 /// 3.1、检测是否异常重启,异常重启的情况下进行自动登录 /// 3.2、用户输入账号及登录密码进行登录 /// 4、检测当前账期结算情况,记录账期开始信息、工班登录信息 /// 5、打开收银主操作界面,并启动自然日数据生成线程,对自然日数据进行检测上传 /// public partial class MainWindow : Window { #region 参数属性 private Thread _thread; private Thread _DataThread; private Thread LoadThread; private Thread DownDateThread; ClientThread _ClientThread = new ClientThread(); int Downing = 0; bool IsLogin = false; #endregion #region 登陆界面 public MainWindow() { InitializeComponent(); //初始化 imgload.Image = Properties.Resources.登录状态; imga.Image = Properties.Resources.load; PictureFigr.Image = Properties.Resources.扫描指纹; PictureFace.Image = Properties.Resources.人脸识别; //数据库连接检测 try { ESSupport.Lib.SyBaseHelper.QueryOdbc("SELECT * FROM DBA.SYS_GLOBLE"); } catch (Exception ex) { //启动本地数据库 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(); } #endregion #region 系统加载 /// /// 系统加载 /// private void Loading() { try { if (!File.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.ini"))) { byte[] Save = Properties.Resources.config; FileStream fsObj = new FileStream(Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "config.ini"), FileMode.Create); fsObj.Write(Save, 0, Save.Length); fsObj.Close(); } } catch { } //升级本地数据库 //this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () //{ // TxtLoad.Text = "正在更新本地数据库......"; //}); //ESSupport.Lib.DataBaseUpdate.PosDataBaseUpdate(); this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { TxtLoad.Text = "正在加载系统设置,请稍候......"; }); //获取参数信息 QualityHelper.GetConfiguration(); //获取版本信息并更新 string version = "YSv" + System.Windows.Forms.Application.ProductVersion.ToString(); 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 { } //通过云端接口获取当前服务区门店对应的业主参数配置(软件名称、扫码上传数据地址、业主单位名称、业主单位ID标识) ESSupport.Pos.ThreadHelper.ConfigurationByCloud($"http://{QualityHelper.dbip}:{QualityHelper.serviceport}/Service.asmx"); #region 门店数据下载 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; } /* * 直连云端接口获取门店信息 * (获取门店ID、门店名称、业态编码、业态名称、门店状态、是否统一定价门店、 * 是否上传营收数据、是否上传稽核数据、销售金额上限、销售数量上限、 * 是否记录优惠折扣、所属业主单位ID、所属业主单位名称) */ bool b_DownLoad = PosControl.PosDataDownload.DataDownload( ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueShopInfoToMachine, DateTime.MinValue); #endregion #region 上传机器信息到云端接口 ESSupport.Transfer.PosDataUpload DataUpload; //未设置内网Nginx代理服务器时,默认直接访问云端接口地址 //if (string.IsNullOrWhiteSpace(QualityHelper.DataTransferApi_IP)) if (ESSupport.Lib.HttpHelper.UrlIsExist(PosControl.PosDataUploadURL)) { //公网模式下,直接访问云端接口地址 DataUpload = new ESSupport.Transfer.PosDataUpload(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, PosControl.PosDataUploadURL); } else { //内网模式下,通过本地服务器Nginx代理访问云端接口 DataUpload = new ESSupport.Transfer.PosDataUpload(QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, $"http://{QualityHelper.dbip}:7198/webApi_publish"); } DataUpload.NotifyEvent += PosSystemHelper.PosSocket_NotifyEvent; //上传收银机器信息到云端 DataUpload.DataUpload(ESSupport.Transfer.TransferDataDictionary.TableDataType.UploadMachineInfo, DateTime.Now); //执行日志换行 PosSystemHelper.PosSocket_NotifyEvent(this, new ESSupport.Model.Common.NotifyEventArgs() { NotifyLoggerType = ESSupport.Transfer.TransferDataDictionary.LoggerType.公共通知, NotifyLoggerTime = DateTime.Now }); #endregion QualityHelper.UpdateConfigUration("NewSystem", "1"); if (!QualityHelper.serverpartcode.StartsWith("14") && QualityHelper.serverpartcode != "888888") { QualityHelper.UpdateConfigUration("VideoSwitch", "0"); QualityHelper.VideoSwitch = "0"; } #region 检查是否更换收银机使用门店 //检查是否更换收银机使用门店 if ((!string.IsNullOrWhiteSpace(QualityHelper.ServerPartCodeNew) && QualityHelper.serverpartcode != QualityHelper.ServerPartCodeNew) || (!string.IsNullOrWhiteSpace(QualityHelper.ShopCodeNew) && QualityHelper.shopcode != QualityHelper.ShopCodeNew) || (!string.IsNullOrWhiteSpace(QualityHelper.MachineCodeNew) && QualityHelper.machinecode != QualityHelper.MachineCodeNew)) { try { //检查当前门店是否已经结完账,只在结完账的情况下切换到新的门店 if (ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT 1 FROM T_ENDACCOUNT_NEW WHERE SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND SHOPCODE = '{QualityHelper.shopcode}' AND MACHINECODE = '{QualityHelper.machinecode}' AND ENDDATE IS NULL").Tables[0].Rows.Count == 0) { if (QualityHelper.serverpartcode != QualityHelper.ServerPartCodeNew) { QualityHelper.serverpartcode = QualityHelper.ServerPartCodeNew; QualityHelper.UpdateConfigUration("serverpartcode", QualityHelper.ServerPartCodeNew); } if (QualityHelper.shopcode != QualityHelper.ShopCodeNew) { QualityHelper.shopcode = QualityHelper.ShopCodeNew; QualityHelper.UpdateConfigUration("shopcode", QualityHelper.ShopCodeNew); } if (QualityHelper.machinecode != QualityHelper.MachineCodeNew) { QualityHelper.machinecode = QualityHelper.MachineCodeNew; QualityHelper.UpdateConfigUration("machinecode", QualityHelper.MachineCodeNew); } } } catch { } } #endregion #region 读取软件有效期 DateTime _SoftExpiryDate; string _strUsingType = QualityHelper.ConfigurationValues("using_type", "1000"); if (!DateTime.TryParse(QualityHelper.ConfigurationValues("expirydate", ""), out _SoftExpiryDate)) { try { _SoftExpiryDate = DateTime.Parse(DBHelper.QueryOdbc("SELECT EXPIRY_DATE " + "FROM SYS_GLOBLE WHERE VAR_NAME = 'g_ver'").Tables[0].Rows[0]["expiry_date"].ToString()); } catch { } } #endregion #region 更新Update.xml文件 try { 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"); } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("启动文件校验失败:" + ex.Message); } #endregion #region 开机后启动Socket通讯客户端 //启动Socket客户端连接线程 if (PosControl.PosSocket == null) { //未设置内网Nginx代理服务器时,默认直接访问云端接口地址 // if (string.IsNullOrWhiteSpace(QualityHelper.DataTransferApi_IP)) if (ESSupport.Lib.HttpHelper.UrlIsExist(PosControl.PosDataDownloadURL)) { PosControl.PosSocket = new ESSupport.Transfer.PosSuperSocketClient( $"ws://pos.eshangtech.com:7199/?ServerpartCode={QualityHelper.serverpartcode}&" + $"ShopCode={QualityHelper.shopcode}&MachineCode={QualityHelper.machinecode}", QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, PosControl.PosDataDownloadURL); } else { PosControl.PosSocket = new ESSupport.Transfer.PosSuperSocketClient( $"ws://{QualityHelper.dbip}:7199/?ServerpartCode={QualityHelper.serverpartcode}&" + $"ShopCode={QualityHelper.shopcode}&MachineCode={QualityHelper.machinecode}", QualityHelper.serverpartcode, QualityHelper.shopcode, QualityHelper.machinecode, $"http://{QualityHelper.dbip}:7198/webApi_publish"); } PosControl.PosSocket.NotifyEvent += PosSystemHelper.PosSocket_NotifyEvent; } if (!PosControl.PosSocket.ClientRuning) { PosControl.PosSocket.Start(); } #endregion //自然日数据生成和上传 Prints.LoginNaturalDayAccount(); 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")}】收银系统启动成功,等待用户登录。", NotifyUploadState = true }); #region 界面显示处理 this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate { TxtSoftwareName.Text = QualityHelper.softwarename; #region 快捷键版、触屏版判断显示 try { switch (QualityHelper.IsTouch) { case "0": chk_other.IsChecked = true; chk_log.IsChecked = false; break; case "1": chk_other.IsChecked = false; chk_log.IsChecked = true; break; } } catch (Exception ex) { } #endregion //显示软件版本 GetValue(TxtVersion, QualityHelper.version, "#000000"); //显示软件有效期 GetValue(TxtExpiryDate, _SoftExpiryDate == DateTime.MinValue ? "" : ((_strUsingType == "2000" ? "租赁有效期: " : "软件有效期: ") + _SoftExpiryDate.ToString("yyyy年MM月dd日")), "#000000"); #region 设置界面Logo和软件名称 try { if (QualityHelper.softwarename.Contains("蜀越")) { img_logo.Source = new BitmapImage(new Uri("pack://application:,,,/Image/logo/sc.png")); img_logo.Visibility = Visibility.Collapsed; } else if (QualityHelper.softwarename.Contains("高速驿网")) { img_logo.Source = new BitmapImage(new Uri("pack://application:,,,/Image/logo/gsyw.png")); } else if (QualityHelper.softwarename.Contains("贵州")) { img_logo.Source = new BitmapImage(new Uri("pack://application:,,,/Image/logo/gz.png")); } else if (QualityHelper.softwarename.Contains("恒辉")) { img_logo.Source = new BitmapImage(new Uri("pack://application:,,,/Image/logo/jx.png")); } else if (QualityHelper.softwarename.Contains("恒信")) { img_logo.Source = new BitmapImage(new Uri("pack://application:,,,/Image/logo/gx.png")); } else if (QualityHelper.softwarename.Contains("骋客")) { img_logo.Source = new BitmapImage(new Uri("pack://application:,,,/Image/logo/ck.png")); } else if (QualityHelper.softwarename.Contains("驿佳")) { img_logo.Source = new BitmapImage(new Uri("pack://application:,,,/Image/logo/gs.png")); } else if (QualityHelper.softwarename.Contains("招商") || QualityHelper.softwarename.Contains("星程")) { img_logo.Source = new BitmapImage(new Uri("pack://application:,,,/Image/logo/ytw.png")); } else if (QualityHelper.softwarename.Contains("晋行晋驿")) { img_logo.Source = new BitmapImage(new Uri("pack://application:,,,/Image/logo/sx.png")); } else if (QualityHelper.softwarename.Contains("智驿")) { img_logo.Source = new BitmapImage(new Uri("pack://application:,,,/Image/logo/qhzy.png")); } else if (QualityHelper.softwarename.Contains("驿达")) { img_logo.Source = new BitmapImage(new Uri("pack://application:,,,/Image/logo/ahyd.png")); } else { img_logo.Source = new BitmapImage(new Uri("pack://application:,,,/Image/logo/es.png")); } img_login.Source = new BitmapImage(new Uri("pack://application:,,,/Image/" + SkinPeeler.ImgSource + "/未登录头像.png")); img_uname.Source = new BitmapImage(new Uri("pack://application:,,,/Image/" + SkinPeeler.ImgSource + "/账号.png")); img_pwd.Source = new BitmapImage(new Uri("pack://application:,,,/Image/" + SkinPeeler.ImgSource + "/密码.png")); chk_log.Style = Resources["" + SkinPeeler.ResourcesSource + "CheckBoxStyle"] as Style; chk_other.Style = Resources["" + SkinPeeler.ResourcesSource + "CheckBoxStyle"] as Style; } catch (Exception ex) { } #endregion //隐藏加载动画 Grid_Load.Visibility = Visibility.Collapsed; //判断是否异常重启 if (QualityHelper.autologon == "1") { #region 异常重启收银机自动登录 try { DataTable _DataTable = DBHelper.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) { TxtUserName.Text = _DataTable.Rows[0]["SELLWORKERCODE"].ToString(); TxtPwd.Password = _DataTable.Rows[0]["SELLWORKERPASSWORD"].ToString(); Grid_User.Visibility = Visibility.Collapsed; GridLoad.Visibility = Visibility.Visible; Button_Click(btn_login, 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 } TxtUserName.Focus(); }); #endregion } #endregion #region 事件 -> 收银工号输入框按键事件 /// /// 收银工号输入框按键事件 /// /// /// private void TextBox_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) { //工号验证 TxtUserName.Text = TxtUserName.Text.PadLeft(4, '0'); //跳到密码输入框 TxtPwd.SelectAll(); TxtPwd.Focus(); } else if (e.Key == Key.F16) { //清空账号输入框 TxtUserName.Text = ""; return; } } #endregion #region 事件 -> 密码输入框按键事件 /// /// 密码输入框按键事件 /// /// /// private void TxtPwd_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) { //登录 Button_Click(btn_login, null); return; } else if (e.Key == Key.F16) { //清空密码 TxtPwd.Password = ""; return; } } #endregion #region 事件 -> 按钮单击 /// /// 按钮事件 /// /// /// private void Button_Click(object sender, RoutedEventArgs e) { Button keybtn = sender as Button; switch (keybtn.Name) { case "btn_login": #region 登录按钮 #region 登录的收银工号有效性验证 TxtMessage.Text = ""; //非空判断 if (TxtUserName.Text.Trim() == "") { GetValue(TxtMessage, "用户名不能为空!", "#FF0000"); TxtUserName.Focus(); return; } if (TxtPwd.Password == "") { GetValue(TxtMessage, "密码不能为空!", "#FF0000"); TxtPwd.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('{TxtUserName.Text}') AND SELLWORKERPASSWORD='{TxtPwd.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) { GetValue(TxtMessage, "你没有销售权限!!", "#FF0000"); TxtUserName.Focus(); TxtUserName.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 { GetValue(TxtMessage, "账号或密码错误,请核对后重新输入!", "#FF0000"); TxtUserName.Focus(); TxtUserName.SelectAll(); return; } #endregion } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("收银工号登录异常。原因:" + ex.Message); GetValue(TxtMessage, "数据库连接异常,请重试!", "#FF0000"); Grid_User.Visibility = Visibility.Visible; GridLoad.Visibility = Visibility.Collapsed; TxtUserName.Focus(); TxtUserName.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 = DBHelper.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 = DBHelper.QueryOdbc(_SelectSql).Tables[0]; } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog(ex.ToString()); GetValue(TxtMessage, "本地数据库连接错误,请重试!", "#FF0000"); TxtUserName.Focus(); TxtUserName.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; TxtUserName.Focus(); TxtUserName.SelectAll(); return; } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog(ex.ToString()); TxtUserName.Focus(); TxtUserName.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"); TxtPwd.Focus(); TxtPwd.SelectAll(); return; } if (TxtUserName.Text.Trim().ToUpper() != _SellWorkerCode && !String.IsNullOrWhiteSpace(_SellWorkerCode)) { CommodityPrompt _CommodityPrompt = new CommodityPrompt("", $"收银员[{_SellWorkerCode}]{_SellWorkerName}未交班,是否交班并登陆?") { Owner = this }; _CommodityPrompt.ShowDialog(); if (_CommodityPrompt.DialogResult == false) { GetValue(TxtMessage, $"收银员[{_SellWorkerName}]工号已登录,请先进行交班再登录其他收银员工号!", "#FF0000"); TxtUserName.Text = _SellWorkerCode; TxtPwd.Password = ""; TxtPwd.Focus(); TxtPwd.SelectAll(); return; } else { CommodityShift _CommodityShift = new CommodityShift("shift", "1") { Owner = this }; _CommodityShift.ShowDialog(); if (_CommodityShift.DialogResult != true) { GetValue(TxtMessage, $"收银员[{_SellWorkerName}]工号已登录,请先进行交班再登录其他收银员工号!", "#FF0000"); TxtUserName.Text = _SellWorkerCode; TxtPwd.Password = ""; TxtPwd.Focus(); TxtPwd.SelectAll(); return; } } } #endregion //登录时的操作 GetValue(TxtLogin, "", "#FF0000"); Grid_wf.Visibility = Visibility.Visible; LostKeyboard(); stp_title.Visibility = Visibility.Collapsed; stp_name.Visibility = Visibility.Collapsed; stp_pwd.Visibility = Visibility.Collapsed; stp_img.Visibility = Visibility.Visible; btn_login.IsEnabled = false; btn_close.IsEnabled = false; btnParameter.IsEnabled = false; string UserName = TxtUserName.Text.Trim().ToUpper(); string Pwd = TxtPwd.Password; TxtUserName.IsEnabled = false; TxtPwd.IsEnabled = false; int Edition = 0; if (chk_log.IsChecked.Value == true) { Edition = 1; } if (chk_other.IsChecked.Value == true) { Edition = 2; } if ((_thread == null || !_thread.IsAlive) && !IsLogin) { IsLogin = true; //登录系统 _thread = new Thread(() => Login_User(UserName, Pwd, Edition)) { IsBackground = true }; _thread.Start(); } #endregion break; case "btnParameter": #region 参数 ParameterPower _ParameterPower = new ParameterPower() { Owner = this }; _ParameterPower.ShowDialog(); if (_ParameterPower.DialogResult == true) { //ParameterSetting _ParameterSetting = new ParameterSetting(); ParConfigtion _ParConfigtion = new ParConfigtion() { Owner = this }; _ParConfigtion.ShowDialog(); QualityHelper.GetConfiguration(); } #endregion break; case "btnScaveng": #region 扫码配置参数 ScavengConfig _ScavengConfig = new ScavengConfig() { Owner = this }; _ScavengConfig.ShowDialog(); #endregion break; case "btn_close": #region 取消 UpLoadSwitch _UpLoadSwitch = new UpLoadSwitch() { Owner = this }; if (_UpLoadSwitch.ShowDialog() == true) { DataUpload _DataUpload = new DataUpload() { Owner = this }; _DataUpload.ShowDialog(); } #endregion break; case "btnarport": #region 查看状态 CashRegisterInf _CashRegisterInf = new CashRegisterInf() { Owner = this }; _CashRegisterInf.ShowDialog(); #endregion break; case "btn_user": #region 账号登录 Grid_LoginUser.Visibility = Visibility.Visible; Grid_LoginFinger.Visibility = Visibility.Collapsed; Grid_LoginFace.Visibility = Visibility.Collapsed; gif_face.Visibility = Visibility.Collapsed; gif_finger.Visibility = Visibility.Collapsed; img_face.Visibility = Visibility.Visible; img_finger.Visibility = Visibility.Visible; TxtUserName.Focus(); TxtUserName.SelectAll(); if (Grid_keyboard.Margin == new Thickness(240, 453, 240, 0)) { GetKeyboard(); } #endregion break; case "btn_face": #region 人脸识别登录 LostKeyboard(); Grid_LoginUser.Visibility = Visibility.Collapsed; Grid_LoginFinger.Visibility = Visibility.Collapsed; Grid_LoginFace.Visibility = Visibility.Visible; gif_face.Visibility = Visibility.Collapsed; gif_finger.Visibility = Visibility.Collapsed; img_face.Visibility = Visibility.Visible; img_finger.Visibility = Visibility.Visible; TxtStateFace.Text = "正在连接识别器,请稍候.."; #endregion break; case "btn_finger": #region 指纹识别登录 LostKeyboard(); Grid_LoginUser.Visibility = Visibility.Collapsed; Grid_LoginFinger.Visibility = Visibility.Visible; Grid_LoginFace.Visibility = Visibility.Collapsed; gif_face.Visibility = Visibility.Collapsed; gif_finger.Visibility = Visibility.Collapsed; img_face.Visibility = Visibility.Visible; img_finger.Visibility = Visibility.Visible; TxtState.Text = "正在连接识别器,请稍候.."; #endregion break; case "btnDownDate": #region 基础信息下载 CashierDataDownload(); #endregion break; case "btn_report": new CommodityMenu("", 0, true) { Owner = this }.ShowDialog(); break; } } #endregion #region 方法 -> Textblock加载内容 private void GetValue(TextBlock _TextBlock, string txt, string colortxt) { GiveValue(_TextBlock, txt, colortxt); } void GiveValue(TextBlock _TextBlock, string txt, string colortxt) { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate { _TextBlock.Text = txt; _TextBlock.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString(colortxt)); //要执行的代码 }); } #endregion #region 事件 -> 键盘动画效果 private void TxtUserName_GotFocus_1(object sender, RoutedEventArgs e) { if (Grid_keyboard.Margin == new Thickness(240, 453, 240, 0)) { GetKeyboard(); } } private void GetKeyboard() { //键盘弹出 System.Windows.Media.Animation.Storyboard storyboard_action = new System.Windows.Media.Animation.Storyboard(); storyboard_action.Stop(); storyboard_action.Children.Clear(); //添加动画 System.Windows.Media.Animation.ThicknessAnimation stb_1 = new System.Windows.Media.Animation.ThicknessAnimation(new Thickness(240, 453, 240, 0), new Thickness(240, 205, 240, 0), new Duration (TimeSpan.FromSeconds(0.2))); System.Windows.Media.Animation.Storyboard.SetTarget(stb_1, Grid_keyboard); System.Windows.Media.Animation.Storyboard.SetTargetProperty(stb_1, new PropertyPath("Margin")); storyboard_action.Children.Add(stb_1); //添加动画2 System.Windows.Media.Animation.ThicknessAnimation stb_2 = new System.Windows.Media.Animation.ThicknessAnimation(new Thickness(100, 115, 100, 98), new Thickness(100, 0, 100, 98), new Duration (TimeSpan.FromSeconds(0.2))); System.Windows.Media.Animation.Storyboard.SetTarget(stb_2, Grid_User); System.Windows.Media.Animation.Storyboard.SetTargetProperty(stb_2, new PropertyPath("Margin")); storyboard_action.Children.Add(stb_2); storyboard_action.Begin(); } private void LostKeyboard() { if (Grid_keyboard.Margin == new Thickness(240, 205, 240, 0)) { //键盘收起 System.Windows.Media.Animation.Storyboard storyboard_action = new System.Windows.Media.Animation.Storyboard(); storyboard_action.Stop(); storyboard_action.Children.Clear(); //添加动画 System.Windows.Media.Animation.ThicknessAnimation stb_1 = new System.Windows.Media.Animation.ThicknessAnimation(new Thickness(240, 205, 240, 0), new Thickness(240, 453, 240, 0), new Duration (TimeSpan.FromSeconds(0.2))); System.Windows.Media.Animation.Storyboard.SetTarget(stb_1, Grid_keyboard); System.Windows.Media.Animation.Storyboard.SetTargetProperty(stb_1, new PropertyPath("Margin")); storyboard_action.Children.Add(stb_1); //添加动画2 System.Windows.Media.Animation.ThicknessAnimation stb_2 = new System.Windows.Media.Animation.ThicknessAnimation(new Thickness(100, 0, 100, 98), new Thickness(100, 115, 100, 98), new Duration (TimeSpan.FromSeconds(0.2))); System.Windows.Media.Animation.Storyboard.SetTarget(stb_2, Grid_User); System.Windows.Media.Animation.Storyboard.SetTargetProperty(stb_2, new PropertyPath("Margin")); storyboard_action.Children.Add(stb_2); storyboard_action.Begin(); } } #endregion #region 方法 -> 用户登录系统 /// /// 用户登录系统 /// /// /// /// 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); switch (_PersonResult) { case 0: break; case -1: this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, "账期数据插入失败,请重试!", "#FF0000"); LoginFail(); }); return; case -2: this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, "工班数据插入失败,请重试!", "#FF0000"); LoginFail(); }); return; case -3: this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, "收银员[" + sellWorkerCode + "]未交班!", "#FF0000"); LoginFail(); }); return; case -4: this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, "账期数据插入失败,请重试!", "#FF0000"); LoginFail(); }); return; case -5: this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, "当前系统时间错误,请调整后重新登录!", "#FF0000"); LoginFail(); }); return; } #endregion 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)} 登录成功;" + $"当前版本:YSv{System.Windows.Forms.Application.ProductVersion}", NotifyUploadState = true }); this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { #region 根据用户选择,打开键盘版或触屏版主操作界面 //根据用户选择,打开键盘版或触屏版主操作界面 if (chk_log.IsChecked == true) { //键盘版操作界面 CommoditySaleCashier _CommoditySaleCashier = new CommoditySaleCashier(TxtUserName.Text.ToUpper()); _CommoditySaleCashier.Show(); Close(); } else { //触屏版操作界面 CommoditySaleOther _CommoditySaleOther = new CommoditySaleOther(TxtUserName.Text.ToUpper()); _CommoditySaleOther.Show(); Close(); } #endregion }); } #endregion #region 事件 -> 收银员版获取焦点 private void chk_log_Click_1(object sender, RoutedEventArgs e) { if (chk_log.IsChecked == true) { if (Grid_keyboard.Margin == new Thickness(240, 205, 243, 0)) { LostKeyboard(); } chk_other.IsChecked = false; QualityHelper.UpdateConfigUration("IsTouch", "1"); QualityHelper.IsTouch = "1"; } else { if (Grid_keyboard.Margin == new Thickness(240, 205, 243, 0)) { LostKeyboard(); } chk_other.IsChecked = true; chk_log.IsChecked = false; QualityHelper.UpdateConfigUration("IsTouch", "0"); QualityHelper.IsTouch = "0"; } } #endregion #region 方法 -> 点击页面空余地方键盘自动收起 private void Window_MouseDown_1(object sender, MouseButtonEventArgs e) { //if (Grid_keyboard.Margin == new Thickness(240, 205, 243, 0)) //{ // LostKeyboard(); //} //txt_focus.Focus(); //txt_focus.SelectAll(); } #endregion #region 事件 -> 其他版获取焦点 private void chk_other_Click_1(object sender, RoutedEventArgs e) { if (chk_other.IsChecked == true) { if (Grid_keyboard.Margin == new Thickness(240, 205, 243, 0)) { LostKeyboard(); } chk_log.IsChecked = false; QualityHelper.UpdateConfigUration("IsTouch", "0"); QualityHelper.IsTouch = "0"; } else { if (Grid_keyboard.Margin == new Thickness(240, 205, 243, 0)) { LostKeyboard(); } chk_log.IsChecked = true; chk_other.IsChecked = false; QualityHelper.UpdateConfigUration("IsTouch", "1"); QualityHelper.IsTouch = "1"; } } #endregion #region 方法 -> 获取最大编号 private int GetMaxCode(string StrSql) { //获取最大编号并加1 DataTable _DataTable = DBHelper.QueryOdbc(StrSql).Tables[0]; int MaxCode = 0; if (_DataTable.Rows.Count > 0) { try { MaxCode = int.Parse(_DataTable.Rows[0][0].ToString()) + 1; } catch { MaxCode = 1; } } else { MaxCode = 1; } return MaxCode; } #endregion #region 方法 -> 键盘快捷键 private void Window_KeyDown_1(object sender, KeyEventArgs e) { if (e.SystemKey == Key.F4) { e.Handled = true; } switch (e.Key) { case Key.Escape: Button_Click(btn_close, null); break; case Key.F1: Button_Click(btnarport, null); break; case Key.F2: if (chk_other.IsChecked == true) { chk_log.IsChecked = true; chk_log_Click_1(null, null); } else { chk_other.IsChecked = true; chk_other_Click_1(null, null); } break; case Key.F3: Button_Click(btnScaveng, null); break; case Key.F4: Button_Click(btnParameter, null); break; case Key.F5: Button_Click(btn_report, null); break; case Key.Down: TxtUserName.Focus(); if (Grid_keyboard.Margin == new Thickness(240, 453, 240, 0)) { GetKeyboard(); } break; } } #endregion #region 方法 -> 登录数据校验验证 /// /// 登录账期班期数据验证 /// /// 登录工号 /// private bool LoginCheck() { try { #region 检查收银机服务区、门店、机器号配置 //判断收银机配置 if (QualityHelper.serverpartcode == "" || QualityHelper.shopcode == "" || QualityHelper.machinecode == "") { //参数错误 this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, "收银系统配置不正确,请前往参数页面修改!", "#FF0000"); Grid_User.Visibility = Visibility.Visible; GridLoad.Visibility = Visibility.Collapsed; TxtUserName.Focus(); }); return false; } #endregion #region 联网校验收银机本地时间 //与服务器校对时间 try { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, "正在校准系统时间......", "#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 #region 检查收银机当前时间是否异常 DateTime _DateTime = new DateTime(2021, 01, 01, 00, 00, 00); string _strLocalDate = QualityHelper.ConfigurationValues("syncdtime", "2018/01/01 00:00:00"); //判断当前时间是否小于上次登录时间 DateTime _LocalDate; if (DateTime.TryParse(_strLocalDate, out _LocalDate)) { if (DateTime.Now >= _LocalDate) { QualityHelper.UpdateConfigUration("syncdtime", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); } else { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, "当前系统时间错误,请调整后重新登录!", "#FF0000"); Grid_User.Visibility = Visibility.Visible; GridLoad.Visibility = Visibility.Collapsed; TxtUserName.Focus(); }); return false; } } else { //系统第一次启动,判断是否小于预设时间 if (DateTime.Now >= _DateTime) { QualityHelper.UpdateConfigUration("syncdtime", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); } else { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, "当前系统时间错误,请调整后重新登录!", "#FF0000"); Grid_User.Visibility = Visibility.Visible; GridLoad.Visibility = Visibility.Collapsed; TxtUserName.Focus(); }); return false; } } #endregion #region 检查软件到期时间 //判断软件到期时间 try { string _strUsingType = QualityHelper.ConfigurationValues("using_type", "1000"); decimal _WarnDay = 0; decimal.TryParse(QualityHelper.ConfigurationValues("expiry_day", "15"), out _WarnDay); if (_WarnDay == 0) { _WarnDay = 15; } DateTime _SoftExpiryDate; if (!DateTime.TryParse(QualityHelper.ConfigurationValues("expirydate", ""), out _SoftExpiryDate)) { try { _SoftExpiryDate = DateTime.Parse(DBHelper.QueryOdbc("SELECT EXPIRY_DATE " + "FROM SYS_GLOBLE WHERE VAR_NAME = 'g_ver'").Tables[0].Rows[0]["expiry_date"].ToString()); } catch { } } if (_SoftExpiryDate != DateTime.MinValue) { if (DateTime.Today > _SoftExpiryDate) { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, (_strUsingType == "2000" ? "您租赁的设备已到期" : "您购买的设备软件版本已到期") + ",请及时续费!", "#FF0000"); Grid_User.Visibility = Visibility.Visible; GridLoad.Visibility = Visibility.Collapsed; TxtUserName.Focus(); }); return false; } int _RemainingTime = (int)_SoftExpiryDate.Subtract(DateTime.Today).TotalDays; if (_RemainingTime <= _WarnDay) { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, (_strUsingType == "2000" ? "您租赁的设备剩余【" : "您购买的设备软件版本剩余【") + _RemainingTime + "】天到期,请及时续费!", "#FF0000"); TxtUserName.Focus(); }); MessageBoxResult _Result = MessageBox.Show((_strUsingType == "2000" ? "您租赁的设备剩余【" : "您购买的设备软件版本剩余【") + _RemainingTime + "】天过期,请及时续费!", "系统提示", MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK, MessageBoxOptions.ServiceNotification); } } } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("软件有效期检测错误:" + ex.Message); } #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(TxtMessage, "该门店已停业", "#FF0000"); Grid_User.Visibility = Visibility.Visible; GridLoad.Visibility = Visibility.Collapsed; TxtUserName.Focus(); }); return false; } } else { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, "门店信息未下载!", "#FF0000"); Grid_User.Visibility = Visibility.Visible; DownDateThread = new Thread(CheckDate) { IsBackground = true }; DownDateThread.Start(); TxtUserName.Focus(); }); return false; } return true; } catch (Exception ex) { ESSupport.Lib.LogHelper.WriteServiceLog("登录验证异常:" + ex.Message); this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { GetValue(TxtMessage, ex.Message, "#FF0000"); Grid_User.Visibility = Visibility.Visible; GridLoad.Visibility = Visibility.Collapsed; TxtUserName.Focus(); }); return false; } } #endregion private void LoginFail() { btn_login.IsEnabled = true; btn_close.IsEnabled = true; btnParameter.IsEnabled = true; TxtUserName.IsEnabled = true; stp_name.Visibility = Visibility.Visible; stp_pwd.Visibility = Visibility.Visible; stp_img.Visibility = Visibility.Collapsed; stp_title.Visibility = Visibility.Visible; TxtPwd.IsEnabled = true; TxtUserName.Focus(); TxtUserName.SelectAll(); Grid_wf.Visibility = Visibility.Collapsed; Grid_User.Visibility = Visibility.Visible; GridLoad.Visibility = Visibility.Collapsed; IsLogin = false; } #region 方法 -> 校验数据库 /// /// 数据库升级校验 /// private void GetDate() { try { ESSupport.Lib.DataBaseUpdate.PosDataBaseUpdate(); try { ESSupport.Lib.SyBaseHelper.ExecuteSqlTran(new List { //补全单品表商品扫码传输标识 @"UPDATE T_COMMODITYSALE_NEW A SET A.COMMODITY_SYMBOL = B.COMMODITY_SYMBOL FROM T_COMMODITYEX B WHERE A.COMMODITY_CODE = B.COMMODITY_CODE AND ISNULL(A.COMMODITY_SYMBOL,'') = ''" , //补全流水表商品扫码传输标识、商品类别 @"UPDATE T_SELLDETAILS A SET A.COMMODITY_TYPE = B.COMMODITY_TYPE, A.COMMODITY_SYMBOL = B.COMMODITY_SYMBOL FROM T_COMMODITYEX B WHERE A.COMMODITY_CODE = B.COMMODITY_CODE AND ISNULL(A.COMMODITY_SYMBOL,'') = '' AND ISNULL(A.COMMODITY_TYPE,'') = ''", //补全需要上传的异常交易明细(挂单后进行清单的商品明细) @"UPDATE T_ABNORMALITY A SET A.TRANSFER_STATE = 0 WHERE A.TRANSFER_STATE = 2 AND EXISTS ( SELECT 1 FROM T_ABNORMALITY B WHERE A.ABNORMALITY_CODE = B.ABNORMALITY_PCODE AND B.ABNORMALITY_TYPE = 1099 )" }); } catch { } //定期清理数据 if (QualityHelper.data_delete == "1") { DataTable _DataTable = DBHelper.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)); } } try { //清理历史备份文件 ESSupport.Lib.DataBaseUpdate.ClearDataBackup( AppDomain.CurrentDomain.BaseDirectory + "\\DataBackup", int.Parse(QualityHelper.effective_day), true); } catch { } } catch { } } #endregion #region 方法 -> 检测数据是否存在并启动下发线程 /// /// 更换门店或首次安装开机的机器需要下载基础信息(方法重写用新的接口传输) /// private void CheckDate() { try { try { //删除错误工号数据 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"); } catch { } DataTable _ShopMessageTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT SHOPMESSAGE_ID FROM T_SHOPMESSAGE WHERE SERVERPARTCODE = '{QualityHelper.serverpartcode}' AND SHOPCODE = '{QualityHelper.shopcode}'").Tables[0]; DataTable _SellWorkerTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT 1 FROM T_SELLWORKER WHERE SERVERPARTCODE = '{QualityHelper.serverpartcode}'").Tables[0]; if (_ShopMessageTable.Rows.Count == 0 || _SellWorkerTable.Rows.Count == 0) { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { CashierDataDownload(); }); } } catch { this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate () { CashierDataDownload(); }); } } /// /// 更换门店或首次安装开机的机器需要下载基础信息 /// 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 启动基础数据下载更新 this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate { Grid_Load.Visibility = Visibility.Visible; this.IsEnabled = false; TxtLoad.Text = "正在下载基础数据信息,请稍候......"; }); PosControl.PosDataDownload.DataDownload(ESSupport.Transfer.TransferDataDictionary.TableDataType.IssueConfigurationToMachine, DateTime.Now); this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate { pbrDown.Value += 34; }); //PosSystemHelper.PosSocket_NotifyEvent(DateTime.Now, $"用户手动下载门店数据信息。", "3104"); 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; }); //PosSystemHelper.PosSocket_NotifyEvent(DateTime.Now, $"用户手动下载收银工号数据信息。", "3104"); 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); //执行日志换行 PosSystemHelper.PosSocket_NotifyEvent(this, new ESSupport.Model.Common.NotifyEventArgs() { NotifyLoggerType = ESSupport.Transfer.TransferDataDictionary.LoggerType.公共通知, NotifyLoggerTime = DateTime.Now }); this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate { pbrDown.Value += 34; }); this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate { Grid_Load.Visibility = Visibility.Collapsed; pbrDown.Value = 0; GetValue(TxtMessage, "基础信息下载完成!", "#FF0000"); this.IsEnabled = true; TxtUserName.Focus(); TxtUserName.SelectAll(); }); #endregion }) { IsBackground = true }; PosControl.DataTransThread.Start(); } } #endregion } }