vali 6 年 前
コミット
b8a62d5b4a

+ 202 - 0
app/Lib/Settlement/Adapter/BqRule.php

@@ -0,0 +1,202 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/4/25
+ * Time: 14:10
+ */
+
+namespace App\Lib\Settlement\Adapter;
+
+class BqRule
+{
+    use RulePlus;
+
+    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;
+    }
+
+    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;
+    }
+
+    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;
+
+    }
+
+    public function capot($model, $resultModels, $resultRecords)
+    {
+        $stand_Datas = $this->bq_scoreDatas($resultModels);
+        $odds_code = $model->odds_code;
+
+        $home = $stand_Datas['all']['home'];
+        $guest = $stand_Datas['all']['guest'];
+
+
+        switch ($odds_code) {
+            case 'capot_home':
+                if ($home > $guest) {
+                    $return['result'] = 1;
+                } else {
+                    $return['result'] = -1;
+                }
+                $return['matchResult'] = $home . '-' . $guest . '(全场)';
+
+                break;
+            case 'capot_guest':
+                if ($guest > $home) {
+                    $return['result'] = 1;
+                } else {
+                    $return['result'] = -1;
+                }
+                $return['matchResult'] = $home . '-' . $guest . '(全场)';
+                break;
+            default:
+                $return = $this->return_error;
+                break;
+        }
+        return $return;
+    }
+
+
+    //棒球 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;
+        }
+
+        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 ($type == 4) {
+            return $return;
+        }
+
+        if ($type == 1) {
+            return $return[$sn];
+        }
+
+        if ($type == 2) {
+            if ($sn == 1) {
+                $ret = [
+                    $return[1],
+                    $return[2],
+                ];
+            } else {
+                $ret = [
+                    $return[3],
+                    $return[4],
+                ];
+            }
+        }
+        return $ret;
+    }
+
+    //棒球比分数据汇总,以方便后面使用
+    public function bq_scoreDatas($recoreModesArray)
+    {
+        $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;
+            }
+        }
+        return $return;
+    }
+
+}

+ 1177 - 0
app/Lib/Settlement/Adapter/LqRule.php

