zxhxx 3 лет назад
Родитель
Сommit
f6b9a35b97

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

@@ -273,7 +273,9 @@ class StoreProduct extends AuthController
             ['video_link', ''],
             ['items', []],
             ['attrs', []],
-            ['activity', []]
+            ['activity', []],
+            ['max_integral',0],
+            ['is_integral',0],
         ]);
         foreach ($data['activity'] as $k => $v) {
             if ($v == '秒杀') {

+ 37 - 26
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_integral" lay-verify="title"
+                                                           autocomplete="off" placeholder="请输入最多使用金券" class="layui-input" v-model="formData.max_integral">
                                                 </div>
                                             </div>
                                         </div>
@@ -617,6 +628,7 @@
                                             </div>
                                         </div>
                                     </div>
+                                    <!--
                                     <div class="layui-col-xs12 layui-col-sm12 layui-col-md12">
                                         <div class="grid-demo grid-demo-bg1">
                                             <div class="layui-form-item">
@@ -645,8 +657,9 @@
                                                 </div>
                                             </div>
                                         </div>
-                                    </div>
+                                    </div>-->
                                     <!-- 单属性-->
+                                    <!--
                                     <div class="layui-col-xs12 layui-col-sm12 layui-col-md12" v-if="formData.spec_type == 0 && formData.is_sub == 1">
                                         <div class="grid-demo grid-demo-bg1">
                                             <div class="layui-form-item">
@@ -691,9 +704,10 @@
                                                 </div>
                                             </div>
                                         </div>
-                                    </div>
+                                    </div>-->
                                     <!-- 单属性结束-->
                                     <!-- 多属性-->
+                                    <!--
                                     <div class="layui-col-xs12 layui-col-sm12 layui-col-md12"
                                          v-if="formData.attrs.length && formHeader.length && formData.is_sub == 1 && formData.spec_type == 1">
                                         <div class="grid-demo grid-demo-bg1" style="margin-top: 20px">
@@ -735,7 +749,7 @@
                                                 </div>
                                             </div>
                                         </div>
-                                    </div>
+                                    </div>-->
                                     <!--多属性结束-->
 
 <!--                                    <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">-->
@@ -751,6 +765,7 @@
 <!--                                            </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">
@@ -790,6 +805,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_integral" lay-filter="is_integral" value="1" title="开启"
+                                                           :checked="formData.is_integral == 1 ? true : false">
+                                                    <input type="radio" name="is_integral" lay-filter="is_integral" value="0" title="关闭"
+                                                           :checked="formData.is_integral == 0 ? true : false">
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
                                     <div class="layui-col-xs12 layui-col-sm4 layui-col-md4">
                                         <div class="grid-demo grid-demo-bg1">
                                             <div class="layui-form-item">
@@ -829,26 +857,7 @@
                                             </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">
-                                                <div class="layui-form-item">
-                                                    <label class="layui-form-label">活动优先级</label>
-                                                    <div class="layui-input-block">
-                                                        <span class="layui-btn layui-btn-sm layui-btn-normal" :style="'background-color:'+activity[item]" v-for="(item,index) in formData.activity" :key="index"
-                                                              draggable="true"
-                                                              @dragstart="handleDragStart($event, item)"
-                                                              @dragover.prevent="handleDragOver($event, item)"
-                                                              @dragenter="handleDragEnter($event, item)"
-                                                              @dragend="handleDragEnd($event, item)">
-                                                        {{item}}
-                                                    </span>
-                                                        <span class="info">可拖动按钮调整活动的优先展示顺序</span>
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
+
                                 </div>
                             </div>
                         </div>
@@ -928,6 +937,8 @@
                 is_good: 0,
                 is_gold:0,
                 is_sub:0,
+                max_integral:0,
+                is_integral:0,
                 items: [
                     // {
                     //     value: '',
@@ -964,7 +975,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','is_gold'],//radio 当选规则
+            radioRule: ['is_sub','is_show', 'is_hot', 'is_benefit', 'is_new','is_good' ,'is_best', 'spec_type','is_gold','is_integral'],//radio 当选规则
             rule: { //多图选择规则
                 slider_image: {
                     maxLength: 5

+ 2 - 2
app/admin/view/ump/store_wholesale/create.php

@@ -201,7 +201,7 @@
                                                 <label class="layui-form-label">时间</label>
                                                 <div class="layui-input-block">
                                                     <input style="width: 40%" type="text" name="unit_name" id="date" lay-verify="date" autocomplete="off"
-                                                           placeholder="选择时间" class="layui-input" >
+                                                           placeholder="选择时间" class="layui-input" :value="formData.start_time+' - '+formData.stop_time" >
                                                 </div>
                                             </div>
                                         </div>
@@ -489,7 +489,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_news','is_good' ,'is_best', 'spec_type'],//radio 当选规则
             rule: { //多图选择规则
                 images: {
                     maxLength: 5

+ 1 - 1
app/admin/view/ump/store_wholesale/index.php

@@ -73,7 +73,7 @@
                         <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('{{d.title}}-编辑','{:Url('edit')}?id={{d.id}}')"><i class="layui-icon layui-icon-edit"></i> 编辑活动</a>
+                                <a href="javascript:void(0);" onclick="$eb.createModalFrame('{{d.title}}-编辑','{:Url('create')}?id={{d.id}}')"><i class="layui-icon layui-icon-edit"></i> 编辑活动</a>
                             </li>
                             <li>
                                 <a href="javascript:void(0);" class="delstor" lay-event='delstor'><i class="layui-icon layui-icon-delete"></i> 删除</a>

+ 30 - 0
app/api/controller/AuthController.php

@@ -394,4 +394,34 @@ class AuthController
         else
             return app('json')->fail('绑定失败');
     }
+    /**
+     * 设置或修改密码
+     * @param Request $request
+     * @return mixed
+     */
+    public function transaction(Request $request)
+    {
+        list($oldpass,$pass) = UtilService::postMore([
+            ['oldpass',''],
+            ['pass',''],
+        ],$request,true);
+        $user = User::where('uid',$request->uid())->find();
+        if(empty($user['transaction']) ||  empty($user['salt']))
+        {
+            if(strlen($pass)!=6) return app('json')->fail('交易密码为6位数字');
+            $data['salt'] = substr(uniqid(),0,6);
+            $data['transaction'] = md5(md5($data['salt'].$pass).$data['salt']);
+            User::edit($data,$request->uid());
+            return app('json')->success('设置成功');
+        }
+        else
+        {
+            if(strlen($oldpass)!=6 || strlen($pass)!=6) return app('json')->fail('原交易密码和新交易密码都是6位数字');
+            $data['salt'] = $user['salt'];
+            if(md5(md5($data['salt'].$oldpass).$data['salt'])!=$user['transaction']) return app('json')->fail('原交易密码错误');
+            $data['transaction'] = md5(md5($data['salt'].$pass).$data['salt']);
+            User::edit($data,$request->uid());
+            return app('json')->success('修改成功');
+        }
+    }
 }

+ 66 - 10
app/api/controller/activity/WholeController.php

@@ -2,6 +2,8 @@
 namespace app\api\controller\activity;
 use app\models\store\Package;
 use app\models\store\StoreWholesale;
+use app\models\user\User;
+use app\models\user\UserBill;
 use app\Request;
 use crmeb\services\QrcodeService;
 use crmeb\services\UtilService;
@@ -76,10 +78,10 @@ class WholeController
             ['limit', 0],
         ], $request, true);
         if (!$time) return app('json')->fail('参数错误');
-        $seckillInfo = Package::lst(['time_id'=>$time,'page'=>$page,'limit'=>$limit,'status'=>3]);
+        $seckillInfo = Package::lst(['time_id'=>$time,'page'=>$page,'limit'=>$limit,'status'=>2]);
         if (count($seckillInfo)) {
-            foreach ($seckillInfo as $key => &$item) {
-
+            foreach ($seckillInfo['data'] as &$v) {
+                $v['price'] = bcadd(bcmul($v['price'],bcdiv(sys_config('pass_on',3),100,2),2),$v['price'],2);
             }
         }
         return app('json')->successful($seckillInfo);
@@ -130,7 +132,7 @@ class WholeController
         if($time_id==0) return app('json')->fail('时间段不能为空');
         if($price==0) return app('json')->fail('价格不能为0');
         if($to_uid==0) $first_price = $price;
-        if($last_id>0 && !self::be(['id'=>$last_id,'uid'=>$to_uid])) return app('json')->fail('非法数据');
+        if($last_id>0 && !Package::be(['id'=>$last_id,'uid'=>$to_uid])) return app('json')->fail('非法数据');
         $rs = Package::reserve($request->uid(),$whole_id,$time_id,$to_uid,$price,$first_price,$last_id);
         if($rs)
         {
@@ -151,7 +153,7 @@ class WholeController
         $where = UtilService::postMore(
             [
                 ['page',1],
-                ['limit',0],
+                ['limit',10],
                 ['data',''],
                 ['status',-4],
             ],$request
@@ -172,9 +174,9 @@ class WholeController
             ],$request
         );
         if($where['pay_evaluation']=='') return app('json')->fail('上传图片评证');
-        if(!Package::be(['uid'=>$request->uid(),'id'=>input('id'),'status'=>1]))return app('json')->fail('参数错误或已上传!');
+        if(!Package::be(['uid'=>$request->uid(),'id'=>input('id'),'status'=>0]))return app('json')->fail('参数错误或已上传!');
         $where['submit_time'] = time();
-        $where['status'] = 2;
+        $where['status'] = 1;
         return app('json')->successful(Package::edit($where,input('id')));
     }
 
@@ -205,12 +207,12 @@ class WholeController
         $where = UtilService::postMore(
             [
                 ['re',''],
-                ['status',3],
+                ['status',1],
             ],$request
         );
         $id = input('id');
-        if(!Package::be(['to_uid'=>$request->uid(),'status'=>2,'id'=>$id])) return app('json')->fail('参数有误或已审核');
-        if($where['status']==3)
+        if(!Package::be(['to_uid'=>$request->uid(),'status'=>1,'id'=>$id])) return app('json')->fail('参数有误或已审核');
+        if($where['status']==2)
         {
             $rs = Package::take($id);
         }
@@ -230,4 +232,58 @@ class WholeController
     {
         return app('json')->successful(StoreWholesale::where('is_news',1)->where('is_del',0)->where('is_show',1)->select()->toArray());
     }
+
+    /**
+     * 批发详情
+     * @param Request $request
+     * @param $id
+     * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function info(Request $request,$id)
+    {
+        $info = Package::find($id);
+        if (!$info) return app('json')->fail('非法数据');
+        $info = $info->toArray();
+        $info['whole'] = StoreWholesale::find($info['whole_id'])->toArray();
+        $info['isSeckillEnd'] = StoreWholesale::checkStatus($info['whole_id']);
+        $info['price'] = bcadd(bcmul($info['price'],bcdiv(sys_config('pass_on',3),100,2),2),$info['price'],2);
+        return app('json')->successful($info);
+    }
+
+    /**
+     * 金豆池
+     * @param Request $request
+     * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function pool(Request $request)
+    {
+        $sum = Package::where('status',-2)->value('sum(use_integral)')?:0;
+        $count =  Package::where('status',-2)->value('count(use_integral)')?:0;
+        $data = Package::where('status',-2)->order('id desc')->page(input('page',1),input('limit',10))->select()->toArray();
+        foreach ($data as &$v)
+        {
+            $v['user'] = User::find($v['uid'])->toArray();
+        }
+        return app('json')->successful(compact('sum','count','data'));
+    }
+
+    public function take_delivery(Request $request,$id)
+    {
+        $info = Package::find($id);
+        if (!$info) return app('json')->fail('非法数据');
+        $info = $info->toArray();
+        if($info['status']!=2)  return app('json')->fail('状态是不是支付完成,不能提货');
+        User::where('uid',$info['uid'])->inc('integral',$info['price'])->update();
+        $user = $request->user();
+        UserBill::income('订单提货',$info['uid'],'integral','package',$info['price'],$info['id'],bcadd($user['integral'],$info['price'],2),'订单收货'.$info['price']);
+        Package::edit(['status'=>5],$id);
+        return app('json')->successful('提货完成');
+
+    }
 }

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

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

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

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

+ 15 - 3
app/api/controller/user/UserBillController.php

@@ -339,10 +339,22 @@ class UserBillController
      */
     public function integral_list(Request $request)
     {
-        list($page, $limit) = UtilService::getMore([
-            [['page', 'd'], 0], [['limit', 'd'], 0]
+        list($page, $limit,$pm) = UtilService::getMore([
+            [['page', 'd'], 0], [['limit', 'd'], 0],[['pm', 'd'], -1],
         ], $request, true);
-        return app('json')->successful(UserBill::userBillList($request->uid(), $page, $limit));
+        return app('json')->successful(UserBill::userBillList($request->uid(), $page, $limit,'',$pm));
 
     }
+    /*
+     * 金豆记录
+     */
+    public function gold_list(Request $request)
+    {
+        list($page, $limit,$pm) = UtilService::getMore([
+            [['page', 'd'], 0],
+            [['limit', 'd'], 0],
+            [['pm', 'd'], -1],
+        ], $request, true);
+        return app('json')->successful(UserBill::userBillList($request->uid(), $page, $limit,'gold',$pm));
+    }
 }

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

@@ -612,5 +612,10 @@ class UserController
         ]);
 
     }
+    public function nickname(Request $request)
+    {
+        return app('json')->successful(User::where('uid',input('uid',0))->value('nickname'));
+    }
+
 
 }

