GameAppend.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <?php
  2. namespace Biz\Pay;
  3. define('GAME_APPEND_MAX_NUM', 100);
  4. /**
  5. * game append
  6. */
  7. class GameAppend {
  8. public function update($gameName, $userId, $code, $money, $num = 1) {
  9. $data = M($gameName)->sort('open_time', 'desc')->find();
  10. $length = M($gameName)->select('count(id) as ct')->where('open_time', '')->find();
  11. if (!$data) {
  12. return -2; //无当前期数
  13. }
  14. $num = GAME_APPEND_MAX_NUM - $length['ct'];
  15. if ($num < 1) {
  16. return -3; //期数超过
  17. }
  18. $list = $this->appendGame($data['info_no'], $num);
  19. $sw = new DBExtension();
  20. $sw->B();
  21. if (is_array($list) && count($list) > 0) {
  22. foreach ($list as $k => $v) {
  23. M($gameName)->I($v);
  24. $new = array();
  25. $new['identity'] = UUID();
  26. $new['account_identity'] = $userId;
  27. $new[$gameName . '_identity'] = $v['identity'];
  28. $new['no'] = $v['info_no'];
  29. $new['money'] = $money;
  30. $new['codes'] = json_encode($code);
  31. $new['order_id'] = OrderID();
  32. $new['status'] = 0;
  33. M($gameName . '_buy')->I($new);
  34. $re = $this->updateMoney($userId, $v['identity'], $new['identity'], OrderID(), $money);
  35. if ($re < 0) {
  36. $res = $sw->C();
  37. return -4; //余额不足
  38. }
  39. }
  40. }
  41. return 1;
  42. }
  43. public function appendGame($gameNo, $num = 1, $jump = 1) {
  44. $data = array();
  45. while ($num > 0) {
  46. $row = array();
  47. $gameNo = $gameNo + $jump;
  48. $row['info_no'] = $gameNo;
  49. $row['identity'] = UUID();
  50. $row['info_identity'] = UUID();
  51. $row['open_time'] = '';
  52. $row['time'] = date('Y-m-d H:i:s');
  53. $row['status'] = 0;
  54. $row['sealingplate'] = 60;
  55. $data[] = $row;
  56. $num--;
  57. }
  58. return $data;
  59. }
  60. public function buy($game_table, $userId, $money, $no_old, $time_old, $time) {
  61. //查询账号余额
  62. $user = M('account_detailed');
  63. $balance = $user->select('available_cash,cash')->where('account_identity', $userId)->find();
  64. //判断账户余额是否支持追号
  65. if ($balance['available_cash'] < $money) {
  66. echo json_encode(['code' => 400, 'msg' => 'Sorry, your credit is running low', 'data' => null]);
  67. exit;
  68. }
  69. //获取投注期号,开奖唯一id
  70. $xy28 = M($game_table);
  71. $nos = $xy28->select('info_no,identity,open_time')->where('status', 0)->sort('open_time', 'asc')->find();
  72. //判断是否处于封盘时间
  73. $op_time = strtotime($nos['open_time']);
  74. if ($op_time - time() < 60) {
  75. echo json_encode(['code' => 400, 'msg' => '当前期游戏已封盘', 'data' => null]);
  76. exit;
  77. }
  78. $no = $nos['info_no']; //期号
  79. $xy28_identity = $nos['identity']; //开奖唯一id
  80. $identity = UUID(); //生成identity
  81. //资金明细记录
  82. $detail_id = UUID(); //用户明细id
  83. $account_name = isset($_SESSION['uinfo']['account']) ? $_SESSION['uinfo']['account'] : ''; //用户名
  84. $account_email = isset($_SESSION['uinfo']['email']) ? $_SESSION['uinfo']['email'] : ''; //用户邮箱
  85. $account_phone = isset($_SESSION['uinfo']['phone']) ? $_SESSION['uinfo']['phone'] : ''; //用户手机
  86. $money_type = 2;
  87. $remarks = $identity;
  88. $money_time = date('Y-m-d H:i:s', time());
  89. $money_date = date('Y-m-d ', time());
  90. //获取游戏id
  91. $game_id = M('game_list')->select('identity')->where('table_name', $game_table)->find();
  92. $game_id = $game_id['identity'];
  93. /**开启事务**/
  94. $SW = new DBExtension();
  95. $SW->B(); //开启事务
  96. //更新用户表金额的记录
  97. $available_cash = $balance['available_cash'] - $money;
  98. $cash = $balance['cash'] - $money;
  99. $allcash = ['available_cash' => $available_cash, 'cash' => $cash];
  100. $res1 = $SW->ST('account_detailed')->W('account_identity', $userId)->U($allcash);
  101. //组装数组添加明细
  102. $money_detil = [
  103. 'identity' => $detail_id,
  104. 'account_identity' => $userId,
  105. 'account_name' => $account_name,
  106. 'account_phone' => $account_phone,
  107. 'account_email' => $account_email,
  108. 'money_type' => $money_type,
  109. 'money' => $money,
  110. 'remarks' => $remarks,
  111. 'money_time' => $money_time,
  112. 'money_date' => $money_date,
  113. 'game_type' => 1,
  114. 'order_id' => OrderID(),
  115. 'cur_cash' => $available_cash,
  116. 'game_type' => $game_id,
  117. ];
  118. // $xy28_buy = M('fund_detailed');
  119. $res2 = $SW->ST('fund_detailed')->I($money_detil);
  120. if (!$res1) {
  121. echo json_encode(['code' => 400, 'msg' => 'fail', 'data' => null]);
  122. exit;
  123. }
  124. //查询追号号码信息
  125. $xy28_buy1 = M($game_table . '_buy');
  126. $code = $xy28_buy1->select('codes')->where("no = '{$no_old}'", " and open_time='{$time_old}' and account_identity=", "$userId")->find();
  127. $code = $code['codes'];
  128. //组装数组添加购买记录
  129. $data = [
  130. 'no' => $no,
  131. 'identity' => $identity,
  132. 'account_identity' => $userId,
  133. $game_table . '_identity' => $xy28_identity,
  134. 'codes' => $code,
  135. 'money' => $money,
  136. 'code_type' => '多种',
  137. 'open_time' => $time,
  138. 'buy_status' => 2,
  139. 'order_id' => OrderID(),
  140. ];
  141. // $xy28_buy = M($game_table.'_buy');
  142. $res3 = $SW->ST($game_table . '_buy')->I($data);
  143. $data['gameid'] = $game_id;
  144. $res = $SW->C();
  145. if ($res) {
  146. echo json_encode(['code' => 200, 'msg' => 'success', 'data' => $data]);
  147. } else {
  148. echo json_encode(['code' => 400, 'msg' => 'fail', 'data' => null]);
  149. }
  150. }
  151. function updateMoney($userId, $gameId, $buyId, $orderId, $money) {
  152. //查询用户信息
  153. $a = M('account_detailed');
  154. $userInfo = $a
  155. ->select('cash,available_cash')
  156. ->where('account_identity', $userId)
  157. ->find();
  158. $name = M('account')->select('account')->where('identity', $userId)->find();
  159. $name = $name['account'];
  160. $csh = $userInfo['cash'] - $money;
  161. if ($csh < 0) {
  162. return -2;
  163. }
  164. $ach = $userInfo['available_cash'] - $money;
  165. //用户资金变动数组
  166. $newCash = array(
  167. 'cash' => $csh,
  168. 'available_cash' => $ach,
  169. );
  170. $newInfo = array(
  171. 'identity' => UUID(),
  172. 'account_identity' => $userId,
  173. 'account_name' => $name,
  174. 'money_type' => 2,
  175. 'money' => $money,
  176. 'remarks' => $buyId,
  177. 'money_time' => date('Y-m-d H:i:s', time()),
  178. 'money_date' => date('Y-m-d', time()),
  179. 'game_type' => $gameId,
  180. 'order_id' => $orderId,
  181. 'cur_cash' => $ach,
  182. );
  183. //开启事务
  184. $sw = new DBExtension();
  185. $sw->B();
  186. //更新用户余额
  187. $sw->ST('account_detailed')->W('account_identity', $userId)->U($newCash);
  188. //插入用户消费资金记录
  189. $sw->ST('fund_detailed')->I($newInfo);
  190. $res = $sw->C();
  191. if ($res) {
  192. return 1;
  193. }
  194. return -1;
  195. }
  196. }