GameBetController.class.php 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524
  1. <?php
  2. namespace bibidd\Controller;
  3. use Bibidd\Controller\CommonBaseController;
  4. /**
  5. * 动物小游戏
  6. * 后台类:
  7. * AdmincrontabController
  8. */
  9. class GameBetController extends CommonBaseController
  10. {
  11. /**
  12. * 获取上一期结果
  13. * @return void
  14. */
  15. public function get_pre_result()
  16. {
  17. $this->addHeaders(); //添加头部请求
  18. $uid = $_POST['uid'];
  19. $retun_info['current'] = M("game_bet_qishu")->field("id,bet_time,bet_jiang,bet_jie_zhi")->where("bet_hit=0")->find();
  20. $pre_info = M("game_bet_qishu")->field("id,bet_result,bet_jiang,bet_zhong_jian,bet_jiang_rd,bet_zhong_jian_rd")->where("bet_hit=1")->find();
  21. //处理中奖人数
  22. $pre_info['bet_jiang']=$pre_info['bet_jiang_rd'];
  23. $pre_info['bet_zhong_jian']=$pre_info['bet_zhong_jian_rd'];
  24. unset($pre_info['bet_jiang_rd']);
  25. unset($pre_info['bet_zhong_jian_rd']);
  26. $retun_info['pre'] = $pre_info;
  27. $data['isFen'] = 'no';
  28. $is_fen = M("game_user_fenjin")->where("uid = '$uid'")->getField("uid");
  29. if(!empty($is_fen))
  30. {
  31. $data['isFen'] = 'yes'; //被封禁
  32. }
  33. $data['code'] = '200';
  34. $data['message'] = 'ok';
  35. $data['data'] = $retun_info;
  36. echo json_encode($data);
  37. }
  38. /**
  39. * 查询列表
  40. * @return void
  41. */
  42. public function query_game_list()
  43. {
  44. $this->addHeaders(); //添加头部请求
  45. $user_info = $this->checkUserIsExist($_POST['uid']); //检查用户
  46. $uid = $user_info['id']; //用户id
  47. $page = $_POST['page'];
  48. $one_size = empty($_POST['pageSize']) ? 30 : $_POST['pageSize']; //每頁30行記錄
  49. $page_one = ($page - 1) * $one_size;
  50. //期数列表
  51. $data_list = M("game_bet_qishu")->field("id,bet_time,bet_jie_zhi,bet_result,bet_hit,bet_jiang,bet_zhong_jian,bet_jiang_rd,bet_zhong_jian_rd")->order("bet_time DESC")->LIMIT($page_one, $one_size)->select();
  52. $data_list = $this->hand_touchu($data_list,$uid);
  53. $data['code'] = '200';
  54. $data['message'] = 'ok';
  55. $data['user_coin'] = $user_info['gold_coins_number'];
  56. $data['data'] = $data_list;
  57. $data['all_num'] = M("game_bet_qishu")->field("id,bet_time,bet_result,bet_jiang,bet_zhong_jian")->count();
  58. echo json_encode($data);
  59. }
  60. /**
  61. * 查询投注列表
  62. * @return void
  63. */
  64. public function query_touzhu_list()
  65. {
  66. $this->addHeaders(); //添加头部请求
  67. $user_info = $this->checkUserIsExist($_POST['uid']); //检查用户
  68. $uid = $user_info['id']; //用户id
  69. $page = $_POST['page'];
  70. $one_size = empty($_POST['pageSize']) ? 30 : $_POST['pageSize']; //每頁30行記錄
  71. $page_one = ($page - 1) * $one_size;
  72. //我投注的期数
  73. $tempList = M("game_bet_touzhu")->where("uid='$uid'")->distinct(true)->field('qishu_id')->select();
  74. $qishu_ids = array_column($tempList,'qishu_id');
  75. $sql_charu = "";
  76. foreach ($qishu_ids as $key1 => $value1) {
  77. $duifang_id = $value1;;
  78. $xianzhi_one = " or id='$duifang_id'";
  79. $sql_charu .= $xianzhi_one;
  80. }
  81. //期数列表
  82. $data_list = M("game_bet_qishu")
  83. ->field("id,bet_time,bet_jie_zhi,bet_result,bet_hit,bet_jiang,bet_zhong_jian,bet_jiang_rd,bet_zhong_jian_rd")
  84. ->where("id=0 $sql_charu")
  85. ->order("bet_time DESC")
  86. ->LIMIT($page_one, $one_size)
  87. ->select();
  88. $data_list = $this->hand_touchu($data_list,$uid);
  89. $data['code'] = '200';
  90. $data['message'] = 'ok';
  91. $data['user_coin'] = $user_info['gold_coins_number'];
  92. $data['data'] = $data_list;
  93. $data['all_num'] = M("game_bet_qishu")->field("id,bet_time,bet_result,bet_jiang,bet_zhong_jian") ->where("id=0 $sql_charu")->count();
  94. echo json_encode($data);
  95. }
  96. private function hand_touchu($data_list,$uid)
  97. {
  98. foreach ($data_list as $key => $value) {
  99. if($value['bet_hit']!=0)
  100. {
  101. //处理中奖人数
  102. $data_list[$key]['bet_jiang']=$value['bet_jiang_rd'];
  103. $data_list[$key]['bet_zhong_jian']=$value['bet_zhong_jian_rd'];
  104. unset($data_list[$key]['bet_jiang_rd']);
  105. unset($data_list[$key]['bet_zhong_jian_rd']);
  106. }
  107. $data_list[$key]['touzhu'] = null;//添加动态字段,存储投注列表
  108. $qishu_id = $value['id'];
  109. $user_touzhu = M("game_bet_touzhu")->field("id,qishu_id,touzhu_type,touzhu_jin,shu_ying,yingli,touzhu_time")->where("qishu_id='$qishu_id' AND uid='$uid'")->order("touzhu_type")->select();
  110. if (!empty($user_touzhu)) {
  111. $data_list[$key]['touzhu'] = $user_touzhu;
  112. }
  113. }
  114. //判断数组数组有2个0,则把上一期标记为正在开奖,状态为 -99
  115. if(count($data_list)>=2 && $data_list[0]['bet_hit']=='0' && $data_list[1]['bet_hit']=='0')
  116. {
  117. $data_list[1]['bet_hit']="-99";
  118. }
  119. return $data_list;
  120. }
  121. /**
  122. * 用户投注
  123. * @return void
  124. */
  125. public function bet_on()
  126. {
  127. $this->addHeaders(); //添加头部请求
  128. $user_info = $this->checkUserIsExist($_POST['uid']); //检查用户
  129. $uid = $user_info['id']; //用户id
  130. $user_coins = $user_info['gold_coins_number'];
  131. $qishu_id = $_POST['qishu_id']; //期数id
  132. $coins = $_POST['coins']; //投注金额
  133. $type = $_POST['type']; //投注类型
  134. //检查
  135. if (!ctype_digit($coins) || !ctype_digit($type)) {
  136. $this->returnDataAndSendMsg("请输入整数参数");
  137. die();
  138. }
  139. $type_arrr = array('1','2','3');
  140. if (!in_array($type,$type_arrr,true)) {
  141. $this->returnDataAndSendMsg("非法操作");
  142. die();
  143. }
  144. $is_fen = M("game_user_fenjin")->where("uid = '$uid'")->getField("uid");
  145. if(!empty($is_fen))
  146. {
  147. $this->returnDataAndSendMsg("账号违规封禁<br/>无法进行游戏");
  148. die();
  149. }
  150. if($user_coins<$coins)
  151. {
  152. $this->returnDataAndSendMsg("余额不足");
  153. die();
  154. }
  155. //期数
  156. $qishu_info = M("game_bet_qishu")->where("id = '$qishu_id'")->find();
  157. if (empty($qishu_info)) {
  158. $this->returnDataAndSendMsg("非法操作");
  159. die();
  160. }
  161. $jiezhi_time = strtotime($qishu_info['bet_jie_zhi']);//截至投注时间
  162. $current_time =time();
  163. if ($current_time >= $jiezhi_time) {
  164. $this->returnDataAndSendMsg("投注时间已截止");
  165. die();
  166. }
  167. //复投只能5次
  168. $touzhu_count = M("game_bet_touzhu")->field("id")->where("uid='$uid' AND qishu_id='$qishu_id' AND touzhu_type='$type'")->count();
  169. if(!empty($touzhu_count) && $touzhu_count>=5)
  170. {
  171. $this->returnDataAndSendMsg("同一类型动物投注次数以超过5次");
  172. die();
  173. }
  174. $this->count_bet_on($qishu_id,$type,$coins,$uid);
  175. $rs = M("user_info")->where("id='$uid' AND gold_coins_number=$user_coins")->setDec("gold_coins_number",$coins);
  176. if(!$rs)
  177. {
  178. $this->returnDataAndSendMsg("投注失败,请稍后重试");
  179. die();
  180. }
  181. //保存
  182. $save_info['qishu_id'] = $qishu_id;
  183. $save_info['uid'] = $uid;
  184. $save_info['touzhu_type'] = $type;
  185. $save_info['touzhu_jin'] = $coins;
  186. $save_info['u_ip'] = $this->getIp();
  187. $user_weizhi=$this->get_user_ip_info($save_info['u_ip']);
  188. if($user_weizhi['code']=="200" && !empty($user_weizhi['data']['region'])){
  189. $save_info['u_ip_addr']=$user_weizhi['data']['region']."省".$user_weizhi['data']['city']."市 ".$user_weizhi['data']['isp'];
  190. }else{
  191. $save_info['u_ip_addr']="暂无";
  192. }
  193. $save_info['touzhu_time'] = date('Y-m-d H:i:s');
  194. $rs = M("game_bet_touzhu")->add($save_info);
  195. if(!$rs)
  196. {
  197. M("user_info")->where("id='$uid' AND gold_coins_number=$user_coins")->setInc("gold_coins_number",$coins); //回滚用户金额
  198. $this->returnDataAndSendMsg("投注失败,请稍后重试");
  199. die();
  200. }
  201. //更新统计
  202. M("game_bet_qishu")->where("id = '$qishu_id'")->setInc("bet_amount",$coins);
  203. M("game_bet_qishu")->where("id = '$qishu_id'")->setInc("bet_count",1);
  204. $data['code'] = '200';
  205. $data['message'] = 'ok';
  206. $data['data'] =$rs;
  207. echo json_encode($data);
  208. //统计
  209. $this->touzhu_tongji_for_day($uid,$coins,0);
  210. $this->xiaofei_detail($uid,"幸运动物园下注","期数[$qishu_id],下注动物[$type]",$coins);
  211. }
  212. /**
  213. * 统计投注信息
  214. * @param $qishu_id
  215. * @param $touzhu_type
  216. * @param $touzhu_coins
  217. * @return void
  218. */
  219. private function count_bet_on($qishu_id,$touzhu_type,$touzhu_coins,$uid)
  220. {
  221. $game_count_info = M("game_bet_qishu_count")->where("qishu_id='$qishu_id' AND touzhu_leixing='$touzhu_type'")->find();
  222. if(empty($game_count_info))
  223. {
  224. //插入
  225. $add_info['qishu_id'] = $qishu_id;
  226. $add_info['touzhu_leixing'] = $touzhu_type;
  227. $add_info['touzhu_renshu'] = 1;
  228. $add_info['touzhu_leixing_coins'] = $touzhu_coins;
  229. $add_info['last_updater'] = date('Y-m-d H:i:s');
  230. $rs = M("game_bet_qishu_count")->add($add_info);
  231. if(!$rs)
  232. {
  233. M("game_bet_qishu_count")->where("qishu_id='$qishu_id' AND touzhu_leixing='$touzhu_type'")->setInc("error_coins",$touzhu_coins);
  234. $this->returnDataAndSendMsg("投注失败,请稍后重试");
  235. die();
  236. }
  237. return;
  238. }
  239. //更新
  240. $id = $game_count_info["id"];
  241. $old_coins = $game_count_info["touzhu_leixing_coins"]; //金额
  242. $old_renshu = $game_count_info["touzhu_renshu"]; //投注人数
  243. // $temp_renshu = M("game_bet_touzhu")->where("qishu_id = '$qishu_id' AND touzhu_type = '$touzhu_type'")->distinct(true)->field('uid')->select();
  244. // $update_info['touzhu_renshu'] = count($temp_renshu);
  245. //投注人数
  246. $temp_renshu = M("game_bet_touzhu")->where("uid='$uid' AND qishu_id = '$qishu_id' AND touzhu_type = '$touzhu_type'")->find();
  247. if(empty($temp_renshu))
  248. {
  249. $update_info['touzhu_renshu'] = $old_renshu+1;
  250. }
  251. $update_info['touzhu_leixing_coins'] = $old_coins+$touzhu_coins;
  252. $rs = M("game_bet_qishu_count")->where("id='$id' AND touzhu_leixing_coins='$old_coins'")->save($update_info);
  253. if(!$rs)
  254. {
  255. M("game_bet_qishu_count")->where("qishu_id='$qishu_id' AND touzhu_leixing='$touzhu_type'")->setInc("error_coins",$touzhu_coins);
  256. $this->returnDataAndSendMsg("投注失败,请稍后重试");
  257. die();
  258. }
  259. }
  260. public function test()
  261. {
  262. $this->addHeaders();
  263. $uid = $_POST['uid'];
  264. $qishu_id = $_POST['qishu_id']; //期数id
  265. $coins = $_POST['coins']; //投注金额
  266. $type = $_POST['type']; //投注类型
  267. $this->count_bet_on($qishu_id,$type,$coins,$uid);
  268. $data['code'] = '200';
  269. $data['message'] = 'ok';
  270. echo json_encode($data);
  271. }
  272. /**
  273. * 获取提款账号
  274. * @return void
  275. */
  276. public function get_card()
  277. {
  278. $this->addHeaders(); //添加头部请求
  279. $user_info = $this->checkUserIsExist($_POST['uid']); //检查用户
  280. $uid = $user_info['id']; //用户id
  281. $data['code'] = '200';
  282. $data['message'] = 'ok';
  283. $data['data'] = M("game_user_card")->where("uid='$uid'")->find();
  284. echo json_encode($data);
  285. }
  286. /**
  287. * 保存提款账号
  288. * @return void
  289. */
  290. public function save_card()
  291. {
  292. $this->addHeaders(); //添加头部请求
  293. $user_info = $this->checkUserIsExist($_POST['uid']); //检查用户
  294. $uid = $user_info['id']; //用户id
  295. $name = $_POST['name'];
  296. $card_num = $_POST['cardNum'];
  297. $bank = $_POST['bank'];
  298. if (empty($name) || empty($card_num) || empty($bank) || !ctype_digit($card_num)) {
  299. $this->returnDataAndSendMsg("请正确填写收款信息");
  300. die();
  301. }
  302. //重复添加
  303. $check_info = M("game_user_card")->field("id")->where("name_='$name' AND card_num='$card_num'")->find();
  304. if(!empty($check_info))
  305. {
  306. $this->returnDataAndSendMsg("卡片重复");
  307. die();
  308. }
  309. $save_info['uid'] = $uid;
  310. $save_info['name_'] = $name;
  311. $save_info['card_num'] = $card_num;
  312. $save_info['bank_'] = $bank;
  313. $card_info = M("game_user_card")->field("id")->where("uid='$uid'")->find();
  314. if (empty($card_info)) {
  315. $rs = M("game_user_card")->add($save_info);
  316. } else {
  317. $rs = M("game_user_card")->where("uid='$uid'")->save($save_info);
  318. }
  319. $data['code'] = '200';
  320. $data['message'] = 'ok';
  321. $data['data'] = $rs;
  322. echo json_encode($data);
  323. }
  324. /**
  325. * 用户提现
  326. * @return void
  327. */
  328. public function tx()
  329. {
  330. $this->addHeaders(); //添加头部请求
  331. $user_info = $this->checkUserIsExist($_POST['uid']); //检查用户
  332. $uid = $user_info['id']; //用户id
  333. //判断用户是否被封禁
  334. $is_fen = M("game_user_fenjin")->where("uid = '$uid'")->getField("uid");
  335. if(!empty($is_fen))
  336. {
  337. $this->returnDataAndSendMsg("违规封禁(如有疑问请联系客服)");
  338. die();
  339. }
  340. //用户余额
  341. $user_coins = $user_info['gold_coins_number'];
  342. $money = $_POST['money']; //提现金额
  343. if (empty($money) || !ctype_digit($money)) {
  344. $this->returnDataAndSendMsg("请正确填写正确金额");
  345. die();
  346. }
  347. if($user_coins<$money)
  348. {
  349. $this->returnDataAndSendMsg("余额不足");
  350. die();
  351. }
  352. //控制提现规则:保证消费金额必须大于消费金额。不管历史数据
  353. $can_tx_amount = M("game_user_tixian_count")->where("uid='$uid'")->sum("can_tixian");
  354. $tx_count = M("game_user_tixian_count")->where("uid='$uid'")->sum("tx_count"); //累计提现金额
  355. if(empty($can_tx_amount) || $can_tx_amount<=0)
  356. {
  357. //重来没有下注过
  358. $this->returnDataAndSendMsg("为防止恶意洗钱,请全额投注后在申请提现");
  359. die();
  360. }
  361. if($can_tx_amount-$tx_count-$money<0)
  362. {
  363. //重来没有下注过
  364. $this->returnDataAndSendMsg("为了避免洗钱,提款需全额投注后方可提款");
  365. die();
  366. }
  367. $current_date = date('Y-m-d');
  368. $start_time = $current_date.' 00:00:00';
  369. $end_time = $current_date.' 23:59:59';
  370. //当天提现总额
  371. $totalAmount = M("game_user_tixian")->where("uid='$uid' AND apply_time>='$start_time' AND apply_time<='$end_time'")
  372. ->sum('amount_');
  373. if(!empty($totalAmount) && $totalAmount+$money>=100000)//十万
  374. {
  375. $this->returnDataAndSendMsg("已超出当日提现最大提现额度");
  376. die();
  377. }
  378. //提现需要间隔1个小时
  379. $check_info = M("game_user_tixian")->where("uid='$uid'")->order("id DESC")->find();
  380. if(!empty($check_info))
  381. {
  382. $tx_time = $check_info['apply_time'];
  383. $now_time = time();
  384. if($now_time-strtotime($tx_time)<1*60*60)
  385. {
  386. $this->returnDataAndSendMsg("提款需间隔1小时");
  387. die();
  388. }
  389. }
  390. $rs = M("user_info")->where("id='$uid' AND gold_coins_number=$user_coins")->setDec("gold_coins_number",$money);
  391. if(!$rs)
  392. {
  393. $this->returnDataAndSendMsg("提现失败,请稍后重试");
  394. die();
  395. }
  396. //保存
  397. $save_info['uid'] = $uid;
  398. $save_info['amount_'] = $money;
  399. $save_info['apply_time'] = date("Y-m-d H:i:s");
  400. $save_info['status_'] = 0;
  401. $save_info['tongji'] = 0;
  402. $save_info['dakuan_result'] = '打款审核中';
  403. $rs = M("game_user_tixian")->add($save_info);
  404. //累加提现金额
  405. $tx_count_info = M("game_user_tixian_count")->where("uid='$uid'")->find();
  406. $tx_id = $tx_count_info['id'];
  407. $tx_count = $tx_count_info['tx_count']; //提现汇总
  408. $rs = M("game_user_tixian_count")->where("id='$tx_id' AND tx_count=$tx_count")->setInc("tx_count",$money);
  409. $data['code'] = '200';
  410. $data['message'] = 'ok';
  411. $data['data'] =$rs;
  412. echo json_encode($data);
  413. //提现统计
  414. $this->tx_tongji_for_day($uid,$money);
  415. }
  416. /**
  417. * 提现列表
  418. * @return void
  419. */
  420. public function query_tx_list()
  421. {
  422. $this->addHeaders(); //添加头部请求
  423. $user_info = $this->checkUserIsExist($_POST['uid']); //检查用户
  424. $uid = $user_info['id']; //用户id
  425. $page = $_POST['page'];
  426. $one_size = empty($_POST['pageSize']) ? 30 : $_POST['pageSize']; //每頁30行記錄
  427. $page_one = ($page - 1) * $one_size;
  428. $data_list = M("game_user_tixian")->where("uid='$uid'")->order("apply_time DESC")->LIMIT($page_one, $one_size)->select();
  429. $data['code'] = '200';
  430. $data['message'] = 'ok';
  431. $data['user_coin'] = $user_info['gold_coins_number'];
  432. $data['data'] = $data_list;
  433. $data['all_num'] = M("game_user_tixian")->where("uid='$uid'")->order("apply_time DESC")->count();
  434. echo json_encode($data);
  435. }
  436. /**
  437. * 删除统计数据,只保留当前期和上一期。
  438. * @return void
  439. */
  440. public function del_qishu_count()
  441. {
  442. $this->addHeaders(); //添加头部请求
  443. $qishu_arry = M("game_bet_qishu")->where("bet_hit in ('0','1')")->field("id")->select();
  444. $string = implode(',', array_column($qishu_arry,'id'));
  445. $rs = M("game_bet_qishu_count")->where("qishu_id NOT IN ($string)")->delete();
  446. $data['code'] = '200';
  447. $data['message'] = 'ok';
  448. $data['data'] = $string;
  449. echo json_encode($data);
  450. }
  451. }