@@ -0,0 +1,1177 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/4/25
+ * Time: 14:09
+ */
+
+namespace App\Lib\Settlement\Adapter;
+
+use Illuminate\Support\Facades\DB;
+
+class LqRule
+{
+
+    use RulePlus;
+
+    /**
+     * 让球个数公共函数
+     * @param mixed $model 注单表数据
+     * @param mixed $difference 分差
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function concedeCommon($model, $difference)
+    {
+        // 让球个数
+        $condition = intval($model->condition);
+        // 差值
+        $resultScore = $difference + $condition;
+        if ($resultScore > 0) {
+            $result = 1;
+        } elseif ($resultScore < 0) {
+            $result = -1;
+        } else {
+            $result = 2;
+        }
+
+        return $result;
+    }
+
+    /**
+     * 大小公共函数
+     * @param mixed $model 注单表数据
+     * @param mixed $allGoal 总分
+     * @param mixed $size 大小 1:大  -1:小
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function sizeCommon($model, $allGoal, $size)
+    {
+        // 总球条件
+        $condition = intval($model->condition);
+        // 差值
+        if ($size == 1) {
+            $resultScore = $allGoal - $condition;
+        } else {
+            $resultScore = $condition - $allGoal;
+        }
+        if ($resultScore > 0) {
+            $result = 1;
+        } elseif ($resultScore < 0) {
+            $result = -1;
+        } else {
+            $result = 2;
+        }
+
+        return $result;
+    }
+
+    /**
+     * 全场|主队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function concede_home($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['all']['home']);
+        // 客队得分
+        $guestScore = intval($retdatas['all']['guest']);
+        // 分差 - 主 :客
+        $difference = $homeScore - $guestScore;
+
+        $data['result'] = $this->concedeCommon($model, $difference);
+        $data['matchResult'] = "$homeScore-$guestScore(全场)";
+        return $data;
+    }
+
+    /**
+     * 全场|客队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function concede_guest($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['all']['home']);
+        // 客队得分
+        $guestScore = intval($retdatas['all']['guest']);
+        // 分差 - 客 :主
+        $difference = $guestScore - $homeScore;
+
+        $data['result'] = $this->concedeCommon($model, $difference);
+        $data['matchResult'] = "$homeScore-$guestScore(全场)";
+        return $data;
+    }
+
+    /**
+     * 上半场|主队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function half_concede_home($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+
+        // 主队得分
+        $homeScore = intval($retdatas['half']['home']);
+        // 客队得分
+        $guestScore = intval($retdatas['half']['guest']);
+        // 分差 - 主 :客
+        $difference = $homeScore - $guestScore;
+
+        $data['result'] = $this->concedeCommon($model, $difference);
+        $data['matchResult'] = "$homeScore-$guestScore(上半场)";
+        return $data;
+    }
+
+    /**
+     * 上半场|客队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function half_concede_guest($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['half']['home']);
+        // 客队得分
+        $guestScore = intval($retdatas['half']['guest']);
+        // 分差 - 客 :主
+        $difference = $guestScore - $homeScore;
+
+        $data['result'] = $this->concedeCommon($model, $difference);
+        $data['matchResult'] = "$homeScore-$guestScore(上半场)";
+        return $data;
+    }
+
+    /**
+     * 第一节|主队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function one_concede_home($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['1']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['1']->guest_score);
+        // 分差 - 主 :客
+        $difference = $homeScore - $guestScore;
+
+        $data['result'] = $this->concedeCommon($model, $difference);
+        $data['matchResult'] = "$homeScore-$guestScore(第一节)";
+        return $data;
+    }
+
+    /**
+     * 第一节|客队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function one_concede_guest($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['1']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['1']->guest_score);
+        // 分差 - 客 :主
+        $difference = $guestScore - $homeScore;
+
+        $data['result'] = $this->concedeCommon($model, $difference);
+        $data['matchResult'] = "$homeScore-$guestScore(第一节)";
+        return $data;
+    }
+
+    /**
+     * 第二节|主队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function two_concede_home($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['2']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['2']->guest_score);
+        // 分差 - 主 :客
+        $difference = $homeScore - $guestScore;
+
+        $data['result'] = $this->concedeCommon($model, $difference);
+        $data['matchResult'] = "$homeScore-$guestScore(第二节)";
+        return $data;
+    }
+
+    /**
+     * 第二节|客队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function two_concede_guest($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['2']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['2']->guest_score);
+        // 分差 - 客 :主
+        $difference = $guestScore - $homeScore;
+
+        $data['result'] = $this->concedeCommon($model, $difference);
+        $data['matchResult'] = "$homeScore-$guestScore(第二节)";
+        return $data;
+    }
+
+    /**
+     * 第三节|主队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function three_concede_home($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['3']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['3']->guest_score);
+        // 分差 - 主 :客
+        $difference = $homeScore - $guestScore;
+
+        $data['result'] = $this->concedeCommon($model, $difference);
+        $data['matchResult'] = "$homeScore-$guestScore(第三节)";
+        return $data;
+    }
+
+    /**
+     * 第三节|客队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function three_concede_guest($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['3']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['3']->guest_score);
+        // 分差 - 客 :主
+        $difference = $guestScore - $homeScore;
+
+        $data['result'] = $this->concedeCommon($model, $difference);
+        $data['matchResult'] = "$homeScore-$guestScore(第三节)";
+        return $data;
+    }
+
+    /**
+     * 第四节|主队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function four_concede_home($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['4']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['4']->guest_score);
+        // 分差 - 主 :客
+        $difference = $homeScore - $guestScore;
+
+        $data['result'] = $this->concedeCommon($model, $difference);
+        $data['matchResult'] = "$homeScore-$guestScore(第四节)";
+        return $data;
+    }
+
+    /**
+     * 第四节|客队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function four_concede_guest($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['4']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['4']->guest_score);
+        // 分差 - 客 :主
+        $difference = $guestScore - $homeScore;
+
+        $data['result'] = $this->concedeCommon($model, $difference);
+        $data['matchResult'] = "$homeScore-$guestScore(第四节)";
+        return $data;
+    }
+
+    /**
+     * 全场总分大
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function total_size_big($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+
+        // 主队得分
+        $homeScore = intval($retdatas['all']['home']);
+        // 客队得分
+        $guestScore = intval($retdatas['all']['guest']);
+        // 总进球数
+        $allGoal = $homeScore + $guestScore;
+        $data['result'] = $this->sizeCommon($model, $allGoal, 1);
+        $data['matchResult'] = "$homeScore-$guestScore(全场)";
+        return $data;
+    }
+
+    /**
+     * 全场总分小
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function total_size_small($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['all']['home']);
+        // 客队得分
+        $guestScore = intval($retdatas['all']['guest']);
+        // 总进球数
+        $allGoal = $homeScore + $guestScore;
+        $data['result'] = $this->sizeCommon($model, $allGoal, -1);
+        $data['matchResult'] = "$homeScore-$guestScore(全场)";
+        return $data;
+    }
+
+    /**
+     * 上半场总分大
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function half_total_sizes_big($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['half']['home']);
+        // 客队得分
+        $guestScore = intval($retdatas['half']['guest']);
+        // 总进球数
+        $allGoal = $homeScore + $guestScore;
+        $data['result'] = $this->sizeCommon($model, $allGoal, 1);
+        $data['matchResult'] = "$homeScore-$guestScore(上半场)";
+        return $data;
+    }
+
+    /**
+     * 上半场总分小
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function half_total_sizes_small($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['half']['home']);
+        // 客队得分
+        $guestScore = intval($retdatas['half']['guest']);
+        // 总进球数
+        $allGoal = $homeScore + $guestScore;
+        $data['result'] = $this->sizeCommon($model, $allGoal, -1);
+        $data['matchResult'] = "$homeScore-$guestScore(上半场)";
+        return $data;
+    }
+
+    /**
+     * 第一节总分大
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function one_total_sizes_big($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['1']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['1']->guest_score);
+        // 总进球数
+        $allGoal = $homeScore + $guestScore;
+        $data['result'] = $this->sizeCommon($model, $allGoal, 1);
+        $data['matchResult'] = "$homeScore-$guestScore(第一节)";
+        return $data;
+    }
+
+    /**
+     * 第一节总分小
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function one_total_sizes_small($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['1']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['1']->guest_score);
+        // 总进球数
+        $allGoal = $homeScore + $guestScore;
+        $data['result'] = $this->sizeCommon($model, $allGoal, -1);
+        $data['matchResult'] = "$homeScore-$guestScore(第一节)";
+        return $data;
+    }
+
+    /**
+     * 第二节总分大
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function two_total_sizes_big($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['2']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['2']->guest_score);
+        // 总进球数
+        $allGoal = $homeScore + $guestScore;
+        $data['result'] = $this->sizeCommon($model, $allGoal, 1);
+        $data['matchResult'] = "$homeScore-$guestScore(第二节)";
+        return $data;
+    }
+
+    /**
+     * 第二节总分小
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function two_total_sizes_small($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['2']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['2']->guest_score);
+        // 总进球数
+        $allGoal = $homeScore + $guestScore;
+        $data['result'] = $this->sizeCommon($model, $allGoal, -1);
+        $data['matchResult'] = "$homeScore-$guestScore(第二节)";
+        return $data;
+    }
+
+    /**
+     * 第三节总分大
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function three_total_sizes_big($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['3']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['3']->guest_score);
+        // 总进球数
+        $allGoal = $homeScore + $guestScore;
+        $data['result'] = $this->sizeCommon($model, $allGoal, 1);
+        $data['matchResult'] = "$homeScore-$guestScore(第三节)";
+        return $data;
+    }
+
+    /**
+     * 第三节总分小
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function three_total_sizes_small($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['3']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['3']->guest_score);
+        // 总进球数
+        $allGoal = $homeScore + $guestScore;
+        $data['result'] = $this->sizeCommon($model, $allGoal, -1);
+        $data['matchResult'] = "$homeScore-$guestScore(第三节)";
+        return $data;
+    }
+
+    /**
+     * 第四节总分大
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function four_total_sizes_big($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['4']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['4']->guest_score);
+        // 总进球数
+        $allGoal = $homeScore + $guestScore;
+        $data['result'] = $this->sizeCommon($model, $allGoal, 1);
+        $data['matchResult'] = "$homeScore-$guestScore(第四节)";
+        return $data;
+    }
+
+    /**
+     * 第四节总分小
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function four_total_sizes_small($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        // 主队得分
+        $homeScore = intval($retdatas['list']['4']->home_score);
+        // 客队得分
+        $guestScore = intval($retdatas['list']['4']->guest_score);
+        // 总进球数
+        $allGoal = $homeScore + $guestScore;
+        $data['result'] = $this->sizeCommon($model, $allGoal, -1);
+        $data['matchResult'] = "$homeScore-$guestScore(第四节)";
+        return $data;
+    }
+
+    /**
+     * 篮球 独赢规则
+     */
+    public function lq_capot($bet_match, $result_match, $result_match_r)
+    {
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        // 篮球 独赢
+        if ($bet_match->p_code != 'lq_capot') return false;
+
+        $retdatas = $this->lq_scoreDatas($result_match);
+
+        //获取主客队全场得分
+        $home_score = $retdatas['all']['home'];
+        $guest_score = $retdatas['all']['guest'];
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$home_score-$guest_score(全场得分)"
+        ];
+        //主队
+        if ($bet_match->odds_code == 'capot_home') {
+            if ($home_score > $guest_score) {
+                return $data;
+            }
+            $data['result'] = -1;
+            return $data;
+        }
+        //客队
+        if ($bet_match->odds_code == 'capot_guest') {
+            if ($home_score < $guest_score) {
+                return $data;
+            }
+            $data['result'] = -1;
+            return $data;
+        }
+        //上半场
+        if (strstr($bet_match->odds_code, "half")) {
+            //获取上半场最终数据
+            $last_stage_data = $retdatas['half'];
+            //获取主客队上半场得分
+            $home_score = $last_stage_data['home'];
+            $guest_score = $last_stage_data['guest'];
+            //返回结果
+            $data = [
+                'result' => 1,
+                'matchResult' => "$home_score-$guest_score(上半场得分)"
+            ];
+            //主队 上半场
+            if ($bet_match->odds_code == 'half_capot_home') {
+                if ($home_score > $guest_score) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //客队 上半场
+            if ($bet_match->odds_code == 'half_capot_guest') {
+                if ($home_score < $guest_score) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+        }
+        //第一节
+        if (strstr($bet_match->odds_code, "one")) {
+            //获取第一节最终数据
+            $last_stage_data = $retdatas['list']['1'];
+            //获取主客队第一节得分
+            $home_score = $last_stage_data->home_score;
+            $guest_score = $last_stage_data->guest_score;
+            //返回结果
+            $data = [
+                'result' => 1,
+                'matchResult' => "$home_score-$guest_score(第一节得分)"
+            ];
+            //主队 第一节
+            if ($bet_match->odds_code == 'one_capot_home') {
+                if ($home_score > $guest_score) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //客队 第一节
+            if ($bet_match->odds_code == 'one_capot_guest') {
+                if ($home_score < $guest_score) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+        }
+        //第二节
+        if (strstr($bet_match->odds_code, "two")) {
+            //获取第二节最终数据
+            $last_stage_data = $retdatas['list']['2'];
+            //获取主客队第二节得分
+            $home_score = $last_stage_data->home_score;
+            $guest_score = $last_stage_data->guest_score;
+            //返回结果
+            $data = [
+                'result' => 1,
+                'matchResult' => "$home_score-$guest_score(第二节得分)"
+            ];
+            //主队 第二节
+            if ($bet_match->odds_code == 'two_capot_home') {
+                if ($home_score > $guest_score) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //客队 第二节
+            if ($bet_match->odds_code == 'two_capot_guest') {
+                if ($home_score < $guest_score) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+        }
+        //第三节
+        if (strstr($bet_match->odds_code, "three")) {
+            //获取第三节最终数据
+            $last_stage_data = $retdatas['list']['3'];
+            //获取主客队第三节得分
+            $home_score = $last_stage_data->home_score;
+            $guest_score = $last_stage_data->guest_score;
+            //返回结果
+            $data = [
+                'result' => 1,
+                'matchResult' => "$home_score-$guest_score(第三节得分)"
+            ];
+            //主队 第三节
+            if ($bet_match->odds_code == 'three_capot_home') {
+                if ($home_score > $guest_score) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //客队 第三节
+            if ($bet_match->odds_code == 'three_capot_guest') {
+                if ($home_score < $guest_score) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+        }
+        //第四节
+        if (strstr($bet_match->odds_code, "four")) {
+            //获取第四节最终数据
+            $last_stage_data = $retdatas['list']['4'];
+            //获取主客队第四节得分
+            $home_score = $last_stage_data->home_score;
+            $guest_score = $last_stage_data->guest_score;
+            //返回结果
+            $data = [
+                'result' => 1,
+                'matchResult' => "$home_score-$guest_score(第四节得分)"
+            ];
+            //主队 第四节
+            if ($bet_match->odds_code == 'four_capot_home') {
+                if ($home_score > $guest_score) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //客队 第四节
+            if ($bet_match->odds_code == 'four_capot_guest') {
+                if ($home_score < $guest_score) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * 篮球 球队得分大小
+     */
+    public function team_score($bet_match, $result_match, $result_match_r)
+    {
+
+        if (empty($bet_match) || empty($result_match)) return false;
+        // 篮球 球队得分大小
+        if ($bet_match->p_code != 'lq_team_score') return false;
+        $retdatas = $this->lq_scoreDatas($result_match);
+
+        //获取主客队全场得分
+        $home_score = $retdatas['all']['home'];
+        $guest_score = $retdatas['all']['guest'];
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => ""
+        ];
+        //界定 分数 条件
+        $condition = $bet_match->condition;
+        //赔率代码
+        $odds_code = $bet_match->odds_code;
+
+        //全场 主队 得分大
+        if ($odds_code == 'score_home_big') {
+            $data['matchResult'] = "$home_score(全场主队得分)";
+            if ($home_score > $condition) {
+                return $data;
+            }
+            $data['result'] = -1;
+            return $data;
+        }
+        //全场 主队 得分小
+        if ($odds_code == 'score_home_small') {
+            $data['matchResult'] = "$home_score(全场主队得分)";
+            if ($home_score < $condition) {
+                return $data;
+            }
+            $data['result'] = -1;
+            return $data;
+        }
+        //全场 客队 得分大
+        if ($odds_code == 'score_guest_big') {
+            $data['matchResult'] = "$guest_score(全场客队得分)";
+            if ($guest_score > $condition) {
+                return $data;
+            }
+            $data['result'] = -1;
+            return $data;
+        }
+        //全场 客队 得分小
+        if ($odds_code == 'score_guest_small') {
+            $data['matchResult'] = "$guest_score(全场客队得分)";
+            if ($guest_score < $condition) {
+                return $data;
+            }
+            $data['result'] = -1;
+            return $data;
+        }
+        //上半场
+        if (strstr($odds_code, "half")) {
+            //获取上半场最终数据
+            $last_stage_data = $retdatas['half'];
+            //获取主客队上半场得分
+            $home_score = $last_stage_data['home'];
+            $guest_score = $last_stage_data['guest'];
+            //上半场主队得分大
+            if ($odds_code == 'half_score_home_big') {
+                $data['matchResult'] = "$home_score(上半场主队得分)";
+                if ($home_score > $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //上半场主队得分小
+            if ($odds_code == 'half_score_home_small') {
+                $data['matchResult'] = "$home_score(上半场主队得分)";
+                if ($home_score < $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //上半场客队得分大
+            if ($odds_code == 'half_score_guest_big') {
+                $data['matchResult'] = "$guest_score(上半场客队得分)";
+                if ($guest_score > $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //上半场客队得分小
+            if ($odds_code == 'half_score_guest_small') {
+                $data['matchResult'] = "$guest_score(上半场客队得分)";
+                if ($guest_score < $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+        }
+        //第一节
+        if (strstr($odds_code, "one")) {
+            //获取第一节最终数据
+            $last_stage_data = $retdatas['list']['1'];
+            //获取主客队第一节得分
+            $home_score = $last_stage_data->home_score;
+            $guest_score = $last_stage_data->guest_score;
+            //第一节主队得分大
+            if ($odds_code == 'one_score_home_big') {
+                $data['matchResult'] = "$home_score(第一节主队得分)";
+                if ($home_score > $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //第一节主队得分小
+            if ($odds_code == 'one_score_home_small') {
+                $data['matchResult'] = "$home_score(第一节主队得分)";
+                if ($home_score < $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //第一节客队得分大
+            if ($odds_code == 'one_score_guest_big') {
+                $data['matchResult'] = "$guest_score(第一节客队得分)";
+                if ($guest_score > $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //第一节客队得分小
+            if ($odds_code == 'one_score_guest_small') {
+                $data['matchResult'] = "$guest_score(第一节客队得分)";
+                if ($guest_score < $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+        }
+        //第二节
+        if (strstr($odds_code, "two")) {
+            //获取第二节最终数据
+            $last_stage_data = $retdatas['list']['2'];
+            //获取主客队第二节得分
+            $home_score = $last_stage_data->home_score;
+            $guest_score = $last_stage_data->guest_score;
+            //第二节主队得分大
+            if ($odds_code == 'two_score_home_big') {
+                $data['matchResult'] = "$home_score(第二节主队得分)";
+                if ($home_score > $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //第二节主队得分小
+            if ($odds_code == 'two_score_home_small') {
+                $data['matchResult'] = "$home_score(第二节主队得分)";
+                if ($home_score < $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //第二节客队得分大
+            if ($odds_code == 'two_score_guest_big') {
+                $data['matchResult'] = "$guest_score(第二节客队得分)";
+                if ($guest_score > $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //第二节客队得分小
+            if ($odds_code == 'two_score_guest_small') {
+                $data['matchResult'] = "$guest_score(第二节客队得分)";
+                if ($guest_score < $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+        }
+        //第三节
+        if (strstr($odds_code, "three")) {
+            //获取第三节最终数据
+            $last_stage_data = $retdatas['list']['3'];
+            //获取主客队第三节得分
+            $home_score = $last_stage_data->home_score;
+            $guest_score = $last_stage_data->guest_score;
+            //第三节主队得分大
+            if ($odds_code == 'three_score_home_big') {
+                $data['matchResult'] = "$home_score(第三节主队得分)";
+                if ($home_score > $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //第三节主队得分小
+            if ($odds_code == 'three_score_home_small') {
+                $data['matchResult'] = "$home_score(第三节主队得分)";
+                if ($home_score < $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //第三节客队得分大
+            if ($odds_code == 'three_score_guest_big') {
+                $data['matchResult'] = "$guest_score(第三节客队得分)";
+                if ($guest_score > $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //第三节客队得分小
+            if ($odds_code == 'three_score_guest_small') {
+                $data['matchResult'] = "$guest_score(第三节客队得分)";
+                if ($guest_score < $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+        }
+        //第四节
+        if (strstr($odds_code, "four")) {
+            //获取第四节最终数据
+            $last_stage_data = $retdatas['list']['4'];
+            //获取主客队第四节得分
+            $home_score = $last_stage_data->home_score;
+            $guest_score = $last_stage_data->guest_score;
+            //第四节主队得分大
+            if ($odds_code == 'four_score_home_big') {
+                $data['matchResult'] = "$home_score(第四节主队得分)";
+                if ($home_score > $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //第四节主队得分小
+            if ($odds_code == 'four_score_home_small') {
+                $data['matchResult'] = "$home_score(第四节主队得分)";
+                if ($home_score < $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //第四节客队得分大
+            if ($odds_code == 'four_score_guest_big') {
+                $data['matchResult'] = "$guest_score(第四节客队得分)";
+                if ($guest_score > $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+            //第四节客队得分小
+            if ($odds_code == 'four_score_guest_small') {
+                $data['matchResult'] = "$guest_score(第四节客队得分)";
+                if ($guest_score < $condition) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+        }
+        return false;
+    }
+
+
+    //结果单/双 home_score 主队进球数 guest_score 客队进球数 home_rate 主队让球 guest_rate 客队让球
+    public function two_sides($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        $odds_code = $model->odds_code;
+
+        switch ($odds_code) {
+            case 'two_sides_single':
+                $return = $this->two_sides_tooles($retdatas['all']['home'] + $retdatas['all']['guest'], 1);
+                break;
+            case 'two_sides_double':
+                $return = $this->two_sides_tooles($retdatas['all']['home'] + $retdatas['all']['guest'], 2);
+                break;
+            case 'half_two_sides_single':
+                $return = $this->two_sides_tooles($retdatas['half']['home'] + $retdatas['half']['guest'], 1);
+                break;
+            case 'half_two_sides_double':
+                $return = $this->two_sides_tooles($retdatas['half']['home'] + $retdatas['half']['guest'], 2);
+                break;
+            case 'one_two_sides_single':
+                $return = $this->two_sides_tooles($retdatas['list']['1']->home_score + $retdatas['list']['1']->guest_score, 1);
+                break;
+            case 'one_two_sides_double':
+                $return = $this->two_sides_tooles($retdatas['list']['1']->home_score + $retdatas['list']['1']->guest_score, 2);
+                break;
+            case 'two_two_sides_single':
+                $return = $this->two_sides_tooles($retdatas['list']['2']->home_score + $retdatas['list']['2']->guest_score, 1);
+                break;
+            case 'two_two_sides_double':
+                $return = $this->two_sides_tooles($retdatas['list']['2']->home_score + $retdatas['list']['2']->guest_score, 2);
+                break;
+            case 'three_two_sides_single':
+                $return = $this->two_sides_tooles($retdatas['list']['3']->home_score + $retdatas['list']['3']->guest_score, 1);
+                break;
+            case 'three_two_sides_double':
+                $return = $this->two_sides_tooles($retdatas['list']['3']->home_score + $retdatas['list']['3']->guest_score, 2);
+                break;
+            case 'four_two_sides_single':
+                $return = $this->two_sides_tooles($retdatas['list']['4']->home_score + $retdatas['list']['4']->guest_score, 1);
+                break;
+            case 'four_two_sides_double':
+                $return = $this->two_sides_tooles($retdatas['list']['4']->home_score + $retdatas['list']['4']->guest_score, 2);
+                break;
+            default:
+                $return = ['result' => 0, 'matchResult' => 'error'];
+        }
+        return $return;
+    }
+
+
+    //单双判断  $type=1单 2双
+    private function two_sides_tooles($score, $type)
+    {
+        $catds = (($score % 2) == 0) ? 2 : 1;
+        if ($type == $catds) {
+            $return = ['result' => 1, 'matchResult' => $score . '-last'];
+        } else {
+            $return = ['result' => -1, 'matchResult' => $score . '-last'];
+        }
+        return $return;
+    }
+
+    //进球最后一位数字
+    public function last_number($model, $resultModel, $resultRecords)
+    {
+        $retdatas = $this->lq_scoreDatas($resultModel);
+        $odds_code = $model->odds_code;
+
+        $home_last = intval(substr($retdatas['all']['home'], -1, 1));
+        $guest_last = intval(substr($retdatas['all']['guest'], -1, 1));
+
+
+        switch ($odds_code) {
+            case "last_home_zero_five":
+                $ret = $this->last_number_return($home_last, [0, 5]);
+                break;
+            case "last_home_one_six":
+                $ret = $this->last_number_return($home_last, [1, 6]);
+                break;
+            case "last_home_two_seven":
+                $ret = $this->last_number_return($home_last, [2, 7]);
+                break;
+            case "last_home_three_eight":
+                $ret = $this->last_number_return($home_last, [3, 8]);
+                break;
+            case "last_home_four_nine":
+                $ret = $this->last_number_return($home_last, [4, 9]);
+                break;
+            case "last_guest_zero_five":
+                $ret = $this->last_number_return($guest_last, [0, 5]);
+                break;
+            case "last_guest_one_six":
+                $ret = $this->last_number_return($guest_last, [1, 6]);
+                break;
+            case "last_guest_two_seven":
+                $ret = $this->last_number_return($guest_last, [2, 7]);
+                break;
+            case "last_guest_three_eight":
+                $ret = $this->last_number_return($guest_last, [3, 8]);
+                break;
+            case "last_guest_four_nine":
+                $ret = $this->last_number_return($guest_last, [4, 9]);
+                break;
+            default:
+                $ret = ['result' => 0, 'matchResult' => '错误'];
+                break;
+        }
+        return $ret;
+    }
+
+
+    private function last_number_return($num, $arr = [])
+    {
+        if (in_array($num, $arr)) {
+            $return = ['result' => 1, 'matchResult' => $num . 'last'];
+        } else {
+            $return = ['result' => -1, 'matchResult' => $num . 'last'];
+        }
+        return $return;
+    }
+
+}

+ 886 - 0
app/Lib/Settlement/Adapter/RulePlus.php

@@ -0,0 +1,886 @@
+<?php
+namespace App\Lib\Settlement\Adapter;
+
+
+trait RulePlus
+{
+
+    public $return_he = ['result' => '2', 'matchResult' => '无规则和'];
+    public $return_fail = ['result' => '-1', 'matchResult' => ''];
+    public $return_error = ['result' => '100', 'matchResult' => '无胜负判断规则'];
+
+
+    //足球让球   $scoreDiff比分差   $condition条件   $matchResultWord匹配文字(原样输出)
+    //$condition 可能  1  +1  -1  +1.5/2  -1.5/2 这样
+    public function zq_letball($scoreDiff, $condition, $matchResultWord)
+    {
+        $scoreDiff = intval($scoreDiff);
+        $returnDatas['matchResult'] = $matchResultWord;
+
+        $hasFH = in_array(substr($condition, 0, 1), ['+', '-']);
+        if ($hasFH) {
+            $condArr = explode("/", substr($condition, 1));
+            $condArr = array_map(function($i){
+                return  (strpos($i,'.')===false) ?  intval($i) : floatval($i);
+            },$condArr);
+            $FH = substr($condition, 0, 1);
+        } else {
+            $condArr = explode("/", $condition);
+            $condArr = array_map(function($i){
+                return  (strpos($i,'.')===false) ?  intval($i) : floatval($i);
+            },$condArr);
+            $FH = '+';
+        }
+
+        if (count($condArr) == 1) {
+            $smin = $scoreDiff + ($FH == '+' ? 1 : -1) * $condArr['0'];
+            if ($smin > 0) {
+                $returnDatas['result'] = 1;
+            } elseif ($smin == 0) {
+                $returnDatas['result'] = 2;
+            } else {
+                $returnDatas['result'] = -1;
+            }
+            return $returnDatas;
+        }
+
+        $smin = $scoreDiff + ($FH == "+" ? 1 : -1) * $condArr[0];
+        $smax = $scoreDiff + ($FH == "+" ? 1 : -1) * $condArr[1];
+        if ($smin > $smax) {
+            $this->doexchage($smin, $smax);
+        }
+
+        if ($smin < 0 && $smax < 0) {
+            $returnDatas['result'] = -1;
+            return $returnDatas;
+        }
+
+        if ($smin > 0 && $smax > 0) {
+            $returnDatas['result'] = 1;
+            return $returnDatas;
+        }
+
+        if ($smin + $smax > 0) {
+            $returnDatas['result'] = 3;
+            return $returnDatas;
+        }
+
+        $returnDatas['result'] = 4;
+        return $returnDatas;
+
+    }
+
+    //足球进球大小 $score进球数  type:2大 1小    $matchResultWord匹配文字原样输出
+    //$condition 0.5/1  2/2.5   2   这样的
+
+    /**
+     * 条件  大/小 进球数                   输赢
+     * 1/1.5 大    0  $min=-1.5,$max=-1     -1
+     * 1/1.5 大    1  $min=-0.5,$max=0       4
+     * 1/1.5 大    2  $min=0.5,$max=1        1
+     * 1/1.5 大    3  $min=1.5,$max=2        1
+     *
+     * 1.5/2 大    0  $min=-2,$max=-1.5     -1
+     * 1.5/2 大    1  $min=-1,$max=-0.5     -1
+     * 1.5/2 大    2  $min=0,$max=0.5      3
+     * 1.5/2 大    3  $min=1,$max=1.5      1
+     * --------------------------------------------------
+     * 1/1.5 小    0  $min=-1.5,$max=-1      1
+     * 1/1.5 小    1  $min=-0.5,$max=0      3
+     * 1/1.5 小    2  $min=0.5,$max=1     -1
+     * 1/1.5 小    3  $min=1.5,$max=2       -1
+     *
+     * 1.5/2 小    0  $min=-2,$max=-1.5      1
+     * 1.5/2 小    1  $min=-1,$max=-0.5      1
+     * 1.5/2 小    2  $min=0,$max=0.5      4
+     * 1.5/2 小    3  $min=1,$max=1.5         -1
+     */
+    public function zq_inball_bigsmall($score, $condition, $type, $matchResultWord)
+    {
+        $score = intval($score);
+        $returnDatas['matchResult'] = $matchResultWord;
+        $condArr = explode("/", $condition);
+        $condArr = array_map(function($i){
+            return  (strpos($i,'.')===false) ?  intval($i) : floatval($i);
+        },$condArr);
+
+        if (count($condArr) == 1) {
+            if ($score == $condArr['0']) {
+                $returnDatas['result'] = 2;
+            } else {
+                if ($type == 2) {
+                    if ($score > $condArr['0']) {
+                        $returnDatas['result'] = 1;
+                    } else {
+                        $returnDatas['result'] = -1;
+                    }
+                } else {
+                    if ($score < $condArr['0']) {
+                        $returnDatas['result'] = 1;
+                    } else {
+                        $returnDatas['result'] = -1;
+                    }
+                }
+            }
+            return $returnDatas;
+        }
+
+        $smin = $score - $condArr['0'];
+        $smax = $score - $condArr['1'];
+        if ($smin > $smax) {
+            $this->doexchage($smin, $smax);
+        }
+
+        if ($type == 2) {
+            if ($smin > 0 && $smax > 0) {
+                $returnDatas['result'] = 1;
+            } elseif ($smin < 0 && $smax < 0) {
+                $returnDatas['result'] = -1;
+            } else {
+                if ($smax > 0) {
+                    $returnDatas['result'] = 3;
+                } else {
+                    $returnDatas['result'] = 4;
+                }
+            }
+        } else {
+            if ($smin > 0 && $smax > 0) {
+                $returnDatas['result'] = -1;
+            } elseif ($smin < 0 && $smax < 0) {
+                $returnDatas['result'] = 1;
+            } else {
+                if ($smin < 0) {
+                    $returnDatas['result'] = 3;
+                } else {
+                    $returnDatas['result'] = 4;
+                }
+            }
+        }
+        return $returnDatas;
+    }
+
+
+    //独赢
+    public function zq_duying($score, $condition, $matchResultWord)
+    {
+        $fen = (strtolower($condition) != 'x') ? intval($condition) : 0;
+        $smin = $score - $fen;
+        $returnDatas['matchResult'] = $matchResultWord;
+
+        if ($smin > 0) {
+            $returnDatas['result'] = 1;
+        } elseif ($smin == 0) {
+            $returnDatas['result'] = 2;
+        } else {
+            $returnDatas['result'] = -1;
+        }
+        return $returnDatas;
+    }
+
+    //独赢  $halftype 1上半场  4全场      $homeguest=1主队 2客队   $homeguest 1主队赢 2客队赢 3平
+    public function zq_duyingv2($homeguest, $halfalltype, $resultModel, $matchResultWord)
+    {
+        $home_score = intval($resultModel->home_score);
+        $guest_score = intval($resultModel->guest_score);
+        $home_score_half = intval($resultModel->u_home_score);
+        $guest_score_half = intval($resultModel->u_guest_score);
+
+        $returnDatas['matchResult'] = $matchResultWord;
+        if ($halfalltype == 4) {
+            if ($homeguest == 1) {
+                if ($home_score > $guest_score) {
+                    $returnDatas['result'] = 1;
+                } else {
+                    $returnDatas['result'] = -1;
+                }
+            } elseif ($homeguest == 2) {
+                if ($guest_score > $home_score) {
+                    $returnDatas['result'] = 1;
+                } else {
+                    $returnDatas['result'] = -1;
+                }
+            } else {
+                if ($guest_score == $home_score) {
+                    $returnDatas['result'] = 1;
+                } else {
+                    $returnDatas['result'] = -1;
+                }
+            }
+        } else {
+            if ($homeguest == 1) {
+                if ($home_score_half > $guest_score_half) {
+                    $returnDatas['result'] = 1;
+                } else {
+                    $returnDatas['result'] = -1;
+                }
+            } elseif ($homeguest == 2) {
+                if ($guest_score_half > $home_score_half) {
+                    $returnDatas['result'] = 1;
+                } else {
+                    $returnDatas['result'] = -1;
+                }
+            } else {
+                if ($guest_score_half == $home_score_half) {
+                    $returnDatas['result'] = 1;
+                } else {
+                    $returnDatas['result'] = -1;
+                }
+            }
+        }
+        return $returnDatas;
+    }
+
+
+    //单双判断  $type 1单  2双
+    public function zq_doublesing($score, $condition, $matchResultWord)
+    {
+        $returnDatas['matchResult'] = $matchResultWord;
+        $condition = trim($condition);
+        $gret = (($score % 2) == 0) ? '双' : '单';
+
+        if ($gret == $condition) {
+            $returnDatas['result'] = 1;
+        } else {
+            $returnDatas['result'] = -1;
+        }
+        return $returnDatas;
+    }
+
+    //type ==1 返回第$sn节   ==2返回上下节,sn=1上半场,sn=2下半场    type==4全部按节数的数组
+    public function lq_getResultBySn($recoreModesArray, $type = 4, $sn = 1)
+    {
+        $return = [];
+        foreach ($recoreModesArray as $key => $val) {
+            $nowsn = intval($val->match_process);
+            $return[$nowsn] = $val;
+        }
+        if (!((count($return) == 4) && isset($return['1']) && isset($return['2']) && isset($return['3']) && isset($return['4']))) {
+            throw new  \Exception("篮球结果不为4的数组,或match_process有错");
+        }
+
+
+        if ($type == 4) {
+            return $return;
+        }
+
+        if ($type == 1) {
+            return $return[$sn];
+        }
+
+        if ($type == 2) {
+            if ($sn == 1) {
+                $ret = [
+                    $return[1],
+                    $return[2],
+                ];
+            } else {
+                $ret = [
+                    $return[3],
+                    $return[4],
+                ];
+            }
+        }
+        return $ret;
+    }
+
+    //篮球比分数据汇总,以方便后面使用
+    public function lq_scoreDatas($recoreModesArray)
+    {
+        $arr = $this->lq_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);
+            $tmp_home_rate = intval($val->home_rate);
+            $tmp_guest_rate = intval($val->guest_rate);
+
+            $return['all']['home'] += $tmp_home;
+            $return['all']['guest'] += $tmp_guest;
+            $return['all']['home_rate'] += $tmp_home_rate;
+            $return['all']['guest_rate'] += $tmp_guest_rate;
+
+            if ($key == 1 || $key == 2) {
+                $return['half']['home'] += $tmp_home;
+                $return['half']['guest'] += $tmp_guest;
+                $return['half']['home_rate'] += $tmp_home_rate;
+                $return['half']['guest_rate'] += $tmp_guest_rate;
+            } else {
+                $return['half2']['home'] += $tmp_home;
+                $return['half2']['guest'] += $tmp_guest;
+                $return['half2']['home_rate'] += $tmp_home_rate;
+                $return['half2']['guest_rate'] += $tmp_guest_rate;
+            }
+        }
+        return $return;
+    }
+
+    //双方球队进球 是--进球 否--没进球  sw_TS 
+    public function isgoal($resultModels, $model, $type, $allword){
+        $goalnum = intval($resultModels->home_score)+intval($resultModels->guest_score);
+        $goalhlefnum = intval($resultModels->u_home_score)+intval($resultModels->u_guest_score);
+
+        if($model->odds_code == $type){
+            if($goalnum != 0)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($goalnum == 0)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($goalhlefnum != 0)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($goalhlefnum == 0)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else{
+            return ['result' => 100,'matchResult' => "参数不存在"];
+        }
+        return ['result' => -1, 'matchResult' => $allword];
+    }
+
+    //独赢&进球大小  sw_MOU
+    public function isonlysize($resultModels, $model, $type, $allword){
+        $homeda = intval($resultModels->home_score)-intval($resultModels->guest_score);//主队大
+        $homexiao = intval($resultModels->guest_score)-intval($resultModels->home_score);//主队小
+        $guestda = intval($resultModels->guest_score)-intval($resultModels->home_score);//客队大
+        $guestxiao = intval($resultModels->home_score)-intval($resultModels->guest_score);//客队小
+        $allt = intval($resultModels->home_score)+intval($resultModels->guest_score);//共进球
+        $home = intval($resultModels->home_score);
+        $guest = intval($resultModels->guest_score);
+
+        if($model->odds_code == $type){
+            if($homeda > 1.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 1.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($guestda > 1.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allt > 1.5 && $home==$guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($home == $guest && $allt < 1.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 2.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 2.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($guestda > 2.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 2.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allt > 2.5 && $home==$guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allt < 2.5 && $home==$guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allt < 2.5 && $home==$guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 3.5 )
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 3.5 )
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($guestda > 3.5 )
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($guestxiao > 3.5 )
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allt > 3.5 && $home==$guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allt < 3.5 && $home==$guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 4.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 4.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($guestda > 4.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($guestxiao > 4.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allt > 4.5 && $home == $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allt < 4.5 && $home == $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($guestxiao > 1.5 )
+                return ['result' => 1, 'matchResult' => $allword];
+        }else{
+            return ['result' => 100,'matchResult' => "参数不存在"];
+        }
+        return ['result' => -1, 'matchResult' => $allword];
+    }
+
+    //判断 独赢&双方球队进球 是--进球 否--没进球  sw_MTS
+    public function ishvgoal($resultModels, $model, $type, $allword){
+        $home = intval($resultModels->home_score);
+        $guest = intval($resultModels->guest_score);
+        
+        if($model->odds_code == $type){
+            if($home != 0)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($home == 0)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($guest != 0)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($guest == 0)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($home == $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($home != $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else{
+            return ['result' => 100,'matchResult' => "参数不存在"];
+        }
+        return ['result' => -1, 'matchResult' => $allword];
+    }
+
+    //判断 进球大/小&双方球队进球  sw_OUT
+    public function goalsize($resultModels, $model, $type, $allword){
+        $homeda = intval($resultModels->home_score)-intval($resultModels->guest_score);//主队大
+        $homexiao = intval($resultModels->guest_score)-intval($resultModels->home_score);//主队小
+        $guestda = intval($resultModels->guest_score)-intval($resultModels->home_score);//客队大
+        $guestxiao = intval($resultModels->home_score)-intval($resultModels->guest_score);//客队小
+
+        if($model->odds_code == $type){
+            if($homeda > 1.5)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($home == 0)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($guest != 0)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($guest == 0)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($home == $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($home != $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else{
+            return ['result' => 100,'matchResult' => "参数不存在"];
+        }
+        return ['result' => -1, 'matchResult' => $allword];
+    }
+
+    //独赢 & 最先进球  ???   sw_MPG
+    public function firstball($resultModels, $model, $type, $allword){
+        $firstscore = $resultModels->first_score;//最先进球
+        $homename = $resultModels->home_team;//主队名
+        $guestname = $resultModels->guest_team;//客队名
+        $home = intval($resultModels->home_score);//主队得分
+        $guest = intval($resultModels->guest_score);//客队得分
+
+        if($model->odds_code == $type){
+            if($firstscore == $homename && $home > $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firstscore == $guestname && $home > $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firstscore == $homename && $home < $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firstscore == $guestname && $home < $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firstscore == $homename && $home == $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firstscore == $guestname && $home == $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else{
+            return ['result' => 100,'matchResult' => "参数不存在"];
+        }
+        return ['result' => -1, 'matchResult' => $allword];
+    }
+
+    //首个进球方式  sw_FG
+    public function onewaygoal($resultModels, $model, $type, $allword){
+        $firststye = json_decode($resultModels->first_score,true)['scoretype'];//最先进球
+
+        if($model->odds_code == $type){
+            if($firststye == "射门")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firststye == "头球")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firststye == "无进球")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firststye == "点球")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firststye == "任意球")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firststye == "乌龙球")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else{
+            return ['result' => 100,'matchResult' => "参数不存在"];
+        }
+        return ['result' => -1, 'matchResult' => $allword];
+    }
+
+    //双重机会&进球大/小  sw_DU 
+    public function twosize($resultModels, $model, $type, $allword){
+        $homescore = $resultModels->home_score;//主队名
+        $guestscore = $resultModels->guest_score;//客队名
+        $allscore = intval($resultModels->guest_score) + intval($resultModels->home_score);//客队得分
+
+        if($model->odds_code == $type){
+            if($allscore > 1.5 && $homescore > $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore < 1.5 && $homescore > $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore > 1.5 && $homescore < $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore > 1.5 && $homescore < $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore > 1.5 && $homescore > $guestscore || $homescore < $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore < 1.5 && $homescore > $guestscore || $homescore < $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore > 2.5 && $homescore > $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore < 2.5 && $homescore > $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore > 2.5 && $homescore < $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore < 2.5 && $homescore < $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore > 2.5 && $homescore > $guestscore || $homescore < $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore < 2.5 && $homescore > $guestscore || $homescore < $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore > 3.5 && $homescore > $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore < 3.5 && $homescore > $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore > 3.5 && $homescore < $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore < 3.5 && $homescore < $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore > 3.5 && $homescore > $guestscore || $homescore < $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore < 3.5 && $homescore > $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore > 4.5 && $homescore > $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore < 4.5 && $homescore > $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore > 4.5 && $homescore < $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore < 4.5 && $homescore < $guestscore || $homescore == $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore > 4.5 && $homescore > $guestscore || $homescore < $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($allscore < 4.5 && $homescore > $guestscore || $homescore < $guestscore)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else{
+            return ['result' => 100,'matchResult' => "参数不存在"];
+        }
+        return ['result' => -1, 'matchResult' => $allword];
+    }
+
+    //双重机会&双方球队进球  sw_DS 
+    public function allgoals($resultModels, $model, $type, $allword){
+        $home = intval($resultModels->home_score);//主队得分
+        $guest = intval($resultModels->guest_score);//客队得分
+
+        if($model->odds_code == $type){
+            if($home > $guest || $home == $guest){
+                if($home > 0 && $guest>0){
+                    return ['result' => 1, 'matchResult' => $allword];
+                }else{
+                    return ['result' => -1, 'matchResult' => $allword];
+                }
+            }else{
+                return ['result' => -1, 'matchResult' => $allword];
+            }
+        }else if($model->odds_code == $type){
+            if($home > $guest || $home == $guest){
+                if($home > 0 || $guest>0){
+                    return ['result' => 1, 'matchResult' => $allword];
+                }else{
+                    return ['result' => -1, 'matchResult' => $allword];
+                }
+            }else{
+                return ['result' => -1, 'matchResult' => $allword];
+            }
+        }else if($model->odds_code == $type){
+            if($home < $guest || $home == $guest){
+                if($home > 0 && $guest>0){
+                    return ['result' => 1, 'matchResult' => $allword];
+                }else{
+                    return ['result' => -1, 'matchResult' => $allword];
+                }
+            }else{
+                return ['result' => -1, 'matchResult' => $allword];
+            }
+        }else if($model->odds_code == $type){
+            if($home < $guest || $home == $guest){
+                if($home > 0 || $guest>0){
+                    return ['result' => 1, 'matchResult' => $allword];
+                }else{
+                    return ['result' => -1, 'matchResult' => $allword];
+                }
+            }else{
+                return ['result' => -1, 'matchResult' => $allword];
+            }
+        }else if($model->odds_code == $type){
+            if($home < $guest || $home > $guest){
+                if($home > 0 && $guest>0){
+                    return ['result' => 1, 'matchResult' => $allword];
+                }else{
+                    return ['result' => -1, 'matchResult' => $allword];
+                }
+            }else{
+                return ['result' => -1, 'matchResult' => $allword];
+            }
+        }else if($model->odds_code == $type){
+            if($home < $guest || $home > $guest){
+                if($home > 0 || $guest>0){
+                    return ['result' => 1, 'matchResult' => $allword];
+                }else{
+                    return ['result' => -1, 'matchResult' => $allword];
+                }
+            }else{
+                return ['result' => -1, 'matchResult' => $allword];
+            }
+        }else{
+            return ['result' => 100,'matchResult' => "参数不存在"];
+        }
+    }
+
+    //双重机会&最先进球   sw_DG 
+    public function oneball($resultModels, $model, $type, $allword){
+        $firstscore = $resultModels->first_score;//最先进球
+        $home = intval($resultModels->home_score);//主队得分
+        $guest = intval($resultModels->guest_score);//客队得分
+        $homename = $resultModels->home_team;//主队
+        $guestname = $resultModels->guest_team;//客队
+
+        if($model->odds_code == $type){
+            if($firstscore == $homename && $home == $guest || $home > $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firstscore == $guestname && $home == $guest || $home > $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firstscore == $guestname && $home == $guest || $home < $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firstscore == $homename && $home < $guest || $home > $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firstscore == $guestname && $home < $guest || $home > $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($firstscore == $homename && $home < $guest || $home == $guest)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else{
+            return ['result' => 100,'matchResult' => "参数不存在"];
+        }
+        return ['result' => -1, 'matchResult' => $allword];
+    }
+
+    //进球大/小&进球单/双  sw_OUE
+    public function sizesd($resultModels, $model, $type, $allword){
+        $homeda = intval($resultModels->home_score) - intval($resultModels->guest_score);
+        $homexiao = intval($resultModels->guest_score) - intval($resultModels->home_score);
+        $allnum = intval($resultModels->home_score) + intval($resultModels->guest_score);
+
+        if ($allnum % 2 == 0) {
+            $text = '双';
+        } else {
+            $text = '单';
+        }
+
+        if($model->odds_code == $type){
+            if($homeda > 1.5 && $text == "单")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 1.5 && $text == "单")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 1.5 && $text == "双")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 1.5 && $text == "双")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 2.5 && $text == "单")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 2.5 && $text == "单")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 2.5 && $text == "双")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 2.5 && $text == "双")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 3.5 && $text == "单")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 3.5 && $text == "单")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 3.5 && $text == "双")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 3.5 && $text == "双")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 4.5 && $text == "单")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 4.5 && $text == "单")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 4.5 && $text == "双")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 4.5 && $text == "双")
+                return ['result' => 1, 'matchResult' => $allword];
+        }else{
+            return ['result' => 100,'matchResult' => "参数不存在"];
+        }
+        return ['result' => -1, 'matchResult' => $allword];
+    }
+    
+    //进球大/小&最先进球 sw_OUP
+    public function sizeone($resultModels, $model, $type, $allword){
+        $firstscore = $resultModels->first_score;
+        $homename = $resultModels->home_team;
+        $guestname = $resultModels->guest_team;
+        $homeda = intval($resultModels->home_score) - intval($resultModels->guest_score);
+        $homexiao = intval($resultModels->guest_score) - intval($resultModels->home_score);
+
+        if($model->odds_code == $type){
+            if($homeda > 1.5 && $firstscore == $homename)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 1.5 && $firstscore == $guestname)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 2.5 && $firstscore == $homename)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 2.5 && $firstscore == $guestname)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 3.5 && $firstscore == $homename)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 3.5 && $firstscore == $guestname)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 3.5 && $firstscore == $homename)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 2.5 && $firstscore == $guestname)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 2.5 && $firstscore == $homename)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 1.5 && $firstscore == $guestname)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 1.5 && $firstscore == $homename)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 4.5 && $firstscore == $homename)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homeda > 4.5 && $firstscore == $guestname)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 4.5 && $firstscore == $homename)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 4.5 && $firstscore == $guestname)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else if($model->odds_code == $type){
+            if($homexiao > 3.5 && $firstscore == $guestname)
+                return ['result' => 1, 'matchResult' => $allword];
+        }else{
+            return ['result' => 100,'matchResult' => "参数不存在"];
+        }
+        return ['result' => -1, 'matchResult' => $allword];
+    }
+
+    //落后反超获胜  sw_BH
+    public function backwardwins(){
+
+    }
+
+    private function doexchage(&$num1, &$num2)
+    {
+        $tmp = $num2;
+        $num2 = $num1;
+        $num1 = $tmp;
+    }
+
+}
+
+
+

+ 321 - 0
app/Lib/Settlement/Adapter/WqRule.php

@@ -0,0 +1,321 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/4/25
+ * Time: 14:10
+ */
+
+namespace App\Lib\Settlement\Adapter;
+
+
+class WqRule
+{
+    use RulePlus;
+
+    //冠军
+    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);
+            }
+            if ($odds_code == 'kemp_home') {
+                return $this->wq_gj_all($all_winner, $home_team);
+            } else {
+                return $this->wq_gj_all($all_winner, $guest_team);
+            }
+        }
+
+        $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;
+    }
+
+    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;
+            }
+        }
+        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;
+        }
+        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 $return;
+    }
+
+    //总局数:大/小
+    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;
+
+    }
+
+    //总局数:单/双
+    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;
+
+    }
+
+    //波胆
+    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 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;
+    }
+
+
+}

+ 2367 - 0
app/Lib/Settlement/Adapter/ZqRule.php

@@ -0,0 +1,2367 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/4/25
+ * Time: 14:10
+ */
+
+namespace App\Lib\Settlement\Adapter;
+
+use Illuminate\Support\Facades\DB;
+
+
+class ZqRule
+{
+    use RulePlus;
+
+    /**
+     * 全场|主队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function concede_home($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $home = intval($resultModel->home_score);
+        $guest = intval($resultModel->guest_score);
+        $word = $home . '-' . $guest . '(全场)';
+        $ret = $this->zq_letball($home - $guest, $model->condition, $word);
+        return $ret;
+    }
+
+    /**
+     * 全场|客队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function concede_guest($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $home = intval($resultModel->home_score);
+        $guest = intval($resultModel->guest_score);
+        $word = $home . '-' . $guest . '(全场)';
+        $ret = $this->zq_letball($guest - $home, $model->condition, $word);
+        return $ret;
+    }
+
+
+    /**
+     * 上半场|主队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function half_concede_home($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $home = intval($resultModel->u_home_score);
+        $guest = intval($resultModel->u_guest_score);
+        $word = $home . '-' . $guest . '(上半场)';
+        $ret = $this->zq_letball($home - $guest, $model->condition, $word);
+        return $ret;
+    }
+
+    /**
+     * 上半场|客队|让球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function half_concede_guest($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $home = intval($resultModel->u_home_score);
+        $guest = intval($resultModel->u_guest_score);
+        $word = $home . '-' . $guest . '(上半场)';
+        $ret = $this->zq_letball($guest - $home, $model->condition, $word);
+        return $ret;
+
+    }
+
+    /**
+     * 进球|全场|大
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultMgoal_size_smallodel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function goal_size_home($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $home = intval($resultModel->u_home_score);
+        $guest = intval($resultModel->u_guest_score);
+        $total = $home + $guest;
+        $word = $home . '-' . $guest . '(全场)';
+        $ret = $this->zq_inball_bigsmall($total, $model->condition, 2, $word);
+        return $ret;
+    }
+
+    /**
+     * 进球|全场|小
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function goal_size_guest($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $home = intval($resultModel->u_home_score);
+        $guest = intval($resultModel->u_guest_score);
+        $total = $home + $guest;
+        $word = $home . '-' . $guest . '(全场)';
+        $ret = $this->zq_inball_bigsmall($total, $model->condition, 1, $word);
+        return $ret;
+    }
+
+
+    //全场|进球|大
+    public function goal_size_big($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $allscore = intval($resultModel->home_score) + intval($resultModel->guest_score);
+        $word = $resultModel->home_score . '-' . $resultModel->guest_score . "(全场)";
+        $returnDatas = $this->zq_inball_bigsmall($allscore, $model->condition, 2, $word);
+        return $returnDatas;
+
+    }
+
+    //全场|进球|小
+    public function goal_size_small($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $allscore = intval($resultModel->home_score) + intval($resultModel->guest_score);
+        $word = $resultModel->home_score . '-' . $resultModel->guest_score . "(全场)";
+        $returnDatas = $this->zq_inball_bigsmall($allscore, $model->condition, 1, $word);
+        return $returnDatas;
+    }
+
+    /**
+     * 进球|上半场|大
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function half_goal_size_big($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $score = intval($resultModel->u_home_score) + intval($resultModel->u_guest_score);
+        return $this->zq_inball_bigsmall($score, $model->condition, 2, $resultModel->u_home_score . '-' . $resultModel->u_guest_score . '(上半场)');
+    }
+
+    /**
+     * 进球|上半场|小
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输  2:平  3:赢半平半  4:输半平半
+     */
+    public function half_goal_size_small($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $score = intval($resultModel->u_home_score) + intval($resultModel->u_guest_score);
+        return $this->zq_inball_bigsmall($score, $model->condition, 1, $resultModel->u_home_score . '-' . $resultModel->u_guest_score . '(上半场)');
+    }
+
+
+    /**
+     * 全场|主队|独赢
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输
+     */
+    public function capot_home($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $home = intval($resultModel->home_score);
+        $guest = intval($resultModel->guest_score);
+        $word = $home . '-' . $guest . '(全场)';
+        $ret = $this->zq_duyingv2(1, 4, $resultModel, $word);
+        return $ret;
+    }
+
+    /**
+     * 全场|客队|独赢
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输
+     */
+    public function capot_guest($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $home = intval($resultModel->home_score);
+        $guest = intval($resultModel->guest_score);
+        $word = $home . '-' . $guest . '(全场)';
+        $ret = $this->zq_duyingv2(2, 4, $resultModel, $word);
+        return $ret;
+    }
+
+    /**
+     * 全场|主客平|独赢
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输
+     */
+    public function capot_dogfall($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $home = intval($resultModel->home_score);
+        $guest = intval($resultModel->guest_score);
+        $word = $home . '-' . $guest . '(全场)';
+        if ($home == $guest) {
+            $return['result'] = 1;
+        } else {
+            $return['result'] = -1;
+        }
+        $return['matchResult'] = $word;
+        return $return;
+    }
+
+    /**
+     * 上半场|主队|独赢
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输
+     */
+    public function half_capot_home($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $word = $resultModel->u_home_score . '-' . $resultModel->u_guest_score . '(上半场)';
+        return $this->zq_duyingv2(1, 1, $resultModel, $word);
+
+    }
+
+    /**
+     * 上半场|客队|独赢
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输
+     */
+    public function half_capot_guest($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $word = $resultModel->u_home_score . '-' . $resultModel->u_guest_score . '(上半场)';
+        return $this->zq_duyingv2(2, 1, $resultModel, $word);
+
+    }
+
+    /**
+     * 上半场|主客平|独赢
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModel 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * @return string 1:赢  -1:输
+     */
+    public function half_capot_dogfall($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $word = $resultModel->u_home_score . '-' . $resultModel->u_guest_score . '(上半场)';
+        if ($resultModel->u_home_score == $resultModel->u_guest_score) {
+            $result = 1;
+        } else {
+            $result = -1;
+        }
+        return ['result' => $result, 'matchResult' => $word];
+    }
+
+
+
+    //  first_last_ball最先/最后进球 开始-----------------------
+    //主队|最先进球
+    public function first_ball_home($model, $resultModel, $resultRecords)
+    {
+        $resultModel = $resultModel['0'];
+        $word = ($resultModel->first_score != '') ? (($resultModel->first_score == $model->home_team) ? '1:0' : '0:1') : '0:0';
+        $word .= '(主客)';
+
+        if (trim($resultModel->first_score) == trim($resultModel->home_team)) {
+            return ['result' => 1, 'matchResult' => $word];
+        } else {
+            return ['result' => -1, 'matchResult' => $word];
+        }
+
+    }
+
+    //客队|最先进球
+    public function first_ball_guest($model, $resultModel, $resultRecords)
+    {
+        $resultModel = $resultModel['0'];
+        $word = ($resultModel->first_score != '') ? (($resultModel->first_score == $model->guest_team) ? '0:1' : '1:0') : '0:0';
+        $word .= '(主客)';
+
+        if (trim($resultModel->first_score) == trim($resultModel->guest_team)) {
+            return ['result' => 1, 'matchResult' => $word];
+        } else {
+            return ['result' => -1, 'matchResult' => $word];
+        }
+
+    }
+
+    //主队|最后进球
+    public function last_ball_home($model, $resultModel, $resultRecords)
+    {
+        $resultModel = $resultModel['0'];
+        $word = ($resultModel->last_score != '') ? (($resultModel->last_score == $model->home_team) ? '1:0' : '0:1') : '0:0';
+        $word .= '(主客)';
+
+        if (trim($resultModel->last_score) == trim($resultModel->home_team)) {
+            return ['result' => 1, 'matchResult' => $word];
+        } else {
+            return ['result' => -1, 'matchResult' => $word];
+        }
+
+
+    }
+
+    //客队|最后进球
+    public function last_ball_guest($model, $resultModel, $resultRecords)
+    {
+        $resultModel = $resultModel['0'];
+        $word = ($resultModel->last_score != '') ? (($resultModel->last_score == $model->guest_team) ? '0:1' : '1:0') : '0:0';
+        $word .= '(主客)';
+
+        if (trim($resultModel->last_score) == trim($resultModel->guest_team)) {
+            return ['result' => 1, 'matchResult' => $word];
+        } else {
+            return ['result' => -1, 'matchResult' => $word];
+        }
+
+    }
+
+    //没有进球
+    public function not_ball($model, $resultModel, $resultRecords)
+    {
+        $resultModel = $resultModel['0'];
+        $home = intval($resultModel->home_score);
+        $guest = intval($resultModel->guest_score);
+        $all_score = $home + $guest;
+        $word = ($home > 0 ? 1 : 0) . '-' . ($guest > 0 ? 1 : 0) . '(主客)';
+
+        if ($all_score <= 0) {
+            return ['result' => 1, 'matchResult' => $word];
+        } else {
+            return ['result' => -1, 'matchResult' => $word];
+        }
+
+    }
+    //////////  first_last_ball最先/最后进球 结束-----------------------
+
+    /**
+     * 足球波胆 规则
+     * @param $bet_match  投注赛事数据
+     * @param $result_match  最终结果
+     * @param $result_match_r  结果记录
+     * User: Tank
+     * Date: 2019/5/13
+     * Time: 10:19
+     */
+    public function bodan($bet_match, $result_match, $result_match_r)
+    {
+//        $bet_match = DB::table('money_buy_match')->where(['match_id'=> 3219925,'p_code'=>'bodan'])->first();
+//        $result_match = DB::table('st_zq_result')->where('match_id', 3224833)->limit(10)->get();
+//        select * from  st_zq_result where id=1317823 order by id desc limit 10 ;
+//        $result_match_r = DB::table('st_zq_result_record')->where('match_id', 3150765)->get()->toArray();
+        //获取父/子级赔率代码
+
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+
+        //获取主客队投注比分
+        $bet_score = explode('-', $bet_match->condition);
+        $bet_home_score = (int)$bet_score[0];
+        $bet_guest_score = isset($bet_score[1]) ? intval($bet_score[1]) : 0;
+        if ($p_code != 'bodan') return false;
+
+        //获取赛事最终结果数据
+        $result_match = $this->getHalfData($result_match);
+        if (strstr($odds_code, "half")) {//上半场
+
+            //获取主客队上半场得分
+            $home_score = $result_match->u_home_score;
+            $guest_score = $result_match->u_guest_score;
+            //返回结果
+            $data = [
+                'result' => 1,
+                'matchResult' => "$home_score-$guest_score(上半场)"
+            ];
+            if (strstr($bet_match->condition, "其他")) {
+                if (($home_score > 3) || ($guest_score > 3)) {
+                    return $data;
+                }
+            }
+            //判断结果
+            if ($bet_home_score == $home_score and $bet_guest_score == $guest_score) {
+                return $data;
+            }
+            $data['result'] = -1;
+            return $data;
+        } else {//全场
+            //获取主客队全场得分
+            $home_score = $result_match->home_score;
+            $guest_score = $result_match->guest_score;
+
+            //返回结果
+            $data = [
+                'result' => 1,
+                'matchResult' => "$home_score-$guest_score(全场)"
+            ];
+            if (strstr($bet_match->condition, "其他")) {
+                if (($home_score > 4) || ($guest_score > 4)) {
+                    return $data;
+                }
+            }
+            //判断结果
+            if ($bet_home_score == $home_score and $bet_guest_score == $guest_score) {
+                return $data;
+            }
+            $data['result'] = -1;
+            return $data;
+        }
+    }
+
+    //结果单/双 home_score 主队进球数 guest_score 客队进球数 home_rate 主队让球 guest_rate 客队让球 u_home_score 上半场主队进球 u_guest_score 上半场-客队进球数  two_sides_single 全场单 two_sides_double 全场双 half_two_sides_single 上半场单 half_two_sides_double 上半场双
+    public function two_sides($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $resulttod = intval($resultModel->home_score) + intval($resultModel->guest_score);//全场
+
+        $score_home = intval($resultModel->home_score);
+        $guest_home = intval($resultModel->guest_score);
+        $word_all = $score_home . '-' . $guest_home . '(全场)';
+        $score_home_half = intval($resultModel->u_home_score);
+        $guest_home_half = intval($resultModel->u_guest_score);
+        $word_all_half = $score_home_half . '-' . $guest_home_half . '(半场)';
+
+
+        if ($resulttod % 2 == 0) {
+            $text = '双';
+        } else {
+            $text = '单';
+        }
+
+        if ($model->odds_code == "two_sides_single" || $model->odds_code == 'two_sides_double') {
+            if ($text == $model->condition) {
+                $dsresult = 1;
+            } else {
+                $dsresult = -1;
+            }
+            return ['result' => $dsresult, 'matchResult' => $word_all];
+        } elseif ($model->odds_code == 'half_two_sides_single' || $model->odds_code == 'half_two_sides_double') {
+            $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' => $word_all_half];
+        } else {
+            $data = [
+                'result' => 100,
+                'matchResult' => "参数不存在",
+            ];
+            return $data;
+        }
+
+    }
+
+    //结果总数 home_score 主队进球数 guest_score 客队进球数 home_rate 主队让球 guest_rate 客队让球 u_home_score 上半场-主队进球数 u_guest_score 上半场-客队进球数
+    public function total_goal($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        //全场总进球数
+        $resulttod = intval($resultModel->home_score) + intval($resultModel->guest_score);
+        $score_home = intval($resultModel->home_score);
+        $guest_home = intval($resultModel->guest_score);
+        $word_all = $score_home . '-' . $guest_home . '(全场)';
+        $score_home_half = intval($resultModel->u_home_score);
+        $guest_home_half = intval($resultModel->u_guest_score);
+        $word_all_half = $score_home_half . '-' . $guest_home_half . '(半场)';
+
+        //上半场总进球数
+        $firsthalftod = intval($resultModel->u_home_score) + intval($resultModel->u_guest_score);
+        $results = 0;
+        $resultb = 0;
+        if ($model->odds_code == "total_goal_four") {
+            if (4 <= $resulttod and $resulttod <= 6) {
+                $results = 1;
+            } else {
+                $results = -1;
+            }
+        }
+        if ($model->odds_code == "total_goal_zero") {
+            if (0 <= $resulttod and $resulttod <= 1) {
+                $results = 1;
+            } else {
+                $results = -1;
+            }
+        }
+        if ($model->odds_code == "total_goal_two") {
+            if (2 <= $resulttod and $resulttod <= 3) {
+                $results = 1;
+            } else {
+                $results = -1;
+            }
+        }
+        if ($model->odds_code == "total_goal_seven") {
+            if (7 <= $resulttod) {
+                $results = 1;
+            } else {
+                $results = -1;
+            }
+        }
+        if ($model->odds_code == "half_total_goal_zero") {
+            if ($firsthalftod == 0) {
+                $resultb = 1;
+            } else {
+                $resultb = -1;
+            }
+        }
+        if ($model->odds_code == "half_total_goal_one") {
+            if ($firsthalftod == 1) {
+                $resultb = 1;
+            } else {
+                $resultb = -1;
+            }
+        }
+        if ($model->odds_code == "half_total_goal_two") {
+            if ($firsthalftod == 2) {
+                $resultb = 1;
+            } else {
+                $resultb = -1;
+            }
+        }
+        if ($model->odds_code == "half_total_goal_three") {
+            if ($firsthalftod == 3) {
+                $resultb = 1;
+            } else {
+                $resultb = -1;
+            }
+        }
+
+        if ($results == 1) {
+            $data = [
+                'result' => 1,
+                'matchResult' => $word_all,
+            ];
+        }
+        if ($results == -1) {
+            $data = [
+                'result' => -1,
+                'matchResult' => $word_all,
+            ];
+        }
+        if ($resultb == 1) {
+            $data = [
+                'result' => 1,
+                'matchResult' => $word_all_half,
+            ];
+        }
+        if ($resultb == -1) {
+            $data = [
+                'result' => -1,
+                'matchResult' => $word_all_half,
+            ];
+        }
+        return $data;
+    }
+
+    //球队进球数:大/小
+    //condition   0.5    或   0.5/1  这种
+    public function tema_ball($model, $resultModels, $result_match_r = [])
+    {
+        $resultModel = $resultModels['0'];
+
+        $odds_code = trim($model->odds_code);
+        $score_home = intval($resultModel->home_score);
+        $score_guest = intval($resultModel->guest_score);
+        $score_home_uhalf = intval($resultModel->u_home_score);
+        $score_guest_uhalf = intval($resultModel->u_guest_score);
+
+        switch ($odds_code) {
+            case 'home_tema_ball_big':
+                $returnDatas['matchResult'] = $score_home . '-' . $score_guest . '(全场)';
+                $returnDatas = $this->zq_inball_bigsmall($score_home, $model->condition, 2, $returnDatas['matchResult']);
+                break;
+            case 'home_tema_ball_small':
+                $returnDatas['matchResult'] = $score_home . '-' . $score_guest . '(全场)';
+                $returnDatas = $this->zq_inball_bigsmall($score_home, $model->condition, 1, $returnDatas['matchResult']);
+                break;
+            case 'guest_tema_ball_big':
+                $returnDatas['matchResult'] = $score_home . '-' . $score_guest . '(全场)';
+                $returnDatas = $this->zq_inball_bigsmall($score_guest, $model->condition, 2, $returnDatas['matchResult']);
+                break;
+            case 'guest_tema_ball_small':
+                $returnDatas['matchResult'] = $score_home . '-' . $score_guest . '(全场)';
+                $returnDatas = $this->zq_inball_bigsmall($score_guest, $model->condition, 1, $returnDatas['matchResult']);
+                break;
+            case 'half_home_tema_ball_big':
+                $returnDatas['matchResult'] = $score_home_uhalf . '-' . $score_guest_uhalf . '(上半场)';
+                $returnDatas = $this->zq_inball_bigsmall($score_home_uhalf, $model->condition, 2, $returnDatas['matchResult']);
+                break;
+            case 'half_home_tema_ball_small':
+                $returnDatas['matchResult'] = $score_home_uhalf . '-' . $score_guest_uhalf . '(上半场)';
+                $returnDatas = $this->zq_inball_bigsmall($score_home_uhalf, $model->condition, 1, $returnDatas['matchResult']);
+                break;
+            case 'half_guest_tema_ball_big':
+                $returnDatas['matchResult'] = $score_home_uhalf . '-' . $score_guest_uhalf . '(上半场)';
+                $returnDatas = $this->zq_inball_bigsmall($score_guest_uhalf, $model->condition, 2, $returnDatas['matchResult']);
+                break;
+            case 'half_guest_tema_ball_small':
+                $returnDatas['matchResult'] = $score_home_uhalf . '-' . $score_guest_uhalf . '(上半场)';
+                $returnDatas = $this->zq_inball_bigsmall($score_guest_uhalf, $model->condition, 1, $returnDatas['matchResult']);
+                break;
+        }
+        return $returnDatas;
+    }
+
+
+    /**
+     * 半场/全场 投注规则
+     * User: Tank
+     * Date: 2019/5/13
+     * Time: 10:19
+     */
+    public function half_full($bet_match, $result_match, $result_match_r)
+    {
+//        $bet_match = DB::table('money_buy_match')->where('match_id', 3210851)->first();
+//        $result_match = DB::table('st_zq_result')->where('match_id', 3210851)->first();
+//        $result_match_r = DB::table('st_zq_result_record')->where('match_id', 3210851)->get()->toArray();
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        //获取父/子级赔率代码
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+
+        //获取最终赛事数据
+        $result_match = $this->getHalfData($result_match);
+        //获取主客队上半场得分
+        $half_home_score = $result_match->u_home_score;
+        $half_guest_score = $result_match->u_guest_score;
+
+        //获取主客队全场得分
+        $full_home_score = $result_match->home_score;
+        $full_guest_score = $result_match->guest_score;
+        //半场/全场盘口
+        if ($p_code != 'half_full') return false;
+
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$half_home_score-$half_guest_score(上半场);$full_home_score-$full_guest_score(全场)"
+        ];
+        switch ($odds_code) {
+            case 'half_full_home_home':// 主-主
+                if ($half_home_score > $half_guest_score and $full_home_score > $full_guest_score) return $data;
+                break;
+            case 'half_full_home_dogfall':// 主-和
+                if ($half_home_score > $half_guest_score and $full_home_score == $full_guest_score) return $data;
+                break;
+            case 'half_full_home_guest':// 主-客
+                if ($half_home_score > $half_guest_score and $full_home_score < $full_guest_score) return $data;
+                break;
+            case 'half_full_dogfall_home':// 和-主
+                if ($half_home_score == $half_guest_score and $full_home_score > $full_guest_score) return $data;
+                break;
+            case 'half_full_dogfall_dogfall':// 和-和
+                if ($half_home_score == $half_guest_score and $full_home_score == $full_guest_score) return $data;
+                break;
+            case 'half_full_dogfall_guest':// 和-客
+                if ($half_home_score == $half_guest_score and $full_home_score < $full_guest_score) return $data;
+                break;
+            case 'half_full_guest_home':// 客-主
+                if ($half_home_score < $half_guest_score and $full_home_score > $full_guest_score) return $data;
+                break;
+            case 'half_full_guest_dogfall':// 客-和
+                if ($half_home_score < $half_guest_score and $full_home_score == $full_guest_score) return $data;
+                break;
+            case 'half_full_guest_guest':// 客-客
+                if ($half_home_score < $half_guest_score and $full_home_score < $full_guest_score) return $data;
+                break;
+            default:
+                return false;
+        }
+
+        $data['result'] = -1;
+        return $data;
+    }
+
+    /**
+     * @param $result_match_r 赛事结果记录
+     * @return mixed 返回最新一条上半场结果数据
+     */
+    public function getHalfData($result_match_r = [])
+    {
+        return $result_match_r['0'];
+
+        if (empty($result_match_r)) return false;
+        if (is_array($result_match_r)) {
+            foreach ($result_match_r as $k => $v) {
+                return $v;
+            }
+        }
+    }
+
+    /**bo
+     * 冠军盘口投注
+     * $bet_match 投注赛事数据
+     * $result_match 联赛结果 数据 根据玩法代码查询一条
+     * $result_match_r 无用参数
+     */
+    public function gj($bet_match, $result_match, $result_match_r)
+    {
+
+//        $bet_match = DB::table('money_buy_match')->where('match_id', 127317)->first();
+//        $bet_match->odds_code = '巴西小组赛积分成绩';
+
+//        $result_match = DB::table('st_zq_league_result')->where(['lg_id'=>27317,'game_name'=>$bet_match->odds_code])->first();
+
+        //获取 赛事最终数据
+        $result_match = $this->getHalfData($result_match);
+        if (empty($bet_match) || empty($result_match)) return false;
+        if ($bet_match->p_code != 'gj') return false;//冠军玩法
+
+        if ($bet_match->odds_code == $result_match->game_name) {
+            $condition = $bet_match->condition;
+
+            //进球数判断
+            if (strpos($bet_match->odds_code, '进球数') !== false) {
+                //返回结果
+                $data = [
+                    'result' => 1,
+                    'matchResult' => "$result_match->result(球队进球数)"
+                ];
+                //获取数值
+                $bet = $this->findNum($condition);
+                //以上/以下判断
+                if (strpos($condition, '上') !== false) {
+                    if ($bet < $result_match->result) {
+                        return $data;
+                    }
+                    $data['result'] = -1;
+                    return $data;
+                }
+                if (strpos($condition, '下') !== false) {
+                    if ($bet > $result_match->result) {
+                        return $data;
+                    }
+                    $data['result'] = -1;
+                    return $data;
+                }
+                //大/小判断
+                if (strpos($condition, '大') !== false) {
+                    if ($bet < $result_match->result) {
+                        return $data;
+                    }
+                    $data['result'] = -1;
+                    return $data;
+                }
+                if (strpos($condition, '小') !== false) {
+                    if ($bet > $result_match->result) {
+                        return $data;
+                    }
+                    $data['result'] = -1;
+                    return $data;
+                }
+            }
+            //积分成绩判断
+            if (strpos($bet_match->odds_code, '积分') !== false) {
+                //返回结果
+                $data = [
+                    'result' => 1,
+                    'matchResult' => "$result_match->result(球队积分)"
+                ];
+                $condition = $bet_match->condition;
+                //获取数值
+                $bet = $this->findNum($condition);
+                if ($bet == $result_match->result) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            }
+
+            //如果条件中没有数字,则获取球队/球员结果
+            if ((preg_match('/\d+/', $condition)) == 0) {
+                //返回结果
+                $data = [
+                    'result' => 1,
+                    'matchResult' => "$result_match->result(晋级球队)"
+                ];
+                $result = $this->teamJudge($condition, $result_match->result);
+
+                if ($result) {
+                    return $data;
+                }
+                $data['result'] = -1;
+                return $data;
+            };
+
+            return false;
+        }
+        return false;
+    }
+
+    /**
+     * 冠军盘口 球队/球员结果判断
+     */
+    public function teamJudge($condition, $result)
+    {
+        //返回结果数组中是否包含该球队
+        $result = in_array($condition, json_decode($result, true));
+        return $result;
+    }
+
+    /**
+     * @param string $str
+     * @return string
+     * 处理字符串中的数字
+     */
+    public function findNum($str = '')
+    {
+        $str = trim($str);
+        if (empty($str)) {
+            return '';
+        }
+        $result = '';
+        for ($i = 0; $i < strlen($str); $i++) {
+            if (is_numeric($str[$i]) || $str[$i] == '.') {
+                $result .= $str[$i];
+            }
+        }
+        //如果有小数点,返回浮点数
+        if (strpos($result, '.')) return floatval($result);
+        //返回整数
+        return (int)$result;
+    }
+
+
+    /**
+     * 角球相关--------->开始
+     */
+    public function corner_ball($model, $resultModels, $result_match_r)
+    {
+        $odds_code = $model->odds_code;
+        $isHalf = strpos(strtolower($odds_code), 'half');
+        if ($isHalf) {
+            return $this->corner_ball_half($model, $resultModels, $result_match_r);
+        } else {
+            return $this->corner_ball_all($model, $resultModels, $result_match_r);
+        }
+    }
+
+    public function corner_ball_all($model, $resultModels, $result_match_r)
+    {
+
+        $resultModel = $resultModels['0'];
+        if ($resultModel->corner_ball == '') {
+            $game_ret = json_decode(json_encode(['home' => 0, 'guest' => 0, 'home_half' => 0, 'guest_half' => 0]));
+        } else {
+            $game_ret = json_decode($resultModel->corner_ball);
+        }
+        $word = $game_ret->home . '-' . $game_ret->guest . "(全场)";
+        $returnDatas = ['result' => -1, 'matchResult' => $word];
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "corner_concede_home":
+                $returnDatas = $this->zq_letball($game_ret->home - $game_ret->guest, $model->condition, $word);
+                break;
+            case "corner_concede_guest":
+                $returnDatas = $this->zq_letball($game_ret->guest - $game_ret->home, $model->condition, $word);
+                break;
+            case "corner_goal_size_home":
+                $returnDatas = $this->zq_inball_bigsmall($game_ret->home - $game_ret->guest, $model->condition, 2, $word);
+                break;
+            case "corner_goal_size_guest":
+                $returnDatas = $this->zq_inball_bigsmall($game_ret->guest - $game_ret->home, $model->condition, 1, $word);
+                break;
+            case "corner_capot_home":
+                $returnDatas = $this->zq_duyingv2(1, 4, $resultModel, $word);
+                break;
+            case "corner_capot_guest":
+                $returnDatas = $this->zq_duyingv2(2, 4, $resultModel, $word);
+                break;
+            case "corner_capot_dogfall":
+                $returnDatas['result'] = ($game_ret->home == $game_ret->guest) ? 1 : -1;
+                break;
+            case "corner_two_sides_single":
+                $returnDatas = $this->zq_doublesing($game_ret->home + $game_ret->guest, $model->condition, $word);
+                break;
+            case "corner_two_sides_double":
+                $returnDatas = $this->zq_doublesing($game_ret->home + $game_ret->guest, $model->condition, $word);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+        return $returnDatas;
+    }
+
+    public function corner_ball_half($model, $resultModels, $result_match_r)
+    {
+
+        $resultModel = $resultModels['0'];
+        if ($resultModel->corner_ball == '') {
+            $game_ret = json_decode(json_encode(['home' => 0, 'guest' => 0, 'home_half' => 0, 'guest_half' => 0]));
+        } else {
+            $game_ret = json_decode($resultModel->corner_ball);
+        }
+        $word = $game_ret->home_half . '-' . $game_ret->guest_half . "(上半场)";
+        $returnDatas = ['result' => -1, 'matchResult' => $word];
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "corner_half_concede_home":
+                $returnDatas = $this->zq_letball($game_ret->home_half - $game_ret->guest_half, $model->condition, $word);
+                break;
+            case "corner_half_concede_guest":
+                $returnDatas = $this->zq_letball($game_ret->guest_half - $game_ret->home_half, $model->condition, $word);
+                break;
+            case "corner_half_goal_size_home":
+                $returnDatas = $this->zq_inball_bigsmall($game_ret->home_half - $game_ret->guest_half, $model->condition, 2, $word);
+                break;
+            case "corner_half_goal_size_guest":
+                $returnDatas = $this->zq_inball_bigsmall($game_ret->guest_half - $game_ret->home_half, $model->condition, 1, $word);
+                break;
+            case "corner_half_capot_home":
+                $returnDatas = $this->zq_duyingv2(1, 1, $resultModel, $word);
+                break;
+            case "corner_half_capot_guest":
+                $returnDatas = $this->zq_duyingv2(2, 1, $resultModel, $word);
+                break;
+            case "corner_half_capot_dogfall":
+                $returnDatas['result'] = ($game_ret->home_half == $game_ret->guest_half) ? 1 : -1;
+                break;
+            case "corner_half_two_sides_single":
+                $returnDatas = $this->zq_doublesing($game_ret->home_half + $game_ret->guest_half, $model->condition, $word);
+                break;
+            case "corner_half_two_sides_double":
+                $returnDatas = $this->zq_doublesing($game_ret->home_half + $game_ret->guest_half, $model->condition, $word);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+        return $returnDatas;
+    }
+
+    /**
+     * 角球相关--------->结束
+     */
+
+
+    //净胜球相关
+    public function sw_WM($model, $resultModels, $result_match_r)
+    {
+        $resultModel = $resultModels['0'];
+        $home = intval($resultModel->home_score);
+        $guest = intval($resultModel->guest_score);
+        $word = $home . '-' . $guest . '(全场)';
+        $game_odds = $model->odde_code;
+
+        switch ($game_odds) {
+            case  'ior_WMH1':
+                $ret = $this->zq_jingshengqiu($home, $guest, 1, $word);
+                break;
+            case 'ior_WMH2':
+                $ret = $this->zq_jingshengqiu($home, $guest, 2, $word);
+                break;
+            case 'ior_WMH3':
+                $ret = $this->zq_jingshengqiu($home, $guest, 3, $word);
+                break;
+            case 'ior_WMHOV':
+                $ret = $this->zq_jingshengqiu($home, $guest, 4, $word);
+                break;
+            case 'ior_WMC1':
+                $ret = $this->zq_jingshengqiu($guest, $home, 1, $word);
+                break;
+            case 'ior_WMC2':
+                $ret = $this->zq_jingshengqiu($guest, $home, 2, $word);
+                break;
+            case 'ior_WMC3':
+                $ret = $this->zq_jingshengqiu($guest, $home, 3, $word);
+                break;
+            case 'ior_WMCOV':
+                $ret = $this->zq_jingshengqiu($guest, $home, 4, $word);
+                break;
+            case 'ior_WM0':
+                $ret = $this->zq_jingshengqiu($home, $guest, 0, $word);
+                break;
+            case 'ior_WMN':
+                $ret = $this->zq_jingshengqiu($guest, $home, 99, $word);
+                break;
+            default:
+                $ret = $this->return_error;
+                break;
+        }
+        return $ret;
+    }
+
+    //足球净胜球胜负判断
+    private function zq_jingshengqiu($winScore, $loseScore, $condNum, $word)
+    {
+        if (in_array($condNum, [1, 2, 3])) {
+            if ($winScore - $loseScore = $condNum) {
+                return ['result' => 1, 'matchResult' => $word];
+            } else {
+                return ['result' => -1, 'matchResult' => $word];
+            }
+        }
+
+        if ($condNum == 4) {
+            if ($winScore - $loseScore >= 4) {
+                return ['result' => 1, 'matchResult' => $word];
+            } else {
+                return ['result' => -1, 'matchResult' => $word];
+            }
+        }
+
+        if ($condNum == 0) {
+            if ($winScore == 0 && $loseScore == 0) {
+                return ['result' => 1, 'matchResult' => $word];
+            } else {
+                return ['result' => -1, 'matchResult' => $word];
+            }
+        }
+
+        if ($condNum == 99) {
+            if ($winScore > 0 && $winScore == $loseScore) {
+                return ['result' => 1, 'matchResult' => $word];
+            } else {
+                return ['result' => -1, 'matchResult' => $word];
+            }
+        }
+        return $this->return_error;
+    }
+
+
+    /**
+     * 罚球相关  开始
+     */
+    public function penalty_card($model, $resultModels, $result_match_r)
+    {
+        $odde_code = $model->odde_code;
+        $isHalf = strpos(strtolower($odde_code), 'half');
+        if ($isHalf) {
+            return $this->penalty_card_half($model, $resultModels, $result_match_r);
+        } else {
+            return $this->penalty_card_all($model, $resultModels, $result_match_r);
+        }
+    }
+
+    public function penalty_card_half($model, $resultModels, $result_match_r)
+    {
+
+        $resultModel = $resultModels['0'];
+        if ($resultModel->conner_ball == '') {
+            $game_ret = json_decode(json_encode(['home' => 0, 'guest' => 0, 'home_half' => 0, 'guest_half' => 0]));
+        } else {
+            $game_ret = json_decode($resultModel->penalty_card);
+        }
+        $word = $game_ret->home_half . '-' . $game_ret->guest_half . "(上半场)";
+        $returnDatas = ['result' => -1, 'matchResult' => $word];
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "penalty_half_concede_home":
+                $returnDatas = $this->zq_letball($game_ret->home_half - $game_ret->guest_half, $model->condition, $word);
+                break;
+            case "penalty_half_concede_guest":
+                $returnDatas = $this->zq_letball($game_ret->guest_half - $game_ret->home_half, $model->condition, $word);
+                break;
+            case "penalty_half_goal_size_home":
+                $returnDatas = $this->zq_inball_bigsmall($game_ret->home_half - $game_ret->guest_half, $model->condition, 2, $word);
+                break;
+            case "penalty_half_goal_size_guest":
+                $returnDatas = $this->zq_inball_bigsmall($game_ret->guest_half - $game_ret->home_half, $model->condition, 1, $word);
+                break;
+            case "penalty_half_capot_home":
+                $returnDatas = $this->zq_duyingv2(1, 1, $resultModel, $word);
+                break;
+            case "penalty_half_capot_guest":
+                $returnDatas = $this->zq_duyingv2(2, 1, $resultModel, $word);
+                break;
+            case "penalty_half_capot_dogfall":
+                $returnDatas['result'] = ($game_ret->home_half == $game_ret->guest_half) ? 1 : -1;
+                break;
+            case "penalty_half_two_sides_single":
+                $returnDatas = $this->zq_doublesing($game_ret->home_half + $game_ret->guest_half, $model->condition, $word);
+                break;
+            case "penalty_half_two_sides_double":
+                $returnDatas = $this->zq_doublesing($game_ret->home_half + $game_ret->guest_half, $model->condition, $word);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+        return $returnDatas;
+    }
+
+    public function penalty_card_all($model, $resultModels, $result_match_r)
+    {
+        $resultModel = $resultModels['0'];
+        if ($resultModel->conner_ball == '') {
+            $game_ret = json_decode(json_encode(['home' => 0, 'guest' => 0, 'home_half' => 0, 'guest_half' => 0]));
+        } else {
+            $game_ret = json_decode($resultModel->penalty_card);
+        }
+        $word = $game_ret->home . '-' . $game_ret->guest . "(全场)";
+        $returnDatas = ['result' => -1, 'matchResult' => $word];
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "penalty_concede_home":
+                $returnDatas = $this->zq_letball($game_ret->home - $game_ret->guest, $model->condition, $word);
+                break;
+            case "penalty_concede_guest":
+                $returnDatas = $this->zq_letball($game_ret->guest - $game_ret->home, $model->condition, $word);
+                break;
+            case "penalty_goal_size_home":
+                $returnDatas = $this->zq_inball_bigsmall($game_ret->home - $game_ret->guest, $model->condition, 2, $word);
+                break;
+            case "penalty_goal_size_guest":
+                $returnDatas = $this->zq_inball_bigsmall($game_ret->guest - $game_ret->home, $model->condition, 1, $word);
+                break;
+            case "penalty_capot_home":
+                $returnDatas = $this->zq_duyingv2(1, 4, $resultModel, $word);
+                break;
+            case "penalty_capot_guest":
+                $returnDatas = $this->zq_duyingv2(2, 4, $resultModel, $word);
+                break;
+            case "penalty_capot_dogfall":
+                $returnDatas['result'] = ($game_ret->home == $game_ret->guest) ? 1 : -1;
+                break;
+            case "penalty_two_sides_single":
+                $returnDatas = $this->zq_doublesing($game_ret->home + $game_ret->guest, $model->condition, $word);
+                break;
+            case "penalty_two_sides_double":
+                $returnDatas = $this->zq_doublesing($game_ret->home + $game_ret->guest, $model->condition, $word);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+        return $returnDatas;
+    }
+    /**
+     * 发球相关  结束
+     */
+
+    /*
+     * 双重机会
+     * User: Tank
+     * Date: 2019/6/28
+     * Time: 10:19
+     */
+    public function sw_DC($bet_match='', $result_match=[], $result_match_r=[]){
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        $result_match = $result_match['0'];
+        //获取父/子级赔率代码
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+
+        //获取主客队全场得分
+        $full_home_score = $result_match->home_score;
+        $full_guest_score = $result_match->guest_score;
+        //双重机会
+        if ($p_code != 'sw_DC') return false;
+
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$full_home_score-$full_guest_score(全场)"
+        ];
+        switch ($odds_code) {
+            case 'ior_DCHN':// 主队/和局
+                if ($full_home_score > $full_guest_score || $full_home_score == $full_guest_score) return $data;
+                break;
+            case 'ior_DCCN':// 客队/和局
+                if ($full_home_score < $full_guest_score || $full_home_score == $full_guest_score) return $data;
+                break;
+            case 'ior_DCHC':// 主队/客队
+                if ($full_home_score > $full_guest_score || $full_home_score < $full_guest_score) return $data;
+                break;
+            default:
+                return false;
+        }
+
+        $data['result'] = -1;
+        return $data;
+    }
+
+    /*
+     * 三项让球投注
+     * User: Tank
+     * Date: 2019/6/28
+     * Time: 10:19
+     */
+    public function sw_W3($bet_match='', $result_match='', $result_match_r=[]){
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        $result_match = $result_match['0'];
+        //获取父/子级赔率代码
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+
+        //获取主客队全场比分
+        $full_home_score = $result_match->home_score;
+        $full_guest_score = $result_match->guest_score;
+        //三项让球投注
+        if ($p_code != 'sw_W3') return false;
+
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$full_home_score-$full_guest_score(全场)"
+        ];
+
+        switch ($odds_code) {
+            case 'ior_W3H':// 让球|主队 +1
+                //如果 主队-客队 比分 > 1,则 赢
+                if (($full_home_score - $full_guest_score) > 1) return $data;
+                $data['result'] = 2;
+                //如果 主队-客队 比分 = 1,则 平
+                if (($full_home_score - $full_guest_score) == 1) return $data;
+                break;
+            case 'ior_W3C':// 让球|客队 -1
+                $data['result'] = 2;
+                //如果 主队-客队 比分 = 1,则 平
+                if (($full_home_score - $full_guest_score) == 1) return $data;
+                break;
+            case 'ior_W3N':// 让球|和局 +1
+                //如果 主队-客队 比分 = 1,则 赢
+                if (($full_home_score - $full_guest_score) == 1) return $data;
+                break;
+            default:
+                return false;
+        }
+
+        $data['result'] = -1;
+        return $data;
+    }
+
+     /*
+     * 零失球
+     * User: Tank
+     * Date: 2019/6/28
+     * Time: 10:19
+     */
+    public function sw_CS($bet_match='', $result_match='', $result_match_r=[]){
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        $result_match = $result_match['0'];
+        //获取父/子级赔率代码
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+
+        //获取主客队全场比分
+        $full_home_score = $result_match->home_score;
+        $full_guest_score = $result_match->guest_score;
+        //零失球
+        if ($p_code != 'sw_CS') return false;
+
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$full_home_score-$full_guest_score(全场)"
+        ];
+        switch ($odds_code) {
+            case 'ior_CSH':// 零失球|主队
+                //客队 比分 为 0
+                if ($full_guest_score == 0) return $data;
+                break;
+            case 'ior_CSC':// 零失球|客队
+                //主队 比分 为 0
+                if ($full_home_score == 0) return $data;
+                break;
+            default:
+                return false;
+        }
+
+        $data['result'] = -1;
+        return $data;
+    }
+
+     /*
+     * 零失球获胜
+     * User: Tank
+     * Date: 2019/6/28
+     * Time: 10:19
+     */
+    public function sw_WN($bet_match='', $result_match='', $result_match_r=[]){
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        $result_match = $result_match['0'];
+        //获取父/子级赔率代码
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+
+        //获取主客队全场比分
+        $full_home_score = $result_match->home_score;
+        $full_guest_score = $result_match->guest_score;
+        //零失球
+        if ($p_code != 'sw_WN') return false;
+
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$full_home_score-$full_guest_score(全场)"
+        ];
+        switch ($odds_code) {
+            case 'ior_WNH':// 零失球获胜|主队
+                //客队 比分 为 0 并且 主队 大于 客队
+                if ($full_home_score > $full_guest_score and $full_guest_score == 0) return $data;
+                break;
+            case 'ior_WNC':// 零失球获胜|客队
+                //主队 比分 为 0 并且 客队 大于 主队
+                if ($full_home_score < $full_guest_score || $full_home_score == 0) return $data;
+                break;
+            default:
+                return false;
+        }
+
+        $data['result'] = -1;
+        return $data;
+    }
+
+     /*
+     * 赢得所有半场
+     * User: Tank
+     * Date: 2019/6/28
+     * Time: 10:19
+     */
+    public function sw_WB($bet_match='', $result_match='', $result_match_r=[]){
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        $result_match = $result_match['0'];
+        //获取父/子级赔率代码
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+
+        //获取主客队全场比分
+        $full_home_score = $result_match->home_score;
+        $full_guest_score = $result_match->guest_score;
+
+        //获取主客队上半场得分
+        $half_home_score = $result_match->u_home_score;
+        $half_guest_score = $result_match->u_guest_score;
+        //赢得所有半场
+        if ($p_code != 'sw_WB') return false;
+
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$full_home_score-$full_guest_score(全场)"
+        ];
+
+        switch ($odds_code) {
+            case 'ior_WBH':// 赢得所有半场|主队
+                //上半场/下半场 都满足 主队 > 客队
+                if (($full_home_score - $half_home_score) > ($full_guest_score - $half_guest_score) and $half_home_score > $half_guest_score) return $data;
+                break;
+            case 'ior_WBC':// 赢得所有半场|客队
+                //上半场/下半场 都满足 主队 < 客队
+                if (($full_home_score - $half_home_score) < ($full_guest_score - $half_guest_score) and $half_home_score < $half_guest_score) return $data;
+                break;
+            default:
+                return false;
+        }
+
+        $data['result'] = -1;
+        return $data;
+    }
+
+     /*
+     * 赢得任一半场
+     * User: Tank
+     * Date: 2019/6/28
+     * Time: 10:19
+     */
+    public function sw_WE($bet_match='', $result_match='', $result_match_r=[]){
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        $result_match = $result_match['0'];
+        //获取父/子级赔率代码
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+
+        //获取主客队全场比分
+        $full_home_score = $result_match->home_score;
+        $full_guest_score = $result_match->guest_score;
+
+        //获取主客队上半场得分
+        $half_home_score = $result_match->u_home_score;
+        $half_guest_score = $result_match->u_guest_score;
+        //赢得任一半场
+        if ($p_code != 'sw_WE') return false;
+
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$full_home_score-$full_guest_score(全场)"
+        ];
+
+        switch ($odds_code) {
+            case 'ior_WEH':// 赢得任一半场|主队
+                //上半场/下半场 任一满足 主队 > 客队
+                if (($full_home_score - $half_home_score) > ($full_guest_score - $half_guest_score) || $half_home_score > $half_guest_score) return $data;
+                break;
+            case 'ior_WEC':// 赢得任一半场|客队
+                //上半场/下半场 任一满足 主队 < 客队
+                if (($full_home_score - $half_home_score) < ($full_guest_score - $half_guest_score) || $half_home_score < $half_guest_score) return $data;
+                break;
+            default:
+                return false;
+        }
+
+        $data['result'] = -1;
+        return $data;
+    }
+
+     /*
+     * 双半场进球
+     * User: Tank
+     * Date: 2019/6/28
+     * Time: 10:19
+     */
+    public function sw_SB($bet_match='', $result_match='', $result_match_r=[]){
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        $result_match = $result_match['0'];
+        //获取父/子级赔率代码
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+
+        //获取主客队全场比分
+        $full_home_score = $result_match->home_score;
+        $full_guest_score = $result_match->guest_score;
+
+        //获取主客队上半场得分
+        $half_home_score = $result_match->u_home_score;
+        $half_guest_score = $result_match->u_guest_score;
+        //双半场进球
+        if ($p_code != 'sw_SB') return false;
+
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$full_home_score-$full_guest_score(全场)"
+        ];
+
+        switch ($odds_code) {
+            case 'ior_SBH':// 双半场进球|主队
+                //上半场/下半场 主队都有 进球
+                if (($full_home_score - $half_home_score) > 0 and $half_home_score > 0) return $data;
+                break;
+            case 'ior_SBC':// 双半场进球|客队
+                //上半场/下半场 客队都有 进球
+                if (($full_guest_score - $half_guest_score) > 0 and $half_guest_score > 0) return $data;
+                break;
+            default:
+                return false;
+        }
+
+        $data['result'] = -1;
+        return $data;
+    }
+
+     /*
+     * 最多进球半场
+     * User: Tank
+     * Date: 2019/6/28
+     * Time: 10:19
+     */
+    public function sw_HG($bet_match='', $result_match='', $result_match_r=[]){
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        $result_match = $result_match['0'];
+        //获取父/子级赔率代码
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+       
+        //获取主客队全场比分
+        $full_home_score = $result_match->home_score;
+        $full_guest_score = $result_match->guest_score;
+
+        //获取主客队上半场得分
+        $half_home_score = $result_match->u_home_score;
+        $half_guest_score = $result_match->u_guest_score;
+
+        //获取下半场得分
+        $lower_home_score = $full_home_score - $half_home_score;
+        $lower_guest_score = $half_guest_score - $half_guest_score;
+        //最多进球半场
+        if ($p_code != 'sw_HG') return false;
+
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$full_home_score-$full_guest_score(全场)"
+        ];
+
+        switch ($odds_code) {
+            case 'ior_HGH':// 最多进球半场|上半场
+                //主队+客队上半场 > 主队+客队下半场
+                if (($half_home_score+$half_guest_score) > ($lower_home_score+$lower_guest_score)) return $data;
+                break;
+            case 'ior_HGC':// 最多进球半场|下半场
+                //主队+客队上半场 < 主队+客队下半场
+                if (($half_home_score+$half_guest_score) < ($lower_home_score+$lower_guest_score)) return $data;
+                break;
+            default:
+                return false;
+        }
+
+        $data['result'] = -1;
+        return $data;
+    }
+
+     /*
+     * 最多进球半场-独赢
+     * User: Tank
+     * Date: 2019/6/28
+     * Time: 10:19
+     */
+    public function sw_MG($bet_match='', $result_match='', $result_match_r=[]){
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        $result_match = $result_match['0'];
+        //获取父/子级赔率代码
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+
+        //获取主客队全场比分
+        $full_home_score = $result_match->home_score;
+        $full_guest_score = $result_match->guest_score;
+
+        //获取主客队上半场得分
+        $half_home_score = $result_match->u_home_score;
+        $half_guest_score = $result_match->u_guest_score;
+
+        //获取下半场得分
+        $lower_home_score = $full_home_score - $half_home_score;
+        $lower_guest_score = $half_guest_score - $half_guest_score;
+        //最多进球半场-独赢
+        if ($p_code != 'sw_MG') return false;
+
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$full_home_score-$full_guest_score(全场)"
+        ];
+
+        switch ($odds_code) {
+            case 'ior_MGH':// 最多进球半场-独赢|上半场
+                //主队+客队上半场 > 主队+客队下半场  and 主队 独赢
+                if (($half_home_score+$half_guest_score) > ($lower_home_score+$lower_guest_score) and $full_home_score > $full_guest_score) return $data;
+                break;
+            case 'ior_MGC':// 最多进球半场-独赢|下半场
+                //主队+客队上半场 < 主队+客队下半场  and 主队 独赢
+                if (($half_home_score+$half_guest_score) < ($lower_home_score+$lower_guest_score) and $full_home_score > $full_guest_score) return $data;
+                break;
+            case 'ior_MGN':// 最多进球半场-独赢|和局
+                //全场主队 == 全场客队
+                if ($full_home_score == $full_guest_score) return $data;
+                break;
+            default:
+                return false;
+        }
+
+        $data['result'] = -1;
+        return $data;
+    }
+
+     /*
+     * 首个进球时间
+     * User: Tank
+     * Date: 2019/6/28
+     * Time: 10:19
+     */
+    public function sw_T1G($bet_match='', $result_match='', $result_match_r=[]){
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        $result_match = $result_match['0'];
+        //获取父/子级赔率代码
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+        
+        //获取 首进球 时间
+        $first_score = json_decode($result_match->first_score, true);
+        $first_time_int = $first_score['scoretime'];//$result_match;//{"teamscore":0,"scoretime":0,"scoretype":0}
+        // $first_time_int = 0;
+        // if($first_time_str) {
+        //     $first_time_int = (int)substr($first_time_str,0,strpos($first_time_str, ':'));
+        // }
+
+        //首个进球时间
+        if ($p_code != 'sw_T1G') return false;
+
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$first_time_int(首进球时间)"
+        ];
+
+        switch ($odds_code) {
+            case 'ior_T1G1'://上半场开场-14:59分钟
+                if($first_time_int < 15) return $data;
+                break;
+            case 'ior_T1G2'://15:00分钟-29:59分钟
+                if(15 <= $first_time_int and $first_time_int < 30) return $data;
+                break;
+            case 'ior_T1G3'://30:00分钟-半场
+                if(30 <= $first_time_int and $first_time_int < 45) return $data;
+                break;
+            case 'ior_T1G4'://下半场开场-59:59分钟
+                if(45 <= $first_time_int and $first_time_int < 60) return $data;
+                break;
+            case 'ior_T1G5'://60:00分钟-74:59分钟
+                if(60 <= $first_time_int and $first_time_int < 75) return $data;
+                break;
+            case 'ior_T1G6'://75:00分钟-全场完场
+                if(75 <= $first_time_int and $first_time_int < 90) return $data;
+                break;
+            case 'ior_T1GN'://无进球
+                $data['matchResult'] = '没有进球';
+                if($first_time_int == 0) return $data;
+                break;
+            default:
+                return false;
+        }
+
+        $data['result'] = -1;
+        return $data;
+    }
+
+    /*
+     * 首个进球时间-3项
+     * User: Tank
+     * Date: 2019/6/28
+     * Time: 10:19
+     */
+    public function sw_T3G($bet_match='', $result_match='', $result_match_r=[]){
+        if (empty($bet_match) || empty($result_match)) return false;
+
+        $result_match = $result_match['0'];
+        //获取父/子级赔率代码
+        $p_code = $bet_match->p_code;
+        $odds_code = $bet_match->odds_code;
+        
+        //获取 首进球 时间
+        $first_score = json_decode($result_match->first_score, true);
+        $first_time_int = $first_score['scoretime'];//$result_match;//{"teamscore":0,"scoretime":0,"scoretype":0}
+        // $first_time_int = 0;
+        // if($first_time_str) {
+        //     $first_time_int = (int)substr($first_time_str,0,strpos($first_time_str, ':'));
+        // }
+
+
+        //首个进球时间-3项
+        if ($p_code != 'sw_T3G') return false;
+
+        //返回结果
+        $data = [
+            'result' => 1,
+            'matchResult' => "$first_time_int(首进球时间)"
+        ];
+
+        switch ($odds_code) {
+            case 'ior_T3G1'://第26分钟或之前
+                if($first_time_int <= 26) return $data;
+                break;
+            case 'ior_T3G2'://第27分钟或之后
+                if(27 <= $first_time_int) return $data;
+                break;
+            case 'ior_T1GN'://无进球
+                $data['matchResult'] = '没有进球';
+                if($first_time_int == 0) return $data;
+                break;
+            default:
+                return false;
+        }
+
+        $data['result'] = -1;
+        return $data;
+    }
+
+    /**
+     * 双方球队进球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModels 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * model--money_buy_match resultModels--st_zq_result resultRecords--st_zq_result_record
+     * @return string jimy start
+     */
+    public function sw_TS($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $allword = $resultModel->home_score . '-' . $resultModel->guest_score . "(全场)";
+        $hlefword = $resultModel->u_home_score . '-' . $resultModel->u_guest_score . "(上半场)";
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "ior_TSY":
+                $returnDatas = $this->isgoal($resultModel, $model, ior_TSY, $allword);
+                break;
+            case "ior_TSN":
+                $returnDatas = $this->isgoal($resultModel, $model, ior_TSN, $allword);
+                break;
+            case "ior_HTSY":
+                $returnDatas = $this->isgoal($resultModel, $model, ior_HTSY, $hlefword);
+                break;
+            case "ior_HTSN":
+                $returnDatas = $this->isgoal($resultModel, $model, ior_HTSN, $hlefword);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+        return $returnDatas;
+    }
+
+    /**
+     * 独赢&进球大小
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModels 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * model--money_buy_match resultModels--st_zq_result resultRecords--st_zq_result_record
+     * @return string 
+     * 注:大1.5|和局 主队-客队大于1.5 并且为和局  小1.5|和局 主队-客队小于1.5 并且为和局
+     */
+    public function sw_MOU($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $allword = $resultModel->home_score . '-' . $resultModel->guest_score . "(主队全场-客队全场)";
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "ior_MOUAHO":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUAHO, $allword);
+                break;
+            case "ior_MOUAHU":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUAHU, $allword);
+                break;
+            case "ior_MOUACO":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUACO, $allword);
+                break;
+            case "ior_MOUACU":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUACU, $allword);
+                break;
+            case "ior_MOUANO":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUANO, $allword);
+                break;
+            case "ior_MOUANU":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUANU, $allword);
+                break;
+            case "ior_MOUBHO":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUBHO, $allword);
+                break;
+            case "ior_MOUBHU":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUBHU, $allword);
+                break;
+            case "ior_MOUBCO":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUBCO, $allword);
+                break;
+            case "ior_MOUBCU":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUBCU, $allword);
+                break;
+            case "ior_MOUBNO":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUBNO, $allword);
+                break;
+            case "ior_MOUBNU":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUBNU, $allword);
+                break;
+            case "ior_MOUCHO":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUCHO, $allword);
+                break;
+            case "ior_MOUCHU":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUCHU, $allword);
+                break;
+            case "ior_MOUCCO":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUCCO, $allword);
+                break;
+            case "ior_MOUCCU":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUCCU, $allword);
+                break;
+            case "ior_MOUCNO":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUCNO, $allword);
+                break;
+            case "ior_MOUCNU":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUCNU, $allword);
+                break;
+            case "ior_MOUDHO":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUDHO, $allword);
+                break;
+            case "ior_MOUDHU":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUDHU, $allword);
+                break;
+            case "ior_MOUDCO":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUDCO, $allword);
+                break;
+            case "ior_MOUDCU":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUDCU, $allword);
+                break;
+            case "ior_MOUDNO":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUDNO, $allword);
+                break;
+            case "ior_MOUDNU":
+                $returnDatas = $this->isonlysize($resultModel, $model, ior_MOUDNU, $allword);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+        return $returnDatas;
+    }
+
+     /**
+     * 独赢&双方球队进球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModels 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * model--money_buy_match resultModels--st_zq_result resultRecords--st_zq_result_record
+     * @return string 
+     */
+    public function sw_MTS($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $homeword = $resultModel->home_score . "(主队全场)";
+        $guestword = $resultModel->guest_score . "(客队全场)";
+        $allword = $resultModel->home_score . '-' . $resultModel->guest_score . "(全场)";
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "ior_MTSHY":
+                $returnDatas = $this->ishvgoal($resultModel, $model, ior_MTSHY, $homeword);
+                break;
+            case "ior_MTSHN":
+                $returnDatas = $this->ishvgoal($resultModel, $model, ior_MTSHN, $homeword);
+                break;
+            case "ior_MTSCY":
+                $returnDatas = $this->ishvgoal($resultModel, $model, ior_MTSCY, $guestword);
+                break;
+            case "ior_MTSCN":
+                $returnDatas = $this->ishvgoal($resultModel, $model, ior_MTSCN, $guestword);
+                break;
+            case "ior_MTSNY":
+                $returnDatas = $this->ishvgoal($resultModel, $model, ior_MTSNY, $allword);
+                break;
+            case "ior_MTSNN":
+                $returnDatas = $this->ishvgoal($resultModel, $model, ior_MTSNN, $allword);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+        return $returnDatas;
+
+
+    }
+
+     /**
+     * 进球大/小&双方球队进球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModels 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * model--money_buy_match resultModels--st_zq_result resultRecords--st_zq_result_record
+     * @return string 
+     */
+    public function sw_OUT($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $homeword = $resultModel->home_score . "(主队全场)";
+        $guestword = $resultModel->guest_score . "(客队全场)";
+        $allword = $resultModel->home_score . '-' . $resultModel->guest_score . "(全场)";
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "ior_OUTAOY":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTAOY, $homeword);
+                break;
+            case "ior_OUTAON":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTAON, $homeword);
+                break;
+            case "ior_OUTAUY":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTAUY, $guestword);
+                break;
+            case "ior_OUTAUN":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTAUN, $guestword);
+                break;
+            case "ior_OUTBOY":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTBOY, $allword);
+                break;
+            case "ior_OUTBON":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTBON, $allword);
+                break;
+            case "ior_OUTBUY":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTBUY, $homeword);
+                break;
+            case "ior_OUTBUN":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTBUN, $homeword);
+                break;
+            case "ior_OUTCOY":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTCOY, $guestword);
+                break;
+            case "ior_OUTCON":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTCON, $guestword);
+                break;
+            case "ior_OUTCUY":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTCUY, $allword);
+                break;
+            case "ior_OUTCUN":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTCUN, $allword);
+                break;
+            case "ior_OUTDOY":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTDOY, $homeword);
+                break;
+            case "ior_OUTDON":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTDON, $homeword);
+                break;
+            case "ior_OUTDUY":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTDUY, $guestword);
+                break;
+            case "ior_OUTDUN":
+                $returnDatas = $this->goalsize($resultModel, $model, ior_OUTDUN, $guestword);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+    }
+
+    /**
+     * 独赢 & 最先进球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModels 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * model--money_buy_match resultModels--st_zq_result resultRecords--st_zq_result_record
+     * @return string  ??? 
+     */
+    public function sw_MPG($model, $resultModels, $resultRecords)
+    {
+        $resultModel = $resultModels['0'];
+        $allword = array(
+            'score' => $resultModel->home_score . '-' . $resultModel->guest_score . "(全场)",
+            'one_score' => $resultModel->first_score,//首进球
+        ); 
+            
+        $odds_code = $model->odds_code; 
+        switch ($odds_code) {
+            case "ior_MPGHH":
+                $returnDatas = $this->firstball($resultModel, $model, ior_MPGHH, $allword);
+                break;
+            case "ior_MPGHC":
+                $returnDatas = $this->firstball($resultModel, $model, ior_MPGHC, $allword);
+                break;
+            case "ior_MPGCH":
+                $returnDatas = $this->firstball($resultModel, $model, ior_MPGCH, $allword);
+                break;
+            case "ior_MPGCC":
+                $returnDatas = $this->firstball($resultModel, $model, ior_MPGCC, $allword);
+                break;
+            case "ior_MPGNH":
+                $returnDatas = $this->firstball($resultModel, $model, ior_MPGNH, $allword);
+                break;
+            case "ior_MPGNC":
+                $returnDatas = $this->firstball($resultModel, $model, ior_MPGNC, $allword);
+                break;
+            // case "ior_F2GH":
+            //     $returnDatas = $this->firstball($resultModel, $model, ior_F2GH, $allword);
+            //     break;
+            // case "ior_F3GH":
+            //     $returnDatas = $this->firstball($resultModel, $model, ior_F3GH, $allword);
+            //     break;
+            // case "ior_F3GC":
+            //     $returnDatas = $this->firstball($resultModel, $model, ior_F3GC, $allword);
+            //     break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+    }
+
+    /**
+     * 首个进球方式
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModels 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * model--money_buy_match resultModels--st_zq_result resultRecords--st_zq_result_record
+     * @return string  
+     */
+    public function sw_FG($model, $resultModels, $resultRecords)
+    {
+        $resultModels = $resultModels['0'];
+        $word = json_decode($resultModels->first_score,true)['scoretype'] . "(首个进球方式)";
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "ior_FGS":
+                $returnDatas = $this->onewaygoal($resultModels, $model, ior_FGS, $word);
+                break;
+            case "ior_FGH":
+                $returnDatas = $this->onewaygoal($resultModels, $model, ior_FGH, $word);
+                break;
+            case "ior_FGN":
+                $returnDatas = $this->onewaygoal($resultModels, $model, ior_FGN, $word);
+                break;
+            case "ior_FGP":
+                $returnDatas = $this->onewaygoal($resultModels, $model, ior_FGP, $word);
+                break;
+            case "ior_FGF":
+                $returnDatas = $this->onewaygoal($resultModels, $model, ior_FGF, $word);
+                break;
+            case "ior_FGO":
+                $returnDatas = $this->onewaygoal($resultModels, $model, ior_FGO, $word);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+    }
+
+    /**
+     * 双重机会&进球大/小
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModels 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * model--money_buy_match resultModels--st_zq_result resultRecords--st_zq_result_record
+     * @return string    
+     */
+    public function sw_DU($model, $resultModels, $resultRecords)
+    {
+        $resultModels = $resultModels['0'];
+        $homeword = $resultModels->home_score . "(主队全场)";
+        $guestword = $resultModels->guest_score . "(客队全场)";
+        $allword = $resultModels->home_score . '-' . $resultModels->guest_score . "(全场)";
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "ior_DUAHO":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUAHO, $homeword);
+                break;
+            case "ior_DUAHU":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUAHU, $homeword);
+                break;
+            case "ior_DUACO":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUACO, $guestword);
+                break;
+            case "ior_DUACU":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUACU, $guestword);
+                break;
+            case "ior_DUASO":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUASO, $allword);
+                break;
+            case "ior_DUASU":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUASU, $allword);
+                break;
+            case "ior_DUBHO":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUBHO, $homeword);
+                break;
+            case "ior_DUBHU":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUBHU, $homeword);
+                break;
+            case "ior_DUBCO":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUBCO, $guestword);
+                break;
+            case "ior_DUBCU":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUBCU, $guestword);
+                break;
+            case "ior_DUBSO":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUBSO, $allword);
+                break;
+            case "ior_DUBSU":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUBSU, $allword);
+                break;
+            case "ior_DUCHO":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUCHO, $homeword);
+                break;
+            case "ior_DUCHU":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUCHU, $homeword);
+                break;
+            case "ior_DUCCO":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUCCO, $guestword);
+                break;
+            case "ior_DUCCU":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUCCU, $guestword);
+                break;
+            case "ior_DUCSO":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUCSO, $allword);
+                break;
+            case "ior_DUCSU":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUCSU, $allword);
+                break;
+            case "ior_DUDHO":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUDHO, $homeword);
+                break;
+            case "ior_DUDHU":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUDHU, $homeword);
+                break;
+            case "ior_DUDCO":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUDCO, $guestword);
+                break;
+            case "ior_DUDCU":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUDCU, $guestword);
+                break;
+            case "ior_DUDSO":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUDSO, $allword);
+                break;
+            case "ior_DUDSU":
+                $returnDatas = $this->twosize($resultModels, $model, ior_DUDSU, $allword);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+    }
+
+    /**
+     * 双重机会&双方球队进球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModels 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * model--money_buy_match resultModels--st_zq_result resultRecords--st_zq_result_record
+     * @return string    
+     */
+    public function sw_DS($model, $resultModels, $resultRecords)
+    {
+        $resultModels = $resultModels['0'];
+        $homeword = $resultModels->home_score . "(主队全场)";
+        $guestword = $resultModels->guest_score . "(客队全场)";
+        $allword = $resultModels->home_score . '-' . $resultModels->guest_score . "(全场)";
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "ior_DSHY":
+                $returnDatas = $this->allgoals($resultModels, $model, ior_DSHY, $allword);
+                break;
+            case "ior_DSHN":
+                $returnDatas = $this->allgoals($resultModels, $model, ior_DSHN, $allword);
+                break;
+            case "ior_DSCY":
+                $returnDatas = $this->allgoals($resultModels, $model, ior_DSCY, $allword);
+                break;
+            case "ior_DSCN":
+                $returnDatas = $this->allgoals($resultModels, $model, ior_DSCN, $allword);
+                break;
+            case "ior_DSSY":
+                $returnDatas = $this->allgoals($resultModels, $model, ior_DSSY, $allword);
+                break;
+            case "ior_DSSN":
+                $returnDatas = $this->allgoals($resultModels, $model, ior_DSSN, $allword);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+    }
+
+    /**
+     * 双重机会&最先进球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModels 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * model--money_buy_match resultModels--st_zq_result resultRecords--st_zq_result_record
+     * @return string   
+     */
+    public function sw_DG($model, $resultModels, $resultRecords)
+    {
+        $resultModels = $resultModels['0'];
+        $word = array(
+            'home' => $resultModels->home_score . "(主队全场)",
+            'guest' => $resultModels->guest_score . "(客队全场)",
+            'firstscore' => $resultModels->first_score ."(最先进球)", 
+        );
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "ior_DGHH":
+                $returnDatas = $this->oneball($resultModels, $model, ior_DGHH, $word);
+                break;
+            case "ior_DGHC":
+                $returnDatas = $this->oneball($resultModels, $model, ior_DGHC, $word);
+                break;
+            case "ior_DGCH":
+                $returnDatas = $this->oneball($resultModels, $model, ior_DGCH, $word);
+                break;
+            case "ior_DGCC":
+                $returnDatas = $this->oneball($resultModels, $model, ior_DGCC, $word);
+                break;
+            case "ior_DGSH":
+                $returnDatas = $this->oneball($resultModels, $model, ior_DGSH, $word);
+                break;
+            case "ior_DGSC":
+                $returnDatas = $this->oneball($resultModels, $model, ior_DGSC, $word);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+    }
+
+    /**
+     * 进球大/小&进球单/双
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModels 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * model--money_buy_match resultModels--st_zq_result resultRecords--st_zq_result_record
+     * @return string 
+     */
+    public function sw_OUE($model, $resultModels, $resultRecords)
+    {
+        $resultModels = $resultModels['0'];
+        $allword = $resultModels->home_score . '-' . $resultModels->guest_score . "(全场)";
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "ior_OUEAOO":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUEAOO, $allword);
+                break;
+            case "ior_OUEAOE":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUEAOE, $allword);
+                break;
+            case "ior_OUEAUO":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUEAUO, $allword);
+                break;
+            case "ior_OUEAUE":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUEAUE, $allword);
+                break;
+            case "ior_OUEBOO":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUEBOO, $allword);
+                break;
+            case "ior_OUEBOE":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUEBOE, $allword);
+                break;
+            case "ior_OUEBUO":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUEBUO, $allword);
+                break;
+            case "ior_OUEBUE":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUEBUE, $allword);
+                break;
+            case "ior_OUECOO":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUECOO, $allword);
+                break;
+            case "ior_OUECOE":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUECOE, $allword);
+                break;
+            case "ior_OUECUO":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUECUO, $allword);
+                break;
+            case "ior_OUECUE":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUECUE, $allword);
+                break;
+            case "ior_OUEDOO":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUEDOO, $allword);
+                break;
+            case "ior_OUEDOE":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUEDOE, $allword);
+                break;
+            case "ior_OUEDUO":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUEDUO, $allword);
+                break;
+            case "ior_OUEDUE":
+                $returnDatas = $this->sizesd($resultModels, $model, ior_OUEDUE, $allword);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+    }
+
+    /**
+     * 进球大/小&最先进球
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModels 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * model--money_buy_match resultModels--st_zq_result resultRecords--st_zq_result_record
+     * @return string 
+     */
+    public function sw_OUP($model, $resultModels, $resultRecords)
+    {
+        $resultModels = $resultModels['0'];
+        $allword = array(
+            'score' => $resultModels->home_score . '-' . $resultModels->guest_score . "(全场)",
+            'firstscore' => $resultModels->first_score,
+        );
+            
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "ior_OUPAOH":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPAOH, $allword);
+                break;
+            case "ior_OUPAOC":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPAOC, $allword);
+                break;
+            case "ior_OUPAUH":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPAUH, $allword);
+                break;
+            case "ior_OUPAUC":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPAUC, $allword);
+                break;
+            case "ior_OUPBOH":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPBOH, $allword);
+                break;
+            case "ior_OUPBOC":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPBOC, $allword);
+                break;
+            case "ior_OUPBUH":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPBUH, $allword);
+                break;
+            case "ior_OUPBUC":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPBUC, $allword);
+                break;
+            case "ior_OUPCOH":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPCOH, $allword);
+                break;
+            case "ior_OUPCOC":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPCOC, $allword);
+                break;
+            case "ior_OUPCUH":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPCUH, $allword);
+                break;
+            case "ior_OUPCUC":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPCUC, $allword);
+                break;
+            case "ior_OUPDOH":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPDOH, $allword);
+                break;
+            case "ior_OUPDOC":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPDOC, $allword);
+                break;
+            case "ior_OUPDUH":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPDUH, $allword);
+                break;
+            case "ior_OUPDUC":
+                $returnDatas = $this->sizeone($resultModels, $model, ior_OUPDUC, $allword);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+    }
+
+    /**
+     * 落后反超获胜
+     * @param mixed $model 注单表数据
+     * @param mixed $resultModels 结果表数据
+     * @param mixed $resultRecords 结果记录表数据
+     * model--money_buy_match resultModels--st_zq_result resultRecords--st_zq_result_record
+     * @return string jimy end  ???
+     */
+    public function sw_BH($model, $resultModels, $resultRecords)
+    {
+        $resultModels = $resultModels['0'];
+        $homeword = $resultModels->home_score . "(主队全场)";
+        $guestword = $resultModels->guest_score . "(客队全场)";
+        $allword = $resultModels->home_score . '-' . $resultModels->guest_score . "(全场)";
+
+        $odds_code = $model->odds_code;
+        switch ($odds_code) {
+            case "ior_BHH":
+                $returnDatas = $this->backwardwins($resultModels, $model, ior_BHH, $homeword);
+                break;
+            case "ior_BHC":
+                $returnDatas = $this->backwardwins($resultModels, $model, ior_BHC, $homeword);
+                break;
+            default:
+                $returnDatas = ['result' => 2, 'matchResult' => '(玩法无规则异常)-' . $odds_code];
+        }
+    }
+
+}

