Commit 81340c2a authored by liudong1993's avatar liudong1993
parents 434b27bd 04506b1e
using VT.FW.DB;
using Mall.Common.Enum.User;
using System;
using System.Collections.Generic;
using System.Text;
namespace Mall.Model.Entity.User
{
/// <summary>
/// 用户统计表实体
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_User_Statistics
{
/// <summary>
/// Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 日期
/// </summary>
public DateTime Date { get; set; }
/// <summary>
/// 付款人数
/// </summary>
public int PeopleNum { get; set; }
/// <summary>
/// 订单数量
/// </summary>
public int OrderNum { get; set; }
/// <summary>
/// 付款金额
/// </summary>
public decimal PayMoney { get; set; }
/// <summary>
/// 购买数量
/// </summary>
public int BuyNum { get; set; }
/// <summary>
/// 平均每人购买单数
/// </summary>
public decimal AvgOrderNum { get; set; }
/// <summary>
/// 平均每人购买件数
/// </summary>
public decimal AvgBuyNum { get; set; }
/// <summary>
/// 平均每单单价
/// </summary>
public decimal AvgUnitPrice { get; set; }
/// <summary>
/// 平均每人购买单价
/// </summary>
public decimal AvgBuyPrice { get; set; }
/// <summary>
/// 会员累计数量
/// </summary>
public int MemberNum { get; set; }
/// <summary>
/// 累计付款人数
/// </summary>
public int PaymentNum { get; set; }
/// <summary>
/// 会员订单转换率
/// </summary>
public decimal MOrderRate { get; set; }
/// <summary>
/// 复购人数
/// </summary>
public int ReBuyNum { get; set; }
/// <summary>
/// 复购率
/// </summary>
public decimal ReBuyRate { get; set; }
/// <summary>
/// 新人下单
/// </summary>
public int NewPeopleNum { get; set; }
/// <summary>
/// 今日普象新增
/// </summary>
public int PXNum { get; set; }
/// <summary>
/// 今日VIP新增
/// </summary>
public int VipNum { get; set; }
/// <summary>
/// 今日银象新增
/// </summary>
public int YXNum { get; set; }
/// <summary>
/// 今日金象新增
/// </summary>
public int JXNum { get; set; }
/// <summary>
/// 利润
/// </summary>
public decimal Profit { get; set; }
/// <summary>
/// 利润率
/// </summary>
public decimal ProfitRate { get; set; }
/// <summary>
/// 小程序id
/// </summary>
public int MallBaseId { get; set; }
/// <summary>
/// 商户号id
/// </summary>
public int TenantId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateDate { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime UpdateDate { get; set; }
/// <summary>
/// 普象累计
/// </summary>
public int PXLJNum { get; set; }
/// <summary>
/// VIP累计
/// </summary>
public int VipLJNum { get; set; }
/// <summary>
/// 银象累计
/// </summary>
public int YXLJNum { get; set; }
/// <summary>
/// 金象累计
/// </summary>
public int JXLJNum { get; set; }
/// <summary>
/// 取消单数
/// </summary>
public int CancelOrderNum { get; set; }
}
}
using VT.FW.DB;
using System;
using System.Collections.Generic;
using System.Text;
using Mall.Model.Entity.User;
using Mall.Common.Enum.MiAi;
namespace Mall.Model.Extend.User
{
/// <summary>
/// 用户统计表扩展实体
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_User_Statistics_Extend : RB_User_Statistics
{
/// <summary>
/// 开始时间
/// </summary>
public string StartTime { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public string EndTime { get; set; }
/// <summary>
/// 日期
/// </summary>
public string DateStr { get; set; }
/// <summary>
/// 月份
/// </summary>
public string DateMonth { get { return this.Date.ToString("yyyy-MM"); } }
/// <summary>
/// 获取其年份
/// </summary>
public int DateYear { get { return this.Date.Year; } }
}
/// <summary>
/// 月度统计
/// </summary>
public class User_Statistics_Query
{
/// <summary>
/// 日期(yyyy-MM)
/// </summary>
public string Date { get; set; }
/// <summary>
/// 付款人数
/// </summary>
public int PeopleNum { get; set; }
/// <summary>
/// 订单数量
/// </summary>
public int OrderNum { get; set; }
/// <summary>
/// 付款金额
/// </summary>
public decimal PayMoney { get; set; }
/// <summary>
/// 购买数量
/// </summary>
public int BuyNum { get; set; }
/// <summary>
/// 累计付款人数
/// </summary>
public int TotalPayPeople { get; set; }
/// <summary>
/// 付款人数
/// </summary>
public decimal MAvgPeopleNum { get; set; }
/// <summary>
/// 订单数量
/// </summary>
public decimal MAvgOrderNum { get; set; }
/// <summary>
/// 付款金额
/// </summary>
public decimal MAvgPayMoney { get; set; }
/// <summary>
/// 购买数量
/// </summary>
public decimal MAvgBuyNum { get; set; }
/// <summary>
/// 平均每人购买单数
/// </summary>
public decimal PAvgOrderNum { get; set; }
/// <summary>
/// 平均每人购买件数
/// </summary>
public decimal PAvgBuyNum { get; set; }
/// <summary>
/// 平均每单单价
/// </summary>
public decimal PAvgUnitPrice { get; set; }
/// <summary>
/// 平均每人购买单价
/// </summary>
public decimal PAvgBuyPrice { get; set; }
/// <summary>
/// 平均会员数量
/// </summary>
public decimal PAvgMemberNum { get; set; }
/// <summary>
/// 平均付款累计人数
/// </summary>
public decimal PAvgPaymentNum { get; set; }
/// <summary>
/// 平均會員下訂單轉換率
/// </summary>
public decimal PAvgMOrderRate { get; set; }
/// <summary>
/// 平均复购人数
/// </summary>
public decimal PAvgReBuyNum { get; set; }
/// <summary>
/// 平均复购率
/// </summary>
public decimal PAvgReBuyRate { get; set; }
/// <summary>
/// 平均新人下单
/// </summary>
public decimal PAvgNewPeopleNum { get; set; }
/// <summary>
/// 平均利润率
/// </summary>
public decimal PAvgProfitRate { get; set; }
/// <summary>
/// 今日普象新增
/// </summary>
public int PXNum { get; set; }
/// <summary>
/// 今日VIP新增
/// </summary>
public int VipNum { get; set; }
/// <summary>
/// 今日银象新增
/// </summary>
public int YXNum { get; set; }
/// <summary>
/// 今日金象新增
/// </summary>
public int JXNum { get; set; }
/// <summary>
/// 总会员数量
/// </summary>
public int TotalMNum { get; set; }
/// <summary>
/// 利润
/// </summary>
public decimal Profit { get; set; }
}
/// <summary>
/// 全部小数的
/// </summary>
public class User_Statistics_Query_V2
{
/// <summary>
/// 日期(yyyy-MM)
/// </summary>
public string Date { get; set; }
/// <summary>
/// 付款人数
/// </summary>
public decimal PeopleNum { get; set; }
/// <summary>
/// 订单数量
/// </summary>
public decimal OrderNum { get; set; }
/// <summary>
/// 付款金额
/// </summary>
public decimal PayMoney { get; set; }
/// <summary>
/// 购买数量
/// </summary>
public decimal BuyNum { get; set; }
/// <summary>
/// 累计付款人数
/// </summary>
public decimal TotalPayPeople { get; set; }
/// <summary>
/// 付款人数
/// </summary>
public decimal MAvgPeopleNum { get; set; }
/// <summary>
/// 订单数量
/// </summary>
public decimal MAvgOrderNum { get; set; }
/// <summary>
/// 付款金额
/// </summary>
public decimal MAvgPayMoney { get; set; }
/// <summary>
/// 购买数量
/// </summary>
public decimal MAvgBuyNum { get; set; }
/// <summary>
/// 平均每人购买单数
/// </summary>
public decimal PAvgOrderNum { get; set; }
/// <summary>
/// 平均每人购买件数
/// </summary>
public decimal PAvgBuyNum { get; set; }
/// <summary>
/// 平均每单单价
/// </summary>
public decimal PAvgUnitPrice { get; set; }
/// <summary>
/// 平均每人购买单价
/// </summary>
public decimal PAvgBuyPrice { get; set; }
/// <summary>
/// 平均会员数量
/// </summary>
public decimal PAvgMemberNum { get; set; }
/// <summary>
/// 平均付款累计人数
/// </summary>
public decimal PAvgPaymentNum { get; set; }
/// <summary>
/// 平均會員下訂單轉換率
/// </summary>
public decimal PAvgMOrderRate { get; set; }
/// <summary>
/// 平均复购人数
/// </summary>
public decimal PAvgReBuyNum { get; set; }
/// <summary>
/// 平均复购率
/// </summary>
public decimal PAvgReBuyRate { get; set; }
/// <summary>
/// 平均新人下单
/// </summary>
public decimal PAvgNewPeopleNum { get; set; }
/// <summary>
/// 平均利润率
/// </summary>
public decimal PAvgProfitRate { get; set; }
/// <summary>
/// 今日普象新增
/// </summary>
public decimal PXNum { get; set; }
/// <summary>
/// 今日VIP新增
/// </summary>
public decimal VipNum { get; set; }
/// <summary>
/// 今日银象新增
/// </summary>
public decimal YXNum { get; set; }
/// <summary>
/// 今日金象新增
/// </summary>
public decimal JXNum { get; set; }
/// <summary>
/// 总会员数量
/// </summary>
public decimal TotalMNum { get; set; }
/// <summary>
/// 利润
/// </summary>
public decimal Profit { get; set; }
}
/// <summary>
/// 月度概率
/// </summary>
public class User_Statistics_Rate_Query
{
/// <summary>
/// 日期(yyyy-MM)
/// </summary>
public string Date { get; set; }
/// <summary>
/// 付款人数
/// </summary>
public decimal MAvgPeopleNum { get; set; }
/// <summary>
/// 订单数量
/// </summary>
public decimal MAvgOrderNum { get; set; }
/// <summary>
/// 付款金额
/// </summary>
public decimal MAvgPayMoney { get; set; }
/// <summary>
/// 购买数量
/// </summary>
public decimal MAvgBuyNum { get; set; }
/// <summary>
/// 平均每人购买单数
/// </summary>
public decimal PAvgOrderNum { get; set; }
/// <summary>
/// 平均每人购买件数
/// </summary>
public decimal PAvgBuyNum { get; set; }
/// <summary>
/// 平均每单单价
/// </summary>
public decimal PAvgUnitPrice { get; set; }
/// <summary>
/// 平均每人购买单价
/// </summary>
public decimal PAvgBuyPrice { get; set; }
/// <summary>
/// 平均會員下訂單轉換率
/// </summary>
public decimal PAvgMOrderRate { get; set; }
/// <summary>
/// 平均利润率
/// </summary>
public decimal PAvgProfitRate { get; set; }
/// <summary>
/// 今日普象新增
/// </summary>
public decimal PAvgPXNum { get; set; }
/// <summary>
/// 今日VIP新增
/// </summary>
public decimal PAvgVipNum { get; set; }
/// <summary>
/// 今日银象新增
/// </summary>
public decimal PAvgYXNum { get; set; }
/// <summary>
/// 今日金象新增
/// </summary>
public decimal PAvgJXNum { get; set; }
/// <summary>
/// 总会员数量
/// </summary>
public decimal PAvgTotalMNum { get; set; }
/// <summary>
/// 利润
/// </summary>
public decimal PAvgProfit { get; set; }
}
}
......@@ -36,6 +36,15 @@ namespace Mall.Model.Query
/// </summary>
public string GoodsName { get; set; }
/// <summary>
/// 付款时间
/// </summary>
public DateTime PaymentTime { get; set; }
/// <summary>
/// 下单用户id
/// </summary>
public int UserId { get; set; }
/// <summary>
/// 商品id
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -1601,7 +1601,7 @@ GROUP BY od.GoodsId,o.OrderId
//GROUP BY b.Id order by b.Id desc";
string sql = $@" SELECT a.OrderSource,a.OrderStatus,sum(b.InsuranceCostMoney) as InsuranceCostMoney,sum(b.InsuranceMoney) as InsuranceMoney,b.CarType,a.OrderClassify,B.Id,b.ServiceCharge,SUM(b.PaidCostMoney) as PaidCostMoney,MAX(b.OrderId) as OrderId,MAX( a.OrderNo) as OrderNo,MAX(b.GoodsName) as GoodsName,b.Specification,MAX(b.Unit_Price) as Unit_Price,SUM(b.Number) as Number,f.`Name` as SupplierName,
string sql = $@" SELECT a.OrderSource,a.OrderStatus,a.PaymentTime,a.UserId,sum(b.InsuranceCostMoney) as InsuranceCostMoney,sum(b.InsuranceMoney) as InsuranceMoney,b.CarType,a.OrderClassify,B.Id,b.ServiceCharge,SUM(b.PaidCostMoney) as PaidCostMoney,MAX(b.OrderId) as OrderId,MAX( a.OrderNo) as OrderNo,MAX(b.GoodsName) as GoodsName,b.Specification,MAX(b.Unit_Price) as Unit_Price,SUM(b.Number) as Number,f.`Name` as SupplierName,
SUM(b.Final_Price) as Final_Price,SUM(b.FreightMoney) as FreightMoney,SUM(b.Final_Price+b.FreightMoney+IFNULL(b.InsuranceMoney,0)) as AllPrice,SUM(b.DepositMoney+b.DepositFreightMoney) as TotalDepositMoney ,
(IFNULL(b.CostMoney,0)) as CostMoney,0 as PackingMoney, 0 as CostFreight,sum(b.FreightCostMoney) as GoodsFreight,
0 as OtherPrice,b.LiveCommission,b.LiveFinanceIds,b.LivePeopleNum,0 as Paid,oa.RefundActual,b.CouponMoney,b.CompanyProfitRate,b.CompanyId,muser.`Name` as CompanyName,b.YSMoney,b.RealMoney,b.YFMoney,b.PayMoney
......@@ -1615,7 +1615,72 @@ GROUP BY b.Id order by b.Id asc";
return GetPage<OrderStatistics_Query>(pageIndex, pageSize, out count, sql, parameters).ToList();
}
/// <summary>
/// 徐总报表使用
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public List<OrderStatistics_Query> GetFXOrderProfitLossList_V2(OrderStatistics_Query dmodel)
{
DynamicParameters parameters = new DynamicParameters();
string where = "where 1=1 and a.OrderStatus in(2,3,4,5,6,7) and a.PaymentTime is not NULL ";
if (dmodel != null)
{
if (!string.IsNullOrWhiteSpace(dmodel.OrderNo))
{
where += $" and a.OrderNo like @OrderNo ";
parameters.Add("OrderNo", "%" + dmodel.OrderNo.Trim() + "%");
}
if (dmodel.TenantId > 0)
{
where += $" and a.TenantId={dmodel.TenantId} ";
}
if (dmodel.MallBaseId > 0)
{
where += $" and a.MallBaseId={dmodel.MallBaseId} ";
}
if (dmodel.SupplierId > 0)
{
where += $" and b.SupplierId={dmodel.SupplierId} ";
}
if (dmodel.OneUserId > 0)
{
where += $" and c.OneUserId={dmodel.OneUserId} and d.TwoUserId={dmodel.OneUserId} ";
}
if (dmodel.GoodsID > 0)
{
where += $" and b.GoodsId={dmodel.GoodsID} ";
}
if (dmodel.CompanyId > 0)
{
where += $" and b.CompanyId={dmodel.CompanyId} ";
}
if (!string.IsNullOrWhiteSpace(dmodel.StartDate))
{
where += $" and DATE_FORMAT(a.PaymentTime,'%Y-%m-%d' )>=DATE_FORMAT('{dmodel.StartDate}','%Y-%m-%d' ) ";
}
if (!string.IsNullOrWhiteSpace(dmodel.EndDate))
{
where += $" and DATE_FORMAT(a.PaymentTime,'%Y-%m-%d' )<= DATE_FORMAT('{dmodel.EndDate}','%Y-%m-%d' ) ";
}
}
string sql = $@" SELECT a.OrderSource,a.OrderStatus,a.PaymentTime,a.UserId,sum(b.InsuranceCostMoney) as InsuranceCostMoney,sum(b.InsuranceMoney) as InsuranceMoney,b.CarType,a.OrderClassify,B.Id,b.ServiceCharge,SUM(b.PaidCostMoney) as PaidCostMoney,MAX(b.OrderId) as OrderId,MAX( a.OrderNo) as OrderNo,MAX(b.GoodsName) as GoodsName,b.Specification,MAX(b.Unit_Price) as Unit_Price,SUM(b.Number) as Number,f.`Name` as SupplierName,
SUM(b.Final_Price) as Final_Price,SUM(b.FreightMoney) as FreightMoney,SUM(b.Final_Price+b.FreightMoney+IFNULL(b.InsuranceMoney,0)) as AllPrice,SUM(b.DepositMoney+b.DepositFreightMoney) as TotalDepositMoney ,
(IFNULL(b.CostMoney,0)) as CostMoney,0 as PackingMoney, 0 as CostFreight,sum(b.FreightCostMoney) as GoodsFreight,
0 as OtherPrice,b.LiveCommission,b.LiveFinanceIds,b.LivePeopleNum,0 as Paid,oa.RefundActual,b.CouponMoney,b.CompanyProfitRate,b.CompanyId,muser.`Name` as CompanyName,b.YSMoney,b.RealMoney,b.YFMoney,b.PayMoney
from rb_goods_orderdetail as b
LEFT JOIN rb_goods_order as A on a.OrderId=b.OrderId
LEFT JOIN rb_supplier as f on f.ID=b.SupplierId
LEFT JOIN rb_member_user as muser on muser.id=b.CompanyId
left join rb_goods_orderaftersale oa on b.ID= oa.OrderDetialId and oa.Type=1 and oa.Status=0 and oa.ReOrderStatus in (2,3,4,5) {where}
GROUP BY b.Id order by b.Id asc";
return Get<OrderStatistics_Query>(sql, parameters).ToList();
}
public List<OrderStatistics_Query> GetFXAllOrderProfitLossList(OrderStatistics_Query dmodel)
{
......@@ -1723,14 +1788,80 @@ GROUP BY b.Id order by b.Id asc";
{
where += $" and b.Id in({dmodel.Ids}) ";
}
if (!string.IsNullOrWhiteSpace(dmodel.StartDate))
//if (!string.IsNullOrWhiteSpace(dmodel.StartDate))
//{
// where += $" and DATE_FORMAT(a.CancelTime,'%Y-%m-%d' )>=DATE_FORMAT('{dmodel.StartDate}','%Y-%m-%d' ) ";
//}
//if (!string.IsNullOrWhiteSpace(dmodel.EndDate))
//{
// where += $" and DATE_FORMAT(a.CancelTime,'%Y-%m-%d' )<= DATE_FORMAT('{dmodel.EndDate}','%Y-%m-%d' ) ";
//}
}
string sql = $@" SELECT a.OrderSource,a.OrderStatus,sum(b.InsuranceCostMoney) as InsuranceCostMoney,sum(b.InsuranceMoney) as InsuranceMoney,b.CarType,a.OrderClassify,B.Id,b.ServiceCharge,SUM(b.PaidCostMoney) as PaidCostMoney,MAX(b.OrderId) as OrderId,MAX( a.OrderNo) as OrderNo,MAX(b.GoodsName) as GoodsName,b.Specification,MAX(b.Unit_Price) as Unit_Price,SUM(b.Number) as Number,f.`Name` as SupplierName,
SUM(b.Final_Price) as Final_Price,SUM(b.FreightMoney) as FreightMoney,SUM(b.Final_Price+b.FreightMoney+IFNULL(b.InsuranceMoney,0)) as AllPrice ,
(IFNULL(b.CostMoney,0)) as CostMoney,0 as PackingMoney, 0 as CostFreight,sum(b.FreightCostMoney) as GoodsFreight,
0 as OtherPrice,b.LiveCommission,b.LiveFinanceIds,b.LivePeopleNum,0 as Paid,b.CouponMoney,b.CompanyProfitRate,b.CompanyId,muser.`Name` as CompanyName,b.YSMoney,b.RealMoney,b.YFMoney,b.PayMoney
from rb_goods_orderdetail as b
LEFT JOIN rb_goods_order as A on a.OrderId=b.OrderId
LEFT JOIN rb_supplier as f on f.ID=b.SupplierId
LEFT JOIN rb_member_user as muser on muser.id=b.CompanyId {where}
GROUP BY b.Id order by b.Id asc";
return Get<OrderStatistics_Query>(sql, parameters).ToList();
}
/// <summary>
/// 徐总统计
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public List<OrderStatistics_Query> GetFXAllCancelOrderProfitLossList_V2(OrderStatistics_Query dmodel)
{
string where = "where 1=1 and a.OrderStatus=7 and a.PaymentTime is not NULL and a.CancelTime is not NULL ";
DynamicParameters parameters = new DynamicParameters();
if (dmodel != null)
{
if (!string.IsNullOrWhiteSpace(dmodel.OrderNo))
{
where += $" and DATE_FORMAT(a.CancelTime,'%Y-%m-%d' )>=DATE_FORMAT('{dmodel.StartDate}','%Y-%m-%d' ) ";
where += $" and a.OrderNo like @OrderNo ";
parameters.Add("OrderNo", "%" + dmodel.OrderNo.Trim() + "%");
}
if (!string.IsNullOrWhiteSpace(dmodel.EndDate))
if (dmodel.TenantId > 0)
{
where += $" and DATE_FORMAT(a.CancelTime,'%Y-%m-%d' )<= DATE_FORMAT('{dmodel.EndDate}','%Y-%m-%d' ) ";
where += $" and a.TenantId={dmodel.TenantId} ";
}
if (dmodel.MallBaseId > 0)
{
where += $" and a.MallBaseId={dmodel.MallBaseId} ";
}
if (dmodel.SupplierId > 0)
{
where += $" and b.SupplierId={dmodel.SupplierId} ";
}
if (dmodel.OneUserId > 0)
{
where += $" and c.OneUserId={dmodel.OneUserId} and d.TwoUserId={dmodel.OneUserId} ";
}
if (dmodel.GoodsID > 0)
{
where += $" and b.GoodsId={dmodel.GoodsID} ";
}
if (dmodel.CompanyId > 0)
{
where += $" and b.CompanyId={dmodel.CompanyId} ";
}
if (!string.IsNullOrWhiteSpace(dmodel.Ids))
{
where += $" and b.Id in({dmodel.Ids}) ";
}
//if (!string.IsNullOrWhiteSpace(dmodel.StartDate))
//{
// where += $" and DATE_FORMAT(a.CancelTime,'%Y-%m-%d' )>=DATE_FORMAT('{dmodel.StartDate}','%Y-%m-%d' ) ";
//}
//if (!string.IsNullOrWhiteSpace(dmodel.EndDate))
//{
// where += $" and DATE_FORMAT(a.CancelTime,'%Y-%m-%d' )<= DATE_FORMAT('{dmodel.EndDate}','%Y-%m-%d' ) ";
//}
}
string sql = $@" SELECT a.OrderSource,a.OrderStatus,sum(b.InsuranceCostMoney) as InsuranceCostMoney,sum(b.InsuranceMoney) as InsuranceMoney,b.CarType,a.OrderClassify,B.Id,b.ServiceCharge,SUM(b.PaidCostMoney) as PaidCostMoney,MAX(b.OrderId) as OrderId,MAX( a.OrderNo) as OrderNo,MAX(b.GoodsName) as GoodsName,b.Specification,MAX(b.Unit_Price) as Unit_Price,SUM(b.Number) as Number,f.`Name` as SupplierName,
SUM(b.Final_Price) as Final_Price,SUM(b.FreightMoney) as FreightMoney,SUM(b.Final_Price+b.FreightMoney+IFNULL(b.InsuranceMoney,0)) as AllPrice ,
......@@ -1791,14 +1922,83 @@ GROUP BY b.Id order by b.Id asc";
{
where += $" and b.Id in({dmodel.Ids}) ";
}
if (!string.IsNullOrWhiteSpace(dmodel.StartDate))
//if (!string.IsNullOrWhiteSpace(dmodel.StartDate))
//{
// where += $" and DATE_FORMAT(oa.FinishTime,'%Y-%m-%d' )>=DATE_FORMAT('{dmodel.StartDate}','%Y-%m-%d' ) ";
//}
//if (!string.IsNullOrWhiteSpace(dmodel.EndDate))
//{
// where += $" and DATE_FORMAT(oa.FinishTime,'%Y-%m-%d' )<= DATE_FORMAT('{dmodel.EndDate}','%Y-%m-%d' ) ";
//}
}
string sql = $@" SELECT a.OrderSource,a.OrderStatus,sum(b.InsuranceCostMoney) as InsuranceCostMoney,sum(b.InsuranceMoney) as InsuranceMoney,b.CarType,a.OrderClassify,B.Id,b.ServiceCharge,SUM(b.PaidCostMoney) as PaidCostMoney,MAX(b.OrderId) as OrderId,MAX( a.OrderNo) as OrderNo,MAX(b.GoodsName) as GoodsName,b.Specification,MAX(b.Unit_Price) as Unit_Price,SUM(b.Number) as Number,f.`Name` as SupplierName,
SUM(b.Final_Price) as Final_Price,SUM(b.FreightMoney) as FreightMoney,SUM(b.Final_Price+b.FreightMoney+IFNULL(b.InsuranceMoney,0)) as AllPrice ,
(IFNULL(b.CostMoney,0)) as CostMoney,0 as PackingMoney, 0 as CostFreight,sum(b.FreightCostMoney) as GoodsFreight,
0 as OtherPrice,b.LiveCommission,b.LiveFinanceIds,b.LivePeopleNum,0 as Paid,oa.RefundActual,b.CouponMoney,b.CompanyProfitRate,b.CompanyId,muser.`Name` as CompanyName,b.YSMoney,b.RealMoney,b.YFMoney,b.PayMoney
from rb_goods_orderaftersale as oa
LEFT JOIN rb_goods_orderdetail as b on b.ID= oa.OrderDetialId
LEFT JOIN rb_goods_order as A on a.OrderId=b.OrderId
LEFT JOIN rb_supplier as f on f.ID=b.SupplierId
LEFT JOIN rb_member_user as muser on muser.id=b.CompanyId
where oa.Type=1 and oa.Status=0 and oa.ReOrderStatus in (2,3,4,5) {where}
GROUP BY b.Id order by b.Id asc";
return Get<OrderStatistics_Query>(sql, parameters).ToList();
}
/// <summary>
/// 徐总统计
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public List<OrderStatistics_Query> GetFXAllAftersaleOrderProfitLossList_V2(OrderStatistics_Query dmodel)
{
string where = " and a.OrderStatus in(2,3,4,5,6,7) and a.PaymentTime is not NULL ";
DynamicParameters parameters = new DynamicParameters();
if (dmodel != null)
{
if (!string.IsNullOrWhiteSpace(dmodel.OrderNo))
{
where += $" and DATE_FORMAT(oa.FinishTime,'%Y-%m-%d' )>=DATE_FORMAT('{dmodel.StartDate}','%Y-%m-%d' ) ";
where += $" and a.OrderNo like @OrderNo ";
parameters.Add("OrderNo", "%" + dmodel.OrderNo.Trim() + "%");
}
if (!string.IsNullOrWhiteSpace(dmodel.EndDate))
if (dmodel.TenantId > 0)
{
where += $" and a.TenantId={dmodel.TenantId} ";
}
if (dmodel.MallBaseId > 0)
{
where += $" and a.MallBaseId={dmodel.MallBaseId} ";
}
if (dmodel.SupplierId > 0)
{
where += $" and b.SupplierId={dmodel.SupplierId} ";
}
if (dmodel.OneUserId > 0)
{
where += $" and DATE_FORMAT(oa.FinishTime,'%Y-%m-%d' )<= DATE_FORMAT('{dmodel.EndDate}','%Y-%m-%d' ) ";
where += $" and c.OneUserId={dmodel.OneUserId} and d.TwoUserId={dmodel.OneUserId} ";
}
if (dmodel.GoodsID > 0)
{
where += $" and b.GoodsId={dmodel.GoodsID} ";
}
if (dmodel.CompanyId > 0)
{
where += $" and b.CompanyId={dmodel.CompanyId} ";
}
if (!string.IsNullOrWhiteSpace(dmodel.Ids))
{
where += $" and b.Id in({dmodel.Ids}) ";
}
//if (!string.IsNullOrWhiteSpace(dmodel.StartDate))
//{
// where += $" and DATE_FORMAT(oa.FinishTime,'%Y-%m-%d' )>=DATE_FORMAT('{dmodel.StartDate}','%Y-%m-%d' ) ";
//}
//if (!string.IsNullOrWhiteSpace(dmodel.EndDate))
//{
// where += $" and DATE_FORMAT(oa.FinishTime,'%Y-%m-%d' )<= DATE_FORMAT('{dmodel.EndDate}','%Y-%m-%d' ) ";
//}
}
string sql = $@" SELECT a.OrderSource,a.OrderStatus,sum(b.InsuranceCostMoney) as InsuranceCostMoney,sum(b.InsuranceMoney) as InsuranceMoney,b.CarType,a.OrderClassify,B.Id,b.ServiceCharge,SUM(b.PaidCostMoney) as PaidCostMoney,MAX(b.OrderId) as OrderId,MAX( a.OrderNo) as OrderNo,MAX(b.GoodsName) as GoodsName,b.Specification,MAX(b.Unit_Price) as Unit_Price,SUM(b.Number) as Number,f.`Name` as SupplierName,
......
......@@ -309,5 +309,87 @@ where {where} order by di.CreateDate desc";
string sql = $@"select di.* from RB_Distributor_Info di where {where} order by di.CreateDate desc";
return Get<RB_Distributor_Info_Extend>(sql).ToList();
}
/// <summary>
/// 获取列表
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public List<RB_Distributor_Info_Extend> GetNewUserForNowDay(RB_Distributor_Info_Extend dmodel, string NowDate)
{
string where = $@" 1=1 and di.{nameof(RB_Distributor_Info.Status)}=0";
if (dmodel.TenantId > 0)
{
where += $@" and di.{nameof(RB_Distributor_Info.TenantId)}={dmodel.TenantId}";
}
if (dmodel.MallBaseId > 0)
{
where += $@" and di.{nameof(RB_Distributor_Info.MallBaseId)}={dmodel.MallBaseId}";
}
if (dmodel.UserId > 0)
{
where += $@" and di.{nameof(RB_Distributor_Info.UserId)}={dmodel.UserId}";
}
if (dmodel.AuditStatus > 0)
{
where += $@" and di.{nameof(RB_Distributor_Info.AuditStatus)}={(int)dmodel.AuditStatus}";
}
if (!string.IsNullOrEmpty(dmodel.UserIds))
{
where += $@" and di.{nameof(RB_Distributor_Info.UserId)} in({dmodel.UserIds})";
}
if (dmodel.GradeId >= 0)
{
where += $@" and di.{nameof(RB_Distributor_Info.GradeId)}={dmodel.GradeId}";
}
if (!string.IsNullOrEmpty(dmodel.Name))
{
where += $@" and (mu.{nameof(RB_Member_User.Name)} like '%{dmodel.Name}%' or di.{nameof(RB_Distributor_Info.Name)} like '%{dmodel.Name}%' )";
}
string sql = $@"select di.*,mu.OpenId,mu.Name as MemberUserName from RB_Distributor_Info di inner join rb_member_user as mu on di.UserId=mu.Id where {where} and mu.CreateDate >='{NowDate}' and mu.CreateDate <='{NowDate} 23:59:59' order by di.CreateDate desc";
return Get<RB_Distributor_Info_Extend>(sql).ToList();
}
/// <summary>
/// 获取当前日期 累计会员数量
/// </summary>
/// <param name="dmodel"></param>
/// <param name="NowDate"></param>
public List<RB_Distributor_Info_Extend> GetMemberDistributorNumberForCutOff(RB_Distributor_Info_Extend dmodel, string NowDate)
{
string where = $@" 1=1 and di.{nameof(RB_Distributor_Info.Status)}=0";
if (dmodel.TenantId > 0)
{
where += $@" and di.{nameof(RB_Distributor_Info.TenantId)}={dmodel.TenantId}";
}
if (dmodel.MallBaseId > 0)
{
where += $@" and di.{nameof(RB_Distributor_Info.MallBaseId)}={dmodel.MallBaseId}";
}
if (dmodel.UserId > 0)
{
where += $@" and di.{nameof(RB_Distributor_Info.UserId)}={dmodel.UserId}";
}
if (dmodel.AuditStatus > 0)
{
where += $@" and di.{nameof(RB_Distributor_Info.AuditStatus)}={(int)dmodel.AuditStatus}";
}
if (!string.IsNullOrEmpty(dmodel.UserIds))
{
where += $@" and di.{nameof(RB_Distributor_Info.UserId)} in({dmodel.UserIds})";
}
if (dmodel.GradeId >= 0)
{
where += $@" and di.{nameof(RB_Distributor_Info.GradeId)}={dmodel.GradeId}";
}
if (!string.IsNullOrEmpty(dmodel.Name))
{
where += $@" and (mu.{nameof(RB_Member_User.Name)} like '%{dmodel.Name}%' or di.{nameof(RB_Distributor_Info.Name)} like '%{dmodel.Name}%' )";
}
string sql = $@"select di.FXGradeId,COUNT(0) AS SortNum from RB_Distributor_Info di inner join rb_member_user as mu on di.UserId=mu.Id where {where} and mu.CreateDate <='{NowDate} 23:59:59' GROUP BY di.FXGradeId";
return Get<RB_Distributor_Info_Extend>(sql).ToList();
}
}
}
......@@ -163,9 +163,6 @@ select * from RB_Member_User where {where} order by CreateDate desc
return Get<RB_Member_User_Extend>(sql).ToList();
}
/// <summary>
/// 获取列表
/// </summary>
......@@ -229,8 +226,6 @@ select * from RB_Member_User where {where} order by CreateDate desc
return Get<RB_Member_User_Extend>(sql).ToList();
}
/// <summary>
/// 获取列表(粉象)
/// </summary>
......@@ -1699,5 +1694,60 @@ FROM RB_Member_User AS a LEFT JOIN rb_miai_baseinfo AS b ON a.Id = b.UserId) as
}
#region 订单统计
/// <summary>
/// 获取日期以前用户数量
/// </summary>
/// <param name="tenantId"></param>
/// <param name="mallBaseId"></param>
/// <param name="startTime"></param>
/// <returns></returns>
public int GetMemberUserTotalNumForDay(int tenantId, int mallBaseId, string startTime)
{
string sql = $" select count(0) as count from RB_Member_User where TenantId={tenantId} and MallBaseId={mallBaseId} and CreateDate <='{startTime} 23:59:59'";
var obj = ExecuteScalar(sql);
return obj == null ? 0 : Convert.ToInt32(obj);
}
/// <summary>
/// 获取日期截止付款用户数量
/// </summary>
/// <param name="tenantId"></param>
/// <param name="mallBaseId"></param>
/// <param name="startTime"></param>
/// <returns></returns>
public int GetMemberUserPayNumForDay(int tenantId, int mallBaseId, string startTime)
{
string sql = $@" SELECT count(0) FROM
(select u.Id from RB_Member_User u
LEFT JOIN rb_goods_order o on u.Id = o.UserId
where u.TenantId={tenantId} and u.MallBaseId={mallBaseId} and u.CreateDate <='{startTime} 23:59:59' and o.PaymentTime is not null
GROUP BY u.Id)t ";
var obj = ExecuteScalar(sql);
return obj == null ? 0 : Convert.ToInt32(obj);
}
/// <summary>
/// 获取日期当天复购人数
/// </summary>
/// <param name="tenantId"></param>
/// <param name="mallBaseId"></param>
/// <param name="startTime"></param>
/// <param name="userIds"></param>
/// <returns></returns>
public int GetMemberReBuyNumForNowDay(int tenantId, int mallBaseId, string startTime, string userIds)
{
string sql = $@"SELECT count(0) FROM
(select u.Id from RB_Member_User u
LEFT JOIN rb_goods_order o on u.Id = o.UserId
where u.TenantId={tenantId} and u.MallBaseId={mallBaseId} and o.OrderStatus <>7 and o.CreateDate <'{startTime}' and o.PaymentTime is not null and u.Id in({userIds})
GROUP BY u.Id)t";
var obj = ExecuteScalar(sql);
return obj == null ? 0 : Convert.ToInt32(obj);
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Mall.Model.Entity.User;
using Mall.Model.Extend.User;
using System.Linq;
using Mall.Common.Enum.User;
using VT.FW.DB.Dapper;
namespace Mall.Repository.User
{
/// <summary>
/// 用户统计仓储层
/// </summary>
public partial class RB_User_StatisticsRepository : BaseRepository<RB_User_Statistics>
{
/// <summary>
/// 获取列表
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public List<RB_User_Statistics_Extend> GetList(RB_User_Statistics_Extend dmodel)
{
string where = " 1=1 ";
if (dmodel.TenantId > 0)
{
where += $@" and {nameof(RB_User_Statistics.TenantId)}={dmodel.TenantId}";
}
if (dmodel.MallBaseId > 0)
{
where += $@" and {nameof(RB_User_Statistics.MallBaseId)}={dmodel.MallBaseId}";
}
if (!string.IsNullOrEmpty(dmodel.StartTime))
{
where += $@" and {nameof(RB_User_Statistics.Date)} >='{dmodel.StartTime}'";
}
if (!string.IsNullOrEmpty(dmodel.EndTime))
{
where += $@" and {nameof(RB_User_Statistics.Date)} <='{dmodel.EndTime} 23:59:59'";
}
string sql = $@"select * from RB_User_Statistics where {where} ";
return Get<RB_User_Statistics_Extend>(sql).ToList();
}
}
}
......@@ -1386,5 +1386,295 @@ namespace Mall.WebApi.Controllers.AppletWeChat
#endregion
#region 电商统计
/// <summary>
/// 电商月度统计
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult GetDSMonthStatistics(object requestMsg)
{
var requestParm = JsonConvert.DeserializeObject<RequestParm>(requestMsg.ToString());
JObject parms = JObject.Parse(requestParm.msg.ToString());
string Month = parms.GetStringValue("Month");//月份
if (string.IsNullOrEmpty(Month)) {
return ApiResult.ParamIsNull();
}
try
{
Month = Convert.ToDateTime(Month).ToString("yyyy-MM");
}
catch (Exception)
{
return ApiResult.Failed("月份格式有误");
}
var Robj = statisticsModule.GetDSMonthStatistics(Month, requestParm.TenantId, requestParm.MallBaseId);
return ApiResult.Success("", Robj);
}
/// <summary>
/// 导出电商月度统计
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public FileContentResult GetDSMonthStatisticsToExcel(object requestMsg)
{
var requestParm = JsonConvert.DeserializeObject<RequestParm>(requestMsg.ToString());
JObject parms = JObject.Parse(requestParm.msg.ToString());
string Month = parms.GetStringValue("Month");//月份
string ExcelName = "电商月度统计" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
List<ExcelDataSource> slist = new List<ExcelDataSource>();
if (string.IsNullOrEmpty(Month))
{
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
try
{
Month = Convert.ToDateTime(Month).ToString("yyyy-MM");
}
catch (Exception)
{
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
ExcelDataSource header = new ExcelDataSource()
{
ExcelRows = new List<ExcelColumn>(23) {
new ExcelColumn(value: "") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均付款人數") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均付款單數") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均付款金額") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均付款件數") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均取消單數") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均每人購買單數") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均每人購買件數") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均每單單價") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均每人購買單價") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均會員累計數") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均付款累計人數") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均會員下單轉換率") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均復夠人數") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均復夠率") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均新人下單") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均普象") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均VIP") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均銀象") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均金象") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER }
},
ColumnHight = 30
};
slist.Add(header);
try
{
List<ExcelDataSource> Rlist = statisticsModule.GetDSMonthStatisticsToExcel(Month, requestParm.TenantId, requestParm.MallBaseId);
slist.AddRange(Rlist);
var byteData = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData, "application/octet-stream", ExcelName);
}
catch (Exception ex)
{
LogHelper.Write(ex, string.Format("GetFileFromWebApi_requestData: {0}", JsonHelper.Serialize(requestMsg.ToString())));
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
}
/// <summary>
/// 每月统计
/// </summary>
/// <param name="requestMsg"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult GetDSMoreMonthStatistics(object requestMsg) {
var requestParm = JsonConvert.DeserializeObject<RequestParm>(requestMsg.ToString());
JObject parms = JObject.Parse(requestParm.msg.ToString());
string StartTime = parms.GetStringValue("StartTime");//开始时间 月
string EndTime = parms.GetStringValue("EndTime");//结束时间 月
if (string.IsNullOrEmpty(StartTime))
{
return ApiResult.ParamIsNull();
}
if (string.IsNullOrEmpty(EndTime))
{
return ApiResult.ParamIsNull();
}
try
{
StartTime = Convert.ToDateTime(StartTime).ToString("yyyy-MM");
EndTime = Convert.ToDateTime(EndTime).ToString("yyyy-MM");
}
catch (Exception)
{
return ApiResult.Failed("月份格式有误");
}
if (Convert.ToDateTime(StartTime) > Convert.ToDateTime(EndTime))
{
return ApiResult.Failed("起始月份不能大于结束月份");
}
var Robj = statisticsModule.GetDSMoreMonthStatistics(StartTime, EndTime, requestParm.TenantId, requestParm.MallBaseId);
return ApiResult.Success("", Robj);
}
/// <summary>
/// 每月统计导出excel
/// </summary>
/// <param name="requestMsg"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public FileContentResult GetDSMoreMonthStatisticsToExcel(object requestMsg)
{
var requestParm = JsonConvert.DeserializeObject<RequestParm>(requestMsg.ToString());
JObject parms = JObject.Parse(requestParm.msg.ToString());
string StartTime = parms.GetStringValue("StartTime");//开始时间 月
string EndTime = parms.GetStringValue("EndTime");//结束时间 月
string ExcelName = "电商多月统计" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
List<ExcelDataSource> slist = new List<ExcelDataSource>();
if (string.IsNullOrEmpty(StartTime))
{
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
if (string.IsNullOrEmpty(EndTime))
{
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
try
{
StartTime = Convert.ToDateTime(StartTime).ToString("yyyy-MM");
EndTime = Convert.ToDateTime(EndTime).ToString("yyyy-MM");
}
catch (Exception)
{
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
if (Convert.ToDateTime(StartTime) > Convert.ToDateTime(EndTime))
{
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
ExcelDataSource header = new ExcelDataSource()
{
ExcelRows = new List<ExcelColumn>(23) {
new ExcelColumn(value: "月份") { CellWidth = 25, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均付款人數") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均付款單數") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均付款金額") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均付款件數") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均每人購買單數") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均每人購買件數") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均每單單價") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均每人購買單價") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均會員累計數") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均付款累計人數") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均會員下單轉換率") { CellWidth = 20, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均復夠人數") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均復夠率") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "平均新人下單") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER },
new ExcelColumn(value: "毛利率") { CellWidth = 15, HAlignmentEnum = HAlignmentEnum.CENTER, VAlignmentEnum = VAlignmentEnum.CENTER }
},
ColumnHight = 30
};
slist.Add(header);
try
{
List<ExcelDataSource> Rlist = statisticsModule.GetDSMoreMonthStatisticsToExcel(StartTime, EndTime, requestParm.TenantId, requestParm.MallBaseId);
slist.AddRange(Rlist);
var byteData = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData, "application/octet-stream", ExcelName);
}
catch (Exception ex)
{
LogHelper.Write(ex, string.Format("GetFileFromWebApi_requestData: {0}", JsonHelper.Serialize(requestMsg.ToString())));
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
}
/// <summary>
/// 年度统计
/// </summary>
/// <param name="requestMsg"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult GetDSYearStartistics(object requestMsg) {
var requestParm = JsonConvert.DeserializeObject<RequestParm>(requestMsg.ToString());
JObject parms = JObject.Parse(requestParm.msg.ToString());
int StartYear = parms.GetInt("StartYear",0);//开始时间 年
int EndYear = parms.GetInt("EndYear",0);//结束时间 年
if (StartYear <= 0 || EndYear <= 0)
{
return ApiResult.ParamIsNull();
}
if (StartYear < 2019 || StartYear > EndYear)
{
return ApiResult.ParamIsNull("参数有误");
}
var Robj = statisticsModule.GetDSYearStartistics(StartYear, EndYear, requestParm.TenantId, requestParm.MallBaseId);
return ApiResult.Success("", Robj);
}
/// <summary>
/// 年度导出
/// </summary>
/// <param name="requestMsg"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public FileContentResult GetDSYearStartisticsToExcel(object requestMsg) {
var requestParm = JsonConvert.DeserializeObject<RequestParm>(requestMsg.ToString());
JObject parms = JObject.Parse(requestParm.msg.ToString());
int StartYear = parms.GetInt("StartYear", 0);//开始时间 年
int EndYear = parms.GetInt("EndYear", 0);//结束时间 年
string ExcelName = "电商年度统计" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
List<ExcelDataSource> slist = new List<ExcelDataSource>();
if (StartYear <= 0 || EndYear <= 0)
{
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
if (StartYear < 2019 || StartYear > EndYear)
{
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
try
{
List<ExcelDataSource> Rlist = statisticsModule.GetDSYearStartisticsToExcel(StartYear, EndYear, requestParm.TenantId, requestParm.MallBaseId);
slist.AddRange(Rlist);
var byteData = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData, "application/octet-stream", ExcelName);
}
catch (Exception ex)
{
LogHelper.Write(ex, string.Format("GetFileFromWebApi_requestData: {0}", JsonHelper.Serialize(requestMsg.ToString())));
var byteData1 = ExcelTempLateHelper.ToExcelExtend(slist);
return File(byteData1, "application/octet-stream", ExcelName);
}
}
#endregion
}
}
\ No newline at end of file
......@@ -46,6 +46,22 @@ namespace Mall.WindowsService.Helper
LogHelper.Write("DistributorVipModule=====End");
#endregion
#region 电商统计
if (DateTime.Now.Hour == 1)
{
LogHelper.Write("UpdateToDayUserStatistics=====Start");
try
{
new Module.UserStatisticsModule().UpdateToDayUserStatistics("", "");
}
catch (Exception ex)
{
LogHelper.Write("UpdateToDayUserStatistics:" + ex.Message);
}
LogHelper.Write("UpdateToDayUserStatistics=====End");
}
#endregion
Interlocked.Exchange(ref inTimer, 0);
}
......
......@@ -32,6 +32,7 @@
<ProjectReference Include="..\Mall.CacheManager\Mall.CacheManager.csproj" />
<ProjectReference Include="..\Mall.Common\Mall.Common.csproj" />
<ProjectReference Include="..\Mall.Model\Mall.Model.csproj" />
<ProjectReference Include="..\Mall.Module.MarketingCenter\Mall.Module.MarketingCenter.csproj" />
<ProjectReference Include="..\Mall.Module.User\Mall.Module.User.csproj" />
<ProjectReference Include="..\Mall.Repository\Mall.Repository.csproj" />
</ItemGroup>
......
using Mall.Repository.Product;
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using Mall.Model.Entity.Product;
using VT.FW.DB;
using Mall.Model.Query;
using Newtonsoft.Json;
using Mall.Module.MarketingCenter;
using Mall.Common;
using Mall.Repository.User;
using Mall.Model.Extend.User;
namespace Mall.WindowsService.Module
{
/// <summary>
/// 用户订单统计
/// </summary>
public class UserStatisticsModule
{
/// <summary>
/// 统计处理
/// </summary>
public readonly StatisticsModule statisticsModule = new StatisticsModule();
/// <summary>
/// 订单统计
/// </summary>
public readonly RB_User_StatisticsRepository user_StatisticsRepository = new RB_User_StatisticsRepository();
/// <summary>
/// 会员
/// </summary>
private readonly RB_Member_UserRepository member_UserRepository = new RB_Member_UserRepository();
/// <summary>
/// 分销商
/// </summary>
private readonly RB_Distributor_InfoRepository distributor_InfoRepository = new RB_Distributor_InfoRepository();
/// <summary>
/// 更新用户最近订单统计
/// </summary>
/// <returns></returns>
public bool UpdateToDayUserStatistics(string StartTime, string EndTime)
{
if (string.IsNullOrEmpty(StartTime))
{
StartTime = DateTime.Now.AddMonths(-6).ToString("yyyy-MM") + "-01";
}
if (string.IsNullOrEmpty(EndTime))
{
EndTime = DateTime.Now.ToString("yyyy-MM-dd");
}
//查询时间范围 更新最近一个月的数据
OrderStatistics_Query demodel = new OrderStatistics_Query
{
StartDate = StartTime,
EndDate = EndTime,
TenantId = 1,
MallBaseId = 1
};
demodel.TenantId = 1;//可写配置文件 默认电商系统的
demodel.MallBaseId = 1;
List<OrderStatistics_Query> list = new List<OrderStatistics_Query>();
List<OrderStatistics_Query> listCancel = new List<OrderStatistics_Query>();
List<OrderStatistics_Query> listAftersale = new List<OrderStatistics_Query>();
list = statisticsModule.GetFXOrderProfitLossList_V2(demodel);
if (list != null && list.Any())
{
string ids = string.Join(",", list.Select(x => x.Id));
demodel.Ids = ids;
listCancel = statisticsModule.GetFXAllCancelOrderProfitLossList_V2(demodel);
listAftersale = statisticsModule.GetFXAllAftersaleOrderProfitLossList_V2(demodel);
}
foreach (var item in list)
{
if (item.OrderStatus == 7)
{
item.FXCommission = 0;
item.LiveCommission = 0;
item.RemitFXCommission = 0;
item.RefundActual = item.RefundActual > 0 ? item.RefundActual : item.AllPrice;
}
if (item.OrderSource == Common.Enum.User.UserSourceEnum.ERP)
{
item.ReturnServiceCharge = 0;
item.ServiceCharge = 0;
}
else
{
if (item.RefundActual > 0 && (item.OrderSource.HasValue && item.OrderSource != Common.Enum.User.UserSourceEnum.ERP))
{
if (listCancel != null && listCancel.Any(x => x.Id == item.Id))//存在取消中
{
item.ReturnServiceCharge = item.ServiceCharge;
}
else if (listAftersale != null && listAftersale.Any(x => x.Id == item.Id))//存在取消中
{
item.ReturnServiceCharge = Math.Round((item.RefundActual * (Convert.ToDecimal(Config.SettlementRate) / 100)), 2, MidpointRounding.AwayFromZero);
}
}
}
item.CostMoney = ((item.OrderClassify == 1 && item.CarType != 5) ? item.CostMoney : (item.CostMoney * item.Number));
item.ALLCommission = item.CostMoney + item.GoodsFreight + item.InsuranceCostMoney + item.FXCommission + item.LiveCommission + item.RefundActual + item.YFMoney;
item.NoPaid = item.ALLCommission;
item.RemitFXCommission = item.RemitFXCommission + (!string.IsNullOrWhiteSpace(item.LiveFinanceIds) ? item.LiveCommission : 0);
item.Paid = item.RefundActual + item.RemitFXCommission + item.CostMoney + item.GoodsFreight + item.PayMoney;
item.GrossProfit = item.AllPrice + item.YSMoney - item.ALLCommission - item.ServiceCharge + item.ReturnServiceCharge;//这里排除了手续费的 以便跟简易报表一致
if (item.AllPrice == 0)
{
item.GrossProfitRate = 0;
}
else
{
item.GrossProfitRate = ((item.AllPrice + item.YSMoney) == 0 ? 0 : Math.Round((item.GrossProfit / (item.AllPrice + item.YSMoney)), 4, MidpointRounding.AwayFromZero) * 100);
}
}
//查询订单统计
var slist = user_StatisticsRepository.GetList(new RB_User_Statistics_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, StartTime = StartTime, EndTime = EndTime });
#region 遍历日期
string SDate = StartTime;
while (true)
{
if (SDate == EndTime)
{
break;
}
RB_User_Statistics_Extend usmodel = new RB_User_Statistics_Extend()
{
Date = Convert.ToDateTime(SDate),
TenantId = demodel.TenantId,
MallBaseId = demodel.MallBaseId,
CreateDate = DateTime.Now,
UpdateDate = DateTime.Now
};
#region 拉取统计数据
var dayList = list.Where(x => x.PaymentTime.ToString("yyyy-MM-dd") == SDate && x.OrderStatus != 7).ToList();
int CancelNum = list.Where(x => x.PaymentTime.ToString("yyyy-MM-dd") == SDate && x.OrderStatus == 7).Count();
usmodel.CancelOrderNum = CancelNum;//取消订单数量
usmodel.PeopleNum = dayList.Select(x => x.UserId).Distinct().Count();//付款人数
usmodel.OrderNum = dayList.Select(x => x.OrderId).Distinct().Count();//付款单数
usmodel.PayMoney = dayList.Sum(x => x.AllPrice);//付款金额
usmodel.BuyNum = dayList.Sum(x => x.Number);//购买件数
usmodel.AvgOrderNum = usmodel.PeopleNum <= 0 ? 0 : Math.Round(Convert.ToDecimal(usmodel.OrderNum) / usmodel.PeopleNum, 2, MidpointRounding.AwayFromZero);//平均每人购买单数
usmodel.AvgBuyNum = usmodel.PeopleNum <= 0 ? 0 : Math.Round(Convert.ToDecimal(usmodel.BuyNum) / usmodel.PeopleNum, 2, MidpointRounding.AwayFromZero);//平均每人购买件数
usmodel.AvgUnitPrice = usmodel.OrderNum <= 0 ? 0 : Math.Round(usmodel.PayMoney / usmodel.OrderNum, 2, MidpointRounding.AwayFromZero);//平均每单单价
usmodel.AvgBuyPrice = usmodel.PeopleNum <= 0 ? 0 : Math.Round(usmodel.PayMoney / usmodel.PeopleNum, 2, MidpointRounding.AwayFromZero);//平均每人购买单价
usmodel.MemberNum = member_UserRepository.GetMemberUserTotalNumForDay(demodel.TenantId, demodel.MallBaseId, SDate);//当日会员累计数
usmodel.PaymentNum = member_UserRepository.GetMemberUserPayNumForDay(demodel.TenantId, demodel.MallBaseId, SDate);//当日会员累计数
usmodel.MOrderRate = usmodel.MemberNum <= 0 ? 0 : Math.Round(Convert.ToDecimal(usmodel.PaymentNum) / usmodel.MemberNum, 4, MidpointRounding.AwayFromZero) * 100;//会员下单转换比例
//复购人数
string UserIds = string.Join(",", dayList.Select(x => x.UserId).Distinct());
if (!string.IsNullOrEmpty(UserIds))
{
usmodel.ReBuyNum = member_UserRepository.GetMemberReBuyNumForNowDay(demodel.TenantId, demodel.MallBaseId, SDate, UserIds);//今日复购数量
}
usmodel.ReBuyRate = usmodel.PaymentNum <= 0 ? 0 : Math.Round(Convert.ToDecimal(usmodel.ReBuyNum) / usmodel.PaymentNum, 4, MidpointRounding.AwayFromZero) * 100;
usmodel.NewPeopleNum = usmodel.PeopleNum - usmodel.ReBuyNum;
//今日数量
var newList = distributor_InfoRepository.GetNewUserForNowDay(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, AuditStatus = Common.Enum.User.DistributorAuditStatusEnum.Audited }, SDate);
usmodel.PXNum = newList.Where(x => x.FXGradeId == 1).Count();
usmodel.VipNum = newList.Where(x => x.FXGradeId == 2).Count();
usmodel.YXNum = newList.Where(x => x.FXGradeId == 3).Count();
usmodel.JXNum = newList.Where(x => x.FXGradeId == 4).Count();
#region 累计数量 当月最后一天来查询
if (SDate == Convert.ToDateTime(Convert.ToDateTime(SDate).ToString("yyyy-MM") + "-01").AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd"))
{
var cutList = distributor_InfoRepository.GetMemberDistributorNumberForCutOff(new RB_Distributor_Info_Extend() { TenantId = demodel.TenantId, MallBaseId = demodel.MallBaseId, AuditStatus = Common.Enum.User.DistributorAuditStatusEnum.Audited }, SDate);
usmodel.PXLJNum = cutList.Where(x => x.FXGradeId == 1)?.FirstOrDefault()?.SortNum ?? 0;
usmodel.VipLJNum = cutList.Where(x => x.FXGradeId == 2)?.FirstOrDefault()?.SortNum ?? 0;
usmodel.YXLJNum = cutList.Where(x => x.FXGradeId == 3)?.FirstOrDefault()?.SortNum ?? 0;
usmodel.JXLJNum = cutList.Where(x => x.FXGradeId == 4)?.FirstOrDefault()?.SortNum ?? 0;
}
#endregion
//利润
usmodel.Profit = dayList.Sum(x => x.GrossProfit);
//usmodel.ProfitRate = dayList.Count() > 0 ? dayList.Sum(x => x.GrossProfitRate) / dayList.Count() : 0;
//直接根据一天的来计算 ((item.AllPrice + item.YSMoney) == 0 ? 0 : Math.Round((item.GrossProfit / (item.AllPrice + item.YSMoney)), 4, MidpointRounding.AwayFromZero) * 100);
usmodel.ProfitRate = dayList.Count() > 0 ? (dayList.Sum(x => x.AllPrice + x.YSMoney) == 0 ? 0 : Math.Round(dayList.Sum(x => x.GrossProfit) / dayList.Sum(x => x.AllPrice + x.YSMoney), 4, MidpointRounding.AwayFromZero) * 100) : 0;
#endregion
var sModel = slist.Where(x => x.Date == Convert.ToDateTime(SDate)).FirstOrDefault();
if (sModel == null)
{
//新增
user_StatisticsRepository.Insert(usmodel);
Console.WriteLine(SDate + "新增:" + JsonConvert.SerializeObject(usmodel));
}
else
{
//修改
usmodel.Id = sModel.Id;
usmodel.CreateDate = sModel.CreateDate;
user_StatisticsRepository.Update(usmodel);
Console.WriteLine(SDate + "修改:" + JsonConvert.SerializeObject(usmodel));
}
SDate = Convert.ToDateTime(SDate).AddDays(1).ToString("yyyy-MM-dd");
}
#endregion
return true;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment