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
}
}