773 lines
34 KiB
PHP
773 lines
34 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Server\H5;
|
||
|
||
use App\Contracts\UserContract;
|
||
use App\Jobs\UpdateOrderLinkmen;
|
||
use App\Models\Server\MEarningShare;
|
||
use App\Models\Coupon;
|
||
use App\Models\Server\ActivityMeeting;
|
||
use App\Models\Server\ActivityMeetingApply;
|
||
use App\Models\Server\ActivityPhoto;
|
||
use App\Models\Server\CollageGroup;
|
||
use App\Models\Server\CommunityActivityMember;
|
||
use App\Models\Server\MerchantBlacklist;
|
||
use App\Models\Server\MerchantService;
|
||
use App\Models\User;
|
||
use App\Models\UserCoupon;
|
||
use Illuminate\Http\JsonResponse;
|
||
use Illuminate\Http\Request;
|
||
use App\Http\Controllers\Controller;
|
||
use App\Models\CommunityActivity;
|
||
use App\Models\Live\Anchor;
|
||
use App\Models\Live\LiveBanner;
|
||
use App\Models\Server\MerchantAccount;
|
||
use App\Models\Server\MerchantReport;
|
||
use App\Models\Server\MerchantUser;
|
||
use App\Models\Server\ReportAnswer;
|
||
use App\Models\Server\ReportQuestion;
|
||
use App\Models\Server\TouristOrder;
|
||
use App\Models\UserMember;
|
||
use App\Models\WangYiYunUser;
|
||
use App\Services\IMService;
|
||
use App\Services\UserService;
|
||
use Illuminate\Support\Facades\DB;
|
||
use Illuminate\Support\Facades\Log;
|
||
use Illuminate\Support\Facades\Redis;
|
||
|
||
class ActivityController extends Controller
|
||
{
|
||
protected $userCon;
|
||
|
||
public function __construct(UserContract $userCon)
|
||
{
|
||
$this->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(Request $request)
|
||
{
|
||
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.end_time',
|
||
'community_activities.id'
|
||
)
|
||
->with('banners:class_id,icon')
|
||
->where('community_activities.status', 1)
|
||
->where('merchant_services.type', 'community')
|
||
->where("start_time", ">", $time)
|
||
->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();
|
||
|
||
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);
|
||
|
||
}
|
||
}
|