using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using dodohold.core;
using Dataoke;
using System.Text.RegularExpressions;
using Org.BouncyCastle.Ocsp;
using System.Diagnostics;
using TencentCloud.Fmu.V20191213.Models;
using Microsoft.VisualBasic;
using System.Text.Json;
using static System.Runtime.InteropServices.JavaScript.JSType;
using TencentCloud.Cdn.V20180606.Models;
using System.Net;
using TencentCloud.Teo.V20220901.Models;
using MySqlX.XDevAPI;
namespace molilian.core
{
public partial class AlimamaPlus
{
///
/// 更新API调用日志(1天一次)
///
///
public static void DailyLogs(int intervalDay)
{
DateTime log_date = DateTime.Now.AddDays(-intervalDay).Date;
var accounts = TkPoolCore.List();
foreach (var account in accounts)
{
int accountId = account.id;
string accountName = $"{TkChannelEnum.tb}_{account.id}";
int total_count = RedisHelper.Get($":total:{accountName}:{log_date:yyyyMMdd}");
if (total_count == 0) accountName = account.name;
total_count = RedisHelper.Get($":total:{accountName}:{log_date:yyyyMMdd}");
if (total_count == 0) continue;
var success_count = RedisHelper.Get($":total:{accountName}:success:{log_date:yyyyMMdd}");
var abandon_count = RedisHelper.Get($":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 accountId=@accountId", new { log_date, accountId });
var createArgs = new DBContext.Table("daily_logs")
.Add("total_count", total_count)
.Add("abandon_count", abandon_count)
.Add("abandon_percentage", abandon_percentage)
.Add("success_count", success_count)
.Add("success_percentage", success_percentage)
.Add("last_time", DateTime.Now);
if (exist == null)
{
createArgs.Add("channel", 0)
.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 = RedisHelper.Get($":total:all:{log_date:yyyyMMdd}");
var all_success_count = RedisHelper.Get($":total:all:success:{log_date:yyyyMMdd}");
var all_abandon_count = RedisHelper.Get($":total:all:放弃转链:{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("daily_logs")
.Fields("id,log_date")
.Get("log_date=@log_date AND accountId=@accountId", new { log_date, accountId = 0 });
var createArgs2 = new DBContext.Table("daily_logs")
.Add("total_count", all_total_count)
.Add("abandon_count", all_abandon_count)
.Add("abandon_percentage", all_abandon_percentage)
.Add("success_count", all_success_count)
.Add("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();
}
string sql = @$"
INSERT INTO daily_logs (channel, accountId, accountName, log_date, total_count, abandon_count, abandon_percentage, success_count, success_percentage, create_time, last_time)
SELECT
0 AS channel, 0 AS accountId, 'all' AS accountName,
DATE_SUB(CURDATE(), INTERVAL {intervalDay} DAY) AS log_date,
COUNT(*) AS total_count,
COALESCE(SUM(CASE WHEN message = '放弃转链' THEN 1 ELSE 0 END), 0) AS abandon_count,
COALESCE(CONCAT(ROUND((SUM(CASE WHEN message = '放弃转链' THEN 1 ELSE 0 END) / COUNT(*)) * 100, 2), '%'), 0) AS abandon_percentage,
COALESCE(SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END), 0) AS success_count,
COALESCE(CONCAT(ROUND((SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) / COUNT(*)) * 100, 2), '%'), 0) AS success_percentage,
NOW() AS create_time,
NOW() AS last_time
FROM tk_logs
WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL {intervalDay} DAY)
ON DUPLICATE KEY UPDATE
log_date = VALUES(log_date),
total_count = VALUES(total_count),
abandon_count = VALUES(abandon_count),
abandon_percentage = VALUES(abandon_percentage),
success_count = VALUES(success_count),
success_percentage = VALUES(success_percentage),
last_time = NOW();
";
string sql2 = @$"
INSERT INTO daily_logs (channel, accountId, accountName, log_date, total_count, abandon_count, abandon_percentage, success_count, success_percentage, create_time, last_time)
SELECT
channel, accountId, accountName, DATE_SUB(CURDATE(), INTERVAL {intervalDay} DAY) AS log_date,
COUNT(*) AS total_count,
COALESCE(SUM(CASE WHEN message = '放弃转链' THEN 1 ELSE 0 END), 0) AS abandon_count,
COALESCE(CONCAT(ROUND((SUM(CASE WHEN message = '放弃转链' THEN 1 ELSE 0 END) / COUNT(*)) * 100, 2), '%'), 0) AS abandon_percentage,
COALESCE(SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END), 0) AS success_count,
COALESCE(CONCAT(ROUND((SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) / COUNT(*)) * 100, 2), '%'), 0) AS success_percentage,
NOW() AS create_time,
NOW() AS last_time
FROM tk_logs
WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL {intervalDay} DAY)
GROUP BY channel, accountId, accountName
ON DUPLICATE KEY UPDATE
log_date = VALUES(log_date),
total_count = VALUES(total_count),
abandon_count = VALUES(abandon_count),
abandon_percentage = VALUES(abandon_percentage),
success_count = VALUES(success_count),
success_percentage = VALUES(success_percentage),
last_time = NOW();
";
//DBContext.Execute(sql, new { });
//DBContext.Execute(sql2, new { });
}
///
/// 事实动态接口(5分钟一次)
///
///
public void SaveReportOverview()
{
DateTime date = DateTime.Now;
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)
{
_ = 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 (report_date == DateTime.Now.Date)
{
TkPoolCore.SaveIncomeAmt(_accountId.ToString(), result.eff_tk_disp_tfee);
TkPoolCore.SaveIncomeAmt(_accountName, result.eff_tk_disp_tfee);
EachSaveReportOverview(report_date.AddHours(DateTime.Now.Hour), "tk_report_hourtrend", result);
EachSaveReportOverview(report_date, "tk_report", result);
}
}
catch (Exception ex) { }
}
private void EachSaveReportOverview(DateTime report_date, string tableName, TkReportDTO data)
{
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);
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();
}
}
///
/// 修正点击数
///
public void 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)
{
_ = 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;
EachSaveReportOverview(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();
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) { }
}
}
}