+ 211 - 0
app/Lib/Settlement/SettlementBase.php

@@ -0,0 +1,211 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/4/25
+ * Time: 14:10
+ */
+
+namespace App\Lib\Settlement;
+set_time_limit(600);
+ini_set('memory_limit', '256M');
+
+
+use Illuminate\Database\Capsule\Manager as DB;
+
+class SettlementBase
+{
+     const  USER_WIN  = 1 ;   //用户赢钱
+     const  USER_LOSE = -1;   //用户输钱
+     const  USER_FLAT = 2 ;   //持平,用户钱原路返回
+     const  USER_HAFWIN = 3 ;  //半平半赢
+     const  USER_HALFLOSE = 4 ;  //半平半输
+
+     private  $RefClass = [] ;   //适配器缓存
+
+    //输赢判断
+    public function  winOrfalseInfo($gameType,$buyMatchModel,$resultModel,$resultRecordsArray){
+        if (!isset($this->RefClass[$gameType])){
+            $gameType = ucfirst($gameType);
+            $pathBase = dirname(__FILE__).DIRECTORY_SEPARATOR.'Adapter'.DIRECTORY_SEPARATOR ;
+            $file = $pathBase.$gameType.'Rule.php';
+            if (!file_exists($file)){  throw new \Exception('无胜负判断规则文件');}
+            include_once($file);
+            $tmpapater =  gameType.'Rule' ;
+            $this->RefClass[$gameType] = new $tmpapater();
+        }
+
+        $fun = $buyMatchModel->odds_code ;
+        $fun2 = $buyMatchModel->p_code ;
+        if ( $this->RefClass[$gameType]->hasMethod($fun) ){
+            $winorfalse = $this->RefClass[$gameType]->$fun($buyMatchModel,$resultModel,$resultRecordsArray);
+        }elseif ( $this->RefClass[$gameType]->hasMethod($fun2) ){
+            $winorfalse = $this->RefClass[$gameType]->$fun2($buyMatchModel,$resultModel,$resultRecordsArray);
+        }else{
+            throw new \Exception('没有找到玩法输赢判断规则',40010);
+        }
+
+        if (!in_array($winorfalse,[-1,1,2,3,4])){
+            throw new \Exception('胜负判断结果异常',40011);
+        }
+        return $winorfalse ;
+    }
+
+    /**
+     * 注单返现计算
+     * @param mixed $dataArray 结果表数据 [['odds'=>xx,'winOrLose'=>1],[...]];
+     * @return array 注单返现额
+     */
+    public function   winOddsCalculation($dataArray){
+        $returnMoney = 1;
+        // 循环计算每注返现赔率
+        foreach ($dataArray as $value) {
+            $odds = floatval($value['odds']);
+            // 因结果不同更改赔率
+            switch (intval($value['winOrLose'])) {
+                case 1:
+                    $oddsDiscount = $odds;
+                    break;
+                case 2:
+                    $oddsDiscount = 1;
+                    break;
+                case 3:
+                    $oddsDiscount = $odds * 0.5;
+                    break;
+                default:
+                    $oddsDiscount = 0.5;
+            }
+            // 计算每注返现
+            $returnMoney = $returnMoney * $oddsDiscount;
+        }
+        // 计算赚钱
+        $earnMoney = $returnMoney - 1;
+
+        return ['earnMoney' => $earnMoney, 'returnMoney' => $returnMoney];
+    }
+
+    /**
+     * 注单返现计算
+     * @param mixed $dataArray 结果表数据 [['odds'=>xx,'winOrLose'=>1],[...]];
+     * @return array 注单返现额
+     */
+    public function   stringOdds($dataArray){
+        $returnMoney = 1;
+        // 循环计算每注返现赔率
+        foreach ($dataArray as $value) {
+            $odds = floatval($value['odds']);
+            // 因结果不同更改赔率
+            switch (intval($value['winOrLose'])) {
+                case 1:
+                    $oddsDiscount = 1 + $odds;
+                    break;
+                case 2:
+                    $oddsDiscount = 1;
+                    break;
+                case 3:
+                    $oddsDiscount = 1 + $odds * 0.5;
+                    break;
+                default:
+                    $oddsDiscount = 0.5;
+            }
+            // 计算每注返现
+            $returnMoney = $returnMoney * $oddsDiscount;
+        }
+        // 计算赚钱
+        $earnMoney = $returnMoney - 1;
+
+        return ['earnMoney' => $earnMoney, 'returnMoney' => $returnMoney];
+    }
+
+    /**
+     * 注单返现计算
+     * @param mixed $dataArray 结果表数据
+     * @return array 注单返现额
+     */
+    public function stringComputing($dataArray){
+        /*$dataArray = [
+            [
+                ['odds'=>3.02,'winOrLose'=>1],
+                ['odds'=>2.84,'winOrLose'=>1],
+                ['odds'=>3.01,'winOrLose'=>1],
+                ['odds'=>2.94,'winOrLose'=>1]
+            ], 2
+        ];*/
+        $data = $this -> combination($dataArray[0],$dataArray[1]);
+        $dataCount = count($data);
+        $returnMoney = 0;
+        foreach ($data as $key => $value) {
+            $getReturnMoney = $this -> stringOdds($value);
+            $returnMoney += $getReturnMoney['returnMoney'];
+        }
+        $returnMoney = $returnMoney / $dataCount;
+
+        return $returnMoney;
+    }
+
+    // 组合
+    function combination($a, $m) {
+        $r = array();
+
+        $n = count($a);
+        if ($m <= 0 || $m > $n) {
+            return $r;
+        }
+
+        for ($i=0; $i<$n; $i++) {
+            $t = array($a[$i]);
+            if ($m == 1) {
+                $r[] = $t;
+            } else {
+                $b = array_slice($a, $i+1);
+                $c = $this->combination($b, $m-1);
+                foreach ($c as $v) {
+                    $r[] = array_merge($t, $v);
+                }
+            }
+        }
+
+        return $r;
+    }
+
+    /**
+     * UUID 生成
+     */
+    public  static  function UUID() {
+        $prefix = '';
+        $uuid = '';
+        $str = md5(uniqid(mt_rand(), true));
+        $uuid = substr($str, 0, 8) . '-';
+        $uuid .= substr($str, 8, 4) . '-';
+        $uuid .= substr($str, 12, 4) . '-';
+        $uuid .= substr($str, 16, 4) . '-';
+        $uuid .= substr($str, 20, 12);
+        return $prefix . $uuid;
+    }
+
+
+    //获取到某个用户的account模型和detail模型,用于用户的余额计算等使用
+    public function  getUserInfo($account_name){
+
+        $accountModel = DB::table('account')->where('account',$account_name)->first();
+        if (!$accountModel){
+            throw  new   \Exception('查无此用户数据account='.$account_name,41002);
+        }
+
+        $detailModel = DB::table('account_detailed')->where('account_identity',$accountModel->identity)->first();
+
+        if (!$detailModel){
+            throw  new   \Exception('查无此用户数据account_detail='.$accountModel->identity,41002);
+        }
+        $ret = [
+            'account'=>$detailModel,
+            'detail' => $detailModel ,
+        ];
+
+
+        return $ret;
+    }
+
+
+
+}

