zxhxx 3 سال پیش
والد
کامیت
d31e7eb7ac

+ 5 - 1
app/admin/controller/store/StoreProduct.php

@@ -381,8 +381,12 @@ class StoreProduct extends AuthController
             ['attrs', []],
             ['activity', []],
             ['service_charge_setting', []],
-            ['can_up_level', 1],
+            ['can_up_level', 0],
             ['company_costs',0],
+            ['is_integral',0],
+            ['one_integral',0],
+            ['two_integral',0],
+            ['max_integral',0],
         ]);
         if (!isset($data['service_charge_setting']) || !is_array($data['service_charge_setting']))
             return Json::fail('请填写正确的服务费比例');

+ 57 - 2
app/admin/view/store/store_product/create.php

@@ -787,6 +787,42 @@
                                             </div>
                                         </div>
                                     </div>
+                                    <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">
+                                        <div class="grid-demo grid-demo-bg1">
+                                            <div class="layui-form-item">
+                                                <label class="layui-form-label">直推积分</label>
+                                                <div class="layui-input-block">
+                                                    <input type="number" name="one_integral" lay-verify="title"
+                                                           autocomplete="off" placeholder="请输入直推积分" class="layui-input"
+                                                           v-model="formData.one_integral">
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">
+                                        <div class="grid-demo grid-demo-bg1">
+                                            <div class="layui-form-item">
+                                                <label class="layui-form-label">间推积分</label>
+                                                <div class="layui-input-block">
+                                                    <input type="number" name="two_integral" lay-verify="title"
+                                                           autocomplete="off" placeholder="请输入间推积分" class="layui-input"
+                                                           v-model="formData.two_integral">
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">
+                                        <div class="grid-demo grid-demo-bg1">
+                                            <div class="layui-form-item">
+                                                <label class="layui-form-label">最大可抵积分</label>
+                                                <div class="layui-input-block">
+                                                    <input type="number" name="max_integral" lay-verify="title"
+                                                           autocomplete="off" placeholder="最大可抵积分" class="layui-input"
+                                                           v-model="formData.max_integral">
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
                                     <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">
                                         <div class="grid-demo grid-demo-bg1">
                                             <div class="layui-form-item">
@@ -1064,6 +1100,21 @@
                                             </div>
                                         </div>
                                     </div>
+                                    <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">
+                                        <div class="grid-demo grid-demo-bg1">
+                                            <div class="layui-form-item">
+                                                <label class="layui-form-label">积分商品</label>
+                                                <div class="layui-input-block">
+                                                    <input type="radio" name="is_integral" lay-filter="is_integral" value="1"
+                                                           title="开启"
+                                                           :checked="formData.is_integral == 1 ? true : false">
+                                                    <input type="radio" name="is_integral" lay-filter="is_integral" value="0"
+                                                           title="关闭"
+                                                           :checked="formData.is_integral == 0 ? true : false">
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
 <!--                                    <div class="layui-row layui-col-space15">-->
 <!--                                        <div class="layui-col-xs12 layui-col-sm12 layui-col-md12">-->
 <!--                                            <div class="grid-demo grid-demo-bg1">-->
@@ -1173,6 +1224,9 @@
                 description: '',
                 ficti: 0,
                 give_integral: 0,
+                one_integral:0,
+                two_integral:0,
+                max_integral:0,
                 sort: 0,
                 is_show: 1,
                 is_hot: 0,
@@ -1181,7 +1235,8 @@
                 is_new: 0,
                 is_good: 0,
                 is_sub: 0,
