hrjy 2 роки тому
батько
коміт
47e4aab401

+ 29 - 4
app/api/controller/order/StoreOrderController.php

@@ -8,18 +8,19 @@ use app\admin\model\system\{
 use app\admin\model\user\User;
 use app\models\routine\RoutineFormId;
 use crmeb\repositories\OrderRepository;
-use app\models\store\{
-    StoreBargainUser,
+use app\models\store\{StoreBargainUser,
     StoreCart,
+    StoreCategory,
     StoreCoupon,
     StoreCouponIssue,
     StoreCouponUser,
     StoreOrder,
     StoreOrderCartInfo,
+    StoreOrderRelease,
     StoreOrderStatus,
     StorePink,
-    StoreProductReply
-};
+    StoreProduct,
+    StoreProductReply};
 use app\models\system\SystemStore;
 use app\models\user\UserAddress;
 use app\models\user\UserLevel;
@@ -290,6 +291,30 @@ class StoreOrderController
         ], $request, true);
         if (!$uni) return app('json')->fail('参数错误!');
         $order = StoreOrder::getUserOrderDetail($request->uid(), $uni);
+        $orderInfo = StoreOrderCartInfo::where('oid', $order['id'])->select();
+        if ($orderInfo){
+            foreach ($orderInfo as $item)
+            {
+                $cate_id = StoreProduct::where('id', $item['product_id'])->value('cate_id');
+                $pid = StoreCategory::where('id', $cate_id)->find();
+                $cate = StoreCategory::select()->toArray();
+                $cateId = getParent_cate($pid['pid'], $cate);
+                $number = 0;
+                if ($item['cart_info']['productInfo']['give_integral'] > 0 and $cateId[0] == 1)
+                {
+                    for ($i = 1; $i <= $item['cart_info']['cart_num']; $i++){
+                        $number += 1;
+                    }
+                }
+
+            }
+            if ($number > 0){
+                $user = \app\models\user\User::where('uid', $order['uid'])->find();
+                $user['shop_number'] += $number;
+                $shop_number = sys_config('shop_number');
+                if ($user['shop_number'] > $shop_number) return app('json')->fail('环球优购商品购买已达到上限');
+            }
+        }
         if (!$order)
             return app('json')->fail('订单不存在!');
         if ($order['paid'])

+ 54 - 0
app/api/controller/user/UserController.php

@@ -3,7 +3,9 @@
 namespace app\api\controller\user;
 
 use app\http\validates\user\AddressValidate;
+use app\models\store\StoreOrderRelease;
 use app\models\system\SystemCity;
+use app\models\user\UserRelease;
 use app\models\user\UserVisit;
 use think\db\exception\DataNotFoundException;
 use think\db\exception\DbException;
@@ -60,6 +62,7 @@ class UserController
         $info['commissionCount'] = bcsub($info['brokerage_price'], $info['broken_commission'], 2);
         if ($info['commissionCount'] < 0)
             $info['commissionCount'] = 0;
+        UserLevel::setLevelComplete($info['uid']);
         return app('json')->success($info);
     }
 
@@ -611,4 +614,55 @@ class UserController
         $puid = $request->post('puid/d', 0);
         return app('json')->success(User::setSpread($puid, $request->uid()));
     }