+ 19 - 0
app/Logic/TaskdecompositionLogic.php

@@ -0,0 +1,19 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/7/15
+ * Time: 16:46
+ */
+
+namespace app\Logic;
+
+
+//任务分解类
+class TaskdecompositionLogic
+{
+
+
+
+
+}

+ 131 - 0
app/Logic/WinfailLogic.php

@@ -0,0 +1,131 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/7/15
+ * Time: 16:51
+ */
+
+namespace App\Logic;
+
+use Illuminate\Database\Capsule\Manager as DB;
+
+use  App\Lib\Settlement\Adapter\ZqRule;
+use  App\Lib\Settlement\Adapter\LqRule;
+use  App\Lib\Settlement\Adapter\WqRule;
+use  App\Lib\Settlement\Adapter\BqRule;
+
+class WinfailLogic
+{
+    //类型映射
+    public $gameAllMap = [
+        'zq' => 'ZqRule',
+        'lq' => 'LqRule',
+        'wq' => 'WqRule',
+        'bq' => 'BqRule',
+    ];
+
+
+    public function getNoticeDate($id)
+    {
+        $noticeMode = DB::table('comendnotice')->where(['id' => $id])->first();
+        if (empty($noticeMode)) {
+            throw new  \Exception("没有找到notice记录-" . $id);
+        }
+        return $noticeMode;
+    }
+
+    //得到比赛最终结果记录
+    public function getCompResult($type, $match_id)
+    {
+        $model = null;
+        switch ($type) {
+            case 'bq':
+                $model = DB::table('st_bq_result')->where('match_id', $match_id)->orderby('id', 'asc')->get();
+                break;
+            case  'lq':
+                $model = DB::table('st_lq_result')->where('match_id', $match_id)->orderby('id', 'asc')->get();
+                break;
+            case  'wq':
+                $model = DB::table('st_wq_result')->where('match_id', $match_id)->orderby('id', 'asc')->get();
+                break;
+            case  'zq':
+                $model = DB::table('st_zq_result')->where('match_id', $match_id)->orderby('id', 'asc')->get();
+                break;
+        }
+
+        if (empty($model)) {
+            throw new  \Exception("没有找到赛事结果记录-" . $type . '-' . $match_id);
+        }
+        return $model;
+    }
+
+
+    //单式订单存在 单独设置比赛结果的情况,要分开处理
+    public function getSimplexData($type, $match_id)
+    {
+        $return = [];
+        $ret = DB::table("money_buy_simplex")->where(['game_code' => $type, 'match_id' => $match_id])->get();
+        if (count($ret) <= 0) {
+            return;
+        }
+
+        foreach ($ret as $val) {
+            $return[$val->batch_id][$val->match_id] = ['result_flag' => $val->result_flag, 'single_result' => $val->single_result];
+        }
+        return $return;
+    }
+
+    //找到订单详细数据
+    public function getMatchRecords($type, $match_id, $bet_type)
+    {
+        $return = [];
+        $ret = DB::table("money_buy_match")->where(['game_code' => $type, 'match_id' => $match_id, 'bet_type' => $bet_type])->get();
+        if (count($ret) <= 0) {
+            return;
+        }
+
+        foreach ($ret as $val) {
+            $return[] = $val;
+        }
+        return $return;
+    }
+
+    public function getAdapterObj($game_type)
+    {
+        $game_type = strtolower($game_type);
+        if (!isset($this->gameAllMap)) {
+            throw  new \Exception('赛事类型错误-' . $game_type, 4002);
+            return false;
+        }
+
+        switch ($game_type) {
+            case 'bq':
+                $apd = new BqRule();
+                break;
+            case  'lq':
+                $apd = new LqRule();
+                break;
+            case  'wq':
+                $apd = new WqRule();
+                break;
+            case  'zq':
+                $apd = new ZqRule();
+                break;
+        }
+        return $apd;
+    }
+
+    //冠军比赛结果
+    public function getGjDatas($matchModel)
+    {
+        $table = 'st_' . $matchModel->game_code . '_league_result';
+        $where = ['lg_id' => $matchModel->lg_id, 'game_name' => $matchModel->odds_code];
+        $model = DB::table($table)->where($where)->first();
+        if (count($model) <= 0) {
+            throw new  \Exception('冠军数据没找到!');
+        }
+        return $model;
+    }
+
+}

