verify_sign(); // 检查登录 $uid = $this->checkLogin(); // 接收参数 $limit = request('limit',10); // 显示 $map = [['custom_coupon.custom_uid','=',$uid],['custom_coupon.status','<>','4']]; // 查询 $Paginator = $Model->query()->join('coupon','custom_coupon.coupon_id','=','coupon.id')->where($map)->orderBy('custom_coupon.status')->paginate($limit,['custom_coupon.id','coupon.id as coupon_id','coupon.name','coupon.type_id','coupon.rebate_type','coupon.std_pay','coupon.rebate','custom_coupon.status','custom_coupon.exp_time']); // 通过优惠券ID,查询赠品 $rebates = $CouponRebate->getRebatesByCouponIds(array_column($Paginator->items(),'coupon_id')); // 商品范围 $products = $CouponProduct->getProductList(array_column($Paginator->items(),'coupon_id')); // 排除商品 $productsExclude = $CouponProductExclude->getProductList(array_column($Paginator->items(),'coupon_id')); // 循环处理数据 foreach ($Paginator as $key => $value) { $rebateScope = []; $productExclude = []; // 获取赠品列表 foreach ($rebates as $vv) { // 获取优惠券的赠品 if( $vv['coupon_id'] == $value['coupon_id'] ) { unset($vv['coupon_id']); // 赠品信息 $rebateScope[] = $vv; } } // 如果过期时间 if( $value['status'] == 0 && $value['exp_time'] < time() ) { // 设置过期状态 $Model->setStatusByExpire(); // 状态设置 $value['status'] = 3; } // 赠品范围 $value['rebate_scope'] = $rebateScope; // 产品范围 $productScope = []; // 状态可用 且指定商品 if( $value['status'] == 0 && $value['type_id'] == 1 ) { // 循环商品范围 foreach ($products as $vv) { // 获取商品范围 if( $vv['coupon_id'] == $value['coupon_id'] ) { // 商品范围 $productScope[] = $vv['product_id']; } } } // 排除范围 $productExclude = []; // 状态可用 且排除商品 if( $value['status'] == 0 && $value['type_id'] == 3 ) { // 循环排除范围 foreach ($productsExclude as $vv) { // 排除范围 if( $vv['coupon_id'] == $value['coupon_id'] ) { // 排除范围 $productExclude[] = $vv['product_id']; } } } // 商品范围 $value['product_scope'] = $productScope; // 排除范围 $value['product_exclude'] = $productExclude; // 时间 $value['exp_time'] = date('Y-m-d H:i:s',$value['exp_time']); // 优惠券回馈类型 $value['rebate'] = $value['rebate_type'] == 1 ? $value['rebate'] : intval($value['rebate']); // 重组 $list[$key] = $value; } // 获取数据 $data['total'] = $Paginator->total(); $data['current_page'] = $Paginator->currentPage(); $data['per_page'] = $Paginator->perPage(); $data['last_page'] = $Paginator->lastPage(); $data['data'] = $Paginator->items(); // 返回结果 return json_send(['code'=>'success','msg'=>'获取成功','data'=>$data]); } /** * 获取下单可用列表 /api/custom_coupon/get_checked * * @param string $code 授权码 * * */ public function get_checked(Model $Model,CouponRebate $CouponRebate,CouponProduct $CouponProduct,CouponProductExclude $CouponProductExclude){ // 接口验签 // $this->verify_sign(); // 检查登录 $uid = $this->checkLogin(); // 查询条件 $map = [['custom_coupon.custom_uid','=',$uid],['custom_coupon.status','=',0]]; // 查询 $list = $Model->query()->join('coupon','custom_coupon.coupon_id','=','coupon.id')->where($map)->orderBy('custom_coupon.status')->get(['custom_coupon.id','coupon.id as coupon_id','coupon.name','coupon.type_id','coupon.rebate_type','coupon.std_pay','coupon.rebate','custom_coupon.status','custom_coupon.exp_time'])->toArray(); // 通过优惠券ID,查询商品范围 $products = $CouponProduct->getProductList(array_column($list,'coupon_id')); // 通过优惠券ID,查询赠品 $rebates = $CouponRebate->getRebatesByCouponIds(array_column($list,'coupon_id')); // 排除商品 $productsExclude = $CouponProductExclude->getProductList(array_column($list,'coupon_id')); // 循环处理数据 foreach ($list as $key => $value) { // 适用范围 $productScope = []; $productExclude = []; // 如果是商品表,获取范围 if( $value['type_id'] == 1 ){ // 获取适用的商品范围 foreach ($products as $vv) { // 获取优商品范围 if( $vv['coupon_id'] == $value['coupon_id'] ) { unset($vv['coupon_id']); $productScope[] = $vv; } } } // 排除范围 $productExclude = []; // 状态可用 且排除商品 if( $value['type_id'] == 3 ) { // 循环排除范围 foreach ($productsExclude as $vv) { // 排除范围 if( $vv['coupon_id'] == $value['coupon_id'] ) { unset($vv['coupon_id']); // 排除范围 $productExclude[] = $vv; } } } // 商品范围 $value['product_scope'] = $productScope; // 排除范围 $value['product_exclude']= $productExclude; // 赠品范围 $rebateScope = []; // 获取赠品列表 foreach ($rebates as $vv) { // 获取优惠券的赠品 if( $vv['coupon_id'] == $value['coupon_id'] ) { unset($vv['coupon_id']); // 赠品信息 $rebateScope[] = $vv; } } // 赠品范围 $value['rebate_scope'] = $rebateScope; // 如果过期时间 if( $value['exp_time'] < time() ) { // 设置过期状态 $Model->setStatusByExpire(); // 状态设置 $value['status'] = 3; } // 时间 $value['exp_time'] = date('Y-m-d H:i:s',$value['exp_time']); // 优惠券回馈类型 $value['rebate'] = $value['rebate_type'] == 1 ? $value['rebate'] : intval($value['rebate']); // 重组 $list[$key] = $value; } // 返回结果 return json_send(['code'=>'success','msg'=>'获取成功','data'=>$list]); } /** * 领取优惠券 /api/custom_coupon/get_coupon * * * */ public function get_coupon(Request $request,Model $Model,Coupon $Coupon,Custom $Custom){ // 验证参数 $request->scene('get_coupon')->validate(); // 检查登录 $uid = $this->checkLogin(); // 接收参数 $couponId = request('coupon_id',0); // 查询优惠券信息 $couponInfo = $Coupon->getOne($couponId); // 判断优惠券是否可以领取 if( !$couponInfo ) return json_send(['code'=>'error','msg'=>'优惠券不存在或者未上架']); // 判断优惠券是否可以领取 if( $couponInfo['status'] ) return json_send(['code'=>'error','msg'=>'已结束发放']); // 时间 if( $couponInfo['start_time'] > time() ) return json_send(['code'=>'error','msg'=>'还没到发放时间哦']); // 时间 if( $couponInfo['end_time'] <= time() ) return json_send(['code'=>'error','msg'=>'发放时间已经结束了']); // 如果限制了城市 if( $couponInfo['city_ids'] ) { // 解析数组 $couponInfo['city_ids'] = explode(',',$couponInfo['city_ids']); // 获取客户信息 $custom = $Custom->getOne($uid); // 如果存在的话 if( !$custom ) return json_send(['code'=>'no_login','msg'=>'请登录','data'=>['error'=>'无对应客户']]); // 如果在城市范围 if( !in_array($custom['city_id'],$couponInfo['city_ids']) ) return json_send(['code'=>'error','msg'=>'客户城市不在领取范围','data'=>['error'=>'客户城市不在领取范围']]); } // 如果已经领取过 $isHave = $Model->query()->where([['coupon_id','=',$couponId],['custom_uid','=',$uid]])->count(); // 如果超过数量,不允许发放 if( $isHave ) return json_send(['code'=>'error','msg'=>'已经领取过啦']); // 查询该优惠券已经发放的数量 $countTotal = $Model->query()->where([['coupon_id','=',$couponId]])->count(); // 如果超过数量,不允许发放 if( $couponInfo['issue_total'] <= $countTotal ) return json_send(['code'=>'error','msg'=>'优惠券已发完']); // 写入信息 $insertData = ['coupon_id'=>$couponId,'custom_uid'=>$uid,'exp_time'=>$Coupon->getExpTime($couponInfo['exp_time'])]; // 写入表格 $result = $Model->add($insertData); // 提示 if( !$result ) return json_send(['code'=>'error','msg'=>'领取失败,请重试']); // 返回成功 return json_send(['code'=>'success','msg'=>'领取成功']); } }