|
|
@@ -11,85 +11,239 @@ use Biz\Account\AccountManager;
|
|
|
* Date: 2019/3/21
|
|
|
*/
|
|
|
class Betorder extends BaseController{
|
|
|
- private $order_money = 0; //订单总金额
|
|
|
- private $bet_money = 0; //单个球类投注总金额
|
|
|
+
|
|
|
+ private $simplex_money = 0; //单式投注总额
|
|
|
public function init() {
|
|
|
$this->time = date('Y-m-d H:i:s',time());
|
|
|
$this->MC = new Moneycopy();
|
|
|
$this->M = new Money();
|
|
|
$this->accountManager = new AccountManager();
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 单式串式分类
|
|
|
+ * @param [array] $res 投注数据
|
|
|
+ * @return [array] $data
|
|
|
+ *
|
|
|
+ */
|
|
|
+ public function Classify(array $res){
|
|
|
+ if(empty($res)){
|
|
|
+ Render('', '7003',lang('Errors','Api')->get('error-7003'));
|
|
|
+ }
|
|
|
+// $res = [
|
|
|
+// [
|
|
|
+// "type" => 1,
|
|
|
+// 'index' => 0,
|
|
|
+// 'bet_amount'=> 2000
|
|
|
+// ],
|
|
|
+// [
|
|
|
+// "type" => 1,
|
|
|
+// 'index' => 1,
|
|
|
+// 'bet_amount'=> 2000
|
|
|
+// ],
|
|
|
+// [
|
|
|
+// "type" => 1,
|
|
|
+// 'index' => 2,
|
|
|
+// 'bet_amount'=> 2000
|
|
|
+// ],
|
|
|
+// [
|
|
|
+// [
|
|
|
+// 'id'=>656437,
|
|
|
+// 'home_team' => "阿尔艾利开罗",
|
|
|
+// 'guest_team' => '金字塔',
|
|
|
+// 'name' => '阿尔艾利开罗',
|
|
|
+// 'odds' => 0.31,
|
|
|
+// 'p_code' => 'concede_size',
|
|
|
+// 'ballId' => 'zq',
|
|
|
+// 'match_id' => 3132384,
|
|
|
+// 'condition' => '+0/0.5',
|
|
|
+// 'odds_code' => 'concede_size',
|
|
|
+// 'bettingTime' => '',
|
|
|
+// 'odds_only' => '1dee7e98db303852227cf1e0d8085dfb1555617310.3833947',
|
|
|
+// 'type' => 1
|
|
|
+// ],
|
|
|
+// [
|
|
|
+// 'id'=>656437,
|
|
|
+// 'home_team' => "阿尔艾利开罗",
|
|
|
+// 'guest_team' => '金字塔',
|
|
|
+// 'name' => '阿尔艾利开罗',
|
|
|
+// 'odds' => 0.31,
|
|
|
+// 'p_code' => 'concede_size',
|
|
|
+// 'ballId' => 'zq',
|
|
|
+// 'match_id' => 3132384,
|
|
|
+// 'condition' => '+0/0.5',
|
|
|
+// 'ganame' => 'concede_size',
|
|
|
+// 'bettingTime' => '',
|
|
|
+// 'odds_only' => '1dee7e98db303852227cf1e0d8085dfb1555617310.3833947',
|
|
|
+// 'type' => 1
|
|
|
+// ],
|
|
|
+// [
|
|
|
+// 'id'=>656437,
|
|
|
+// 'home_team' => "阿尔艾利开罗",
|
|
|
+// 'guest_team' => '金字塔',
|
|
|
+// 'name' => '阿尔艾利开罗',
|
|
|
+// 'odds' => 0.31,
|
|
|
+// 'p_code' => 'concede_size',
|
|
|
+// 'ballId' => 'zq',
|
|
|
+// 'match_id' => 3132384,
|
|
|
+// 'condition' => '+0/0.5',
|
|
|
+// 'odds_code' => 'concede_size',
|
|
|
+// 'bettingTime' => '',
|
|
|
+// 'odds_only' => '1dee7e98db303852227cf1e0d8085dfb1555617310.3833947',
|
|
|
+// 'type' => 1
|
|
|
+// ],
|
|
|
+// ]
|
|
|
+// ];
|
|
|
+ $data['single'] = [];//单式
|
|
|
+ $data['bunch'] = [];//串式
|
|
|
+ $last[] = $res[count($res)-1];
|
|
|
+ unset($res[count($res)-1]);
|
|
|
+ foreach($res as $k => $v){
|
|
|
+ //根据类型分组
|
|
|
+ if($v['type'] == '1'){
|
|
|
+ $data['single'][$k] = array_merge($last[0][$v['index']],$v);
|
|
|
+ }else{
|
|
|
+ $data['bunch'][$k] = $v;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!empty($data['bunch'])){
|
|
|
+ $data['bunch'] = array_merge_recursive($data['bunch'],$last);
|
|
|
+ }
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
|
|
|
- public function Bet(){
|
|
|
- $userInfo = $this->getAgent();//获取用户信息
|
|
|
- $data = $_REQUEST['data'];
|
|
|
-// SELECT * FROM st_zq_odds WHERE "id" = 656437;
|
|
|
-// $data = [[
|
|
|
-//"bet_amount" => "100",
|
|
|
-//"condition" => "+0/0.5",
|
|
|
-//"game_code" => "zq",
|
|
|
-//"match_id" => "3132384",
|
|
|
-//"odds" => "0.31",
|
|
|
-//"odds_code" => "concede_size",
|
|
|
-//"odds_id" => 656437,
|
|
|
-//"odds_only"=> "1dee7e98db303852227cf1e0d8085dfb1555617310.3833947"]];
|
|
|
+ /**
|
|
|
+ * 根据赛事ID分组
|
|
|
+ * @param [array] $data 球类数据
|
|
|
+ * @return [array] $data
|
|
|
+ */
|
|
|
+ public function Group_ball($data = []){
|
|
|
if(empty($data)){
|
|
|
- Render('', '51029',lang('Errors','Api')->get('error-51029'));
|
|
|
+ return $data;
|
|
|
}
|
|
|
- //验证与判断投注了几种
|
|
|
foreach($data as $k => $v){
|
|
|
+ if(!isset($data[$v['match_id']])){
|
|
|
+ $data[$v['match_id']][] = $v;
|
|
|
+ unset($data[$k]);
|
|
|
+ }else{
|
|
|
+ $data[$v['match_id']][] = $v;
|
|
|
+ unset($data[$k]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 单式投注单个球类数据插入
|
|
|
+ * @param [array] $data 单式投注数据
|
|
|
+ * @param [array] $userInfo 用户信息
|
|
|
+ * @param [type] $game_code 球类代码
|
|
|
+ * @return [int] 1 成功 其他失败
|
|
|
+ */
|
|
|
+ public function Simplex_bet_insert($data,$userInfo,$game_code,$OrderID,$UUID){
|
|
|
+ if(empty($data)||empty($userInfo)||empty($game_code)||empty($OrderID)||empty($UUID)){
|
|
|
+ Render('', '7003',lang('Errors','Api')->get('error-7003'));
|
|
|
+ }
|
|
|
+ foreach($data as $k => $v){
|
|
|
+ $bet_money = 0; //单个球类单条总投注金额
|
|
|
+ $prize_money = 0; //可赢额
|
|
|
+ //统计该球类投注总额
|
|
|
+ foreach($v as $kk => $vv){
|
|
|
+ $bet_money += $vv['bet_amount'];
|
|
|
+ $prize_money += ($vv['odds']-1)*$bet_money;
|
|
|
+ }
|
|
|
+ $order =[
|
|
|
+ 'info_identity' => $UUID,
|
|
|
+ 'account_name' => $userInfo['account'],
|
|
|
+ 'account_identity' => $userInfo['account_identity'],
|
|
|
+ 'order_id' => $OrderID,
|
|
|
+ 'game_name' => $game_code,
|
|
|
+ 'game_no' => "",
|
|
|
+ 'match_id' => $k,
|
|
|
+ 'prize_money'=> $prize_money,
|
|
|
+ 'money' => $bet_money, //投注金额
|
|
|
+ 'codes' => json_encode($v,true), //投注信息json
|
|
|
+ 'money_time' => $this->time,
|
|
|
+ ];
|
|
|
+ $insert = lm('MoneyBuy','Api')->insert($order);
|
|
|
+ if(!$insert){
|
|
|
+ Render('','-1005',lang('errors','Api')->get('error-3205'));
|
|
|
+ }
|
|
|
+ $insertMoney = $this->M->insertMoney($userInfo['account_identity'],$bet_money,$OrderID,1,"",$UUID,$userInfo);
|
|
|
+ if($insertMoney!=1){
|
|
|
+ Render('', $insertMoney,lang('Errors','Api')->get('error'.$insertMoney));
|
|
|
+ }
|
|
|
+ $bet_money = 0; //初始化
|
|
|
+ $prize_money = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 单式投注数据处理
|
|
|
+ * @param [array] $res 单式投注数据
|
|
|
+ * @return [int] 1 成功 其他失败
|
|
|
+ *
|
|
|
+ */
|
|
|
+ public function Simplex_bet(array $res,array $userInfo){
|
|
|
+ if(empty($res)||empty($userInfo)){
|
|
|
+ Render('', '7003',lang('Errors','Api')->get('error-7003'));
|
|
|
+ }
|
|
|
+ //验证与判断投注了几种
|
|
|
+ foreach($res as $k => $v){
|
|
|
$num = $k + 1;
|
|
|
- $this->verify_gameType($v['game_code'],$num);
|
|
|
- $this->verify_match($v['game_code'],$v['odds_id'],$num);
|
|
|
-// $this->verify_odds($v['game_code'],$v['odds_id'],$v['odds_only'],$v['odds'],$v['condition'],$num);
|
|
|
+ $this->verify_match($v['game_code'],$v['match_id'],$num);
|
|
|
+ $this->verify_odds($v['game_code'],$v['odds_id'],$v['odds_only'],$v['odds'],$v['condition'],$num);
|
|
|
if(empty($v['bet_amount'])){
|
|
|
$msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5105');
|
|
|
Render([], '5105',$msg);
|
|
|
}
|
|
|
- //所需付款总金额计算
|
|
|
- $this->order_money += $v['bet_amount'];
|
|
|
+ $this->simplex_money += $v['bet_amount'];
|
|
|
//根据类型分组
|
|
|
- if(!isset($data[$v['game_code']])){
|
|
|
- $data[$v['game_code']][] = $v;
|
|
|
- unset($data[$k]);
|
|
|
+ if(!isset($res[$v['ballId']])){
|
|
|
+ $res[$v['ballId']][] = $v;
|
|
|
+ unset($res[$k]);
|
|
|
}else{
|
|
|
- $data[$v['game_code']][] = $v;
|
|
|
- unset($data[$k]);
|
|
|
+ $res[$v['ballId']][] = $v;
|
|
|
+ unset($res[$k]);
|
|
|
}
|
|
|
}
|
|
|
- //获取用户金额信息
|
|
|
- if(!$this->M->verifyMoney($this->order_money,$userInfo['cash'])){
|
|
|
- Render('', '4204',lang('Errors','Api')->get('error-4204'));
|
|
|
+ $OrderID = OrderID();//生成订单ID
|
|
|
+ $UUID = UUID(); //生成信息ID
|
|
|
+ //球类联赛分类并且插入数据库
|
|
|
+ $zq = $this->Group_ball($res['zq']);
|
|
|
+ if(!empty($zq)) $this->Simplex_bet_insert($zq,$userInfo,'zq',$OrderID,$UUID);
|
|
|
+
|
|
|
+ $lq = $this->Group_ball($res['lq']);
|
|
|
+ if(!empty($lq)) $this->Simplex_bet_insert($zq,$userInfo,'lq',$OrderID,$UUID);
|
|
|
+
|
|
|
+ $bq = $this->Group_ball($res['bq']);
|
|
|
+ if(!empty($bq)) $this->Simplex_bet_insert($zq,$userInfo,'bq',$OrderID,$UUID);
|
|
|
+
|
|
|
+ $wq = $this->Group_ball($res['wq']);
|
|
|
+ if(!empty($wq)) $this->Simplex_bet_insert($zq,$userInfo,'wq',$OrderID,$UUID);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function Bet(){
|
|
|
+ $userInfo = $this->getAgent();//获取用户信息
|
|
|
+ $data = $_REQUEST['data'];
|
|
|
+ if(empty($data)){
|
|
|
+ Render('', '51029',lang('Errors','Api')->get('error-51029'));
|
|
|
}
|
|
|
+// $order_money = $this->simplex_money; //+ $xxx;
|
|
|
+// //获取用户金额信息
|
|
|
+// if(!$this->M->verifyMoney($order_money,$userInfo['cash'])){
|
|
|
+// Render('', '4204',lang('Errors','Api')->get('error-4204'));
|
|
|
+// }
|
|
|
//执行数据插入
|
|
|
try {
|
|
|
_beginTransaction();//开启事务
|
|
|
- foreach($data as $k => $v){
|
|
|
- //统计该球类投注总额
|
|
|
- foreach($v as $kk => $vv){
|
|
|
- $this->bet_money += $vv['bet_amount'];
|
|
|
- }
|
|
|
- $OrderID = OrderID();
|
|
|
- $order =[
|
|
|
- 'info_identity' => UUID(),
|
|
|
- 'account_name' => $userInfo['account'],
|
|
|
- 'account_identity' => $userInfo['account_identity'],
|
|
|
- 'order_id' => $OrderID,
|
|
|
- 'game_name' => $k,
|
|
|
- 'game_no' => "",
|
|
|
- 'money' => $this->bet_money, //投注金额
|
|
|
- 'codes' => json_encode($v,true), //投注信息json
|
|
|
- 'money_time' => $this->time,
|
|
|
- ];
|
|
|
- $insert = lm('MoneyBuy','Api')->insert($order);
|
|
|
- if(!$insert){
|
|
|
- Render('','-1005',lang('errors','Api')->get('error-3205'));
|
|
|
- }
|
|
|
- $insertMoney = $this->M->insertMoney($userInfo['account_identity'],$this->bet_money,$OrderID,1,"",$userInfo);
|
|
|
- if($insertMoney!=1){
|
|
|
- Render('', $insertMoney,lang('Errors','Api')->get('error'.$insertMoney));
|
|
|
- }
|
|
|
- $this->bet_money = 0;
|
|
|
+ $data = $this->Classify($data);
|
|
|
+ if(!empty($data['single'])){
|
|
|
+ $this->Simplex_bet($data['single'],$userInfo);//单式数据处理
|
|
|
+ }
|
|
|
+ if(!empty($data['bunch'])){
|
|
|
+ $data_all = $data['bunch'][count($data['bunch'])-1];//获取最后一个数组
|
|
|
+ $data['bunch'] = array_pop($data['bunch'][count($data['bunch'])-1]);//删除最后一个元素
|
|
|
+ $this->stringBet($data['bunch'],$data_all,$userInfo);
|
|
|
}
|
|
|
_commit();//提交
|
|
|
Render('', '1',lang('Errors','Api')->get('error-1'));
|
|
|
@@ -116,29 +270,47 @@ class Betorder extends BaseController{
|
|
|
* @param [type] $game_code 球类代码
|
|
|
* @param [type] $odds_id 赔率ID
|
|
|
* @param [type] $num 循环键值
|
|
|
+ * $type_str 串式类型
|
|
|
*/
|
|
|
- public function verify_match($game_code,$odds_id,$num){
|
|
|
+ public function verify_match($game_code,$match_id='',$num,$type_str = ''){
|
|
|
if(empty($odds_id)){
|
|
|
- $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5107');
|
|
|
- Render([], '5107',$msg);
|
|
|
+ if($type_str){
|
|
|
+ $msg = '串式投注'.$type_str.':第'.$num.'条投注'.lang('Errors','Api')->get('error-5107');
|
|
|
+ Render([], '5107',$msg);
|
|
|
+ }else{
|
|
|
+ $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5107');
|
|
|
+ Render([], '5107',$msg);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
//根据球类代码 获取相关model
|
|
|
$models = getModels($game_code);
|
|
|
$model_odds = $models['model_odds'];
|
|
|
$model_match = $models['model_match'];
|
|
|
$info = lm($model_match,'Sports')
|
|
|
- ->join($model_odds,$model_odds.'.match_id',$model_match.'.match_id')
|
|
|
- ->select($model_match.'.status')
|
|
|
- ->where($model_odds.'.id',$odds_id)
|
|
|
- ->first();
|
|
|
- if(!$info){
|
|
|
- $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5103');
|
|
|
- Render([], '5103',$msg);
|
|
|
+ ->select('status')
|
|
|
+// ->where('status', '<', '2')
|
|
|
+// ->where('us_time','>',qgmdate('Y-m-d H:i:s','', -4))
|
|
|
+ ->where('match_id',$match_id)
|
|
|
+ ->first();
|
|
|
+ if(empty($info)){
|
|
|
+ if($type_str){
|
|
|
+ $msg = '串式投注'.$type_str.':第'.$num.'条投注'.lang('Errors','Api')->get('error-5103');
|
|
|
+ Render([], '5103',$msg);
|
|
|
+ }else{
|
|
|
+ $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5103');
|
|
|
+ Render([], '5103',$msg);
|
|
|
+ }
|
|
|
}
|
|
|
$info->toarray();
|
|
|
if($info['status'] == 2){
|
|
|
- $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5108');
|
|
|
- Render([], '5108',$msg);
|
|
|
+ if($type_str){
|
|
|
+ $msg = '串式投注'.$type_str.':第'.$num.'条投注'.lang('Errors','Api')->get('error-5108');
|
|
|
+ Render([], '5108',$msg);
|
|
|
+ }else{
|
|
|
+ $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5108');
|
|
|
+ Render([], '5108',$msg);
|
|
|
+ }
|
|
|
}
|
|
|
return $info;
|
|
|
}
|
|
|
@@ -147,16 +319,28 @@ class Betorder extends BaseController{
|
|
|
* 验证球类是否存在
|
|
|
* @param [type] $game_code 球类代码
|
|
|
* @param [type] $num 第几条
|
|
|
+ * $type_str 串式类型
|
|
|
*/
|
|
|
- public function verify_gameType($game_code,$num){
|
|
|
+ public function verify_gameType($game_code,$num,$type_str=''){
|
|
|
if(empty($game_code)){
|
|
|
- $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5102');
|
|
|
- Render([], '5102', $msg);
|
|
|
+ if($type_str){
|
|
|
+ $msg = '串式投注'.$type_str.':第'.$num.'条投注'.lang('Errors','Api')->get('error-5102');
|
|
|
+ Render([], '5102',$msg);
|
|
|
+ }else{
|
|
|
+ $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5102');
|
|
|
+ Render([], '5102', $msg);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
$info = lm('GameType','Sports')->where('game_code',$game_code)->first();
|
|
|
if(empty($info)){
|
|
|
- $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5102');
|
|
|
- Render([], '5102', $msg);
|
|
|
+ if($type_str){
|
|
|
+ $msg = '串式投注'.$type_str.':第'.$num.'条投注'.lang('Errors','Api')->get('error-5102');
|
|
|
+ Render([], '5102',$msg);
|
|
|
+ }else {
|
|
|
+ $msg = '第' . $num . '条数据' . lang('Errors', 'Api')->get('error-5102');
|
|
|
+ Render([], '5102', $msg);
|
|
|
+ }
|
|
|
}
|
|
|
return $info;
|
|
|
}
|
|
|
@@ -195,5 +379,232 @@ class Betorder extends BaseController{
|
|
|
}
|
|
|
return $info;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理串式投注
|
|
|
+ * $data_str 各串式 数据
|
|
|
+ * $data_all 所有赛事 数据
|
|
|
+ * $userInfo 用户数据
|
|
|
+ */
|
|
|
+ public function stringBet($data_str=[],$data_all=[],$userInfo=[]){
|
|
|
+ //所有串式数据
|
|
|
+ $data_str = [
|
|
|
+ [
|
|
|
+ 'type'=>'4串1',//串式名称
|
|
|
+ 'odds'=>'',//当前串式赔率
|
|
|
+ 'bet_amount'=> 1,
|
|
|
+ ],
|
|
|
+ ];
|
|
|
+
|
|
|
+ $data_all = [
|
|
|
+ [
|
|
|
+ 'id' => 887529,
|
|
|
+ 'home_team' => '阿尔艾利开罗',
|
|
|
+ 'guest_team' => '金字塔',
|
|
|
+ 'name' => '阿尔艾利开罗',
|
|
|
+ 'odds' => '1.97',
|
|
|
+ 'p_code' => 'concede_size',
|
|
|
+ 'ballId' => 'zq',
|
|
|
+ 'match_id' => 3129809,
|
|
|
+ 'condition' => '+0/0.5',
|
|
|
+ 'ganame' => 'concede_size',
|
|
|
+ 'bettingTime' =>'',
|
|
|
+ 'odds_only' => '1dee7e98db303852227cf1e0d8085dfb1555617310.3833947',
|
|
|
+ 'type' => 1,
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ 'id' => 887472,
|
|
|
+ 'home_team' => '阿尔艾利开罗',
|
|
|
+ 'guest_team' => '金字塔',
|
|
|
+ 'name' => '阿尔艾利开罗',
|
|
|
+ 'odds' => '1.84',
|
|
|
+ 'p_code' => 'concede_size',
|
|
|
+ 'ballId' => 'zq',
|
|
|
+ 'match_id' => 3124863,
|
|
|
+ 'condition' => '+0/0.5',
|
|
|
+ 'ganame' => 'concede_size',
|
|
|
+ 'bettingTime' =>'',
|
|
|
+ 'odds_only' => '1dee7e98db303852227cf1e0d8085dfb1555617310.3833947',
|
|
|
+ 'type' => 1,
|
|
|
+ ],[
|
|
|
+ 'id' => 887451,
|
|
|
+ 'home_team' => '阿尔艾利开罗',
|
|
|
+ 'guest_team' => '金字塔',
|
|
|
+ 'name' => '阿尔艾利开罗',
|
|
|
+ 'odds' => '2.05',
|
|
|
+ 'p_code' => 'concede_size',
|
|
|
+ 'ballId' => 'zq',
|
|
|
+ 'match_id' => 3133254,
|
|
|
+ 'condition' => '+0/0.5',
|
|
|
+ 'ganame' => 'concede_size',
|
|
|
+ 'bettingTime' =>'',
|
|
|
+ 'odds_only' => '1dee7e98db303852227cf1e0d8085dfb1555617310.3833947',
|
|
|
+ 'type' => 1,
|
|
|
+ ],[
|
|
|
+ 'id' => 887450,
|
|
|
+ 'home_team' => '阿尔艾利开罗',
|
|
|
+ 'guest_team' => '金字塔',
|
|
|
+ 'name' => '阿尔艾利开罗',
|
|
|
+ 'odds' => '1.83',
|
|
|
+ 'p_code' => 'concede_size',
|
|
|
+ 'ballId' => 'zq',
|
|
|
+ 'match_id' => 3127596,
|
|
|
+ 'condition' => '+0/0.5',
|
|
|
+ 'ganame' => 'concede_size',
|
|
|
+ 'bettingTime' =>'',
|
|
|
+ 'odds_only' => '1dee7e98db303852227cf1e0d8085dfb1555617310.3833947',
|
|
|
+ 'type' => 1,
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+
|
|
|
+ if(empty($data_all)){
|
|
|
+ Render($data_all, '1', lang('Tips','Sports')->get('success'));
|
|
|
+ }
|
|
|
+
|
|
|
+ //验证串式投注是否合法
|
|
|
+ $this->verify_stringType($data_all);
|
|
|
+
|
|
|
+ foreach ($data_all as $k =>$v){
|
|
|
+ //验证赛事是否存在
|
|
|
+// $this->verify_match($v['ballId'],$v['id'],$k+1,$v['match_id']);
|
|
|
+//
|
|
|
+// //验证球类代码是否有效
|
|
|
+// $this->verify_gameType($v['ballId'],$k+1);
|
|
|
+ }
|
|
|
+
|
|
|
+ //写入串式投注 所有数据 json_encode($oddsData,true)
|
|
|
+ $bet_ttr_id = lm('BetStr','Api')->insertGetId(['bet_str_all'=>json_encode($data_all,true)]);
|
|
|
+ if($bet_ttr_id < 1) Render([], '50039',lang('Errors','Api')->get('error-50039'));
|
|
|
+ //获取串式 总赛事数量
|
|
|
+ $groupNum = count($data_all);//总数量
|
|
|
+
|
|
|
+ $orderData = [];
|
|
|
+ $orderID = OrderID();
|
|
|
+ foreach ($data_str as $k=>$v){
|
|
|
+ //字符串替换
|
|
|
+ $str = str_ireplace("串","_",$v['type']);
|
|
|
+ //获取type 3_12
|
|
|
+ $after = substr($str,strpos($str,"_")+1);
|
|
|
+ //当前串式 值
|
|
|
+ $sonNum = substr($str,0,strrpos($str,"_"));
|
|
|
+ //获取倍数
|
|
|
+ if((int)$after == 1){
|
|
|
+ $multiple = $this->getMultiple($groupNum,(int)$sonNum);
|
|
|
+ }else{
|
|
|
+ $multiple =(int)$after;
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取当前串式投注金额及可赢金额
|
|
|
+ $money_all = $this->makeMoney((int)$sonNum,$v['bet_amount'],$multiple,$data_all,$after);
|
|
|
+
|
|
|
+ //投注金额
|
|
|
+ $moneyData = $money_all['moneyData'];
|
|
|
+ //可赢金额
|
|
|
+ $prize_money = $money_all['prize_money'];
|
|
|
+
|
|
|
+ $uuid = UUID();
|
|
|
+ $orderData[$k]['game_name'] = $v['type'];
|
|
|
+ $orderData[$k]['info_identity'] = $uuid;
|
|
|
+ $orderData[$k]['account_name'] = 'pengjun123';//$userInfo['account'];
|
|
|
+ $orderData[$k]['account_identity'] = 'c0ad12b7-d13f-969a-ccd2-e71473bc971b';//$userInfo['account_identity'];
|
|
|
+ $orderData[$k]['order_id'] = $orderID;
|
|
|
+ $orderData[$k]['game_no'] = "";
|
|
|
+ $orderData[$k]['money'] = $moneyData;
|
|
|
+ $orderData[$k]['bet_str_id'] = $bet_ttr_id;//投注数据
|
|
|
+ $orderData[$k]['money_time'] = $this->time;//下注时间
|
|
|
+ $orderData[$k]['prize_money'] = $prize_money;//可赢金额
|
|
|
+ }
|
|
|
+
|
|
|
+ $ret = lm('MoneyBuyStr','Api')->insert($orderData);//true
|
|
|
+ return $ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算串式投注 倍率
|
|
|
+ * $groupNum 总赛事 数量
|
|
|
+ * $sonNum 当前串式 数量
|
|
|
+ */
|
|
|
+ public function getMultiple($groupNum = 0,$sonNum = 0){
|
|
|
+
|
|
|
+ if($groupNum and $sonNum){
|
|
|
+ $group =1;
|
|
|
+ for($i = $groupNum ; $i >($groupNum - $sonNum);$i--) {
|
|
|
+ $group = $group * $i;
|
|
|
+ }
|
|
|
+
|
|
|
+ $son =1;
|
|
|
+ for($i = $sonNum ; $i >0;$i--) {
|
|
|
+ $son = $son * $i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $group/$son;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算串式投注 赔率
|
|
|
+ */
|
|
|
+ public function getOddsStr(){
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param int $sonNum 当前串式数量
|
|
|
+ * @param int $bet_amount 当前串式投注额
|
|
|
+ * @param int $multiple 当前串式倍数
|
|
|
+ * @param array $data_all 当前注单 所有投注数据
|
|
|
+ * @return mixed
|
|
|
+ * 计算当前串式投注总额、可赢总额
|
|
|
+ */
|
|
|
+ public function makeMoney($sonNum=0,$bet_amount=0,$multiple=0,$data_all=[],$after = 0){
|
|
|
+ $allNum = count($data_all);//所有数量
|
|
|
+ $odds_all = [];//所有投注项数据
|
|
|
+ foreach ($data_all as $k=>$v){
|
|
|
+ $odds_all[] = $v['odds'];
|
|
|
+ }
|
|
|
+ //投注总额
|
|
|
+ $data['moneyData'] = (double)$bet_amount*(double)$multiple;
|
|
|
+ if($sonNum == $allNum and (int)$after ==1){//N场赛事 N串一
|
|
|
+ //获取所有赛事赔率乘积
|
|
|
+ $odds = array_product($odds_all);
|
|
|
+ //获取可赢金额
|
|
|
+ $data['prize_money'] = floor($bet_amount*($odds-1)*100)/100;//保留两位小数
|
|
|
+ }
|
|
|
+
|
|
|
+ if($sonNum < $allNum and (int)$after ==1){//例:N场赛事 <N串一
|
|
|
+ $group = combination($odds_all, $sonNum);
|
|
|
+
|
|
|
+ foreach ($group as $k=>$v){
|
|
|
+ $odds[] = array_product($v);
|
|
|
+ }
|
|
|
+ $odds = (array_sum($odds))-(count($odds));
|
|
|
+
|
|
|
+ //获取可赢金额
|
|
|
+ $data['prize_money'] = floor($bet_amount*($odds)*100)/100;//保留两位小数
|
|
|
+ }
|
|
|
+
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 验证串式投注 是否合法
|
|
|
+ * $data 串式 所有赛事
|
|
|
+ */
|
|
|
+ public function verify_stringType($data=[]){
|
|
|
+ if($data){
|
|
|
+ foreach($data as $k=>$v){
|
|
|
+ if($v['match_id']==$v['match_id']){
|
|
|
+ $r[$v['match_id']][] = $v;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if($r){
|
|
|
+ foreach ($r as $k=>$v){
|
|
|
+ if(count($v) > 1){
|
|
|
+ $msg = lang('Errors','Api')->get('error-50038');
|
|
|
+ Render([], '50038',$msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|