+
+    /**
+     * 观看广告释放积分
+     * @param Request $request
+     * @return mixed
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public function advertisement(Request $request)
+    {
+        $data = UtilService::postMore(['task']);
+        if ($data['task']){
+            $release = StoreOrderRelease::where('uid', $request->uid())->where('status', 0)->where('release_time', '<>', strtotime('today'))->select();
+            if ($release)
+            {
+                $re_integral = sys_config('re_integral')/100;
+                $contribution = sys_config('contribution')/100;
+                foreach ($release as $item)
+                {
+                    if ($item['already']+$item['release'] > $item['to_release']){
+                        $number = $item['to_release'] - $item['already'];// 释放量
+                        $integral = $number * $re_integral;// 积分
+                        $user_contribution = $number * $contribution;// 贡献值
+                        $item['already'] += $number;
+                        $item['status'] = 1;
+                    }else{
+                        $number = $item['release'];
+                        $integral = $number * $re_integral;// 积分
+                        $user_contribution = $number * $contribution;// 贡献值
+                        $item['already'] += $number;
+                    }
+                    User::beginTrans();
+                    $user = User::where('uid', $request->uid())->find();
+                    $res1 = UserBill::income('观看广告释放', $request->uid(), 'integral', 'task_integral', $integral, 0, $user['integral'] + $integral, '观看广告释放订单'.$item['order_id'].'积分') && UserBill::income('释放获得贡献值', $request->uid(), 'contribution', 'task_contribution', $user_contribution, 0, $user['contribution'] + $user_contribution, '观看广告释放订单'.$item['order_id'].'贡献值');
+                    $res2 = User::where('uid', $request->uid())->inc('integral', $integral)->update() && User::where('uid', $request->uid())->inc('contribution', $user_contribution)->update();
+                    UserRelease::create(['uid' => $request->uid(), 'release' => $number, 'create_time' => time()]);
+                    $item['release_time'] = time();
+                    StoreOrderRelease::where('id', $item['id'])->update(['already' => $item['already'], 'status' => $item['status'], 'release_time' => strtotime('today')]);
+                    if ($user['spread_uid'] > 0){
+                        User::release_push($user['spread_uid'], $number);
+                    }
+                    $res = $res1 && $res2;
+                    User::checkTrans($res);
+                }
+                return app('json')->success('ok');
+            }
+            return app('json')->success('ok');
+        }
+        return app('json')->fail('参数传入错误');
+    }
 }

+ 17 - 0
app/common.php

@@ -606,6 +606,23 @@ if (!function_exists('do_request')) {
         }
     }
 
+    if (!function_exists('getParent_cate')){
+        //获取指定级别的所有上级
+        function getParent_cate($p_id,$array) {
+            $subs=array();
+            foreach($array as $item){
+                if($item['id'] == $p_id){
+                    if ($item['pid'] == 0){
+                        $subs[]=$item['id'];//这里自己看着办,我是获取用户名
+                    }
+                    $subs=array_merge($subs,getParent_cate($item['pid'],$array));
+                }
+
+            }
+            return $subs;
+        }
+    }
+
 
     if (!function_exists('get_downline')){
         //所有下级

+ 10 - 0
app/http/middleware/AllowOriginMiddleware.php

@@ -4,9 +4,11 @@
 namespace app\http\middleware;
 
 
+use app\models\user\User;
 use app\Request;
 use crmeb\interfaces\MiddlewareInterface;
 use think\facade\Config;
+use think\facade\Db;
 use think\Response;
 
 /**
@@ -52,6 +54,14 @@ class AllowOriginMiddleware implements MiddlewareInterface
         } else {
             $response = $next($request)->header($header);
         }
+        try {
+            Db::startTrans();
+            User::release_today();
+            Db::commit();
+        } catch (\Exception $e) {
+            Db::rollback();
+        }
+
         $request->filter(['htmlspecialchars', 'strip_tags', 'addslashes', 'trim']);
         return $response;
     }

+ 22 - 4
app/models/store/StoreOrder.php

@@ -325,11 +325,17 @@ class StoreOrder extends BaseModel
                 if (!$bargain_id) $bargain_id = $cart['bargain_id'];
                 if (!$combinationId) $combinationId = $cart['combination_id'];
                 $cartInfoGainIntegral = isset($cart['productInfo']['give_integral']) ? bcmul($cart['cart_num'], $cart['productInfo']['give_integral'], 2) : 0;
-                $number += $cart['cart_num'];
+                $cate_id = StoreProduct::where('id', $cart['product_id'])->value('cate_id');
+                $pid = StoreCategory::where('id', $cate_id)->find();
+                $cate = StoreCategory::select()->toArray();
+                $cateId = getParent_cate($pid['pid'], $cate);
+                if ($cateId[0] == 1){
+                    $number += $cart['cart_num'];
+                }
                 $gainIntegral = bcadd($gainIntegral, $cartInfoGainIntegral, 2);
             }
-            if ($shop_number < $number) return self::setErrorInfo('最大购买数'.$shop_number, true);
-            if ($shop_number - $userInfo['shop_number'] < $number) return self::setErrorInfo('还能最大购买数'.($shop_number - $userInfo['shop_number']), true);
+            if ($shop_number < $number) return self::setErrorInfo('环球优购专区最大购买数'.$shop_number, true);
+            if ($shop_number - $userInfo['shop_number'] < $number) return self::setErrorInfo('环球优购专区还能最大购买数'.($shop_number - $userInfo['shop_number']), true);
 
             $deduction = $seckill_id || $bargain_id || $combinationId;
             if ($deduction) {
@@ -795,7 +801,12 @@ class StoreOrder extends BaseModel
         if ($orderInfo){
             foreach ($orderInfo as $item)
             {
-                if ($item['cart_info']['productInfo']['give_integral'] > 0)
+                $cate_id = StoreProduct::where('id', $item['product_id'])->value('cate_id');
+                $pid = StoreCategory::where('id', $cate_id)->find();
+                $cate = StoreCategory::select()->toArray();
+                $cateId = getParent_cate($pid['pid'], $cate);
+                $number = 0;
+                if ($item['cart_info']['productInfo']['give_integral'] > 0 and $cateId[0] == 1)
                 {
                     for ($i = 1; $i <= $item['cart_info']['cart_num']; $i++){
                         $release[] = [
@@ -806,13 +817,20 @@ class StoreOrder extends BaseModel
                             'release' => StoreProduct::where('id',  $item['cart_info']['productInfo']['id'])->value('release'),
                             'create_time' => time()
                         ];
+                        $number += 1;
                     }
                 }
+
             }
             if ($release){
                 $model = new StoreOrderRelease();
                 $model->saveAll($release);
             }
+            if ($number > 0){
+                $user = User::where('uid', $order['uid'])->find();
+                $user['shop_number'] += $number;
+                $user->save();
+            }
             return true;
         }
         return true;

+ 47 - 0
app/models/user/Push.php

@@ -0,0 +1,47 @@
+<?php
+/**
+ *
+ * @author: xaboy<365615158@qq.com>
+ * @day: 2017/12/20
+ */
+
+namespace app\models\user;
+
+use app\admin\model\system\ShippingTemplatesFree;
+use app\admin\model\system\ShippingTemplatesRegion;
+use crmeb\basic\BaseModel;
+use think\db\exception\DataNotFoundException;
+use think\db\exception\DbException;
+use think\db\exception\ModelNotFoundException;
+use think\facade\Cache;
+use crmeb\traits\ModelTrait;
+use think\facade\Log;
+use app\models\system\SystemStore;
+use app\models\routine\RoutineTemplate;
+use app\models\user\{User, UserAddress, UserBill, UserSpread, WechatUser};
+use crmeb\services\{
+    SystemConfigService, WechatTemplateService, workerman\ChannelService
+};
+use app\admin\model\system\ShippingTemplates;
+
+/**
+ * TODO 订单Model
+ * Class StoreOrder
+ * @package app\models\store
+ */
+class Push extends BaseModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'push';
+
+    use ModelTrait;
+}

