using dodohold.core;
using Google.Protobuf.WellKnownTypes;
using System.Text.Json;
using TencentCloud.Cdn.V20180606.Models;
using TencentCloud.Tse.V20201207.Models;
using static molilian.core.ChartDataCore;
namespace molilian.core
{
public partial class AlimamaPlus
{
///
/// 更新API调用日志(1天一次)
///
///
public static async Task DailyLogs_bak(int intervalDay, string prefix = "", string channel = "all")
{
int channelId = (int)TkChannelEnum.tb;
var db_prefix = channel switch
{
"tool" => "tool_",
"jd" => "jd_parse_",
_ => prefix,
};
DateTime log_date = DateTime.Now.AddDays(-intervalDay).Date;
var accounts = await TkPoolCore.ListAsync();
using var conn = DBContext.GetOpenConnection();
foreach (var account in accounts)
{
int accountId = account.id;
string accountName = $"{TkChannelEnum.tb}_{account.id}";
int total_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:{log_date:yyyyMMdd}");
if (total_count == 0) accountName = account.name;
total_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:{log_date:yyyyMMdd}");
if (total_count == 0) continue;
var success_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:success:{log_date:yyyyMMdd}");
var abandon_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:放弃转链:{log_date:yyyyMMdd}");
string success_percentage = string.Empty;
string abandon_percentage = string.Empty;
if (total_count > 0)
{
success_percentage = $"{success_count / (double)total_count * 100:f2}%";
abandon_percentage = $"{abandon_count / (double)total_count * 100:f2}%";
}
var exist = new DBContext.Table("daily_logs")
.Fields("id,log_date")
.Get("log_date=@log_date AND channel=@channel AND accountId=@accountId", new { log_date, channel = channelId, accountId });
var createArgs = new DBContext.Table(conn, "daily_logs")
.Add($"{db_prefix}total_count", total_count)
.Add($"{db_prefix}abandon_count", abandon_count)
.Add($"{db_prefix}abandon_percentage", abandon_percentage)
.Add($"{db_prefix}success_count", success_count)
.Add($"{db_prefix}success_percentage", success_percentage)
.Add("last_time", DateTime.Now);
if (exist == null)
{
createArgs.Add("channel", channelId)
.Add("accountId", accountId)
.Add("accountName", account.company)
.Add("log_date", log_date)
.Add("create_time", DateTime.Now)
.Create();
}
else
{
createArgs.Where("id=@id", new { exist.id }).Update();
}
}
int all_total_count = await TkLogCore.GetTotalAsync($":{prefix}total:{channel}:{log_date:yyyyMMdd}");
var all_success_count = await TkLogCore.GetTotalAsync($":{prefix}total:{channel}:success:{log_date:yyyyMMdd}");
var all_abandon_count = await TkLogCore.GetTotalAsync($":{prefix}total:{channel}:放弃转链:{log_date:yyyyMMdd}");
string all_success_percentage = string.Empty;
string all_abandon_percentage = string.Empty;
if (all_total_count > 0)
{
all_success_percentage = $"{all_success_count / (double)all_total_count * 100:f2}%";
all_abandon_percentage = $"{all_abandon_count / (double)all_total_count * 100:f2}%";
}
var exist2 = new DBContext.Table(conn, "daily_logs")
.Fields("id,log_date")
.Get("log_date=@log_date AND channel=@channel AND accountId=@accountId",
new { log_date, channel = channelId, accountId = 0 });
var createArgs2 = new DBContext.Table(conn, "daily_logs")
.Add($"{db_prefix}total_count", all_total_count)
.Add($"{db_prefix}abandon_count", all_abandon_count)
.Add($"{db_prefix}abandon_percentage", all_abandon_percentage)
.Add($"{db_prefix}success_count", all_success_count)
.Add($"{db_prefix}success_percentage", all_success_percentage)
.Add("last_time", DateTime.Now);
if (exist2 == null)
{
createArgs2.Add("channel", channelId)
.Add("accountId", 0)
.Add("accountName", "all")
.Add("log_date", log_date)
.Add("create_time", DateTime.Now)
.Create();
}
else
{
createArgs2.Where("id=@id", new { exist2.id }).Update();
}
}
public static async Task AllDailyLogsAsync(int intervalDay, string prefix = "", string channel = "all")
{
await DailyLogsAsync(true, intervalDay, prefix, channel);
}
public static async Task NodeDailyLogsAsync(int intervalDay, string prefix = "", string channel = "all")
{
await DailyLogsAsync(false, intervalDay, prefix, channel);
}
public static async Task DailyLogsAsync(bool all_node, int intervalDay, string prefix = "", string channel = "all")
{
int channelId = (int)TkChannelEnum.tb;
var db_prefix = channel switch
{
"tool" => "tool_",
"jd" => "jd_parse_",
"ks" => "ks_parse_",
"pdd" => "pdd_parse_",
"dy" => "dy_parse_",
_ => prefix,
};
DateTime log_date = DateTime.Now.AddDays(-intervalDay).Date;
var accounts = await TkPoolCore.ListAsync();
using var conn = all_node ? CenterHub.GetOpenConnection() : DBContext.GetOpenConnection();
string tableName = all_node ? "center_daily_logs" : "daily_logs";
string tableName2 = all_node ? "center_daily_chat_data" : "daily_chat_data";
foreach (var account in accounts)
{
if (!account.enable_call_stats) continue;
int accountId = account.id;
string accountName = $"{TkChannelEnum.tb}_{account.id}";
int total_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:{log_date:yyyyMMdd}", all_node);
if (total_count == 0) accountName = account.name;
total_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:{log_date:yyyyMMdd}", all_node);
if (total_count == 0) continue;
var success_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:success:{log_date:yyyyMMdd}", all_node);
var abandon_count = await TkLogCore.GetTotalAsync($":{prefix}total:{accountName}:放弃转链:{log_date:yyyyMMdd}", all_node);
string success_percentage = string.Empty;
string abandon_percentage = string.Empty;
if (total_count > 0)
{
success_percentage = $"{success_count / (double)total_count * 100:f2}%";
abandon_percentage = $"{abandon_count / (double)total_count * 100:f2}%";
}
var exist = new DBContext.Table(tableName)
.Fields("id,log_date")
.Get("log_date=@log_date AND channel=@channel AND accountId=@accountId", new { log_date, channel = channelId, accountId });
var createArgs = new DBContext.Table(conn, tableName)
.Add($"{db_prefix}total_count", total_count)
.Add($"{db_prefix}abandon_count", abandon_count)
.Add($"{db_prefix}abandon_percentage", abandon_percentage)
.Add($"{db_prefix}success_count", success_count)
.Add($"{db_prefix}success_percentage", success_percentage)
.Add("last_time", DateTime.Now);
if (exist == null)
{
createArgs.Add("channel", channelId)
.Add("accountId", accountId)
.Add("accountName", account.company)
.Add("log_date", log_date)
.Add("create_time", DateTime.Now)
.Create();
}
else
{
createArgs.Where("id=@id", new { exist.id }).Update();
}
}
int all_total_count = await TkLogCore.GetTotalAsync($":{prefix}total:{channel}:{log_date:yyyyMMdd}", all_node);
var all_success_count = await TkLogCore.GetTotalAsync($":{prefix}total:{channel}:success:{log_date:yyyyMMdd}", all_node);
var all_abandon_count = await TkLogCore.GetTotalAsync($":{prefix}total:{channel}:放弃转链:{log_date:yyyyMMdd}", all_node);
string all_success_percentage = string.Empty;
string all_abandon_percentage = string.Empty;
if (all_total_count > 0)
{
all_success_percentage = $"{all_success_count / (double)all_total_count * 100:f2}%";
all_abandon_percentage = $"{all_abandon_count / (double)all_total_count * 100:f2}%";
}
var exist2 = new DBContext.Table(conn, tableName)
.Fields("id,log_date")
.Get("log_date=@log_date AND accountId=@accountId",
new { log_date, channel = channelId, accountId = 0 });
var createArgs2 = new DBContext.Table(conn, tableName)
.Add($"{db_prefix}total_count", all_total_count)
.Add($"{db_prefix}abandon_count", all_abandon_count)
.Add($"{db_prefix}abandon_percentage", all_abandon_percentage)
.Add($"{db_prefix}success_count", all_success_count)
.Add($"{db_prefix}success_percentage", all_success_percentage)
.Add("last_time", DateTime.Now);
if (exist2 == null)
{
createArgs2.Add("channel", 0)
.Add("accountId", 0)
.Add("accountName", "all")
.Add("log_date", log_date)
.Add("create_time", DateTime.Now)
.Create();
}
else
{
createArgs2.Where("id=@id", new { exist2.id }).Update();
}
//jd_parse_total
//tool_total
//total
//coupon_total
//parse_total
var chatData = await GetTaobaoDataAsync($"{prefix}total", "", $"{log_date:yyyyMMdd}");
//tableName2
}
public static async Task FillLinkTypeDataAsync(DBContext.Table update, int data_type, DateTime report_date, TkChannelEnum channel)
{
long req_other_aff_num = 0;//1
long req_goods_num = 0;//2
long req_live_num = 0;//3
long req_video_num = 0;///4
long req_shop_num = 0;//5
long req_base_num = 0;//6
long req_note_num = 0;//7
int resp_deeplink_num = 0;
try
{
switch (channel)
{
case TkChannelEnum.tb:
string tableName = $"tk_parse_logs_{report_date:yyyyMMdd}";
string exist_sql = @$"SELECT IF( EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_name = '{tableName}'), 1, 0) AS table_exists;";
int exist_table = DBContext.ExecuteScalar(exist_sql);
if (exist_table == 1)
{
var linkTypeTotal = new DBContext.Table(tableName)
.Fields("linkType, count(*) AS total")
.GroupBy("linkType")
.Select();
foreach (var t in linkTypeTotal)
{
int linkType = t.linkType;
long total = t.total;
switch (linkType)
{
case 1: req_other_aff_num = total; break;
case 2: req_goods_num = total; break;
case 3: req_live_num = total; break;
case 4: req_video_num = total; break;
case 5: req_shop_num = total; break;
case 6: req_base_num = total; break;
case 7: req_note_num = total; break;
}
}
}
string total_key = data_type switch
{
1 => "parse_total",
2 or _ => "coupon_total",
};
string[] deeplink_keys = ["home", "success", "fail"];
string accountName = "all";
foreach (var keyname in deeplink_keys)
{
string cacheKey = $":{total_key}:dp_{keyname}:{accountName}:{report_date:yyyyMMdd}";
int value = await TkLogCore.GetTotalAsync(cacheKey);
if (value == 0) continue;
resp_deeplink_num += value;
}
break;
}
}
catch (Exception e)
{
}
update.Add("req_other_aff_num", req_other_aff_num);
update.Add("req_goods_num", req_goods_num);
update.Add("req_live_num", req_live_num);
update.Add("req_video_num", req_video_num);
update.Add("req_shop_num", req_shop_num);
update.Add("req_base_num", req_base_num);
update.Add("req_note_num", req_note_num);
update.Add("resp_deeplink_num", resp_deeplink_num);
return update;
}
///
///
///
/// 1转链 2优惠券 3dp
///
///
public static async Task ApiCallStatisticsAsync(int data_type, int intervalDay, TkChannelEnum channel)
{
DateTime log_date = DateTime.Now.AddDays(-intervalDay).Date;
var endpoint = data_type == 2 ? EndPointCore.GetCouponAdmin() : EndPointCore.GetParseAdmin();
if (endpoint == null || string.IsNullOrEmpty(endpoint.db_server)) return;
using var conn = EndPointCore.GetDbConnection(endpoint.db_server);
using var center_conn = CenterHub.GetOpenConnection();
//v_jd_spread_report
var record = new DBContext.Table(center_conn, "api_call_report_dailys")
.Fields("id, report_date, read_num")
.Get("report_date=@log_date AND platform=@platform AND data_type=@data_type",
new { log_date, platform = channel, data_type });
var update = new DBContext.Table(center_conn, "api_call_report_dailys")
.Add("data_type", data_type)
.Add("platform", channel)
.Add("is_show", 1)
.Add("report_date", log_date)
.Add("last_time", DateTime.Now);
switch (channel)
{
case TkChannelEnum.tb:
{
string v_table = "v_tk_report_dailys_parse";
if (data_type == 3) v_table = "v_tk_report_dailys_dp";
var exist_report_dailys = new DBContext.Table(conn, v_table)
.Get("report_date=@log_date", new { log_date });
if (exist_report_dailys != null)
{
update.Add("uclk_uv", exist_report_dailys.uclk_uv_56)
.Add("uclk_pv", exist_report_dailys.uclk_pv_56)
.Add("pay_ord_num", exist_report_dailys.pay_ord_num_56)
.Add("order_ord_num", exist_report_dailys.order_ord_num)
.Add("pay_ord_amt", exist_report_dailys.pay_ord_amt_56)
.Add("pay_tk_disp_tfee", exist_report_dailys.pay_tk_disp_tfee_56)
.Add("pay_ord_uv", exist_report_dailys.pay_ord_uv_56)
.Add("eff_ord_num", exist_report_dailys.eff_ord_num)
.Add("eff_ord_amt", exist_report_dailys.eff_ord_amt)
.Add("eff_tk_disp_tfee", exist_report_dailys.eff_tk_disp_tfee);
}
var exist = new DBContext.Table(center_conn, "center_daily_logs")
.Get("log_date=@log_date AND accountId=@accountId",
new { log_date, channel, accountId = 0 });
if (exist != null)
{
if (data_type == 1 || data_type == 3)
{
update.Add("total_count", exist.parse_total_count)
.Add("abandon_count", exist.parse_abandon_count)
.Add("success_count", exist.parse_success_count);
}
if (data_type == 2)
{
update.Add("total_count", exist.coupon_total_count)
.Add("abandon_count", exist.coupon_abandon_count)
.Add("success_count", exist.coupon_success_count);
}
}
break;
}
case TkChannelEnum.jd:
{
var exist_report_dailys = new DBContext.Table(conn, "v_jd_spread_report")
.Get("report_date=@log_date", new { log_date });
if (exist_report_dailys != null)
{
update.Add("uclk_uv", 0)
.Add("pay_ord_uv", 0)//付款人数
.Add("uclk_pv", exist_report_dailys.clickNum) //点击量 点击次数
.Add("pay_tk_disp_tfee", exist_report_dailys.cosFee)//预估收入 付款预估收入
.Add("pay_ord_amt", exist_report_dailys.cosPrice) //付款金额
.Add("pay_ord_num", exist_report_dailys.orderNum)
.Add("order_ord_num", 0)
.Add("eff_ord_amt", exist_report_dailys.cosPrice) //有效订单金额 有效订单金额
.Add("eff_ord_num", exist_report_dailys.orderNum) //有效付款笔数
.Add("eff_tk_disp_tfee", exist_report_dailys.cosFee); //有效付款预估收入 预估收入
}
var exist = new DBContext.Table(center_conn, "center_daily_logs")
.Get("log_date=@log_date AND accountId=@accountId",
new { log_date, channel, accountId = 0 });
if (exist != null)
{
update.Add("total_count", exist.jd_parse_total_count)
.Add("abandon_count", exist.jd_parse_abandon_count)
.Add("success_count", exist.jd_parse_success_count);
}
break;
}
case TkChannelEnum.pdd:
{
var exist_report_dailys = new DBContext.Table(conn, "v_pdd_estimate_revenue")
.Get("report_date=@log_date", new { log_date });
if (exist_report_dailys != null)
{
decimal feeAmount = Math.Round(0.01m * (decimal)exist_report_dailys.feeAmount, 2);
decimal orderAmount = Math.Round(0.01m * (decimal)exist_report_dailys.orderAmount, 2);
update.Add("uclk_uv", 0)
.Add("pay_ord_uv", 0)//付款人数
.Add("uclk_pv", 0) //点击量 点击次数
.Add("pay_tk_disp_tfee", feeAmount)//预估收入 付款预估收入
.Add("pay_ord_amt", orderAmount) //付款金额
.Add("pay_ord_num", exist_report_dailys.orderNum)
.Add("order_ord_num", 0)
.Add("eff_ord_amt", orderAmount) //有效订单金额 有效订单金额
.Add("eff_ord_num", exist_report_dailys.orderNum) //有效付款笔数
.Add("eff_tk_disp_tfee", feeAmount); //有效付款预估收入 预估收入
}
var exist = new DBContext.Table(center_conn, "center_daily_logs")
.Get("log_date=@log_date AND accountId=@accountId",
new { log_date, channel, accountId = 0 });
if (exist != null)
{
update.Add("total_count", exist.pdd_parse_total_count)
.Add("abandon_count", exist.pdd_parse_abandon_count)
.Add("success_count", exist.pdd_parse_success_count);
}
break;
}
}
if (data_type == 1)
{
//todo 只有转链需要处理,优惠券和京东(未上线)暂不处理
update = await FillLinkTypeDataAsync(update, data_type, log_date, channel);
}
if (record == null)
{
update.Add("read_num", 0).Add("create_time", DateTime.Now).Create();
}
else
{
update.Add("read_num", record.read_num).Where("id=@id", new { record.id }).Update();
}
}
//public static void ApiCallStatistics(int intervalDay, TkChannelEnum channel, string prefix = "")
//{
// DateTime log_date = DateTime.Now.AddDays(-intervalDay).Date;
// var accounts = TkPoolCore.List();
// foreach (var account in accounts)
// {
// int accountId = account.id;
// string accountName = $"{channel}_{account.id}";
// int total_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:{log_date:yyyyMMdd}");
// if (total_count == 0) continue;
// var success_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:success:{log_date:yyyyMMdd}");
// var abandon_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:放弃转链:{log_date:yyyyMMdd}");
// string success_percentage = string.Empty;
// string abandon_percentage = string.Empty;
// if (total_count > 0)
// {
// success_percentage = $"{success_count / (double)total_count * 100:f2}%";
// abandon_percentage = $"{abandon_count / (double)total_count * 100:f2}%";
// }
// var exist = new DBContext.Table("api_call_statistics")
// .Fields("id,log_date")
// .Get("log_date=@log_date AND channel=@channel AND accountId=@accountId",
// new { log_date, channel, accountId });
// var createArgs = new DBContext.Table("api_call_statistics")
// .Add($"{prefix}total_count", total_count)
// .Add($"{prefix}abandon_count", abandon_count)
// .Add($"{prefix}abandon_percentage", abandon_percentage)
// .Add($"{prefix}success_count", success_count)
// .Add($"{prefix}success_percentage", success_percentage)
// .Add("last_time", DateTime.Now);
// if (exist == null)
// {
// createArgs.Add("channel", channel)
// .Add("accountId", accountId)
// .Add("accountName", account.company)
// .Add("log_date", log_date)
// .Add("create_time", DateTime.Now)
// .Create();
// }
// else
// {
// createArgs.Where("id=@id", new { exist.id }).Update();
// }
// }
// int all_total_count = TkLogCore.GetTotal($":{prefix}total:{channel.ToString()}:{log_date:yyyyMMdd}");
// var all_success_count = TkLogCore.GetTotal($":{prefix}total:{channel.ToString()}:success:{log_date:yyyyMMdd}");
// var all_abandon_count = TkLogCore.GetTotal($":{prefix}total:{channel.ToString()}:放弃转链:{log_date:yyyyMMdd}");
// string all_success_percentage = string.Empty;
// string all_abandon_percentage = string.Empty;
// if (all_total_count > 0)
// {
// all_success_percentage = $"{all_success_count / (double)all_total_count * 100:f2}%";
// all_abandon_percentage = $"{all_abandon_count / (double)all_total_count * 100:f2}%";
// }
// var exist2 = new DBContext.Table("api_call_statistics")
// .Fields("id,log_date")
// .Get("log_date=@log_date AND channel=@channel AND accountId=@accountId",
// new { log_date, channel, accountId = 0 });
// var createArgs2 = new DBContext.Table("api_call_statistics")
// .Add($"{prefix}total_count", all_total_count)
// .Add($"{prefix}abandon_count", all_abandon_count)
// .Add($"{prefix}abandon_percentage", all_abandon_percentage)
// .Add($"{prefix}success_count", all_success_count)
// .Add($"{prefix}success_percentage", all_success_percentage)
// .Add("last_time", DateTime.Now);
// if (exist2 == null)
// {
// createArgs2.Add("channel", channel)
// .Add("accountId", 0)
// .Add("accountName", "all")
// .Add("log_date", log_date)
// .Add("create_time", DateTime.Now)
// .Create();
// }
// else
// {
// createArgs2.Where("id=@id", new { exist2.id }).Update();
// }
//}
///
/// 事实动态接口(5分钟一次)
///
///
public async Task SaveReportOverview(int days = 0)
{
DateTime date = DateTime.Now;
if (days > 0) date = date.AddDays(-days);
TkReportDTO result = new TkReportDTO();
try
{
string t = $"{date.Convert2UnixTimestamp(true)}";
string dt = date.ToString("yyyy-MM-dd");
string url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/data.lens.report.overview.json?" +
$"t={t}&_tb_token_={_tb_token}&ruleEnum=pub_overview&startDate={dt}&endDate={dt}&fixPeriod=1d";
#if DEBUG
//_cookies = "t_alimama=265947ef5452cb1dbc3a85423cb0b4ac; xlly_s=1; wk_cookie2=153667c5e7c346da3c64cc8be5db65b5; wk_unb=UUpjNmHYrAUDFe1XcQ%3D%3D; arms_uid=50fb4ec1-5342-4774-9b30-822cfb71ac29; cookie2_alimama=1939cd118da29bee099e20497d91d195; lid=tb464407448627; cookie3_bak=17c2085f3ca7b7e1d9932184a321265b; env_bak=FM%2BgwZ4N3DW5Nit1vtAN%2BnGo%2FlvOs%2BhcfJ4%2F0uUixKyv; cookie3_bak_exp=1753443569194; havana_lgc_exp=1786690298961; dnk=tb464407448627; tracknick=tb464407448627; lgc=; cookie2=17c2085f3ca7b7e1d9932184a321265b; cancelledSubSites=empty; t=b0f1900bb872fb73431103fd9fd685da; sn=; _tb_token_=e3be75e77317e; uc1=cookie14=UoYbzibV4BRygw%3D%3D&pas=0&cookie16=WqG3DMC9UpAPBHGz5QBErFxlCA%3D%3D&existShop=false&cookie15=WqG3DMC9VAQiUQ%3D%3D&cookie21=V32FPkk%2FhSt4; sgcookie=E100maFa2uGfFmlaN000MHH4oUxgMX%2Fe%2FWHW96Um0swftox2LuxNNHviK0VTqoHo%2F1NuX%2BYAGoSBwA8mzA3bTrtPkhdwXGBaIPytPt3iO9Ay%2Bh8%3D; csg=8a980a9f; login=; rurl=aHR0cHM6Ly9wdWIuYWxpbWFtYS5jb20vaW5kZXguaHRtP2ZvcndhcmQ9aHR0cHMlM0ElMkYlMkZwdWIuYWxpbWFtYS5jb20lMkZwb3J0YWwlMkZ2MiUyRmVmZmVjdCUyRm9yZGVyJTJGb3ZlcnZpZXdPcmRlciUyRnBhZ2UlMkZpbmRleC5odG0%3D; v_alimama=0; JSESSIONID=5529D2F4B4C1D00E84AEBD50280FB383; cna=BfkxIaeXgCYCAXs5yWAuAa9d; x5sec=7b22733b32223a2231323332306465383836393966346263222c2277616762726964676561643b32223a2262373162373332303165646366383332613431613832353966653761656462614349715476635547454c2f706a354c342f2f2f2f2f774561447a49794d6a41794e544d314d5445314e446b374e6a44662b63377042513d3d227d; tfstk=gmTZ8YfPzV3Zz8wI5pQ4Uawh0yQOjZkSnE6fiIAc1OXGl1s2YK9H1Gi91Z-enpI1IZ_1msvXKOqfmNAcuLvz5OctMoz2nQXi6AH93rveZO4f5t_qg9Am6dT2Mr5DiKhOhfnB6CQAoYMSV4O96v7UUiHCojAhlsuH-XOv6CQY9WwmVHATgvY6YsfcnX7hg_CcoOXgxX5OwZ4GmPq3K9CcoZXcjyVhN_5Gi1fiTBXdiZXDnZcF-9CcotvcofqwndUFLGcnq0Zj2WBNbTAGLzRJ81xQXCXUorYeYGWkP9z0oe5wg2dbkzofE3B1VO9nRP72tsJPadynO9xetFIW9c4CIHOMni-KUz1N5HSy7hhYKCv5Q3b9G7k6Tg-F26j3gkACS_IkVMF4SB7hwg8GYSrG53OWkgYi78BC2sJPadyN4PwAthCXkhy00GfdTTGETp4iolm_ZK9uDoIEv6WSwbEYDGxPTTGEToEAxaCFFbXG.";
#endif
var client = new WebClientUtility().SetContentType("application/x-www-form-urlencoded; charset=UTF-8")
.AddHeaders("X-Requested-With", "XMLHttpRequest")
.AddHeaders("Cookie", _cookies);
client.Referer = "https://pub.alimama.com/portal/v2/pages/effect/account/total/page/index.htm";
#if DEBUG
client.Proxy = new System.Net.WebProxy("bjapi.molilian.com", 20087);
#else
client.Proxy = _proxy;
#endif
if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
var response = client.Request(url);
var body = response.Body();
JsonElement root = default;
try
{
root = body.Convert2JsonElement();
}
catch (Exception)
{
_ = new LoggerLibrary("error", "SaveReportOverview").Info(url, body).SaveAsync();
throw new Exception("SaveReportOverview body不是 json格式");
}
int resultCode = root.Read("resultCode", 0);
bool success = root.Read("success", false);
if (!success)
{
_ = new LoggerLibrary("error", "SaveReportOverview")
.Info(url, body)
.SaveAsync();
var bizErrorDesc = root.Read("bizErrorDesc", string.Empty);
if (resultCode == 500 && bizErrorDesc.Contains("For input string"))
{
return;
}
//{"success":false,"resultCode":500,"bizErrorDesc":"For input string: \"null\"","bizErrorCode":400}
throw new Exception(body);
}
var data = root.ElementRead("data").ElementRead("data");
result.eff_ord_num = data.Read("eff_ord_num", 0);
result.eff_ord_amt = data.Read("eff_ord_amt", 0);
result.eff_tk_disp_tfee = data.Read("eff_tk_disp_tfee", 0);
result.uclk_uv_56 = data.Read("uclk_uv_56", 0);
result.uclk_pv_56 = data.Read("uclk_pv_56", 0);
result.uclt_uv_56 = data.Read("uclt_uv_56", 0);
result.ucart_uv_56 = data.Read("ucart_uv_56", 0);
result.dep_ord_num_56 = data.Read("dep_ord_num_56", 0);
result.dep_ord_dep_amt_56 = data.Read("dep_ord_dep_amt_56", 0);
result.pay_ord_num_56 = data.Read("pay_ord_num_56", 0);
result.pay_ord_amt_56 = data.Read("pay_ord_amt_56", 0);
result.pay_tk_disp_tfee_56 = data.Read("pay_tk_disp_tfee_56", 0);
result.pay_ord_uv_56 = data.Read("pay_ord_uv_56", 0);
result.sett_ord_num_56 = data.Read("sett_ord_num_56", 0);
result.sett_ord_amt_56 = data.Read("sett_ord_amt_56", 0);
result.sett_tk_disp_tfee_56 = data.Read("sett_tk_disp_tfee_56", 0);
DateTime report_date = date.Date;
if (report_date == DateTime.Now.Date)
{
await RiskControlCore.SaveIncomeAmtAsync(TkChannelEnum.tb, $"{_accountId}", result.eff_tk_disp_tfee);
if (_account.is_hide) return;
await EachSaveReportOverviewAsync(report_date.AddHours(DateTime.Now.Hour), "tk_report_hourtrend", result);
await EachSaveReportOverviewAsync(report_date, "tk_report", result);
}
else
{
await EachSaveReportOverviewAsync(report_date, "tk_report", result);
}
}
catch (Exception ex)
{
string message = $"【报表接口异常】FastReport\n{ex.Message}\n{ex.StackTrace}";
NotifyCore.Notify(new NifyMessage
{
message = message,
priority = NifyMessagePriority.high,
tags = ["red_circle"]
});
}
}
private async Task EachSaveReportOverviewAsync(DateTime report_date, string tableName, TkReportDTO data)
{
try
{
var exist = new DBContext.Table(tableName)
.Fields("id, report_date")
.Get("report_date=@report_date AND accountId=@accountId",
new { report_date, accountId = _accountId });
var createArgs = new DBContext.Table(tableName)
.Add("uclk_uv_56", data.uclk_uv_56)
.Add("uclk_pv_56", data.uclk_pv_56)
.Add("uclt_uv_56", data.uclt_uv_56)
.Add("ucart_uv_56", data.ucart_uv_56)
.Add("dep_ord_num_56", data.dep_ord_num_56)
.Add("dep_ord_dep_amt_56", data.dep_ord_dep_amt_56)
.Add("pay_ord_num_56", data.pay_ord_num_56)
.Add("pay_ord_amt_56", data.pay_ord_amt_56)
.Add("pay_tk_disp_tfee_56", data.pay_tk_disp_tfee_56)
.Add("pay_ord_uv_56", data.pay_ord_uv_56)
.Add("sett_ord_num_56", data.sett_ord_num_56)
.Add("sett_ord_amt_56", data.sett_ord_amt_56)
.Add("sett_tk_disp_tfee_56", data.sett_tk_disp_tfee_56)
.Add("eff_ord_num", data.eff_ord_num)
.Add("eff_ord_amt", data.eff_ord_amt)
.Add("eff_tk_disp_tfee", data.eff_tk_disp_tfee);
string data_suffix = report_date.ToString("yyyyMMdd");
if ("tk_report_hourtrend".Equals(tableName))
{
data_suffix = report_date.ToString("yyyyMMddHH");
}
string accountName = $"{TkChannelEnum.tb}_{_accountId}";
int total_count = await TkLogCore.GetTotalAsync($":total:{accountName}:{data_suffix}");
int success_count = 0, abandon_count = 0;
string success_percentage = string.Empty, abandon_percentage = string.Empty;
if (total_count > 0)
{
success_count = await TkLogCore.GetTotalAsync($":total:{accountName}:success:{data_suffix}");
abandon_count = await TkLogCore.GetTotalAsync($":total:{accountName}:放弃转链:{data_suffix}");
if (total_count > 0)
{
success_percentage = $"{success_count / (double)total_count * 100:f2}%";
abandon_percentage = $"{abandon_count / (double)total_count * 100:f2}%";
}
}
createArgs.Add("total_count", total_count);
createArgs.Add("success_count", success_count);
createArgs.Add("abandon_count", abandon_count);
createArgs.Add("success_percentage", success_percentage);
createArgs.Add("abandon_percentage", abandon_percentage);
int parse_total_count = await TkLogCore.GetTotalAsync($":parse_total:{accountName}:{data_suffix}");
int parse_success_count = 0, parse_abandon_count = 0;
string parse_success_percentage = string.Empty, parse_abandon_percentage = string.Empty;
if (parse_total_count > 0)
{
parse_success_count = await TkLogCore.GetTotalAsync($":parse_total:{accountName}:success:{data_suffix}");
parse_abandon_count = await TkLogCore.GetTotalAsync($":parse_total:{accountName}:放弃转链:{data_suffix}");
if (parse_total_count > 0)
{
parse_success_percentage = $"{parse_success_count / (double)parse_total_count * 100:f2}%";
parse_abandon_percentage = $"{parse_abandon_count / (double)parse_total_count * 100:f2}%";
}
}
createArgs.Add("parse_total_count", parse_total_count);
createArgs.Add("parse_success_count", parse_success_count);
createArgs.Add("parse_abandon_count", parse_abandon_count);
createArgs.Add("parse_success_percentage", parse_success_percentage);
createArgs.Add("parse_abandon_percentage", parse_abandon_percentage);
int coupon_total_count = await TkLogCore.GetTotalAsync($":coupon_total:{accountName}:{data_suffix}", false);
int coupon_success_count = 0, coupon_abandon_count = 0;
string coupon_success_percentage = string.Empty, coupon_abandon_percentage = string.Empty;
if (coupon_total_count > 0)
{
coupon_success_count = await TkLogCore.GetTotalAsync($":coupon_total:{accountName}:success:{data_suffix}", false);
coupon_abandon_count = await TkLogCore.GetTotalAsync($":coupon_total:{accountName}:放弃转链:{data_suffix}", false);
if (coupon_total_count > 0)
{
coupon_success_percentage = $"{coupon_success_count / (double)coupon_total_count * 100:f2}%";
coupon_abandon_percentage = $"{coupon_abandon_count / (double)coupon_total_count * 100:f2}%";
}
}
createArgs.Add("coupon_total_count", coupon_total_count);
createArgs.Add("coupon_success_count", coupon_success_count);
createArgs.Add("coupon_abandon_count", coupon_abandon_count);
createArgs.Add("coupon_success_percentage", coupon_success_percentage);
createArgs.Add("coupon_abandon_percentage", coupon_abandon_percentage);
int tool_total_count = await TkLogCore.GetTotalAsync($":tool_total:{accountName}:{data_suffix}");
int tool_success_count = 0, tool_abandon_count = 0;
string tool_success_percentage = string.Empty, tool_abandon_percentage = string.Empty;
if (tool_total_count > 0)
{
tool_success_count = await TkLogCore.GetTotalAsync($":tool_total:{accountName}:success:{data_suffix}");
tool_abandon_count = await TkLogCore.GetTotalAsync($":tool_total:{accountName}:放弃转链:{data_suffix}");
if (tool_total_count > 0)
{
tool_success_percentage = $"{tool_success_count / (double)tool_total_count * 100:f2}%";
tool_abandon_percentage = $"{tool_abandon_count / (double)tool_total_count * 100:f2}%";
}
}
createArgs.Add("tool_total_count", tool_total_count);
createArgs.Add("tool_success_count", tool_success_count);
createArgs.Add("tool_abandon_count", tool_abandon_count);
createArgs.Add("tool_success_percentage", tool_success_percentage);
createArgs.Add("tool_abandon_percentage", tool_abandon_percentage);
if (exist == null)
{
createArgs.Add("accountId", _accountId)
.Add("accountName", _company)
.Add("report_date", report_date)
.Add("create_time", DateTime.Now)
.Add("last_time", DateTime.Now)
.Create();
}
else
{
createArgs.Add("last_time", DateTime.Now)
.Where("id=@id", new { exist.id })
.Update();
}
}
catch (Exception ex)
{
string msg = ex.Message;
}
}
///
/// 修正点击数
///
public async Task FixReport(DateTime date)
{
TkReportDTO result = new TkReportDTO();
try
{
string t = $"{date.Convert2UnixTimestamp(true)}";
string dt = date.ToString("yyyy-MM-dd");
string url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/data.lens.report.overview.json?" +
$"t={t}&_tb_token_={_tb_token}&ruleEnum=pub_overview&startDate={dt}&endDate={dt}&fixPeriod=1d";
var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
.AddHeaders("X-Requested-With", "XMLHttpRequest")
.AddHeaders("Cookie", _cookies);
#if DEBUG
#else
client.Proxy = _proxy;
#endif
if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
var response = client.Request(url);
var body = response.Body();
var root = body.Convert2JsonElement();
int resultCode = root.Read("resultCode", 0);
bool success = root.Read("success", false);
if (!success)
{
var bizErrorDesc = root.Read("bizErrorDesc", string.Empty);
if (resultCode == 500 && bizErrorDesc.Contains("For input string"))
{
return;
}
_ = new LoggerLibrary("report", "error")
.Info(url, body)
.SaveAsync();
throw new Exception(body);
}
var data = root.ElementRead("data").ElementRead("data");
result.eff_ord_num = data.Read("eff_ord_num", 0);
result.eff_ord_amt = data.Read("eff_ord_amt", 0);
result.eff_tk_disp_tfee = data.Read("eff_tk_disp_tfee", 0);
result.uclk_uv_56 = data.Read("uclk_uv_56", 0);
result.uclk_pv_56 = data.Read("uclk_pv_56", 0);
result.uclt_uv_56 = data.Read("uclt_uv_56", 0);
result.ucart_uv_56 = data.Read("ucart_uv_56", 0);
result.dep_ord_num_56 = data.Read("dep_ord_num_56", 0);
result.dep_ord_dep_amt_56 = data.Read("dep_ord_dep_amt_56", 0);
result.pay_ord_num_56 = data.Read("pay_ord_num_56", 0);
result.pay_ord_amt_56 = data.Read("pay_ord_amt_56", 0);
result.pay_tk_disp_tfee_56 = data.Read("pay_tk_disp_tfee_56", 0);
result.pay_ord_uv_56 = data.Read("pay_ord_uv_56", 0);
result.sett_ord_num_56 = data.Read("sett_ord_num_56", 0);
result.sett_ord_amt_56 = data.Read("sett_ord_amt_56", 0);
result.sett_tk_disp_tfee_56 = data.Read("sett_tk_disp_tfee_56", 0);
DateTime report_date = date.Date;
if (_account.is_hide) return;
await EachSaveReportOverviewAsync(report_date, "tk_report", result);
//var exist = new DBContext.Table("tk_report")
// .Fields("id,report_date")
// .Get("report_date=@report_date AND accountId=@accountId",
// new { report_date, accountId = _accountId });
//var createArgs = new DBContext.Table("tk_report")
// .Add("fix_uclk_pv_56", result.fix_uclk_pv_56);
//if (exist == null)
//{
// createArgs.Add("accountId", _accountId)
// .Add("accountName", _company)
// .Add("report_date", report_date)
// .Add("create_time", DateTime.Now)
// .Add("last_time", DateTime.Now)
// .Create();
//}
//else
//{
// createArgs.Add("last_time", DateTime.Now)
// .Where("id=@id", new { exist.id })
// .Update();
//}
}
catch (Exception ex) { }
}
///
/// 1小时更新一次
///
public void SaveReportHourtrend(DateTime date)
{
string t = $"{DateTime.Now.Convert2UnixTimestamp(true)}";
string dt = date.ToString("yyyy-MM-dd");
string url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/data.lens.report.hourtrend.dod.json?" +
$"t={t}&_tb_token_={_tb_token}&ruleEnum=pub_homepage&startDate={dt}&endDate={dt}&fixPeriod=realTime";
var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
.AddHeaders("X-Requested-With", "XMLHttpRequest")
.AddHeaders("Cookie", _cookies);
#if DEBUG
#else
client.Proxy = _proxy;
#endif
if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
var response = client.Request(url);
var body = response.Body();
var root = body.Convert2JsonElement();
int resultCode = root.Read("resultCode", 0);
bool success = root.Read("success", false);
if (!success)
{
_ = new LoggerLibrary("report", "error")
.Info(url, body)
.SaveAsync();
var bizErrorDesc = root.Read("bizErrorDesc", string.Empty);
if (resultCode == 500 && bizErrorDesc.Contains("For input string"))
{
return;
}
_ = new LoggerLibrary("report", "error")
.Info(url, body)
.SaveAsync();
throw new Exception(body);
}
var data_list = root.ElementRead("data").ElementRead("data");
foreach (var data in data_list.EnumerateArray())
{
string xAxis = data.Read("xAxis");
string _report_date = $"{dt} {xAxis}";
EachSaveReport(_report_date, "tk_report_hourtrend", data);
if ("23:00".Equals(xAxis))
{
EachSaveReport(dt, "tk_report", data);
}
}
}
private void EachSaveReport(string _report_date, string tableName, JsonElement data)
{
_ = DateTime.TryParse(_report_date, out DateTime report_date);
var exist = new DBContext.Table(tableName)
.Fields("id,report_date")
.Get("report_date=@report_date AND accountId=@accountId",
new { report_date, accountId = _accountId });
if (exist == null)
{
new DBContext.Table(tableName)
.Fill(data)
.Loader("uclk_uv_56", 0)
.Loader("uclk_pv_56", 0)
.Loader("uclt_uv_56", 0)
.Loader("ucart_uv_56", 0)
.Loader("dep_ord_num_56", 0)
.Loader("dep_ord_dep_amt_56", 0)
.Loader("pay_ord_num_56", 0)
.Loader("pay_ord_amt_56", 0)
.Loader("pay_tk_disp_tfee_56", 0)
.Loader("pay_ord_uv_56", 0)
.Loader("sett_ord_num_56", 0)
.Loader("sett_ord_amt_56", 0)
.Loader("sett_tk_disp_tfee_56", 0)
.Add("accountId", _accountId)
.Add("accountName", _company)
.Add("report_date", report_date)
.Add("create_time", DateTime.Now)
.Add("last_time", DateTime.Now)
.Create();
}
else
{
new DBContext.Table(tableName)
.Fill(data)
.Loader("uclk_uv_56", 0)
.Loader("uclk_pv_56", 0)
.Loader("uclt_uv_56", 0)
.Loader("ucart_uv_56", 0)
.Loader("dep_ord_num_56", 0)
.Loader("dep_ord_dep_amt_56", 0)
.Loader("pay_ord_num_56", 0)
.Loader("pay_ord_amt_56", 0)
.Loader("pay_tk_disp_tfee_56", 0)
.Loader("pay_ord_uv_56", 0)
.Loader("sett_ord_num_56", 0)
.Loader("sett_ord_amt_56", 0)
.Loader("sett_tk_disp_tfee_56", 0)
.Add("last_time", DateTime.Now)
.Where("id=@id", new { exist.id })
.Update();
}
}
///
/// 警告消息
///
public void GetViolationuWarning()
{
try
{
string url = "https://media.alimama.com/violationu2/warning_instance_page_v2.json?r=mx_208&toPage=1&pageSize=40¶ms=";
var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
.AddHeaders("X-Requested-With", "XMLHttpRequest")
.AddHeaders("Cookie", _cookies);
#if DEBUG
#else
client.Proxy = _proxy;
#endif
if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
var response = client.Request(url);
var body = response.Body();
var root = body.Convert2JsonElement();
int resultCode = root.Read("resultCode", 0);
int totalCount = root.PathRead("data.totalCount", 0);
bool success = root.Read("success", false);
if (!success)
{
_ = new LoggerLibrary("violationu", "warning_error")
.Info(url, body)
.SaveAsync();
throw new Exception(body);
}
if (totalCount == 0) return;
_ = new LoggerLibrary("violationu", "warning").Info(url, body).SaveAsync();
var list = root.ElementRead("data").ElementRead("result").EnumerateArray();
foreach (var data in list)
{
var violation_commission = data.PathRead("mediaInfo.订单虚假交易违规佣金", 0);
new DBContext.Table("alimama_warning")
.Fill(data)
.Loader("filterRuleId", 0)
.Loader("gmtCreate", 0)
.Loader("id", 0, "ali_id")
.Loader("idStr", string.Empty)
.Loader("mediaDimension", 0)
.Loader("mediaId", 0)
.Loader("mediaInfo.abn_cnt", 0, "abn_cnt")
.Add("violation_commission", violation_commission)
.Loader("mediaInfo.warning_cnt", 0, "warning_cnt")
.Loader("mediaName", string.Empty)
.Loader("memberId", 0)
.Loader("noticeCategory", string.Empty)
.Loader("noticeTemplateId", 0)
.Loader("noticeTemplateName", string.Empty)
.Loader("orderFile", string.Empty)
.Loader("pid", string.Empty)
.Loader("punishRuleId", 0)
.Loader("riskType", string.Empty)
.Loader("roleName", string.Empty)
.Loader("ruleLink", string.Empty)
.Loader("showOrderDetail", false)
.Loader("status", 0, "ali_status")
.Loader("warningText", string.Empty)
.Add("accountName", _company)
.Add("status", true)
.Add("create_time", DateTime.Now)
.Add("last_time", DateTime.Now)
.Create(DBContext.InsertType.REPLACE);
}
}
catch (Exception ex) { }
}
}
}