vali %!s(int64=6) %!d(string=hai) anos
pai
achega
38f1c4d559

+ 156 - 389
app/Lib/Settlement/Adapter/BqRule.php

@@ -10,426 +10,193 @@ namespace App\Lib\Settlement\Adapter;
 
 class BqRule
 {
-    /**
-     * 全场|主队|让球
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function bq_concede_home($model, $resultModel, $resultRecords) {
-        $this -> bq_concede($model, $resultModel, $resultRecords, 1);
-    }
-
-    /**
-     * 全场|客队|让球
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function bq_concede_guest($model, $resultModel, $resultRecords) {
-        $this -> bq_concede($model, $resultModel, $resultRecords, 2);
-    }
-
-    /**
-     * 前五局|主队|让球
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function bq_five_concede_home($model, $resultModel, $resultRecords) {
-        $this -> concedefirstfiveinnings($model, $resultModel, $resultRecords, 1, 1);
-    }
-
-    /**
-     * 前五局|客队|让球
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function bq_five_concede_guest($model, $resultModel, $resultRecords) {
-        $this -> concedefirstfiveinnings($model, $resultModel, $resultRecords, 2, 1);
-    }
+    use RulePlus;
 
-    /**
-     * 全场|主队|独赢
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @return string 1:赢  -1:输
-     */
-    public function bq_capot_home($model, $resultModel, $resultRecords) {
-        $this -> bq_capot($model, $resultModel, $resultRecords, 1);
-    }
-
-    /**
-     * 全场|客队|独赢
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @return string 1:赢  -1:输
-     */
-    public function bq_capot_guest($model, $resultModel, $resultRecords) {
-        $this -> bq_capot($model, $resultModel, $resultRecords, -1);
+    public function concede($model, $resultModels, $resultRecords)
+    {
+        $stand_Datas = $this->bq_scoreDatas($resultModels);
+        $odds_code = $model->odds_code;
+
+        $home = $stand_Datas['all']['home'];
+        $guest = $stand_Datas['all']['guest'];
+        $home_half = $stand_Datas['half']['home'];
+        $guest_half = $stand_Datas['half']['home'];
+        $condition = $model->condition;
+
+        switch ($odds_code) {
+            case 'concede_home':
+                $return = $this->zq_letball($home - $guest, $condition, $home . '-' . $guest . '(全场)');
+                break;
+            case 'concede_guest':
+                $return = $this->zq_letball($guest - $home, $condition, $home . '-' . $guest . '(全场)');
+                break;
+            case 'five_concede_guest':
+                $return = $this->zq_letball($home_half - $guest_half, $condition, $home_half . '-' . $guest_half . '(半场)');
+                break;
+            case 'five_concede_home':
+                $return = $this->zq_letball($home_half - $guest_half, $condition, $home_half . '-' . $guest_half . '(半场)');
+                break;
+            default:
+                $return = $this->return_error;
+                break;
+        }
+        return $return;
     }
 
-    /**
-     * 全场|总得分|大
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function bq_total_number_big($model, $resultModel, $resultRecords){
-        return $this -> sizeCommon($model, $resultModel, $resultRecords, 1);
+    public function total_size($model, $resultModels, $resultRecords)
+    {
+        $stand_Datas = $this->bq_scoreDatas($resultModels);
+        $odds_code = $model->odds_code;
+
+        $home = $stand_Datas['all']['home'];
+        $guest = $stand_Datas['all']['guest'];
+        $home_half = $stand_Datas['half']['home'];
+        $guest_half = $stand_Datas['half']['home'];
+        $condition = $model->condition;
+
+        switch ($odds_code) {
+            case 'total_size_big':
+                $return = $this->zq_inball_bigsmall($home + $guest, $condition, 2, $home . '-' . $guest . '(全场)');
+                break;
+            case 'total_size_small':
+                $return = $this->zq_inball_bigsmall($home + $guest, $condition, 1, $home . '-' . $guest . '(全场)');
+                break;
+            case 'five_total_size_big':
+                $return = $this->zq_inball_bigsmall($home_half + $guest_half, $condition, 2, $home_half . '-' . $guest_half . '(半场)');
+                break;
+            case 'five_total_size_small':
+                $return = $this->zq_inball_bigsmall($home_half + $guest_half, $condition, 1, $home_half . '-' . $guest_half . '(半场)');
+                break;
+            default:
+                $return = $this->return_error;
+                break;
+        }
+        return $return;
     }
 
-    /**
-     * 全场|总得分|小
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function bq_total_number_small($model, $resultModel, $resultRecords){
-        return $this -> sizeCommon($model, $resultModel, $resultRecords, 2);
-    }
+    public function two_sides($model, $resultModels, $resultRecords)
+    {
+        $stand_Datas = $this->bq_scoreDatas($resultModels);
+        $odds_code = $model->odds_code;
+
+        $home = $stand_Datas['all']['home'];
+        $guest = $stand_Datas['all']['guest'];
+        $condition = $model->condition;
+
+        switch ($odds_code) {
+            case 'two_sides_single':
+                $return = $this->zq_doublesing($home + $guest, $condition, $home . '-' . $guest . '(全场)');
+                break;
+            case 'two_sides_double':
+                $return = $this->zq_doublesing($home + $guest, $condition, $home . '-' . $guest . '(全场)');
+                break;
+            default:
+                $return = $this->return_error;
+                break;
+        }
+        return $return;
 
-    /**
-     * 前五局|总得分|小
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function bq_five_total_number_big($model, $resultModel, $resultRecords){
-        return $this -> sizeCommonfirstfiveinnings($model, $resultModel, $resultRecords, 1);
     }
 
-    /**
-     * 前五局|总得分|小
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function bq_five_total_number_small($model, $resultModel, $resultRecords){
-        return $this -> sizeCommonfirstfiveinnings($model, $resultModel, $resultRecords, 2);
-    }
+    public function capot($model, $resultModels, $resultRecords)
+    {
+        $stand_Datas = $this->bq_scoreDatas($resultModels);
+        $odds_code = $model->odds_code;
 
-    /**
-     * 全场|总得分|单
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function bq_two_sides_single($model, $resultModel, $resultRecords){
-        return $this -> bq_two_sides($model, $resultModel, $resultRecords, 1);
-    }
+        $home = $stand_Datas['all']['home'];
+        $guest = $stand_Datas['all']['guest'];
 
-    /**
-     * 全场|总得分|双
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function bq_two_sides_double($model, $resultModel, $resultRecords){
-        return $this -> bq_two_sides($model, $resultModel, $resultRecords, 2);
-    }
 
-    /**
-     * 全场|[主、客]|让球
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @param mixed $type 1:代表主队让球   2:代表客队让球
-     * @param mixed $size 1:大 -1:小(如果是让球大小玩法才传入该字段)
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function bq_concede($model, $resultModel, $resultRecords, $type, $size = ''){
-        $resultModel = $resultModel['0'];
-        // 主队得分
-        $homeScore = intval($resultModel -> home_score);
-        // 客队得分
-        $guestScore = intval($resultModel -> guest_score);
-        $difference = 0;
-        // 分差 - 主 :客
-        if ($type == 1) {
-            $difference = $homeScore - $guestScore;
-        } else {
-            // 分差 - 客 :主
-            $difference = $guestScore - $homeScore;
-        }
-        // 让球个数
-        $condition = explode("/", $model -> condition);
-        $resultArr = [];
-        // 循环对比让球后输赢
-        foreach ($condition as $value) {
-            $absValue = abs($value);
-            if (substr($model -> condition, 0, 1) == '-') {
-                $resultScore = $difference - $absValue;
-            } else {
-                $resultScore = $difference + $absValue;
-            }
-            if ($resultScore > 0) {
-                $resultArr[] = 1;
-            } elseif ($resultScore < 0) {
-                $resultArr[] = -1;
-            } else {
-                $resultArr[] = 2;
-            }
-        }
-        // 去重
-        $resultUniqueArr = array_unique($resultArr);
-        // 循环对比让球后输赢
-        $count = count($resultUniqueArr);
-        if ($size == -1) {
-            if ($count == 1) {
-                if ($resultUniqueArr[0] == 1) {
-                    $data['result'] = -1;
-                } elseif ($resultUniqueArr[0] == 2) {
-                    $data['result'] = 2;
+        switch ($odds_code) {
+            case 'capot_home':
+                if ($home > $guest) {
+                    $return['result'] = 1;
                 } else {
-                    $data['result'] = 1;
+                    $return['result'] = -1;
                 }
-            } elseif (in_array(1, $resultUniqueArr)) {
-                $data['result'] = 4;
-            } else {
-                $data['result'] = 3;
-            }
-        } else {
-            if ($count == 1) {
-                $data['result'] = $resultUniqueArr[0];
-            } elseif (in_array(1, $resultUniqueArr)) {
-                $data['result'] = 3;
-            } else {
-                $data['result'] = 4;
-            }
-        }
-        $data['matchResult'] = "$homeScore-$guestScore(全场)";
-        return $data;
-    }
+                $return['matchResult'] = $home . '-' . $guest . '(全场)';
 
-    /**
-     * 前五局|[主、客]|让球
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @param mixed $whoType 1:代表主队让球   2:代表客队让球
-     * @param mixed $size 1:大 -1:小(如果是让球大小玩法才传入该字段)
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function concedefirstfiveinnings($model, $resultModel, $resultRecords, $whoType, $size = ''){
-        // 倒叙
-        $newResultRecords = array_reverse($resultRecords);
-        // 查询最后的上半场的key值
-        $upResultKey = array_search('第五局', array_column($newResultRecords, 'match_process'));
-        $homeScore = 0;
-        $guestScore = 0;
-        // 主队得分
-        $homeScore = intval($newResultRecords[$upResultKey] -> home_score);
-        // 客队得分
-        $guestScore = intval($newResultRecords[$upResultKey] -> guest_score);
-        $difference = 0;
-        // 分差 - 主 :客
-        if ($whoType == 1) {
-            $difference = $homeScore - $guestScore;
-        } else {
-            // 分差 - 客 :主
-            $difference = $guestScore - $homeScore;
-        }
-        // 让球个数
-        $condition = explode("/", $model -> condition);
-        $resultArr = [];
-        // 循环对比让球后输赢
-        foreach ($condition as $value) {
-            $absValue = abs($value);
-            if (substr($model -> condition, 0, 1) == '-') {
-                $resultScore = $difference - $absValue;
-            } else {
-                $resultScore = $difference + $absValue;
-            }
-            if ($resultScore > 0) {
-                $resultArr[] = 1;
-            } elseif ($resultScore < 0) {
-                $resultArr[] = -1;
-            } else {
-                $resultArr[] = 2;
-            }
-        }
-        // 去重
-        $resultUniqueArr = array_unique($resultArr);
-        // 循环对比让球后输赢
-        $count = count($resultUniqueArr);
-        // 如果猜的是让球大小且猜的是小则运行
-        if ($size == -1) {
-            if ($count == 1) {
-                if ($resultUniqueArr[0] == 1) {
-                    $data['result'] = -1;
-                } elseif ($resultUniqueArr[0] == 2) {
-                    $data['result'] = 2;
+                break;
+            case 'capot_guest':
+                if ($guest > $home) {
+                    $return['result'] = 1;
                 } else {
-                    $data['result'] = 1;
+                    $return['result'] = -1;
                 }
-            } elseif (in_array(1, $resultUniqueArr)) {
-                $data['result'] = 4;
-            } else {
-                $data['result'] = 3;
-            }
-        } else {
-            if ($count == 1) {
-                $data['result'] = $resultUniqueArr[0];
-            } elseif (in_array(1, $resultUniqueArr)) {
-                $data['result'] = 3;
-            } else {
-                $data['result'] = 4;
-            }
+                $return['matchResult'] = $home . '-' . $guest . '(全场)';
+                break;
+            default:
+                $return = $this->return_error;
+                break;
         }
-        $data['matchResult'] = "$homeScore-$guestScore(前五局)";
-        return $data;
+        return $return;
     }
 
-    /**
-     * 全场|[主、客、平]|独赢
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @param mixed $type 1:主队  2:客队
-     * @return string 1:赢  -1:输
-     */
-    public function bq_capot($model, $resultModel, $resultRecords, $type){
-        $resultModel = $resultModel['0'];
-        // 主队得分
-        $homeScore = intval($resultModel -> home_score);
-        // 客队得分
-        $guestScore = intval($resultModel -> guest_score);
-        $difference = $homeScore - $guestScore;
-        if ($difference > 0 && $type == 1) {
-            $data['result'] = 1;
-        } elseif ($difference < 0 && $type == 2) {
-            $data['result'] = 1;
-        } else {
-            $data['result'] = -1;
+
+    //棒球 type ==1 返回第$sn节   ==2返回上下节,sn=1上半场,sn=2下半场    type==4全部按节数的数组
+    public function bq_getResultBySn($recoreModesArray, $type = 4, $sn = 1)
+    {
+        $return = [];
+        foreach ($recoreModesArray as $key => $val) {
+            $nowsn = intval($val->match_process);
+            $return[$nowsn] = $val;
         }
-        $data['matchResult'] = "$homeScore-$guestScore(全场)";
-        return $data;
-    }
 
-    /**
-     * 全场得分大小
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @param mixed $size 大小 1:大  -1:小
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function sizeCommon($model, $resultModel, $resultRecords, $size){
-        $resultModel = $resultModel['0'];
-        // 主队得分
-        $homeScore = intval($resultModel -> home_score);
-        // 客队得分
-        $guestScore = intval($resultModel -> guest_score);
-        // 总分
-        $allGoal = $homeScore+$guestScore;
-        // 总球条件
-        $condition = intval($model -> condition);
-        // 差值
-        if ($size == 1) {
-            $resultScore = $allGoal - $condition;
-        } else {
-            $resultScore = $condition - $allGoal;
+        if (count($return)!=9 || !empty(array_diff([1,2,3,4,5,6,7,8,9],array_keys($return)))){
+            throw new  \Exception("棒球球结果不为9的数组,或match_process有错");
         }
-        if ($resultScore > 0) {
-            $data['result'] = 1;
-        } elseif ($resultScore < 0) {
-            $data['result'] = 1;
-        } else {
-            $data['result'] = 2;
+
+        if ($type == 4) {
+            return $return;
         }
-        $data['matchResult'] = "$homeScore+$guestScore(全场)";
-        return $data;
-    }
 
-    /**
-     * 前五局大小
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @param mixed $size 大小 1:大  -1:小
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    public function sizeCommonfirstfiveinnings($model, $resultModel, $resultRecords, $size){
-        // 倒叙
-        $newResultRecords = array_reverse($resultRecords);
-        $upResultKey = array_search('第五局', array_column($newResultRecords, 'match_process'));
-        $homeScore = 0;
-        $guestScore = 0;
-        // 主队得分
-        $homeScore = intval($newResultRecords[$upResultKey] -> home_score);
-        // 客队得分
-        $guestScore = intval($newResultRecords[$upResultKey] -> guest_score);
-        // 总分
-        $allGoal = $homeScore+$guestScore;
-        // 总球条件
-        $condition = intval($model -> condition);
-        // 差值
-        if ($size == 1) {
-            $resultScore = $allGoal - $condition;
-        } else {
-            $resultScore = $condition - $allGoal;
+        if ($type == 1) {
+            return $return[$sn];
         }
-        if ($resultScore > 0) {
-            $data['result'] = 1;
-        } elseif ($resultScore < 0) {
-            $data['result'] = -1;
-        } else {
-            $data['result'] = 2;
+
+        if ($type == 2) {
+            if ($sn == 1) {
+                $ret = [
+                    $return[1],
+                    $return[2],
+                ];
+            } else {
+                $ret = [
+                    $return[3],
+                    $return[4],
+                ];
+            }
         }
-        $data['matchResult'] = "$homeScore+$guestScore(前五局)";
-        return $data;
+        return $ret;
     }
 
-    /**
-     * 全场总得分单双
-     * @param mixed $model 注单表数据
-     * @param mixed $resultModel 结果表数据
-     * @param mixed $resultRecords 结果记录表数据
-     * @param mixed $type 大小 1:单  2:双
-     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
-     */
-    //结果单/双 home_score 主队进球数 guest_score 客队进球数 home_rate 主队让球 guest_rate 客队让球
-    public function  bq_two_sides($model,$resultModel,$resultRecords, $type)
+    //棒球比分数据汇总,以方便后面使用
+    public function bq_scoreDatas($recoreModesArray)
     {
-        $resultModel = $resultModel['0'];
-        // 主队得分
-        $homeScore = intval($resultModel -> home_score);
-        // 客队得分
-        $guestScore = intval($resultModel -> guest_score);
-        // 总分
-        $allGoal = $homeScore+$guestScore;
-        // 总得分单双条件
-        $condition = intval($model -> condition);
-        if($type == 1 && $condition == '单'){
-            if($allGoal%2 != 0){
-                $data['result'] = 1;
-            }else{
-                $data['result'] = -1;
-            }
-        }
-        if($type = 2 && $condition = '双'){
-            if($allGoal%2 == 0){
-                $data['result'] = 1;
-            }else{
-                $data['result'] = -1;
+        $arr = $this->bq_getResultBySn($recoreModesArray);
+        $return = [
+            'list' => $arr,
+            'all' => ['home' => 0, 'guest' => 0, 'home_rate' => 0, 'guest_rate' => 0],
+            'half' => ['home' => 0, 'guest' => 0, 'home_rate' => 0, 'guest_rate' => 0],
+            'half2' => ['home' => 0, 'guest' => 0, 'home_rate' => 0, 'guest_rate' => 0],
+        ];
+
+        foreach ($arr as $key => $val) {
+            $tmp_home = intval($val->home_score);
+            $tmp_guest = intval($val->guest_score);
+
+            $return['all']['home'] += $tmp_home;
+            $return['all']['guest'] += $tmp_guest;
+
+            if (in_array($key,[1,2,3,4,5])) {
+                $return['half']['home'] += $tmp_home;
+                $return['half']['guest'] += $tmp_guest;
+            } else {
+                $return['half2']['home'] += $tmp_home;
+                $return['half2']['guest'] += $tmp_guest;
             }
         }
-        $data['matchResult'] = "$allGoal(全场)";
-        return $data;
+        return $return;
     }
 
 }

+ 1 - 1
app/Lib/Settlement/Adapter/RulePlus.php

@@ -8,6 +8,7 @@ trait RulePlus
 
     public $return_he = ['result' => '2', 'matchResult' => '无规则和'];
     public $return_fail = ['result' => '-1', 'matchResult' => ''];
+    public $return_error = ['result' => '100', 'matchResult' => '无胜负判断规则'];
 
 
     //足球让球   $scoreDiff比分差   $condition条件   $matchResultWord匹配文字(原样输出)
@@ -237,7 +238,6 @@ trait RulePlus
         return $returnDatas;
     }
 
-
     //type ==1 返回第$sn节   ==2返回上下节,sn=1上半场,sn=2下半场    type==4全部按节数的数组
     public function lq_getResultBySn($recoreModesArray, $type = 4, $sn = 1)
     {

+ 283 - 102
app/Lib/Settlement/Adapter/WqRule.php

@@ -11,130 +11,311 @@ namespace App\Lib\Settlement\Adapter;
 
 class WqRule
 {
+    use RulePlus;
 
-    /**
-     * 总局数:大/小
-     */
-    public function wq_total_number($bet_match,$result_match,$result_match_r){
-        if(empty($bet_match) || empty($result_match) || empty($result_match_r)) return false;
-        //总局数:大/小
-        if($bet_match->p_code != 'wq_total_number') return false;
-        //获取主客队全场得分
-        $home_score = $result_match->home_score;
-        $guest_score = $result_match->guest_score;
-        //界定 分数 条件
-        $condition = $bet_match->condition;
-        //赔率代码
-        $odds_code = $bet_match->odds_code;
-        //返回结果
-        $allScore = $home_score+$guest_score;
-        $data = [
-            'result'=>1,
-            'matchResult'=>"$allScore(总局数全场得分)"
-        ];
-        //总局数大
-        if($odds_code == 'wq_total_number_big'){
-            if(($home_score+$guest_score) > $condition)
-            {
-                return $data;
+    //冠军
+    public function kemp($model, $resultModel, $resultRecords)
+    {
+        $odds_code = $model->odds_code;
+        $home_team = trim($model->home_team);
+        $guest_team = trim($model->guest_team);
+
+        if (in_array($odds_code, ['kemp_home', 'kemp_guest'])) {
+            $resultModel = DB::table('st_wq_league_result')->where(['lg_id' => $model->lg_id, 'status' => 1])->first();
+            $all_winner = trim($resultModel->result);
+            if (!$resultModel) {
+                throw new  \Exception("没有找到冠军数据-" . $model->lg_id);
             }
-            $data['result'] = -1;
-            return $data;
-        }
-        //总局数小
-        if($odds_code == 'wq_total_number_small'){
-            if(($home_score+$guest_score) < $condition)
-            {
-                return $data;
+            if ($odds_code == 'kemp_home') {
+                return $this->wq_gj_all($all_winner, $home_team);
+            } else {
+                return $this->wq_gj_all($all_winner, $guest_team);
             }
-            $data['result'] = -1;
-            return $data;
         }
 
-        return false;
+        $stand_datas = $this->wq_scoreDatas($resultModel);
+        switch ($odds_code) {
+            case 'one_kemp_home':
+                $return = $this->wq_gj_sine($home_team, $guest_team, $stand_datas['list']['1'], 1);
+                break;
+            case 'one_kemp_guest':
+                $return = $this->wq_gj_sine($home_team, $guest_team, $stand_datas['list']['1'], 2);
+                break;
+            case 'two_kemp_home':
+                $return = $this->wq_gj_sine($home_team, $guest_team, $stand_datas['list']['2'], 1);
+                break;
+            case 'two_kemp_guest':
+                $return = $this->wq_gj_sine($home_team, $guest_team, $stand_datas['list']['2'], 2);
+                break;
+            default:
+                $return = $this->return_error;
+                break;
+        }
+        return $return;
     }
 
-    /**
-     * 总局数:单/双
-     */
-    public function wq_two_sides($bet_match,$result_match,$result_match_r){
-        if(empty($bet_match) || empty($result_match) || empty($result_match_r)) return false;
-        //总局数:单/双
-        if($bet_match->p_code != 'wq_two_sides') return false;
-        //获取主客队全场得分
-        $home_score = $result_match->home_score;
-        $guest_score = $result_match->guest_score;
-        //赔率代码
-        $odds_code = $bet_match->odds_code;
-        //返回结果
-        $allScore = $home_score+$guest_score;
-        $data = [
-            'result'=>1,
-            'matchResult'=>"$allScore(总局数全场得分)"
-        ];
-        //总局数单
-        if($odds_code == 'wq_two_sides_single'){
-            if(($home_score+$guest_score)%2 != 0)
-            { //不能被2整除
-                return $data;
+    private function wq_gj_all($winner, $team)
+    {
+        if ($winner == $team) {
+            $return['result'] = 1;
+        } else {
+            $return['result'] = -1;
+        }
+        $return['matchResult'] = "($winner)";
+        return $return;
+    }
+
+    //$homeguest=1 主队赢 ==2客队赢
+    private function wq_gj_sine($home_name, $guest_name, $resultModel, $homeguest = 1)
+    {
+        $return['matchResult'] = ($homeguest == 1) ? $home_name : $guest_name;
+        if ($homeguest == 1) {
+            if ($resultModel->home_score > $resultModel->guest_score) {
+                $return['result'] = 1;
+            } else {
+                $return['result'] = -1;
+            }
+        } else {
+            if ($resultModel->guest_score > $resultModel->home_score) {
+                $return['result'] = 1;
+            } else {
+                $return['result'] = -1;
             }
-            $data['result'] = -1;
-            return $data;
+        }
+        return $return;
+    }
+
+
+    //让盘
+    public function dishes($model, $resultModel, $resultRecords)
+    {
+        $odds_code = $model->odds_code;
+        $stand_datas = $this->wq_scoreDatas($resultModel);
+        $condition = $model->condition;
+        $home_score = $stand_datas['all']['home'];
+        $guest_score = $stand_datas['all']['guest'];
 
+        switch ($odds_code) {
+            case 'dishes_home':
+                $return = $this->zq_letball($home_score - $guest_score, $condition, $guest_score . '-' . $guest_score . ('总盘'));
+                break;
+            case 'dishes_guest':
+                $return = $this->zq_letball($guest_score - $home_score, $condition, $guest_score . '-' . $guest_score . ('总盘'));
+                break;
+            default:
+                $return = $this->return_error;
+                break;
         }
-        //总局数双
-        if($odds_code == 'wq_two_sides_double'){
-            if(($home_score+$guest_score)%2 == 0)
-            {//能被2整除
-                return $data;
-            }
-            $data['result'] = -1;
-            return $data;
+        return $return;
+    }
+
+    //让局
+    public function bureau($model, $resultModel, $resultRecords)
+    {
+        $odds_code = $model->odds_code;
+        $condition = $model->condition;
+        $stand_datas = $this->wq_scoreDatas($resultModel);
+        $all_home = $stand_datas['allinning']['home'];
+        $all_guest = $stand_datas['allinning']['guest'];
+
+        switch ($odds_code) {
+            case 'bureau_home':
+                $return = $this->zq_letball($all_home - $all_guest, $condition, $all_home . '-' . $all_guest . ('总局数'));
+                break;
+            case 'bureau_guest':
+                $return = $this->zq_letball($all_guest - $all_home, $condition, $all_home . '-' . $all_guest . ('总局数'));
+                break;
+            default:
+                $return = $this->return_error;
         }
-        return false;
+        return $return;
     }
 
-    /**
-     * 让局
-     */
-    public function wq_bureau(){
+    //总局数:大/小
+    public function total_number($model, $resultModel, $resultRecords)
+    {
+        $odds_code = $model->odds_code;
+        $condition = $model->condition;
+        $stand_datas = $this->wq_scoreDatas($resultModel);
+        $all_home = $stand_datas['allinning']['home'];
+        $all_guest = $stand_datas['allinning']['guest'];
+        $all = $all_home + $all_guest;
+
+        $one_home = $stand_datas['oneinning']['home'];
+        $one_guest = $stand_datas['oneinning']['guest'];
+        $one_all = $one_home + $one_guest;
+
+        switch ($odds_code) {
+            case 'total_number_big':
+                $return = $this->zq_inball_bigsmall($all, $condition, 2, $all . '(总局数)');
+                break;
+            case 'total_number_small':
+                $return = $this->zq_inball_bigsmall($all, $condition, 1, $all . '(总局数)');
+                break;
+            case 'one_total_number_big':
+                $return = $this->zq_inball_bigsmall($one_all, $condition, 2, $all . '(第1盘局数)');
+                break;
+            case 'one_total_number_small':
+                $return = $this->zq_inball_bigsmall($one_all, $condition, 1, $all . '(第1盘局数)');
+                break;
+            default:
+                $return = $this->return_error;
+        }
+        return $return;
 
     }
 
-    /**
-     * 冠军 match_winer_player:获胜队员
-     */
-    public function wq_kemp($bet_match,$result_match,$result_match_r){
-        //返回结果
-        $data = [
-            'result'=>1,
-            'matchResult'=>"$result_match->match_winer_player(获胜队员)"
-        ];
-        if($result_match->match_winer_player == $bet_match->condition){
-            return $data;
-        }else{
-            $data['result'] = -1;
-            return $data;
+    //总局数:单/双
+    public function two_game_sides($model, $resultModel, $resultRecords)
+    {
+        $odds_code = $model->odds_code;
+        $condition = $model->condition;
+        $stand_datas = $this->wq_scoreDatas($resultModel);
+        $all_home = $stand_datas['allinning']['home'];
+        $all_guest = $stand_datas['allinning']['guest'];
+        $all = $all_home + $all_guest;
+
+        switch ($odds_code) {
+            case 'two_sides_single':
+            case 'two_sides_double':
+                $return = $this->zq_doublesing($all, $condition, $all . '(总局数)');
+                break;
+            default:
+                $return = $this->return_error;
         }
+        return $return;
+
     }
 
-    /**
-     * 让盘 home_player_score:主队队员得分 guest_player_score:客队队员得分 home_player_let_plate:主队队员让盘 guest_player_let_plate:客队队员让盘
-     */
-    public function wq_concede($bet_match,$result_match,$result_match_r){
-        $zdnum = $result_match->home_player_score + $result_match->home_player_let_plate;
-        $kdnum = $result_match->guest_player_score + $result_match->guest_player_let_plate;
-        if($bet_match->condition == $zdnum || $bet_match->condition == $kdnum){
-            return 1;
-        }else{
-            return -1;
+    //波胆
+    public function bodan($model, $resultModel, $resultRecords)
+    {
+        $odds_code = $model->odds_code;
+        $stand_datas = $this->wq_scoreDatas($resultModel);
+        $all_home = $stand_datas['all']['home'];
+        $all_guest = $stand_datas['all']['guest'];
+        $word = $all_home . '-' . $all_guest . '(比分)';
+
+        switch ($odds_code) {
+            case 'three_bodan_home_two_zero':
+                $return = $this->bodan_fun($all_home, $all_guest, '2-0', $word);
+                break;
+            case 'three_bodan_home_two_one':
+                $return = $this->bodan_fun($all_home, $all_guest, '2-1', $word);
+                break;
+            case 'three_bodan_guest_zero_two':
+                $return = $this->bodan_fun($all_home, $all_guest, '0-2', $word);
+                break;
+            case 'three_bodan_gueste_one_two':
+                $return = $this->bodan_fun($all_home, $all_guest, '1-2', $word);
+                break;
+            default:
+                $return = $this->return_error;
         }
+        return $return;
     }
 
-    /**
-     * 波胆
-     */
-    public function wq_bodan(){
+    public function bodan_fun($home, $guest, $type, $word)
+    {
+        $return['matchResult'] = $word;
+        $return['result'] = 0;
 
+        $tret = $home . '-' . $guest;
+        if ($type === $tret) {
+            $return['result'] = 1;
+        } else {
+            $return['result'] = -1;
+        }
+        return $return;
     }
+
+    public function wq_getResultBySn($recoreModesArray, $type = 4, $sn = 1)
+    {
+        $return = [];
+        foreach ($recoreModesArray as $key => $val) {
+            $nowsn = intval($val->match_process);
+            $return[$nowsn] = $val;
+        }
+
+        //网球只能为三盘或5盘
+        if (count($return) != 3 || count($return) != 5) {
+            throw new  \Exception("网球球结果不为3或5的数组,或match_process有错");
+        } else {
+            if (count($return) == 3 && !empty(array_diff([1, 2, 3], array_keys($return)))) {
+                throw new  \Exception("网球球结果不为3的数组,或match_process有错");
+            }
+            if (count($return) == 5 && !empty(array_diff([1, 2, 3, 4, 5], array_keys($return)))) {
+                throw new  \Exception("网球球结果不为5的数组,或match_process有错");
+            }
+        }
+
+        if ($type == 4) {
+            return $return;
+        }
+
+        if ($type == 1) {
+            return $return[$sn];
+        }
+
+    }
+
+
+    //网球比分数据汇总,以方便后面使用
+    public function wq_scoreDatas($recoreModesArray)
+    {
+        $arr = $this->wq_getResultBySn($recoreModesArray);
+        $return = [
+            'list' => $arr,
+            'all' => ['home' => 0, 'guest' => 0],         //总赢盘数统计
+            'allinning' => ['home' => 0, 'guest' => 0],   //总赢局数统计
+            'oneinning' => ['home' => 0, 'guest' => 0],   //第一盘的赢局数统计
+        ];
+
+        foreach ($arr as $key => $val) {
+            $tmp_home = intval($val->home_score);
+            $tmp_guest = intval($val->guest_score);
+
+            $return['all']['home'] += $tmp_home;
+            $return['all']['guest'] += $tmp_guest;
+
+            $juinfo = $this->wq_JuInfo($val);
+            $return['allinning']['home'] += $juinfo['all']['home'];
+            $return['allinning']['guest'] += $juinfo['all']['guest'];
+
+            if ($key == 1) {
+                $return['oneinning']['home'] = $juinfo['all']['home'];
+                $return['oneinning']['guest'] = $juinfo['all']['guest'];
+            }
+        }
+        return $return;
+    }
+
+
+    //某盘  局的输赢统计
+    public function wq_JuInfo($Resultobj)
+    {
+        $home = $Resultobj->inning->home;
+
+        $hw = $gw = 0;
+        foreach ($home as $val) {
+            if ($val) {
+                $hw++;
+            } else {
+                $gw++;
+            }
+        }
+        if (($gw + $gw) < 6) {
+            throw  new  \Exception('数据有误,每盘的局数不应小于6');
+        }
+
+        $return = [
+            'list' => $Resultobj->inning,
+            'all' => ['inning' => $hw + $gw, 'home' => $hw, 'guest' => $gw],
+            'home' => $Resultobj->inning->home,
+            'guest' => $Resultobj->inning->guest,
+        ];
+        return $return;
+    }
+
+
 }

+ 19 - 13
app/Lib/Settlement/Adapter/ZqRule.php

@@ -345,11 +345,12 @@ class ZqRule
     public function first_ball_home($model, $resultModel, $resultRecords)
     {
         $resultModel = $resultModel['0'];
+        $word = $resultModel->first_score ? $resultModel->first_score : '无';
 
         if (trim($resultModel->first_score) == trim($resultModel->home_team)) {
-            return ['result' => 1, 'matchResult' => ''];
+            return ['result' => 1, 'matchResult' => $word];
         } else {
-            return ['result' => -1, 'matchResult' => ''];
+            return ['result' => -1, 'matchResult' => $word];
         }
 
     }
@@ -358,11 +359,12 @@ class ZqRule
     public function first_ball_guest($model, $resultModel, $resultRecords)
     {
         $resultModel = $resultModel['0'];
+        $word = $resultModel->first_score ? $resultModel->first_score : '无';
 
         if (trim($resultModel->first_score) == trim($resultModel->guest_team)) {
-            return ['result' => 1, 'matchResult' => ''];
+            return ['result' => 1, 'matchResult' => $word];
         } else {
-            return ['result' => -1, 'matchResult' => ''];
+            return ['result' => -1, 'matchResult' => $word];
         }
 
     }
@@ -371,11 +373,12 @@ class ZqRule
     public function last_ball_home($model, $resultModel, $resultRecords)
     {
         $resultModel = $resultModel['0'];
+        $word = $resultModel->last_score ? $resultModel->first_score : '无';
 
         if (trim($resultModel->last_score) == trim($resultModel->home_team)) {
-            return ['result' => 1, 'matchResult' => ''];
+            return ['result' => 1, 'matchResult' => $word];
         } else {
-            return ['result' => -1, 'matchResult' => ''];
+            return ['result' => -1, 'matchResult' => $word];
         }
 
 
@@ -386,11 +389,12 @@ class ZqRule
     {
         $pos = count($resultModel) - 1;
         $resultModel = $resultModel[$pos];
+        $word = $resultModel->last_score ? $resultModel->first_score : '无';
 
         if (trim($resultModel->last_score) == trim($resultModel->guest_team)) {
-            return ['result' => 1, 'matchResult' => ''];
+            return ['result' => 1, 'matchResult' => $word];
         } else {
-            return ['result' => -1, 'matchResult' => ''];
+            return ['result' => -1, 'matchResult' => $word];
         }
 
     }
@@ -401,10 +405,12 @@ class ZqRule
         $pos = count($resultModel) - 1;
         $resultModel = $resultModel[$pos];
         $all_score = intval($resultModel->home_score) + intval($resultModel->guest_score);
+        $word = $resultModel->first_score ? $resultModel->first_score : '无';
+
         if ($all_score <= 0) {
-            return ['result' => 1, 'matchResult' => ''];
+            return ['result' => 1, 'matchResult' => $word];
         } else {
-            return ['result' => -1, 'matchResult' => ''];
+            return ['result' => -1, 'matchResult' => $word];
         }
 
     }
@@ -503,7 +509,7 @@ class ZqRule
             $hafs = intval($resultModel->u_home_score) + intval($resultModel->u_guest_score);
             $text = ($hafs % 2 == 0) ? '双' : '单';
             $dsresult = ($text == $model->condition) ? 1 : -1;
-            return ['result' => $dsresult, 'matchResult' => "$hafs(场)"];
+            return ['result' => $dsresult, 'matchResult' => "$hafs(场)"];
         } else {
             $data = [
                 'result' => 100,
@@ -596,13 +602,13 @@ class ZqRule
         if ($resultb == 1) {
             $data = [
                 'result' => 1,
-                'matchResult' => "$resulttod(半场)",
+                'matchResult' => "$firsthalftod(半场)",
             ];
         }
         if ($resultb == -1) {
             $data = [
                 'result' => -1,
-                'matchResult' => "$resulttod(半场)",
+                'matchResult' => "$firsthalftod(半场)",
             ];
         }
         return $data;

+ 29 - 2
app/Lib/Settlement/SettlementWinFail.php

@@ -33,6 +33,9 @@ class SettlementWinFail
     public $resultRecords = []; //比赛中间结果对像数组;
     public $gjModel = null;  //冠军比赛结果数据
 
+    public $CompostionDatas = null; //赛事数据
+
+
     //类型映射
     public $gameAllMap = [
         'zq' => 'ZqRule',
@@ -162,6 +165,13 @@ class SettlementWinFail
 
         foreach ($matchKeyModels as $key => $sval_2) {
             foreach ($sval_2 as $sval) {
+                $thissaisi = $this->getCompostionDatas($sval->game_code, $sval->match_id);
+                if ($thissaisi->status == 4) {
+                    $this->makesql_up_buymatch_winorfalse($sval->id, 2, date("Y-m-d H:i:s"), '赛事取消[结果和处理]');
+                    $sql = "update money_buy_str  set  wait_match_num=wait_match_num-1 where  batch_id='$sval->batch_id' ";
+                    DB::update($sql);
+                    continue;
+                }
                 if ($sval->match_id != $this->match_id) {
                     continue;
                 }
@@ -193,7 +203,7 @@ class SettlementWinFail
             } elseif ($this->RefClass->hasMethod($fun2)) {
                 $winorfalse = $this->AdapterObj->$fun2($sval, $this->resultModel, []);
             } else {
-                throw new \Exception('没有找到玩法输赢判断规则-01-'.$sval->id, 40010);
+                throw new \Exception('没有找到玩法输赢判断规则-01-' . $sval->id, 40010);
             }
         } else {
             $this->getGjDatas($sval);
@@ -203,7 +213,7 @@ class SettlementWinFail
             } elseif ($this->RefClass->hasMethod($fun2)) {
                 $winorfalse = $this->AdapterObj->$fun2($sval, $this->gjModel, []);
             } else {
-                throw new \Exception('没有找到玩法输赢判断规则-02-'.$sval->id, 40010);
+                throw new \Exception('没有找到玩法输赢判断规则-02-' . $sval->id, 40010);
             }
         }
 
@@ -337,6 +347,23 @@ class SettlementWinFail
 
     }
 
+    //根据比赛ID,获取赛事数据,主要用于处理是否有作废的情况
+    public function getCompostionDatas($game_code, $batch_id)
+    {
+        $batch_id = intval($batch_id);
+        if (isset($this->CompostionDatas[$batch_id])) {
+            return $this->getCompostionDatas[$game_code][$batch_id];
+        }
+
+        $table = 'st_' . $game_code . '_competition';
+        $ret = DB::table($table)->where('id', $batch_id)->first();
+        if (count($ret) <= 0) {
+            throw new  \Exception('根据比赛ID获取赛事数据有误');
+        }
+        $this->CompostionDatas[$game_code][$batch_id] = $ret;
+        return $ret;
+    }
+
 
     //冠军比赛结果
     public function getGjDatas($matchModel)