vali 6 years ago
parent
commit
7089187759

+ 48 - 0
app/Http/Model/StZqMatch.php

@@ -2,6 +2,14 @@
 namespace App\Http\Model;
 
 use Illuminate\Database\Eloquent\Model;
+use App\Http\Model\StLqMatch as LqMatchModel;
+use App\Http\Model\StWqMatch as WqMatchModel;
+use App\Http\Model\StBqMatch as BqMatchModel;
+
+use App\Http\Model\StZqResult as ZqResultModel;
+use App\Http\Model\StLqResult as LqResultModel;
+use App\Http\Model\StWqResult as WqResultModel;
+use App\Http\Model\StBqResult as BqResultModel;
 
 
 /**
@@ -15,5 +23,45 @@ class StZqMatch extends Model
     protected $table = 'st_zq_competition';
     public $timestamps = false;
 
+    /**
+     * 赛事异常处理
+     * 当前时间大于赛事开始时间,赛事还未开始
+     * 则设置为 已取消
+     * $time  int执行间隔时间 默认60秒
+     * $time_sec int 查询范围 默认100秒
+     */
+    public static function HandleMatch($time = 60,$time_sec = 100){
+        //拼接查询条件
+        $time_unx_max = time() - $time;//查询最大时间 时间戳
+        $time_unx_min = $time_unx_max - $time_sec;//查询最小时间 时间戳
+
+        $where = [
+            ['match_date','=',date('Y-m-d',$time_unx_min)],
+            ['match_time','>',date('H:i:s',$time_unx_min)],
+            ['match_time','<',date('H:i:s',$time_unx_max)],
+            ['status','=',0]
+        ];
+
+        //更新数据
+        $up_data = ['status'=>6,'handle_mark'=>trans('handleMatch.re_match_auto')];
+
+        //更新开赛时间为前一分钟  并且 未开始的赛事 为已取消
+        self::where($where)->update($up_data);
+        LqMatchModel::where($where)->update($up_data);
+        WqMatchModel::where($where)->update($up_data);
+        BqMatchModel::where($where)->update($up_data);
+
+        //更新赛事结果 表
+        $result_where = [
+            ['start_time','>',date('Y-m-d H:i:s',$time_unx_min)],
+            ['start_time','<',date('Y-m-d H:i:s',$time_unx_max)],
+            ['status','=',0]
+        ];
+        $result_up_data = ['status'=>6];
+        ZqResultModel::where($result_where)->update($result_up_data);
+        LqResultModel::where($result_where)->update($result_up_data);
+        WqResultModel::where($result_where)->update($result_up_data);
+        BqResultModel::where($result_where)->update($result_up_data);
+    }
 
 }

+ 3 - 2
app/Http/Model/StZqResult.php

