using System; using System.Collections.Generic; using System.Linq; using System.Text; using ESSupport.Lib; using ESSupport.Pos; using ConnectPoint.Common; using System.Collections; using Newtonsoft.Json; using System.Data; using Newtonsoft.Json.Linq; namespace ConnectPoint { public class ThreadHelper { #region 方法 -> 实时交易数据统计上报 /// /// 实时交易数据统计上报 /// /// 服务URL地址 public static void DataCollectionUpload(string serviceURL) { //获取服务区编码 string _ServerPartCode = PosConfigInit.ConfigurationValues("serverpartcode", string.Empty); //获取门店编码 string _ShopCode = PosConfigInit.ConfigurationValues("shopcode", string.Empty); //获取收银机号 string _MachineCode = PosConfigInit.ConfigurationValues("machinecode", string.Empty); //获取新系统标识 bool _NewSystem = PosConfigInit.ConfigurationValues("NewSystem", "0") == "1"; DataStatistics _DataStatistics = new DataStatistics { ServerPartCode = _ServerPartCode, ShopCode = _ShopCode, MachineCode = _MachineCode }; //业态营业时间采集 _DataStatistics.BusinessTime(_NewSystem); try { //十分钟实时交易数据统计 Model.DataCollectionModel _DataCollectionModel = _DataStatistics.GetDataCollection(_NewSystem); if (_DataCollectionModel != null) { try { //记录上传 SoapWSHelper.QuerySoapWebServiceString( serviceURL, "FeedbackUpload", new Hashtable { { "feedbackType", "DataCollection" }, { "jsonData", JsonConvert.SerializeObject(_DataCollectionModel) } }); } catch { } try { //本地记录保存 SyBaseHelper.ExecuteSqlTran($@"INSERT INTO T_DATACOLLECTION (DATACOLLECTION_ID,SERVERPARTCODE,SHOPCODE,MACHINECODE, MACADDRESS,MACHINENAME,DATACOLLECTION_TYPE, DATACOLLECTION_DATE,TOTAL_COUNT,TOTALSELL_AMOUNT, TICKET_COUNT,TICKET_INFO) VALUES ({_DataCollectionModel.DATACOLLECTION_ID}, '{_DataCollectionModel.SERVERPARTCODE}','{_DataCollectionModel.SHOPCODE}', '{_DataCollectionModel.MACHINECODE}','{_DataCollectionModel.MACADDRESS}', '{_DataCollectionModel.MACHINENAME}',2000, DATETIME('{_DataCollectionModel.DATACOLLECTION_DATE.Value.ToString("yyyy/MM/dd HH:mm:ss")}'), {_DataCollectionModel.TOTAL_COUNT},{_DataCollectionModel.TOTALSELL_AMOUNT}, {_DataCollectionModel.TICKET_COUNT},'{_DataCollectionModel.TICKET_INFO}')"); } catch { } } } catch { } } #endregion #region 方法 -> 收银机状态上报 /// /// 收银机状态上报 /// /// 服务URL地址 public static void StateFeedbackUpload(string serviceURL) { try { //获取服务区编码 string _ServerPartCode = PosConfigInit.ConfigurationValues("serverpartcode", string.Empty); //获取门店编码 string _ShopCode = PosConfigInit.ConfigurationValues("shopcode", string.Empty); //获取收银机号 string _MachineCode = PosConfigInit.ConfigurationValues("machinecode", string.Empty); //获取新系统标识 bool _NewSystem = PosConfigInit.ConfigurationValues("NewSystem", "0") == "1"; DataStatistics _DataStatistics = new DataStatistics { ServerPartCode = _ServerPartCode, ShopCode = _ShopCode, MachineCode = _MachineCode }; //获取当日销售统计数据 PaymentInfo _PaymentInfo = _DataStatistics.GetSellStatistics(_NewSystem); //获取本地数据版本列表 List _LocalDataVersionList = _DataStatistics.GetLocalDataVersion(_NewSystem); Model.StateFeedbackModel _StateFeedbackModel = new Model.StateFeedbackModel { STATEFEEDBACK_ID = 1, CONNECT_DATE = DateTime.Now, SERVERPARTCODE = _ServerPartCode, SHOPCODE = _ShopCode, MACHINECODE = _MachineCode, MACHINENAME = System.Net.Dns.GetHostName(), MACHINE_MACADDRESS = PCHelper.GetMacAddressByNetworkInformation(), CONNECT_IP = PCHelper.GetAddressIP(), CURRENT_SELLAMOUNT = _PaymentInfo.FactAmount, CURRENT_CASHPAY = _PaymentInfo.CashPay, CURRENT_MOBILEPAY = _PaymentInfo.MobilePay, CURRENT_ALIPAY = _PaymentInfo.Alipay, CURRENT_WECHAT = _PaymentInfo.Wechat, CURRENT_UNIONPAY = _PaymentInfo.UnionPay, CURRENT_SELLCOUNT = _PaymentInfo.SellCount, CURRENT_TICKETCOUNT = _PaymentInfo.TicketCount, CURRENT_GOODSCOUNT = _DataStatistics.GetCommodityCount(), CURRENT_PERSON = _DataStatistics.GetPersonName(_NewSystem), SELL_CONTENT = $"{_DataStatistics.GetLastTrade(_NewSystem)}|{_DataStatistics.GetLastSellData(_NewSystem)}", VERSION_NUM = PosConfigInit.ConfigurationValues("version", ""), CONFIG_CONTENT = _DataStatistics.GetPosConfig(), STATEFEEDBACK_DESC = _DataStatistics.GetSalesPromote() }; //读取收银端软件有效期时间,空值代表未设置软件有效期 if (DateTime.TryParse(PosConfigInit.ConfigurationValues("EXPIRYDATE", ""), out DateTime date_ExpiryDate)) { _StateFeedbackModel.EXPIRYDATE_VERSION = date_ExpiryDate; } foreach (Model.DataVersionModel _LocalDataVersion in _LocalDataVersionList) { switch (_LocalDataVersion.DataTableName.ToUpper()) { case "COMMODITYEX"://收银机本地商品数据版本 _StateFeedbackModel.COMMODITY_VERSION = _LocalDataVersion.DataVersion; break; case "COMMODITYSALE"://收银机本地单品数据版本 _StateFeedbackModel.COMMODITYSALE_VERSION = _LocalDataVersion.DataVersion; //更新本地已上传单品记录参数,用于PB系统 if (_LocalDataVersion.TransState.HasValue && _LocalDataVersion.TransState.Value != 0 && _LocalDataVersion.DataVersion.HasValue) { PosConfigInit.UpdateConfigUration("CommoditySale", _LocalDataVersion.DataVersion.Value.ToString()); } break; case "PERSONSELL"://收银机本地交班记录数据版本 _StateFeedbackModel.PERSONSELL_VERSION = _LocalDataVersion.DataVersion; //更新本地已上传交班记录参数,用于PB系统 if (_LocalDataVersion.TransState.HasValue && _LocalDataVersion.TransState.Value != 0 && _LocalDataVersion.DataVersion.HasValue) { PosConfigInit.UpdateConfigUration("Personsell", _LocalDataVersion.DataVersion.Value.ToString()); } break; case "ENDACCOUNT"://收银机本地日结营收数据版本 _StateFeedbackModel.ENDACCOUNT_VERSION = _LocalDataVersion.DataVersion; //更新本地已上传日结记录参数,用于PB系统 if (_LocalDataVersion.TransState.HasValue && _LocalDataVersion.TransState.Value != 0 && _LocalDataVersion.DataVersion.HasValue) { PosConfigInit.UpdateConfigUration("EndAccount", _LocalDataVersion.DataVersion.Value.ToString()); } break; case "INSPECTION"://收银机本地收银稽核数据版本 _StateFeedbackModel.INSPECTION_VERSION = _LocalDataVersion.DataVersion; break; case "SALESPROMOTE"://收银机本地促销活动数据版本 _StateFeedbackModel.SALESPROMOTE_VERSION = _LocalDataVersion.DataVersion; break; case "SHOPMESSAGE"://收银机本地门店数据版本 _StateFeedbackModel.SHOPMESSAGE_VERSION = _LocalDataVersion.DataVersion; break; case "SELLWORKER"://收银机本地收银工号数据版本 _StateFeedbackModel.SELLWORKER_VERSION = _LocalDataVersion.DataVersion; break; case "AUDITTASK"://收银机本地稽核任务数据版本 _StateFeedbackModel.AUDITTASK_VERSION = _LocalDataVersion.DataVersion; break; } } SoapWSHelper.QuerySoapWebServiceString( serviceURL, "FeedbackUpload", new Hashtable { { "feedbackType", "StateFeedback" }, { "jsonData", JsonConvert.SerializeObject(_StateFeedbackModel) } }); } catch (Exception ex) { LogHelper.WriteServiceLog($"状态反馈上报失败:{ex.Message}"); } } #endregion #region 方法 -> 收银机器信息上报 /// /// 收银机器信息上报 /// /// 服务URL地址 public static void MachineInfoFeedbackUpload(string serviceURL) { try { //获取服务区编码 string _ServerPartCode = PosConfigInit.ConfigurationValues("serverpartcode", string.Empty); //获取门店编码 string _ShopCode = PosConfigInit.ConfigurationValues("shopcode", string.Empty); //获取收银机号 string _MachineCode = PosConfigInit.ConfigurationValues("machinecode", string.Empty); Model.MachineInfoModel _MachineInfoModel = new Model.MachineInfoModel { MACHINEINFO_ID = 1, SERVERPARTCODE = _ServerPartCode, SHOPCODE = _ShopCode, SERVER_IP = PosConfigInit.ConfigurationValues("server_ip", string.Empty), MACHINECODE = _MachineCode, MACHINENAME = System.Net.Dns.GetHostName(), MACHINE_MACADDRESS = PCHelper.GetMacAddressByNetworkInformation(), MACHINE_IP = PCHelper.GetAddressIP(), ADDDATE = DateTime.Now, FLAG = 1 }; SoapWSHelper.QuerySoapWebServiceString( serviceURL, "FeedbackUpload", new Hashtable { { "feedbackType", "MachineInfoFeedback" }, { "jsonData", JsonConvert.SerializeObject(_MachineInfoModel) } }); } catch (Exception ex) { LogHelper.WriteServiceLog($"状态反馈上报失败:{ex.Message}"); } } #endregion #region 方法 -> 移动支付交易校验 /// /// 移动支付交易校验 /// /// 服务接口地址 /// 校验起始时间 public static void MobilePayCheck(string payServiceUrl, DateTime payStartDate) { //获取服务区编码 string _ServerPartCode = PosConfigInit.ConfigurationValues("serverpartcode", string.Empty); //获取门店编码 string _ShopCode = PosConfigInit.ConfigurationValues("shopcode", string.Empty); //获取收银机号 string _MachineCode = PosConfigInit.ConfigurationValues("machinecode", string.Empty); try { DataTable _tableMobilePay = SyBaseHelper.QueryOdbc( $@"SELECT TICKET_CODE FROM T_MOBILE_PAY WHERE MOBILEPAY_DATE BETWEEN DATETIME('{payStartDate.ToString("yyyy/MM/dd HH:mm:ss")}') AND DATETIME('{DateTime.Now.AddMinutes(-5).ToString("yyyy/MM/dd HH:mm:ss")}') AND MOBILEPAY_RESULT NOT IN(1,5,9)").Tables[0]; if (_tableMobilePay.Rows.Count > 0) { string _strOrderCode = ""; string _strLeft = _ServerPartCode + _ShopCode + _MachineCode.PadLeft(4, '0'); List _listUpdate = new List(); for (int i = 0; i < _tableMobilePay.Rows.Count; i++) { _strOrderCode += (_strOrderCode == "" ? "" : ",") + _tableMobilePay.Rows[i]["TICKET_CODE"].ToString().Replace(_strLeft, ""); if ((i + 1) % 20 == 0 || (i + 1) == _tableMobilePay.Rows.Count) { try { string _strResult = SoapWSHelper.QuerySoapWebServiceString( payServiceUrl, "MobilePayCheck", new Hashtable { { "serverPartCode", _ServerPartCode }, { "shopCode", _ShopCode }, { "machineCode", _MachineCode }, { "mobilePayOrderCode", _strOrderCode } }); if (!string.IsNullOrWhiteSpace(_strResult)) { DataTable _tableResult = JsonHelper.JsonToDataSet(_strResult).Tables[0]; string _strTicketCode = ""; for (int n = 0; n < _tableResult.Rows.Count; n++) { _strTicketCode += (_strTicketCode == "" ? "" : ",") + "'" + _tableResult.Rows[n]["TICKETCODE"].ToString() + "'"; } if (!string.IsNullOrWhiteSpace(_strTicketCode)) { _listUpdate.Add(string.Format("UPDATE T_MOBILE_PAY SET MOBILEPAY_RESULT = 5, MOBILEPAY_STATE = 0" + "WHERE TICKET_CODE IN({0}) AND MOBILEPAY_RESULT NOT IN (1,5,9)", _strTicketCode)); _listUpdate.Add(string.Format("UPDATE T_SELLDATA_PAY SET SELLDATAPAY_STATE = 8 " + "WHERE ORDERCODE IN ({0}) AND SELLDATAPAY_STATE NOT IN (1,9)", _strTicketCode)); } } } catch { } _strOrderCode = ""; } } if (_listUpdate.Count > 0) { try { SyBaseHelper.ExecuteSqlTran(_listUpdate); } catch { } } } } catch (Exception ex) { LogHelper.WriteServiceLog("移动支付交易校验异常:" + ex.Message); } } #endregion #region 通过移动支付通道商接口校验支付结果 /// /// 通过移动支付通道商接口校验支付结果 /// /// 默认移动支付接口地址 /// 校验的移动支付交易起始时间 public static void MobilePayQueryCheck(string payServiceUrl, DateTime payStartDate) { try { //获取服务区编码 string _ServerPartCode = PosConfigInit.ConfigurationValues("serverpartcode", string.Empty); //获取门店编码 string _ShopCode = PosConfigInit.ConfigurationValues("shopcode", string.Empty); //获取收银机号 string _MachineCode = PosConfigInit.ConfigurationValues("machinecode", string.Empty); if (PosControl.PayServiceList == null) { PosControl.PayServiceList = new System.Collections.Concurrent.ConcurrentDictionary(); GetMobilePayOperators(PosConfigInit.ConfigurationValues("server_ip", string.Empty)); } //实例化数据操作类 DataStatistics _DataStatistics = new DataStatistics { ServerPartCode = _ServerPartCode, ShopCode = _ShopCode, MachineCode = _MachineCode }; //获取是否直连移动支付交易参数 string _MobilePayProxy = PosConfigInit.ConfigurationValues("MobilePayProxy", "0"); //获取所有不成功的交易记录 DataTable _DataTable = SyBaseHelper.QueryOdbc( $@"SELECT MOBILEPAY_TYPE,TICKET_CODE, TICKET_AMOUNT,MOBILEPAY_OPERATORS FROM T_MOBILE_PAY WHERE TICKET_AMOUNT > 0 AND MOBILEPAY_RESULT NOT IN(1,5,9) AND MOBILEPAY_DATE BETWEEN DATETIME('{payStartDate.ToString("yyyy/MM/dd HH:mm:ss")}') AND DATETIME('{DateTime.Now.AddMinutes(-5).ToString("yyyy/MM/dd HH:mm:ss")}') ").Tables[0]; //循环查询交易结果 for (int i = 0; i < _DataTable.Rows.Count; i++) { string _Result = ""; List _UpdateList = new List(); try { string _strServiceURL = ""; Enum.TryParse(_DataTable.Rows[i]["MOBILEPAY_OPERATORS"].ToString(), out PosDictionary.MobilePayOperators mobilePayOperators); if (PosControl.PayServiceList != null && PosControl.PayServiceList.ContainsKey(mobilePayOperators)) { _strServiceURL = PosControl.PayServiceList[mobilePayOperators]; } else { _strServiceURL = payServiceUrl; } //富友 if (mobilePayOperators == PosDictionary.MobilePayOperators.fuiou) { Hashtable hashtable = new Hashtable { { "TICKETCODE", _DataTable.Rows[i]["TICKET_CODE"].ToString() }, { "PAYTYPE", _DataTable.Rows[i]["MOBILEPAY_TYPE"].ToString() }, { "_mchnt_cd", "" }, { "_term_id", "" }, { "InsertType", "1" } }; _Result = SoapWSHelper.QuerySoapWebServiceString(_strServiceURL, "querypay", hashtable); } //付付/客无忧/威付通 else { Hashtable hashtable = new Hashtable { { "TICKETCODE", _DataTable.Rows[i]["TICKET_CODE"].ToString() }, { "OUT_TRADE_NO", "" }, { "TICKETPRICE", ((decimal)_DataTable.Rows[i]["TICKET_AMOUNT"]).ToString("F2") }, { "PAYTYPE", _DataTable.Rows[i]["MOBILEPAY_TYPE"].ToString() }, { "TotalCount", 1 } }; if (_MobilePayProxy == "1" && PosControl.MobilePayMerchantList != null && PosControl.MobilePayMerchantList.ContainsKey(mobilePayOperators)) { switch (mobilePayOperators) { case PosDictionary.MobilePayOperators.kwypay: _Result = libESPay.ESPayService.KwyPayQuery( PosControl.MobilePayMerchantList[mobilePayOperators].Busi_id, PosControl.MobilePayMerchantList[mobilePayOperators].Key, _DataTable.Rows[i]["TICKET_CODE"].ToString(), "", ((decimal)_DataTable.Rows[i]["TICKET_AMOUNT"]).ToString("F2")); _DataStatistics.InsertOrUpdateMobilePayRecord(mobilePayOperators, PosControl.MobilePayMerchantList[mobilePayOperators].Busi_id, PosControl.MobilePayMerchantList[mobilePayOperators].Key, _DataTable.Rows[i]["MOBILEPAY_TYPE"].ToString(), _DataTable.Rows[i]["TICKET_CODE"].ToString(), ((decimal)_DataTable.Rows[i]["TICKET_AMOUNT"]).ToString("F2"), _Result); break; case PosDictionary.MobilePayOperators.unionpay: _Result = libESPay.ESPayService.UnionPayQuery( PosControl.MobilePayMerchantList[mobilePayOperators].Busi_id, PosControl.MobilePayMerchantList[mobilePayOperators].Key, _DataTable.Rows[i]["TICKET_CODE"].ToString(), "", ((decimal)_DataTable.Rows[i]["TICKET_AMOUNT"]).ToString("F2")); _DataStatistics.InsertOrUpdateMobilePayRecord(mobilePayOperators, PosControl.MobilePayMerchantList[mobilePayOperators].Busi_id, PosControl.MobilePayMerchantList[mobilePayOperators].Key, _DataTable.Rows[i]["MOBILEPAY_TYPE"].ToString(), _DataTable.Rows[i]["TICKET_CODE"].ToString(), ((decimal)_DataTable.Rows[i]["TICKET_AMOUNT"]).ToString("F2"), _Result); break; case PosDictionary.MobilePayOperators.irichpay: _Result = libESPay.ESPayService.IRichPayQuery( PosControl.MobilePayMerchantList[mobilePayOperators].Busi_id, PosControl.MobilePayMerchantList[mobilePayOperators].Key, _DataTable.Rows[i]["TICKET_CODE"].ToString(), "", ((decimal)_DataTable.Rows[i]["TICKET_AMOUNT"]).ToString("F2")); _DataStatistics.InsertOrUpdateMobilePayRecord(mobilePayOperators, PosControl.MobilePayMerchantList[mobilePayOperators].Busi_id, PosControl.MobilePayMerchantList[mobilePayOperators].Key, _DataTable.Rows[i]["MOBILEPAY_TYPE"].ToString(), _DataTable.Rows[i]["TICKET_CODE"].ToString(), ((decimal)_DataTable.Rows[i]["TICKET_AMOUNT"]).ToString("F2"), _Result); break; default: _Result = SoapWSHelper.QuerySoapWebServiceString(_strServiceURL, "querypaynew", hashtable); break; } } else { _Result = SoapWSHelper.QuerySoapWebServiceString(_strServiceURL, "querypaynew", hashtable); } } if (_Result != "") { JObject _JObject = JObject.Parse(_Result); if (_JObject["result_code"].ToString() == "100") { _UpdateList.Add(String.Format("UPDATE T_MOBILE_PAY SET MOBILEPAY_RESULT = 5, MOBILEPAY_STATE = 0 " + "WHERE TICKET_CODE = '{0}' AND MOBILEPAY_RESULT NOT IN (1,5,9)", _DataTable.Rows[i]["TICKET_CODE"].ToString())); _UpdateList.Add(String.Format("UPDATE T_SELLDATA_PAY SET SELLDATAPAY_STATE = 8 " + "WHERE ORDERCODE = '{0}' AND SELLDATAPAY_STATE NOT IN (1,9)", _DataTable.Rows[i]["TICKET_CODE"].ToString())); SyBaseHelper.ExecuteSqlTran(_UpdateList); } } } catch (Exception ex) { LogHelper.WriteServiceLog("移动支付校验:[" + _DataTable.Rows[i]["TICKET_CODE"].ToString() + "]" + ex.Message); } } } catch (Exception ex) { LogHelper.WriteServiceLog("移动支付交易校验失败(支付通道):" + ex.Message); } } /// /// 获取主备用通道对应的移动支付服务商,并初始化交易参数 /// /// 支付通道服务器IP地址 private static void GetMobilePayOperators(string paySeviceIP) { try { string retString = ""; //获取服务区编码 string _ServerPartCode = PosConfigInit.ConfigurationValues("serverpartcode", string.Empty); //获取门店编码 string _ShopCode = PosConfigInit.ConfigurationValues("shopcode", string.Empty); string[] ars_ServicePort = new string[] { PosConfigInit.ConfigurationValues("service_port", "7080"), PosConfigInit.ConfigurationValues("service_port2", "7080"), PosConfigInit.ConfigurationValues("service_port3", "7080"), PosConfigInit.ConfigurationValues("service_port4", "7080"), PosConfigInit.ConfigurationValues("service_port5", "7080") }; foreach (var str_ServicePort in ars_ServicePort) { string _strServiceURL = string.Format("http://{0}:{1}/service.asmx", paySeviceIP, str_ServicePort); if (!PosControl.PayServiceList.Values.Contains(_strServiceURL)) { Hashtable hashtable = new Hashtable { { "serverPartCode", _ServerPartCode }, { "shopCode", _ShopCode } }; retString = SoapWSHelper.QuerySoapWebServiceString(_strServiceURL, "GetMerchant", hashtable); if (retString.Trim() != "") { JObject _JObject = JObject.Parse(retString); string TradeOn = _JObject["trade_no"].ToString(); string TradeNum = _JObject["trade_num"].ToString(); string ResultDesc = _JObject["result_desc"].ToString(); string ResultCode = _JObject["result_code"].ToString(); if (Enum.TryParse(ResultDesc, out PosDictionary.MobilePayOperators _MobilePayOperators)) { PosControl.PayServiceList.AddOrUpdate(_MobilePayOperators, _strServiceURL, (operators, serviceURL) => _strServiceURL); } } } } } catch (Exception ex) { LogHelper.WriteServiceLog("备用通道信息初始化:" + ex.Message); } } #endregion #region 方法 -> 获取门店移动支付通道配置 /// /// 获取门店移动支付通道配置 /// /// 接口地址 /// 服务区编码 /// 业态编码 public static void MobilePayConfigUpdate(string paySeviceIP) { if (string.IsNullOrWhiteSpace(paySeviceIP)) { return; } //获取服务区编码 string _ServerPartCode = PosConfigInit.ConfigurationValues("serverpartcode", string.Empty); //获取门店编码 string _ShopCode = PosConfigInit.ConfigurationValues("shopcode", string.Empty); if (string.IsNullOrWhiteSpace(_ServerPartCode) || string.IsNullOrWhiteSpace(_ShopCode)) { return; } try { string _BusinessType = SyBaseHelper.QueryOdbc( $@"SELECT BUSINESSTYPE FROM T_SHOPMESSAGE WHERE SERVERPARTCODE = '{_ServerPartCode}' AND SHOPCODE = '{_ShopCode}'").Tables[0].Rows[0]["BUSINESSTYPE"].ToString(); string[] _ServicePort = new string[] { PosConfigInit.ConfigurationValues("service_port", "7080"), PosConfigInit.ConfigurationValues("service_port2", "7080"), PosConfigInit.ConfigurationValues("DataServicePort", "7080") }; List _ServiceUrlList = new List(); for (int i = 0; i < _ServicePort.Count(); i++) { _ServiceUrlList.Add(string.Format("http://{0}:{1}/Service.asmx", paySeviceIP, _ServicePort[i])); } Hashtable hashtable = new Hashtable { { "serverPartCode", _ServerPartCode }, { "businessType", _BusinessType } }; foreach (string _strServiceUrl in _ServiceUrlList) { try { string _strResult = SoapWSHelper.QuerySoapWebServiceString(_strServiceUrl, "MobilePayConfig", hashtable); if (!string.IsNullOrWhiteSpace(_strResult)) { DataTable _DateTable = JsonHelper.JsonToDataTable(_strResult); if (_DateTable != null && _DateTable.Rows.Count > 0) { foreach (DataRow _DataRow in _DateTable.Rows) { PosConfigInit.UpdateConfigUration(_DataRow["k"].ToString(), _DataRow["v"].ToString()); } } } break; } catch (Exception ex) { LogHelper.WriteServiceLog("移动支付通道配置下载异常:" + ex.Message); } } } catch { } } #endregion #region 方法 -> 记录系统运行时间日志 /// /// 记录系统运行时间日志 /// /// 最后一次记录时间 /// public static bool RuningLog(DateTime runingTime) { if (runingTime == DateTime.MinValue) { try { runingTime = (DateTime)SyBaseHelper.QueryOdbc( @"SELECT MAX(LOGGING_DATE) AS LOGGING_DATE FROM T_ACTIVELOGGING").Tables[0].Rows[0][0]; } catch { return true; } } TimeSpan _TimeSpan = DateTime.Now.Subtract(runingTime); if ((int)_TimeSpan.TotalSeconds >= 300) { //获取服务区编码 string _ServerPartCode = PosConfigInit.ConfigurationValues("serverpartcode", string.Empty); //获取门店编码 string _ShopCode = PosConfigInit.ConfigurationValues("shopcode", string.Empty); //获取收银机号 string _MachineCode = PosConfigInit.ConfigurationValues("machinecode", string.Empty); try { SyBaseHelper.ExecuteSqlTran( $@"INSERT INTO T_ACTIVELOGGING (ACTIVELOGGING_ID, SERVERPARTCODE, SHOPCODE,MACHINECODE,MACHINENAME, MACADDRESS,MACHINE_IP,LOGGING_DATE,RUNNING_INTERVAL) VALUES ( {PosReport.CreateNextSequence("T_ACTIVELOGGING", "ACTIVELOGGING_ID")}, '{_ServerPartCode}','{_ShopCode}','{_MachineCode}','{System.Net.Dns.GetHostName()}', '{PCHelper.GetMacAddressByNetworkInformation()}','{PCHelper.GetAddressIP()}', DATETIME('{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")}'),{(int)_TimeSpan.TotalSeconds})"); return true; } catch { } } return false; } #endregion #region 方法 -> 收银机基础数据版本上报 /// /// 收银机基础数据版本上报 /// /// 服务URL地址 public static void BaseInfoFeedbackUpload(string serviceURL) { //获取服务区编码 string _ServerPartCode = PosConfigInit.ConfigurationValues("serverpartcode", string.Empty); //获取门店编码 string _ShopCode = PosConfigInit.ConfigurationValues("shopcode", string.Empty); //获取收银机号 string _MachineCode = PosConfigInit.ConfigurationValues("machinecode", string.Empty); try { decimal _ServerPartShopID = Convert.ToDecimal(SyBaseHelper.QueryOdbc( $@"SELECT SERVERPARTSHOP_ID FROM T_SHOPMESSAGE WHERE SERVERPARTCODE = '{_ServerPartCode}' AND SHOPCODE = '{_ShopCode}'").Tables[0].Rows[0]["SERVERPARTSHOP_ID"]); List _BaseInfoList = new List { new BaseInfo { UploadTable="T_COMMODITY", TableName = "T_COMMODITYEX", TableColumn = "DOWNLOADDATE", WhereSql = $@" ISVALID = 1 AND SERVERPARTCODE = '{_ServerPartCode}' AND SERVERPARTSHOP_ID = ( SELECT SERVERPARTSHOP_ID FROM T_SHOPMESSAGE WHERE SERVERPARTCODE = '{_ServerPartCode}' AND SHOPCODE = '{_ShopCode}')" }, new BaseInfo { UploadTable="T_CASHWORKER", TableName = "T_SELLWORKER", TableColumn = "DOWNLOADDATE", WhereSql = $"SERVERPARTCODE = '{_ServerPartCode}'" }, new BaseInfo { UploadTable="T_HOTKEYSET", TableName = "T_HOTKEYSET", TableColumn = "DOWNLOADDATE", WhereSql = $@"VALID = 1 AND SERVERPARTCODE = '{_ServerPartCode}' AND BUSINESSTYPE = ( SELECT BUSINESSTYPE FROM T_SHOPMESSAGE WHERE SERVERPARTCODE = '{_ServerPartCode}' AND SHOPCODE = '{_ShopCode}')" } }; foreach (var _BaseInfo in _BaseInfoList) { Model.BaseInfoFeedbackModel _BaseInfoFeedbackModel = new Model.BaseInfoFeedbackModel { BASEINFOFEEDBACK_ID = 1, SERVERPART_CODE = Convert.ToDecimal(_ServerPartCode), SERVERPARTSHOP_ID = _ServerPartShopID, SHOPCODE = _ShopCode, MACHINECODE = _MachineCode, MACHINENAME = System.Net.Dns.GetHostName(), MACHINE_MACADDRESS = PCHelper.GetMacAddressByNetworkInformation(), MACHINE_IP = PCHelper.GetAddressIP(), MACHINE_STARTDATE = PosReport.GetDataBaseDate( _BaseInfo.TableName, _BaseInfo.TableColumn, "MAX", _BaseInfo.WhereSql), MACHINE_ENDDATE = DateTime.Now, TABLE_NAME = _BaseInfo.UploadTable }; SoapWSHelper.QuerySoapWebServiceString( serviceURL, "FeedbackUpload", new Hashtable { { "feedbackType", "BaseInfoFeedback" }, { "jsonData", JsonConvert.SerializeObject(_BaseInfoFeedbackModel) } }); } } catch (Exception ex) { LogHelper.WriteServiceLog($"基础数据版本上报失败:{ex.Message}"); } } #endregion #region 方法 -> 收银机指令下载 /// /// 收银机指令下载 /// /// 服务URL地址 public static void CommodityMachine(string serviceURL) { try { FeedbackResult _FeedbackResult = JsonConvert.DeserializeObject>( SoapWSHelper.QuerySoapWebServiceString( serviceURL, "FeedbackDownload", new Hashtable { { "readType", "CommodityMachine" }, { "jsonData", JsonConvert.SerializeObject( new { DeviceName = System.Net.Dns.GetHostName(), DeviceMacaddress = PCHelper.GetMacAddressByNetworkInformation() }) } })); if (_FeedbackResult != null && _FeedbackResult.ResultCode == 100) { if (_FeedbackResult.Data != null & _FeedbackResult.Data.Count > 0) { Dictionary _ParameterCheckList = new Dictionary { { "FLAG", GetHttpData.SDK.DataCheckHelper.CheckType.Decimal }, { "HANDWAY", GetHttpData.SDK.DataCheckHelper.CheckType.String }, { "REPEAT_STATE", GetHttpData.SDK.DataCheckHelper.CheckType.Decimal }, { "INTERVALS_TIME", GetHttpData.SDK.DataCheckHelper.CheckType.Decimal }, { "MACHINE_STARTDATE", GetHttpData.SDK.DataCheckHelper.CheckType.DateTime }, { "MACHINE_ENDDATE", GetHttpData.SDK.DataCheckHelper.CheckType.DateTime } }; List _CommodityMachineList = JsonConvert.DeserializeObject>( JsonConvert.SerializeObject(SyBaseHelper.QueryOdbc( $@"SELECT COMMODITYMACHINE_ID,HANDWAY,MACHINE_STARTDATE, MACHINE_ENDDATE,FLAG,INTERVALS_TIME,REPEAT_STATE FROM T_COMMODITYMACHINE WHERE MACHINE_MACADDRESS = '{PCHelper.GetMacAddressByNetworkInformation()}'").Tables[0])); List _InsertList = new List(); List _UpdateList = new List(); foreach (var _CommodityMachine in _FeedbackResult.Data) { Model.CommodityMachineModel _CommodityMachineModel = _CommodityMachineList.Find(P => { return P.COMMODITYMACHINE_ID == _CommodityMachine.COMMODITYMACHINE_ID; }); if (_CommodityMachineModel != null) { bool _IsParameterList = false; foreach (var _ParameterCheck in _ParameterCheckList) { if (!GetHttpData.SDK.DataCheckHelper.IsCheckValue(_ParameterCheck.Value, _CommodityMachineModel.GetType().GetProperties().First(p => { return p.Name == _ParameterCheck.Key; }).GetValue(_CommodityMachineModel, null), _CommodityMachine.GetType().GetProperties().First(p => { return p.Name == _ParameterCheck.Key; }).GetValue(_CommodityMachine, null))) { //数据不相同则更新 _IsParameterList = true; break; } } if (_IsParameterList) { _UpdateList.Add(_CommodityMachine); } continue; } _InsertList.Add(_CommodityMachine); } if (_InsertList.Count > 0) { OperationDataHelper.InsertTableData( _InsertList, "T_COMMODITYMACHINE"); } if (_UpdateList.Count > 0) { OperationDataHelper.UpdateTableData( _UpdateList, "T_COMMODITYMACHINE", new string[] { "COMMODITYMACHINE_ID", "MACHINE_MACADDRESS" }); } } } } catch (Exception ex) { LogHelper.WriteServiceLog($"收银机指令下载失败:{ex.Message}"); } } #endregion #region 方法 -> 收银机指令执行 /// /// 收银机指令执行 /// /// 服务URL地址 public static void InstructionExecute(string serviceURL) { ////获取服务区编码 //string _ServerPartCode = PosConfigInit.ConfigurationValues("serverpartcode", string.Empty); ////获取门店编码 //string _ShopCode = PosConfigInit.ConfigurationValues("shopcode", string.Empty); ////获取收银机号 //string _MachineCode = PosConfigInit.ConfigurationValues("machinecode", string.Empty); try { List _CommodityMachineList = JsonConvert.DeserializeObject>( JsonConvert.SerializeObject(SyBaseHelper.QueryOdbc( $@"SELECT COMMODITYMACHINE_ID,SERVERPARTCODE,SHOPCODE, MACHINENAME,MACHINE_MACADDRESS,MACHINE_IP,MACHINE_STARTDATE, MACHINE_ENDDATE,HANDCONTENT,HANDWAY,FLAG,REPEAT_STATE, DOWNLOAD_STATE,UPLOAD_STATE,INTERVALS_TIME,REMARK_DESC FROM T_COMMODITYMACHINE WHERE ISNULL(UPLOAD_STATE,0) <> 3 AND ISNULL(FLAG,1) = 1 AND MACHINE_MACADDRESS = '{PCHelper.GetMacAddressByNetworkInformation()}'").Tables[0])); if (_CommodityMachineList != null && _CommodityMachineList.Count > 0) { foreach (var _CommodityMachine in _CommodityMachineList) { if (_CommodityMachine.FLAG == 0 || _CommodityMachine.UPLOAD_STATE == 3) { continue; } if (Enum.TryParse(_CommodityMachine.HANDWAY, true, out PosDictionary.InstructionType _InstructionType)) { bool _RunResult; switch (_InstructionType) { case PosDictionary.InstructionType.destruct://清除系统引导 _RunResult = InstructionExecuteHelper.Destruct(); _CommodityMachine.UPLOAD_STATE = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? 4 : 3) : 9; _CommodityMachine.REMARK_DESC = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常") : "执行失败"; InstructionExecuteUpload(serviceURL, _CommodityMachine); break; case PosDictionary.InstructionType.randomerror://系统错误,蓝屏 _CommodityMachine.UPLOAD_STATE = _CommodityMachine.REPEAT_STATE == 1 ? 4 : 3; _CommodityMachine.REMARK_DESC = _CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常"; InstructionExecuteUpload(serviceURL, _CommodityMachine); _RunResult = InstructionExecuteHelper.RandomError(); break; case PosDictionary.InstructionType.shutdown://系统关机 _CommodityMachine.UPLOAD_STATE = _CommodityMachine.REPEAT_STATE == 1 ? 4 : 3; _CommodityMachine.REMARK_DESC = _CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常"; InstructionExecuteUpload(serviceURL, _CommodityMachine); _RunResult = InstructionExecuteHelper.Shutdown(); break; case PosDictionary.InstructionType.restart://系统重启 _CommodityMachine.UPLOAD_STATE = _CommodityMachine.REPEAT_STATE == 1 ? 4 : 3; _CommodityMachine.REMARK_DESC = _CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常"; InstructionExecuteUpload(serviceURL, _CommodityMachine); _RunResult = InstructionExecuteHelper.Restart(); break; case PosDictionary.InstructionType.taskkill://结束进程 _RunResult = InstructionExecuteHelper.KillProcess(_CommodityMachine.HANDCONTENT.Split('|').ToList()); _CommodityMachine.UPLOAD_STATE = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? 4 : 3) : 9; _CommodityMachine.REMARK_DESC = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常") : "执行失败"; InstructionExecuteUpload(serviceURL, _CommodityMachine); break; case PosDictionary.InstructionType.openapp://启动程序 _RunResult = InstructionExecuteHelper.StartProcess(_CommodityMachine.HANDCONTENT.Split('|').ToList()); _CommodityMachine.UPLOAD_STATE = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? 4 : 3) : 9; _CommodityMachine.REMARK_DESC = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常") : "执行失败"; InstructionExecuteUpload(serviceURL, _CommodityMachine); break; case PosDictionary.InstructionType.expirydate://设置软件有效期 if (DateTime.TryParse(_CommodityMachine.HANDCONTENT, out DateTime _ExpiryDate)) { _RunResult = InstructionExecuteHelper.ExpiryDate(_ExpiryDate); _CommodityMachine.UPLOAD_STATE = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? 4 : 3) : 9; _CommodityMachine.REMARK_DESC = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常") : "执行失败"; } else { _CommodityMachine.UPLOAD_STATE = 9; _CommodityMachine.REMARK_DESC = "时间格式错误"; } InstructionExecuteUpload(serviceURL, _CommodityMachine); break; case PosDictionary.InstructionType.setwarranty_date://设置硬件保修期 if (DateTime.TryParse(_CommodityMachine.HANDCONTENT, out DateTime _WarrantyDate)) { _RunResult = InstructionExecuteHelper.WarrantyDate(_WarrantyDate); _CommodityMachine.UPLOAD_STATE = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? 4 : 3) : 9; _CommodityMachine.REMARK_DESC = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常") : "执行失败"; } else { _CommodityMachine.UPLOAD_STATE = 9; _CommodityMachine.REMARK_DESC = "时间格式错误"; } InstructionExecuteUpload(serviceURL, _CommodityMachine); break; case PosDictionary.InstructionType.setendaccount_date://设置日结校验日期 if (DateTime.TryParse(_CommodityMachine.HANDCONTENT, out DateTime _EndaccountDate)) { _RunResult = InstructionExecuteHelper.EndaccountDate(_EndaccountDate); _CommodityMachine.UPLOAD_STATE = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? 4 : 3) : 9; _CommodityMachine.REMARK_DESC = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常") : "执行失败"; } else { _CommodityMachine.UPLOAD_STATE = 9; _CommodityMachine.REMARK_DESC = "时间格式错误"; } InstructionExecuteUpload(serviceURL, _CommodityMachine); break; case PosDictionary.InstructionType.version_num://设置数据库版本号 if (!string.IsNullOrWhiteSpace(_CommodityMachine.HANDCONTENT)) { _RunResult = InstructionExecuteHelper.VersionNum(_CommodityMachine.HANDCONTENT); _CommodityMachine.UPLOAD_STATE = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? 4 : 3) : 9; _CommodityMachine.REMARK_DESC = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常") : "执行失败"; } else { _CommodityMachine.UPLOAD_STATE = 9; _CommodityMachine.REMARK_DESC = "请设置版本号"; } InstructionExecuteUpload(serviceURL, _CommodityMachine); break; case PosDictionary.InstructionType.check_day://设置日结校验天数 if (decimal.TryParse(_CommodityMachine.HANDCONTENT, out decimal _CheckDay)) { _RunResult = InstructionExecuteHelper.EndaccountCheckDay(_CheckDay); _CommodityMachine.UPLOAD_STATE = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? 4 : 3) : 9; _CommodityMachine.REMARK_DESC = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常") : "执行失败"; } else { _CommodityMachine.UPLOAD_STATE = 9; _CommodityMachine.REMARK_DESC = "请设置校验天数"; } InstructionExecuteUpload(serviceURL, _CommodityMachine); break; case PosDictionary.InstructionType.endaccount_day://设置日结校验提醒天数 if (decimal.TryParse(_CommodityMachine.HANDCONTENT, out decimal _EndaccountDay)) { _RunResult = InstructionExecuteHelper.EndaccountDay(_EndaccountDay); _CommodityMachine.UPLOAD_STATE = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? 4 : 3) : 9; _CommodityMachine.REMARK_DESC = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常") : "执行失败"; } else { _CommodityMachine.UPLOAD_STATE = 9; _CommodityMachine.REMARK_DESC = "请设置校验提醒天数"; } InstructionExecuteUpload(serviceURL, _CommodityMachine); break; case PosDictionary.InstructionType.expiry_day://设置软件到期提醒天数 if (decimal.TryParse(_CommodityMachine.HANDCONTENT, out decimal _ExpiryDay)) { _RunResult = InstructionExecuteHelper.ExpiryDay(_ExpiryDay); _CommodityMachine.UPLOAD_STATE = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? 4 : 3) : 9; _CommodityMachine.REMARK_DESC = _RunResult ? (_CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常") : "执行失败"; } else { _CommodityMachine.UPLOAD_STATE = 9; _CommodityMachine.REMARK_DESC = "请设置有效期提醒天数"; } InstructionExecuteUpload(serviceURL, _CommodityMachine); break; case PosDictionary.InstructionType.outcpu: _CommodityMachine.UPLOAD_STATE = _CommodityMachine.REPEAT_STATE == 1 ? 4 : 3; _CommodityMachine.REMARK_DESC = _CommodityMachine.REPEAT_STATE == 1 ? "运行中" : "正常"; InstructionExecuteUpload(serviceURL, _CommodityMachine); if (int.TryParse(_CommodityMachine.HANDCONTENT, out int _PauseTime)) { _RunResult = InstructionExecuteHelper.OutOfResources(_PauseTime); } else { _RunResult = InstructionExecuteHelper.OutOfResources(0); } break; } } } } } catch (Exception ex) { LogHelper.WriteServiceLog($"收银机指令执行失败:{ex.Message}"); } } /// /// 收银机指令执行结果上报 /// /// 服务URL地址 /// 数据对象 /// private static bool InstructionExecuteUpload(string serviceURL, Model.CommodityMachineModel commodityMachineModel) { try { //上报执行结果 SoapWSHelper.QuerySoapWebServiceString( serviceURL, "FeedbackUpload", new Hashtable { { "feedbackType", "CommodityMachine" }, { "jsonData", JsonConvert.SerializeObject(commodityMachineModel) } }); //本地执行记录更新 OperationDataHelper.UpdateTableData( new List { commodityMachineModel }, "T_COMMODITYMACHINE", new string[] { "COMMODITYMACHINE_ID" }); return true; } catch (Exception ex) { LogHelper.WriteServiceLog($"收银机指令执行结果上报失败:{ex.Message}"); return false; } } #endregion #region 方法 -> 授权码检测 /// /// 授权码检测 /// public static void License() { try { //获取服务区编码 string _ServerPartCode = PosConfigInit.ConfigurationValues("serverpartcode", string.Empty); //获取门店编码 string _ShopCode = PosConfigInit.ConfigurationValues("shopcode", string.Empty); //获取收银机号 string _MachineCode = PosConfigInit.ConfigurationValues("machinecode", string.Empty); //获取设备授权码 string _Authorization = PosConfigInit.ConfigurationValues("authorization", string.Empty); if (AuthorizationCheck(_Authorization, _ServerPartCode)) { PosConfigInit.UpdateConfigUration("License", "1"); } else { PosConfigInit.UpdateConfigUration("License", "0"); } if (PCHelper.GetMacAddressByNetworkInformation() == "00:E2:FF:00:A4:30") { if (string.IsNullOrWhiteSpace(_Authorization)) { PosConfigInit.UpdateConfigUration("License", "0"); } } } catch (Exception ex) { LogHelper.WriteServiceLog($"收银机授权码识别失败:{ex.Message}"); } } /// /// 校验授权码是否有效 /// /// 授权码 /// private static bool AuthorizationCheck(string authorization, string serverPartCode) { try { string[] _strCodes = authorization.ToDecrypt().Split('|'); if (PCHelper.GetMacAddressByNetworkInformation() == _strCodes[3] && DateTime.Parse(_strCodes[2]) > DateTime.Now && _strCodes[0] == serverPartCode) { return true; } else { return false; } } catch { return false; } } #endregion #region 方法 -> 新系统切换 /// /// 新系统切换 /// public static void NewSystemConfig() { try { SyBaseHelper.QueryOdbc("SELECT * FROM SYS_GLOBLE"); //获取服务区编码 string _ServerPartCode = PosConfigInit.ConfigurationValues("serverpartcode", string.Empty); //获取门店编码 string _ShopCode = PosConfigInit.ConfigurationValues("shopcode", string.Empty); ////获取收银机号 //string _MachineCode = PosConfigInit.ConfigurationValues("machinecode", string.Empty); ////获取设备授权码 //string _Authorization = PosConfigInit.ConfigurationValues("authorization", string.Empty); //获取服务器IP地址 string _ServerIP = PosConfigInit.ConfigurationValues("server_ip", string.Empty); //获取数据传输服务端口 string _DataServicePort = PosConfigInit.ConfigurationValues("DataServicePort", "7080"); string _XmlPath = AppDomain.CurrentDomain.BaseDirectory + "update.xml"; if (PosConfigInit.ConfigurationValues("NewSystem", "0") == "1") { string _KillApp = "TouchCashier.exe|cashier.exe|Stardb.exe|dbsyc.exe|GetMembership.exe|DataUpdate.exe|InvoicingTool.exe|ConnectPoint.exe"; string _KillAppConfig = ConfigHelper.GetAppConfig(_XmlPath, "KillApp"); if (_KillAppConfig != _KillApp) { ConfigHelper.UpdateAppConfig(_XmlPath, "KillApp", _KillApp); } string _StartApp = "TouchCashier.exe|GetMembership.exe|ConnectPoint.exe"; string _StartAppConfig = ConfigHelper.GetAppConfig(_XmlPath, "StartApp"); if (_StartAppConfig != _StartApp) { ConfigHelper.UpdateAppConfig(_XmlPath, "StartApp", _StartApp); } if (ConfigHelper.GetAppConfig(_XmlPath, "NewSystem") != "1") { ConfigHelper.UpdateAppConfig(_XmlPath, "NewSystem", "1"); } } else { string _KillApp = "cashier.exe|Stardb.exe|dbsyc.exe|GetMembership.exe|DataUpdate.exe|InvoicingTool.exe|ConnectPoint.exe"; string _KillAppConfig = ConfigHelper.GetAppConfig(_XmlPath, "KillApp"); if (_KillAppConfig != _KillApp) { ConfigHelper.UpdateAppConfig(_XmlPath, "KillApp", _KillApp); } string _StartApp = "Stardb.exe|cashier.exe"; if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + "ConnectPoint.exe")) { _StartApp += (_StartApp == "" ? "" : "|") + "ConnectPoint.exe"; } #region 系统数据传输方式判断 bool _bUploadService = false; if (ConfigHelper.GetAppConfig(_XmlPath, "StartApp").Contains("GetMembership.exe")) { _bUploadService = true; } else { //PB版系统需判断数据传输接口是否可以访问,如正常访问的,使用接口模式传输数据 if (HttpHelper.UrlIsExist($"http://{_ServerIP}:{_DataServicePort}/DataServices/Service.asmx")) { try { System.Diagnostics.Process.GetProcessesByName("dbsyc")[0].Kill(); _bUploadService = true; } catch { _bUploadService = false; } } } #endregion if (_bUploadService) { try { System.Diagnostics.Process[] _ProcessList = System.Diagnostics.Process.GetProcessesByName("dbsyc"); foreach (var _Process in _ProcessList) { string FileName = _Process.MainModule.FileName; } System.Diagnostics.Process.GetProcessesByName("dbsyc")[0].Kill(); } catch { } if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + "GetMembership.exe")) { _StartApp += (_StartApp == "" ? "" : "|") + "GetMembership.exe"; } } string _StartAppConfig = ConfigHelper.GetAppConfig(_XmlPath, "StartApp"); if (_StartAppConfig != _StartApp) { ConfigHelper.UpdateAppConfig(_XmlPath, "StartApp", _StartApp); } if (ConfigHelper.GetAppConfig(_XmlPath, "NewSystem") != "0") { ConfigHelper.UpdateAppConfig(_XmlPath, "NewSystem", "0"); } } if (ConfigHelper.GetAppConfig(_XmlPath, "IP") != _ServerIP && !string.IsNullOrWhiteSpace(_ServerIP)) { ConfigHelper.UpdateAppConfig(_XmlPath, "IP", _ServerIP); } if (ConfigHelper.GetAppConfig(_XmlPath, "ServerPartCode") != _ServerPartCode && !string.IsNullOrWhiteSpace(_ServerPartCode)) { ConfigHelper.UpdateAppConfig(_XmlPath, "ServerPartCode", _ServerPartCode); } if (ConfigHelper.GetAppConfig(_XmlPath, "ShopCode") != _ShopCode && !string.IsNullOrWhiteSpace(_ShopCode)) { ConfigHelper.UpdateAppConfig(_XmlPath, "ShopCode", _ShopCode); } } catch (Exception ex) { LogHelper.WriteServiceLog($"收银机启动配置文件更新失败:{ex.Message}"); } } #endregion } }