LuckController.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. namespace app\api\controller\luck;
  3. use app\admin\model\luck\LuckDraw;
  4. use app\admin\model\luck\LuckOrder;
  5. use app\admin\model\store\StoreProduct;
  6. use app\admin\model\store\StoreProductAttrValue;
  7. use app\models\many\Many;
  8. use app\models\many\ManyGreen;
  9. use app\models\many\ManyOrder;
  10. use app\models\store\StoreCart;
  11. use app\models\store\StoreOrder;
  12. use app\models\store\StoreOrderCartInfo;
  13. use app\models\store\StoreOrderStatus;
  14. use app\models\user\User;
  15. use app\models\user\UserAddress;
  16. use app\models\user\UserBill;
  17. use app\Request;
  18. use crmeb\services\GroupDataService;
  19. use crmeb\services\QrcodeService;
  20. use crmeb\services\SystemConfigService;
  21. use crmeb\services\UtilService;
  22. use crmeb\services\upload\Upload;
  23. use think\facade\Db;
  24. /**
  25. * 账单类
  26. * Class UserBillController
  27. * @package app\api\controller\user
  28. */
  29. class LuckController
  30. {
  31. /**
  32. * 新人专享参数
  33. * @param Request $request
  34. * @return mixed
  35. * @throws \think\db\exception\DataNotFoundException
  36. * @throws \think\db\exception\DbException
  37. * @throws \think\db\exception\ModelNotFoundException
  38. */
  39. public function luck_draw(Request $request)
  40. {
  41. $data = LuckDraw::where('id', 1)->find()->toArray();
  42. $count = LuckOrder::where('uid', $request->uid())->count();
  43. $data['count'] -= $count;
  44. return app('json')->success($data);
  45. }
  46. /**
  47. * 抽奖
  48. * @param Request $request
  49. * @return mixed
  50. * @throws \think\db\exception\DataNotFoundException
  51. * @throws \think\db\exception\DbException
  52. * @throws \think\db\exception\ModelNotFoundException
  53. */
  54. public function luck(Request $request)
  55. {
  56. Db::startTrans();
  57. $luck = LuckDraw::where('id', 1)->find();
  58. $product = StoreProduct::where('is_luck', 1)->select();
  59. $user = User::where('uid', $request->uid())->find();
  60. $luckOrder = LuckOrder::where('uid', $request->uid())->count();
  61. // if ($user['add_time']+(86400*7) < time()) return app('json')->fail('新人一周内才可以购买');
  62. if ($luckOrder >= $luck['count']) return app('json')->fail('最大抽奖数'.$luck['count']);
  63. if ($user['white_integral'] < $luck['price']) return app('json')->fail('红积分不足');
  64. $probability = $luck['probability'];
  65. $data = [];
  66. $data[] = ['id' => 0, 'title' => '未中奖','v' => 100-$probability];
  67. foreach ($product as $item){
  68. $data[] = ['id' => $item['id'], 'title' => $item['store_name'],'v' => $probability/count($product)];
  69. }
  70. foreach ($data as $key => $val) {
  71. $arr[$val['id']] = $val['v']; //将$prize_arr放入数组下标为$prize_arr的id元素,值为v元素的数组中
  72. }
  73. $rid = get_rand($arr);
  74. if ($rid == 0){
  75. $res = LuckOrder::create([
  76. 'luck_id' => 1,
  77. 'uid' => $request->uid(),
  78. 'price' => $luck['price'],
  79. 'status' => 0,
  80. 'state' => 0,
  81. ]);
  82. if ($res) {
  83. Db::commit();
  84. return app('json')->fail('未中奖,不扣除', ['product' => 0]);
  85. }
  86. }else{
  87. $user_add = UserAddress::where('uid', $request->uid())->find();
  88. if (!$user_add) return app('json')->fail('请填写地址', ['address' => 0]);
  89. $products = StoreProduct::where('id', $rid)->find();
  90. $productArrtValue = StoreProductAttrValue::where('product_id', $products['id'])->find();
  91. $cart_id = StoreCart::create([
  92. 'uid' => $request->uid(),
  93. 'type' => 'product',
  94. 'product_id' => $products['id'],
  95. 'product_attr_unique' => $productArrtValue['unique'],
  96. 'cart_num' => 1,
  97. 'add_time' => time(),
  98. 'is_new' => 1,
  99. ]);
  100. $cartGroup = StoreCart::getUserProductCartList($request->uid(), $cart_id['id'], 1);
  101. $cartInfo = $cartGroup['valid'];
  102. $cartIds = [];
  103. $totalNum = 0;
  104. $gainIntegral = 0;
  105. $whiteIntegral = 0;
  106. $businessIntegral = 0;
  107. foreach ($cartInfo as $cart) {
  108. $cartIds[] = $cart['id'];
  109. $totalNum += $cart['cart_num'];
  110. // if ($cart['productInfo']['cate_id'] == 4 and $useIntegral) return self::setErrorInfo('该商品不能抵扣', true);
  111. $cartInfoGainIntegral = isset($cart['productInfo']['give_integral']) ? bcmul($cart['cart_num'], $cart['productInfo']['give_integral'], 2) : 0;
  112. $whiteInfoGainIntegral = isset($cart['productInfo']['white_integral']) ? bcmul($cart['cart_num'], $cart['productInfo']['white_integral'], 2) : 0;
  113. $businessGainIntegral = isset($cart['productInfo']['business_integral']) ? bcmul($cart['cart_num'], $cart['productInfo']['business_integral'], 2) : 0;
  114. $gainIntegral = bcadd($gainIntegral, $cartInfoGainIntegral, 2);
  115. $whiteIntegral = bcadd($whiteIntegral, $whiteInfoGainIntegral, 2);
  116. $businessIntegral = bcadd($businessIntegral, $businessGainIntegral, 2);
  117. $price = $cart['productInfo']['price'];
  118. }
  119. $orderInfo = [
  120. 'uid' => $request->uid(),
  121. 'order_id' => StoreOrder::getNewOrderId(),
  122. 'real_name' => $user_add['real_name'],
  123. 'user_phone' => $user_add['phone'],
  124. 'user_address' => $user_add['province'] . ' ' . $user_add['city'] . ' ' . $user_add['district'] . ' ' . $user_add['detail'],
  125. 'cart_id' => $cartIds,
  126. 'total_num' => $totalNum,
  127. 'total_price' => $price,
  128. 'total_postage' => 0,
  129. 'coupon_id' => 0,
  130. 'coupon_price' => 0,
  131. 'pay_price' => 0,
  132. 'pay_postage' => 0,
  133. 'deduction_price' => 0,
  134. 'paid' => 1,
  135. 'pay_type' => 'integral',
  136. 'use_integral' => $luck['price'],
  137. 'gain_integral' => 0,
  138. 'white_integral' => 0,
  139. 'business_integral' => 0,
  140. 'remark' => '新人专享中奖商品',
  141. 'mark' => '',
  142. 'combination_id' => 0,
  143. 'pink_id' => 0,
  144. 'freight_price' => 0,
  145. 'cumulative' => 0,
  146. 'pay_time' => time(),
  147. 'add_time' => time(),
  148. 'unique' => md5(rand(1, 100000).$request->uid()),
  149. 'refund_price' => 0,
  150. 'cost' => $products['cost'],
  151. ];
  152. $order = StoreOrder::create($orderInfo);
  153. $res4 = StoreOrderCartInfo::setCartInfo($order['id'], $cartInfo);
  154. $res6 = StoreCart::where('id', 'IN', $cartIds)->update(['is_pay' => 1]);
  155. $res2 = StoreOrderStatus::status($order['id'], 'cache_key_create_order', '订单生成');
  156. $res3 = User::where('uid', $request->uid())->dec('white_integral', $luck['price'])->update();
  157. UserBill::expend('新人专享抽奖', $request->uid(), 'white_integral', 'xr_white_integral', $luck['price'], '', $user['white_integral']-$luck['price'], '新人专享筹抽奖');
  158. $res = LuckOrder::create([
  159. 'luck_id' => 1,
  160. 'uid' => $request->uid(),
  161. 'price' => $luck['price'],
  162. 'status' => 1,
  163. 'state' => 1,
  164. ]);
  165. if ($order and $res4 and $res6 and $res2 and $res and $res3){
  166. Db::commit();
  167. return app('json')->success('中奖啦', ['product' => $products['id']]);
  168. }else{
  169. Db::rollback();
  170. return app('json')->success('抽奖失败');
  171. }
  172. }
  173. return app('json')->success('抽奖失败');
  174. }
  175. }