merchant_id; $result = Coupon::select('id', 'type_id', 'total_num', 'remain_num', 'm_id', 'type', 'sku','coupon_type', 'discount_rate') ->where('m_id', $m_id)->where('id', $id) ->first(); if (!$result) return $this->failure('该优惠券不存在或已下架'); if ($result->type == 'course') { $result->thumb = $result->course->thumb ?? ''; $result->title = $result->course->title ?? ''; $result->short_description = $result->course->short_description ?? ''; unset($result->course); } elseif ($result->type == 'community') { $result->thumb = $result->community->pic ?? ''; $result->title = $result->community->title ?? ''; $result->short_description = $result->community->Subtitle ?? ''; $result->sku = json_decode($result->sku, true); //免费卷 if($result->coupon_type === 1){ $result->sku = json_decode($result->community->sku, true); } unset($result->community); } elseif ($result->type == 'evaluate') { $result->thumb = $result->evaluate->image ?? ''; $result->title = $result->evaluate->title ?? ''; $result->short_description = $result->evaluate->title ?? ''; $eval = MerchantEvaluate::where('id', $result->type_id) ->first(); if ($eval) { $list = EvaluateList::where('test_item_id', $eval->test_item_id) ->first(); if ($list) { $result->evaluate_type = $list->type; } else { return $this->failure('评测不存在'); } } else { return $this->failure('商家未添加此评测'); } } elseif ($result->type == 'consult'){ $consult = Consultation::query()->where('id',$result->type_id)->first(); if (!$consult){ return $this->failure('咨询数据不存在'); } $result->thumb = $consult->pic; $result->title = $consult->title; $result->short_description = $consult->title; } else { $result->thumb = ''; $result->title = ''; $result->short_description = ''; } // 是否领取过 $get_status = UserCoupon::where('m_user_id', $request->merchant_user_id)->where('coupons_id', $id)->exists(); $result->get_status = $get_status; //是否曾经购买过 $has_buy = TouristOrder::where('type',$result->type)->where('type_id',$result->type_id)->whereIn('pay_status',[1,4]) ->where('account_id',$request->merchant_user_id) ->exists(); $result->has_buy = $has_buy; //是否有咨询中的订单 $consulting_order = null; if (isset($consult)) { $consulting_order = ConsultationRecords::query() ->select('id','consulation_id') ->where('consulation_id', $consult->id) ->where('pay_status', 1) ->whereIn('status', [0, 1]) ->where('merchant_user_id',$request->merchant_user_id) ->orderBy('id','desc') ->first(); if ($consulting_order){ $consulation = Consultation::find($consulting_order->consulation_id); $consulting_order->teacher_mobile = ConsultAccount::query() ->where('id',$consulation->consult_account_id) ->value('mobile'); } } $result->consulting_order = $consulting_order; $result->has_consulting_order = $consulting_order ? 1 : 0; $m_user = MerchantUser::where('id', $request->merchant_user_id)->first(); $linkmen['mobile'] = $m_user->mobile; $linkmen['name'] = $m_user->nickname; $user_status = UserCoupon::where('m_user_id', $request->merchant_user_id)->where('coupons_id', $id)->value('status'); $result->user_status = $user_status; $result->linkmen = $linkmen; return $this->success('ok', $result); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息,请稍后再试'); } } /** * 领取优惠券 * @param Request $request * @return JsonResponse|string */ public function ReceiveCoupon(Request $request) { try { $merchant_id = $request->merchant_id; $wechatUser = session('wechat.oauth_user.new'); if ($wechatUser) { $openid = $wechatUser->getId(); } else { $openid = $request->openid; } $m_id = $request->merchant_id; $m_user_id = $request->merchant_user_id; $coupon_id = $request->coupon_id; $linkmen = $request->linkmen; $user_id = $this->matchFulinkUser($m_user_id); DB::beginTransaction(); $get_status = UserCoupon::where('m_user_id', $m_user_id)->where('coupons_id', $coupon_id)->exists(); if ($get_status) return $this->failure('您已经领取过该优惠券了'); // echo $coupon_id.'--'.$merchant_id;exit; $result = Coupon::where('id', $coupon_id)->where('status', 1)->where('m_id', $merchant_id)->first(); if (!$result) return $this->failure('该优惠券已失效。'); if ($result->expiration_time && $result->expiration_time < now()) return $this->failure('该优惠券已过期'); if ($result->remain_num <= 0) return $this->failure('该优惠券无库存'); $merchant_user = MerchantUser::where('id', $m_user_id)->first(); if ($result->type == 'course') { $user_course = UserCourses::where('merchant_user_id', $m_user_id)->where('course_id', $result->type_id) ->where('status', 1) ->first(); if ($user_course) return $this->failure('您已经是该课程的成员啦'); $UserCoupon = new UserCoupon(); $UserCoupon->openid = $openid; $UserCoupon->coupons_id = $coupon_id; $UserCoupon->status = 0; $UserCoupon->m_user_id = $m_user_id; $UserCoupon->m_id = $m_id; $UserCoupon->linkmen = json_encode($request->linkmen); $UserCoupon->save(); $result->decrement('remain_num', 1); $result->save(); } if ($result->type == 'community' || $result->type == 'activity' || $result->type == 'service') { $userMember = UserMember::where('m_user_id', $m_user_id)->where('type', $result->type) ->where('type_id', $result->type_id) ->first(); if ($userMember && $result->remark == 'one') { return $this->failure('您已经参加了此活动啦~'); } $UserCoupon = new UserCoupon(); $UserCoupon->openid = $openid; $UserCoupon->coupons_id = $coupon_id; $UserCoupon->status = 0; $UserCoupon->m_user_id = $m_user_id; $UserCoupon->m_id = $m_id; $UserCoupon->linkmen = json_encode($request->linkmen); $UserCoupon->save(); $result->decrement('remain_num', 1); $result->save(); } if($result->type == 'evaluate'){ $UserCoupon = new UserCoupon(); $UserCoupon->openid = $openid; $UserCoupon->coupons_id = $coupon_id; $UserCoupon->status = 0; $UserCoupon->m_user_id = $m_user_id; $UserCoupon->m_id = $m_id; $UserCoupon->linkmen = json_encode($request->linkmen); $UserCoupon->save(); $result->decrement('remain_num', 1); $result->save(); $UserCoupon['state'] = 1; //跳转的条件,不可删除 } if ($result->type == 'consult'){ $UserCoupon = new UserCoupon(); $UserCoupon->openid = $openid; $UserCoupon->coupons_id = $coupon_id; $UserCoupon->status = 0; $UserCoupon->m_user_id = $m_user_id; $UserCoupon->m_id = $m_id; $UserCoupon->linkmen = json_encode($request->linkmen); $UserCoupon->save(); $result->decrement('remain_num', 1); $result->save(); } $filter_type = ['evaluate','consult']; if($result->coupon_type == 1 && !in_array($result->type,$filter_type)) { $trade_no = \CommonUtilsService::getTradeNO(); $UserCoupon->status = 1; $UserCoupon->save(); $goods = '领取优惠券'; //优惠券规格 if($request->sku_id){ $coupon_sku_id = $request->sku_id; }else{ $coupon_sku_id = Coupon::where('id', $coupon_id)->value('sku_id'); } $sku_price = 0; if ($coupon_sku_id) { if ($result->type = 'community') { $skus = CommunityActivity::where('id', $result->type_id)->value('sku'); $skus = json_decode($skus, true); $sku_name = ''; foreach ($skus as $sku) { if ($sku['sku_id'] == $coupon_sku_id) { $sku_name = $sku['name']; // $sku_price = $sku['price']; break; } } $goods = $goods.'-'.$sku_name; } } //生成订单 $order = new TouristOrder(); $order->open_id = $openid; $order->price = '0.00'; $order->num = 1; $order->pay_type = 'free'; $order->pay_status = 4; $order->trade_no = $trade_no; $order->withdrawal_radio = 100; $order->from_openid = $request->from_openid; $order->goods = $goods; $order->merchant_id = $m_id; $order->user_coupon_id = $UserCoupon->id; $order->account_id = $m_user_id; $order->channel = 0; $order->linkmen = json_encode([$request->linkmen]); if ($linkmen && $linkmen['mobile'] && $linkmen['name']) { if ($merchant_user) { if (!$merchant_user->mobile) { $old_mobile_user = MerchantUser::where('mobile', $linkmen['mobile'])->first(); if (!$old_mobile_user) { //$merchant_user->mobile = $linkmen['mobile']; } else { if ($old_mobile_user->openid) { //throw new \Exception('merchant_user_id='.$m_user_id.'手机号已存在,请联系客服'); } } } if (!$merchant_user->nickname) { $merchant_user->nickname = $linkmen['name']; } $merchant_user->save(); } } $price = '0.00'; if ($result->type == 'course') { $com = Course::where('id', $result->type_id)->first(); $non_encode_url = 'https://love.ufutx.com/pu/#/receiveCoupons/' . $coupon_id; $price = $com->charge; } elseif ($result->type == 'community' || $result->type == 'activity' || $result->type == 'service') { $com = CommunityActivity::where('id', $result->type_id)->first(); $non_encode_url = $com->class == 'one' ? 'https://love.ufutx.com/pu/#/activityCoupons/' . $coupon_id : 'https://love.ufutx.com/pu/#/serveCoupons/' . $coupon_id; if ($coupon_sku_id) { $price = $sku_price; }else { $price = $com->price; } } elseif ($result->type == 'consult'){ $com = Consultation::where('id', $result->type_id)->first(); $non_encode_url = 'https://love.ufutx.com/pu/#/consultCoupons/' . $coupon_id; $price = $com->price; } $link_name = $request->linkmen['name'] ?? ($request->linkmen[0]['name'] ?? null); $link_mobile = $request->linkmen['mobile'] ?? ($request->linkmen[0]['mobile'] ?? ''); $order->name = ($request->name ?? ($merchant_user->nickname ?? $link_name)) ?? ""; $order->mobile = ($request->mobile ?? ($merchant_user->mobile ?? $link_mobile)) ?? ''; $order->type = $result->type; if ($result->type == 'evaluate') { $merchant_evaluates_id = MerchantEvaluate::where('merchant_id', $merchant_id) ->where('test_item_id', $result->type_id) ->value('id'); $order->type_id = $merchant_evaluates_id; } else { $order->type_id = $result->type_id; } if(empty($com)){ throw new \Exception('未获取到实体,type_id='.$result->type_id); } $order->desc = $com->title.'-领取优惠券'; $order->save(); if ($result->type == 'community') { $remark = $this->numMember($order); $order->remark = $remark; $order->save(); }elseif($result->type == 'course'){ $user_course = new UserCourses(); $user_course->user_id = $user_id; $user_course->course_id = $result->type_id; $user_course->type = 'business'; $user_course->trade_no = $trade_no; $user_course->status = 1; $user_course->open_id = $openid; $user_course->merchant_user_id = $m_user_id; $user_course->save(); } // $openid,$name,$goods,$price,$amount,$url $merchant_openid = MerchantAccount::where('id', $m_id)->value('openid'); if (!$merchant_openid) $merchant_openid = Anchor::where('m_id', $m_id)->value('openid'); $encode_url = urlencode($non_encode_url); $url = 'https://love.ufutx.com/api/official/live/wechat/FamilyAuth?merchant_id=' . $m_id . '&url=' . $encode_url; \CommonUtilsService::reciveCoupon($merchant_openid, $merchant_user->nickname, $com->title, $price, $result->remain_num, $url); //咨询的订单 if ($result->type == 'consult'){ $consult_order = new ConsultationRecords(); $consult_order->anchor_id = 0; $consult_order->merchant_id = $m_id; $consult_order->consulation_id = $com->id; $consult_order->name = ($request->name ?? ($merchant_user->nickname ?? $link_name)) ?? ""; $consult_order->phone = ($request->mobile ?? ($merchant_user->mobile ?? $link_mobile)) ?? ''; $consult_order->price = 0; $consult_order->num = 1; $consult_order->type = 'consult'; $consult_order->class = ''; $consult_order->desc = ''; $consult_order->pay_status = 1; $consult_order->trade_no = $trade_no; $consult_order->save(); } } DB::commit(); return $this->success('ok', $UserCoupon); } catch (\Exception $e) { DB::rollBack(); $this->getError($e); return $this->failure($e->getMessage().'-'.$e->getLine()); } } /** * 我的优惠券列表 */ public function getCouponList(Request $request) { try { $merchant_id = $request->merchant_id; $type = $request->type; $type_id = $request->type_id; $merchant_user_id = $request->merchant_user_id; $sku_id = $request->input('sku_id'); $nopage = $request->nopage; $status = $request->status; $class = $request->class; if (config('app.debug')) { if (!$merchant_id) { return $this->failure('参数不全'); } } // print_r(compact('merchant_id','type','type_id','merchant_user_id','status'));exit; $user_coupons = UserCoupon::where('m_user_id', $merchant_user_id)->where('m_id', $merchant_id) ->with(['coupon' => function ($query) use ($type, $type_id, $class) { $query->where('status', 1); if ($type) { $query->where('type', $type); } if ($type_id) { $query->where('type_id', $type_id); } if ($class) { $query->where('class', $class); } }]) ->whereHas('coupon', function ($query) use ($type, $type_id, $class, $sku_id) { $query->where('status', 1); if ($type) { $query->where('type', $type); } if ($type_id) { $query->where('type_id', $type_id); } if ($class) { $query->where('class', $class); } if ($sku_id) { $query->where(function ($sql) use($sku_id){ $sql->where('sku_id', $sku_id)->orWhereNull('sku_id'); }); } }) ->orderBy('status', 'asc')->orderBy('id', 'desc'); if (isset($request->status)) { $user_coupons = $user_coupons->where('status', $status); } if ($nopage) { $user_coupons = $user_coupons->get(); } else { $user_coupons = $user_coupons->paginate(); } foreach ($user_coupons as $key => $coupon) { if ($coupon->coupon) { switch ($coupon->coupon->type) { case 'course': $service = Course::where('id', $coupon->coupon->type_id)->where('merchant_id', $merchant_id) ->first(); if (!$service) { $price = 0.00;; } else { $price = $service->charge; } switch ($coupon->coupon->coupon_type) { case 1: $coupon->coupon->discount_amount = $price; break; case 2: $temp = $coupon->coupon->discount_rate; $coupon->coupon->discount_rate = number_format(10 * $coupon->coupon->discount_rate, 1); $coupon->coupon->discount_amount = number_format($price * (1 - $temp), 2); break; case 3: $coupon->coupon->discount_amount = $coupon->coupon->discount_rate; break; default: $coupon->coupon->discount_amount = 0; break; } break; case 'activity': case 'service': case 'community': $service = CommunityActivity::where('id', $coupon->coupon->type_id)->where('merchant_id', $merchant_id) ->first(); if (!$service) { $price = 0.00; } else { $price = $service->price; $sku = json_decode($service->sku)?:[]; $sku_price = []; foreach ($sku as $val) { $sku_price[] = $val->price; } switch ($coupon->coupon->coupon_type) { case 1: $coupon->coupon->discount_amount = max($sku_price); break; case 2: $temp = $coupon->coupon->discount_rate; $coupon->coupon->discount_rate = number_format(10 * $coupon->coupon->discount_rate, 1); $coupon->coupon->discount_amount = number_format((1- $temp) * max($sku_price), 2); break; case 3: $coupon->coupon->discount_amount = $coupon->coupon->discount_rate; break; default: $coupon->coupon->discount_amount = 0; break; } } break; case 'shop': $service = MerchantShop::where('id', $coupon->coupon->type_id)->where('merchant_id', $merchant_id) ->first(); if (!$service) { $price = 0.00; } else { $price = $service->charge; } break; case 'evaluate': $service = MerchantEvaluate::where('id', $coupon->coupon->type_id)->where('merchant_id', $merchant_id) ->first(); if (!$service) { $price = 0.00; } else { $price = $service->charge; } break; case 'consult': $service = Consultation::query()->where('id', $coupon->coupon->type_id) ->first(); switch ($coupon->coupon->coupon_type){ case 1: $coupon->coupon->discount_amount = $service->price; break; case 2: $temp = $coupon->coupon->discount_rate; $coupon->coupon->discount_rate = number_format(10 * $coupon->coupon->discount_rate, 1); $coupon->coupon->discount_amount = number_format((1- $temp) * $service->price, 2); break; case 3: $coupon->coupon->discount_amount = $coupon->coupon->discount_rate; break; default: $coupon->coupon->discount_amount = 0; break; } break; default: break; } } else { return $this->failure('优惠券不存在'); } } return $this->success('ok', $user_coupons); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息,请稍后再试'); } } }