* @day: 2017/12/21 */ namespace app\wap\controller; use Api\Express; use app\admin\model\system\SystemConfig; use app\wap\model\store\StoreBargainUser; use app\wap\model\store\StoreBargainUserHelp; use app\wap\model\store\StoreCombination; use app\wap\model\store\StoreOrderCartInfo; use app\wap\model\store\StorePink; use app\wap\model\store\StoreProduct; use app\wap\model\store\StoreProductRelation; use app\wap\model\store\StoreProductReply; use app\wap\model\store\StoreCouponUser; use app\wap\model\store\StoreOrder; use app\wap\model\user\User; use app\wap\model\user\UserBill; use app\wap\model\user\UserExtract; use app\wap\model\user\UserNotice; use app\core\util\GroupDataService; use app\wap\model\user\UserAddress; use app\wap\model\user\UserSign; use service\CacheService; use app\core\util\SystemConfigService; use think\Request; use think\Url; class My extends AuthController { public function user_cut(){ $list = StoreBargainUser::getBargainUserAll($this->userInfo['uid']); if($list){ foreach ($list as $k=>$v){ $list[$k]['con_price'] = bcsub($v['bargain_price'],$v['price'],2); $list[$k]['helpCount'] = StoreBargainUserHelp::getBargainUserHelpPeopleCount($v['bargain_id'],$this->userInfo['uid']); } $this->assign('list',$list); }else return $this->failed('暂无参与砍价',Url::build('My/index')); return $this->fetch(); } public function index() { // echo date('Y-m-d,H:i:s',1521516681); $this->assign([ 'menus'=>GroupDataService::getData('my_index_menu')?:[], 'orderStatusNum'=>StoreOrder::getOrderStatusNum($this->userInfo['uid']), 'notice'=>UserNotice::getNotice($this->userInfo['uid']), 'statu' =>(int)SystemConfig::getValue('store_brokerage_statu'), ]); return $this->fetch(); } public function sign_in() { $signed = UserSign::checkUserSigned($this->userInfo['uid']); $signCount = UserSign::userSignedCount($this->userInfo['uid']); $signList = UserSign::userSignBillWhere($this->userInfo['uid']) ->field('number,add_time')->order('id DESC') ->limit(30)->select()->toArray(); $goodsList = StoreProduct::getNewProduct('image,price,sales,store_name,id','0,20')->toArray(); $this->assign(compact('signed','signCount','signList','goodsList')); return $this->fetch(); } public function coupon() { $uid = $this->userInfo['uid']; $couponList = StoreCouponUser::all(function($query) use($uid){ $query->where('status','0')->where('uid',$uid)->order('is_fail ASC,status ASC,add_time DESC')->whereOr(function($query) use($uid){ $query->where('uid',$uid)->where('status','<>',0)->where('end_time','>',time()-(7*86400)); }); })->toArray(); $couponList = StoreCouponUser::tidyCouponList($couponList); $this->assign([ 'couponList'=>$couponList ]); return $this->fetch(); } public function collect() { return $this->fetch(); } public function address() { $this->assign([ 'address'=>UserAddress::getUserValidAddressList($this->userInfo['uid'],'id,real_name,phone,province,city,district,detail,is_default') ]); return $this->fetch(); } public function recharge() { return $this->fetch(); } public function edit_address($addressId = '') { if($addressId && is_numeric($addressId) && UserAddress::be(['is_del'=>0,'id'=>$addressId,'uid'=>$this->userInfo['uid']])){ $addressInfo = UserAddress::find($addressId)->toArray(); }else{ $addressInfo = []; } $this->assign(compact('addressInfo')); return $this->fetch(); } public function order($uni = '') { if(!$uni || !$order = StoreOrder::getUserOrderDetail($this->userInfo['uid'],$uni)) return $this->redirect(Url::build('order_list')); $this->assign([ 'order'=>StoreOrder::tidyOrder($order,true) ]); return $this->fetch(); } public function orderPinkOld($uni = '') { if(!$uni || !$order = StoreOrder::getUserOrderDetail($this->userInfo['uid'],$uni)) return $this->redirect(Url::build('order_list')); $this->assign([ 'order'=>StoreOrder::tidyOrder($order,true) ]); return $this->fetch('order'); } public function order_list() { return $this->fetch(); } public function order_reply($unique = '') { if(!$unique || !StoreOrderCartInfo::be(['unique'=>$unique]) || !($cartInfo = StoreOrderCartInfo::where('unique',$unique)->find())) return $this->failed('评价产品不存在!'); $this->assign(['cartInfo'=>$cartInfo]); return $this->fetch(); } public function balance() { $this->assign([ 'userMinRecharge'=>SystemConfigService::get('store_user_min_recharge') ]); return $this->fetch(); } public function integral() { return $this->fetch(); } public function spread_list() { $statu = (int)SystemConfig::getValue('store_brokerage_statu'); if($statu == 1){ if(!User::be(['uid'=>$this->userInfo['uid'],'is_promoter'=>1])) return $this->failed('没有权限访问!'); } $this->assign([ 'total'=>User::where('spread_uid',$this->userInfo['uid'])->count() ]); return $this->fetch(); } public function notice() { return $this->fetch(); } public function express($uni = '') { if(!$uni || !($order = StoreOrder::getUserOrderDetail($this->userInfo['uid'],$uni))) return $this->failed('查询订单不存在!'); if($order['delivery_type'] != 'express' || !$order['delivery_id']) return $this->failed('该订单不存在快递单号!'); $cacheName = $uni.$order['delivery_id']; $result = CacheService::get($cacheName,null); if($result === null){ $result = Express::query($order['delivery_id']); if(is_array($result) && isset($result['result']) && isset($result['result']['deliverystatus']) && $result['result']['deliverystatus'] >= 3) $cacheTime = 0; else $cacheTime = 1800; CacheService::set($cacheName,$result,$cacheTime); } $this->assign([ 'order'=>$order, 'express'=>$result ]); return $this->fetch(); } public function user_pro() { $statu = (int)SystemConfig::getValue('store_brokerage_statu'); if($statu == 1){ if(!User::be(['uid'=>$this->userInfo['uid'],'is_promoter'=>1])) return $this->failed('没有权限访问!'); } $userBill = new UserBill(); $number = $userBill->where('uid',$this->userInfo['uid']) ->where('add_time','BETWEEN',[strtotime('today -1 day'),strtotime('today')]) ->where('category','now_money') ->where('type','brokerage') ->value('SUM(number)')?:0; $allNumber = $userBill ->where('uid',$this->userInfo['uid']) ->where('category','now_money') ->where('type','brokerage') ->value('SUM(number)')?:0; $extractNumber = UserExtract::userExtractTotalPrice($this->userInfo['uid']); $this->assign([ 'number'=>$number, 'allnumber'=>$allNumber, 'extractNumber'=>$extractNumber ]); return $this->fetch(); } public function commission() { $uid = (int)Request::instance()->get('uid',0); if(!$uid) return $this->failed('用户不存在!'); $this->assign(['uid'=>$uid]); return $this->fetch(); } public function extract() { $minExtractPrice = floatval(SystemConfigService::get('user_extract_min_price'))?:0; $extractInfo = UserExtract::userLastInfo($this->userInfo['uid'])?:[ 'extract_type'=>'bank', 'real_name'=>'', 'bank_code'=>'', 'bank_address'=>'', 'alipay_code'=>'' ]; $this->assign(compact('minExtractPrice','extractInfo')); return $this->fetch(); } /** * 创建拼团 * @param string $uni */ // public function createPink($uni = ''){ // if(!$uni || !$order = StoreOrder::getUserOrderDetail($this->userInfo['uid'],$uni)) return $this->redirect(Url::build('order_list')); // $order = StoreOrder::tidyOrder($order,true)->toArray(); // if($order['pink_id']){//拼团存在 // $res = false; // $pink['uid'] = $order['uid'];//用户id // if(StorePink::isPinkBe($pink,$order['pink_id'])) return $this->redirect('order_pink',['id'=>$order['pink_id']]); // $pink['order_id'] = $order['order_id'];//订单id 生成 // $pink['order_id_key'] = $order['id'];//订单id 数据库id // $pink['total_num'] = $order['total_num'];//购买个数 // $pink['total_price'] = $order['pay_price'];//总金额 // $pink['k_id'] = $order['pink_id'];//拼团id // foreach ($order['cartInfo'] as $v){ // $pink['cid'] = $v['combination_id'];//拼团产品id // $pink['pid'] = $v['product_id'];//产品id // $pink['people'] = StoreCombination::where('id',$v['combination_id'])->value('people');//几人拼团 // $pink['price'] = $v['productInfo']['price'];//单价 // $pink['stop_time'] = 0;//结束时间 // $pink['add_time'] = time();//开团时间 // $res = StorePink::set($pink)->toArray(); // } // if($res) $this->redirect('order_pink',['id'=>$res['id']]); // else $this->failed('创建拼团失败,请退款后再次拼团',Url::build('my/index')); // $this->redirect('order_pink',['id'=>$order['pink_id']]); // }else{ // $res = false; // $pink['uid'] = $order['uid'];//用户id // $pink['order_id'] = $order['order_id'];//订单id 生成 // $pink['order_id_key'] = $order['id'];//订单id 数据库id // $pink['total_num'] = $order['total_num'];//购买个数 // $pink['total_price'] = $order['pay_price'];//总金额 // $pink['k_id'] = 0;//拼团id // foreach ($order['cartInfo'] as $v){ // $pink['cid'] = $v['combination_id'];//拼团产品id // $pink['pid'] = $v['product_id'];//产品id // $pink['people'] = StoreCombination::where('id',$v['combination_id'])->value('people');//几人拼团 // $pink['price'] = $v['productInfo']['price'];//单价 // $pink['stop_time'] = time()+86400;//结束时间 // $pink['add_time'] = time();//开团时间 // $res1 = StorePink::set($pink)->toArray(); // $res2 = StoreOrder::where('id',$order['id'])->update(['pink_id'=>$res1['id']]); // $res = $res1 && $res2; // } // if($res) $this->redirect('order_pink',['id'=>$res1['id']]); // else $this->failed('创建拼团失败,请退款后再次拼团',Url::build('my/index')); // } // } /** * 参团详情页 */ public function order_pink($id = 0){ if(!$id) return $this->failed('参数错误',Url::build('my/index')); $pink = StorePink::getPinkUserOne($id); if(isset($pink['is_refund']) && $pink['is_refund']) { if($pink['is_refund'] != $pink['id']){ $id = $pink['is_refund']; return $this->order_pink($id); }else{ return $this->failed('订单已退款',Url::build('store/combination_detail',['id'=>$pink['cid']])); } } if(!$pink) return $this->failed('参数错误',Url::build('my/index')); $pinkAll = array();//参团人 不包括团长 $pinkT = array();//团长 if($pink['k_id']){ $pinkAll = StorePink::getPinkMember($pink['k_id']); $pinkT = StorePink::getPinkUserOne($pink['k_id']); }else{ $pinkAll = StorePink::getPinkMember($pink['id']); $pinkT = $pink; } $store_combination = StoreCombination::getCombinationOne($pink['cid']);//拼团产品 $count = count($pinkAll)+1; $count = (int)$pinkT['people']-$count;//剩余多少人 $is_ok = 0;//判断拼团是否完成 $idAll = array(); $uidAll = array(); if(!empty($pinkAll)){ foreach ($pinkAll as $k=>$v){ $idAll[$k] = $v['id']; $uidAll[$k] = $v['uid']; } } $userBool = 0;//判断当前用户是否在团内 0未在 1在 $pinkBool = 0;//判断当前用户是否在团内 0未在 1在 $idAll[] = $pinkT['id']; $uidAll[] = $pinkT['uid']; if($pinkT['status'] == 2){ $pinkBool = 1; }else{ if(!$count){//组团完成 $idAll = implode(',',$idAll); $orderPinkStatus = StorePink::setPinkStatus($idAll); if($orderPinkStatus){ if(in_array($this->uid,$uidAll)){ StorePink::setPinkStopTime($idAll); if(StorePink::isTpl($uidAll,$pinkT['id'])) StorePink::orderPinkAfter($uidAll,$pinkT['id']); $pinkBool = 1; }else $pinkBool = 3; }else $pinkBool = 6; } else{ if($pinkT['stop_time'] < time()){//拼团时间超时 退款 if($pinkAll){ foreach ($pinkAll as $v){ if($v['uid'] == $this->uid){ $res = StoreOrder::orderApplyRefund(StoreOrder::where('id',$v['order_id_key'])->value('order_id'),$this->uid,'拼团时间超时'); if($res){ if(StorePink::isTpl($v['uid'],$pinkT['id'])) StorePink::orderPinkAfterNo($v['uid'],$v['k_id']); $pinkBool = 2; }else return $this->failed(StoreOrder::getErrorInfo(),Url::build('index')); } } } if($pinkT['uid'] == $this->uid){ $res = StoreOrder::orderApplyRefund(StoreOrder::where('id',$pinkT['order_id_key'])->value('order_id'),$this->uid,'拼团时间超时'); if($res){ if(StorePink::isTpl($pinkT['uid'],$pinkT['id'])) StorePink::orderPinkAfterNo($pinkT['uid'],$pinkT['id']); $pinkBool = 2; }else return $this->failed(StoreOrder::getErrorInfo(),Url::build('index')); } if(!$pinkBool) $pinkBool = 3; } } } $store_combination_host = StoreCombination::getCombinationHost();//获取推荐的拼团产品 if(!empty($pinkAll)){ foreach ($pinkAll as $v){ if($v['uid'] == $this->uid) $userBool = 1; } } if($pinkT['uid'] == $this->uid) $userBool = 1; $combinationOne = StoreCombination::getCombinationOne($pink['cid']); if(!$combinationOne) return $this->failed('拼团不存在或已下架'); $combinationOne['images'] = json_decode($combinationOne['images'],true); $combinationOne['userLike'] = StoreProductRelation::isProductRelation($combinationOne['product_id'],$this->userInfo['uid'],'like'); $combinationOne['like_num'] = StoreProductRelation::productRelationNum($combinationOne['product_id'],'like'); $combinationOne['userCollect'] = StoreProductRelation::isProductRelation($combinationOne['product_id'],$this->userInfo['uid'],'collect'); $this->assign('storeInfo',$combinationOne); $this->assign('current_pink_order',StorePink::getCurrentPink($id)); $this->assign(compact('pinkBool','is_ok','userBool','store_combination','pinkT','pinkAll','count','store_combination_host')); return $this->fetch(); } /** * 参团详情页 失败或者成功展示页 */ public function order_pink_after($id = 0){ if(!$id) return $this->failed('参数错误',Url::build('my/index')); $pink = StorePink::getPinkUserOne($id); if(!$pink) return $this->failed('参数错误',Url::build('my/index')); $pinkAll = array();//参团人 不包括团长 $pinkT = array();//团长 if($pink['k_id']){ $pinkAll = StorePink::getPinkMember($pink['k_id']); $pinkT = StorePink::getPinkUserOne($pink['k_id']); }else{ $pinkAll = StorePink::getPinkMember($pink['id']); $pinkT = $pink; } $store_combination = StoreCombination::getCombinationOne($pink['cid']);//拼团产品 $count = count($pinkAll)+1; $count = (int)$pinkT['people']-$count;//剩余多少人 $idAll = array(); $uidAll = array(); if(!empty($pinkAll)){ foreach ($pinkAll as $k=>$v){ $idAll[$k] = $v['id']; $uidAll[$k] = $v['uid']; } } $idAll[] = $pinkT['id']; $uidAll[] = $pinkT['uid']; $userBool = 0;//判断当前用户是否在团内是否完成拼团 if(!$count) $userBool = 1;//组团完成 $store_combination_host = StoreCombination::getCombinationHost();//获取推荐的拼团产品 $combinationOne = StoreCombination::getCombinationOne($pink['cid']); if(!$combinationOne) return $this->failed('拼团不存在或已下架'); $combinationOne['images'] = json_decode($combinationOne['images'],true); $combinationOne['userLike'] = StoreProductRelation::isProductRelation($combinationOne['product_id'],$this->userInfo['uid'],'like'); $combinationOne['like_num'] = StoreProductRelation::productRelationNum($combinationOne['product_id'],'like'); $combinationOne['userCollect'] = StoreProductRelation::isProductRelation($combinationOne['product_id'],$this->userInfo['uid'],'collect'); $this->assign('storeInfo',$combinationOne); $this->assign(compact('userBool','store_combination','pinkT','pinkAll','count','store_combination_host')); return $this->fetch(); } /** * 售后服务 退款订单 * @return mixed */ public function order_customer(){ return $this->fetch(); } }