-                can_up_level: 1,
+                can_up_level: 0,
+                is_integral: 0,
                 service_charge_setting: {},
                 items: [
                     // {
@@ -1222,7 +1277,7 @@
             activity: {'秒杀': '#1E9FFF', '砍价': '#189688', '拼团': '#FEB900'},
             attr: [],//临时属性
             newRule: false,//是否添加新规则
-            radioRule: ['is_sub', 'is_show', 'is_hot', 'is_benefit', 'is_new', 'is_good', 'is_best', 'spec_type','can_up_level'],//radio 当选规则
+            radioRule: ['is_sub', 'is_show', 'is_hot', 'is_benefit', 'is_new', 'is_good', 'is_best', 'spec_type','can_up_level','is_integral'],//radio 当选规则
             rule: { //多图选择规则
                 slider_image: {
                     maxLength: 5

+ 4 - 2
app/api/controller/store/StoreCartController.php

@@ -34,7 +34,7 @@ class StoreCartController
      */
     public function add(Request $request)
     {
-        list($productId, $cartNum, $uniqueId, $combinationId, $secKillId, $bargainId, $new) = UtilService::postMore([
+        list($productId, $cartNum, $uniqueId, $combinationId, $secKillId, $bargainId, $new,$can_up_level,$is_integral) = UtilService::postMore([
             ['productId',0],//普通产品编号
             ['cartNum',1], //购物车数量
             ['uniqueId',''],//属性唯一值
@@ -42,10 +42,12 @@ class StoreCartController
             ['secKillId',0],//秒杀产品编号
             ['bargainId',0],//砍价产品编号
             ['new',1], // 1 加入购物车直接购买  0 加入购物车
+            ['can_up_level',0],
+            ['is_integral',0],
         ], $request, true);
         if (!$productId || !is_numeric($productId)) return app('json')->fail('参数错误');
         if ($bargainId && StoreBargainUserHelp::getSurplusPrice($bargainId, $request->uid())) return app('json')->fail('请先砍价');
-        $res = StoreCart::setCart($request->uid(), $productId, $cartNum, $uniqueId, 'product', $new, $combinationId, $secKillId, $bargainId);
+        $res = StoreCart::setCart($request->uid(), $productId, $cartNum, $uniqueId, 'product', $new, $combinationId, $secKillId, $bargainId,$can_up_level,$is_integral);
         if (!$res) return app('json')->fail(StoreCart::getErrorInfo());
         else  return app('json')->successful('ok', ['cartId' => $res->id]);
     }

+ 1 - 0
app/api/controller/store/StoreProductController.php

@@ -44,6 +44,7 @@ class StoreProductController
             [['limit', 'd'], 0],
             [['type', 0], 0],
             ['can_up_level',0],
+            ['is_integral',0],
         ], $request);
         return app('json')->successful(StoreProduct::getProductList($data, $request->uid()));
     }

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

@@ -691,5 +691,12 @@ class UserController
     {
         return app('json')->successful(User::where('uid',input('uid',0))->value('nickname'));
     }
+    public function integral(Request $request)
+    {
+        $data['gain'] = UserBill::where('type','gain')->where('category','integral')->where('pm',1)->value('sum(number)')?:0;
+        $data['one'] = UserBill::where('type','one')->where('category','integral')->where('pm',1)->value('sum(number)')?:0;
+        $data['two'] = UserBill::where('type','two')->where('category','integral')->where('pm',1)->value('sum(number)')?:0;
+        return app('json')->successful($data);
+    }
 
 }

+ 4 - 4
app/models/store/StoreCart.php

@@ -42,7 +42,7 @@ class StoreCart extends BaseModel
         return time();
     }
 
-    public static function setCart($uid, $product_id, $cart_num = 1, $product_attr_unique = '', $type = 'product', $is_new = 0, $combination_id = 0, $seckill_id = 0, $bargain_id = 0)
+    public static function setCart($uid, $product_id, $cart_num = 1, $product_attr_unique = '', $type = 'product', $is_new = 0, $combination_id = 0, $seckill_id = 0, $bargain_id = 0,$can_up_level,$is_integral)
     {
         if ($cart_num < 1) $cart_num = 1;
         if (!$product_attr_unique) {
@@ -76,7 +76,7 @@ class StoreCart extends BaseModel
             return $cart;
         } else {
             $add_time = time();
-            return self::create(compact('uid', 'product_id', 'cart_num', 'product_attr_unique', 'is_new', 'type', 'combination_id', 'add_time', 'bargain_id', 'seckill_id'));
+            return self::create(compact('uid', 'product_id', 'cart_num', 'product_attr_unique', 'is_new', 'type', 'combination_id', 'add_time', 'bargain_id', 'seckill_id','can_up_level','is_integral'));
         }
     }
 
