| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- <?php
- namespace app\api\controller\luck;
- use app\admin\model\luck\LuckDraw;
- use app\admin\model\luck\LuckOrder;
- use app\admin\model\store\StoreProduct;
- use app\admin\model\store\StoreProductAttrValue;
- use app\models\many\Many;
- use app\models\many\ManyGreen;
- use app\models\many\ManyOrder;
- use app\models\store\StoreCart;
- use app\models\store\StoreOrder;
- use app\models\store\StoreOrderCartInfo;
- use app\models\store\StoreOrderStatus;
- use app\models\user\User;
- use app\models\user\UserAddress;
- use app\models\user\UserBill;
- use app\Request;
- use crmeb\services\GroupDataService;
- use crmeb\services\QrcodeService;
- use crmeb\services\SystemConfigService;
- use crmeb\services\UtilService;
- use crmeb\services\upload\Upload;
- use think\facade\Db;
- /**
- * 账单类
- * Class UserBillController
- * @package app\api\controller\user
- */
- class LuckController
- {
- /**
- * 新人专享参数
- * @param Request $request
- * @return mixed
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function luck_draw(Request $request)
- {
- $data = LuckDraw::where('id', 1)->find()->toArray();
- $count = LuckOrder::where('uid', $request->uid())->count();
- $data['count'] -= $count;
- return app('json')->success($data);
- }
- /**
- * 抽奖
- * @param Request $request
- * @return mixed
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\DbException
- * @throws \think\db\exception\ModelNotFoundException
- */
- public function luck(Request $request)
- {
- Db::startTrans();
- $luck = LuckDraw::where('id', 1)->find();
- $product = StoreProduct::where('is_luck', 1)->select();
- $user = User::where('uid', $request->uid())->find();
- $luckOrder = LuckOrder::where('uid', $request->uid())->count();
- // if ($user['add_time']+(86400*7) < time()) return app('json')->fail('新人一周内才可以购买');
- if ($luckOrder >= $luck['count']) return app('json')->fail('最大抽奖数'.$luck['count']);
- if ($user['white_integral'] < $luck['price']) return app('json')->fail('红积分不足');
- $probability = $luck['probability'];
- $data = [];
- $data[] = ['id' => 0, 'title' => '未中奖','v' => 100-$probability];
- foreach ($product as $item){
- $data[] = ['id' => $item['id'], 'title' => $item['store_name'],'v' => $probability/count($product)];
- }
- foreach ($data as $key => $val) {
- $arr[$val['id']] = $val['v']; //将$prize_arr放入数组下标为$prize_arr的id元素,值为v元素的数组中
- }
- $rid = get_rand($arr);
- if ($rid == 0){
- $res = LuckOrder::create([
- 'luck_id' => 1,
- 'uid' => $request->uid(),
- 'price' => $luck['price'],
- 'status' => 0,
- 'state' => 0,
- ]);
- if ($res) {
- Db::commit();
- return app('json')->fail('未中奖,不扣除', ['product' => 0]);
- }
- }else{
- $user_add = UserAddress::where('uid', $request->uid())->find();
- if (!$user_add) return app('json')->fail('请填写地址', ['address' => 0]);
- $products = StoreProduct::where('id', $rid)->find();
- $productArrtValue = StoreProductAttrValue::where('product_id', $products['id'])->find();
- $cart_id = StoreCart::create([
- 'uid' => $request->uid(),
- 'type' => 'product',
- 'product_id' => $products['id'],
- 'product_attr_unique' => $productArrtValue['unique'],
- 'cart_num' => 1,
- 'add_time' => time(),
- 'is_new' => 1,
- ]);
- $cartGroup = StoreCart::getUserProductCartList($request->uid(), $cart_id['id'], 1);
- $cartInfo = $cartGroup['valid'];
- $cartIds = [];
- $totalNum = 0;
- $gainIntegral = 0;
- $whiteIntegral = 0;
- $businessIntegral = 0;
- foreach ($cartInfo as $cart) {
- $cartIds[] = $cart['id'];
- $totalNum += $cart['cart_num'];
- // if ($cart['productInfo']['cate_id'] == 4 and $useIntegral) return self::setErrorInfo('该商品不能抵扣', true);
- $cartInfoGainIntegral = isset($cart['productInfo']['give_integral']) ? bcmul($cart['cart_num'], $cart['productInfo']['give_integral'], 2) : 0;
- $whiteInfoGainIntegral = isset($cart['productInfo']['white_integral']) ? bcmul($cart['cart_num'], $cart['productInfo']['white_integral'], 2) : 0;
- $businessGainIntegral = isset($cart['productInfo']['business_integral']) ? bcmul($cart['cart_num'], $cart['productInfo']['business_integral'], 2) : 0;
- $gainIntegral = bcadd($gainIntegral, $cartInfoGainIntegral, 2);
- $whiteIntegral = bcadd($whiteIntegral, $whiteInfoGainIntegral, 2);
- $businessIntegral = bcadd($businessIntegral, $businessGainIntegral, 2);
- $price = $cart['productInfo']['price'];
- }
- $orderInfo = [
- 'uid' => $request->uid(),
- 'order_id' => StoreOrder::getNewOrderId(),
- 'real_name' => $user_add['real_name'],
- 'user_phone' => $user_add['phone'],
- 'user_address' => $user_add['province'] . ' ' . $user_add['city'] . ' ' . $user_add['district'] . ' ' . $user_add['detail'],
- 'cart_id' => $cartIds,
- 'total_num' => $totalNum,
- 'total_price' => $price,
- 'total_postage' => 0,
- 'coupon_id' => 0,
- 'coupon_price' => 0,
- 'pay_price' => 0,
- 'pay_postage' => 0,
- 'deduction_price' => 0,
- 'paid' => 1,
- 'pay_type' => 'integral',
- 'use_integral' => $luck['price'],
- 'gain_integral' => 0,
- 'white_integral' => 0,
- 'business_integral' => 0,
- 'remark' => '新人专享中奖商品',
- 'mark' => '',
- 'combination_id' => 0,
- 'pink_id' => 0,
- 'freight_price' => 0,
- 'cumulative' => 0,
- 'pay_time' => time(),
- 'add_time' => time(),
- 'unique' => md5(rand(1, 100000).$request->uid()),
- 'refund_price' => 0,
- 'cost' => $products['cost'],
- ];
- $order = StoreOrder::create($orderInfo);
- $res4 = StoreOrderCartInfo::setCartInfo($order['id'], $cartInfo);
- $res6 = StoreCart::where('id', 'IN', $cartIds)->update(['is_pay' => 1]);
- $res2 = StoreOrderStatus::status($order['id'], 'cache_key_create_order', '订单生成');
- $res3 = User::where('uid', $request->uid())->dec('white_integral', $luck['price'])->update();
- UserBill::expend('新人专享抽奖', $request->uid(), 'white_integral', 'xr_white_integral', $luck['price'], '', $user['white_integral']-$luck['price'], '新人专享筹抽奖');
- $res = LuckOrder::create([
- 'luck_id' => 1,
- 'uid' => $request->uid(),
- 'price' => $luck['price'],
- 'status' => 1,
- 'state' => 1,
- ]);
- if ($order and $res4 and $res6 and $res2 and $res and $res3){
- Db::commit();
- return app('json')->success('中奖啦', ['product' => $products['id']]);
- }else{
- Db::rollback();
- return app('json')->success('抽奖失败');
- }
- }
- return app('json')->success('抽奖失败');
- }
- }
|