+ 83 - 0
app/api/controller/user/UserExtractController.php

@@ -4,8 +4,10 @@ namespace app\api\controller\user;
 
 use app\admin\model\system\SystemConfig;
 use app\models\store\StoreOrder;
+use app\models\user\User;
 use app\models\user\UserBill;
 use app\models\user\UserExtract;
+use app\models\user\UserTransfer;
 use app\Request;
 use crmeb\services\UtilService;
 
@@ -99,4 +101,85 @@ class UserExtractController
         else
             return app('json')->fail(UserExtract::getErrorInfo('提现失败'));
     }
+    /**
+     * 余额转账
+     * @param Request $request
+     */
+    public function transfer(Request $request)
+    {
+        list($to_uid,$pass,$merber,$type) = UtilService::postMore([
+            ['to_uid',''],
+            ['pass',''],
+            ['merber',0],
+            ['type',0],
+        ],$request,true);
+        if(!User::be(['uid'=>$to_uid])) return app('json')->fail('用户不存在');
+        if(strlen($pass)!=6) return app('json')->fail('交易密码只能输入6位数字');
+        $user = $request->user();
+        $money = $user['now_money'];$in = "转出余额";$out = "转入余额";$field="now_money";
+        if($type==1)
+        {
+            $money = $user['consume'];
+            $in = "转入钻石";$out = "转出钻石";
+            $field = "consume";
+        }
+        if(md5(md5($user['salt'].$pass).$user['salt'])!=$user['transaction'])return app('json')->fail('交易密码错误');
+        if(bcsub($money,$merber,2)>=0)
+        {
+            $user = User::where('uid',$request->uid())->lock(true)->find();
+            User::where('uid',$request->uid())->dec($field,$merber)->update();
+            $touser =  User::where('uid',$to_uid)->find();
+            User::where('uid',$to_uid)->inc($field,$merber)->update();
+            $data['uid'] = $request->uid();
+            $data['touid'] = $touser['uid'];
+            $data['money'] = $merber;
+            $data['order_id'] = UserTransfer::getNewOrderId();
+            $data['add_time'] = time();
+            $data['type'] = $type;
+            $data['paid'] =1;
+            UserTransfer::create($data);
+            UserBill::expend($out,$request->uid(),'now_money','transfer_out',$merber,0,bcsub($user['now_money'],$merber,2),'转给'.$touser['nickname']."用户",1);
+            UserBill::income($in,$touser['uid'],'now_money','transfer_in',$merber,0,bcadd($touser['now_money'],$merber,2),'收到用户'.$user['uid'].'转账号');
+            return app('json')->successful('转账成功!');
+        }
+        else
+        {
+            return app('json')->fail($out.'不足');
+        }
+    }
+
+    /**
+     * 转账记录
+     * @param Request $request
+     */
+    public function transfer_list(Request $request)
+    {
+        list($page,$limit,$pm,$type) = UtilService::postMore([
+            ['page',1],
+            ['limit',20],
+            ['pm',0],
+            ['type',0]
+        ],$request,true);
+        if($pm==0)
+        {
+            $count = UserTransfer::where('uid',$request->uid())->where('type',$type)->count();
+            $data =  UserTransfer::where('uid',$request->uid())->where('type',$type)->page($page,$limit)->order("id desc")->select();
+            foreach ($data as &$v)
+            {
+                $v['to_user'] = User::where('uid',$v['touid'])->value('nickname');
+                $v['_add_time'] = date("Y-m-d H:i:s",$v['add_time']);
+            }
+        }
+        else
+        {
+            $count = UserTransfer::where('touid',$request->uid())->where('type',$type)->count();
+            $data =  UserTransfer::where('touid',$request->uid())->where('type',$type)->page($page,$limit)->order("id desc")->select();
+            foreach ($data as &$v)
+            {
+                $v['to_user'] = User::where('uid',$v['uid'])->value('nickname');
+                $v['_add_time'] = date("Y-m-d H:i:s",$v['add_time']);
+            }
+        }
+        return app('json')->successful(compact('count','data'));
+    }
 }

