Browse Source

Merge branch 'master' of http://git.liuniu946.com/Kirin/mccs

Conflicts:
	public/logs/result.txt
	xxx.txt
zxhxx 3 years ago
parent
commit
179fcac94e
38 changed files with 1939 additions and 611 deletions
  1. 0 1
      .htaccess
  2. 17 0
      app/admin/controller/finance/UserExtract.php
  3. 6 3
      app/admin/controller/order/StoreOrder.php
  4. 2 0
      app/admin/controller/store/StoreProduct.php
  5. 12 0
      app/admin/controller/system/SystemCleardata.php
  6. 97 67
      app/admin/controller/user/User.php
  7. 136 0
      app/admin/controller/user/UserAwardLevel.php
  8. 140 0
      app/admin/controller/user/UserGroupLevel.php
  9. 30 28
      app/admin/model/order/StoreOrder.php
  10. 121 84
      app/admin/view/finance/user_extract/index.php
  11. 29 3
      app/admin/view/store/store_product/create.php
  12. 30 1
      app/admin/view/user/user/index.php
  13. 193 0
      app/admin/view/user/user_award_level/index.php
  14. 207 0
      app/admin/view/user/user_group_level/index.php
  15. 5 5
      app/api/controller/AuthController.php
  16. 27 13
      app/api/controller/PublicController.php
  17. 24 23
      app/api/controller/order/StoreOrderController.php
  18. 8 2
      app/api/controller/store/StoreProductController.php
  19. 58 64
      app/api/controller/user/UserController.php
  20. 14 7
      app/api/controller/user/UserExtractController.php
  21. 2 2
      app/common.php
  22. 7 2
      app/http/middleware/AuthTokenMiddleware.php
  23. 18 10
      app/models/store/StoreCart.php
  24. 360 152
      app/models/store/StoreOrder.php
  25. 33 4
      app/models/store/StoreProduct.php
  26. 112 0
      app/models/system/SystemAwardLevel.php
  27. 94 0
      app/models/system/SystemGroupLevel.php
  28. 33 37
      app/models/system/SystemStoreStock.php
  29. 12 12
      app/models/user/UserBill.php
  30. 54 46
      app/models/user/UserExtract.php
  31. 11 0
      app/models/user/WechatUser.php
  32. 1 0
      crmeb/repositories/NoticeRepositories.php
  33. 29 27
      crmeb/repositories/OrderRepository.php
  34. 14 14
      crmeb/services/YLYService.php
  35. 2 3
      crmeb/subscribes/OrderSubscribe.php
  36. 0 0
      nginx.htaccess
  37. 0 1
      public/.htaccess
  38. 1 0
      route/api/route.php

+ 0 - 1
.htaccess

@@ -1 +0,0 @@
- 

+ 17 - 0
app/admin/controller/finance/UserExtract.php

@@ -9,6 +9,8 @@
 namespace app\admin\controller\finance;
 
 use app\admin\controller\AuthController;
+use app\models\system\SystemStoreMember;
+use app\models\user\UserBill;
 use think\facade\Route as Url;
 use crmeb\services\JsonService;
 use app\admin\model\user\UserExtract as UserExtractModel;
@@ -143,6 +145,21 @@ class UserExtract extends AuthController
         if ($extract->status == 1) return JsonService::fail('您已提现,请勿重复提现!');
         if ($extract->status == -1) return JsonService::fail('您的提现申请已被拒绝!');
         $res = UserExtractModel::changeSuccess($id);
+        if ($extract['commission_consumer'] > 0) {
+            $res = $res && UserBill::income('提现转换(消费券)', $extract['uid'], 'consumer', 'extract_get_consumer', $extract['commission_consumer'], $extract['id'], \app\admin\model\user\User::where('uid', $extract['uid'])->value('consumer') + $extract['commission_consumer'], '提现申请通过,其中部分佣金转换为消费券' . $extract['commission_consumer']);
+            $res = $res && \app\admin\model\user\User::where('uid', $extract['uid'])->inc('consumer', $extract['commission_consumer'])->update();
+        }
+        if ($extract['commission_yue'] > 0) {
+            $res = $res && UserBill::income('提现转换(余额)', $extract['uid'], 'now_money', 'extract_get_now_money', $extract['commission_yue'], $extract['id'], \app\admin\model\user\User::where('uid', $extract['uid'])->value('now_money') + $extract['commission_yue'], '提现申请通过,其中部分佣金转换为余额' . $extract['commission_yue']);
+            $res = $res && \app\admin\model\user\User::where('uid', $extract['uid'])->inc('now_money', $extract['commission_yue'])->update();
+        }
+        if ($extract['commission_gf'] > 0) {
+            $res = $res && UserBill::income('提现转换(股份)', $extract['uid'], 'gf', 'extract_get_gf', $extract['commission_gf'], $extract['id'], \app\admin\model\user\User::where('uid', $extract['uid'])->value('gf') + $extract['commission_gf'], '提现申请通过,其中部分佣金转换为股份' . $extract['commission_gf']);
+            $res = $res && \app\admin\model\user\User::where('uid', $extract['uid'])->inc('gf', $extract['commission_gf'])->update();
+        }
+//        if ($extract['commission_gf'] > 0 && SystemStoreMember::be(['uid' => $extract['uid']])) {
+//            $res = $res && SystemStoreMember::where('uid', $extract['uid'])->inc('consume_rights', $extract['commission_gf'])->update();
+//        }
         if ($res) {
             UserExtractModel::commitTrans();
             return JsonService::successful('操作成功!');

+ 6 - 3
app/admin/controller/order/StoreOrder.php

@@ -389,7 +389,8 @@ class StoreOrder extends AuthController
                 if (!$data['delivery_name']) return Json::fail('请选择快递公司');
                 if (!$data['delivery_id']) return Json::fail('请输入快递单号');
                 $data['status'] = 1;
-                StoreOrderModel::where('id',$id)->update($data);
+//                StoreOrderModel::where('id',$id)->update($data);
+                StoreOrderModel::edit($data, $id);
                 event('StoreProductOrderDeliveryGoodsAfter', [$data, $id]);
                 StoreOrderStatus::setStatus($id, 'delivery_goods', '已发货 快递公司:' . $data['delivery_name'] . ' 快递单号:' . $data['delivery_id']);
                 break;
@@ -403,7 +404,8 @@ class StoreOrder extends AuthController
                 if (!(int)$data['delivery_id']) return Json::fail('请输入送货人电话号码');
                 else if (!preg_match("/^1[3456789]{1}\d{9}$/", $data['delivery_id'])) return Json::fail('请输入正确的送货人电话号码');
                 $data['status'] = 1;
-                StoreOrderModel::where('id',$id)->update($data);
+//                StoreOrderModel::where('id',$id)->update($data);
+                StoreOrderModel::edit($data, $id);
                 event('StoreProductOrderDeliveryAfter', [$data, $id]);
                 StoreOrderStatus::setStatus($id, 'delivery', '已配送 发货人:' . $data['delivery_name'] . ' 发货人电话:' . $data['delivery_id']);
                 break;
@@ -411,7 +413,8 @@ class StoreOrder extends AuthController
                 //虚拟发货
                 $data['delivery_type'] = 'fictitious';
                 $data['status'] = 1;
-                StoreOrderModel::where('id',$id)->update($data);
+//                StoreOrderModel::where('id',$id)->update($data);
+                StoreOrderModel::edit($data, $id);
                 event('StoreProductOrderDeliveryAfter', [$data, $id]);
                 StoreOrderStatus::setStatus($id, 'delivery_fictitious', '已虚拟发货');
                 break;

+ 2 - 0
app/admin/controller/store/StoreProduct.php

@@ -280,10 +280,12 @@ class StoreProduct extends AuthController
             ['sales', 0],
             ['ficti', 100],
             ['give_integral', 0],
+            ['max_use_integral', 0],
             ['is_show', 0],
             ['temp_id', 0],
             ['is_hot', 0],
             ['is_benefit', 0],
+            ['is_suit', 0],
             ['is_best', 0],
             ['is_new', 0],
             ['mer_use', 0],

+ 12 - 0
app/admin/controller/system/SystemCleardata.php

@@ -54,6 +54,15 @@ class SystemclearData extends AuthController
         self::clearData('user_level', 1);
         self::clearData('user_token', 1);
         self::clearData('user_group', 1);
+        self::clearData('card_info', 1);
+        self::clearData('order_level', 1);
+        self::clearData('payment_received', 1);
+        self::clearData('payment_received', 1);
+        self::clearData('user_ali', 1);
+        self::clearData('user_bank', 1);
+        self::clearData('user_system_recharge', 1);
+        self::clearData('user_token', 1);
+        self::clearData('system_store_member', 1);
         $this->delDirAndFile('./public/uploads/store/comment');
         self::clearData('store_product_relation', 1);
         return Json::successful('清除数据成功!');
@@ -74,6 +83,9 @@ class SystemclearData extends AuthController
         self::clearData('store_seckill', 1);
         self::clearData('store_product', 1);
         self::clearData('store_visit', 1);
+        self::clearData('system_store_stock', 1);
+        self::clearData('system_store_stock_bill', 1);
+        self::clearData('system_store_bill', 1);
         return Json::successful('清除数据成功!');
     }
 

+ 97 - 67
app/admin/controller/user/User.php

@@ -9,6 +9,7 @@ namespace app\admin\controller\user;
 
 use app\admin\controller\AuthController;
 use app\models\system\CardInfo;
+use app\models\user\UserBill;
 use crmeb\repositories\UserRepository;
 use crmeb\traits\CurdControllerTrait;
 use think\facade\Route as Url;
@@ -19,7 +20,13 @@ use app\admin\model\wechat\WechatMessage;
 use app\admin\model\store\{StoreVisit, StoreCouponUser};
 use app\admin\model\system\{SystemUserLevel, SystemUserTask};
 use crmeb\services\{FormBuilder as Form, upload\Upload, UtilService as Util, JsonService as Json, UtilService};
-use app\admin\model\user\{User as UserModel, UserBill as UserBillAdmin, UserLevel, UserGroup, UserTaskFinish,UserSystemRecharge};
+use app\admin\model\user\{User as UserModel,
+    UserBill as UserBillAdmin,
+    UserLevel,
+    UserGroup,
+    UserTaskFinish,
+    UserSystemRecharge
+};
 
 /**
  * 用户管理控制器
@@ -71,7 +78,7 @@ class User extends AuthController
         list($group_id) = Util::postMore([
             ['group_id', 0],
         ], $this->request, true);
-        $uids = explode(',',$uid);
+        $uids = explode(',', $uid);
         $res = UserModel::whereIn('uid', $uids)->update(['group_id' => $group_id]);
         if ($res) {
             return Json::successful('设置成功');
@@ -114,7 +121,7 @@ class User extends AuthController
     public function edit_other($uid)
     {
         if (!$uid) return $this->failed('数据不存在');
-        $user = UserModel::where('uid',$uid)->find();
+        $user = UserModel::where('uid', $uid)->find();
         if (!$user) return Json::fail('数据不存在!');
         $f = array();
         $f[] = Form::radio('money_status', '修改余额', 1)->options([['value' => 1, 'label' => '增加'], ['value' => 2, 'label' => '减少']]);
@@ -125,49 +132,49 @@ class User extends AuthController
         $this->assign(compact('form'));
         return $this->fetch('public/form-builder');
     }
+
     public function pay($uid)
     {
         if (!$uid) return $this->failed('数据不存在');
-        $user = UserModel::where('uid',$uid)->find();
+        $user = UserModel::where('uid', $uid)->find();
         if (!$user) return Json::fail('数据不存在!');
         $f = array();
         $f[] = Form::radio('brokerage_status', '充值余额', 1)->options([['value' => 1, 'label' => '增加'], ['value' => 0, 'label' => '减少']]);
         $f[] = Form::number('money', '金额')->min(0);
         $f[] = Form::uploadFiles('evaluation', '付款凭证', Url::buildUrl('file_upload'))->name('file');
-        $form = Form::make_post_form('修改其他', $f, Url::buildUrl('pay_update', array('uid' => $uid)),5);
+        $form = Form::make_post_form('修改其他', $f, Url::buildUrl('pay_update', array('uid' => $uid)), 5);
         $this->assign(compact('form'));
         return $this->fetch('public/form-builder');
     }
+
     public function pay_update($uid)
     {
         $data = Util::postMore([
             ['brokerage_status', 0],
             ['money', 0],
-            ['type','now_money'],
+            ['type', 'now_money'],
         ], $this->request);
-        
+
         if (!$uid) return $this->failed('数据不存在');
-        $user = UserModel::where('uid',$uid)->find();
-        if(is_array(input('evaluation')))
-        {
-            $cdata = ['number'=>$data['money'],'way'=>$data['brokerage_status'],'evaluation'=>join(",",input('evaluation'))];
-            
-        }
-        else
-        {
-            $cdata = ['number'=>$data['money'],'way'=>$data['brokerage_status']];
+        $user = UserModel::where('uid', $uid)->find();
+        if (is_array(input('evaluation'))) {
+            $cdata = ['number' => $data['money'], 'way' => $data['brokerage_status'], 'evaluation' => join(",", input('evaluation'))];
+
+        } else {
+            $cdata = ['number' => $data['money'], 'way' => $data['brokerage_status']];
         }
-        $cdata['create_admin_id'] =  $this->adminId;
+        $cdata['create_admin_id'] = $this->adminId;
         $cdata['create_admin_time'] = time();
         $cdata['uid'] = $uid;
         $cdata['type'] = $data['type'];
         UserSystemRecharge::create($cdata);
-        
-       return Json::successful('充值已提交,等操作员确认');
-        
-        
+
+        return Json::successful('充值已提交,等操作员确认');
+
+
     }
-     /**
+
+    /**
      * 文件上传
      * */
     public function file_upload()
@@ -177,6 +184,7 @@ class User extends AuthController
         if ($res === false) Json::fail($upload->getError());
         Json::successful('上传成功!', ['filePath' => $res->filePath]);
     }
+
     public function update_other($uid = 0)
     {
         $data = Util::postMore([
@@ -186,7 +194,7 @@ class User extends AuthController
             ['integration', 0],
         ], $this->request);
         if (!$uid) return $this->failed('数据不存在');
-        $user = UserModel::where('uid',$uid)->find();
+        $user = UserModel::where('uid', $uid)->find();
         if (!$user) return Json::fail('数据不存在!');
         BaseModel::beginTrans();
         $res1 = false;
@@ -238,7 +246,7 @@ class User extends AuthController
         } else {
             $res2 = true;
         }
-        if ($edit) $res3 = UserModel::where('uid',$uid)->update($edit);
+        if ($edit) $res3 = UserModel::where('uid', $uid)->update($edit);
         else $res3 = true;
         if ($res1 && $res2 && $res3) $res = true;
         else $res = false;
@@ -318,6 +326,27 @@ class User extends AuthController
             return Json::fail('清除失败');
     }
 
+    /*
+     * 清除会员等级
+     * @param int $uid
+     * @return json
+     * */
+    public function clear_gf($uid = 0)
+    {
+        if (!$uid) return Json::fail('缺少参数');
+        $user = UserModel::get($uid);
+        if ($user['gf'] <= 0) return Json::successful('清除成功');
+        else {
+            $res = true;
+            $res = $res && UserBill::expend('清除股份', $uid, 'gf', 'clear_gf', $user['gf'], 0, 0, '后台清除股份');
+            $res = $res && \app\admin\model\user\User::where('uid', $uid)->update(['gf' => 0]);
+        }
+        if ($res)
+            return Json::successful('清除成功');
+        else
+            return Json::fail('清除失败');
+    }
+
     /**
      * 修改user表状态
      *
@@ -365,31 +394,34 @@ class User extends AuthController
         ]);
         return Json::successlayui(UserModel::getUserList($where));
     }
+
     public function add()
     {
         $f = array();
         $f[] = Form::text('account', '手机号', '');
-        $f[] = Form::input('real_name', '真实姓名','');
+        $f[] = Form::input('real_name', '真实姓名', '');
         $f[] = Form::input('password', '输入密码');
-        $f[] = Form::input('spread', '推荐人编号',0);
-        $f[] = Form::input('addres', '地址信息','');
-        $form = Form::make_post_form('添加用户通知', $f, Url::buildUrl('save',[], 5));
+        $f[] = Form::input('spread', '推荐人编号', 0);
+        $f[] = Form::input('addres', '地址信息', '');
+        $form = Form::make_post_form('添加用户通知', $f, Url::buildUrl('save', [], 5));
         $this->assign(compact('form'));
         return $this->fetch('public/form-builder');
     }
+
     public function save()
     {
-        list($account,$password,$spread,$real_name,$addres) = Util::postMore([
+        list($account, $password, $spread, $real_name, $addres) = Util::postMore([
             ['account', ''],
             ['password', ''],
             ['spread', 0],
-            ['real_name',''],
-            ['addres',''],
-        ],$this->request,true);
-        $res = \app\models\user\User::register($account, $password, $spread,$real_name,$addres);
+            ['real_name', ''],
+            ['addres', ''],
+        ], $this->request, true);
+        $res = \app\models\user\User::register($account, $password, $spread, $real_name, $addres);
         if ($res) return Json::successful('创建成功!');
         else return Json::fail('创建失败');
     }
+
     /**
      * 编辑模板消息
      * @param $id
@@ -398,7 +430,7 @@ class User extends AuthController
     public function edit($uid)
     {
         if (!$uid) return $this->failed('数据不存在');
-        $user = UserModel::where('uid',$uid)->find();
+        $user = UserModel::where('uid', $uid)->find();
         if (!$user) return Json::fail('数据不存在!');
         $f = array();
         $f[] = Form::input('account', '用户账号', $user->getData('account'))->disabled(1);
@@ -432,17 +464,15 @@ class User extends AuthController
             ['status', 0],
         ]);
         if (!$uid) return $this->failed('数据不存在');
-        $user = UserModel::where('uid',$uid)->find();
+        $user = UserModel::where('uid', $uid)->find();
         if (!$user) return Json::fail('数据不存在!');
         BaseModel::beginTrans();
         $edit = array();
-        if(input('pwd','')!='')
-        {
-            if(strlen(input('pwd',''))<6)
-            {
+        if (input('pwd', '') != '') {
+            if (strlen(input('pwd', '')) < 6) {
                 return Json::fail('密码不能少于6位!');
             }
-            $edit['pwd']= md5(input('pwd',''));
+            $edit['pwd'] = md5(input('pwd', ''));
         }
         $res1 = false;
         $res2 = false;
@@ -880,10 +910,10 @@ class User extends AuthController
     {
         return Json::successful(UserBillAdmin::getOneBalanceChangList(compact('uid', 'page', 'limit')));
     }
-  
+
     /**
-     *充值审核列表 
-     */ 
+     *充值审核列表
+     */
     public function recharge_auth()
     {
         $this->assign([
@@ -893,6 +923,7 @@ class User extends AuthController
         ]);
         return $this->fetch();
     }
+
     public function recharge_list()
     {
         $where = Util::getMore([
@@ -903,26 +934,24 @@ class User extends AuthController
             ['limit', 20],
             ['excel', 0]
         ]);
-   
-        return Json::successlayui( UserSystemRecharge::systemPage($where));
+
+        return Json::successlayui(UserSystemRecharge::systemPage($where));
     }
-   
+
     /**
      * 审核保存
-     */ 
-    public function recharge_auth_save($id,$auth_status)
+     */
+    public function recharge_auth_save($id, $auth_status)
     {
         if (!$id) return Json::fail('缺少参数');
         if (!$auth_status) return Json::fail('缺少参数');
         $info = UserSystemRecharge::find($id);
-      
-        if($info)
-        {
+
+        if ($info) {
             $data = $info->toarray();
-            $user = UserModel::where('uid',$info['uid'])->find();
-            UserSystemRecharge::edit(['auth_status'=>$auth_status,'auth_admin_id'=>$this->adminId,'auth_admin_time'=>time()],$info['id']);
-            if($auth_status==1)
-            {
+            $user = UserModel::where('uid', $info['uid'])->find();
+            UserSystemRecharge::edit(['auth_status' => $auth_status, 'auth_admin_id' => $this->adminId, 'auth_admin_time' => time()], $info['id']);
+            if ($auth_status == 1) {
                 if ($data['way'] == 1) {//增加
                     $edit[$data['type']] = bcadd($user[$data['type']], $data['number'], 2);
                     $res1 = UserBillAdmin::income('系统增加余额', $user['uid'], $data['type'], 'system_add', $data['number'], $this->adminId, $edit[$data['type']], '系统增加了' . floatval($data['number']) . '数量');
@@ -930,18 +959,18 @@ class User extends AuthController
                     $edit[$data['type']] = bcsub($user[$data['type']], $data['number'], 2);
                     $res1 = UserBillAdmin::expend('系统减少余额', $user['uid'], $data['type'], 'system_sub', $data['number'], $this->adminId, $edit[$data['type']], '系统扣除了' . floatval($data['number']) . '数量');
                 }
-                UserModel::edit($edit,$data['uid'],'uid');
+                UserModel::edit($edit, $data['uid'], 'uid');
             }
             return Json::successful('审核成功');
-        }
-        else
+        } else
             return Json::fail('审核失败');
-        
+
     }
-    public function exchange($uid=0)
+
+    public function exchange($uid = 0)
     {
         if (!$uid) return $this->failed('数据不存在');
-        $user = UserModel::where('uid',$uid)->find();
+        $user = UserModel::where('uid', $uid)->find();
         if (!$user) return Json::fail('数据不存在!');
         $f = array();
         $f[] = Form::input('account', '用户账号', $user->getData('account'))->disabled(1);
@@ -952,14 +981,15 @@ class User extends AuthController
         $this->assign(compact('form'));
         return $this->fetch('public/form-builder');
     }
+
     public function exchange_save($uid)
     {
-        list($card_number,$card_password) = UtilService::postMore([
-            ['card_number',''],
-            ['card_password',''],
-        ],$this->request,true);
-        $rs = CardInfo::verification($card_number,$card_password,$uid,1,0,1);
-        if(!$rs) return Json::fail(CardInfo::getErrorInfo());
+        list($card_number, $card_password) = UtilService::postMore([
+            ['card_number', ''],
+            ['card_password', ''],
+        ], $this->request, true);
+        $rs = CardInfo::verification($card_number, $card_password, $uid, 1, 0, 1);
+        if (!$rs) return Json::fail(CardInfo::getErrorInfo());
         return Json::fail('兑换完成');
     }
 }

+ 136 - 0
app/admin/controller/user/UserAwardLevel.php

