taobao.cs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. using dodohold.core;
  2. using CSRedis;
  3. using System.Data;
  4. namespace molilian.core
  5. {
  6. public partial class TkLogCore
  7. {
  8. static string queue_parse_tb_key = "queue:parse_logs:tb";
  9. public static int task_insert_parse_tb_logs(int limit, CSRedisClient redis)
  10. {
  11. int total = 0;
  12. using var connection = DBContext.GetOpenConnection();
  13. connection.Open();
  14. using var transaction = connection.BeginTransaction();
  15. try
  16. {
  17. for (int i = 0; i < limit; i++)
  18. {
  19. var data = redis.LPop<TkDataDTO>(queue_parse_tb_key);
  20. if (data == null) break;
  21. if (_test_oaid.Equals(data.oaid) ||
  22. data.ip.StartsWith("127.0.0"))
  23. {
  24. save_tk_parse_logs(data, "tk_parse_logs_test", connection, transaction);
  25. }
  26. else
  27. {
  28. //data.id = save_tk_parse_logs(data, "tk_parse_logs", connection, transaction);
  29. ////每日分表
  30. //if (save_dailys_log)
  31. {
  32. string daily_table = $"tk_parse_logs_{data.create_time:yyyyMMdd}";
  33. save_tk_parse_logs(data, daily_table, connection, transaction);
  34. }
  35. if (data.elapsedTime > 1000)
  36. {
  37. save_tk_parse_logs(data, "tk_parse_logs_test", connection, transaction);
  38. }
  39. if (data.success)
  40. {
  41. save_tk_parse_logs(data, "tk_success_parse_logs", connection, transaction);
  42. }
  43. if (!string.IsNullOrEmpty(data.itemId)) TkOrderTrackingCore.SaveLinkSummary(data);
  44. }
  45. if (data.reason.Contains("初步筛选2") && !data.rawContent.Contains("I:/kWqN5t623Hx"))
  46. {
  47. save_tk_parse_logs(data, "tk_parse_logs_test2", connection, transaction);
  48. }
  49. if (data.reason.Contains("初步筛选1.5"))
  50. {
  51. save_tk_parse_logs(data, "tk_parse_logs_multi_token", connection, transaction);
  52. }
  53. if (data.reason.Contains("霸下验证码"))
  54. {
  55. save_tk_parse_logs(data, "tk_parse_logs_captcha", connection, transaction);
  56. }
  57. total++;
  58. }
  59. transaction.Commit();
  60. }
  61. catch (Exception ex)
  62. {
  63. transaction.Rollback();
  64. new LoggerLibrary("TkLogCore_error", "task_insert_parse_tb_logs")
  65. .Info(ex.Message, ex.StackTrace)
  66. .SaveAsync();
  67. throw;
  68. }
  69. finally
  70. {
  71. connection.Close();
  72. }
  73. return total;
  74. }
  75. public static async Task ParseLogAsync(TkDataDTO response, AlimamaPlus? alimamaPlus = null)
  76. {
  77. #if DEBUG
  78. //return;
  79. #endif
  80. try
  81. {
  82. var ts = DateTime.Now - response.create_time;
  83. response.elapsedTime = (int)ts.TotalMilliseconds;
  84. _ = RedisHelper.RPushAsync(queue_parse_tb_key, response);
  85. if (response.success || response.message.Equals("转链失败"))
  86. {
  87. RiskControlCore.CallsIncrBy(response.channel, response.accountId);
  88. saveClientRequestTotal(response.channel, response.ip, response.oaid);
  89. }
  90. if (response.success)
  91. {
  92. _ = saveUnionCouponParseCacheAsync(response);
  93. }
  94. if (!response.ip.StartsWith("127.0.0"))
  95. {
  96. saveParseCache(response.channel.ToString(), response.accountId,
  97. response.accountName, response.success, response.message, response.reason,
  98. response.deeplink_url);
  99. }
  100. if (!string.IsNullOrEmpty(response.itemId)) TkOrderTrackingCore.SaveLinkSummary(response);
  101. if (!response.success && "nologin".Equals(response.message))
  102. {
  103. switch (response.channel)
  104. {
  105. case TkChannelEnum.tb:
  106. await Task.Run(() =>
  107. {
  108. if (alimamaPlus != null)
  109. {
  110. (bool success, string message) = alimamaPlus.RenewCookie();
  111. if (success) return;
  112. }
  113. TkPoolCore.Disabled(response.accountId, response.accountName, $"{response.rawContent}");
  114. }); break;
  115. }
  116. }
  117. if (response.subCode == TkSubCodeEnum.Captcha || "霸下验证码".Equals(response.reason))
  118. {
  119. TkPoolCore.Suspend(response.end_point, response.accountId, response.accountName, "霸下验证码");
  120. }
  121. }
  122. catch (Exception ex)
  123. {
  124. _ = new LoggerLibrary("unionParse", "database_error")
  125. .Info(response.rawContent)
  126. .Info(response.Convert2Json())
  127. .Info(ex.Message, ex.StackTrace)
  128. .SaveAsync();
  129. }
  130. }
  131. private static int save_tk_parse_logs(TkDataDTO data, string tablename, IDbConnection connection, IDbTransaction transaction)
  132. {
  133. return new DBContext.Table(connection, tablename)
  134. .Add("end_point", data.end_point)
  135. .Add("channel", (int)data.channel)
  136. .Add("linkType", (int)data.link_type)
  137. .Add("accountId", data.accountId)
  138. .Add("accountName", data.accountName)
  139. .Add("proxy_node", data.proxy_node)
  140. .Add("rawContent", data.rawContent)
  141. .Add("success", data.success)
  142. .Add("message", data.message)
  143. .Add("reason", data.reason)
  144. .Add("content", data.content)
  145. .Add("mktId", data.mktId)
  146. .Add("itemId", data.itemId)
  147. .Add("itemName", data.itemName)
  148. .Add("pic", data.pic)
  149. .Add("couponAmount", data.couponAmount)
  150. .Add("promotionPrice", data.promotionPrice)
  151. .Add("taoToken", data.taoToken)
  152. .Add("shortLinkurl", data.shortLinkurl)
  153. .Add("deeplink_url", data.deeplink_url)
  154. .Add("num_iid", data.num_iid)
  155. .Add("elapsedTime", data.elapsedTime)
  156. .Add("elapsedTime2", data.elapsedTime2)
  157. .Add("elapsedTime3", data.elapsedTime3)
  158. .Add("subCode", data.subCode)
  159. .Add("ip", data.ip)
  160. .Add("oaid", data.oaid)
  161. .Add("create_time", data.create_time)
  162. .Create(DBContext.InsertType.NORMAL, transaction);
  163. }
  164. }
  165. }