+ 2 - 2
app/models/order/Level.php

@@ -108,8 +108,8 @@ class Level extends BaseModel
         $res1 = self::where('order_id', $orderId)->update(['paid' => 1, 'pay_type' => $paytype, 'paytime' => time()]);//订单改为支付
 
         //送等值金豆
-        User::where('uid',$user['uid'])->inc('integral',$order['pay_price'])->update();
-        UserBill::income('黄金会员送金豆',$order['uid'],'integral','level',$order['pay_price'],$order['id'],bcadd($user['integral'],$order['pay_price'],2),'黄金会员送金豆'.$order['pay_price']);
+        User::where('uid',$user['uid'])->inc('gold',$order['pay_price'])->update();
+        UserBill::income('黄金会员送金豆',$order['uid'],'gold','level',$order['pay_price'],$order['id'],bcadd($user['gold'],$order['pay_price'],2),'黄金会员送金豆'.$order['pay_price']);
 
         if($user['level']<2)
             $res2 = UserLevel::setUserLevel($order['uid'], $order['level_id']);

+ 118 - 256
app/models/store/Package.php

@@ -35,13 +35,29 @@ class Package extends BaseModel
         $data['first_price'] = $first_price;
         $data['last_id'] = $last_id;
         $data['price'] = $price;
+        if(cache('reserve_'.$uid,1) &&  false) return self::setErrorInfo('你已报名,无需重复报名');
         if($last_id>0 && self::where('last_id',$last_id)->where('uid',$uid)->find())
         {
             return self::setErrorInfo('你已报名,无需重复报名');
+        }elseif($last_id>0 && self::where('last_id',$last_id)->find())
+        {
+            return self::setErrorInfo('该订单已有预约');
+        }
+        else
+        {
+            cache('reserve_'.$uid,1,60);
         }
+
         $integral = bcmul($price,bcdiv(sys_config('reserve_integral'),100,2),2);
-        if($integral>$user['integral']) return self::setErrorInfo('金豆不足,请先买金豆专区');
-        if($last_id>0 && self::where('id',$last_id)->value('status')!=3) return self::setErrorInfo('已有用户预约,换个商品预约');
+        if($integral>$user['gold'])
+            {
+                cache('reserve_'.$uid,null);
+                return self::setErrorInfo('金豆不足,请先买金豆专区');
+            }
+        if($last_id>0 && self::where('id',$last_id)->value('status')!=3) {
+            cache('reserve_'.$uid,null);
+            return self::setErrorInfo('已有用户预约,换个商品预约');
+        }
         $data['add_time'] = time();
         $data['order_id'] = self::getNewOrderId();
         if($to_uid==0)
@@ -53,14 +69,16 @@ class Package extends BaseModel
         try{
             $data['use_integral'] = $integral;
             $res = self::create($data);
-            User::where('uid',$uid)->dec('integral',$integral)->update();
-            UserBill::expend("预约扣金豆",$uid,'integral','pay_money',$integral,$res['id'],bcsub($user['integral'],$integral,2),'预约扣除'.$integral."金豆");
-            User::edit(['is_whole'=>1],$uid);
+            User::where('uid',$uid)->dec('gold',$integral)->update();
+            UserBill::expend("预约扣金豆",$uid,'gold','pay_money',$integral,$res['id'],bcsub($user['gold'],$integral,2),'预约扣除'.$integral."金豆");
+            if($last_id==0) User::edit(['is_whole'=>1],$uid);
+            if($last_id>0) self::where('id',$last_id)->update(['status'=>3]);
             self::commitTrans();
             return $res->toArray();
 
         }catch (Exception $e)
         {
+            cache('reserve_'.$uid,null);
             Log::error('预约出错:' . $e->getLine().'--'.$e->getMessage());
             return self::setErrorInfo($e->getMessage(),true);
         }
