769 lines
39 KiB
C#
769 lines
39 KiB
C#
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 方法 -> 获取有效商品总数
|
||
/// <summary>
|
||
/// 获取有效商品总数
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
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 方法 -> 获取当前工班收银员
|
||
/// <summary>
|
||
/// 获取当前工班收银员
|
||
/// </summary>
|
||
/// <param name="isNewSystem">是否新系统</param>
|
||
/// <returns></returns>
|
||
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 方法 -> 获取销售情况
|
||
/// <summary>
|
||
/// 获取销售情况
|
||
/// </summary>
|
||
/// <param name="isNewSystem">是否新系统</param>
|
||
/// <param name="orderCount">输出:客单数</param>
|
||
/// <param name="sellCount">输出:销售数量</param>
|
||
/// <param name="factAmount">输出:销售金额</param>
|
||
/// <returns></returns>
|
||
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 方法 -> 获取最后一笔交易时间
|
||
/// <summary>
|
||
/// 获取最后一笔交易时间
|
||
/// </summary>
|
||
/// <param name="isNewSystem">是否新系统</param>
|
||
/// <returns></returns>
|
||
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 方法 -> 获取今日最近一笔交易详情
|
||
/// <summary>
|
||
/// 获取今日最近一笔交易详情
|
||
/// </summary>
|
||
/// <param name="isNewSystem">是否新系统</param>
|
||
/// <returns></returns>
|
||
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 方法 -> 获取本地最新基本配置信息
|
||
/// <summary>
|
||
/// 获取本地最新基本配置信息
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
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 方法 -> 获取正在进行的促销
|
||
/// <summary>
|
||
/// 获取正在进行的促销
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
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 方法 -> 获取首末笔销售时间
|
||
/// <summary>
|
||
/// 获取首末笔销售时间
|
||
/// </summary>
|
||
/// <param name="startDate">起始时间</param>
|
||
/// <param name="endDate">结束时间</param>
|
||
/// <param name="maxmin">读取类型:MAX、MIN</param>
|
||
/// <param name="isNewSystem"></param>
|
||
/// <returns></returns>
|
||
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 方法 -> 获取首末笔流水信息
|
||
/// <summary>
|
||
/// 获取首末笔流水信息
|
||
/// </summary>
|
||
/// <param name="startDate"></param>
|
||
/// <param name="endDate"></param>
|
||
/// <param name="maxmin"></param>
|
||
/// <returns></returns>
|
||
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<string> {
|
||
$@"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 方法 -> 获取实时交易统计结果
|
||
/// <summary>
|
||
/// 获取实时交易统计结果
|
||
/// </summary>
|
||
/// <param name="isNewSystem">是否新系统</param>
|
||
/// <returns></returns>
|
||
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
|
||
|
||
}
|
||
}
|