BetOrder.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  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 = $_REQUEST['data'];
  92. if(empty($data)){
  93. Render('', '51029',lang('Errors','Api')->get('error-51029'));
  94. }
  95. // $userInfo =[
  96. // "id" => 93985,
  97. // "identity"=>"76b04b38-e31b-691b-1eaf-19e8ed1f790a",
  98. // "account"=> "181817994081",
  99. // "status"=> 1,
  100. // "fanshui"=> 1,
  101. // "remark"=> "",
  102. // "user_type"=> 1,
  103. // "account_identity"=> "edfe719d-914b-49b1-3f73-46cae73738c2",
  104. // "register_time"=> "2019-04-09 18:16:06",
  105. // "register_ip"=>"127.0.0.1",
  106. // "last_time"=> "2019-04-12 10:58:12.242624",
  107. // "last_ip"=> "127.0.0.1",
  108. // "grade"=> 0,
  109. // "email"=> "",
  110. // "phone"=>"18181799409",
  111. // "invitation"=>"",
  112. // "available_cash"=> "800.00",
  113. // "cash"=>"800.00",
  114. // "frozen_cash"=>"0.00",
  115. // "open_invitation"=>"93985",
  116. // "spread"=>"0",
  117. // "placing"=>"0",
  118. // "token"=>"lADqQI15550666925cb06f44ad5b6",
  119. // "statuss"=>"1",
  120. // "ranking"=>null,
  121. // "card"=>"5",
  122. // "name"=>"junghwi1",
  123. // "show"=> "0",
  124. // "img_url"=> null,
  125. // "qq"=>"",
  126. // "register_url"=> "www.weba.com",
  127. // "last_url"=> "www.weba.com",
  128. // "group_code"=> "0,1,",
  129. // "group_name"=> "|普通会员|",
  130. // "parent_id"=> null,
  131. // "parent_path"=> null,
  132. // "level"=> 2,
  133. // "finance_cash"=> null,
  134. // "img_id"=> null,
  135. // "wechat"=> "",
  136. // "og_type"=> 1,
  137. // "now_game"=> null,
  138. // "ip"=>"127.0.0.1",
  139. // ];//
  140. $userInfo = $this->getAgent();//获取用户信息
  141. //验证与判断投注了几种
  142. foreach($data as $k => $v){
  143. $num = $k + 1;
  144. $this->verify_gameType($v['game_code'],$num);
  145. $this->verify_match($v['game_code'],$v['match_id'],$num);
  146. $this->verify_league($v['game_code'],$v['lg_id'],$num);
  147. $this->verify_odds($data['game_code'],$v['odds_id'],$v['odds_only'],$v['odds'],$v['condition'],$num);
  148. if(empty($v['bet_amount'])){
  149. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5105');
  150. Render([], '5105',$msg);
  151. }
  152. //所需付款总金额计算
  153. $this->order_money += $v['bet_amount'];
  154. //根据类型分组
  155. if(!isset($data[$v['game_code']])){
  156. $data[$v['game_code']][] = $v;
  157. unset($data[$k]);
  158. }else{
  159. $data[$v['game_code']][] = $v;
  160. unset($data[$k]);
  161. }
  162. }
  163. //获取用户金额信息
  164. if(!$this->M->verifyMoney($this->order_money,$userInfo['cash'])){
  165. Render('', '4204',lang('Errors','Api')->get('error-4204'));
  166. }
  167. //执行数据插入
  168. try {
  169. _beginTransaction();//开启事务
  170. foreach($data as $k => $v){
  171. //统计该球类投注总额
  172. foreach($v as $kk => $vv){
  173. $this->bet_money += $vv['bet_amount'];
  174. }
  175. $OrderID = OrderID();
  176. $order =[
  177. 'info_identity' => UUID(),
  178. 'account_name' => $userInfo['account'],
  179. 'account_identity' => $userInfo['account_identity'],
  180. 'order_id' => $OrderID,
  181. 'game_name' => $k,
  182. 'game_no' => "",
  183. 'money' => $this->bet_money, //投注金额
  184. 'codes' => json_encode($v,true), //投注信息json
  185. 'money_time' => $this->time,
  186. ];
  187. $insert = lm('MoneyBuy','Api')->insert($order);
  188. if(!$insert){
  189. Render('','-1005',lang('errors','Api')->get('error-3205'));
  190. }
  191. $insertMoney = $this->M->insertMoney($userInfo['account_identity'],$this->bet_money,$OrderID,1,"",$userInfo);
  192. if($insertMoney!=1){
  193. Render('', $insertMoney,lang('Errors','Api')->get('error'.$insertMoney));
  194. }
  195. $this->bet_money = 0;
  196. }
  197. _commit();//提交
  198. Render('', '1',lang('Errors','Api')->get('error-1'));
  199. } catch (Exception $e) {
  200. _rollBack();//回滚
  201. print $e->getMessage();
  202. }
  203. }
  204. /**
  205. * token获取用户详情
  206. */
  207. public function getAgent() {
  208. $checkToken = $this->accountManager->checkEffectiveTime();
  209. if ($checkToken['status'] != 1) {
  210. Render($checkToken['data'], $checkToken['status'], lang('commons')->get('user does login'));
  211. };
  212. $result = $this->accountManager->refreshToken();
  213. return $result['data'];
  214. }
  215. /**
  216. * 验证联赛是否存在
  217. * @param [type] $game_code 球类代码
  218. * @param [type] $lg_id 联赛ID
  219. * @param [type] $num 循环键值
  220. */
  221. public function verify_league($game_code,$lg_id,$num){
  222. if(empty($lg_id)){
  223. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5104');
  224. Render([], '5104',$msg);
  225. }
  226. //根据球类代码 获取相关model
  227. $models = getModels($game_code);
  228. $model_league = $models['model_match'];
  229. $info = lm($model_league,'Sports')->where('id',$lg_id)->first();
  230. if(empty($info)){
  231. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5104');
  232. Render([], '5104',$msg);
  233. }
  234. return $info;
  235. }
  236. /**
  237. * 验证赛事是否存在
  238. * @param [type] $game_code 球类代码
  239. * @param [type] $match_id 赛事ID
  240. * @param [type] $num 循环键值
  241. */
  242. public function verify_match($game_code,$match_id,$num){
  243. if(empty($match_id)){
  244. $msg = '第'.$num.'条'.lang('Errors','Api')->get('error-5103');
  245. Render([], '5103',$msg);
  246. }
  247. //根据球类代码 获取相关model
  248. $models = getModels($game_code);
  249. $model_match = $models['model_match'];
  250. $info = lm($model_match,'Sports')->where('match_id',$match_id)->first();
  251. if(empty($info)){
  252. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5103');
  253. Render([], '5103',$msg );
  254. }
  255. return $info;
  256. }
  257. /**
  258. * 验证球类是否存在
  259. * @param [type] $game_code 球类代码
  260. * @param [type] $num 第几条
  261. */
  262. public function verify_gameType($game_code,$num){
  263. if(empty($game_code)){
  264. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5102');
  265. Render([], '5102', $msg);
  266. }
  267. $info = lm('GameType','Sports')->where('game_code',$game_code)->first();
  268. if(empty($info)){
  269. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-5102');
  270. Render([], '5102', $msg);
  271. }
  272. return $info;
  273. }
  274. /**
  275. * 验证赔率是否存在
  276. * @param [type] $game_code 球类代码
  277. * @param [type] $odds_id 赔率ID
  278. */
  279. public function verify_odds($game_code,$odds_id,$odds_only,$odds,$condition,$num){
  280. if(empty($odds_id)||$odds_only||$condition||$odds){
  281. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-7029');
  282. Render([], '7029', $msg);
  283. }
  284. //根据球类代码 获取相关model
  285. $models = getModels($game_code);
  286. $model_odds = $models['model_odds'];
  287. $model_odds_record = $models['model_odds_record'];
  288. $info = lm($model_odds,'Sports')
  289. ->join($model_odds_record,$model_odds_record.'.odds_only',$model_odds.'.odds_only')
  290. ->select($model_odds_record.'.odds',$model_odds_record.'.condition')
  291. ->where($model_odds.'.odds_only',$odds_only)
  292. ->first();
  293. if(!$info){
  294. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-7029');
  295. Render([], '7029', $msg);
  296. }
  297. $info->toarray();
  298. if($odds != $info['odds']){
  299. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-7029');
  300. Render([], '7029', $msg);
  301. }
  302. if($condition = $info['condition']){
  303. $msg = '第'.$num.'条数据'.lang('Errors','Api')->get('error-7029');
  304. Render([], '7029', $msg);
  305. }
  306. return $info;
  307. }
  308. }