wqData['uniacid']; $list= (new \yii\db\Query()) ->from('{{%ybwm_coupon}}') ->where('deleteAt=0 AND uniacid=:uniacid AND startTime<=:startTime AND endTime>=:endTime AND display=1 AND stock>0',['startTime'=>$now,'endTime'=>$now,':uniacid'=>$uniacid]); $userCoupon=(new \yii\db\Query()) ->select('couponId') ->from('{{%ybwm_user_coupon}}') ->where('(state=:state or useEndTime<:time) AND userId=:userId',[':time'=>$now,':state'=>2,':userId'=>$this->wqData['userId']]) ->all(); $userCouponId = array_column($userCoupon, 'couponId')?:[]; // print_R($userCouponId);die; $list=$list->andWhere(['not in','id',$userCouponId])->offset(($page - 1) * $size)->limit($size)->orderBy('id desc')->all(); for($i=0;$iresult(1,'成功',$list); } //优惠券详情 public function actionCouponInfo(){ $result=axios_request(); $now=time(); if($result['id']){ $list= (new \yii\db\Query()) ->from('{{%ybwm_coupon}}') ->where('id=:id',[':id'=>$result['id']])->one(); $storeArr=[]; $storeArr=(new \yii\db\Query()) ->from('{{%ybwm_store}}') ->where('id=:id',[':id'=>$list['storeId']])->one(); $list['storeName']=$storeArr['name']; if($list['storeType']==1){ $storeArr=(new \yii\db\Query()) ->from('{{%ybwm_store}}')->select('id,name') ->where('id=:id',[':id'=>$list['storeId']])->all(); $list['storeData']=$storeArr; }elseif($list['storeType']==2){ $list['storeData']='全部门店可用,'; }else{ $storeArr=(new \yii\db\Query()) ->from('{{%ybwm_store}}')->select('id,name') ->where(['in','id',json_decode($list['storeArr'])])->all(); $list['storeData']=$storeArr; } $list['explain']=$list['color']; if($list['type']==3){ if($list['goodsArr']){ $outGoods=(new \yii\db\Query()) ->from('{{%ybwm_core_goods}}') ->where(['in','id',json_decode($list['goodsArr'],true)])->all(); $outGoodsName=implode(',',array_column($outGoods,'name')); } if($list['goodsArr2']){ $inGoods=(new \yii\db\Query()) ->from('{{%ybwm_core_goods}}') ->where(['in','id',json_decode($list['goodsArr2'],true)])->all(); $inGoodsName=implode(',',array_column($inGoods,'name')); } $list['goodsName']=$outGoodsName.','.$inGoodsName; } $coupon= (new \yii\db\Query()) ->from('{{%ybwm_user_coupon}}') ->where('couponId=:couponId AND state=2 AND useEndTime>'.time(),[':couponId'=>$result['id']]) ->andWhere(['userId'=> $uniacid=$this->wqData['userId']]) ->one(); if($coupon){ $list['useState']=2;//点击使用 }else{ $list['useState']=1;//点击领取 } if($list['timeType']==1){ //日期范围 $list['useExplain']="有效期至".date("Y-m-d H:i",$list['useEndTime']); }else{ if($list['isNextDay']==1){ $list['useExplain']="领取后".$list['day']."天内有效(次日起)"; }else{ $list['useExplain']="领取后".$list['day']."天内有效"; } } }else{ $list= (new \yii\db\Query()) ->from('{{%ybwm_user_coupon}}') ->where('id=:id',[':id'=>$result['receiveId']])->one(); $coupon= (new \yii\db\Query()) ->from('{{%ybwm_coupon}}') ->where('id=:id',[':id'=>$list['couponId']])->one(); $list['isHx']=$coupon['isHx']; $list['color']=$coupon['color']; $list['useExplain']="有效期".date("Y-m-d H:i",$list['useStartTime'])."至".date("Y-m-d H:i",$list['useEndTime']); if($list['state']==1){ $list['useState']=3;//已使用 }else{ $list['useState']=2;//点击使用 } if($list['useStartTime']>$now){ $list['useState']=4;//未到使用时间 } if($list['useEndTime']<$now){ $list['useState']=5;//已过期 } if($coupon['type']==3){ if($coupon['goodsArr']){ $outGoods=(new \yii\db\Query()) ->from('{{%ybwm_core_goods}}') ->where(['in','id',json_decode($coupon['goodsArr'],true)])->all(); $outGoodsName=implode(',',array_column($outGoods,'name')); } if($coupon['goodsArr2']){ $inGoods=(new \yii\db\Query()) ->from('{{%ybwm_core_goods}}') ->where(['in','id',json_decode($coupon['goodsArr2'],true)])->all(); $inGoodsName=implode(',',array_column($inGoods,'name')); } $list['goodsName']=$outGoodsName.','.$inGoodsName; } $storeArr=[]; $storeArr=(new \yii\db\Query()) ->from('{{%ybwm_store}}') ->where('id=:id',[':id'=>$list['storeId']])->one(); $list['storeName']=$storeArr['name']; if($list['storeType']==1){ $storeArr=(new \yii\db\Query()) ->from('{{%ybwm_store}}')->select('id,name') ->where('id=:id',[':id'=>$list['storeId']])->all(); $list['storeData']=$storeArr; }elseif($list['storeType']==2){ $list['storeData']='全部门店可用,'; }else{ $storeArr=(new \yii\db\Query()) ->from('{{%ybwm_store}}')->select('id,name') ->where(['in','id',json_decode($list['storeArr'])])->all(); $list['storeData']=$storeArr; } $list['explain']=$coupon['color']; } // if($list['goodsType']==2 || $list['goodsType']==3){ // $goodsArr=json_decode($list['goodsArr'],true); // $goods=(new \yii\db\Query()) // ->select('name') // ->from('{{%ybwm_core_goods}}') // ->where(['in','id',$goodsArr]) // ->all(); // } // if($list['goodsType']==4){ // $goodsArr=json_decode($list['goodsArr'],true); // $goods=(new \yii\db\Query()) // ->select('name') // ->from('{{%ybwm_core_category}}') // ->where(['in','id',$goodsArr]) // ->all(); // } return $this->result(1, '成功',$list); } //领取优惠券 public function actionReceiveCoupon(){ $result=axios_request(); $couponId=$result['couponId']; $userId=$this->wqData['userId']; $uniacid=$this->wqData['uniacid']; $now=time(); $coupon=(new \yii\db\Query()) ->from('{{%ybwm_coupon}}') ->where('id=:id',['id'=>$couponId]) ->one(); $user=(new \yii\db\Query()) ->from('{{%ybwm_member}}') ->where('id=:id',[':id'=>$userId])->one(); if($coupon['startTime']>$now || $coupon['endTime']<$now){ return $this->result(2, '活动未到时间不可领取!'); } if($coupon['stock']<=0){ return $this->result(2, '优惠券已领完!'); } if($coupon['memberType']==2){ if(!$user['level']){ return $this->result(2, '该券仅限会员用户领取哦!'); } } if($coupon['memberType']==3){ $userBind=(new \yii\db\Query()) ->from('{{%ybwm_member_bind}}') ->where('userId=:userId AND storeId=:storeId',[':userId'=>$userId,':storeId'=>$coupon['storeId']])->one(); $memberLabel=json_decode($coupon['memberLabel'],true); if(!in_array($userBind['vipLabel'],$memberLabel)){ return $this->result(2, '该券需指定标签用户才能领取!'); } } $myCoupon=(new \yii\db\Query()) ->from('{{%ybwm_user_coupon}}') ->where('couponId=:couponId AND userId=:userId',['userId'=>$userId,'couponId'=>$couponId]) ->count(); if($coupon['maxNum']<=$myCoupon AND $coupon['maxNum']>0){ return $this->result(2, '已达到每人限领次数!'); } $data['couponId']=$couponId; $data['userId']=$userId; $data['type']=$coupon['type']; $data['money']=$coupon['money']?:0; $data['fullMoney']=$coupon['fullMoney']?:0; $data['discount']=$coupon['discount']?:0; if($coupon['timeType']==1){ $data['useStartTime']=$coupon['useStartTime']; $data['useEndTime']=$coupon['useEndTime']; }else{ if($coupon['isNextDay']==1){//次日起 $data['useStartTime']=time()+86400; $data['useEndTime']=time()+$coupon['day']*86400+86400; }else{ $data['useStartTime']=time(); $data['useEndTime']=time()+$coupon['day']*86400; } } $data['useType']=$coupon['useType']?:json_encode([1]); $data['couponName']=$coupon['name']; $data['couponDetails']=$coupon['details']; $data['storeType']=$coupon['storeType']; $data['storeArr']=$coupon['storeArr']?:''; $data['goodsType']=$coupon['goodsType']; $data['goodsArr']=$coupon['goodsArr']?:''; $data['goodsArr2']=$coupon['goodsArr2']?:''; $data['memberLabel']=$coupon['memberLabel']?:''; $data['memberType']=$coupon['memberType']?:1; $data['storeId']=$coupon['storeId']; $data['uniacid']=$uniacid; $data['subsidy']=0; if($coupon['storeType']==2 || $coupon['storeType']==3){ $data['subsidy']=$coupon['subsidy'];//平台补贴 } $data['createdAt']=time(); $res=Yii::$app->db->createCommand()->insert('{{%ybwm_user_coupon}}', $data)->execute(); if($res){ Yii::$app->db->createCommand()->update('{{%ybwm_coupon}}', ['stock'=>$coupon['stock']-1], 'id=:id', ['id' =>$coupon['id']])->execute(); return $this->result(1, '成功'); }else{ return $this->result(2, '失败'); } } //查看我的优惠券 public function actionMyCoupon(){ $now=time(); $result=axios_request(); $page=$result['page']?:1; $size=$result['size']?:10; $state=$result['state']; $receiveType=$result['receiveType']; $type=$result['type']; $userId=$this->wqData['userId']; $list=(new \yii\db\Query()) ->from('{{%ybwm_user_coupon}}') ->where('userId=:userId',[':userId'=>$userId]); if($state==1){ //可使用 $list->andWhere('state=2 AND useEndTime>:useEndTime',[':useEndTime'=>$now]); }elseif($state==2){ $list->andWhere('state=1'); }elseif($state==3){ $list->andWhere('useEndTime<:useEndTime',[':useEndTime'=>$now]); } if($type==1){ $list->andWhere(['like','useType',1]); } if($type==2){ $list->andWhere(['or',['like','useType',2],['like','useType',3]]); } if($receiveType){ $list->andWhere('receiveType='.$receiveType); } //var_dump(ddSql($list));die; $list=$list->offset(($page - 1) * $size)->limit($size)->orderBy('useEndTime asc,id desc')->all(); for($i=0;$ifrom('{{%ybwm_store}}') ->where('id=:id',[':id'=>$list[$i]['storeId']])->one(); $list[$i]['explain'] .=$storeArr['name'].'可用,'; }elseif($list[$i]['storeType']==2){ $list[$i]['explain'] .='全部门店可用,'; }else{ $storeData=(new \yii\db\Query()) ->from('{{%ybwm_store}}')->select('name') ->where(['in','id',json_decode($list[$i]['storeArr'])])->all(); $storeArr=implode(',',array_column($storeData,'name')); $list[$i]['explain'] .=$storeArr.'可用,'; } if($list[$i]['goodsType']==1){ $list[$i]['explain'] .='全部商品可用,'; }elseif($list[$i]['goodsType']==2){ $list[$i]['explain'] .='指定商品可用,'; }elseif($list[$i]['goodsType']==3){ $list[$i]['explain'] .='指定商品不可用,'; }else{ $list[$i]['explain'] .='指定分类商品可用,'; } $useType=json_decode($list[$i]['useType'],true); if(in_array('1',$useType)){ $list[$i]['explain'] .='外卖可用'; } $list[$i]['useState']=$state; } return $this->result(1,'成功',$list); } //查看可用优惠券 public function actionAvailableCoupon(){ $result=axios_request(); $storeId=$result['storeId']; $userId=$this->wqData['userId']; $type=$result['type'];// 1外卖2店内3.快餐 $tableId=$result['tableId']?:0; $storeType=$result['storeType'];//1.店铺优惠2平台红包 $now=time(); $car=Order::getCarMoney($userId,$storeId,$type,$tableId); $storeSet = Config::getStoreSet('instoreSet', $result['storeId']); $currency=Config::getSystemSet('currency',$this->wqData['uniacid']); $actGoods = (new \yii\db\Query()) ->from('{{%ybwm_shop_car}}') ->where(['tableId'=>$tableId,'item'=>$type,'uniacid' => $this->wqData['uniacid'], 'storeId' => $result['storeId']]) ->andWhere('discountType!=0') ->one(); if($storeSet['orderMode']==2 || $type!=2){ $actGoods = (new \yii\db\Query()) ->from('{{%ybwm_shop_car}}') ->where(['userId'=>$userId,'tableId'=>$tableId,'item'=>$type,'uniacid' => $this->wqData['uniacid'], 'storeId' => $result['storeId']]) ->andWhere('discountType!=0') ->one(); } if(in_array('2',$currency['goodsActivityRule']) AND $actGoods){ return $this->result(1, '成功',[]); } $carMoney=$car['goodsMoney']; $coupon=(new \yii\db\Query()) ->from('{{%ybwm_user_coupon}}') ->where('userId=:userId AND state=2 AND useStartTime<=:useStartTime AND useEndTime>:useEndTime AND (fullMoney=0 || fullMoney<=:fullMoney)',[':fullMoney'=>$carMoney,':useStartTime'=>$now,':useEndTime'=>$now,':userId'=>$userId]); if($type){ $coupon->andWhere(['like', 'useType', $type]); } //门店优惠券 if($storeType==1){ $coupon->andWhere(['and', ['in','storeType',[1,3]], ['in','type',[1,2,3]] ]); } //平台优惠券 if($storeType==2){ $coupon->andWhere('storeType=2 AND type in (1,2)'); } $coupon=$coupon->orderBy('useEndTime asc')->all(); $userBind=(new \yii\db\Query()) ->from('{{%ybwm_member_bind}}') ->where('userId=:userId AND storeId=:storeId',[':userId'=>$userId,':storeId'=>$storeId])->one(); $useCouponArr=[]; for($i=0;$i0){ continue; } } if($coupon[$i]['storeType']==3){ //指定门店 $storeArr=[]; $storeArr=json_decode($coupon[$i]['storeArr'],true); if(!in_array($storeId,$storeArr)){ continue; } } if($coupon[$i]['goodsType']==2){ //指定商品可用 if($type==1){ $goodsArr=json_decode($coupon[$i]['goodsArr'],true); }else{ $goodsArr=json_decode($coupon[$i]['goodsArr2'],true); } if($goodsArr){ $goods=(new \yii\db\Query()) ->from('{{%ybwm_shop_car}}') ->where($where) ->andWhere(['in','goodsId',$goodsArr]) ->one(); // if($coupon[$i]['id']==611){ // var_dump(ddSql($goods));die; // } $goodsMoney=(new \yii\db\Query()) ->from('{{%ybwm_shop_car}}') ->where($where) ->andWhere(['in','goodsId',$goodsArr]) ->sum('money*(num-discountNum)+discountPrice*discountNum+materialMoney*num')?:0; if(!$goods or ($coupon[$i]['fullMoney']>$goodsMoney AND $coupon[$i]['fullMoney']>0)){ continue; } if($coupon[$i]['type']==2){ $coupon[$i]['money']=bcmul($goodsMoney,(10-$coupon[$i]['discount'])/10,2); } } } if($coupon[$i]['goodsType']==3){ $goodsArr=json_decode($coupon[$i]['goodsArr'],true); if($goodsArr) { $goods=(new \yii\db\Query()) ->from('{{%ybwm_shop_car}}') ->where($where) ->andWhere(['not in','goodsId',$goodsArr]) ->one(); $goodsMoney=(new \yii\db\Query()) ->from('{{%ybwm_shop_car}}') ->where($where) ->andWhere(['not in','goodsId',$goodsArr]) ->sum('money*(num-discountNum)+discountPrice*discountNum+materialMoney*num')?:0; if(!$goods or ($coupon[$i]['fullMoney']>$goodsMoney AND $coupon[$i]['fullMoney']>0)){ continue; } if($coupon[$i]['type']==2){ $coupon[$i]['money']=bcmul($goodsMoney,(10-$coupon[$i]['discount'])/10,2); } } } if($coupon[$i]['goodsType']==4){ if($type==2){ if($storeSet['orderMode']==2){ $where = 'a.userId='.$userId.' AND a.tableId='.$tableId.' AND a.storeId='.$storeId.' AND a.item=2'; }else{ $where = 'a.tableId='.$tableId.' AND a.storeId='.$storeId.' AND a.item=2'; } }else{ $where = 'a.userId='.$userId.' AND a.storeId='.$storeId.' AND a.item='.$type; } //指定商品分类可用 if($type==1){ $goodsArr=json_decode($coupon[$i]['goodsArr'],true); }else{ $goodsArr=json_decode($coupon[$i]['goodsArr2'],true); } if($goodsArr) { $goods = (new \yii\db\Query()) ->from('{{%ybwm_shop_car}} as a') ->join('LEFT JOIN', '{{%ybwm_core_goods}} as b', 'b.id = a.goodsId') ->where($where) ->andWhere(['in', 'b.typePid', $goodsArr]) ->one(); $goodsMoney = (new \yii\db\Query()) ->from('{{%ybwm_shop_car}} as a') ->join('LEFT JOIN', '{{%ybwm_core_goods}} as b', 'b.id = a.goodsId') ->where($where) ->andWhere(['in', 'b.typePid', $goodsArr]) ->sum('a.money*(a.num-a.discountNum)+a.discountPrice*a.discountNum+a.materialMoney*a.num')?:0; if(!$goods or ($coupon[$i]['fullMoney']>$goodsMoney AND $coupon[$i]['fullMoney']>0)){ continue; } if($coupon[$i]['type']==2){ $coupon[$i]['money']=bcmul($goodsMoney,(10-$coupon[$i]['discount'])/10,2); } } } $useCouponArr[]=$coupon[$i]; // array_values($coupon); } // $coupon=array_values($coupon); return $this->result(1, '成功',$useCouponArr); } public function actionMealCode(){ $result=axios_request(); $coupon=(new \yii\db\Query()) ->select('id,userId,selfCode') ->from('{{%ybwm_user_coupon}}') ->where('id=:id',[':id'=>$result['id']]) ->one(); if(!$coupon){ return $this->result(1,'成功',''); } if(empty($coupon['safeCode'])){ $code = $this->getCode(); Yii::$app->db->createCommand()->update('{{%ybwm_user_coupon}}', ['selfCode'=>$code], 'id=:id', ['id' =>$coupon['id']])->execute(); }else{ $code = $coupon['safeCode']; } //$res='https://qrcode.jp/qr?q='.$order['selfCode'].'&s=10'; $res='https://api.pwmqr.com/qrcode/create/?url='.$code; return $this->result(1,'成功',$res); } public function getCode(){ $code = rand(11111111,9999999); $data = (new \yii\db\Query()) ->from('{{%ybwm_user_coupon}}') ->where(['selfCode' => $code]) ->one(); if(empty($data)){ return $code; }else{ return $this->getCode(); } } }