1871 lines
83 KiB
PHP
1871 lines
83 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Admin;
|
||
use App\Models\Match\MerchantUser;
|
||
use Illuminate\Http\JsonResponse;
|
||
use Illuminate\Http\Request;
|
||
use App\Http\Controllers\Controller;
|
||
use App\Models\Activity;
|
||
use App\Models\ActivityMember;
|
||
use App\Models\User;
|
||
use App\Models\ActivitySexVote;
|
||
use EasyWechat;
|
||
use App\Models\ActivityShareHistory;
|
||
use App\Models\Live\Viewer;
|
||
use App\Models\ActivityMatch;
|
||
use App\Models\ActivitySexMatch;
|
||
use App\Models\ActivityVote;
|
||
use Illuminate\Support\Facades\DB;
|
||
use App\Models\Followable;
|
||
use App\Models\ProfileCourtship;
|
||
use App\Models\Order;
|
||
use App\Models\Goods;
|
||
use App\Models\FamilyOrder;
|
||
use App\Models\Paas;
|
||
use App\Models\PaasActivity;
|
||
use App\Models\RefundOrder;
|
||
use App\Models\ActivityClass;
|
||
use App\Models\ActivitySku;
|
||
use App\Contracts\ActivityContract;
|
||
use App\Jobs\SendTemplateMsg;
|
||
use App\Models\CommunityActivity;
|
||
use App\Models\Server\TouristOrder;
|
||
use App\Models\TemplateMsgLog;
|
||
use Illuminate\Support\Facades\Cache;
|
||
|
||
use function AlibabaCloud\Client\json;
|
||
|
||
class ActivityController extends Controller
|
||
{
|
||
protected $activityCon;
|
||
public function __construct(ActivityContract $activityCon)
|
||
{
|
||
$this->activityCon = $activityCon;
|
||
}
|
||
/**
|
||
* 活动列表
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activities(Request $request)
|
||
{
|
||
// $is_deadline = $request->input('is_deadline', 0);
|
||
$is_hidden = $request->is_hidden ? $request->is_hidden : 0;
|
||
|
||
$activities = Activity::orderBy('is_top','desc')->orderBy('id', 'desc');
|
||
|
||
if (is_numeric($is_hidden) && $is_hidden == 1){
|
||
$activities = $activities->where('is_hidden',$is_hidden);
|
||
}
|
||
|
||
if (is_numeric($is_hidden) && $is_hidden == 0){
|
||
$activities = $activities->whereIn('is_hidden',[0,3]);
|
||
}
|
||
|
||
if (is_numeric($is_hidden) && $is_hidden == 2){
|
||
$activities = $activities->where('is_hidden',2);
|
||
}
|
||
|
||
$activities = $this->getScreenActivities($request, $activities);
|
||
$admin_type = $request->session()->get('admin_type');
|
||
if ($admin_type == 'paas_admin') {//平台管理员
|
||
//平台信息
|
||
$paas_obj = $admin_type = $request->session()->get('paas_obj');
|
||
//平台活动
|
||
$paas_activity_ids = PaasActivity::where('paas_id', $paas_obj->id)->pluck('activity_id');
|
||
$activities = $activities->whereIn('id', $paas_activity_ids);
|
||
}
|
||
if($request->has('is_deadline')){
|
||
$activities = $activities->where('is_deadline', $request->is_deadline);
|
||
}
|
||
$nopage = $request->input('nopage', 0);
|
||
if ($nopage) {
|
||
$activities = $activities->get();
|
||
}else{
|
||
$activities = $activities->select('id','theme','address','is_online','poster','fee','can_repeat_sign','start_time','end_time','is_top','is_hidden','reason')->paginate();
|
||
}
|
||
|
||
foreach ($activities as $activity) {
|
||
if ($activity->is_hidden==1) {
|
||
//生成h5跳转小程序链接
|
||
$app = \WechatService::app()->access_token;
|
||
$token = $app->getToken(true);
|
||
$data = [];
|
||
$data['jump_wxa']['path'] = '/pages/party/detail';
|
||
$data['jump_wxa']['query'] = 'party_id=' . $activity->id;
|
||
$data = json_encode($data);
|
||
$wechaturl = 'https://api.weixin.qq.com/wxa/generatescheme?access_token=' . $token['access_token'];
|
||
$curl = curl_init();
|
||
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
|
||
curl_setopt($curl, CURLOPT_URL, $wechaturl);
|
||
// curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
|
||
curl_setopt($curl, CURLOPT_FAILONERROR, false);
|
||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||
curl_setopt($curl, CURLOPT_HEADER, false);
|
||
if (1 == strpos("$" . $wechaturl, "https://")) {
|
||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
|
||
}
|
||
curl_setopt($curl, CURLOPT_POST, 1);
|
||
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
|
||
$result = curl_exec($curl);
|
||
$result = json_decode($result, true);
|
||
$jump_url = $result['openlink'];
|
||
|
||
$path = env('APP_URL').'/h5/#/jump_url?url='.$jump_url;
|
||
$activity->jump_url = $path;
|
||
}
|
||
}
|
||
|
||
return $this->success('ok', $activities);
|
||
}
|
||
|
||
/**
|
||
* 筛选活动
|
||
*/
|
||
public function getScreenActivities($request, $activities)
|
||
{
|
||
//未开始,活动中,活动结束
|
||
$status = $request->input('status');
|
||
//活动地区
|
||
$province = $request->input('province');
|
||
$city = $request->input('city');
|
||
//活动类型
|
||
$keyword = $request->input('keyword');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$activities = $activities->where("theme", 'like', '%'.$keyword.'%');
|
||
}
|
||
$now_time = date('Y-m-d H:i:s');
|
||
if ($status == 'NotStarted') {
|
||
$activities = $activities->where('start_time','>', $now_time);
|
||
}elseif ($status == 'Starting') {
|
||
$activities = $activities->where('start_time','<=', $now_time)->where('end_time', '>=', $now_time);
|
||
}elseif ($status == 'Started') {
|
||
$activities = $activities->where('end_time', '<', $now_time);
|
||
}
|
||
if ($province) {
|
||
$activities = $activities->where('province', $province);
|
||
}
|
||
if ($city) {
|
||
$activities = $activities->where('city', $city);
|
||
}
|
||
return $activities;
|
||
}
|
||
|
||
/**
|
||
* 活动详情
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
*/
|
||
public function activity(Request $request, $activity_id)
|
||
{
|
||
$activity = Activity::with('activityMember.user:id,sex','creator')->findOrFail($activity_id);
|
||
if ($activity->can_repeat_sign == 1 && !empty($activity->sign_in_qrcode)) {
|
||
$activity->sign_in_qrcode = json_decode($activity->sign_in_qrcode,true);
|
||
}
|
||
// $keyword = $request->input('keyword');
|
||
// // $member = ActivityMember::with('user:id,name,photo,circle_avatar')->where('activity_id', $activity_id)->orderBy('id', 'desc');
|
||
// // if ($keyword) {
|
||
// // $keyword = trim($keyword);
|
||
// // $member = $member->where('name', 'like', '%'.$keyword.'%');
|
||
// // }
|
||
// // $member = $member->paginate();
|
||
// // foreach ($member as $item){
|
||
// // if($item->user){
|
||
// // $item->name = $item->user->name;
|
||
// // $item->avatar = $item->user->photo?:$item->user->circle_avatar;
|
||
// // }
|
||
// // }
|
||
// // $activity->member = $member;
|
||
$activity->detail_pic = json_decode($activity->detail_pic,true);
|
||
//签到人数
|
||
$male_sign_in_count = ActivityMember::where('activity_id', $activity_id)->whereHas('user', function($sql){
|
||
$sql->where('sex',1);
|
||
})->where('sign_in', 1)->count();
|
||
|
||
$female_sign_in_count = ActivityMember::where('activity_id', $activity_id)->whereHas('user', function($sql){
|
||
$sql->where('sex',2);
|
||
})->where('sign_in', 1)->count();
|
||
$activity->male_sign_in_count = $male_sign_in_count;
|
||
$activity->female_sign_in_count = $female_sign_in_count;
|
||
$activity->total = ActivityMember::where('activity_id', $activity_id)->whereHas('user')->where('sign_in', 1)->count();
|
||
$activity->from_user_count = User::where('from_activity_id',$activity_id)->count();
|
||
//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);
|
||
//分类
|
||
$activity->class;
|
||
return $this->success('ok', $activity);
|
||
}
|
||
|
||
//通过活动注册的用户
|
||
public function registFromActivity(Request $request, $activity_id){
|
||
$keyword = $request->keyword;
|
||
$users = User::where('from_activity_id',$activity_id)->orderBy('created_at','desc');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$users = $users->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%');
|
||
}
|
||
$users = $users->paginate();
|
||
return $this->success('ok',$users);
|
||
}
|
||
|
||
/**
|
||
* 修改活动
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activityUpdate(Request $request, $activity_id)
|
||
{
|
||
$activity = Activity::findOrFail($activity_id);
|
||
ActivityShareHistory::where('activity_id',$activity_id)->delete();
|
||
|
||
if ($request->has('theme') && $request->theme != $activity->theme) {
|
||
$activity->theme = $request->theme;
|
||
}
|
||
|
||
if ($request->has('can_repeat_sign') && $request->can_repeat_sign != $activity->can_repeat_sign) {
|
||
$activity->can_repeat_sign = $request->can_repeat_sign;
|
||
}
|
||
if ($request->has('poster') && $request->poster != $activity->poster) {
|
||
$activity->poster = $request->poster;
|
||
}
|
||
if ($request->has('is_online') && $request->is_online != $activity->is_online) {
|
||
$activity->is_online = $request->is_online;//线上还是线下 1线上 0线下
|
||
}
|
||
$admin_type = $request->session()->get('admin_type');
|
||
if ($admin_type == 'admin') {
|
||
if ($request->has('host') && $request->host != $activity->host) {
|
||
$activity->host = $request->host;
|
||
}
|
||
}
|
||
if ($request->has('class_id') && $request->class_id != $activity->class_id) {
|
||
$activity->class_id = $request->class_id;
|
||
}
|
||
if ($request->has('pay_type') && $request->pay_type != $activity->pay_type) {
|
||
$activity->pay_type = $request->pay_type;
|
||
}
|
||
|
||
if ($request->has('activity_description') && $request->activity_description != $activity->activity_description) {
|
||
$activity->activity_description = $request->activity_description;
|
||
}
|
||
|
||
if ($request->has('vote_count') && $request->vote_count != $activity->vote_count) {
|
||
$activity->vote_count = $request->vote_count;
|
||
}
|
||
if ($request->has('vote_sex_count') && $request->vote_sex_count != $activity->vote_sex_count) {
|
||
$activity->vote_sex_count = $request->vote_sex_count;
|
||
}
|
||
if ($request->has('fee') && $request->fee != $activity->fee) {
|
||
$activity->fee = $request->fee;
|
||
}
|
||
|
||
if ($request->pay_type == 'coin') {
|
||
if ($request->can_coin_amount < ($request->fee * 10) && $request->can_coin_amount) {
|
||
$activity->can_coin_amount = $request->can_coin_amount;
|
||
$activity->can_cash_amount = $request->can_coin_amount / 10; //福币和现金比例 10:1;
|
||
}else{
|
||
return $this->failure('未输入可抵扣福币数量或可抵扣福币数量达到上限');
|
||
}
|
||
}else{
|
||
$activity->can_coin_amount = null;
|
||
$activity->can_cash_amount = null;
|
||
}
|
||
|
||
if ($request->has('detail') && $request->detail != $activity->detail) {
|
||
$activity->detail = $request->detail;
|
||
}
|
||
if ($request->has('detail_path') && $request->detail_path != $activity->detail_path) {
|
||
$activity->detail_path = $request->detail_path;
|
||
}
|
||
if ($request->has('content') && $request->input('content') != $activity->content) {
|
||
$activity->content = $request->input('content');
|
||
}
|
||
if ($request->has('detail_pic') && json_encode($request->detail_pic) != $activity->detail_pic) {
|
||
$activity->detail_pic = json_encode($request->detail_pic);
|
||
}
|
||
if ($request->has('start_time') && $request->start_time != $activity->start_time) {
|
||
$activity->start_time = $request->start_time;
|
||
}
|
||
if ($request->has('end_time') && $request->end_time != $activity->end_time) {
|
||
$activity->end_time = $request->end_time;
|
||
}
|
||
if ($request->has('apply_deadline') && $request->apply_deadline != $activity->apply_deadline) {
|
||
if ($request->apply_deadline > $request->end_time) {
|
||
return $this->failure('活动报名截止时间需小于活动结束时间');
|
||
}
|
||
$activity->apply_deadline = $request->apply_deadline;
|
||
}
|
||
if ($request->has('province') && $request->province != $activity->province) {
|
||
$activity->province = $request->province;
|
||
}
|
||
if ($request->has('city') && $request->city != $activity->city) {
|
||
$activity->city = $request->city;
|
||
}
|
||
if ($request->has('dist') && $request->dist != $activity->dist) {
|
||
$activity->dist = $request->dist;
|
||
}
|
||
if ($request->has('address') && $request->address != $activity->address) {
|
||
$activity->address = $request->address;
|
||
}
|
||
if ($request->has('location_latitude') && $request->location_latitude != $activity->location_latitude) {
|
||
$activity->location_latitude = $request->location_latitude;
|
||
}
|
||
if ($request->has('location_longitude') && $request->location_longitude != $activity->location_longitude) {
|
||
$activity->location_longitude = $request->location_longitude;
|
||
}
|
||
if ($request->has('show_member_num') && $request->show_member_num != $activity->show_member_num) {
|
||
$activity->show_member_num = $request->show_member_num;
|
||
}
|
||
$is_hidden = $request->is_hidden ? $request->is_hidden : 0;
|
||
if(is_numeric($request->is_hidden)){
|
||
if ($activity->is_hidden == 1 && $request->is_hidden == 2){//审核不通过 拒绝
|
||
if (empty($request->reason)) return $this->failure('请输入拒绝理由');
|
||
}
|
||
$activity->is_hidden = $request->is_hidden;
|
||
}
|
||
|
||
$activity->save();
|
||
$user_id = $activity->creator;
|
||
// dd($user_id);
|
||
$user = User::find($user_id);
|
||
|
||
|
||
if ($is_hidden == 0 && !empty($user)){
|
||
\CommonUtilsService::sendActivityNoticeToUserV3($activity,$user);
|
||
}
|
||
//创建sku
|
||
$activity_sku = $activity->sku;
|
||
$skus = $request->input('skus', []);
|
||
if (is_array($skus) && count($skus)) {
|
||
if (empty($activity_sku)) {
|
||
$activity->sku()->create(['skus'=>json_encode($skus,JSON_UNESCAPED_UNICODE)]);
|
||
|
||
}else{
|
||
$activity->sku()->update(['skus'=>json_encode($skus,JSON_UNESCAPED_UNICODE)]);
|
||
}
|
||
|
||
$history = ActivityShareHistory::where('activity_id',$activity_id)->delete();
|
||
return $this->success('ok');
|
||
|
||
$activity_sku = $activity->sku;
|
||
}
|
||
// else{
|
||
// $activity->sku()->delete();
|
||
// }
|
||
ActivityShareHistory::where('activity_id',$activity_id)->delete();
|
||
return $this->success('ok');
|
||
|
||
}
|
||
|
||
/**
|
||
* 创建活动
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activityCreate(Request $request)
|
||
{
|
||
try {
|
||
$theme = $request->input('theme');
|
||
$poster = $request->input('poster');
|
||
$host = $request->input('host');
|
||
$is_online = $request->input('is_online',0);//线上还是线下 1线上 0线下
|
||
$pay_type = $request->input('pay_type','cash');
|
||
$can_repeat_sign = $request->input('can_repeat_sign','0'); //'能否重复报名 0:否 1:可
|
||
$admin_type = $request->session()->get('admin_type');
|
||
if ($admin_type == 'paas_admin') {
|
||
$paas_obj = $request->session()->get('paas_obj');
|
||
$host = $paas_obj->title;
|
||
}
|
||
$fee = $request->input('fee', 0);
|
||
if (!is_numeric($fee)) {
|
||
return $this->failure('请输入正确费用');
|
||
};
|
||
if(empty($request->address)){
|
||
return $this->failure('请选择地址');
|
||
}
|
||
\DB::beginTransaction();
|
||
$detail = $request->input('detail');
|
||
|
||
$detail_path = $request->input('detail_path');
|
||
$start_time = $request->input('start_time');
|
||
$end_time = $request->input('end_time');
|
||
$apply_deadline = $request->input('apply_deadline',$end_time);
|
||
$province = $request->input('province');
|
||
$city = $request->input('city');
|
||
$dist = $request->input('dist');
|
||
$address = $request->input("address");
|
||
$location_latitude = $request->input('location_latitude');
|
||
$location_longitude = $request->input('location_longitude');
|
||
$detail_pic = $request->input('detail_pic');
|
||
$class_id = $request->input('class_id');
|
||
$activity_description = $request->input('activity_description');
|
||
$content = $request->input('content');
|
||
$activity = new Activity();
|
||
$activity->can_repeat_sign = $can_repeat_sign;
|
||
$activity->activity_description = $activity_description;
|
||
$activity->pay_type = $pay_type;
|
||
if ($pay_type == 'coin') {
|
||
if ($request->can_coin_amount < ($fee * 10) && $request->can_coin_amount) {
|
||
$activity->can_coin_amount = $request->can_coin_amount;
|
||
$activity->can_cash_amount = $request->can_coin_amount / 10; //福币和现金比例 10:1;
|
||
}else{
|
||
return $this->failure('未输入可抵扣福币数量或可抵扣福币数量达到上限');
|
||
}
|
||
}else{
|
||
$activity->can_coin_amount = null;
|
||
$activity->can_cash_amount = null;
|
||
}
|
||
|
||
$activity->class_id = $class_id;
|
||
$activity->is_online = $is_online;//线上还是线下 1线上 0线下
|
||
$activity->theme = $theme;
|
||
$activity->poster = $poster;
|
||
$activity->host = $host;
|
||
$activity->fee = $fee;
|
||
$activity->content = $content;
|
||
$activity->detail = $detail;
|
||
$activity->detail_path = $detail_path;
|
||
$activity->detail_pic = json_encode($detail_pic);
|
||
$activity->start_time = $start_time;
|
||
$activity->end_time = $end_time;
|
||
$activity->province = $province;
|
||
$activity->city = $city;
|
||
$activity->dist = $dist;
|
||
$activity->address = $address;
|
||
$activity->apply_deadline = $apply_deadline;
|
||
$activity->location_longitude = $location_longitude;
|
||
$activity->location_latitude = $location_latitude;
|
||
$activity->is_hidden = 1;//创建活动时 默认审核中 需审核
|
||
$activity->creator = auth()->id();
|
||
|
||
$activity->save();
|
||
|
||
//创建活动需要审核 发送微信模板消息给:13377553550
|
||
if (!strstr($activity->theme, '测试')){
|
||
$user_id = auth()->id();
|
||
$user = User::find($user_id);
|
||
\CommonUtilsService::sendActivityNoticeToUserV2($activity,$user);
|
||
}
|
||
|
||
//创建sku
|
||
$activity_sku = $activity->sku;
|
||
$skus = $request->input('skus', []);
|
||
if (is_array($skus) && count($skus)) {
|
||
$activity->sku()->create(['skus'=>json_encode($skus,JSON_UNESCAPED_UNICODE)]);
|
||
}
|
||
$admin_type = $request->session()->get('admin_type');
|
||
if ($admin_type == 'paas_admin') {//平台管理员
|
||
//平台信息
|
||
$paas_obj = $admin_type = $request->session()->get('paas_obj');
|
||
PaasActivity::create([
|
||
'paas_id'=>$paas_obj->id,
|
||
'activity_id'=>$activity->id,
|
||
]);
|
||
}
|
||
\DB::commit();
|
||
return $this->success('ok', $activity);
|
||
} catch (\Exception $e) {
|
||
\DB::rollBack();
|
||
\Log::error($e->getMessage().' line:'.$e->getLine());
|
||
return $this->failure('活动创建失败');
|
||
}
|
||
|
||
}
|
||
|
||
//活动下架重新上架
|
||
public function refreshActivity(Request $request,$activity_id){
|
||
$activity = Activity::find($activity_id);
|
||
if(!$activity) return $this->failure('活动不存在');
|
||
$is_hidden = $request->input('is_hidden',1);
|
||
$user = auth()->user();
|
||
//上架活动需要审核 发送微信模板消息给:13377553550
|
||
if (!strstr($activity->theme,'测试')){
|
||
$user_id = auth()->id();
|
||
$user = User::find($user_id);
|
||
\CommonUtilsService::sendActivityNoticeToUserV2($activity,$user);
|
||
}
|
||
|
||
$activity->is_hidden = $is_hidden;
|
||
$activity->is_deadline = 0;
|
||
$activity->save();
|
||
return $this->success('ok',$activity);
|
||
}
|
||
|
||
/**
|
||
* 活动分类列表
|
||
*/
|
||
public function activityClasses(Request $request, ActivityClass $activity_class)
|
||
{
|
||
$activity_classes = $activity_class->orderBy('id', 'desc');
|
||
$keyword = request()->input('keyword');
|
||
if($keyword){
|
||
$activity_classes = $activity_classes->where('title', 'like', '%'.$keyword.'%');
|
||
}
|
||
if ($request->input('nopage', 0)) {
|
||
$activity_classes = $activity_classes->get();
|
||
}else{
|
||
$activity_classes = $activity_classes->paginate();
|
||
}
|
||
return $this->success('ok', $activity_classes);
|
||
}
|
||
|
||
/**
|
||
* 添加活动分类
|
||
*/
|
||
public function storeActivityClass(Request $request, ActivityClass $activity_class)
|
||
{
|
||
$title = $request->input('title');
|
||
if (empty($title)) {
|
||
return $this->failure('请输入标题');
|
||
}
|
||
$result = $this->checkActivityClass($title);
|
||
if ($result) {
|
||
return $this->failure('分类已存在!');
|
||
}
|
||
$class = $activity_class->create([
|
||
'title'=>$title
|
||
]);
|
||
return $this->success('ok', $class);
|
||
}
|
||
|
||
/**
|
||
* 修改活动分类
|
||
*/
|
||
public function updateActivityClass(Request $request, ActivityClass $activity_class)
|
||
{
|
||
$title = $request->input('title');
|
||
if (empty($title)) {
|
||
return $this->failure('请输入标题');
|
||
}
|
||
$result = $this->checkActivityClass($title);
|
||
if ($result) {
|
||
return $this->failure('分类已存在!');
|
||
}
|
||
$class = $activity_class->update([
|
||
'title'=>$title
|
||
]);
|
||
return $this->success('ok', $class);
|
||
}
|
||
|
||
public function checkActivityClass($title)
|
||
{
|
||
$count = ActivityClass::where('title', $title)->count();
|
||
return $count?1:0;
|
||
}
|
||
|
||
/**
|
||
* 活动分类详情
|
||
*/
|
||
public function activityClass(Request $request, ActivityClass $activity_class)
|
||
{
|
||
return $this->success('ok', $activity_class);
|
||
}
|
||
|
||
/**
|
||
* 删除修改活动
|
||
*/
|
||
public function deleteActivityClass(Request $request, ActivityClass $activity_class)
|
||
{
|
||
$class = $activity_class->delete();
|
||
return $this->success('ok', $class);
|
||
}
|
||
|
||
/**
|
||
* #活动现场
|
||
* 活动内相互关注人列表
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activityAttentions(Request $request, $activity_id)
|
||
{
|
||
$user_ids = ActivityMember::whereHas('user', function($sql){
|
||
$sql->where('type', 'single');
|
||
})->where('activity_id', $activity_id)->distinct('user_id')->pluck('user_id');
|
||
$users = Followable::whereIn('user_id', $user_ids)->whereIn('followable_id', $user_ids)->where('followable_type', 'follow')->select(DB::raw('count(*) as follower_count, followable_id'))->groupBy('followable_id')->orderBy('follower_count')->paginate();
|
||
foreach ($users as $u) {
|
||
$user = User::where('id', $u->followable_id)->select('id', 'name', 'circle_avatar', 'sex', 'industry_sub')->first();
|
||
if (!empty($user)) {
|
||
$u->name = $user->name;
|
||
$u->circle_avatar = $user->circle_avatar;
|
||
$u->sex = $user->sex;
|
||
$u->industry_sub = $user->industry_sub;
|
||
}else{
|
||
$u->name = '未知';
|
||
$u->circle_avatar = '未知';
|
||
$u->sex = '未知';
|
||
$u->industry_sub = '未知';
|
||
}
|
||
$file = ProfileCourtship::where('user_id', $u->followable_id)->select('user_id', 'birthday', 'stature', 'city')->first();
|
||
if (empty($file)) {
|
||
$u->industry_sub = '未知';
|
||
$u->age = '未知';
|
||
$u->stature = '未知';
|
||
$u->city = '未知';
|
||
}else{
|
||
$u->industry_sub = $industry_sub?$industry_sub:'未知';
|
||
$u->age = $file->birthday?$this->getAge($file->birthday):'未知';
|
||
$u->stature = $file->stature?$file->stature:'未知';
|
||
$u->city = $file->city?$file->city:'未知';
|
||
}
|
||
}
|
||
return $this->success('ok', $users);
|
||
}
|
||
|
||
/**
|
||
* #活动现场
|
||
* 受欢迎
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activityWelcome(Request $request, $activity_id)
|
||
{
|
||
$activity = Activity::findOrFail($activity_id);
|
||
$welcome_users = DB::table('activity_votes')->where('activity_id', $activity_id)->get();
|
||
|
||
$newArr = [];
|
||
foreach ($welcome_users as $welcome_user){
|
||
$newArr[$welcome_user->vote_user_id][] = $welcome_user->user_id;
|
||
}
|
||
$filter = [];
|
||
$glArr = [];
|
||
foreach ($newArr as $k => $v){
|
||
$user_ids = DB::table('activity_votes')->whereIn('vote_user_id', array_diff($v, $filter))->where('user_id', $k)->pluck('vote_user_id');
|
||
array_push($filter, $k);
|
||
foreach ($user_ids as $user_id){
|
||
$user = User::where('id', $k)->select('id', 'name', 'circle_avatar')->first();
|
||
$other_user = User::where('id', $user_id)->select('id', 'name', 'circle_avatar')->first();
|
||
$glArr[] = [
|
||
'user' => $user,
|
||
'other_user' => $other_user
|
||
];
|
||
}
|
||
}
|
||
//男生受欢迎
|
||
$male_user_ids = ActivityMember::where('activity_id', $activity_id)->where('sex', 1)->pluck('user_id');
|
||
$welcome_male_users = DB::table('activity_votes')->whereIn('vote_user_id', $male_user_ids)->select(DB::raw('count(*) as vote_count, vote_user_id'))->groupBy('vote_user_id')->orderBy('vote_count', 'desc')->limit(3)->get();
|
||
foreach ($welcome_male_users as $welcome_male_user) {
|
||
$user = User::where('id', $welcome_male_user->vote_user_id)->select('id', 'name', 'circle_avatar', 'sex', 'industry_sub')->first();
|
||
if (!empty($user)) {
|
||
$welcome_male_user->name = $user->name;
|
||
$welcome_male_user->circle_avatar = $user->circle_avatar;
|
||
$welcome_male_user->sex = ActivityMember::where('user_id', $user->id)->where('activity_id', $activity_id)->value('sex');
|
||
$welcome_male_user->industry_sub = $user->industry_sub;
|
||
}else{
|
||
$welcome_male_user->name = '未知';
|
||
$welcome_male_user->circle_avatar = '未知';
|
||
$welcome_male_user->sex = '未知';
|
||
$welcome_male_user->industry_sub = '未知';
|
||
}
|
||
$file = ProfileCourtship::where('user_id', $welcome_male_user->vote_user_id)->select('user_id', 'birthday', 'stature', 'city')->first();
|
||
if (empty($file)) {
|
||
$welcome_male_user->industry_sub = '未知';
|
||
$welcome_male_user->age = '未知';
|
||
$welcome_male_user->stature = '未知';
|
||
$welcome_male_user->city = '未知';
|
||
}else{
|
||
$welcome_male_user->industry_sub = $user->industry_sub?$user->industry_sub:'未知';
|
||
$welcome_male_user->age = $file->birthday?$this->getAge($file->birthday):'未知';
|
||
$welcome_male_user->stature = $file->stature?$file->stature:'未知';
|
||
$welcome_male_user->city = $file->city?$file->city:'未知';
|
||
}
|
||
|
||
}
|
||
$female_user_ids = ActivityMember::where('activity_id', $activity_id)->where('sex', 2)->pluck('user_id');
|
||
$welcome_female_users = DB::table('activity_votes')->whereIn('vote_user_id', $female_user_ids)->select(DB::raw('count(*) as vote_count, vote_user_id'))->groupBy('vote_user_id')->orderBy('vote_count', 'desc')->limit(3)->get();
|
||
foreach ($welcome_female_users as $welcome_female_user) {
|
||
$user = User::where('id', $welcome_female_user->vote_user_id)->select('id', 'name', 'circle_avatar', 'sex', 'industry_sub')->first();
|
||
if (!empty($user)) {
|
||
$welcome_female_user->name = $user->name;
|
||
$welcome_female_user->circle_avatar = $user->circle_avatar;
|
||
$welcome_female_user->sex = ActivityMember::where('user_id', $user->id)->where('activity_id', $activity_id)->value('sex');
|
||
$welcome_female_user->industry_sub = $user->industry_sub;
|
||
}else{
|
||
$welcome_female_user->name = '未知';
|
||
$welcome_female_user->circle_avatar = '未知';
|
||
$welcome_female_user->sex = '未知';
|
||
$welcome_female_user->industry_sub = '未知';
|
||
}
|
||
$file = ProfileCourtship::where('user_id', $welcome_female_user->vote_user_id)->select('user_id', 'birthday', 'stature', 'city')->first();
|
||
if (empty($file)) {
|
||
$welcome_female_user->industry_sub = '未知';
|
||
$welcome_female_user->age = '未知';
|
||
$welcome_female_user->stature = '未知';
|
||
$welcome_female_user->city = '未知';
|
||
}else{
|
||
$welcome_female_user->industry_sub = $user->industry_sub?$user->industry_sub:'未知';
|
||
$welcome_female_user->age = $file->birthday?$this->getAge($file->birthday):'未知';
|
||
$welcome_female_user->stature = $file->stature?$file->stature:'未知';
|
||
$welcome_female_user->city = $file->city?$file->city:'未知';
|
||
}
|
||
|
||
}
|
||
$matches = ActivityMatch::whereNotNull('other_user_order')->orderBy('rank', 'asc')->get();
|
||
foreach ($matches as $matche) {
|
||
$user = User::where('id', $matche->user_id)->select('id', 'name', 'circle_avatar')->first();
|
||
$matche->user = $user;
|
||
$other_user = User::where('id', $matche->other_user_id)->select('id', 'name', 'circle_avatar')->first();
|
||
$matche->other_user = $other_user;
|
||
}
|
||
$qrcode = Activity::where('id', $activity_id)->value('vote_qrcode');
|
||
return $this->success('ok', compact('welcome_male_users', 'welcome_female_users', 'qrcode', 'matches', 'glArr'));
|
||
}
|
||
|
||
/**
|
||
* 活动签到
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activitySignin(Request $request, User $user, $activity_id)
|
||
{
|
||
$activity = Activity::findOrFail($activity_id);
|
||
$sign_in = $request->input('sign_in',0);
|
||
$member = ActivityMember::with('user:id,nickname,sex,name')->where('activity_id', $activity_id)->where('is_joined', 1)->orderBy('updated_at', 'desc')->whereHas('user');
|
||
|
||
if($sign_in == 1){
|
||
$member = $member->where('sign_in',1);
|
||
}else{
|
||
$member = $member->where(function($sql) use($sign_in){
|
||
$sql->where('sign_in','<>',1)->orWhereNull('sign_in');
|
||
});
|
||
}
|
||
$member = $member->paginate();
|
||
foreach ($member as $value){
|
||
$value->avatar = $user->userAvatar($value->user_id);
|
||
}
|
||
$qrcode = $activity->sign_in_qrcode;
|
||
return $this->success('ok', compact('qrcode', 'member'));
|
||
}
|
||
|
||
/**
|
||
* 普通投票
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activityVote(Request $request, User $user, $activity_id)
|
||
{
|
||
$activity = Activity::findOrFail($activity_id);
|
||
$user_ids = ActivityMember::where('activity_id', $activity_id)->pluck('user_id');
|
||
$ticket_users = DB::table('activity_votes')->where('activity_id', $activity_id)->whereIn('vote_user_id', $user_ids)->select(DB::raw('count(*) as vote_count, vote_user_id, activity_id'))->groupBy('vote_user_id')->orderBy('vote_count', 'desc')->limit(15)->get();
|
||
foreach ($ticket_users as $ticket_user) {
|
||
$userInfo = User::where('id', $ticket_user->vote_user_id)->select('id', 'name', 'sex','nickname', 'industry_sub')->first();
|
||
if (!empty($userInfo)) {
|
||
$member = ActivityMember::where('user_id', $userInfo->id)->where('activity_id', $activity_id)->select('sex', 'mobile')->first();
|
||
$ticket_user->name = $userInfo->name ? $userInfo->name : $userInfo->nickname;
|
||
|
||
$exist_user = User::where('id',$userInfo->id)->first();
|
||
if (!empty($exist_user)) {
|
||
$ticket_user->circle_avatar = $user->userAvatar($userInfo->id);
|
||
}
|
||
|
||
$ticket_user->sex = $userInfo->sex;
|
||
$ticket_user->mobile = $member->mobile;
|
||
$ticket_user->industry_sub = $userInfo->industry_sub;
|
||
}else{
|
||
$ticket_user->name = '未知';
|
||
$ticket_user->circle_avatar = '未知';
|
||
$ticket_user->sex = '未知';
|
||
$ticket_user->industry_sub = '未知';
|
||
}
|
||
$file = ProfileCourtship::where('user_id', $ticket_user->vote_user_id)->select('user_id', 'birthday', 'stature', 'city')->first();
|
||
if (empty($file)) {
|
||
$ticket_user->industry_sub = '未知';
|
||
$ticket_user->age = '未知';
|
||
$ticket_user->stature = '未知';
|
||
$ticket_user->city = '未知';
|
||
}else{
|
||
// $ticket_user->industry_sub = $userInfo->industry_sub?$userInfo->industry_sub:'未知';
|
||
$ticket_user->age = $file->birthday?$this->getAge($file->birthday):'未知';
|
||
$ticket_user->stature = $file->stature?$file->stature:'未知';
|
||
$ticket_user->city = $file->city?$file->city:'未知';
|
||
}
|
||
}
|
||
|
||
|
||
$time_users = DB::table('activity_votes')->where('activity_id', $activity_id)->select('id','user_id', 'vote_user_id', 'created_at')->orderBy('id', 'desc')->paginate();
|
||
foreach ($time_users as $time_user) {
|
||
$vote_user = ActivityMember::withTrashed()->with('user:id,nickname,sex,mobile,name')->whereHas('user')->where('user_id', $time_user->user_id)->where('activity_id', $activity_id)->select('user_id', 'name', 'mobile', 'sex')->first(); //投票用户
|
||
if (!empty($vote_user)) {
|
||
$vote_user->avatar = $user->userAvatar($vote_user->user_id);
|
||
}
|
||
$time_user->vote_user = $vote_user;
|
||
|
||
$other_user = ActivityMember::withTrashed()->with('user:id,nickname,sex,mobile,name')->whereHas('user')->where('user_id', $time_user->vote_user_id)->where('activity_id', $activity_id)->select('user_id', 'name', 'mobile', 'sex')->first();//被投票用户
|
||
if(!empty($other_user)){
|
||
$other_user->avatar = $user->userAvatar($other_user->user_id);
|
||
}
|
||
|
||
$time_user->be_vote_user = $other_user;
|
||
}
|
||
//普通被投票用户
|
||
$common_vote_user_ids = ActivityVote::where('activity_id',$activity_id)->pluck('vote_user_id')->toArray();//普通被投票用户
|
||
$common_vote_user_ids = array_unique($common_vote_user_ids);//去重 普通被投票用户
|
||
$commons = [];
|
||
if(!empty($common_vote_user_ids)){
|
||
foreach ($common_vote_user_ids as $common_vote_user_id) {
|
||
$user_idss = ActivityVote::where('activity_id',$activity_id)->where('vote_user_id',$common_vote_user_id)->pluck('user_id')->toArray();
|
||
$vote_user_ids = ActivityVote::where('activity_id',$activity_id)->where('user_id',$common_vote_user_id)->pluck('vote_user_id')->toArray();
|
||
$final_ids = array_intersect($user_idss,$vote_user_ids); //拿交集 即互投
|
||
if(!$final_ids) continue;
|
||
$final_user = User::with('profileCourtship:user_id,city')->whereIn('id',$final_ids)->select('id','nickname','circle_avatar','app_avatar','sex','mobile','name')->get();
|
||
$count = count($final_ids);
|
||
$user_info = User::with('profileCourtship:user_id,city')->where('id', $common_vote_user_id)->select('id','nickname','circle_avatar','app_avatar','sex','mobile','name')->first();
|
||
if (!empty($user_info)) {
|
||
$user_info->circle_avatar = $user->userAvatar($user_info->id);
|
||
}
|
||
$commons[] = array('voted_user'=>$user_info,'count'=>$count,'user'=>$final_user);
|
||
}
|
||
}
|
||
//未参与普通投票用户
|
||
$user_ids = $user_ids->toArray();//参与活动成员id
|
||
$vote_users_ids = ActivityVote::where('activity_id',$activity_id)->pluck('user_id')->toArray();//参与投票用户id
|
||
$no_vote_user_ids = array_diff($user_ids,$vote_users_ids);//未参与投票用户id
|
||
$no_vote_user = User::whereIn('id',$no_vote_user_ids)->select('id','sex','name','nickname','mobile','app_avatar','circle_avatar')->paginate();
|
||
|
||
$qrcode = $activity->vote_qrcode;
|
||
return $this->success('ok', compact('qrcode', 'ticket_users', 'time_users','commons','no_vote_user'));
|
||
}
|
||
|
||
/**
|
||
* 心仪投票
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activitySetvote(Request $request, User $user, $activity_id)
|
||
{
|
||
$activity = Activity::findOrFail($activity_id);
|
||
$time_users = DB::table('activity_sex_votes')->where('activity_id', $activity_id)->select('user_id', 'vote_user_id', 'created_at')->orderBy('id', 'desc')->paginate(16);
|
||
|
||
foreach ($time_users as $time_user) {
|
||
$user_info = ActivityMember::with('user:id,nickname,mobile,sex,name')->whereHas('user')->where('user_id', $time_user->user_id)->where('activity_id', $activity_id)->select('user_id', 'name', 'mobile', 'sex')->first();
|
||
if (!empty($user_info)) {
|
||
$user_info->avatar = $user->userAvatar($user_info->user_id);
|
||
}
|
||
$time_user->vote_user = $user_info;
|
||
|
||
$other_user = ActivityMember::with('user:id,nickname,mobile,sex,name')->whereHas('user')->where('user_id', $time_user->vote_user_id)->where('activity_id', $activity_id)->select('user_id', 'name', 'mobile', 'sex')->first();
|
||
if (!empty($other_user)) {
|
||
$other_user->avatar = $user->userAvatar($other_user->user_id);
|
||
}
|
||
|
||
$time_user->be_vote_user = $other_user;
|
||
}
|
||
|
||
// $matches = ActivitySexMatch::whereNotNull('other_user_order')->where('activity_id', $activity_id)->orderBy('updated_at', 'desc')->get();
|
||
// foreach ($matches as $matche) {
|
||
// $user_info = User::with('profileCourtship:user_id,city')->where('id', $matche->user_id)->select('id', 'name', 'circle_avatar','mobile','sex')->first();
|
||
// if (!empty($user_info)) {
|
||
// $user_info->circle_avatar = $user->userAvatar($user_info->id);
|
||
// }
|
||
// $matche->user = $user_info;
|
||
|
||
// $other_user = User::with('profileCourtship:user_id,city')->where('id', $matche->other_user_id)->select('id', 'name', 'circle_avatar','mobile','sex')->first();
|
||
// if (!empty($other_user)) {
|
||
// $other_user->circle_avatar = $user->userAvatar($other_user->id);
|
||
// }
|
||
// $matche->other_user = $other_user;
|
||
// }
|
||
$qrcode = $activity->vote_set_qrcode;
|
||
$match_vote_user_ids = ActivitySexVote::where('activity_id',$activity_id)->pluck('vote_user_id')->toArray();//心仪被投票用户
|
||
$match_vote_user_ids = array_unique($match_vote_user_ids);//去重 心仪被投票用户
|
||
$matches = [];
|
||
if(!empty($match_vote_user_ids)){
|
||
foreach ($match_vote_user_ids as $match_vote_user_id) {
|
||
$user_ids = ActivitySexVote::where('activity_id',$activity_id)->where('vote_user_id',$match_vote_user_id)->pluck('user_id')->toArray();
|
||
$vote_user_ids = ActivitySexVote::where('activity_id',$activity_id)->where('user_id',$match_vote_user_id)->pluck('vote_user_id')->toArray();
|
||
$final_ids = array_intersect($user_ids,$vote_user_ids); //拿交集 即互投
|
||
if(!$final_ids) continue;
|
||
$final_user = User::with('profileCourtship:user_id,city')->whereIn('id',$final_ids)->select('id','nickname','circle_avatar','app_avatar','sex','mobile','name')->get();
|
||
$count = count($final_ids);
|
||
$user_info = User::with('profileCourtship:user_id,city')->where('id', $match_vote_user_id)->select('id','nickname','circle_avatar','app_avatar','sex','mobile','name')->first();
|
||
if (!empty($user_info)) {
|
||
$user_info->circle_avatar = $user->userAvatar($user_info->id);
|
||
}
|
||
$matches[] = array('voted_user'=>$user_info,'count'=>$count,'user'=>$final_user);
|
||
}
|
||
}
|
||
|
||
$user_ids = ActivityMember::where('activity_id',$activity_id)->pluck('user_id')->toArray(); //参与活动成员id
|
||
$user_ids = array_unique($user_ids);
|
||
$sexvote_user_ids = ActivitySexVote::where('activity_id',$activity_id)->pluck('user_id')->toArray();//参与心仪投票
|
||
$sexvote_user_ids = array_unique($sexvote_user_ids);
|
||
$no_sexvote_user_ids = array_diff($user_ids,$sexvote_user_ids);//未参与id
|
||
$no_sexvote_user = User::whereIn('id',$no_sexvote_user_ids)->select('id','sex','name','nickname','mobile','app_avatar','circle_avatar')->paginate();
|
||
|
||
|
||
return $this->success('ok', compact('qrcode', 'matches', 'time_users','no_sexvote_user'));
|
||
}
|
||
|
||
//测试心仪互投
|
||
public function testVoteEachother(Request $request){
|
||
$activity_id = $request->activity_id;
|
||
$match_vote_user_id = $request->match_vote_user_id;
|
||
$user_ids = ActivitySexVote::where('activity_id',$activity_id)->where('vote_user_id',$match_vote_user_id)->pluck('user_id')->toArray();
|
||
// dd($user_ids);
|
||
$vote_user_ids = ActivitySexVote::where('activity_id',$activity_id)->where('user_id',$match_vote_user_id)->pluck('vote_user_id')->toArray();
|
||
// dd($vote_user_ids);
|
||
$final_ids = array_intersect($user_ids,$vote_user_ids); //拿交集 即互投
|
||
// dd($final_ids);
|
||
$final_user = User::with('profileCourtship:user_id,city')->whereIn('id',$final_ids)->select('id','nickname','circle_avatar','app_avatar','sex','mobile')->get();
|
||
$count = count($final_ids);
|
||
$user_info = User::with('profileCourtship:user_id,city')->where('id', $match_vote_user_id)->select('id', 'name', 'circle_avatar','mobile','sex')->first();
|
||
// if (!empty($user_info)) {
|
||
// $user_info->circle_avatar = $user->userAvatar($user_info->id);
|
||
// }
|
||
$matches[] = array('voted_user'=>$user_info,'count'=>$count,'user'=>$final_user);
|
||
return $this->success('ok',$matches);
|
||
}
|
||
|
||
/**
|
||
* 活动现场
|
||
* 匹配
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activityMatch(Request $request, $activity_id)
|
||
{
|
||
|
||
$matches = ActivityMatch::whereNotNull('other_user_order')->orderBy('rank', 'asc')->get();
|
||
foreach ($matches as $matche) {
|
||
$user = User::where('id', $matche->user_id)->select('id', 'name', 'circle_avatar')->first();
|
||
$matche->user = $user;
|
||
$other_user = User::where('id', $matche->other_user_id)->select('id', 'name', 'circle_avatar')->first();
|
||
$matche->other_user = $other_user;
|
||
}
|
||
return $this->success('ok', $matches);
|
||
|
||
}
|
||
|
||
/**
|
||
* 签到成员
|
||
*/
|
||
public function activitySignInMembers(Request $request, $activity_id)
|
||
{
|
||
$male_count = ActivityMember::where("activity_id", $activity_id)->where('sex', 1)->where('sign_in', 1)->count();
|
||
$female_count = ActivityMember::where("activity_id", $activity_id)->where('sex', 2)->where('sign_in', 1)->count();
|
||
$sign_in_qrcode = 'https://local-pictures.oss-cn-shenzhen.aliyuncs.com/201812/25/1545732081packet_qrcode.png';
|
||
return $this->success('ok', compact('male_count', 'female_count', 'sign_in_qrcode'));
|
||
}
|
||
|
||
/**
|
||
* 活动订单
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activityOrders(Request $request, $activity_id)
|
||
{
|
||
$orders = Order::with('user')->where('type', 'activity')->where('type_id', $activity_id)->orderBy('id', 'desc')->paginate();
|
||
return $this->success('ok', $orders);
|
||
}
|
||
|
||
/**
|
||
* 置顶活动
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function topActivity(Request $request, $activity_id)
|
||
{
|
||
$this->activityCon->topActivity($activity_id);
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 取消置顶
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function cancelActivityTop(Request $request, $activity_id)
|
||
{
|
||
$this->activityCon->cancelActivityTop($activity_id);
|
||
return $this->success('ok');
|
||
}
|
||
|
||
/**
|
||
* 取消活动
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function cancelActivity(Request $request, $activity_id)
|
||
{
|
||
$this->activityCon->cancelActivity($request, $activity_id);
|
||
}
|
||
|
||
/**
|
||
* 复制活动
|
||
* @param Request $request [description]
|
||
* @param [type] $activity_id [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function copyActivity(Request $request, $activity_id)
|
||
{
|
||
$activity = $this->activityCon->copyActivityV2($request, $activity_id);
|
||
return $this->success('ok', $activity);
|
||
}
|
||
|
||
/**
|
||
* 活动成员
|
||
* @param Request $request [description]
|
||
* @param Activity $activity [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function activityMembers(Request $request, Activity $activity)
|
||
{
|
||
$keyword = $request->keyword;
|
||
$user_ids = Order::where('type','activity')->where('type_id',$activity->id)->where('pay_status','PAID')->pluck('user_id')->toArray();
|
||
// $user_ids = array_unique($user_ids);
|
||
// dd($user_ids);
|
||
$nopage = $request->input('nopage', 0);
|
||
if ($nopage) {
|
||
$members = $activity->activityMember()->get();
|
||
}
|
||
|
||
$members = $activity->activityMember()->with('user:id,name,nickname,sex,mobile,type,circle_avatar,app_avatar,created_at')->whereHas('user')->orderBy('id', 'desc')->select('id','user_id','activity_id','linkmen','name','mobile','avatar','sex',
|
||
'is_joined','sign_in','from_openid','created_at');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$members = $members->whereHas('user',function($sql) use($keyword){
|
||
$sql->where('id',$keyword)->orWhere('name','like','%'.$keyword.'%')->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%');
|
||
});
|
||
}
|
||
$members = $members->paginate(15);
|
||
|
||
foreach($user_ids as $user_id){
|
||
foreach ($members as $member) {
|
||
if(!empty($member->user->id)){
|
||
if ($member->user->id == $user_id) {
|
||
$order = Order::where('type','activity')->where('type_id',$activity->id)->where('user_id',$user_id)->where('pay_status','PAID')->first();
|
||
$goods = $order->goods;
|
||
// dd($goods);
|
||
$start = strpos($goods, '【');
|
||
$end = stripos($goods, '】');
|
||
// dd($start);
|
||
$str = substr($goods,$start,$end);
|
||
$member->user->remarkV2 = $str;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
foreach ($members as $member) {
|
||
$result = $member->canRefund();
|
||
$member->can_refund = $result['canRefund'];
|
||
$member->is_refund = $result['isRefund'];
|
||
$member->sex = !empty($member->user) ? $member->user->sex : 0;
|
||
$member->birthday = '无';
|
||
$member->city = '未填写';
|
||
if(!empty($member->user)) {
|
||
switch ($member->user->type) {
|
||
case 'single':
|
||
$member->birthday = !empty($member->user->profileCourtship) ? $member->user->profileCourtship->birthday : '无';
|
||
$member->city = !empty($member->user->profileCourtship) ? ($member->user->profileCourtship->province??'未填写') : '未填写';
|
||
unset($member->user->profileCourtship);
|
||
break;
|
||
case 'marriage':
|
||
$member->birthday = !empty($member->user->profileMarriage) ? $member->user->profileMarriage->birthday : '无';
|
||
$member->birthday = !empty($member->user->profileCourtship) ? ($member->user->profileCourtship->province??'未填写') : '未填写';
|
||
unset($member->user->profileMarriage);
|
||
break;
|
||
default:
|
||
$member->birthday = !empty($member->user->profileCourtship) ? $member->user->profileCourtship->birthday : '无';
|
||
$member->birthday = !empty($member->user->profileCourtship) ? ($member->user->profileCourtship->province??'未填写') : '未填写';
|
||
unset($member->user->profileCourtship);
|
||
break;
|
||
}
|
||
}
|
||
|
||
$order = $member->activityOrder();
|
||
$member->remark = $order?$order->remark:null;
|
||
$member->from_user = !empty($order) ? $order->from_user : '';
|
||
$member->price = !empty($order) ? $order->price : '0.00';
|
||
//分类
|
||
$activity->class;
|
||
if ($member->linkmen) {
|
||
if (!is_array($member->linkmen)) {
|
||
$linkmen = json_decode($member->linkmen,true);
|
||
$member->linkmen = $linkmen;
|
||
}
|
||
}
|
||
if($result['isRefund']){
|
||
$refund_order = $member->refundOrder();
|
||
$member->refund_reason = !empty($refund_order) ? $refund_order->remark : '无';
|
||
}
|
||
|
||
}
|
||
|
||
return $this->success('ok', $members);
|
||
}
|
||
|
||
/**
|
||
* 发送系统消息之活动成员
|
||
* @param Request $request [description]
|
||
* @param Activity $activity [description]
|
||
*/
|
||
public function getMerchantActivityMembers(Request $request, $activity_id){
|
||
$merchant_user_ids = TouristOrder::where('type','community')->where('type_id',$activity_id)
|
||
->pluck('account_id')->toArray();
|
||
$user_ids = MerchantUser::whereIn('id',$merchant_user_ids)->whereNotNull('user_id')
|
||
->pluck('user_id')->toArray();
|
||
$users = User::whereIn('id',$user_ids)->select('id','nickname','mobile')->get();
|
||
return $this->success('ok',$users);
|
||
}
|
||
|
||
/**
|
||
* 发送消息之活动列表
|
||
* @return JsonResponse|string
|
||
*/
|
||
public function getMerchantActivityList(Request $request){
|
||
$keyword = $request->keyword;
|
||
$activity = CommunityActivity::where('merchant_id',491)
|
||
->when($keyword,function ($query) use($keyword){
|
||
$query->where('title','like','%'.$keyword.'%');
|
||
})
|
||
->orderBy('id','desc')->select('id','title')->limit(20)->get();
|
||
return $this->success('ok',$activity);
|
||
}
|
||
|
||
public function activityMemberRefund(Request $request, ActivityMember $member)
|
||
{
|
||
//判断是否支付
|
||
$order = Order::where('type_id', $member->activity_id)->where('user_id', $member->user_id)
|
||
->where('type', 'activity')->where('pay_status', 'PAID')
|
||
->first();
|
||
// return $this->failure('功能完善中');
|
||
if (empty($order)) {
|
||
return $this->failure('没有支付订单');
|
||
}
|
||
//退款金额
|
||
$refund_cash = $request->refund_cash ? $request->refund_cash : $order->price;
|
||
if (!is_numeric($refund_cash) || $refund_cash > $order->price) {
|
||
return $this->failure('请输入正确的退款金额 退款金额不能超过报名金额');
|
||
}
|
||
|
||
$refund_order = RefundOrder::where([
|
||
'user_id'=>$member->user_id,
|
||
'type'=>'activity',
|
||
'trade_no'=>$order->trade_no,
|
||
])->first();
|
||
if ($refund_order) {
|
||
return $this->failure('退款已存在');
|
||
}
|
||
|
||
// $members = ActivityMember::where('id',$member->id)->first();
|
||
// if($members->sign_in == 1) return $this->failure('已签到,不能退款');
|
||
|
||
$refund_trade_no = $this->getRefundTradeNo();
|
||
$total_fee = $order->price;
|
||
$refund_fee = $refund_cash;
|
||
$array = ['refund_desc' => '活动退款'];
|
||
$result = \WechatService::orderRefund($order->trade_no, $refund_trade_no, $total_fee, $refund_fee, $array);
|
||
if (is_array($result) && $result['status'] === true) {
|
||
RefundOrder::create([
|
||
'user_id'=>$member->user_id,
|
||
'type'=>'activity',
|
||
'trade_no'=>$order->trade_no,
|
||
'refund_trade_no'=>$refund_trade_no,
|
||
'total_fee'=>$total_fee,
|
||
'refund_fee'=>$refund_fee,
|
||
'is_hook'=>0,
|
||
'remark'=>$request->remark,
|
||
'operator'=>auth()->id(),
|
||
]);
|
||
ActivityMember::where('id',$member->id)->delete();
|
||
return $this->success('退款成功');
|
||
}else{
|
||
return $this->failure('退款失败');
|
||
}
|
||
}
|
||
|
||
//活动已退款列表
|
||
public function activityrefundMemberList(Request $request,$activity_id){
|
||
$keyword = $request->keyword;
|
||
$trade_nos = Order::where('type','activity')->where('type_id',$activity_id)->where('pay_status','REFUND')->pluck('trade_no')->toArray();
|
||
$refunds = RefundOrder::with('user','operator')->whereIn('trade_no',$trade_nos)->where('is_hook',1)->orderBy('created_at','desc');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$refunds = $refunds->whereHas('user',function($sql) use($keyword){
|
||
$sql->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%');
|
||
});
|
||
}
|
||
$refunds = $refunds->paginate();
|
||
return $this->success('ok',$refunds);
|
||
}
|
||
|
||
/**
|
||
* 删除活动
|
||
* @param Request $request [description]
|
||
* @param Activity $activity [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function deleteActivity(Request $request, Activity $activity)
|
||
{
|
||
$activity->delete();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
//活动报名用户
|
||
public function memberExcel(Request $request, $activity_id)
|
||
{
|
||
$result = $this->activityMemberExport($activity_id);
|
||
return $result;
|
||
}
|
||
|
||
//删除报名成员
|
||
public function delActivityMember(Request $request, $activity_member_id){
|
||
$activity_id = ActivityMember::where('id', $activity_member_id)->value('activity_id');
|
||
$activity = Activity::find($activity_id);
|
||
if(!empty($activity) && $activity->fee != 0.00){
|
||
return $this->failure('付款过的用户不能删除');
|
||
}
|
||
ActivityMember::where('id',$activity_member_id )->delete();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
// //折线图展示活动报名人数 1默认最近七场已结束的活动 2时间筛选
|
||
//报名人数 注册人数 老用户 活动总营收
|
||
public function participantsCount(Request $request){
|
||
|
||
$start_time = $request->start_time; //开始和结束时间 区间
|
||
$end_time = $request->end_time;
|
||
$date = date('Y-m-d H:i:s');//当前时间
|
||
|
||
if ($start_time && $end_time){
|
||
$activity_ids = Activity::where('end_time','<',$date)->orderBy('end_time','desc')->whereBetween('created_at',[$start_time,$end_time])->orderBy('end_time','desc')->pluck('id')->toArray();
|
||
}else{
|
||
$activity_ids = Activity::where('end_time','<',$date)->orderBy('end_time','desc')->limit(7)->pluck('id')->toArray();
|
||
}
|
||
$key = json_encode($activity_ids);
|
||
if (Cache::has($key)) {
|
||
// dd(1);
|
||
$data = Cache::get($key);
|
||
return $this->success('ok',$data);
|
||
}
|
||
$activity_member_counts = []; //参与活动人数
|
||
$activity_theme_counts = []; //活动主题
|
||
$activity_regist_counts = [];//活动注册人数
|
||
$activity_profit_counts = [];//活动总营收
|
||
foreach ($activity_ids as $activity_id) {
|
||
$activity = Activity::find($activity_id);
|
||
$activity_member_counts [] = ActivityMember::where('activity_id',$activity_id)->where('is_joined',1)->count();
|
||
$activity_theme_counts [] = $activity->theme;
|
||
$activity_regist_counts [] = User::where('from_activity_id',$activity_id)->count();
|
||
$activity_profit_counts [] = Order::where('type','activity')->where('type_id',$activity_id)->where('pay_status','PAID')->sum('price');
|
||
}
|
||
|
||
$data = ['activity_member_counts'=>$activity_member_counts,'activity_theme_counts'=>$activity_theme_counts,
|
||
'activity_regist_counts'=>$activity_regist_counts,'activity_profit_counts'=>$activity_profit_counts
|
||
];
|
||
Cache::put($key,$data,86400);
|
||
// dd(2);
|
||
return $this->success('ok',compact('activity_member_counts','activity_theme_counts','activity_regist_counts','activity_profit_counts'));
|
||
|
||
}
|
||
|
||
//保存活动二维码
|
||
public function saveActivityQrcode(Request $request ,$activity_id){
|
||
$activity = Activity::find($activity_id);
|
||
|
||
if(empty($activity)) return $this->failure('活动id不存在');
|
||
$place = $request->place;
|
||
if (empty($place)) return $this->failure('请输入门店名');
|
||
if ($activity->can_repeat_sign == 1 && $place) {
|
||
$app = EasyWechat::miniProgram();
|
||
$data = [];
|
||
$data['is_hyaline'] = true;
|
||
$response = $app->app_code->get('/pages/party/detail?party_id='.$activity->id.'&place='.$place, $data);
|
||
$time = time();
|
||
$path = $time.'activity_qrocde.png';
|
||
$filename = $response->saveAs(storage_path('qrcode'), $path);
|
||
$qrcode_path = storage_path("/qrcode/".$time."activity_qrocde.png");
|
||
if(file_exists($qrcode_path)){
|
||
$qrcode = $this->uploadFile($qrcode_path);
|
||
if(empty($activity->qrcode)){ //首次创建 二维码为空
|
||
// dd(2);
|
||
$activity->qrcode = json_encode($qrcode);
|
||
$activity->save();
|
||
}else{
|
||
$old_qrcode = json_decode($activity->qrcode,true);
|
||
// dd($old_qrcode);
|
||
if(!is_array($old_qrcode)){
|
||
$old_qrcode = explode('****',$old_qrcode);
|
||
// dd(3);
|
||
}
|
||
// dd(5);
|
||
array_push($old_qrcode,$qrcode);
|
||
$activity->qrcode = json_encode($old_qrcode);
|
||
$activity->save();
|
||
}
|
||
|
||
try{
|
||
unlink($qrcode_path);
|
||
return $this->success('ok',$activity);
|
||
}catch(Exception $e) {
|
||
return $this->failure($e->getMessage());
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//生成签到二维码
|
||
public function saveSignInQrcode(Request $request ,$activity_id){
|
||
$activity = Activity::find($activity_id);
|
||
|
||
if(empty($activity)) return $this->failure('活动id不存在');
|
||
$place = $request->place;
|
||
if (empty($place)) return $this->failure('请输入门店名');
|
||
if ($activity->can_repeat_sign == 1 && $place) {
|
||
$app = \WechatService::app();
|
||
$data = [];
|
||
$data['is_hyaline'] = true;
|
||
$response = $app->app_code->get('pages/party/signSuccess?party_id='.$activity->id.'&place='.$place, $data);
|
||
$time = time().'rand'.mt_rand(1000, 9999);
|
||
$path = $time.'sign_in_qrcode.png';
|
||
$filename = $response->saveAs(storage_path('qrcode'), $path);
|
||
$qrcode_path = storage_path("qrcode/".$time."sign_in_qrcode.png");
|
||
if(file_exists($qrcode_path)){
|
||
$qrcode = $this->uploadFile($qrcode_path);
|
||
$new_qrcode = ['place'=>$place,'qrcode'=>$qrcode];
|
||
if(empty($activity->sign_in_qrcode)){ //首次创建 二维码为空
|
||
// dd(2);
|
||
$activity->sign_in_qrcode = json_encode($new_qrcode,JSON_UNESCAPED_UNICODE);
|
||
$activity->save();
|
||
return $this->success('ok');
|
||
}else{
|
||
$old_qrcode = json_decode($activity->sign_in_qrcode,true);//之前就有的
|
||
// dd($old_qrcode);
|
||
if(!is_array($old_qrcode)){
|
||
$old_qrcode = explode('****',$old_qrcode);
|
||
// dd(3);
|
||
}
|
||
// dd(5);
|
||
$final_qrcode = array_merge_recursive($old_qrcode,$new_qrcode);
|
||
$activity->sign_in_qrcode = json_encode($final_qrcode,JSON_UNESCAPED_UNICODE);
|
||
$activity->save();
|
||
return $this->success('ok');
|
||
}
|
||
try{
|
||
unlink($qrcode_path);
|
||
}catch(\Exception $e) {
|
||
return $this->failure($e->getMessage());
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
public function signInActivityInfo(Request $request ,$activity_id){
|
||
$activity = Activity::find($activity_id);
|
||
if ($activity->can_repeat_sign == 1 && !empty($activity->sign_in_qrcode)) {
|
||
$activity->sign_in_qrcode = json_decode($activity->sign_in_qrcode);
|
||
}
|
||
// dd($activity->sign_in_qrcode->place);
|
||
if (empty($activity)) return $this->failure('活动id不存在');
|
||
$desc = $request->desc;
|
||
$count = [];
|
||
if (is_array($activity->sign_in_qrcode->place)) {
|
||
|
||
foreach ($activity->sign_in_qrcode->place as $place) {
|
||
$new_count = ActivityMember::where('is_joined',1)->where('sign_in',1)->where('activity_id',$activity_id)->where('desc',$place)->count();
|
||
$count [] = ['place'=>$place,'count'=>$new_count];
|
||
}
|
||
}else{
|
||
|
||
$new_count = ActivityMember::where('is_joined',1)->where('sign_in',1)->where('activity_id',$activity_id)->where('desc',$activity->sign_in_qrcode->place)->count();
|
||
$count [] = ['place'=>$activity->sign_in_qrcode->place,'count'=>$new_count];
|
||
}
|
||
|
||
$keyword = $request->keyword;
|
||
$sign_in = $request->input('sign_in',0);
|
||
$members = ActivityMember::with('user:id,nickname,mobile,sex,app_avatar,circle_avatar')->where('is_joined',1)->where('sign_in',$sign_in)->where('activity_id',$activity_id)->where('desc',$desc);
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$members = $members->whereHas('user',function($sql) use($keyword){
|
||
$sql->where('id',$keyword)->orWhere('nickname','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%');
|
||
});
|
||
}
|
||
$members = $members->orderBy('created_at','desc')->paginate();
|
||
return $this->success('ok',compact('count','members'));
|
||
}
|
||
|
||
/**
|
||
*is_hidden
|
||
0:展示
|
||
1:隐藏
|
||
2:下架
|
||
3: 审核通过不显示
|
||
*/
|
||
//所有已结束的活动 归为已下架
|
||
public function changeActivityStatus(Request $request){
|
||
$now_time = date('Y-m-d H:i:s');
|
||
Activity::whereIn('is_hidden',[0,3])->where('end_time','<',$now_time)->update(['is_hidden'=>2]);
|
||
// foreach ($activities as $activity) {
|
||
// if ($activity->end_time < $now_time) {
|
||
// $activity->is_hidden = 2;
|
||
// $activity->save();
|
||
// }
|
||
// }
|
||
return $this->success('ok');
|
||
}
|
||
|
||
//删除二维码
|
||
public function deleteQrcode(Request $request){
|
||
$activity_id = $request->activity_id;
|
||
$place = $request->desc;
|
||
$activity = Activity::find($activity_id);
|
||
$activity->sign_in_qrcode = null;
|
||
$activity->save();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function testSendTemplateMsg(Request $request){
|
||
$now_date = date('Y-m-d H:i:s');
|
||
$now_time = time();
|
||
$activities = CommunityActivity::whereNotNull('end_time')->where('type','business')->where('class','one')->get();
|
||
$list = [];
|
||
foreach ($activities as $key => $activity) {
|
||
//未结束或结束不到一小时 不发
|
||
if($activity->end_time > $now_date || $now_time - strtotime($activity->end_time) < 3600) continue;
|
||
if($this->isSendNotice($activity->id)) continue;
|
||
//发送通知的活动id
|
||
$list[] = $activity->id;
|
||
}
|
||
// dd($list);
|
||
if(empty($list)) return ;
|
||
foreach ($list as $value) { //value 活动id
|
||
$com = CommunityActivity::where('id',$value)->first();
|
||
//已经评价过的不发
|
||
$orders = TouristOrder::where('type','community')->where('type_id',$value)->whereIn('pay_status',[1,4])->whereNull('Praise')->get();
|
||
foreach ($orders as $order) {
|
||
$data['touser'] = $order->openid;
|
||
$data['touser'] = 'oPC_2vnSECnYp5p--uaq3rca3Ry0';
|
||
$data['template_id'] = '9aPSHmzsULb-YnSkJ1Y4B-larsOKdURX6UlfatPZxgY';
|
||
$data['activity_id'] = $value;
|
||
$data['url'] = env('APP_URL').'/pu/#/mySignUp?merchant_id='.$com->merchant_id.'&actioveLabel=1';
|
||
$data['data'] = [
|
||
'first' => '您好,你参与的活动《'.$com->title.'》已经结束',
|
||
'keyword1' =>$com->title,
|
||
'keyword2' =>$com->end_time,
|
||
'remark' => '点击进入详情页可对我们的活动进行评价哦!',
|
||
'activity_id'=>$value
|
||
];
|
||
SendTemplateMsg::dispatch($data)->onQueue('template_message');
|
||
}
|
||
}
|
||
}
|
||
|
||
//判断该活动是否发送过通知
|
||
public function isSendNotice($activity_id){
|
||
$log = TemplateMsgLog::where('user_id',$activity_id)->where('template_id','9aPSHmzsULb-YnSkJ1Y4B-larsOKdURX6UlfatPZxgY')->first();
|
||
if($log) return 1;
|
||
return 0;
|
||
}
|
||
|
||
public function getParams($activity,$user){
|
||
$param['activity_id'] = $activity->id;
|
||
$param['openid'] = $user->wechat ? $user->wechat->openid : null;
|
||
$param['nickname'] = $user->nickname ? $user->nickname : $user->name;
|
||
$param['theme'] = $activity->theme;
|
||
$param['time'] = $activity->start_time;
|
||
$param['desc'] = '点击参与活动问卷调查,帮助我们做得更好。';
|
||
return $param;
|
||
}
|
||
|
||
//清除活动投票二维码
|
||
public function clearVoteQrcode(Request $request){
|
||
$activity_id = $request->activity_id;
|
||
$activity = Activity::find($activity_id);
|
||
$activity->vote_qrcode = null;
|
||
$activity->vote_set_qrcode = null;
|
||
$activity->save();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
|
||
// 家的味道
|
||
// 订单列表
|
||
public function familyOrders(Request $request){
|
||
$order_status = $request->order_status ? $request->order_status : 0 ;
|
||
$keyword = $request->keyword;
|
||
$orders = FamilyOrder::with('goods','viewer','user','fromUser')->where('order_status',$order_status)->where('pay_status',1)->orderBy('id','desc');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$orders = $orders->where(function($sql) use($keyword){
|
||
$sql->where('trade_no','like','%'.$keyword.'%')->orWhere('name','like','%'.$keyword.'%')->orWhere('mobile','like','%'.$keyword.'%')->orWhereHas('viewer',function($sq) use($keyword){
|
||
$sq->where('nickname','like','%'.$keyword.'%');
|
||
});
|
||
});
|
||
|
||
}
|
||
$orders = $orders->paginate();
|
||
foreach ($orders as $order) {
|
||
$order->remark = json_decode($order->remark,true);
|
||
}
|
||
return $this->success('ok',$orders);
|
||
}
|
||
|
||
//修改订单状态 增加跟进记录
|
||
public function updateFamilyOrder(Request $request ,$order_id){
|
||
//跟进人信息
|
||
$user_id = auth()->id();
|
||
$user = User::find($user_id);
|
||
$mobile = $user->mobile;
|
||
$nickname = $user->nickname ? $user->nickname : $user->name;
|
||
$avatar = $user->userAvatar($user_id);
|
||
|
||
$order = FamilyOrder::find($order_id);
|
||
if (!$order) return $this->failure('订单不存在,请重新确认');
|
||
$desc = $request->desc;
|
||
if (empty($desc)) return $this->failure('请输入详细的跟进信息');
|
||
$order_status = $request->order_status;
|
||
if ($order_status == 3) {
|
||
$record = array(
|
||
array('沟通方式'=>'','跟进内容'=>'','处理结果'=>'将订单标记为【问题订单】','跟进人'=>$nickname,'跟进人头像'=>$avatar,'跟进时间'=>date('Y-m-d H:i:s'))
|
||
);
|
||
}else{
|
||
if (empty($order->remark)){
|
||
$record = array(
|
||
array('沟通方式'=>$desc[0],'跟进内容'=>$desc[1],'处理结果'=>$desc[2],'跟进人'=>$nickname,'跟进人头像'=>$avatar,'跟进时间'=>date('Y-m-d H:i:s'))
|
||
);
|
||
}else{
|
||
$record = json_decode($order->remark,true);
|
||
$array = ['沟通方式'=>$desc[0],'跟进内容'=>$desc[1],'处理结果'=>$desc[2],'跟进人'=>$nickname,'跟进人头像'=>$avatar,'跟进时间'=>date('Y-m-d H:i:s')];
|
||
array_push($record, $array);
|
||
}
|
||
}
|
||
|
||
$order->order_status = $order_status;
|
||
$order->remark = json_encode($record,JSON_UNESCAPED_UNICODE);
|
||
$order->save();
|
||
return $this->success('ok',$order);
|
||
}
|
||
|
||
public function logisticsCompanies(Request $request){
|
||
$keyword = $request->keyword;
|
||
$companies = DB::table('logistics_companies')->orderBy('id','desc');
|
||
if ($keyword) {
|
||
$companies = $companies->where('company','like','%'.$keyword.'%');
|
||
}
|
||
$companies = $companies->get();
|
||
return $this->success('ok',$companies);
|
||
}
|
||
|
||
//清除测试订单数据
|
||
public function clearOrderData(Request $request){
|
||
FamilyOrder::where('id','>',0)->delete();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
public function addTradeNo(Request $request,$order_id){
|
||
$user_id = auth()->id();
|
||
$user = User::find($user_id);
|
||
$nickname = $user->nickname ? $user->nickname : $user->name;
|
||
$avatar = $user->userAvatar($user_id);
|
||
$order = FamilyOrder::find($order_id);
|
||
$trade_no = $request->trade_no;
|
||
if (!$trade_no) return $this->failure('请填写订单号');
|
||
$express = $request->express;
|
||
$com_code = $request->com_code;
|
||
if (!$trade_no) return $this->failure('请填写快递公司');
|
||
if(empty($order->remark)){
|
||
$record = array(
|
||
array('沟通方式'=>'','跟进内容'=>'填写订单号'.$trade_no.' 物流公司'.$express,'处理结果'=>'已发货','跟进人'=>$nickname,'跟进人头像'=>$avatar,'跟进时间'=>date('Y-m-d H:i:s'))
|
||
);
|
||
}else{
|
||
$record = json_decode($order->remark,true);
|
||
$array = ['沟通方式'=>'','跟进内容'=>'填写订单号'.$trade_no.' 物流公司'.$express,'处理结果'=>'已发货','跟进人'=>$nickname,'跟进人头像'=>$avatar,'跟进时间'=>date('Y-m-d H:i:s')];
|
||
array_push($record,$array);
|
||
}
|
||
|
||
$order->express_trade_no = $trade_no;
|
||
$order->express = $express;
|
||
$order->order_status = 1;
|
||
$order->remark = json_encode($record,JSON_UNESCAPED_UNICODE);
|
||
$order->com_code = $com_code;
|
||
$order->save();
|
||
return $this->success('ok');
|
||
}
|
||
|
||
//根据快递单号 查询快递公司
|
||
public function getLogisticsCompany(Request $request){
|
||
$trade_no = $request->trade_no;
|
||
$key = env('KUAIDI_QUERY_KEY','LhJXCbBF6832');
|
||
$data['num'] = $trade_no;
|
||
$data['key'] = $key;
|
||
$url = 'http://www.kuaidi100.com/autonumber/auto?num='.$trade_no.'&key='.$key;
|
||
$data = $this->postDataCurl($url,$data);
|
||
// if ($result['returnCode'] == 200) {
|
||
|
||
return $this->success('ok',$data);
|
||
// }else{
|
||
// \Log::info('getLogisticsCompany fail:'.json_encode($data));
|
||
// }
|
||
}
|
||
public function postDataCurl($url,$data){
|
||
$timeout = 5000;
|
||
$http_header = array(
|
||
'Content-Type:application/x-www-form-urlencoded;charset=utf-8'
|
||
);
|
||
$postdataArray = array();
|
||
if(!empty($data) && is_array($data)){
|
||
foreach ($data as $key=>$value){
|
||
array_push($postdataArray, $key.'='.urlencode($value));
|
||
// $postdata.= ($key.'='.urlencode($value).'&');
|
||
}
|
||
}
|
||
|
||
$postdata = join('&', $postdataArray);
|
||
|
||
$ch = curl_init();
|
||
curl_setopt ($ch, CURLOPT_URL, $url);
|
||
curl_setopt ($ch, CURLOPT_POST, 1);
|
||
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
|
||
curl_setopt ($ch, CURLOPT_HEADER, false );
|
||
curl_setopt ($ch, CURLOPT_HTTPHEADER,$http_header);
|
||
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER,false); //处理http证书问题
|
||
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
|
||
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
|
||
|
||
$result = curl_exec($ch);
|
||
if (false === $result) {
|
||
$result = curl_errno($ch);
|
||
}
|
||
curl_close($ch);
|
||
//\Log::info($result);
|
||
return $this->json_to_array($result) ;
|
||
}
|
||
/**
|
||
* 将json字符串转化成php数组
|
||
* @param $json_str
|
||
* @return $json_arr
|
||
*/
|
||
public function json_to_array($json_str){
|
||
if(is_array($json_str) || is_object($json_str)){
|
||
$json_str = $json_str;
|
||
}else if(is_null(json_decode($json_str))){
|
||
$json_str = $json_str;
|
||
}else{
|
||
$json_str = strval($json_str);
|
||
$json_str = json_decode($json_str,true);
|
||
}
|
||
$json_arr=array();
|
||
if (!empty($json_str) && is_array($json_str)){
|
||
foreach($json_str as $k=>$w){
|
||
if(is_object($w)){
|
||
$json_arr[$k]= $this->json_to_array($w); //判断类型是不是object
|
||
}else if(is_array($w)){
|
||
$json_arr[$k]= $this->json_to_array($w);
|
||
}else{
|
||
$json_arr[$k]= $w;
|
||
}
|
||
}
|
||
}
|
||
|
||
return $json_arr;
|
||
}
|
||
|
||
//增加商品
|
||
public function addGoods(Request $request){
|
||
$name = $request->name;
|
||
$icon = $request->icon;
|
||
$price = $request->price;
|
||
if (!is_numeric($price) || $price < 0) return $this->failure('请输入正确的商品价格');
|
||
$unit = $request->unit;
|
||
$introduction = $request->introduction;
|
||
if (empty($introduction)) return $this->failure('商品介绍不能为空');
|
||
$discount_price = $request->discount_price;
|
||
if (!is_numeric($discount_price) || $discount_price < 0) return $this->failure('请输入商品折扣价格');
|
||
if ($discount_price > $price) return $this->failure('折扣价不能高于原价');
|
||
$sort = $request->input('sort',1);
|
||
$status = $request->input('status',0);
|
||
$total_num = $request->input('total_num',999);
|
||
$surplus_num = $request->input('surplus_num',999);
|
||
|
||
$good = new Goods();
|
||
$good->name = $name;
|
||
$good->icon = $icon;
|
||
$good->price = $price;
|
||
$good->discount_price = $discount_price;
|
||
$good->unit = $unit;
|
||
$good->introduction = $introduction;
|
||
$good->type = 'family';
|
||
$good->sort = $sort;
|
||
$good->status = $status;
|
||
$good->total_num = $total_num;
|
||
$surplus_num = $surplus_num;
|
||
$good->save();
|
||
return $this->success('ok',$good);
|
||
}
|
||
|
||
//商品列表
|
||
public function familyGoods(Request $request){
|
||
$keyword = $request->keyword;
|
||
$status = $request->status;
|
||
$goods = Goods::where('type','family')->where('status',$status)->orderBy('sort','desc')->orderBy('id','decs');
|
||
if ($keyword) {
|
||
$keyword = trim($keyword);
|
||
$goods = $goods->where('name','like','%'.$keyword.'%');
|
||
}
|
||
$goods = $goods->paginate();
|
||
return $this->success('ok',$goods);
|
||
}
|
||
|
||
//修改商品
|
||
public function updateGood(Request $request,$goods_id){
|
||
$good = Goods::find($goods_id);
|
||
if (empty($good)) return $this->failure('要修改的商品信息不存在');
|
||
|
||
if ($request->has('name') && $request->name != $good->name) {
|
||
$good->name = $request->name;
|
||
}
|
||
if ($request->has('icon') && $request->icon != $good->icon) {
|
||
$good->icon = $request->icon;
|
||
}
|
||
if ($request->has('price') && $request->price != $good->price) {
|
||
$good->price = $request->price;
|
||
}
|
||
if ($request->has('unit') && $request->unit != $good->unit) {
|
||
$good->unit = $request->unit;
|
||
}
|
||
if ($request->has('introduction') && $request->introduction != $good->introduction) {
|
||
$good->introduction = $request->introduction;
|
||
}
|
||
if ($request->discount_price && $request->discount_price != $good->discount_price) {
|
||
|
||
$good->discount_price = $request->discount_price;
|
||
}
|
||
if (is_numeric('sort') && $request->sort != $good->sort) {
|
||
$good->sort = $request->sort;
|
||
}
|
||
if (is_numeric('status') && $request->status != $good->status) {
|
||
$good->status = $request->status;
|
||
}
|
||
if (is_numeric('total_num') && $request->total_num != $good->total_num) {
|
||
$good->total_num = $request->total_num;
|
||
}
|
||
if (is_numeric('surplus_num') && $request->surplus_num != $good->surplus_num) {
|
||
$good->surplus_num = $request->surplus_num;
|
||
}
|
||
$good->save();
|
||
return $this->success('ok',$good);
|
||
}
|
||
|
||
//跟据进订单号退款
|
||
public function refundActivityOrder(Request $request){
|
||
$trade_no = $request->trade_no;
|
||
$user_id = $request->user_id;
|
||
$price = $request->price;//活动价格
|
||
$cash = $request->cash;//退款价格
|
||
$member_id = $request->member_id;
|
||
$refund_order = RefundOrder::where([
|
||
'user_id'=>$user_id,
|
||
'type'=>'activity',
|
||
'trade_no'=>$trade_no,
|
||
])->first();
|
||
|
||
if ($refund_order) {
|
||
return $this->failure('退款已存在');
|
||
}
|
||
|
||
$refund_trade_no = $this->getRefundTradeNo();
|
||
|
||
$array = ['refund_desc' => '活动退款'];
|
||
$result = \WechatService::orderRefund($trade_no, $refund_trade_no, $price, $cash, $array);
|
||
if (is_array($result) && $result['status'] === true) {
|
||
RefundOrder::create([
|
||
'user_id'=>$user_id,
|
||
'type'=>'activity',
|
||
'trade_no'=>$trade_no,
|
||
'refund_trade_no'=>$refund_trade_no,
|
||
'total_fee'=>$price,
|
||
'refund_fee'=>$cash,
|
||
'is_hook'=>0,
|
||
'remark'=>$request->remark,
|
||
'operator'=>auth()->id(),
|
||
]);
|
||
ActivityMember::where('id',$member_id)->delete();
|
||
return $this->success('退款成功',$result);
|
||
}else{
|
||
return $this->failure('退款失败');
|
||
}
|
||
}
|
||
|
||
//手动生成活动二维码
|
||
public function createActivityQrcode(Request $request){
|
||
// try {
|
||
$activity_id = $request->activity_id;
|
||
// $activities = Activity::whereNull('qrcode')->get();
|
||
$activity = Activity::where('id',$activity_id)->first();
|
||
$app = EasyWechat::miniProgram();
|
||
$data = [];
|
||
$data['is_hyaline'] = true;
|
||
$response = $app->app_code->get('/pages/party/detail?party_id='.$activity->id, $data);
|
||
$time = time();
|
||
$path = $time.'activity_qrocde.png';
|
||
$filename = $response->saveAs(storage_path('qrcode'), $path);
|
||
$qrcode_path = storage_path("/qrcode/".$time."activity_qrocde.png");
|
||
if(file_exists($qrcode_path)){
|
||
$qrcode = $this->uploadFile($qrcode_path);
|
||
$activity->qrcode = $qrcode;
|
||
$activity->save();
|
||
try{
|
||
unlink($qrcode_path);
|
||
}catch(Exception $e) {
|
||
return $this->failure($e->getMessage());
|
||
}
|
||
}
|
||
return $this->success('ok');
|
||
// } catch (\Exception $e) {
|
||
// $this->getError($e);
|
||
// return $this->failure('失败');
|
||
// }
|
||
}
|
||
|
||
//插入报名成员
|
||
public function insertMembers(Request $request){
|
||
$activity_id = $request->activity_id;
|
||
$members = ActivityMember::where('activity_id',$activity_id)->where('id','<>',5440)->where('is_joined',1)->get();
|
||
$mobiles = ActivityMember::where('activity_id',$activity_id)->pluck('mobile')->toArray();
|
||
foreach ($members as $key => $member) {
|
||
$member->linkmen = json_decode($member->linkmen,true)??[];
|
||
|
||
if(count($member->linkmen) > 1){
|
||
foreach ($member->linkmen as $linkmen) {
|
||
if(in_array($linkmen['mobile'],$mobiles))continue;
|
||
$user = User::where('mobile',$linkmen['mobile'])->first();
|
||
if($user){
|
||
ActivityMember::create([
|
||
'user_id'=>$user->id,
|
||
'activity_id'=>$activity_id,
|
||
'linkmen'=>json_encode($member->linkmen),
|
||
'mobile' => $linkmen['mobile'],
|
||
'name' => $user->name ?? $user->nickname,
|
||
'avatar' => $user->app_avatar,
|
||
'sex' => $user->sex,
|
||
'is_joined' => 1,
|
||
'sign_in'=>1,
|
||
]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return $this->success('ok');
|
||
}
|
||
}
|