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