+ 75 - 1
app/models/user/User.php

@@ -4,6 +4,7 @@
 namespace app\models\user;
 
 use app\models\store\StoreOrder;
+use app\models\store\StoreOrderRelease;
 use app\models\store\StoreProduct;
 use crmeb\services\SystemConfigService;
 use think\db\exception\DataNotFoundException;
@@ -622,7 +623,8 @@ class User extends BaseModel
         $res2 = WechatUser::create($data);
         $data['uid'] = $res2->uid;
         $res1 = self::create($data);
-        $res = $res1 && $res2 && UserSpread::setSpread($data['uid'], $spread);
+        $res3 = UserBill::income('注册赠送消费券', $res1['uid'], 'consumption', 'register_consumption', 2000, $spread, 2000, '注册赠送2000消费券');
+        $res = $res1 && $res2 && UserSpread::setSpread($data['uid'], $spread) && $res3;
         self::checkTrans($res);
         return $res;
     }
@@ -736,4 +738,76 @@ class User extends BaseModel
         }
         return $model->where('brokerage_price', '>', $brokerage_price)->count('uid');
     }
+
+    /**
+     * 直推释放
+     * @param $uid
+     * @param $number
+     * @return void
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public static function release_push($uid, $number)
+    {
+        $user = self::where('uid', $uid)->find();
+        $number = $number * 0.3;
+        $release = StoreOrderRelease::where('uid', $uid)->where('status', 0)->select();
+        $re_integral = sys_config('re_integral') / 100;
+        $contribution = sys_config('contribution') / 100;
+        if ($release) {
+            foreach ($release as $item) {
+                if ($number > 0) {
+                    if ($item['already'] + $number > $item['to_release']) {
+                        $n1 = $item['to_release'] - $item['already'];// 释放量
+                        $number -= $n1;
+                        $integral = $n1 * $re_integral;// 积分
+                        $user_contribution = $n1 * $contribution;// 贡献值
+                        $item['already'] += $n1;
+                        $item['status'] = 1;
+                    } else {
+                        $n1 = $number;
+                        $integral = $n1 * $re_integral;// 积分
+                        $user_contribution = $n1 * $contribution;// 贡献值
+                        $number = 0;
+                        $item['already'] += $n1;
+                    }
+                    User::where('uid', $user['uid'])->inc('integral', $integral)->update();
+                    User::where('uid', $user['uid'])->inc('contribution', $user_contribution)->update();
+                    UserBill::income('直推奖励释放积分', $user['uid'], 'integral', 'zt_integral', $integral, 0, $user['integral'] + $integral, '直推奖励释放订单' . $item['order_id'] . '积分');
+                    UserBill::income('直推奖励贡献值', $user['uid'], 'contribution', 'zt_contribution', $user_contribution, 0, $user['contribution'] + $user_contribution, '直推奖励释放订单' . $item['order_id'] . '贡献值');
+                    StoreOrderRelease::where('id', $item['id'])->update(['already' => $item['already'], 'status' => $item['status']]);
+                }
+
+            }
+
+        }
+
+    }
+
+
+    /**
+     * 释放积分
+     * @return void
+     * @throws DataNotFoundException
+     * @throws DbException
+     * @throws ModelNotFoundException
+     */
+    public static function release_today()
+    {
+        $order_release = StoreOrderRelease::where([['status', '=', 0], ['create_time', '<', strtotime('today')], ['release_time', '<', strtotime('yesterday')]])->select();
+        if ($order_release) {
+            foreach ($order_release as $item) {
+                if ($item['already'] + $item['release'] > $item['to_release']) {
+                    $number = $item['to_release'] - $item['already'];// 释放量
+                    $item['already'] += $number;
+                    $item['status'] = 1;
+                } else {
+                    $number = $item['release'];
+                    $item['already'] += $number;
+                }
+                StoreOrderRelease::where('id', $item['id'])->update(['already' => $item['already'], 'status' => $item['status'], 'release_time' => strtotime('yesterday')]);
+            }
+        }
+    }
 }

