Commit eb654cca authored by 黄奎's avatar 黄奎

新增统计

parent 4b449dec
......@@ -290,7 +290,8 @@ namespace Mall.CacheManager.Base
{
var database = _conn.GetDatabase(DbNum);
int offset = date.Day - 1;
return database.StringSetBit(buildSignKey(uid, date), offset, true);
return database.StringSetBit(buildSignKey(0, date), uid, true);
}
/// <summary>
......@@ -381,7 +382,7 @@ namespace Mall.CacheManager.Base
private static String formatDate(DateTime date)
{
return date.ToString("yyyyMM");
return date.ToString("yyyyMMdd");
}
#endregion
......
......@@ -34,10 +34,6 @@ namespace Mall.CacheManager.User
}
}
/// <summary>
/// 获取缓存时长
/// </summary>
......@@ -84,6 +80,11 @@ namespace Mall.CacheManager.User
/// </summary>
private static readonly Mall.Repository.User.RB_TenantRepository tenantRepository = new Repository.User.RB_TenantRepository();
/// <summary>
/// 用户登录日志仓储层对象
/// </summary>
private static readonly Repository.User.RB_Login_LogRepository login_LogRepository = new Repository.User.RB_Login_LogRepository();
/// <summary>
/// 获取用户登录信息
/// </summary>
......@@ -150,6 +151,18 @@ namespace Mall.CacheManager.User
{
TimeSpan ts = GetExpirTime(JwtExpirTime);
redis.StringSet<AppletUserInfo>(cacheKey, model, ts);
try
{
login_LogRepository.Insert(new Model.Entity.User.RB_Login_Log()
{
UserId = model.UserId,
LoginTime = DateTime.Now
});
}
catch(Exception ex2)
{
Common.Plugin.LogHelper.Write(ex2, "UserInfoSet_SetSignBit缓存设置失败");
}
}
catch (Exception ex)
{
......@@ -157,6 +170,8 @@ namespace Mall.CacheManager.User
}
}
/// <summary>
/// 用户
/// </summary>
......
using System;
using System.Collections.Generic;
using System.Text;
using VT.FW.DB;
namespace Mall.Model.Entity.User
{
/// <summary>
/// 用户登录日志表实体
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_Login_Log
{
/// <summary>
/// 日志编号
/// </summary>
public long LogId { get; set; }
/// <summary>
/// 用户编号
/// </summary>
public int UserId { get; set; }
/// <summary>
/// 登录时间
/// </summary>
public DateTime LoginTime { get; set; }
}
}
......@@ -24,6 +24,11 @@ namespace Mall.Module.MarketingCenter
/// </summary>
private readonly RB_Member_UserRepository member_UserRepository = new RB_Member_UserRepository();
/// <summary>
/// 会员仓储层对象
/// </summary>
private readonly RB_Member_UserRepository2 member_UserRepository2 = new RB_Member_UserRepository2();
/// <summary>
/// 分销商
/// </summary>
......@@ -428,6 +433,25 @@ namespace Mall.Module.MarketingCenter
return list;
}
/// <summary>
/// 订单用户数据统计【总下单人数,内部员工人数,领队导游人数】
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public object GetOrderUserStatisticsModule(DataStatistics_Query dmodel)
{
return orderRepository.GetOrderUserStatisticsRepository(dmodel);
}
/// <summary>
/// 统计今日登录【总人数,内部员工人数,领队导游人数】
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public object GetMemberUserStatisticsModule(RB_Member_User_Extend dmodel)
{
return member_UserRepository2.GetMemberUserStatisticsRepository(dmodel);
}
/// <summary>
/// 总成交
......
......@@ -8,6 +8,7 @@ using Mall.Model.Entity.User;
using Mall.Common.Enum.Goods;
using Mall.Model.Query;
using VT.FW.DB.Dapper;
using Mall.Model.Extend.User;
namespace Mall.Repository.Product
{
......@@ -1049,12 +1050,6 @@ LEFT JOIN rb_member_user as c on b.UserId=c.Id
}
if (dmodel.OrderStatus == 0 || dmodel.OrderStatus == 1 || dmodel.OrderStatus == 2 || dmodel.OrderStatus == 3)
{
// sql = $@"SELECT t.CreateDate,SUM(t.GoodsNum)as GoodsNum ,COUNT(t.OrderId)as OrderNum ,SUM(t.Income)as PayMoney,MAX(t.PayMemerNum) as PayMemerNum,GROUP_CONCAT(DISTINCT t.UserId) as UserIds
//from (SELECT DATE_FORMAT(a.CreateDate,'%Y-%m-%d' )as CreateDate,b.GoodsNum,a.UserId,a.Income,a.OrderId,c.PayMemerNum from rb_goods_order as a
// LEFT JOIN (SELECT OrderId,SUM(Number)as GoodsNum from rb_goods_orderdetail where 1=1 {orderTypeWhere} GROUP BY OrderId)as b on a.OrderId=b.OrderId
//LEFT JOIN (SELECT COUNT(DISTINCT UserId) as PayMemerNum, DATE_FORMAT(CreateDate,'%Y-%m-%d' ) as CreateDate from rb_goods_order where 1=1 {payMemerNumWhere} GROUP BY DATE_FORMAT(CreateDate,'%Y-%m-%d' ))
//as c on c.CreateDate=DATE_FORMAT(a.CreateDate,'%Y-%m-%d' ) {where} )
//as t GROUP BY t.CreateDate desc";
sql = $@"SELECT t.CreateDate,SUM(t.GoodsNum)as GoodsNum ,COUNT(t.OrderId)as OrderNum ,SUM(t.Income)as PayMoney,COUNT(DISTINCT t.UserId) as PayMemerNum,GROUP_CONCAT(DISTINCT t.UserId) as UserIds
from (SELECT DATE_FORMAT(a.CreateDate,'%Y-%m-%d' )as CreateDate,b.GoodsNum,a.UserId,a.Income,a.OrderId from rb_goods_order as a
LEFT JOIN (SELECT OrderId,SUM(Number)as GoodsNum from rb_goods_orderdetail where 1=1 {orderTypeWhere} GROUP BY OrderId)as b on a.OrderId=b.OrderId {where} )
......@@ -1074,10 +1069,60 @@ from
)
as t GROUP BY t.CreateDate desc";
}
return GetPage<DataStatistics_Query>(pageIndex, pageSize, out count, sql).ToList();
}
/// <summary>
/// 订单用户数据统计【总下单人数,内部员工人数,领队导游人数】
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public object GetOrderUserStatisticsRepository(DataStatistics_Query dmodel)
{
string where = "";
if (dmodel.TenantId > 0)
{
where += $@" and a.{nameof(RB_Goods_Order.TenantId)}={dmodel.TenantId}";
}
if (dmodel.MallBaseId > 0)
{
where += $@" and a.{nameof(RB_Goods_Order.MallBaseId)}={dmodel.MallBaseId}";
}
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM rb_member_user AS A
INNER JOIN
(
SELECT District UserId
FROM rb_goods_order AS a
WHERE 1=1 AND (a.OrderStatus IN(2,3,4,5,6) OR (a.OrderStatus=7 AND a.PaymentTime IS NOT NULL AND a.CancelTime IS NOT NULL AND DATE_FORMAT(a.PaymentTime,'%Y-%m-%d' )<DATE_FORMAT(a.CancelTime,'%Y-%m-%d' )))
AND DATE_FORMAT(a.CreateDate,'%y/%m/%d')= DATE_FORMAT('{0}','%y/%m/%d') {1}
) AS B ON A.Id=B.UserId AND A.SuperiorId>0 AND A.SuperiorId<20 AND A.PostId=0
UNION ALL
SELECT A.*
FROM rb_member_user AS A
INNER JOIN
(
SELECT District UserId
FROM rb_goods_order AS a
WHERE 1=1 AND (a.OrderStatus IN(2,3,4,5,6) OR (a.OrderStatus=7 AND a.PaymentTime IS NOT NULL AND a.CancelTime IS NOT NULL AND DATE_FORMAT(a.PaymentTime,'%Y-%m-%d' )<DATE_FORMAT(a.CancelTime,'%Y-%m-%d' )))
AND DATE_FORMAT(a.CreateDate,'%y/%m/%d')= DATE_FORMAT('{0}','%y/%m/%d') {1}
) AS B ON A.Id=B.UserId AND A.PostId=1
", DateTime.Now.ToString("yyyy-MM-dd"), where);
var list = Get<RB_Member_User_Extend>(builder.ToString()).ToList();
var obj = new
{
OrderTotal = list?.Count ?? 0,
OrderEmployee = list?.Where(qitem => qitem.PostId == 0)?.Count() ?? 0,
OrderLeader = list?.Where(qitem => qitem.PostId == 1)?.Count() ?? 0,
};
return obj;
}
/// <summary>
......
using Mall.Model.Entity.User;
using System;
using System.Collections.Generic;
using System.Text;
namespace Mall.Repository.User
{
/// <summary>
/// 用户登录日志仓储层
/// </summary>
public class RB_Login_LogRepository : BaseRepository<RB_Login_Log>
{
}
}
......@@ -42,5 +42,56 @@ WHERE 1=1
}
return Get<RB_Member_User_Extend>(builder.ToString(), dynamicParameters).ToList();
}
/// <summary>
/// 统计今日登录【总人数,内部员工人数,领队导游人数】
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public object GetMemberUserStatisticsRepository(RB_Member_User_Extend dmodel)
{
StringBuilder where = new StringBuilder();
if (dmodel.TenantId > 0)
{
where.AppendFormat($@" and A.{nameof(RB_Member_User.TenantId)}={dmodel.TenantId}");
}
if (dmodel.MallBaseId > 0)
{
where.AppendFormat($@" and A.{nameof(RB_Member_User.MallBaseId)}={dmodel.MallBaseId}");
}
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT * FROM rb_member_user AS A
INNER JOIN
(
SELECT DISTINCT UserId
FROM rb_login_log
WHERE DATE_FORMAT(LoginTime,'%y/%m/%d')=DATE_FORMAT('2020-11-18','%y/%m/%d')
) AS B ON A.Id=B.UserId
WHERE A.SuperiorId>0 AND A.SuperiorId<20 AND A.PostId=0 {0}
UNION ALL
SELECT * FROM rb_member_user AS A
INNER JOIN
(
SELECT DISTINCT UserId
FROM rb_login_log
WHERE DATE_FORMAT(LoginTime,'%y/%m/%d')=DATE_FORMAT('2020-11-18','%y/%m/%d')
) AS B ON A.Id=B.UserId
WHERE A.PostId=1 {0}
", where.ToString());
var list = Get<RB_Member_User_Extend>(builder.ToString()).ToList();
var obj = new
{
LoginTotal = list?.Count ?? 0,
LoginEmployee = list?.Where(qitem => qitem.PostId == 0)?.Count() ?? 0,
LoginLeader = list?.Where(qitem => qitem.PostId == 1)?.Count() ?? 0,
};
return obj;
}
}
}
......@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Mall.CacheManager.User;
using Mall.Common.API;
using Mall.Common.Plugin;
using Mall.Model.Entity.BaseSetUp;
......
......@@ -21,6 +21,7 @@ namespace Mall.WebApi.Controllers.MarketingCenter
public class StatisticsController : BaseController
{
public StatisticsModule statisticsModule = new StatisticsModule();
#region 数据统计
/// <summary>
/// 数据概况
......@@ -242,6 +243,28 @@ namespace Mall.WebApi.Controllers.MarketingCenter
return ApiResult.Success("", pagelist);
}
/// <summary>
///登录人数和下单人数统计
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetDataStatistics()
{
DataStatistics_Query query = JsonConvert.DeserializeObject<DataStatistics_Query>(RequestParm.msg.ToString());
var orderObj= statisticsModule.GetOrderUserStatisticsModule(query);
var loginObj = statisticsModule.GetMemberUserStatisticsModule(new Model.Extend.User.RB_Member_User_Extend()
{
TenantId = query.TenantId,
MallBaseId = query.MallBaseId
});
var obj = new
{
orderObj,
loginObj
};
return ApiResult.Success(data: obj);
}
[HttpPost]
public ApiResult GetSellOrder()
{
......
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