+ 15 - 0
app/Logic/settelementLogic.php

@@ -0,0 +1,15 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/7/15
+ * Time: 16:52
+ */
+
+namespace app\Logic;
+
+
+class settelementLogic
+{
+
+}

+ 15 - 0
commands/bootDbPoole.php

@@ -0,0 +1,15 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/5/27
+ * Time: 9:16
+ */
+
+define('START_TIME', microtime(true));
+require __DIR__.'/../vendor/autoload.php';
+\datainf\lib\boot::init();
+
+$config  = \datainf\lib\GlobConfigs::getKey('pgsqlpoole');
+$ser = new datainf\lib\DB_pool($config);
+$ser->run();

+ 15 - 0
commands/bootSettelementHttp.php

@@ -0,0 +1,15 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/5/20
+ * Time: 9:36
+ */
+
+define('START_TIME', microtime(true));
+require __DIR__.'/../vendor/autoload.php';
+\datainf\lib\boot::init();
+
+$ser = new \datainf\logic\HttpServerSettelement(\datainf\lib\GlobConfigs::getKey('SettelementHttpServer'));
+$ser->start();
+

+ 52 - 0
commands/mysql_poole_client_test.php

@@ -0,0 +1,52 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/5/27
+ * Time: 9:28
+ */
+
+define('START_TIME', microtime(true));
+require __DIR__.'/../vendor/autoload.php';
+\datainf\lib\boot::init();
+
+
+
+$config  = \datainf\lib\GlobConfigs::getKey('pgsqlpoole');
+
+$client    = new swoole_client(SWOOLE_SOCK_TCP);
+$client->set(array(
+    'socket_buffer_size'     => 1024*1024*8, //2M缓存区
+));
+$rts= $client->connect('192.168.2.200', $config['poole_port'], 10) or die("连接失败");//链接mysql客户端
+
+
+
+$sql =("select  * from account where id=83632");
+$client->send($sql);
+$resdata = $client->recv();
+print_r(json_decode($resdata,true)) ;
+
+
+/*
+$sql ="select  * from \"districts\" where id>=1 and id<=300" ;
+$client->send($sql);
+$resdata = $client->recv();
+print_r(json_decode($resdata,true)) ;
+*/
+
+
+
+
+
+$client->close();
+
+
+
+
+/*
+echo "收到: ".$resdata."\n" ;
+$resda=json_decode($resdata,true);
+$client->close();
+return json_encode($resda);
+*/

