input('goods_id')); $uid = \YunShop::app()->getMemberId(); $member = MemberShopInfo::getMemberShopInfo($uid); if (empty($member)) { return $this->errorJson('没有找到该用户', []); } $memberLevel = $member->level_id; $now = strtotime('now'); $coupons = Coupon::centerCouponsForMember($uid, $memberLevel, null, $now,\YunShop::request()->coupon_type?:'') ->orderBy('yz_coupon.display_order', 'desc') ->orderBy('yz_coupon.updated_at', 'desc') ->get(); if ($coupons->isEmpty()) { return $this->errorJson('没有找到记录', []); } foreach ($coupons as &$item) { $item->has_many_member_coupon_count = MemberCoupon::uniacid()->where('coupon_id' ,$item->id)->pluck('uid')->unique()->count(); } //添加"是否可领取" & "是否已抢光" & "是否已领取"的标识 $couponsData = $this->getCouponData($coupons, $search); $slideShows = CouponSlideShow::uniacid() ->where('is_show',1) ->orderBy('sort','asc') ->orderBy('id','asc') ->limit(10) ->get(); $data = [ 'data' => $couponsData, 'search_array' => $this->getSearchArray(Coupon::$typeComment),//Coupon::$typeComment 'slide_shows' => $slideShows ]; //领券中心表单 if (!is_null(\app\common\modules\shop\ShopConfig::current()->get('coupon_form'))) { $class = array_get(\app\common\modules\shop\ShopConfig::current()->get('coupon_form'), 'class'); $function = array_get(\app\common\modules\shop\ShopConfig::current()->get('coupon_form'), 'function'); $form = $class::$function($uid); if($form && $form != -1) { $data = array_merge($data,['coupon_form' => $form]); } } return $this->successJson('ok', $data); } protected function filterCoupon($coupon, $search) { if (empty($search['goods_id'])) { return false; } $goods = Goods::find($search['goods_id']); $goodsCategory = GoodsCategory::select('category_id')->where('goods_id', $search['goods_id'])->get()->pluck('category_id')->toArray(); if ($coupon->time_limit == 1 && (time() < $coupon->time_start || time() > $coupon->time_end)) { return true; } switch ($coupon->use_type) { case Coupon::COUPON_SHOP_USE: //商城通用 if (!in_array($goods->plugin_id,[31,32,33,36,92,101])) { $coupon_list[] = $coupon; } break; case Coupon::COUPON_GOODS_USE: //指定商品 if (in_array($goods->id, $coupon['goods_ids'])) { $coupon_list[] = $coupon; } break; case Coupon::COUPON_GOODS_AND_STORE_USE: //指定商品+指定门店 $use_conditions = unserialize($coupon->use_conditions); if (($use_conditions['is_all_good'] && $goods->plugin_id == 0) || in_array($goods->id, $use_conditions['good_ids'])) { $coupon_list[] = $coupon; } break; case Coupon::COUPON_CATEGORY_USE: //指定分类 //商品分类存在该优惠卷中 if ($coupon['category_ids'] && array_intersect($goodsCategory, $coupon['category_ids'])) { $coupon_list[] = $coupon; } break; default: } return true; } /** * 过滤不满足条件的优惠卷 & * 添加"是否可领取" & "是否已抢光" & "是否已领取"的标识 * @param $coupons * @param $search * @return mixed */ public function getCouponData($coupons, $search) { $coupons = $coupons->map(function ($item) use ($search) { if ($this->filterCoupon($item,$search)) { return null; } if (($item->total != self::NO_LIMIT) && ($item->has_many_member_coupon_count >= $item->total)) { $item->api_availability = self::EXHAUST; } elseif ($item->member_got_count > 0) { $item->api_availability = self::ALREADY_GOT; } else { $item->api_availability = self::IS_AVAILABLE; } //增加属性 - 对于该优惠券,用户可领取的数量 if ($item->get_max != self::NO_LIMIT) { $item->api_remaining = $item->get_max - $item->member_got_count; if ($item->api_availability < 0) { //考虑到优惠券设置会变更,比如原来允许领取6张,之后修改为3张,那么可领取张数可能会变成负数 $item->api_availability = 0; } } elseif ($item->get_max == self::NO_LIMIT) { $item->api_availability = -1; } //添加优惠券使用范围描述 switch ($item->use_type) { case Coupon::COUPON_SHOP_USE: $item->api_limit = '商城通用'; break; case Coupon::COUPON_CATEGORY_USE: $item->api_limit = '适用于下列分类: '.implode(',', $item['categorynames']); break; case Coupon::COUPON_GOODS_USE: $item->api_limit = '适用于下列商品: '.implode(',', $item['goods_names']); break; case 8: $item->api_limit = '适用于下列商品: '.implode(',', $item['goods_names']); break; case 9: $item->api_limit = '适用范围: '; $use_condition = unserialize($item['use_conditions']); if (empty($use_condition)) { $item->api_limit .= '无适用范围'; } if (app('plugins')->isEnabled('store-cashier')) { if ($use_condition['is_all_store'] == 1) { $item->api_limit .= "全部门店"; } else { $item->api_limit .= '门店:'.implode(',', Store::uniacid()->whereIn('id', $use_condition['store_ids'])->pluck('store_name')->all()); } } if ($use_condition['is_all_good'] == 1) { $item->api_limit .= "平台自营商品"; } else { $item->api_limit .= '商品:'.implode(',', Goods::uniacid()->whereIn('id', $use_condition['good_ids'])->pluck('title')->all()); } break; } return $item; })->filter()->values(); return $coupons; } private function getSearchArray($arr) { if (!app('plugins')->isEnabled('store-cashier')) { unset($arr[Coupon::TYPE_STORE]); } if (!app('plugins')->isEnabled('hotel')) { unset($arr[Coupon::TYPE_HOTEL]); } return $arr; } }