AuctionController.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <?php
  2. namespace app\api\controller\auction;
  3. use app\models\auction\Auction;
  4. use app\models\auction\AuctionBooking;
  5. use app\models\auction\AuctionGu;
  6. use app\models\user\User;
  7. use app\models\user\UserBill;
  8. use app\Request;
  9. use Monolog\Handler\Curl\Util;
  10. use think\facade\Cache;
  11. use crmeb\services\{
  12. CacheService,
  13. ExpressService,
  14. SystemConfigService,
  15. };
  16. use crmeb\services\UtilService;
  17. use crmeb\repositories\OrderRepository;
  18. use think\facade\Db;
  19. class AuctionController
  20. {
  21. /**
  22. * 场馆列表
  23. * @param Request $request
  24. * @return mixed
  25. */
  26. public function list(Request $request)
  27. {
  28. $data = UtilService::getMore([
  29. [['page', 'd'], 0],
  30. [['limit', 'd'], 0],
  31. ['advance'],
  32. ['auction_gu_id']
  33. ], $request);
  34. if (!$data['auction_gu_id']) return app('json')->fail('数据传入错误');
  35. $auctionModel = new \app\models\auction\Auction();
  36. return app('json')->successful($auctionModel->list($data, $request->uid()));
  37. }
  38. /**
  39. * 预约场馆
  40. * @param Request $request
  41. * @return void
  42. */
  43. public function subscribe(Request $request)
  44. {
  45. $data = UtilService::postMore([
  46. ['id']
  47. ]);
  48. if (!$data['id']) return app('json')->fail('数据传入错误');
  49. $auctionModel = new Auction();
  50. $auction = $auctionModel->find($data['id']);
  51. if (!$auction)return app('json')->fail('没有此数据');
  52. if (time() < strtotime($auction['add_time'])){
  53. return app('json')->fail('预约未开始');
  54. }
  55. if (time() > strtotime($auction['end_time'])){
  56. return app('json')->fail('预约时间已过');
  57. }
  58. if (AuctionBooking::where([['uid', '=', $request->uid()], ['auction_id' , '=', $auction['id']], ['frequency', '=', $auction['frequency']]])->find()){
  59. return app('json')->fail('当前场馆已预约');
  60. }
  61. $userModel = new User();
  62. $user = $userModel->find($request->uid());
  63. if ($user['anticipate'] < $auction['anticipate']) return app('json')->fail('预约卷不够');
  64. $user['anticipate'] = $user['anticipate'] - $auction['anticipate'];// 扣除预约卷
  65. User::rollbackTrans();
  66. $res = $user->save();
  67. if ($res){
  68. AuctionBooking::booking($user['uid'], $auction);
  69. UserBill::expend('预约场馆', $user['uid'], 'anticipate','reduce_anticipate', $auction['anticipate'], 0, $user['anticipate'], '预约扣除预约卷'); // 写入记录
  70. User::commitTrans();
  71. return app('json')->successful('预约成功');
  72. }else{
  73. User::rollbackTrans();
  74. return app('json')->fail('预约失败');
  75. }
  76. }
  77. /**
  78. * 进入场馆
  79. * @param Request $request
  80. * @return void
  81. */
  82. public function advance(Request $request)
  83. {
  84. $data = UtilService::getMore([
  85. ['id']
  86. ]);
  87. if (!$data['id']) return app('json')->fail('数据传入错误');
  88. $auction = Auction::find($data['id']);
  89. $booking = AuctionBooking::where([['auction_id', '=',$auction['id']], ['frequency', '=', $auction['frequency']]])->find();
  90. $user = $request->user();
  91. $time = strtotime(date('Y-m-d', time()));// 今天
  92. $today = strtotime(date('Y-m-d', strtotime('+1day')));// 明天
  93. if ($user['is_new'] == 1 or ($user['green_time'] >= $time and $user['green_time'] <= $today)){
  94. // 新人或者绿色通道提前三分钟入场
  95. if (strtotime($auction['radd_time']) -3000 > time()){
  96. return app('json')->fail('未到进入时间');
  97. }
  98. if (strtotime($auction['rend_time']) < time()){
  99. return app('json')->fail('进场时间已过');
  100. }
  101. }else{
  102. if (strtotime($auction['radd_time']) > time()){
  103. return app('json')->fail('未到进入时间');
  104. }
  105. if (strtotime($auction['rend_time']) < time()){
  106. return app('json')->fail('进场时间已过');
  107. }
  108. }
  109. if ($booking){
  110. return app('json')->successful('可进入');
  111. }else{
  112. return app('json')->fail('未预约');
  113. }
  114. }
  115. /**
  116. * 用户下级
  117. * @param Request $request
  118. * @return mixed
  119. */
  120. public function lower(Request $request){
  121. $data = UtilService::getMore([
  122. [['page', 'd'], 0],
  123. [['limit', 'd'], 0],
  124. ], $request);
  125. $user = User::where('spread_uid', $request->uid())->page($data['page'], $data['limit'])->order('uid DESC')->select()->toArray();
  126. return app('json')->successful($user);
  127. }
  128. /**
  129. * 转预约卷给下级
  130. * @param Request $request
  131. * @return mixed
  132. * @throws \think\db\exception\DataNotFoundException
  133. * @throws \think\db\exception\DbException
  134. * @throws \think\db\exception\ModelNotFoundException
  135. */
  136. public function transfer_accounts(Request $request){
  137. $data = UtilService::getMore([
  138. ['uid'],
  139. ['anticipate']
  140. ], $request);
  141. if (!$data['uid'] or !$data['anticipate']) return app('json')->fail('数据传入错误');
  142. $user = User::find($request->uid());
  143. if ($user['anticipate'] < $data['anticipate']) return app('json')->fail('预约卷不够');
  144. $me = User::find($data['uid']);
  145. $user['anticipate'] = $user['anticipate'] - $data['anticipate'];// 扣除预约卷
  146. $me['anticipate'] = $me['anticipate'] + $data['anticipate'];// 增加预约卷
  147. try {
  148. Db::startTrans();
  149. UserBill::expend('预约卷减少',$user['uid'], 'anticipate', 'reduce_anticipate', $data['anticipate'], 0, $user['anticipate'], '转账给用户'.$me['nickname'].$data['anticipate'].'预约卷');
  150. UserBill::income('预约卷增加',$me['uid'], 'anticipate', 'add_anticipate', $data['anticipate'], 0, $me['anticipate'], $me['nickname'].'转账'.$data['anticipate'].'预约卷');
  151. $user->save();
  152. $me->save();
  153. Db::commit();
  154. return app('json')->successful('成功');
  155. } catch (\Exception $e) {
  156. Db::rollback();
  157. return app('json')->fail('失败');
  158. }
  159. }
  160. /**
  161. * 场馆
  162. * @param Request $request
  163. * @return mixed
  164. * @throws \think\db\exception\DataNotFoundException
  165. * @throws \think\db\exception\DbException
  166. * @throws \think\db\exception\ModelNotFoundException
  167. */
  168. public function auction_gu(Request $request)
  169. {
  170. $data = UtilService::getMore([
  171. [['page', 'd'], 0],
  172. [['limit', 'd'], 0],
  173. ], $request);
  174. $uid = getParent($request->uid());
  175. $list = AuctionGu::where('uid', 'in', $uid)->page($data['page'], $data['limit'])->select();
  176. $list = count($list) ? $list->toArray() : [];
  177. return app('json')->successful($list);
  178. }
  179. }