@@ -527,8 +527,9 @@ class StZqResult extends Model
         if($match_id > 0 and !empty($warn_data)){
             $data = [];
             foreach($warn_data as $k=>$v){
-                $data[$k]['timei'] = $v['find_time'];
-                $data[$k]['rtype'] = $v['warn_name'];
+                $data[$k]['timei'] = $v['find_time'];//危险球时间
+                $data[$k]['rtype'] = $v['warn_name'];//危险球名称
+                $data[$k]['warn_type'] = $v['warn_type'];//危险球类型  1 进球无效 2红卡无效 3无效(用于角球)
                 $data[$k]['timep'] = 90;
 
             }

+ 27 - 0
app/Logic/DataLogic.php

@@ -30,6 +30,7 @@ use App\Http\Model\St_area_country as StAreaCountryModel;
 use App\Http\Model\St_set_sports_record as St_set_sports_recordModel;
 use App\Http\Model\St_team as StTeamModel;
 use App\Models\SportsNoteList as SportsNoteListModel;
+use App\Http\Model\StZqMatch as StMatchModel;
 
 class DataLogic
 {
@@ -2040,6 +2041,32 @@ class DataLogic
         return $set_match_r;
     }
 
+    /**
+     * 定时执行 处理到时间应该开始而未开始的赛事
+     * 每分钟执行一次
+     */
+    public function HandleMatch()
+    {
+        try {
+            //开启事务
+            DB::beginTransaction();
+            $time = 60;//60 秒
+            //处理指定时间内的赛事
+            StMatchModel::HandleMatch($time);
+            //提交事务
+            DB::commit();
+            //写请求数据 日志记录
+            if ($this->isRecord) commonFunction::SET_SPORTS_RECORD('all', [], 'HandleMatch', Response::success());
+            return Response::success();
+        } catch (\Exception $e) {
+            //回滚事务
+            DB::rollBack();
+            //写请求数据 日志记录
+            if ($this->isRecord) commonFunction::SET_SPORTS_RECORD('all', [], 'HandleMatch', $e->getMessage());
+            return $e->getMessage();
+        }
+    }
+
 
     /**
      * 根据联赛名称 获取 国家 地区

+ 259 - 0
app/Logic/UnSettmatchLogic.php

@@ -0,0 +1,259 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Administrator
+ * Date: 2019/7/15
+ * Time: 16:51
+ */
+
+namespace App\Logic;
+
+use App\Models\Account;
+use Illuminate\Database\Capsule\Manager as DB;
+use datainf\pplus\Instance;
+use datainf\lib\GlobConfigs;
+
+use App\Lib\ModelBase;
+use App\Http\Response\Response;
+use App\Models\SportsNoteList as MoneyBuySimplexModel;
+use App\Models\MoneyBuyStr as MoneyBuyStrModel;
+use App\Models\MoneyBuyMatch as MoneyBuyMatchModel;
+use App\Models\Money_details as MoneyDetailsModel;
+use App\Models\Setinfo as SetinfoModel;
+
+
+//按赛事撤销操作(批量优化版)
+class UnSettmatchLogic
+{
+    use Instance;
+    protected $redis = '';
+    private $fanshui = 0.1;       //默认返水比例
+
+    protected $game_code = '';
+    protected $match_id = 0;
+    protected $resultObj = ''; //比赛结果记录对像
+
+    public function doUnsetMatch($request, $response, $datas)
+    {
+        $match_id = isset($datas['match_id']) ? intval($datas['match_id']) : 0;
+        $game_code = isset($datas['game_code']) ? trim($datas['game_code']) : '';
+        $result = $this->getResult($game_code, $match_id);
+
+        if (empty($match_id) || empty($game_code) || empty($result) || !in_array($game_code, ['zq', 'lq', 'bq', 'wq'])) {
+            $msg = date("Y-m-d H:i:s") . " 取消赛事处理--参数错误!\n";
+            $this->backandret($response, 0, $msg, $datas);
+            return false;
+        }
+        $this->game_code = $game_code;
+        $this->match_id = $match_id;
+        $this->resultObj = $request;
+
+        if (!in_array($result->status, [3])) {
+            $msg = date("Y-m-d H:i:s") . " 取消赛事处理--数据状态值不为[3]!\n";
+            $this->backandret($response, 0, $msg, $datas);
+            return false;
+        }
+
+        if ($this->optFlag($game_code, $match_id, 2)) {
+            $msg = date("Y-m-d H:i:s") . " 正在处理中,不能重复提交!\n";
+            $this->backandret($response, 0, $msg, $datas);
+            return false;
+        }
+
+        $this->getFanshui();
+        $this->optFlag($game_code, $match_id, 1);
+        $msg = date("Y-m-d H:i:s") . " 取消赛事处理--开始begin:game_code= $game_code  match_id= $match_id \n";
+        $this->backandret($response, 1, $msg, $datas, 1);
+
+        DB::beginTransaction();
+        try {
+            $this->doSimple();
+            $this->doStr();
+            $this->changeStatus($game_code, $match_id);
+
+            DB::commit();
+        } catch (\Exception $e) {
+
+            DB::rollBack();
+
+            $this->optFlag($game_code, $match_id, 0);
+            $msg = date("Y-m-d H:i:s") . " 取消赛事处理--异常结束:game_code= $game_code  match_id= $match_id Emsg: " . $e->getMessage();
+            $this->backandret($response, 0, '撤单失败!' . $msg, $datas);
+            return;
+        }
+
+        $this->optFlag($game_code, $match_id, 0);
+        $msg = date("Y-m-d H:i:s") . " 取消赛事处理--结束end:game_code= $game_code  match_id= $match_id \n";
+        $this->backandret($response, 1, '撤销成功!' . $msg, []);
+        return;
+    }
+
+    //返回消息和写日志
+    public function backandret($response, $code, $msg, $data, $onlylog = 0)
+    {
+        $dataRet = Response::generate('', $code, $data, $msg);
+        echo $dataRet . "\n";
+        if ($onlylog) {
+            return;
+        }
+        $response->end($dataRet);
+        return;
+    }
+
+    //得到返水的比例
+    public function getFanshui()
+    {
+        $ret = (new SetinfoModel())->getInfo(1001);
+        if (is_array($ret)) {
+            $val = floatval($ret->infocontent);
+            $this->fanshui = $val;
+            return $val;
+        }
+    }
+
+    //处理单式订单相关逻辑
+    public function doSimple()
+    {
+        $simples = $this->getSimpleOrders($this->game_code, $this->match_id);
+        if (empty($simples)) {
+            return;
+        }
+        $useraccs = [];
+        foreach ($simples as $item) {
+            if (!isset($useraccs[$item->account_identity])) {
+                $useraccs[$item->account_identity] = $item->account_identity;
+            }
+        }
+        //关联用户
+        $userInents = $this->getAccountIdents($useraccs);
+        //用户资金变化记录,以后好一次性更新用户余额
+        $userInents_money = [];
+        foreach ($simples as $item) {
+            $gain_money = $item->gain_money;
+            if ($gain_money <= 0.01) {
+                $return_money = $item->money * (1 - $this->fanshui);
+            } else {
+                $return_money = $gain_money - $item->money * (1 - $this->fanshui);
+            }
+
+
+        }
+
+
+    }
+
+
+    //处理串式订单相关逻辑
+    public function doStr()
+    {
+        $simples = $this->getStrOrders($this->game_code, $this->match_id);
+        if (empty($simples)) {
+            return;
+        }
+
+
+    }
+
+    //得到某个账户的信息,主要是余额情况
+    public function getAccountIdents($account_identity_array)
+    {
+        $model = new Account();
+        $ret = [];
+        $return = $model->with('detail')->whereIn('identity', $account_identity_array)->get();
+        if ($return) {
+            foreach ($return as $item) {
+                $ret[$item->identity] = $item;
+            }
+        }
+        return $ret;
+    }
+
+
+    public function changeStatus($game_code, $match_id)
+    {
+        $table = 'st_' . $game_code . '_result';
+        $ret = DB::name($table)->where('match_id', $match_id)->update(['status' => 4]);
+        return $ret;
+    }
+
+    //得到比赛结果 ,看是不已结算等信息
+    public function getResult($game_code, $match_id)
+    {
+        $table = 'st_' . $game_code . '_result';
+        $ret = DB::table($table)->where(['match_id', $match_id])->first();
+        return $ret;
+    }
+
+    //得到 有此赛事的单式订单
+    public function getSimpleOrders($game_code, $match_id)
+    {
+        $model = new MoneyBuySimplexModel();
+        $rets = $model->with('matchdatas')->where(['game_code' => $game_code, 'match_id' => $match_id])->get();
+        return $rets;
+    }
+
+    //得到 有此赛事的串式订单
+    public function getStrOrders($game_code, $match_id)
+    {
+        $model = new MoneyBuyStrModel();
+        $model2 = new MoneyBuyMatchModel();
+        $rets2 = $model2->getByAttrs(['match_id' => $match_id, 'bet_type' => 2, 'game_code' => $game_code]);
+        $orders = [];
+        if ($rets2) {
+            foreach ($rets2 as $item) {
+                $orders[] = $item->order_id;
+            }
+        } else {
+            return [];
+        }
+
+        $rets = $model->with('matchdatas')->where(['game_code' => $game_code, 'match_id' => $match_id])->whereIn('order_id', $orders)->get();
+        return $rets;
+    }
+
+    //获取相关的订单费用及系统赚送的钱(用于返还)
+    public function getMoneyDetail($ordesArray)
+    {
+        $model = new MoneyDetailsModel();
+        $ret = $model->whereIn('trace_id', $ordesArray)->get();
+        return $ret;
+    }
+
+    //设置操作标志位,防止事务未处理完,再次提交的情况
+    //opt 0删除  1设置 2查询
+    public function optFlag($game_code, $match_id, $opt = 2)
+    {
+        $key = 'Unsetmatch:' . $game_code . '_' . $match_id;
+        $redis = $this->getRedis();
+        if ($opt == 0) {
+            $redis->del($key);
+            return true;
+        }
+        if ($opt == 1) {
+            $redis->setex($key, 300, time());
+            return;
+        }
+
+        if ($opt == 2) {
+            $ret = $redis->get($key);
+            return $ret;
+        }
+    }
+
+    public function getRedis()
+    {
+        if ($this->redis) {
+            return $this->redis;
+        }
+        $config = GlobConfigs::getKey('redis');
+        $redis = new \Redis();
+        $redis->connect($config['host'], $config['port']);
+        $redis->auth($config['auth']);
+        $redis->select($config['db']);
+
+        $this->redis = $redis;
+        return $redis;
+    }
+
+
+}

+ 23 - 0
app/Models/Account.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Capsule\Manager as DB;
+
+/**
+ *
+ * @property mixed account_identity
+ */
+class Account extends BaseModel
+{
+    protected $table = "account";
+    public $timestamps = false;
+
+    public function detail()
+    {
+        return $this->hasOne(Account_detailed::class, 'account_inentity', 'identity');
+    }
+
+}
+
+?>

+ 121 - 111
app/Models/MoneyBuyStr.php

@@ -5,16 +5,24 @@
  * Date: 2019/4/9
  * Time: 9:18
  */
+
 namespace App\Models;
+
 use Illuminate\Database\Capsule\Manager as DB;
 
-class MoneyBuyStr extends BaseModel {
+class MoneyBuyStr extends BaseModel
+{
     protected $table = "money_buy_str";
     public $timestamps = false;
 
-    function getinfo($list = 10, $page = 1, $where = [],$ids=[])
+    public function matchdatas()
+    {
+        return $this->hasMany(MoneyBuyMatch::class, 'order_id', 'order_id');
+    }
+
+    function getinfo($list = 10, $page = 1, $where = [], $ids = [])
     {
-      
+
         /*
         if (is_array ($where) && count ($where) > 0) {
             $data = $this
@@ -35,134 +43,133 @@ class MoneyBuyStr extends BaseModel {
         */
 
         //如果$ids 有值,则为查询指定赛事注单
-        if(!empty($ids)){
+        if (!empty($ids)) {
             $data = $this
-                ->join('money_details','money_details.info_identity','=','money_buy_str.info_identity')
-                ->select('money_buy_str.id','money_buy_str.account_name','money_buy_str.account_identity','money_buy_str.order_id','money_buy_str.str_type','money_buy_str.money','money_buy_str.prize_money','money_buy_str.status','money_buy_str.money_time','money_buy_str.settle_status','money_buy_str.game_status','money_buy_str.gain_money','money_details.money_cash','money_buy_str.batch_id')
+                ->join('money_details', 'money_details.info_identity', '=', 'money_buy_str.info_identity')
+                ->select('money_buy_str.id', 'money_buy_str.account_name', 'money_buy_str.account_identity', 'money_buy_str.order_id', 'money_buy_str.str_type', 'money_buy_str.money', 'money_buy_str.prize_money', 'money_buy_str.status', 'money_buy_str.money_time', 'money_buy_str.settle_status', 'money_buy_str.game_status', 'money_buy_str.gain_money', 'money_details.money_cash', 'money_buy_str.batch_id')
                 ->where($where)
-                ->wherein('money_buy_str.order_id',$ids)
-                ->orderby('money_buy_str.money_time','desc')
-                ->paginate ($list);
-        }else{
+                ->wherein('money_buy_str.order_id', $ids)
+                ->orderby('money_buy_str.money_time', 'desc')
+                ->paginate($list);
+        } else {
             $data = $this
-                ->join('money_details','money_details.info_identity','=','money_buy_str.info_identity')
-                ->select('money_buy_str.id','money_buy_str.account_name','money_buy_str.account_identity','money_buy_str.order_id','money_buy_str.str_type','money_buy_str.money','money_buy_str.prize_money','money_buy_str.status','money_buy_str.money_time','money_buy_str.settle_status','money_buy_str.game_status','money_buy_str.gain_money','money_details.money_cash','money_buy_str.batch_id')
+                ->join('money_details', 'money_details.info_identity', '=', 'money_buy_str.info_identity')
+                ->select('money_buy_str.id', 'money_buy_str.account_name', 'money_buy_str.account_identity', 'money_buy_str.order_id', 'money_buy_str.str_type', 'money_buy_str.money', 'money_buy_str.prize_money', 'money_buy_str.status', 'money_buy_str.money_time', 'money_buy_str.settle_status', 'money_buy_str.game_status', 'money_buy_str.gain_money', 'money_details.money_cash', 'money_buy_str.batch_id')
                 ->where($where)
-                ->orderby('money_buy_str.money_time','desc')
-                ->paginate ($list);
+                ->orderby('money_buy_str.money_time', 'desc')
+                ->paginate($list);
         }
 
 
-
         if (!$data < 0) {
             return -2021052003; //
         }
 
         //足球赛事
-        $zqmatch =  \App\Models\SportsSoccer::where('status','<>','4')->where('status','<>','6')->get();
+        $zqmatch = \App\Models\SportsSoccer::where('status', '<>', '4')->where('status', '<>', '6')->get();
         //篮球赛事
-        $lqmatch =  \App\Models\SportsBasket::where('status','<>','4')->where('status','<>','6')->get();
+        $lqmatch = \App\Models\SportsBasket::where('status', '<>', '4')->where('status', '<>', '6')->get();
         //网球赛事
-        $wqmatch =  \App\Models\SportsTennis::where('status','<>','4')->where('status','<>','6')->get();
+        $wqmatch = \App\Models\SportsTennis::where('status', '<>', '4')->where('status', '<>', '6')->get();
         //棒球赛事
-        $bqmatch =  \App\Models\SportsBase::where('status','<>','4')->where('status','<>','6')->get();
+        $bqmatch = \App\Models\SportsBase::where('status', '<>', '4')->where('status', '<>', '6')->get();
 
         //反水
-        $water_return_money = \App\Models\Money_details::where('trade_type','7')->get();
+        $water_return_money = \App\Models\Money_details::where('trade_type', '7')->get();
 
         //注单作废
-        $invalid_money = \App\Models\Money_details::where('trade_type','3')->get();
+        $invalid_money = \App\Models\Money_details::where('trade_type', '3')->get();
 
         //订单投注的玩法
-        $content = \App\Models\MoneyBuyMatch::where('bet_type','2')->get();
-        for($c=0;$c<count($content);$c++){
-            if($content[$c]->game_code == 'zq'){
-                for($d=0;$d<count($zqmatch);$d++){
-                    if($content[$c]->match_id == $zqmatch[$d]->id){
+        $content = \App\Models\MoneyBuyMatch::where('bet_type', '2')->get();
+        for ($c = 0; $c < count($content); $c++) {
+            if ($content[$c]->game_code == 'zq') {
+                for ($d = 0; $d < count($zqmatch); $d++) {
+                    if ($content[$c]->match_id == $zqmatch[$d]->id) {
                         $content[$c]->match_status = $zqmatch[$d]->status;
                     }
                 }
             }
-            if($content[$c]->game_code == 'lq'){
-                for($d=0;$d<count($lqmatch);$d++){
-                    if($content[$c]->match_id == $zqmatch[$d]->id){
+            if ($content[$c]->game_code == 'lq') {
+                for ($d = 0; $d < count($lqmatch); $d++) {
+                    if ($content[$c]->match_id == $zqmatch[$d]->id) {
                         $content[$c]->match_status = $zqmatch[$d]->status;
                     }
                 }
             }
-            if($content[$c]->game_code == 'wq'){
-                for($d=0;$d<count($wqmatch);$d++){
-                    if($content[$c]->match_id == $zqmatch[$d]->id){
+            if ($content[$c]->game_code == 'wq') {
+                for ($d = 0; $d < count($wqmatch); $d++) {
+                    if ($content[$c]->match_id == $zqmatch[$d]->id) {
                         $content[$c]->match_status = $zqmatch[$d]->status;
                     }
                 }
             }
-            if($content[$c]->game_code == 'bq'){
-                for($d=0;$d<count($bqmatch);$d++){
-                    if($content[$c]->match_id == $zqmatch[$d]->id){
+            if ($content[$c]->game_code == 'bq') {
+                for ($d = 0; $d < count($bqmatch); $d++) {
+                    if ($content[$c]->match_id == $zqmatch[$d]->id) {
                         $content[$c]->match_status = $zqmatch[$d]->status;
                     }
                 }
             }
         }
 
-        for($i=0;$i<count($data);$i++){
-            if($data[$i]->status==1 && $data[$i]->settle_status==1){
-                $data[$i]->order_status = '投注'.'<br><a class="layui-btn layui-btn-sm invalid" lay-event="detail" pid="id" uri="/admin/SoccerStringNoteList/invalid/?id=" href="javascript:invalid(\'/admin/SoccerStringNoteList/invalid/?id='.$data[$i]->id.'\',\''.$data[$i]->order_id.'\');"> 作废 </a>';
-            }else if($data[$i]->status==1 && $data[$i]->settle_status==2){
+        for ($i = 0; $i < count($data); $i++) {
+            if ($data[$i]->status == 1 && $data[$i]->settle_status == 1) {
+                $data[$i]->order_status = '投注' . '<br><a class="layui-btn layui-btn-sm invalid" lay-event="detail" pid="id" uri="/admin/SoccerStringNoteList/invalid/?id=" href="javascript:invalid(\'/admin/SoccerStringNoteList/invalid/?id=' . $data[$i]->id . '\',\'' . $data[$i]->order_id . '\');"> 作废 </a>';
+            } else if ($data[$i]->status == 1 && $data[$i]->settle_status == 2) {
                 $data[$i]->order_status = '投注';
-            }else if($data[$i]->status==2){
+            } else if ($data[$i]->status == 2) {
                 $data[$i]->order_status = '作废';//.'<br><a class="layui-btn layui-btn-sm audit" lay-event="detail" pid="id" uri="" href="javascript:void(0)" style="background-color: grey;"> 已作废 </a>';
-            }else if($data[$i]->status==3){
+            } else if ($data[$i]->status == 3) {
                 $data[$i]->order_status = '撤单';//'<br><a class="layui-btn layui-btn-sm audit" lay-event="detail" pid="id" uri="" href="javascript:void(0)" style="background-color: grey;"> 已撤单 </a>';
             }
-            if($data[$i]->settle_status==1){
+            if ($data[$i]->settle_status == 1) {
                 $data[$i]->settle_status = '未结算';
-            }else if($data[$i]->settle_status==2){
+            } else if ($data[$i]->settle_status == 2) {
                 $data[$i]->settle_status = '已结算';
             }
-            if($data[$i]->game_status==0){
+            if ($data[$i]->game_status == 0) {
                 $data[$i]->game_status = '待开奖';
-            }else if($data[$i]->game_status==1){
+            } else if ($data[$i]->game_status == 1) {
                 $data[$i]->game_status = '中奖';
-            }else if($data[$i]->game_status==2){
+            } else if ($data[$i]->game_status == 2) {
                 $data[$i]->game_status = '未中奖';
             }
 
             //$str_type = str_replace('*', '串', $data[$i]->str_type);
-            $mun = explode('串',$data[$i]->str_type);
-            $data[$i]->detail_content = $data[$i]->settle_status.':'.$mun[0].' [<a class="detail" lay-event="detail" pid="id" uri="/admin/SoccerStringNoteList/detail/?id=" href="/admin/SoccerStringNoteList/detail/?id='.$data[$i]->id.'"> 详情 </a>]';
-            $data[$i]->str_type = $data[$i]->str_type.'<br>(<span>'.$data[$i]->account_name.'</span>)';
+            $mun = explode('串', $data[$i]->str_type);
+            $data[$i]->detail_content = $data[$i]->settle_status . ':' . $mun[0] . ' [<a class="detail" lay-event="detail" pid="id" uri="/admin/SoccerStringNoteList/detail/?id=" href="/admin/SoccerStringNoteList/detail/?id=' . $data[$i]->id . '"> 详情 </a>]';
+            $data[$i]->str_type = $data[$i]->str_type . '<br>(<span>' . $data[$i]->account_name . '</span>)';
 
             //反水
             $data[$i]->water_return = -1;
-            for($a=0;$a<count($water_return_money);$a++){
-                if($data[$i]->order_id == $water_return_money[$a]->trade_id){
-                    if($data[$i]->status == 2 || $data[$i]->status == 3){
+            for ($a = 0; $a < count($water_return_money); $a++) {
+                if ($data[$i]->order_id == $water_return_money[$a]->trade_id) {
+                    if ($data[$i]->status == 2 || $data[$i]->status == 3) {
                         $data[$i]->water_return = 0;
-                    }else{
+                    } else {
                         $data[$i]->water_return = $water_return_money[$a]->money;
                     }
                     //用户投注后账户金额
                     $data[$i]->frozen_cash = $water_return_money[$a]->money_cash;
                 }
             }
-            if($data[$i]->water_return == -1){
+            if ($data[$i]->water_return == -1) {
                 $data[$i]->water_return == 0;
                 //用户投注后账户金额
                 $data[$i]->frozen_cash = $data[$i]->money_cash;
             }
             //此时的结果金额
-            $data[$i]->result = $data[$i]->water_return+$data[$i]->gain_money;
+            $data[$i]->result = $data[$i]->water_return + $data[$i]->gain_money;
             //下注时间
-            $data[$i]->money_time = '下注:'.$data[$i]->money_time;
+            $data[$i]->money_time = '下注:' . $data[$i]->money_time;
             //用户投注前账户金额
-            $data[$i]->available_cash = $data[$i]->money_cash+$data[$i]->money;
-            $data[$i]->account_money = $data[$i]->available_cash.' <span>'.$data[$i]->money.' </span> '.$data[$i]->frozen_cash;
+            $data[$i]->available_cash = $data[$i]->money_cash + $data[$i]->money;
+            $data[$i]->account_money = $data[$i]->available_cash . ' <span>' . $data[$i]->money . ' </span> ' . $data[$i]->frozen_cash;
             //订单作废时账户可用余额
-            if($data[$i]->status == 2 || $data[$i]->status == 3){
-                for($b=0;$b<count($invalid_money);$b++){
-                    if($data[$i]->order_id == $invalid_money[$b]->trade_id){
+            if ($data[$i]->status == 2 || $data[$i]->status == 3) {
+                for ($b = 0; $b < count($invalid_money); $b++) {
+                    if ($data[$i]->order_id == $invalid_money[$b]->trade_id) {
                         $data[$i]->available_cash = $invalid_money[$b]->money_cash;
                         $data[$i]->account_money = $data[$i]->available_cash;
                     }
@@ -198,119 +205,122 @@ class MoneyBuyStr extends BaseModel {
     }
 
     //投注金额汇总统计
-    function MoneyCount($where = '') {
+    function MoneyCount($where = '')
+    {
         $data = array();
-        $data['all_money'] = $this->where('status','1')->sum('money');
-        $data['all_prize_money'] = $this->where('status','1')->sum('prize_money');
-        $data['alraedy_prize_money'] = $this->where('settle_status','2')->where('status','1')->sum('gain_money');
+        $data['all_money'] = $this->where('status', '1')->sum('money');
+        $data['all_prize_money'] = $this->where('status', '1')->sum('prize_money');
+        $data['alraedy_prize_money'] = $this->where('settle_status', '2')->where('status', '1')->sum('gain_money');
         if (!empty($where) && is_array($where)) {
-            $data['all_money'] = $this->where($where)->where('status','1')->sum('money');
-            $data['all_prize_money'] = $this->where($where)->where('status','1')->sum('prize_money');
-            $data['alraedy_prize_money'] = $this->where($where)->where('settle_status','2')->where('status','1')->sum('gain_money');
+            $data['all_money'] = $this->where($where)->where('status', '1')->sum('money');
+            $data['all_prize_money'] = $this->where($where)->where('status', '1')->sum('prize_money');
+            $data['alraedy_prize_money'] = $this->where($where)->where('settle_status', '2')->where('status', '1')->sum('gain_money');
         }
 
         return $data;
     }
 
     //获取串关注单详情信息
-    function getdetailinfo($id) {
-        $res = $this->where('id',$id)->first();
-        $data = \App\Models\MoneyBuyMatch::where('batch_id',$res->batch_id)->where('bet_type','2')->get();
+    function getdetailinfo($id)
+    {
+        $res = $this->where('id', $id)->first();
+        $data = \App\Models\MoneyBuyMatch::where('batch_id', $res->batch_id)->where('bet_type', '2')->get();
         $game_type = \App\Models\StGameType::get();
         $odds_code = \App\Models\Matchcode::get();
-        for($i=0;$i<count($data);$i++){
+        for ($i = 0; $i < count($data); $i++) {
 
             //当父级玩法代码为first_last_ball/half_full/capot/two_sides时,不显示赔率条件
-            if($data[$i]->p_code == 'first_last_ball' || $data[$i]->p_code == 'half_full' || $data[$i]->p_code == 'capot' || $data[$i]->p_code == 'two_sides' || $data[$i]->p_code == 'total_goal'){
+            if ($data[$i]->p_code == 'first_last_ball' || $data[$i]->p_code == 'half_full' || $data[$i]->p_code == 'capot' || $data[$i]->p_code == 'two_sides' || $data[$i]->p_code == 'total_goal') {
                 $data[$i]->condition = '';
             }
-            
-            $league = DB::table('st_'.$data[$i]->game_code.'_league')->join('st_'.$data[$i]->game_code.'_competition','st_'.$data[$i]->game_code.'_competition.lg_id','=','st_'.$data[$i]->game_code.'_league.id')->where('st_'.$data[$i]->game_code.'_league.id',$data[$i]->lg_id)->where('st_'.$data[$i]->game_code.'_competition.id',$data[$i]->match_id)->first();
-            if(!empty($league)){
+
+            $league = DB::table('st_' . $data[$i]->game_code . '_league')->join('st_' . $data[$i]->game_code . '_competition', 'st_' . $data[$i]->game_code . '_competition.lg_id', '=', 'st_' . $data[$i]->game_code . '_league.id')->where('st_' . $data[$i]->game_code . '_league.id', $data[$i]->lg_id)->where('st_' . $data[$i]->game_code . '_competition.id', $data[$i]->match_id)->first();
+            if (!empty($league)) {
                 //联赛名称
                 $data[$i]->league = $league->name_chinese;
                 //赛事开赛时间
-                $data[$i]->time = $league->match_date.' '.$league->match_time;
+                $data[$i]->time = $league->match_date . ' ' . $league->match_time;
             }
 
-            if(!empty(strstr($data[$i]->odds_code,'home',true))){
+            if (!empty(strstr($data[$i]->odds_code, 'home', true))) {
                 $data[$i]->team = $data[$i]->home_team;
             }
-            if(!empty(strstr($data[$i]->odds_code,'guest',true))){
+            if (!empty(strstr($data[$i]->odds_code, 'guest', true))) {
                 $data[$i]->team = $data[$i]->guest_team;
             }
 
-            if($data[$i]->p_code == 'half_full'){
-                $string = str_replace('home',$data[$i]->home_team,$data[$i]->odds_code);
-                $string = str_replace('guest',$data[$i]->guest_team,$string);
-                $string = str_replace('dogfall','和局',$string);
-                $string = explode('_',$string);
-                $data[$i]->team = $string['2'].'/'.$string['3'];
+            if ($data[$i]->p_code == 'half_full') {
+                $string = str_replace('home', $data[$i]->home_team, $data[$i]->odds_code);
+                $string = str_replace('guest', $data[$i]->guest_team, $string);
+                $string = str_replace('dogfall', '和局', $string);
+                $string = explode('_', $string);
+                $data[$i]->team = $string['2'] . '/' . $string['3'];
             }
 
-            for($j=0;$j<count($odds_code);$j++){
-                if($data[$i]->game_code == $odds_code[$j]->game_code && $data[$i]->odds_code == $odds_code[$j]->odds_code){
+            for ($j = 0; $j < count($odds_code); $j++) {
+                if ($data[$i]->game_code == $odds_code[$j]->game_code && $data[$i]->odds_code == $odds_code[$j]->odds_code) {
                     $data[$i]->odds_code = $odds_code[$j]->odds_name;
                 }
-                if($data[$i]->game_code == $odds_code[$j]->game_code && $data[$i]->p_code == $odds_code[$j]->odds_code){
+                if ($data[$i]->game_code == $odds_code[$j]->game_code && $data[$i]->p_code == $odds_code[$j]->odds_code) {
                     $data[$i]->p_code = $odds_code[$j]->odds_name;
                 }
             }
 
-            $data[$i]->home_guest = $data[$i]->home_team.' VS '.$data[$i]->guest_team;
-            $data[$i]->content = $data[$i]->p_code.'<br><span>'.$data[$i]->odds_code.$data[$i]->condition.'<br>'.$data[$i]->team.' @'.$data[$i]->odds.'</span>';
+            $data[$i]->home_guest = $data[$i]->home_team . ' VS ' . $data[$i]->guest_team;
+            $data[$i]->content = $data[$i]->p_code . '<br><span>' . $data[$i]->odds_code . $data[$i]->condition . '<br>' . $data[$i]->team . ' @' . $data[$i]->odds . '</span>';
 
-            for($j=0;$j<count($game_type);$j++){
-                if($data[$i]->game_code == $game_type[$j]->game_code){
+            for ($j = 0; $j < count($game_type); $j++) {
+                if ($data[$i]->game_code == $game_type[$j]->game_code) {
                     $data[$i]->game_type = $game_type[$j]->game_name;
                 }
             }
 
-            if($league->status == 0){
+            if ($league->status == 0) {
                 $data[$i]->status = '未开始';
-            }else if($league->status == 1){
+            } else if ($league->status == 1) {
                 $data[$i]->status = '正在进行';
-            }else if($league->status == 2){
+            } else if ($league->status == 2) {
                 $data[$i]->status = '已结束';
-            }else if($league->status == 3){
+            } else if ($league->status == 3) {
                 $data[$i]->status = '已结算';
-            }else if($league->status == 4){
+            } else if ($league->status == 4) {
                 $data[$i]->status = '已作废';
-            }else if($league->status == 5){
+            } else if ($league->status == 5) {
                 $data[$i]->status = '未结算';
-            }else if($league->status == 6){
+            } else if ($league->status == 6) {
                 $data[$i]->status = '已取消';
             }
 
-            if($data[$i]->result == -1){
+            if ($data[$i]->result == -1) {
                 $data[$i]->result = '输';
-            }else if($data[$i]->result == 0){
+            } else if ($data[$i]->result == 0) {
                 $data[$i]->result = '未处理';
-            }else if($data[$i]->result == 1){
+            } else if ($data[$i]->result == 1) {
                 $data[$i]->result = '赢';
-            }else if($data[$i]->result == 2){
+            } else if ($data[$i]->result == 2) {
                 $data[$i]->result = '平';
-            }else if($data[$i]->result == 3){
+            } else if ($data[$i]->result == 3) {
                 $data[$i]->result = '赢半平半';
-            }else if($data[$i]->result == 4){
+            } else if ($data[$i]->result == 4) {
                 $data[$i]->result = '输半平半';
             }
 
-            if($data[$i]->result != '未处理'){
-                $data[$i]->result = $data[$i]->result.'<br>('.$data[$i]->matchresult.')';
+            if ($data[$i]->result != '未处理') {
+                $data[$i]->result = $data[$i]->result . '<br>(' . $data[$i]->matchresult . ')';
             }
         }
         return $data->toArray();
     }
 
     //串式撤单修改状态
-    function updatestatus($data){
-        if($data){
-            for ($i=0; $i < count($data); $i++) { 
+    function updatestatus($data)
+    {
+        if ($data) {
+            for ($i = 0; $i < count($data); $i++) {
                 $the = array(
                     'status' => 2,
                 );
-                $res = $this->where('order_id',$data[$i])->update($the);
+                $res = $this->where('order_id', $data[$i])->update($the);
             }
             if (!$res) {
                 return -4010000102; //更新失败

+ 80 - 28
app/Models/SportsNoteList.php

@@ -76,10 +76,12 @@ class SportsNoteList extends BaseModel
 
 
         for ($i = 0; $i < count($data); $i++) {
-            if ($data[$i]->status == 1 && $data[$i]->settle_status == 1) {
-                $data[$i]->order_status = '投注' . '<br><a class="layui-btn layui-btn-sm invalid" lay-event="detail" pid="id" uri="/admin/SoccerNoteList/invalid/?id=" href="javascript:invalid(\'/admin/SoccerNoteList/invalid/?id=' . $data[$i]->id . '\',\'' . $data[$i]->order_id . '\',\'' . $data[$i]->name_chinese . '\');"> 作废 </a>';
-            } else if ($data[$i]->status == 1 && $data[$i]->settle_status != 1) {
-                $data[$i]->order_status = '投注';
+            /*
+             if($data[$i]->status==1 && $data[$i]->settle_status == 1){
+             $data[$i]->order_status = '投注'.'<br><a class="layui-btn layui-btn-sm invalid" lay-event="detail" pid="id" uri="/admin/SoccerNoteList/invalid/?id=" href="javascript:invalid(\'/admin/SoccerNoteList/invalid/?id=' . $data[$i]->id . '\',\''.$data[$i]->order_id.'\',\''.$data[$i]->name_chinese.'\');"> 作废 </a>';
+             }
+            else if ($data[$i]->status == 1 && $data[$i]->settle_status != 1) {
+                // $data[$i]->order_status = '投注'.'<br>';
             } else if ($data[$i]->status == 2) {
                 $data[$i]->order_status = '作废';//.'<br><a class="layui-btn layui-btn-sm audit" lay-event="detail" pid="id" uri="" href="javascript:void(0)" style="background-color: grey;"> 已作废 </a>';
             } else if ($data[$i]->status == 3) {
@@ -87,7 +89,7 @@ class SportsNoteList extends BaseModel
             }
             if ($data[$i]->settle_status == 1) {
                 $data[$i]->settle_status = '未结算';
-            } else {
+            } else{
                 $data[$i]->settle_status = '已结算';
             }
             if ($data[$i]->game_status == 0) {
@@ -95,6 +97,36 @@ class SportsNoteList extends BaseModel
             } else {
                 $data[$i]->game_status = '已处理';
             }
+            */
+            /*
+               if ($data[$i]->settle_status == 1) {
+                   $data[$i]->settle_status = '未结算';
+               } else{
+                   $data[$i]->settle_status = '已结算';
+               }
+               */
+            if ($data[$i]->settle_status == 1) {
+                $settle_status = '未结算';
+            } else{
+                $settle_status = '已结算';
+            }
+            if($data[$i]->status==1 && $data[$i]->settle_status == 1){
+                $data[$i]->order_status = '投注<br>'.$settle_status;
+            }
+            else if ($data[$i]->status == 1 && $data[$i]->settle_status != 1) {
+                // $data[$i]->order_status = '投注'.'<br>';
+                $data[$i]->order_status = '投注<br>'.$settle_status;
+
+            } else if ($data[$i]->status == 2) {
+                $data[$i]->order_status = '作废<br>'.$settle_status;//.'<br><a class="layui-btn layui-btn-sm audit" lay-event="detail" pid="id" uri="" href="javascript:void(0)" style="background-color: grey;"> 已作废 </a>';
+            } else if ($data[$i]->status == 3) {
+                $data[$i]->order_status = '撤单<br>'.$settle_status;//.'<br><a class="layui-btn layui-btn-sm audit" lay-event="detail" pid="id" uri="" href="javascript:void(0)" style="background-color: grey;"> 已撤单 </a>';
+            }
+            if ($data[$i]->game_status == 0) {
+                $data[$i]->game_status = '未处理';
+            } else {
+                $data[$i]->game_status = '已处理';
+            }
 
             $data[$i]->league = $data[$i]->name_chinese;
 
@@ -952,11 +984,9 @@ class SportsNoteList extends BaseModel
      * 滚球投注 获取指定时间内未审核订单
      */
     public static function getOrderData($time = 60)
-    {
-
-        $db = new \App\Models\Setinfo();
+    {$db = new \App\Models\Setinfo();
         //获取设定需审核时间 秒
-        $handle_time = $db->getInfo(1003)['infocontent'] ?: 90;
+        $handle_time =  $db->getInfo(1003)['infocontent']?:90;
 
         //获取需查询 时间条件 时间戳
         //时间区间 开始时间
@@ -966,22 +996,27 @@ class SportsNoteList extends BaseModel
 
         //拼接查询条件
         $where = [
-            ['money_time', '>', date('Y-m-d H:i:s', $time_unx_s)],
-            ['money_time', '<', date('Y-m-d H:i:s', $time_unx_e)],
-            ['roll_ratify', '=', 2]
+            ['money_time','>',date('Y-m-d H:i:s',$time_unx_s)],
+            ['money_time','<',date('Y-m-d H:i:s',$time_unx_e)],
+            ['roll_ratify','=',2]
         ];
+
         //获取 待处理订单数据
-        $order_data = self::where($where)->SELECT('id', 'match_id', 'account_name', 'account_identity', 'order_id', 'money_time', 'roll_ratify', 'money', 'gain_money')->get()->toArray();
-        if (!empty($order_data)) {
+        $order_data = self::join('money_buy_match','money_buy_match.order_id','=','money_buy_simplex.order_id')
+            ->where(['money_buy_simplex.order_id'=>'S20191025111201242070491'])
+            ->SELECT('money_buy_simplex.id','money_buy_simplex.match_id','money_buy_simplex.account_name','money_buy_simplex.account_identity','money_buy_simplex.order_id','money_buy_simplex.money_time','money_buy_simplex.roll_ratify','money_buy_simplex.money','money_buy_simplex.gain_money','money_buy_match.p_code')
+            ->get()
+            ->toArray();
+        if(!empty($order_data)){
 
             //获取订单所属赛事id
             $match_ids = [];
-            foreach ($order_data as $k => $v) {
+            foreach($order_data as $k=>$v){
                 $match_ids[] = $v['match_id'];
             }
 
             //去重 获取赛事危险球数据
-            $warn_json_data = StZqResult::whereIn('match_id', $match_ids)->SELECT('match_id', 'warn_more')->get()->toArray();
+            $warn_json_data = StZqResult::whereIn('match_id',$match_ids)->SELECT('match_id','warn_more')->get()->toArray();
 
             //获取审核不通过订单 订单号
             $order_ids_n = [];
@@ -991,16 +1026,33 @@ class SportsNoteList extends BaseModel
             $order_ids_y = [];
             //获取审核未通过订单 投注人
             $account_identitys = [];
-            foreach ($order_data as $k => $v) {
+            foreach($order_data as $k=>$v){
                 //获取每个订单的危险球数据
-                $warn_data = commonFunction::filter_by_value($warn_json_data, 'match_id', $v['match_id']);
-                $warn_data_arr = json_decode($warn_data['warn_more'], true);
+                $warn_data = commonFunction::filter_by_value($warn_json_data,'match_id',$v['match_id']);
+                $warn_data_arr = json_decode($warn_data['warn_more'],true);
                 //投注时间 时间戳
                 $order_time = strtotime($v['money_time']);
-                foreach ($warn_data_arr as $kk => $vv) {
+                foreach($warn_data_arr as $kk=>$vv){
                     //危险球时间 时间戳
                     $warn_time = strtotime($vv['timei']);
-                    if ($order_time < $warn_time and ($order_time + $handle_time) > $warn_time) {
+                    //危险球类型 可能的值:1 进球无效 2红卡无效 3无效(用于角球)
+                    $warn_type = $vv['warn_type'];
+                    //审核危险球类型
+                    $v['use_mark'] = '未知类型';
+                    //确认危险球审核条件
+                    if($order_time < $warn_time and ($order_time+$handle_time) > $warn_time){
+                        //根据投注 玩法 确定 危险球审核类型
+                        if($v['p_code'] == 'CB' and $warn_type== 3){
+                            $v['use_mark'] = '进球无效';
+                        }else{
+                            if($warn_type == 1){
+                                $v['use_mark'] = '进球无效';
+                            }
+                            if($warn_type == 2){
+                                $v['use_mark'] = '红卡无效';
+                            }
+                        }
+
                         $order_ids_n[] = $v['order_id'];
                         $account_identitys[] = $v['account_identity'];
                         $order_data_n[] = $v;
@@ -1009,21 +1061,21 @@ class SportsNoteList extends BaseModel
                 }
             }
 
-            if (!empty($order_data)) {
-                foreach ($order_data as $k => $v) {
+            if(!empty($order_data)){
+                foreach($order_data as $k=>$v){
                     $order_ids_y[] = $v['order_id'];
                 }
             }
 
-            if (!empty($order_ids_n)) {
+            if(!empty($order_ids_n)){
                 //在审核时间内订单 审核不通过
-                self::HandleMoney_v2($account_identitys, $order_ids_n, $order_data_n);
+                self::HandleMoney_v2($account_identitys,$order_ids_n,$order_data_n);
             }
-            if (!empty($order_ids_y)) {
+            if(!empty($order_ids_y)){
                 //在审核时间外订单 审核通过
-                $ret_y = self::whereIn('order_id', $order_ids_y)->update(['roll_ratify' => 1, 'use_mark' => '滚球投注自动审核(危险球)通过']);
+                $ret_y = self::whereIn('order_id', $order_ids_y)->update(['roll_ratify' => 1,'use_mark'=>trans('handleOrder.handle_order_auto_pass')]);
                 //如果更新数量小于订单数量 则返回异常
-                if ($ret_y < count($order_ids_y)) throw new \Exception(Response::generate('', Response::HANDLE_ORDER_Y_ERR));
+                if($ret_y < count($order_ids_y))  throw new \Exception( Response::generate('',Response::HANDLE_ORDER_Y_ERR));
 
             }
 

+ 12 - 0
datainf/logic/HttpServerSettelement.php

@@ -16,6 +16,7 @@ use datainf\lib\GlobConfigs;
 use Illuminate\Database\Capsule\Manager as DB;
 use swoole;
 use App\Logic\SettelementLogic;
+use App\Logic\UnSettmatchLogic;
 
 
 class HttpServerSettelement
@@ -139,6 +140,12 @@ class HttpServerSettelement
             return $this->doSettelementIntoRedis($request, $response, $paras);
         }
 
+        if ($request_uri == 'UnSettelement') {
+            $this->dosubcount();
+            return $this->UnSettelement($request, $response, $paras);
+        }
+
+
         return;
     }
 
@@ -277,6 +284,11 @@ class HttpServerSettelement
         return;
     }
 
+    //按赛事撤销 ,(用户赢钱的要还回平台,输钱的还给用户) 存在已结算和未结算的情况 ,单式订单和串式订单,串式订单比较复杂(
+    private function UnSettelement($request, $response, $paras)
+    {
+        UnSettmatchLogic::getInstance()->doUnsetMatch($request, $response, $paras);
+    }
 
     private function doSettelementIntoRedis($request, $response, $paras)
     {