crawler.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671
  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc.Controllers;
  3. using Microsoft.AspNetCore.Mvc.Filters;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using dodohold.core;
  9. using Dataoke;
  10. using System.Text.RegularExpressions;
  11. using Org.BouncyCastle.Ocsp;
  12. using System.Diagnostics;
  13. using TencentCloud.Fmu.V20191213.Models;
  14. using Microsoft.VisualBasic;
  15. using System.Text.Json;
  16. using static System.Runtime.InteropServices.JavaScript.JSType;
  17. using TencentCloud.Cdn.V20180606.Models;
  18. using System.Net;
  19. using TencentCloud.Teo.V20220901.Models;
  20. using MySqlX.XDevAPI;
  21. namespace molilian.core
  22. {
  23. public partial class AlimamaPlus
  24. {
  25. /// <summary>
  26. /// 更新API调用日志(1天一次)
  27. /// </summary>
  28. /// <param name="intervalDay"></param>
  29. public static void DailyLogs(int intervalDay, string prefix = "", string channel = "all")
  30. {
  31. var db_prefix = prefix;
  32. if (channel == "tool")
  33. {
  34. db_prefix = "tool_";
  35. }
  36. DateTime log_date = DateTime.Now.AddDays(-intervalDay).Date;
  37. var accounts = TkPoolCore.List();
  38. foreach (var account in accounts)
  39. {
  40. int accountId = account.id;
  41. string accountName = $"{TkChannelEnum.tb}_{account.id}";
  42. int total_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:{log_date:yyyyMMdd}");
  43. if (total_count == 0) accountName = account.name;
  44. total_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:{log_date:yyyyMMdd}");
  45. if (total_count == 0) continue;
  46. var success_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:success:{log_date:yyyyMMdd}");
  47. var abandon_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:放弃转链:{log_date:yyyyMMdd}");
  48. string success_percentage = string.Empty;
  49. string abandon_percentage = string.Empty;
  50. if (total_count > 0)
  51. {
  52. success_percentage = $"{success_count / (double)total_count * 100:f2}%";
  53. abandon_percentage = $"{abandon_count / (double)total_count * 100:f2}%";
  54. }
  55. var exist = new DBContext.Table("daily_logs")
  56. .Fields("id,log_date")
  57. .Get<dynamic>("log_date=@log_date AND accountId=@accountId", new { log_date, accountId });
  58. var createArgs = new DBContext.Table("daily_logs")
  59. .Add($"{db_prefix}total_count", total_count)
  60. .Add($"{db_prefix}abandon_count", abandon_count)
  61. .Add($"{db_prefix}abandon_percentage", abandon_percentage)
  62. .Add($"{db_prefix}success_count", success_count)
  63. .Add($"{db_prefix}success_percentage", success_percentage)
  64. .Add("last_time", DateTime.Now);
  65. if (exist == null)
  66. {
  67. createArgs.Add("channel", 0)
  68. .Add("accountId", accountId)
  69. .Add("accountName", account.company)
  70. .Add("log_date", log_date)
  71. .Add("create_time", DateTime.Now)
  72. .Create();
  73. }
  74. else
  75. {
  76. createArgs.Where("id=@id", new { exist.id }).Update();
  77. }
  78. }
  79. int all_total_count = TkLogCore.GetTotal($":{prefix}total:{channel}:{log_date:yyyyMMdd}");
  80. var all_success_count = TkLogCore.GetTotal($":{prefix}total:{channel}:success:{log_date:yyyyMMdd}");
  81. var all_abandon_count = TkLogCore.GetTotal($":{prefix}total:{channel}:放弃转链:{log_date:yyyyMMdd}");
  82. string all_success_percentage = string.Empty;
  83. string all_abandon_percentage = string.Empty;
  84. if (all_total_count > 0)
  85. {
  86. all_success_percentage = $"{all_success_count / (double)all_total_count * 100:f2}%";
  87. all_abandon_percentage = $"{all_abandon_count / (double)all_total_count * 100:f2}%";
  88. }
  89. var exist2 = new DBContext.Table("daily_logs")
  90. .Fields("id,log_date")
  91. .Get<dynamic>("log_date=@log_date AND accountId=@accountId", new { log_date, accountId = 0 });
  92. var createArgs2 = new DBContext.Table("daily_logs")
  93. .Add($"{db_prefix}total_count", all_total_count)
  94. .Add($"{db_prefix}abandon_count", all_abandon_count)
  95. .Add($"{db_prefix}abandon_percentage", all_abandon_percentage)
  96. .Add($"{db_prefix}success_count", all_success_count)
  97. .Add($"{db_prefix}success_percentage", all_success_percentage)
  98. .Add("last_time", DateTime.Now);
  99. if (exist2 == null)
  100. {
  101. createArgs2.Add("channel", 0)
  102. .Add("accountId", 0)
  103. .Add("accountName", "all")
  104. .Add("log_date", log_date)
  105. .Add("create_time", DateTime.Now)
  106. .Create();
  107. }
  108. else
  109. {
  110. createArgs2.Where("id=@id", new { exist2.id }).Update();
  111. }
  112. string sql = @$"
  113. INSERT INTO daily_logs (channel, accountId, accountName, log_date, total_count, abandon_count, abandon_percentage, success_count, success_percentage, create_time, last_time)
  114. SELECT
  115. 0 AS channel, 0 AS accountId, 'all' AS accountName,
  116. DATE_SUB(CURDATE(), INTERVAL {intervalDay} DAY) AS log_date,
  117. COUNT(*) AS total_count,
  118. COALESCE(SUM(CASE WHEN message = '放弃转链' THEN 1 ELSE 0 END), 0) AS abandon_count,
  119. COALESCE(CONCAT(ROUND((SUM(CASE WHEN message = '放弃转链' THEN 1 ELSE 0 END) / COUNT(*)) * 100, 2), '%'), 0) AS abandon_percentage,
  120. COALESCE(SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END), 0) AS success_count,
  121. COALESCE(CONCAT(ROUND((SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) / COUNT(*)) * 100, 2), '%'), 0) AS success_percentage,
  122. NOW() AS create_time,
  123. NOW() AS last_time
  124. FROM tk_logs
  125. WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL {intervalDay} DAY)
  126. ON DUPLICATE KEY UPDATE
  127. log_date = VALUES(log_date),
  128. total_count = VALUES(total_count),
  129. abandon_count = VALUES(abandon_count),
  130. abandon_percentage = VALUES(abandon_percentage),
  131. success_count = VALUES(success_count),
  132. success_percentage = VALUES(success_percentage),
  133. last_time = NOW();
  134. ";
  135. string sql2 = @$"
  136. INSERT INTO daily_logs (channel, accountId, accountName, log_date, total_count, abandon_count, abandon_percentage, success_count, success_percentage, create_time, last_time)
  137. SELECT
  138. channel, accountId, accountName, DATE_SUB(CURDATE(), INTERVAL {intervalDay} DAY) AS log_date,
  139. COUNT(*) AS total_count,
  140. COALESCE(SUM(CASE WHEN message = '放弃转链' THEN 1 ELSE 0 END), 0) AS abandon_count,
  141. COALESCE(CONCAT(ROUND((SUM(CASE WHEN message = '放弃转链' THEN 1 ELSE 0 END) / COUNT(*)) * 100, 2), '%'), 0) AS abandon_percentage,
  142. COALESCE(SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END), 0) AS success_count,
  143. COALESCE(CONCAT(ROUND((SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) / COUNT(*)) * 100, 2), '%'), 0) AS success_percentage,
  144. NOW() AS create_time,
  145. NOW() AS last_time
  146. FROM tk_logs
  147. WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL {intervalDay} DAY)
  148. GROUP BY channel, accountId, accountName
  149. ON DUPLICATE KEY UPDATE
  150. log_date = VALUES(log_date),
  151. total_count = VALUES(total_count),
  152. abandon_count = VALUES(abandon_count),
  153. abandon_percentage = VALUES(abandon_percentage),
  154. success_count = VALUES(success_count),
  155. success_percentage = VALUES(success_percentage),
  156. last_time = NOW();
  157. ";
  158. //DBContext.Execute(sql, new { });
  159. //DBContext.Execute(sql2, new { });
  160. }
  161. public static void ApiCallStatistics(int intervalDay, TkChannelEnum channel, string prefix = "")
  162. {
  163. DateTime log_date = DateTime.Now.AddDays(-intervalDay).Date;
  164. var accounts = TkPoolCore.List();
  165. foreach (var account in accounts)
  166. {
  167. int accountId = account.id;
  168. string accountName = $"{channel}_{account.id}";
  169. int total_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:{log_date:yyyyMMdd}");
  170. if (total_count == 0) continue;
  171. var success_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:success:{log_date:yyyyMMdd}");
  172. var abandon_count = TkLogCore.GetTotal($":{prefix}total:{accountName}:放弃转链:{log_date:yyyyMMdd}");
  173. string success_percentage = string.Empty;
  174. string abandon_percentage = string.Empty;
  175. if (total_count > 0)
  176. {
  177. success_percentage = $"{success_count / (double)total_count * 100:f2}%";
  178. abandon_percentage = $"{abandon_count / (double)total_count * 100:f2}%";
  179. }
  180. var exist = new DBContext.Table("api_call_statistics")
  181. .Fields("id,log_date")
  182. .Get<dynamic>("log_date=@log_date AND channel=@channel AND accountId=@accountId",
  183. new { log_date, channel, accountId });
  184. var createArgs = new DBContext.Table("api_call_statistics")
  185. .Add($"{prefix}total_count", total_count)
  186. .Add($"{prefix}abandon_count", abandon_count)
  187. .Add($"{prefix}abandon_percentage", abandon_percentage)
  188. .Add($"{prefix}success_count", success_count)
  189. .Add($"{prefix}success_percentage", success_percentage)
  190. .Add("last_time", DateTime.Now);
  191. if (exist == null)
  192. {
  193. createArgs.Add("channel", channel)
  194. .Add("accountId", accountId)
  195. .Add("accountName", account.company)
  196. .Add("log_date", log_date)
  197. .Add("create_time", DateTime.Now)
  198. .Create();
  199. }
  200. else
  201. {
  202. createArgs.Where("id=@id", new { exist.id }).Update();
  203. }
  204. }
  205. int all_total_count = TkLogCore.GetTotal($":{prefix}total:{channel.ToString()}:{log_date:yyyyMMdd}");
  206. var all_success_count = TkLogCore.GetTotal($":{prefix}total:{channel.ToString()}:success:{log_date:yyyyMMdd}");
  207. var all_abandon_count = TkLogCore.GetTotal($":{prefix}total:{channel.ToString()}:放弃转链:{log_date:yyyyMMdd}");
  208. string all_success_percentage = string.Empty;
  209. string all_abandon_percentage = string.Empty;
  210. if (all_total_count > 0)
  211. {
  212. all_success_percentage = $"{all_success_count / (double)all_total_count * 100:f2}%";
  213. all_abandon_percentage = $"{all_abandon_count / (double)all_total_count * 100:f2}%";
  214. }
  215. var exist2 = new DBContext.Table("api_call_statistics")
  216. .Fields("id,log_date")
  217. .Get<dynamic>("log_date=@log_date AND channel=@channel AND accountId=@accountId",
  218. new { log_date, channel, accountId = 0 });
  219. var createArgs2 = new DBContext.Table("api_call_statistics")
  220. .Add($"{prefix}total_count", all_total_count)
  221. .Add($"{prefix}abandon_count", all_abandon_count)
  222. .Add($"{prefix}abandon_percentage", all_abandon_percentage)
  223. .Add($"{prefix}success_count", all_success_count)
  224. .Add($"{prefix}success_percentage", all_success_percentage)
  225. .Add("last_time", DateTime.Now);
  226. if (exist2 == null)
  227. {
  228. createArgs2.Add("channel", channel)
  229. .Add("accountId", 0)
  230. .Add("accountName", "all")
  231. .Add("log_date", log_date)
  232. .Add("create_time", DateTime.Now)
  233. .Create();
  234. }
  235. else
  236. {
  237. createArgs2.Where("id=@id", new { exist2.id }).Update();
  238. }
  239. }
  240. /// <summary>
  241. /// 事实动态接口(5分钟一次)
  242. /// </summary>
  243. /// <param name="date"></param>
  244. public void SaveReportOverview()
  245. {
  246. DateTime date = DateTime.Now;
  247. TkReportDTO result = new TkReportDTO();
  248. try
  249. {
  250. string t = $"{date.Convert2UnixTimestamp(true)}";
  251. string dt = date.ToString("yyyy-MM-dd");
  252. string url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/data.lens.report.overview.json?" +
  253. $"t={t}&_tb_token_={_tb_token}&ruleEnum=pub_overview&startDate={dt}&endDate={dt}&fixPeriod=1d";
  254. var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
  255. .AddHeaders("X-Requested-With", "XMLHttpRequest")
  256. .AddHeaders("Cookie", _cookies);
  257. #if DEBUG
  258. #else
  259. client.Proxy = _proxy;
  260. #endif
  261. if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
  262. var response = client.Request(url);
  263. var body = response.Body();
  264. var root = body.Convert2JsonElement();
  265. int resultCode = root.Read<int>("resultCode", 0);
  266. bool success = root.Read("success", false);
  267. if (!success)
  268. {
  269. _ = new LoggerLibrary("report", "error")
  270. .Info(url, body)
  271. .SaveAsync();
  272. throw new Exception(body);
  273. }
  274. var data = root.ElementRead("data").ElementRead("data");
  275. result.eff_ord_num = data.Read<int>("eff_ord_num", 0);
  276. result.eff_ord_amt = data.Read<decimal>("eff_ord_amt", 0);
  277. result.eff_tk_disp_tfee = data.Read<decimal>("eff_tk_disp_tfee", 0);
  278. result.uclk_uv_56 = data.Read<int>("uclk_uv_56", 0);
  279. result.uclk_pv_56 = data.Read<int>("uclk_pv_56", 0);
  280. result.uclt_uv_56 = data.Read<int>("uclt_uv_56", 0);
  281. result.ucart_uv_56 = data.Read<int>("ucart_uv_56", 0);
  282. result.dep_ord_num_56 = data.Read<int>("dep_ord_num_56", 0);
  283. result.dep_ord_dep_amt_56 = data.Read<decimal>("dep_ord_dep_amt_56", 0);
  284. result.pay_ord_num_56 = data.Read<int>("pay_ord_num_56", 0);
  285. result.pay_ord_amt_56 = data.Read<decimal>("pay_ord_amt_56", 0);
  286. result.pay_tk_disp_tfee_56 = data.Read<decimal>("pay_tk_disp_tfee_56", 0);
  287. result.pay_ord_uv_56 = data.Read<int>("pay_ord_uv_56", 0);
  288. result.sett_ord_num_56 = data.Read<int>("sett_ord_num_56", 0);
  289. result.sett_ord_amt_56 = data.Read<decimal>("sett_ord_amt_56", 0);
  290. result.sett_tk_disp_tfee_56 = data.Read<decimal>("sett_tk_disp_tfee_56", 0);
  291. DateTime report_date = date.Date;
  292. if (report_date == DateTime.Now.Date)
  293. {
  294. TkPoolCore.SaveIncomeAmt(_accountId.ToString(), result.eff_tk_disp_tfee);
  295. TkPoolCore.SaveIncomeAmt(_accountName, result.eff_tk_disp_tfee);
  296. EachSaveReportOverview(report_date.AddHours(DateTime.Now.Hour), "tk_report_hourtrend", result);
  297. EachSaveReportOverview(report_date, "tk_report", result);
  298. }
  299. }
  300. catch (Exception ex) { }
  301. }
  302. private void EachSaveReportOverview(DateTime report_date, string tableName, TkReportDTO data)
  303. {
  304. var exist = new DBContext.Table(tableName)
  305. .Fields("id,report_date")
  306. .Get<dynamic>("report_date=@report_date AND accountId=@accountId",
  307. new { report_date, accountId = _accountId });
  308. var createArgs = new DBContext.Table(tableName)
  309. .Add("uclk_uv_56", data.uclk_uv_56)
  310. .Add("uclk_pv_56", data.uclk_pv_56)
  311. .Add("uclt_uv_56", data.uclt_uv_56)
  312. .Add("ucart_uv_56", data.ucart_uv_56)
  313. .Add("dep_ord_num_56", data.dep_ord_num_56)
  314. .Add("dep_ord_dep_amt_56", data.dep_ord_dep_amt_56)
  315. .Add("pay_ord_num_56", data.pay_ord_num_56)
  316. .Add("pay_ord_amt_56", data.pay_ord_amt_56)
  317. .Add("pay_tk_disp_tfee_56", data.pay_tk_disp_tfee_56)
  318. .Add("pay_ord_uv_56", data.pay_ord_uv_56)
  319. .Add("sett_ord_num_56", data.sett_ord_num_56)
  320. .Add("sett_ord_amt_56", data.sett_ord_amt_56)
  321. .Add("sett_tk_disp_tfee_56", data.sett_tk_disp_tfee_56)
  322. .Add("eff_ord_num", data.eff_ord_num)
  323. .Add("eff_ord_amt", data.eff_ord_amt)
  324. .Add("eff_tk_disp_tfee", data.eff_tk_disp_tfee);
  325. if (exist == null)
  326. {
  327. createArgs.Add("accountId", _accountId)
  328. .Add("accountName", _company)
  329. .Add("report_date", report_date)
  330. .Add("create_time", DateTime.Now)
  331. .Add("last_time", DateTime.Now)
  332. .Create();
  333. }
  334. else
  335. {
  336. createArgs.Add("last_time", DateTime.Now)
  337. .Where("id=@id", new { exist.id })
  338. .Update();
  339. }
  340. }
  341. /// <summary>
  342. /// 修正点击数
  343. /// </summary>
  344. public void FixReport(DateTime date)
  345. {
  346. TkReportDTO result = new TkReportDTO();
  347. try
  348. {
  349. string t = $"{date.Convert2UnixTimestamp(true)}";
  350. string dt = date.ToString("yyyy-MM-dd");
  351. string url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/data.lens.report.overview.json?" +
  352. $"t={t}&_tb_token_={_tb_token}&ruleEnum=pub_overview&startDate={dt}&endDate={dt}&fixPeriod=1d";
  353. var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
  354. .AddHeaders("X-Requested-With", "XMLHttpRequest")
  355. .AddHeaders("Cookie", _cookies);
  356. #if DEBUG
  357. #else
  358. client.Proxy = _proxy;
  359. #endif
  360. if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
  361. var response = client.Request(url);
  362. var body = response.Body();
  363. var root = body.Convert2JsonElement();
  364. int resultCode = root.Read<int>("resultCode", 0);
  365. bool success = root.Read("success", false);
  366. if (!success)
  367. {
  368. _ = new LoggerLibrary("report", "error")
  369. .Info(url, body)
  370. .SaveAsync();
  371. throw new Exception(body);
  372. }
  373. var data = root.ElementRead("data").ElementRead("data");
  374. result.eff_ord_num = data.Read<int>("eff_ord_num", 0);
  375. result.eff_ord_amt = data.Read<decimal>("eff_ord_amt", 0);
  376. result.eff_tk_disp_tfee = data.Read<decimal>("eff_tk_disp_tfee", 0);
  377. result.uclk_uv_56 = data.Read<int>("uclk_uv_56", 0);
  378. result.uclk_pv_56 = data.Read<int>("uclk_pv_56", 0);
  379. result.uclt_uv_56 = data.Read<int>("uclt_uv_56", 0);
  380. result.ucart_uv_56 = data.Read<int>("ucart_uv_56", 0);
  381. result.dep_ord_num_56 = data.Read<int>("dep_ord_num_56", 0);
  382. result.dep_ord_dep_amt_56 = data.Read<decimal>("dep_ord_dep_amt_56", 0);
  383. result.pay_ord_num_56 = data.Read<int>("pay_ord_num_56", 0);
  384. result.pay_ord_amt_56 = data.Read<decimal>("pay_ord_amt_56", 0);
  385. result.pay_tk_disp_tfee_56 = data.Read<decimal>("pay_tk_disp_tfee_56", 0);
  386. result.pay_ord_uv_56 = data.Read<int>("pay_ord_uv_56", 0);
  387. result.sett_ord_num_56 = data.Read<int>("sett_ord_num_56", 0);
  388. result.sett_ord_amt_56 = data.Read<decimal>("sett_ord_amt_56", 0);
  389. result.sett_tk_disp_tfee_56 = data.Read<decimal>("sett_tk_disp_tfee_56", 0);
  390. DateTime report_date = date.Date;
  391. EachSaveReportOverview(report_date, "tk_report", result);
  392. //var exist = new DBContext.Table("tk_report")
  393. // .Fields("id,report_date")
  394. // .Get<dynamic>("report_date=@report_date AND accountId=@accountId",
  395. // new { report_date, accountId = _accountId });
  396. //var createArgs = new DBContext.Table("tk_report")
  397. // .Add("fix_uclk_pv_56", result.fix_uclk_pv_56);
  398. //if (exist == null)
  399. //{
  400. // createArgs.Add("accountId", _accountId)
  401. // .Add("accountName", _company)
  402. // .Add("report_date", report_date)
  403. // .Add("create_time", DateTime.Now)
  404. // .Add("last_time", DateTime.Now)
  405. // .Create();
  406. //}
  407. //else
  408. //{
  409. // createArgs.Add("last_time", DateTime.Now)
  410. // .Where("id=@id", new { exist.id })
  411. // .Update();
  412. //}
  413. }
  414. catch (Exception ex) { }
  415. }
  416. /// <summary>
  417. /// 1小时更新一次
  418. /// </summary>
  419. public void SaveReportHourtrend(DateTime date)
  420. {
  421. string t = $"{DateTime.Now.Convert2UnixTimestamp(true)}";
  422. string dt = date.ToString("yyyy-MM-dd");
  423. string url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/data.lens.report.hourtrend.dod.json?" +
  424. $"t={t}&_tb_token_={_tb_token}&ruleEnum=pub_homepage&startDate={dt}&endDate={dt}&fixPeriod=realTime";
  425. var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
  426. .AddHeaders("X-Requested-With", "XMLHttpRequest")
  427. .AddHeaders("Cookie", _cookies);
  428. #if DEBUG
  429. #else
  430. client.Proxy = _proxy;
  431. #endif
  432. if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
  433. var response = client.Request(url);
  434. var body = response.Body();
  435. var root = body.Convert2JsonElement();
  436. int resultCode = root.Read<int>("resultCode", 0);
  437. bool success = root.Read("success", false);
  438. if (!success)
  439. {
  440. _ = new LoggerLibrary("report", "error")
  441. .Info(url, body)
  442. .SaveAsync();
  443. throw new Exception(body);
  444. }
  445. var data_list = root.ElementRead("data").ElementRead("data");
  446. foreach (var data in data_list.EnumerateArray())
  447. {
  448. string xAxis = data.Read<string>("xAxis");
  449. string _report_date = $"{dt} {xAxis}";
  450. EachSaveReport(_report_date, "tk_report_hourtrend", data);
  451. if ("23:00".Equals(xAxis))
  452. {
  453. EachSaveReport(dt, "tk_report", data);
  454. }
  455. }
  456. }
  457. private void EachSaveReport(string _report_date, string tableName, JsonElement data)
  458. {
  459. _ = DateTime.TryParse(_report_date, out DateTime report_date);
  460. var exist = new DBContext.Table(tableName)
  461. .Fields("id,report_date")
  462. .Get<dynamic>("report_date=@report_date AND accountId=@accountId",
  463. new { report_date, accountId = _accountId });
  464. if (exist == null)
  465. {
  466. new DBContext.Table(tableName)
  467. .Fill(data)
  468. .Loader<int>("uclk_uv_56", 0)
  469. .Loader<int>("uclk_pv_56", 0)
  470. .Loader<int>("uclt_uv_56", 0)
  471. .Loader<int>("ucart_uv_56", 0)
  472. .Loader<int>("dep_ord_num_56", 0)
  473. .Loader<decimal>("dep_ord_dep_amt_56", 0)
  474. .Loader<int>("pay_ord_num_56", 0)
  475. .Loader<decimal>("pay_ord_amt_56", 0)
  476. .Loader<decimal>("pay_tk_disp_tfee_56", 0)
  477. .Loader<int>("pay_ord_uv_56", 0)
  478. .Loader<int>("sett_ord_num_56", 0)
  479. .Loader<decimal>("sett_ord_amt_56", 0)
  480. .Loader<decimal>("sett_tk_disp_tfee_56", 0)
  481. .Add("accountId", _accountId)
  482. .Add("accountName", _company)
  483. .Add("report_date", report_date)
  484. .Add("create_time", DateTime.Now)
  485. .Add("last_time", DateTime.Now)
  486. .Create();
  487. }
  488. else
  489. {
  490. new DBContext.Table(tableName)
  491. .Fill(data)
  492. .Loader<int>("uclk_uv_56", 0)
  493. .Loader<int>("uclk_pv_56", 0)
  494. .Loader<int>("uclt_uv_56", 0)
  495. .Loader<int>("ucart_uv_56", 0)
  496. .Loader<int>("dep_ord_num_56", 0)
  497. .Loader<decimal>("dep_ord_dep_amt_56", 0)
  498. .Loader<int>("pay_ord_num_56", 0)
  499. .Loader<decimal>("pay_ord_amt_56", 0)
  500. .Loader<decimal>("pay_tk_disp_tfee_56", 0)
  501. .Loader<int>("pay_ord_uv_56", 0)
  502. .Loader<int>("sett_ord_num_56", 0)
  503. .Loader<decimal>("sett_ord_amt_56", 0)
  504. .Loader<decimal>("sett_tk_disp_tfee_56", 0)
  505. .Add("last_time", DateTime.Now)
  506. .Where("id=@id", new { exist.id })
  507. .Update();
  508. }
  509. }
  510. /// <summary>
  511. /// 警告消息
  512. /// </summary>
  513. public void GetViolationuWarning()
  514. {
  515. try
  516. {
  517. string url = "https://media.alimama.com/violationu2/warning_instance_page_v2.json?r=mx_208&toPage=1&pageSize=40&params=";
  518. var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
  519. .AddHeaders("X-Requested-With", "XMLHttpRequest")
  520. .AddHeaders("Cookie", _cookies);
  521. #if DEBUG
  522. #else
  523. client.Proxy = _proxy;
  524. #endif
  525. if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
  526. var response = client.Request(url);
  527. var body = response.Body();
  528. var root = body.Convert2JsonElement();
  529. int resultCode = root.Read<int>("resultCode", 0);
  530. int totalCount = root.PathRead<int>("data.totalCount", 0);
  531. bool success = root.Read("success", false);
  532. if (!success)
  533. {
  534. _ = new LoggerLibrary("violationu", "warning_error")
  535. .Info(url, body)
  536. .SaveAsync();
  537. throw new Exception(body);
  538. }
  539. if (totalCount == 0) return;
  540. _ = new LoggerLibrary("violationu", "warning").Info(url, body).SaveAsync();
  541. var list = root.ElementRead("data").ElementRead("result").EnumerateArray();
  542. foreach (var data in list)
  543. {
  544. var violation_commission = data.PathRead<decimal>("mediaInfo.订单虚假交易违规佣金", 0);
  545. new DBContext.Table("alimama_warning")
  546. .Fill(data)
  547. .Loader<int>("filterRuleId", 0)
  548. .Loader<long>("gmtCreate", 0)
  549. .Loader<long>("id", 0, "ali_id")
  550. .Loader<string>("idStr", string.Empty)
  551. .Loader<int>("mediaDimension", 0)
  552. .Loader<long>("mediaId", 0)
  553. .Loader<int>("mediaInfo.abn_cnt", 0, "abn_cnt")
  554. .Add("violation_commission", violation_commission)
  555. .Loader<int>("mediaInfo.warning_cnt", 0, "warning_cnt")
  556. .Loader<string>("mediaName", string.Empty)
  557. .Loader<long>("memberId", 0)
  558. .Loader<string>("noticeCategory", string.Empty)
  559. .Loader<int>("noticeTemplateId", 0)
  560. .Loader<string>("noticeTemplateName", string.Empty)
  561. .Loader<string>("orderFile", string.Empty)
  562. .Loader<string>("pid", string.Empty)
  563. .Loader<int>("punishRuleId", 0)
  564. .Loader<string>("riskType", string.Empty)
  565. .Loader<string>("roleName", string.Empty)
  566. .Loader<string>("ruleLink", string.Empty)
  567. .Loader<bool>("showOrderDetail", false)
  568. .Loader<int>("status", 0, "ali_status")
  569. .Loader<string>("warningText", string.Empty)
  570. .Add("accountName", _company)
  571. .Add("status", true)
  572. .Add("create_time", DateTime.Now)
  573. .Add("last_time", DateTime.Now)
  574. .Create(DBContext.InsertType.REPLACE);
  575. }
  576. }
  577. catch (Exception ex) { }
  578. }
  579. }
  580. }