232 lines
14 KiB
C#
232 lines
14 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// 营收数据相关方法
|
||
/// </summary>
|
||
public class RevenueHelper
|
||
{
|
||
#region 方法 -> 获取今日营收信息
|
||
/// <summary>
|
||
/// 获取今日营收信息
|
||
/// </summary>
|
||
/// <param name="_Transaction">事务管理器</param>
|
||
/// <param name="membershipId">商家会员内码</param>
|
||
/// <param name="sortName">排序字段,默认营收金额【TOTALPRICE】</param>
|
||
/// <param name="sortOrder">正序/倒序,默认倒序【desc】</param>
|
||
/// <returns></returns>
|
||
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<Models.ShopRevenueDetailModel>();
|
||
|
||
//获取商户服务区权限、门店权限集合
|
||
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 方法 -> 获取昨日营收信息
|
||
/// <summary>
|
||
/// 获取昨日营收信息
|
||
/// </summary>
|
||
/// <param name="_Transaction">事务管理器</param>
|
||
/// <param name="membershipId">商家会员内码</param>
|
||
/// <returns></returns>
|
||
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 方法 -> 获取日结营收信息(按结账单的口径)
|
||
/// <summary>
|
||
/// 获取日结营收信息
|
||
/// </summary>
|
||
/// <param name="_Transaction">事务管理器</param>
|
||
/// <param name="membershipId">商家会员内码</param>
|
||
/// <param name="beginDate">开始时间</param>
|
||
/// <param name="endDate">结束时间</param>
|
||
/// <param name="totalCount">总数量</param>
|
||
/// <param name="pageIndex">页码数</param>
|
||
/// <param name="pageSize">每页行数</param>
|
||
/// <returns></returns>
|
||
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<Models.ShopEndaccountModel>();
|
||
|
||
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
|
||
}
|
||
} |