|
|
@@ -38,15 +38,23 @@ namespace molilian.core
|
|
|
_end_point = Environment.GetEnvironmentVariable("EndPoint");
|
|
|
}
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// 获取一个账号用于处理请求
|
|
|
- /// 使用平滑加权轮询算法(Smooth Weighted Round-Robin)实现流量均衡分配
|
|
|
- /// </summary>
|
|
|
- public static PddPoolDTO? GetOne(PddUnionWorkMode mode, int accountid = 0, string parse_type = "")
|
|
|
- {
|
|
|
- var list = List();
|
|
|
- if (!list.Any()) return null;
|
|
|
-
|
|
|
+ /// <summary>
|
|
|
+ /// 获取一个账号用于处理请求
|
|
|
+ /// 使用平滑加权轮询算法(Smooth Weighted Round-Robin)实现流量均衡分配
|
|
|
+ /// </summary>
|
|
|
+ public static PddPoolDTO? GetOne(PddUnionWorkMode mode, int accountid = 0, string parse_type = "")
|
|
|
+ {
|
|
|
+ return GetOne(mode, new UnionParseRequest
|
|
|
+ {
|
|
|
+ AccountId = accountid
|
|
|
+ }, parse_type);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static PddPoolDTO? GetOne(PddUnionWorkMode mode, UnionParseRequest request, string parse_type = "")
|
|
|
+ {
|
|
|
+ var list = List();
|
|
|
+ if (!list.Any()) return null;
|
|
|
+
|
|
|
// 按 parse_type 过滤
|
|
|
if ("dp".Equals(parse_type))
|
|
|
{
|
|
|
@@ -54,16 +62,27 @@ namespace molilian.core
|
|
|
if (!list.Any()) return null;
|
|
|
}
|
|
|
else
|
|
|
- {
|
|
|
- list = list.Where(item => string.IsNullOrEmpty(item.parse_type)).ToList();
|
|
|
- if (!list.Any()) return null;
|
|
|
- }
|
|
|
-
|
|
|
- // 过滤出符合条件的候选账号
|
|
|
- var candidates = list.Where(e => IsMatch(e, mode, accountid)).ToList();
|
|
|
- if (!candidates.Any()) return null;
|
|
|
-
|
|
|
- // 使用平滑加权轮询算法选择账号
|
|
|
+ {
|
|
|
+ list = list.Where(item => string.IsNullOrEmpty(item.parse_type)).ToList();
|
|
|
+ if (!list.Any()) return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!string.IsNullOrEmpty(request.RiskStrategy) && !"os".Equals(request.RiskStrategy) && request.LaunchScene != -1)
|
|
|
+ {
|
|
|
+ list = list.Where(item => request.RiskStrategy.Equals(item.riskStrategy) && item.launchScene == request.LaunchScene).ToList();
|
|
|
+ if (!list.Any()) return null;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ list = list.Where(item => string.IsNullOrEmpty(item.riskStrategy)).ToList();
|
|
|
+ if (!list.Any()) return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 过滤出符合条件的候选账号
|
|
|
+ var candidates = list.Where(e => IsMatch(e, mode, request.AccountId)).ToList();
|
|
|
+ if (!candidates.Any()) return null;
|
|
|
+
|
|
|
+ // 使用平滑加权轮询算法选择账号
|
|
|
return SmoothWeightedRoundRobin(candidates, parse_type);
|
|
|
}
|
|
|
|