userCon = $userCon; } //测试方法 public function testH5() { return $this->success("这是一个H5测试接口"); } /** * 社区-训练营详情 * @param Request $request * @return JsonResponse|string */ public function BusinessactivityDetail(Request $request) { try { $id = $request->id; $wechatUser = session('wechat.oauth_user.new'); if ($wechatUser) { $openid = $wechatUser->getId(); $merchant_user = MerchantUser::where('openid', $openid)->first(); } else { $merchant_user = MerchantUser::where('id', $request->merchant_user_id)->first(); if (empty($merchant_user)) throw new \Exception("未获取到用户信息"); $openid = $merchant_user->openid; } $user_coupon_id = $request->user_coupon_id; $result = CommunityActivity::withTrashed()->where('id', $id)->first(); if (!$result) return $this->failure('该活动已下线或不存在'); $result->increment('pv', 1); $merchant_user->preview($result); $result->price = floatval($result->price); $banner = LiveBanner::where('class', 'community')->where('class_id', $id)->value('icon'); if (!$banner) { $result->banner = []; } else { $result->banner = json_decode($banner, true); } $result->sku = json_decode($result->sku, true); if ($result->pay_type == 'free') { $result->sku = null; } $token = WangYiYunUser::where('accid', $openid)->value('token'); if (!$token && $openid) { $wechatUser = session('wechat.oauth_user.new'); $rand_str = $this->randString(10); $nickname = '用户' . $rand_str; if ($wechatUser) { $moreInfo = $wechatUser->getOriginal(); $nickname = $moreInfo['nickname'] ?? $nickname; } // 创建token $data['openid'] = $openid; $data['nickname'] = $nickname; $data['sex'] = 0; $this->createWyyUser($data, $request->merchant_user_id); $token = WangYiYunUser::where('accid', $request->openid)->value('token'); } $reward_count = TouristOrder::where('type', 'reward_activity')->where('type_id', $id) ->whereIn('pay_status', [1, 4])->get()->count(); $result->reward_count = $reward_count; $result->token = $token; $type = '活动'; $url = env('APP_URL') . '/pu/#/activityDetails/' . $id; $key = 'ActivityDetail_S' . $id . '_' . $openid; if ($result->class == 'many') { $url = env('APP_URL') . '/pu/#/serveDetails/' . $id; $key = 'ServeDetail_S' . $id . '_' . $openid; $type = '服务'; } $url = urlencode($url); $url = env('APP_URL') . '/api/official/live/wechat/FamilyAuth?from_openid=' . $openid . '&merchant_id=' . $request->merchant_id . '&url=' . $url; // 是否购买过 $pay_status = TouristOrder::where('account_id', $request->merchant_user_id) ->where('type', 'community')->whereIn('pay_status', [1, 4]) ->where('type_id', $id) ->first(); $result->pay_status = $pay_status ? true : false; $qr_code = Redis::get($key); if (!$qr_code) { $qr_code = $this->getPreviewQrcode($url); Redis::set($key, $qr_code); $qr_code = Redis::get($key); } $result->share_qr_code = $qr_code; //判断活动是否截止报名 is_deadline 0:可以报名 1:已报名 2:截止报名 3活动结束 $result->order_id = 0; //是否填写过报告 $result->has_write = 0; $time = date('Y-m-d H:i:s'); if ($result->class == 'one') { $is_deadline = 0; if ($pay_status) { $is_deadline = 1; $result->order_id = $pay_status->id; $has_write = ReportAnswer::where('m_user_id', $request->merchant_user_id) ->where('m_order_id', $pay_status->id)->first(); $result->has_write = !empty($has_write) ? 1 : 0; } elseif ($result->apply_deadline && $result->apply_deadline <= $time) { $is_deadline = 2; } elseif ($result->end_time && $result->end_time <= $time) { $is_deadline = 3; } else { $result->has_write = 0; } $result->is_deadline = $is_deadline; } // 购买人列表 $ids = TouristOrder::where('type', 'community')->where('type_id', $id) ->whereIn('pay_status', [1, 4]) ->limit(4)->orderBy('id', 'desc') ->pluck('account_id'); $users = MerchantUser::select('id', 'nickname', 'pic')->whereIn('id', $ids)->get(); foreach ($users as $user) { $user->nickname = ($result->hidden_avatar) ? mb_substr($user->nickname, 0, 1) . '**' : $user->nickname; } $result->pay_user = $users; // $result->member_count = ($result->hidden_order_total) ? '':TouristOrder::where('type', 'community') // ->where('type_id', $id)->whereIn('pay_status', [1,4]) // ->get()->count(); $orders = TouristOrder::where('type', 'community')->where('type_id', $id)->whereIn('pay_status', [1, 4])->get(); $count = 0; foreach ($orders as $order) { if ($order->linkmen) { Log::info($order->linkmen); $link_count = count(json_decode($order->linkmen, true)) ?: 1; $count += $link_count; } } if ($count == 0) { $count = $orders->count(); } $result->member_count = ($result->hidden_order_total == 1) ? '' : $count; $merchant_user = MerchantUser::where('id', $request->merchant_user_id)->first(); if (config('app.env') == 'production') { $merchant_user->addlog($result); } $result->start_time = $result->start_time ? date('Y-m-d H:i', strtotime($result->start_time)) : null; $result->end_time = $result->end_time ? date('Y-m-d H:i', strtotime($result->end_time)) : null; $result->apply_deadline = $result->apply_deadline ? date('Y-m-d H:i', strtotime($result->apply_deadline)) : null; //下架或删除状态 0下架 1正常上架 2已删除 $publish_state = 0; if ($result->deleted_at) { $publish_state = 2; } elseif ($result->status == 1) { $publish_state = 1; } else { $publish_state = 0; } $result->publish_state = $publish_state; $merchant_user_id = $request->merchant_user_id; $linkmen['name'] = ''; $linkmen['mobile'] = ''; $merchant_user = MerchantUser::where('id', $merchant_user_id)->first(); if ($merchant_user) { $result['share_nickname'] = $merchant_user->nickname ?? '匿名用户'; $result['share_avatar'] = $merchant_user->pic ?? User::DefaultAvatar; $linkmen['name'] = $merchant_user->nickname; $linkmen['mobile'] = $merchant_user->mobile; } $result->linkmen = $linkmen; if ($request->from_openid && $request->from_openid != 'null') { $user_service = new UserService(); $user_service->generateClientComment(0, $openid, $request->from_openid, $type, $result->id, $result->title); } //报名活动是否需要真人认证 1:需要 0:不需要 $need_real_approve = 0; $is_real_approved = 0; //当前用户对应的福恋用户id $user_id = $this->matchFulinkUser($merchant_user_id); $user = User::find($user_id); if (!$user) { $user_id = $this->getUseridByOpenid($openid, 0); $user = User::find($user_id); } if ($user) { $is_real_approved = $user->is_real_approved; } if ($request->id == 698) { $need_real_approve = 1; } $result->need_real_approve = $need_real_approve; $result->is_real_approved = $is_real_approved; $question = ReportQuestion::where('type', 'community')->where('type_id', $request->id)->first(); $result->report = !empty($question) ? 1 : 0; $report = MerchantReport::where('type', 'community')->where('type_id', $request->id) ->whereNotNull('commitd_at')->first(); //该报告是否设置了填写日期 if ($report && !empty($report->commitd_at)) { $commitd_at = json_decode($report->commitd_at); } else { $commitd_at = []; } sort($commitd_at); $result->commitd_at = $commitd_at; $merchant = MerchantAccount::find($result->merchant_id); if (!$merchant) { return $this->failure('商家不存在'); } $result->has_group = $merchant->hasGroup($result) ? 1 : 0; $result->group = $merchant->groupInformation($result); // if ($result->id == 2201) { // $skus = []; // foreach ($result->sku as $sku) { // if ($sku['sku_id'] != 7) { // $skus[] = $sku; // } // } // $result->sku = $skus; // } if ($user_coupon_id) { $result = $result->toArray(); $user_coupon = UserCoupon::where('id', $user_coupon_id)->where('status', 0) ->where('m_id', $request->merchant_id)->where('m_user_id', $merchant_user_id) ->first(); if (!$user_coupon) { return $this->failure('用户优惠券不存在'); } $coupon = Coupon::where('id', $user_coupon->coupons_id)->where('type_id', $id)->where('type', 'community') ->where('m_id', $request->merchant_id) ->first(); if (!$coupon) { return $this->failure('优惠券不存在'); } foreach ($result['sku'] as $key => $val) { switch ($coupon->coupon_type) { case 1: $result['sku'][$key]['discount_amount'] = strval($val['price']); $result['sku'][$key]['charge'] = strval(0.00); break; case 2: $result['sku'][$key]['discount_amount'] = number_format($val['price'] * (1 - $coupon->discount_rate), 2); $result['sku'][$key]['charge'] = number_format($val['price'] - $result['sku'][$key]['discount_amount'], 2); break; case 3: $temp = number_format($val['price'] - $coupon->discount_rate, 2); if ($temp < 0) { $result['sku'][$key]['discount_amount'] = strval($val['price']); $result['sku'][$key]['charge'] = strval(0.00); } else { $result['sku'][$key]['discount_amount'] = strval($coupon->discount_rate); $result['sku'][$key]['charge'] = strval($temp); } break; default: break; } } } //是否含活动照片 $result['has_pics'] = ActivityPhoto::where('type', 'activity')->where('type_id', $result['id'])->count() ? true : false; //是否加入黑名单 $result['blacklist'] = MerchantBlacklist::where(['m_id' => $request->merchant_id, 'user_id' => $merchant_user->id, 'type' => 'activity'])->first(); //sku报名人数限制 $tourist_order = new TouristOrder(); $sku = $result['sku']; if ($sku) { foreach ($sku as &$item) { $item['sku_buy_num'] = 0;//该规格购买人数 $item['can_buy'] = 1;//是否可已购买 $total_limit_num = $item['total_limit_num'] ?? 0; if (!$total_limit_num) { continue; } $item['sku_buy_num'] = $tourist_order->getSkuBuyNum($id, $request->merchant_id, $item['sku_id']); $item['can_buy'] = $item['sku_buy_num'] == $total_limit_num ? 0 : 1; } } $result['sku'] = $sku; //记录分享记录 if ($request->from_openid && $request->from_openid != $merchant_user->openid) { MEarningShare::create(["user_id" => $merchant_user->id, "type" => CommunityActivity::class, 'type_id' => $request->id, 'from_openid' => $request->from_openid]); } return $this->success('ok', $result); } catch (\Exception $e) { $this->getError($e); return $this->failure(); } } public function createWyyUser($data, $merchant_user_id) { try { $im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET')); $result = $im_service->createUserId(10000000 + $merchant_user_id, $data['nickname'], $props = '{}', null); if ($result['code'] == 200) { $wyyUser = new WangYiYunUser; $wyyUser->accid = 10000000 + $merchant_user_id; $wyyUser->name = $data['nickname']; $wyyUser->gender = $data['sex']; $wyyUser->token = $result['info']['token']; $wyyUser->save(); } elseif ($result['code'] == 414 && $result['desc'] == 'already register') { $result = $im_service->getUinfos([$data['openid']]); if ($result['code'] == 200) { $info = $result['uinfos'][0]; $accid = ''; $name = ''; $gender = ''; if (array_key_exists("accid", $info)) { $accid = $info['accid']; } if (array_key_exists("name", $info)) { $name = $info['name']; } if (array_key_exists("icon", $info)) { $icon = $info['icon']; } if (array_key_exists("gender", $info)) { $gender = $info['gender']; } $wyyUser = new WangYiYunUser; $wyyUser->accid = $accid; $wyyUser->name = $name; $wyyUser->gender = $gender; $wyyUser->icon = $icon; $wyyUser->save(); //更新网易云token $result = $im_service->updateUserToken($accid); if ($result['code'] == 200) { $wyyUser->token = $result['info']['token']; } $wyyUser->save(); } } } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 获取服务协议标题和内容 * @param Request $request * @param $service_id * @return JsonResponse|string */ public function obtainAgreeContent(Request $request, $service_id) { try { $result = CommunityActivity::where('id', $service_id)->select('id', 'agree_title', 'agree_content')->first(); return $this->success('ok', $result); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 社区-我的参与列表 * @param Request $request * @return JsonResponse|string */ public function mytouristOrder(Request $request) { try { // 记得删除 TouristOrder的记录同步merchant_id 和course表里删除多余的数据 $merchant_user_id = $request->merchant_user_id; $class = $request->class; $result = TouristOrder::where('account_id', $merchant_user_id)->where('type', 'community'); if ($class) {//单次或者多次 $ids = CommunityActivity::withTrashed()->where('class', $class)/*->where('status',1)*/ ->pluck('id'); $result = $result->whereIn('type_id', $ids); } $result = $result->where('merchant_id', $request->merchant_id)->whereIn('pay_status', [1, 4])->orderBy('id', 'desc')->paginate(); foreach ($result as $key => $value) { $com = CommunityActivity::withTrashed()->where('id', $value->type_id)->first(); $question = ReportQuestion::where('type', 'community')->where('type_id', $value->type_id)->first(); $merchant_report = MerchantReport::where('type', 'community')->where('type_id', $com->id)->whereNotNull('commitd_at')->select('id', 'commitd_at')->first(); if (!$value->comment && !$value->Praise) { $state = 2;//去评价 } else { $state = 3;//查看评价 } $report_state = !empty($question) ? 2 : 1; $value->title = $com->title; $value->pic = $com->pic; $value->Subtitle = $com->Subtitle; $value->pay_type = $com->pay_type; $value->state = $state; $value->report_state = $report_state; if ($merchant_report) { $commitd_at = json_decode($merchant_report->commitd_at, true); sort($commitd_at); } else { $commitd_at = []; } $value->commitd_at = $commitd_at; //是否填写过报告 $has_write = ReportAnswer::where('m_user_id', $merchant_user_id)->where('m_order_id', $value->id)->first(); $value->has_write = !empty($has_write) ? 1 : 0; if ($com->class == 'one') $value->type = 'activity'; if ($com->class == 'many') $value->type = 'service'; $report = MerchantReport::where('type', 'community')->where('type_id', $com->id)->first(); $value->class = !empty($report) ? $report->class : 'one'; } return $this->success('ok', $result); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } /** * 订单详情 * @param Request $request * @param TouristOrder $order * @return JsonResponse|string */ public function communityOrder(Request $request, TouristOrder $order) { $order->activity; $order->linkmen = json_decode($order->linkmen, true); return $this->success('ok', $order); } public function updateOrderLinkmen(Request $request, TouristOrder $order) { $activity = $order->activity; if (empty($activity) || time() > strtotime($activity->end_time)) return $this->failure("活动已结束"); $linkmen = $request->linkmen; if (empty($linkmen)) throw new \Exception("缺少参数linkmen"); if (!is_array($linkmen)) throw new \Exception("linkmen数据类型不是数组"); $linkmen = json_encode($linkmen, JSON_UNESCAPED_UNICODE); $order->update(['linkmen' => $linkmen]); UpdateOrderLinkmen::dispatch($order->id)->onQueue('love'); return $this->success('ok'); } /** * 社区-训练营列表 * @param Request $request * @return JsonResponse|string */ public function activityList(Request $request) { try { if ($request->type == 'fulllink') { $result = CommunityActivity::where('status', 1)->where('type', 'fulllink')->orderBy('id', 'desc')->paginate(); } else {//商家版 $class = $request->class ?? 'one'; if ($request->merchant_id && $request->merchant_id >= 1) { $Account = MerchantAccount::where('id', $request->merchant_id)->first(); if (!$Account) return $this->failure('商户信息有误。'); $id = Anchor::where('m_id', $Account->id)->value('id'); } else { $anchor_openid = $request->anchor_openid; if (!$anchor_openid || $anchor_openid == 'null') { // 返回空数组 $result = CommunityActivity::where('pay_type', 'array')->paginate(); return $this->success('ok', $result); } $id = Anchor::where('openid', $anchor_openid)->value('id'); } if (!$id) { // 返回空数组 $result = CommunityActivity::where('pay_type', 'array')->paginate(); return $this->success('ok', $result); } $merchant_service_ids = MerchantService::where('merchant_id', $request->merchant_id)->where('type', 'community')->where('status', 1) ->pluck('type_id')->toArray(); $result = CommunityActivity::whereIn('community_activities.id', $merchant_service_ids) ->join('merchant_services', function ($join) use ($request, $class) { $join->on('community_activities.id', '=', 'merchant_services.type_id') ->where('community_activities.class', $class) ->where('community_activities.type', 'business') ->where('merchant_services.status', 1) ->whereNull('merchant_services.deleted_at'); }, null, null, 'left') ->select( 'community_activities.title', 'community_activities.pic', 'community_activities.price', 'community_activities.Subtitle', 'community_activities.end_time', 'community_activities.id' ) ->with('banners:class_id,icon') ->where('community_activities.status', 1) ->where('merchant_services.type', 'community') ->where('merchant_services.merchant_id', $request->merchant_id) ->orderBy('merchant_services.status', 'desc') ->orderBy('merchant_services.is_top', 'desc') ->orderBy('merchant_services.top_time', 'desc') ->paginate(); } $time = date('Y-m-d H:i:s'); foreach ($result as $key => $value) { $group = CollageGroup::where('type', 'community')->where('type_id', $value->id)->where('start_time', '<', $time) ->where('end_time', '>', $time)->first(); if ($group) { $value->is_group = 1; } else { $value->is_group = 0; } } return $this->success('ok', $result); } catch (\Exception $e) { $this->getError($e); return $this->failure('服务器休息中,请稍后再试'); } } public function activityPhotos(Request $request, $id) { $photos = ActivityPhoto::where('type', 'activity')->where('type_id', $id)->orderByDesc('id')->simplePaginate(); return $this->success('ok', $photos); } public function activityMenu(Request $request) { try { $activity_id = $request->id; $meeting = ActivityMeeting::where('activity_id', $activity_id)->first(); if (!empty($meeting)) { $meeting->menu = json_decode($meeting->menu); } return $this->success('ok', $meeting); } catch (\Exception $e) { return $this->failure($e->getMessage()); } } public function activityMeetingApply(Request $request) { try { $user_id = $request->merchant_user_id; $activity_id = $request->id; $name = $request->name; $mobile = $request->mobile; if (empty($name) || empty($mobile)) { return $this->failure('姓名和电话不为空'); } $is_sing = ActivityMeetingApply::where('activity_id', $activity_id)->where('mobile', $mobile)->exists(); if ($is_sing) { return $this->failure('您已签到'); } $is_apply = CommunityActivityMember::where('activity_id', $activity_id)->where('mobile', $mobile)->first(); if (!$is_apply) { return $this->failure('暂未报名'); } $activity_meeting = ActivityMeeting::where('activity_id', $activity_id)->first(); if (empty($activity_meeting)) { return $this->failure('活动会议不存在'); } //初始化桌子 $number = $activity_meeting->start_desk; //查看是否已经排桌 $apply_desk = ActivityMeetingApply::orderBydesc('desk_number')->limit(1)->first(); if (!empty($apply_desk)) { //查看排桌人数, $apply_desk_user = ActivityMeetingApply::where('desk_number', $apply_desk->desk_number)->count(); if ($apply_desk_user < $activity_meeting->user_number) { $number = $apply_desk->desk_number; } else { $number = $apply_desk->desk_number + 1; } } //获取同一个订单用户,同一个订单用户有安排桌子,优先安排到同一桌 $order_mobile = CommunityActivityMember::where('order_id', $is_apply->order_id)->pluck('mobile'); //查看桌子 $user_desks = ActivityMeetingApply::whereIn('mobile', $order_mobile)->pluck('desk_number'); if ($user_desks) { foreach ($user_desks as $user_desk) { $desk_count = ActivityMeetingApply::where('desk_number', $user_desk)->count(); if ($desk_count < $activity_meeting->user_number) { $number = $user_desk; break; } if (count($order_mobile) >= 3) { if ($apply_desk->desk_number) { $number = $apply_desk->desk_number + 1; } else { $number = $number + 1; } break; } } } //如果桌子号大于了最大排桌,往没坐满桌子排 if ($number >= $activity_meeting->total_desk) { $number = ActivityMeetingApply::select('desk_number', DB::raw('count(*) as count')) ->groupBy('desk_number') ->having('count', '<', $activity_meeting->user_number) ->orderBy('desk_number', 'asc') ->pluck('desk_number'); } if ($number >= $activity_meeting->total_desk) { return $this->failure('座位已满,请联系工作人员'); } $map = []; $map['user_id'] = $user_id; $map['activity_id'] = $activity_id; $map['name'] = $name; $map['mobile'] = $mobile; $map['desk_number'] = $number; ActivityMeetingApply::create($map); return $this->success('ok'); } catch (\Exception $e) { return $this->failure($e->getMessage()); } } public function meetingMenuDetail(Request $request) { try { $name = $request->name; $activity_id = $request->id; $meeting = ActivityMeeting::where('activity_id', $activity_id)->first(); if (empty($meeting)) { return $this->success('ok', $meeting); } $menus = json_decode($meeting->menu, true); $images = null; foreach ($menus as $menu) { if (!isset($menu['name']) || !isset($menu['images'])) { continue; } if ($menu['name'] != $name) { continue; } $images = $menu['images']; break; } if ($name == "入场签到") { $images = $meeting->sign_images; } return $this->success('ok', $images); } catch (\Exception $e) { return $this->failure($e->getMessage()); } } public function getMeetingDeskNumber(Request $request) { try { $mobile = $request->mobile; $activity_id = $request->id; $desk_number = ActivityMeetingApply::where('activity_id', $activity_id)->where('mobile', $mobile)->first(); if (empty($desk_number)) { return $this->failure('暂未查询到座位'); } $desk_number->desk_images = ActivityMeeting::where('activity_id', $activity_id)->value('desk_images'); return $this->success('ok', $desk_number); } catch (\Exception $e) { return $this->failure($e->getMessage()); } } function getUftxActivities() { if (config('app.env') == 'production') { $merchant_id = 44; } else { $merchant_id = 17; } $class = "one"; $time = date('Y-m-d H:i:s'); $account = MerchantAccount::where('id', $merchant_id)->first(); if (!$account) return $this->failure('商户信息有误。'); $id = Anchor::where('m_id', $account->id)->value('id'); if (!$id) { // 返回空数组 $result = CommunityActivity::where('pay_type', 'array')->paginate(); return $this->success('ok', $result); } $merchant_service_ids = MerchantService::where('merchant_id', $merchant_id)->where('type', 'community')->where('status', 1) ->pluck('type_id')->toArray(); $result = CommunityActivity::whereIn('community_activities.id', $merchant_service_ids) ->join('merchant_services', function ($join) use ($class) { $join->on('community_activities.id', '=', 'merchant_services.type_id') ->where('community_activities.class', $class) ->where('community_activities.type', 'business') ->where('merchant_services.status', 1) ->whereNull('merchant_services.deleted_at'); }, null, null, 'left') ->select( 'community_activities.title', 'community_activities.pic', 'community_activities.price', 'community_activities.Subtitle', 'community_activities.start_time', 'community_activities.end_time', 'community_activities.id', "community_activities.address" ) ->with('banners:class_id,icon') ->where('community_activities.status', 1) ->where('merchant_services.type', 'community') ->where("start_time", ">", $time) ->where('merchant_services.merchant_id', $merchant_id) ->orderBy('merchant_services.status', 'desc') ->orderBy('merchant_services.is_top', 'desc') ->orderBy('merchant_services.top_time', 'desc') ->get(); foreach ($result as $key => $value) { $group = CollageGroup::where('type', 'community')->where('type_id', $value->id)->where('start_time', '<', $time) ->where('end_time', '>', $time)->first(); if ($group) { $value->is_group = 1; } else { $value->is_group = 0; } } return $this->success('ok', $result); } }