using System; using System.Collections.Generic; using System.Linq; using System.Text; using Lib = ESSupport.Lib; using ESCom = ESSupport.Common; using System.Globalization; using System.Data; namespace ConnectPoint { public class BaseInfo { public string UploadTable { get; set; } public string TableName { get; set; } public string TableColumn { get; set; } public string WhereSql { get; set; } } public class PaymentInfo { public decimal TicketCount { get; set; } public decimal SellCount { get; set; } public decimal FactAmount { get; set; } public decimal CashPay { get; set; } public decimal MobilePay { get; set; } public decimal Alipay { get; set; } public decimal Wechat { get; set; } public decimal UnionPay { get; set; } } public class DataStatistics { public string ServerPartCode { get; set; } public string ShopCode { get; set; } public string MachineCode { get; set; } #region 方法 -> 获取有效商品总数 /// /// 获取有效商品总数 /// /// public decimal GetCommodityCount() { try { return (decimal)ESCom.DataTableHelper.ConvertTableDataType( Lib.SyBaseHelper.QueryOdbc($@"SELECT COUNT(1) AS COMMODITYCOUNT FROM T_COMMODITYEX A,T_SHOPMESSAGE B WHERE A.ISVALID = 1 AND A.SERVERPARTSHOP_ID = B.SERVERPARTSHOP_ID AND B.SERVERPARTCODE = '{ServerPartCode}' AND B.SHOPCODE = '{ShopCode}'" ).Tables[0]).Rows[0]["COMMODITYCOUNT"]; } catch { return 0; } } #endregion #region 方法 -> 获取当前工班收银员 /// /// 获取当前工班收银员 /// /// 是否新系统 /// public string GetPersonName(bool isNewSystem) { string _strSelectSql; if (isNewSystem) { _strSelectSql = $@"SELECT ISNULL(A.SELLWORKERNAME,A.SELLWORKERCODE) AS PERSONNAME FROM T_SELLWORKER A,T_PERSONSELL_NEW B WHERE A.SELLWORKERCODE = B.SELLWORKER_CODE AND A.SERVERPARTCODE = B.SERVERPARTCODE AND B.SERVERPARTCODE = '{ServerPartCode}' AND B.SHOPCODE = '{ShopCode}' AND B.MACHINECODE = '{MachineCode}' AND B.ENDDATE IS NULL"; } else { _strSelectSql = $@"SELECT ISNULL(A.SELLWORKERNAME,A.SELLWORKERCODE) AS PERSONNAME FROM T_SELLWORKER A,T_PERSONSELL B WHERE A.SELLWORKERCODE = B.CASHWORKER_CODE AND A.SERVERPARTCODE = B.SERVERPARTCODE AND B.SERVERPARTCODE = '{ServerPartCode}' AND B.SHOPCODE = '{ShopCode}' AND B.MACHINECODE = '{MachineCode}' AND B.ENDDATE IS NULL"; } try { DataTable _PersonTable = Lib.SyBaseHelper.QueryOdbc(_strSelectSql).Tables[0]; if (_PersonTable.Rows.Count > 0) { return _PersonTable.Rows[0]["PERSONNAME"].ToString(); } else { return "未登录工班"; } } catch (Exception ex) { if (ServerPartCode == "888888") { try { Lib.LogHelper.WriteServiceLog("获取当前工班收银员:" + ex.Message); } catch { } } return string.Empty; } } #endregion #region 方法 -> 获取销售情况 /// /// 获取销售情况 /// /// 是否新系统 /// 输出:客单数 /// 输出:销售数量 /// 输出:销售金额 /// 输出:现金金额 /// 输出:支付宝金额 /// 输出:微信支付金额 /// public PaymentInfo GetSellStatistics(bool isNewSystem) { PaymentInfo _PaymentInfo = new PaymentInfo(); string _strSelectSql; if (isNewSystem) { _strSelectSql = $@"SELECT COUNT(DISTINCT(SELLMASTER_CODE)) AS ORDERCOUNT, ISNULL(SUM(SELLMASTER_COUNT),0) AS SELLCOUNT, ISNULL(SUM(SELLMASTER_AMOUNT),0) AS FACTAMOUNT, ISNULL(SUM(CASHPAY),0) AS CASHPAY, ISNULL(SUM(IF PAYMENT_TYPE = 'ALIPAY' THEN MOBILEPAY END IF),0) AS ALIPAY, ISNULL(SUM(IF PAYMENT_TYPE = 'WECHATPAY' THEN MOBILEPAY END IF),0) AS WECHAT, ISNULL(SUM(IF PAYMENT_TYPE = 'UNIONPAY' THEN MOBILEPAY END IF),0) AS UNIONPAY FROM T_SELLMASTER WHERE SELLMASTER_DATE BETWEEN TODAY() AND NOW() AND SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}'"; } else { _strSelectSql = $@"SELECT COUNT(DISTINCT(SELLDATA_DATE)) AS ORDERCOUNT, ISNULL(SUM(SELLCOUNT),0) AS SELLCOUNT, ISNULL(SUM(FACTAMOUNT),0) AS FACTAMOUNT, ISNULL(SUM(CASH),0) AS CASHPAY,ISNULL(SUM(OTHERPAY),0) AS ALIPAY, ISNULL(SUM(TICKETBILL),0) AS WECHAT,0 AS UNIONPAY FROM T_SELLDATA WHERE SELLDATA_DATE BETWEEN TODAY() AND NOW() AND SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}'"; } try { DataTable _DataTable = ESCom.DataTableHelper.ConvertTableDataType( Lib.SyBaseHelper.QueryOdbc(_strSelectSql).Tables[0]); _PaymentInfo.TicketCount = (decimal)_DataTable.Rows[0]["ORDERCOUNT"]; _PaymentInfo.SellCount = (decimal)_DataTable.Rows[0]["SELLCOUNT"]; _PaymentInfo.FactAmount = (decimal)_DataTable.Rows[0]["FACTAMOUNT"]; _PaymentInfo.CashPay = (decimal)_DataTable.Rows[0]["CASHPAY"]; _PaymentInfo.Alipay = (decimal)_DataTable.Rows[0]["ALIPAY"]; _PaymentInfo.Wechat = (decimal)_DataTable.Rows[0]["WECHAT"]; _PaymentInfo.UnionPay = (decimal)_DataTable.Rows[0]["UNIONPAY"]; _PaymentInfo.MobilePay = _PaymentInfo.Alipay + _PaymentInfo.Wechat + _PaymentInfo.UnionPay; } catch (Exception ex) { _PaymentInfo.TicketCount = 0; _PaymentInfo.SellCount = 0; _PaymentInfo.FactAmount = 0; _PaymentInfo.CashPay = 0; _PaymentInfo.Alipay = 0; _PaymentInfo.Wechat = 0; _PaymentInfo.UnionPay = 0; _PaymentInfo.MobilePay = 0; try { Lib.LogHelper.WriteServiceLog("获取今日交易统计数据失败:" + ex.Message); } catch { } } return _PaymentInfo; } #endregion #region 方法 -> 获取最后一笔交易时间 /// /// 获取最后一笔交易时间 /// /// 是否新系统 /// public string GetLastTrade(bool isNewSystem) { string _strSelectSql; if (isNewSystem) { _strSelectSql = $@"SELECT MAX(SELLMASTER_DATE) FROM T_SELLMASTER WHERE SELLMASTER_DATE < NOW() AND SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}'"; } else { _strSelectSql = $@"SELECT MAX(SELLDATA_DATE) FROM T_SELLDATA WHERE SELLDATA_DATE < NOW() AND SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}'"; } try { return ((DateTime)Lib.SyBaseHelper.QueryOdbc(_strSelectSql).Tables[0].Rows[0][0] ).ToString("yyyy/MM/dd", DateTimeFormatInfo.InvariantInfo); } catch (Exception ex) { try { Lib.LogHelper.WriteServiceLog("获取最后一笔交易时间失败:" + ex.Message); } catch { } return string.Empty; } } #endregion #region 方法 -> 获取今日最近一笔交易详情 /// /// 获取今日最近一笔交易详情 /// /// 是否新系统 /// public string GetLastSellData(bool isNewSystem) { //销售日期,销售商品,销售金额 string _strSellDate = ""; string _strCommodity = ""; decimal _decFactAmount = 0; string _strSellDetail = ""; string _strSelectSql; if (isNewSystem) { _strSelectSql = @"SELECT B.SELLMASTER_DATE AS SELLDATA_DATE, B.SELLMASTER_AMOUNT AS FACTAMOUNT, A.COMMODITY_CODE AS COMMODITY_CODE, A.SELLDETAILS_COUNT AS SELLCOUNT, A.SELLDETAILS_PRICE AS SELLPRICE FROM T_SELLDETAILS A,T_SELLMASTER B WHERE A.SELLMASTER_CODE = B.SELLMASTER_CODE AND B.SELLMASTER_DATE = (SELECT MAX(SELLMASTER_DATE) FROM T_SELLMASTER WHERE SELLMASTER_DATE BETWEEN TODAY() AND NOW())"; } else { _strSelectSql = @"SELECT SELLDATA_DATE,COMMODITY_CODE, FACTAMOUNT,SELLCOUNT,SELLPRICE FROM T_SELLDATA WHERE SELLDATA_DATE = (SELECT MAX(SELLDATA_DATE) FROM DBA.T_SELLDATA WHERE SELLDATA_DATE BETWEEN TODAY() AND NOW())"; } try { using (DataTable _DataTable = ESCom.DataTableHelper.ConvertTableDataType( Lib.SyBaseHelper.QueryOdbc(_strSelectSql).Tables[0])) { if (_DataTable.Rows.Count > 0) { //销售时间 _strSellDate = _DataTable.Rows[0]["SELLDATA_DATE"].ToString(); //销售金额 if (isNewSystem) { _decFactAmount = (decimal)_DataTable.Rows[0]["FACTAMOUNT"]; } else { _decFactAmount = (decimal)_DataTable.Compute("SUM(FACTAMOUNT)", ""); } //销售明细 for (int i = 0; i < _DataTable.Rows.Count; i++) { _strCommodity += (_strCommodity == "" ? "" : ",") + _DataTable.Rows[i]["COMMODITY_CODE"].ToString(); _strSellDetail += (_strSellDetail == "" ? "(" : ",(") + ((decimal)_DataTable.Rows[i]["SELLCOUNT"]).ToString("F2") + "*" + ((decimal)_DataTable.Rows[i]["SELLPRICE"]).ToString("F2") + ")"; } return _strSellDate + "|" + _strCommodity + "|" + _decFactAmount.ToString("F2") + "|" + _strSellDetail; } else { return string.Empty; } } } catch (Exception ex) { try { Lib.LogHelper.WriteServiceLog("获取最后一笔交易详情失败:" + ex.Message); } catch { } return string.Empty; } } #endregion #region 方法 -> 获取本地最新基本配置信息 /// /// 获取本地最新基本配置信息 /// /// public string GetPosConfig() { try { string _PosConfig = string.Empty; DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc( @"SELECT CONFIGURATION_NAME,CONFIGURATION_VALUES FROM DBA.T_CONFIGURATION WHERE UPPER(CONFIGURATION_NAME) IN ('SERVERPARTCODE','SERVERPARTNAME','SHOPCODE','MACHINECODE', 'MACHINENAME','SERVER_IP','SOFTWARENAME','SERVICE_PORT','INPUT_MODE', 'COMMODITYSALEURL','ENDACCOUNTURL','EXPIRYDATE','UPDATEDATE')").Tables[0]; if (_DataTable.Rows.Count > 0) { foreach (DataRow _Row in _DataTable.Rows) { if (_Row["CONFIGURATION_NAME"].ToString().ToUpper() != "EXPIRYDATE") { _PosConfig += $"{(_PosConfig == "" ? "" : "|")}{_Row["CONFIGURATION_NAME"].ToString()}:{_Row["CONFIGURATION_VALUES"].ToString()}"; } else { _PosConfig += $"{(_PosConfig == "" ? "" : "|")}软件有效期:{_Row["CONFIGURATION_VALUES"].ToString()}"; } } string _UpdatePort = ESSupport.Lib.ConfigHelper.GetAppConfig(AppDomain.CurrentDomain.BaseDirectory + "\\Update.xml", "Port"); if (string.IsNullOrWhiteSpace(_UpdatePort)) { _UpdatePort = "11000"; } _PosConfig += $"{(_PosConfig == "" ? "" : "|")}更新服务端口:{_UpdatePort}"; } return _PosConfig; } catch (Exception ex) { try { Lib.LogHelper.WriteServiceLog("获取基础参数配置信息失败:" + ex.Message); } catch { } return string.Empty; } } #endregion #region 方法 -> 获取正在进行的促销 /// /// 获取正在进行的促销 /// /// public string GetSalesPromote() { try { return Lib.SyBaseHelper.QueryOdbc( $@"SELECT LIST(DISTINCT A.PROMOTION_ID ORDER BY A.PROMOTION_ID) AS PROMOTION_ID FROM T_SALESPROMOTE A WHERE A.SERVERPARTCODE = '{ServerPartCode}' AND A.SHOPCODE = '{ShopCode}' AND A.SALESPROMOTE_ENDDATE >= NOW() AND A.SALESPROMOTE_STARTDATE <= NOW() AND A.FLAG = 1" ).Tables[0].Rows[0]["PROMOTION_ID"].ToString(); } catch (Exception ex) { try { Lib.LogHelper.WriteServiceLog("获取进行中促销信息失败:" + ex.Message); } catch { } return string.Empty; } } #endregion #region 方法 -> 获取首末笔销售时间 /// /// 获取首末笔销售时间 /// /// 起始时间 /// 结束时间 /// 读取类型:MAX、MIN /// /// private string SelldataDate(DateTime startDate, DateTime endDate, string maxmin, bool isNewSystem) { string selldata_date = ""; string _SelectSQL; if (isNewSystem) { _SelectSQL = $@"SELECT {maxmin}(SELLMASTER_DATE) FROM T_SELLMASTER WHERE SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}' AND SELLMASTER_DATE BETWEEN DATETIME('{startDate.ToString("yyyy/MM/dd HH:mm:ss")}') AND DATETIME('{endDate.ToString("yyyy/MM/dd HH:mm:ss")}')"; } else { _SelectSQL = $@"SELECT {maxmin}(SELLDATA_DATE) FROM T_SELLDATA WHERE SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}' AND SELLDATA_DATE BETWEEN DATETIME('{startDate.ToString("yyyy/MM/dd HH:mm:ss")}') AND DATETIME('{endDate.ToString("yyyy/MM/dd HH:mm:ss")}')"; } try { DataTable _selldata = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSQL).Tables[0]; if (_selldata.Rows.Count > 0) { selldata_date = _selldata.Rows[0][0].ToString(); } } catch (Exception ex) { try { Lib.LogHelper.WriteServiceLog("获取首末笔销售时间:" + ex.Message); } catch { } } return selldata_date; } #endregion #region 方法 -> 获取首末笔流水信息 /// /// 获取首末笔流水信息 /// /// /// /// /// private string TicketInfo(DateTime startDate, DateTime endDate, string maxmin, bool isNewSystem) { string _SelectSQL; string ticket_info = ""; //int maxid = 0; // 单品数:goods_count,客单数:ticket_count,销售数:sell_count,销售额:fact_sum,单笔优惠:offprice,单笔金额:fact_amount //decimal goods_count = 0, ticket_count = 0, sell_count = 0, fact_sum = 0, offprice = 0, fact_amount = 0; if (isNewSystem) { _SelectSQL = $@"SELECT A.SELLMASTER_DATE AS SELLDATA_DATE, A.TICKET_CODE AS TICKETCODE,A.SELLWORKER_NAME AS SELLWORKERNAME, B.COMMODITY_CODE AS COMMODITY_CODE,B.SELLDETAILS_PRICE AS SELLPRICE, SUM(B.SELLDETAILS_COUNT) AS SELLCOUNT,SUM(B.SELLDETAILS_OFFPRICE) AS OFFPRICE, SUM(B.SELLDETAILS_AMOUNT) AS FACTAMOUNT FROM T_SELLMASTER A,T_SELLDETAILS B WHERE A.SELLMASTER_CODE = B.SELLMASTER_CODE AND A.SELLMASTER_DATE = ( SELECT {maxmin}(SELLMASTER_DATE) FROM T_SELLMASTER WHERE SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}' AND SELLMASTER_DATE BETWEEN DATETIME('{startDate.ToString("yyyy/MM/dd HH:mm:ss")}') AND DATETIME('{endDate.ToString("yyyy/MM/dd HH:mm:ss")}')) GROUP BY A.SELLMASTER_DATE,A.TICKET_CODE,A.SELLWORKER_NAME, B.COMMODITY_CODE,B.SELLDETAILS_PRICE"; } else { _SelectSQL = $@"SELECT A.SELLDATA_DATE,A.TICKETCODE,B.SELLWORKERNAME, A.COMMODITY_CODE,A.SELLPRICE,SUM(A.SELLCOUNT) AS SELLCOUNT, SUM(A.OFFPRICE) AS OFFPRICE,SUM(A.FACTAMOUNT) AS FACTAMOUNT FROM T_SELLDATA A,T_SELLWORKER B WHERE B.SELLWORKERCODE=A.WORKERCODE AND B.SERVERPARTCODE = A.SERVERPARTCODE AND A.SELLDATA_DATE = ( SELECT {maxmin}(SELLDATA_DATE) FROM T_SELLDATA WHERE SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}' AND SELLDATA_DATE BETWEEN DATETIME('{startDate.ToString("yyyy/MM/dd HH:mm:ss")}') AND DATETIME('{endDate.ToString("yyyy/MM/dd HH:mm:ss")}')) GROUP BY A.SELLDATA_DATE,A.TICKETCODE,B.SELLWORKERNAME, A.COMMODITY_CODE,A.SELLPRICE"; } try { DataTable _SelldataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSQL).Tables[0]; if (_SelldataTable.Rows.Count > 0) { string commodity = ""; string SellDetail = ""; decimal offprice = 0; decimal fact_amount = 0; foreach (DataRow _DataRow in _SelldataTable.Rows) { commodity += $"{(commodity == "" ? "" : ",")}{_DataRow["COMMODITY_CODE"].ToString()}"; SellDetail += $"{(SellDetail == "" ? "" : ",")}({_DataRow["SELLCOUNT"].ToString()}*{_DataRow["SELLPRICE"].ToString()})"; offprice += Convert.ToDecimal(_DataRow["OFFPRICE"]); fact_amount += Convert.ToDecimal(_DataRow["FACTAMOUNT"]); } ticket_info = $"{Convert.ToDateTime(_SelldataTable.Rows[0]["SELLDATA_DATE"]).ToString("yyyy/MM/dd HH:mm:ss")}|" + $"{_SelldataTable.Rows[0]["TICKETCODE"].ToString()}|{_SelldataTable.Rows[0]["SELLWORKERNAME"].ToString()}|" + $"{commodity}|{SellDetail}|{offprice.ToString("F2")}|{fact_amount.ToString("F2")}"; } } catch (Exception ex) { try { Lib.LogHelper.WriteServiceLog("获取首末笔流水信息:" + ex.Message); } catch { } } return ticket_info; } #endregion #region 方法 -> 营业信息采集 public void BusinessTime(bool isNewSystem) { string _SelectSQL; string ticket_startinfo, ticket_endinfo; string _startdate, _enddate = "";//第二账期时间 // 单品数:goods_count,客单数:ticket_count,销售数:sell_count,销售额:fact_sum,单笔优惠:offprice,单笔金额:fact_amount //decimal goods_count = 0, ticket_count = 0, sell_count = 0, fact_sum = 0, offprice = 0, fact_amount = 0; try { if (isNewSystem) { _SelectSQL = $@"SELECT STARTDATE AS ENDACCOUNT_STARTDATE, ENDDATE AS ENDACCOUNT_DATE FROM T_ENDACCOUNT_NEW WHERE ENDACCOUNT_CODE = ( SELECT TOP 1 ENDACCOUNT_CODE FROM T_ENDACCOUNT_NEW WHERE ENDDATE IS NOT NULL AND ENDDATE < NOW() AND SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}' AND ENDACCOUNT_TYPE = 1 ORDER BY ENDACCOUNT_ID DESC)"; } else { _SelectSQL = $@"SELECT ENDACCOUNT_STARTDATE,ENDACCOUNT_DATE FROM T_ENDACCOUNT WHERE ENDACCOUNT_DATE = ( SELECT MAX(ENDACCOUNT_DATE) FROM T_ENDACCOUNT WHERE ENDACCOUNT_DATE IS NOT NULL AND ENDACCOUNT_DATE < NOW() AND SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}' AND FLAG = 1 ) ORDER BY ENDACCOUNT_ID DESC"; } DataTable _EndaccountTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSQL).Tables[0]; if (_EndaccountTable.Rows.Count > 0) { DateTime _StartDate = (DateTime)_EndaccountTable.Rows[0]["ENDACCOUNT_STARTDATE"]; DateTime _EndDate = (DateTime)_EndaccountTable.Rows[0]["ENDACCOUNT_DATE"]; try { if (isNewSystem) { _SelectSQL = $@"SELECT STARTDATE AS ENDACCOUNT_STARTDATE, ENDDATE AS ENDACCOUNT_DATE FROM T_ENDACCOUNT_NEW WHERE ENDACCOUNT_CODE = ( SELECT TOP 1 ENDACCOUNT_CODE FROM T_ENDACCOUNT_NEW WHERE ENDDATE IS NOT NULL AND ENDDATE < DATETIME('{_EndDate.ToString("yyyy/MM/dd HH:mm:ss")}') AND SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}' AND ENDACCOUNT_TYPE = 1 ORDER BY ENDACCOUNT_ID DESC)"; } else { _SelectSQL = $@"SELECT ENDACCOUNT_STARTDATE,ENDACCOUNT_DATE FROM T_ENDACCOUNT WHERE ENDACCOUNT_DATE = ( SELECT MAX(ENDACCOUNT_DATE) FROM T_ENDACCOUNT WHERE ENDACCOUNT_DATE IS NOT NULL AND ENDACCOUNT_DATE < DATETIME('{_EndDate.ToString("yyyy/MM/dd HH:mm:ss")}') AND SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}' AND FLAG = 1 ) ORDER BY ENDACCOUNT_ID DESC"; } DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSQL).Tables[0]; _startdate = _DataTable.Rows[0]["ENDACCOUNT_STARTDATE"].ToString(); _enddate = _DataTable.Rows[0]["ENDACCOUNT_DATE"].ToString(); } catch { } decimal _interval; try { _interval = decimal.Parse(ESSupport.Pos.PosConfigInit.ConfigurationValues("shutdown_interval", "30")) * 60; } catch { _interval = 1800; } string _shutdown = "";// GetLogDateTime("System", 6006, DateTime.Parse(enddate), true); if (_shutdown == "") { _shutdown = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT MAX(LOGGING_DATE) FROM T_ACTIVELOGGING WHERE LOGGING_DATE > DATETIME('{_EndDate}') AND LOGGING_DATE < ( SELECT MIN(LOGGING_DATE) FROM T_ACTIVELOGGING WHERE LOGGING_DATE > DATETIME('{_EndDate}') AND RUNNING_INTERVAL > {_interval})").Tables[0].Rows[0][0].ToString(); } string _shutup = "";// GetLogDateTime("System", 6005, DateTime.Parse(startdate), false); if (_shutup == "") { _shutup = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT MAX(LOGGING_DATE) FROM T_ACTIVELOGGING WHERE RUNNING_INTERVAL > {_interval} AND LOGGING_DATE < DATETIME('{_StartDate.ToString("yyyy/MM/dd HH:mm:ss")}') {(_enddate == "" ? "" : $" AND LOGGING_DATE > DATETIME('{_enddate}')")}").Tables[0].Rows[0][0].ToString(); } string _duration = ""; TimeSpan ts = _EndDate.Subtract(_StartDate); string _ts = Convert.ToDecimal(ts.TotalSeconds).ToString("F0"); _duration = ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT SUM(RUNNING_INTERVAL) FROM T_ACTIVELOGGING WHERE RUNNING_INTERVAL > {_interval} AND LOGGING_DATE BETWEEN DATETIME('{_StartDate.ToString("yyyy/MM/dd HH:mm:ss")}') AND DATETIME('{_EndDate.ToString("yyyy/MM/dd HH:mm:ss")}')").Tables[0].Rows[0][0].ToString(); if (_duration != "") { _duration = ((Convert.ToDecimal(_ts) - (Convert.ToDecimal(_duration))) / 3600).ToString("F2"); } else { _duration = (Convert.ToDecimal(_ts) / 3600).ToString("F2"); } string sellstartdate = SelldataDate(_StartDate, _EndDate, "MIN", isNewSystem); string sellenddate = SelldataDate(_StartDate, _EndDate, "MAX", isNewSystem); ticket_startinfo = TicketInfo(_StartDate, _EndDate, "MIN", isNewSystem); ticket_endinfo = TicketInfo(_StartDate, _EndDate, "MAX", isNewSystem); if (Convert.ToInt32(ESSupport.Lib.SyBaseHelper.QueryOdbc( $@"SELECT COUNT(1) FROM T_BUSINESSTIME WHERE ENDACCOUNT_STARTDATE = DATETIME('{_StartDate}') AND ENDACCOUNT_DATE = DATETIME('{_EndDate}') AND SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}'").Tables[0].Rows[0][0]) > 0) { string strupdate = "UPDATE T_BUSINESSTIME SET BUSINESSTIME_STATE = 0 "; if (_shutup != "") { strupdate += $",BUSINESS_OPENTIME = DATETIME('{_shutup}')"; } if (_shutdown != "") { strupdate += $",BUSINESS_CLOSETIME = DATETIME('{_shutdown}')"; } if (_duration != "") { strupdate += $",BUSINESS_TIME = {_duration}"; } //else //{ // TimeSpan ts = DateTime.Now.Subtract(Convert.ToDateTime(_DataTable.Rows[0]["business_closetime"])); // if (ts.TotalSeconds < 300) // { // strupdate += ",business_closetime = datetime('" + _shutdown + "')"; // } //} if (sellstartdate != "") { strupdate += $",BUSINESS_STARTTIME = DATETIME('{sellstartdate}'),BUSINESS_STARTINFO = '{ticket_startinfo}'"; } if (sellenddate != "") { strupdate += $",BUSINESS_ENDTIME = DATETIME('{sellenddate}'),BUSINESS_ENDINFO = '{ticket_endinfo}'"; } strupdate += $@" WHERE ENDACCOUNT_STARTDATE = DATETIME('{_StartDate.ToString("yyyy/MM/dd HH:mm:ss")}') AND ENDACCOUNT_DATE = DATETIME('{_EndDate.ToString("yyyy/MM/dd HH:mm:ss")}') AND SERVERPARTCODE = '{ServerPartCode}' and shopcode = '{ShopCode}' and machinecode = '{MachineCode}'"; try { Lib.SyBaseHelper.ExecuteSqlTran(strupdate); } catch (Exception ex) { try { Lib.LogHelper.WriteServiceLog("营业信息更新:" + ex.Message); } catch { } } } else { try { ESSupport.Lib.SyBaseHelper.ExecuteSqlTran( new List { $@"INSERT INTO T_BUSINESSTIME (BUSINESSTIME_ID, SERVERPARTCODE,SHOPCODE,MACHINECODE, ENDACCOUNT_STARTDATE,ENDACCOUNT_DATE, BUSINESS_OPENTIME,BUSINESS_CLOSETIME, BUSINESS_STARTTIME,BUSINESS_ENDTIME, BUSINESS_STARTINFO,BUSINESS_ENDINFO, BUSINESSTIME_STATE,BUSINESS_TIME) VALUES ({ESSupport.Pos.PosReport.CreateNextSequence( "T_BUSINESSTIME","BUSINESSTIME_ID")}, '{ServerPartCode}','{ShopCode}', '{MachineCode}','{_StartDate}','{_EndDate}', {(_shutup == "" ? "null" : "'" + _shutup + "'")}, {(_shutdown == "" ? "null" : $"'{_shutdown}'")}, {(sellstartdate == "" ? "null" : $"'{sellstartdate}'")}, {(sellenddate == "" ? "null" : $"'{sellenddate}'")}, {(ticket_startinfo == "" ? "null" : $"'{ticket_startinfo}'")}, {(ticket_endinfo == "" ? "null" : $"'{ticket_endinfo}'")},0, {(_duration == "" ? "null" : _duration)})", $@"UPDATE T_BUSINESSTIME SET BUSINESSTIME_STATE = 2 WHERE SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}' AND ENDACCOUNT_STARTDATE <> DATETIME('{_StartDate.ToString("yyyy/MM/dd HH:mm:ss")}') AND ENDACCOUNT_DATE <> DATETIME('{_EndDate.ToString("yyyy/MM/dd HH:mm:ss")}')" }); } catch (Exception ex) { try { Lib.LogHelper.WriteServiceLog("营业信息采集:" + ex.Message); } catch { } } } } } catch (Exception ex) { try { Lib.LogHelper.WriteServiceLog("BusinessTime:" + ex.Message); } catch { } } } #endregion #region 方法 -> 获取实时交易统计结果 /// /// 获取实时交易统计结果 /// /// 是否新系统 /// public Model.DataCollectionModel GetDataCollection(bool isNewSystem) { DateTime _DataCollectionTime = DateTime.Now; string _SelectSQL; if (isNewSystem) { _SelectSQL = $@"SELECT COUNT(DISTINCT (A.COMMODITY_CODE)) AS GOODS_COUNT, COUNT(DISTINCT(A.SELLMASTER_CODE)) AS TICKET_COUNT, ISNULL(SUM(A.SELLDETAILS_COUNT), 0) AS SELL_COUNT, ISNULL(SUM(A.SELLDETAILS_AMOUNT), 0) AS FACT_SUM FROM T_SELLDETAILS A, T_SELLMASTER B WHERE A.SELLMASTER_CODE = B.SELLMASTER_CODE AND B.SERVERPARTCODE = '{ServerPartCode}' AND B.SHOPCODE = '{ShopCode}' AND B.MACHINECODE = '{MachineCode}' AND B.SELLMASTER_DATE BETWEEN DATETIME('{_DataCollectionTime.AddMinutes(-10).ToString("yyyy/MM/dd HH:mm")}') AND DATETIME('{_DataCollectionTime.ToString("yyyy/MM/dd HH:mm")}')"; } else { _SelectSQL = $@"SELECT COUNT(DISTINCT(COMMODITY_CODE)) AS GOODS_COUNT, COUNT(DISTINCT(TICKETCODE)) AS TICKET_COUNT, ISNULL(SUM(SELLCOUNT),0) AS SELL_COUNT, ISNULL(SUM(FACTAMOUNT),0) AS FACT_SUM FROM T_SELLDATA WHERE SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}' AND SELLDATA_DATE BETWEEN DATETIME('{_DataCollectionTime.AddMinutes(-10).ToString("yyyy/MM/dd HH:mm")}') AND DATETIME('{_DataCollectionTime.ToString("yyyy/MM/dd HH:mm")}')"; } try { DataTable _CountTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSQL).Tables[0]; //销售品种数 decimal _SaleCount = Convert.ToDecimal(_CountTable.Rows[0]["GOODS_COUNT"].ToString()); //客单数 decimal _TicketCount = Convert.ToDecimal(_CountTable.Rows[0]["TICKET_COUNT"].ToString()); //销售数 decimal _SellCount = Convert.ToDecimal(_CountTable.Rows[0]["SELL_COUNT"].ToString()); //销售额 decimal _FactSum = Convert.ToDecimal(_CountTable.Rows[0]["FACT_SUM"].ToString()); if (_SaleCount > 0) { if (isNewSystem) { _SelectSQL = $@"SELECT B.SELLMASTER_DATE AS SELLDATA_DATE, B.TICKET_CODE AS TICKETCODE,B.SELLWORKER_NAME AS SELLWORKERNAME, A.COMMODITY_CODE,A.SELLDETAILS_PRICE AS SELLPRICE, SUM(A.SELLDETAILS_COUNT) AS SELLCOUNT, SUM(A.SELLDETAILS_OFFPRICE) AS OFFPRICE, SUM(A.SELLDETAILS_AMOUNT) AS FACTAMOUNT FROM T_SELLDETAILS A,T_SELLMASTER B WHERE A.SELLMASTER_CODE = B.SELLMASTER_CODE AND B.SELLMASTER_CODE = ( SELECT TOP 1 SELLMASTER_CODE FROM T_SELLMASTER WHERE SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}' AND SELLMASTER_DATE BETWEEN TODAY() AND NOW() ORDER BY ISNULL(SELLMASTER_AMOUNT,0) DESC,SELLMASTER_DATE DESC) GROUP BY B.SELLMASTER_DATE,B.TICKET_CODE,B.SELLWORKER_NAME, A.COMMODITY_CODE,A.SELLDETAILS_PRICE"; } else { _SelectSQL = $@"SELECT A.SELLDATA_DATE,A.TICKETCODE, B.SELLWORKERNAME,A.COMMODITY_CODE, A.SELLPRICE,SUM(A.SELLCOUNT) AS SELLCOUNT, SUM(A.OFFPRICE) AS OFFPRICE,SUM(A.FACTAMOUNT) AS FACTAMOUNT FROM T_SELLDATA A,T_SELLWORKER B WHERE B.SELLWORKERCODE = A.WORKERCODE AND B.SERVERPARTCODE=A.SERVERPARTCODE AND A.SELLDATA_DATE = ( SELECT TOP 1 SELLDATA_DATE FROM T_SELLDATA WHERE SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}' AND SELLDATA_DATE BETWEEN TODAY() AND NOW() GROUP BY SELLDATA_DATE ORDER BY ISNULL(SUM(FACTAMOUNT),0) DESC,SELLDATA_DATE DESC) GROUP BY A.SELLDATA_DATE,A.TICKETCODE, B.SELLWORKERNAME,A.COMMODITY_CODE,A.SELLPRICE"; } DataTable _SelldataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSQL).Tables[0]; if (_SelldataTable.Rows.Count > 0) { string _CommodityCode = ""; string _SellDetail = ""; decimal _SellOffPrice = 0; decimal _FactAmount = 0; foreach (DataRow _DataRow in _SelldataTable.Rows) { _CommodityCode += $"{(_CommodityCode == "" ? "" : ",")}{_DataRow["COMMODITY_CODE"].ToString()}"; _SellDetail += $"{(_SellDetail == "" ? "" : ",")}({_DataRow["SELLCOUNT"].ToString()}*{_DataRow["SELLPRICE"].ToString()})"; _SellOffPrice += Convert.ToDecimal(_DataRow["OFFPRICE"]); _FactAmount += Convert.ToDecimal(_DataRow["FACTAMOUNT"]); } string _TicketInfo = $"{((DateTime)_SelldataTable.Rows[0]["SELLDATA_DATE"]).ToString("yyyy/MM/dd HH:mm:ss")}|" + $"{_SelldataTable.Rows[0]["TICKETCODE"].ToString()}|" + $"{_SelldataTable.Rows[0]["SELLWORKERNAME"].ToString()}|" + $"{_CommodityCode}|{_SellDetail}|{_SellOffPrice.ToString("F2")}|{_FactAmount.ToString("F2")}"; return new Model.DataCollectionModel { DATACOLLECTION_ID = ESSupport.Pos.PosReport.CreateNextSequence("T_DATACOLLECTION", "DATACOLLECTION_ID"), SERVERPARTCODE = ServerPartCode, SHOPCODE = ShopCode, MACHINECODE = MachineCode, MACADDRESS = Lib.PCHelper.GetMacAddressByNetworkInformation(), MACHINENAME = System.Net.Dns.GetHostName(), DATACOLLECTION_TYPE = 1000, DATACOLLECTION_DATE = _DataCollectionTime, TOTAL_COUNT = _SellCount, TOTALSELL_AMOUNT = _FactSum, TICKET_COUNT = _TicketCount, TICKET_INFO = _TicketInfo }; } } } catch (Exception ex) { try { Lib.LogHelper.WriteServiceLog("实时交易统计:" + ex.Message); } catch { } } return default(Model.DataCollectionModel); } #endregion #region 方法 -> 获取本地数据版本 /// /// 读取本地数据版本 /// /// 是否C#版收银系统 /// public List GetLocalDataVersion(bool isNewSystem) { try { //查询并序列化本地数据版本信息为List实体 List _LocalDataVersionList = new List(); List list_Sql = isNewSystem ? DataVersionSqlByNew() : DataVersionSqlByOld(); foreach (string str_Select in list_Sql) { _LocalDataVersionList = _LocalDataVersionList.Concat(Newtonsoft.Json.JsonConvert.DeserializeObject>( Newtonsoft.Json.JsonConvert.SerializeObject(ESSupport.Lib.SyBaseHelper.QueryOdbc(str_Select).Tables[0]))).ToList(); } //返回当前收银机门店的数据版本 return _LocalDataVersionList.FindAll(p => { return p.ServerPartCode == ServerPartCode && p.ShopCode == ShopCode && (p.MachineCode == null || p.MachineCode == MachineCode); }); } catch (Exception ex) { try { Lib.LogHelper.WriteServiceLog("获取数据版本失败:" + ex.Message); } catch { } //数据库报错,反馈空白的List实体 return new List(); } } /// /// C#版系统收银机数据版本查询语句 /// /// private List DataVersionSqlByNew() { return new List { @"SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MachineCode,'COMMODITYEX' AS DataTableName, MAX(A.DOWNLOADDATE) AS DataVersion,0 AS TransState FROM T_COMMODITYEX A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SERVERPARTSHOP_ID = B.SERVERPARTSHOP_ID AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE", @"SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MachineCode,'SELLWORKER' AS DataTableName, MAX(A.DOWNLOADDATE) AS DataVersion,0 AS TransState FROM T_SELLWORKER A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE", @"SELECT A.SERVERPARTCODE,A.SHOPCODE, NULL AS MachineCode,'SHOPMESSAGE' AS DataTableName, MAX(A.DOWNLOADDATE) AS DataVersion,0 AS TransState FROM T_SHOPMESSAGE A WHERE A.VALID = 1 GROUP BY A.SERVERPARTCODE,A.SHOPCODE", @"SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MachineCode,'SALESPROMOTE' AS DataTableName, MAX(A.SALESPROMOTE_DATE) AS DataVersion,0 AS TransState FROM T_SALESPROMOTE A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE", @"SELECT B.SERVERPARTCODE,B.SHOPCODE,A.MACHINECODE, (CASE WHEN A.ENDACCOUNT_TYPE = 1 THEN 'ENDACCOUNT' ELSE 'INSPECTION' END) AS DataTableName, MAX(A.ENDDATE) AS DataVersion,MAX(A.TRANSFER_STATE) AS TransState FROM T_ENDACCOUNT_NEW A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 AND A.ENDACCOUNT_TYPE IN (1,5,6) GROUP BY B.SERVERPARTCODE,B.SHOPCODE, A.MACHINECODE, (CASE WHEN A.ENDACCOUNT_TYPE = 1 THEN 'ENDACCOUNT' ELSE 'INSPECTION' END)", @"SELECT B.SERVERPARTCODE,B.SHOPCODE, A.MACHINECODE,'PERSONSELL' AS DataTableName, MAX(A.ENDDATE) AS DataVersion,MAX(A.TRANSFER_STATE) AS TransState FROM T_PERSONSELL_NEW A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE,A.MACHINECODE", @"SELECT A.SERVERPARTCODE,A.SHOPCODE, A.MACHINECODE,'COMMODITYSALE' AS DataTableName, MAX(A.ENDDATE) AS DataVersion,MIN(C.TRANSFER_STATE) AS TransState FROM T_ENDACCOUNT_NEW A,T_COMMODITYSALE_NEW C,T_SHOPMESSAGE B WHERE A.ENDACCOUNT_CODE = C.ENDACCOUNT_CODE AND A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 GROUP BY A.SERVERPARTCODE,A.SHOPCODE,A.MACHINECODE", @"SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MACHINECODE,'AUDITTASK' AS DataTableName, MAX(A.OPERATE_DATE) AS DataVersion,0 AS TransState FROM T_AUDITTASKS A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.BUSINESSTYPE = B.BUSINESSTYPE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE" }; #region /*return @"SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MachineCode,'COMMODITYEX' AS DataTableName, MAX(A.DOWNLOADDATE) AS DataVersion,0 AS TransState FROM T_COMMODITYEX A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SERVERPARTSHOP_ID = B.SERVERPARTSHOP_ID AND B.VALID = 1 AND A.ISVALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE UNION ALL SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MachineCode,'SELLWORKER' AS DataTableName, MAX(A.DOWNLOADDATE) AS DataVersion,0 AS TransState FROM T_SELLWORKER A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE UNION ALL SELECT A.SERVERPARTCODE,A.SHOPCODE, NULL AS MachineCode,'SHOPMESSAGE' AS DataTableName, MAX(A.DOWNLOADDATE) AS DataVersion,0 AS TransState FROM T_SHOPMESSAGE A WHERE A.VALID = 1 GROUP BY A.SERVERPARTCODE,A.SHOPCODE UNION ALL SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MachineCode,'SALESPROMOTE' AS DataTableName, MAX(A.SALESPROMOTE_DATE) AS DataVersion,0 AS TransState FROM T_SALESPROMOTE A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE UNION ALL SELECT B.SERVERPARTCODE,B.SHOPCODE,A.MACHINECODE, (CASE WHEN A.ENDACCOUNT_TYPE = 1 THEN 'ENDACCOUNT' ELSE 'INSPECTION' END) AS DataTableName, MAX(A.ENDDATE) AS DataVersion,MAX(A.TRANSFER_STATE) AS TransState FROM T_ENDACCOUNT_NEW A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 AND A.ENDACCOUNT_TYPE IN (1,5) GROUP BY B.SERVERPARTCODE,B.SHOPCODE, A.MACHINECODE, (CASE WHEN A.ENDACCOUNT_TYPE = 1 THEN 'ENDACCOUNT' ELSE 'INSPECTION' END) UNION ALL SELECT B.SERVERPARTCODE,B.SHOPCODE, A.MACHINECODE,'PERSONSELL' AS DataTableName, MAX(A.ENDDATE) AS DataVersion,MAX(A.TRANSFER_STATE) AS TransState FROM T_PERSONSELL_NEW A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE,A.MACHINECODE UNION ALL SELECT A.SERVERPARTCODE,A.SHOPCODE, A.MACHINECODE,'COMMODITYSALE' AS DataTableName, MAX(A.ENDDATE) AS DataVersion,MIN(C.TRANSFER_STATE) AS TransState FROM T_ENDACCOUNT_NEW A,T_COMMODITYSALE_NEW C,T_SHOPMESSAGE B WHERE A.ENDACCOUNT_CODE = C.ENDACCOUNT_CODE AND A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 GROUP BY A.SERVERPARTCODE,A.SHOPCODE,A.MACHINECODE UNION ALL SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MACHINECODE,'AUDITTASK' AS DataTableName, MAX(A.OPERATE_DATE) AS DataVersion,0 AS TransState FROM T_AUDITTASKS A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.BUSINESSTYPE = B.BUSINESSTYPE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE";*/ #endregion } /// /// PB版系统收银机数据版本查询语句 /// /// private List DataVersionSqlByOld() { return new List { @"SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MachineCode,'COMMODITYEX' AS DataTableName, MAX(A.DOWNLOADDATE) AS DataVersion,0 AS TransState FROM T_COMMODITYEX A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SERVERPARTSHOP_ID = B.SERVERPARTSHOP_ID AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE", @"SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MachineCode,'SELLWORKER' AS DataTableName, MAX(A.DOWNLOADDATE) AS DataVersion,0 AS TransState FROM T_SELLWORKER A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE", @"SELECT A.SERVERPARTCODE,A.SHOPCODE, NULL AS MachineCode,'SHOPMESSAGE' AS DataTableName, MAX(A.DOWNLOADDATE) AS DataVersion,0 AS TransState FROM T_SHOPMESSAGE A WHERE A.VALID = 1 GROUP BY A.SERVERPARTCODE,A.SHOPCODE", @"SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MachineCode,'SALESPROMOTE' AS DataTableName, MAX(A.SALESPROMOTE_DATE) AS DataVersion,0 AS TransState FROM T_SALESPROMOTE A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE", @"SELECT B.SERVERPARTCODE,B.SHOPCODE,A.MACHINECODE, (CASE WHEN A.FLAG = 1 THEN 'ENDACCOUNT' ELSE 'INSPECTION' END) AS DataTableName, MAX(ENDACCOUNT_DATE) AS DataVersion,MAX(A.ENDACCOUNT_STATE) AS TransState FROM T_ENDACCOUNT A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 AND A.FLAG IN (1,5,6) GROUP BY B.SERVERPARTCODE,B.SHOPCODE, A.MACHINECODE,(CASE WHEN A.FLAG = 1 THEN 'ENDACCOUNT' ELSE 'INSPECTION' END)", @"SELECT B.SERVERPARTCODE,B.SHOPCODE, A.MACHINECODE,'PERSONSELL' AS DataTableName, MAX(A.ENDDATE) AS DataVersion,MAX(A.PERSONSELL_STATE) AS TransState FROM T_PERSONSELL A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE,A.MACHINECODE", @"SELECT A.SERVERPARTCODE,A.SHOPCODE, A.MACHINECODE,'COMMODITYSALE' AS DataTableName, MAX(A.ENDDATE) AS DataVersion, MIN(A.COMMODITYSALE_STATE) AS TransState FROM T_COMMODITYSALE A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 GROUP BY A.SERVERPARTCODE,A.SHOPCODE,A.MACHINECODE", @"SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MACHINECODE,'AUDITTASK' AS DataTableName, MAX(A.OPERATE_DATE) AS DataVersion,0 AS TransState FROM T_AUDITTASKS A, T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.BUSINESSTYPE = B.BUSINESSTYPE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE" }; #region /* return @"SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MachineCode,'COMMODITYEX' AS DataTableName, MAX(A.DOWNLOADDATE) AS DataVersion,0 AS TransState FROM T_COMMODITYEX A, T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SERVERPARTSHOP_ID = B.SERVERPARTSHOP_ID AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE UNION ALL SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MachineCode,'SELLWORKER' AS DataTableName, MAX(A.DOWNLOADDATE) AS DataVersion,0 AS TransState FROM T_SELLWORKER A, T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE UNION ALL SELECT A.SERVERPARTCODE,A.SHOPCODE, NULL AS MachineCode,'SHOPMESSAGE' AS DataTableName, MAX(A.DOWNLOADDATE) AS DataVersion,0 AS TransState FROM T_SHOPMESSAGE A WHERE A.VALID = 1 GROUP BY A.SERVERPARTCODE,A.SHOPCODE UNION ALL SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MachineCode,'SALESPROMOTE' AS DataTableName, MAX(A.SALESPROMOTE_DATE) AS DataVersion,0 AS TransState FROM T_SALESPROMOTE A, T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE UNION ALL SELECT B.SERVERPARTCODE,B.SHOPCODE,A.MACHINECODE, (CASE WHEN A.FLAG = 1 THEN 'ENDACCOUNT' ELSE 'INSPECTION' END) AS DataTableName, MAX(ENDACCOUNT_DATE) AS DataVersion,MAX(A.ENDACCOUNT_STATE) AS TransState FROM T_ENDACCOUNT A, T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 AND A.FLAG IN (1,5,6) GROUP BY B.SERVERPARTCODE,B.SHOPCODE, A.MACHINECODE,(CASE WHEN A.FLAG = 1 THEN 'ENDACCOUNT' ELSE 'INSPECTION' END) UNION ALL SELECT B.SERVERPARTCODE,B.SHOPCODE, A.MACHINECODE,'PERSONSELL' AS DataTableName, MAX(A.ENDDATE) AS DataVersion,MAX(A.PERSONSELL_STATE) AS TransState FROM T_PERSONSELL A, T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE,A.MACHINECODE UNION ALL SELECT A.SERVERPARTCODE,A.SHOPCODE, A.MACHINECODE,'COMMODITYSALE' AS DataTableName, MAX(A.ENDDATE) AS DataVersion, MIN(A.COMMODITYSALE_STATE) AS TransState FROM T_COMMODITYSALE A,T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.SHOPCODE = B.SHOPCODE AND B.VALID = 1 GROUP BY A.SERVERPARTCODE,A.SHOPCODE,A.MACHINECODE UNION ALL SELECT B.SERVERPARTCODE,B.SHOPCODE, NULL AS MACHINECODE,'AUDITTASK' AS DataTableName, MAX(A.OPERATE_DATE) AS DataVersion,0 AS TransState FROM T_AUDITTASKS A, T_SHOPMESSAGE B WHERE A.SERVERPARTCODE = B.SERVERPARTCODE AND A.BUSINESSTYPE = B.BUSINESSTYPE AND B.VALID = 1 GROUP BY B.SERVERPARTCODE,B.SHOPCODE"; */ #endregion } #endregion #region 方法 -> 写入移动支付交易记录数据 /// /// 写入移动支付交易记录数据 /// /// 移动支付服务商 /// 平台商户号 /// 平台商户密钥 /// 支付类型 /// 移动支付订单号 /// 交易金额 /// 交易返回结果 /// public bool InsertOrUpdateMobilePayRecord(Common.PosDictionary.MobilePayOperators mobilePayOperators, string merchantCode, string merchantKey, string payType, string ticketCode, string ticketPrice, string jsonPayResult) { try { string _strPayTime = ticketCode.Substring(ticketCode.Length - 14, 14); if (!DateTime.TryParseExact(_strPayTime, "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out DateTime _PayTime)) { _PayTime = DateTime.Now; } DateTime.Now.ToString("yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); libESPay.PayModel.PayResultModel _PayResultModel = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonPayResult); if (_PayResultModel == null) { return false; } if (Lib.SyBaseHelper.QueryOdbc($@"SELECT 1 FROM T_MOBILEPAYRECORD WHERE MOBILEPAY_CODE = '{ticketCode}'").Tables[0].Rows.Count > 0) { Lib.SyBaseHelper.ExecuteSqlTran( $@"UPDATE T_MOBILEPAYRECORD SET PLATFORMORDERCODE = '{_PayResultModel.trade_no}', MOBILEPAY_RESULT = {_PayResultModel.result_code}, MOBILEPAY_DESC = '{_PayResultModel.result_desc}' WHERE MOBILEPAY_CODE = '{ticketCode}'"); return true; } else { int _MobilePayRecordID = ESSupport.Pos.PosReport.CreateNextSequence( "T_MOBILEPAYRECORD", "MOBILEPAYRECORD_ID"); ESSupport.Lib.SyBaseHelper.ExecuteSqlTran( $@"INSERT INTO T_MOBILEPAYRECORD ( MOBILEPAYRECORD_ID,MOBILEPAY_CODE,SERVERPART_CODE, SERVERPART_NAME,SERVERPARTSHOP_ID,SHOPCODE, SHOPNAME,MACHINECODE,MOBILEPAY_DATE, MOBILEPAY_TYPE,MOBILEPAY_OPERATORS,MERCHANTCODE, MERCHANTKEY,MOBILEPAY_AMOUNT,PLATFORMORDERCODE, MOBILEPAY_RESULT,MOBILEPAY_DESC) VALUES ({_MobilePayRecordID},'{ticketCode}','{ServerPartCode}', NULL,NULL,'{ShopCode}',NULL,'{MachineCode}', DATETIME('{_PayTime.ToString("yyyy/MM/dd HH:mm:ss")}'), '{payType.ToUpper()}',{((int)mobilePayOperators).ToString()}, '{merchantCode}','{merchantKey}',{ticketPrice},'{_PayResultModel.trade_no}', {_PayResultModel.result_code},'{_PayResultModel.result_desc}')"); return true; } } catch { return false; } } #endregion } }