love_php/app/Http/Controllers/Admin/PlatformController.php
2026-04-02 09:20:51 +08:00

533 lines
22 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\Admin;
use App\Common\cache\redis\ApiRedisKey;
use App\Models\MpAdvertises;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Course\Course;
use App\Services\IMService;
use App\Models\HandleLogs;
use App\Models\Live\Anchor;
use App\Repositories\Eloquent\SmsRepository as Sms;
use App\Contracts\UserContract;
use App\Models\MerchantAccount;
use EasyWeChat\Factory;
use App\Models\CommunityActivity;
use App\Models\Configs;
use App\Models\Earning;
use App\Models\EarningWithdraw;
use App\Models\MerchantInformation;
use App\Models\TouristOrder;
use App\Models\WangYiYunUser;
use App\Models\MEarning;
use App\Models\MEarningwithdraws;
use App\Models\MerchantShop;
use App\Models\MerchantUsers;
use App\Models\Server\MerchantShareChannel;
use App\Models\Server\MerchantUser;
use App\Models\ShopRecive;
use App\Models\User;
use App\Models\WebsiteUser;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;
use function AlibabaCloud\Client\json;
class PlatformController extends Controller
{
protected $sms;
protected $userCon;
protected $viewer;
protected $app;
protected $config;
public function __construct(Sms $sms, UserContract $userCon)
{
$this->config = [
'app_id' => config('wechat.official_account.new.app_id'),
'secret' => config('wechat.official_account.new.secret'),
'token' => config('wechat.official_account.new.token'),
'aes_key' => config('wechat.official_account.new.aes_key')
];
$this->app = Factory::officialAccount($this->config);
$this->sms = $sms;
$this->userCon = $userCon;
}
// 咨询师列表-后台选择
public function platCommunityList(Request $request)
{
$anchor_id = $request->anchor_id;
$activities = CommunityActivity::where('anchor_id',$anchor_id)->where('status',1)->where('type','fullink')->orderBy('sort','desc')->get();
return $this->success('ok',$activities);
}
public function queryOrders(Request $request){
$trade_no = $request->trade_no;
$result = \WechatService::orderPaid($trade_no);
return $this->success('ok',$result);
}
//收益记录 打款记录
public function merchantRecordV2(Request $request,$id){
$type = $request->type??'income';
$result = TouristOrder::with('operator');
if($type=='income'){
$result = $result->wherenotin('type',['system']);
}else{
$result = $result->where('type','system');
}
$result = $result->where('merchant_id',$id)
->whereIn('pay_status',[1,4])
->orderBy('id','desc')
->paginate();
foreach ($result as $key => $value) {
$can_withdraw_count = MEarning::where('m_order_id',$value->id)->where('m_id',$id)->where('m_user_id',0)->sum('value')??0;
$value->can_withdraw_count = $value->price;
if($can_withdraw_count>0)
$value->can_withdraw_count = $can_withdraw_count;
if($value->type == 'community'){
$activity = CommunityActivity::withTrashed()->where('id',$value->type_id)->first();
if($activity->class == 'one'){
$goods = CommunityActivity::withTrashed()->where('id',$value->type_id)->where('class','one')->value('title');
$value->goods = '购买了活动《'.$goods."";
}
}
if($value->mobile=='未获取'){
$linkmen = json_decode( $value->linkmen,true);
$value->mobile = !empty($linkmen) ? $linkmen[0]['mobile'] : '未获取';
}
if($value->name=='未获取'){
$linkmen = json_decode( $value->linkmen,true);
$value->name = $linkmen[0]['name'];
}
if($value->type == 'community'){
$service = CommunityActivity::withTrashed()->where('id',$value->type_id)->first();
if($service->class == 'many'){
$goods = CommunityActivity::withTrashed()->where('id',$value->type_id)->where('class','many')->value('title');
$value->goods = '购买了服务《'.$goods."";
}
}
if($value->type == 'course'){
$goods = Course::withTrashed()->where('id',$value->type_id)->value('title');
$value->goods = '购买了课程《'.$goods."";
}
if($value->type == 'shop'){
$goods = MerchantShop::withTrashed()->where('id',$value->type_id)->value('title');
$addres = ShopRecive::where('order_id',$value->id)->value('address');
$value->goods = '购买了商品《'.$goods."";
$value->address = $addres;
}
if($value->type == 'system'){
$value->goods = '系统转账';
}
if($value->type == 'reward_info'){
$user = MerchantUsers::where('id',$value->account_id)->first();
$goods = MerchantInformation::withTrashed()->where('id',$value->type_id)->value('title');
$value->goods ='赞赏了资讯《'.$goods."";
$value->name = $user->nickname??'匿名用户';
$value->mobile = $user->mobile??'';
}
if($value->type == 'reward_activity'){
$user = MerchantUsers::where('id',$value->account_id)->first();
$goods = CommunityActivity::withTrashed()->where('id',$value->type_id)->value('title');
$value->goods ='赞赏了活动《'.$goods."";
$value->name = $user->nickname??'匿名用户';
$value->mobile = $user->mobile??'';
}
if($value->type == 'transfer'){
$user = Anchor::where('m_id',$value->merchant_id)->first();
$value->goods = '商家'.$user->name.'发起转账'.$value->price.'元';
$value->name = $user->name;
$value->mobile = $user->mobile??'';
}
}
return $this->success('ok',$result);
}
//提现记录
public function cashoutLogsFullink(Request $request,$id){
$type = $request->type ?? 'merchant';
$start_time = $request->start_time;
$end_time = $request->end_time;
if($type == 'merchant'){
$result = MEarningwithdraws::select('id','way','real_value','value','status','created_at')->where('m_id', $id)->where('m_user_id',0)
->orderBy('id','desc');
}elseif($type== 'merchant_user'){
$result = MEarningwithdraws::select('id','way','real_value','value','status','created_at')->where('m_user_id',$id);
}else{
$result = EarningWithdraw::select('id','way','real_value','value','status','created_at')->where('user_id',$id);
}
if($start_time && $end_time){
$result = $result->whereBetween('created_at',[$start_time,$end_time]);
}
$result = $result->orderBy('id','desc')->paginate();
foreach ($result as $key => $value) {
$value->poundage = number_format($value->value-$value->real_value,2)??0;
$value->actual_received = floatval($value->real_value);
$value->amount = floatval($value->value);
$value->type = $value->way;
}
return $this->success('ok',$result);
}
public function userEarnings(Request $request){
try {
$type = $request->type??'merchant_user';
$type_id = $request->type_id;
if($type == 'merchant_user'){
$result = MEarning::where('m_user_id', $type_id)->select('id','m_order_id','type','status','sharer','value','created_at');
}else{
$result = Earning::where('user_id', $type_id)->select('id','order_id','type','status','sharer','value','created_at');;
}
$result = $result->orderBy('id', 'desc')->paginate();;
foreach ($result as $key => $value) {
if($value->order_id){
$value->title = $value->order ? $value->order->goods : '未获取';
$value->nickname = $value->order ? User::where('id',$value->order->user_id)->value('nickname') :'未获取';
$value->mobile = $value->order ? User::where('id',$value->order->user_id)->value('mobile') :'未获取';
}elseif($value->m_order_id){
$value->title = $value->order ? $value->order->desc : '未获取';
if ($value->$type == 'enter') {
$merchant = MerchantAccount::where('id', $value->m_id)->first();
$value->nickname = $merchant->anchorV2->name ?? '';
$value->mobile = $merchant->anchorV2->mobile;
$value->title = '商户' . $value->nickname . '入驻,获取奖励' . $value->value . '元';
}else{
$nickname = $value->order ? $value->order->name : '';
if(empty($nickname) || $nickname == '未获取') $nickname = MerchantUser::where('id',$value->order->account_id)->value('nickname');
$mobile = $value->order ? $value->order->mobile : '';
if(empty($mobile) || $mobile == '未获取') $mobile = MerchantUser::where('id',$value->order->account_id)->value('mobile');
$value->nickname = $nickname;
$value->mobile = $mobile;
}
}
// $value->mobile = $value->order ? $value->order->mobile : '未获取';
$time = date('Y-m-d', $value->created_at->timestamp);
if ($value->sharer == 'first_sharer') {
$value->title = '你推荐注册的' . $value->nickname . '' . $time . ' 购买了【' . $value->title . '】';
} elseif ($value->sharer == 'last_sharer') {
$value->title = $value->nickname . '通过你的直接分享,' . $time . ' 购买了【' . $value->title . '】';
} elseif ($value->sharer == 'other_sharer') {
$value->title = $value->nickname . '通过你的间接分享,' . $time . ' 购买了【' . $value->title . '】';
}
if ($value->sharer == 'channel') {
$channel_id = $value->order->share_channel_id ?? 0;
$title = MerchantShareChannel::where('id', $channel_id)->value('title') ?? '渠道推广';
$value->title = $value->nickname . '通过你的渠道【' . $title . '】购买了【' . $value->title . '】';
}
$value->order_price = $value->order->price ?? 0;
unset($value->order);
}
return $this->success('ok', $result);
}catch (\Exception $e){
$this->getError($e);
return $this->failure('服务器休息中,请稍后再试');
}
}
//重置密码
public function sendNoticeToAnchor(Request $request){
$anchor_id = $request->anchor_id;
$anchor = Anchor::find($anchor_id);
if(empty($anchor->mobile)) return $this->failure('该老师尚未绑定电话号码,无法重置');
$mobile = $anchor->mobile;
$openid = $anchor->openid??0;
MerchantAccount::updateOrCreate(['mobile'=>$mobile],['password'=>encrypt($mobile),'openid'=>$openid]);
return $this->success('ok');
}
//联系我们 合作共赢
public function websiteUser(Request $request){
$name = $request->name;
$contact = $request->contact;
$leave_message = $request->leave_message;
$user = new WebsiteUser();
$user->name = $name;
$user->contact = $contact;
$user->leave_message = $leave_message;
$user->save();
return $this->success('ok');
}
//联系列表
public function contactList(Request $request){
$keyword = $request->keyword;
$users = WebsiteUser::orderBy('id','desc');
if($keyword){
$keyword = trim($keyword);
$users = $users->where(function($sql) use($keyword){
$sql->where('name','like','%'.$keyword.'%')
->orWhere('contact','like','%'.$keyword.'%');
});
}
$users = $users->paginate();
foreach ($users as $key => $user) {
if($user->desc) {
$user->desc = json_decode($user->desc);
}else{
continue;
}
}
return $this->success('ok',$users);
}
//增加官网用户跟进内容
public function followWebsiteUser(Request $request,$id){
$user = WebsiteUser::find($id);
$descs = $request->descs;
if (empty($descs)) return $this->failure('请按要求填写跟进内容');
if (empty($user->desc)){
$record = array(
array('chat_way'=>$descs[0],'chat_content'=>$descs[1],'chat_result'=>$descs[2]));
}else{
$desc = json_decode($user->desc);
$array = ['chat_way'=>$descs[0],'chat_content'=>$descs[1],'chat_result'=>$descs[2]];
array_push($desc, $array);
$record = $desc;
}
$user->desc = json_encode($record);
$user->save();
return $this->success('ok');
}
//批量删除
public function removeWebsiteUsers(Request $request){
$ids = $request->ids;
if(!$ids) return $this->failure('请选择要操作的内容');
WebsiteUser::whereIn('id',$ids)->delete();
return $this->success('ok');
}
//设置手续费
public function configPoundage(Request $request){
$poundage = $request->poundage ?? 1;//百分制
$key = 'withdrawal_poundage';
if($poundage > 100 || $poundage < 0 || !is_numeric($poundage)){
return $this->failure('请输入有效的提现所收取的手续费百分比');
}
Redis::set($key,$poundage);
return $this->success('ok');
}
//获取手续费
public function obtainPoundage(Request $request){
$key = 'withdrawal_poundage';
$poundage = Redis::get($key)??2;
return $this->success('ok',$poundage);
}
//HTTP请求支持HTTP/HTTPS支持GET/POST
private function http_request($url, $data = null)
{
try{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)) {
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS,$data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
return json_decode($output,true);
}catch(\Exception $e){
HandleLogs::error('HTTP请求 异常','微信内容安全',$e);
return '';
}
}
//添加修改小程序广告位
public function editMpAdevertise(Request $request){
try {
if(empty($request->pic) || !isset($request->pic)) {
return $this->failure('图片必填');
}
if(empty($request->thumbnail) || !isset($request->thumbnail)) {
return $this->failure('缩略图必填');
}
if(empty($request->jump_url) || !isset($request->jump_url)) {
return $this->failure('跳转必填');
}
if(isset($request->id) && $request->id) {
$mp_advertise = MpAdvertises::find($request->id);
if(!$mp_advertise) {
return $this->failure('广告位不存在');
}
} else {
$mp_advertise = new MpAdvertises();
}
$mp_advertise->pic = $request->pic;
$mp_advertise->thumbnail = $request->thumbnail;
$mp_advertise->jump_url = $request->jump_url;
if(isset($request->status)) {
$mp_advertise->status = $request->status;
}
$mp_advertise->save();
return $this->success('ok');
} catch (\Exception $e) {
Log::error($e->getMessage());
return $this->failure('数据错误');
}
}
// 获取所有小程序广告位
public function mpAdevertises(Request $request)
{
try {
$advertises = MpAdvertises::orderBy('id','desc')->get();
return $this->success('ok',$advertises);
} catch (\Exception $e) {
Log::error($e->getMessage());
return $this->failure('数据错误');
}
}
// 删除广告位
public function delMpAdvertise(Request $request,$mp_advertise_id)
{
try {
MpAdvertises::where('id',$mp_advertise_id)->delete();
return $this->success('ok');
} catch (\Exception $e) {
Log::error($e->getMessage());
return $this->failure('数据错误');
}
}
// 小程序首页弹框配置
public function mpHomePopout(Request $request){
$path = $request->path;
$path_type = $request->path_type;
$pic = $request->pic;
$status = $request->status ?? 1;
$type_id = $request->type_id;
$marriage_pic = $request->marriage_pic;
$area_status = $request->area_status ?? 0;
$province = $request->province ?? '';
$city = $request->city ?? '';
if(empty($path_type) || empty($pic) || empty($type_id)){
return $this->failure('完善表单所有内容才能提交');
}
$com = CommunityActivity::where('id',$type_id)->first();
if(!$com) return $this->failure('输入的id有误 请确认后再保存');
if($com->class == 'one'){
$type = 'activity';
$path = '/pages/party/detail?party_id='.$type_id.'&is_mp_show=1';
}else{
$type = 'service';
$path = '/pages/party/servicesDetail?party_id='.$type_id.'&is_mp_show=1';
}
$array = [
'path'=>$path,
'path_type'=>$path_type,
'pic'=>$pic,
'status'=> $status,
'type'=>$type,
'type_id'=>$type_id,
'marriage_pic'=>$marriage_pic,
'area_status' => $area_status,
'province' => $province,
'city' => $city,
];
Configs::create([
'key' => 'mp_home_popout',
'value' => json_encode($array),
'remark' => '小程序首页弹框',
]);
return $this->success('ok');
}
//编辑 小程序首页弹框配置
public function updatehomePopout(Request $request){
$id = $request->id;
if(empty($id)){
return $this->failure('id不为空');
}
$config = Configs::where('id',$id)->first();
if($request->has('path_type')){
$array['path_type'] = $request->path_type;
}
if($request->has('pic') ){
$array['pic'] = $request->pic;
}
if($request->has('marriage_pic')){
$array['marriage_pic'] = $request->marriage_pic;
}
if($request->has('status')){
$array['status'] = $request->status;
}
if($request->has('type_id') && $request->type_id){
$array['type_id'] = $request->type_id;
$com = CommunityActivity::where('id',$request->type_id)->first();
if(!$com) return $this->failure('输入的id有误 请确认后再保存');
if($com->class == 'one'){
$type = 'activity';
$path = '/pages/party/detail?party_id='.$request->type_id.'&is_mp_show=1';
}else{
$type = 'service';
$path = '/pages/party/servicesDetail?party_id='.$request->type_id.'&is_mp_show=1';
}
$array['type'] = $type;
$array['path'] = $path;
}else{
$array['type_id'] = 0;
$array['type'] = null;
$array['path'] = '/';
}
//地区限制开关
if($request->has('area_status')){
$array['area_status'] = $request->area_status;
}
//地区 - 省
if($request->has('province')){
$array['province'] = $request->province;
}
//地区 - 市
if($request->has('city')){
$array['city'] = $request->city;
}
$config->value = json_encode($array);
$config->save();
return $this->success('ok');
}
// 获取小程序首页弹框配置
public function homePopoutList(Request $request){
$config = Configs::where('key','mp_home_popout')->get();
foreach ($config as $key => $value) {
$value->value = json_decode($value->value);
$cache_key = ApiRedisKey::getHomePopoutClickUserKey($value->id);
$value->click_user_num = Redis::sCard($cache_key) ?: 0;
}
return $this->success('ok',$config);
}
/**
* 删除小程序首页弹窗
* @param Request $request
*/
public function deleteHomePopout(Request $request){
$id = $request->id;
if(empty($id)){
return $this->failure('id不为空');
}
try {
Configs::where('id',$id)->delete();
return $this->success('ok');
} catch (\Exception $e) {
Log::error($e->getMessage());
return $this->failure('数据错误');
}
}
}