vali 6 年之前
父节点
当前提交
e54821247d
共有 1 个文件被更改,包括 191 次插入2 次删除
  1. 191 2
      app/Logic/DataLogic.php

+ 191 - 2
app/Logic/DataLogic.php

@@ -501,6 +501,17 @@ class DataLogic
 
     }
 
+    //将数组按按指定健名,重新生成新的数组,key在存在并且 值不能重复
+    private function ArrayKeySet(Array $array, $key)
+    {
+        $ret = [];
+        foreach ($array as $val) {
+            $ret[$val[$key]] = $val;
+        }
+        return $ret;
+    }
+
+
     /*
      * 写 普通 赔率 数据
      * 每个请求 只包含 一场赛事下 N条赔率
@@ -519,6 +530,186 @@ class DataLogic
             //不是 赔率 数据
             if ($getData['title'] != 'odds') throw new \Exception(Response::generate('不是赔率数据,', Response::ABNORMAL));
 
+            //获取球类代码
+            $game_code = $getData['game_code'];
+            //获取数据源
+            $source = $getData['source'];
+            //获取源数据联赛ID
+            $uuid = $getData['uuid'];
+            //获取源数据赛事ID
+            $s_match_id = $getData['match_id'];
+            //获取赔率所属赛事 tag 值 玩法数量
+            $tag = $getData['tag'] ?: 99;
+            //获取赔率是否是串场
+            $is_stringscene = $getData['is_stringscene'];
+
+            //获取球类名称
+            $gameName = gameModel::getGameName($game_code);
+            //验证本次请求所属联赛/赛事是否存在 返回本地联赛/赛事ID
+            $models = commonFunction::getModels($game_code, 1);
+
+            $lg_id = $this->leagueVerify($models, $uuid, $source, $gameName);
+            $match_id = $this->matchVerify($models, $s_match_id, $source, $gameName);
+
+            //更新赛事 tag 值
+            //如果未获取到本地赛事id,则返回异常
+            if (empty($match_id)) throw new \Exception(Response::generate($gameName . '赛事-match_id:' . $s_match_id . ';', Response::L_MATCH_ID_ERR));
+
+            $upMatch = $models['model_match']::where(['id' => $match_id])
+                ->update(['tag' => $tag, 'utime' => date('Y-m-d H:i:s')]);
+            if ($upMatch < 1) throw new \Exception(Response::generate($gameName . '赛事-match_id:' . $s_match_id . ';', Response::UPMATCHTAG_ERROR));
+
+            //获取 赔率数据
+            $oddsData = $getData['data'];
+
+            //===追加处理赔率过滤===
+            //获取当前赛事 在本地的所有赔率
+            $l_odds_data = $models['model_odds']::select('odds_only')->where(['match_id' => $match_id, 'is_stringscene' => $is_stringscene])->get()->toArray();
+            //获取请求待写入数据
+            $setOddsData = [];
+            //获取本地待删除数据
+            $delOddsData = [];
+            //本地没有该赛事赔率,则直接全部写入
+            if (empty($l_odds_data)) {
+                $setOddsData = $oddsData;
+            } //本地有该赛事赔率,则分别获取需写入/删除的数据
+            else {
+                $newodds_t = $this->ArrayKeySet($oddsData, 'odds_only');
+                $oldodds_t = $this->ArrayKeySet($l_odds_data, 'odds_only');
+                foreach ($newodds_t as $key => $val) {
+                    if (isset($oldodds_t[$key])) {
+                        unset($newodds_t[$key]);
+                        unset($oldodds_t[$key]);
+                    }
+                }
+                $oddsData = $newodds_t;
+                $l_odds_data = $oldodds_t;
+
+                /*
+                foreach ($oddsData as $k => $v) {
+                    foreach ($l_odds_data as $kk => $vv) {
+                        if ($v['odds_only'] == $vv['odds_only']) {
+                            unset($oddsData[$k]);
+                            unset($l_odds_data[$kk]);
+                        }
+                    }
+                }
+                */
+
+                sort($oddsData);
+                sort($l_odds_data);
+                //需写入请求数据
+                $setOddsData = $oddsData;
+                //需删除本地数据
+                $delOddsData = $l_odds_data;
+            }
+            //===end===
+
+
+            //删除本地不在请求中的数据
+            if (!empty($delOddsData)) {
+                //所有需删除数据odds_only
+                $odds_onlys = [];
+                foreach ($delOddsData as $k => $v) {
+                    $odds_onlys[] = $v['odds_only'];
+                }
+
+                $del = $models['model_odds']::whereIn('odds_only', $odds_onlys)->delete();
+                if ($del != count($odds_onlys)) throw new \Exception(Response::generate($gameName, Response::DEL_ODDS_ERR));
+            }
+
+            //写入请求中本地不存在的数据
+            if (!empty($setOddsData)) {
+                //处理待写入 赔率记录数据
+                foreach ($setOddsData as $k => $v) {
+                    //组装数据
+                    $set_odds_r[] = [
+                        'match_id' => $match_id ?: 0,
+                        'others_match_id' => $v['match_id'] ?: 0,
+                        'odds_code' => $v['odds_code'] ?: '',
+                        'status' => $v['status'] ?: 0,
+                        'sort' => $v['sort'] ?: 0,
+                        'p_code' => $v['p_code'] ?: '',
+                        'odds' => $v['odds'] ?: 0,
+                        'condition' => $v['condition'],
+                        'odds_only' => $v['odds_only'] ?: '',
+                        'source' => $v['source'] ?: '',
+                        'type' => $v['type'] ?: 0,
+                        'team' => $v['team'] ?: '',
+                        'lg_id' => $lg_id,
+                        'is_stringscene' => $is_stringscene,
+                        'others_lg_id' => $v['lg_id'],
+                        'ctime' => date('Y-m-d H:i:s'),
+                        'utime' => date('Y-m-d H:i:s'),
+                    ];
+                }
+
+                //处理待写入 赔率数据
+                foreach ($oddsData as $k => $v) {
+                    //组装数据
+                    $set_odds[] = [
+                        'match_id' => $match_id ?: 0,
+                        'others_match_id' => $v['match_id'] ?: 0,
+                        'odds_code' => $v['odds_code'] ?: '',
+                        'status' => $v['status'] ?: 0,
+                        'sort' => $v['sort'] ?: 0,
+                        'p_code' => $v['p_code'] ?: '',
+                        'odds' => $v['odds'] ?: 0,
+                        'condition' => $v['condition'],
+                        'odds_only' => $v['odds_only'] ?: '',
+                        'source' => $v['source'] ?: '',
+                        'type' => $v['type'] ?: 0,
+                        'team' => $v['team'] ?: '',
+                        'lg_id' => $lg_id,
+                        'is_stringscene' => $is_stringscene,
+                        'others_lg_id' => $v['lg_id'],
+                        'ctime' => date('Y-m-d H:i:s'),
+                        'utime' => date('Y-m-d H:i:s'),
+                        'sole' => $v['sole'],
+                        'expire_time' => date('Y-m-d H:i:s', time() + 60)
+                    ];
+                }
+
+                //写赔率记录数据
+                $ret = $models['model_odds_record']::insert($set_odds_r);
+                if ($ret != true) throw new \Exception(Response::generate($gameName . '赔率记录;', Response::ADD_ODDS_R_ERROR));
+                //写赔率 数据
+                $ret = $models['model_odds']::insert($set_odds);
+                if ($ret != true) throw new \Exception(Response::generate($gameName . '赔率;', Response::ADD_ODDS_ERROR));
+            }
+            
+            $this->writeLog($data, Response::success());
+            //提交事务
+            DB::commit();
+            return Response::success();
+        } catch (\Exception $e) {
+            //回滚事务
+            DB::rollBack();
+            $this->writeLog($data, ['file' => $e->getFile(), 'line' => $e->getLine(), 'msg' => $e->getMessage()]);
+            return $e->getMessage();
+        }
+
+    }
+
+
+    /*
+     * 写 普通 赔率 数据
+     * 每个请求 只包含 一场赛事下 N条赔率
+     */
+    public function setOdds_old($data)
+    {
+        try {
+            //开启事务
+            DB::beginTransaction();
+            $obt = $data['data'];
+
+            //请求 数据 为空
+            if (empty($obt)) throw new \Exception(Response::generate('请求数据为空,', Response::ABNORMAL));
+            $getData = $this->getAddData($obt);
+
+            //不是 赔率 数据
+            if ($getData['title'] != 'odds') throw new \Exception(Response::generate('不是赔率数据,', Response::ABNORMAL));
+
             /*
             //写请求数据 日志记录
             if($this->isRecord){
@@ -1335,9 +1526,7 @@ class DataLogic
      */
     public function getAddData($data)
     {
-
         $data = json_decode($data, true);
-
         return $data;
     }