crawler.cs 25 KB

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