Procházet zdrojové kódy

Merge branch '20250814_randomweb_fr'

15313670163 před 4 měsíci
rodič
revize
9071711e2e
1 změnil soubory, kde provedl 91 přidání a 83 odebrání
  1. 91 83
      app/JsonRpc/PublicRpcService.php

+ 91 - 83
app/JsonRpc/PublicRpcService.php

@@ -2945,16 +2945,16 @@ class PublicRpcService implements PublicRpcServiceInterface
                 $index_rule = json_decode($rule['list_rule']);
                 break;
             case 4:
-                $index_rule = json_decode($rule['article_rule']);
+                $index_rule = json_decode($rule['info_rule']);
                 break;
             case 5:
                 $index_rule = json_decode($rule['search_rule']);
                 break;
             case 6:
-                $index_rule = json_decode($rule['aloneList_rule']);
+                $index_rule = json_decode($rule['footerlist_rule']);
                 break;
             case 7:
-                $index_rule = json_decode($rule['aloneArticle_rule']);
+                $index_rule = json_decode($rule['footerinfo_rule']);
                 break;
             default:
                 break;
@@ -3076,6 +3076,93 @@ class PublicRpcService implements PublicRpcServiceInterface
         // 组合起来通栏
         $sector_zuhe1 = array_merge($must_sector,$random_sector);
         $sector_ids = array_column($sector_zuhe1, 'id');
+        if($repeat_num > 0){
+            $rule_repeat = (array)$rule->type_max;
+            $sector_zuhe1_type = array_count_values(array_column($sector_zuhe1,'sector_type'));
+            // $sector_arr = array_intersect_key($rule_repeat,$sector_zuhe1_type);
+            foreach($rule_repeat as $key => $value){
+                if(in_array($key,array_keys($sector_zuhe1_type))){
+                    $rule_repeat[$key] = $value-1;
+                }
+            }
+            var_dump("repeat_num",$repeat_num);
+            // return array_intersect($sector_zuhe1,$must_sector);
+            if(count(array_intersect($sector_zuhe1,$must_sector)) != count($must_sector)){
+                return '此页面缺少必要通栏!';
+            }
+            // 剩余通栏进行重复处理
+            // $rule_repeat = (array)$rule->type_max;
+            // 取到可以重复的通栏类别
+            $rule_repaet_type =  array_keys($rule_repeat);
+            $repeat_type = array_intersect_key($sector_types, array_flip($rule_repaet_type));
+            // 获取可以随机重复的通栏
+            $repaet_key = 0;
+            $num = 0;
+            $type = [];
+            // return $rule_repaet_type;
+            // 防止无限循环,设置最大迭代次数
+            $max_iterations = 20; 
+            $iteration_count = 0;
+            // return [
+            //     'repaet_key' => $repaet_key,
+            //     'repeat_num' => $repeat_num,
+            //     'rule_repeat' => $rule_repeat,
+            //     'repeat_type' => $repeat_type,
+            //     'must_type' => $must_type,
+            // ];
+            while($repaet_key < $repeat_num && $iteration_count < $max_iterations){
+                $num++;
+                foreach($repeat_type as $key => $value){
+                    if(!isset($type[$key])){
+                        $type[$key] = 0;
+                    }else{
+                        $type[$key]++;
+                    }
+                    // $type代表每个类型的通栏数量,每个类型的通栏的数量应该≤规则限制的数量
+                    if($repaet_key < $repeat_num  && $type[$key] <= $rule_repeat[$key]){
+                        // $max_repaert_num = $rule_repeat[$key];
+                        // if($max_repaert_num < $num ){
+                        //     // $arr_key = $num+$key;
+                            if (count($value) > 1) {
+                                // 若 可以随机的通栏类型存在多个通栏,随机取其一
+                                $repeat_sector_key[$repaet_key] = $value[array_rand($value)];
+                            } else {
+                                $repeat_sector_key[$repaet_key] = $value[0];
+                            }
+                            $type[$repaet_key] = $repeat_sector_key[$repaet_key];
+                            $repaet_key++;
+                        // }
+                    }
+                    // else{
+                    //     break;
+                    // }
+                }
+                // var_dump("num",  $type[$key]);
+                // var_dump("repeat_sector_key", $repeat_sector_key);
+                $iteration_count++;
+            }
+            // return $repeat_sector_key;
+            // var_dump("num", $num);
+            // var_dump("repeat_sector_key", $repeat_sector_key);
+            // 随机的重复通栏键值转换成真正的通栏
+            $repeat_sector = [];
+            if(isset($repeat_sector_key) && !empty($repeat_sector_key) && is_array($repeat_sector_key)){
+
+                foreach ($repeat_sector_key as $key => $value) {
+                    if (isset($sectors[$value])) {
+                        $repeat_sector[$key] = $sectors[$value];
+                    }
+                }
+            }
+            $repeat_count = count($repeat_sector);
+            var_dump("repeat_count",$repeat_count);
+            // var_dump("repeat_sector", $repeat_sector);
+            //  return ($data['page'] == '2' || $data['page'] == 2);
+            
+            $sector = array_merge($repeat_sector,$sector_zuhe1);
+        }else{
+            $sector = $sector_zuhe1;
+        }
         // var_dump("sector_ids",$sector_ids);
         // return [
         //     'random_sector'=>$random_sector,