@@ -104,16 +122,23 @@ class Package extends BaseModel
     public static function take($id)
     {
         $info = self::find($id);
-        $data['status'] = 3;
+        $data['status'] = 2;
         $data['paid'] = 1;
         self::beginTrans();
         try {
-            User::where('uid',$info['uid'])->inc('now_money',$info['pass'])->update();
+            $package_income = bcmul($info['price'],bcdiv(sys_config('package_income'),100,2),2);
+            $confirm_receipt = bcmul($info['price'],bcdiv(sys_config('confirm_receipt'),100,2),2);
+            $gold_bond = bcmul($info['price'],bcdiv(sys_config('gold_bond'),100,2),2);
+            User::where('uid',$info['uid'])->inc('brokerage_price',$package_income)->inc('gold',$gold_bond)->update();
             $user = User::where('uid',$info['uid'])->find();
-            UserBill::income('通证收益',$info['uid'],'now_money','sign',$info['pass'],$info['id'],$user['now_money'],'包收益通证'.$info['pass']);
+            UserBill::income('订单收益',$info['uid'],'now_money','brokerage',$package_income,$info['id'],$user['brokerage_price'],'订单收益'.$package_income);
+            UserBill::income('订单金券收益',$info['uid'],'integral','package',$gold_bond,$info['id'],$user['gold'],'订单收益'.$gold_bond);
+
             $res = self::edit($data,$id);
-            $res1 =  self::backBrokerage($info);
-            if($info['last_id']>0) self::edit(['status'=>6],$info['last_id']);
+            User::where('uid',$info['to_uid'])->inc('brokerage_price',$confirm_receipt)->update();
+            $to_user = User::where('uid',$info['to_uid'])->find();
+            UserBill::income('订单确认收益',$info['to_uid'],'now_money','brokerage',$confirm_receipt,$info['id'],$to_user['brokerage_price'],'订单确认收益'.$confirm_receipt);
+            if($info['last_id']>0) self::edit(['status'=>4],$info['last_id']);
             self::commitTrans();
         }
         catch (Exception $e)
@@ -126,236 +151,99 @@ class Package extends BaseModel
     }
 
     /**
-     * 定时执行
-     * @throws \think\db\exception\DataNotFoundException
-     * @throws \think\db\exception\DbException
-     * @throws \think\db\exception\ModelNotFoundException
+     * 订单无效
+     * @param $id
      */
-    public static function make_package()
+    public static function invalid($id,$re='')
     {
-        self::startTrans();
-        try {
-            $package_manager = sys_data('package_manager');
-            $package = [];
-            foreach ($package_manager as $v) {
-                if(date("H:i") == $v['open'])
-                $package[] = $v;
-            }
-            $uids = User::where('is_sys', 1)->column('uid');
-            foreach ($package as $v)
-            {
-                $arr = self::where('status', 0)->where('package_manager',$v['id'])->where('add_time','<',strtotime(date("Y-m-d ").$v['end'].":00"))->select();
-                if ($arr) {
-                    $ids = [];
-                    $sum = $v['one'];
-                    if (sizeof($arr->toArray()) > $sum) {
-                        $ids = self::getrand($arr->toArray(), $sum);
-                    } else {
-                        foreach ($arr as $v1) {
-                            $ids[] = $v1['id'];
-                        }
-                    }
-                    foreach ($ids as $v2) {
-
-                        $info = self::where('status', 4)->where('uid','not in',$uids)->where('add_time','<',strtotime("-30 minute"))->where('package_manager', $v['id'])->find();
-                        $last_id = 0;
-                        if ($info) {
-                            $to_uid = $info['uid'];
-                            $last_id = $info['id'];
-                            self::edit(['status' => 5], $info['id']);
-                        } else {
-                            $to_uid = User::where('is_sys', 1)->order('sys_pay asc,uid asc')->value('uid');
-                            User::where('uid', $to_uid)->inc('sys_pay', 1)->update();
-
-                        }
-                        self::edit(['to_uid' => $to_uid, 'status' => 1,'last_id'=>$last_id,'lottery_time'=>time()], $v2);
-                    }
-
-                }
-            }
-            self::checkTrans(true);
-        }catch (Exception $e)
-        {
-            self::setErrorInfo('生成出错'.$e->getMessage(),true);
-        }
+        $data['status'] = -1;
+        $data['re'] = $re;
+        $last_id = self::where('id',$id)->value('last_id');
+        if($last_id>0) self::edit(['status'=>2],$last_id);
+        return self::edit($data,$id);
     }
+
     /**
-     * 定时执行老
+     * 支付超时
      */
-    public static function make_package2()
+    public static function time_out()
     {
-        self::startTrans();
-        try {
-            $H = date("H");
-            $package_manager = sys_data('package_manager');
-            $package = [];
-            foreach ($package_manager as $v) {
-                $package[$v['id']] = $v;
-            }
-            $model = new self;
-            $model = $model->where('add_time','<',strtotime("-30 minute"));
-            $where = null;
-            if ($H < 13) {
-                $model = $model->where('am', 1);
-                $where['am'] = 1;
-            } else {
-                $model = $model->where('am', 0);
-                $where['am'] = 0;
-            }
-            $rs = $model->where('status', 0)->group('package_manager')->field('package_manager,count(package_manager) as ct')->select();
-
-            foreach ($rs as $v) {
-                $arr = self::where('status', 0)->where($where)->where('add_time','<',strtotime("-30 minute"))->where('package_manager', $v['package_manager'])->select();
-                if ($arr) {
-                    $ids = [];
-                    $sum = $package[$v['package_manager']]['one'];
-                    if (sizeof($arr->toArray()) > $sum) {
-                        $ids = self::getrand($arr->toArray(), $sum);
-                    } else {
-                        foreach ($arr as $v1) {
-                            $ids[] = $v1['id'];
-                        }
-                    }
-                    foreach ($ids as $v2) {
-                        $info = self::where('status', 4)->where($where)->where('add_time','<',strtotime("-30 minute"))->where('package_manager', $v['package_manager'])->find();
-                        $last_id = 0;
-                        if ($info) {
-                            $to_uid = $info['uid'];
-                            $last_id = $info['id'];
-                            self::edit(['status' => 5], $info['id']);
-                        } else {
-                            $to_uid = User::where('is_sys', 1)->order('sys_pay asc,uid asc')->value('uid');
-                            User::where('uid', $to_uid)->inc('sys_pay', 1)->update();
-                        }
-                        self::edit(['to_uid' => $to_uid, 'status' => 1,'last_id'=>$last_id,'lottery_time'=>time()], $v2);
-                    }
-                }
-            }
-            self::checkTrans(true);
-        }catch (Exception $e)
+        $list = self::where('status',1)->where('add_time','<',strtotime("-".sys_config('order_whole_time')." hour"))->select();
+        foreach ($list as $v)
         {
-            self::setErrorInfo('生成出错'.$e->getMessage(),true);
+            if($v['last_id']>0) self::edit(['status'=>2],$v['last_id']);
+            self::edit(['status'=>-2],$v['id']);
         }
+        return true;
     }
 
     /**
-     * 返现
-     * @param $info
+     * 收货确认超时
+     * @return bool
      * @throws \think\db\exception\DataNotFoundException
      * @throws \think\db\exception\DbException
      * @throws \think\db\exception\ModelNotFoundException
      */