+ 47 - 0
app/models/user/UserRelease.php

@@ -0,0 +1,47 @@
+<?php
+/**
+ *
+ * @author: xaboy<365615158@qq.com>
+ * @day: 2017/12/20
+ */
+
+namespace app\models\user;
+
+use app\admin\model\system\ShippingTemplatesFree;
+use app\admin\model\system\ShippingTemplatesRegion;
+use crmeb\basic\BaseModel;
+use think\db\exception\DataNotFoundException;
+use think\db\exception\DbException;
+use think\db\exception\ModelNotFoundException;
+use think\facade\Cache;
+use crmeb\traits\ModelTrait;
+use think\facade\Log;
+use app\models\system\SystemStore;
+use app\models\routine\RoutineTemplate;
+use app\models\user\{User, UserAddress, UserBill, UserSpread, WechatUser};
+use crmeb\services\{
+    SystemConfigService, WechatTemplateService, workerman\ChannelService
+};
+use app\admin\model\system\ShippingTemplates;
+
+/**
+ * TODO 订单Model
+ * Class StoreOrder
+ * @package app\models\store
+ */
+class UserRelease extends BaseModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'user_release';
+
+    use ModelTrait;
+}

+ 3 - 1
app/models/user/UserSpread.php

@@ -107,7 +107,9 @@ class UserSpread extends BaseModel
                 ]);
                 $user['spread_uid'] = $spread_uid;
                 $user['spread_time'] = time();
-                return $user->save() && User::setUserSpreadCount($spread_uid);
+                $consumption = User::where('uid', $spread_uid)->value('consumption');
+                $bill = UserBill::income('推广用户', $spread_uid, 'consumption', 'tg_consumption', 200, '', $consumption+200, '推广用户赠送200消费券');
+                return $user->save() && User::setUserSpreadCount($spread_uid) && User::where('uid', $spread_uid)->inc('consumption', 200)->update() && $bill;
                 break;
         }
     }

+ 2 - 0
route/api/route.php

@@ -161,6 +161,8 @@ Route::group(function () {
     Route::get('user/level/task/:id', 'user.UserLevelController/task')->name('userLevelTask');//获取等级任务
     //首页获取未支付订单
     Route::get('order/nopay', 'order.StoreOrderController/get_noPay')->name('getNoPay');//获取未支付订单
+    // 观看广告释放
+    Route::post('advertisement', 'user.UserController/advertisement')->name('advertisement');//观看广告释放
 })->middleware(\app\http\middleware\AllowOriginMiddleware::class)->middleware(\app\http\middleware\AuthTokenMiddleware::class, true);
 //未授权接口
 Route::group(function () {