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

232 lines
14 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.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
}
}