732 lines
30 KiB
PHP
732 lines
30 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\App;
|
|
|
|
use App\Models\AccessRecord;
|
|
use App\Models\CommunityActivity;
|
|
use App\Models\Live\Anchor;
|
|
use App\Models\Live\LiveBanner;
|
|
use App\Models\Live\Viewer;
|
|
use App\Models\Server\MerchantUser;
|
|
use App\Models\TouristOrder;
|
|
use App\Models\User;
|
|
use App\Models\WangYiYunUser;
|
|
use App\Models\Wechat;
|
|
use App\Services\IMService;
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Response\ResponseJson;
|
|
use App\Models\Activity;
|
|
use App\Models\ActivityMember;
|
|
use App\Models\ActivityClass;
|
|
use App\Contracts\OrderContract;
|
|
use App\Models\Order;
|
|
use App\Models\UrlLink;
|
|
use App\Services\UserService;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Redis;
|
|
|
|
class ActivityController extends Controller
|
|
{
|
|
use ResponseJson;
|
|
protected $orderCon;
|
|
public function __construct(OrderContract $orderCon)
|
|
{
|
|
$this->orderCon = $orderCon;
|
|
}
|
|
|
|
/**
|
|
* 活动列表
|
|
* @param Request $request [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function activities(Request $request)
|
|
{
|
|
$user = $this->getMyUserinfo();
|
|
$user_id = 0;
|
|
if($user){
|
|
$user_id = $user->id;
|
|
}
|
|
try {
|
|
$activities = Activity::with('sku', 'class', 'activityMember', 'activityMember')
|
|
->with(['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 == '进行中') {
|
|
$now = date('Y-m-d H:i:s');
|
|
$activities = $activities->where('end_time', '>', $now)->where(function($q) use ($now){
|
|
$q->where('apply_deadline', '>', $now)
|
|
->orWhereNull('apply_deadline');
|
|
});
|
|
}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 == '已报名') {
|
|
$activity_ids = ActivityMember::where('user_id', $user_id)->pluck('activity_id');
|
|
$activities = $activities->whereIn('id', $activity_ids);
|
|
}elseif ($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->select('id','can_repeat_sign','is_deadline', 'apply_deadline','theme', 'class_id', 'is_top', 'city', 'dist', 'start_time', 'end_time', 'fee', 'poster','is_top','is_online')->orderBy('is_top', 'desc')->orderBy('start_time', 'desc')->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->activity_status = 0;
|
|
if($activity->start_time>now()){
|
|
$activity->activity_status = 0;
|
|
}elseif($activity->start_time<now()&&now()<$activity->end_time){
|
|
$activity->activity_status = 1;
|
|
}elseif(now()>$activity->end_time){
|
|
$activity->activity_status = 2;
|
|
}
|
|
|
|
$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;
|
|
//价格区间
|
|
// $activity->fee = $this->getPriceRange($skus, $activity);
|
|
if (count($skus)>=1) {
|
|
$activity->fee = $skus[0]['price'];
|
|
}
|
|
if($activity->fee == 0){
|
|
$activity->fee = 0;
|
|
}else{
|
|
$activity->fee = \CommonUtilsService::moneyFormat($activity->fee,0);
|
|
}
|
|
$activity->class_name= $activity->class?$activity->class->title:null;
|
|
$activity->poster = $activity->poster.'?x-oss-process=style/scale1';
|
|
//是否报名
|
|
$activity->is_member = $activity->activityMember->where('user_id', $user_id)->first()?1:0;
|
|
|
|
// 是否可以重复报名
|
|
if($activity->can_repeat_sign == 1 && $activity->is_member = 1){
|
|
//已报名 没有签到的数量
|
|
if(count($activity->activityMemberNotSign)==0){
|
|
$activity->is_member = 0;
|
|
}else{
|
|
$activity->is_member = 1;
|
|
}
|
|
}
|
|
|
|
// 1.可以报名 。 2 .已经报名 3.截止报名 4.已结束
|
|
$apply_status = 1;
|
|
if($activity->is_member == 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;
|
|
unset($activity->sku, $activity->skus, $activity->class, $activity->activityMember,$activity->activityMemberNotSign);
|
|
}
|
|
return $this->success('ok', $activities);
|
|
} catch (\Exception $e) {
|
|
$this->getError($e);
|
|
return $this->failure('数据获取失败,请稍后再试');
|
|
}
|
|
}
|
|
|
|
|
|
public function getPriceRange($skus, $activity)
|
|
{
|
|
if (count($skus)) {
|
|
if (count($skus) == 1) {
|
|
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 \CommonUtilsService::moneyFormat($min_price,0);
|
|
}
|
|
return \CommonUtilsService::moneyFormat($min_price,0).'~'. \CommonUtilsService::moneyFormat($max_price,0);
|
|
}
|
|
}else{
|
|
return \CommonUtilsService::moneyFormat($activity->fee,0) ;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 活动分类列表
|
|
* @param Request $request [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function activityClasses(Request $request)
|
|
{
|
|
$classes = ActivityClass::orderBy('id', 'asc')
|
|
->withCount('activity')
|
|
->get()->toArray();
|
|
|
|
$test = [
|
|
'id'=>0,
|
|
'title'=>'不限',
|
|
'created_at'=>date('Y-m-d H:i:s'),
|
|
'updated_at'=>date('Y-m-d H:i:s')
|
|
];
|
|
|
|
|
|
|
|
array_unshift($classes, $test);
|
|
return $this->success('ok', $classes);
|
|
}
|
|
|
|
/**
|
|
* 活动详情
|
|
* @param Request $request [description]
|
|
* @param Activity $activity [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function activity(Request $request, $activity)
|
|
{
|
|
$is_set = Activity::where('id', $activity)->count();
|
|
if(empty($is_set)){
|
|
return $this->failure('活动不存在');
|
|
}
|
|
$Logging = 0 ;
|
|
if (\Auth::guard('api')->check()) {
|
|
$user = \Auth::guard('api')->user();
|
|
$Logging = 1;
|
|
}
|
|
$activity = Activity::find($activity);
|
|
$activity = $activity->withCount('activityMember')->where('id', $activity->id)->select('id', 'can_repeat_sign','is_deadline', 'apply_deadline','theme','show_member_num', 'poster', 'fee', 'content', 'start_time', 'end_time', 'province', 'city', 'dist', 'address', 'detail_path', 'detail','location_latitude','location_longitude','activity_description','is_online')->first();
|
|
$activity->h5_link = env('APP_URL').'/h5/#/eventDetail/'.$activity->id;
|
|
$activity->skus = $activity->skus();
|
|
//价格区间
|
|
$activity->price_range = $this->getPriceRange($activity->skus, $activity);
|
|
//是否收藏
|
|
$activity->hasFavorited = 0;
|
|
//是否登录
|
|
$activity->Logging = $Logging;
|
|
//是否报名
|
|
$activity->is_member = 0;
|
|
//订单号
|
|
$activity->order_id = null;
|
|
$activity->link = null;
|
|
if($Logging){
|
|
$activity->is_member = $activity->activityMember->where('user_id', $user->id)->count()?1:0;
|
|
|
|
// 是否可以重复报名
|
|
if($activity->can_repeat_sign == 1 && $activity->is_member = 1){
|
|
$myActivityMemberNotSignCount = ActivityMember::where(['user_id'=> $user->id,'activity_id'=>$activity->id])->whereNull('sign_in')->count();
|
|
//已报名 没有签到的数量
|
|
if($myActivityMemberNotSignCount==0){
|
|
$activity->is_member = 0;
|
|
}else{
|
|
$activity->is_member = 1;
|
|
}
|
|
}
|
|
|
|
$activity->hasFavorited = $user->hasFavorited($activity)?1:0;
|
|
$activity->activityMember->where('user_id', $user->id)->first()?1:0;
|
|
//订单号
|
|
$activity->order_id = Order::where('user_id', $user->id)->where('type','activity')->where('type_id', $activity->id)->where('pay_status', 'PAID')->value('id');
|
|
//H5链接
|
|
$link = env('APP_URL')."/api/official/live/wechat/oauth?from_user_id=".$user->id."&url=https://love.ufutx.com/h5/#/activityDetail/".$activity->id;
|
|
$link = UrlLink::firstOrCreate(['url'=>$link]);
|
|
$code = $this->decb64($link->id);
|
|
$activity->link = 'ufutx.cn/s/'.$code;
|
|
}
|
|
unset($activity->sku);
|
|
//报名人数
|
|
$activity->member_num = $activity->activityMember()->with('user:id,photo,nickname')->whereHas('user', function($sql){
|
|
$sql->where('hidden_profile', 'NONE');
|
|
})->count();
|
|
//最近报名成员
|
|
$activityMembers = $activity->activityMember()->with('user:id,photo,nickname')->whereHas('user', function($sql){
|
|
$sql->where('hidden_profile', 'NONE');
|
|
})->select('user_id', 'activity_id')->orderBy('id', 'desc');
|
|
$activity->members = $activityMembers->get();
|
|
|
|
foreach ($activity->members as $member) {
|
|
$member->nickname = $member->user->nickname;
|
|
$userSer = new UserService();
|
|
$member->photo = $userSer->getUserValidPhoto($member->user);
|
|
unset($member->user);
|
|
}
|
|
//活动状态
|
|
$activity->activity_status = 0;
|
|
if($activity->start_time>now()){
|
|
$activity->activity_status = 0;
|
|
}elseif($activity->start_time<now()&&now()<$activity->end_time){
|
|
$activity->activity_status = 1;
|
|
}elseif(now()>$activity->end_time){
|
|
$activity->activity_status = 2;
|
|
}
|
|
//增加点击量
|
|
$activity->increment('click_num', 1);
|
|
|
|
// 1.可以报名 。 2 .已经报名 3.截止报名
|
|
$apply_status = 1;
|
|
if($activity->is_member == 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;
|
|
unset($activity->activityMember);
|
|
return $this->success('ok', $activity);
|
|
}
|
|
|
|
/**
|
|
* 报名活动
|
|
* @param Request $request [description]
|
|
* @param Activity $activity [description]
|
|
* @param [type] $sku_id [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function joinActivity(Request $request, Activity $activity, $sku_id)
|
|
{
|
|
\DB::beginTransaction();
|
|
try {
|
|
$user = auth()->user();
|
|
$user_id = $user->id;
|
|
$member = $user->activityMember()->where('activity_id', $activity->id)->where('is_joined', 1)->first();
|
|
if ($member) {
|
|
return $this->failure('已报名');
|
|
}
|
|
// // 该活动特殊要求
|
|
// if($activity->id==554){
|
|
// $count = $user->ProfilePhoto()->count();// 大于七张
|
|
// if($count<7)
|
|
// return $this->resp('您的照片不足七张。',null,3);
|
|
|
|
// $introduction = mb_strlen($user->profileCourtship->introduction);//大于两百字
|
|
// if($introduction<200)
|
|
// return $this->resp('您的个人介绍还不足200字。',null,3);
|
|
|
|
// $interest_hobby = mb_strlen($user->profileCourtship->interest_hobby);//大于50字
|
|
// if($interest_hobby<50)
|
|
// return $this->resp('您的兴趣爱好还不足50字。',null,3);
|
|
|
|
// $ideal_mate =mb_strlen($user->profileCourtship->ideal_mate);// 大于50字
|
|
// if($ideal_mate<50)
|
|
// return $this->resp('您的择偶需求还不足50字。',null,3);
|
|
|
|
// return $user->is_educate_approved;
|
|
// // 要求真人,实名,学历认证
|
|
// if($user->is_real_approved!=1)
|
|
// return $this->resp('您尚未完成真人认证',null,3);
|
|
// if($user->is_approved!=1)
|
|
// return $this->resp('您尚未完成实名认证',null,3);
|
|
// if($user->is_educate_approved!=1)
|
|
// return $this->resp('您尚未完成学历认证',null,3);
|
|
|
|
// }
|
|
// if(!empty($activity->apply_deadline)){
|
|
// $apply_deadline = strtotime($activity->apply_deadline);
|
|
// if($apply_deadline<time()){
|
|
// return $this->failure('当前活动,已截止报名');
|
|
// }
|
|
// }
|
|
|
|
if (empty($sku_id)) {
|
|
return $this->failure('请选择活动规格');
|
|
}
|
|
//sku
|
|
$sub_sku = ($activity->skus())[$sku_id-1];
|
|
|
|
if (empty(count($sub_sku))) {
|
|
return $this->failure('暂无活动规格');
|
|
}
|
|
$price = $sub_sku['price'];
|
|
$goods = $activity->theme.'【'.$sub_sku['name'].'】';
|
|
$linkmen = $request->input('linkmen', []);
|
|
if (empty(count($linkmen))) {
|
|
return $this->failure("请输入至少填写一位联系人");
|
|
}
|
|
if ($price == 0) {
|
|
$activity->activityMember()->create([
|
|
'user_id'=>auth()->id(),
|
|
'linkmen'=>json_encode($linkmen),
|
|
'is_joined'=>1
|
|
]);
|
|
}
|
|
//生成订单
|
|
$pay_order = $this->orderCon->makeAppOrder($request, $price, 'activity', $activity->id, $goods, $linkmen, $goods);
|
|
if (empty($pay_order)) throw new \Exception("活动订单生成失败", 1);
|
|
//发送模板通知给管理员(公众号)
|
|
// $this->sendActivityNotice($activity, $user);
|
|
\DB::commit();
|
|
return $this->success('ok', $pay_order);
|
|
|
|
} catch (\Exception $e) {
|
|
\DB::rollBack();
|
|
$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 decb64($dec) { //10进制转换成64进制
|
|
if ($dec < 0) {
|
|
return false;
|
|
}
|
|
$map = array(
|
|
0=>'0',1=>'1',2=>'2',3=>'3',4=>'4',5=>'5',6=>'6',7=>'7',8=>'8',9=>'9',
|
|
10=>'A',11=>'B',12=>'C',13=>'D',14=>'E',15=>'F',16=>'G',17=>'H',18=>'I',19=>'J',
|
|
20=>'K',21=>'L',22=>'M',23=>'N',24=>'O',25=>'P',26=>'Q',27=>'R',28=>'S',29=>'T',
|
|
30=>'U',31=>'V',32=>'W',33=>'X',34=>'Y',35=>'Z',36=>'a',37=>'b',38=>'c',39=>'d',
|
|
40=>'e',41=>'f',42=>'g',43=>'h',44=>'i',45=>'j',46=>'k',47=>'l',48=>'m',49=>'n',
|
|
50=>'o',51=>'p',52=>'q',53=>'r',54=>'s',55=>'t',56=>'u',57=>'v',58=>'w',59=>'x',
|
|
60=>'y',61=>'z',62=>'_',63=>'=',
|
|
);
|
|
$b64 = '';
|
|
do {
|
|
$b64 = $map[($dec % 64)] . $b64;
|
|
$dec /= 64;
|
|
} while ($dec >= 1);
|
|
return $b64;
|
|
}
|
|
|
|
//同步活动列表
|
|
public function businessActivities(Request $request)
|
|
{
|
|
|
|
$class = $request->class??'one';
|
|
$result = CommunityActivity::select('id','title','merchant_id','price','pic','class','Subtitle','start_time','apply_deadline','end_time');
|
|
|
|
if(isset($request->keyword) && $request->keyword) {
|
|
$result = $result->where('title','like','%'.$request->keyword.'%');
|
|
}
|
|
// $result = $result->where("title", 'not like', '%盲盒%');
|
|
$result = $result->where('status',1)
|
|
->where('type','business')
|
|
->where('is_love_show',1)
|
|
->where('class',$class)
|
|
->orderBy('apply_deadline','desc')
|
|
->orderBy('is_top','desc')
|
|
->orderBy('top_time','desc')->paginate();
|
|
$time = date('Y-m-d H:i:s');
|
|
foreach ($result as $key => $value) {
|
|
if($value->class == 'one'){
|
|
$is_deadline = 0;
|
|
$pay = TouristOrder::where('type','community')->where('type_id',$value->id)->where('account_id',$value->merchant_id)->whereIn('pay_status',[1,4])->first();
|
|
if($pay){
|
|
$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;
|
|
}
|
|
}
|
|
return $this->success('ok', $result);
|
|
}
|
|
|
|
//同步活动详情
|
|
public function businessActivity(Request $request,$activity_id)
|
|
{
|
|
$user = $this->getMyUserinfo();
|
|
$result = CommunityActivity::where('id',$activity_id)->first();
|
|
if(!$result) return $this->failure('该活动已下线或不存在');
|
|
$result->price = floatval($result->price);
|
|
|
|
$user_service = new UserService();
|
|
$merchant_user = $user_service->syncSaasUser($user);
|
|
|
|
Redis::zscore('love_community_pv', $activity_id);
|
|
$result->love_pv = Redis::zincrby('love_activity_pv', 1 ,$activity_id);
|
|
$banner = LiveBanner::where('class','community')->where('class_id',$activity_id)->value('icon');
|
|
$result->banner = json_decode( $banner,true);
|
|
$result->sku = json_decode($result->sku,true);
|
|
|
|
if ($merchant_user) {
|
|
$accid = 10000000+$merchant_user->id;
|
|
$token = WangYiYunUser::where('accid',$accid)->value('token');
|
|
if(!$token){
|
|
|
|
$data['nickname'] =$merchant_user->nickname;
|
|
$data['sex'] = 0;
|
|
$this->createWyyUser($data,$accid);
|
|
$token = WangYiYunUser::where('accid',$accid)->value('token');
|
|
|
|
}
|
|
$result->token = $token;
|
|
}
|
|
|
|
// 是否购买过
|
|
$pay_status = TouristOrder::where('account_id',$merchant_user->id)->where('type','community')->whereIn('pay_status',[1,4])->where('type_id',$activity_id)->exists();
|
|
|
|
$result->pay_status = $pay_status;
|
|
$reward_count = TouristOrder::where('type','reward_activity')->where('type_id', $activity_id)->whereIn('pay_status',[1,4])->get()->count();
|
|
$result->reward_count = $reward_count;
|
|
|
|
$value = TouristOrder::where('type','community')->where('type_id',$activity_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){
|
|
$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;
|
|
$result->h5_link = env('APP_URL').'/api/official/live/wechat/oauth?url='.urlencode(env('APP_URL').'/h5/#/activityDetails/'.$result->id);
|
|
|
|
//$type = 'community';
|
|
//$key = 'love_'.$type.'_pv';
|
|
//Redis::zincrby($key,1,$activity_id);
|
|
if(config('app.env') == 'production'){
|
|
$merchant_user->addlog($result,2);
|
|
}
|
|
return $this->success('ok', $result);
|
|
}
|
|
|
|
public function joinBusinessActivity(Request $request,$activity_id)
|
|
{
|
|
\DB::beginTransaction();
|
|
try {
|
|
if (\Auth::guard('api')->check()) {
|
|
$user = \Auth::guard('api')->user();
|
|
}
|
|
$pay_type = $request->input('pay_type', 'free');
|
|
|
|
$merchant_user = MerchantUser::where('user_id',$user->id)->first();
|
|
$order = TouristOrder::where('type','community')->where('type_id',$activity_id)->where('account_id',$merchant_user->id)->whereIn('pay_status',[1,4])->first();
|
|
|
|
if ($order) {
|
|
return $this->failure('已报名');
|
|
}
|
|
$result = CommunityActivity::where('id',$activity_id)->where('status',1)->first();
|
|
//sku
|
|
$sku_id = $request->sku_id;
|
|
if(!$sku_id&&$result->pay_type =='wechat') return $this->failure('规格参数不存在,请稍后再试。');
|
|
if($sku_id){
|
|
$skus = json_decode($result->sku,true);
|
|
$skus = array_column($skus, null,'sku_id');
|
|
$sku = $skus[$sku_id];
|
|
$price = $sku['price'];
|
|
$goods = $sku['name'];
|
|
$desc = $result->title.'-'.$sku['name'].'';
|
|
|
|
|
|
}else{
|
|
$price = $result->price;
|
|
$goods = null;
|
|
$desc = $result->title;
|
|
}
|
|
if (empty($pay_type)) {
|
|
$pay_type = 'free';
|
|
}
|
|
if ($pay_type == 'free' && $price != 0) {
|
|
throw new \Exception("订单价格大于0", 1);
|
|
}
|
|
$anchor = Anchor::where('id',$result->anchor_id)->first();
|
|
$trade_no = $this->getRefundTradeNo();
|
|
$TouristOrder = new TouristOrder();
|
|
$TouristOrder->open_id = null;
|
|
$TouristOrder->price = floatval($price);
|
|
$TouristOrder->pay_type = $result->pay_type;
|
|
$TouristOrder->type = 'community';
|
|
$TouristOrder->type_id = $activity_id;
|
|
$TouristOrder->trade_no = $trade_no;
|
|
$TouristOrder->desc = $desc;
|
|
$TouristOrder->goods = $goods;
|
|
$TouristOrder->channel = 2;
|
|
//$TouristOrder->from_openid = $request->from_openid;
|
|
//$TouristOrder->share_channel_id = $request->share_channel_id;
|
|
$TouristOrder->merchant_id = $result->merchant_id??0;
|
|
$TouristOrder->account_id = $merchant_user->id;
|
|
$TouristOrder->name = $request->name?:($merchant_user->nickname?:$user->nickname);
|
|
$TouristOrder->area_code = $request->area_code;
|
|
$TouristOrder->mobile = $request->mobile?:"未获取";
|
|
$TouristOrder->withdrawal_radio = $anchor->withdrawal_radio ??100;
|
|
$TouristOrder->insurance = $result->insurance?:0;
|
|
if($request->insurance_info)
|
|
$TouristOrder->insurance_info = json_encode($request->insurance_info);
|
|
if($request->linkmen)
|
|
$TouristOrder->linkmen = json_encode($request->linkmen);
|
|
if($price==0){
|
|
$TouristOrder->pay_status = 1;
|
|
$TouristOrder->save();
|
|
$TouristOrder->pay_config = null;
|
|
$TouristOrder->wx_pay = [];
|
|
return $this->success('ok',$TouristOrder);
|
|
}
|
|
$TouristOrder->save();
|
|
//$receipt = request()->input('apple_receipt');
|
|
$ios_version = $request->header('app-version', '1.0.0');
|
|
$result = $ios_version == '1.3.17'?true:false;
|
|
if ($result && $pay_type == 'ios' and empty($receipt)) throw new \Exception("没有支付凭证", 1);
|
|
if ($price>0) {
|
|
if ($pay_type == 'wechat') {
|
|
$pay_params = [
|
|
'user_id' => auth()->id(),
|
|
'trade_no' => $trade_no,
|
|
'pay_status' => $price == 0?'PAID':'UNPAID',
|
|
'cash' => $price,
|
|
'score' => 0,
|
|
'pay_type' => $pay_type,
|
|
'receipt' => $receipt = request()->input('apple_receipt'),
|
|
];
|
|
$ios_version = request()->header('ios_version');
|
|
$and_version = request()->header('and_version');
|
|
$callback = config('app.url').'/api/app/callback/business/orders/'.$trade_no.'?ios_version='.$ios_version.'&and_version='.$and_version;
|
|
$pay_config = \WechatService::constructWXAppPay($pay_params, auth()->id(), $desc, $callback);
|
|
$TouristOrder->pay_config = $pay_config;
|
|
}elseif ($pay_type == 'alipay') {
|
|
$pay_config = \AlipayService::purchase($desc, $trade_no, $price);
|
|
$TouristOrder->pay_config = $pay_config;
|
|
}
|
|
}
|
|
$TouristOrder->order_id = $TouristOrder->id;
|
|
$TouristOrder->cash = $TouristOrder->price;
|
|
//发送模板通知给管理员(公众号)
|
|
// $this->sendActivityNotice($activity, $user);
|
|
\DB::commit();
|
|
return $this->success('ok', $TouristOrder);
|
|
|
|
} catch (\Exception $e) {
|
|
\DB::rollBack();
|
|
$this->getError($e);
|
|
return $this->failure('报名失败,请稍后再试');
|
|
}
|
|
}
|
|
|
|
public function createWyyUser($data,$accid)
|
|
{
|
|
$im_service = new IMService(env('IM_APP_KEY'), env('IM_APP_SECRET'));
|
|
$result = $im_service->createUserId($accid,$data['nickname'],$props='{}',null);
|
|
//\Log::info('创建网易云账号');
|
|
//\Log::info($result);
|
|
if ($result['code'] == 200) {
|
|
$wyyUser = new WangYiYunUser;
|
|
$wyyUser->accid = $accid;
|
|
$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([$accid]);
|
|
if ($result['code'] == 200) {
|
|
$info = $result['uinfos'][0];
|
|
$accid = '';
|
|
$name = '';
|
|
$gender = '';
|
|
$icon = '';
|
|
if(array_key_exists("accid",$info)){
|
|
$accid = $info['accid'];
|
|
}
|
|
if(array_key_exists("name",$info)){
|
|
$name = $info['name'];
|
|
}
|
|
if(array_key_exists("gender",$info)){
|
|
$gender = $info['gender'];
|
|
}
|
|
if(array_key_exists("icon",$info)){
|
|
$icon = $info['icon'];
|
|
}
|
|
$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();
|
|
}
|
|
}
|
|
}
|
|
}
|