BetOrder.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. namespace App\Api\Controller;
  3. use Biz\Money\Moneycopy;
  4. use Biz\Money\Money;
  5. use Biz\Account\AccountManager;
  6. /*
  7. * Class Register
  8. * @package App\Api\Controller
  9. * User: junghwi
  10. * Date: 2019/3/21
  11. */
  12. class Betorder extends BaseController{
  13. private $order_money = 0; //订单总金额
  14. private $bet_money = 0; //单个球类投注总金额
  15. public function init() {
  16. $this->time = date('Y-m-d H:i:s',time());
  17. $this->MC = new Moneycopy();
  18. $this->M = new Money();
  19. $this->accountManager = new AccountManager();
  20. }
  21. public function Bet(){
  22. $userInfo = $this->getAgent();//获取用户信息
  23. $data = $_REQUEST['data'];
  24. // SELECT * FROM st_zq_odds WHERE "id" = 656437;
  25. // $data = [[
  26. //"bet_amount" => "100",
  27. //"condition" => "+0/0.5",
  28. //"game_code" => "zq",
  29. //"match_id" => "3132384",
  30. //"odds" => "0.31",
  31. //"odds_code" => "concede_size",
  32. //"odds_id" => 656437,
  33. //"odds_only"=> "1dee7e98db303852227cf1e0d8085dfb1555617310.3833947"]];
  34. if(empty($data)){
  35. Render('', '51029',lang('Errors','Api')->get('error-51029'));
  36. }
  37. //验证与判断投注了几种
  38. foreach($data as $k => $v){
  39. $num = $k + 1;
  40. $this->verify_gameType($v['game_code'],$num);
  41. $this->verify_match($v['game_code'],$v['odds_id'],$num);
  42. // $this->verify_odds($v['game_code'],$v['odds_id'],$v['odds_only'],$v['odds'],$v['condition'],$num);
  43. if(empty($v['bet_amount'])){
  44. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5105');
  45. Render([], '5105',$msg);
  46. }
  47. //所需付款总金额计算
  48. $this->order_money += $v['bet_amount'];
  49. //根据类型分组
  50. if(!isset($data[$v['game_code']])){
  51. $data[$v['game_code']][] = $v;
  52. unset($data[$k]);
  53. }else{
  54. $data[$v['game_code']][] = $v;
  55. unset($data[$k]);
  56. }
  57. }
  58. //获取用户金额信息
  59. if(!$this->M->verifyMoney($this->order_money,$userInfo['cash'])){
  60. Render('', '4204',lang('Errors','Api')->get('error-4204'));
  61. }
  62. //执行数据插入
  63. try {
  64. _beginTransaction();//开启事务
  65. foreach($data as $k => $v){
  66. //统计该球类投注总额
  67. foreach($v as $kk => $vv){
  68. $this->bet_money += $vv['bet_amount'];
  69. }
  70. $OrderID = OrderID();
  71. $order =[
  72. 'info_identity' => UUID(),
  73. 'account_name' => $userInfo['account'],
  74. 'account_identity' => $userInfo['account_identity'],
  75. 'order_id' => $OrderID,
  76. 'game_name' => $k,
  77. 'game_no' => "",
  78. 'money' => $this->bet_money, //投注金额
  79. 'codes' => json_encode($v,true), //投注信息json
  80. 'money_time' => $this->time,
  81. ];
  82. $insert = lm('MoneyBuy','Api')->insert($order);
  83. if(!$insert){
  84. Render('','-1005',lang('errors','Api')->get('error-3205'));
  85. }
  86. $insertMoney = $this->M->insertMoney($userInfo['account_identity'],$this->bet_money,$OrderID,1,"",$userInfo);
  87. if($insertMoney!=1){
  88. Render('', $insertMoney,lang('Errors','Api')->get('error'.$insertMoney));
  89. }
  90. $this->bet_money = 0;
  91. }
  92. _commit();//提交
  93. Render('', '1',lang('Errors','Api')->get('error-1'));
  94. } catch (Exception $e) {
  95. _rollBack();//回滚
  96. print $e->getMessage();
  97. }
  98. }
  99. /**
  100. * token获取用户详情
  101. */
  102. public function getAgent() {
  103. $checkToken = $this->accountManager->checkEffectiveTime();
  104. if ($checkToken['status'] != 1) {
  105. Render($checkToken['data'], $checkToken['status'], lang('commons')->get('user does login'));
  106. };
  107. $result = $this->accountManager->refreshToken();
  108. return $result['data'];
  109. }
  110. /**
  111. * 赛事是否存在或结束
  112. * @param [type] $game_code 球类代码
  113. * @param [type] $odds_id 赔率ID
  114. * @param [type] $num 循环键值
  115. */
  116. public function verify_match($game_code,$odds_id,$num){
  117. if(empty($odds_id)){
  118. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5107');
  119. Render([], '5107',$msg);
  120. }
  121. //根据球类代码 获取相关model
  122. $models = getModels($game_code);
  123. $model_odds = $models['model_odds'];
  124. $model_match = $models['model_match'];
  125. $info = lm($model_match,'Sports')
  126. ->join($model_odds,$model_odds.'.match_id',$model_match.'.match_id')
  127. ->select($model_match.'.status')
  128. ->where($model_odds.'.id',$odds_id)
  129. ->first();
  130. if(!$info){
  131. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5103');
  132. Render([], '5103',$msg);
  133. }
  134. $info->toarray();
  135. if($info['status'] == 2){
  136. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5108');
  137. Render([], '5108',$msg);
  138. }
  139. return $info;
  140. }
  141. /**
  142. * 验证球类是否存在
  143. * @param [type] $game_code 球类代码
  144. * @param [type] $num 第几条
  145. */
  146. public function verify_gameType($game_code,$num){
  147. if(empty($game_code)){
  148. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5102');
  149. Render([], '5102', $msg);
  150. }
  151. $info = lm('GameType','Sports')->where('game_code',$game_code)->first();
  152. if(empty($info)){
  153. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5102');
  154. Render([], '5102', $msg);
  155. }
  156. return $info;
  157. }
  158. /**
  159. * 验证赔率是否存在
  160. * @param [type] $game_code 球类代码
  161. * @param [type] $odds_id 赔率IDkk
  162. */
  163. public function verify_odds($game_code,$odds_id,$odds_only,$odds,$condition,$num){
  164. if(empty($odds_id)||empty($odds_only)||empty($condition)||empty($odds)){
  165. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-7029');
  166. Render([], '7029', $msg);
  167. }
  168. //根据球类代码 获取相关model
  169. $models = getModels($game_code);
  170. $model_odds = $models['model_odds'];
  171. $model_odds_record = $models['model_odds_record'];
  172. $info = lm($model_odds,'Sports')
  173. ->leftjoin($model_odds_record,$model_odds_record.'.odds_only',$model_odds.'.odds_only')
  174. ->select($model_odds_record.'.odds',$model_odds_record.'.condition')
  175. ->where($model_odds.'.odds_only',$odds_only)
  176. ->first();
  177. if(!$info){
  178. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-7029');
  179. Render([], '70291', $msg);
  180. }
  181. $info->toarray();
  182. if($odds != $info['odds']){
  183. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-7029');
  184. Render([], '70292', $msg);
  185. }
  186. if($condition = $info['condition']){
  187. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-7029');
  188. Render([], '70293', $msg);
  189. }
  190. return $info;
  191. }
  192. }