222 lines
8.9 KiB
PHP
222 lines
8.9 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\Server\Admin;
|
||
|
||
use App\Http\Response\ResponseJson;
|
||
use App\Models\Server\MerchantAccount;
|
||
use App\Models\Server\TouristOrder;
|
||
use Illuminate\Http\Request;
|
||
use App\Http\Controllers\Controller;
|
||
use App\Models\Server\MEarning;
|
||
use App\Models\Server\MerchantShareChannel as ShareChannel;
|
||
use App\Models\Server\MerchantUser;
|
||
|
||
class ShareChannelController extends Controller
|
||
{
|
||
use ResponseJson;
|
||
|
||
/**
|
||
* 分享渠道列表
|
||
* @param Request $request
|
||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View
|
||
*/
|
||
public function channels(Request $request)
|
||
{
|
||
try {
|
||
$merchant_id = $request->account_id;
|
||
$keyword = trim($request->keyword);
|
||
$merchant = MerchantAccount::find($merchant_id);
|
||
if (empty($merchant)) return $this->failure("暂无商户信息");
|
||
$channels = ShareChannel::with('bindMerchantAnchor:m_id,name,pic', 'bindMerchantUser:id,nickname,pic')->withCount('paidOrders')->where('m_id', $merchant_id)->where('created_at', '>', '2022-01-06');
|
||
if($keyword){
|
||
$channels = $channels->where('title','like',"%$keyword%");
|
||
}
|
||
$channels = $channels->orderBy('id','desc')->paginate();
|
||
return $this->success('ok', $channels);
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure("服务器休息,请稍后再试");
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 创建渠道
|
||
* @param Request $request
|
||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View|void
|
||
*/
|
||
public function storeChannel(Request $request)
|
||
{
|
||
try {
|
||
$title = $request->input('title');
|
||
if (empty($title)) return $this->failure("请输入渠道名称");
|
||
$merchant_id = $request->account_id;
|
||
//随机分享吗
|
||
$code = $this->makeCode();
|
||
$channel = new ShareChannel();
|
||
$channel->m_id = $merchant_id;
|
||
$channel->title = $title;
|
||
$channel->code = $code;
|
||
$serve_tab = $request->serve_tab;
|
||
$channel->ratio = $request->input('ratio',0);
|
||
if ($channel->ratio < 0 || $channel->ratio > 1) return $this->failure("分成比例取值范围在0~1之间");
|
||
$channel->save();
|
||
//分享码
|
||
$url = env('APP_URL').'/api/official/live/wechat/FamilyAuth?merchant_id='.$merchant_id.'&share_channel_id='.$channel->id.'&serve_tab='.$serve_tab.'&url='.urlencode(env('APP_URL').'/pu/#/');
|
||
$qrcode = $this->getUrlqrcode($url,300);
|
||
$channel->qrcode = $qrcode;
|
||
// //商户绑定码
|
||
// $bind_url = env('APP_URL').'/api/official/bind/merchant/share/channels/'.$channel->id;
|
||
//商户绑定码
|
||
$bind_url = env('APP_URL').'/api/official/bind/merchant/share/channels/'.$channel->id.'/v2';
|
||
$bind_qrcode = $this->getUrlqrcode($bind_url,300);
|
||
$channel->bind_qrcode = $bind_qrcode;
|
||
$channel->save();
|
||
|
||
return $this->success("ok", $channel);
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure("服务器休息,请稍后再试");
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 修改渠道
|
||
* @param Request $request
|
||
* @param $id
|
||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View
|
||
*/
|
||
public function updateChannel(Request $request, $id)
|
||
{
|
||
try {
|
||
$channel = ShareChannel::find($id);
|
||
if (empty($channel)) return $this->failure('未获取到渠道信息');
|
||
$ratio = $request->input('ratio');
|
||
if ($ratio && $ratio != $channel->ratio) {
|
||
if ($ratio < 0 || $ratio > 1) return $this->failure("分成比例取值范围在0~1之间");
|
||
$channel->ratio = $ratio;
|
||
}
|
||
$title = $request->input('title');
|
||
if ($title && $title != $channel->c) {
|
||
$channel->title = $title;
|
||
}
|
||
$channel->save();
|
||
return $this->success("ok", $channel);
|
||
}catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure("服务器休息,请稍后再试");
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 渠道详情
|
||
* @param Request $request
|
||
* @param $id
|
||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View
|
||
*/
|
||
public function channel(Request $request, $id)
|
||
{
|
||
try {
|
||
$channel = ShareChannel::find($id);
|
||
$channel->bind_anchor = $channel->bindMerchantAnchor()->where('m_id', $channel->bind_m_id)->select('id', 'm_id', 'name', 'pic')->first();
|
||
$channel->bind_user = $channel->bindMerchantUser()->where('id', $channel->bind_m_user_id)->select('id', 'nickname', 'pic')->first();
|
||
if (empty($channel)) return $this->failure('未获取到渠道信息');
|
||
return $this->success('ok',$channel);
|
||
}catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure("服务器休息,请稍后再试");
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 删除渠道
|
||
* @param Request $request
|
||
* @param $id
|
||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View
|
||
*/
|
||
public function deleteChannel(Request $request, $id)
|
||
{
|
||
try {
|
||
$channel = ShareChannel::find($id);
|
||
if (empty($channel)) return $this->failure('未获取到渠道信息');
|
||
$channel->delete();
|
||
return $this->success('ok',$channel);
|
||
}catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure("服务器休息,请稍后再试");
|
||
}
|
||
}
|
||
|
||
public function channelOrders(Request $request, $id)
|
||
{
|
||
try {
|
||
$keyword = $request->keyword;
|
||
$channel = ShareChannel::find($id);
|
||
if (empty($channel)) return $this->failure('暂无渠道信息');
|
||
$orders = TouristOrder::with('user:id,nickname,pic')->where('share_channel_id', $id)->whereIn('pay_status',[1,4]);
|
||
$type = $request->input('type');
|
||
if ($type) {
|
||
if ($type == 'activity'){
|
||
$orders = $orders->where('type', 'community')->whereHas('activity');
|
||
}elseif ($type == 'service') {
|
||
$orders =$orders->where('type', 'community')->whereHas('service');
|
||
}else{
|
||
$orders =$orders->where('type', $type);
|
||
}
|
||
$orders->with($type.':id,title');
|
||
}
|
||
if($keyword){
|
||
$keyword = trim($keyword);
|
||
$ids = MerchantUser::where('nickname','like','%'.$keyword.'%')->pluck('id');
|
||
$orders = $orders->where(function($sql) use($keyword,$ids){
|
||
$sql->where('desc','like','%'.$keyword.'%')
|
||
->orWhere('name','like','%'.$keyword.'%')
|
||
->orWhereIn('account_id',$ids);
|
||
});
|
||
}
|
||
$orders = $orders->orderBy('id', 'desc')->paginate();
|
||
foreach ($orders as $order)
|
||
{
|
||
$order->linkmen =json_decode($order->linkmen)?:[];
|
||
if ($type) {
|
||
//订单名称
|
||
$order->goods_name = $order->$type?$order->$type->title:null;
|
||
}
|
||
//渠道分成金额
|
||
$channel_earning = MEarning::where('m_order_id',$order->id)->where('sharer','channel')->value('value');
|
||
$order->channel_earning = $channel_earning ?? '0.00';
|
||
}
|
||
return $this->success('ok', $orders);
|
||
}catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息,请稍后再试');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 生成随机渠道码
|
||
* @return string
|
||
*/
|
||
function makeCode(){
|
||
try {
|
||
$code = "ABCDEFGHIGKLMNOPQRSTUVWXYZ";
|
||
$rand = $code[rand(0, 25)] . strtoupper(dechex(date('m')))
|
||
. date('d') . substr(time(), -5)
|
||
. substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99));
|
||
for (
|
||
$a = md5($rand, true),
|
||
$s = '0123456789ABCDEFGHIJKLMNOPQRSTUV',
|
||
$d = "",
|
||
$f = 0;
|
||
$f < 6;
|
||
$g = ord($a[$f]), // ord()函数获取首字母的 的 ASCII值
|
||
$d .= $s[($g ^ ord($a[$f + 8])) - $g & 0x1F], //按位亦或,按位与。
|
||
$f++
|
||
) ;
|
||
return $d;
|
||
} catch (\Exception $e) {
|
||
$this->getError($e);
|
||
return $this->failure('服务器休息中,请稍后再试');
|
||
}
|
||
}
|
||
}
|