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

1256 lines
78 KiB
C#

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Description;
using SuperMap.RealEstate.CoreFrameWork;
using SuperMap.RealEstate.CoreFrameWork.Dictionary.Business;
using MSPB = SuperMap.RealEstate.MobileServicePlatform.Business;
using ESCM = EShang.Common.Model;
using ESCom = EShang.Common;
using EShangApi.Models;
using HZQR.Common;
namespace EShangApi.Controllers
{
/// <summary>
/// 营收信息接口【驿行畅旅】
/// </summary>
public class RevenueController : BaseController
{
/// <summary>
/// 合作商户平台Url,用于上传的图片线上url用
/// </summary>
protected static string _CoopMerchantUrl = ConfigurationManager.AppSettings["CoopMerchantUrls"].ToString();
#region ->
/// <summary>
/// 获取营收趋势数据
/// </summary>
/// <param name="Serverpart_Id">服务区内码</param>
/// <param name="Statictics_Type">统计类型(Year:年报表,Month:月报表,Week:周报表)</param>
/// <param name="Report_Type">报表类型(Revenue:营收金额,Ticke:订单数,Average:客单均价)</param>
/// <param name="groupType">服务区类型(1000:全部,1010:服务区,1020:区域)</param>
/// <param name="Statistics_Date">统计时间</param>
/// <param name="pushProvinceCode">省份编号</param>
/// <returns></returns>
[AcceptVerbs("GET", "POST")]
[Route("WeChat/GetRevenueTrends")]
[ResponseType(typeof(JsonMsg<ESCM.RevenueModel>))]
public IHttpActionResult GetRevenueTrends(int? Serverpart_Id,
string Statictics_Type, string Report_Type, string groupType,
DateTime? Statistics_Date, string pushProvinceCode)
{
try
{
DataTable RevenueTable = new DataTable();
ESCM.RevenueModel revenueModel = new ESCM.RevenueModel();
//通过统计类型获取营收合计信息
if (pushProvinceCode == "0")
{
RevenueTable = ESCom.Revenue.GetRevenueTrendsByCashe(transaction, Serverpart_Id,
Statictics_Type, groupType, Statistics_Date.Value, pushProvinceCode);
}
else
{
RevenueTable = ESCom.Revenue.GetRevenueTrends(transaction, Serverpart_Id,
Statictics_Type, groupType, Statistics_Date.Value, pushProvinceCode);
}
if (RevenueTable.Rows.Count > 0)
{
//获取营收按天统计详情
DataTable RevenueDetilsTable = new DataTable();
if (pushProvinceCode == "0")
{
RevenueDetilsTable = ESCom.Revenue.GetRevenueTrendsDetilsFromCashe(transaction, Serverpart_Id,
Statictics_Type, groupType, Statistics_Date.Value, pushProvinceCode);
}
else
{
RevenueDetilsTable = ESCom.Revenue.GetRevenueTrendsDetils(transaction, Serverpart_Id,
Statictics_Type, groupType, Statistics_Date.Value, pushProvinceCode);
}
//营收详情列表
List<ESCM.RevenueDetils> listRevenueDetils = new List<ESCM.RevenueDetils>();
//客单详情列表
List<ESCM.TickeDetils> listTickeDetils = new List<ESCM.TickeDetils>();
//平均价详情列表
List<ESCM.AverageDetils> listAverageDetils = new List<ESCM.AverageDetils>();
//当前周(月)的营收合计信息
double.TryParse(RevenueTable.Compute("SUM(TICKETCOUNT)", "").ToString(), out double TICKETCOUNT);
double.TryParse(RevenueTable.Compute("SUM(TOTALSELLAMOUNT)", "").ToString(), out double TOTALSELLAMOUNT);
//环比周(月)的营收合计信息
double.TryParse(RevenueTable.Compute("SUM(LASTTICKETCOUNT)", "").ToString(), out double LASTTICKETCOUNT);
double.TryParse(RevenueTable.Compute("SUM(LASTTOTALSELLAMOUNT)", "").ToString(), out double LASTTOTALSELLAMOUNT);
//四川省需要去掉大巴券和会员消费数据
if (pushProvinceCode == "510000")
{
double.TryParse(RevenueTable.Compute("SUM(VIPPERSON)", "").ToString(), out double VIPPERSON);//油非互动
double.TryParse(RevenueTable.Compute("SUM(COSTBILL)", "").ToString(), out double COSTBILL);//大巴券
double.TryParse(RevenueTable.Compute("SUM(CREDITCARD)", "").ToString(), out double CREDITCARD);//企业会员
double.TryParse(RevenueTable.Compute("SUM(LASTVIPPERSON)", "").ToString(), out double LASTVIPPERSON);//油非互动
double.TryParse(RevenueTable.Compute("SUM(LASTCOSTBILL)", "").ToString(), out double LASTCOSTBILL);//大巴券
double.TryParse(RevenueTable.Compute("SUM(LASTCREDITCARD)", "").ToString(), out double LASTCREDITCARD);//企业会员
TOTALSELLAMOUNT = (TOTALSELLAMOUNT - VIPPERSON - COSTBILL - CREDITCARD).Round(2);
LASTTOTALSELLAMOUNT = (LASTTOTALSELLAMOUNT - LASTVIPPERSON - LASTCOSTBILL - LASTCREDITCARD).Round(2);
}
//计算客单均价
double LASTAVERAGE_AOMOUNT = (LASTTOTALSELLAMOUNT / LASTTICKETCOUNT).Round(2);
double AVERAGE_AOMOUNT = (TOTALSELLAMOUNT / TICKETCOUNT).Round(2);
//填入数据
revenueModel.Average_Amount = AVERAGE_AOMOUNT;
revenueModel.Ticke_Count = TICKETCOUNT;
revenueModel.Revenue_Amount = TOTALSELLAMOUNT;
revenueModel.Ticke_Difference = (TICKETCOUNT - LASTTICKETCOUNT).Round(2);
revenueModel.Revenue_Difference = (TOTALSELLAMOUNT - LASTTOTALSELLAMOUNT).Round(2);
revenueModel.Average_Difference = (AVERAGE_AOMOUNT - LASTAVERAGE_AOMOUNT).Round(2);
revenueModel.Revenue_Proportion = ((TOTALSELLAMOUNT - LASTTOTALSELLAMOUNT) / LASTTOTALSELLAMOUNT).ToString("P2");
revenueModel.Ticke_Proportion = ((TICKETCOUNT - LASTTICKETCOUNT).TryParseToDouble() /
LASTTICKETCOUNT.TryParseToDouble()).ToString("P2");
revenueModel.Average_Proportion = ((AVERAGE_AOMOUNT - LASTAVERAGE_AOMOUNT) / LASTAVERAGE_AOMOUNT).ToString("P2");
//循环添加详情值
foreach (DataRow _DataRow in RevenueDetilsTable.Rows)
{
//下部客单交易列表
ESCM.TickeDetils tickeDetils = new ESCM.TickeDetils();
tickeDetils.Statictics_Amount = _DataRow["TICKETCOUNT"].TryParseToDouble();
tickeDetils.Statictics_Date = _DataRow["ENDACCOUNT_DATE"].ToString();
listTickeDetils.Add(tickeDetils);
//营收列表
ESCM.RevenueDetils revenueDetils = new ESCM.RevenueDetils();
revenueDetils.Statictics_Date = _DataRow["ENDACCOUNT_DATE"].ToString();
revenueDetils.Statictics_Amount = _DataRow["TOTALSELLAMOUNT"].TryParseToDouble();
//四川省需要去掉大巴券和会员消费数据
if (pushProvinceCode == "510000")
{
revenueDetils.Statictics_Amount = (_DataRow["TOTALSELLAMOUNT"].TryParseToDouble() -
_DataRow["VIPPERSON"].TryParseToDouble() - _DataRow["COSTBILL"].TryParseToDouble() -
_DataRow["CREDITCARD"].TryParseToDouble());
}
listRevenueDetils.Add(revenueDetils);
//平均价列表
ESCM.AverageDetils averageDetils = new ESCM.AverageDetils();
averageDetils.Statictics_Date = _DataRow["ENDACCOUNT_DATE"].ToString();
averageDetils.Statictics_Amount = _DataRow["AVERAGE_AOMOUNT"].TryParseToDouble();
listAverageDetils.Add(averageDetils);
}
//绑定返回值
revenueModel.listRevenueDetils = listRevenueDetils;
revenueModel.listTickeDetils = listTickeDetils;
revenueModel.listAverageDetils = listAverageDetils;
}
else
{
return Ok(Helper.Common.ReturnJson(102, "未获取到相关营收信息!"));
}
return base.Ok(JsonMsg<ESCM.RevenueModel>.Success(revenueModel, 100, "查询成功"));
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "接口【GetRevenueTrends】", "");
transaction.Rollback();
string msg = "查询失败" + ex.Message;
return Ok(Helper.Common.ReturnJson(999, msg));
}
}
#endregion
#region ->
/// <summary>
/// 通过会员内码获取营收趋势数据
/// </summary>
/// <param name="memberShipId">会员内码</param>
/// <param name="Statictics_Type">统计类型(Year:年报表,Month:月报表,Week:周报表)</param>
/// <param name="Report_Type">报表类型(Revenue:营收金额,Ticke:订单数,Average:客单均价)</param>
/// <param name="Statistics_Date">统计时间</param>
/// <param name="pushProvinceCode">省份编号</param>
/// <returns></returns>
[AcceptVerbs("GET", "POST")]
[Route("WeChat/GetRevenueTrendsById")]
[ResponseType(typeof(JsonMsg<ESCM.RevenueModel>))]
public IHttpActionResult GetRevenueTrendsById(int? memberShipId,
string Statictics_Type, string Report_Type, DateTime? Statistics_Date,
string pushProvinceCode)
{
try
{
//判断会员信息是否存在
MSPB.MEMBERSHIP _MEMBERSHIP = new MSPB.MEMBERSHIP(transaction);
_MEMBERSHIP.AddSearchParameter("MEMBERSHIP_ID", memberShipId);
if (!_MEMBERSHIP.Search())
{
return Ok(Helper.Common.ReturnJson(102, "会员信息有误!"));
}
//判断是否关联后台账号
MSPB.RTPASSPORTINFO _RTPASSPORTINFO = ESCom.Member.GetMemberPassportInfo(
transaction, memberShipId.Value, pushProvinceCode);
if (_RTPASSPORTINFO == null)
{
return Ok(Helper.Common.ReturnJson(103, "未获取到关联的后台账号!"));
}
//判断后台账号信息是否存在
MSPB.USER _User = new MSPB.USER(transaction);
_User.AddSearchParameter("USER_ID", _RTPASSPORTINFO.USER_ID);
_User.AddSearchParameter("PROVINCE_CODE", pushProvinceCode);
if (!_User.Search())
{
return Ok(Helper.Common.ReturnJson(104, "未查询到后台账号信息!"));
}
//获取会员权限
string _UserJurisdiction = _User.USER_CITYAUTHORITY;
ESCM.RevenueModel revenueModel = new ESCM.RevenueModel();
//通过统计类型获取营收合计信息
DataTable RevenueTable = ESCom.Revenue.GetRevenueTrends(transaction,
_UserJurisdiction, Statictics_Type, Statistics_Date.Value, pushProvinceCode);
if (RevenueTable.Rows.Count > 0)
{
//获取营收按天统计详情
DataTable RevenueDetilsTable = ESCom.Revenue.GetRevenueTrendsDetils(transaction,
_UserJurisdiction, Statictics_Type, Statistics_Date.Value, pushProvinceCode);
//营收详情列表
List<ESCM.RevenueDetils> listRevenueDetils = new List<ESCM.RevenueDetils>();
//客单详情列表
List<ESCM.TickeDetils> listTickeDetils = new List<ESCM.TickeDetils>();
//平均价详情列表
List<ESCM.AverageDetils> listAverageDetils = new List<ESCM.AverageDetils>();
//当前周(月)的营收合计信息
double.TryParse(RevenueTable.Compute("SUM(TICKETCOUNT)", "").ToString(), out double TICKETCOUNT);
double.TryParse(RevenueTable.Compute("SUM(TOTALSELLAMOUNT)", "").ToString(), out double TOTALSELLAMOUNT);
//环比周(月)的营收合计信息
double.TryParse(RevenueTable.Compute("SUM(LASTTICKETCOUNT)", "").ToString(), out double LASTTICKETCOUNT);
double.TryParse(RevenueTable.Compute("SUM(LASTTOTALSELLAMOUNT)", "").ToString(), out double LASTTOTALSELLAMOUNT);
//四川省需要去掉大巴券和会员消费数据
if (pushProvinceCode == "510000")
{
double.TryParse(RevenueTable.Compute("SUM(VIPPERSON)", "").ToString(), out double VIPPERSON);//油非互动
double.TryParse(RevenueTable.Compute("SUM(COSTBILL)", "").ToString(), out double COSTBILL);//大巴券
double.TryParse(RevenueTable.Compute("SUM(CREDITCARD)", "").ToString(), out double CREDITCARD);//企业会员
double.TryParse(RevenueTable.Compute("SUM(LASTVIPPERSON)", "").ToString(), out double LASTVIPPERSON);//油非互动
double.TryParse(RevenueTable.Compute("SUM(LASTCOSTBILL)", "").ToString(), out double LASTCOSTBILL);//大巴券
double.TryParse(RevenueTable.Compute("SUM(LASTCREDITCARD)", "").ToString(), out double LASTCREDITCARD);//企业会员
TOTALSELLAMOUNT = (TOTALSELLAMOUNT - VIPPERSON - COSTBILL - CREDITCARD).Round(2);
LASTTOTALSELLAMOUNT = (LASTTOTALSELLAMOUNT - LASTVIPPERSON - LASTCOSTBILL - LASTCREDITCARD).Round(2);
}
//计算客单均价
double LASTAVERAGE_AOMOUNT = (LASTTOTALSELLAMOUNT / LASTTICKETCOUNT).Round(2);
double AVERAGE_AOMOUNT = (TOTALSELLAMOUNT / TICKETCOUNT).Round(2);
//填入数据
revenueModel.Average_Amount = AVERAGE_AOMOUNT;
revenueModel.Ticke_Count = TICKETCOUNT;
revenueModel.Revenue_Amount = TOTALSELLAMOUNT;
revenueModel.Ticke_Difference = (TICKETCOUNT - LASTTICKETCOUNT).Round(2);
revenueModel.Revenue_Difference = (TOTALSELLAMOUNT - LASTTOTALSELLAMOUNT).Round(2);
revenueModel.Average_Difference = (AVERAGE_AOMOUNT - LASTAVERAGE_AOMOUNT).Round(2);
revenueModel.Revenue_Proportion = ((TOTALSELLAMOUNT - LASTTOTALSELLAMOUNT) / LASTTOTALSELLAMOUNT).ToString("P2");
revenueModel.Ticke_Proportion = ((TICKETCOUNT - LASTTICKETCOUNT).TryParseToDouble() / LASTTICKETCOUNT.TryParseToDouble()).ToString("P2");
revenueModel.Average_Proportion = ((AVERAGE_AOMOUNT - LASTAVERAGE_AOMOUNT) / LASTAVERAGE_AOMOUNT).ToString("P2");
//循环添加详情值
foreach (DataRow _DataRow in RevenueDetilsTable.Rows)
{
//下部客单交易列表
ESCM.TickeDetils tickeDetils = new ESCM.TickeDetils();
tickeDetils.Statictics_Amount = _DataRow["TICKETCOUNT"].TryParseToDouble();
tickeDetils.Statictics_Date = _DataRow["ENDACCOUNT_DATE"].ToString();
listTickeDetils.Add(tickeDetils);
//营收列表
ESCM.RevenueDetils revenueDetils = new ESCM.RevenueDetils();
revenueDetils.Statictics_Date = _DataRow["ENDACCOUNT_DATE"].ToString();
revenueDetils.Statictics_Amount = _DataRow["TOTALSELLAMOUNT"].TryParseToDouble();
//四川省需要去掉大巴券和会员消费数据
if (pushProvinceCode == "510000")
{
revenueDetils.Statictics_Amount = (_DataRow["TOTALSELLAMOUNT"].TryParseToDouble() -
_DataRow["VIPPERSON"].TryParseToDouble() - _DataRow["COSTBILL"].TryParseToDouble() -
_DataRow["CREDITCARD"].TryParseToDouble());
}
listRevenueDetils.Add(revenueDetils);
//平均价列表
ESCM.AverageDetils averageDetils = new ESCM.AverageDetils();
averageDetils.Statictics_Date = _DataRow["ENDACCOUNT_DATE"].ToString();
averageDetils.Statictics_Amount = _DataRow["AVERAGE_AOMOUNT"].TryParseToDouble();
listAverageDetils.Add(averageDetils);
}
//绑定返回值
revenueModel.listRevenueDetils = listRevenueDetils;
revenueModel.listTickeDetils = listTickeDetils;
revenueModel.listAverageDetils = listAverageDetils;
}
else
{
return Ok(Helper.Common.ReturnJson(102, "未获取到相关营收信息!"));
}
return base.Ok(JsonMsg<ESCM.RevenueModel>.Success(revenueModel, 100, "查询成功"));
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "接口【GetRevenueTrends】", "");
transaction.Rollback();
string msg = "查询失败" + ex.Message;
return Ok(Helper.Common.ReturnJson(999, msg));
}
}
#endregion
#region ->
/// <summary>
/// 获取营收统计报表
/// </summary>
/// <param name="memberShipId">会员内码</param>
/// <param name="provinceCode">用户省份编码</param>
/// <param name="additionalCode">省外省份编号</param>
/// <param name="startTime">开始时间</param>
/// <param name="endTime">结束时间</param>
/// <returns></returns>
[AcceptVerbs("GET", "POST")]
[Route("WeChat/GetRevenueReport")]
[ResponseType(typeof(JsonMsg<ESCM.RevenueReportModel>))]
public IHttpActionResult GetRevenueReport(int memberShipId,
string provinceCode, DateTime? startTime, DateTime? endTime,
string additionalCode = "")
{
try
{
//判断会员信息是否存在
MSPB.MEMBERSHIP _MEMBERSHIP = new MSPB.MEMBERSHIP(transaction);
_MEMBERSHIP.AddSearchParameter("MEMBERSHIP_ID", memberShipId);
if (!_MEMBERSHIP.Search())
{
return Ok(Helper.Common.ReturnJson(102, "会员信息有误!"));
}
//判断是否关联后台账号
MSPB.RTPASSPORTINFO _RTPASSPORTINFO = ESCom.Member.GetMemberPassportInfo(transaction, memberShipId, provinceCode);
if (_RTPASSPORTINFO == null)
{
return Ok(Helper.Common.ReturnJson(103, "未获取到关联的后台账号!"));
}
//判断后台账号信息是否存在
MSPB.USER _User = new MSPB.USER(transaction);
_User.AddSearchParameter("USER_ID", _RTPASSPORTINFO.USER_ID);
_User.AddSearchParameter("PROVINCE_CODE", provinceCode);
//_User.User_ID = _RTPASSPORTINFO.USER_ID;
if (!_User.Search())
{
return Ok(Helper.Common.ReturnJson(104, "未查询到后台账号信息!"));
}
//获取会员权限
string _UserJurisdiction = _User.USER_CITYAUTHORITY;
//获取营收报表数据
DataTable RevenueTable = ESCom.Revenue.GetRevenueReport(transaction, _UserJurisdiction, startTime, endTime, provinceCode);
DataTable RevenueAdditionalTable = new DataTable();
//当传入的有省外区域时获取省外区域营收数据
if (!string.IsNullOrEmpty(additionalCode))
{
RevenueAdditionalTable = ESCom.Revenue.GetRevenueReport(transaction,
_UserJurisdiction, startTime, endTime, additionalCode.Replace(",", "','"));
}
//绑定省内营收数据
ESCM.RevenueReportModel revenueReportModel = new ESCM.RevenueReportModel();
List<ESCM.RevenueRegionModel> listRevenueRegionModels = new List<ESCM.RevenueRegionModel>();
if (RevenueTable.Rows.Count > 0)
{
double.TryParse(RevenueTable.Compute("SUM(CASHPAY)", "").ToString(), out double Total_Revenue);
double.TryParse(RevenueTable.Compute("SUM(CASHPAY)", "SHOPREGION < 30").ToString(), out double Revenue_AmountS);
double.TryParse(RevenueTable.Compute("SUM(CASHPAY)", "SHOPREGION >= 30").ToString(), out double Revenue_AmountN);
revenueReportModel.Revenue_AmountN = Revenue_AmountN;
revenueReportModel.Revenue_AmountS = Revenue_AmountS;
revenueReportModel.Total_Revenue = Total_Revenue;
revenueReportModel.Province_InsideAmount = Total_Revenue;
//四川省需要去掉大巴券和会员消费数据
if (provinceCode == "510000")
{
//油非互动
double.TryParse(RevenueTable.Compute("SUM(VIPPERSON)", "").ToString(), out double VIPPERSON);//营收合计
double.TryParse(RevenueTable.Compute("SUM(VIPPERSON)", "SHOPREGION < 30").ToString(), out double VIPPERSONS);//东(南)营收合计
double.TryParse(RevenueTable.Compute("SUM(VIPPERSON)", "SHOPREGION >= 30").ToString(), out double VIPPERSONN);//西(北)营收合计
//大巴券合计
double.TryParse(RevenueTable.Compute("SUM(COSTBILL)", "").ToString(), out double COSTBILL);//营收合计
double.TryParse(RevenueTable.Compute("SUM(COSTBILL)", "SHOPREGION < 30").ToString(), out double COSTBILLS);//东(南)营收合计
double.TryParse(RevenueTable.Compute("SUM(COSTBILL)", "SHOPREGION >= 30").ToString(), out double COSTBILLN);//西(北)营收合计
//会员消费合计
double.TryParse(RevenueTable.Compute("SUM(CREDITCARD)", "").ToString(), out double CREDITCARD);//营收合计
double.TryParse(RevenueTable.Compute("SUM(CREDITCARD)", "SHOPREGION < 30").ToString(), out double CREDITCARDS);//东(南)营收合计
double.TryParse(RevenueTable.Compute("SUM(CREDITCARD)", "SHOPREGION >= 30").ToString(), out double CREDITCARDN);//西(北)营收合计
revenueReportModel.Revenue_AmountN = (Revenue_AmountN - VIPPERSONN - COSTBILLN - CREDITCARDN);
revenueReportModel.Revenue_AmountS = (Revenue_AmountS - VIPPERSONS - COSTBILLS - CREDITCARDS);
revenueReportModel.Total_Revenue = (Total_Revenue - VIPPERSON - COSTBILL - CREDITCARD);
Total_Revenue = (Total_Revenue - VIPPERSON - COSTBILL - CREDITCARD);
}
var query = from t in RevenueTable.AsEnumerable()
group t by new
{
t1 = t.Field<string>("SPREGIONTYPE_ID"),
t2 = t.Field<string>("SPREGIONTYPE_NAME")
} into m
select new
{
SPREGIONTYPE_ID = m.Key.t1,
SPREGIONTYPE_NAME = m.Key.t2,
CASHPAY = m.Sum(n => n.Field<decimal>("CASHPAY")),
VIPPERSON = m.Sum(n => n.Field<decimal>("VIPPERSON")),
COSTBILL = m.Sum(n => n.Field<decimal>("COSTBILL")),
CREDITCARD = m.Sum(n => n.Field<decimal>("CREDITCARD"))
};
query.ToList().ForEach(q =>
{
ESCM.RevenueRegionModel revenueRegionModel = new ESCM.RevenueRegionModel();
revenueRegionModel.Region_Name = q.SPREGIONTYPE_NAME;
revenueRegionModel.Total_Revenue = q.CASHPAY.TryParseToDouble();
revenueRegionModel.Revenue_Proportion = (q.CASHPAY.TryParseToDouble() / Total_Revenue).ToString("P2");
//四川省需要去掉大巴券和会员消费数据
if (provinceCode == "510000")
{
revenueRegionModel.Total_Revenue = (q.CASHPAY - q.COSTBILL - q.VIPPERSON - q.CREDITCARD).TryParseToDouble();
revenueRegionModel.Revenue_Proportion = ((q.CASHPAY - q.COSTBILL - q.VIPPERSON - q.CREDITCARD).TryParseToDouble() / Total_Revenue).ToString("P2");
}
listRevenueRegionModels.Add(revenueRegionModel);
List<ESCM.RevenueServerModel> listRevenueServerModels = new List<ESCM.RevenueServerModel>();
var query2 = from t in RevenueTable.AsEnumerable().Where(p => p.Field<string>("SPREGIONTYPE_ID") == q.SPREGIONTYPE_ID)
group t by new
{
t1 = t.Field<decimal>("SERVERPART_ID"),
t2 = t.Field<string>("SERVERPART_NAME"),
t3 = t.Field<string>("SERVERPART_CODE")
} into m
select new
{
SERVERPART_ID = m.Key.t1,
SERVERPART_NAME = m.Key.t2,
SERVERPARTCODE = m.Key.t3,
CASHPAY = m.Sum(n => n.Field<decimal>("CASHPAY")),
VIPPERSON = m.Sum(n => n.Field<decimal>("VIPPERSON")),
COSTBILL = m.Sum(n => n.Field<decimal>("COSTBILL")),
CREDITCARD = m.Sum(n => n.Field<decimal>("CREDITCARD"))
};
query2.ToList().ForEach(m =>
{
ESCM.RevenueServerModel revenueServerModel = new ESCM.RevenueServerModel();
revenueServerModel.Serverpart_Name = m.SERVERPART_NAME;
revenueServerModel.Serverpart_Id = m.SERVERPART_ID.ToString();
revenueServerModel.Revenue_Proportion = (m.CASHPAY.TryParseToDouble() / q.CASHPAY.TryParseToDouble()).ToString("P2");
revenueServerModel.Total_Revenue = m.CASHPAY.TryParseToDouble();
revenueServerModel.Province_Code = provinceCode;
//四川省需要去掉大巴券和会员消费数据
if (provinceCode == "510000")
{
revenueServerModel.Total_Revenue = (m.CASHPAY - m.COSTBILL - m.VIPPERSON - m.CREDITCARD).TryParseToDouble();
revenueServerModel.Revenue_Proportion = ((m.CASHPAY - m.COSTBILL - m.VIPPERSON - m.CREDITCARD).TryParseToDouble() /
(q.CASHPAY - q.COSTBILL - q.VIPPERSON - q.CREDITCARD).TryParseToDouble()).ToString("P2");
}
listRevenueServerModels.Add(revenueServerModel);
});
revenueRegionModel.revenueServerModels = listRevenueServerModels;
});
revenueReportModel.revenueRegionModels = listRevenueRegionModels;
}
else
{
return Ok(Helper.Common.ReturnJson(102, "未获取到相关营收信息!"));
}
//绑定省外营收数据
if (RevenueAdditionalTable != null && RevenueAdditionalTable.Rows.Count > 0)
{
List<ESCM.RevenueRegionModel> listInsideRegionModels = new List<ESCM.RevenueRegionModel>();
double.TryParse(RevenueAdditionalTable.Compute("SUM(CASHPAY)", "").ToString(), out double Total_Revenue);
revenueReportModel.Total_Revenue += Total_Revenue;
revenueReportModel.Province_ExternalAmount = Total_Revenue;
var query = from t in RevenueAdditionalTable.AsEnumerable()
group t by new
{
t1 = t.Field<string>("SPREGIONTYPE_ID"),
t2 = t.Field<string>("SPREGIONTYPE_NAME")
} into m
select new
{
SPREGIONTYPE_ID = m.Key.t1,
SPREGIONTYPE_NAME = m.Key.t2,
CASHPAY = m.Sum(n => n.Field<decimal>("CASHPAY"))
};
query.ToList().ForEach(q =>
{
ESCM.RevenueRegionModel revenueRegionModel = new ESCM.RevenueRegionModel();
revenueRegionModel.Region_Name = q.SPREGIONTYPE_NAME;
revenueRegionModel.Total_Revenue = q.CASHPAY.TryParseToDouble();
revenueRegionModel.Revenue_Proportion = (q.CASHPAY.TryParseToDouble() / Total_Revenue).ToString("P2");
listInsideRegionModels.Add(revenueRegionModel);
List<ESCM.RevenueServerModel> listRevenueServerModels = new List<ESCM.RevenueServerModel>();
var query2 = from t in RevenueAdditionalTable.AsEnumerable().Where(p => p.Field<string>("SPREGIONTYPE_ID") == q.SPREGIONTYPE_ID)
group t by new
{
t1 = t.Field<decimal>("SERVERPART_ID"),
t2 = t.Field<string>("SERVERPART_NAME"),
t3 = t.Field<string>("SERVERPART_CODE"),
t4 = t.Field<string>("PROVINCE_CODE")
} into m
select new
{
SERVERPART_ID = m.Key.t1,
SERVERPART_NAME = m.Key.t2,
SERVERPARTCODE = m.Key.t3,
PROVINCE_CODE = m.Key.t4,
CASHPAY = m.Sum(n => n.Field<decimal>("CASHPAY"))
};
query2.ToList().ForEach(m =>
{
ESCM.RevenueServerModel revenueServerModel = new ESCM.RevenueServerModel();
revenueServerModel.Serverpart_Name = m.SERVERPART_NAME;
revenueServerModel.Serverpart_Id = m.SERVERPART_ID.ToString();
revenueServerModel.Revenue_Proportion = (m.CASHPAY.TryParseToDouble() / q.CASHPAY.TryParseToDouble()).ToString("P2");
revenueServerModel.Total_Revenue = m.CASHPAY.TryParseToDouble();
revenueServerModel.Province_Code = m.PROVINCE_CODE;
listRevenueServerModels.Add(revenueServerModel);
});
revenueRegionModel.revenueServerModels = listRevenueServerModels;
});
revenueReportModel.revenueInsideRegionModels = listInsideRegionModels;
}
return base.Ok(JsonMsg<ESCM.RevenueReportModel>.Success(revenueReportModel, 100, "查询成功"));
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "接口【GetRevenueReport】", "");
transaction.Rollback();
string msg = "查询失败" + ex.Message;
return Ok(Helper.Common.ReturnJson(999, msg));
}
}
#endregion
#region ->
/// <summary>
/// 获取营收统计详情
/// </summary>
/// <param name="Serverpart_Id">服务区内码</param>
/// <param name="startTime">开始时间</param>
/// <param name="endTime">结束时间</param>
/// <param name="pushProvinceCode">省份编号</param>
/// <returns></returns>
[AcceptVerbs("GET", "POST")]
[Route("WeChat/GetRevenueReportDetils")]
[ResponseType(typeof(JsonMsg<ESCM.RevenueReportDetilsModel>))]
public IHttpActionResult GetRevenueReportDetils(int Serverpart_Id,
DateTime? startTime, DateTime? endTime, string pushProvinceCode)
{
try
{
//获取营收报表数据
DataTable RevenueDetilsTable = ESCom.Revenue.GetRevenueReportDetils(transaction, Serverpart_Id, startTime, endTime, pushProvinceCode);
//定义返回对象
ESCM.RevenueReportDetilsModel revenueReportDetilsModel = new ESCM.RevenueReportDetilsModel();
List<ESCM.RevenueReportDetilsDate> listRevenueReportDetilsDates = new List<ESCM.RevenueReportDetilsDate>();
if (RevenueDetilsTable.Rows.Count > 0)
{
//获取服务区区域名称
string Nname = ""; string Sname = "";
ESCom.Revenue.GetRegionName(transaction, Serverpart_Id, pushProvinceCode, ref Nname, ref Sname);
//获取合计统计信息
double.TryParse(RevenueDetilsTable.Compute("SUM(CASHPAY)", "").ToString(), out double Total_Revenue);//营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(CASHPAY)", "SHOPREGION < 30").ToString(), out double Revenue_AmountS);//东(南)营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(CASHPAY)", "SHOPREGION >= 30").ToString(), out double Revenue_AmountN);//西(北)营收合计
//赋值返回对象
revenueReportDetilsModel.Serverpart_RevenueN = Revenue_AmountN;
revenueReportDetilsModel.Serverpart_RevenueS = Revenue_AmountS;
revenueReportDetilsModel.Serverpart_N = Nname;
revenueReportDetilsModel.Serverpart_S = Sname;
revenueReportDetilsModel.Serverpart_Revenue = Total_Revenue;
revenueReportDetilsModel.Serverpart_Name = RevenueDetilsTable.Rows[0]["SERVERPART_NAME"].ToString();
//四川省需要去掉大巴券和会员消费数据
if (pushProvinceCode == "510000")
{
//油非互动
double.TryParse(RevenueDetilsTable.Compute("SUM(VIPPERSON)", "").ToString(), out double VIPPERSON);//营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(VIPPERSON)", "SHOPREGION < 30").ToString(), out double VIPPERSONS);//东(南)营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(VIPPERSON)", "SHOPREGION >= 30").ToString(), out double VIPPERSONN);//西(北)营收合计
//大巴券
double.TryParse(RevenueDetilsTable.Compute("SUM(COSTBILL)", "").ToString(), out double COSTBILL);//营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(COSTBILL)", "SHOPREGION < 30").ToString(), out double COSTBILLS);//东(南)营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(COSTBILL)", "SHOPREGION >= 30").ToString(), out double COSTBILLN);//西(北)营收合计
//会员消费合计
double.TryParse(RevenueDetilsTable.Compute("SUM(CREDITCARD)", "").ToString(), out double CREDITCARD);//营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(CREDITCARD)", "SHOPREGION < 30").ToString(), out double CREDITCARDS);//东(南)营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(CREDITCARD)", "SHOPREGION >= 30").ToString(), out double CREDITCARDN);//西(北)营收合计
revenueReportDetilsModel.Serverpart_RevenueN = (Revenue_AmountN - VIPPERSONN - COSTBILLN - CREDITCARDN);
revenueReportDetilsModel.Serverpart_RevenueS = (Revenue_AmountS - VIPPERSONS - COSTBILLS - CREDITCARDS);
revenueReportDetilsModel.Serverpart_Revenue = (Total_Revenue - VIPPERSON - COSTBILL - CREDITCARD);
}
//按统计时间分组
var query = from t in RevenueDetilsTable.AsEnumerable()
group t by new
{
t1 = t.Field<DateTime>("ENDACCOUNT_DATE")
} into m
select new
{
ENDACCOUNT_DATE = m.Key.t1
};
query.ToList().ForEach(q =>
{
//生成详情对象,赋值统计时间
ESCM.RevenueReportDetilsDate revenueReportDetilsDate = new ESCM.RevenueReportDetilsDate();
revenueReportDetilsDate.Statistics_Date = q.ENDACCOUNT_DATE;
listRevenueReportDetilsDates.Add(revenueReportDetilsDate);
List<ESCM.RevenueReportDetils> listRevenueReportDetils = new List<ESCM.RevenueReportDetils>();
//获取统计日期下的所有门店和上传方式分组数据
var query2 = from t in RevenueDetilsTable.AsEnumerable().Where(p => p.Field<DateTime>("ENDACCOUNT_DATE") == q.ENDACCOUNT_DATE)
group t by new
{
t1 = t.Field<string>("WORKER_NAME"),
t2 = t.Field<string>("SHOPSHORTNAME"),
t3 = t.Field<string>("IMAGE_PATH")
} into m
select new
{
WORKER_NAME = m.Key.t1,
SHOPSHORTNAME = m.Key.t2,
IMAGE_PATH = m.Key.t3,
CASHPAY = m.Sum(n => n.Field<decimal>("CASHPAY"))
};
//循环赋值对象
query2.ToList().ForEach(m =>
{
List<ESCM.RevenueReportDetils> _list = listRevenueReportDetils.FindAll(p => p.BusinessType_Name == m.SHOPSHORTNAME);
if (_list.Count == 0)
{
ESCM.RevenueReportDetils revenueReportDetils = new ESCM.RevenueReportDetils();
//赋值返回值
revenueReportDetils.BusinessType_Name = m.SHOPSHORTNAME;
//判断数据上传方式是接口还是扫码
if (m.WORKER_NAME.Contains("扫"))
{
revenueReportDetils.Upload_Type = "1";
}
else if (m.WORKER_NAME.Contains("接口"))
{
revenueReportDetils.Upload_Type = "2";
}
else
{
revenueReportDetils.Upload_Type = "0";
}
if (!string.IsNullOrEmpty(m.IMAGE_PATH))
{
revenueReportDetils.BusinessType_Logo = _CoopMerchantUrl + m.IMAGE_PATH;
}
revenueReportDetils.Serverpart_N = Nname;
revenueReportDetils.Serverpart_S = Sname;
//合计东西区各部分金额是多少
double.TryParse(RevenueDetilsTable.Compute("SUM(CASHPAY)", "SHOPREGION >= 30 AND SHOPSHORTNAME = '" +
m.SHOPSHORTNAME + "' AND ENDACCOUNT_DATE = '" + q.ENDACCOUNT_DATE + "'").ToString(), out Revenue_AmountN);//西(北)区金额
double.TryParse(RevenueDetilsTable.Compute("SUM(CASHPAY)", "SHOPREGION < 30 AND SHOPSHORTNAME = '" +
m.SHOPSHORTNAME + "' AND ENDACCOUNT_DATE = '" + q.ENDACCOUNT_DATE + "'").ToString(), out Revenue_AmountS);//东(南)区金额
double.TryParse(RevenueDetilsTable.Compute("SUM(CASHPAY)", "SHOPSHORTNAME = '" + m.SHOPSHORTNAME +
"' AND ENDACCOUNT_DATE = '" + q.ENDACCOUNT_DATE + "'").ToString(), out double Revenue_Amount);//业态实收金额
revenueReportDetils.Serverpart_RevenueN = Revenue_AmountN;
revenueReportDetils.Serverpart_RevenueS = Revenue_AmountS;
revenueReportDetils.BusinessType_Revenue = Revenue_Amount;
//四川省需要去掉大巴券和会员消费数据
if (pushProvinceCode == "510000")
{
//油非互动
double.TryParse(RevenueDetilsTable.Compute("SUM(VIPPERSON)", "SHOPSHORTNAME = '" + m.SHOPSHORTNAME +
"' AND ENDACCOUNT_DATE = '" + q.ENDACCOUNT_DATE + "'").ToString(), out double VIPPERSON);//营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(VIPPERSON)", "SHOPREGION < 30 AND SHOPSHORTNAME = '" +
m.SHOPSHORTNAME + "' AND ENDACCOUNT_DATE = '" + q.ENDACCOUNT_DATE + "'").ToString(), out double VIPPERSONS);//东(南)营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(VIPPERSON)", "SHOPREGION >= 30 AND SHOPSHORTNAME = '" +
m.SHOPSHORTNAME + "' AND ENDACCOUNT_DATE = '" + q.ENDACCOUNT_DATE + "'").ToString(), out double VIPPERSONN);//西(北)营收合计
//大巴券合计
double.TryParse(RevenueDetilsTable.Compute("SUM(COSTBILL)", "SHOPSHORTNAME = '" + m.SHOPSHORTNAME +
"' AND ENDACCOUNT_DATE = '" + q.ENDACCOUNT_DATE + "'").ToString(), out double COSTBILL);//营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(COSTBILL)", "SHOPREGION < 30 AND SHOPSHORTNAME = '" +
m.SHOPSHORTNAME + "' AND ENDACCOUNT_DATE = '" + q.ENDACCOUNT_DATE + "'").ToString(), out double COSTBILLS);//东(南)营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(COSTBILL)", "SHOPREGION >= 30 AND SHOPSHORTNAME = '" +
m.SHOPSHORTNAME + "' AND ENDACCOUNT_DATE = '" + q.ENDACCOUNT_DATE + "'").ToString(), out double COSTBILLN);//西(北)营收合计
//会员消费合计
double.TryParse(RevenueDetilsTable.Compute("SUM(CREDITCARD)", "SHOPSHORTNAME = '" + m.SHOPSHORTNAME +
"' AND ENDACCOUNT_DATE = '" + q.ENDACCOUNT_DATE + "'").ToString(), out double CREDITCARD);//营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(CREDITCARD)", "SHOPREGION < 30 AND SHOPSHORTNAME = '" +
m.SHOPSHORTNAME + "' AND ENDACCOUNT_DATE = '" + q.ENDACCOUNT_DATE + "'").ToString(), out double CREDITCARDS);//东(南)营收合计
double.TryParse(RevenueDetilsTable.Compute("SUM(CREDITCARD)", "SHOPREGION >= 30 AND SHOPSHORTNAME = '" +
m.SHOPSHORTNAME + "' AND ENDACCOUNT_DATE = '" + q.ENDACCOUNT_DATE + "'").ToString(), out double CREDITCARDN);//西(北)营收合计
revenueReportDetils.Serverpart_RevenueN = (Revenue_AmountN - VIPPERSONN - COSTBILLN - CREDITCARDN);
revenueReportDetils.Serverpart_RevenueS = (Revenue_AmountS - VIPPERSONS - COSTBILLS - CREDITCARDS);
revenueReportDetils.BusinessType_Revenue = (Revenue_Amount - VIPPERSON - COSTBILL - CREDITCARD);
}
listRevenueReportDetils.Add(revenueReportDetils);
}
else
{
//当不同区上传方式不同时,自能存在一条,以(接口>扫码>普通)方式存在
int _Upload_Type = 0;
if (m.WORKER_NAME.Contains("扫"))
{
_Upload_Type = 1;
}
else if (m.WORKER_NAME.Contains("接口"))
{
_Upload_Type = 2;
}
if (_list[0].Upload_Type.TryParseToInt() < _Upload_Type)
{
_list[0].Upload_Type = _Upload_Type.ToString();
}
}
});
revenueReportDetilsDate.revenueReportDetils = listRevenueReportDetils;
});
revenueReportDetilsModel.revenueReportDetilsDates = listRevenueReportDetilsDates;
}
else
{
return Ok(Helper.Common.ReturnJson(102, "未获取到相关营收信息!"));
}
return base.Ok(JsonMsg<ESCM.RevenueReportDetilsModel>.Success(revenueReportDetilsModel, 100, "查询成功"));
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "接口【GetRevenueReportDetils】", "");
transaction.Rollback();
string msg = "查询失败" + ex.Message;
return Ok(Helper.Common.ReturnJson(999, msg));
}
}
#endregion
#region ->
/// <summary>
/// 获取单品统计详细商品排名数据
/// </summary>
/// <param name="membershipId">会员内码</param>
/// <param name="startDate">开始时间</param>
/// <param name="endDate">结束时间</param>
/// <param name="serverpart_Code">服务区编号</param>
/// <param name="brand_Id">品牌内码</param>
/// <param name="ReportType">统计类型(All:全部,NORTH:西(北),SOUTH:东(南),不传默认全部)</param>
/// <param name="orderByFactor">排序条件(TOTALCOUNT:销售数量,TOTALSELLAMOUNT:销售金额,默认按销售数量)</param>
/// <param name="DataType">数据类型:<br/>1【按日查询】<br/>2【按月查询】</param>
/// <returns></returns>
[AcceptVerbs("GET", "POST")]
[Route("WeChat/GetProductSellDetils")]
[ResponseType(typeof(JsonMsg<ESCM.ProductSellByRegion>))]
public IHttpActionResult GetProductSellDetils(int membershipId, DateTime startDate, DateTime endDate,
string serverpart_Code, string brand_Id, string ReportType = "All", string orderByFactor = "TOTALCOUNT", int DataType = 1)
{
LogUtil.WriteLog(null, "入参信息:会员内码【" + membershipId + "】,查询开始日期【" + startDate + "】," +
"查询结束日期【" + endDate + "】,服务区编号【" + serverpart_Code + "】,品牌内码【" + brand_Id + "】," +
"统计类型【" + ReportType + "】,排序条件【" + orderByFactor + "】,数据类型【" + DataType + "】",
DateTime.Now.ToString() + "_GetProductSellDetils");
try
{
//生成区域信息
ESCM.ProductSellByRegion productSellByRegion = new ESCM.ProductSellByRegion();
//判断会员信息是否存在
MSPB.MEMBERSHIP _MEMBERSHIP = new MSPB.MEMBERSHIP(transaction);
_MEMBERSHIP.AddSearchParameter("MEMBERSHIP_ID", membershipId);
if (!_MEMBERSHIP.Search())
{
return Ok(Helper.Common.ReturnJson(102, "会员信息有误!"));
}
//获取服务区区域名称
string Nname = ""; string Sname = "";
ESCom.Revenue.GetRegionName(transaction, serverpart_Code, ref Nname, ref Sname);
//获取全部列表
DataTable RegionTable = ESCom.Revenue.GetProductRegionDetils(transaction, DataType,
startDate, endDate, serverpart_Code, brand_Id, orderByFactor, ReportType);
if (RegionTable.Rows.Count > 0)
{
switch (ReportType)
{
case "All":
productSellByRegion.Region_Name = "全部";
break;
case "NORTH":
productSellByRegion.Region_Name = Nname;
break;
case "SOUTH":
productSellByRegion.Region_Name = Sname;
break;
default:
break;
}
productSellByRegion.TotalSell_Amount = RegionTable.Compute("SUM(TOTALSELLAMOUNT)", "").TryParseToDecimal();
productSellByRegion.Total_Count = RegionTable.Compute("SUM(TOTALCOUNT)", "").TryParseToDecimal();
//生成商品排行详情数据
List<ESCM.ProductSellRankingModel> _listProductSellRankingModel = new List<ESCM.ProductSellRankingModel>();
foreach (DataRow _DataRow in RegionTable.Rows)
{
ESCM.ProductSellRankingModel productSellRankingModel = new ESCM.ProductSellRankingModel();
productSellRankingModel.Commodity_Name = _DataRow["COMMODITY_NAME"].ToString();
productSellRankingModel.Total_Count = _DataRow["TOTALCOUNT"].TryParseToDecimal();
productSellRankingModel.TotalSell_Amount = _DataRow["TOTALSELLAMOUNT"].TryParseToDecimal();
productSellRankingModel.Unit_Price = _DataRow["COMMODITY_CURRPRICE"].TryParseToDecimal();
if (_listProductSellRankingModel.Count < 20)
{
_listProductSellRankingModel.Add(productSellRankingModel);
}
else
{
break;
}
}
productSellByRegion.productSellRankingModels = _listProductSellRankingModel;
}
//返回数据
return Ok(JsonMsg<ESCM.ProductSellByRegion>.Success(productSellByRegion, 100, "查询成功"));
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "接口【GetProductSellDetils】", "");
transaction.Rollback();
string msg = "查询失败" + ex.Message;
return Ok(Helper.Common.ReturnJson(999, msg));
}
}
/// <summary>
/// 获取单品按服务区品牌统计列表
/// </summary>
/// <param name="membershipId">会员内码</param>
/// <param name="startDate">开始时间</param>
/// <param name="endDate">结束时间</param>
/// <param name="orderByFactor">排序条件(TOTALCOUNT:销售数量,TOTALSELLAMOUNT:销售金额,TICKETCOUNT:客单数量,默认按销售数量)</param>
/// <param name="DataType">数据类型:<br/>1【按日查询】<br/>2【按月查询】</param>
/// <returns></returns>
[AcceptVerbs("GET", "POST")]
[Route("WeChat/GetProductSellByBrand")]
[ResponseType(typeof(JsonMsg<JsonList<ESCM.ProductSellModel>>))]
public IHttpActionResult GetProductSellByBrand(int membershipId, DateTime startDate,
DateTime endDate, string orderByFactor = "TOTALCOUNT", int DataType = 1)
{
try
{
//定义返回的数据对象
List<ESCM.ProductSellModel> listProductSellModel = new List<ESCM.ProductSellModel>();
//判断会员信息是否存在
MSPB.MEMBERSHIP _MEMBERSHIP = new MSPB.MEMBERSHIP(transaction);
_MEMBERSHIP.AddSearchParameter("MEMBERSHIP_ID", membershipId);
if (!_MEMBERSHIP.Search())
{
return Ok(Helper.Common.ReturnJson(102, "会员信息有误!"));
}
//定义获取人员权限的变量
string provinceCodes = string.Empty;
string serverpartShopCodes = string.Empty;
//调用方法获取会员门店权限
ESCom.Serverpart.GetServerpartShopCode(transaction, membershipId, ref provinceCodes, ref serverpartShopCodes);
//获取服务区枚举对象
FieldEnum fieldEnum = DictionaryHelper.GetFieldEnum("DIVISION_CODE", provinceCodes, transaction);
//获取品牌数据列表
DataTable brandTable = ESCom.Revenue.GetBrandTable(transaction);
//通过权限获取单品销售数据
DataTable ProductSellTable = ESCom.Revenue.GetProductSell(transaction,
DataType, serverpartShopCodes, startDate, endDate);
DataTable ProductTicketTable = ESCom.Revenue.GetProductTickeCount(transaction,
serverpartShopCodes, startDate, endDate);
//判断是否存在单品数据
if (ProductSellTable.Rows.Count <= 0)
{
return Ok(Helper.Common.ReturnJson(103, "未查询到单品销售信息!"));
}
//获取服务区列表数据
var query = from t in ProductSellTable.AsEnumerable()
group t by new
{
t1 = t.Field<string>("SERVERPART_CODE"),
t2 = t.Field<string>("SERVERPART_NAME")
} into m
select new
{
SERVERPART_CODE = m.Key.t1,
SERVERPART_NAME = m.Key.t2,
TOTALCOUNT = m.Sum(n => n.Field<decimal>("TOTALCOUNT")),
TOTALSELLAMOUNT = m.Sum(n => n.Field<decimal>("TOTALSELLAMOUNT")),
TICKETCOUNT = m.Sum(n => n.Field<decimal>("TICKETCOUNT"))
};
if (orderByFactor == "TOTALCOUNT")
{
//生成返回的数据对象
query.OrderByDescending(p => p.TOTALCOUNT).ToList().ForEach(q =>
{
//定义详情对象
List<ESCM.ProductSellDetilsModel> listProductSellDetils = new List<ESCM.ProductSellDetilsModel>();
ESCM.ProductSellModel productSellModel = new ESCM.ProductSellModel();
//绑定服务区名数据
productSellModel.Serverpart_Name = q.SERVERPART_NAME;
//绑定详情数据
var query2 = from t in ProductSellTable.AsEnumerable().Where(p =>
p.Field<string>("SERVERPART_CODE") == q.SERVERPART_CODE)
group t by new
{
t1 = t.Field<string>("SERVERPART_CODE"),
t2 = t.Field<decimal>("BUSINESS_BRAND")
} into m
select new
{
SERVERPART_CODE = m.Key.t1,
BUSINESS_BRAND = m.Key.t2,
TOTALCOUNT = m.Sum(n => n.Field<decimal>("TOTALCOUNT")),
TOTALSELLAMOUNT = m.Sum(n => n.Field<decimal>("TOTALSELLAMOUNT")),
TICKETCOUNT = m.Sum(n => n.Field<decimal>("TICKETCOUNT"))
};
query2.OrderByDescending(p => p.TOTALCOUNT).ToList().ForEach(n =>
{
//生成对象
List<ESCM.ProductSellRankingModel> listProductSellRanking = new List<ESCM.ProductSellRankingModel>();
ESCM.ProductSellDetilsModel productSellDetilsModel = new ESCM.ProductSellDetilsModel();
//绑定品牌数据
DataRow[] _Rows = brandTable.Select("BRAND_ID = '" + n.BUSINESS_BRAND + "'");
if (_Rows.Length > 0)
{
productSellDetilsModel.Brand_Name = _Rows[0]["BRAND_NAME"].ToString();
if (!string.IsNullOrEmpty(_Rows[0]["BRAND_INTRO"].ToString()))
productSellDetilsModel.Brand_ICO = _CoopMerchantUrl + _Rows[0]["BRAND_INTRO"].ToString();
}
productSellDetilsModel.TotalSell_Amount = n.TOTALSELLAMOUNT;
//查询客单数据
_Rows = ProductTicketTable.Select("SERVERPARTCODE = '" +
n.SERVERPART_CODE + "' AND BUSINESS_BRAND= '" + n.BUSINESS_BRAND + "'");
if (_Rows.Length > 0)
{
productSellDetilsModel.Ticket_Count = _Rows[0]["TICKETCOUNT"].TryParseToDecimal();
productSellDetilsModel.Average_Price = decimal.Parse((n.TOTALSELLAMOUNT /
_Rows[0]["TICKETCOUNT"].TryParseToDecimal()).ToString("0.00"));
}
else
{
productSellDetilsModel.Ticket_Count = n.TICKETCOUNT;
productSellDetilsModel.Average_Price = decimal.Parse((n.TOTALSELLAMOUNT /
n.TICKETCOUNT).ToString("0.00"));
}
productSellDetilsModel.Total_Count = n.TOTALCOUNT;
productSellDetilsModel.Brand_Id = n.BUSINESS_BRAND.ToString();
productSellDetilsModel.Serverpart_Code = n.SERVERPART_CODE;
listProductSellDetils.Add(productSellDetilsModel);
});
//绑定数据
productSellModel.productSellDetilsModels = listProductSellDetils;
listProductSellModel.Add(productSellModel);
});
}
else if (orderByFactor == "TOTALSELLAMOUNT")
{
//生成返回的数据对象
query.OrderByDescending(p => p.TOTALSELLAMOUNT).ToList().ForEach(q =>
{
//定义详情对象
List<ESCM.ProductSellDetilsModel> listProductSellDetilsModel = new List<ESCM.ProductSellDetilsModel>();
ESCM.ProductSellModel productSellModel = new ESCM.ProductSellModel();
//绑定服务区名数据
productSellModel.Serverpart_Name = q.SERVERPART_NAME;
//绑定详情数据
var query2 = from t in ProductSellTable.AsEnumerable().Where(p =>
p.Field<string>("SERVERPART_CODE") == q.SERVERPART_CODE)
group t by new
{
t1 = t.Field<string>("SERVERPART_CODE"),
t2 = t.Field<decimal>("BUSINESS_BRAND")
} into m
select new
{
SERVERPART_CODE = m.Key.t1,
BUSINESS_BRAND = m.Key.t2,
TOTALCOUNT = m.Sum(n => n.Field<decimal>("TOTALCOUNT")),
TOTALSELLAMOUNT = m.Sum(n => n.Field<decimal>("TOTALSELLAMOUNT")),
TICKETCOUNT = m.Sum(n => n.Field<decimal>("TICKETCOUNT"))
};
query2.OrderByDescending(p => p.TOTALCOUNT).ToList().ForEach(n =>
{
//生成对象
List<ESCM.ProductSellRankingModel> listProductSellRanking = new List<ESCM.ProductSellRankingModel>();
ESCM.ProductSellDetilsModel productSellDetilsModel = new ESCM.ProductSellDetilsModel();
//绑定品牌数据
DataRow[] _Rows = brandTable.Select("BRAND_ID = '" + n.BUSINESS_BRAND + "'");
if (_Rows.Length > 0)
{
productSellDetilsModel.Brand_Name = _Rows[0]["BRAND_NAME"].ToString();
if (!string.IsNullOrEmpty(_Rows[0]["BRAND_INTRO"].ToString()))
productSellDetilsModel.Brand_ICO = _CoopMerchantUrl + _Rows[0]["BRAND_INTRO"].ToString();
}
productSellDetilsModel.TotalSell_Amount = n.TOTALSELLAMOUNT;
//查询客单数据
_Rows = ProductTicketTable.Select("SERVERPARTCODE = '" +
n.SERVERPART_CODE + "' AND BUSINESS_BRAND= '" + n.BUSINESS_BRAND + "'");
if (_Rows.Length > 0)
{
productSellDetilsModel.Ticket_Count = _Rows[0]["TICKETCOUNT"].TryParseToDecimal();
productSellDetilsModel.Average_Price = decimal.Parse((n.TOTALSELLAMOUNT /
_Rows[0]["TICKETCOUNT"].TryParseToDecimal()).ToString("0.00"));
}
else
{
productSellDetilsModel.Ticket_Count = n.TICKETCOUNT;
productSellDetilsModel.Average_Price = decimal.Parse((n.TOTALSELLAMOUNT / n.TICKETCOUNT).ToString("0.00"));
}
productSellDetilsModel.Total_Count = n.TOTALCOUNT;
productSellDetilsModel.Brand_Id = n.BUSINESS_BRAND.ToString();
productSellDetilsModel.Serverpart_Code = n.SERVERPART_CODE;
listProductSellDetilsModel.Add(productSellDetilsModel);
});
//绑定数据
productSellModel.productSellDetilsModels = listProductSellDetilsModel;
listProductSellModel.Add(productSellModel);
});
}
else
{
//生成返回的数据对象
query.OrderByDescending(p => p.TICKETCOUNT).ToList().ForEach(q =>
{
//定义详情对象
List<ESCM.ProductSellDetilsModel> listProductSellDetilsModel = new List<ESCM.ProductSellDetilsModel>();
ESCM.ProductSellModel productSellModel = new ESCM.ProductSellModel();
//绑定服务区名数据
productSellModel.Serverpart_Name = q.SERVERPART_NAME;
//绑定详情数据
var query2 = from t in ProductSellTable.AsEnumerable().Where(p =>
p.Field<string>("SERVERPART_CODE") == q.SERVERPART_CODE)
group t by new
{
t1 = t.Field<string>("SERVERPART_CODE"),
t2 = t.Field<decimal>("BUSINESS_BRAND")
} into m
select new
{
SERVERPART_CODE = m.Key.t1,
BUSINESS_BRAND = m.Key.t2,
TOTALCOUNT = m.Sum(n => n.Field<decimal>("TOTALCOUNT")),
TOTALSELLAMOUNT = m.Sum(n => n.Field<decimal>("TOTALSELLAMOUNT")),
TICKETCOUNT = m.Sum(n => n.Field<decimal>("TICKETCOUNT"))
};
query2.OrderByDescending(p => p.TOTALCOUNT).ToList().ForEach(n =>
{
//生成对象
List<ESCM.ProductSellRankingModel> listProductSellRanking = new List<ESCM.ProductSellRankingModel>();
ESCM.ProductSellDetilsModel productSellDetilsModel = new ESCM.ProductSellDetilsModel();
//绑定品牌数据
DataRow[] _Rows = brandTable.Select("BRAND_ID = '" + n.BUSINESS_BRAND + "'");
if (_Rows.Length > 0)
{
productSellDetilsModel.Brand_Name = _Rows[0]["BRAND_NAME"].ToString();
if (!string.IsNullOrEmpty(_Rows[0]["BRAND_INTRO"].ToString()))
productSellDetilsModel.Brand_ICO = _CoopMerchantUrl + _Rows[0]["BRAND_INTRO"].ToString();
}
productSellDetilsModel.TotalSell_Amount = n.TOTALSELLAMOUNT;
//查询客单数据
_Rows = ProductTicketTable.Select("SERVERPARTCODE = '" +
n.SERVERPART_CODE + "' AND BUSINESS_BRAND= '" + n.BUSINESS_BRAND + "'");
if (_Rows.Length > 0)
{
productSellDetilsModel.Ticket_Count = _Rows[0]["TICKETCOUNT"].TryParseToDecimal();
productSellDetilsModel.Average_Price = decimal.Parse((n.TOTALSELLAMOUNT /
_Rows[0]["TICKETCOUNT"].TryParseToDecimal()).ToString());
}
else
{
productSellDetilsModel.Ticket_Count = n.TICKETCOUNT;
productSellDetilsModel.Average_Price = decimal.Parse((n.TOTALSELLAMOUNT / n.TICKETCOUNT).ToString());
}
productSellDetilsModel.Total_Count = n.TOTALCOUNT;
productSellDetilsModel.Brand_Id = n.BUSINESS_BRAND.ToString();
productSellDetilsModel.Serverpart_Code = n.SERVERPART_CODE;
listProductSellDetilsModel.Add(productSellDetilsModel);
});
//绑定数据
productSellModel.productSellDetilsModels = listProductSellDetilsModel;
listProductSellModel.Add(productSellModel);
});
}
//生成返回值
JsonList<ESCM.ProductSellModel> jsonList = JsonList<ESCM.ProductSellModel>.Success(listProductSellModel);
//返回数据
return Ok(JsonMsg<JsonList<ESCM.ProductSellModel>>.Success(jsonList, 100, "查询成功"));
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "接口【GetProductSellByBrand】", "");
transaction.Rollback();
string msg = "查询失败" + ex.Message;
return Ok(Helper.Common.ReturnJson(999, msg));
}
}
/// <summary>
/// 获取单品品牌统计合计
/// </summary>
/// <param name="membershipId">会员内码</param>
/// <param name="startDate">开始时间</param>
/// <param name="endDate">结束时间</param>
/// <param name="serverpart_Code">服务区编号</param>
/// <param name="brand_Id">品牌内码</param>
/// <param name="DataType">数据类型:<br/>1【按日查询】<br/>2【按月查询】</param>
/// <returns></returns>
[AcceptVerbs("GET", "POST")]
[Route("WeChat/GetBrandSell")]
[ResponseType(typeof(JsonMsg<ESCM.ProductSellDetilsModel>))]
public IHttpActionResult GetBrandSell(int membershipId, DateTime startDate,
DateTime endDate, string serverpart_Code, string brand_Id, int DataType = 1)
{
try
{
//定义返回的数据对象
ESCM.ProductSellDetilsModel productSellDetilsModel = new ESCM.ProductSellDetilsModel();
//判断会员信息是否存在
MSPB.MEMBERSHIP _MEMBERSHIP = new MSPB.MEMBERSHIP(transaction);
_MEMBERSHIP.AddSearchParameter("MEMBERSHIP_ID", membershipId);
if (!_MEMBERSHIP.Search())
{
return Ok(Helper.Common.ReturnJson(102, "会员信息有误!"));
}
//获取品牌数据列表
DataTable brandTable = ESCom.Revenue.GetBrandTable(transaction);
//通过品牌内码获取单品销售数据
DataTable ProductSellTable = ESCom.Revenue.GetBrandSell(transaction,
DataType, startDate, endDate, serverpart_Code, brand_Id);
//通过品牌内码获取单品客单数据
DataTable ProductTicketTable = ESCom.Revenue.GetBrandTicketCount(
transaction, startDate, endDate, serverpart_Code, brand_Id);
//生成返回数据
if (ProductSellTable.Rows.Count > 0)
{
productSellDetilsModel.Brand_Id = ProductSellTable.Rows[0]["BUSINESS_BRAND"].ToString();
//绑定品牌名称
DataRow[] _Rows = brandTable.Select("BRAND_ID = '" + ProductSellTable.Rows[0]["BUSINESS_BRAND"] + "'");
if (_Rows.Length > 0)
{
productSellDetilsModel.Brand_Name = _Rows[0]["BRAND_NAME"].ToString();
if (!string.IsNullOrEmpty(_Rows[0]["BRAND_INTRO"].ToString()))
productSellDetilsModel.Brand_ICO = _CoopMerchantUrl + _Rows[0]["BRAND_INTRO"].ToString();
}
productSellDetilsModel.TotalSell_Amount = ProductSellTable.Rows[0]["TOTALSELLAMOUNT"].TryParseToDecimal();
//绑定客单数量
_Rows = ProductTicketTable.Select("BUSINESS_BRAND = '" + ProductSellTable.Rows[0]["BUSINESS_BRAND"] +
"' AND SERVERPARTCODE = '" + ProductSellTable.Rows[0]["SERVERPART_CODE"] + "'");
if (_Rows.Length > 0)
{
productSellDetilsModel.Ticket_Count = _Rows[0]["TICKETCOUNT"].TryParseToDecimal();
productSellDetilsModel.Average_Price = decimal.Parse((productSellDetilsModel.TotalSell_Amount /
_Rows[0]["TICKETCOUNT"].TryParseToDecimal()).ToString("0.00"));
}
else
{
productSellDetilsModel.Ticket_Count = ProductSellTable.Rows[0]["TICKETCOUNT"].TryParseToDecimal();
productSellDetilsModel.Average_Price = decimal.Parse((productSellDetilsModel.TotalSell_Amount /
ProductSellTable.Rows[0]["TICKETCOUNT"].TryParseToDecimal()).ToString("0.00"));
}
productSellDetilsModel.Total_Count = ProductSellTable.Rows[0]["TOTALCOUNT"].TryParseToDecimal();
productSellDetilsModel.Serverpart_Code = ProductSellTable.Rows[0]["SERVERPART_CODE"].ToString();
productSellDetilsModel.Serverpart_Name = ProductSellTable.Rows[0]["SERVERPART_NAME"].ToString();
}
//返回数据
return Ok(JsonMsg<ESCM.ProductSellDetilsModel>.Success(productSellDetilsModel, 100, "查询成功"));
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "接口【GetBrandSell】", "");
transaction.Rollback();
string msg = "查询失败" + ex.Message;
return Ok(Helper.Common.ReturnJson(999, msg));
}
}
#endregion
#region ->
/// <summary>
/// 获取商家门店营收金额
/// </summary>
/// <param name="MembershipId">商家会员内码</param>
/// <param name="endaccountDate">统计日期,默认昨日</param>
/// <returns></returns>
[AcceptVerbs("GET", "POST")]
[Route("Revenue/GetMerchantRevenue")]
[ResponseType(typeof(JsonMsg<MerchantRevenueModel>))]
public IHttpActionResult GetMerchantRevenue(int MembershipId, string endaccountDate = "")
{
try
{
//查询商家汇总数据
MerchantRevenueModel merchantRevenueModel = Helper.RevenueHelper.GetMerchantRevenue(
transaction, MembershipId, endaccountDate);
//返回最终结果
return base.Ok(JsonMsg<MerchantRevenueModel>.Success(merchantRevenueModel, 100, "查询成功"));
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "接口【GetMerchantRevenue】", "");
transaction.Rollback();
string msg = "查询失败" + ex.Message;
return Ok(Helper.Common.ReturnJson(999, msg));
}
}
#endregion
#region ->
/// <summary>
/// 获取商家门店营收数据详情
/// </summary>
/// <param name="MembershipId">商家会员内码</param>
/// <param name="endaccountDate">统计日期,默认昨日</param>
/// <returns></returns>
[AcceptVerbs("GET", "POST")]
[Route("Revenue/GetMerchantRevenueList")]
[ResponseType(typeof(JsonMsg<MerchantRevenueModel>))]
public IHttpActionResult GetMerchantRevenueList(int MembershipId, string endaccountDate = "")
{
try
{
//查询商家汇总数据
MerchantRevenueModel merchantRevenueModel = Helper.RevenueHelper.GetMerchantRevenueList(
transaction, MembershipId, endaccountDate);
//返回最终结果
return base.Ok(JsonMsg<MerchantRevenueModel>.Success(merchantRevenueModel, 100, "查询成功"));
}
catch (Exception ex)
{
SuperMap.RealEstate.Utility.ErrorLogHelper.Write(ex, "接口【GetMerchantRevenueList】", "");
transaction.Rollback();
string msg = "查询失败" + ex.Message;
return Ok(Helper.Common.ReturnJson(999, msg));
}
}
#endregion
}
}