@@ -3083,86 +3170,7 @@ class PublicRpcService implements PublicRpcServiceInterface
         //     'sector_ids'=>$sector_ids,
         // ];
         // 各类型通栏最大数量数量限制 = 规则最大数量-已经存在的通栏数量(目前的通栏不会有重复的,所以只是-1)
-        $rule_repeat = (array)$rule->type_max;
-        $sector_zuhe1_type = array_count_values(array_column($sector_zuhe1,'sector_type'));
-        // $sector_arr = array_intersect_key($rule_repeat,$sector_zuhe1_type);
-        foreach($rule_repeat as $key => $value){
-            if(in_array($key,array_keys($sector_zuhe1_type))){
-                $rule_repeat[$key] = $value-1;
-            }
-        }
-        var_dump("repeat_num",$repeat_num);
-        // return array_intersect($sector_zuhe1,$must_sector);
-        if(count(array_intersect($sector_zuhe1,$must_sector)) != count($must_sector)){
-            return '此页面缺少必要通栏!';
-        }
-        // 剩余通栏进行重复处理
-        // $rule_repeat = (array)$rule->type_max;
-        // 取到可以重复的通栏类别
-        $rule_repaet_type =  array_keys($rule_repeat);
-        $repeat_type = array_intersect_key($sector_types, array_flip($rule_repaet_type));
-        // 获取可以随机重复的通栏
-        $repaet_key = 0;
-        $num = 0;
-        $type = [];
-        // return $rule_repaet_type;
-        // 防止无限循环,设置最大迭代次数
-        $max_iterations = 20; 
-        $iteration_count = 0;
-        // return [
-        //     'repaet_key' => $repaet_key,
-        //     'repeat_num' => $repeat_num,
-        //     'rule_repeat' => $rule_repeat,
-        //     'repeat_type' => $repeat_type,
-        //     'must_type' => $must_type,
-        // ];
-        while($repaet_key < $repeat_num && $iteration_count < $max_iterations){
-            $num++;
-            foreach($repeat_type as $key => $value){
-                if(!isset($type[$key])){
-                    $type[$key] = 0;
-                }else{
-                    $type[$key]++;
-                }
-                // $type代表每个类型的通栏数量,每个类型的通栏的数量应该≤规则限制的数量
-                if($repaet_key < $repeat_num  && $type[$key] <= $rule_repeat[$key]){
-                    // $max_repaert_num = $rule_repeat[$key];
-                    // if($max_repaert_num < $num ){
-                    //     // $arr_key = $num+$key;
-                        if (count($value) > 1) {
-                            // 若 可以随机的通栏类型存在多个通栏,随机取其一
-                            $repeat_sector_key[$repaet_key] = $value[array_rand($value)];
-                        } else {
-                            $repeat_sector_key[$repaet_key] = $value[0];
-                        }
-                        $type[$repaet_key] = $repeat_sector_key[$repaet_key];
-                        $repaet_key++;
-                    // }
-                }
-                // else{
-                //     break;
-                // }
-            }
-            // var_dump("num",  $type[$key]);
-            // var_dump("repeat_sector_key", $repeat_sector_key);
-            $iteration_count++;
-        }
-        // return $repeat_sector_key;
-        // var_dump("num", $num);
-        var_dump("repeat_sector_key", $repeat_sector_key);
-        // 随机的重复通栏键值转换成真正的通栏
-        $repeat_sector = [];
-        foreach ($repeat_sector_key as $key => $value) {
-            if (isset($sectors[$value])) {
-                $repeat_sector[$key] = $sectors[$value];
-            }
-        }
-        $repeat_count = count($repeat_sector);
-        var_dump("repeat_count",$repeat_count);
-        // var_dump("repeat_sector", $repeat_sector);
-        //  return ($data['page'] == '2' || $data['page'] == 2);
         
-        $sector = array_merge($repeat_sector,$sector_zuhe1);
         // var_dump("sector",$sector);
         // 处理头条及轮播图在随机通栏中的特殊位置特殊处理
         $sector_specal_sort = array_column($sector,'sector_type');
@@ -3199,7 +3207,7 @@ class PublicRpcService implements PublicRpcServiceInterface
                     $sector[$pic_key] = $sort_1;
                 }
             }
-            if($data['page'] == '2' || $data['page'] == 2){
+            if($data['page'] == '2' || $data['page'] == 2 || in_array(5,$sector_specal_sort)){
                 $sector[0] = $cat;
                 $sector[$cat_key] = $sort_1;
                 if($toutiao_key && $pic_key){