zxhxx 3 년 전
부모
커밋
b0278ea6b9

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

@@ -272,7 +272,11 @@ class StoreProduct extends AuthController
             ['video_link', ''],
             ['items', []],
             ['attrs', []],
-            ['activity', []]
+            ['activity', []],
+            ['is_gp',0],
+            ['out_amount',0],
+            ['recommend',0],
+            ['team',0],
         ]);
         foreach ($data['activity'] as $k => $v) {
             if ($v == '秒杀') {

+ 51 - 1
app/admin/view/store/store_product/create.php

@@ -606,6 +606,39 @@
                                             </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">每3人奖</label>
+                                                <div class="layui-input-block">
+                                                    <input type="number" name="out_amount" lay-verify="out_amount"
+                                                           autocomplete="off" placeholder="每3人奖" class="layui-input" v-model="formData.out_amount">
+                                                </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="recommend" lay-verify="recommend"
+                                                           autocomplete="off" placeholder="推荐奖" class="layui-input" v-model="formData.recommend">
+                                                </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="team" lay-verify="team"
+                                                           autocomplete="off" placeholder="见点奖" class="layui-input" v-model="formData.team">
+                                                </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">
@@ -816,6 +849,19 @@
                                             </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_gp" lay-filter="is_gp" value="1" title="开启"
+                                                           :checked="formData.is_gp == 1 ? true : false">
+                                                    <input type="radio" name="is_gp" lay-filter="is_gp" value="0" title="关闭"
+                                                           :checked="formData.is_gp == 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">
@@ -914,6 +960,10 @@
                 is_new: 0,
                 is_good: 0,
                 is_sub:0,
+                is_gp:0,
+                out_amount:0,
+                recommend:0,
+                team:0,
                 items: [
                     // {
                     //     value: '',
@@ -950,7 +1000,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'],//radio 当选规则
+            radioRule: ['is_sub','is_show', 'is_hot', 'is_benefit', 'is_new','is_good' ,'is_best', 'spec_type','team'],//radio 当选规则
             rule: { //多图选择规则
                 slider_image: {
                     maxLength: 5

+ 13 - 49
app/api/controller/AuthController.php

@@ -14,6 +14,7 @@ use crmeb\jobs\TestJob;
 use crmeb\repositories\ShortLetterRepositories;
 use crmeb\services\CacheService;
 use crmeb\services\UtilService;
+use crmeb\services\ZjSMSServerService;
 use think\facade\Cache;
 use think\exception\ValidateException;
 use think\facade\Config;
@@ -127,60 +128,23 @@ class AuthController
      */
     public function verify(Request $request)
     {
-        list($phone, $type, $key, $code) = UtilService::postMore([['phone', 0], ['type', ''], ['key', ''], ['code', '']], $request, true);
-
-        $keyName = 'sms.key.' . $key;
-        $nowKey = 'sms.' . date('YmdHi');
-
-        if (!Cache::has($keyName))
-            return app('json')->make(401, '发送验证码失败');
-
-        if (($num = Cache::get($keyName)) > 2) {
-            if (!$code)
-                return app('json')->make(402, '请输入验证码');
-
-            if (!$this->checkCaptcha($key, $code))
-                return app('json')->fail('验证码输入有误');
-        }
-
-        $total = 1;
-        if ($has = Cache::has($nowKey)) {
-            $total = Cache::get($nowKey);
-            if ($total > Config::get('sms.maxMinuteCount', 20))
-                return app('json')->success('已发送');
-        }
-
+        list($phone, $type) = UtilService::postMore([['phone',0],['type','']],$request, true);
         try {
-            validate(RegisterValidates::class)->scene('code')->check(['phone' => $phone]);
+            validate(RegisterValidates::class)->scene('code')->check(['phone'=>$phone]);
         } catch (ValidateException $e) {
             return app('json')->fail($e->getError());
         }
-        if (User::checkPhone($phone) && $type == 'register') return app('json')->fail('手机号已注册');
-        if (!User::checkPhone($phone) && $type == 'login') return app('json')->fail('账号不存在!');
-        $default = Config::get('sms.default', 'yunxin');
-        $defaultMaxPhoneCount = Config::get('sms.maxPhoneCount', 10);
-        $defaultMaxIpCount = Config::get('sms.maxIpCount', 50);
-        $maxPhoneCount = Config::get('sms.stores.' . $default . '.maxPhoneCount', $defaultMaxPhoneCount);
-        $maxIpCount = Config::get('sms.stores.' . $default . '.maxIpCount', $defaultMaxIpCount);
-        if (SmsRecord::where('phone', $phone)->where('add_ip', $request->ip())->whereDay('add_time')->count() >= $maxPhoneCount) {
-            return app('json')->fail('您今日发送得短信次数已经达到上限');
-        }
-        if (SmsRecord::where('add_ip', $request->ip())->whereDay('add_time')->count() >= $maxIpCount) {
-            return app('json')->fail('此IP今日发送次数已经达到上限');
-        }
-        $time = 60;
-        if (CacheService::get('code_' . $phone))
-            return app('json')->fail($time . '秒内有效');
-        $code = rand(100000, 999999);
+        if(User::checkPhone($phone) && $type == 'register') return app('json')->fail('手机号已注册');
+        if(!User::checkPhone($phone) && $type == 'login') return app('json')->fail('账号不存在!');
+        $time = 300;
+        if(CacheService::get('code_'.$phone) && false)
+            return app('json')->fail($time.'秒内有效');
+        $code = rand(100000,999999);
         $data['code'] = $code;
-        $res = ShortLetterRepositories::send(true, $phone, $data, 'VERIFICATION_CODE');
-        if ($res !== true)
-            return app('json')->fail('短信平台验证码发送失败' . $res);
-        CacheService::set('code_' . $phone, $code, $time);
-        Cache::set($keyName, $num + 1, 300);
-        Cache::set($nowKey, $total, 61);
-
-        return app('json')->success('发送成功');
+        $res = ZjSMSServerService::send($phone,$data);
+        if($res['status'] == 400) return app('json')->fail('短信平台验证码发送失败'.$res['msg']);
+        CacheService::set('code_'.$phone, $code, $time);
+        return app('json')->success($res['msg'] ?? '发送失败');
     }
 
     /**

+ 17 - 0
app/api/controller/order/StoreOrderController.php

@@ -351,6 +351,23 @@ class StoreOrderController
                     return app('json')->fail(is_array($error) && isset($error['msg']) ? $error['msg'] : $error);
                 }
                 break;
+            case 'integral':
+                if (StoreOrder::integralPay($order['order_id'], $request->uid()))
+                    return app('json')->status('success', '积分支付成功');
+                else {
+                    $error = StoreOrder::getErrorInfo();
+                    return app('json')->fail(is_array($error) && isset($error['msg']) ? $error['msg'] : $error);
+                }
+                break;
+            case 'gp_now_money':
+                if (StoreOrder::gp_now_moneyPay($order['order_id'], $request->uid()))
+                    return app('json')->status('success', '报单支付成功');
+                else {
+                    $error = StoreOrder::getErrorInfo();
+                    return app('json')->fail(is_array($error) && isset($error['msg']) ? $error['msg'] : $error);
+                }
+                break;
+
             case 'offline':
                 StoreOrder::createOrderTemplate($order);
                 if (StoreOrder::setOrderTypePayOffline($order['order_id']))

+ 3 - 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,$is_gp) = UtilService::postMore([
             ['productId',0],//普通产品编号
             ['cartNum',1], //购物车数量
             ['uniqueId',''],//属性唯一值
@@ -42,10 +42,11 @@ class StoreCartController
             ['secKillId',0],//秒杀产品编号
             ['bargainId',0],//砍价产品编号
             ['new',1], // 1 加入购物车直接购买  0 加入购物车
+            ['is_gp',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,$is_gp);
         if (!$res) return app('json')->fail(StoreCart::getErrorInfo());
         else  return app('json')->successful('ok', ['cartId' => $res->id]);
     }

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

@@ -42,7 +42,8 @@ class StoreProductController
             [['news', 'd'], 0],
             [['page', 'd'], 0],
             [['limit', 'd'], 0],
-            [['type', 0], 0]
+            [['type', 0], 0],
+            ['is_gp', 0]
         ], $request);
         return app('json')->successful(StoreProduct::getProductList($data, $request->uid()));
     }

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

@@ -41,7 +41,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,$is_gp=0)
     {
         if ($cart_num < 1) $cart_num = 1;
         if (!$product_attr_unique) {
@@ -75,7 +75,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','is_gp'));
         }
     }
 
@@ -132,7 +132,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,is_gp,out_amount,recommend,team';
         $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';
@@ -206,7 +206,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['is_gp']) {
                             if ($cart['bargain_id']) {
                                 $cart['truePrice'] = $cart['productInfo']['price'];
                             } else {

+ 42 - 33
app/models/store/StoreGp.php

@@ -26,39 +26,46 @@ class StoreGp extends BaseModel
             self::create(compact('no', 'uid', 'order_id', 'add_time', 'price', 'p_no', 'no_path'));
             self::where('no', $p_no)->inc('cts', 1)->update();
             self::where('no', $gp_id)->inc('team_cts', 1)->update();
+            $user = User::where('uid',$order['uid'])->find();
+            User::where('uid',$order['uid'])->inc('cycle_time',strtotime("+31 day "));
+            if($user['spread_uid']>0)
+            {
+                User::where('uid',$user['spread_uid'])->inc('cycle_time',strtotime("+31 day "));
+            }
             $p_no_cts =  self::where('no', $gp_id)->value('team_cts');
             if ($p_no_cts % 3 == 0) {
                 $info = self::where('no', $gp_id)->find();
                 $sp_userInfo = User::find($info['uid']);
-                switch ($p_no_cts)
-                {
-                    case 3:
-                        $sp_brokeragePrice = $order['out_amount']-3000;
-                        $balance = bcadd($sp_userInfo['brokerage_price'], $sp_brokeragePrice, 2);
-                        $mark = "公排号:" . $no . '满3个拥金' . $order['out_amount'] . "元,订单号:" . $order['order_id'];
-                        $res = UserBill::income('满3个拥金', $sp_userInfo['uid'], 'now_money', 'brokerage', $sp_brokeragePrice, $order['id'], $balance, $mark, 1);
-                        $sp_brokeragePrice1 = 3000;
-                        $gp_balance = bcadd($sp_userInfo['gp_now_money'], $sp_brokeragePrice1, 2);
-                        $mark = "公排号:" . $no . '满3个加报单余额' . $order['out_amount'] . "元,订单号:" . $order['order_id'];
-                        $res = UserBill::income('满3个报单余额', $sp_userInfo['uid'], 'now_money', 'brokerage', $sp_brokeragePrice1, $order['id'], $balance, $mark, 1);
-                        User::where('uid', $sp_userInfo['uid'])->inc('brokerage_price', $sp_brokeragePrice)->inc('gp_now_money',$sp_brokeragePrice1)->update();
-                        break;
-                    case 6:
-                    case 9:
-                        $sp_brokeragePrice = $order['out_amount'];
-                        $balance = bcadd($sp_userInfo['brokerage_price'], $sp_brokeragePrice, 2);
-                        $mark = "公排号:" . $no . '满'.$p_no_cts.'个拥金' . $order['out_amount'] . "元,订单号:" . $order['order_id'];
-                        $res = UserBill::income('满'.$p_no_cts.'个拥金', $sp_userInfo['uid'], 'now_money', 'brokerage', $sp_brokeragePrice, $order['id'], $balance, $mark, 1);
-                        User::where('uid', $sp_userInfo['uid'])->inc('brokerage_price', $sp_brokeragePrice)->update();
-                    break;
-                    case 12:
-                        $sp_brokeragePrice = $order['out_amount']-1000;
-                        $balance = bcadd($sp_userInfo['brokerage_price'], $sp_brokeragePrice, 2);
-                        $mark = "公排号:" . $no . '满'.$p_no_cts.'个拥金' . $order['out_amount'] . "元,订单号:" . $order['order_id'];
-                        $res = UserBill::income('满'.$p_no_cts.'个拥金', $sp_userInfo['uid'], 'now_money', 'brokerage', $sp_brokeragePrice, $order['id'], $balance, $mark, 1);
-                        User::where('uid', $sp_userInfo['uid'])->inc('brokerage_price', $sp_brokeragePrice)->update();
-                        self::where('no', $gp_id)->update(['status'=>1]);
-                        break;
+                if($sp_userInfo['cycle_time']>time()) {
+                    switch ($p_no_cts) {
+                        case 3:
+                            $sp_brokeragePrice = $order['out_amount'] - 3000;
+                            $balance = bcadd($sp_userInfo['brokerage_price'], $sp_brokeragePrice, 2);
+                            $mark = "公排号:" . $no . '满3个拥金' . $order['out_amount'] . "元,订单号:" . $order['order_id'];
+                            $res = UserBill::income('满3个拥金', $sp_userInfo['uid'], 'now_money', 'brokerage', $sp_brokeragePrice, $order['id'], $balance, $mark, 1);
+                            $sp_brokeragePrice1 = 3000;
+                            $gp_balance = bcadd($sp_userInfo['gp_now_money'], $sp_brokeragePrice1, 2);
+                            $mark = "公排号:" . $no . '满3个加报单余额' . $order['out_amount'] . "元,订单号:" . $order['order_id'];
+                            $res = UserBill::income('满3个报单余额', $sp_userInfo['uid'], 'now_money', 'brokerage', $sp_brokeragePrice1, $order['id'], $balance, $mark, 1);
+                            User::where('uid', $sp_userInfo['uid'])->inc('brokerage_price', $sp_brokeragePrice)->inc('gp_now_money', $sp_brokeragePrice1)->update();
+                            break;
+                        case 6:
+                        case 9:
+                            $sp_brokeragePrice = $order['out_amount'];
+                            $balance = bcadd($sp_userInfo['brokerage_price'], $sp_brokeragePrice, 2);
+                            $mark = "公排号:" . $no . '满' . $p_no_cts . '个拥金' . $order['out_amount'] . "元,订单号:" . $order['order_id'];
+                            $res = UserBill::income('满' . $p_no_cts . '个拥金', $sp_userInfo['uid'], 'now_money', 'brokerage', $sp_brokeragePrice, $order['id'], $balance, $mark, 1);
+                            User::where('uid', $sp_userInfo['uid'])->inc('brokerage_price', $sp_brokeragePrice)->update();
+                            break;
+                        case 12:
+                            $sp_brokeragePrice = $order['out_amount'] - 1000;
+                            $balance = bcadd($sp_userInfo['brokerage_price'], $sp_brokeragePrice, 2);
+                            $mark = "公排号:" . $no . '满' . $p_no_cts . '个拥金' . $order['out_amount'] . "元,订单号:" . $order['order_id'];
+                            $res = UserBill::income('满' . $p_no_cts . '个拥金', $sp_userInfo['uid'], 'now_money', 'brokerage', $sp_brokeragePrice, $order['id'], $balance, $mark, 1);
+                            User::where('uid', $sp_userInfo['uid'])->inc('brokerage_price', $sp_brokeragePrice)->update();
+                            self::where('no', $gp_id)->update(['status' => 1]);
+                            break;
+                    }
                 }
 
             }
@@ -70,10 +77,12 @@ class StoreGp extends BaseModel
                     if ($n <= 1) continue;
                     $sp_brokeragePrice = $order['team'];
                     $user = user::find($v);
-                    $balance = bcadd($user['brokerage_price'], $sp_brokeragePrice, 2);
-                    $mark = "公排号:" . $no . '团队奖' . floatval($sp_brokeragePrice) . "元,订单号:" . $order['order_id'];
-                    $res1 = UserBill::income('团队奖', $user['uid'], 'now_money', 'brokerage', $sp_brokeragePrice, $order['id'], $balance, $mark, 1);
-                    User::where('uid', $user['uid'])->inc('brokerage_price', $sp_brokeragePrice)->update();
+                    if($user['cycle_time']>time()) {
+                        $balance = bcadd($user['brokerage_price'], $sp_brokeragePrice, 2);
+                        $mark = "公排号:" . $no . '团队奖' . floatval($sp_brokeragePrice) . "元,订单号:" . $order['order_id'];
+                        $res1 = UserBill::income('团队奖', $user['uid'], 'now_money', 'brokerage', $sp_brokeragePrice, $order['id'], $balance, $mark, 1);
+                        User::where('uid', $user['uid'])->inc('brokerage_price', $sp_brokeragePrice)->update();
+                    }
                 }
             }
             return true;

+ 76 - 2
app/models/store/StoreOrder.php

@@ -50,7 +50,7 @@ class StoreOrder extends BaseModel
 
     protected $insert = ['add_time'];
 
-    protected static $payType = ['weixin' => '微信支付', 'yue' => '余额支付', 'offline' => '线下支付'];
+    protected static $payType = ['weixin' => '微信支付', 'yue' => '余额支付', 'offline' => '线下支付','gp_now_money'=>'报单金额','integral'=>'积分'];
 
     protected static $deliveryType = ['send' => '商家配送', 'express' => '快递配送'];
 
@@ -437,6 +437,10 @@ class StoreOrder extends BaseModel
                 'add_time' => time(),
                 'unique' => $key,
                 'shipping_type' => $shipping_type,
+                'is_gp' => input('gp',0),
+                'out_amount' => input('out_amount',0),
+                'team' => input('team',0),
+                'is_gp' => input('gp',0),
             ];
             if ($shipping_type === 2) {
                 $orderInfo['verify_code'] = self::getStoreCode();
@@ -667,6 +671,76 @@ class StoreOrder extends BaseModel
         self::checkTrans($res);
         return $res;
     }
+    /**
+     * 积分支付
+     * @param $order_id
+     * @param $uid
+     * @param string $formId
+     * @return bool
+     * @throws \think\Exception
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
+    public static function integralPay($order_id, $uid, $formId = '')
+    {
+        $orderInfo = self::where('uid', $uid)->where('order_id', $order_id)->where('is_del', 0)->find();
+        if (!$orderInfo) return self::setErrorInfo('订单不存在!');
+        if ($orderInfo['paid']) return self::setErrorInfo('该订单已支付!');
+//        if($orderInfo['pay_type'] != 'yue') return self::setErrorInfo('该订单不能使用余额支付!');
+        $userInfo = User::getUserInfo($uid);
+        if ($userInfo['integral'] < $orderInfo['pay_price'])
+            return self::setErrorInfo(['status' => 'pay_deficiency', 'msg' => '积分不足' . floatval($orderInfo['pay_price'])]);
+        self::beginTrans();
+
+        $res1 = false !== User::bcDec($uid, 'integral', $orderInfo['pay_price'], 'uid');
+        $res2 = UserBill::expend('购买商品', $uid, 'integral', 'pay_product', $orderInfo['pay_price'], $orderInfo['id'], $userInfo['now_money'], '积分支付' . floatval($orderInfo['pay_price']) . '元购买商品');
+        $res3 = self::paySuccess($order_id, 'integral', $formId);//余额支付成功
+        try {
+            PaymentRepositories::yuePayProduct($userInfo, $orderInfo);
+        } catch (\Exception $e) {
+            self::rollbackTrans();
+            return self::setErrorInfo($e->getMessage());
+        }
+        $res = $res1 && $res2 && $res3;
+        self::checkTrans($res);
+        return $res;
+    }
+    /**
+     * 报单余额支付
+     * @param $order_id
+     * @param $uid
+     * @param string $formId
+     * @return bool
+     * @throws \think\Exception
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
+    public static function gp_now_moneyPay($order_id, $uid, $formId = '')
+    {
+        $orderInfo = self::where('uid', $uid)->where('order_id', $order_id)->where('is_del', 0)->find();
+        if (!$orderInfo) return self::setErrorInfo('订单不存在!');
+        if ($orderInfo['paid']) return self::setErrorInfo('该订单已支付!');
+//        if($orderInfo['pay_type'] != 'yue') return self::setErrorInfo('该订单不能使用余额支付!');
+        $userInfo = User::getUserInfo($uid);
+        if ($userInfo['gp_now_money'] < $orderInfo['pay_price'])
+            return self::setErrorInfo(['status' => 'pay_deficiency', 'msg' => '报单余额不足' . floatval($orderInfo['pay_price'])]);
+        self::beginTrans();
+
+        $res1 = false !== User::bcDec($uid, 'gp_now_money', $orderInfo['pay_price'], 'uid');
+        $res2 = UserBill::expend('购买商品', $uid, 'gp_now_money', 'pay_product', $orderInfo['pay_price'], $orderInfo['id'], $userInfo['gp_now_money'], '积分支付' . floatval($orderInfo['pay_price']) . '元购买商品');
+        $res3 = self::paySuccess($order_id, 'gp_now_money', $formId);//余额支付成功
+        try {
+            PaymentRepositories::yuePayProduct($userInfo, $orderInfo);
+        } catch (\Exception $e) {
+            self::rollbackTrans();
+            return self::setErrorInfo($e->getMessage());
+        }
+        $res = $res1 && $res2 && $res3;
+        self::checkTrans($res);
+        return $res;
+    }
 
     /**
      * 微信支付 为 0元时
@@ -754,7 +828,7 @@ class StoreOrder extends BaseModel
         $resPink = true;$resGp = true;
         $res1 = self::where('order_id', $orderId)->update(['paid' => 1, 'pay_type' => $paytype, 'pay_time' => time()]);//订单改为支付
         if ($order->combination_id && $res1 && !$order->refund_status) $resPink = StorePink::createPink($order);//创建拼团
-        if ($order->is_gp && $res1 && !$order->refund_status) $resGp = StorePink::createPink($order);//创建拼团
+        if ($order->is_gp && $res1 && !$order->refund_status) $resGp = StoreGp::createGp($order);//创建公排
         $oid = self::where('order_id', $orderId)->value('id');
         StoreOrderStatus::status($oid, 'pay_success', '用户付款成功');
         $now_money = User::where('uid', $order['uid'])->value('now_money');

+ 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')
+    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,is_gp,out_amount,recommend,team')
     {
         $Product = self::where('is_del', 0)->where('is_show', 1)->where('id', $productId)->field($field)->find();
         if ($Product) return $Product->toArray();
@@ -107,13 +107,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 ($data['is_gp'] == 1) $model->where('is_new', 1);else $model->where('is_new', 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,is_gp,out_amount,recommend,team')->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;

+ 82 - 0
crmeb/services/ZjSMSServerService.php

@@ -0,0 +1,82 @@
+<?php
+namespace crmeb\services;
+use think\facade\Db;
+
+/**
+ * 短信服务
+ * Class SMSService
+ * @package crmeb\services
+ */
+class ZjSMSServerService
+{
+    private static $userid = '15889';
+    private static $username = "yflkj";
+    private static $passwd = 'yfl831**';
+    //验证码
+    const VERIFICATION_CODE = 518076;
+    //支付成功
+    const PAY_SUCCESS_CODE = 520268;
+    //发货提醒
+    const DELIVER_GOODS_CODE = 520269;
+    //确认收货提醒
+    const TAKE_DELIVERY_CODE = 520271;
+    //管理员下单提醒
+    const ADMIN_PLACE_ORDER_CODE = 520272;
+    //管理员退货提醒
+    const ADMIN_RETURN_GOODS_CODE = 520274;
+    //管理员支付成功提醒
+    const ADMIN_PAY_SUCCESS_CODE = 520273;
+    //管理员确认收货
+    const ADMIN_TAKE_DELIVERY_CODE = 520422;
+    /**
+     * get: 发送短信验证码
+     * path: sendSmsCode
+     * method: sendSmsCode
+     * param: phone - {string} 手机号
+     */
+    public  static function send($phone, array  $param ,$template="VERIFICATION_CODE")
+    {
+        $code = $param['code'];
+        $target = "http://sms.izjun.cn/v2sms.aspx";
+       // $company = Sys_config('site_name');
+        $company = "LALA NFT";
+        switch ($template)
+        {
+            case 'PAY_SUCCESS_CODE':
+                break;
+            case 'DELIVER_GOODS_CODE':
+                break;
+            case  'TAKE_DELIVERY_CODE':
+                break;
+            case 'ADMIN_PLACE_ORDER_CODE':
+                break;
+            case 'ADMIN_RETURN_GOODS_CODE':
+                break;
+            case 'ADMIN_PAY_SUCCESS_CODE':
+                break;
+            case 'ADMIN_TAKE_DELIVERY_CODE':
+                break;
+            default:
+                $content=sprintf('【%s】您的注册验证码为:%d 。验证码有效期为%d分钟,请尽快填写!',$company,$code,5);
+        }
+        $time = date("YmdHis",time());
+       $data = [
+            'action'=>'send',
+            'userid'=>self::$userid,
+            'timestamp'=>$time,
+            'sign'=>md5(self::$username.self::$passwd.$time),
+            'mobile'=>$phone,
+            'content'=>$content,
+            'sendTime'=>'',
+            'extno'=>'',
+            'rt'=>'json',
+        ];
+        $gets = json_decode(HttpService::postRequest($target,$data),true);
+        if($gets){
+            return  ['status' => 200, 'msg' => '短信发送成功'];
+
+        }else{
+            return ['status' => 400, 'msg' => '发送失败'];
+        }
+    }
+}

+ 5 - 8
runtime/admin/temp/44d460eeeb8d3adebcd08c5fa00b9e2c.php

@@ -1,13 +1,11 @@
-<?php /*a:1:{s:44:"D:\wwwroot\gp\app\admin\view\login\index.php";i:1617074467;}*/ ?>
+<?php /*a:1:{s:44:"D:\wwwroot\gp\app\admin\view\login\index.php";i:1644827655;}*/ ?>
 <!DOCTYPE html>
 <html>
 <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta name="robots" content="noindex,nofollow" />
-    <title>登录管理系统 -  Powered by CRMEB!</title>
-    <meta name="generator" content="CRMEB! v2.5" />
-    <meta name="author" content="CRMEB! Team and CRMEB UI Team" />
+    <title>万吉健康商城</title>
     <link href="/system/frame/css/bootstrap.min.css?v=3.4.0" rel="stylesheet">
     <link href="/static/plug/layui/css/layui.css" rel="stylesheet">
     <link href="/system/frame/css/font-awesome.min.css?v=4.3.0" rel="stylesheet">
@@ -18,11 +16,10 @@
     </script>
 </head>
 <body class="gray-bg login-bg">
-<canvas id="canvas" width="900" height="300" style="position: fixed;top: -50px;width: 60%;left: 20%"></canvas>
 <div class="middle-box text-center loginscreen  animated fadeInDown">
     <div class="login-group">
-        <h3 class="login-logo">
-            <img src="/system/images/logo.png">
+        <h3 class="login-logo" style="margin: 30px;">
+            万吉健康商城
         </h3>
         <form role="form" action="<?php echo url('verify'); ?>" method="post" id="form" onsubmit="return false">
             <div class="form-group">
@@ -51,7 +48,7 @@
     </div>
 </div>
 <div class="footer" style=" position: fixed;bottom: 0;width: 100%;left: 0;margin: 0;opacity: 0.8;">
-    <div class="pull-right">© 2017-2021 <a href="http://www.crmeb.com/" target="_blank">CRMEB</a>
+    <div class="pull-right">© 2017-2021 万吉健康商城
     </div>
 </div>
 

+ 3 - 6
runtime/admin/temp/aa6a7146d01a0200439db76a27fe864f.php

@@ -1,4 +1,4 @@
-<?php /*a:2:{s:44:"D:\wwwroot\gp\app\admin\view\index\index.php";i:1617074462;s:45:"D:\wwwroot\gp\app\admin\view\public\style.php";i:1595820902;}*/ ?>
+<?php /*a:2:{s:44:"D:\wwwroot\gp\app\admin\view\index\index.php";i:1644827618;s:45:"D:\wwwroot\gp\app\admin\view\public\style.php";i:1595820902;}*/ ?>
 <!DOCTYPE html>
 <html>
 <head>
@@ -6,7 +6,7 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta name="renderer" content="webkit">
     <meta http-equiv="Cache-Control" content="no-siteapp" />
-    <title>CRMEB管理系统</title>
+    <title>万吉健康商城</title>
     <!--[if lt IE 9]>
     <meta http-equiv="refresh" content="0;ie.html" />
     <![endif]-->
@@ -41,8 +41,6 @@
                         <ul class="dropdown-menu animated fadeInRight m-t-xs">
                             <li><a class="J_menuItem admin_close" href="<?php echo Url('setting.systemAdmin/admin_info'); ?>">个人资料</a>
                             </li>
-                            <li><a class="admin_close" target="_blank" href="http://www.crmeb.com/">联系我们</a>
-                            </li>
                             <li class="divider"></li>
                             <li><a href="<?php echo Url('login/logout'); ?>">安全退出</a>
                             </li>
@@ -150,8 +148,7 @@
         </div>
         <!--底部版权-->
         <div class="footer"  @touchmove.prevent>
-            <div class="pull-right">© 2017-2021 <a href="http://www.crmeb.com/" target="_blank">CRMEB</a>
-            </div>
+            万吉健康商城
         </div>
     </div>
     <!--右侧部分结束-->

+ 1 - 1
runtime/cache/a9/939d920c0fa6b4fe0b897fb019672a.php

@@ -1,4 +1,4 @@
 <?php
 //000000000000
  exit();?>
-a:9:{i:0;s:65:"D:\wwwroot\gp\runtime\cache\48\e345b986ae9584f9686dac64ea2c6a.php";i:1;s:65:"D:\wwwroot\gp\runtime\cache\59\62ccd748530d5866ded674e0247788.php";i:2;s:65:"D:\wwwroot\gp\runtime\cache\4d\ebc178cbdb9b7d1fc736ef8ee65e51.php";i:3;s:65:"D:\wwwroot\gp\runtime\cache\b6\2c1e2a759fad26f36b6705aeb096e7.php";i:4;s:65:"D:\wwwroot\gp\runtime\cache\3a\18e85fda2f43f200f015f30d0af45e.php";i:5;s:65:"D:\wwwroot\gp\runtime\cache\a7\53d3226685fd31b029614775beb88c.php";i:6;s:65:"D:\wwwroot\gp\runtime\cache\57\e5830fa228be4a7d40bf40abfb7a18.php";i:7;s:65:"D:\wwwroot\gp\runtime\cache\e0\f15cee86afad4eabb0d5176f63c302.php";i:8;s:65:"D:\wwwroot\gp\runtime\cache\a6\d6181cf79cbad4a232ed9006617c00.php";}
+a:10:{i:0;s:65:"D:\wwwroot\gp\runtime\cache\48\e345b986ae9584f9686dac64ea2c6a.php";i:1;s:65:"D:\wwwroot\gp\runtime\cache\59\62ccd748530d5866ded674e0247788.php";i:2;s:65:"D:\wwwroot\gp\runtime\cache\4d\ebc178cbdb9b7d1fc736ef8ee65e51.php";i:3;s:65:"D:\wwwroot\gp\runtime\cache\b6\2c1e2a759fad26f36b6705aeb096e7.php";i:4;s:65:"D:\wwwroot\gp\runtime\cache\3a\18e85fda2f43f200f015f30d0af45e.php";i:5;s:65:"D:\wwwroot\gp\runtime\cache\a7\53d3226685fd31b029614775beb88c.php";i:6;s:65:"D:\wwwroot\gp\runtime\cache\57\e5830fa228be4a7d40bf40abfb7a18.php";i:7;s:65:"D:\wwwroot\gp\runtime\cache\e0\f15cee86afad4eabb0d5176f63c302.php";i:8;s:65:"D:\wwwroot\gp\runtime\cache\a6\d6181cf79cbad4a232ed9006617c00.php";i:9;s:65:"D:\wwwroot\gp\runtime\cache\2b\8b07b35c908c382a8aae9b52863147.php";}

+ 1 - 1
runtime/session/sess_45f0a9f2c8367b61370df7974d3d02c9

@@ -1 +1 @@
-a:3:{s:11:"login_error";N;s:7:"adminId";i:1;s:9:"adminInfo";a:12:{s:2:"id";i:1;s:7:"account";s:5:"admin";s:3:"pwd";s:32:"7fc4e37d2a95c2ba0bac0c5d83e4f149";s:9:"real_name";s:5:"admin";s:5:"roles";s:1:"1";s:7:"last_ip";s:11:"192.168.1.1";s:9:"last_time";i:1644825575;s:8:"add_time";i:1644304082;s:11:"login_count";i:0;s:5:"level";i:0;s:6:"status";i:1;s:6:"is_del";i:0;}}
+a:4:{s:7:"adminId";i:1;s:9:"adminInfo";a:12:{s:2:"id";i:1;s:7:"account";s:5:"admin";s:3:"pwd";s:32:"7fc4e37d2a95c2ba0bac0c5d83e4f149";s:9:"real_name";s:5:"admin";s:5:"roles";s:1:"1";s:7:"last_ip";s:11:"192.168.1.1";s:9:"last_time";i:1644885525;s:8:"add_time";i:1644304082;s:11:"login_count";i:0;s:5:"level";i:0;s:6:"status";i:1;s:6:"is_del";i:0;}s:11:"login_error";N;s:7:"captcha";a:1:{s:3:"key";s:60:"$2y$10$vnw4A5F09Hhj3DZWm49hcuVDXOm.F5dOuREEePLj8LyCuvYEQV0f.";}}