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 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 bool GetSellStatistics(bool isNewSystem, out decimal orderCount, out decimal sellCount, out decimal factAmount) { 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 FROM T_SELLMASTER WHERE SELLMASTER_DATE BETWEEN TODAY() AND NOW() AND SERVERPARTCODE = '{ServerPartCode}' AND SHOPCODE = '{ShopCode}' AND MACHINECODE = '{MachineCode}'"; } else { _strSelectSql = $@"SELECT COUNT(DISTINCT(TICKETCODE)) AS ORDERCOUNT, ISNULL(SUM(SELLCOUNT),0) AS SELLCOUNT, ISNULL(SUM(FACTAMOUNT),0) AS FACTAMOUNT 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]); orderCount = (decimal)_DataTable.Rows[0]["ORDERCOUNT"]; sellCount = (decimal)_DataTable.Rows[0]["SELLCOUNT"]; factAmount = (decimal)_DataTable.Rows[0]["FACTAMOUNT"]; } catch { orderCount = 0; sellCount = 0; factAmount = 0; } return true; } #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 { 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 { 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')").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()}"; } } } return _PosConfig; } 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 { 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")}')"; } DataTable _selldata = ESSupport.Lib.SyBaseHelper.QueryOdbc(_SelectSQL).Tables[0]; if (_selldata.Rows.Count > 0) { selldata_date = _selldata.Rows[0][0].ToString(); } 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"; } 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")}"; } 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) { Lib.LogHelper.WriteServiceLog("营业信息更新:" + ex.Message); } } 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) { Lib.LogHelper.WriteServiceLog("营业信息采集:" + ex.Message); } } } } catch (Exception ex) { Lib.LogHelper.WriteServiceLog("BusinessTime:" + ex.Message); } } #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")}')"; } 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 }; } } return default(Model.DataCollectionModel); } #endregion } }