Commit 66aa5a55 authored by 黄奎's avatar 黄奎
parents 5922c1dc c1e8477a
using System;
using System.Collections.Generic;
using System.Text;
namespace Mall.Model.Entity.TradePavilion
{
/// <summary>
/// 【商载通】访问记录信息 访问载体数,访问楼宇数,访问品牌数,访问企业数
/// </summary>
public class RB_Visit_Log
{
/// <summary>
/// 编号
/// </summary>
public int ID { get; set; }
/// <summary>
/// 商户号id
/// </summary>
public int TenantId { get; set; }
/// <summary>
/// 小程序id
/// </summary>
public int MallBaseId { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateDate { get; set; }
/// <summary>
/// 产品id
/// </summary>
public int ProductID { get; set; }
/// <summary>
/// 1-访问载体,2-访问楼宇,3-访问品牌,4-访问企业
/// </summary>
public int ProductType { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
using VT.FW.DB;
namespace Mall.Model.Entity.WeChatStatistics
{
/// <summary>
/// 微信小程序统计
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_Wechat_Statistics
{
//新载体数量,新楼宇数,新品牌数量,新企业数,载体总数,楼宇总数,品牌总数,企业总数,留存用户、活跃留存、打开次数,访问次数、访问人数、人均停留时长、次均停留时长、平均访问深度、转发次数、转发人数、累计用户数,访问载体数,访问楼宇数,访问品牌数,访问企业数。
/// <summary>
/// 编号
/// </summary>
public int ID { get; set; }
/// <summary>
/// 商户号id
/// </summary>
public int TenantId { get; set; }
/// <summary>
/// 小程序id
/// </summary>
public int MallBaseId { get; set; }
/// <summary>
/// 删除状态
/// </summary>
public int Status { get; set; }
/// <summary>
/// 新载体数量
/// </summary>
public int CarrierNum { get; set; }
/// <summary>
/// 新楼宇数
/// </summary>
public int BuildingCarrierNum { get; set; }
/// <summary>
/// 新品牌数量
/// </summary>
public int BrandNum { get; set; }
/// <summary>
/// 新企业数
/// </summary>
public int EnterpriseNum { get; set; }
/// <summary>
/// 载体总数
/// </summary>
public int CarrierTotalNum { get; set; }
/// <summary>
/// 楼宇总数
/// </summary>
public int BuildingCarrierTotalNum { get; set; }
/// <summary>
/// 品牌总数
/// </summary>
public int BrandTotalNum { get; set; }
/// <summary>
/// 企业总数
/// </summary>
public int EnterpriseTotalNum { get; set; }
/// <summary>
/// 访问载体数
/// </summary>
public int CarrierVisitNum { get; set; }
/// <summary>
/// 访问楼宇数
/// </summary>
public int BuildingCarrierVisitNum { get; set; }
/// <summary>
/// 访问品牌数
/// </summary>
public int BrandVisitNum { get; set; }
/// <summary>
/// 访问企业数
/// </summary>
public int EnterpriseVisitNum { get; set; }
/// <summary>
/// 日期
/// </summary>
public string Ref_Date { get; set; }
#region 用户访问小程序日留存
/// <summary>
/// 新增用户留存
/// </summary>
public int NewVisitUV { get; set; }
/// <summary>
/// 活跃用户留存
/// </summary>
public int VisitUV { get; set; }
#endregion
#region 用户访问小程序数据概况
/// <summary>
/// 累计用户数
/// </summary>
public int Visit_Total { get; set; }
/// <summary>
/// 转发次数
/// </summary>
public int Share_PV { get; set; }
/// <summary>
/// 转发人数
/// </summary>
public int Share_UV { get; set; }
#endregion
#region 用户访问小程序数据日趋势
/// <summary>
/// 打开次数
/// </summary>
public int Session_CNT { get; set; }
/// <summary>
/// 访问次数
/// </summary>
public int Visit_PV { get; set; }
/// <summary>
/// 访问人数
/// </summary>
public int Visit_UV { get; set; }
/// <summary>
/// 新用户数
/// </summary>
public int Visit_UV_New { get; set; }
/// <summary>
/// 人均停留时长 (浮点型,单位:秒)
/// </summary>
public decimal Stay_Time_UV { get; set; }
/// <summary>
/// 次均停留时长 (浮点型,单位:秒)
/// </summary>
public decimal Stay_Time_Session { get; set; }
/// <summary>
/// 平均访问深度 (浮点型)
/// </summary>
public decimal Visit_Depth { get; set; }
#endregion
}
}
using Mall.Model.Entity.WeChatStatistics;
using System;
using System.Collections.Generic;
using System.Text;
using VT.FW.DB;
namespace Mall.Model.Extend.TradePavilion
{
/// <summary>
/// 用户访问小程序日留存扩展实体
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_Wechat_Statistics_Extend : RB_Wechat_Statistics
{
/// <summary>
/// 日期
/// </summary>
public string ref_date { get; set; }
/// <summary>
/// 新增用户留存
/// </summary>
public List<DailyRetainVisit> visit_uv_new { get; set; }
/// <summary>
/// 活跃用户留存
/// </summary>
public List<DailyRetainVisit> visit_uv { get; set; }
}
public class DailyRetainVisit
{
/// <summary>
/// 标识,0开始,表示当天,1表示1天后。依此类推,key取值分别是:0,1,2,3,4,5,6,7,14,30
/// </summary>
public int key { get; set; }
/// <summary>
/// key对应日期的新增用户数/活跃用户数(key=0时)或留存用户数(k>0时)
/// </summary>
public int value { get; set; }
}
public class DailyVisitTrend
{
/// <summary>
/// 数据列表
/// </summary>
public List<DailyVisitTrendItem> list { get; set; }
}
public class DailyVisitTrendItem
{
/// <summary>
/// 日期,格式为 yyyymmdd
/// </summary>
public string ref_date { get; set; }
#region 用户访问小程序数据日趋势
/// <summary>
/// 打开次数
/// </summary>
public int session_cnt { get; set; }
/// <summary>
/// 访问次数
/// </summary>
public int visit_pv { get; set; }
/// <summary>
/// 访问人数
/// </summary>
public int visit_uv { get; set; }
/// <summary>
/// 新用户数
/// </summary>
public int visit_uv_new { get; set; }
/// <summary>
/// 人均停留时长 (浮点型,单位:秒)
/// </summary>
public decimal stay_time_uv { get; set; }
/// <summary>
/// 次均停留时长 (浮点型,单位:秒)
/// </summary>
public decimal stay_time_session { get; set; }
/// <summary>
/// 平均访问深度 (浮点型)
/// </summary>
public decimal visit_depth { get; set; }
#endregion
#region 用户访问小程序数据概况
/// <summary>
/// 转发次数
/// </summary>
public int share_pv { get; set; }
/// <summary>
/// 转发人数
/// </summary>
public int share_uv { get; set; }
/// <summary>
/// 累计用户数
/// </summary>
public int visit_total { get; set; }
#endregion
}
}
using Mall.Model.Extend.TradePavilion;
using Mall.Repository.TradePavilion;
using System;
using System.Collections.Generic;
using System.Text;
namespace Mall.Module.TradePavilion
{
public class WechatStatisticsModule
{
private readonly RB_Wechat_StatisticsRepository wechat_StatisticsRepository = new RB_Wechat_StatisticsRepository();
/// <summary>
/// 获取列表
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public List<RB_Wechat_Statistics_Extend> GetList(RB_Wechat_Statistics_Extend dmodel)
{
return wechat_StatisticsRepository.GetList(dmodel);
}
}
}
using Mall.Model.Entity.TradePavilion;
using Mall.Model.Extend.TradePavilion;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Mall.Repository.TradePavilion
{
/// <summary>
///
/// </summary>
public class RB_Visit_LogRepository : BaseRepository<RB_Visit_Log>
{
/// <summary>
/// 表名称
/// </summary>
public string TableName { get { return nameof(RB_Visit_Log); } }
/// <summary>
/// 获取访问记录信息
/// </summary>
/// <param name="query"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
public List<RB_Visit_Log> GetList(RB_Visit_Log query, string startTime, string endTime)
{
StringBuilder builder = new StringBuilder();
builder.Append($" SELECT * FROM {TableName} WHERE 1=1");
if (query != null)
{
if (query.TenantId > 0)
{
builder.Append($" AND {nameof(RB_Prize_Extend.TenantId)}={query.TenantId}");
}
if (query.MallBaseId > 0)
{
builder.Append($" AND {nameof(RB_Prize_Extend.MallBaseId)}={query.MallBaseId}");
}
if (!string.IsNullOrWhiteSpace(startTime))
{
builder.Append($" AND {nameof(RB_Prize_Extend.CreateDate)}={query.Id}");
}
if (!string.IsNullOrWhiteSpace(endTime))
{
builder.Append($" AND {nameof(RB_Prize_Extend.CreateDate)}={query.Id}");
}
}
builder.Append($" order by Id desc");
return Get<RB_Visit_Log>(builder.ToString()).ToList();
}
}
}
using Mall.Model.Entity.WeChatStatistics;
using Mall.Model.Extend.Miai;
using Mall.Model.Extend.TradePavilion;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Mall.Repository.TradePavilion
{
/// <summary>
/// 微信小程序统计仓储类
/// </summary>
public class RB_Wechat_StatisticsRepository : BaseRepository<RB_Wechat_Statistics>
{
/// <summary>
/// 获取列表
/// </summary>
/// <param name="dmodel"></param>
/// <returns></returns>
public List<RB_Wechat_Statistics_Extend> GetList(RB_Wechat_Statistics_Extend dmodel)
{
string where = $" 1=1 and {nameof(RB_Wechat_Statistics_Extend.Status)}=0 ";
if (dmodel.TenantId > 0)
{
where += $@" and {nameof(RB_Wechat_Statistics_Extend.TenantId)}={dmodel.TenantId}";
}
if (dmodel.MallBaseId > 0)
{
where += $@" and {nameof(RB_Wechat_Statistics_Extend.MallBaseId)}={dmodel.MallBaseId}";
}
if (!string.IsNullOrEmpty(dmodel.Ref_Date))
{
where += $@" and {nameof(RB_Wechat_Statistics_Extend.Ref_Date)} ='{dmodel.Ref_Date}'";
}
string sql = $@"select * from RB_Wechat_Statistics where {where}";
return Get<RB_Wechat_Statistics_Extend>(sql).ToList();
}
}
}
using Mall.CacheManager.AppletWeChat;
using Mall.CacheManager.DataStatistic;
using Mall.Common;
using Mall.Common.Plugin;
using Mall.Model.Entity.WeChatStatistics;
using Mall.Model.Extend.TradePavilion;
using Mall.Repository.BaseSetUp;
using Mall.Repository.Coffee;
using Mall.Repository.TradePavilion;
using Mall.Repository.User;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Mall.WindowsService.Module
{
/// <summary>
/// 宜宾翠屏商务局小程序统计同步
/// </summary>
public class CuiPingModule
{
/// <summary>
/// 小程序统计
/// </summary>
private static readonly RB_Wechat_StatisticsRepository wechatStatisticsRepository = new RB_Wechat_StatisticsRepository();
/// <summary>
/// 基础配置
/// </summary>
private static RB_MallBaseRepository mallBaseRepository = new RB_MallBaseRepository();
/// <summary>
/// 基础配置
/// </summary>
private static RB_MiniProgramRepository miniProgramRepository = new RB_MiniProgramRepository();
/// <summary>
/// 同步小程序统计信息
/// </summary>
/// <returns></returns>
public static bool AddWechatStatistics()
{
bool flag = false;
string mallBaseIds = Config.WechatStatisticsMallBaseId;
if (!string.IsNullOrWhiteSpace(mallBaseIds))
{
var mallBaseIdList = mallBaseIds.Split(",");
foreach (var item in mallBaseIdList)
{
if (!string.IsNullOrWhiteSpace(item))
{
try
{
var miniProgramModel = miniProgramRepository.GetEntity(Convert.ToInt32(item));
if ((miniProgramModel?.MallBaseId ?? 0) > 0)
{
RB_Wechat_Statistics model = new RB_Wechat_Statistics();
model.TenantId = miniProgramModel.TenantId ?? 0;
model.MallBaseId = miniProgramModel.MallBaseId;
model.Status = 0;
model.Ref_Date = DateTime.Now.AddDays(-1).ToString("yyyyMMdd");
var oldList = wechatStatisticsRepository.GetList(new RB_Wechat_Statistics_Extend { TenantId = model.TenantId, MallBaseId = model.MallBaseId, Ref_Date = model.Ref_Date, Status = 0 });//判断是否已添加信息
if (oldList?.Count() > 0)//已同步则不继续
{
return false;
}
var postdata = new
{
begin_date = model.Ref_Date,
end_date = model.Ref_Date,
};
string token = WeiXinReidsCache.Get(miniProgramModel.MiniAppId);
if (string.IsNullOrEmpty(token))
{
token = Mall.Common.Pay.WeChatPat.TokenHelper.GetLXYToken(token, miniProgramModel.MiniAppId, miniProgramModel.MiniAppSecret);
System.Threading.Tasks.Task.Run(() => WeiXinReidsCache.Set(DataConstant.DATA_WeiXinToken + miniProgramModel.MiniAppId, token));
}
if (string.IsNullOrEmpty(token))
{
return false;
}
if (!string.IsNullOrEmpty(token))
{
string wenXinResult = string.Empty;
string Url = "https://api.weixin.qq.com/datacube/getweanalysisappiddailyretaininfo?access_token=" + token;
#region 获取用户访问小程序日留存 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/data-analysis/visit-retain/getDailyRetain.html
try
{
wenXinResult = HttpHelper.HttpPost(Url, JsonHelper.Serialize(postdata), "");
JObject jo = (JObject)JsonConvert.DeserializeObject(wenXinResult);
LogHelper.WriteInfo(wenXinResult);
RB_Wechat_Statistics_Extend tempModel = new RB_Wechat_Statistics_Extend();
tempModel = JsonConvert.DeserializeObject<RB_Wechat_Statistics_Extend>(wenXinResult);
if (tempModel.visit_uv_new != null && tempModel.visit_uv_new.Any())
{
model.NewVisitUV = tempModel?.visit_uv_new?.FirstOrDefault()?.value ?? 0;
}
if (tempModel.visit_uv != null && tempModel.visit_uv.Any())
{
model.VisitUV = tempModel?.visit_uv?.FirstOrDefault()?.value ?? 0;
}
}
catch (Exception ex)
{
LogHelper.Write(ex, "获取用户访问小程序日留存");
}
#endregion
#region 获取用户访问小程序数据日趋势 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/data-analysis/visit-trend/getDailyVisitTrend.html
try
{
Url = "https://api.weixin.qq.com/datacube/getweanalysisappiddailyvisittrend?access_token=" + token;
wenXinResult = HttpHelper.HttpPost(Url, JsonHelper.Serialize(postdata), "");
JObject jo = (JObject)JsonConvert.DeserializeObject(wenXinResult);
LogHelper.WriteInfo(wenXinResult);
DailyVisitTrend tempDailyVisitTrendList = new DailyVisitTrend();
tempDailyVisitTrendList = JsonConvert.DeserializeObject<DailyVisitTrend>(wenXinResult);
if (tempDailyVisitTrendList.list != null && tempDailyVisitTrendList.list.Any())
{
DailyVisitTrendItem dailyVisitTrendItem = tempDailyVisitTrendList?.list?.FirstOrDefault();
model.Session_CNT = dailyVisitTrendItem.session_cnt;
model.Visit_PV = dailyVisitTrendItem.visit_pv;
model.Visit_UV = dailyVisitTrendItem.visit_uv;
model.Visit_UV_New = dailyVisitTrendItem.visit_uv_new;
model.Stay_Time_UV = dailyVisitTrendItem.stay_time_uv;
model.Stay_Time_Session = dailyVisitTrendItem.stay_time_session;
model.Visit_Depth = dailyVisitTrendItem.visit_depth;
}
}
catch (Exception ex)
{
LogHelper.Write(ex, "获取用户访问小程序数据日趋势");
}
#endregion
#region 获取用户访问小程序数据概况 https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/data-analysis/others/getDailySummary.html
try
{
Url = "https://api.weixin.qq.com/datacube/getweanalysisappiddailysummarytrend?access_token=" + token;
wenXinResult = HttpHelper.HttpPost(Url, JsonHelper.Serialize(postdata), "");
JObject jo = (JObject)JsonConvert.DeserializeObject(wenXinResult);
LogHelper.WriteInfo(wenXinResult);
DailyVisitTrend tempList = new DailyVisitTrend();
tempList = JsonConvert.DeserializeObject<DailyVisitTrend>(wenXinResult);
if (tempList.list != null && tempList.list.Any())
{
DailyVisitTrendItem dailyVisitTrendItem = tempList?.list?.FirstOrDefault();
model.Visit_Total = dailyVisitTrendItem.visit_total;
model.Share_PV = dailyVisitTrendItem.share_pv;
model.Share_UV = dailyVisitTrendItem.share_uv;
}
}
catch (Exception ex)
{
LogHelper.Write(ex, "获取用户访问小程序数据概况");
}
#endregion
LogHelper.WriteInfo(JsonConvert.SerializeObject(model));
flag = wechatStatisticsRepository.Insert(model) > 0;
}
}
}
catch (Exception ex)
{
}
}
}
}
return flag;
}
}
}
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