@@ -0,0 +1,136 @@
+<?php
+
+namespace app\admin\controller\user;
+
+use app\admin\controller\AuthController;
+use app\models\system\SystemAwardLevel as SystemGroupLevel;
+use think\facade\Route as Url;
+use crmeb\traits\CurdControllerTrait;
+use crmeb\services\{UtilService, JsonService, FormBuilder as Form};
+
+/**
+ * 会员设置
+ * Class UserLevel
+ * @package app\admin\controller\user
+ */
+class UserAwardLevel extends AuthController
+{
+    use CurdControllerTrait;
+
+    /*
+     * 等级展示
+     * */
+    public function index()
+    {
+        return $this->fetch();
+    }
+
+    /*
+     * 创建form表单
+     * */
+    public function create($id = 0)
+    {
+        if ($id) $vipinfo = SystemGroupLevel::get($id);
+        $field[] = Form::input('name', '等级名称', isset($vipinfo) ? $vipinfo->name : '')->col(Form::col(24));
+        $field[] = Form::number('suit_award', "套装极差奖", isset($vipinfo) ? $vipinfo->suit_award : 0)->min(0)->col(8);
+        $field[] = Form::number('level_num', "直推套装单数", isset($vipinfo) ? $vipinfo->level_num : 0)->min(0)->col(8);
+        $field[] = Form::radio('is_show', '是否显示', isset($vipinfo) ? $vipinfo->is_show : 0)->options([['label' => '显示', 'value' => 1], ['label' => '隐藏', 'value' => 0]])->col(8);
+        $field[] = Form::textarea('explain', '等级说明', isset($vipinfo) ? $vipinfo->explain : '');
+
+        $form = Form::make_post_form('添加等级设置', $field, Url::buildUrl('save', ['id' => $id]), 2);
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
+
+    /*
+     * 会员等级添加或者修改
+     * @param $id 修改的等级id
+     * @return json
+     * */
+    public function save($id = 0)
+    {
+        $data = UtilService::postMore([
+            ['name', ''],
+            ['suit_award', 0],
+            ['level_num', 0],
+            ['is_show', ''],
+            ['explain', ''],
+        ]);
+        if (!$data['name']) JsonService::fail('请输入等级名称');
+        SystemGroupLevel::beginTrans();
+        try {
+            //修改
+            if ($id) {
+                if (SystemGroupLevel::edit($data, $id)) {
+                    SystemGroupLevel::commitTrans();
+                    JsonService::successful('修改成功');
+                } else {
+                    SystemGroupLevel::rollbackTrans();
+                    JsonService::fail('修改失败');
+                }
+            } else {
+                //新增
+                $data['add_time'] = time();
+                if (SystemGroupLevel::create($data)) {
+                    SystemGroupLevel::commitTrans();
+                    JsonService::successful('添加成功');
+                } else {
+                    SystemGroupLevel::rollbackTrans();
+                    JsonService::fail('添加失败');
+                }
+            }
+        } catch (\Exception $e) {
+            SystemGroupLevel::rollbackTrans();
+            JsonService::fail($e->getMessage());
+        }
+    }
+
+    /*
+     * 获取系统设置的vip列表
+     * @param int page
+     * @param int limit
+     * */
+    public function get_system_vip_list()
+    {
+        $where = UtilService::getMore([
+            ['page', 0],
+            ['limit', 10],
+            ['title', ''],
+            ['is_show', ''],
+        ]);
+        JsonService::successlayui(SystemGroupLevel::getSystemList($where));
+    }
+
+    /*
+     * 删除会员等级
+     * @param int $id
+     * */
+    public function delete($id = 0)
+    {
+        if (SystemGroupLevel::edit(['is_del' => 1], $id))
+            JsonService::successful('删除成功');
+        else
+            JsonService::fail('删除失败');
+    }
+
+
+    public function set_show($is_show = '', $id = '')
+    {
+        ($is_show == '' || $id == '') && JsonService::fail('缺少参数');
+        $res = SystemGroupLevel::where(['id' => $id])->update(['is_show' => (int)$is_show]);
+        if ($res) {
+            JsonService::successful($is_show == 1 ? '显示成功' : '隐藏成功');
+        } else {
+            JsonService::fail($is_show == 1 ? '显示失败' : '隐藏失败');
+        }
+    }
+
+    public function set_value($field = '', $id = '', $value = '')
+    {
+        $field == '' || $id == '' || $value == '' && JsonService::fail('缺少参数');
+        if (SystemGroupLevel::where(['id' => $id])->update([$field => $value]))
+            JsonService::successful('保存成功');
+        else
+            JsonService::fail('保存失败');
+    }
+}

+ 140 - 0
app/admin/controller/user/UserGroupLevel.php

@@ -0,0 +1,140 @@
+<?php
+
+namespace app\admin\controller\user;
+
+use app\admin\controller\AuthController;
+use app\models\system\SystemGroupLevel;
+use think\facade\Route as Url;
+use crmeb\traits\CurdControllerTrait;
+use crmeb\services\{UtilService, JsonService, FormBuilder as Form};
+
+/**
+ * 会员设置
+ * Class UserLevel
+ * @package app\admin\controller\user
+ */
+class UserGroupLevel extends AuthController
+{
+    use CurdControllerTrait;
+
+    /*
+     * 等级展示
+     * */
+    public function index()
+    {
+        return $this->fetch();
+    }
+
+    /*
+     * 创建form表单
+     * */
+    public function create($id = 0)
+    {
+        if ($id) $vipinfo = SystemGroupLevel::get($id);
+        $field[] = Form::input('name', '等级名称', isset($vipinfo) ? $vipinfo->name : '')->col(Form::col(24));
+        $field[] = Form::number('suit_award', "套装极差奖", isset($vipinfo) ? $vipinfo->suit_award : 0)->min(0)->col(8);
+        $field[] = Form::number('group_award', "普通商品极差奖(%)", isset($vipinfo) ? $vipinfo->group_award : 0)->min(0)->col(8);
+        $field[] = Form::number('integral_group_award', "积分商品极差奖(%)", isset($vipinfo) ? $vipinfo->integral_group_award : 0)->min(0)->col(8);
+        $field[] = Form::number('level_num', "伞下套装单数", isset($vipinfo) ? $vipinfo->level_num : 0)->min(0)->col(8);
+        $field[] = Form::radio('is_show', '是否显示', isset($vipinfo) ? $vipinfo->is_show : 0)->options([['label' => '显示', 'value' => 1], ['label' => '隐藏', 'value' => 0]])->col(8);
+        $field[] = Form::textarea('explain', '等级说明', isset($vipinfo) ? $vipinfo->explain : '');
+
+        $form = Form::make_post_form('添加等级设置', $field, Url::buildUrl('save', ['id' => $id]), 2);
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
+
+    /*
+     * 会员等级添加或者修改
+     * @param $id 修改的等级id
+     * @return json
+     * */
+    public function save($id = 0)
+    {
+        $data = UtilService::postMore([
+            ['name', ''],
+            ['suit_award', 0],
+            ['group_award', 0],
+            ['integral_group_award', 0],
+            ['level_num', 0],
+            ['is_show', ''],
+            ['explain', ''],
+        ]);
+        if (!$data['name']) JsonService::fail('请输入等级名称');
+        SystemGroupLevel::beginTrans();
+        try {
+            //修改
+            if ($id) {
+                if (SystemGroupLevel::edit($data, $id)) {
+                    SystemGroupLevel::commitTrans();
+                    JsonService::successful('修改成功');
+                } else {
+                    SystemGroupLevel::rollbackTrans();
+                    JsonService::fail('修改失败');
+                }
+            } else {
+                //新增
+                $data['add_time'] = time();
+                if (SystemGroupLevel::create($data)) {
+                    SystemGroupLevel::commitTrans();
+                    JsonService::successful('添加成功');
+                } else {
+                    SystemGroupLevel::rollbackTrans();
+                    JsonService::fail('添加失败');
+                }
+            }
+        } catch (\Exception $e) {
+            SystemGroupLevel::rollbackTrans();
+            JsonService::fail($e->getMessage());
+        }
+    }
+
+    /*
+     * 获取系统设置的vip列表
+     * @param int page
+     * @param int limit
+     * */
+    public function get_system_vip_list()
+    {
+        $where = UtilService::getMore([
+            ['page', 0],
+            ['limit', 10],
+            ['title', ''],
+            ['is_show', ''],
+        ]);
+        JsonService::successlayui(SystemGroupLevel::getSystemList($where));
+    }
+
+    /*
+     * 删除会员等级
+     * @param int $id
+     * */
+    public function delete($id = 0)
+    {
+        if (SystemGroupLevel::edit(['is_del' => 1], $id))
+            JsonService::successful('删除成功');
+        else
+            JsonService::fail('删除失败');
+    }
+
+
+    public function set_show($is_show = '', $id = '')
+    {
+        ($is_show == '' || $id == '') && JsonService::fail('缺少参数');
+        $res = SystemGroupLevel::where(['id' => $id])->update(['is_show' => (int)$is_show]);
+        if ($res) {
+            JsonService::successful($is_show == 1 ? '显示成功' : '隐藏成功');
+        } else {
+            JsonService::fail($is_show == 1 ? '显示失败' : '隐藏失败');
+        }
+    }
+
+    public function set_value($field = '', $id = '', $value = '')
+    {
+        $field == '' || $id == '' || $value == '' && JsonService::fail('缺少参数');
+        if (SystemGroupLevel::where(['id' => $id])->update([$field => $value]))
+            JsonService::successful('保存成功');
+        else
+            JsonService::fail('保存失败');
+    }
+}

+ 30 - 28
app/admin/model/order/StoreOrder.php

@@ -6,6 +6,7 @@
  */
 
 namespace app\admin\model\order;
+
 use app\models\system\SystemStoreStock;
 use app\admin\model\system\SystemStore;
 use crmeb\basic\BaseModel;
@@ -42,20 +43,17 @@ class StoreOrder extends BaseModel
 
     protected function getCartIdAttr($value)
     {
-       if(is_array($value))
-       {
-           return $value;
-       }
-       else {
-           return json_decode($value, true);
-       }
+        if (is_array($value)) {
+            return $value;
+        } else {
+            return json_decode($value, true);
+        }
     }
-    
-    public static function orderCount($store_id=0)
+
+    public static function orderCount($store_id = 0)
     {
         $where['is_system_del'] = 0;
-        if($store_id>0)
-        {
+        if ($store_id > 0) {
             $where['store_id'] = $store_id;
         }
         $data['ys'] = self::statusByWhere(9, new self())->where($where)->count();
@@ -90,19 +88,22 @@ class StoreOrder extends BaseModel
         } else {
             $data = ($data = $model->page((int)$where['page'], (int)$where['limit'])->select()) && count($data) ? $data->toArray() : [];
         }
-        $spreadUser = [];$storePink = [];$systemStore = [];
+        $spreadUser = [];
+        $storePink = [];
+        $systemStore = [];
         $spreadIds = array_unique(array_column($data, 'spread_uid'));
-        if($spreadIds) {
-            $spreadUser = User::where('uid', 'IN', $spreadIds)->column('nickname','uid');
+        if ($spreadIds) {
+            $spreadUser = User::where('uid', 'IN', $spreadIds)->column('nickname', 'uid');
         }
         $orderIds = array_column($data, 'id');
-        if($orderIds) {
+        if ($orderIds) {
             $storePink = StorePink::where('order_id_key', 'IN', $orderIds)->column('status', 'order_id_key');
         }
         $storeIds = array_unique(array_column($data, 'store_id'));
-        if($storeIds) {
+        if ($storeIds) {
             $systemStore = SystemStore::where('id', 'IN', $storeIds)->column('name', 'id');
         }
+        $is_suit = false;
         foreach ($data as &$item) {
             $_info = StoreOrderCartInfo::where('oid', $item['id'])->field('cart_info')->select();
             $_info = count($_info) ? $_info->toArray() : [];
@@ -110,6 +111,7 @@ class StoreOrder extends BaseModel
                 $cart_info = json_decode($v['cart_info'], true);
                 if (!isset($cart_info['productInfo'])) $cart_info['productInfo'] = [];
                 $_info[$k]['cart_info'] = $cart_info;
+                if ($cart_info['is_suit']) $is_suit = true;
                 unset($cart_info);
             }
             $item['_info'] = $_info;
@@ -145,8 +147,10 @@ class StoreOrder extends BaseModel
             } elseif ($item['is_consumer']) {
                 $item['pink_name'] = '[消费券订单]';
                 $item['color'] = '#12c5e9';
-            }
-            else {
+            } elseif ($is_suit) {
+                $item['pink_name'] = '[套装订单]';
+                $item['color'] = '#12e9c5';
+            } else {
                 if ($item['shipping_type'] == 1) {
                     $item['pink_name'] = '[普通订单]';
                     $item['color'] = '#895612';
@@ -486,7 +490,7 @@ HTML;
     public static function refundTemplate($data, $oid)
     {
         $order = self::where('id', $oid)->find();
-        if(WechatUser::where('uid', $order['uid'])->value('openid')) {
+        if (WechatUser::where('uid', $order['uid'])->value('openid')) {
             WechatTemplateService::sendTemplate(WechatUser::where('uid', $order['uid'])->value('openid'), WechatTemplateService::ORDER_REFUND_STATUS, [
                 'first' => '亲,您购买的商品已退款,本次退款' . $data['refund_price'] . '金额',
                 'keyword1' => $order['order_id'],
@@ -510,7 +514,7 @@ HTML;
     {
         $order = self::where('id', $oid)->find();
         $openid = \app\models\user\WechatUser::uidToOpenid($order['uid']);
-        if($openid)return RoutineTemplate::sendOrderRefundSuccess($order);
+        if ($openid) return RoutineTemplate::sendOrderRefundSuccess($order);
         return true;
 
     }
@@ -586,8 +590,8 @@ HTML;
         if (isset($where['real_name']) && $where['real_name'] != '') {
             $model = $model->where($aler . 'order_id|' . $aler . 'real_name|' . $aler . 'user_phone' . ($join ? '|' . $join . '.nickname|' . $join . '.uid|' . $join . '.phone' : ''), 'LIKE', "%$where[real_name]%");
         }
-        if (isset($where['store_id']) && $where['store_id'] >0) {
-            $model =  $model->where($aler . 'store_id', "=", $where['store_id']);
+        if (isset($where['store_id']) && $where['store_id'] > 0) {
+            $model = $model->where($aler . 'store_id', "=", $where['store_id']);
         }
         if (isset($where['data']) && $where['data'] !== '') {
             $model = self::getModelTime1($where, $model, $aler . 'add_time');
@@ -748,8 +752,7 @@ HTML;
                 $price['pay_price_offline'] = $v['sum_pay_price'];
             } elseif ($v['pay_type'] == 'jialie') {
                 $price['pay_price_jialie'] = $v['sum_pay_price'];
-            }
-            else {
+            } else {
                 $price['pay_price_other'] = $v['sum_pay_price'];
             }
         }
@@ -1331,7 +1334,7 @@ HTML;
      * 订单数量 支付方式
      * @return array
      */
-    public static function payTypeCount($store_id=0)
+    public static function payTypeCount($store_id = 0)
     {
         $where['status'] = 8;
         $where['is_del'] = 0;
@@ -1340,8 +1343,7 @@ HTML;
         $where['type'] = '';
         $where['order'] = '';
         $where['pay_type'] = 1;
-        if($store_id>0)
-        {
+        if ($store_id > 0) {
             $where['$store_id'] = $store_id;
         }
         $weixin = self::getOrderWhere($where, new self)->count();
@@ -1351,6 +1353,6 @@ HTML;
         $offline = self::getOrderWhere($where, new self)->count();
         $where['pay_type'] = 4;
         $jialie = self::getOrderWhere($where, new self)->count();
-        return compact('weixin', 'yue', 'offline','jialie');
+        return compact('weixin', 'yue', 'offline', 'jialie');
     }
 }

+ 121 - 84
app/admin/view/finance/user_extract/index.php

@@ -15,31 +15,52 @@
                             <div class="search-item" data-name="date">
                                 <span>选择时间:</span>
                                 <button type="button" class="btn btn-outline btn-link" data-value="">全部</button>
-                                <button type="button" class="btn btn-outline btn-link" data-value="{$limitTimeList.today}">今天</button>
-                                <button type="button" class="btn btn-outline btn-link" data-value="{$limitTimeList.week}">本周</button>
-                                <button type="button" class="btn btn-outline btn-link" data-value="{$limitTimeList.month}">本月</button>
-                                <button type="button" class="btn btn-outline btn-link" data-value="{$limitTimeList.quarter}">本季度</button>
-                                <button type="button" class="btn btn-outline btn-link" data-value="{$limitTimeList.year}">本年</button>
+                                <button type="button" class="btn btn-outline btn-link"
+                                        data-value="{$limitTimeList.today}">今天
+                                </button>
+                                <button type="button" class="btn btn-outline btn-link"
+                                        data-value="{$limitTimeList.week}">本周
+                                </button>
+                                <button type="button" class="btn btn-outline btn-link"
+                                        data-value="{$limitTimeList.month}">本月
+                                </button>
+                                <button type="button" class="btn btn-outline btn-link"
+                                        data-value="{$limitTimeList.quarter}">本季度
+                                </button>
+                                <button type="button" class="btn btn-outline btn-link"
+                                        data-value="{$limitTimeList.year}">本年
+                                </button>
                                 <div class="datepicker" style="display: inline-block;">
-                                    <button type="button" class="btn btn-outline btn-link" data-value="{$where.date?:'no'}">自定义时间</button>
+                                    <button type="button" class="btn btn-outline btn-link"
+                                            data-value="{$where.date?:'no'}">自定义时间
+                                    </button>
                                 </div>
-                                <input class="search-item-value" type="hidden" name="date" value="{$where.date}" />
+                                <input class="search-item-value" type="hidden" name="date" value="{$where.date}"/>
                             </div>
                             <select name="status" aria-controls="editable" class="form-control input-sm">
                                 <option value="">提现状态</option>
-                                <option value="-1" {eq name="where.status" value="-1"}selected="selected"{/eq}>未通过</option>
-                                <option value="0" {eq name="where.status" value="0"}selected="selected"{/eq}>未提现</option>
-                                <option value="1" {eq name="where.status" value="1"}selected="selected"{/eq}>已通过</option>
+                                <option value="-1" {eq name="where.status" value="-1" }selected="selected" {
+                                /eq}>未通过</option>
+                                <option value="0" {eq name="where.status" value="0" }selected="selected" {
+                                /eq}>未提现</option>
+                                <option value="1" {eq name="where.status" value="1" }selected="selected" {
+                                /eq}>已通过</option>
                             </select>
-                            <select name="extract_type"  class="form-control input-sm">
+                            <select name="extract_type" class="form-control input-sm">
                                 <option value="">提现方式</option>
-                                <option value="alipay" {eq name="where.extract_type" value="alipay" }selected="selected"{/eq}>支付宝</option>
-                                <option value="bank" {eq name="where.extract_type" value="bank"}selected="selected"{/eq}>银行卡</option>
-                                <option value="weixin" {eq name="where.extract_type" value="weixin"}selected="selected"{/eq}>微信</option>
+                                <option value="alipay" {eq name="where.extract_type" value="alipay" }selected="selected"
+                                        {
+                                /eq}>支付宝</option>
+                                <option value="bank" {eq name="where.extract_type" value="bank" }selected="selected" {
+                                /eq}>银行卡</option>
+                                <option value="weixin" {eq name="where.extract_type" value="weixin" }selected="selected"
+                                        {
+                                /eq}>微信</option>
                             </select>
                             <div class="input-group">
                                   <span class="input-group-btn">
-                                      <input type="text" name="nireid" value="{$where.nireid}" placeholder="微信昵称/姓名/支付宝账号/银行卡号" class="input-sm form-control" size="38"/>
+                                      <input type="text" name="nireid" value="{$where.nireid}"
+                                             placeholder="微信昵称/姓名/支付宝账号/银行卡号" class="input-sm form-control" size="38"/>
                                       <button type="submit" class="btn btn-sm btn-primary"> 搜索</button>
                                   </span>
                             </div>
@@ -93,16 +114,16 @@
                 <div class="table-responsive">
                     <table class="table table-striped  table-bordered">
                         <thead>
-                            <tr>
-                                <th class="text-center">编号</th>
-                                <th class="text-center">用户信息</th>
-                                <th class="text-center">提现金额</th>
-                                <th class="text-center">提现方式</th>
-                                <th class="text-center">添加时间</th>
-                                <th class="text-center">备注</th>
-                                <th class="text-center">审核状态</th>
-                                <th class="text-center">操作</th>
-                            </tr>
+                        <tr>
+                            <th class="text-center">编号</th>
+                            <th class="text-center">用户信息</th>
+                            <th class="text-center">提现金额</th>
+                            <th class="text-center">提现方式</th>
+                            <th class="text-center">添加时间</th>
+                            <th class="text-center">备注</th>
+                            <th class="text-center">审核状态</th>
+                            <th class="text-center">操作</th>
+                        </tr>
                         </thead>
                         <tbody class="">
                         {volist name="list" id="vo"}
@@ -111,23 +132,28 @@
                                 {$vo.id}
                             </td>
                             <td class="text-center">
-                               用户昵称: {$vo.nickname}/用户id:{$vo.uid}
+                                用户昵称: {$vo.nickname}/用户id:{$vo.uid}
                             </td>
                             <td class="text-center" style="color: #00aa00;">
-                                {$vo.extract_price}
+                                提现金额:{$vo.extract_price}<br>
+                                转换股份:{$vo.commission_gf}<br>
+                                转消费券:{$vo.commission_consumer}<br>
+                                转换余额:{$vo.commission_yue}<br>
+                                手 续 费:{$vo.commission}<br>
+                                实际到账:{$vo.extract_price-$vo.commission_gf-$vo.commission_consumer-$vo.commission_yue-$vo.commission}<br>
                             </td>
                             <td class="text-left">
                                 {if condition="$vo['extract_type'] eq 'bank'"}
                                 姓名:{$vo.real_name}<br>
-                                 银行卡号:{$vo.bank_code}
+                                银行卡号:{$vo.bank_code}
                                 <br/>
-                                 银行名称:{$vo.bank_address}
+                                银行名称:{$vo.bank_address}
                                 {elseif condition="$vo['extract_type'] eq 'weixin'"/}
                                 昵称:{$vo.nickname}<br>
                                 微信号:{$vo.wechat}
                                 {else/}
                                 姓名:{$vo.real_name}<br>
-                                  支付宝号:{$vo.alipay_code}
+                                支付宝号:{$vo.alipay_code}
                                 {/if}
                             </td>
                             <td class="text-center">
@@ -146,12 +172,20 @@
                                 未通过时间:{$vo.fail_time|date='Y-m-d H:i:s'}
                                 {else/}
                                 未提现<br/>
-                                <button data-url="{:url('fail',['id'=>$vo['id']])}" class="j-fail btn btn-danger btn-xs" type="button"><i class="fa fa-close"></i> 无效</button>
-                                <button data-url="{:url('succ',['id'=>$vo['id']])}" class="j-success btn btn-primary btn-xs" type="button"><i class="fa fa-check"></i> 通过</button>
+                                <button data-url="{:url('fail',['id'=>$vo['id']])}" class="j-fail btn btn-danger btn-xs"
+                                        type="button"><i class="fa fa-close"></i> 无效
+                                </button>
+                                <button data-url="{:url('succ',['id'=>$vo['id']])}"
+                                        class="j-success btn btn-primary btn-xs" type="button"><i
+                                            class="fa fa-check"></i> 通过
+                                </button>
                                 {/if}
                             </td>
                             <td class="text-center">
-                                <button class="btn btn-info btn-xs" type="button"  onclick="$eb.createModalFrame('编辑','{:Url('edit',array('id'=>$vo['id']))}')"><i class="fa fa-edit"></i> 编辑</button>
+                                <button class="btn btn-info btn-xs" type="button"
+                                        onclick="$eb.createModalFrame('编辑','{:Url('edit',array('id'=>$vo['id']))}')"><i
+                                            class="fa fa-edit"></i> 编辑
+                                </button>
                             </td>
                         </tr>
                         {/volist}
@@ -168,21 +202,23 @@
 <script>
     $(function init() {
         $('.search-item>.btn').on('click', function () {
-            var that = $(this), value = that.data('value'), p = that.parent(), name = p.data('name'), form = p.parents();
+            var that = $(this), value = that.data('value'), p = that.parent(), name = p.data('name'),
+                form = p.parents();
             form.find('input[name="' + name + '"]').val(value);
             $('input[name=export]').val(0);
             form.submit();
         });
         $('.tag-item>.btn').on('click', function () {
-            var that = $(this), value = that.data('value'), p = that.parent(), name = p.data('name'), form = p.parents(),list = $('input[name="' + name + '"]').val().split(',');
+            var that = $(this), value = that.data('value'), p = that.parent(), name = p.data('name'),
+                form = p.parents(), list = $('input[name="' + name + '"]').val().split(',');
             var bool = 0;
-            $.each(list,function (index,item) {
-                if(item == value){
+            $.each(list, function (index, item) {
+                if (item == value) {
                     bool = 1
-                    list.splice(index,1);
+                    list.splice(index, 1);
                 }
             })
-            if(!bool) list.push(''+value+'');
+            if (!bool) list.push('' + value + '');
             form.find('input[name="' + name + '"]').val(list.join(','));
             $('input[name=export]').val(0);
             form.submit();
@@ -195,65 +231,66 @@
         });
         $('.search-item>li').each(function () {
             var that = $(this), value = that.data('value'), p = that.parent(), name = p.data('name');
-            if($where[name]) $('.'+name).css('color','#1ab394');
+            if ($where[name]) $('.' + name).css('color', '#1ab394');
         });
         $('.search-item-value').each(function () {
-            var that = $(this), name = that.attr('name'), value = that.val(), dom = $('.search-item[data-name="' + name + '"] .btn[data-value="' + value + '"]');
+            var that = $(this), name = that.attr('name'), value = that.val(),
+                dom = $('.search-item[data-name="' + name + '"] .btn[data-value="' + value + '"]');
             dom.eq(0).removeClass('btn-outline btn-link').addClass('btn-primary btn-sm')
                 .siblings().addClass('btn-outline btn-link').removeClass('btn-primary btn-sm')
         });
     })
-    $('.j-fail').on('click',function(){
+    $('.j-fail').on('click', function () {
         var url = $(this).data('url');
-        $eb.$alert('textarea',{
-            title:'请输入未通过原因',
-            value:'输入信息不完整或有误!',
-        },function(value){
-            $eb.axios.post(url,{message:value}).then(function(res){
-                if(res.data.code == 200) {
+        $eb.$alert('textarea', {
+            title: '请输入未通过原因',
+            value: '输入信息不完整或有误!',
+        }, function (value) {
+            $eb.axios.post(url, {message: value}).then(function (res) {
+                if (res.data.code == 200) {
                     $eb.$swal('success', res.data.msg);
                     setTimeout(function () {
                         window.location.reload();
-                    },1000);
-                }else
-                    $eb.$swal('error',res.data.msg||'操作失败!');
+                    }, 1000);
+                } else
+                    $eb.$swal('error', res.data.msg || '操作失败!');
             });
         });
     });
-    $('.j-success').on('click',function(){
+    $('.j-success').on('click', function () {
         var url = $(this).data('url');
-        $eb.$swal('delete',function(){
-            $eb.axios.post(url).then(function(res){
-                if(res.data.code == 200) {
+        $eb.$swal('delete', function () {
+            $eb.axios.post(url).then(function (res) {
+                if (res.data.code == 200) {
                     setTimeout(function () {
                         window.location.reload();
-                    },1000);
+                    }, 1000);
                     $eb.$swal('success', res.data.msg);
-                }else
-                    $eb.$swal('error',res.data.msg||'操作失败!');
+                } else
+                    $eb.$swal('error', res.data.msg || '操作失败!');
             });
-        },{
-            title:'确定审核通过?',
-            text:'通过后无法撤销,请谨慎操作!',
-            confirm:'审核通过'
+        }, {
+            title: '确定审核通过?',
+            text: '通过后无法撤销,请谨慎操作!',
+            confirm: '审核通过'
         });
     });
-    $('.btn-warning').on('click',function(){
+    $('.btn-warning').on('click', function () {
         window.t = $(this);
-        var _this = $(this),url =_this.data('url');
-        $eb.$swal('delete',function(){
-            $eb.axios.get(url).then(function(res){
-                if(res.status == 200 && res.data.code == 200) {
-                    $eb.$swal('success',res.data.msg);
+        var _this = $(this), url = _this.data('url');
+        $eb.$swal('delete', function () {
+            $eb.axios.get(url).then(function (res) {
+                if (res.status == 200 && res.data.code == 200) {
+                    $eb.$swal('success', res.data.msg);
                     _this.parents('tr').remove();
-                }else
+                } else
                     return Promise.reject(res.data.msg || '删除失败')
-            }).catch(function(err){
-                $eb.$swal('error',err);
+            }).catch(function (err) {
+                $eb.$swal('error', err);
             });
         })
     });
-    $(".open_image").on('click',function (e) {
+    $(".open_image").on('click', function (e) {
         var image = $(this).data('image');
         $eb.openImage(image);
     })
@@ -270,20 +307,20 @@
             '本月': [moment().startOf('month'), moment().endOf('month')],
             '上月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
         },
-        "locale" : {
-            applyLabel : '确定',
-            cancelLabel : '取消',
-            fromLabel : '起始时间',
-            toLabel : '结束时间',
-            format : 'YYYY/MM/DD',
-            customRangeLabel : '自定义',
-            daysOfWeek : [ '日', '一', '二', '三', '四', '五', '六' ],
-            monthNames : [ '一月', '二月', '三月', '四月', '五月', '六月',
-                '七月', '八月', '九月', '十月', '十一月', '十二月' ],
-            firstDay : 1
+        "locale": {
+            applyLabel: '确定',
+            cancelLabel: '取消',
+            fromLabel: '起始时间',
+            toLabel: '结束时间',
+            format: 'YYYY/MM/DD',
+            customRangeLabel: '自定义',
+            daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'],
+            monthNames: ['一月', '二月', '三月', '四月', '五月', '六月',
+                '七月', '八月', '九月', '十月', '十一月', '十二月'],
+            firstDay: 1
         }
     });
-    dateInput.on('apply.daterangepicker', function(ev, picker) {
+    dateInput.on('apply.daterangepicker', function (ev, picker) {
         $("input[name=date]").val(picker.startDate.format('YYYY/MM/DD') + ' - ' + picker.endDate.format('YYYY/MM/DD'));
         $('form').submit();
     });

+ 29 - 3
app/admin/view/store/store_product/create.php

@@ -598,10 +598,21 @@
                                     <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>
+                                                <label class="layui-form-label">获得积分</label>
                                                 <div class="layui-input-block">
                                                     <input type="number" name="give_integral" lay-verify="title"
-                                                           autocomplete="off" placeholder="请输入积分" class="layui-input" v-model="formData.give_integral">
+                                                           autocomplete="off" placeholder="请输入获得积分" class="layui-input" v-model="formData.give_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_use_integral" lay-verify="title"
+                                                           autocomplete="off" placeholder="请输入抵扣积分" class="layui-input" v-model="formData.max_use_integral">
                                                 </div>
                                             </div>
                                         </div>
@@ -816,6 +827,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_suit" lay-filter="is_suit" value="1" title="开启"
+                                                           :checked="formData.is_suit == 1 ? true : false">
+                                                    <input type="radio" name="is_suit" lay-filter="is_suit" value="0" title="关闭"
+                                                           :checked="formData.is_suit == 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">
@@ -907,6 +931,7 @@
                 description: '',
                 ficti: 0,
                 give_integral: 0,
+                max_use_integral: 0,
                 sort: 0,
                 is_show: 1,
                 is_hot: 0,
@@ -914,6 +939,7 @@
                 is_best: 0,
                 is_new: 0,
                 is_good: 0,
+                is_suit: 0,
                 is_sub:0,
                 is_consumer:consumer,
                 items: [
@@ -952,7 +978,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_suit' ,'is_best', 'spec_type'],//radio 当选规则
             rule: { //多图选择规则
                 slider_image: {
                     maxLength: 5

+ 30 - 1
app/admin/view/user/user/index.php

@@ -256,6 +256,12 @@
                                     <i class="layui-icon layui-icon-close-fill" aria-hidden="true"></i> 清除等级</a>
                             </li>
                             {{# } }}
+                            {{# if(d.fg>0){ }}
+                            <li>
+                                <a href="javascript:void(0);" lay-event="clear_gf">
+                                    <i class="layui-icon layui-icon-close-fill" aria-hidden="true"></i> 清除股份</a>
+                            </li>
+                            {{# } }}
                         </ul>
                     </script>
                 </div>
@@ -315,9 +321,11 @@
             {field: 'group_name', title: '分组',templet:'#group_name',align:'center'},
             {field: 'phone', title: '手机号',align:'center',width:'8%'},
             {field: 'now_money', title: '余额',width:'6%',sort:true,event:'now_money',align:'center'},
+            {field: 'integral', title: '积分',width:'6%',sort:true,event:'integral',align:'center'},
+            {field: 'gf', title: '股份',width:'6%',sort:true,event:'gf',align:'center'},
             {field: 'pay_count', title: '购买次数',align:'center',width:'6%'},
             {field: 'extract_count_price', title: '累计提现',align:'center',width:'6%'},
-            {field: 'integral', title: '消费券',width:'6%',align:'center'},
+            {field: 'consumer', title: '消费券',width:'6%',align:'center'},
             {field: 'spread_uid_nickname', title: '推荐人',align:'center'},
             {field: 'sex', title: '性别',width:'4%',align:'center'},
             {field: 'data_time', title: '访问日期',align:'center',width:'12%',templet:'#data_time'},
@@ -368,6 +376,9 @@
             case 'integral':
                 layList.reload({order: layList.order(type,'u.integral')},true,null,obj);
                 break;
+            case 'gf':
+                layList.reload({order: layList.order(type,'u.gf')},true,null,obj);
+                break;
         }
     });
     //监听并执行 uid 的排序
@@ -398,6 +409,24 @@
                     confirm:'是的我要清除'
                 })
                 break;
+            case 'clear_gf':
+                $eb.$swal('delete',function(){
+                    $eb.axios.get(layList.U({a:'clear_gf',q:{uid:data.uid}})).then(function(res){
+                        if(res.status == 200 && res.data.code == 200) {
+                            $eb.$swal('success',res.data.msg);
+                            obj.update({vip_name:false});
+                            layList.reload();
+                        }else
+                            return Promise.reject(res.data.msg || '清除失败')
+                    }).catch(function(err){
+                        $eb.$swal('error',err);
+                    });
+                },{
+                    title:'您确定要清除【'+data.nickname+'】的股份吗?',
+                    text:'清除后无法恢复请谨慎操作',
+                    confirm:'是的我要清除'
+                })
+                break;
             case 'give_level':
                 $eb.createModalFrame(data.nickname+'-赠送会员',layList.Url({a:'give_level',p:{uid:data.uid}}),{w:500,h:300});
                 break;

+ 193 - 0
app/admin/view/user/user_award_level/index.php

@@ -0,0 +1,193 @@
+{extend name="public/container"}
+{block name="content"}
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15" id="app">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">搜索条件</div>
+                <div class="layui-card-body">
+                    <form class="layui-form layui-form-pane" action="">
+                        <div class="layui-form-item">
+                            <div class="layui-inline">
+                                <label class="layui-form-label">是否显示</label>
+                                <div class="layui-input-block">
+                                    <select name="is_show">
+                                        <option value="">是否显示</option>
+                                        <option value="1">显示</option>
+                                        <option value="0">不显示</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="layui-inline">
+                                <label class="layui-form-label">等级名称</label>
+                                <div class="layui-input-block">
+                                    <input type="text" name="title" class="layui-input" placeholder="请输入等级名称">
+                                </div>
+                            </div>
+                            <div class="layui-inline">
+                                <div class="layui-input-inline">
+                                    <button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search"
+                                            lay-filter="search">
+                                        <i class="layui-icon layui-icon-search"></i>搜索
+                                    </button>
+                                </div>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+        </div>
+        <!--产品列表-->
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">极差奖励等级列表</div>
+                <div class="layui-card-body">
+                    <div class="layui-btn-container">
+                        <button class="layui-btn layui-btn-sm"
+                                onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}')">添加极差奖励等级
+                        </button>
+                    </div>
+                    <table class="layui-hide" id="List" lay-filter="List"></table>
+                    <script type="text/html" id="icon">
+                        <img style="cursor: pointer;max-width: 50px;" lay-event='open_image' src="{{d.icon}}">
+                    </script>
+                    <script type="text/html" id="is_show">
+                        <input type='checkbox' name='id' lay-skin='switch' value="{{d.id}}" lay-filter='is_show'
+                               lay-text='开启|关闭' {{ d.is_show== 1 ? 'checked' : '' }}>
+                    </script>
+                    <script type="text/html" id="act">
+                        <button type="button" class="layui-btn layui-btn-xs" onclick="dropdown(this)">操作 <span
+                                    class="caret"></span></button>
+                        <ul class="layui-nav-child layui-anim layui-anim-upbit">
+                            <li>
+                                <a href="javascript:void(0)"
+                                   onclick="$eb.createModalFrame(this.innerText,'{:Url(\'create\')}?id={{d.id}}')">
+                                    <i class="fa fa-edit"></i> 编辑等级
+                                </a>
+                            </li>
+                            <li>
+                                <a lay-event='delete' href="javascript:void(0)">
+                                    <i class="fa fa-times"></i> 删除等级
+                                </a>
+                            </li>
+                        </ul>
+                    </script>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="{__ADMIN_PATH}js/layuiList.js"></script>
+{/block}
+{block name="script"}
+<script>
+    //实例化form
+    layList.form.render();
+    //加载列表
+    layList.tableList('List', "{:Url('get_system_vip_list')}", function () {
+        return [
+            {field: 'id', title: '编号', sort: true, event: 'id', width: '6%', align: "center"},
+            {field: 'name', title: '等级名称', edit: 'name', width: '6%', align: "center"},
+            {field: 'suit_award', title: '套装极差奖', edit: 'suit_award', width: '8%', align: "center"},
+            {field: 'level_num', title: '直推套装单数', edit: 'level_num', width: '8%', align: "center"},
+            {field: 'is_show', title: '是否使用', templet: '#is_show', width: '8%', align: "center"},
+            {field: 'explain', title: '等级说明', align: "center"},
+            {field: 'right', title: '操作', align: 'center', toolbar: '#act', width: '8%'},
+        ];
+    });
+    //自定义方法
+    var action = {
+        set_value: function (field, id, value) {
+            layList.baseGet(layList.Url({
+                a: 'set_value',
+                q: {field: field, id: id, value: value}
+            }), function (res) {
+                layList.msg(res.msg);
+            });
+        },
+    }
+    //查询
+    layList.search('search', function (where) {
+        layList.reload(where, true);
+    });
+    layList.switch('is_show', function (odj, value) {
+        if (odj.elem.checked == true) {
+            layList.baseGet(layList.Url({a: 'set_show', p: {is_show: 1, id: value}}), function (res) {
+                layList.msg(res.msg);
+            });
+        } else {
+            layList.baseGet(layList.Url({a: 'set_show', p: {is_show: 0, id: value}}), function (res) {
+                layList.msg(res.msg);
+            });
+        }
+    });
+    //快速编辑
+    layList.edit(function (obj) {
+        var id = obj.data.id, value = obj.value;
+        switch (obj.field) {
+            case 'name':
+                action.set_value('name', id, value);
+                break;
+            case 'suit_award':
+                action.set_value('suit_award', id, value);
+                break;
+            case 'level_num':
+                action.set_value('level_num', id, value);
+                break;
+        }
+    });
+    //监听并执行排序
+    layList.sort(['id', 'sort'], true);
+    //点击事件绑定
+    layList.tool(function (event, data, obj) {
+        switch (event) {
+            case 'delete':
+                var url = layList.U({a: 'delete', q: {id: data.id}});
+                $eb.$swal('delete', function () {
+                    $eb.axios.get(url).then(function (res) {
+                        if (res.status == 200 && res.data.code == 200) {
+                            $eb.$swal('success', res.data.msg);
+                            obj.del();
+                        } else
+                            return Promise.reject(res.data.msg || '删除失败')
+                    }).catch(function (err) {
+                        $eb.$swal('error', err);
+                    });
+                })
+                break;
+        }
+    })
+    //下拉框
+    $(document).click(function (e) {
+        $('.layui-nav-child').hide();
+    })
+
+    function dropdown(that) {
+        var oEvent = arguments.callee.caller.arguments[0] || event;
+        oEvent.stopPropagation();
+        var offset = $(that).offset();
+        var top = offset.top - $(window).scrollTop();
+        var index = $(that).parents('tr').data('index');
+        $('.layui-nav-child').each(function (key) {
+            if (key != index) {
+                $(this).hide();
+            }
+        })
+        if ($(document).height() < top + $(that).next('ul').height()) {
+            $(that).next('ul').css({
+                'padding': 10,
+                'top': -($(that).parent('td').height() / 2 + $(that).height() + $(that).next('ul').height() / 2),
+                'min-width': 'inherit',
+                'position': 'absolute'
+            }).toggle();
+        } else {
+            $(that).next('ul').css({
+                'padding': 10,
+                'top': $(that).parent('td').height() / 2 + $(that).height(),
+                'min-width': 'inherit',
+                'position': 'absolute'
+            }).toggle();
+        }
+    }
+</script>
+{/block}

+ 207 - 0
app/admin/view/user/user_group_level/index.php

@@ -0,0 +1,207 @@
+{extend name="public/container"}
+{block name="content"}
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15" id="app">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">搜索条件</div>
+                <div class="layui-card-body">
+                    <form class="layui-form layui-form-pane" action="">
+                        <div class="layui-form-item">
+                            <div class="layui-inline">
+                                <label class="layui-form-label">是否显示</label>
+                                <div class="layui-input-block">
+                                    <select name="is_show">
+                                        <option value="">是否显示</option>
+                                        <option value="1">显示</option>
+                                        <option value="0">不显示</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="layui-inline">
+                                <label class="layui-form-label">等级名称</label>
+                                <div class="layui-input-block">
+                                    <input type="text" name="title" class="layui-input" placeholder="请输入等级名称">
+                                </div>
+                            </div>
+                            <div class="layui-inline">
+                                <div class="layui-input-inline">
+                                    <button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search"
+                                            lay-filter="search">
+                                        <i class="layui-icon layui-icon-search"></i>搜索
+                                    </button>
+                                </div>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+        </div>
+        <!--产品列表-->
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">团队等级列表</div>
+                <div class="layui-card-body">
+                    <div class="layui-btn-container">
+                        <button class="layui-btn layui-btn-sm"
+                                onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}')">添加团队等级
+                        </button>
+                    </div>
+                    <table class="layui-hide" id="List" lay-filter="List"></table>
+                    <script type="text/html" id="icon">
+                        <img style="cursor: pointer;max-width: 50px;" lay-event='open_image' src="{{d.icon}}">
+                    </script>
+                    <script type="text/html" id="is_show">
+                        <input type='checkbox' name='id' lay-skin='switch' value="{{d.id}}" lay-filter='is_show'
+                               lay-text='开启|关闭' {{ d.is_show== 1 ? 'checked' : '' }}>
+                    </script>
+                    <script type="text/html" id="act">
+                        <button type="button" class="layui-btn layui-btn-xs" onclick="dropdown(this)">操作 <span
+                                    class="caret"></span></button>
+                        <ul class="layui-nav-child layui-anim layui-anim-upbit">
+                            <li>
+                                <a href="javascript:void(0)"
+                                   onclick="$eb.createModalFrame(this.innerText,'{:Url(\'create\')}?id={{d.id}}')">
+                                    <i class="fa fa-edit"></i> 编辑等级
+                                </a>
+                            </li>
+                            <li>
+                                <a lay-event='delete' href="javascript:void(0)">
+                                    <i class="fa fa-times"></i> 删除等级
+                                </a>
+                            </li>
+                        </ul>
+                    </script>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="{__ADMIN_PATH}js/layuiList.js"></script>
+{/block}
+{block name="script"}
+<script>
+    //实例化form
+    layList.form.render();
+    //加载列表
+    layList.tableList('List', "{:Url('get_system_vip_list')}", function () {
+        return [
+            {field: 'id', title: '编号', sort: true, event: 'id', width: '6%', align: "center"},
+            {field: 'name', title: '等级名称', edit: 'name', width: '6%', align: "center"},
+            {field: 'suit_award', title: '套装极差奖', edit: 'suit_award', width: '8%', align: "center"},
+            {field: 'group_award', title: '普通商品极差奖(%)', edit: 'group_award', width: '8%', align: "center"},
+            {
+                field: 'integral_group_award',
+                title: '积分商品极差奖(%)',
+                edit: 'integral_group_award',
+                width: '8%',
+                align: "center"
+            },
+            {field: 'level_num', title: '伞下套装单数', edit: 'level_num', width: '8%', align: "center"},
+            {field: 'is_show', title: '是否使用', templet: '#is_show', width: '8%', align: "center"},
+            {field: 'explain', title: '等级说明', align: "center"},
+            {field: 'right', title: '操作', align: 'center', toolbar: '#act', width: '8%'},
+        ];
+    });
+    //自定义方法
+    var action = {
+        set_value: function (field, id, value) {
+            layList.baseGet(layList.Url({
+                a: 'set_value',
+                q: {field: field, id: id, value: value}
+            }), function (res) {
+                layList.msg(res.msg);
+            });
+        },
+    }
+    //查询
+    layList.search('search', function (where) {
+        layList.reload(where, true);
+    });
+    layList.switch('is_show', function (odj, value) {
+        if (odj.elem.checked == true) {
+            layList.baseGet(layList.Url({a: 'set_show', p: {is_show: 1, id: value}}), function (res) {
+                layList.msg(res.msg);
+            });
+        } else {
+            layList.baseGet(layList.Url({a: 'set_show', p: {is_show: 0, id: value}}), function (res) {
+                layList.msg(res.msg);
+            });
+        }
+    });
+    //快速编辑
+    layList.edit(function (obj) {
+        var id = obj.data.id, value = obj.value;
+        switch (obj.field) {
+            case 'name':
+                action.set_value('name', id, value);
+                break;
+            case 'group_award':
+                action.set_value('group_award', id, value);
+                break;
+            case 'integral_group_award':
+                action.set_value('integral_group_award', id, value);
+                break;
+            case 'suit_award':
+                action.set_value('suit_award', id, value);
+                break;
+            case 'level_num':
+                action.set_value('level_num', id, value);
+                break;
+        }
+    });
+    //监听并执行排序
+    layList.sort(['id', 'sort'], true);
+    //点击事件绑定
+    layList.tool(function (event, data, obj) {
+        switch (event) {
+            case 'delete':
+                var url = layList.U({a: 'delete', q: {id: data.id}});
+                $eb.$swal('delete', function () {
+                    $eb.axios.get(url).then(function (res) {
+                        if (res.status == 200 && res.data.code == 200) {
+                            $eb.$swal('success', res.data.msg);
+                            obj.del();
+                        } else
+                            return Promise.reject(res.data.msg || '删除失败')
+                    }).catch(function (err) {
+                        $eb.$swal('error', err);
+                    });
+                })
+                break;
+        }
+    })
+    //下拉框
+    $(document).click(function (e) {
+        $('.layui-nav-child').hide();
+    })
+
+    function dropdown(that) {
+        var oEvent = arguments.callee.caller.arguments[0] || event;
+        oEvent.stopPropagation();
+        var offset = $(that).offset();
+        var top = offset.top - $(window).scrollTop();
+        var index = $(that).parents('tr').data('index');
+        $('.layui-nav-child').each(function (key) {
+            if (key != index) {
+                $(this).hide();
+            }
+        })
+        if ($(document).height() < top + $(that).next('ul').height()) {
+            $(that).next('ul').css({
+                'padding': 10,
+                'top': -($(that).parent('td').height() / 2 + $(that).height() + $(that).next('ul').height() / 2),
+                'min-width': 'inherit',
+                'position': 'absolute'
+            }).toggle();
+        } else {
+            $(that).next('ul').css({
+                'padding': 10,
+                'top': $(that).parent('td').height() / 2 + $(that).height(),
+                'min-width': 'inherit',
+                'position': 'absolute'
+            }).toggle();
+        }
+    }
+</script>
+{/block}

+ 5 - 5
app/api/controller/AuthController.php

@@ -172,11 +172,11 @@ class AuthController
             return app('json')->fail($e->getError());
         }
         $verifyCode = CacheService::get('code_' . $account);
-        if (!$verifyCode)
-            return app('json')->fail('请先获取验证码');
-        $verifyCode = substr($verifyCode, 0, 6);
-        if ($verifyCode != $captcha)
-            return app('json')->fail('验证码错误');
+//        if (!$verifyCode)
+//            return app('json')->fail('请先获取验证码');
+//        $verifyCode = substr($verifyCode, 0, 6);
+//        if ($verifyCode != $captcha)
+//            return app('json')->fail('验证码错误');
         if (strlen(trim($password)) < 6 || strlen(trim($password)) > 16)
             return app('json')->fail('密码必须是在6到16位之间');
         if ($password == '123456') return app('json')->fail('密码太过简单,请输入较为复杂的密码');

+ 27 - 13
app/api/controller/PublicController.php

@@ -5,6 +5,7 @@ namespace app\api\controller;
 use app\admin\model\system\SystemAttachment;
 use app\models\store\StoreCategory;
 use app\models\store\StoreCouponIssue;
+use app\models\store\StoreOrder;
 use app\models\store\StorePink;
 use app\models\store\StoreProduct;
 use app\models\store\StoreService;
@@ -30,6 +31,17 @@ use think\facade\Db;
  */
 class PublicController
 {
+
+    public function test()
+    {
+        if (StoreOrder::yuePay('wx164863507069927271', 120))
+            return app('json')->status('success', '余额支付成功');
+        else {
+            $error = StoreOrder::getErrorInfo();
+            return app('json')->fail(is_array($error) && isset($error['msg']) ? $error['msg'] : $error);
+        }
+    }
+
     /**
      * @param Request $request
      * @return mixed
@@ -60,6 +72,8 @@ class PublicController
         $promotionNumber = sys_config('promotion_number', 0);//TODO 首发新品个数
         $info['fastList'] = StoreCategory::byIndexList((int)$fastNumber, false);//TODO 快速选择分类个数
         $info['bastList'] = StoreProduct::getBestProduct('id,image,store_name,cate_id,price,ot_price,IFNULL(sales,0) + IFNULL(ficti,0) as sales,unit_name', (int)$bastNumber, $request->uid(), false);//TODO 精品推荐个数
+        $info['suitList'] = StoreProduct::getSuitProduct('id,image,store_name,cate_id,price,ot_price,IFNULL(sales,0) + IFNULL(ficti,0) as sales,unit_name', (int)$bastNumber, $request->uid(), false);//TODO 精品推荐个数
+        $info['integralList'] = StoreProduct::getIntegralProduct('id,image,store_name,cate_id,price,ot_price,IFNULL(sales,0) + IFNULL(ficti,0) as sales,unit_name,max_use_integral', (int)$bastNumber, $request->uid(), false);//TODO 精品推荐个数
         $info['firstList'] = StoreProduct::getNewProduct('id,image,store_name,cate_id,price,unit_name,IFNULL(sales,0) + IFNULL(ficti,0) as sales', (int)$firstNumber, $request->uid(), false);//TODO 首发新品个数
         $info['bastBanner'] = sys_data('routine_home_bast_banner') ?? [];//TODO 首页精品推荐图片
         $benefit = StoreProduct::getBenefitProduct('id,image,store_name,cate_id,price,ot_price,stock,unit_name', $promotionNumber);//TODO 首页促销单品
@@ -73,7 +87,7 @@ class PublicController
         }
         $newGoodsBananr = sys_config('new_goods_bananr');
         $tengxun_map_key = sys_config('tengxun_map_key');
-        return app('json')->successful(compact('filing_info','banner', 'menus', 'roll', 'info', 'activity', 'lovely', 'benefit', 'likeInfo', 'logoUrl', 'couponList', 'site_name', 'subscribe', 'newGoodsBananr', 'tengxun_map_key', 'explosive_money'));
+        return app('json')->successful(compact('filing_info', 'banner', 'menus', 'roll', 'info', 'activity', 'lovely', 'benefit', 'likeInfo', 'logoUrl', 'couponList', 'site_name', 'subscribe', 'newGoodsBananr', 'tengxun_map_key', 'explosive_money'));
     }
 
     /**
@@ -327,39 +341,39 @@ class PublicController
      */
     public function storeinfo(Request $request)
     {
-        $id = input('id',0);
-        if(!SystemStore::be(['id'=>$id])) return app('json')->fail('参数有误');
+        $id = input('id', 0);
+        if (!SystemStore::be(['id' => $id])) return app('json')->fail('参数有误');
         $info = SystemStore::find($id)->toArray();
         $info['store_user'] = [];
-        if($info['uid']>0)
-            $info['store_user'] = User::where('uid',$info['uid'])->field('nickname,avatar,uid')->find()->toArray();
+        if ($info['uid'] > 0)
+            $info['store_user'] = User::where('uid', $info['uid'])->field('nickname,avatar,uid')->find()->toArray();
         return app('json')->successful($info);
     }
+
     public function baidutoken()
     {
 
-        if(!cache("baidu_token"))
-        {
+        if (!cache("baidu_token")) {
             $url = "https://openapi.baidu.com/oauth/2.0/token";
             $data['grant_type'] = 'client_credentials';
             $data['client_id'] = 'MFWrhqevbfMLmIobOcOcH2kI';
-            $data['client_secret']= '3SntCWnj46a1GS71c8ABXWfNAlNnW5qr';
-            $rs = json_decode(file_get_contents($url."?".http_build_query($data)),true);
-            cache("baidu_token",$rs,2591999);
+            $data['client_secret'] = '3SntCWnj46a1GS71c8ABXWfNAlNnW5qr';
+            $rs = json_decode(file_get_contents($url . "?" . http_build_query($data)), true);
+            cache("baidu_token", $rs, 2591999);
         }
         return app('json')->successful(cache("baidu_token"));
 
     }
+
     public function day()
     {
         $day = @file_get_contents("day.txt");
-        if(date("Y-m-d",$day)<date("Y-m-d",time())) {
+        if (date("Y-m-d", $day) < date("Y-m-d", time())) {
             Db::query("call create_partition_cart()");
             Db::query("call create_partition_order()");
             Db::query("call create_partition_bill()");
         }
-        if(date("m-d",$day)<date("m-d",time()) && date("d",time())== "1")
-        {
+        if (date("m-d", $day) < date("m-d", time()) && date("d", time()) == "1") {
             Db::query("call create_partition_user()");
             Db::query("call create_partition_wechat_user()");
         }

+ 24 - 23
app/api/controller/order/StoreOrderController.php

@@ -63,7 +63,8 @@ class StoreOrderController
         }
         $other = [
             'offlinePostage' => sys_config('offline_postage'),
-            'integralRatio' => sys_config('integral_ratio')
+            'integralRatio' => sys_config('integral_ratio'),
+            'suit' => $cartGroup['suit']
         ];
         $usableCoupons = StoreCouponUser::getUsableCouponList($uid, $cartGroup, $priceGroup['totalPrice']);
         $usableCoupon = isset($usableCoupons[0]) ? $usableCoupons[0] : null;
@@ -103,15 +104,15 @@ class StoreOrderController
     }
 
     /**
- * 计算订单金额
- * @param Request $request
- * @param $key
- * @return mixed
- * @throws \think\Exception
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
+     * 计算订单金额
+     * @param Request $request
+     * @param $key
+     * @return mixed
+     * @throws \think\Exception
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @throws \think\exception\DbException
+     */
     public function computedOrder(Request $request, $key)
     {
 
@@ -120,9 +121,9 @@ class StoreOrderController
         $uid = $request->uid();
         if (StoreOrder::be(['order_id|unique' => $key, 'uid' => $uid, 'is_del' => 0]))
             return app('json')->status('extend_order', '订单已生成', ['orderId' => $key, 'key' => $key]);
-        list($addressId, $couponId, $payType, $useIntegral, $mark, $combinationId, $pinkId, $seckill_id, $formId, $bargainId, $shipping_type,$is_consumer) = UtilService::postMore([
+        list($addressId, $couponId, $payType, $useIntegral, $mark, $combinationId, $pinkId, $seckill_id, $formId, $bargainId, $shipping_type, $is_consumer) = UtilService::postMore([
             'addressId', 'couponId', ['payType', 'yue'], ['useIntegral', 0], 'mark', ['combinationId', 0], ['pinkId', 0], ['seckill_id', 0], ['formId', ''], ['bargainId', ''],
-            ['shipping_type', 1],['is_consumer',0]
+            ['shipping_type', 1], ['is_consumer', 0]
         ], $request, true);
         $payType = strtolower($payType);
         if ($bargainId) {
@@ -135,8 +136,8 @@ class StoreOrderController
             StoreBargainUser::setBargainUserStatus($bargainId, $uid); //修改砍价状态
         }
         if ($pinkId) {
-            $cache_pink = Cache::get(md5('store_pink_'.$pinkId));
-            if($cache_pink && bcsub($cache_pink['people'], $cache_pink['now_people'], 0) <= 0){
+            $cache_pink = Cache::get(md5('store_pink_' . $pinkId));
+            if ($cache_pink && bcsub($cache_pink['people'], $cache_pink['now_people'], 0) <= 0) {
                 return app('json')->status('ORDER_EXIST', '订单生成失败,该团人员已满', ['orderId' => StoreOrder::getStoreIdPink($pinkId, $request->uid())]);
             }
             if (StorePink::getIsPinkUid($pinkId, $request->uid()))
@@ -144,7 +145,7 @@ class StoreOrderController
             if (StoreOrder::getIsOrderPink($pinkId, $request->uid()))
                 return app('json')->status('ORDER_EXIST', '订单生成失败,你已经参加该团了,请先支付订单', ['orderId' => StoreOrder::getStoreIdPink($pinkId, $request->uid())]);
         }
-        $priceGroup = StoreOrder::cacheKeyCreateOrder($request->uid(), $key, $addressId, $payType, (int)$useIntegral, $couponId, $mark, $combinationId, $pinkId, $seckill_id, $bargainId, true, 0, $shipping_type,'','',0,$is_consumer);
+        $priceGroup = StoreOrder::cacheKeyCreateOrder($request->uid(), $key, $addressId, $payType, (int)$useIntegral, $couponId, $mark, $combinationId, $pinkId, $seckill_id, $bargainId, true, 0, $shipping_type, '', '', 0, $is_consumer);
         if ($priceGroup)
             return app('json')->status('NONE', 'ok', $priceGroup);
         else
@@ -167,9 +168,9 @@ class StoreOrderController
         $uid = $request->uid();
         if (StoreOrder::be(['order_id|unique' => $key, 'uid' => $uid, 'is_del' => 0]))
             return app('json')->status('extend_order', '订单已生成', ['orderId' => $key, 'key' => $key]);
-        list($addressId, $couponId, $payType, $useIntegral, $mark, $combinationId, $pinkId, $seckill_id, $formId, $bargainId, $from, $shipping_type, $real_name, $phone, $storeId,$is_consumer) = UtilService::postMore([
+        list($addressId, $couponId, $payType, $useIntegral, $mark, $combinationId, $pinkId, $seckill_id, $formId, $bargainId, $from, $shipping_type, $real_name, $phone, $storeId, $is_consumer) = UtilService::postMore([
             'addressId', 'couponId', 'payType', ['useIntegral', 0], 'mark', ['combinationId', 0], ['pinkId', 0], ['seckill_id', 0], ['formId', ''], ['bargainId', ''], ['from', 'weixin'],
-            ['shipping_type', 1], ['real_name', ''], ['phone', ''], ['store_id', 0],['is_consumer',0]
+            ['shipping_type', 1], ['real_name', ''], ['phone', ''], ['store_id', 0], ['is_consumer', 0]
         ], $request, true);
         $payType = strtolower($payType);
         if ($bargainId) {
@@ -182,8 +183,8 @@ class StoreOrderController
             StoreBargainUser::setBargainUserStatus($bargainId, $uid); //修改砍价状态
         }
         if ($pinkId) {
-            $cache_pink = Cache::get(md5('store_pink_'.$pinkId));
-            if($cache_pink && bcsub($cache_pink['people'], $cache_pink['now_people'], 0) <= 0){
+            $cache_pink = Cache::get(md5('store_pink_' . $pinkId));
+            if ($cache_pink && bcsub($cache_pink['people'], $cache_pink['now_people'], 0) <= 0) {
                 return app('json')->status('ORDER_EXIST', '订单生成失败,该团人员已满', ['orderId' => StoreOrder::getStoreIdPink($pinkId, $request->uid())]);
             }
             if (StorePink::getIsPinkUid($pinkId, $request->uid()))
@@ -197,7 +198,7 @@ class StoreOrderController
         elseif ($from == 'weixinh5')
             $isChannel = 2;
 
-        $order = StoreOrder::cacheKeyCreateOrder($request->uid(), $key, $addressId, $payType, (int)$useIntegral, $couponId, $mark, $combinationId, $pinkId, $seckill_id, $bargainId, false, $isChannel, $shipping_type, $real_name, $phone, $storeId,$is_consumer);
+        $order = StoreOrder::cacheKeyCreateOrder($request->uid(), $key, $addressId, $payType, (int)$useIntegral, $couponId, $mark, $combinationId, $pinkId, $seckill_id, $bargainId, false, $isChannel, $shipping_type, $real_name, $phone, $storeId, $is_consumer);
         if ($order === false) return app('json')->fail(StoreOrder::getErrorInfo('订单生成失败'));
         $orderId = $order['order_id'];
         $info = compact('orderId', 'key');
@@ -316,9 +317,9 @@ class StoreOrderController
             return app('json')->fail('订单不存在!');
         if ($order['paid'])
             return app('json')->fail('该订单已支付!');
-        if ($order['pink_id']){
-            $cache_pink = Cache::get(md5('store_pink_'.$order['pink_id']));
-            if(StorePink::isPinkStatus($order['pink_id'])  || ($cache_pink && bcsub($cache_pink['people'], $cache_pink['now_people'], 0) <= 0)){
+        if ($order['pink_id']) {
+            $cache_pink = Cache::get(md5('store_pink_' . $order['pink_id']));
+            if (StorePink::isPinkStatus($order['pink_id']) || ($cache_pink && bcsub($cache_pink['people'], $cache_pink['now_people'], 0) <= 0)) {
                 return app('json')->fail('该订单已失效!');
             }
         }

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

@@ -43,7 +43,7 @@ class StoreProductController
             [['page', 'd'], 0],
             [['limit', 'd'], 0],
             [['type', 0], 0],
-            ['is_consumer',0]
+            ['is_consumer', 0]
         ], $request);
         return app('json')->successful(StoreProduct::getProductList($data, $request->uid()));
     }
@@ -147,7 +147,7 @@ class StoreProductController
 //        array_multisort($prices, SORT_ASC, SORT_NUMERIC, $productValue);
 //        $keys = array_keys($productValue);
 //        $productValue = array_combine($keys, $productValue);
-        StoreVisit::setView($uid, $id, 'product',$storeInfo['cate_id'], 'viwe');
+        StoreVisit::setView($uid, $id, 'product', $storeInfo['cate_id'], 'viwe');
         $data['storeInfo'] = StoreProduct::setLevelPrice($storeInfo, $uid, true);
         $data['similarity'] = StoreProduct::cateIdBySimilarityProduct($storeInfo['cate_id'], 'id,store_name,image,price,sales,ficti', 4);
         $data['productAttr'] = $productAttr;
@@ -242,6 +242,12 @@ class StoreProductController
         } else if ($type == 4) {//TODO 促销单品
             $info['banner'] = sys_data('routine_home_benefit_banner') ?: [];//TODO 促销单品推荐图片
             $info['list'] = StoreProduct::getBenefitProduct('id,image,store_name,cate_id,price,ot_price,stock,unit_name,sort', 0, $page, $limit);//TODO 促销单品
+        } else if ($type == 5) {//TODO 促销单品
+            $info['banner'] = sys_data('routine_home_benefit_banner') ?: [];//TODO 促销单品推荐图片
+            $info['list'] = StoreProduct::getSuitProduct('id,image,store_name,cate_id,price,ot_price,stock,unit_name,sort', 0, 0, true, $page, $limit);//TODO 促销单品
+        } else if ($type == 6) {//TODO 促销单品
+            $info['banner'] = sys_data('routine_home_benefit_banner') ?: [];//TODO 促销单品推荐图片
+            $info['list'] = StoreProduct::getIntegralProduct('id,image,store_name,cate_id,price,ot_price,stock,unit_name,sort,max_use_integral', 0, 0, true, $page, $limit);//TODO 促销单品
         }
         return app('json')->successful($info);
     }

+ 58 - 64
app/api/controller/user/UserController.php

@@ -47,7 +47,7 @@ class UserController
         $info = $request->user()->toArray();
         $broken_time = intval(sys_config('extract_time'));
         $search_time = time() - 86400 * $broken_time;
-        $search_time = date("Y-m-d H:i:s",$search_time);
+        $search_time = date("Y-m-d H:i:s", $search_time);
         //返佣 +
         $brokerage_commission = UserBill::where(['uid' => $info['uid'], 'category' => 'now_money', 'type' => 'brokerage'])
             ->where('add_time', '>', $search_time)
@@ -65,23 +65,21 @@ class UserController
         if ($info['commissionCount'] < 0)
             $info['commissionCount'] = 0;
         $info['service'] = StoreService::orderServiceStatus($request->uid());
-        if(empty($info['SN']))
-        {
-            $max = intval(User::value('max(sn)'))+1;
-            $sn = str_pad($max,8,"0",STR_PAD_LEFT);
-            User::edit(['SN'=>$sn],$info['uid']);
+        if (empty($info['SN'])) {
+            $max = intval(User::value('max(sn)')) + 1;
+            $sn = str_pad($max, 8, "0", STR_PAD_LEFT);
+            User::edit(['SN' => $sn], $info['uid']);
             $info['SN'] = $sn;
 
         }
-        if($info['level']==1) {
+        if ($info['level'] == 1) {
             $info['vip'] = SystemStoreMember::where('uid', $info['uid'])->find();
-            $info['store_name'] = SystemStore::where('id',$info['reg_store_id'])->value('name');
-        }
-        else
-        {
+            $info['store_name'] = SystemStore::where('id', $info['reg_store_id'])->value('name');
+        } else {
             $info['vip'] = [];
             $info['store_name'] = [];
         }
+        $info['lock_group_award'] = UserBill::where(['type' => 'brokerage', 'category' => 'now_money', 'pm' => 1, 'status' => 0, 'uid' => $info['uid'], 'title' => '套装极差奖'])->sum('number');
         return app('json')->success($info);
     }
 
@@ -265,9 +263,9 @@ class UserController
             ['detail', ''],
             ['id', 0],
             ['type', 0],
-            ['city_id',0],
-            ['longitude',''],
-            ['latitude',''],
+            ['city_id', 0],
+            ['longitude', ''],
+            ['latitude', ''],
         ], $request);
         if (!isset($addressInfo['address']['province'])) return app('json')->fail('收货地址格式错误!');
         if (!isset($addressInfo['address']['city'])) return app('json')->fail('收货地址格式错误!');
@@ -623,6 +621,7 @@ class UserController
         ]);
 
     }
+
     /**
      * 设置银行卡
      * @param Request $request
@@ -630,31 +629,30 @@ class UserController
     public function bank_edit(Request $request)
     {
         $data = UtilService::postMore([
-            ['fullname',''],
-            ['bank',''],
-            ['bankno',''],
-            ['subbranch',''],
-            ['default',0],
-            ['id',0],
-        ],$request);
+            ['fullname', ''],
+            ['bank', ''],
+            ['bankno', ''],
+            ['subbranch', ''],
+            ['default', 0],
+            ['id', 0],
+        ], $request);
         $data['uid'] = $request->uid();
-        if(!$this->regtest('/^[\x{4e00}-\x{9fa5}]+$/u',$data['fullname'])) return app('json')->fail('输入完整姓名!');
-        if(empty($data['bank'])) return app('json')->fail('选择银行');
-        if(!$this->regtest('/^\d+$/u',$data['bankno'])) return app('json')->fail('输入银行卡!');
-        if(intval($data['id'])==0)
-        {
+        if (!$this->regtest('/^[\x{4e00}-\x{9fa5}]+$/u', $data['fullname'])) return app('json')->fail('输入完整姓名!');
+        if (empty($data['bank'])) return app('json')->fail('选择银行');
+        if (!$this->regtest('/^\d+$/u', $data['bankno'])) return app('json')->fail('输入银行卡!');
+        if (intval($data['id']) == 0) {
             unset($data['id']);
             UserBank::insert($data);
-        }
-        else
-        {
+        } else {
             UserBank::update($data);
         }
         return app('json')->successful();
 
     }
-    private function regtest($pattern,$value)    {
-        preg_match ( $pattern, $value, $match );
+
+    private function regtest($pattern, $value)
+    {
+        preg_match($pattern, $value, $match);
         if ($match) {
             return true;
         } else {
@@ -670,46 +668,45 @@ class UserController
     public function ali_edit(Request $request)
     {
         $data = UtilService::postMore([
-            ['fullname',''],
-            ['alino',''],
-            ['default',0],
-            ['id',0],
-        ],$request);
+            ['fullname', ''],
+            ['alino', ''],
+            ['default', 0],
+            ['id', 0],
+        ], $request);
         $data['uid'] = $request->uid();
 
-        if(!$this->regtest('/^[\x{4e00}-\x{9fa5}]+$/u',$data['fullname'])) return app('json')->fail('输入完整姓名!');
-        if(empty($data['alino'])) return app('json')->fail('输入支付宝账号');
-        if(intval($data['id'])==0)
-        {
+        if (!$this->regtest('/^[\x{4e00}-\x{9fa5}]+$/u', $data['fullname'])) return app('json')->fail('输入完整姓名!');
+        if (empty($data['alino'])) return app('json')->fail('输入支付宝账号');
+        if (intval($data['id']) == 0) {
             unset($data['id']);
             UserAli::insert($data);
-        }
-        else
-        {
+        } else {
             UserAli::update($data);
         }
         return app('json')->successful();
     }
+
     /**
      * 获取银行卡信息
      */
     public function bankinfo(Request $request)
     {
 
-        $row = Userbank::where('uid',$request->uid())->find();
-        if($row)
+        $row = Userbank::where('uid', $request->uid())->find();
+        if ($row)
             return app('json')->successful($row->toArray());
         else
             return app('json')->successful([]);
     }
+
     /**
      * 获取支付宝信息
      */
     public function aliinfo(Request $request)
     {
 
-        $row = UserAli::where('uid',$request->uid())->find();
-        if($row)
+        $row = UserAli::where('uid', $request->uid())->find();
+        if ($row)
             return app('json')->successful($row->toArray());
         else
             return app('json')->successful([]);
@@ -723,31 +720,28 @@ class UserController
     public function verification(Request $request)
     {
 
-        list($card_number,$card_password,$type,$is_confirm,$reg_store_id) = UtilService::postMore([
-            ['card_number',''],
-            ['card_password',''],
-            ['type',0],
-            ['is_confirm',0],
-            ['reg_store_id',0],
-        ],$request,true);
+        list($card_number, $card_password, $type, $is_confirm, $reg_store_id) = UtilService::postMore([
+            ['card_number', ''],
+            ['card_password', ''],
+            ['type', 0],
+            ['is_confirm', 0],
+            ['reg_store_id', 0],
+        ], $request, true);
         $uid = $request->uid();
-        if($type==1) {
+        if ($type == 1) {
             $user = $request->user();
             if ($user['reg_store_id'] > 0) {
                 $reg_store_id = $user['reg_store_id'];
             }
             $uid = $request->uid();
         }
-        $rs = CardInfo::verification($card_number,$card_password,$uid,$type,$reg_store_id,$is_confirm);
-        if(!$rs) return app('json')->fail(CardInfo::getErrorInfo());
-        if($is_confirm==0)
-        {
-            $info = CardInfo::where('card_number',$card_number)->field('card_id,card_number,create_time,amount')->find()->toArray();
-            $info['title'] = Card::where('id',$info['card_id'])->value('title');
+        $rs = CardInfo::verification($card_number, $card_password, $uid, $type, $reg_store_id, $is_confirm);
+        if (!$rs) return app('json')->fail(CardInfo::getErrorInfo());
+        if ($is_confirm == 0) {
+            $info = CardInfo::where('card_number', $card_number)->field('card_id,card_number,create_time,amount')->find()->toArray();
+            $info['title'] = Card::where('id', $info['card_id'])->value('title');
             return app('json')->successful($info);
-        }
-        else
-        {
+        } else {
             return app('json')->successful('对换完成!');
         }
     }

+ 14 - 7
app/api/controller/user/UserExtractController.php

@@ -7,6 +7,7 @@ use app\models\store\StoreOrder;
 use app\models\user\UserBill;
 use app\models\user\UserExtract;
 use app\Request;
+use crmeb\services\CacheService;
 use crmeb\services\UtilService;
 
 /**
@@ -24,17 +25,17 @@ class UserExtractController
     public function bank(Request $request)
     {
         $user = $request->user();
-        $broken_time = intval(sys_config('extract_time'));
+        $broken_time = intval(sys_config('extract_time', 0, true));
         $search_time = time() - 86400 * $broken_time;
         //可提现佣金
         //返佣 +
         $brokerage_commission = UserBill::where(['uid' => $user['uid'], 'category' => 'now_money', 'type' => 'brokerage'])
-            ->where('add_time', '>', date("Y-m-d H:i:s",$search_time))
+            ->where('add_time', '>', date("Y-m-d H:i:s", $search_time))
             ->where('pm', 1)
             ->sum('number');
         //退款退的佣金 -
         $refund_commission = UserBill::where(['uid' => $user['uid'], 'category' => 'now_money', 'type' => 'brokerage'])
-            ->where('add_time', '>', date("Y-m-d H:i:s",$search_time))
+            ->where('add_time', '>', date("Y-m-d H:i:s", $search_time))
             ->where('pm', 0)
             ->sum('number');
         $data['broken_commission'] = bcsub($brokerage_commission, $refund_commission, 2);
@@ -44,6 +45,10 @@ class UserExtractController
         $data['brokerage_price'] = $user['brokerage_price'];
         //可提现佣金
         $data['commissionCount'] = $data['brokerage_price'] - $data['broken_commission'];
+        $data['commission'] = sys_config('commission');
+        $data['commission_gf'] = sys_config('commission_gf');
+        $data['commission_consumer'] = sys_config('commission_consumer');
+        $data['commission_yue'] = sys_config('commission_yue');
         $extractBank = sys_config('user_extract_bank') ?? []; //提现银行
         $extractBank = str_replace("\r\n", "\n", $extractBank);//防止不兼容
         $data['extractBank'] = explode("\n", is_array($extractBank) ? (isset($extractBank[0]) ? $extractBank[0] : $extractBank) : $extractBank);
@@ -67,21 +72,23 @@ class UserExtractController
             ['cardnum', ''],
             ['weixin', ''],
         ], $request);
+        if (time() - CacheService::get('UserExtract_' . $request->uid(), 0) < 10) return app('json')->fail('请勿连续多次提交');
+        else CacheService::set('UserExtract_' . $request->uid(), time());
         if (!preg_match('/^(([1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/', $extractInfo['money'])) return app('json')->fail('提现金额输入有误');
         //提现设置最低金额
-        if($extractInfo['money'] < sys_config('user_extract_min_price')) return app('json')->fail('金额小于最低提现金额');
+        if ($extractInfo['money'] < sys_config('user_extract_min_price')) return app('json')->fail('金额小于最低提现金额');
         $user = $request->user();
-        $broken_time = intval(sys_config('extract_time'));
+        $broken_time = intval(sys_config('extract_time', 0, true));
         $search_time = time() - 86400 * $broken_time;
         //可提现佣金
         //返佣 +
         $brokerage_commission = UserBill::where(['uid' => $user['uid'], 'category' => 'now_money', 'type' => 'brokerage'])
-            ->where('add_time', '>', date("Y-m-d H:i:s",$search_time))
+            ->where('add_time', '>', date("Y-m-d H:i:s", $search_time))
             ->where('pm', 1)
             ->sum('number');
         //退款退的佣金 -
         $refund_commission = UserBill::where(['uid' => $user['uid'], 'category' => 'now_money', 'type' => 'brokerage'])
-            ->where('add_time', '>', date("Y-m-d H:i:s",$search_time))
+            ->where('add_time', '>', date("Y-m-d H:i:s", $search_time))
             ->where('pm', 0)
             ->sum('number');
         $data['broken_commission'] = bcsub($brokerage_commission, $refund_commission, 2);

+ 2 - 2
app/common.php

@@ -36,12 +36,12 @@ if (!function_exists('sys_config')) {
      * @param string $default
      * @return string
      */
-    function sys_config(string $name, $default = '')
+    function sys_config(string $name, $default = '', $cache = false)
     {
         if (empty($name))
             return $default;
 
-        $config = trim(app('sysConfig')->get($name));
+        $config = trim(app('sysConfig')->get($name, $default, $cache));
         if ($config === '' || $config === false) {
             return $default;
         } else {

+ 7 - 2
app/http/middleware/AuthTokenMiddleware.php

@@ -3,9 +3,11 @@
 
 namespace app\http\middleware;
 
-
+use app\models\system\SystemAwardLevel;
+use app\models\system\SystemGroupLevel;
 use app\models\user\User;
 use app\models\user\UserToken;
+use app\models\user\WechatUser;
 use app\Request;
 use crmeb\exceptions\AuthException;
 use crmeb\interfaces\MiddlewareInterface;
@@ -25,9 +27,12 @@ class AuthTokenMiddleware implements MiddlewareInterface
     {
         $authInfo = null;
         $token = trim(ltrim($request->header('Authori-zation'), 'Bearer'));
-        if(!$token)  $token = trim(ltrim($request->header('Authorization'), 'Bearer'));//正式版,删除此行,某些服务器无法获取到token调整为 Authori-zation
+        if (!$token) $token = trim(ltrim($request->header('Authorization'), 'Bearer'));//正式版,删除此行,某些服务器无法获取到token调整为 Authori-zation
         try {
             $authInfo = UserRepository::parseToken($token);
+            $authInfo['user']['wechat'] = WechatUser::where('uid', $authInfo['user']['uid'])->field('subscribe,user_type')->find();
+            $authInfo['user']['group_level_info'] = SystemGroupLevel::where('id', $authInfo['user']['group_level'])->find();
+            $authInfo['user']['award_level_info'] = SystemAwardLevel::where('id', $authInfo['user']['award_level'])->find();
         } catch (AuthException $e) {
             if ($force)
                 return app('json')->make($e->getCode(), $e->getMessage());

+ 18 - 10
app/models/store/StoreCart.php

@@ -41,9 +41,10 @@ class StoreCart extends BaseModel
     {
         return date("Y-m-d H:i:s");
     }
-    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_consumer=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_consumer = 0)
     {
-        if ($cart_num <0.001) $cart_num = 1;
+        if ($cart_num < 0.001) $cart_num = 1;
         if (!$product_attr_unique) {
             $id = 0;
             $activity_type = 0;
@@ -62,8 +63,8 @@ class StoreCart extends BaseModel
                 $product_attr_unique = $unique;
             }
         }
-        @file_put_contents("cart.txt",$cart_num);
-        if(!StoreOrder::checkProductStock($uid, $product_id,$cart_num,$product_attr_unique,$combination_id,$seckill_id,$bargain_id)){
+        @file_put_contents("cart.txt", $cart_num);
+        if (!StoreOrder::checkProductStock($uid, $product_id, $cart_num, $product_attr_unique, $combination_id, $seckill_id, $bargain_id)) {
             return self::setErrorInfo(StoreOrder::getErrorInfo());
         }
         if ($cart = self::where('type', $type)->where('uid', $uid)->where('product_id', $product_id)->where('product_attr_unique', $product_attr_unique)->where('is_new', $is_new)->where('is_pay', 0)->where('is_del', 0)->where('combination_id', $combination_id)->where('bargain_id', $bargain_id)->where('seckill_id', $seckill_id)->find()) {
@@ -78,8 +79,9 @@ class StoreCart extends BaseModel
         } else {
             $add_time = time();
             $id = self::getkeytoid('cart_id');
-            $rs = self::create(compact('uid', 'product_id', 'cart_num', 'product_attr_unique', 'is_new', 'type', 'combination_id', 'add_time', 'bargain_id', 'seckill_id','id','is_consumer'));
-             @file_put_contents("cart.txt",self::getlastsql(),8);
+            $is_suit = (!$combination_id && !$seckill_id && !$bargain_id && StoreProduct::where('id', $product_id)->value('is_suit')) ? 1 : 0;
+            $rs = self::create(compact('uid', 'product_id', 'cart_num', 'product_attr_unique', 'is_new', 'type', 'combination_id', 'add_time', 'bargain_id', 'seckill_id', 'id', 'is_consumer', 'is_suit'));
+            @file_put_contents("cart.txt", self::getlastsql(), 8);
             return $rs;
         }
     }
@@ -137,12 +139,13 @@ 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,is_consumer';
+        $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_consumer,is_suit,max_use_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';
         $model = new self();
         $valid = $invalid = [];
+        $suit = 0;
         $model = $model->alias('c')->field('c.*')->join('store_product p', 'c.product_id = p.id')->where('c.uid', $uid)->where('c.type', 'product')->where('c.is_pay', 0)
             ->where('c.is_del', 0);
         if (!$status) $model = $model->where('c.is_new', 0);
@@ -211,16 +214,18 @@ class StoreCart extends BaseModel
                         $invalid[] = $cart;
                     else {
                         $cart['productInfo']['attrInfo'] = $attrInfo;
-                        if ($cart['combination_id'] || $cart['seckill_id'] || $cart['bargain_id'] || $cart['is_consumer']) {
+                        if ($cart['combination_id'] || $cart['seckill_id'] || $cart['bargain_id'] || $cart['is_consumer'] || $cart['is_suit'] || (($cart['productInfo']['max_use_integral'] ?? 0) > 0)) {
                             if ($cart['bargain_id']) {
                                 $cart['truePrice'] = $cart['productInfo']['price'];
                             } else {
                                 $cart['truePrice'] = $attrInfo['price'];
                             }
                             $cart['vip_truePrice'] = 0;
+                            $cart['use_integral'] = $cart['productInfo']['max_use_integral'] ?? 0;
                         } else {
                             $cart['truePrice'] = (float)StoreProduct::setLevelPrice($attrInfo['price'], $uid, true);
                             $cart['vip_truePrice'] = (float)StoreProduct::setLevelPrice($attrInfo['price'], $uid);
+                            $cart['use_integral'] = 0;
                         }
                         $cart['trueStock'] = $attrInfo['stock'];
                         $cart['costPrice'] = $attrInfo['cost'];
@@ -228,9 +233,10 @@ class StoreCart extends BaseModel
                         $valid[] = $cart;
                     }
                 } else {
-                    if ($cart['combination_id'] || $cart['seckill_id'] || $cart['bargain_id'] || $cart['is_consumer']) {
+                    if ($cart['combination_id'] || $cart['seckill_id'] || $cart['bargain_id'] || $cart['is_consumer'] || $cart['is_suit'] || (($cart['productInfo']['max_use_integral'] ?? 0) > 0)) {
                         $cart['truePrice'] = $cart['productInfo']['price'];
                         $cart['vip_truePrice'] = 0;
+                        $cart['use_integral'] = $cart['productInfo']['max_use_integral'] ?? 0;
                         if ($cart['bargain_id']) {
                             $cart['productInfo']['attrInfo'] = StoreProductAttrValue::where('product_id', $cart['bargain_id'])->where('type', 2)->find();
                         }
@@ -239,6 +245,7 @@ class StoreCart extends BaseModel
                     } else {
                         $cart['truePrice'] = (float)StoreProduct::setLevelPrice($cart['productInfo']['price'], $uid, true);
                         $cart['vip_truePrice'] = (float)StoreProduct::setLevelPrice($cart['productInfo']['price'], $uid);
+                        $cart['use_integral'] = 0;
                     }
                     $cart['trueStock'] = $cart['productInfo']['stock'];
                     $cart['costPrice'] = $cart['productInfo']['cost'];
@@ -257,6 +264,7 @@ class StoreCart extends BaseModel
             if (isset($valid[$k]['productInfo'])) {
                 unset($valid[$k]['productInfo']['is_del'], $valid[$k]['productInfo']['is_del'], $valid[$k]['productInfo']['is_show']);
             }
+            $suit += ($cart['productInfo']['is_suit'] ?? 0) * $cart['cart_num'];
         }
         foreach ($invalid as $k => $cart) {
             unset($valid[$k]['uid'], $valid[$k]['is_del'], $valid[$k]['is_new'], $valid[$k]['is_pay'], $valid[$k]['add_time']);
@@ -265,7 +273,7 @@ class StoreCart extends BaseModel
             }
         }
 
-        return compact('valid', 'invalid');
+        return compact('valid', 'invalid', 'suit');
     }
 
     /**

+ 360 - 152
app/models/store/StoreOrder.php

@@ -10,6 +10,8 @@ namespace app\models\store;
 use app\admin\model\store\StoreProductAttrValue;
 use app\admin\model\system\ShippingTemplatesFree;
 use app\admin\model\system\ShippingTemplatesRegion;
+use app\models\system\SystemAwardLevel;
+use app\models\system\SystemGroupLevel;
 use app\models\system\SystemStoreMember;
 use app\models\system\SystemStoreStock;
 use app\models\system\SystemUserLevel;
@@ -49,7 +51,7 @@ class StoreOrder extends BaseModel
     use ModelTrait;
 
 
-    protected static $payType = ['weixin' => '微信支付', 'yue' => '余额支付', 'offline' => '线下支付','consumer'=>'消费券支付','jialie'=>'嘉联支付'];
+    protected static $payType = ['weixin' => '微信支付', 'yue' => '余额支付', 'offline' => '线下支付', 'consumer' => '消费券支付', 'jialie' => '嘉联支付'];
 
     protected static $deliveryType = ['send' => '商家配送', 'express' => '快递配送'];
 
@@ -74,6 +76,7 @@ class StoreOrder extends BaseModel
         $totalPrice = self::getOrderSumPrice($cartInfo, 'truePrice');//获取订单总金额
         $costPrice = self::getOrderSumPrice($cartInfo, 'costPrice');//获取订单成本价
         $vipPrice = self::getOrderSumPrice($cartInfo, 'vip_truePrice');//获取订单会员优惠金额
+        $use_integral = self::getOrderSumPrice($cartInfo, 'use_integral');//获取订单会员优惠金额
         //如果满额包邮等于0
         if (!$storeFreePostage) {
             $storePostage = 0;
@@ -143,7 +146,7 @@ class StoreOrder extends BaseModel
             }
             if ($storeFreePostage <= $totalPrice) $storePostage = 0;//如果总价大于等于满额包邮 邮费等于0
         }
-        return compact('storePostage', 'storeFreePostage', 'totalPrice', 'costPrice', 'vipPrice');
+        return compact('use_integral', 'storePostage', 'storeFreePostage', 'totalPrice', 'costPrice', 'vipPrice');
     }
 
 
@@ -267,7 +270,7 @@ class StoreOrder extends BaseModel
      * @throws \think\exception\DbException
      */
 
-    public static function cacheKeyCreateOrder($uid, $key, $addressId, $payType, $useIntegral = false, $couponId = 0, $mark = '', $combinationId = 0, $pinkId = 0, $seckill_id = 0, $bargain_id = 0, $test = false, $isChannel = 0, $shipping_type = 1, $real_name = '', $phone = '', $storeId = 0,$is_consumer=0)
+    public static function cacheKeyCreateOrder($uid, $key, $addressId, $payType, $useIntegral = false, $couponId = 0, $mark = '', $combinationId = 0, $pinkId = 0, $seckill_id = 0, $bargain_id = 0, $test = false, $isChannel = 0, $shipping_type = 1, $real_name = '', $phone = '', $storeId = 0, $is_consumer = 0)
     {
         self::beginTrans();
         try {
@@ -284,6 +287,7 @@ class StoreOrder extends BaseModel
             $priceGroup = $cartGroup['priceGroup'];
             $other = $cartGroup['other'];
             $payPrice = (float)$priceGroup['totalPrice'];
+            $useIntegrals = (float)$priceGroup['use_integral'];
             $addr = UserAddress::where('uid', $uid)->where('id', $addressId)->find();
             if ($payType == 'offline' && sys_config('offline_postage') == 1) {
                 $payPostage = 0;
@@ -295,7 +299,7 @@ class StoreOrder extends BaseModel
                 if (!$test && (!UserAddress::be(['uid' => $uid, 'id' => $addressId, 'is_del' => 0]) || !($addressInfo = UserAddress::find($addressId))))
                     return self::setErrorInfo('地址选择有误!', true);
                 $addressInfo = UserAddress::find($addressId);
-                if(!$test ) {
+                if (!$test) {
                     if (empty($addressInfo['longitude']) || empty($addressInfo['latitude'])) {
                         return self::setErrorInfo('收货地址经纬度不能为空!', true);
                     }
@@ -321,7 +325,8 @@ class StoreOrder extends BaseModel
             $cartIds = [];
             $totalNum = 0;
             $gainIntegral = 0;
-            foreach ($cartInfo as $cart){
+            $maxUseIntegral = 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;
                 }
@@ -331,7 +336,9 @@ 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;
+                $cartInfoMaxUseIntegral = isset($cart['productInfo']['max_use_integral']) ? bcmul($cart['cart_num'], $cart['productInfo']['max_use_integral'], 2) : 0;
                 $gainIntegral = bcadd($gainIntegral, $cartInfoGainIntegral, 2);
+                $maxUseIntegral = bcadd($maxUseIntegral, $cartInfoMaxUseIntegral, 2);
             }
             $deduction = $seckill_id || $bargain_id || $combinationId;
             if ($deduction) {
@@ -382,29 +389,53 @@ class StoreOrder extends BaseModel
                 }
             }
 
+//            //积分抵扣
+//            $res2 = true;
+//            $SurplusIntegral = 0;
+//            if ($useIntegral && $userInfo['integral'] > 0) {
+//                if ($userInfo['integral'] > $maxUseIntegral) {
+//                    $useIntegral = $maxUseIntegral;
+//                } else {
+//                    $useIntegral = $userInfo['integral'];
+//                }
+//                if ($useIntegral > 0) {
+//                    $deductionPrice = (float)bcmul($useIntegral, $other['integralRatio'], 2);
+//                    if ($deductionPrice < $payPrice) {
+//                        $payPrice = bcsub($payPrice, $deductionPrice, 2);
+//                        $usedIntegral = $useIntegral;
+//                        $SurplusIntegral = 0;
+//                        $res2 = false !== User::edit(['integral' => bcsub($userInfo['integral'], $usedIntegral, 2)], $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 {
+//                    $deductionPrice = 0;
+//                    $usedIntegral = 0;
+//                }
+//            } else {
+//                $deductionPrice = 0;
+//                $usedIntegral = 0;
+//            }
+//            if (!$res2) return self::setErrorInfo('使用积分抵扣失败!', true);
+
             //积分抵扣
-            $res2 = true;
+            $deductionPrice = 0;
             $SurplusIntegral = 0;
-            if ($useIntegral && $userInfo['integral'] > 0) {
-                $deductionPrice = (float)bcmul($userInfo['integral'], $other['integralRatio'], 2);
-                if ($deductionPrice < $payPrice) {
-                    $payPrice = bcsub($payPrice, $deductionPrice, 2);
-                    $usedIntegral = $userInfo['integral'];
-                    $SurplusIntegral = 0;
-                    $res2 = false !== User::edit(['integral' => 0], $userInfo['uid'], 'uid');
+            if ($useIntegrals > 0) {
+                if ($userInfo['integral'] >= $useIntegrals) {
+                    $SurplusIntegral = bcsub($userInfo['integral'], $useIntegrals, 2);
+                    $res2 = false !== User::bcDec($userInfo['uid'], 'integral', $useIntegrals, 'uid');
+                    $res2 = $res2 && false != UserBill::expend('积分商品', $uid, 'integral', 'deduction', $useIntegrals, $key, $userInfo['integral'], '购买积分商品使用' . floatval($useIntegrals));
                 } 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;
+                    return self::setErrorInfo('积分不足' . $useIntegrals . '!', true);
                 }
-                $res2 = $res2 && false != UserBill::expend('积分抵扣', $uid, 'integral', 'deduction', $usedIntegral, $key, $userInfo['integral'], '购买商品使用' . floatval($usedIntegral) . '积分抵扣' . floatval($deductionPrice) . '元');
-            } else {
-                $deductionPrice = 0;
-                $usedIntegral = 0;
+                if (!$res2) return self::setErrorInfo('使用积分抵扣失败!', true);
             }
-            if (!$res2) return self::setErrorInfo('使用积分抵扣失败!', true);
             if ($payPrice <= 0) $payPrice = 0;
             if ($test) {
                 self::rollbackTrans();
@@ -415,11 +446,12 @@ class StoreOrder extends BaseModel
                     'coupon_price' => $couponPrice,
                     'deduction_price' => $deductionPrice,
                     'SurplusIntegral' => $SurplusIntegral,
+                    'useIntegral' => $useIntegrals,
                 ];
             }
             $id = self::getkeytoid('order_id');
             $orderInfo = [
-                'id'=> $id,
+                'id' => $id,
                 'uid' => $uid,
                 'order_id' => $test ? 0 : self::getNewOrderId(),
                 'real_name' => $addressInfo['real_name'],
@@ -436,7 +468,7 @@ class StoreOrder extends BaseModel
                 'deduction_price' => $deductionPrice,
                 'paid' => 0,
                 'pay_type' => $payType,
-                'use_integral' => $usedIntegral,
+                'use_integral' => $useIntegrals,
                 'gain_integral' => $gainIntegral,
                 'mark' => htmlspecialchars($mark),
                 'combination_id' => $combinationId,
@@ -448,25 +480,23 @@ class StoreOrder extends BaseModel
                 'add_time' => date("Y-m-d H:i:s"),
                 'unique' => $key,
                 'shipping_type' => $shipping_type,
-                'is_consumer'=>$is_consumer,
-                'reg_store_id'=>$userInfo['reg_store_id'],
+                'is_consumer' => $is_consumer,
+                'reg_store_id' => $userInfo['reg_store_id'],
+                'suit' => $other['suit'],
             ];
             if ($shipping_type === 2) {
                 $orderInfo['verify_code'] = self::getStoreCode();
                 $orderInfo['store_id'] = SystemStore::getStoreDispose($storeId, 'id');
                 if (!$orderInfo['store_id']) return self::setErrorInfo('暂无门店无法选择门店自提!', true);
-            }
-            else
-            {
+            } else {
                 $orderInfo['store_id'] = $storeId;
             }
-            $create_store_id = intval(SystemStoreMember::where('uid',$uid)->value('reg_store_id'));
-            if($create_store_id==0 && $orderInfo['store_id']>0)
-            {
+            $create_store_id = intval(SystemStoreMember::where('uid', $uid)->value('reg_store_id'));
+            if ($create_store_id == 0 && $orderInfo['store_id'] > 0) {
                 $orderInfo['create_store_id'] = $orderInfo['store_id'];
             }
             $order = self::create($orderInfo);
-            if (!$order) return self::setErrorInfo('订单生成失败-0!'.self::getlastsql(), true);
+            if (!$order) return self::setErrorInfo('订单生成失败-0!' . self::getlastsql(), true);
             $res5 = true;
             foreach ($cartInfo as $cart) {
                 //减库存加销量
@@ -479,7 +509,7 @@ class StoreOrder extends BaseModel
             $res4 = false !== StoreOrderCartInfo::setCartInfo($order['id'], $cartInfo);
             //购物车状态修改
             $res6 = false !== StoreCart::where('id', 'IN', $cartIds)->update(['is_pay' => 1]);
-            if (!$res4 || !$res5 || !$res6) return self::setErrorInfo('订单生成失败-1!'.$res5.'-'.$res4.'-'.$res6, true);
+            if (!$res4 || !$res5 || !$res6) return self::setErrorInfo('订单生成失败-1!' . $res5 . '-' . $res4 . '-' . $res6, true);
             //自动设置默认地址
             UserRepository::storeProductOrderCreateEbApi($order, compact('cartInfo', 'addressId'));
             self::clearCacheOrderInfo($uid, $key);
@@ -488,10 +518,10 @@ class StoreOrder extends BaseModel
             return $order;
         } catch (\PDOException $e) {
             self::rollbackTrans();
-            return self::setErrorInfo('生成订单时SQL执行错误错误原因:' . $e->getMessage().'--'.$e->getFile().'--'.$e->getLine());
+            return self::setErrorInfo('生成订单时SQL执行错误错误原因:' . $e->getMessage() . '--' . $e->getFile() . '--' . $e->getLine());
         } catch (\Exception $e) {
             self::rollbackTrans();
-            return self::setErrorInfo('生成订单时系统错误错误原因:' . $e->getMessage().'--'.$e->getFile().'--'.$e->getLine());
+            return self::setErrorInfo('生成订单时系统错误错误原因:' . $e->getMessage() . '--' . $e->getFile() . '--' . $e->getLine());
         }
     }
 
@@ -536,7 +566,7 @@ class StoreOrder extends BaseModel
             else if ($bargain_id) $res5 = $res5 && StoreBargain::incBargainStock($cart['cart_info']['cart_num'], $bargain_id, isset($cart['cart_info']['productInfo']['attrInfo']) ? $cart['cart_info']['productInfo']['attrInfo']['unique'] : '');
             else {
                 $res5 = $res5 && StoreProduct::incProductStock($cart['cart_info']['cart_num'], $cart['cart_info']['productInfo']['id'], isset($cart['cart_info']['productInfo']['attrInfo']) ? $cart['cart_info']['productInfo']['attrInfo']['unique'] : '');
-                SystemStoreStock::Refund($order,$cart['cart_info']);
+                SystemStoreStock::Refund($order, $cart['cart_info']);
             }
         }
         return $res5;
@@ -692,6 +722,7 @@ class StoreOrder extends BaseModel
         self::checkTrans($res);
         return $res;
     }
+
     /**
      * 消费券支付
      * @param $order_id
@@ -818,11 +849,41 @@ class StoreOrder extends BaseModel
         $now_money = User::where('uid', $order['uid'])->value('now_money');
         UserBill::expend('购买商品', $order['uid'], 'now_money', 'pay_money', $order['pay_price'], $order['id'], $now_money, '支付' . floatval($order['pay_price']) . '元购买商品');
         //支付成功后
+        $res2 = true;
+        $res2 = $res2 && self::addSuit($order);
+        $res2 = $res2 && StoreOrder::sendSuit($order);
+        $res2 = $res2 && StoreOrder::sendGroupAward($order);
+        $res2 = $res2 && SystemGroupLevel::checkLevel($order['uid']);
+        $res2 = $res2 && SystemAwardLevel::checkLevel($order['uid']);
         event('OrderPaySuccess', [$order, $formId]);
-        $res = $res1 && $resPink;
+        $res = $res1 && $resPink && $res2;
         return false !== $res;
     }
 
+    public static function addSuit($order)
+    {
+        if($order['suit']<=0) return true;
+        $userInfo = User::getUserInfo($order['uid']);
+        $spread = User::getUserInfo($userInfo['spread_uid']);
+        if (StoreOrder::where('uid', $order['uid'])->where('paid', 1)->where('refund_status', 0)->where('is_del', 0)->where('is_system_del', 0)
+            ->where('id', '<>', $order['id'])->where('suit', '>', 0)->find()) {
+            $spread = $userInfo;
+        }
+        $re = true;
+        $res = true;
+        while ($spread) {
+            if ($re) {
+                $res = $res && User::where('uid', $spread['uid'])->inc('recommend_suit_num', $order['suit'])
+                        ->inc('group_suit_num', $order['suit'])->update();
+                $re = false;
+            } else {
+                $res = $res && User::where('uid', $spread['uid'])->inc('group_suit_num', $order['suit'])->update();
+            }
+            $spread = User::getUserInfo($spread['spread_uid']);
+        }
+        return $res;
+    }
+
     /*
      * 线下支付消息通知
      * 待完善
@@ -1082,7 +1143,7 @@ class StoreOrder extends BaseModel
         if (isset($order['delivery_type']))
             $status['_deliveryType'] = isset(self::$deliveryType[$order['delivery_type']]) ? self::$deliveryType[$order['delivery_type']] : '其他方式';
         $order['_status'] = $status;
-        $order['_pay_time'] = isset($order['pay_time']) && $order['pay_time'] != null ? $order['pay_time']: $order['add_time'];
+        $order['_pay_time'] = isset($order['pay_time']) && $order['pay_time'] != null ? $order['pay_time'] : $order['add_time'];
         $order['_add_time'] = $order['add_time'];
         $order['status_pic'] = '';
         //获取产品状态图片
@@ -1361,11 +1422,10 @@ class StoreOrder extends BaseModel
      * 获取 今日 昨日 本月 订单金额
      * @return mixed
      */
-    public static function getOrderTimeData($store_id=0,$is_consumer=0)
+    public static function getOrderTimeData($store_id = 0, $is_consumer = 0)
     {
         $where = [];
-        if($store_id>0)
-        {
+        if ($store_id > 0) {
             $where['store_id'] = $store_id;
         }
         $where['is_consumer'] = $is_consumer;
@@ -1420,11 +1480,10 @@ class StoreOrder extends BaseModel
      * @param $uid
      * @return mixed
      */
-    public static function getOrderDataAdmin($store_id=0,$is_consumer=0)
+    public static function getOrderDataAdmin($store_id = 0, $is_consumer = 0)
     {
         $where = [];
-        if($store_id>0)
-        {
+        if ($store_id > 0) {
             $where['store_id'] = $store_id;
         }
         $where['is_consumer'] = $is_consumer;
@@ -1707,19 +1766,19 @@ class StoreOrder extends BaseModel
      * @throws \think\db\exception\DbException
      * @throws \think\db\exception\ModelNotFoundException
      */
-    public static function getordermonth($store_id,$start,$end)
+    public static function getordermonth($store_id, $start, $end)
     {
         $model = new self;
         $model = $model->where('pay_time', '>', $start)->where('pay_time', '<=', $end);
         $model = $model->where('is_del', 0);
         $model = $model->where('paid', 1);
         $model = $model->where('refund_status', 0);
-        $model = $model->where('store_id',$store_id);
-        $data[] =  $model->where('is_consumer',0)->where('use_integral',0)->field("sum(pay_price) as price,count(id) as count,'普通订单' as order_type")->find()->toArray();
-        $data[] =  $model->where('is_consumer',1)->field("sum(pay_price) as price,count(id) as count,'消费券订单' as order_type")->find()->toArray();
-        $data[] =  $model->where('is_consumer',0)->where('use_integral','>',0)->field("sum(pay_price) as price,count(id) as count,'积分订单' as order_type")->find()->toArray();
-        $day = self::where('paid',1)->where('refund_status', 0)->where('store_id',$store_id)->where('pay_time','>',date("y-m-d"))->field('sum(pay_price) as price,count(id) as count')->find();
-        return compact('day','data');
+        $model = $model->where('store_id', $store_id);
+        $data[] = $model->where('is_consumer', 0)->where('use_integral', 0)->field("sum(pay_price) as price,count(id) as count,'普通订单' as order_type")->find()->toArray();
+        $data[] = $model->where('is_consumer', 1)->field("sum(pay_price) as price,count(id) as count,'消费券订单' as order_type")->find()->toArray();
+        $data[] = $model->where('is_consumer', 0)->where('use_integral', '>', 0)->field("sum(pay_price) as price,count(id) as count,'积分订单' as order_type")->find()->toArray();
+        $day = self::where('paid', 1)->where('refund_status', 0)->where('store_id', $store_id)->where('pay_time', '>', date("y-m-d"))->field('sum(pay_price) as price,count(id) as count')->find();
+        return compact('day', 'data');
     }
 
     /**
@@ -1738,7 +1797,7 @@ class StoreOrder extends BaseModel
         $count = $model->count('id');
         $data = ($data = $model->page((int)$where['page'], (int)$where['limit'])->select()) && count($data) ? $data->toArray() : [];
         $data = self::tidyAdminOrder($data);
-        return compact('count','data');
+        return compact('count', 'data');
     }
 
     /**
@@ -2005,14 +2064,13 @@ class StoreOrder extends BaseModel
 
         if (isset($where['real_name']) && $where['real_name'] != '')
             $model = $model->where($aler . 'order_id|' . $aler . 'real_name|' . $aler . 'user_phone' . ($join ? '|' . $join . '.nickname|' . $join . '.uid' : ''), 'LIKE', "%$where[real_name]%");
-        if (isset($where['store_id']) && $where['store_id'] >0) {
-            $model =  $model->where($aler . 'store_id', "=", $where['store_id']);
+        if (isset($where['store_id']) && $where['store_id'] > 0) {
+            $model = $model->where($aler . 'store_id', "=", $where['store_id']);
         }
-        if (isset($where['data']) && $where['data'] !== '')
-        {
+        if (isset($where['data']) && $where['data'] !== '') {
             list($startTime, $endTime) = explode(' - ', $where['data']);
             $model = $model->where($aler . 'add_time', '>', $startTime);
-            $model = $model->where($aler . 'add_time', '<', date("Y-m-d H:i:s",bcadd(strtotime($endTime), 86400, 0)));
+            $model = $model->where($aler . 'add_time', '<', date("Y-m-d H:i:s", bcadd(strtotime($endTime), 86400, 0)));
         }
         return $model;
     }
@@ -2071,7 +2129,7 @@ class StoreOrder extends BaseModel
      */
     public static function getOrderTimeBusinessVolumePrice($start, $stop)
     {
-        return self::where('is_del', 0)->where('paid', 1)->where('refund_status', 0)->where('add_time', '>=', date("Y-m-d H:i:s",$start))->where('add_time', '<', date("Y-m-d H:i:s",$stop))->sum('pay_price');
+        return self::where('is_del', 0)->where('paid', 1)->where('refund_status', 0)->where('add_time', '>=', date("Y-m-d H:i:s", $start))->where('add_time', '<', date("Y-m-d H:i:s", $stop))->sum('pay_price');
     }
 
     /**
@@ -2082,7 +2140,7 @@ class StoreOrder extends BaseModel
      */
     public static function getOrderTimeBusinessVolumeNumber($start, $stop)
     {
-        return self::where('is_del', 0)->where('paid', 1)->where('refund_status', 0)->where('add_time', '>=', date("Y-m-d H:i:s",$start))->where('add_time', '<', date("Y-m-d H:i:s",$stop))->count();
+        return self::where('is_del', 0)->where('paid', 1)->where('refund_status', 0)->where('add_time', '>=', date("Y-m-d H:i:s", $start))->where('add_time', '<', date("Y-m-d H:i:s", $stop))->count();
     }
 
     /**
@@ -2118,8 +2176,8 @@ class StoreOrder extends BaseModel
         $model = $model->where('is_del', 0);
         $model = $model->where('paid', 1);
         $model = $model->where('refund_status', 0);
-        $model = $model->where('add_time', '>=', date("Y-m-d H:i:s",$start));
-        $model = $model->where('add_time', '<', date("Y-m-d H:i:s",$stop));
+        $model = $model->where('add_time', '>=', date("Y-m-d H:i:s", $start));
+        $model = $model->where('add_time', '<', date("Y-m-d H:i:s", $stop));
         $model = $model->group("TO_DAYS(add_time, '%Y-%m-%d')");
         $model = $model->order('add_time ASC');
         return $model->select();
@@ -2163,100 +2221,85 @@ class StoreOrder extends BaseModel
         //会员升级
         $newsum = StoreOrderCartInfo::getProductcount($order['id']);
         $cartlist = StoreOrderCartInfo::getProductList($order['id']);
-        $user = User::where('uid',$order['uid'])->field('uid,nickname,level,spread_uid')->find();
-        $spreaduser = User::where('uid',$order['uid'])->field('uid,nickname,level,spread_uid')->find();
-        $upgrade = 0;$code_stock_right = 0;
-        foreach ($cartlist as $v)
-        {
-            if(isset($v['attrInfo']['upgrade'])) {
-                $upgrade = bcsub($v['attrInfo']['upgrade'],$upgrade)>0?$v['attrInfo']['upgrade']:$upgrade;
+        $user = User::where('uid', $order['uid'])->field('uid,nickname,level,spread_uid')->find();
+        $spreaduser = User::where('uid', $order['uid'])->field('uid,nickname,level,spread_uid')->find();
+        $upgrade = 0;
+        $code_stock_right = 0;
+        foreach ($cartlist as $v) {
+            if (isset($v['attrInfo']['upgrade'])) {
+                $upgrade = bcsub($v['attrInfo']['upgrade'], $upgrade) > 0 ? $v['attrInfo']['upgrade'] : $upgrade;
             }
-            if(isset($v['attrInfo']['upgrade']))
-            {
-                $code_stock_right+=intval($v['attrInfo']['stock_right']);
+            if (isset($v['attrInfo']['upgrade'])) {
+                $code_stock_right += intval($v['attrInfo']['stock_right']);
             }
         }
-        $level = User::where('uid',$order['uid'])->value('level');
-        if($upgrade>$level)
-        {
-            UserLevel::setUserLevel($order['uid'],$upgrade);
-            if($upgrade==6)
-            {
-                UserCode::add_code($order['uid'],$cartlist,$newsum);
-                if(intval($spreaduser['level'])==6 || User::where('spread_uid',$spreaduser['uid'])->where('level',6)->count()>1)
-                {
-                    $spreaduser->where('uid',$spreaduser['uid'])->inc('brokerage_price',sys_config('code_recommend',60000))->update();
-                    $str = sprintf("推荐%s用户升级为总代,获得推荐奖:%d",$user['nickname'],sys_config('code_recommend',60000));
-                    UserBill::income('总代推荐奖',$spreaduser['uid'],'now_money','brokerage',sys_config('code_recommend',60000),$order['id'],bcadd($spreaduser['brokerage_price'],sys_config('code_recommend',60000),0),$str,1);
+        $level = User::where('uid', $order['uid'])->value('level');
+        if ($upgrade > $level) {
+            UserLevel::setUserLevel($order['uid'], $upgrade);
+            if ($upgrade == 6) {
+                UserCode::add_code($order['uid'], $cartlist, $newsum);
+                if (intval($spreaduser['level']) == 6 || User::where('spread_uid', $spreaduser['uid'])->where('level', 6)->count() > 1) {
+                    $spreaduser->where('uid', $spreaduser['uid'])->inc('brokerage_price', sys_config('code_recommend', 60000))->update();
+                    $str = sprintf("推荐%s用户升级为总代,获得推荐奖:%d", $user['nickname'], sys_config('code_recommend', 60000));
+                    UserBill::income('总代推荐奖', $spreaduser['uid'], 'now_money', 'brokerage', sys_config('code_recommend', 60000), $order['id'], bcadd($spreaduser['brokerage_price'], sys_config('code_recommend', 60000), 0), $str, 1);
                 }
-            }
-            elseif ($upgrade==5)
-            {
-                User::where('uid',$v['uid'])->setField('give_stock_right',20);
+            } elseif ($upgrade == 5) {
+                User::where('uid', $v['uid'])->setField('give_stock_right', 20);
             }
 
         }
 
         //处理团队单数
-        User::where('uid',$user['uid'])->inc('team_cts',$newsum);
-        User::where('uid',$spreaduser['uid'])->inc('team_cts',$newsum);
+        User::where('uid', $user['uid'])->inc('team_cts', $newsum);
+        User::where('uid', $spreaduser['uid'])->inc('team_cts', $newsum);
         UserLevel::setLevelComplete($spreaduser['uid']);
-        if(intval($spreaduser['level'])==5 && intval($spreaduser['give_stock_right'])==0)
-        {
-            User::where('uid',$spreaduser['uid'])->setField('give_stock_right',10);
+        if (intval($spreaduser['level']) == 5 && intval($spreaduser['give_stock_right']) == 0) {
+            User::where('uid', $spreaduser['uid'])->setField('give_stock_right', 10);
         }
         //处理极差
         $users = User::field('uid,level,spread_uid')->select();
-        $rs = UtilService::getparentid($users,$spreaduser['uid']);
-        $levels = SystemUserLevel::where('is_del',0)->where('is_show',1)->field('id,name,range_award')->select();
-        $levela = [];$current_level = $spreaduser['level'];$system_range = sys_config('system_range');$range_award=0;
-        foreach ($levels as $v)
-        {
-            $levela[$v['id']]['bl'] = bcsub($v['id'],$spreaduser['level'],0)<0?true:false;
+        $rs = UtilService::getparentid($users, $spreaduser['uid']);
+        $levels = SystemUserLevel::where('is_del', 0)->where('is_show', 1)->field('id,name,range_award')->select();
+        $levela = [];
+        $current_level = $spreaduser['level'];
+        $system_range = sys_config('system_range');
+        $range_award = 0;
+        foreach ($levels as $v) {
+            $levela[$v['id']]['bl'] = bcsub($v['id'], $spreaduser['level'], 0) < 0 ? true : false;
             $levela[$v['id']]['sbl'] = true;
-            $levela[$v['id']]['s_range'] = sys_config('PeerAward',1);
+            $levela[$v['id']]['s_range'] = sys_config('PeerAward', 1);
             $levela[$v['id']]['range_award'] = $v['range_award'];
             $levela[$v['id']]['use'] = 0;
             $levela[$v['id']]['team_cts'] = 0;
         }
-        foreach ($rs as $v)
-        {
-            if($v['level']>=$current_level)
-            {
+        foreach ($rs as $v) {
+            if ($v['level'] >= $current_level) {
                 //处理第一次
-                if($levela[$v['level']]['use']==0)
-                {
-                    $level_award  = $range_award==0 ? $levela[$v['level']]['range_award'] : bcsub($levela[$v['level']]['range_award'],$range_award,0);
+                if ($levela[$v['level']]['use'] == 0) {
+                    $level_award = $range_award == 0 ? $levela[$v['level']]['range_award'] : bcsub($levela[$v['level']]['range_award'], $range_award, 0);
                     $levela[$v['level']]['use'] = 1;
                     $levela[$v['id']]['team_cts'] = $v['team_cts'];
                     $range_award = $levela[$v['level']]['range_award'];
-                }
-                else
-                {
-                    if($levela[$v['id']]['sbl'] && bcsub($levela[$v['id']]['team_cts'],$v['team_cts']))
-                    {
+                } else {
+                    if ($levela[$v['id']]['sbl'] && bcsub($levela[$v['id']]['team_cts'], $v['team_cts'])) {
                         $level_award = $levela[$v['level']]['s_range'];
-                        $levela[$v['id']]['sbl']  = false;
-                        $range_award = bcadd($range_award,$level_award,0);
+                        $levela[$v['id']]['sbl'] = false;
+                        $range_award = bcadd($range_award, $level_award, 0);
                     }
                 }
-                if($v['level']>$current_level)
-                {
+                if ($v['level'] > $current_level) {
                     $current_level = $v['level'];
-                }
-                else
-                {
-                    if($v['level']==$current_level && $levela[$v['id']]['sbl']==1)
-                    {
+                } else {
+                    if ($v['level'] == $current_level && $levela[$v['id']]['sbl'] == 1) {
                         $current_level++;
                     }
                 }
-                $proportion =  bcmul(bcsub($order['total_price'],$order['cost'],2),bcdiv($level_award,100,2),2);
-                $mark = "订单号".$order['order_id'].'产生极差奖,奖励推广佣金' .$proportion;
+                $proportion = bcmul(bcsub($order['total_price'], $order['cost'], 2), bcdiv($level_award, 100, 2), 2);
+                $mark = "订单号" . $order['order_id'] . '产生极差奖,奖励推广佣金' . $proportion;
                 //TODO 添加推广记录
-                $res1 = UserBill::income('极差奖',$v['uid'] , 'now_money', 'brokerage', $proportion,$order['id'],$proportion, $mark);
+                $res1 = UserBill::income('极差奖', $v['uid'], 'now_money', 'brokerage', $proportion, $order['id'], $proportion, $mark);
                 //TODO 添加用户余额
-                $res2 = User::where('uid',$v['uid'])->inc('brokerage',$proportion)->update();
+                $res2 = User::where('uid', $v['uid'])->inc('brokerage', $proportion)->update();
             }
         }
     }
@@ -2267,11 +2310,11 @@ class StoreOrder extends BaseModel
     public static function sendTen()
     {
         $switch = sys_config('unpaid_order_switch') ? true : false;
-        if($switch){
+        if ($switch) {
             $list = self::where('paid', 0)
                 ->where('is_del', 0)
                 ->where('is_system_del', 0)
-                ->where('add_time', 'exp','DATE_SUB()')
+                ->where('add_time', 'exp', 'DATE_SUB()')
                 ->where('add_time', '<', time() - 600)
                 ->field('order_id,user_phone')
                 ->select();
@@ -2406,38 +2449,203 @@ class StoreOrder extends BaseModel
         }
         return true;
     }
+
     public static function do_jialie()
     {
-        $rs = self::where('paid',0)->where('jialie_do',1)->where('jialie_count','<',30)->select()->toArray();
-        try{
-        foreach ($rs as $v)
-        {
-            self::edit(['jialie_do'=>2],$v['id']);
-            if(empty($v['re_order_id']))
-            {
-                $res = JiaLieService::initialize()::paymentquery(JiaLieService::QUERY,['out_trade_no'=>$v['order_id'],'nonce_str'=>uniqid().mt_rand(1000,9999)]);
+        $rs = self::where('paid', 0)->where('jialie_do', 1)->where('jialie_count', '<', 30)->select()->toArray();
+        try {
+            foreach ($rs as $v) {
+                self::edit(['jialie_do' => 2], $v['id']);
+                if (empty($v['re_order_id'])) {
+                    $res = JiaLieService::initialize()::paymentquery(JiaLieService::QUERY, ['out_trade_no' => $v['order_id'], 'nonce_str' => uniqid() . mt_rand(1000, 9999)]);
+                } else {
+                    $res = JiaLieService::initialize()::paymentquery(JiaLieService::QUERY, ['out_trade_no' => $v['re_order_id'], 'nonce_str' => uniqid() . mt_rand(1000, 9999)]);
+                }
+                if ($res['ret_code'] == 0 && $res['status'] == 2) {
+                    self::paySuccess($v['order_id'], 'jialie');
+                    self::edit(['jialie_do' => 0, 'is_del' => 0, 'status' => 2], $v['id']);
+                    OrderRepository::storeProductOrderTakeDeliveryAdmin($v);
+                    StoreOrderStatus::status($v['id'], 'take_delivery', '已核销');
+                } else {
+                    self::where('id', $v['id'])->inc('jialie_count', 1)->update();
+                    self::edit(['jialie_do' => 1], $v['id']);
+                }
+            }
+        } catch (Exception $e) {
+            @file_put_contents("jialie.txt", $e->getLine() . '--' . $e->getMessage() . "-end\r\n", 8);
+        }
+        return true;
+    }
+
+    public static function sendGroupAward($order): bool
+    {
+//        return true;
+        //TODO 营销产品不返佣金
+        if (isset($order['combination_id']) && $order['combination_id']) return true;
+        if (isset($order['seckill_id']) && $order['seckill_id']) return true;
+        if (isset($order['bargain_id']) && $order['bargain_id']) return true;
+
+        $userInfo = User::getUserInfo($order['uid']);
+        $spread = User::getUserInfo($userInfo['spread_uid']);
+        if (StoreOrder::where('uid', $order['uid'])->where('paid', 1)->where('refund_status', 0)->where('is_del', 0)->where('is_system_del', 0)
+            ->where('id', '<>', $order['id'])->where('suit', '>', 0)->find()) {
+            $spread = $userInfo;
+        }
+        $cartInfo = StoreOrderCartInfo::whereIn('cart_id', $order['cart_id'])->column('cart_info');
+        $suit = 0;
+        $suit_price = 0;
+        foreach ($cartInfo as $value) {
+            $product = json_decode($value, true);
+            if (isset($product['productInfo'])) {
+                $productInfo = $product['productInfo'];
+                if ($product['is_suit']) {
+                    $suit += $product['cart_num'] ?? 0;
+                    $suit_price += ($productInfo['attrInfo']['price'] ?? $product['price']) * $product['cart_num'];
+                }
             }
-            else
-            {
-                $res = JiaLieService::initialize()::paymentquery(JiaLieService::QUERY,['out_trade_no'=>$v['re_order_id'],'nonce_str'=>uniqid().mt_rand(1000,9999)]);
+        }
+        $res = true;
+        $suit_recommend = sys_config('suit_recommend', 0, true);
+        if ($spread && $suit_recommend) {
+            //推荐奖
+            $brokeragePrice = bcmul($suit_recommend, $suit, 2);
+            if ($brokeragePrice > 0) {
+                $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得推荐奖励' . $brokeragePrice;
+                $res = $res && UserBill::income('套装推荐奖', $spread['uid'], 'now_money', 'brokerage', $brokeragePrice, $order['id'], bcadd($spread['brokerage_price'], $brokeragePrice, 2), $mark);
+                $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $brokeragePrice)->update();
+                $spread['brokerage_price'] = bcadd($spread['brokerage_price'], $brokeragePrice, 2);
+            }
+        }
+
+        $send = 0;
+        $send_normal = 0;
+        while ($spread) {
+            $group_level = SystemGroupLevel::get($spread['group_level']);
+            $award_level = SystemGroupLevel::get($spread['award_level']);
+            if ($suit) {
+                $award_group = $group_level['suit_award'] ?? 0;
+                $award_award = $award_level['suit_award'] ?? 0;
+                $big = $award_group > $award_award ? $group_level['id'] : $award_level['id'];
+                $brokeragePrice_a = bcmul($award_award, $suit, 2);
+                $brokeragePrice_g = bcmul($award_group, $suit, 2);
+                $brokeragePrice_big = $brokeragePrice_a > $brokeragePrice_g ? $brokeragePrice_a : $brokeragePrice_g;
+                $brokeragePrice_small = $brokeragePrice_a > $brokeragePrice_g ? $brokeragePrice_g : $brokeragePrice_a;
+                if ($brokeragePrice_big == $brokeragePrice_small) {
+                    $brokeragePrice = $brokeragePrice_big;
+                    if ($brokeragePrice > $send) {
+                        $real_send = bcsub($brokeragePrice, $send, 2);
+                        if ($real_send > 0) {
+                            $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得极差奖励' . $real_send;
+                            $res = $res && UserBill::income('套装极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], bcadd($spread['brokerage_price'], $real_send, 2), $mark);
+                            $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $real_send)->update();
+                            $send = $brokeragePrice;
+                        }
+                    }
+                } else {
+                    $brokeragePrice = $brokeragePrice_small;
+                    if ($brokeragePrice > $send) {
+                        $real_send = bcsub($brokeragePrice, $send, 2);
+                        if ($real_send > 0) {
+                            $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得极差奖励' . $real_send;
+                            $res = $res && UserBill::income('套装极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], bcadd($spread['brokerage_price'], $real_send, 2), $mark);
+                            $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $real_send)->update();
+                            $send = $brokeragePrice;
+                        }
+                    }
+                    $brokeragePrice = $brokeragePrice_big;
+                    if ($brokeragePrice > $send) {
+                        $real_send = bcsub($brokeragePrice, $send, 2);
+                        if ($real_send > 0) {
+                            $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得极差奖励' . $real_send;
+                            $res = $res && UserBill::income('套装极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], bcadd($spread['brokerage_price'], $real_send, 2), $mark, 0, $big);
+                            $send = $brokeragePrice;
+                        }
+                    }
+                }
+//                if ($group_level) {
+//                    if (!$award_level) {
+//                        $award = SystemGroupLevel::min('suit_award');
+//                        $brokeragePrice = bcmul($award, $suit, 2);
+//                        if ($brokeragePrice > $send) {
+//                            $real_send = bcsub($brokeragePrice, $send, 2);
+//                            $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得极差奖励' . $real_send;
+//                            $res = $res && UserBill::income('套装极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], $spread['brokerage_price'], $mark, 0);
+//                            $send = $brokeragePrice;
+//                        }
+//                    } else {
+//                        $award = $group_level['suit_award'] > $award_level['suit_award'] ? $award_level['suit_award'] : $group_level['suit_award'];
+//                        $brokeragePrice = bcmul($award, $suit, 2);
+//                        if ($brokeragePrice > $send) {
+//                            $real_send = bcsub($brokeragePrice, $send, 2);
+//                            if ($real_send > 0) {
+//                                $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买套装商品,获得极差奖励' . $real_send;
+//                                $res = $res && UserBill::income('套装极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], bcadd($spread['brokerage_price'], $real_send, 2), $mark);
+//                                $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $real_send)->update();
+//                                $send = $brokeragePrice;
+//                            }
+//                        }
+//                    }
+//                }
             }
-           if($res['ret_code']==0 && $res['status']==2) {
-                self::paySuccess($v['order_id'], 'jialie');
-                self::edit(['jialie_do' => 0,'is_del'=>0, 'status' => 2], $v['id']);
-                OrderRepository::storeProductOrderTakeDeliveryAdmin($v);
-                StoreOrderStatus::status($v['id'], 'take_delivery', '已核销');
+            if ($group_level) {
+                $brokeragePrice = bcmul(bcdiv($group_level['group_award'], 100, 4), bcsub($order['pay_price'], $suit_price, 2), 2);
+                if ($order['use_integral'] > 0) $brokeragePrice = bcmul(bcdiv($group_level['integral_group_award'], 100, 4), bcsub($order['pay_price'], $suit_price, 2), 2);
+                if ($brokeragePrice > $send_normal) {
+                    $real_send = bcsub($brokeragePrice, $send_normal, 2);
+                    if ($real_send > 0) {
+                        $mark = '用户' . $userInfo['nickname'] . '(' . $order['uid'] . ')' . '购买' . ($order['use_integral'] > 0 ? '积分' : '普通') . '商品,获得极差奖励' . $real_send;
+                        $res = $res && UserBill::income('极差奖', $spread['uid'], 'now_money', 'brokerage', $real_send, $order['id'], bcadd($spread['brokerage_price'], $real_send, 2), $mark);
+                        $res = $res && User::where('uid', $spread['uid'])->inc('brokerage_price', $real_send)->update();
+                        $send_normal = $brokeragePrice;
+                    }
+                }
             }
-            else
-            {
-                self::where('id',$v['id'])->inc('jialie_count',1)->update();
-                self::edit(['jialie_do'=>1],$v['id']);
+            $spread = User::getUserInfo($spread['spread_uid']);
+        }
+        return $res;
+    }
+
+    public static function sendSuit($order): bool
+    {
+//        return true;
+        //TODO 营销产品不返佣金
+        if (isset($order['combination_id']) && $order['combination_id']) return true;
+        if (isset($order['seckill_id']) && $order['seckill_id']) return true;
+        if (isset($order['bargain_id']) && $order['bargain_id']) return true;
+
+        $userInfo = User::getUserInfo($order['uid']);
+        $cartInfo = StoreOrderCartInfo::whereIn('cart_id', $order['cart_id'])->column('cart_info');
+        $suit = 0;
+        foreach ($cartInfo as $value) {
+            $product = json_decode($value, true);
+            if (isset($product['productInfo'])) {
+                if ($product['is_suit']) {
+                    $suit += $product['cart_num'] ?? 0;
+                }
             }
         }
-        }catch (Exception $e)
-        {
-            @file_put_contents("jialie.txt",$e->getLine().'--'.$e->getMessage()."-end\r\n",8);
+        $res = true;
+        $suit_give_integral = sys_config('suit_give_integral', 0, true);
+        $suit_give_gf = sys_config('suit_give_gf', 0, true);
+        if ($suit_give_integral > 0) {
+            //获得积分
+            $brokeragePrice = bcmul($suit_give_integral, $suit, 2);
+            if ($brokeragePrice > 0) {
+                $mark = '购买套装商品,获得积分' . $brokeragePrice;
+                $res = $res && UserBill::income('购买套装赠送', $userInfo['uid'], 'integral', 'suit_gain', $brokeragePrice, $order['id'], bcadd($userInfo['integral'], $brokeragePrice, 2), $mark);
+                $res = $res && User::where('uid', $userInfo['uid'])->inc('integral', $brokeragePrice)->update();
+            }
         }
-        return true;
+
+//        if ($suit_give_gf > 0 && SystemStoreMember::be(['uid' => $userInfo['uid']])) {
+//            //获得股份
+//            $brokeragePrice = bcmul($suit_give_gf, $suit, 2);
+//            if ($brokeragePrice > 0) {
+//                $res = $res && SystemStoreMember::where('uid', $userInfo['uid'])->inc('consume_rights', $brokeragePrice)->update();
+//            }
+//        }
+
+        return $res;
     }
 
 }

+ 33 - 4
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 = 'max_use_integral,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')
     {
         $Product = self::where('is_del', 0)->where('is_show', 1)->where('id', $productId)->field($field)->find();
         if ($Product) return $Product->toArray();
@@ -94,7 +94,7 @@ class StoreProduct extends BaseModel
         $limit = $data['limit'];
         $type = $data['type']; // 某些模板需要购物车数量 1 = 需要查询,0 = 不需要
         $model = self::validWhere();
-        if($data['is_consumer']>0) $model = $model->where('is_consumer',$data['is_consumer']);
+        if ($data['is_consumer'] > 0) $model = $model->where('is_consumer', $data['is_consumer']);
         if ($sId) {
             $model->whereIn('id', function ($query) use ($sId) {
                 $query->name('store_product_cate')->where('cate_id', $sId)->field('product_id')->select();
@@ -255,7 +255,7 @@ class StoreProduct extends BaseModel
             ->where('stock', '>', 0)->where('is_show', 1)->field($field)
             ->order('sort DESC, id DESC');
         if ($limit) $model->limit($limit);
-        if ($page) $model->page((int)$page, (int)$limits);    
+        if ($page) $model->page((int)$page, (int)$limits);
         $list = $model->select();
         $list = count($list) ? $list->toArray() : [];
         if (!empty($list)) {
@@ -266,6 +266,35 @@ class StoreProduct extends BaseModel
         return self::setLevelPrice($list, $uid);
     }
 
+    public static function getSuitProduct($field = '*', $limit = 0, $uid = 0, bool $bool = true, $page = 0, $limits = 0)
+    {
+        if (!$limit && !$bool) return [];
+        $model = self::where('is_suit', 1)->where('is_del', 0)->where('mer_id', 0)
+            ->where('stock', '>', 0)->where('is_show', 1)->field($field)
+            ->order('sort DESC, id DESC');
+        if ($limit) $model->limit($limit);
+        if ($page) $model->page((int)$page, (int)$limits);
+        $list = $model->select();
+        return count($list) ? $list->toArray() : [];
+    }
+
+    public static function getIntegralProduct($field = '*', $limit = 0, $uid = 0, bool $bool = true, $page = 0, $limits = 0)
+    {
+        if (!$limit && !$bool) return [];
+        $model = self::where('max_use_integral', '>', 0)->where('is_del', 0)->where('mer_id', 0)
+            ->where('stock', '>', 0)->where('is_show', 1)->field($field)
+            ->order('sort DESC, id DESC');
+        if ($limit) $model->limit($limit);
+        if ($page) $model->page((int)$page, (int)$limits);
+        $list = $model->select();
+        if (!empty($list)) {
+            foreach ($list as $k => $v) {
+                $list[$k]['activity'] = self::activity($v['id']);
+            }
+        }
+        return self::setLevelPrice($list, $uid);
+    }
+
     /**
      * 设置会员价格
      * @param object | array $list 产品列表
@@ -356,7 +385,7 @@ class StoreProduct extends BaseModel
      */
     public static function getSingleAttrUnique(int $productId, int $id = 0, int $type = 0)
     {
-        if ($type != 2  && self::be(['id' => $productId, 'spec_type' => 1])) {
+        if ($type != 2 && self::be(['id' => $productId, 'spec_type' => 1])) {
             return false;
         } else {
             $unique = StoreProductAttr::storeProductAttrValueDb()->where(['product_id' => $id ?: $productId, 'type' => $type])->value('unique');

+ 112 - 0
app/models/system/SystemAwardLevel.php

@@ -0,0 +1,112 @@
+<?php
+
+namespace app\models\system;
+
+use app\admin\model\system\SystemUserLevel;
+use app\models\store\StoreCart;
+use app\models\store\StoreOrder;
+use app\models\user\User;
+use app\models\user\UserBill;
+use crmeb\basic\BaseModel;
+use crmeb\traits\ModelTrait;
+
+/**
+ * TODO 会员等级Model
+ * Class UserLevel
+ * @package app\models\user
+ */
+class SystemAwardLevel extends BaseModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'system_award_level';
+
+    use ModelTrait;
+
+    /**
+     * 获取查询条件
+     * @param $where
+     * @param string $alert
+     * @param null $model
+     * @return SystemUserLevel|null
+     */
+    public static function setWhere($where, $alert = '', $model = null)
+    {
+        $model = $model === null ? new self() : $model;
+        if ($alert) $model = $model->alias($alert);
+        $alert = $alert ? $alert . '.' : '';
+        $model = $model->where("{$alert}is_del", 0);
+        if (isset($where['is_show']) && $where['is_show'] !== '') $model = $model->where("{$alert}is_show", $where['is_show']);
+        if (isset($where['title']) && $where['title']) $model = $model->where("{$alert}name", 'LIKE', "%$where[title]%");
+        return $model;
+    }
+
+    public static function getSystemList($where)
+    {
+        $data = self::setWhere($where)->order('id asc')->page((int)$where['page'], (int)$where['limit'])->select();
+        $data = count($data) ? $data->toArray() : [];
+        $count = self::setWhere($where)->count();
+        return compact('data', 'count');
+    }
+
+    public static function checkLevel($uid)
+    {
+        $spread = User::where('uid', $uid)->find();
+//        $spread = User::where('uid', $user['spread_uid'])->find();
+        while ($spread) {
+            //推荐全员
+//            $uids = User::where('spread_uid', $spread['uid'])->column('uid');
+//            $orders = StoreOrder::where('paid', 1)
+//                ->where('status', 'in', [2, 3])
+//                ->where('uid', 'in', $uids)
+//                ->where('refund_status', 0)
+//                ->where('is_del', 0)
+//                ->where('is_system_del', 0)->select();
+//            $num = 0;
+//            foreach ($orders as $v) {
+//                $num += StoreCart::where('id', 'in', $v['cart_id'])->where('is_suit', 1)->sum('cart_num');
+//            }
+            $level_info = self::where('id', $spread['award_level'])->find();
+            $level = self::where('level_num', '>', $level_info['level_num'] ?? 0)->order('level_num', 'desc')->select();
+            foreach ($level as $v) {
+                if ($spread['recommend_suit_num'] >= $v['level_num']) {
+                    User::where('uid', $spread['uid'])->update(['award_level' => $v['id']]);
+                    self::sendBackOrderBrokerage($spread['uid'], $spread['group_level'] > $v['id'] ? $v['id'] : $spread['group_level']);
+                    break;
+                }
+            }
+            $spread = User::where('uid', $spread['spread_uid'])->find();
+        }
+        return true;
+    }
+
+
+    public static function sendBackOrderBrokerage($uid, $level)
+    {
+        $list = UserBill::where('award_level', '<=', $level)->where(['type' => 'brokerage', 'category' => 'now_money', 'pm' => 1, 'status' => 0, 'uid' => $uid, 'title' => '套装极差奖'])->select();
+        if ($list) {
+            self::beginTrans();
+            try {
+                foreach ($list as $v) {
+                    User::bcInc($v['uid'], 'brokerage_price', $v['number'], 'uid');
+                    $balance = User::getUserInfo($v['uid'])['brokerage_price'];
+                    UserBill::where('id', $v['id'])->update(['add_time' => date('Y-m-d H:i:s'), 'status' => 1, 'balance' => $balance]);
+                }
+                self::commitTrans();
+                return true;
+            } catch (\Exception $e) {
+                self::rollbackTrans();
+                return false;
+            }
+        }
+        return true;
+    }
+}

+ 94 - 0
app/models/system/SystemGroupLevel.php

@@ -0,0 +1,94 @@
+<?php
+
+namespace app\models\system;
+
+use app\admin\model\system\SystemUserLevel;
+use app\models\store\StoreCart;
+use app\models\store\StoreOrder;
+use app\models\user\User;
+use crmeb\basic\BaseModel;
+use crmeb\traits\ModelTrait;
+
+/**
+ * TODO 会员等级Model
+ * Class UserLevel
+ * @package app\models\user
+ */
+class SystemGroupLevel extends BaseModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+
+    /**
+     * 模型名称
+     * @var string
+     */
+    protected $name = 'system_group_level';
+
+    use ModelTrait;
+
+    /**
+     * 获取查询条件
+     * @param $where
+     * @param string $alert
+     * @param null $model
+     * @return SystemUserLevel|null
+     */
+    public static function setWhere($where, $alert = '', $model = null)
+    {
+        $model = $model === null ? new self() : $model;
+        if ($alert) $model = $model->alias($alert);
+        $alert = $alert ? $alert . '.' : '';
+        $model = $model->where("{$alert}is_del", 0);
+        if (isset($where['is_show']) && $where['is_show'] !== '') $model = $model->where("{$alert}is_show", $where['is_show']);
+        if (isset($where['title']) && $where['title']) $model = $model->where("{$alert}name", 'LIKE', "%$where[title]%");
+        return $model;
+    }
+
+    public static function getSystemList($where)
+    {
+        $data = self::setWhere($where)->order('id asc')->page((int)$where['page'], (int)$where['limit'])->select();
+        $data = count($data) ? $data->toArray() : [];
+        $count = self::setWhere($where)->count();
+        return compact('data', 'count');
+    }
+
+    public static function checkLevel($uid)
+    {
+        $spread = User::where('uid', $uid)->find();
+//        $spread = User::where('uid', $user['spread_uid'])->find();
+        while ($spread) {
+            //伞下全员
+//            $uids = [];
+//            $sp = [$spread['uid']];
+//            while ($sp) {
+//                $sp = User::where('spread_uid', 'in', $sp)->column('uid');
+//                if (count($sp)) $uids = array_merge($uids, $sp);
+//            }
+//            $orders = StoreOrder::where('paid', 1)
+//                ->where('status', 'in', [2, 3])
+//                ->where('uid', 'in', $uids)
+//                ->where('refund_status', 0)
+//                ->where('is_del', 0)
+//                ->where('is_system_del', 0)->select();
+//            $num = 0;
+//            foreach ($orders as $v) {
+//                $num += StoreCart::where('id', 'in', $v['cart_id'])->where('is_suit', 1)->sum('cart_num');
+//            }
+            $level_info = self::where('id', $spread['group_level'])->find();
+            $level = self::where('level_num', '>', $level_info['level_num'] ?? 0)->order('level_num', 'desc')->select();
+            foreach ($level as $v) {
+                if ($spread['group_suit_num'] >= $v['level_num']) {
+                    User::where('uid', $spread['uid'])->update(['group_level' => $v['id']]);
+                    SystemAwardLevel::sendBackOrderBrokerage($spread['uid'], $spread['award_level'] > $v['id'] ? $v['id'] : $spread['award_level']);
+                    break;
+                }
+            }
+            $spread = User::where('uid', $spread['spread_uid'])->find();
+        }
+        return true;
+    }
+}

+ 33 - 37
app/models/system/SystemStoreStock.php

@@ -1,5 +1,7 @@
 <?php
+
 namespace app\models\system;
+
 use app\admin\model\store\StoreProduct;
 use app\admin\model\store\StoreProductAttrValue;
 use app\models\store\StoreOrderCartInfo;
@@ -9,37 +11,36 @@ use crmeb\traits\ModelTrait;
 class SystemStoreStock extends BaseModel
 {
     use ModelTrait;
-    public  static function lst($where)
+
+    public static function lst($where)
     {
         $model = new self;
-        $model = $model->alias("a")->join("store_product b","a.product_id=b.id","right");
-        if($where['store_id']>0)  $model = $model->where('a.store_id',$where['store_id']);
-        if($where['key']) $model = $model->wherelike('b.store_name',"%".$where['key']."%");
-        if(isset($where['is_warn']) && $where['is_warn']==1) $model = $model->where('a.in_stock','<=',sys_config('warn_stock'));
-        $model = $model->where('a.id','>',0);
+        $model = $model->alias("a")->join("store_product b", "a.product_id=b.id", "right");
+        if ($where['store_id'] > 0) $model = $model->where('a.store_id', $where['store_id']);
+        if ($where['key']) $model = $model->wherelike('b.store_name', "%" . $where['key'] . "%");
+        if (isset($where['is_warn']) && $where['is_warn'] == 1) $model = $model->where('a.in_stock', '<=', sys_config('warn_stock'));
+        $model = $model->where('a.id', '>', 0);
         $model = $model->field('a.product_id,b.store_name,b.image,b.is_show,b.is_del,a.store_id,a.in_stock,a.store_sales,a.repair_sales,a.in_last_time,a.bar_code,a.price,a.is_consumer');
         $count = $model->count();
-        $data = $model->page($where['page'],$where['limit'])->order("product_id desc")->select()->toarray();
-        foreach ($data as &$v)
-        {
-            $v['store'] = SystemStore::where('id',$v['store_id'])->value('name');
+        $data = $model->page($where['page'], $where['limit'])->order("product_id desc")->select()->toarray();
+        foreach ($data as &$v) {
+            $v['store'] = SystemStore::where('id', $v['store_id'])->value('name');
         }
-        return compact('count','data');
+        return compact('count', 'data');
     }
 
     /**
      * 店铺初始商品库存
      * @param int $num
      */
-    public static function store_init($store_id,$num=100)
+    public static function store_init($store_id, $num = 100)
     {
-        $list = StoreProduct::where('is_del',0)->where('is_show',1)->column('id,is_consumer','id');
+        $list = StoreProduct::where('is_del', 0)->where('is_show', 1)->column('id,is_consumer', 'id');
         $data['store_id'] = $store_id;
         $data['in_stock'] = $num;
         $all = [];
-        $rs = StoreProductAttrValue::where('product_id','in',array_keys($list))->field('product_id,unique,image,bar_code,price')->select()->toArray();
-        foreach ($rs as $v)
-        {
+        $rs = StoreProductAttrValue::where('product_id', 'in', array_keys($list))->field('product_id,unique,image,bar_code,price')->select()->toArray();
+        foreach ($rs as $v) {
             $data['product_id'] = $v['product_id'];
             $data['in_last_time'] = time();
             $data['unique'] = $v['unique'];
@@ -62,7 +63,7 @@ class SystemStoreStock extends BaseModel
      * @throws \think\db\exception\DbException
      * @throws \think\db\exception\ModelNotFoundException
      */
-    public static function replenish($store_id,$data)
+    public static function replenish($store_id, $data)
     {
         if ($data['product_id'] > 0 && $data['in_stock'] > 0) {
             $info = self::where(['store_id' => $store_id, 'product_id' => $data['product_id'], 'bar_code' => $data['bar_code']])->find();
@@ -78,20 +79,19 @@ class SystemStoreStock extends BaseModel
         }
         return false;
     }
-    public static function Refund($orderInfo,$data)
+
+    public static function Refund($orderInfo, $data)
     {
-        $reg_store_id = $orderInfo['reg_store_id'] ;
-        if($orderInfo['create_store_id']>0)
-        {
+        $reg_store_id = $orderInfo['reg_store_id'];
+        if ($orderInfo['create_store_id'] > 0) {
             $reg_store_id = $orderInfo['create_store_id'];
         }
         $store_id = $orderInfo['store_id'];
         $field = "store_sales";
-        if(intval($reg_store_id)>0 && intval($reg_store_id)!=$store_id)
-        {
+        if (intval($reg_store_id) > 0 && intval($reg_store_id) != $store_id) {
             $field = "repair_sales";
         }
-        self::where("product_id",$data['product_id'])->where('unique',$data['product_attr_unique'])->where('store_id',$store_id)->inc('in_stock',$data['cart_num'])->dec($field,$data['cart_num'])->update();
+        self::where("product_id", $data['product_id'])->where('unique', $data['product_attr_unique'])->where('store_id', $store_id)->inc('in_stock', $data['cart_num'])->dec($field, $data['cart_num'])->update();
         return true;
     }
 
@@ -101,17 +101,16 @@ class SystemStoreStock extends BaseModel
      */
     public static function add_store_sales($orderInfo)
     {
+        if ($orderInfo['suit']) return;
         $cartId = is_string($orderInfo['cart_id']) ? json_decode($orderInfo['cart_id'], true) : $orderInfo['cart_id'];
         $cartInfo = StoreOrderCartInfo::whereIn('cart_id', $cartId)->column('cart_info');
-        $reg_store_id = $orderInfo['reg_store_id'] ;
-        if($orderInfo['create_store_id']>0)
-        {
+        $reg_store_id = $orderInfo['reg_store_id'];
+        if ($orderInfo['create_store_id'] > 0) {
             $reg_store_id = $orderInfo['create_store_id'];
         }
         $store_id = $orderInfo['store_id'];
         $field = "store_sales";
-        if(intval($reg_store_id)>0 && intval($reg_store_id)!=$store_id)
-        {
+        if (intval($reg_store_id) > 0 && intval($reg_store_id) != $store_id) {
             $field = "repair_sales";
         }
         foreach ($cartInfo as $value) {
@@ -123,14 +122,11 @@ class SystemStoreStock extends BaseModel
             $bar_code = $product['productInfo']['attrInfo']['bar_code'];
             $price = $product['productInfo']['attrInfo']['price'];
             $image = $product['productInfo']['attrInfo']['image'];
-            if(self::be(compact('product_id','unique','is_consumer','store_id'))) {
-                self::where(compact('product_id', 'unique', 'is_consumer', 'store_id'))->inc($field, $cartNum)->dec('in_stock',$cartNum)->update();
-            }
-            else
-            {
-                $in_stock = 0-intval($cartNum);
-                $rs = self::create(compact('product_id', 'unique', 'is_consumer', 'store_id','bar_code','price','image','in_stock'));
-                self::edit([$field=>$cartNum],$rs['id']);
+            if (self::be(compact('product_id', 'unique', 'is_consumer', 'store_id'))) {
+                self::where(compact('product_id', 'unique', 'is_consumer', 'store_id'))->inc($field, $cartNum)->dec('in_stock', $cartNum)->update();
+            } else {
+                $in_stock = 0 - intval($cartNum);
+                self::create(compact('product_id', 'unique', 'is_consumer', 'store_id', 'bar_code', 'price', 'image', 'in_stock'));
             }
         }
     }

+ 12 - 12
app/models/user/UserBill.php

@@ -34,20 +34,20 @@ class UserBill extends BaseModel
 
     use ModelTrait;
 
-    public static function income($title, $uid, $category, $type, $number, $link_id = 0, $balance = 0, $mark = '', $status = 1)
+    public static function income($title, $uid, $category, $type, $number, $link_id = 0, $balance = 0, $mark = '', $status = 1, $award_level = 0)
     {
         $pm = 1;
         $add_time = date("Y-m-d H:i:s");
-        $id =  self::getkeytoid('bill_id');
-        return self::create(compact('title', 'uid', 'link_id', 'category', 'type', 'number', 'balance', 'mark', 'status', 'pm', 'add_time','id'));
+        $id = self::getkeytoid('bill_id');
+        return self::create(compact('title', 'uid', 'link_id', 'category', 'type', 'number', 'balance', 'mark', 'status', 'pm', 'add_time', 'id', 'award_level'));
     }
 
     public static function expend($title, $uid, $category, $type, $number, $link_id = 0, $balance = 0, $mark = '', $status = 1)
     {
         $pm = 0;
         $add_time = date("Y-m-d H:i:s");
-        $id =  self::getkeytoid('bill_id');
-        return self::create(compact('title', 'uid', 'link_id', 'category', 'type', 'number', 'balance', 'mark', 'status', 'pm', 'add_time','id'));
+        $id = self::getkeytoid('bill_id');
+        return self::create(compact('title', 'uid', 'link_id', 'category', 'type', 'number', 'balance', 'mark', 'status', 'pm', 'add_time', 'id'));
     }
 
     /**
@@ -81,7 +81,7 @@ class UserBill extends BaseModel
         }
         $list = count($list) ? $list->toArray() : [];
         foreach ($list as &$v) {
-            $v['add_time'] = date('Y/m/d H:i', $v['add_time']);
+
             $v['number'] = floatval($v['number']);
         }
         return $list;
@@ -158,26 +158,26 @@ class UserBill extends BaseModel
      * @param int $type 展示类型
      * @return array
      * */
-    public static function getUserBillList($uid, $page, $limit, $type,$category='now_money')
+    public static function getUserBillList($uid, $page, $limit, $type, $category = 'now_money')
     {
         if (!$limit) return [];
         $model = self::where('uid', $uid)->where('category', $category)->order('add_time desc')->where('number', '<>', 0)
             ->field('FROM_UNIXTIME(add_time,"%Y-%m") as time,group_concat(DISTINCT id ORDER BY id DESC SEPARATOR ",") ids')->group('time');
         switch ((int)$type) {
             case 0:
-                $model = $model->where('type', 'in', 'recharge,brokerage,pay_money,system_add,pay_product_refund,system_sub');
+                $model = $model;
                 break;
             case 1:
-                $model = $model->where('type', 'pay_money');
+                $model = $model->where('type', '<>', 'brokerage')->where('pm', 0);
                 break;
             case 2:
-                $model = $model->where('type', 'in', 'recharge,system_add');
+                $model = $model->where('type', '<>', 'brokerage')->where('pm', 1);
                 break;
             case 3:
-                $model = $model->where('type', 'brokerage');
+                $model = $model->where('type', 'brokerage')->where('pm', 1);
                 break;
             case 4:
-                $model = $model->where('type', 'extract');
+                $model = $model->where('type', 'brokerage')->where('pm', 0);
                 break;
             case 5:
                 $model = $model->where('type', 'in', 'system_add_consumer,spread_add_consumer,consumer_product_refund,qr_add_consumer');

+ 54 - 46
app/models/user/UserExtract.php

@@ -40,14 +40,14 @@ class UserExtract extends BaseModel
     //已提现
     const SUCCESS_STATUS = 1;
 
-    protected static $extractType = ['alipay','bank','weixin'];
+    protected static $extractType = ['alipay', 'bank', 'weixin'];
 
-    protected static $extractTypeMsg = ['alipay'=>'支付宝','bank'=>'银行卡','weixin'=>'微信'];
+    protected static $extractTypeMsg = ['alipay' => '支付宝', 'bank' => '银行卡', 'weixin' => '微信'];
 
     protected static $status = array(
-        -1=>'未通过',
-        0 =>'审核中',
-        1 =>'已提现'
+        -1 => '未通过',
+        0 => '审核中',
+        1 => '已提现'
     );
 
     /**
@@ -56,17 +56,21 @@ class UserExtract extends BaseModel
      * @param array $data 提现详细信息
      * @return bool
      */
-    public static function userExtract($userInfo,$data){
-        if(!in_array($data['extract_type'],self::$extractType))
+    public static function userExtract($userInfo, $data)
+    {
+        if (!in_array($data['extract_type'], self::$extractType))
             return self::setErrorInfo('提现方式不存在');
         $userInfo = User::get($userInfo['uid']);
         $extractPrice = $userInfo['brokerage_price'];
-        if($extractPrice < 0) return self::setErrorInfo('提现佣金不足'.$data['money']);
-        if($data['money'] > $extractPrice) return self::setErrorInfo('提现佣金不足'.$data['money']);
-        if($data['money'] <= 0) return self::setErrorInfo('提现佣金大于0');
-        $balance = bcsub($userInfo['brokerage_price'],$data['money'],2);
-        $commission = bcmul($data['money'],bcdiv(sys_config('commission'),100,3),2);
-        if($balance < 0) $balance=0;
+        if ($extractPrice < 0) return self::setErrorInfo('提现佣金不足' . $data['money']);
+        if ($data['money'] > $extractPrice) return self::setErrorInfo('提现佣金不足' . $data['money']);
+        if ($data['money'] <= 0) return self::setErrorInfo('提现佣金大于0');
+        $balance = bcsub($userInfo['brokerage_price'], $data['money'], 2);
+        $commission = bcmul($data['money'], bcdiv(sys_config('commission'), 100, 3), 2);
+        $commission_gf = bcmul($data['money'], bcdiv(sys_config('commission_gf'), 100, 3), 2);
+        $commission_consumer = bcmul($data['money'], bcdiv(sys_config('commission_consumer'), 100, 3), 2);
+        $commission_yue = bcmul($data['money'], bcdiv(sys_config('commission_yue'), 100, 3), 2);
+        if ($balance < 0) $balance = 0;
         $insertData = [
             'uid' => $userInfo['uid'],
             'extract_type' => $data['extract_type'],
@@ -74,45 +78,49 @@ class UserExtract extends BaseModel
             'add_time' => time(),
             'balance' => $balance,
             'status' => self::AUDIT_STATUS,
-            'commission'=>$commission,
+            'commission' => $commission,
+            'commission_gf' => $commission_gf,
+            'commission_consumer' => $commission_consumer,
+            'commission_yue' => $commission_yue,
         ];
-        if(isset($data['name']) && strlen(trim($data['name']))) $insertData['real_name'] = $data['name'];
+        if (isset($data['name']) && strlen(trim($data['name']))) $insertData['real_name'] = $data['name'];
         else $insertData['real_name'] = $userInfo['nickname'];
-        if(isset($data['cardnum'])) $insertData['bank_code'] = $data['cardnum'];
+        if (isset($data['cardnum'])) $insertData['bank_code'] = $data['cardnum'];
         else $insertData['bank_code'] = '';
-        if(isset($data['bankname'])) $insertData['bank_address']=$data['bankname'];
-        else $insertData['bank_address']='';
-        if(isset($data['weixin'])) $insertData['wechat'] = $data['weixin'];
+        if (isset($data['bankname'])) $insertData['bank_address'] = $data['bankname'];
+        else $insertData['bank_address'] = '';
+        if (isset($data['weixin'])) $insertData['wechat'] = $data['weixin'];
         else $insertData['wechat'] = $userInfo['nickname'];
-        if($data['extract_type'] == 'alipay'){
-            if(!$data['alipay_code']) return self::setErrorInfo('请输入支付宝账号');
+        if ($data['extract_type'] == 'alipay') {
+            if (!$data['alipay_code']) return self::setErrorInfo('请输入支付宝账号');
             $insertData['alipay_code'] = $data['alipay_code'];
-            $mark = '使用支付宝提现'.$insertData['extract_price'].'元,手续费:'.$insertData['commission'].",实际到账:".bcsub($insertData['extract_price'],$insertData['commission'],2);
-        }else if($data['extract_type'] == 'bank'){
-            if(!$data['cardnum']) return self::setErrorInfo('请输入银行卡账号');
-            if(!$data['bankname']) return self::setErrorInfo('请输入开户行信息');
-            $mark = '使用银联卡'.$insertData['bank_code'].'提现'.$insertData['extract_price'].'元,手续费:'.$insertData['commission'].",实际到账:".bcsub($insertData['extract_price'],$insertData['commission'],2);
-        }else if($data['extract_type'] == 'weixin'){
-            if(!$data['weixin']) return self::setErrorInfo('请输入微信账号');
-            $mark = '使用微信提现'.$insertData['extract_price'].'元';
+            $mark = '使用支付宝提现' . $insertData['extract_price'] . '元,手续费:' . $insertData['commission'] . ",实际到账:" . bcsub($insertData['extract_price'], $insertData['commission'], 2);
+        } else if ($data['extract_type'] == 'bank') {
+            if (!$data['cardnum']) return self::setErrorInfo('请输入银行卡账号');
+            if (!$data['bankname']) return self::setErrorInfo('请输入开户行信息');
+            $mark = '使用银联卡' . $insertData['bank_code'] . '提现' . $insertData['extract_price'] . '元,手续费:' . $insertData['commission'] . ",实际到账:" . bcsub($insertData['extract_price'], $insertData['commission'], 2);
+        } else if ($data['extract_type'] == 'weixin') {
+            if (!$data['weixin']) return self::setErrorInfo('请输入微信账号');
+            $mark = '使用微信提现' . $insertData['extract_price'] . '元';
         }
         self::beginTrans();
-        try{
+        try {
             $res1 = self::create($insertData);
-            if(!$res1) return self::setErrorInfo('提现失败');
-            $res2 = User::edit(['brokerage_price'=>$balance],$userInfo['uid'],'uid');
-            $res3 = UserBill::expend('余额提现',$userInfo['uid'],'now_money','extract',$data['money'],$res1['id'],$balance,$mark);
+            if (!$res1) return self::setErrorInfo('提现失败');
+            $res2 = User::edit(['brokerage_price' => $balance], $userInfo['uid'], 'uid');
+            $res3 = UserBill::expend('余额提现', $userInfo['uid'], 'now_money', 'extract', $data['money'], $res1['id'], $balance, $mark);
             $res = $res2 && $res3;
-            if($res){
+            if ($res) {
                 self::commitTrans();
-                try{
-                    ChannelService::instance()->send('WITHDRAW', ['id'=>$res1->id]);
-                }catch (\Exception $e){}
+                try {
+                    ChannelService::instance()->send('WITHDRAW', ['id' => $res1->id]);
+                } catch (\Exception $e) {
+                }
                 event('AdminNewPush');
                 //发送模板消息
                 return true;
-            }else return self::setErrorInfo('提现失败!');
-        }catch (\Exception $e){
+            } else return self::setErrorInfo('提现失败!');
+        } catch (\Exception $e) {
             self::rollbackTrans();
             return self::setErrorInfo('提现失败!');
         }
@@ -133,9 +141,9 @@ class UserExtract extends BaseModel
      * @param $uid
      * @return mixed
      */
-    public static function userExtractTotalPrice($uid,$status=self::SUCCESS_STATUS)
+    public static function userExtractTotalPrice($uid, $status = self::SUCCESS_STATUS)
     {
-        return self::where('uid',$uid)->where('status',$status)->value('SUM(extract_price)')?:0;
+        return self::where('uid', $uid)->where('status', $status)->value('SUM(extract_price)') ?: 0;
     }
 
     /**
@@ -148,11 +156,11 @@ class UserExtract extends BaseModel
      * @throws \think\db\exception\ModelNotFoundException
      * @throws \think\exception\DbException
      */
-    public static function extractList($uid,$first = 0,$limit = 8)
+    public static function extractList($uid, $first = 0, $limit = 8)
     {
-        $list=UserExtract::where('uid',$uid)->order('add_time desc')->limit($first,$limit)->select();
-        foreach($list as &$v){
-            $v['add_time']=date('Y/m/d',$v['add_time']);
+        $list = UserExtract::where('uid', $uid)->order('add_time desc')->limit($first, $limit)->select();
+        foreach ($list as &$v) {
+            $v['add_time'] = date('Y/m/d', $v['add_time']);
         }
         return $list;
     }
@@ -164,7 +172,7 @@ class UserExtract extends BaseModel
      */
     public static function extractSum($uid)
     {
-        return self::where('uid',$uid)->where('status',1)->sum('extract_price');
+        return self::where('uid', $uid)->where('status', 1)->sum('extract_price');
     }
 
 }

+ 11 - 0
app/models/user/WechatUser.php

@@ -249,6 +249,17 @@ class WechatUser extends BaseModel
     public static function saveUser($openid)
     {
         self::be($openid, 'openid') == true ? self::updateUser($openid) : self::setNewUser($openid);
+        $info = self::where('openid', $openid)->find();
+        if ($info && $info['subscribe'] == 1 && $info['send'] == 0) {
+            $subscribe_give_integral = sys_config('subscribe_give_integral', 0, true);
+            if ($subscribe_give_integral > 0) {
+                $mark = '首次关注,赠送积分' . $subscribe_give_integral;
+                UserBill::income('购买套装赠送', $info['uid'], 'integral', 'subscribe_give', $subscribe_give_integral, 0, bcadd($info['integral'], $subscribe_give_integral, 2), $mark);
+                User::where('uid', $info['uid'])->inc('integral', $subscribe_give_integral)->update();
+                $info->send = 1;
+                $info->save();
+            }
+        }
     }
 
     /**

+ 1 - 0
crmeb/repositories/NoticeRepositories.php

@@ -62,6 +62,7 @@ class NoticeRepositories
                 Log::error('购买后发送提醒失败,错误原因:' . $e->getMessage());
             }
         }
+        if ($order['suit']) return;
         //打印小票
         $switch = sys_config('pay_success_printing_switch') ? true : false;
         if ($switch) {

+ 29 - 27
crmeb/repositories/OrderRepository.php

@@ -3,6 +3,8 @@
 namespace crmeb\repositories;
 
 use app\models\store\StoreOrder;
+use app\models\system\SystemAwardLevel;
+use app\models\system\SystemGroupLevel;
 use app\models\user\User;
 use app\models\user\UserBill;
 use app\models\user\WechatUser;
@@ -97,7 +99,7 @@ class OrderRepository
      * @param $orderId
      * @param string $field
      */
-    public static function barcodePay($orderId,$auth_code, $field = 'order_id')
+    public static function barcodePay($orderId, $auth_code, $field = 'order_id')
     {
         if (is_string($orderId))
             $orderInfo = StoreOrder::where($field, $orderId)->find();
@@ -108,9 +110,9 @@ class OrderRepository
         if ($orderInfo['pay_price'] <= 0) exception('该支付无需支付!');
         $bodyContent = StoreOrder::getProductTitle($orderInfo['cart_id']);
         $site_name = sys_config('site_name');
-        $device_info = "myc".$orderInfo['store_id'];
+        $device_info = "myc" . $orderInfo['store_id'];
         if (!$bodyContent && !$site_name) exception('支付参数缺少:请前往后台设置->系统设置-> 填写 网站名称');
-        return WechatService::paymentPrepare(null, $orderInfo['order_id'], $orderInfo['pay_price'], 'product', StoreOrder::getSubstrUTf8($site_name . ' - ' . $bodyContent, 30), '', 'MWEB',compact('auth_code','device_info'));
+        return WechatService::paymentPrepare(null, $orderInfo['order_id'], $orderInfo['pay_price'], 'product', StoreOrder::getSubstrUTf8($site_name . ' - ' . $bodyContent, 30), '', 'MWEB', compact('auth_code', 'device_info'));
     }
 
     /**
@@ -119,30 +121,30 @@ class OrderRepository
      * @param $auth_code
      * @param string $field
      */
-     public static function jialiePay($orderId,$auth_code, $field = 'order_id|re_order_id')
-     {
-         if (is_string($orderId))
-             $orderInfo = StoreOrder::where($field, $orderId)->find();
-         else
-             $orderInfo = $orderId;
-         if (!$orderInfo || !isset($orderInfo['paid'])) exception('支付订单不存在!');
-         if ($orderInfo['paid']) exception('支付已支付!');
-         if ($orderInfo['pay_price'] <= 0) exception('该支付无需支付!');
-         $bodyContent = '商品订单';
-         $site_name = sys_config('site_name');
-         $device_info = "myc".$orderInfo['store_id'];
-         if (!$bodyContent && !$site_name) exception('支付参数缺少:请前往后台设置->系统设置-> 填写 网站名称');
-         $data['pay_type'] = 'jialie';
-         $data['auth_code'] = $auth_code;
-         $data['body'] = $bodyContent;
-         $data['total_fee'] = bcmul($orderInfo['pay_price'],100,0);
-         $data['nonce_str'] = uniqid();
-         $data['out_trade_no'] = !empty($orderInfo['re_order_id'])?$orderInfo['re_order_id']:$orderInfo['order_id'];
-         $data['mch_create_ip'] = app('request')->ip();
-         $data['attach'] = 'product';
-         $rs = JiaLieService::initialize()::paymentOrder(JiaLieService::MICROPAY,$data);
-         return $rs;
-     }
+    public static function jialiePay($orderId, $auth_code, $field = 'order_id|re_order_id')
+    {
+        if (is_string($orderId))
+            $orderInfo = StoreOrder::where($field, $orderId)->find();
+        else
+            $orderInfo = $orderId;
+        if (!$orderInfo || !isset($orderInfo['paid'])) exception('支付订单不存在!');
+        if ($orderInfo['paid']) exception('支付已支付!');
+        if ($orderInfo['pay_price'] <= 0) exception('该支付无需支付!');
+        $bodyContent = '商品订单';
+        $site_name = sys_config('site_name');
+        $device_info = "myc" . $orderInfo['store_id'];
+        if (!$bodyContent && !$site_name) exception('支付参数缺少:请前往后台设置->系统设置-> 填写 网站名称');
+        $data['pay_type'] = 'jialie';
+        $data['auth_code'] = $auth_code;
+        $data['body'] = $bodyContent;
+        $data['total_fee'] = bcmul($orderInfo['pay_price'], 100, 0);
+        $data['nonce_str'] = uniqid();
+        $data['out_trade_no'] = !empty($orderInfo['re_order_id']) ? $orderInfo['re_order_id'] : $orderInfo['order_id'];
+        $data['mch_create_ip'] = app('request')->ip();
+        $data['attach'] = 'product';
+        $rs = JiaLieService::initialize()::paymentOrder(JiaLieService::MICROPAY, $data);
+        return $rs;
+    }
 
     /**
      * 用户确认收货

+ 14 - 14
crmeb/services/YLYService.php

@@ -46,6 +46,8 @@ class YLYService extends HttpService implements ProviderInterface
      */
     protected $order_id = null;
 
+    protected $store_id = 0;
+
     /**
      *  终端号码
      * @var string
@@ -82,20 +84,22 @@ class YLYService extends HttpService implements ProviderInterface
         $this->terminal = $system['terminal_number'] ?? '';
         $this->getAccessToken();
     }
+
     public function selectStore($store_id)
     {
-        $terminal_number = SystemStore::where('id',$store_id)->value('terminal_number');
+        $this->store_id = $store_id;
+        $terminal_number = SystemStore::where('id', $store_id)->value('terminal_number');
         $this->terminal = $terminal_number;
-        $this->getAccessToken();
+        $this->getAccessToken($store_id);
         return $this;
     }
 
     /**
      * 获取AccessToken
      * */
-    protected function getAccessToken($store_id=0)
+    protected function getAccessToken($store_id = 0)
     {
-        $this->access_token = CacheModel::getDbCache('YLY_access_token'.$store_id, function () {
+        $this->access_token = CacheModel::getDbCache('YLY_access_token' . $store_id, function () {
             $request = self::postRequest($this->apiUrl . 'oauth/oauth', [
                 'client_id' => $this->client_id,
                 'grant_type' => 'client_credentials',
@@ -147,7 +151,7 @@ class YLYService extends HttpService implements ProviderInterface
         if ($request === false) return false;
         $request = json_decode($request, true);
         if (isset($request['error']) && in_array($request['error'], [18, 14]) && $errorCount == 0) {
-            CacheModel::delectDbCache('YLY_access_token');
+            CacheModel::delectDbCache('YLY_access_token' . $this->store_id);
             $this->getAccessToken();
             return $this->orderPrinting($order_id, 1);
         }
@@ -195,15 +199,11 @@ class YLYService extends HttpService implements ProviderInterface
         $goodsStr .= '</table>';
         $this->order_id = $orderInfo['order_id'];
         $order_type = "普通订单";
-        if($orderInfo['is_consumer']==1)
-        {
-            $order_type ="消费券订单";
-        }
-        else
-        {
-            if($orderInfo['use_integral']>0)
-            {
-                $order_type ="积分订单";
+        if ($orderInfo['is_consumer'] == 1) {
+            $order_type = "消费券订单";
+        } else {
+            if ($orderInfo['use_integral'] > 0) {
+                $order_type = "积分订单";
             }
         }
         $count = <<<CONTENT

+ 2 - 3
crmeb/subscribes/OrderSubscribe.php

@@ -148,9 +148,8 @@ class OrderSubscribe
         NoticeRepositories::noticeOrderPaySuccess($order);
         //检测会员等级
         event('UserLevelAfter', [$order['uid']]);
-        if($order['is_consumer']==0)
-        {
-            SystemStoreMember::add_consume($order['uid'],$order['total_price']);
+        if ($order['is_consumer'] == 0 && !$order['suit']) {
+            SystemStoreMember::add_consume($order['uid'], $order['total_price']);
         }
 
         try {

+ 0 - 0
nginx.htaccess


+ 0 - 1
public/.htaccess

@@ -1 +0,0 @@
- 

+ 1 - 0
route/api/route.php

@@ -34,6 +34,7 @@ Route::any('jialie/notify', 'wechat.AuthController/notify');//嘉联支付回调
 Route::get('baidutoken', 'PublicController/baidutoken')->name('baidutoken')
     ->middleware(\app\http\middleware\AllowOriginMiddleware::class);
 Route::any('day', 'PublicController/day');//每天定时
+Route::any('test', 'PublicController/test');//每天定时
 
 //管理员订单操作类
 Route::group(function () {