love_php/app/Services/ActivityService.php

276 lines
9.6 KiB
PHP
Raw Permalink Normal View History

2026-04-02 09:20:51 +08:00
<?php
namespace App\Services;
use App\Contracts\ActivityContract;
use App\Models\Paas;
use App\Models\PaasActivity;
use App\Models\Activity;
use App\Models\ActivityMember;
use App\Models\User;
use App\Models\PayOrder;
use App\Models\Order;
class ActivityService implements ActivityContract
{
/**
* 平台活动列表
* @param [type] $request [description]
* @return [type] [description]
*/
public function officialActivities($request)
{
$paas = $request->input('paas');
$activities = Activity::orderBy('is_deadline', 'asc')->orderBy('start_time', 'asc');
if (!empty($paas)) {
$paas_id = Paas::Where('name', $paas)->value('id');
$activity_ids = PaasActivity::where('paas_id', $paas_id)->pluck('activity_id');
$activities = $activities->whereIn('id', $activity_ids);
}
$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->time = $time;
}
return $activities;
}
/**
* 活动详情
* @param [type] $activity_id [description]
* @return [type] [description]
*/
public function officialActivity($activity_id,$user = null)
{
$user_id = 0;
if(!empty($user)){
$user_id = $user->id;
}
$activity = Activity::
withCount(['activityMember' => function ($query) use ($user_id) {
$query->where('user_id', $user_id);
}])->findOrFail($activity_id);
$activity->end_time = $activity->end_time?$activity->end_time:'待定';
$activity->detail_pic = json_decode($activity->detail_pic);
$activity->increment('click_num', 1);
//是否报名
$is_joined = $this->isJoined(auth()->id(), $activity_id);
$activity->is_joined = $is_joined;
//最近参加
$members = ActivityMember::where('activity_id', $activity_id)->where('is_joined', 1)->orderBy('id', 'desc')->get();
foreach ($members as $member) {
$member->type = User::where('id', $member->user_id)->value('type');
}
$activity->members = $members;
return $activity;
}
public function isJoined($user_id, $activity_id)
{
$is_joined = ActivityMember::where('user_id', $user_id)->where('activity_id',$activity_id)->where('is_joined', 1)->count();
return $is_joined?1:0;
}
/**
* 活动报名
* @param [type] $activity_id [description]
* @return [type] [description]
*/
public function officailJoinActivity($request, $activity_id)
{
$user = auth()->user();
$activity = Activity::findOrFail($activity_id);
if ($activity->is_deadline) {
return '活动截止报名';
}
$member = $this->isJoined($user->id, $activity_id);
if ($member) {
return '该活动已报名';
}
$member = ActivityMember::firstOrCreate([
'user_id'=>$user->id,
'activity_id'=>$activity_id,
]);
$member->name = $user->name;
$member->avatar = $user->photo;
$member->sex = $user->sex;
$member->mobile = $user->mobile;
$member->save();
if ($activity->fee == 0) {
$member->is_joined = 1;
$member->save();
$member->wx_pay = [];
return $member;
}else{
$trade_no = \CommonUtilsService::getTradeNO();
$pay_order = array(
'user_id' => $user->id,
'trade_no' => $trade_no,
'pay_status' => 'UNPAID',
'cash' => $activity->fee,
);
$order = array(
'user_id'=>$user->id,
'type_id'=>$activity_id,
'goods'=>$activity->theme,
'price'=>$activity->fee,
'num'=>1,
'type'=>'activity',
'trade_no'=>$trade_no,
);
if (strstr($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')) {
$wx_pay = \WechatService::constructWXPay($pay_order, $user->id, $activity->theme);
}else{
$wx_pay = \WechatService::constructWXH5Pay($pay_order, $user->id, $activity->theme, $activity_id);
}
//支付订单
$order_pay = PayOrder::create($pay_order);
$order = Order::create($order);
$order_pay->wx_pay = $wx_pay;
return $order_pay;
}
}
public function getClientIp()
{
$cip = 'unknown';
if ($_SERVER['REMOTE_ADDR']) {
$cip = $_SERVER['REMOTE_ADDR'];
}elseif (getenv('REMOTE_ADDR')) {
$cip = getenv('REMOTE_ADDR');
}
return $cip;
}
/**
* 活动置顶
* @param [type] $activity_id [description]
* @return [type] [description]
*/
public function topActivity($activity_id)
{
$activity = Activity::find($activity_id);
if ($activity->is_top) {//已经是置顶状态
//当前置顶以上的置顶状态-1
Activity::where('is_top', '>', $activity->is_top)->where('is_deadline', 0)->where('is_cancel', 0)->decrement('is_top', 1);
}
//置顶数
$top_count = Activity::where('is_top', '>', 0)->where('id', '<>', $activity_id)->where('is_deadline', 0)->where('is_cancel', 0)->count();
$top_count = $top_count?$top_count:0;
$activity->is_top = $top_count + 1;
$activity->save();
return ;
}
/**
* 取消置顶
* @param [type] $activity_id [description]
* @return [type] [description]
*/
public function cancelActivityTop($activity_id)
{
$activity = Activity::find($activity_id);
if ($activity->is_top) {
//置顶以上的状态-1
Activity::where('is_top', '>', $activity->is_top)->where('is_deadline', 0)->where('is_cancel', 0)->decrement('is_top', 1);
$activity->is_top = 0;
$activity->save();
}
return;
}
/**
* 取消活动
* @param Request $request [description]
* @param [type] $activity_id [description]
* @return [type] [description]
*/
public function cancelActivity($request, $activity_id)
{
//取消活动
$activity = Activity::find($activity_id);
$activity->is_cancel = 1;
$activity->save();
}
/**
* 复制活动
* @param [type] $activity_id [description]
* @return [type] [description]
*/
public function copyActivity($request, $activity_id)
{
$activity = Activity::where('id', $activity_id)->first();
$array = ['id'=>$activity->id, 'is_top'=>$activity->is_top, 'qrcode'=>$activity->qrcode, 'vote_qrcode'=>null, 'sign_in_qrcode'=>$activity->sign_in_qrcode, 'is_deadline'=>0, 'is_cancel'=>0, 'click_num'=>0, 'created_at'=>$activity->created_at, 'updated_at'=>$activity->updated_at, 'deleted_at'=>null];
$activity_arr = $activity->toArray();
$new_arr = array_diff($activity_arr, $array);
$activity = $this->addActivity($new_arr);
$admin_type = $request->session()->get('admin_type');
if ($admin_type == 'paas_admin') {
$paas_obj = $request->session()->get('paas_obj');
PaasActivity::create([
'paas_id'=>$paas_obj->id,
'activity_id'=>$activity->id,
]);
}
return $activity;
}
/**
* 复制活动
* @param [type] $activity_id [description]
* @return [type] [description]
*/
public function copyActivityV2($request, $activity_id)
{
$activity = Activity::where('id', $activity_id)->first();
$array = ['id'=>$activity->id,'pay_type'=>$activity->pay_type, 'is_top'=>$activity->is_top, 'qrcode'=>$activity->qrcode, 'vote_qrcode'=>null, 'sign_in_qrcode'=>$activity->sign_in_qrcode, 'is_deadline'=>0, 'is_cancel'=>0, 'click_num'=>0, 'is_hidden'=>$activity->is_hidden,'created_at'=>$activity->created_at, 'updated_at'=>$activity->updated_at, 'deleted_at'=>null,'is_online'=>$activity->is_online,'can_coin_amount'=>$activity->can_coin_amount,'can_cash_amount'=>$activity->can_cash_amount,'can_repeat_sign'=>$activity->can_repeat_sign,];
$activity_arr = $activity->toArray();
$new_arr = array_diff($activity_arr, $array);
$activity = $this->addActivity($new_arr);
$admin_type = $request->session()->get('admin_type');
if ($admin_type == 'paas_admin') {
$paas_obj = $request->session()->get('paas_obj');
PaasActivity::create([
'paas_id'=>$paas_obj->id,
'activity_id'=>$activity->id,
]);
}
return $activity;
}
/**
* 添加活动
*/
public function addActivity($array)
{
$activity = Activity::create($array);
return $activity;
}
/**获取活动的 的报名状态 */
public function getActivityApplyStatus(){
}
}