@@ -133,7 +133,7 @@ class StoreCart extends BaseModel
 
     public static function getUserProductCartList($uid, $cartIds = '', $status = 0)
     {
-        $productInfoField = 'id,image,price,ot_price,vip_price,postage,give_integral,sales,stock,store_name,unit_name,is_show,is_del,is_postage,cost,is_sub,temp_id';
+        $productInfoField = 'id,image,price,ot_price,vip_price,postage,give_integral,sales,stock,store_name,unit_name,is_show,is_del,is_postage,cost,is_sub,temp_id,can_up_level,is_integral,one_integral,two_integral,max_integral';
         $seckillInfoField = 'id,image,price,ot_price,postage,give_integral,sales,stock,title as store_name,unit_name,is_show,is_del,is_postage,cost,temp_id,weight,volume,start_time,stop_time,time_id';
         $bargainInfoField = 'id,image,min_price as price,price as ot_price,postage,give_integral,sales,stock,title as store_name,unit_name,status as is_show,is_del,is_postage,cost,temp_id,weight,volume';
         $combinationInfoField = 'id,image,price,postage,sales,stock,title as store_name,is_show,is_del,is_postage,cost,temp_id,weight,volume';
@@ -207,7 +207,7 @@ class StoreCart extends BaseModel
                         $invalid[] = $cart;
                     else {
                         $cart['productInfo']['attrInfo'] = $attrInfo;
-                        if ($cart['combination_id'] || $cart['seckill_id'] || $cart['bargain_id']) {
+                        if ($cart['combination_id'] || $cart['seckill_id'] || $cart['bargain_id'] || $cart['can_up_level'] || $cart['is_integral']) {
                             if ($cart['bargain_id']) {
                                 $cart['truePrice'] = $cart['productInfo']['price'];
                             } else {

+ 29 - 12
app/models/store/StoreOrder.php

@@ -311,6 +311,9 @@ class StoreOrder extends BaseModel
             $cartIds = [];
             $totalNum = 0;
             $gainIntegral = 0;
+            $use_max_integral=0;
+            $one_integral = 0;
+            $two_integral = 0;
             foreach ($cartInfo as $cart){
                 if (!$test && !self::checkProductStock($uid, $cart['product_id'], $cart['cart_num'], $cart['product_attr_unique'], $cart['combination_id'], $cart['seckill_id'], $cart['bargain_id'])) {
                     return false;
@@ -322,6 +325,18 @@ class StoreOrder extends BaseModel
                 if (!$combinationId) $combinationId = $cart['combination_id'];
                 $cartInfoGainIntegral = isset($cart['productInfo']['give_integral']) ? bcmul($cart['cart_num'], $cart['productInfo']['give_integral'], 2) : 0;
                 $gainIntegral = bcadd($gainIntegral, $cartInfoGainIntegral, 2);
+                if(isset($cart['productInfo']['max_integral']) && $cart['productInfo']['max_integral']>0)
+                {
+                    $use_max_integral+=intval($cart['productInfo']['max_integral'])*intval($cart['cart_num']);
+                }
+                if(isset($cart['productInfo']['one_integral']) && $cart['productInfo']['one_integral']>0)
+                {
+                    $one_integral+=intval($cart['productInfo']['one_integral'])*intval($cart['cart_num']);
+                }
+                if(isset($cart['productInfo']['two_integral']) && $cart['productInfo']['two_integral']>0)
+                {
+                    $two_integral+=intval($cart['productInfo']['two_integral'])*intval($cart['cart_num']);
+                }
             }
             $deduction = $seckill_id || $bargain_id || $combinationId;
             if ($deduction) {
@@ -375,19 +390,14 @@ class StoreOrder extends BaseModel
             //积分抵扣
             $res2 = true;
             $SurplusIntegral = 0;
-            if ($useIntegral && $userInfo['integral'] > 0) {
+            if ($useIntegral && $userInfo['integral'] > 0 && $use_max_integral>0) {
                 $deductionPrice = (float)bcmul($userInfo['integral'], $other['integralRatio'], 2);
+                if($deductionPrice>$use_max_integral) $deductionPrice = $use_max_integral;
                 if ($deductionPrice < $payPrice) {
                     $payPrice = bcsub($payPrice, $deductionPrice, 2);
-                    $usedIntegral = $userInfo['integral'];
+                    $usedIntegral = $userInfo['integral']>$use_max_integral?$use_max_integral:$userInfo['integral'];
                     $SurplusIntegral = 0;
-                    $res2 = false !== User::edit(['integral' => 0], $userInfo['uid'], 'uid');
-                } else {
-                    $deductionPrice = $payPrice;
-                    $usedIntegral = (float)bcdiv($payPrice, $other['integralRatio'], 2);
-                    $SurplusIntegral = bcsub($userInfo['integral'], $usedIntegral, 2);
                     $res2 = false !== User::bcDec($userInfo['uid'], 'integral', $usedIntegral, 'uid');
-                    $payPrice = 0;
                 }
                 $res2 = $res2 && false != UserBill::expend('积分抵扣', $uid, 'integral', 'deduction', $usedIntegral, $key, $userInfo['integral'], '购买商品使用' . floatval($usedIntegral) . '积分抵扣' . floatval($deductionPrice) . '元');
             } else {
@@ -438,6 +448,9 @@ class StoreOrder extends BaseModel
                 'shipping_type' => $shipping_type,
                 'code' => input('post.code',''),
                 'can_up_level' => input('can_up_level',0),
+                'is_integral' => input('is_integral',0),
+                'two_integral' =>$two_integral,
+                'one_integral' =>$one_integral,
             ];
             if ($shipping_type === 2) {
                 $orderInfo['verify_code'] = self::getStoreCode();
@@ -470,7 +483,7 @@ class StoreOrder extends BaseModel
             return self::setErrorInfo('生成订单时SQL执行错误错误原因:' . $e->getMessage());
         } catch (\Exception $e) {
             self::rollbackTrans();
-            return self::setErrorInfo('生成订单时系统错误错误原因:' . $e->getMessage());
+            return self::setErrorInfo('生成订单时系统错误错误原因:' . $e->getFile().'--'.$e->getLine().'--'.$e->getMessage());
         }
     }
 
@@ -2111,9 +2124,11 @@ class StoreOrder extends BaseModel
                    if($levelinfo &&$levelinfo['one']>0)
                    {
                        $brokerage = bcmul($order['total_price'],bcdiv($levelinfo['one'],100,3),2);
-                       User::where('uid', $oneuser['uid'])->inc('brokerage_price', $brokerage)->update();
+                       User::where('uid', $oneuser['uid'])->inc('brokerage_price', $brokerage)->inc('integral',$order['one_integral'])->update();
                        $str = sprintf("推荐%s用户,订单金额%2.f,获得推荐奖:%.2f", $user['nickname'],$order['total_price'], $brokerage);
                        UserBill::income('直推奖', $oneuser['uid'], 'now_money', 'brokerage_price',$brokerage , $order['id'], bcadd($oneuser['brokerage_price'], $brokerage, 2), $str, 1);
+                       $str = sprintf("推荐%s用户,获得推荐积分:%.2f", $user['nickname'], $order['one_integral']);
+                       UserBill::income('直推积分', $oneuser['uid'], 'integral', 'one',$order['one_integral'] , $order['id'], bcadd($oneuser['integral'], $order['one_integral'], 2), $str, 1);
                    }
                }
                if($twouser)
@@ -2122,9 +2137,11 @@ class StoreOrder extends BaseModel
                    if($levelinfo && $levelinfo['two']>0)
                    {
                        $brokerage = bcmul($order['total_price'],bcdiv($levelinfo['two'],100,3),2);
-                       User::where('uid', $twouser['uid'])->inc('brokerage_price', $brokerage)->update();
+                       User::where('uid', $twouser['uid'])->inc('brokerage_price', $brokerage)->inc('integral',$order['two_integral'])->update();
                        $str = sprintf("推荐%s用户,订单金额%2.f,获得推荐奖:%.2f", $user['nickname'],$order['total_price'], $brokerage);
                        UserBill::income('间推奖', $twouser['uid'], 'now_money', 'brokerage_price',$brokerage , $order['id'], bcadd($twouser['brokerage_price'], $brokerage, 2), $str, 1);
+                       $str = sprintf("间推%s用户,获得间推奖:%.2f", $user['nickname'], $order['two_integral']);
+                       UserBill::income('间推积分', $oneuser['uid'], 'integral', 'two',$order['two_integral'] , $order['id'], bcadd($oneuser['integral'], $order['two_integral'], 2), $str, 1);
                    }
                }
                User::where('uid',$user['uid'])->inc('monetary',$order['total_price'])->update();
@@ -2133,7 +2150,7 @@ class StoreOrder extends BaseModel
            return true;
        }catch (Exception $e)
        {
-           return StoreOrderCartInfo::setErrorInfo($e->getMessage());
+           return StoreOrderCartInfo::setErrorInfo($e->getLine().'--'.$e->getMessage(),true);
        }
    }
     /**

+ 2 - 2
app/models/store/StoreOrderCartInfo.php

@@ -38,9 +38,9 @@ class StoreOrderCartInfo extends BaseModel
                 'oid'=>$oid,
                 'cart_id'=>$cart['id'],
                 'product_id'=>$cart['productInfo']['id'],
-                'cart_num'  => $cart['productInfo']['attrInfo']['suk'],
+                'cart_num'  => intval($cart['productInfo']['attrInfo']['suk'])>0?:$cart['cart_num'],
                 'cart_cost' => $cart['productInfo']['cost'],
-                'cart_price' => bcdiv($cart['truePrice'],$cart['productInfo']['attrInfo']['suk'],2),
+                'cart_price' => intval($cart['productInfo']['attrInfo']['suk'])>0?bcdiv($cart['truePrice'],intval($cart['productInfo']['attrInfo']['suk']),2):$cart['truePrice'],
                 'cart_info'=>json_encode($cart),
                 'unique'=>md5($cart['id'].''.$oid)
             ];

+ 3 - 2
app/models/store/StoreProduct.php

@@ -58,7 +58,7 @@ class StoreProduct extends BaseModel
         return htmlspecialchars_decode($value);
     }
 
-    public static function getValidProduct($productId, $field = 'add_time,browse,cate_id,code_path,ficti,give_integral,id,image,is_sub,is_bargain,is_benefit,is_best,is_del,is_hot,is_new,is_postage,is_seckill,is_show,keyword,mer_id,mer_use,ot_price,postage,price,sales,slider_image,sort,stock,store_info,store_name,unit_name,vip_price,spec_type,IFNULL(sales,0) + IFNULL(ficti,0) as fsales,video_link,can_up_level')
+    public static function getValidProduct($productId, $field = 'add_time,browse,cate_id,code_path,ficti,give_integral,id,image,is_sub,is_bargain,is_benefit,is_best,is_del,is_hot,is_new,is_postage,is_seckill,is_show,keyword,mer_id,mer_use,ot_price,postage,price,sales,slider_image,sort,stock,store_info,store_name,unit_name,vip_price,spec_type,IFNULL(sales,0) + IFNULL(ficti,0) as fsales,video_link,can_up_level,is_integral,one_integral,two_integral,max_integral')
     {
         $Product = self::where('is_del', 0)->where('is_show', 1)->where('id', $productId)->field($field)->find();
         if ($Product) return $Product->toArray();
@@ -108,13 +108,14 @@ class StoreProduct extends BaseModel
         if (!empty($keyword)) $model->where('keyword|store_name', 'LIKE', htmlspecialchars("%$keyword%"));
         if ($news != 0) $model->where('is_new', 1);
         if (isset($data['can_up_level']) && $data['can_up_level']==1) $model = $model->where('can_up_level', 1); else $model = $model->where('can_up_level', 0);
+        if (isset($data['is_integral']) && $data['is_integral']==1) $model = $model->where('is_integral', 1); else $model = $model->where('is_integral', 0);
         $baseOrder = '';
         if ($priceOrder) $baseOrder = $priceOrder == 'desc' ? 'price DESC' : 'price ASC';
 //        if($salesOrder) $baseOrder = $salesOrder == 'desc' ? 'sales DESC' : 'sales ASC';//真实销量
         if ($salesOrder) $baseOrder = $salesOrder == 'desc' ? 'sales DESC' : 'sales ASC';//虚拟销量
         if ($baseOrder) $baseOrder .= ', ';
         $model->order($baseOrder . 'sort DESC, add_time DESC');
-        $list = $model->page((int)$page, (int)$limit)->field('id,store_name,cate_id,image,IFNULL(sales,0) + IFNULL(ficti,0) as sales,price,stock,spec_type')->select()->each(function ($item) use ($uid, $type) {
+        $list = $model->page((int)$page, (int)$limit)->field('id,store_name,cate_id,image,IFNULL(sales,0) + IFNULL(ficti,0) as sales,price,stock,spec_type,ot_price,can_up_level,is_integral,one_integral,two_integral,max_integral')->select()->each(function ($item) use ($uid, $type) {
             if ($type) {
                 if ($item['spec_type']) {
                     $item['is_att'] = StoreProductAttrValueModel::where(['product_id' => $item['id'], 'type' => 0])->count() ? true : false;

+ 1 - 0
route/api/route.php

@@ -106,6 +106,7 @@ Route::group(function () {
     Route::get('sign/month', 'user.UserController/sign_month')->name('signIntegral');//签到列表(年月)
     Route::post('sign/user', 'user.UserController/sign_user')->name('signUser');//签到用户信息
     Route::post('sign/integral', 'user.UserController/sign_integral')->name('signIntegral');//签到
+    Route::get('integral', 'user.UserController/integral')->name('integral');//获取积分信息
     //优惠券类
     Route::post('coupon/receive', 'store.StoreCouponsController/receive')->name('couponReceive'); //领取优惠券
     Route::post('coupon/receive/batch', 'store.StoreCouponsController/receive_batch')->name('couponReceiveBatch'); //批量领取优惠券