BetOrder.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. <?php
  2. namespace App\Api\Controller;
  3. use BaseController\Controller;
  4. use Biz\Money\Moneycopy;
  5. use Biz\Money\Money;
  6. use Biz\Account\AccountManager;
  7. /*
  8. * Class Register
  9. * @package App\Api\Controller
  10. * User: junghwi
  11. * Date: 2019/3/21
  12. */
  13. class BetOrder extends BaseController{
  14. private $order_money = 0; //订单总金额
  15. private $bet_money = 0; //单个球类投注总金额
  16. function init() {
  17. $this->time = date('Y-m-d H:i:s',time());
  18. $this->MC = new Moneycopy();
  19. $this->M = new Money();
  20. $this->accountManager = new AccountManager();
  21. }
  22. /*
  23. * 投注方法-废弃
  24. */
  25. public function __bet_order(){
  26. $pwd = $_POST['pwd'];
  27. $data = [
  28. ['game_code'=>'zq','match_id'=>1,'lg_id'=>1,'odds_id'=>'1','bet_amount'=>100,'bet_odds'=>1],
  29. ['game_code'=>'zq','match_id'=>1,'lg_id'=>1,'odds_id'=>'1','bet_amount'=>100,'bet_odds'=>1]
  30. ];
  31. $userInfo = $this->getAgent();//用户信息
  32. $bet_amount = 0; //总金额
  33. foreach($data as $k => $v){
  34. $this->verify_gameType($v['game_code']);
  35. $this->verify_match($v['game_code'],$v['match_id']);
  36. $this->verify_league($v['game_code'],$v['lg_id']);
  37. $this->erify_odds($data['game_code'],$v['odds_id']);
  38. if(empty($v['bet_amount'])){
  39. Render('', '1002',lang('BetOrder','Api')->get('error-1002'));
  40. }
  41. if(empty($v['bet_odds'])){
  42. Render('', '1003',lang('BetOrder','Api')->get('error-1003'));
  43. }
  44. $data[$k]['win_amount'] = $v['bet_amount'] * $v['bet_odds'] - $v['bet_amount'];
  45. $data[$k]['account_id'] = $userInfo['account_id'];
  46. $data[$k]['status'] = 1;
  47. $data[$k]['order_number'] = OrderID();
  48. $data[$k]['ctime']= $this->time;
  49. $data[$k]['utime']= $this->time;
  50. $bet_amount += $v['bet_amount'];
  51. }
  52. //获取用户金额信息
  53. $getAccount = $this->MC->getAccount('4ea268f8-fb0f-2b97-dcd8-b7ae68a5c82c');
  54. if(!$this->MC->verifyMoney($bet_amount,$getAccount['cash'])){
  55. Render('', '1005',lang('BetOrder','Api')->get('error-1005'));
  56. }
  57. //交易密码验证
  58. if(!$this->MC->verifyPayPwd($userInfo['account_identity'],$pwd)){
  59. Render('', '1004',lang('BetOrder','Sports')->get('error-1004'));
  60. }
  61. try {
  62. _beginTransaction();//开启事务
  63. $extra=[];//扣款信息记录
  64. foreach($data as $k => $v){
  65. $insert = lm('st_bet_order','Sports')->insert($v);
  66. if(!$insert){
  67. Render('','-1005',lang('BetOrder','Api')->get('error-1005'));
  68. }
  69. $extra['order_number'] = $v['order_number'];
  70. $extra['money_type'] = 2;
  71. $extra['money_time'] = $v['ctime'];
  72. $extra['trade_type'] = 1;
  73. $extra['trade_desc'] = $this->MC->getDesc($userInfo['account_id'],$v['bet_amount'],$v['order_number'],1);//描述
  74. $extra['reason'] = "";//理由
  75. $updateMoney = $this->MC->updateMoney($userInfo['account_id'],$v['bet_amount'],1,$extra);
  76. if($updateMoney!=1){
  77. Render('', $updateMoney,lang('BetOrder','Api')->get($updateMoney));
  78. }
  79. }
  80. _commit();//提交
  81. Render('', '1',lang('BetOrder','Api')->get('success'));
  82. } catch (Exception $e) {
  83. _rollBack();//回滚
  84. print $e->getMessage();
  85. }
  86. }
  87. /*
  88. * 投注接口
  89. */
  90. public function bet_order(){
  91. $data = [
  92. ['game_code'=>'zq','match_id'=>1,'lg_id'=>1,'odds_id'=>'1','record_id'=> 2,'bet_amount'=>100,'bet_odds'=>1,'odds_only'=>'e5a38602e4ba44848ab303f82bd224511555376747.3722475'],
  93. ['game_code'=>'lq','match_id'=>1,'lg_id'=>1,'odds_id'=>'1','record_id'=> 2,'bet_amount'=>100,'bet_odds'=>1,'odds_only'=>'e5a38602e4ba44848ab303f82bd224511555376747.3722475'],
  94. ['game_code'=>'lq','match_id'=>1,'lg_id'=>1,'odds_id'=>'1','record_id'=> 2,'bet_amount'=>100,'bet_odds'=>1,'odds_only'=>'e5a38602e4ba44848ab303f82bd224511555376747.3722475']
  95. ];
  96. if(empty($data)){
  97. Render('', '51029',lang('Errors','Api')->get('error-51029'));
  98. }
  99. $userInfo =[
  100. "id" => 93985,
  101. "identity"=>"76b04b38-e31b-691b-1eaf-19e8ed1f790a",
  102. "account"=> "181817994081",
  103. "status"=> 1,
  104. "fanshui"=> 1,
  105. "remark"=> "",
  106. "user_type"=> 1,
  107. "account_identity"=> "edfe719d-914b-49b1-3f73-46cae73738c2",
  108. "register_time"=> "2019-04-09 18:16:06",
  109. "register_ip"=>"127.0.0.1",
  110. "last_time"=> "2019-04-12 10:58:12.242624",
  111. "last_ip"=> "127.0.0.1",
  112. "grade"=> 0,
  113. "email"=> "",
  114. "phone"=>"18181799409",
  115. "invitation"=>"",
  116. "available_cash"=> "1000.00",
  117. "cash"=>"1000.00",
  118. "frozen_cash"=>"0.00",
  119. "open_invitation"=>"93985",
  120. "spread"=>"0",
  121. "placing"=>"0",
  122. "token"=>"lADqQI15550666925cb06f44ad5b6",
  123. "statuss"=>"1",
  124. "ranking"=>null,
  125. "card"=>"5",
  126. "name"=>"junghwi1",
  127. "show"=> "0",
  128. "img_url"=> null,
  129. "qq"=>"",
  130. "register_url"=> "www.weba.com",
  131. "last_url"=> "www.weba.com",
  132. "group_code"=> "0,1,",
  133. "group_name"=> "|普通会员|",
  134. "parent_id"=> null,
  135. "parent_path"=> null,
  136. "level"=> 2,
  137. "finance_cash"=> null,
  138. "img_id"=> null,
  139. "wechat"=> "",
  140. "og_type"=> 1,
  141. "now_game"=> null,
  142. "ip"=>"127.0.0.1",
  143. ];//$this->getAgent();//用户信息
  144. //验证与判断投注了几种
  145. foreach($data as $k => $v){
  146. $num = $k + 1;
  147. // $this->verify_gameType($v['game_code'],$num);
  148. // $this->verify_match($v['game_code'],$v['match_id'],$num);
  149. // $this->verify_league($v['game_code'],$v['lg_id'],$num);
  150. // $this->verify_odds($data['game_code'],$v['odds_id'],$v['record_id'],$num);
  151. if(empty($v['bet_amount'])){
  152. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5105');
  153. Render([], '5105',$msg);
  154. }
  155. if(empty($v['bet_odds'])){
  156. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5106');
  157. Render([], '5106',$msg);
  158. }
  159. //所需付款总金额计算
  160. $this->order_money += $v['bet_amount'];
  161. //根据类型分组
  162. if(!isset($data[$v['game_code']])){
  163. $data[$v['game_code']][] = $v;
  164. unset($data[$k]);
  165. }else{
  166. $data[$v['game_code']][] = $v;
  167. unset($data[$k]);
  168. }
  169. }
  170. //获取用户金额信息
  171. // $getAccount = $this->M->getAccount($userInfo['account_identity']);
  172. // if(!$this->M->verifyMoney($this->order_money,$getAccount['cash'])){
  173. // Render('', '4204',lang('Errors','Api')->get('error-4204'));
  174. // }
  175. //执行数据插入
  176. try {
  177. _beginTransaction();//开启事务
  178. foreach($data as $k => $v){
  179. //统计该球类投注总额
  180. foreach($v as $kk => $vv){
  181. $this->bet_money += $vv['bet_amount'];
  182. }
  183. $order =[
  184. 'info_identity' => UUID(),
  185. 'account_name' => $userInfo['account'],
  186. 'account_identity' => $userInfo['account_identity'],
  187. 'order_id' => OrderID(),
  188. 'game_name' => $k,
  189. 'game_no' => "",
  190. 'money' => $this->bet_money, //投注金额
  191. 'codes' => json_encode($v,true), //投注信息json
  192. 'money_time' => $this->time,
  193. ];
  194. $insert = lm('MoneyBuy','Api')->insert($order);
  195. if(!$insert){
  196. Render('','-1005',lang('errors','Api')->get('error-3205'));
  197. }
  198. $insertMoney = $this->M->insertMoney($userInfo['account_identity'],$v['bet_amount'],$v['order_id'],1,"",$userInfo);
  199. if($insertMoney!=1){
  200. Render('', $insertMoney,lang('Errors','Api')->get('error'.$insertMoney));
  201. }
  202. $this->bet_money = 0;
  203. }
  204. _commit();//提交
  205. Render('', '1',lang('Errors','Api')->get('error-1'));
  206. } catch (Exception $e) {
  207. _rollBack();//回滚
  208. print $e->getMessage();
  209. }
  210. }
  211. /**
  212. * token获取用户详情
  213. */
  214. public function getAgent() {
  215. $checkToken = $this->accountManager->checkEffectiveTime();
  216. if ($checkToken['status'] != 1) {
  217. Render($checkToken['data'], $checkToken['status'], lang('commons')->get('user does login'));
  218. };
  219. $result = $this->accountManager->refreshToken();
  220. return $result['data'];
  221. }
  222. /**
  223. * 验证联赛是否存在
  224. * @param [type] $game_code 球类代码
  225. * @param [type] $lg_id 联赛ID
  226. * @param [type] $num 循环键值
  227. */
  228. public function verify_league($game_code,$lg_id,$num = 0){
  229. if(empty($lg_id)){
  230. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5104');
  231. Render([], '5104',$msg);
  232. }
  233. //根据球类代码 获取相关model
  234. $models = getModels($game_code);
  235. $model_league = $models['model_match'];
  236. $info = lm($model_league,'Sports')->where('id',$lg_id)->first();
  237. if(empty($info)){
  238. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5104');
  239. Render([], '5104',$msg);
  240. }
  241. return $info;
  242. }
  243. /**
  244. * 验证赛事是否存在
  245. * @param [type] $game_code 球类代码
  246. * @param [type] $match_id 赛事ID
  247. * @param [type] $num 循环键值
  248. */
  249. public function verify_match($game_code,$match_id,$num = 0){
  250. if(empty($match_id)){
  251. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5103');
  252. Render([], '5103',$msg);
  253. }
  254. //根据球类代码 获取相关model
  255. $models = getModels($game_code);
  256. $model_match = $models['model_match'];
  257. $info = lm($model_match,'Sports')->where('match_id',$match_id)->first();
  258. if(empty($info)){
  259. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5103');
  260. Render([], '5103',$msg );
  261. }
  262. return $info;
  263. }
  264. /**
  265. * 验证球类是否存在
  266. * @param [type] $game_code 球类代码
  267. * @param [type] $num 第几条
  268. */
  269. public function verify_gameType($game_code,$num = 0){
  270. if(empty($game_code)){
  271. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5102');
  272. Render([], '5102', $msg);
  273. }
  274. $info = lm('GameType','Sports')->where('game_code',$game_code)->first();
  275. if(empty($info)){
  276. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5102');
  277. Render([], '5102', $msg);
  278. }
  279. return $info;
  280. }
  281. /**
  282. * 验证赔率是否存在
  283. * @param [type] $game_code 球类代码
  284. * @param [type] $odds_id 赔率ID
  285. */
  286. public function verify_odds($game_code,$odds_id,$odds_only){
  287. if(empty($odds_id)||$odds_only){
  288. Render([], '7029', lang('Errors','Api')->get('error-7029'));
  289. }
  290. //根据球类代码 获取相关model
  291. $models = getModels($game_code);
  292. $model_odds = $models['model_odds'];
  293. $info = lm($model_odds,'Sports')->where(['id',$odds_id,'odds_id'])->first();
  294. if(empty($info)){
  295. Render([], '7029', lang('Errors','Api')->get('error-7029'));
  296. }
  297. return $info;
  298. }
  299. }