2025-03-28 09:49:56 +08:00

769 lines
39 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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