crawler.cs 36 KB

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