Sfoglia il codice sorgente

优化 PDD 风控通知防重复机制

- 新增 PddPoolCore.AccountRisk 方法统一处理风控逻辑
- 使用 Redis 缓存实现防重复处理
- 简化 NotifyCore,移除未使用的代码
- open.cs 调用 AccountRisk 统一处理 30007 错误
dodo hold 10 mesi fa
parent
commit
5f20a855f6

+ 1 - 0
molilian.api/Controllers/admin/JdUnionController.cs

@@ -295,6 +295,7 @@ namespace molilian.api.Controllers
             {
                 item.app_secret = string.Empty;
                 item.cookies = string.Empty;
+                item.riskCookie = RiskControlCore.GetRiskCookie($"jd:{item.id}");
             }
             return new APIResult(new { data = result });
         }

+ 1 - 0
molilian.api/Controllers/admin/PddUnionController.cs

@@ -122,6 +122,7 @@ namespace molilian.api.Controllers
             {
                 item.app_secret = string.Empty;
                 item.cookies = string.Empty;
+                item.riskCookie = RiskControlCore.GetRiskCookie($"pdd:{item.id}");
             }
             return new APIResult(new { data = result });
         }

+ 3 - 3
molilian.api/Controllers/public/TaskController.cs

@@ -1004,15 +1004,15 @@ namespace molilian.api.Controllers
             return new APIResult(new { success = true, message = "ok" });
         }
         [HttpGet]
-        public async Task<ActionResult> PddSaveReport()
+        public async Task<ActionResult> PddSaveReport(int days = -1)
         {
             string message = string.Empty;
 
             var pdd_list = new DBContext.Table("pdd_pool").Where("cookie_status=1", new { }).Select<PddPoolDTO>();
             if (pdd_list != null)
             {
-                DateTime startDate = DateTime.Now.AddDays(-91);
-                DateTime endDate = DateTime.Now.AddDays(-1);
+                DateTime startDate = DateTime.Now.AddDays(days);
+                DateTime endDate = DateTime.Now;
                 foreach (var account in pdd_list)
                 {
                     if (account.is_hide) continue;

+ 0 - 2
molilian.core/Core/NotifyCore.cs

@@ -102,8 +102,6 @@ namespace molilian.core
 #endif
         }
 
-
-
         // 同步版本保持不变
         public static void AnPushNotify(string title, string content)
         {

+ 37 - 0
molilian.core/Core/pdd/PddPoolCore.cs

@@ -14,6 +14,7 @@ using TencentCloud.Tcm.V20210413.Models;
 using System.Security.Cryptography;
 using System.Collections.Concurrent;
 using YunhuiKit;
+using System.Xml.Linq;
 
 
 namespace molilian.core
@@ -892,5 +893,41 @@ namespace molilian.core
                 .Where("id=@id", new { account.id })
                 .Update();
         }
+
+        public static void AccountRisk(PddPoolDTO account)
+        {
+            string cache_key = $"cache:pdd_pool:{account.name}:disabled";
+            long count = RedisHelper.IncrBy(cache_key);
+            RedisHelper.Expire(cache_key, 10);
+            if (count > 1) return;
+
+
+            // 发送通知
+            string message = $"【PDD风控】【{account.id}:{account.name}】出现30007";
+            NotifyCore.Notify(new NifyMessage
+            {
+                message = message,
+                priority = NifyMessagePriority.high,
+                tags = ["red_circle"]
+            });
+
+            if (!account.is_hide)
+            {
+                _ = NotifyCore.QYWeixinPushNotifyAsync("PDD风控", message);
+            }
+
+            // 设置风控标记
+            RiskControlCore.SetRiskCookie($"pdd:{account.id}", "30007");
+
+            // 更新数据库状态
+            new DBContext.Table("pdd_pool")
+            .Add("enable_parse", 0)
+                .Where("id=@id", new { account.id })
+                .Update();
+            _ = List(true);
+
+            _ = EndPointCore.NotifyReload(true);
+
+        }
     }
 }

