using System.Collections.Generic;
using System.Data;
using SuperMap.RealEstate.ServiceModel;
using COMB = SuperMap.RealEstate.Coop.Merchant.Business;
using ESCom = EShang.Common;
using HZQR.Common;
namespace YFBusinessApi.Helper
{
///
/// 营收数据相关方法
///
public class RevenueHelper
{
#region 方法 -> 获取今日营收信息
///
/// 获取今日营收信息
///
/// 事务管理器
/// 商家会员内码
/// 排序字段,默认营收金额【TOTALPRICE】
/// 正序/倒序,默认倒序【desc】
///
public static Models.CurShopRevenueModel GetCurShopRevenue(Transaction _Transaction,
string membershipId, string sortName = "TOTALPRICE", string sortOrder = "desc")
{
Models.CurShopRevenueModel curShopRevenueModel = new Models.CurShopRevenueModel();
curShopRevenueModel.ShopRevenueDetailList = new List();
//获取商户服务区权限、门店权限集合
string provinceCodes = "", serverpartShopCodes = "";
ESCom.BusinessMan.GetUserServerPartShop(membershipId.TryParseToInt(),
_Transaction, ref provinceCodes, ref serverpartShopCodes);
//根据门店权限获取今日营收数据
string sqlWhere = " AND A.PROVINCE_CODE IN ('" + provinceCodes.Replace(",", "','") +
"') AND A.SERVERPART_CODE || B.SHOPCODE IN ('" + serverpartShopCodes.Replace(",", "','") +
"') AND C.CONNECT_DATE >= TRUNC(SYSDATE) AND C.CONNECT_DATE < TRUNC(SYSDATE) + 1";
string sql = string.Format(@"
SELECT
A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPART_NAME,B.SHOPNAME,
A.SERVERPART_CODE || B.SHOPCODE AS SERVERPARTSHOPCODE,
SUM(NVL(CURRENT_SELLAMOUNT,0)) AS TOTALPRICE,
SUM(NVL(CURRENT_SELLCOUNT,0)) AS SELLCOUNT,
SUM(NVL(CURRENT_TICKETCOUNT,0)) AS TICKETCOUNT
FROM
COOP_MERCHANT.T_SERVERPART A,
COOP_MERCHANT.T_SERVERPARTSHOP B,
HIGHWAY_EXCHANGE.T_STATEFEEDBACK C
WHERE
A.SERVERPART_ID = B.SERVERPART_ID AND A.PROVINCE_CODE = B.PROVINCE_CODE AND
A.SERVERPART_CODE = C.SERVERPARTCODE AND B.SHOPCODE = C.SHOPCODE {0}
GROUP BY A.PROVINCE_CODE,A.SERVERPART_ID,A.SERVERPART_NAME,B.SHOPNAME,A.SERVERPART_CODE || B.SHOPCODE", sqlWhere);
DataTable _DataTable = new COMB.OWNERUNIT(_Transaction).ExecuteDataTable(sql);
foreach (DataRow dataRow in _DataTable.Select("", sortName + " " + sortOrder))
{
Models.ShopRevenueDetailModel shopRevenueDetailModel = new Models.ShopRevenueDetailModel();
shopRevenueDetailModel.Serverpart_Name = dataRow["SERVERPART_NAME"].ToString();
shopRevenueDetailModel.ShopName = dataRow["SHOPNAME"].ToString();
shopRevenueDetailModel.ServerpartShopCode = dataRow["SERVERPARTSHOPCODE"].ToString();
shopRevenueDetailModel.TotalPrice = dataRow["TOTALPRICE"].TryParseToDecimal();
shopRevenueDetailModel.TicketCount = dataRow["TICKETCOUNT"].TryParseToDecimal();
shopRevenueDetailModel.SellCount = dataRow["SELLCOUNT"].TryParseToDecimal();
curShopRevenueModel.ShopRevenueDetailList.Add(shopRevenueDetailModel);
}
//营收金额
curShopRevenueModel.TotalAmount = _DataTable.Compute("sum(TOTALPRICE)", "").TryParseToDecimal();
//客单数量
curShopRevenueModel.TicketCount = _DataTable.Compute("sum(TICKETCOUNT)", "").TryParseToDecimal();
//商品销售数量
curShopRevenueModel.SellCount = _DataTable.Compute("sum(SELLCOUNT)", "").TryParseToDecimal();
return curShopRevenueModel;
}
#endregion
#region 方法 -> 获取昨日营收信息
///
/// 获取昨日营收信息
///
/// 事务管理器
/// 商家会员内码
///
public static Models.MerchantRevenueModel GetYestodayShopRevenue(Transaction _Transaction, string membershipId)
{
Models.MerchantRevenueModel merchantRevenueModel = new Models.MerchantRevenueModel();
//获取商户服务区权限、门店权限集合
string provinceCodes = "", serverpartShopCodes = "";
ESCom.BusinessMan.GetUserServerPartShop(membershipId.TryParseToInt(),
_Transaction, ref provinceCodes, ref serverpartShopCodes);
//根据门店权限获取今日营收数据
COMB.BUSINESSSHOPCODE _BUSINESSSHOPCODE = new COMB.BUSINESSSHOPCODE(_Transaction);
//从日结营收表【HIGHWAY_SELLDATA.T_ENDACCOUNT】获取日结营收金额、移动支付金额
string SQLString = string.Format(@"SELECT
SUM(REVENUE_AMOUNT) AS TOTALAMOUNT,
SUM(NVL(NVL(FACT_AMOUNT + NVL(SALE_CORRECT,0),TICKETBILL + OTHERPAY),0)) AS MOBILEPAYMENT
FROM
HIGHWAY_SELLDATA.T_ENDACCOUNT
WHERE
TRUNC(ENDACCOUNT_DATE) = TRUNC(SYSDATE) - 1 AND
VALID = 1 AND PROVINCE_CODE IN ('{0}') AND
SERVERPART_CODE || SERVERPARTSHOP_CODE IN ('{1}')",
provinceCodes.Replace(",", "','"), serverpartShopCodes.Replace(",", "','"));
DataTable dtEndaccount = _BUSINESSSHOPCODE.ExecuteDataTable(SQLString);
if (dtEndaccount.Rows.Count > 0)
{
merchantRevenueModel.TotalAmount = dtEndaccount.Rows[0]["TotalAmount"].TryParseToDecimal();
merchantRevenueModel.MobilePayment = dtEndaccount.Rows[0]["MOBILEPAYMENT"].TryParseToDecimal();
}
//从移动支付日结表【HIGHWAY_SELLDATA.T_REVENUE_ENDACCOUNT】获取移动支付金额
//SQLString = @"SELECT SUM(TICKET_AMOUNT) AS MobilePayment FROM HIGHWAY_SELLDATA.T_REVENUE_ENDACCOUNT
// WHERE TRUNC(ENDACCOUNT_DATE) = TRUNC(SYSDATE) - 1 AND SERVERPART_CODE || SERVERPARTSHOP_CODE IN ('" +
// serverpartShopCodes.Replace(",", "','") + "')";
//DataTable dtMobilePayment = _BUSINESSSHOPCODE.ExecuteDataTable(SQLString);
//if (dtMobilePayment.Rows.Count > 0)
//{
// MobilePayment = dtMobilePayment.Rows[0]["MobilePayment"].TryParseToDecimal();
//}
//从移动支付到账表【HIGHWAY_SELLDATA.T_REVENUE_NATURALDAY】获取移动到账金额
SQLString = @"SELECT SUM(TICKET_AMOUNT - TAXFEE_AMOUNT) AS BankReceivedAmount FROM HIGHWAY_SELLDATA.T_REVENUE_NATURALDAY
WHERE TRUNC(ORDER_DATE) = TRUNC(SYSDATE) - 1 AND SERVERPART_CODE || SERVERPARTSHOP_CODE IN ('" +
serverpartShopCodes.Replace(",", "','") + "')";
DataTable dtBankReceived = _BUSINESSSHOPCODE.ExecuteDataTable(SQLString);
if (dtBankReceived.Rows.Count > 0)
{
merchantRevenueModel.BankReceivedAmount = dtBankReceived.Rows[0]["BankReceivedAmount"].TryParseToDecimal();
}
return merchantRevenueModel;
}
#endregion
#region 方法 -> 获取日结营收信息(按结账单的口径)
///
/// 获取日结营收信息
///
/// 事务管理器
/// 商家会员内码
/// 开始时间
/// 结束时间
/// 总数量
/// 页码数
/// 每页行数
///
public static Models.RevenueModel GetRevenueByStatement(Transaction _Transaction, int membershipId,
string beginDate, string endDate, ref int totalCount, int pageIndex = 1, int pageSize = 10)
{
Models.RevenueModel revenueModel = new Models.RevenueModel();
revenueModel.ShopEndaccountList = new List();
string provinceCode = "", serverPartShopCode = "";
ESCom.BusinessMan.GetUserServerPartShop(membershipId, _Transaction, ref provinceCode, ref serverPartShopCode);
if (!string.IsNullOrEmpty(serverPartShopCode))
{
DataTable dtRevenue = new DataTable();
string sql = string.Format(@"
SELECT
A.ENDACCOUNT_ID,B.REVENUE_ENDACCOUNT_ID,A.SERVERPART_CODE,A.SERVERPART_NAME,
A.SERVERPARTSHOP_CODE,A.SERVERPARTSHOP_NAME,A.MACHINECODE,A.CHECK_COUNT,A.REVENUE_AMOUNT,
A.ENDACCOUNT_STARTDATE,A.ENDACCOUNT_DATE,A.CASH_PAYMENT,A.DIFFERENT_PRICE,
NVL(NVL(A.FACT_AMOUNT + NVL(A.SALE_CORRECT,0),A.TICKETBILL + A.OTHERPAY),0) AS TICKETMOBILEPAY,
NVL(B.TICKET_AMOUNT,0) AS FACTUALMOBILEPAY
FROM
HIGHWAY_SELLDATA.T_ENDACCOUNT A
LEFT JOIN
HIGHWAY_SELLDATA.T_REVENUE_ENDACCOUNT B
ON
A.ENDACCOUNT_ID = B.ENDACCOUNT_ID AND
A.SERVERPART_ID = B.SERVERPART_ID AND
A.SERVERPARTSHOP_CODE = B.SERVERPARTSHOP_CODE
WHERE
A.VALID = 1 AND
A.SERVERPART_CODE || A.SERVERPARTSHOP_CODE IN ('{0}') AND
A.ENDACCOUNT_DATE >= TO_DATE('{1}','YYYY/MM/DD') AND
A.ENDACCOUNT_DATE < TO_DATE('{2}','YYYY/MM/DD') + 1
ORDER BY A.ENDACCOUNT_DATE DESC", serverPartShopCode.Replace(",", "','"), beginDate, endDate);
dtRevenue = new COMB.BRAND(_Transaction).ExecuteDataTable(sql);
totalCount = dtRevenue.Rows.Count;
#region 分页
for (int RowCount = 0; RowCount < pageSize; RowCount++)
{
int RN = pageSize * (pageIndex - 1) + RowCount;
if (RN >= dtRevenue.Rows.Count)
{
break;
}
DataRow drSaleBill = dtRevenue.Rows[RN];
Models.ShopEndaccountModel shopEndaccountModel = new Models.ShopEndaccountModel();
shopEndaccountModel.Endaccount_Id = drSaleBill["ENDACCOUNT_ID"].TryParseToInt();
shopEndaccountModel.Revenue_Endaccount_Id = drSaleBill["REVENUE_ENDACCOUNT_ID"].TryParseToInt();
shopEndaccountModel.ServerPart_Code = drSaleBill["SERVERPART_CODE"].ToString();
shopEndaccountModel.ServerPart_Name = drSaleBill["SERVERPART_NAME"].ToString();
shopEndaccountModel.ServerPartShop_Code = drSaleBill["SERVERPARTSHOP_CODE"].ToString();
shopEndaccountModel.ServerPartShop_Name = drSaleBill["SERVERPARTSHOP_NAME"].ToString();
shopEndaccountModel.MachineCode = drSaleBill["MACHINECODE"].ToString();
shopEndaccountModel.Check_Count = drSaleBill["CHECK_COUNT"].TryParseToInt();
shopEndaccountModel.DifferentPrice = drSaleBill["DIFFERENT_PRICE"].TryParseToDecimal();
shopEndaccountModel.EndAccount_StartDate = drSaleBill["ENDACCOUNT_STARTDATE"].ToString();
shopEndaccountModel.EndAccount_Date = drSaleBill["ENDACCOUNT_DATE"].ToString();
shopEndaccountModel.FactualMobilePay = drSaleBill["FACTUALMOBILEPAY"].TryParseToDecimal();
shopEndaccountModel.CashPayment = drSaleBill["CASH_PAYMENT"].TryParseToDecimal();
shopEndaccountModel.TicketMobilePay = drSaleBill["TICKETMOBILEPAY"].TryParseToDecimal();
shopEndaccountModel.Sum_Revenue = drSaleBill["REVENUE_AMOUNT"].TryParseToDecimal();
shopEndaccountModel.ContrastPrice = shopEndaccountModel.TicketMobilePay - shopEndaccountModel.FactualMobilePay;
shopEndaccountModel.Rownum = RN + 1;
revenueModel.ShopEndaccountList.Add(shopEndaccountModel);
}
#endregion
revenueModel.Sum_Amount = dtRevenue.Compute("sum(REVENUE_AMOUNT)", "TRUE").TryParseToDecimal();
revenueModel.Sum_TicketMobilePay = dtRevenue.Compute("sum(TICKETMOBILEPAY)", "TRUE").TryParseToDecimal();
revenueModel.Sum_FactualMobilePay = dtRevenue.Compute("sum(TICKETMOBILEPAY)", "TRUE").TryParseToDecimal();
revenueModel.Sum_CashPayment = revenueModel.Sum_Amount - revenueModel.Sum_TicketMobilePay;
}
else
{
revenueModel.Sum_Amount = 0;
revenueModel.Sum_TicketMobilePay = 0;
revenueModel.Sum_FactualMobilePay = 0;
revenueModel.Sum_CashPayment = 0;
}
return revenueModel;
}
#endregion
}
}