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) { } } } }