-    public static function backBrokerage($info)
+    public static function take_outs()
     {
-        $userinfo = User::find($info['uid']);
-        $spreaduser = User::where('uid',$userinfo['spread_uid'])->find();
-        $twouser = User::where('uid',$spreaduser['spread_uid'])->find();
-        $bksum = bcdiv(bcmul($info['price'],bcmul($info['proportion'],$info['day'],2),2),100,2);
-        if($spreaduser['level']>0) {
-            $recommend = bcmul(bcdiv(sys_config('recommend'),100,2), $bksum, 2);
-            $mark = "订单号" . $info['order_id'] . '产生推荐奖,奖励推广佣金' . $recommend;
-            $res1 = UserBill::income('推荐奖', $spreaduser['uid'], 'now_money', 'brokerage', $recommend, $info['id'], bcadd($recommend, $spreaduser['brokerage_price'], 2), $mark);
-            $res2 = User::where('uid', $spreaduser['uid'])->inc('brokerage_price', $recommend)->update();
-        }
-        //二代推荐
-        if($twouser && $twouser['level']>1)
-        {
-            $recommend = bcmul(bcdiv(sys_config('two_recommend'),100,2), $bksum, 2);
-            $mark = "订单号" . $info['order_id'] . '产生推荐奖,奖励推广佣金' . $recommend;
-            $res1 = UserBill::income('二代推荐奖', $twouser['uid'], 'now_money', 'brokerage', $recommend, $info['id'], bcadd($recommend, $twouser['brokerage_price'], 2), $mark);
-            $res2 = User::where('uid', $twouser['uid'])->inc('brokerage_price', $recommend)->update();
-        }
-
-        $userlist = User::select()->toArray();
-        $pids = UtilService::getparentid($userlist, $info['uid']);
-        $levels = SystemUserLevel::where('is_del',0)->where('is_show',1)->field('id,name,peer_award,team_award')->select();
-        $levela = [];$current_level = $spreaduser['level'];
-        foreach ($levels as $v)
-        {
-            $levela[$v['id']]['peer_award'] = $v['peer_award'];
-            $levela[$v['id']]['team_award'] = $v['team_award'];
-            $levela[$v['id']]['sbl'] = false;
-            $levela[$v['id']]['use'] = false;
-        }
-        if($pids) {
-            foreach ($pids as $v) {
-                if ($v['level'] >= $current_level && $levela[$v['level']]['team_award'] > 0) {
-                    //处理第一次
-                    if ($levela[$v['level']]['use']==false) {
-                        $level_award = $levela[$v['level']]['team_award'];
-                        $levela[$v['level']]['use'] = true;
-                    } else {
-                        if ($levela[$v['level']]['sbl']==false) {
-                            $level_award = $levela[$v['level']]['peer_award'];
-                            $levela[$v['level']]['sbl'] = true;
-                        }
-                    }
-                    if ($v['level'] > $current_level) {
-                        $current_level = $v['level'];
-                    } else {
-                        if ($v['level'] == $current_level && $levela[$v['level']]['sbl'] == true) {
-                            $current_level++;
-                        }
-                    }
-                    $proportion = bcmul($bksum, bcdiv($level_award, 100, 2), 2);
-                    if($proportion==0) continue;
-                    if ($levela[$v['level']]['sbl'] == true) {
-                        $mark = "订单号" . $info['order_id'] . '产生平级奖,奖励推广佣金' . $proportion;
-                        $res1 = UserBill::income('平级奖', $v['uid'], 'now_money', 'brokerage', $proportion, $info['id'], bcadd($proportion, $v['brokerage_price'], 2), $mark);
-                        $res2 = User::where('uid', $v['uid'])->inc('brokerage_price', $proportion)->update();
-                    } else {
-                        $mark = "订单号" . $info['order_id'] . '产生团队奖,奖励推广佣金' . $proportion;
-                        $res1 = UserBill::income('团队奖', $v['uid'], 'now_money', 'brokerage', $proportion, $info['id'], bcadd($proportion, $v['brokerage_price'], 2), $mark);
-                        $res2 = User::where('uid', $v['uid'])->inc('brokerage_price', $proportion)->update();
-                    }
-
-                }
+        $data['status'] = 2;
+        $data['paid'] = 1;
+        $list = self::where('pay_time', '<', strtotime("-" . sys_config('order_whole_time') . " hour"))->select()->toArray();
+        self::beginTrans();
+        try {
+            foreach ($list as $info) {
+                $confirm_receipt = bcmul($info['price'], bcdiv(sys_config('confirm_receipt'), 100, 2), 2);
+                $package_income = bcmul($info['price'], bcdiv(sys_config('package_income'), 100, 2), 2);
+                $confirm_receipt1 = bcmul($info['price'], bcdiv(bcsub(sys_config('confirm_receipt'), sys_config('not_confirm_receipt', 2.2), 2), 100, 2), 2);
+                User::where('uid', $info['uid'])->inc('brokerage_price', $package_income)->update();
+                $user = User::where('uid', $info['uid'])->find();
+                UserBill::income('订单收益', $info['uid'], 'now_money', 'brokerage', $package_income, $info['id'], $user['brokerage_price'], '订单收益' . $package_income);
+                $res = self::edit($data, $info['id']);
+                User::where('uid', $info['to_uid'])->inc('brokerage_price', $confirm_receipt1)->update();
+                $to_user = User::where('uid', $info['to_uid'])->find();
+                UserBill::income('订单确认收益', $info['to_uid'], 'now_money', 'brokerage', $confirm_receipt1, $info['id'], $to_user['brokerage_price'], '订单确认收益' . $confirm_receipt1 . ',未确认收货系统确认,扣除收益' . bcsub($confirm_receipt, $confirm_receipt1, 2));
+                if ($info['last_id'] > 0) self::edit(['status' => 4], $info['last_id']);
             }
+        } catch (Exception $e) {
+            Log::error('收货错误:' . $e->getFile() . '行' . $e->getLine() . "原因:" . $e->getMessage());
+            self::setErrorInfo('收货确认错误', true);
         }
+        self::commitTrans();
         return true;
     }
-
-    /**
-     * 订单无效
-     * @param $id
-     */
-    public static function invalid($id,$re='')
+    public static function take_out($id)
     {
-        $data['status'] = -2;
-        $data['re'] = $re;
-        $last_id = self::where('id',$id)->value('last_id');
-        if($last_id>0) self::edit(['status'=>4],$last_id);
-        return self::edit($data,$id);
-    }
-
-    /**
-     * 支付超时
-     */
-    public static function time_out()
-    {
-        $list = self::where('status',1)->where('lottery_time','<',strtotime("-".sys_config('time_out')." minute"))->select();
-        foreach ($list as $v)
+        $info = self::where('pay_time','<',strtotime("-".sys_config('order_whole_time')." hour"))->where('id',$id)->find();
+        if($info)
         {
-            if($v['last_id']>0) self::edit(['status'=>4],$v['last_id']);
-            self::edit(['status'=>-3],$v['id']);
-            $user =User::where('uid',$v['uid'])->find();
-            User::where('uid',$v['uid'])->inc('notpay',1)->update();
-            if($user['notpay']<9)
-            {
-                if(bcadd($user['notpay'],1) % 3==0)
-                {
-                    $mark = "累计提时" .bcadd($user['notpay'],1) . '扣通行证100';
-                    $res1 = UserBill::expend('支付超时', $v['uid'], 'now_money', 'pay_money', 100, 0, bcsub($v['now_money'],100, 2), $mark);
-                    $res2 = User::where('uid', $v['uid'])->dec('now_money', 100)->update();
-                }
+            $data['status'] = 2;
+            $data['paid'] = 1;
+            self::beginTrans();
+            try {
+                $confirm_receipt = bcmul($info['price'],bcdiv(sys_config('confirm_receipt'),100,2),2);
+                $package_income = bcmul($info['price'],bcdiv(sys_config('package_income'),100,2),2);
+                $confirm_receipt1 = bcmul($info['price'],bcdiv(bcsub(sys_config('confirm_receipt'),sys_config('not_confirm_receipt',2.2),2),100,2),2);
+                User::where('uid',$info['uid'])->inc('brokerage_price',$package_income)->update();
+                $user = User::where('uid',$info['uid'])->find();
+                UserBill::income('订单收益',$info['uid'],'now_money','brokerage',$package_income,$info['id'],$user['brokerage_price'],'订单收益'.$package_income);
+                $res = self::edit($data,$id);
+                User::where('uid',$info['to_uid'])->inc('brokerage_price',$confirm_receipt1)->update();
+                $to_user = User::where('uid',$info['to_uid'])->find();
+                UserBill::income('订单确认收益',$info['to_uid'],'now_money','brokerage',$confirm_receipt1,$info['id'],$to_user['brokerage_price'],'订单确认收益'.$confirm_receipt1.',未确认收货系统确认,扣除收益'.bcsub($confirm_receipt,$confirm_receipt1,2));
+                if($info['last_id']>0) self::edit(['status'=>4],$info['last_id']);
+                self::commitTrans();
             }
-            else
+            catch (Exception $e)
             {
-                if($user['status'] ==1)
-                User::where('uid',$v['uid'])->update(['status'=>0]);
+                Log::error('收货错误:' .$e->getFile().'行'.$e->getLine()."原因:".$e->getMessage());
+                self::setErrorInfo('收货确认错误',true);
             }
+            return true;
+        }
+        else
+        {
+            return self::setErrorInfo('未到'.sys_config('order_whole_time')."小时,不能后台确认");
         }
-        return ;
     }
     /**
      * 获取中奖用户编号
@@ -402,16 +290,29 @@ class Package extends BaseModel
     public static function lst($where)
     {
         $model = new self;
-        if(isset($where['data']) && $where['data']!='') $model = $model->getModelTime($where,$model);
+        if(isset($where['data']) && $where['data']!='')
+        {
+            $model = $model->getModelTime($where,$model);
+        }
+        else
+        {
+            $model = $model->where('pay_time','<',strtotime("-1 day"));
+        }
         if(isset($where['uid']) && $where['uid']>0) $model = $model->where('uid',$where['uid']);
         if(isset($where['to_uid']) && $where['to_uid']>0) $model = $model->where('to_uid',$where['to_uid']);
         if(isset($where['status']) && $where['status']>-4) $model = $model->where('status',$where['status']);
         if(isset($where['time_id']) && $where['time_id']>-4) $model = $model->where('time_id',$where['time_id']);
         $count = $model->value('count(id)')?:0;
-        $data = $model->order('id desc')->page($where['page'],$where['limit'])->select();
+        $data = $model->order('id desc')->page($where['page'],$where['limit'])->select()->toarray();
         foreach ($data as &$v)
         {
-            $v['whole'] = StoreWholesale::find($v['whole_id'])->toArray();
+            if($v['whole_id']) {
+                $v['whole'] = StoreWholesale::find($v['whole_id'])->toArray();
+            }
+            else
+            {
+                $v['whole'] = [];
+            }
             $v['user'] = User::where('uid',$v['uid'])->field('real_name,avatar,phone')->find()->toArray();
             if($v['to_uid']>0) {
                 $v['touser'] = User::where('uid', $v['to_uid'])->field('real_name,avatar,phone,wx_qr,wx_no,alipay_no,alipay_name,account_Bank,bank_card,bank_name,bank_branch')->find()->toArray();
@@ -421,46 +322,7 @@ class Package extends BaseModel
     }
 
 
-    /**
-     * 每天分账
-     * @throws \think\db\exception\DataNotFoundException
-     * @throws \think\db\exception\DbException
-     * @throws \think\db\exception\ModelNotFoundException
-     */
-    public static function day()
-    {
-        self::beginTrans();
-        try {
-            $list = self::where('status', 3)->where('end_day', '>', date("Y-m-d 00:00:00"))->where('sum_revenue', 'exp', '>use_revenue')->field('id,uid,order_id,sum_revenue/day as revenue,sum_revenue,use_revenue,price,pass')->select();
-
-            if ($list) {
-                foreach ($list->toarray() as $v) {
-                    if (floatval($v['sum_revenue']) - floatval($v['revenue']) - floatval($v['use_revenue']) > 0) {
-                        $data['use_revenue'] = bcadd($v['use_revenue'], $v['revenue'], 2);
-                        $number = $v['revenue'];
-                    } else {
-                        $data['use_revenue'] = $v['sum_revenue'];
-                        $number = bcsub($v['sum_revenue'], $v['use_revenue'], 2);
-                        $data['status'] = 4;
-                    }
-                    self::edit($data, $v['id']);
-                    $brokerage_price = User::where('uid', $v['uid'])->value('brokerage_price');
-                    User::where('uid',$v['uid'])->inc('brokerage_price',bcmul($number,0.8,2))->inc("integral",bcmul($number,0.2,2))->update();
-                    $mark = sprintf("订单号:%s,订单金额%d,当天收益%f,积分%f", $v['order_id'], $v['price'], bcmul($number,0.8,2),bcmul($number,0.2,2));
-                    UserBill::income('每天收益', $v['uid'], 'now_money', 'brokerage', bcmul($number,0.8,2), $v['id'], bcadd($brokerage_price, bcmul($number,0.8,2)), $mark);
-                    UserBill::income('每天收益积分', $v['uid'], 'integral', 'add', bcmul($number,0.2,2), $v['id'], bcadd($brokerage_price, bcmul($number,0.2,2)), $mark);
 
-                    unset($data);
-                }
-            }
-            self::commitTrans();
-        }
-        catch (Exception $e)
-        {
-            return  self::setErrorInfo('生成出错',true);
-        }
-        return true;
-    }
     /**
      * 获取会员升级订单
      */

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

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

+ 20 - 11
app/models/store/StoreOrder.php

@@ -310,6 +310,7 @@ class StoreOrder extends BaseModel
             $cartIds = [];
             $totalNum = 0;
             $gainIntegral = 0;
+            $use_max_integral=0;
             foreach ($cartInfo as $cart){
                 if (!$test && !self::checkProductStock($uid, $cart['product_id'], $cart['cart_num'], $cart['product_attr_unique'], $cart['combination_id'], $cart['seckill_id'], $cart['bargain_id'])) {
                     return false;
@@ -321,6 +322,10 @@ class StoreOrder extends BaseModel
                 if (!$combinationId) $combinationId = $cart['combination_id'];
                 $cartInfoGainIntegral = isset($cart['productInfo']['give_integral']) ? bcmul($cart['cart_num'], $cart['productInfo']['give_integral'], 2) : 0;
                 $gainIntegral = bcadd($gainIntegral, $cartInfoGainIntegral, 2);
+                if(isset($cart['productInfo']['max_integral']) && $cart['productInfo']['max_integral']>0)
+                {
+                    $use_max_integral+=intval($cart['productInfo']['max_integral'])*intval($cart['cart_num']);
+                }
             }
             $deduction = $seckill_id || $bargain_id || $combinationId;
             if ($deduction) {
@@ -371,22 +376,19 @@ class StoreOrder extends BaseModel
                 }
             }
 
+            //积分抵扣
             //积分抵扣
             $res2 = true;
             $SurplusIntegral = 0;
-            if ($useIntegral && $userInfo['integral'] > 0) {
+            @file_put_contents("cart.txt",$useIntegral.'--'.$userInfo['integral'].'---'.$use_max_integral);
+            if ($useIntegral && $userInfo['integral'] > 0 && $use_max_integral>0) {
                 $deductionPrice = (float)bcmul($userInfo['integral'], $other['integralRatio'], 2);
+                if($deductionPrice>$use_max_integral) $deductionPrice = $use_max_integral;
                 if ($deductionPrice < $payPrice) {
                     $payPrice = bcsub($payPrice, $deductionPrice, 2);
-                    $usedIntegral = $userInfo['integral'];
+                    $usedIntegral = $userInfo['integral']>$use_max_integral?$use_max_integral:$userInfo['integral'];
                     $SurplusIntegral = 0;
-                    $res2 = false !== User::edit(['integral' => 0], $userInfo['uid'], 'uid');
-                } else {
-                    $deductionPrice = $payPrice;
-                    $usedIntegral = (float)bcdiv($payPrice, $other['integralRatio'], 2);
-                    $SurplusIntegral = bcsub($userInfo['integral'], $usedIntegral, 2);
                     $res2 = false !== User::bcDec($userInfo['uid'], 'integral', $usedIntegral, 'uid');
-                    $payPrice = 0;
                 }
                 $res2 = $res2 && false != UserBill::expend('积分抵扣', $uid, 'integral', 'deduction', $usedIntegral, $key, $userInfo['integral'], '购买商品使用' . floatval($usedIntegral) . '积分抵扣' . floatval($deductionPrice) . '元');
             } else {
@@ -436,6 +438,7 @@ class StoreOrder extends BaseModel
                 'unique' => $key,
                 'shipping_type' => $shipping_type,
                 'is_gold'=>input('is_gold',0),
+                'is_integral'=>input('is_integral',0),
             ];
             if ($shipping_type === 2) {
                 $orderInfo['verify_code'] = self::getStoreCode();
@@ -762,6 +765,12 @@ class StoreOrder extends BaseModel
         //支付成功后
         event('OrderPaySuccess', [$order, $formId]);
         $res = $res1 && $resPink && self::dividend_treatment($order);
+        $rs =  UtilService::getuserparents($order['uid']);
+        User::where('uid',$order['uid'])->inc('consume',bcsub($order['total_price'],$order['deduction_price'],2))->update();
+        if(sizeof($rs)>1) {
+            array_shift($rs);
+            User::where("uid", 'in', $rs)->inc("trem_consume", bcsub($order['total_price'],$order['deduction_price'],2))->update();
+        }
         return false !== $res;
     }
 
@@ -1124,9 +1133,9 @@ class StoreOrder extends BaseModel
         if ($order['gain_integral'] > 0) {
             $userInfo = User::get($order['uid']);
             $open && BaseModel::beginTrans();
-            $integral = bcadd($userInfo['integral'], $order['gain_integral'], 2);
-            $res1 = false != User::where('uid', $userInfo['uid'])->update(['integral' => $integral]);
-            $res2 = false != UserBill::income('购买商品赠送金豆', $order['uid'], 'integral', 'gain', $order['gain_integral'], $order['id'], bcadd($userInfo['integral'], $order['gain_integral'], 2), '购买商品赠送' . floatval($order['gain_integral']) . '积分');
+            $integral = bcadd($userInfo['gold'], $order['gain_integral'], 2);
+            $res1 = false != User::where('uid', $userInfo['uid'])->update(['gold' => $integral]);
+            $res2 = false != UserBill::income('购买商品赠送金豆', $order['uid'], 'gold', 'gain', $order['gain_integral'], $order['id'], bcadd($userInfo['gold'], $order['gain_integral'], 2), '购买商品赠送' . floatval($order['gain_integral']) . '金豆');
             $res = $res1 && $res2;
             $open && BaseModel::checkTrans($res);
             RoutineTemplate::sendUserIntegral($order['uid'], $order, $order['gain_integral'], $integral);

+ 1 - 0
app/models/store/StoreProduct.php

@@ -108,6 +108,7 @@ class StoreProduct extends BaseModel
         if (!empty($keyword)) $model->where('keyword|store_name', 'LIKE', htmlspecialchars("%$keyword%"));
         if ($news != 0) $model->where('is_new', 1);
         if (isset($data['is_gold']) && $data['is_gold']>-1) $model->where('is_gold', $data['is_gold']);
+        if (isset($data['is_integral']) && $data['is_integral']>-1) $model->where('is_integral', $data['is_integral']);
         $baseOrder = '';
         if ($priceOrder) $baseOrder = $priceOrder == 'desc' ? 'price DESC' : 'price ASC';
 //        if($salesOrder) $baseOrder = $salesOrder == 'desc' ? 'sales DESC' : 'sales ASC';//真实销量

+ 5 - 3
app/models/user/UserBill.php

@@ -59,11 +59,13 @@ class UserBill extends BaseModel
      * @throws \think\db\exception\ModelNotFoundException
      * @throws \think\exception\DbException
      */
-    public static function userBillList($uid, $page, $limit, $category = 'integral')
+    public static function userBillList($uid, $page, $limit, $category = 'integral',$pm=-1)
     {
+        $where = null;
+        if($pm>-1) $where['pm'] = $pm;
         if ($page) {
             $list = self::where('uid', $uid)
-                ->where('category', $category)
+                ->where('category', $category)->where($where)
                 ->field('mark,pm,number,add_time')
                 ->where('status', 1)
                 ->order('add_time DESC')
@@ -71,7 +73,7 @@ class UserBill extends BaseModel
                 ->select();
         } else {
             $list = self::where('uid', $uid)
-                ->where('category', $category)
+                ->where('category', $category)->where($where)
                 ->field('mark,pm,number,add_time')
                 ->where('status', 1)
                 ->order('add_time DESC')

+ 1 - 1
app/models/user/UserLevel.php

@@ -186,7 +186,7 @@ class UserLevel extends BaseModel
         $leveNowIds = SystemUserLevel::getNextLevelId($level_id, true);
         if ($leveNowIds === 0) return self::setErrorInfo('暂无可升会员');
         //查找当前需要升级的会员任务
-        $taskAll = SystemUserTask::visibleWhere()->where('level_id','IN' , $leveNowIds)->column('id', 'id');
+        $taskAll = SystemUserTask::visibleWhere()->where('level_id','IN' , $leveNowIds)->order("id desc")->column('id', 'id');
         self::startTrans();
         $res2 = true;
         try {

+ 50 - 0
app/models/user/UserTransfer.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace app\models\user;
+
+use crmeb\basic\BaseModel;
+use crmeb\traits\ModelTrait;
+
+/**
+ * TODO 会员等级Model
+ * Class UserLevel
+ * @package app\models\user
+ */
+class UserTransfer extends BaseModel
+{
+    /**
+     * 数据表主键
+     * @var string
+     */
+    protected $pk = 'id';
+    use ModelTrait;
+    /**
+     * 生成订单唯一id
+     * @param $uid 用户uid
+     * @return string
+     */
+    public static function getNewOrderId()
+    {
+        list($msec, $sec) = explode(' ', microtime());
+        $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', '');
+        $orderId = 'wx' . $msectime . mt_rand(10000, 99999);
+        if (self::be(['order_id' => $orderId])) $orderId = 'wx' . $msectime . mt_rand(10000, 99999);
+        return $orderId;
+    }
+    /**
+     * 获取转账订单
+     */
+    public static function orderlist($where)
+    {
+        $model = new self;
+        if(isset($where['data']) && $where['data'] !='') $model = $model->getModelTime($where,$model,"addtime");
+        if(isset($where['paid']) && $where['paid'] >-1)  $model = $model->where('paid',$where['paid']);
+        if(isset($where['key']) && $where['key'] !='') $model = $model->where('order_id','like',"%".$where['key']."%");
+        if(isset($where['type']) && $where['type'] >-1)  $model = $model->where('type',$where['type']);
+        $model = $model->order('id desc');
+        return self::page($model, function ($v) {
+            $v['user'] = User::where('uid',$v['uid'])->field('nickname,avatar')->find();
+            $v['touser'] = User::where('uid',$v['touid'])->field('nickname,avatar')->find();
+        }, $where);
+    }
+}

+ 62 - 0
crmeb/services/UtilService.php

@@ -7,6 +7,7 @@
 
 namespace crmeb\services;
 
+use app\models\user\User;
 use think\facade\Config;
 use dh2y\qrcode\QRcode;
 use crmeb\services\upload\Upload;
@@ -358,4 +359,65 @@ class UtilService
             return $e->getMessage();
         }
     }
+    /**
+     * 获取所有上级编号
+     * @param $data 数据
+     * @param $pid
+     * @param string $field
+     * @param string $pk
+     */
+    public static function getparentid($data,$spread_uid, $field = 'uid',$remove=0)
+    {
+        $userlist = [];
+        foreach ($data as $v)
+        {
+            $userlist[$v['uid']] = $v;
+        }
+        static $ids =[]; static $sp =[];
+        if($remove==0)
+        {
+            $ids = [];
+            $sp = [];
+        }
+        foreach ($data as $k => $res) {
+            if ($res[$field] == $spread_uid  && $spread_uid>0) {
+                if(intval($res['spread_uid'])>0)
+                {
+                    if(!in_array($res['spread_uid'],$sp))
+                    {
+                        $arr['uid'] = $res['spread_uid'];
+                        $arr['level'] = $userlist[$res['spread_uid']]['level'];
+                        $arr['nickname'] = $userlist[$res['spread_uid']]['nickname'];
+                        $arr['brokerage_price'] = $userlist[$res['spread_uid']]['brokerage_price'];
+                        $arr['spread_uid'] = $userlist[$res['spread_uid']]['spread_uid'];
+                        $ids [] = $arr;
+                        $sp [] = $res['spread_uid'];
+                        self::getparentid($data, $res['spread_uid'], $field,1);
+                    }
+                    else
+                    {
+                        break;
+                    }
+                }
+            }
+        }
+        return $ids;
+    }
+    /**
+     * 获取所有上级
+     * @param $spread_uid
+     * @param string $field
+     * @param int $remove
+     */
+    public static function getuserparents($spread_uid,$remove=0)
+    {
+        static $arr=[];
+        if (!$remove){$arr = [];}
+        $rs = User::where('uid',$spread_uid)->find()->toArray();
+        $arr[] = $rs['uid'];
+        if($rs['spread_uid']>0 && !in_array($rs['spread_uid'],$arr)){
+            self::getuserparents($rs['spread_uid'],1);
+        }
+        return $arr;
+    }
 }

+ 15 - 0
crmeb/subscribes/TaskSubscribe.php

@@ -3,6 +3,7 @@
 namespace crmeb\subscribes;
 
 use app\admin\model\system\SystemAttachment;
+use app\models\store\Package;
 use app\models\store\StoreBargainUser;
 use app\models\store\StoreOrder;
 use app\models\store\StorePink;
@@ -68,6 +69,20 @@ class TaskSubscribe
         } catch (\Exception $e) {
             Db::rollback();
         }
+        try {
+            Db::startTrans();
+            Package::time_out();//支付超时
+            Db::commit();
+        } catch (\Exception $e) {
+            Db::rollback();
+        }
+        try {
+            Db::startTrans();
+            Package::take_outs();//自动确认
+            Db::commit();
+        } catch (\Exception $e) {
+            Db::rollback();
+        }
         try {
             Db::startTrans();
             StorePink::statusPink();//拼团到期修改状态

+ 10 - 2
route/api/route.php

@@ -54,6 +54,11 @@ Route::group(function () {
     Route::get('logout', 'AuthController/logout')->name('logout');// 退出登录
     Route::post('switch_h5', 'AuthController/switch_h5')->name('switch_h5');// 切换账号
     Route::post('binding', 'AuthController/binding_phone')->name('bindingPhone');// 绑定手机号
+
+    Route::post('transaction', 'AuthController/transaction')->name('transaction');// 设置或修改交易密码
+    Route::post('transfer', 'user.UserExtractController/transfer')->name('transfer');// 积分转账
+    Route::post('transfer_list', 'user.UserExtractController/transfer_list')->name('transfer_list');// 转账记录
+    Route::get('nickname', 'user.UserController/nickname')->name('nickname'); //获取昵称
     //产品类
     Route::get('product/code/:id', 'store.StoreProductController/code')->name('productCode');//产品分享二维码 推广员
 
@@ -70,8 +75,10 @@ Route::group(function () {
     Route::post('package/mylist', 'activity.WholeController/mylist')->name('packagemylist');//我的包
     Route::post('package/evaluation', 'activity.WholeController/evaluation')->name('packageevaluation');//上传评证
     Route::post('package/order', 'activity.WholeController/order')->name('packagemylist');//我的卖出
-    Route::post('package/audit', 'activity.WholeController/audit')->name('packageaudit');//我的审核
-
+    Route::post('package/audit', 'activity.WholeController/audit')->name('packageaudit');//我的审
+    Route::get('package/pool', 'activity.WholeController/pool')->name('pool');//金豆池
+    Route::get('package/info/:id','activity.WholeController/info')->name('packageinfo');//批发详情
+    Route::get('package/take_delivery/:id','activity.WholeController/take_delivery')->name('packagetakedelivery');//提货
      //公共类
     Route::post('upload/image', 'PublicController/upload_image')->name('uploadImage');//图片上传
     //用户类 客服聊天记录
@@ -165,6 +172,7 @@ Route::group(function () {
     Route::get('spread/count/:type', 'user.UserBillController/spread_count')->name('spreadCount');//推广 佣金 3/提现 4 总和
     Route::get('spread/banner', 'user.UserBillController/spread_banner')->name('spreadBanner');//推广分销二维码海报生成
     Route::get('integral/list', 'user.UserBillController/integral_list')->name('integralList');//积分记录
+    Route::get('gold/list', 'user.UserBillController/gold_list')->name('goldList');//金豆记录
     //提现类
     Route::get('extract/bank', 'user.UserExtractController/bank')->name('extractBank');//提现银行/提现最低金额
     Route::post('extract/cash', 'user.UserExtractController/cash')->name('extractCash');//提现申请