276 lines
9.6 KiB
PHP
276 lines
9.6 KiB
PHP
<?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(){
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|