2394 lines
104 KiB
PHP
2394 lines
104 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers;
|
||
|
||
use App\Common\cache\redis\ApiRedisKey;
|
||
use App\Models\ActivityShareHistory;
|
||
use App\Models\CommunityActivity;
|
||
use App\Models\Live\LiveBanner;
|
||
use App\Models\MerchantAccount;
|
||
use App\Models\MerchantUsers;
|
||
use App\Models\Server\ActivityPhoto;
|
||
use App\Models\Server\MatchLog;
|
||
use App\Models\Server\MerchantMembers;
|
||
use App\Models\Server\MerchantUser;
|
||
use App\Models\TouristOrder;
|
||
use App\Models\WangYiYunUser;
|
||
use App\Models\UserMember;
|
||
use App\Services\IMService;
|
||
use App\Services\UserService;
|
||
use Illuminate\Http\Request;
|
||
use App\Models\Activity;
|
||
use App\Models\ActivityMember;
|
||
use App\Models\Wechat;
|
||
use App\Models\ProfileCourt;
|
||
use App\Models\ProfileCourtship;
|
||
use App\Models\User;
|
||
use App\Models\Server\SaasNotice;
|
||
use App\Models\ActivitySexVote;
|
||
use App\Models\ActivityVote;
|
||
use App\Models\ActivityMatch;
|
||
use App\Models\ActivitySexMatch;
|
||
use App\Models\Announcement;
|
||
use App\Models\PaasAnnouncement;
|
||
use App\Models\AccessRecord;
|
||
use App\Models\ActivityClass;
|
||
use EasyWechat;
|
||
|
||
use App\Contracts\ActivityContract;
|
||
use App\Contracts\UserContract;
|
||
use App\Models\ActivitiesCollect;
|
||
use App\Models\AnchorVideo;
|
||
use App\Models\Live\Anchor;
|
||
use App\Models\Live\Viewer;
|
||
use App\Models\Server\CollageGroup;
|
||
use App\Models\Server\CollageGroupHistories;
|
||
use App\Models\VersionsCheck;
|
||
use Illuminate\Support\Facades\DB;
|
||
use Illuminate\Support\Facades\Log;
|
||
use Illuminate\Support\Facades\Redis;
|
||
|
||
class ActivityController extends Controller
|
||
{
|
||
protected $activityCon;
|
||
protected $userCon;
|
||
|
||
public function __construct(ActivityContract $activityCon, UserContract $userCon)
|
||
{
|
||
$this->activityCon = $activityCon;
|
||
$this->userCon = $userCon;
|
||
}
|
||
|
||
/**
|
||
* 活动列表
|
||
* @param Request $Request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activities(Request $request)
|
||
{
|
||
$is_deadline = $request->input('is_deadline', 0);
|
||
$id = auth()->id();
|
||
$activities = Activity::withCount(['activityMember' => function ($query) use ($id) {
|
||
$query->where('user_id', auth()->id());
|
||
}
|
||
])->where('is_deadline', $is_deadline)->where('is_cancel', 0)->where('is_hidden', 0)->where('theme', '<>', '测试');
|
||
if ($is_deadline) {
|
||
$activities = $activities->orderBy('start_time', 'desc')->orderBy('id', 'desc');
|
||
} else {
|
||
$activities = $activities->orderBy('is_top', 'desc');
|
||
}
|
||
$keyword = $request->input('keyword');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$activities = $activities->where("theme", 'like', '%' . $keyword . '%');
|
||
}
|
||
$activities = $activities->paginate();
|
||
foreach ($activities as $activity) {
|
||
$start_time = date('Y/m/d', strtotime($activity->start_time));
|
||
$end_time = date('Y/m/d', strtotime($activity->end_time));
|
||
if ($start_time === $end_time) {
|
||
$time = $start_time;
|
||
} else {
|
||
if (empty($activity->end_time)) {
|
||
$time = $start_time . ' - ' . '待定';
|
||
} else {
|
||
$time = $start_time . ' - ' . $end_time;
|
||
}
|
||
}
|
||
$activity->city = $activity->city ?: '无';
|
||
$activity->dist = $activity->dist ?: '无';
|
||
$activity->time = $time;
|
||
$activity->poster = $activity->poster . '?x-oss-process=style/scale1';
|
||
}
|
||
return $this->success('ok', $activities);
|
||
}
|
||
|
||
/**活动列表 */
|
||
public function activitiesV2(Request $request)
|
||
{
|
||
$user = $this->getMyUserinfo();
|
||
$user_id = 0;
|
||
if ($user) {
|
||
$user_id = $user->id;
|
||
}
|
||
try {
|
||
$activities = Activity::with('class')->withCount([
|
||
'activityMember' => function ($query) use ($user_id) {
|
||
$query->where('user_id', $user_id);
|
||
}, 'activityMemberNotSign' => function ($query) use ($user_id) {
|
||
$query->where('user_id', $user_id);
|
||
$query->whereNull('sign_in');
|
||
}
|
||
])->where('is_cancel', 0)->where('is_hidden', 0)->where('theme', '<>', '测试');
|
||
$type = $request->input('type');
|
||
|
||
//类型
|
||
if ($type == '可报名' || $type == '进行中') {
|
||
$now = date('Y-m-d H:i:s');
|
||
$activities = $activities/*->where('start_time', '<', $now)*/ ->where('end_time', '>', $now);
|
||
} elseif ($type == '已结束') {
|
||
$activities = $activities->where('is_deadline', 1);
|
||
}
|
||
//分类
|
||
$class_id = $request->input('class_id');
|
||
if ($class_id && $class_id != '不限') {
|
||
$activities = $activities->where('class_id', $class_id);
|
||
}
|
||
//价格
|
||
$price = $request->input('price');
|
||
if ($price == '免费') {
|
||
$activities = $activities->where('fee', 0);
|
||
} elseif ($price == '收费') {
|
||
$activities = $activities->where('fee', '>', 0);
|
||
}
|
||
//筛选
|
||
$screen = $request->input('screen');
|
||
if ($screen == '已报名') {
|
||
if ($user_id) {
|
||
$activity_ids = ActivityMember::where('user_id', $user_id)->pluck('activity_id');
|
||
$activities = $activities->whereIn('id', $activity_ids);
|
||
}
|
||
} elseif ($screen == '未报名') {
|
||
if ($screen == '已报名') {
|
||
$activity_ids = ActivityMember::where('user_id', $user_id)->pluck('activity_id');
|
||
$activities = $activities->whereNotIn('id', $activity_ids);
|
||
}
|
||
}
|
||
$keyword = $request->input('keyword');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$activities = $activities->where("theme", 'like', '%' . $keyword . '%');
|
||
}
|
||
$activities = $activities->orderBy('is_top', 'desc')->orderBy('start_time', 'desc')->paginate();
|
||
foreach ($activities as $activity) {
|
||
if ($user_id == 0) {
|
||
$activity->activity_member_count = 0;
|
||
} else if ($activity->activity_member_count >= 1) {
|
||
if ($activity->can_repeat_sign == 1) {
|
||
if ($activity->activity_member_not_sign_count == 0) {
|
||
$activity->activity_member_count = 0;
|
||
} else {
|
||
$activity->activity_member_count = 1;
|
||
}
|
||
}
|
||
}
|
||
$apply_status = 1;
|
||
// 1.可以报名 。 2 .已经报名 3.截止报名 4.已结束
|
||
if ($activity->activity_member_count == 0) {
|
||
if (!empty($activity->apply_deadline)) {
|
||
$apply_deadline = strtotime($activity->apply_deadline);
|
||
if ($apply_deadline < time()) {
|
||
$apply_status = 3;
|
||
}
|
||
}
|
||
} else {
|
||
$apply_status = 2;
|
||
}
|
||
|
||
if ($activity->is_deadline == 1) {
|
||
$apply_status = 4;
|
||
}
|
||
|
||
$activity->apply_status = $apply_status;
|
||
|
||
|
||
$start_time = date('Y/m/d', strtotime($activity->start_time));
|
||
$end_time = date('Y/m/d', strtotime($activity->end_time));
|
||
if ($start_time === $end_time) {
|
||
$time = $start_time;
|
||
} else {
|
||
if (empty($activity->end_time)) {
|
||
$time = $start_time . ' - ' . '待定';
|
||
} else {
|
||
$time = $start_time . ' - ' . $end_time;
|
||
}
|
||
}
|
||
$activity->city = $activity->city ?: '无';
|
||
$activity->dist = $activity->dist ?: '无';
|
||
$activity->time = $time;
|
||
//sku
|
||
$skus = [];
|
||
if ($activity->sku) {
|
||
$skus = $activity->sku->skus;
|
||
if (!is_array($skus)) {
|
||
$skus = json_decode($activity->sku->skus, true);
|
||
}
|
||
}
|
||
$activity->skus = $skus;
|
||
unset($activity->sku);
|
||
if (count($skus) >= 1) {
|
||
$activity->fee = $skus[0]['price'];
|
||
}
|
||
if ($activity->fee == 0) {
|
||
$activity->fee = 0;
|
||
} else {
|
||
$activity->fee = floatval($activity->fee);
|
||
}
|
||
$activity->poster = $activity->poster . '?x-oss-process=style/scale1';
|
||
}
|
||
return $this->success('ok', $activities);
|
||
} catch (\Exception $e) {
|
||
return $this->failure('数据获取失败,请稍后再试');
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 获取商户同步的活动
|
||
* @param Request $request
|
||
*/
|
||
public function businessActivities(Request $request)
|
||
{
|
||
$version_check = VersionsCheck::where('state',1)->pluck('versions')->toArray();//审核中的版本号
|
||
$user = $this->authCheck();
|
||
$userId = 0;
|
||
if ($user) {
|
||
$userId = $user->id;
|
||
}
|
||
$class = $request->input('class', 'one');
|
||
|
||
$wechat = Wechat::where('user_id', $userId)->first();
|
||
$result = CommunityActivity::where('status', 1)->where('class', $class)->where('is_mp_show', 1)->withCount('member');
|
||
//if($request->merchant_id != 88){
|
||
$result = $result->where('type', 'business');
|
||
//}
|
||
$keyword = $request->input('keyword');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$result = $result->where("title", 'like', '%' . $keyword . '%');
|
||
}
|
||
if(in_array($request->versions,$version_check)){
|
||
//审核中版本不展示盲盒相关活动
|
||
$result = $result->where('title','not like','%盲盒%');
|
||
}
|
||
$result = $result->orderBy('mp_top', 'desc')->orderBy('sort', 'desc')->orderBy('apply_deadline', 'desc')->orderBy('id', '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) {
|
||
$is_group = 1;
|
||
} else {
|
||
$is_group = 0;
|
||
}
|
||
$merchant = Anchor::where('m_id', $value->merchant_id)->select('name as share_title', 'pic as share_icon')->first();
|
||
$value->merchant = $merchant;
|
||
if ($userId && $value->price > 0) {
|
||
$value['paymentStatus'] = TouristOrder::where('open_id', $wechat->openid)->where('type', 'community')->where('type_id', $value->id)->whereIn('pay_status', [1, 4])->count() ? true : false;
|
||
} elseif ($userId && $value->price == 0) {
|
||
$value['paymentStatus'] = TouristOrder::where('open_id', $wechat->openid)->where('type', 'community')->where('type_id', $value->id)->whereIn('pay_status', [1, 4])->exists();
|
||
} else {
|
||
$value['paymentStatus'] = false;
|
||
}
|
||
if ($value->sku) {
|
||
$sku = ltrim($value->sku, '[');
|
||
$sku = rtrim($sku, ']');
|
||
$value->sku = json_decode($sku, true);
|
||
}
|
||
//判断活动是否截止报名 is_deadline 0:可以报名 1:已报名 2:截止报名 3活动结束
|
||
if ($value->class == 'one') {
|
||
$is_deadline = 0;
|
||
if ($value['paymentStatus']) {
|
||
$is_deadline = 1;
|
||
} elseif ($value->apply_deadline && $value->apply_deadline <= $time) {
|
||
$is_deadline = 2;
|
||
} elseif ($value->end_time && $value->end_time <= $time) {
|
||
$is_deadline = 3;
|
||
}
|
||
$value->is_deadline = $is_deadline;
|
||
}
|
||
$value->is_group = $is_group;
|
||
}
|
||
return $this->success('ok', $result);
|
||
}
|
||
|
||
/**
|
||
* 同步的商户活动的详情
|
||
* @param Request $request
|
||
*/
|
||
public function businessActivity(Request $request)
|
||
{
|
||
$start = microtime(true);
|
||
$id = $request->id;
|
||
// if ($id == 1279) {
|
||
// $id = 1353;//临时切换
|
||
// }
|
||
$key = 'love_community_pv';
|
||
Redis::zincrby($key, 1, $id);
|
||
$openid = null;
|
||
$mp_openid = null;
|
||
$user = $this->authCheck();
|
||
$userId = 0;
|
||
$merchant_user_id = 0;
|
||
$linkmen['name'] = '';
|
||
$linkmen['mobile'] = '';
|
||
if ($user) {
|
||
// $openid = $user->wechat->official_openid;
|
||
$userId = $user->id;
|
||
$user_service = new UserService();
|
||
try {
|
||
$merchant_user = $user_service->syncSaasUser($user);
|
||
}catch (\Exception $e){
|
||
$this->getError($e);
|
||
}
|
||
$linkmen['name'] = $user->name;
|
||
$linkmen['mobile'] = $user->mobile;
|
||
$mp_openid = $user->wechat ? $user->wechat->openid : null;
|
||
}
|
||
//活动详情
|
||
$result = CommunityActivity::withTrashed()->where('id', $id)/*->where('merchant_id', 491)->where('is_mp_show',1)*/->first();
|
||
|
||
//记录首页弹框点击过来的人数
|
||
$home_popout_id = $request->input('home_popout_id');
|
||
if($home_popout_id && $user){
|
||
$cache_key = ApiRedisKey::getHomePopoutClickUserKey($home_popout_id);
|
||
Redis::sAdd($cache_key,$user->id);
|
||
}
|
||
|
||
if (!$result) return $this->failure('该活动已下线或不存在');
|
||
if ($user) $user->preview($result);
|
||
if(empty($result->address)) $result->address = '线上活动';
|
||
$result->linkmen = $linkmen;
|
||
$result->increment('pv', 1);
|
||
$result->price = floatval($result->price);
|
||
$banner = LiveBanner::where('class', 'community')->where('class_id', $id)->value('icon');
|
||
$result->banner = json_decode($banner, true);
|
||
$result->sku = json_decode($result->sku, true);
|
||
if ($result->pay_type == 'free'){
|
||
$result->sku = null;
|
||
}
|
||
//活动打赏
|
||
$reward_count = \App\Models\Server\TouristOrder::where('type', 'reward_activity')->where('type_id', $id)->whereIn('pay_status', [1, 4])->get()->count();
|
||
$result->reward_count = $reward_count;
|
||
//商户信息
|
||
$merchant = MerchantAccount::with('anchorV2')->where('id', $result->merchant_id)->first();
|
||
// $result->merchant_name = $merchant['anchorV2']['name'];
|
||
// $result->merchant_pic = $merchant['anchorV2']['pic'];
|
||
$result->merchant_name = !empty($merchant['anchorV2']) ? $merchant['anchorV2']['name'] : '未获取';
|
||
$result->merchant_pic = !empty($merchant['anchorV2']) ? $merchant['anchorV2']['pic'] : User::DefaultAvatar;
|
||
// $result->member_count = ($result->hidden_order_total == 1)?'':(TouristOrder::where('type', 'community')->where('type_id', $id)->whereIn('pay_status', [1, 4])->groupBy('open_id')->get()->count());
|
||
$orders = TouristOrder::where('type', 'community')->where('type_id', $id)->whereIn('pay_status', [1, 4])->groupBy('open_id')->get();
|
||
$count = 0;
|
||
foreach ($orders as $order) {
|
||
if ($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;
|
||
//活动成员
|
||
$join_member = [];
|
||
$i = 0;
|
||
//订单列表
|
||
$orders = TouristOrder::where('type', 'community')->where('type_id', $id)->whereIn('pay_status', [1, 4])->where('open_id', '<>', null)->whereIn('channel', [1, 3])->groupBy('open_id')->limit(5)->get();
|
||
foreach ($orders as $order) {
|
||
if ($order->channel == 1) {
|
||
$join_user = MerchantUser::where('openid', $order->open_id)->first();
|
||
$join_member[$i]['user_id'] = $join_user->user_id;
|
||
$join_member[$i]['photo'] = $join_user->pic;
|
||
$join_member[$i]['name'] = $join_user->nickname;
|
||
} else {
|
||
$join_user = Wechat::with('user')->where('openid', $order->open_id)->first();
|
||
if (empty($join_user)) continue;
|
||
$join_member[$i]['user_id'] = $join_user->user_id;
|
||
$join_member[$i]['photo'] = $join_user['user']['photo'];
|
||
$join_member[$i]['name'] = $join_user['user']['nickname'];
|
||
if (!($join_member[$i]['photo'])) $join_member[$i]['photo'] = MerchantUser::where('user_id', $join_user->user->id)->value('pic');
|
||
if (!($join_member[$i]['name'])) $join_member[$i]['name'] = MerchantUser::where('user_id', $join_user->user->id)->value('nickname');
|
||
}
|
||
$join_member[$i]['name'] = $result->hidden_avatar ? mb_substr($join_member[$i]['name'], 0, 1)."**": $join_member[$i]['name'];
|
||
$i++;
|
||
}
|
||
$result->join_member = $join_member;
|
||
$merchant_user_id = $this->matchMerchantUser($userId);
|
||
// 是否购买过
|
||
$pay_status = TouristOrder::where('account_id', $merchant_user_id)->where('type', 'community')->where('type_id', $id)->whereIn('pay_status', [1, 4])->exists();
|
||
$result->pay_status = $pay_status;
|
||
// $result->share_qr_code = $qr_code;
|
||
// 是否领取过优惠券
|
||
|
||
$coupon = UserMember::where('type', 'community')->where('type_id', $id)->where('m_id', $request->merchant_id)->where('m_user_id', $merchant_user_id)->exists();
|
||
|
||
$value = TouristOrder::where('type', 'community')->where('type_id', $id)->where('account_id', $merchant_user_id)->whereIn('pay_status', [1, 4])->first();
|
||
//判断活动是否截止报名 is_deadline 0:可以报名 1:已报名 2:截止报名 3活动结束
|
||
$time = date('Y-m-d H:i:s');
|
||
if ($result->class == 'one') {
|
||
$is_deadline = 0;
|
||
if ($value || $coupon) {
|
||
$is_deadline = 1;
|
||
} elseif ($result->apply_deadline && $result->apply_deadline <= $time) {
|
||
$is_deadline = 2;
|
||
} elseif ($result->end_time && $result->end_time <= $time) {
|
||
$is_deadline = 3;
|
||
}
|
||
$result->is_deadline = $is_deadline;
|
||
}
|
||
|
||
$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;
|
||
$end = microtime(true);
|
||
$result->cost_time = $end - $start;
|
||
|
||
//下架或删除状态 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;
|
||
$order_id = null;
|
||
if ($request->from_openid && $request->from_openid != 'null') {
|
||
$user_service = new UserService();
|
||
$type = $result->class == 'one' ? '活动' : '服务';
|
||
$user_service->generateClientComment(2, $mp_openid, $request->from_openid, $type, $result->id, $result->title);
|
||
}
|
||
$result->love_pv = Redis::zscore('love_community_pv', $id) ?: 0;
|
||
//检查是否配置拼团内容
|
||
$group = CollageGroup::where('type', 'community')->where('type_id', $request->id)->where('start_time', '<', $time)->where('end_time','>',$time)->first();
|
||
if ($group) $group_sku = json_decode($group->sku, true);
|
||
$result->has_group = $group ? 1 : 0;//1有 0无
|
||
$result->group = $group;
|
||
if (isset($group_sku)) $result->sku = $group_sku;
|
||
if ($group) {
|
||
$result->group->need_count = $group->require_num;
|
||
$history = CollageGroupHistories::with('tOrder')->whereHas('tOrder', function ($sql) {
|
||
$sql->whereIn('pay_status', [1, 4]);
|
||
})->where('group_id', $group->id)->where('is_initiator', 1)->where('m_user_id', $merchant_user_id)->orderBy('created_at', 'desc')->first();
|
||
if ($history) {
|
||
$order_id = $history->m_order_id;
|
||
//目前参与人员
|
||
$user_ids = CollageGroupHistories::with('tOrder')->whereHas('tOrder', function ($sql) {
|
||
$sql->whereIn('pay_status', [1, 4]);
|
||
})->where('group_id', $group->id)->where('deadline', $history->deadline)->pluck('m_user_id')->toArray();
|
||
$count = count($user_ids);
|
||
$need_count = $history->group->require_num - $count;
|
||
unset($history->group);
|
||
$result->group->need_count = $need_count;
|
||
}
|
||
}
|
||
$result->order_id = $order_id;
|
||
$result->share_qrcode = $this->shareActivityQrcode($result,$mp_openid,$userId);
|
||
$result->has_pics = ActivityPhoto::where('type', 'activity')->where('type_id', $result->id)->count()?true:false;
|
||
//sku报名人数限制
|
||
$tourist_order = new \App\Models\Server\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,$result->merchant_id,$item['sku_id']);
|
||
$item['can_buy'] = $item['sku_buy_num'] == $total_limit_num ? 0 : 1;
|
||
}
|
||
}
|
||
$result['sku'] = $sku;
|
||
return $this->success('ok', $result);
|
||
}
|
||
|
||
public function shareActivityQrcode($activity,$openid,$user_id,$versions=10){
|
||
try {
|
||
if($user_id){
|
||
$user = User::find($user_id);
|
||
$share_poster = $user->activityShareHistories()->where(['activity_id' => $activity->id, 'versions' => $versions])->first();
|
||
if ($share_poster && $share_poster->share_poster) return $share_poster->share_poster;
|
||
}
|
||
$app = EasyWechat::miniProgram();
|
||
$scene = 'party_id='.$activity->id.'&fuid='.$user_id;
|
||
if ($activity->class == 'one') {
|
||
// $response = $app->app_code->get('/pages/party/detail?party_id=' . $activity->id . '&from_openid=' . $openid . '&from_user_id=' . $user_id, $data);
|
||
$path = 'pages/party/detail';
|
||
} else {
|
||
// $response = $app->app_code->get('/pages/party/servicesDetail?party_id=' . $activity->id . '&from_openid=' . $openid . '&from_user_id=' . $user_id, $data);
|
||
$path = 'pages/party/servicesDetail';
|
||
}
|
||
$response = $app->app_code->getUnlimit($scene, [
|
||
'page'=>$path,
|
||
'is_hyaline'=>true
|
||
]);
|
||
$qrcode_path = storage_path('qrcode');
|
||
$file_name = 'activity'.$activity->id.'userid'.$user_id.'.jpg';
|
||
// Log::info("场景值:".$scene.', 长度:'.strlen($scene));
|
||
// Log::info($response);
|
||
if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
|
||
$response->saveAs($qrcode_path, $file_name);
|
||
}
|
||
$file_path = $qrcode_path.'/'.$file_name;
|
||
$qrcode = null;
|
||
if(file_exists($file_path)){
|
||
$qrcode = $this->uploadFile($file_path);
|
||
try{
|
||
unlink($file_path);
|
||
}catch(\Exception $e) {
|
||
return $qrcode;
|
||
// return $this->failure($e->getMessage());
|
||
}
|
||
}
|
||
// Log::info("二维码路径".$file_path);
|
||
// Log::info("分享二维码". $qrcode);
|
||
if ($user_id && $qrcode) {
|
||
ActivityShareHistory::updateOrCreate([
|
||
'user_id' => $user_id,
|
||
'activity_id' => $activity->id,
|
||
'versions' => $versions
|
||
], ['share_poster' => $qrcode]);
|
||
}
|
||
return $qrcode;
|
||
}catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return '';
|
||
}
|
||
|
||
}
|
||
|
||
//某个活动 未完成拼团列表
|
||
public function unfinishedGroups(Request $request){
|
||
$user = $this->authCheck();
|
||
$userId = 0;
|
||
if ($user) {
|
||
$userId = $user->id;
|
||
}
|
||
$merchant_user = MerchantUsers::where('user_id', $userId)->first();
|
||
if(!$merchant_user){
|
||
$merchant_user_id = $this->matchMerchantUser($userId);
|
||
$merchant_user = MerchantUsers::where('id', $merchant_user_id)->first();
|
||
}
|
||
if($merchant_user){
|
||
//已参与
|
||
$exists = TouristOrder::where('type','community')->where('type_id',$request->id)->whereIn('pay_status',[1,4])->where('account_id',$merchant_user->id)->first();
|
||
if($exists) return $this->success('ok',[]);
|
||
}
|
||
$type = $request->input('type','activity');
|
||
if($type == 'activity' || 'service') $type = 'community';
|
||
$type_id = $request->type_id;
|
||
$group = CollageGroup::where('type',$type)->where('type_id',$type_id)->first();
|
||
if(!$group) return $this->success('ok',[]);
|
||
$time = date('Y-m-d H:i:s');
|
||
$histories = CollageGroupHistories::with('tOrder')->whereHas('tOrder',function($sql){
|
||
$sql->whereIn('pay_status',[1,4]);
|
||
})->where('group_id',$group->id)->where('is_initiator',1)->where('status',0)->where('deadline','>',$time)->get();
|
||
foreach ($histories as $key => $history) {
|
||
$require_num = $history->group->require_num;
|
||
//已经参与人数
|
||
$user_ids = CollageGroupHistories::with('tOrder')->whereHas('tOrder',function($sql){
|
||
$sql->whereIn('pay_status',[1,4]);
|
||
})->where('group_id',$group->id)->where('deadline',$history->deadline)->pluck('m_user_id')->toArray();
|
||
$num = count($user_ids);
|
||
$need = ($require_num - $num) > 0 ? $require_num - $num : 0;
|
||
$history->need_count = $need;
|
||
$user_id = $history->mUser->user_id;
|
||
$user = User::find($user_id);
|
||
$history->avatar = $user ? $user->getOriginal('circle_avatar') : User::DefaultAvatar;
|
||
if(empty($history->avatar)) $history->avatar = User::DefaultAvatar;
|
||
$history->nickname = $user ? mb_substr(trim($user->nickname), 0, 1).'**' : '***';
|
||
unset($history->mUser);
|
||
unset($history->tOrder);
|
||
}
|
||
return $this->success('ok',$histories);
|
||
}
|
||
|
||
//热门拼团
|
||
public function hotGroups(Request $request){
|
||
$time = date('Y-m-d H:i:s');
|
||
$mine = $this->authCheck();
|
||
$order_id = $request->order_id;
|
||
// $order = TouristOrder::find($order_id);
|
||
$m_user_id = 0;
|
||
$join_ids = [];//我参与的活动id
|
||
if($mine){
|
||
$m_user_id = $this->matchMerchantUser($mine->id);
|
||
//我是否参与
|
||
$join_ids = TouristOrder::where('type','community')->where('account_id',$m_user_id)->whereIn('pay_status',[1,4])->pluck('type_id')->toArray();
|
||
}
|
||
$groups = CollageGroup::where('m_id',491)->where('type','community')->where('start_time','<',$time)->where('end_time','>',$time)->whereNotIn('type_id',$join_ids)->limit(5)->get();
|
||
foreach ($groups as $key => $group) {
|
||
$type = $group->type;
|
||
$group->title = $group->$type ? $group->$type->title : '未获取';
|
||
$group->pic = $group->$type ? $group->$type->pic : User::DefaultAvatar;
|
||
$group->sku = json_decode($group->sku,true);
|
||
$min_price = [];
|
||
$single_buy = $group->price;
|
||
foreach ($group->sku as $skus) {
|
||
$min_price[] = $skus['discount_price'];
|
||
}
|
||
$group->discount_price = min($min_price);
|
||
|
||
foreach ($group->sku as $skus) {
|
||
if($group->discount_price == $skus['discount_price']){
|
||
$single_buy = $skus['price'];
|
||
break;
|
||
}
|
||
}
|
||
$group->single_buy = $single_buy;
|
||
// $group->single_buy = $group->sku[0]['price'];
|
||
// $group->discount_price = $group->sku[0]['discount_price'];
|
||
$group->save_money = ($group->single_buy - $group->discount_price) > 0 ? number_format($group->single_buy - $group->discount_price,2):0;
|
||
unset($group->$type);
|
||
}
|
||
return $this->success('ok',$groups);
|
||
}
|
||
|
||
|
||
// public function hotGroups(Request $request){
|
||
// $time = date('Y-m-d H:i:s');
|
||
// $mine = $this->authCheck();
|
||
// $order_id = $request->order_id;
|
||
// $m_user_id = 0;
|
||
// $group_ids = [];
|
||
// if($mine){
|
||
// $m_user_id = $this->matchMerchantUser($mine->id);
|
||
// //我参与的拼团id
|
||
// $group_ids = CollageGroupHistories::with('tOrder')->whereHas('tOrder',function($sql){
|
||
// $sql->whereIn('pay_status',[1,4]);
|
||
// })->where('m_user_id',$m_user_id)->pluck('group_id');
|
||
// }
|
||
// $histories = CollageGroupHistories::with('tOrder','group')->whereHas('tOrder',function($sql){
|
||
// $sql->whereIn('pay_status',[1,4]);
|
||
// })->where('is_initiator',1)->where('status',0)->whereNotIn('group_id',$group_ids)->where('m_order_id','<>',$order_id)->where('deadline','>',$time)->orderBy('deadline','asc')->limit(5)->get();
|
||
// foreach ($histories as $key => $value) {
|
||
// $value->sku = json_decode($value->group->sku);
|
||
// $type = $value->group->type;
|
||
// $value->single_buy = $value->sku[0]->price;//原价
|
||
// $value->discount_price = $value->sku[0]->discount_price;//折扣价
|
||
// $value->save_money = ($value->single_buy - $value->discount_price) > 0 ? number_format($value->single_buy - $value->discount_price,2):0;
|
||
// $value->pic = $value->group->$type ? $value->group->$type->pic : User::DefaultAvatar;
|
||
// $value->title = $value->group->$type ? $value->group->$type->title : '未获取';
|
||
// $user_ids = CollageGroupHistories::with('tOrder')->whereHas('tOrder',function($sql){
|
||
// $sql->whereIn('pay_status',[1,4]);
|
||
// })->where('group_id',$value->group_id)->where('deadline',$value->deadline)->pluck('m_user_id')->toArray();
|
||
// $num = count($user_ids);
|
||
// $need = ($value->group->require_num - $num) > 0 ? ($value->group->require_num - $num) : 0;
|
||
// $value->need_count = $need;
|
||
// unset($value->group);
|
||
// unset($value->tOrder);
|
||
// }
|
||
// return $this->success('ok',$histories);
|
||
// }
|
||
|
||
|
||
/**
|
||
* 创建网易云信账号
|
||
* @param $data
|
||
* @param $merchant_user_id
|
||
*/
|
||
public function createWyyUser($data, $merchant_user_id)
|
||
{
|
||
$im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET'));
|
||
$result = $im_service->createUserId(10000000 + $merchant_user_id, $data['nickname'], $props = '{}', null);
|
||
\Log::info('创建网易云账号');
|
||
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();
|
||
}
|
||
}
|
||
}
|
||
|
||
public function activityClasses(Request $request)
|
||
{
|
||
$classes = ActivityClass::
|
||
withCount(['activity' => function ($q) {
|
||
$q->where('is_cancel', 0)
|
||
->where('is_hidden', 0)
|
||
->where('theme', '<>', '测试');
|
||
}])
|
||
->get()->toArray();
|
||
$array = [];
|
||
$i = 0;
|
||
foreach ($classes as $c) {
|
||
if ($c['activity_count'] > 0) {
|
||
$array[] = $c;
|
||
// $array[$i]['id'] = $c['id'];
|
||
// $array[$i]['title'] = $c['title'];
|
||
// $array[$i]['created_at'] = date('Y-m-d H:i:s',$c->created_at);
|
||
$i++;
|
||
}
|
||
}
|
||
return $this->success('ok', $array);
|
||
}
|
||
|
||
/**
|
||
* 活动详情
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activity(Request $request, $activity_id)
|
||
{
|
||
$user = $this->authCheck();
|
||
$id = 0;
|
||
if ($user) {
|
||
$id = $user->id;
|
||
}
|
||
$is_set = Activity::where('id', $activity_id)->count();
|
||
if (empty($is_set)) {
|
||
return $this->failure('活动不存在');
|
||
}
|
||
$activity = Activity::with('class')->withCount([
|
||
|
||
'activityMember' => function ($query) use ($id) {
|
||
|
||
$query->where('user_id', $id);
|
||
}, 'activityMemberNotSign' => function ($query) use ($id) {
|
||
$query->where('user_id', $id);
|
||
$query->whereNull('sign_in');
|
||
}
|
||
|
||
])->findOrFail($activity_id);
|
||
$activity->end_time = $activity->end_time ? $activity->end_time : '待定';
|
||
$activity->end_time = substr($activity->end_time, 0, 16);
|
||
$activity->start_time = substr($activity->start_time, 0, 16);
|
||
$activity->address = $activity->address ?: '全国';
|
||
$activity->increment('click_num', 1);
|
||
//最近参加
|
||
$member_count = ActivityMember::where('activity_id', $activity_id)
|
||
->join('users', 'users.id', 'activity_members.user_id')
|
||
->where('is_joined', 1)
|
||
->orderBy('id', 'desc')->count();
|
||
$activity->member_count = $member_count;
|
||
|
||
|
||
if ($activity->activity_member_count >= 1) {
|
||
if ($activity->can_repeat_sign == 1) {
|
||
if ($activity->activity_member_not_sign_count == 0) {
|
||
$activity->activity_member_count = 0;
|
||
} else {
|
||
$activity->activity_member_count = 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
// 1.可以报名 。 2 .已经报名 3.截止报名 4. 活动已结束
|
||
$apply_status = 1;
|
||
if ($activity->activity_member_count == 0) {
|
||
if (!empty($activity->apply_deadline)) {
|
||
$apply_deadline = strtotime($activity->apply_deadline);
|
||
if ($apply_deadline < time()) {
|
||
$apply_status = 3;
|
||
}
|
||
}
|
||
} else {
|
||
$apply_status = 2;
|
||
}
|
||
|
||
if ($activity->is_deadline == 1) {
|
||
$apply_status = 4;
|
||
}
|
||
|
||
$activity->apply_status = $apply_status;
|
||
|
||
$members = ActivityMember::where('activity_id', $activity_id)->where('is_joined', 1)
|
||
->orderBy('id', 'desc');
|
||
$members = $members
|
||
->join('users', 'users.id', 'activity_members.user_id')
|
||
->get(['activity_members.id',
|
||
'activity_members.user_id',
|
||
'activity_members.activity_id',
|
||
'activity_members.linkmen',
|
||
'activity_members.name',
|
||
'activity_members.mobile',
|
||
'activity_members.avatar',
|
||
'activity_members.sex',
|
||
'activity_members.is_joined',
|
||
'activity_members.sign_in',
|
||
'activity_members.created_at',
|
||
'activity_members.deleted_at',
|
||
'users.id as user_u_id',
|
||
'users.nickname',
|
||
'users.type',
|
||
'users.nickname as name',
|
||
'users.circle_avatar as user_circle_avatar',
|
||
'users.photo as user_photo',
|
||
'users.app_avatar as user_app_avatar'
|
||
]
|
||
);
|
||
|
||
|
||
foreach ($members as $member) {
|
||
if (!$member->avatar) {
|
||
if ($member->user_circle_avatar) {
|
||
$member->avatar = $member->user_circle_avatar;
|
||
} else if ($member->app_avatar) {
|
||
$member->avatar = $member->app_avatar;
|
||
} else if ($member->photo) {
|
||
$member->avatar = $member->photo;
|
||
} else {
|
||
$member->avatar = $this->userCon->defaultAvatar($member->sex);
|
||
}
|
||
}
|
||
$member->avatar = \CommonUtilsService::pictureLimit($member->avatar);
|
||
unset($member->user);
|
||
}
|
||
|
||
//缩略图海报
|
||
$activity->thumbnail_poster = $activity->poster . '?x-oss-process=image/auto-orient,1/resize,m_fill,w_500,h_400/quality,q_90';
|
||
$activity->detail_pic = json_decode($activity->detail_pic, true);
|
||
//sku
|
||
$skus = [];
|
||
if ($activity->sku) {
|
||
$skus = $activity->sku->skus;
|
||
if (!is_array($skus)) {
|
||
$skus = json_decode($activity->sku->skus, true);
|
||
}
|
||
$i = 0;
|
||
for ($s = 0; $s < count($skus); $s++) {
|
||
$skus[$s]['price'] = \CommonUtilsService::moneyFormat($skus[$s]['price'], 2);
|
||
}
|
||
}
|
||
|
||
$activity->hasFavorited = 0;
|
||
if ($user) {
|
||
//是否收藏
|
||
$activity->hasFavorited = ($user->hasFavorited($activity)) ? 1 : 0;
|
||
}
|
||
$activity->skus = $skus;
|
||
//价格区间
|
||
$activity->price_range = $this->getPriceRange($skus, $activity);
|
||
unset($activity->sku);
|
||
return $this->success('ok', compact('activity', 'members'));
|
||
}
|
||
|
||
public function getPriceRange($skus, $activity)
|
||
{
|
||
if (count($skus)) {
|
||
if (count($skus) == 1) {
|
||
return floatval($skus[0]['price']);
|
||
// return \CommonUtilsService::moneyFormat($skus[0]['price'],0);
|
||
} else {
|
||
$prices = [];
|
||
foreach ($skus as $sku) {
|
||
$prices[] = $sku['price'];
|
||
}
|
||
sort($prices);
|
||
$min_price = $prices[0];
|
||
$max_price = $prices[count($prices) - 1];
|
||
if ($min_price == $max_price) {
|
||
return floatval($min_price);
|
||
// return \CommonUtilsService::moneyFormat($min_price,0);
|
||
}
|
||
return floatval($min_price) . '~' . floatval($max_price);
|
||
}
|
||
} else {
|
||
return floatval($activity->fee);
|
||
// return \CommonUtilsService::moneyFormat($activity->fee,0) ;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 活动成员
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activityMembers(Request $request, $activity_id)
|
||
{
|
||
$members = ActivityMember::whereHas('user', function ($sql) {
|
||
$sql->where('hidden_profile', '<>', 'ALLSEX');
|
||
})->where('activity_id', $activity_id)->where('is_joined', 1);
|
||
$keyword = $request->input('keyword');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$members = $members->where("name", 'like', '%' . $keyword . '%');
|
||
}
|
||
$sex = $request->input('sex');
|
||
if ($sex) {
|
||
$members = $members->where('sex', $sex);
|
||
}
|
||
$nopage = $request->input('nopage');
|
||
if ($nopage) {
|
||
$members = $members->get();
|
||
} else {
|
||
$members = $members->orderBy('id', 'desc')->paginate();
|
||
}
|
||
foreach ($members as $member) {
|
||
$member->type = User::where('id', $member->user_id)->value('type');
|
||
if (empty($member->sex)) {
|
||
$member->sex = $member->user->sex;
|
||
}
|
||
}
|
||
return $this->success('ok', $members);
|
||
}
|
||
|
||
/**
|
||
* 分享活动
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function shareActivity(Request $request, $activity_id)
|
||
{
|
||
$activity = Activity::find($activity_id);
|
||
if (empty($activity)) {
|
||
return $this->failure('该活动不存在');
|
||
}
|
||
|
||
$user = auth()->user();
|
||
if (empty($user)) {
|
||
$user = $this->authCheck();
|
||
}
|
||
$is_complete = 1;
|
||
$openid = '';
|
||
if (!empty($user)) {
|
||
$versions = 6;
|
||
$share_poster = $user->activityShareHistories()->where(['activity_id' => $activity_id, 'versions' => $versions])->first();
|
||
if ($share_poster) {
|
||
$pic = $share_poster->share_poster;
|
||
$thumbnail_poster = $pic . '?x-oss-process=image/auto-orient,1/resize,m_fill,w_500,h_400/quality,q_90';
|
||
$theme = $activity->theme;
|
||
return $this->success('ok', compact('pic', 'is_complete', 'thumbnail_poster', 'theme'));
|
||
}
|
||
$name = $user->nickname;
|
||
$openid = $user->wechat->openid;
|
||
if ($user->circle_avatar) {
|
||
$avatar = $user->circle_avatar;
|
||
} else {
|
||
$avatar = $user->wechat->avatar2 ?: $user->wechat->avatar;
|
||
// $avatar = $this->circleImage($avatar, $user->id);
|
||
}
|
||
if ($user->type == 'single') {
|
||
$profile = ProfileCourtship::where('user_id', $user->id)->first();
|
||
if (empty($profile)) {
|
||
$is_complete = 0;
|
||
} else {
|
||
$is_complete = ($this->userCon->isCompleteProfileV3($user)) ? 1 : 0;
|
||
}
|
||
}
|
||
} else {
|
||
$name = $request->input('name');
|
||
$avatar = $request->input('avatar');
|
||
$is_complete = 0;
|
||
}
|
||
$param = [
|
||
'avatar' => $avatar,
|
||
'openid' => $openid,
|
||
'name' => $name,
|
||
'user_id' => empty($user) ? 0 : $user->id
|
||
];
|
||
//生成海报
|
||
$pic = $this->makeUserShareActivityPoster($activity, $param);
|
||
if (empty($pic)) return $this->failure('图片上传失败,请稍后再试');
|
||
//创建记录
|
||
if ($user) {
|
||
$user->activityShareHistories()->create([
|
||
'activity_id' => $activity_id,
|
||
'share_poster' => $pic,
|
||
'versions' => $versions
|
||
]);
|
||
}
|
||
// $pic = 'http://local-pictures.oss-cn-shenzhen.aliyuncs.com/201812/18/1545103843activity_qrocde.png';
|
||
$thumbnail_poster = $activity->poster . '?x-oss-process=image/auto-orient,1/resize,m_fill,w_500,h_400/quality,q_90';
|
||
$theme = $activity->theme;
|
||
return $this->success('ok', compact('pic', 'is_complete', 'thumbnail_poster', 'theme'));
|
||
}
|
||
|
||
/**
|
||
* 生成用户分享海报
|
||
**/
|
||
public function makeUserShareActivityPoster($activity, $param)
|
||
{
|
||
$openid = $param['openid'];
|
||
$avatar = $param['avatar'];
|
||
$name = $param['name'];
|
||
$user_id = empty($param['user_id']) ? 0 : $param['user_id'];
|
||
$activity_id = $activity->id;
|
||
//二维码
|
||
$app = EasyWechat::miniProgram();
|
||
$data = [];
|
||
$data['is_hyaline'] = true;
|
||
$response = $app->app_code->get('/pages/party/detail?party_id=' . $activity_id . '&from_openid=' . $openid . '&from_user_id=' . $user_id, $data);
|
||
$path = time() . 'activity_qrocde.png';
|
||
$filename = $response->saveAs(storage_path('qrcode'), $path);
|
||
$qrcode_path = storage_path("qrcode/" . $path);
|
||
$qrcode = $qrcode_path;
|
||
$image1 = 'https://local-pictures.oss-cn-shenzhen.aliyuncs.com/202106/05/6a6bd16d5f9faf5d3a41f8d7d4f8bcbf.jpeg';
|
||
$image2 = $qrcode;
|
||
//二维码
|
||
$new_image = $this->imageAddImage($image1, $image2, 216, 216, 266, 196, 'bottom-left');
|
||
//头像
|
||
if (!empty($avatar)) {
|
||
// $back_avatar = 'https://local-pictures.oss-cn-shenzhen.aliyuncs.com/202106/05/12b054ed60c1d4469078f4b2871cfee7.png';
|
||
// $new_image = $this->imageAddImage($new_image, $back_avatar, 108, 108, 56, 62, 'top-left');
|
||
$new_image = $this->imageAddImage($new_image, $avatar, 98, 98, 61, 67, 'top-left');
|
||
}
|
||
//姓名
|
||
$new_image = $this->textAddImage($new_image, '您好,我是' . $name, 32, 190, 82, '#FFFFFF', 'left');
|
||
//介绍
|
||
$new_image = $this->textAddImage($new_image, '我在福恋发现了一个精彩活动', 32, 190, 126, '#FFFFFF', 'left');
|
||
//海报
|
||
$new_image = $this->imageAddImage($new_image, $activity->poster, 568, 322, 92, 258, 'top-left');
|
||
|
||
$top_height = 604;
|
||
//主题 标题
|
||
$new_image = $this->textAddImage($new_image, mb_substr($activity->theme, 0, 14), 40, 92, 604, '#000000', 'left');
|
||
$top_height += 20 + 40;
|
||
if (strlen($activity->theme) > 28) {
|
||
$new_image = $this->textAddImage($new_image, mb_substr($activity->theme, 14, strlen($activity->theme)), 40, 92, $top_height, '#000000', 'left');
|
||
$top_height += 20 + 40;
|
||
}
|
||
|
||
//主办方|费用
|
||
if ($activity->fee != 0.00) {
|
||
$fee = '¥' . $activity->fee;
|
||
} else {
|
||
$fee = '免费';
|
||
}
|
||
$host_img = 'https://local-pictures.oss-cn-shenzhen.aliyuncs.com/202106/05/52ef885b160b01df745e97e93802dc95.png';
|
||
$host = '主办:' . $activity->host/*.' | 费用:'.$fee*/
|
||
;
|
||
// $new_image = $this->imageAddImage($new_image, $host_img, 148,40, 92, 668, 'top-left');
|
||
$new_image = $this->textAddImage($new_image, $host, 28, 92, $top_height, '#333333', 'left');
|
||
$top_height += 28 + 28;
|
||
$address = str_limit($activity->address, 38, '...');
|
||
//地址 - 小图标
|
||
$addressIcon = 'https://local-pictures.oss-cn-shenzhen.aliyuncs.com/202106/05/d719038370411e4cb9da3ff2a94926da.png';
|
||
$new_image = $this->imageAddImage($new_image, $addressIcon, 22, 26, 92, $top_height, 'top-left');
|
||
$new_image = $this->textAddImage($new_image, $address, 26, 122, $top_height, '#666666', 'left');
|
||
$top_height += 26 + 19;
|
||
if (\CommonUtilsService::isDateValid($activity->start_time)) {
|
||
//时间
|
||
$d = \CommonUtilsService::diffBetweenTwoDays($activity->start_time, $activity->end_time);
|
||
if ($d != 0) {
|
||
$time = date('Y-m-d H:i', strtotime($activity->start_time)) . ' ~ ' . date('Y-m-d H:i', strtotime($activity->end_time));
|
||
} else {
|
||
$time = date('Y-m-d H:i', strtotime($activity->start_time)) . ' ~ ' . date('H:i', strtotime($activity->end_time));
|
||
}
|
||
} else {
|
||
$time = $activity->start_time . ' ~ ' . $activity->end_time;
|
||
}
|
||
|
||
//时间 - 小图标
|
||
$dateIcon = 'https://local-pictures.oss-cn-shenzhen.aliyuncs.com/202106/05/2df30990cb50a0960fa405bde93f132b.png';
|
||
$new_image = $this->imageAddImage($new_image, $dateIcon, 22, 22, 92, $top_height, 'top-left');
|
||
$new_image = $this->textAddImage($new_image, $time, 26, 122, $top_height, '#666666', 'left');
|
||
|
||
|
||
$file_path = storage_path("/qrcode/" . time() .mt_rand(0,999999). "activity_share.png");
|
||
$new_image->save($file_path);
|
||
if (file_exists($file_path)) {
|
||
$pic = $this->uploadFile($file_path);
|
||
try {
|
||
if ($qrcode_path) {
|
||
unlink($qrcode_path);
|
||
}
|
||
unlink($file_path);
|
||
} catch (Exception $e) {
|
||
return $this->failure($e->getMessage());
|
||
}
|
||
}
|
||
return $pic;
|
||
}
|
||
|
||
/**
|
||
* 生成海报
|
||
**/
|
||
public function makeActivityPoster($activity, $param)
|
||
{
|
||
$openid = $param['openid'];
|
||
$avatar = $param['avatar'];
|
||
$name = $param['name'];
|
||
$user_id = empty($param['user_id']) ? 0 : $param['user_id'];
|
||
$activity_id = $activity->id;
|
||
//二维码
|
||
$app = EasyWechat::miniProgram();
|
||
$data = [];
|
||
$data['is_hyaline'] = true;
|
||
$response = $app->app_code->get('/pages/party/detail?party_id=' . $activity_id . '&from_openid=' . $openid . '&from_user_id=' . $user_id, $data);
|
||
$path = time() . 'activity_qrocde.png';
|
||
$filename = $response->saveAs(storage_path('qrcode'), $path);
|
||
$qrcode_path = storage_path("qrcode/" . $path);
|
||
$qrcode = $qrcode_path;
|
||
$image1 = 'http://images.ufutx.com/201904/17/d8d39f4e3be390539f43c6f57a733b85.jpeg';
|
||
$image2 = $qrcode;
|
||
//二维码
|
||
$new_image = $this->imageAddImage($image1, $image2, 234, 234, 258, 142, 'bottom-left');
|
||
//头像
|
||
if (!empty($avatar)) {
|
||
$new_image = $this->imageAddImage($new_image, $avatar, 108, 108, 56, 112, 'top-left');
|
||
}
|
||
//姓名
|
||
$new_image = $this->textAddImage($new_image, '您好,我是' . $name, 32, 176, 132, '#FFFFFF', 'left');
|
||
//介绍
|
||
$new_image = $this->textAddImage($new_image, '我在福恋发现一个好活动', 32, 176, 172, '#FFFFFF', 'left');
|
||
//海报
|
||
$new_image = $this->imageAddImage($new_image, $activity->poster, 592, 394, 80, 300, 'top-left');
|
||
//主题
|
||
$new_image = $this->textAddImage($new_image, mb_substr($activity->theme, 0, 15) . '...', 38, 80, 724, '#000000', 'left');
|
||
|
||
//主办方|费用
|
||
if ($activity->fee != 0.00) {
|
||
$fee = '¥' . $activity->fee;
|
||
} else {
|
||
$fee = '免费';
|
||
}
|
||
$host = '主办:' . $activity->host/*.' | 费用:'.$fee*/
|
||
;
|
||
$new_image = $this->textAddImage($new_image, $host, 26, 80, 784, '#585757', 'left');
|
||
//地址
|
||
// $address = $activity->city.' '.$activity->dist.' '.$activity->address;
|
||
$address = str_limit($activity->address, 44, '...');
|
||
$new_image = $this->textAddImage($new_image, $address, 26, 80, 828, '#929191', 'left');
|
||
//时间
|
||
$time = $activity->start_time . ' ~ ' . $activity->end_time;
|
||
$new_image = $this->textAddImage($new_image, $time, 26, 80, 868, '#000000', 'left');
|
||
$file_path = storage_path("/qrcode/" . time() .mt_rand(0,99999). "activity_share.png");
|
||
$new_image->save($file_path);
|
||
if (file_exists($file_path)) {
|
||
$pic = $this->uploadFile($file_path);
|
||
try {
|
||
if ($qrcode_path) {
|
||
unlink($qrcode_path);
|
||
}
|
||
unlink($file_path);
|
||
} catch (Exception $e) {
|
||
return $this->failure($e->getMessage());
|
||
}
|
||
}
|
||
return $pic;
|
||
}
|
||
|
||
/**
|
||
* 支付页面
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function payActivity(Request $request, $activity_id)
|
||
{
|
||
$activity = Activity::findOrFail($activity_id);
|
||
//sku
|
||
$skus = [];
|
||
if ($activity->sku) {
|
||
$skus = $activity->sku->skus;
|
||
if (!is_array($skus)) {
|
||
$skus = json_decode($activity->sku->skus, true);
|
||
}
|
||
}
|
||
$activity->skus = $skus;
|
||
unset($activity->sku);
|
||
$user = auth()->user();
|
||
$user->profileCourtship;
|
||
$user->coin = $user->totalCoin();
|
||
return $this->success('ok', compact('activity', 'user'));
|
||
}
|
||
|
||
/**
|
||
* 用户参加的活动
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function userJoinedActivities(Request $request)
|
||
{
|
||
$user_id = auth()->id();
|
||
|
||
// $merchant_user = MerchantUser::where('user_id',$user_id)->first();
|
||
// $business_order = DB::table('tourist_orders')
|
||
// ->join('community_activities','tourist_orders.type_id','community_activities.id')
|
||
// ->where('community_activities.class','one')
|
||
// ->where('tourist_orders.type','community')->where('account_id',$merchant_user->id)->whereIn('pay_status',[1,4])
|
||
// ->select('tourist_orders.id','tourist_orders.type','type_id',DB::raw("'business_order' as order_type"),'tourist_orders.price','tourist_orders.pay_type','pay_status','trade_no','desc as goods','tourist_orders.created_at');
|
||
// $order = DB::table('orders')->where('user_id', $user_id)->where('type', 'activity')->where('pay_status', 'PAID')
|
||
// ->select('id','type','type_id',DB::raw("'fulllin_order' as order_type"),'price','pay_type','pay_status','trade_no','goods','created_at');
|
||
// $query = $business_order->union($order);
|
||
// $sql = $query->toSql();
|
||
// $orders = DB::table(DB::raw("($sql) as a"))->mergeBindings($query)
|
||
// ->orderBy('created_at','desc')->paginate();
|
||
|
||
$activity_ids = ActivityMember::where('user_id', $user_id)->pluck('activity_id');
|
||
// $is_deadline = $request->input('is_deadline', 0);
|
||
// $activities = Activity::whereIn('id', $activity_ids)->orderBy('id', 'desc');
|
||
// $type = $request->input('type', 'all');
|
||
// if ($type === 'joining') {
|
||
// $activities = $activities->where('is_deadline', 0);
|
||
// }elseif ($type === 'joined') {
|
||
// $activities = $activities->where('is_deadline', 1);
|
||
// }
|
||
// $keyword = $request->input('keyword');
|
||
// if ($keyword) {
|
||
// $keyword = trim($keyword);
|
||
// $activities = $activities->where('theme', 'like', '%'.$keyword.'%');
|
||
// }
|
||
// $activities = $activities->paginate();
|
||
// foreach ($activities as $activity) {
|
||
// $start_time = date('Y/m/d', strtotime($activity->start_time));
|
||
// $end_time = date('Y/m/d', strtotime($activity->end_time));
|
||
// if ($start_time === $end_time) {
|
||
// $time = $start_time;
|
||
// }else{
|
||
// $time = $start_time.' - '.$end_time;
|
||
// }
|
||
// $activity->time = $time;
|
||
// }
|
||
$type = $request->input('type', 'all');
|
||
if ($type === 'joining') {
|
||
$deadline = [0];
|
||
$apply_deadline = '>';
|
||
} elseif ($type === 'joined') {
|
||
$deadline = [1];
|
||
$apply_deadline = '<';
|
||
} else {
|
||
$deadline = [0, 1];
|
||
$apply_deadline = '<>';
|
||
}
|
||
$activities = DB::table('activities as a')
|
||
->rightJoin('activity_members as m', 'a.id', '=', 'm.activity_id')
|
||
->where('m.user_id', $user_id)->whereIn('a.is_deadline', $deadline)
|
||
->select('a.id as id', 'theme', 'poster', 'is_online', 'city', 'address', 'dist', 'start_time', 'end_time', 'class_id', 'fee', 'user_id', 'm.created_at', DB::raw("'fulllin_activity' as activity_type"));
|
||
$merchant_user = MerchantUser::where('user_id', $user_id)->first();
|
||
if (!$merchant_user) {
|
||
$activities = $activities->orderBy('created_at', 'desc')->paginate();
|
||
} else {
|
||
$type_ids = DB::table('tourist_orders')
|
||
->join('community_activities', 'tourist_orders.type_id', 'community_activities.id')
|
||
->where('community_activities.class', 'one')->where('channel', 3)
|
||
->where('tourist_orders.type', 'community')->where('account_id', $merchant_user->id)->whereIn('pay_status', [1, 4])
|
||
->pluck('tourist_orders.type_id');
|
||
//,'tourist_orders.type','type_id',DB::raw("'business_order' as order_type"),'tourist_orders.price','tourist_orders.pay_type','pay_status','trade_no','desc as goods','tourist_orders.created_at'
|
||
$community_activities = DB::table('community_activities')->whereIn('id', $type_ids)->where('apply_deadline', $apply_deadline, date('Y-m-d H:i:s'))
|
||
->select('id', 'title as theme', "pic as poster", "location as is_online", "address as city", 'address',
|
||
DB::raw("'' as dist"), 'start_time', 'end_time', DB::raw("'0' as class_id"), DB::raw("'price' as fee"), 'anchor_id as user_id', 'created_at', DB::raw("'business_activity' as activity_type"));
|
||
$query = $activities->union($community_activities);
|
||
$sql = $query->toSql();
|
||
$activities = DB::table(DB::raw("($sql) as a"))->mergeBindings($query)
|
||
->orderBy('created_at', 'desc')->paginate();
|
||
}
|
||
|
||
foreach ($activities as $activity) {
|
||
$activity->class_name = ActivityClass::where('id', $activity->class_id)->value('title');
|
||
$start_time = date('Y/m/d', strtotime($activity->start_time));
|
||
$end_time = date('Y/m/d', strtotime($activity->end_time));
|
||
if ($start_time === $end_time) {
|
||
$time = $start_time;
|
||
} else {
|
||
$time = $start_time . ' - ' . $end_time;
|
||
}
|
||
$activity->time = $time;
|
||
}
|
||
return $this->success('ok', $activities);
|
||
}
|
||
|
||
/**
|
||
* 投票成员
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activityVoteMember(Request $request, User $user, $activity_id)
|
||
{
|
||
$user_id = auth()->id();
|
||
$activity = Activity::findOrFail($activity_id);
|
||
$count = $activity->vote_count;
|
||
$member = ActivityMember::with('user')->where('user_id', $user_id)->where('activity_id', $activity_id)->first();
|
||
if (empty($member)) {
|
||
$msg = '还未报名';
|
||
$path = 'pages/party/detail?party_id=' . $activity_id;
|
||
$operate = '去报名';
|
||
$notice = '您还未报名该活动';
|
||
return $this->fail($msg, $code = 5, $path, $operate, $notice);
|
||
}
|
||
if ($member->sign_in != 1) {
|
||
return $this->failure('您还没有签到活动');
|
||
}
|
||
if (empty($member->user->sex)) {
|
||
return $this->failure("请完善您的资料信息:性别");
|
||
}
|
||
$other_members = ActivityMember::with('user')->whereHas('user', function ($sql) use ($member) {
|
||
$sql->where('type', 'single')->where('sex', '<>', $member->user->sex)->where('sex', '<>', 0);
|
||
})->where('activity_id', $activity_id)->select('user_id', 'activity_id', 'name', 'mobile', 'avatar', 'sex', 'is_joined', 'sign_in', 'linkmen')->distinct()->get();
|
||
|
||
unset($member->user);
|
||
foreach ($other_members as $other_member) {
|
||
// $other_member->linkmen = json_decode($other_member->linkmen,true)??[];
|
||
$other_member->userAvatar = $user->userAvatar($other_member->user_id);
|
||
$other_member->sex = $other_member->user->sex;
|
||
$other_member->nickname = $other_member->user->nickname;
|
||
$other_member->industry = $other_member->user->industry ?: '未知';
|
||
$other_member->industry_sub = $other_member->user->industry_sub ?? '未知';
|
||
unset($other_member->user);
|
||
$file = ProfileCourtship::where('user_id', $other_member->user_id)->select('user_id', 'birthday', 'stature', 'city')->first();
|
||
if (empty($file)) {
|
||
$other_member->age = '未知';
|
||
$other_member->stature = '未知';
|
||
$other_member->city = '未知';
|
||
$other_member->era = '未知';
|
||
} else {
|
||
$other_member->age = $file->birthday ? $this->getAge($file->birthday) : '未知';
|
||
$other_member->stature = $file->stature ? $file->stature : '未知';
|
||
$other_member->city = $file->city ? $file->city : '未知';
|
||
$other_member->era = $file->birthday ? substr($file->birthday, 2, 1) . '0后' : '未知';
|
||
}
|
||
}
|
||
//我投票的用户
|
||
$my_vote_ids = ActivityVote::where('user_id', $user_id)->where('activity_id', $activity_id)->pluck('vote_user_id')->toArray();
|
||
$my_vote_users = User::whereIn('id', $my_vote_ids)->get();
|
||
return $this->success('ok', compact('count', 'member', 'other_members', 'my_vote_users'));
|
||
}
|
||
|
||
/**
|
||
* 心仪投票成员
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activitySexVoteMember(Request $request, User $user, $activity_id)
|
||
{
|
||
$user_id = auth()->id();
|
||
$activity = Activity::findOrFail($activity_id);
|
||
$count = $activity->vote_sex_count;
|
||
$member = ActivityMember::with('user')->where('user_id', $user_id)->where('activity_id', $activity_id)->first();
|
||
if (empty($member)) {
|
||
$msg = '还未报名';
|
||
$path = 'pages/party/detail?party_id=' . $activity_id;
|
||
$operate = '去报名';
|
||
$notice = '您还未报名该活动';
|
||
return $this->fail($msg, $code = 5, $path, $operate, $notice);
|
||
}
|
||
if ($member->sign_in != 1) {
|
||
return $this->failure('您还没有签到活动');
|
||
}
|
||
if (empty($member->user->sex) || !$member->user->sex) {
|
||
return $this->failure("请联系工作人员填写性别");
|
||
}
|
||
$other_members = ActivityMember::with('user')->whereHas('user', function ($sql) use ($member) {
|
||
$sql->where('type', 'single')->where('sex', '<>', $member->user->sex)->where('sex', '<>', 0);
|
||
})->where('activity_id', $activity_id)->select('user_id', 'activity_id', 'name', 'mobile', 'avatar', 'sex', 'is_joined', 'sign_in')->distinct()->get();
|
||
unset($member->user);
|
||
foreach ($other_members as $other_member) {
|
||
$other_member->userAvatar = $user->userAvatar($other_member->user_id);
|
||
$other_member->sex = $other_member->user->sex;
|
||
$other_member->nickname = $other_member->user->nickname;
|
||
$other_member->industry = $other_member->user->industry ?: '未知';
|
||
$other_member->industry_sub = $other_member->user->industry_sub ?: '未知';
|
||
unset($other_member->user);
|
||
$file = ProfileCourtship::where('user_id', $other_member->user_id)->select('user_id', 'birthday', 'stature', 'city')->first();
|
||
if (empty($file)) {
|
||
$other_member->age = '未知';
|
||
$other_member->stature = '未知';
|
||
$other_member->city = '未知';
|
||
$other_member->era = '未知';
|
||
} else {
|
||
$other_member->age = $file->birthday ? $this->getAge($file->birthday) : '未知';
|
||
$other_member->stature = $file->stature ? $file->stature : '未知';
|
||
$other_member->city = $file->city ? $file->city : '未知';
|
||
$other_member->era = $file->birthday ? substr($file->birthday, 2, 1) . '0后' : '未知';
|
||
}
|
||
}
|
||
//我投票的用户
|
||
$my_vote_ids = ActivityVote::where('user_id', $user_id)->where('activity_id', $activity_id)->pluck('vote_user_id')->toArray();
|
||
$my_vote_users = User::whereIn('id', $my_vote_ids)->get();
|
||
return $this->success('ok', compact('count', 'member', 'other_members', 'my_vote_users'));
|
||
}
|
||
|
||
/**
|
||
* 活动匹配
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activityVote(Request $request, $activity_id)
|
||
{
|
||
$user_id = auth()->id();
|
||
$activity = Activity::findOrFail($activity_id);
|
||
$vote_count = $activity->vote_count;
|
||
$count = ActivityVote::where('activity_id', $activity_id)->where('user_id', $user_id)->count();
|
||
if ($count > 0) {
|
||
return $this->failure('本轮活动已投票');
|
||
}
|
||
$member = ActivityMember::where('user_id', $user_id)->where('activity_id', $activity_id)->first();
|
||
if (empty($member->sign_in)) {
|
||
return $this->failure('您还未签到');
|
||
}
|
||
|
||
//被投票用户id
|
||
$vote_user_ids = $request->input('vote_user_ids');
|
||
$activity_members = ActivityMember::select('user_id', 'sign_in')->where('activity_id', $activity_id)->whereIn('user_id', $vote_user_ids)->get()->toArray();
|
||
$new_arr = array_column($activity_members, 'sign_in', 'user_id');
|
||
if (empty($vote_user_ids) || !count($vote_user_ids) || count($vote_user_ids) < 1 || count($vote_user_ids) > $vote_count) {
|
||
return $this->failure('请选择' . $vote_count . '位心仪对象');
|
||
}
|
||
foreach ($vote_user_ids as $key => $vote_user_id) {
|
||
if (!empty($new_arr[$vote_user_id]) && $new_arr[$vote_user_id]) {
|
||
$order = $key + 1;
|
||
ActivityVote::create([
|
||
'activity_id' => $activity_id,
|
||
'user_id' => $user_id,
|
||
'vote_user_id' => $vote_user_id,
|
||
'order' => $order,
|
||
]);
|
||
//判断对方是否选择你
|
||
$match = ActivityMatch::where('activity_id', $activity_id)->where('user_id', $vote_user_id)->where('other_user_id', $user_id)->first();
|
||
if ($match) {//选择了你
|
||
$rank = $this->getActivityMatchRank($match->user_order, $order);
|
||
$match->other_user_order = $order;
|
||
$match->rank = $rank;
|
||
$match->save();
|
||
} else {
|
||
ActivityMatch::create([
|
||
'activity_id' => $activity_id,
|
||
'user_id' => $user_id,
|
||
'user_order' => $order,
|
||
'other_user_id' => $vote_user_id,
|
||
]);
|
||
}
|
||
}
|
||
}
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function getActivityMatchRank($order1, $order2)
|
||
{
|
||
$order = $order1 + $order2;
|
||
switch ($order) {
|
||
case 2:
|
||
$rank = 1;
|
||
break;
|
||
case 3:
|
||
$rank = 2;
|
||
break;
|
||
case 4:
|
||
$rank = 3;
|
||
break;
|
||
case 5:
|
||
$rank = 4;
|
||
break;
|
||
case 6:
|
||
$rank = 5;
|
||
break;
|
||
default:
|
||
$rank = 0;
|
||
break;
|
||
}
|
||
return $rank;
|
||
}
|
||
|
||
/**
|
||
* 心仪活动匹配
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activitySexVote(Request $request, $activity_id)
|
||
{
|
||
$user_id = auth()->id();
|
||
$activity = Activity::findOrFail($activity_id);
|
||
$vote_sex_count = $activity->vote_sex_count;
|
||
$count = ActivitySexVote::where('activity_id', $activity_id)->where('user_id', $user_id)->count();
|
||
if ($count > 0) {
|
||
return $this->failure('本轮活动已投票');
|
||
}
|
||
$member = ActivityMember::where('user_id', $user_id)->where('activity_id', $activity_id)->first();
|
||
if (empty($member->sign_in)) {
|
||
return $this->failure('您还未签到');
|
||
}
|
||
|
||
//被投票用户id
|
||
$vote_user_ids = $request->input('vote_user_ids');
|
||
$activity_members = ActivityMember::select('user_id', 'sign_in')->where('activity_id', $activity_id)->whereIn('user_id', $vote_user_ids)->get()->toArray();
|
||
$new_arr = array_column($activity_members, 'sign_in', 'user_id');
|
||
if (empty($vote_user_ids) || !count($vote_user_ids) || count($vote_user_ids) < 1 || count($vote_user_ids) > $vote_sex_count) {
|
||
return $this->failure('请选择' . $vote_sex_count . '位心仪对象');
|
||
}
|
||
foreach ($vote_user_ids as $key => $vote_user_id) {
|
||
if (!empty($new_arr[$vote_user_id]) && $new_arr[$vote_user_id]) {
|
||
$order = $key + 1;
|
||
ActivitySexVote::create([
|
||
'activity_id' => $activity_id,
|
||
'user_id' => $user_id,
|
||
'vote_user_id' => $vote_user_id,
|
||
'order' => $order,
|
||
]);
|
||
//判断对方是否选择你
|
||
$match = ActivitySexMatch::where('activity_id', $activity_id)->where('user_id', $vote_user_id)->where('other_user_id', $user_id)->first();
|
||
if ($match) {//选择了你
|
||
$rank = $this->getActivityMatchRank($match->user_order, $order);
|
||
$match->other_user_order = $order;
|
||
$match->rank = $rank;
|
||
$match->save();
|
||
} else {
|
||
ActivitySexMatch::create([
|
||
'activity_id' => $activity_id,
|
||
'user_id' => $user_id,
|
||
'user_order' => $order,
|
||
'other_user_id' => $vote_user_id,
|
||
]);
|
||
}
|
||
}
|
||
}
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 签到 改版
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activitySignInV2(Request $request, $activity_id)
|
||
{
|
||
|
||
$user = $this->getMyUserinfo();
|
||
$user_id = 0;
|
||
if ($user) {
|
||
$user_id = $user->id;
|
||
} else {
|
||
$data['code'] = 2;
|
||
$data['notice'] = '你还没登录,请登录后签到';
|
||
return $this->success('', $data);
|
||
|
||
|
||
}
|
||
$activity = Activity::find($activity_id);
|
||
$desc = $request->place;
|
||
if (empty($activity)) {
|
||
$msg = '活动不存在';
|
||
$code = 5;
|
||
$path = 'pages/tabBar/activities';
|
||
$operate = '去报名';
|
||
$notice = '活动不存在';
|
||
return $this->fail($msg, $code = 5, $path, $operate, $notice);
|
||
}
|
||
|
||
$member = ActivityMember::with('user')->where('user_id', $user_id)->where('activity_id', $activity_id)->first();
|
||
if (empty($member)) {
|
||
$data['path'] = '/pages/party/detail?party_id=' . $activity_id;
|
||
$data['operate'] = '去报名';
|
||
$data['notice'] = '你还没有报名该活动,赶快去报名吧';
|
||
$data['activity']['theme'] = $activity['theme'];
|
||
$data['code'] = 1;
|
||
return $this->success('', $data);
|
||
}
|
||
|
||
if ($activity->can_repeat_sign == 1) {
|
||
$memberv2 = ActivityMember::with('user')->where('user_id', $user_id)->where('activity_id', $activity_id)->wherenull('sign_in')->wherenull('desc')->first();
|
||
$exists = ActivityMember::where('user_id', $user_id)->where('activity_id', $activity_id)->where('sign_in', 1)->where('desc', $desc)->exists();
|
||
//有签到和没有未签到的订单
|
||
if (!$memberv2 && !$exists) {
|
||
$data['path'] = '/pages/party/detail?party_id=' . $activity_id;
|
||
$data['operate'] = '去报名';
|
||
$data['notice'] = '你还没有报名该活动,赶快去报名吧';
|
||
$data['activity']['theme'] = $activity['theme'];
|
||
$data['code'] = 1;
|
||
return $this->success('', $data);
|
||
} elseif (!$memberv2 && $exists) {
|
||
//没有有签到和没有未签到的订单
|
||
$data['path'] = '/pages/party/detail?party_id=' . $activity_id;
|
||
$data['operate'] = '进入活动';
|
||
$data['notice'] = '你已签到,请勿重复签到';
|
||
$data['activity']['theme'] = $activity['theme'];
|
||
$data['code'] = 1;
|
||
return $this->success('', $data);
|
||
}
|
||
$member = $memberv2;
|
||
}
|
||
if ($member->sign_in == 1) {
|
||
|
||
$data['path'] = '/pages/party/detail?party_id=' . $activity_id;
|
||
$data['operate'] = '进入活动';
|
||
$data['notice'] = '你已签到,请勿重复签到';
|
||
$data['activity']['theme'] = $activity['theme'];
|
||
$data['code'] = 1;
|
||
return $this->success('', $data);
|
||
}
|
||
$member->sign_in = 1;
|
||
$member->desc = $desc;
|
||
$order = $member->activityOrder();
|
||
$activity['price'] = '0.00';
|
||
$activity_order_sku = '';
|
||
if (!empty($order)) {
|
||
$activity['price'] = $order->price;
|
||
$goods = $order->goods;
|
||
$start = strpos($goods, '【');
|
||
$end = stripos($goods, '】');
|
||
$str = substr($goods, $start, $end);
|
||
$activity_order_sku = $str;
|
||
}
|
||
$member->save();
|
||
unset($activity->sku);
|
||
$data = array();
|
||
$data['code'] = 0;
|
||
$data['activity']['theme'] = $activity['theme'];
|
||
$data['activity']['sku'] = $activity_order_sku;
|
||
return $this->success('ID:' . $activity_id . '活动签到成功。', $data);
|
||
}
|
||
|
||
/**
|
||
* 签到
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
**/
|
||
public function activitySignIn(Request $request, $activity_id)
|
||
{
|
||
$user_id = auth()->id();
|
||
$activity = Activity::find($activity_id);
|
||
if (empty($activity)) {
|
||
return $this->failure('活动不存在');
|
||
}
|
||
$member = ActivityMember::
|
||
with('user')
|
||
->where('user_id', $user_id)
|
||
->where('activity_id', $activity_id)
|
||
->first();
|
||
|
||
if (empty($member)) {
|
||
$msg = '还未报名';
|
||
$code = 3;
|
||
$path = 'pages/party/detail?party_id=' . $activity_id;
|
||
$operate = '去报名';
|
||
$notice = '您还未报名该活动';
|
||
return $this->failure($msg);
|
||
}
|
||
|
||
if ($member->sign_in == 1) {
|
||
$msg = '你已签到,请勿重复签到';
|
||
$code = 3;
|
||
$path = 'pages/tabBar/activities';
|
||
$operate = '活动主页';
|
||
$notice = '你已签到,请勿重复签到';
|
||
return $this->failure($msg);
|
||
}
|
||
$member->sign_in = 1;
|
||
$order = $member->activityOrder();
|
||
if (!empty($order)) {
|
||
$activity['price'] = $order->price;
|
||
} else {
|
||
$activity['price'] = '0.00';
|
||
}
|
||
$member->save();
|
||
unset($activity->sku);
|
||
return $this->success('ID:' . $activity_id . '活动签到成功。', $activity);
|
||
}
|
||
|
||
/**
|
||
* 平台活动
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function officialActivities(Request $request)
|
||
{
|
||
$activities = $this->activityCon->officialActivities($request);
|
||
return $this->success('ok', $activities);
|
||
}
|
||
|
||
/**
|
||
* 活动详情
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function officialActivity(Request $request, $activity_id)
|
||
{
|
||
$user = $this->authCheck();
|
||
$activity = $this->activityCon->officialActivity($activity_id, $user);
|
||
return $this->success('ok', $activity);
|
||
}
|
||
|
||
/**
|
||
* 活动报名
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function officailJoinActivity(Request $request, $activity_id)
|
||
{
|
||
$result = $this->activityCon->officailJoinActivity($request, $activity_id);
|
||
if ($result == '活动截止报名') {
|
||
return $this->failure($result);
|
||
} elseif ($result == '该活动已报名') {
|
||
return $this->failure($result);
|
||
}
|
||
return $this->success('ok', $result);
|
||
}
|
||
|
||
/**
|
||
* 活动轮播图
|
||
*/
|
||
public function activityCarousels(Request $request)
|
||
{
|
||
$time = date('Y-m-d H:i:s');
|
||
$announcement_ids = PaasAnnouncement::distinct('announcement_id')->pluck('announcement_id');
|
||
$announcements = Announcement::where('start_time', '<', $time)->where('end_time', '>', $time)->whereNotIn('id', $announcement_ids)->where('path', 'like', '/pages/party/detail?party_id=%')->get();
|
||
return $this->success("ok", $announcements);
|
||
}
|
||
|
||
/**
|
||
* 我的收藏
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function favorites(Request $request)
|
||
{
|
||
try {
|
||
$user = auth()->user();
|
||
$type = $request->input('type', 'activity');
|
||
if ($type == 'activity') {
|
||
$favorites = $user->favorites(Activity::class)->where('is_hidden', 0)->paginate();
|
||
foreach ($favorites as $favorite) {
|
||
$favorite->class_name = $favorite->class ? $favorite->class->title : null;
|
||
unset($favorite->pivot, $favorite->host, $favorite->detail, $favorite->detail_path, $favorite->detail_pic, $favorite->content, $favorite->is_top, $favorite->show_member_num, $favorite->province, $favorite->qrcode, $favorite->vote_qrcode, $favorite->sign_in_qrcode, $favorite->location_latitude, $favorite->location_longitude, $favorite->is_deadline, $favorite->is_cancel, $favorite->click_num, $favorite->is_hidden, $favorite->created_at, $favorite->deleted_at, $favorite->updated_at, $favorite->class_id, $favorite->class);
|
||
}
|
||
} elseif ($type == 'community_moment') {
|
||
$favorites = $user->favorites(CommunityMoment::class)->where('is_show', 1)->paginate();
|
||
foreach ($favorites as $favorite) {
|
||
$favorite->user_id = $user->id;
|
||
$favorite->nickname = $user->nickname;
|
||
$favorite->photo = $user->app_avatar ?: $user->photo;
|
||
$favorite->photos = json_decode($favorite->photos);
|
||
$favorite->topic_name = $favorite->topic()->value("name");
|
||
$favorite->community_title = $favorite->community()->value('title');
|
||
//是否点赞
|
||
$favorite->is_llker = $favorite->isLikedBy($user) ? 1 : 0;
|
||
//是否收藏
|
||
$favorite->is_favorite = $user->hasFavorited($favorite) ? 1 : 0;
|
||
//点赞数
|
||
$favorite->momentLikerCount = $favorite->likers()->get()->count() ?: 0;
|
||
//收藏数
|
||
$favorite->favoriteCount = $favorite->favoriters()->get()->count() ?: 0;
|
||
//评论数
|
||
$favorite->momentCommentCount = $favorite->totalCommentsCount();
|
||
unset($favorite->pivot, $favorite->community_id, $favorite->is_show, $favorite->created_at, $favorite->deleted_at, $favorite->updated_at, $favorite->topic_id);
|
||
}
|
||
}
|
||
return $this->success('ok', $favorites);
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('获取收藏列表失败,请稍后再试');
|
||
}
|
||
|
||
}
|
||
|
||
/**
|
||
* 收藏活动
|
||
* @param Request $request [description]
|
||
* @param Activity $activity [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function favoriteActivity(Request $request, Activity $activity)
|
||
{
|
||
try {
|
||
$user = auth()->user();
|
||
if ($user->hasFavorited($activity)) {
|
||
$user->unfavorite($activity);
|
||
} else {
|
||
$user->favorite($activity);
|
||
}
|
||
return $this->success('ok');
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('收藏活动失败,请稍后再试');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 短视频列表
|
||
* **/
|
||
public function videoList(Request $request)
|
||
{
|
||
$keyword = $request->keyword;
|
||
$videos = AnchorVideo::where('status', 1)->where('is_love_show', 1)->select('id', 'title', 'anchor_id', 'm_id', 'cover', 'status', 'video_url', 'created_at', 'is_love_show');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$videos = $videos->where('title', 'like', '%' . $keyword . '%');
|
||
}
|
||
$videos = $videos->whereNotNull('m_id')->orderBy('id', 'desc')->paginate();
|
||
foreach ($videos as $key => $video) {
|
||
$video->pv = Redis::zscore('short_videopv', $video->id) ?: 0;
|
||
$video->type = 'video';
|
||
}
|
||
return $this->success('ok', $videos);
|
||
}
|
||
|
||
/**
|
||
* 短视频详情(上下滑动)
|
||
* **/
|
||
public function shortVideoDetail(Request $request, $video_id)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
if ($wechatUser) {
|
||
$openid = $wechatUser->getId();
|
||
} else {
|
||
$openid = $request->openid;
|
||
}
|
||
$video = AnchorVideo::withTrashed()->where('id', $video_id)->select('id', 'title', 'anchor_id', 'm_id', 'cover', 'status', 'video_url', 'created_at', 'deleted_at')->first();
|
||
$video->pv = Redis::zincrby('short_videopv', 1, $video_id);
|
||
//点赞数
|
||
$video->liker_num = $video->likers()->count();
|
||
//评论数
|
||
$video->comment_num = $video->totalCommentsCount();
|
||
$video->merchant_name = Anchor::where('m_id', $video->m_id)->value('name');
|
||
//分享二维码
|
||
$jump_url = urlencode(env('APP_URL') . '/h5/#/videoDetail/' . $video_id);
|
||
$url = env('APP_URL') . '/api/official/live/wechat/oauth?merchant_id=' . $video->m_id . '&anchor_openid=&url=' . $jump_url;
|
||
$qr_code = Redis::get('VideoDetail_L' . $video_id);
|
||
if (!$qr_code) {
|
||
$qr_code = $this->getPreviewQrcode($url);
|
||
Redis::setex('VideoDetail_L' . $video_id, 60 * 60 * 24 * 30, $qr_code);
|
||
$qr_code = Redis::get('VideoDetail_L' . $video_id);
|
||
}
|
||
$viewer = Viewer::where('openid', $openid)->first();
|
||
$rand_str = $this->randString(8);
|
||
$pic = User::DefaultAvatar;
|
||
$nickname = '用户' . $rand_str;
|
||
if ($viewer) {
|
||
$pic = $viewer->avatar;
|
||
$nickname = $viewer->nickname;
|
||
}
|
||
$MerchantUsers = MerchantUser::where('openid', $openid)->first();
|
||
if (!$MerchantUsers) {
|
||
$MerchantUsers = new MerchantUser();
|
||
$MerchantUsers->openid = $openid;
|
||
$MerchantUsers->rand_str = $rand_str;
|
||
$MerchantUsers->pic = $pic;
|
||
$MerchantUsers->nickname = $nickname;
|
||
$MerchantUsers->save();
|
||
}
|
||
// 是否已经点赞
|
||
$video->liker_status = $MerchantUsers->hasLiked($video);
|
||
$user = AccessRecord::where('open_id', $openid)->where('account_id', $video->m_id)->exists();
|
||
if (!$user) {
|
||
$AccessRecord = new AccessRecord();
|
||
$AccessRecord->open_id = $openid;
|
||
$AccessRecord->account_id = $video->m_id;
|
||
$AccessRecord->channel = 1;
|
||
$AccessRecord->last_time = now();
|
||
$AccessRecord->save();
|
||
}
|
||
|
||
$video->share_qr_code = $qr_code;
|
||
$video->merchant_id = $video->m_id;
|
||
$pre_video_id = 0;//上一个视频id
|
||
$next_video_id = 0;//下一个视频id
|
||
$video_ids = AnchorVideo::whereNotNull('m_id')->where('status', 1)->orderBy('id', 'desc')->pluck('id')->toArray();
|
||
// dd($video_ids);
|
||
$video_count = count($video_ids);//100
|
||
foreach ($video_ids as $key => $value) {//0~99
|
||
if ($video_id != $value) continue;
|
||
if ($value == $video_id && $key == 0 && $video_count == 1) {//第一个视频 且 就一个视频
|
||
$pre_video_id = 0;
|
||
$next_video_id = 0;
|
||
} elseif ($value == $video_id && $key == 0 && $video_count > 1) {//第一个视频 且 不止一个视频
|
||
$pre_video_id = 0;
|
||
$next_video_id = $video_ids[$key + 1];
|
||
} elseif ($value == $video_id && $key > 0 && $key == $video_count - 1) {//不是第一个视频 是最后一个视频
|
||
$pre_video_id = $video_ids[$key - 1];
|
||
$next_video_id = 0;
|
||
} else {
|
||
$pre_video_id = $video_ids[$key - 1];
|
||
$next_video_id = $video_ids[$key + 1];
|
||
}
|
||
}
|
||
$video->pre_video_id = $pre_video_id;
|
||
$video->next_video_id = $next_video_id;
|
||
//下架或删除状态 0下架 1正常上架 2已删除
|
||
$publish_state = 0;
|
||
if ($video->deleted_at) {
|
||
$publish_state = 2;
|
||
} elseif ($video->status == 1) {
|
||
$publish_state = 1;
|
||
} else {
|
||
$publish_state = 0;
|
||
}
|
||
$video->publish_state = $publish_state;
|
||
unset($video->m_id);
|
||
Redis::zscore('love_video_pv', $video_id);
|
||
Redis::zincrby('love_video_pv', 1, $video_id);
|
||
$this->forgetBykey('homedata-user' . $MerchantUsers->id);
|
||
return $this->success('ok', $video);
|
||
}
|
||
|
||
/**
|
||
* 短视频详情
|
||
* **/
|
||
public function videoDetail(Request $request, $video_id)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
if ($wechatUser) {
|
||
$openid = $wechatUser->getId();
|
||
} else {
|
||
$openid = $request->openid;
|
||
}
|
||
$video = AnchorVideo::where('id', $video_id)->select('id', 'title', 'm_id', 'anchor_id', 'm_id', 'cover', 'status', 'video_url', 'created_at')->first();
|
||
$video->pv = Redis::zincrby('short_videopv', 1, $video_id) ?? 0;
|
||
//点赞数
|
||
$video->liker_num = $video->likers()->count();
|
||
//评论数
|
||
$video->comment_num = $video->totalCommentsCount();
|
||
$viewer = Viewer::where('openid', $openid)->first();
|
||
$rand_str = $this->randString(8);
|
||
$pic = User::DefaultAvatar;
|
||
$nickname = '用户' . $rand_str;
|
||
if ($viewer) {
|
||
$pic = $viewer->avatar;
|
||
$nickname = $viewer->nickname;
|
||
}
|
||
$MerchantUsers = MerchantUser::where('openid', $openid)->first();
|
||
if (!$MerchantUsers) {
|
||
$MerchantUsers = new MerchantUser();
|
||
$MerchantUsers->openid = $openid;
|
||
$MerchantUsers->rand_str = $rand_str;
|
||
$MerchantUsers->pic = $pic;
|
||
$MerchantUsers->nickname = $nickname;
|
||
$MerchantUsers->save();
|
||
}
|
||
$user = AccessRecord::where('open_id', $openid)->where('account_id', $video->m_id)->exists();
|
||
if (!$user) {
|
||
$AccessRecord = new AccessRecord();
|
||
$AccessRecord->open_id = $openid;
|
||
$AccessRecord->account_id = $video->m_id;
|
||
$AccessRecord->channel = 1;
|
||
$AccessRecord->last_time = now();
|
||
$AccessRecord->save();
|
||
}
|
||
|
||
Redis::zscore('love_video_pv', $video_id);
|
||
Redis::zincrby('love_video_pv', 1, $video_id);
|
||
if (config('app.env') == 'production') {
|
||
$MerchantUsers->addlog($video, 1);
|
||
}
|
||
return $this->success('ok', $video);
|
||
}
|
||
|
||
/**
|
||
* 评论列表
|
||
* **/
|
||
public function videoCommentList(Request $request, $video_id)
|
||
{
|
||
$video = AnchorVideo::where('id', $video_id)->select('id', 'anchor_id', 'm_id', 'cover', 'video_url', 'created_at')->first();
|
||
$comments = $video->comments()->select('id', 'commentable_id', 'commented_id', 'reply_id', 'comment', 'created_at')->where('reply_id', 0)->orderBy('id', 'desc')->paginate();
|
||
foreach ($comments as $key => $value) {
|
||
# code...
|
||
$merchant_user = MerchantUsers::select('nickname', 'pic')->where('id', $value->commented_id)->first();
|
||
$value->nickname = $merchant_user->nickname ?? '匿名用户';
|
||
$value->pic = $merchant_user->pic ?? User::DefaultAvatar;
|
||
$reply = $video->comments()->select('id', 'commentable_id', 'commented_id', 'reply_id', 'comment', 'created_at')->where('reply_id', $value->id)->orderBy('id', 'desc')->get();
|
||
foreach ($reply as $k => $v) {
|
||
$merchant_user = MerchantUsers::select('nickname', 'pic')->where('id', $v->commented_id)->first();
|
||
$v->nickname = $merchant_user->nickname ?? '匿名用户';
|
||
$v->pic = $merchant_user->pic ?? User::DefaultAvatar;
|
||
}
|
||
$value->reply = $reply;
|
||
}
|
||
return $this->success('ok', $comments);
|
||
}
|
||
|
||
/**
|
||
* 点赞列表
|
||
* **/
|
||
public function videoLikes(Request $request, $video_id)
|
||
{
|
||
$video = AnchorVideo::select('id', 'title', 'cover')->where('id', $video_id)->first();
|
||
$comments = $video->likers()->select('id', 'likedable_id', 'created_at')->orderBy('id', 'desc')->paginate();
|
||
foreach ($comments as $key => $value) {
|
||
$user = MerchantUser::select('id', 'nickname', 'pic')->where('id', $value->likedable_id)->first();
|
||
$value->nickname = $user->nickname ?? '匿名用户';
|
||
$value->pic = $user->pic ?? User::DefaultAvatar;
|
||
}
|
||
return $this->success('ok', $comments);
|
||
}
|
||
|
||
/**
|
||
* 发表短视频评论
|
||
* **/
|
||
public function CommentVideo(Request $request, $video_id)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
if ($wechatUser) {
|
||
$openid = $wechatUser->getId();
|
||
} else {
|
||
$openid = $request->openid;
|
||
}
|
||
$content = $request->input('content');
|
||
if (!$content) return $this->failure('评论内容不能为空');
|
||
$reply_id = $request->reply_id ?? 0;
|
||
$video = AnchorVideo::where('id', $video_id)->first();
|
||
if (!$video) return $this->failure('该记录不存在或已删除');
|
||
$merchant_user = MerchantUsers::where('openid', $openid)->first();
|
||
$result = $merchant_user->comment($video, $content);
|
||
$result->reply_id = $reply_id;
|
||
$result->save();
|
||
$content = $merchant_user->nickname . '在您的视频【' . $video->title . '】发表了评论';
|
||
SaasNotice::addRecord($video->m_id, $merchant_user->id, 'comment', $result->id, $content, 0);
|
||
return $this->success('ok', $result);
|
||
}
|
||
|
||
/**
|
||
* 点赞
|
||
* */
|
||
|
||
public function likeVideo(Request $request, $video_id)
|
||
{
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
if ($wechatUser) {
|
||
$openid = $wechatUser->getId();
|
||
|
||
}else{
|
||
$openid = $request->openid;
|
||
}
|
||
$merchant_user = MerchantUser::where('openid',$openid)->first();
|
||
$video = AnchorVideo::where('id',$video_id)->first();
|
||
if($merchant_user->hasLiked($video)){
|
||
$merchant_user->dislike($video,'like');
|
||
}else{
|
||
$result = $merchant_user->like($video,'like');
|
||
$content = $merchant_user->nickname.'点赞了您的视频【'.$video->title;
|
||
SaasNotice::addRecord($video->m_id,$merchant_user->id,'like',$result->id,$content,0);
|
||
}
|
||
return $this->success('ok');
|
||
}
|
||
public function sharePosterMp(Request $request, $id){
|
||
try {
|
||
$activity = CommunityActivity::find($id);
|
||
if (empty($activity)) {
|
||
return $this->failure('该活动不存在');
|
||
}
|
||
$user = auth()->user();
|
||
if (empty($user)) {
|
||
$user = $this->authCheck();
|
||
}
|
||
$openid = $user ? $user->wechat->openid : '';
|
||
$versions = 9;
|
||
$param = [
|
||
'openid' => $openid,
|
||
'user_id' => empty($user) ? 0 : $user->id,
|
||
'class' => $activity->class,
|
||
];
|
||
//生成海报
|
||
$pic = $this->newMakeUserShareActivityPosterMp($activity, $param);
|
||
if (empty($pic)) return $this->failure('图片上传失败,请稍后再试');
|
||
//创建记录
|
||
// if ($user) {
|
||
// $user->activityShareHistories()->create([
|
||
// 'activity_id'=>$id,
|
||
// 'share_poster'=>$pic,
|
||
// 'versions'=>$versions
|
||
// ]);
|
||
// }
|
||
return $this->success('ok', $pic);
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('生成海报失败');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 生成用户分享海报 跳转小程序
|
||
**/
|
||
public function newMakeUserShareActivityPosterMp($activity, $param)
|
||
{
|
||
$openid = $param['openid'];
|
||
$user_id = empty($param['user_id']) ? 0 : $param['user_id'];
|
||
$activity_id = $activity->id;
|
||
//二维码
|
||
$app = EasyWechat::miniProgram();
|
||
$scene = 'party_id='.$activity->id.'&from_user_id='.$user_id;
|
||
if ($activity->class == 'one') {
|
||
$path = 'pages/party/detail';
|
||
} else {
|
||
$path = 'pages/party/servicesDetail';
|
||
}
|
||
$response = $app->app_code->getUnlimit($scene, [
|
||
'page'=>$path,
|
||
'is_hyaline'=>true
|
||
]);
|
||
$qrcode_path = storage_path('qrcode');
|
||
$file_name = 'activity'.$activity_id.'userid'.$user_id.'.jpg';
|
||
if ($response instanceof \EasyWeChat\Kernel\Http\StreamResponse) {
|
||
$response->saveAs($qrcode_path, $file_name);
|
||
}
|
||
$qrcode_file_path = $qrcode_path.'/'.$file_name;
|
||
$image1 = 'https://image.fulllinkai.com/202201/07/1bae445f38e917615370718dc1e21e78.jpeg';
|
||
// $image2 = $qrcode_file_path;
|
||
//兼容老版本生成的路径
|
||
$share_data = ActivityShareHistory::where('user_id',$user_id)
|
||
->where('activity_id',$activity->id)
|
||
->orderBy('id','desc')
|
||
->first();
|
||
$image2 = $share_data->share_poster;
|
||
// $old_qrcode_file_path = $qrcode_path . '/' . substr($share_data->share_poster, strripos($share_data->share_poster, '/') + 1);
|
||
// if (!is_file($qrcode_file_path) && !is_file($old_qrcode_file_path)) {
|
||
// return $this->failure("海报生成失败,请稍后再试{$qrcode_file_path}---{$old_qrcode_file_path}");
|
||
// }
|
||
//二维码
|
||
$new_image = $this->imageAddImage($image1, $image2, 250, 250, 176, 176, 'bottom-left');
|
||
//提示
|
||
$tips = '长按识别二维码';
|
||
$new_image = $this->textAddImage($new_image, $tips, 28, 202, 954, '#333333', 'left');
|
||
$top_height = 100;
|
||
//主题 标题
|
||
$new_image = $this->textAddImage($new_image, mb_substr($activity->title, 0, 15), 32, 50, 100, '#333333', 'left');
|
||
$top_height += 40;
|
||
if (mb_strlen($activity->title) > 15 && mb_strlen($activity->title) <= 30) {
|
||
$new_image = $this->textAddImage($new_image, mb_substr($activity->title, 15, mb_strlen($activity->title)), 32, 50, $top_height, '#333333', 'left');
|
||
$top_height += 40;
|
||
}
|
||
|
||
if (mb_strlen($activity->title) > 30) {
|
||
$text = mb_substr($activity->title, 15, 15);
|
||
$title = $text . '..';
|
||
$new_image = $this->textAddImage($new_image, $title, 32, 50, $top_height, '#333333', 'left');
|
||
$top_height += 40;
|
||
}
|
||
//存在开始和结束时间 优先展示
|
||
if ($activity->start_time && $activity->end_time) {
|
||
$show = date('Y.m.d', strtotime($activity->start_time)) . ' 至 ' . date('Y.m.d', strtotime($activity->end_time));
|
||
} else {//没有开始和结束时间展示副标题
|
||
$show = $activity->Subtitle;
|
||
$show = str_replace(PHP_EOL, ' ', $show);
|
||
if (mb_strlen($show) >= 18) {
|
||
$result = mb_substr($show, 0, 18);
|
||
$show = $result . '...';
|
||
}
|
||
}
|
||
$new_image = $this->textAddImage($new_image, $show, 24, 50, 210, '#666666', 'left');
|
||
//海报
|
||
$new_image = $this->imageAddImage($new_image, $activity->pic, 500, 280, 50, 258, 'top-left');
|
||
$file_path = storage_path("/qrcode/" . time().mt_rand(0,999999) . "activity_share.png");
|
||
$new_image->save($file_path);
|
||
if (file_exists($file_path)) {
|
||
$pic = $this->uploadFile($file_path);
|
||
try {
|
||
// if ($qrcode_file_path) {
|
||
// unlink($qrcode_file_path);
|
||
// }
|
||
unlink($file_path);
|
||
} catch (Exception $e) {
|
||
return $this->failure($e->getMessage());
|
||
}
|
||
}
|
||
return $pic;
|
||
}
|
||
|
||
public function sharePosterH5(Request $request, $id)
|
||
{
|
||
$activity = CommunityActivity::find($id);
|
||
$class = $request->class ?? 'one';
|
||
if (empty($activity)) {
|
||
return $this->failure('该活动不存在');
|
||
}
|
||
$user = auth()->user();
|
||
$wechatUser = session('wechat.oauth_user.new');
|
||
if ($wechatUser) {
|
||
$openid = $wechatUser->getId();
|
||
} else {
|
||
$openid = $request->openid;
|
||
}
|
||
$openid = '';
|
||
$versions = 9;
|
||
if (!empty($user)) {
|
||
$share_poster = $user->activityShareHistories()->where(['activity_id' => $id, 'versions' => $versions])->first();
|
||
if ($share_poster) {
|
||
$pic = $share_poster->share_poster;
|
||
return $this->success('ok', $pic);
|
||
}
|
||
}
|
||
$param = [
|
||
'openid' => $openid,
|
||
'user_id' => empty($user) ? 0 : $user->id,
|
||
'class' => $class,
|
||
];
|
||
//生成海报
|
||
$pic = $this->newMakeUserShareActivityPosterH5($activity, $param);
|
||
if (empty($pic)) return $this->failure('图片上传失败,请稍后再试');
|
||
//创建记录
|
||
if ($user) {
|
||
$user->activityShareHistories()->create([
|
||
'activity_id' => $id,
|
||
'share_poster' => $pic,
|
||
'versions' => $versions
|
||
]);
|
||
}
|
||
return $this->success('ok', $pic);
|
||
}
|
||
|
||
/**
|
||
* 生成用户分享海报 跳转H5
|
||
**/
|
||
public function newMakeUserShareActivityPosterH5($activity, $param)
|
||
{
|
||
$openid = $param['openid'];
|
||
$user_id = empty($param['user_id']) ? 0 : $param['user_id'];
|
||
$activity_id = $activity->id;
|
||
$data = [];
|
||
$activity_id = $activity->id;
|
||
$data['is_hyaline'] = true;
|
||
if($param['class'] == 'one'){//活动
|
||
$jump_url = urlencode(env('APP_URL').'/h5/#/activityDetails/'.$activity_id);
|
||
$jump_key = 'ActivityDetail_L';
|
||
}else{//服务
|
||
$jump_url = urlencode(env('APP_URL').'/h5/#/serveDetails/'.$activity_id);
|
||
}
|
||
$key = $jump_key . $activity_id;
|
||
$url = env('APP_URL') . '/api/official/live/wechat/oauth?url=' . $jump_url . 'from_user_id=' . $user_id . 'from_openid=' . $openid;
|
||
$qr_code = Redis::get($key);
|
||
// if(!$qr_code){
|
||
$qr_code = $this->getPreviewQrcode($url);
|
||
// Redis::setex($key,60*60*24*30,$qr_code);
|
||
// $qr_code = Redis::get($key);
|
||
// }
|
||
$qrcode = $qr_code;
|
||
$image1 = 'https://local-pictures.oss-cn-shenzhen.aliyuncs.com/202112/28/d7cdbf5cadcdcad5e656e762067a8545.png';
|
||
$image2 = $qrcode;
|
||
//二维码
|
||
$new_image = $this->imageAddImage($image1, $image2, 250, 250, 176, 176, 'bottom-left');
|
||
//提示
|
||
$tips = '长按识别二维码';
|
||
$new_image = $this->textAddImage($new_image, $tips, 28, 202, 954, '#333333', 'left');
|
||
$top_height = 100;
|
||
//主题 标题
|
||
$new_image = $this->textAddImage($new_image, mb_substr($activity->title, 0, 15), 32, 50, 100, '#333333', 'left');
|
||
$top_height += 40;
|
||
if (mb_strlen($activity->title) > 15) {
|
||
$new_image = $this->textAddImage($new_image, mb_substr($activity->title, 15, strlen($activity->title)), 32, 50, $top_height, '#000000', 'left');
|
||
$top_height += 40;
|
||
}
|
||
//存在开始和结束时间 优先展示
|
||
if ($activity->start_time && $activity->end_time) {
|
||
$show = date('Y.m.d', strtotime($activity->start_time)) . ' 至 ' . date('Y.m.d', strtotime($activity->end_time));
|
||
} else {//没有开始和结束时间展示副标题
|
||
$show = $activity->Subtitle;
|
||
$show = str_replace(array('\r\n', '\r', '\n'), ' ', $show);
|
||
if (mb_strlen($show) >= 18) {
|
||
$result = mb_substr($show, 0, 18);
|
||
$show = $result . '...';
|
||
}
|
||
}
|
||
$new_image = $this->textAddImage($new_image, $show, 24, 50, 210, '#666666', 'left');
|
||
//海报
|
||
$new_image = $this->imageAddImage($new_image, $activity->pic, 500, 280, 50, 258, 'top-left');
|
||
$file_path = storage_path("/qrcode/" . time().mt_rand(0,999999) . "activity_share.png");
|
||
$new_image->save($file_path);
|
||
if (file_exists($file_path)) {
|
||
$pic = $this->uploadFile($file_path);
|
||
try {
|
||
unlink($file_path);
|
||
} catch (Exception $e) {
|
||
return $this->failure($e->getMessage());
|
||
}
|
||
}
|
||
return $pic;
|
||
}
|
||
|
||
/**
|
||
* 匹配用户信息反馈
|
||
* @param Request $request
|
||
*/
|
||
public function matchUserFeedback(Request $request)
|
||
{
|
||
try {
|
||
$receive_user_id = $request->receive_user_id;
|
||
$send_user_id = $request->send_user_id;
|
||
$status = $request->status;
|
||
$merchant_id = $request->merchant_id ?? 491;
|
||
if (!isset($status) || !$send_user_id || !$receive_user_id) {
|
||
return $this->failure('参数不全');
|
||
}
|
||
$send_user = User::find($send_user_id);
|
||
if(!$send_user){
|
||
return $this->failure('订单用户不存在');
|
||
}
|
||
$receive_user = User::find($receive_user_id);
|
||
if(!$receive_user){
|
||
return $this->failure('接收用户不存在');
|
||
}
|
||
|
||
DB::beginTransaction();
|
||
if ($status == 0) {
|
||
MatchLog::where('receive_user_id', $receive_user_id)
|
||
->where('send_user_id', $send_user_id)
|
||
->update(['status' => 0, 'updated_at' => date('Y-m-d H:i:s')]);
|
||
|
||
MatchLog::where('receive_user_id', $send_user_id)
|
||
->where('send_user_id', $receive_user_id)
|
||
->update(['status' => 0, 'updated_at' => date('Y-m-d H:i:s')]);
|
||
} elseif($status == 1) {
|
||
MatchLog::where('receive_user_id', $send_user_id)
|
||
->where('send_user_id', $receive_user_id)
|
||
->update(['status' => 4, 'updated_at' => date('Y-m-d H:i:s')]);
|
||
$matchLog = MatchLog::where('receive_user_id', $receive_user_id)
|
||
->where('send_user_id', $send_user_id)
|
||
->first();
|
||
if ($matchLog) {
|
||
$matchLog->status = 4;
|
||
$matchLog->save();
|
||
$name = $send_user->name??$send_user->nickname;
|
||
if($matchLog->admin_id){
|
||
$admin = MerchantMembers::where('merchant_members.mch_id',$merchant_id)->where('merchant_members.admin_id',$matchLog->admin_id)
|
||
->join('merchant_admins', function ($join) use ($request) {
|
||
$join->on('merchant_members.admin_id', '=', 'merchant_admins.id');
|
||
}, null, null, 'left')
|
||
->select('merchant_admins.mobile')
|
||
->first();
|
||
if($admin && $admin->mobile){
|
||
$mobile = $admin->mobile;
|
||
}else{
|
||
$mobile = null;
|
||
}
|
||
}else{
|
||
$mobile = Anchor::where('m_id',$merchant_id)->value('mobile');
|
||
}
|
||
if($mobile){
|
||
$message = '用户:'.$receive_user_id.' 同意了用户'.$name.',用户id: '.$send_user_id.' 的交往请求,请及时跟进';
|
||
$this->sentMessage($mobile,$message);
|
||
}
|
||
}
|
||
}else{
|
||
return $this->failure('状态非法');
|
||
}
|
||
DB::commit();
|
||
return $this->success('ok');
|
||
} catch (\Exception $e) {
|
||
DB::rollBack();
|
||
$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);
|
||
}
|
||
}
|