+ 56 - 0
configs/configs.sample.php

@@ -45,6 +45,62 @@ $tmp_config = [
                 'log_file' => '../logs/http_'.date("Ymd").'.log',
             ],
         ],
+        //结算相关
+        'SettelementHttpServer' => [
+            'host' => '0.0.0.0',
+            'port' => '9094',
+            'maxUsers' => 50000,
+            'sets' => [
+                'worker_num' => 2,
+                'daemonize' => true,
+                'max_request' => 500,
+                'task_enable_coroutine' => true,
+                'dispatch_mode' => 2,
+                'debug_mode' => 1,
+                'task_worker_num' => 10,
+                'log_file' => '../logs/http_'.date("Ymd").'.log',
+            ],
+        ],
+        //数据库连接池服务
+        'pgsqlpoole'=>[
+            'poole_host' => '0.0.0.0' ,
+            'poole_port' => 9091,
+
+            'db_type' => 'pgsql',
+            'db_host' => '192.168.2.200',
+            'db_port' => 10432,
+            'db_name' => 'kaiyou3',
+            'db_user' => 'kaiyou',
+            'db_pwd' => '123456',
+        ],
+        //数据库连接池
+        'pgsqlpoole' => [
+            'poole_host' => '0.0.0.0',
+            'poole_port' => 9091,
+            'sets' => [
+                'worker_num' => 4,
+                'task_worker_num' => 20,
+                'max_request' => 10000,
+                'daemonize' => true,
+                'log_file' => "../logs/pgsqlpoole_" . date("Y-m-d", time()) . '.log',
+                'dispatch_mode' => 2,
+                'package_max_length' => 4 * 1024 * 1024,
+                'buffer_output_size' => 4 * 1024 * 1024,
+                'socket_buffer_size' => 8 * 1024 * 1024
+            ],
+            'dbconfig' => [
+                'driver' => 'pgsql',
+                'host' => '192.168.2.200',
+                'port' => 10432,
+                'database' => 'kaiyou3',
+                'username' => 'kaiyou',
+                'password' => '123456',
+                'charset' => 'utf8',
+                'collation' => 'utf8_unicode_ci',
+                'prefix' => ''
+            ],
+        ],
+
 
     ],
     'dev' => [

+ 148 - 0
datainf/lib/DB_pool.php

@@ -0,0 +1,148 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/5/27
+ * Time: 8:56
+ */
+
+namespace datainf\lib;
+
+
+/**
+ *  swoole 数据库连接池 BY 凌晨
+ * 'worker_num' => 20, //worker进程数量
+ * 'task_worker_num' => 10, //task进程数量 即为维持的MySQL连接的数量
+ * 'daemonize'=> 1,          //设置守护进程
+ * 'max_request' => 10000, //最大请求数,超过了进程重启
+ * 'dispatch_mode' => 2,/
+ */
+class DB_pool
+{
+    //db params
+    protected $dbconfig = [];
+    protected $serv;
+
+
+    public function __construct($config = [])
+    {
+        $host = $config['poole_host'] ? $config['poole_host'] : "127.0.0.1"; // server监听的端口
+        $port = $config['poole_port'] ? $config['poole_port'] : 9091;  // server监听的端口
+
+        $this->serv = new \swoole\server($host, $port);
+        $this->serv->set($config['sets']);
+
+        $this->dbconfig = $config['dbconfig'];
+    }
+
+
+    public function run()
+    {
+        $this->serv->on('Receive', array($this, 'onReceive'));
+        // Task 回调的2个必须函数
+        $this->serv->on('Task', array($this, 'onTask'));
+        $this->serv->on('Connect', array($this, 'onConnect'));
+        $this->serv->on('Finish', array($this, 'onFinish'));
+        //$this->serv->on('Error', array($this, 'onError'));
+
+        $this->serv->start();
+    }
+
+    public function onConnect(\swoole\server $server, int $fd, int $reactorId)
+    {
+        //$clientinfo = $server->getClientInfo($fd) ;
+        //$cinfo = $clientinfo['remote_ip'].':'. $clientinfo['remote_port'] ;
+        //echo "有客户接入:reactorId:$reactorId --> fd:$fd  --> $cinfo  \n";
+    }
+
+
+    public function onReceive($serv, $fd, $from_id, $data)
+    {
+        $resultStr = $this->serv->taskwait($data);
+        if ($resultStr !== false) {
+            $this->serv->send($fd, $resultStr);
+            return;
+            $result = json_decode($resultStr, true);
+            if (isset($result['status']) && $result['status'] == 'success') {
+                $this->serv->send($fd, $resultStr);
+            } else {
+                $this->serv->send($fd, $resultStr);
+            }
+            return;
+        } else {
+            $this->serv->send($fd, json_encode(['status' => 'false', 'data' => "Error. Task timeout"]));
+        }
+    }
+
+    public function onTask($serv, $task_id, $from_id, $sql)
+    {
+        static $link = null;
+        HELL:
+        if ($link == null) {
+            try {
+
+                $conStr = $this->dbconfig['driver'] . ":host=" . $this->dbconfig['host'] . ";dbname=" . $this->dbconfig['database'] . ";port=" . $this->dbconfig['port'];
+                $link = new \PDO($conStr, $this->dbconfig['username'], $this->dbconfig['password']);
+                $link->exec("set names 'utf8'");
+                echo "新建连接成功:Taskid=$task_id  Fromid=$from_id \n";
+            } catch (\PDOException $e) {
+                $link = null;
+                $this->serv->finish(json_encode(['status' => 'false', 'data' => $e->getMessage()], 256));
+                echo "新建连接失败:Taskid=$task_id  Fromid=$from_id " . $e->getMessage() . "\n";
+                return;
+            }
+        }
+
+        $sql = trim($sql);
+        if (preg_match("/^select/i", $sql)) {
+            $result = $link->query($sql);
+        } else {
+            $result = $link->exec($sql);
+        }
+
+        $data = ['status' => false];
+        if (!$result) { //如果查询失败了
+            if (in_array($link->errorCode(), [2013, 2006])) {//错误码为2013,或者2006,则重连数据库,重新执行sql
+                $link = null;
+                goto HELL;
+            } else {
+                $data['status'] = 'false';
+                $data['data'] = $link->errorInfo();
+                $this->serv->finish(json_encode($data, 256));
+                return;
+            }
+        }
+        if (preg_match("/^select/i", $sql)) { //如果是select操作,就返回关联数组
+            $dataRet = $result->fetchAll(\PDO::FETCH_CLASS);
+            $data['data'] = $dataRet;
+        } else {//否则直接返回结果
+            $data['data'] = $result;
+        }
+        $data['status'] = "success";
+        $this->serv->finish(json_encode($data, 256));
+    }
+
+    public function onFinish($serv, $task_id, $data)
+    {
+        echo "任务完成";//taskwait  不触发这个函数。。
+        return $data;
+    }
+}
+
+/**服务启动
+ * $serv=new DB_pool();
+ * $serv->run();
+ */
+
+/**客户端
+ * $client    = new \swoole_client(SWOOLE_SOCK_TCP);
+ * $num=rand(111111,999999);
+ * $rts=$client->connect('127.0.0.1', 9508, 10) or die("连接失败");//链接mysql客户端
+ * $sql =("select  * from zdk_test");
+ * $client->send($sql);
+ * $resdata = $client->recv();
+ *
+ * $resda=json_decode($resdata,true);
+ * $client->close();
+ * return json_encode($resda);
+ */

+ 207 - 0
datainf/logic/HttpServerSettelement.php

@@ -0,0 +1,207 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/6/26
+ * Time: 12:03
+ */
+
+namespace datainf\logic;
+
+use App\Lib\ModelBase;
+use App\Http\Response\Response;
+
+use App\Logic\WinfailLogic;
+use Illuminate\Database\Capsule\Manager as DB;
+
+class HttpServerSettelement
+{
+    private $httpserver;
+    private $config;
+
+    public function __construct($config)
+    {
+        $this->httpserver = new \swoole\http\server($config['host'], $config['port']);
+        $this->httpserver->set($config['sets']);
+        $this->config = $config;
+
+        $taskWorkingNum = new \swoole\Atomic();
+        $this->httpserver->taskWorkingNum = $taskWorkingNum;
+
+        $this->httpserver->on('request', array($this, 'OnRequest'));
+        $this->httpserver->on('WorkerStart', array($this, 'onWorkerStart'));
+        $this->httpserver->on('task', array($this, 'onTask'));
+        $this->httpserver->on('finish', array($this, 'onFinish'));
+
+    }
+
+    public function onWorkerStart($serv, $worker_id)
+    {
+        $name = $serv->taskworker ? 'Task_' : 'Worker_';
+        $name = 'Settelement_' . $name . ($serv->worker_id < 10 ? '0' . $serv->worker_id : $serv->worker_id);
+        swoole_set_process_name($name);
+
+        $GLOBALS['model'] = '';
+        $GLOBALS['modeltime'] = 0;
+
+        if (!$serv->taskworker) {
+            $this->InitDb();
+        }
+
+    }
+
+
+    public function OnRequest($request, $response)
+    {
+        $response->header('Content-Type', 'text/html; charset=utf-8');
+        $response->header('Server', 'DataInfaceServer');
+        $paras = array_merge(['request_time' => date("H:i:s")], !empty($request->get) ? $request->get : [], !empty($request->post) ? $request->post : []);
+
+        $request_uri = substr($request->server['request_uri'], 1);
+        $urls = ['WinFail', 'SettelementAll', 'SettelementSome'];
+
+        if (!in_array($request_uri, $urls)) {
+            $data = Response::generate('', 0, '', '无效的url');
+            $response->end($data);
+            return;
+        }
+
+        if ($this->httpserver->taskWorkingNum->get()) {
+            $data = Response::generate('', 9, '', '还有未完成任务请稍等...');
+            $response->end($data);
+            return;
+        }
+
+        if ($request_uri == 'WinFail') {
+            return $this->doWinFailse($request, $response, $paras);
+        }
+
+
+        if ($request_uri == 'SettelementSome') {
+            return $this->doSettelementSome($request, $response, $paras);
+        }
+
+        if ($request_uri == 'SettelementAll') {
+            return $this->doSettelementSome($request, $response, $paras);
+        }
+
+        return;
+    }
+
+    public function onTask($serv, $task)
+    {
+        $this->httpserver->taskWorkingNum->add();
+
+        if ($task['type'] == 'doWinFailse') {
+            $this->Task_winfalse($serv, $task);
+        }
+
+        $this->httpserver->taskWorkingNum->sub();
+    }
+
+
+    //胜负计算
+    private function doWinFailse($request, $response, $paras)
+    {
+
+        $logic_obj = new WinfailLogic();
+        $id = intval($paras['noticeid']);
+
+        try {
+            $noticeModel = $logic_obj->getNoticeDate($id);
+            $AdapterObj = $logic_obj->getAdapterObj($noticeModel->game_code);
+            $result = $logic_obj->getCompResult($noticeModel->game_code, $noticeModel->match_id);
+            $moneySimples = $logic_obj->getSimplexData($noticeModel->game_code, $noticeModel->match_id);
+            $matchs_1 = $logic_obj->getMatchRecords($noticeModel->game_code, $noticeModel->match_id, 1);
+            $matchs_2 = $logic_obj->getMatchRecords($noticeModel->game_code, $noticeModel->match_id, 2);
+            $RefClass = new  \ReflectionClass($AdapterObj);
+
+            if (!empty($matchs_1)) {
+                while (true) {
+                    if ($this->httpserver->taskWorkingNum->get() > intval($this->config['sets']['task_worker_num'])) {
+                        co::sleep(100);
+                    } else {
+                        $now = array_shift($matchs_1);
+                        $paras = ['type' => 'doWinFailse', 'stype' => 1, 'matchModel' => $now, 'RefClass' => $RefClass, 'result' => $result, 'moneySimple' => $moneySimples[$now->batch_id][$now->match_id]];
+                        $this->onTask($this->httpserver, $paras);
+                    }
+                }
+            }
+
+            if (!empty($matchs_2)) {
+                while (true) {
+                    if ($this->httpserver->taskWorkingNum->get() > intval($this->config['sets']['task_worker_num'])) {
+                        co::sleep(100);
+                    } else {
+                        $now = array_shift($matchs_2);
+                        $paras = ['type' => 'doWinFailse', 'stype' => 1, 'matchModel' => $now, 'RefClass' => $RefClass, 'result' => $result, 'moneySimple' => $moneySimples[$now->batch_id][$now->match_id]];
+                        $this->onTask($this->httpserver, $paras);
+                    }
+                }
+            }
+            unset($logic_obj, $noticeModel, $AdapterObj, $result, $moneySimples, $matchs_1, $matchs_2, $RefClass);
+
+        } catch (\Exception $e) {
+            unset($logic_obj);
+            $data = Response::generate('', 10, '', $e->getMessage());
+            $response->end($data);
+        }
+        return;
+    }
+
+    //部分结算
+    private function doSettelementSome($request, $response, $paras)
+    {
+
+
+    }
+
+    //全部结算
+    private function doSettelementAll($request, $response, $paras)
+    {
+
+    }
+
+
+    /////
+    private function Task_winfalse($serv, $task)
+    {
+            echo "IN Task_winfalse".print_r([$task])."\n";
+
+    }
+
+
+    public function onFinish($serv, int $task_id, $data)
+    {
+
+    }
+
+
+    private function InitDb()
+    {
+        $over_time = 60 * 5;
+        $now = microtime(true);
+
+        if (!$GLOBALS['modeltime']) {
+            $GLOBALS['modeltime'] = $now;
+            $GLOBALS['model'] = $this->httpserver->worker_id;
+            ModelBase::init();
+            return;
+        }
+
+        if (($now - $GLOBALS['modeltime']) > $over_time) {
+            $GLOBALS['modeltime'] = $now;
+            $GLOBALS['model'] = $this->httpserver->worker_id;
+            ModelBase::close();
+            ModelBase::init();
+            return;
+        }
+
+    }
+
+    public function start()
+    {
+        $this->httpserver->start();
+    }
+
+}