+ 1 - 0
molilian.core/DTO/jd/JdPoolDTO.cs

@@ -30,6 +30,7 @@ namespace molilian.core
         public JdUnionWorkMode work_mode { get; set; } = JdUnionWorkMode.SiteApi;
         public string user_agent { get; set; } = string.Empty;
         public string cookies { get; set; } = string.Empty;
+        public string riskCookie { get; set; } = string.Empty;
         public string union_cookies { get; set; } = string.Empty;
         public string h5st { get; set; } = string.Empty;
 

+ 1 - 1
molilian.core/DTO/pdd/PddPoolDTO.cs

@@ -33,7 +33,7 @@ namespace molilian.core
         public bool cookie_status { get; set; } = false;
         public PddUnionWorkMode work_mode { get; set; } = PddUnionWorkMode.SiteApi;
         public string cookies { get; set; } = string.Empty;
-
+        public string riskCookie { get; set; } = string.Empty;
         public decimal daily_income_limit { get; set; } = 0;
         public int daily_calls_limit { get; set; } = 0;
         public int current_hourly_calls { get; set; } = 0;

+ 5 - 0
molilian.core/Plus/pdd/Crawler.cs

@@ -81,6 +81,11 @@ namespace molilian.core
 
             if (!root.success)
             {
+                if ("30007".Equals(root.errorCode))
+                {
+                    PddPoolCore.AccountRisk(_account);
+                }
+
                 message = $"{root.errorCode}:{root.errorMsg}";
                 result.success = false;
                 result.message = "转链失败";

+ 1 - 1
molilian.core/Plus/pdd/EstimateRevenue.cs

@@ -136,7 +136,7 @@ namespace molilian.core
             client.AddHeaders("Origin", "https://jinbao.pinduoduo.com");
             client.UserAgent = useragent;
             client.AddHeaders("Cookie", cookies);
-            if (string.IsNullOrEmpty(data)) client.Post(data);
+            if (!string.IsNullOrEmpty(data)) client.Post(data);
             var response = await client.RequestAsync(url, string.IsNullOrEmpty(data) ? "GET" : "POST", cancellationToken);
             string body = response.Body();
             var root = body.Convert2JsonElement();

+ 8 - 9
molilian.core/Plus/pdd/PddUnionPlus.cs

@@ -222,24 +222,23 @@ namespace molilian.core
             Stopwatch stopwatch2 = Stopwatch.StartNew();
             stopwatch2.Start();
 
-            switch (_account.work_mode)
+            result = _account.work_mode switch
             {
-                case PddUnionWorkMode.SiteApi:
-                    result = await UnionGeneratelink(result, url, cancellationToken);
-                    break;
+                PddUnionWorkMode.SiteApi => await UnionGeneratelink(result, url, cancellationToken),
                 //case PddUnionWorkMode.AffApi:
                 //    result = await GetPromotionByAffAsync(result, url, cancellationToken);
                 //    break;
-                case PddUnionWorkMode.Crawler:
-                default:
-                    result = await transferUrl(result, url, cancellationToken);
-                    break;
-            }
+                _ => await transferUrl(result, url, cancellationToken),
+            };
+
+
             if (!result.success)
             {
                 result.shortLinkurl = shortLinkurl;
                 result.deeplink_url = GetDeeplink(shortLinkurl);
             }
+
+
             stopwatch2.Stop();
             result.elapsedTime3 = (int)stopwatch2.ElapsedMilliseconds;
             return result;

+ 5 - 0
molilian.core/Plus/pdd/open.cs

@@ -124,6 +124,11 @@ namespace molilian.core
                 result.message = "转链失败";
                 result.reason = message;
                 _ = new LoggerLibrary("PddUnion", "UnionGeneratelink").Info(urlWithQuery, body).SaveAsync();
+
+                if ("30007".Equals(root.error_response.sub_code))
+                {
+                    PddPoolCore.AccountRisk(_account);
+                }
                 return result;
             }