crawler.cs 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893
  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 (endpoint == null || 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. #if DEBUG
  402. #else
  403. TkPoolCore.SaveIncomeAmt($"{_accountId}", result.eff_tk_disp_tfee);
  404. #endif
  405. //TkPoolCore.SaveIncomeAmt(_accountName, result.eff_tk_disp_tfee);
  406. EachSaveReportOverview(report_date.AddHours(DateTime.Now.Hour), "tk_report_hourtrend", result);
  407. EachSaveReportOverview(report_date, "tk_report", result);
  408. }
  409. }
  410. catch (Exception ex) { throw; }
  411. }
  412. private void EachSaveReportOverview(DateTime report_date, string tableName, TkReportDTO data)
  413. {
  414. var exist = new DBContext.Table(tableName)
  415. .Fields("id,report_date")
  416. .Get<dynamic>("report_date=@report_date AND accountId=@accountId",
  417. new { report_date, accountId = _accountId });
  418. var createArgs = new DBContext.Table(tableName)
  419. .Add("uclk_uv_56", data.uclk_uv_56)
  420. .Add("uclk_pv_56", data.uclk_pv_56)
  421. .Add("uclt_uv_56", data.uclt_uv_56)
  422. .Add("ucart_uv_56", data.ucart_uv_56)
  423. .Add("dep_ord_num_56", data.dep_ord_num_56)
  424. .Add("dep_ord_dep_amt_56", data.dep_ord_dep_amt_56)
  425. .Add("pay_ord_num_56", data.pay_ord_num_56)
  426. .Add("pay_ord_amt_56", data.pay_ord_amt_56)
  427. .Add("pay_tk_disp_tfee_56", data.pay_tk_disp_tfee_56)
  428. .Add("pay_ord_uv_56", data.pay_ord_uv_56)
  429. .Add("sett_ord_num_56", data.sett_ord_num_56)
  430. .Add("sett_ord_amt_56", data.sett_ord_amt_56)
  431. .Add("sett_tk_disp_tfee_56", data.sett_tk_disp_tfee_56)
  432. .Add("eff_ord_num", data.eff_ord_num)
  433. .Add("eff_ord_amt", data.eff_ord_amt)
  434. .Add("eff_tk_disp_tfee", data.eff_tk_disp_tfee);
  435. string data_suffix = report_date.ToString("yyyyMMdd");
  436. if ("tk_report_hourtrend".Equals(tableName))
  437. {
  438. data_suffix = report_date.ToString("yyyyMMddHH");
  439. }
  440. string accountName = $"{TkChannelEnum.tb}_{_accountId}";
  441. int total_count = TkLogCore.GetTotal($":total:{accountName}:{data_suffix}");
  442. int success_count = 0, abandon_count = 0;
  443. string success_percentage = string.Empty, abandon_percentage = string.Empty;
  444. if (total_count > 0)
  445. {
  446. success_count = TkLogCore.GetTotal($":total:{accountName}:success:{data_suffix}");
  447. abandon_count = TkLogCore.GetTotal($":total:{accountName}:放弃转链:{data_suffix}");
  448. if (total_count > 0)
  449. {
  450. success_percentage = $"{success_count / (double)total_count * 100:f2}%";
  451. abandon_percentage = $"{abandon_count / (double)total_count * 100:f2}%";
  452. }
  453. }
  454. createArgs.Add("total_count", total_count);
  455. createArgs.Add("success_count", success_count);
  456. createArgs.Add("abandon_count", abandon_count);
  457. createArgs.Add("success_percentage", success_percentage);
  458. createArgs.Add("abandon_percentage", abandon_percentage);
  459. int parse_total_count = TkLogCore.GetTotal($":parse_total:{accountName}:{data_suffix}");
  460. int parse_success_count = 0, parse_abandon_count = 0;
  461. string parse_success_percentage = string.Empty, parse_abandon_percentage = string.Empty;
  462. if (parse_total_count > 0)
  463. {
  464. parse_success_count = TkLogCore.GetTotal($":parse_total:{accountName}:success:{data_suffix}");
  465. parse_abandon_count = TkLogCore.GetTotal($":parse_total:{accountName}:放弃转链:{data_suffix}");
  466. if (parse_total_count > 0)
  467. {
  468. parse_success_percentage = $"{parse_success_count / (double)parse_total_count * 100:f2}%";
  469. parse_abandon_percentage = $"{parse_abandon_count / (double)parse_total_count * 100:f2}%";
  470. }
  471. }
  472. createArgs.Add("parse_total_count", parse_total_count);
  473. createArgs.Add("parse_success_count", parse_success_count);
  474. createArgs.Add("parse_abandon_count", parse_abandon_count);
  475. createArgs.Add("parse_success_percentage", parse_success_percentage);
  476. createArgs.Add("parse_abandon_percentage", parse_abandon_percentage);
  477. int coupon_total_count = TkLogCore.GetTotal($":coupon_total:{accountName}:{data_suffix}", false);
  478. int coupon_success_count = 0, coupon_abandon_count = 0;
  479. string coupon_success_percentage = string.Empty, coupon_abandon_percentage = string.Empty;
  480. if (coupon_total_count > 0)
  481. {
  482. coupon_success_count = TkLogCore.GetTotal($":coupon_total:{accountName}:success:{data_suffix}", false);
  483. coupon_abandon_count = TkLogCore.GetTotal($":coupon_total:{accountName}:放弃转链:{data_suffix}", false);
  484. if (coupon_total_count > 0)
  485. {
  486. coupon_success_percentage = $"{coupon_success_count / (double)coupon_total_count * 100:f2}%";
  487. coupon_abandon_percentage = $"{coupon_abandon_count / (double)coupon_total_count * 100:f2}%";
  488. }
  489. }
  490. createArgs.Add("coupon_total_count", coupon_total_count);
  491. createArgs.Add("coupon_success_count", coupon_success_count);
  492. createArgs.Add("coupon_abandon_count", coupon_abandon_count);
  493. createArgs.Add("coupon_success_percentage", coupon_success_percentage);
  494. createArgs.Add("coupon_abandon_percentage", coupon_abandon_percentage);
  495. int tool_total_count = TkLogCore.GetTotal($":tool_total:{accountName}:{data_suffix}");
  496. int tool_success_count = 0, tool_abandon_count = 0;
  497. string tool_success_percentage = string.Empty, tool_abandon_percentage = string.Empty;
  498. if (tool_total_count > 0)
  499. {
  500. tool_success_count = TkLogCore.GetTotal($":tool_total:{accountName}:success:{data_suffix}");
  501. tool_abandon_count = TkLogCore.GetTotal($":tool_total:{accountName}:放弃转链:{data_suffix}");
  502. if (tool_total_count > 0)
  503. {
  504. tool_success_percentage = $"{tool_success_count / (double)tool_total_count * 100:f2}%";
  505. tool_abandon_percentage = $"{tool_abandon_count / (double)tool_total_count * 100:f2}%";
  506. }
  507. }
  508. createArgs.Add("tool_total_count", tool_total_count);
  509. createArgs.Add("tool_success_count", tool_success_count);
  510. createArgs.Add("tool_abandon_count", tool_abandon_count);
  511. createArgs.Add("tool_success_percentage", tool_success_percentage);
  512. createArgs.Add("tool_abandon_percentage", tool_abandon_percentage);
  513. if (exist == null)
  514. {
  515. createArgs.Add("accountId", _accountId)
  516. .Add("accountName", _company)
  517. .Add("report_date", report_date)
  518. .Add("create_time", DateTime.Now)
  519. .Add("last_time", DateTime.Now)
  520. .Create();
  521. }
  522. else
  523. {
  524. createArgs.Add("last_time", DateTime.Now)
  525. .Where("id=@id", new { exist.id })
  526. .Update();
  527. }
  528. }
  529. /// <summary>
  530. /// 修正点击数
  531. /// </summary>
  532. public void FixReport(DateTime date)
  533. {
  534. TkReportDTO result = new TkReportDTO();
  535. try
  536. {
  537. string t = $"{date.Convert2UnixTimestamp(true)}";
  538. string dt = date.ToString("yyyy-MM-dd");
  539. string url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/data.lens.report.overview.json?" +
  540. $"t={t}&_tb_token_={_tb_token}&ruleEnum=pub_overview&startDate={dt}&endDate={dt}&fixPeriod=1d";
  541. var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
  542. .AddHeaders("X-Requested-With", "XMLHttpRequest")
  543. .AddHeaders("Cookie", _cookies);
  544. #if DEBUG
  545. #else
  546. client.Proxy = _proxy;
  547. #endif
  548. if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
  549. var response = client.Request(url);
  550. var body = response.Body();
  551. var root = body.Convert2JsonElement();
  552. int resultCode = root.Read<int>("resultCode", 0);
  553. bool success = root.Read("success", false);
  554. if (!success)
  555. {
  556. _ = new LoggerLibrary("report", "error")
  557. .Info(url, body)
  558. .SaveAsync();
  559. throw new Exception(body);
  560. }
  561. var data = root.ElementRead("data").ElementRead("data");
  562. result.eff_ord_num = data.Read<int>("eff_ord_num", 0);
  563. result.eff_ord_amt = data.Read<decimal>("eff_ord_amt", 0);
  564. result.eff_tk_disp_tfee = data.Read<decimal>("eff_tk_disp_tfee", 0);
  565. result.uclk_uv_56 = data.Read<int>("uclk_uv_56", 0);
  566. result.uclk_pv_56 = data.Read<int>("uclk_pv_56", 0);
  567. result.uclt_uv_56 = data.Read<int>("uclt_uv_56", 0);
  568. result.ucart_uv_56 = data.Read<int>("ucart_uv_56", 0);
  569. result.dep_ord_num_56 = data.Read<int>("dep_ord_num_56", 0);
  570. result.dep_ord_dep_amt_56 = data.Read<decimal>("dep_ord_dep_amt_56", 0);
  571. result.pay_ord_num_56 = data.Read<int>("pay_ord_num_56", 0);
  572. result.pay_ord_amt_56 = data.Read<decimal>("pay_ord_amt_56", 0);
  573. result.pay_tk_disp_tfee_56 = data.Read<decimal>("pay_tk_disp_tfee_56", 0);
  574. result.pay_ord_uv_56 = data.Read<int>("pay_ord_uv_56", 0);
  575. result.sett_ord_num_56 = data.Read<int>("sett_ord_num_56", 0);
  576. result.sett_ord_amt_56 = data.Read<decimal>("sett_ord_amt_56", 0);
  577. result.sett_tk_disp_tfee_56 = data.Read<decimal>("sett_tk_disp_tfee_56", 0);
  578. DateTime report_date = date.Date;
  579. EachSaveReportOverview(report_date, "tk_report", result);
  580. //var exist = new DBContext.Table("tk_report")
  581. // .Fields("id,report_date")
  582. // .Get<dynamic>("report_date=@report_date AND accountId=@accountId",
  583. // new { report_date, accountId = _accountId });
  584. //var createArgs = new DBContext.Table("tk_report")
  585. // .Add("fix_uclk_pv_56", result.fix_uclk_pv_56);
  586. //if (exist == null)
  587. //{
  588. // createArgs.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. // createArgs.Add("last_time", DateTime.Now)
  598. // .Where("id=@id", new { exist.id })
  599. // .Update();
  600. //}
  601. }
  602. catch (Exception ex) { }
  603. }
  604. /// <summary>
  605. /// 1小时更新一次
  606. /// </summary>
  607. public void SaveReportHourtrend(DateTime date)
  608. {
  609. string t = $"{DateTime.Now.Convert2UnixTimestamp(true)}";
  610. string dt = date.ToString("yyyy-MM-dd");
  611. string url = "https://pub.alimama.com/openapi/param2/1/gateway.unionpub/data.lens.report.hourtrend.dod.json?" +
  612. $"t={t}&_tb_token_={_tb_token}&ruleEnum=pub_homepage&startDate={dt}&endDate={dt}&fixPeriod=realTime";
  613. var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
  614. .AddHeaders("X-Requested-With", "XMLHttpRequest")
  615. .AddHeaders("Cookie", _cookies);
  616. #if DEBUG
  617. #else
  618. client.Proxy = _proxy;
  619. #endif
  620. if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
  621. var response = client.Request(url);
  622. var body = response.Body();
  623. var root = body.Convert2JsonElement();
  624. int resultCode = root.Read<int>("resultCode", 0);
  625. bool success = root.Read("success", false);
  626. if (!success)
  627. {
  628. _ = new LoggerLibrary("report", "error")
  629. .Info(url, body)
  630. .SaveAsync();
  631. throw new Exception(body);
  632. }
  633. var data_list = root.ElementRead("data").ElementRead("data");
  634. foreach (var data in data_list.EnumerateArray())
  635. {
  636. string xAxis = data.Read<string>("xAxis");
  637. string _report_date = $"{dt} {xAxis}";
  638. EachSaveReport(_report_date, "tk_report_hourtrend", data);
  639. if ("23:00".Equals(xAxis))
  640. {
  641. EachSaveReport(dt, "tk_report", data);
  642. }
  643. }
  644. }
  645. private void EachSaveReport(string _report_date, string tableName, JsonElement data)
  646. {
  647. _ = DateTime.TryParse(_report_date, out DateTime report_date);
  648. var exist = new DBContext.Table(tableName)
  649. .Fields("id,report_date")
  650. .Get<dynamic>("report_date=@report_date AND accountId=@accountId",
  651. new { report_date, accountId = _accountId });
  652. if (exist == null)
  653. {
  654. new DBContext.Table(tableName)
  655. .Fill(data)
  656. .Loader<int>("uclk_uv_56", 0)
  657. .Loader<int>("uclk_pv_56", 0)
  658. .Loader<int>("uclt_uv_56", 0)
  659. .Loader<int>("ucart_uv_56", 0)
  660. .Loader<int>("dep_ord_num_56", 0)
  661. .Loader<decimal>("dep_ord_dep_amt_56", 0)
  662. .Loader<int>("pay_ord_num_56", 0)
  663. .Loader<decimal>("pay_ord_amt_56", 0)
  664. .Loader<decimal>("pay_tk_disp_tfee_56", 0)
  665. .Loader<int>("pay_ord_uv_56", 0)
  666. .Loader<int>("sett_ord_num_56", 0)
  667. .Loader<decimal>("sett_ord_amt_56", 0)
  668. .Loader<decimal>("sett_tk_disp_tfee_56", 0)
  669. .Add("accountId", _accountId)
  670. .Add("accountName", _company)
  671. .Add("report_date", report_date)
  672. .Add("create_time", DateTime.Now)
  673. .Add("last_time", DateTime.Now)
  674. .Create();
  675. }
  676. else
  677. {
  678. new DBContext.Table(tableName)
  679. .Fill(data)
  680. .Loader<int>("uclk_uv_56", 0)
  681. .Loader<int>("uclk_pv_56", 0)
  682. .Loader<int>("uclt_uv_56", 0)
  683. .Loader<int>("ucart_uv_56", 0)
  684. .Loader<int>("dep_ord_num_56", 0)
  685. .Loader<decimal>("dep_ord_dep_amt_56", 0)
  686. .Loader<int>("pay_ord_num_56", 0)
  687. .Loader<decimal>("pay_ord_amt_56", 0)
  688. .Loader<decimal>("pay_tk_disp_tfee_56", 0)
  689. .Loader<int>("pay_ord_uv_56", 0)
  690. .Loader<int>("sett_ord_num_56", 0)
  691. .Loader<decimal>("sett_ord_amt_56", 0)
  692. .Loader<decimal>("sett_tk_disp_tfee_56", 0)
  693. .Add("last_time", DateTime.Now)
  694. .Where("id=@id", new { exist.id })
  695. .Update();
  696. }
  697. }
  698. /// <summary>
  699. /// 警告消息
  700. /// </summary>
  701. public void GetViolationuWarning()
  702. {
  703. try
  704. {
  705. string url = "https://media.alimama.com/violationu2/warning_instance_page_v2.json?r=mx_208&toPage=1&pageSize=40&params=";
  706. var client = new WebClientUtility().SetContentType("application/json;charset=utf-8")
  707. .AddHeaders("X-Requested-With", "XMLHttpRequest")
  708. .AddHeaders("Cookie", _cookies);
  709. #if DEBUG
  710. #else
  711. client.Proxy = _proxy;
  712. #endif
  713. if (!string.IsNullOrEmpty(_user_agent)) client.UserAgent = _user_agent;
  714. var response = client.Request(url);
  715. var body = response.Body();
  716. var root = body.Convert2JsonElement();
  717. int resultCode = root.Read<int>("resultCode", 0);
  718. int totalCount = root.PathRead<int>("data.totalCount", 0);
  719. bool success = root.Read("success", false);
  720. if (!success)
  721. {
  722. _ = new LoggerLibrary("violationu", "warning_error")
  723. .Info(url, body)
  724. .SaveAsync();
  725. throw new Exception(body);
  726. }
  727. if (totalCount == 0) return;
  728. _ = new LoggerLibrary("violationu", "warning").Info(url, body).SaveAsync();
  729. var list = root.ElementRead("data").ElementRead("result").EnumerateArray();
  730. foreach (var data in list)
  731. {
  732. var violation_commission = data.PathRead<decimal>("mediaInfo.订单虚假交易违规佣金", 0);
  733. new DBContext.Table("alimama_warning")
  734. .Fill(data)
  735. .Loader<int>("filterRuleId", 0)
  736. .Loader<long>("gmtCreate", 0)
  737. .Loader<long>("id", 0, "ali_id")
  738. .Loader<string>("idStr", string.Empty)
  739. .Loader<int>("mediaDimension", 0)
  740. .Loader<long>("mediaId", 0)
  741. .Loader<int>("mediaInfo.abn_cnt", 0, "abn_cnt")
  742. .Add("violation_commission", violation_commission)
  743. .Loader<int>("mediaInfo.warning_cnt", 0, "warning_cnt")
  744. .Loader<string>("mediaName", string.Empty)
  745. .Loader<long>("memberId", 0)
  746. .Loader<string>("noticeCategory", string.Empty)
  747. .Loader<int>("noticeTemplateId", 0)
  748. .Loader<string>("noticeTemplateName", string.Empty)
  749. .Loader<string>("orderFile", string.Empty)
  750. .Loader<string>("pid", string.Empty)
  751. .Loader<int>("punishRuleId", 0)
  752. .Loader<string>("riskType", string.Empty)
  753. .Loader<string>("roleName", string.Empty)
  754. .Loader<string>("ruleLink", string.Empty)
  755. .Loader<bool>("showOrderDetail", false)
  756. .Loader<int>("status", 0, "ali_status")
  757. .Loader<string>("warningText", string.Empty)
  758. .Add("accountName", _company)
  759. .Add("status", true)
  760. .Add("create_time", DateTime.Now)
  761. .Add("last_time", DateTime.Now)
  762. .Create(DBContext.InsertType.REPLACE);
  763. }
  764. }
  765. catch (Exception ex) { }
  766. }
  767. }
  768. }