392 lines
14 KiB
PHP
392 lines
14 KiB
PHP
<?php
|
||
|
||
namespace App\Admin\Controllers;
|
||
|
||
use App\Models\Seller;
|
||
use App\User;
|
||
use Illuminate\Http\Request;
|
||
use RuLong\Identity\Models\Identity;
|
||
use RuLong\Identity\Models\IdentityLog;
|
||
use RuLong\UserRelation\Models\UserRelation;
|
||
use Validator;
|
||
|
||
class UserController extends Controller
|
||
{
|
||
|
||
public function index(Request $request)
|
||
{
|
||
$user_id = $request->user_id;
|
||
$mobile = $request->mobile;
|
||
$nickname = $request->nickname;
|
||
$identity = $request->identity;
|
||
$parent_id = $request->parent_id;
|
||
$start = $request->start;
|
||
$end = $request->end;
|
||
$is_salesman = $request->is_salesman;
|
||
$orderField = $request->orderField;
|
||
$orderDirection = $request->orderDirection;
|
||
$numPerPage = $request->numPerPage ?: 30;
|
||
|
||
$users = User::with('organ')->when($mobile, function ($query) use ($mobile) {
|
||
return $query->where('mobile', 'like', "%{$mobile}%");
|
||
})->when($user_id, function ($query) use ($user_id) {
|
||
return $query->where('id', $user_id);
|
||
})->when(is_numeric($is_salesman), function ($query) use ($is_salesman) {
|
||
return $query->where('is_salesman', $is_salesman);
|
||
})->when($nickname, function ($query) use ($nickname) {
|
||
return $query->whereHas('info', function ($query) use ($nickname) {
|
||
$query->where('nickname', 'like', "%{$nickname}%");
|
||
});
|
||
})->when(is_numeric($identity), function ($query) use ($identity) {
|
||
$query->whereHas('identity', function ($query) use ($identity) {
|
||
$query->where('identity_id', $identity);
|
||
});
|
||
})->when($parent_id, function ($query) use ($parent_id) {
|
||
$query->whereHas('relation', function ($query) use ($parent_id) {
|
||
$query->where('parent_id', $parent_id);
|
||
});
|
||
})->when($start && $end, function ($query) use ($start, $end) {
|
||
return $query->whereBetween('created_at', [$start, date('Y-m-d', strtotime("+1 days", strtotime($end)))]);
|
||
})->when($start && !$end, function ($query) use ($start) {
|
||
return $query->where('created_at', '>=', $start);
|
||
})->when(!$start && $end, function ($query) use ($end) {
|
||
return $query->where('created_at', '<=', date('Y-m-d', strtotime("+1 days", strtotime($end))));
|
||
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
|
||
$query->orderBy($orderField, $orderDirection);
|
||
})->with(['info', 'lastLogin'])->withCount('logins')->orderBy('created_at', 'desc')->paginate($numPerPage);
|
||
|
||
$identitys = Identity::get();
|
||
return view('Admin::users.index', compact('users', 'identitys'));
|
||
}
|
||
|
||
public function edit(User $user)
|
||
{
|
||
return view('Admin::users.edit', compact('user'));
|
||
}
|
||
|
||
public function update(Request $request, User $user)
|
||
{
|
||
$validator = Validator::make($request->all(), [
|
||
'password' => 'nullable|between:6,32',
|
||
], [
|
||
'password.between' => '登录密码长度应在:min-:max位之间',
|
||
]);
|
||
|
||
if ($validator->fails()) {
|
||
return $this->error($validator->errors()->first());
|
||
}
|
||
|
||
if ($user->update($request->all())) {
|
||
return $this->success('修改成功', 'close');
|
||
} else {
|
||
return $this->error();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 软删除
|
||
* @Author:<C.Jason>
|
||
* @Date:2018-11-02T13:44:52+0800
|
||
* @param User $user [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function destroy(User $user)
|
||
{
|
||
if ($user->delete()) {
|
||
return $this->success();
|
||
} else {
|
||
return $this->error();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 回收站
|
||
* @Author:<C.Jason>
|
||
* @Date:2018-11-02T13:43:57+0800
|
||
* @return [type] [description]
|
||
*/
|
||
public function recycle(Request $request)
|
||
{
|
||
$mobile = $request->mobile;
|
||
$nickname = $request->nickname;
|
||
$orderField = $request->orderField;
|
||
$orderDirection = $request->orderDirection;
|
||
$numPerPage = $request->numPerPage ?: 30;
|
||
|
||
$users = User::onlyTrashed()->when($mobile, function ($query) use ($mobile) {
|
||
return $query->where('mobile', 'like', "%{$mobile}%");
|
||
})->when($nickname, function ($query) use ($nickname) {
|
||
return $query->whereHas('info', function ($query) use ($nickname) {
|
||
$query->where('nickname', 'like', "%{$nickname}%");
|
||
});
|
||
})->when($orderField, function ($query) use ($orderField, $orderDirection) {
|
||
$query->orderBy($orderField, $orderDirection);
|
||
})->with(['info', 'lastLogin'])->withCount('logins')->paginate($numPerPage);
|
||
return view('Admin::users.recycle', compact('users'));
|
||
}
|
||
|
||
/**
|
||
* 清空回收站
|
||
* 未考虑删除关联数据的问题
|
||
* @Author:<C.Jason>
|
||
* @Date:2018-11-02T13:41:40+0800
|
||
* @return [type] [description]
|
||
*/
|
||
public function clean()
|
||
{
|
||
if (User::onlyTrashed()->forceDelete()) {
|
||
return $this->success();
|
||
} else {
|
||
return $this->error();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 还原
|
||
* @Author:<C.Jason>
|
||
* @Date:2018-11-02T13:43:47+0800
|
||
* @param [type] $user [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function resume($user)
|
||
{
|
||
if (User::withTrashed()->where('id', $user)->restore()) {
|
||
return $this->success();
|
||
} else {
|
||
return $this->error();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 彻底删除单条目
|
||
* @Author:<C.Jason>
|
||
* @Date:2018-11-02T13:43:36+0800
|
||
* @param [type] $user [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function delete($user)
|
||
{
|
||
if (User::withTrashed()->where('id', $user)->forceDelete()) {
|
||
return $this->success();
|
||
} else {
|
||
return $this->error();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 线下开通身份
|
||
* @Author:<Leady>
|
||
* @Date:2018-11-20T15:32:24+0800
|
||
* @param Request $request [description]
|
||
* @param [type] $user [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function identity(User $user)
|
||
{
|
||
if ($user->seller_id) {
|
||
$identity = Identity::where('id', '>', $user->identity->identity_id)->get();
|
||
} else {
|
||
$identity = Identity::where('id', '>', $user->identity->identity_id)->whereIn('id', [1, 2])->get();
|
||
}
|
||
return view('Admin::users.identity', compact('user', 'identity'));
|
||
|
||
}
|
||
|
||
/**
|
||
* 开通身份执行事件
|
||
* @Author:<Leady>
|
||
* @Date:2018-11-20T15:34:36+0800
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function identityrun(Request $request, User $user)
|
||
{
|
||
$identity_id = $request->identity_id ?? '';
|
||
$pay = $request->pay ?? '';
|
||
$max_key = $request->max_key ?? '0';
|
||
if (!$identity_id) {
|
||
return $this->error('请选择要变更的身份');
|
||
}
|
||
$user->identityUpdate($identity_id, 'AdminUp', $pay, $max_key);
|
||
return $this->success('变更成功', 'close');
|
||
}
|
||
|
||
/**
|
||
* 缴费用户列表
|
||
* @Author:<Leady>
|
||
* @Date:2018-11-26T12:03:39+0800
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function paycostUser(Request $request)
|
||
{
|
||
$numPerPage = $request->numPerPage ?: 30;
|
||
$identity = $request->identity;
|
||
$mobile = $request->mobile;
|
||
$nickname = $request->nickname;
|
||
$lists = IdentityLog::where('channel', 'AdminUp')
|
||
->when(is_numeric($identity), function ($query) use ($identity) {
|
||
$query->where('after', $identity);
|
||
})
|
||
->when($mobile, function ($query) use ($mobile) {
|
||
$query->whereHas('user_obj', function ($query) use ($mobile) {
|
||
$query->where('mobile', 'like', "%{$mobile}%");
|
||
});
|
||
})
|
||
->when($nickname, function ($query) use ($nickname) {
|
||
$query->whereHas('user_obj', function ($query) use ($nickname) {
|
||
return $query->whereHas('info', function ($query) use ($nickname) {
|
||
$query->where('nickname', 'like', "%{$nickname}%");
|
||
});
|
||
});
|
||
})->orderBy('created_at', 'desc')->paginate($numPerPage);
|
||
|
||
$identitys = Identity::get();
|
||
return view('Admin::users.paycostuser', compact('lists', 'identitys'));
|
||
}
|
||
|
||
/**
|
||
* 缴费用户确认返款
|
||
* @Author:<Leady>
|
||
* @Date:2018-11-26T12:03:30+0800
|
||
* @param Request $request [description]
|
||
* @param IdentityLog $log [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function rebates(Request $request, IdentityLog $log)
|
||
{
|
||
return view('Admin::users.rebates', compact('log'));
|
||
}
|
||
|
||
/**
|
||
* 缴费用户确认返款
|
||
* @Author:<Leady>
|
||
* @Date:2018-11-26T12:03:30+0800
|
||
* @param Request $request [description]
|
||
* @param IdentityLog $log [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function rebatesdo(Request $request, IdentityLog $log)
|
||
{
|
||
|
||
$log->other = array_merge($log->other, ['rebates' => '已返款', 'rebates_remark' => $request->rebates_remark]);
|
||
if ($log->save()) {
|
||
return $this->success('操作成功', 'close');
|
||
} else {
|
||
return $this->error();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 更改上级ID
|
||
* @Author:<Leady>
|
||
* @Date:2018-11-20T15:32:24+0800
|
||
* @param Request $request [description]
|
||
* @param [type] $user [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function parent(User $user)
|
||
{
|
||
return view('Admin::users.parent', compact('user'));
|
||
}
|
||
|
||
/**
|
||
* 更改上级ID执行事件
|
||
* @Author:<Leady>
|
||
* @Date:2018-11-20T15:34:36+0800
|
||
* @param Request $request [description]
|
||
* @return [type] [description]
|
||
*/
|
||
public function parentrun(Request $request, User $user)
|
||
{
|
||
$parent_id = $request->parent_id ?? '';
|
||
if (!$parent_id || !is_numeric($parent_id)) {
|
||
return $this->error('请输入正确的编号');
|
||
}
|
||
$parent = UserRelation::where('user_id', (int) $parent_id)->first();
|
||
if ($parent) {
|
||
$user = $user->relation;
|
||
$bloodline = $parent->bloodline . $parent_id . ','; //改变后血缘线
|
||
$oldblood = $user->bloodline . $user->user_id . ','; //目标替换血缘线
|
||
$newblood = $bloodline . $user->user_id . ','; //目标新血缘线
|
||
$layer_cha = ($parent->layer + 1) - $user->layer;
|
||
$user->layer += $layer_cha;
|
||
$user->parent_id = $parent_id;
|
||
$user->bloodline = $bloodline;
|
||
$user->save();
|
||
$user->user->update(['seller_id' => $parent->user->seller_id]);
|
||
|
||
$childs = UserRelation::where('bloodline', 'like', '%,' . $user->user_id . ',%')->get();
|
||
foreach ($childs as $key => $child) {
|
||
$child->bloodline = str_replace($oldblood, $newblood, $child->bloodline);
|
||
$child->layer += $layer_cha;
|
||
$child->save();
|
||
$child->user->update(['seller_id' => $parent->user->seller_id]);
|
||
}
|
||
} else {
|
||
return $this->error('推荐人不存在');
|
||
}
|
||
return $this->success('变更成功', 'close');
|
||
}
|
||
|
||
public function direct(User $user)
|
||
{
|
||
// if ($user->direct != 2) {
|
||
// return $this->error('状态不正确');
|
||
// }
|
||
// $payment_vip = \App\Models\VipPament::where('user_id', $user->id)->where('state', 'SUCCESS')->first();
|
||
// \App\Bonus\Direct::settlement($user, ['orderid' => 'vip' . $payment_vip->id]);
|
||
return $this->success('执行完毕');
|
||
}
|
||
|
||
public function bloodview(User $user)
|
||
{
|
||
$lists = $user->relation->list2tree('user_id', 'parent_id', 'children', $user->id);
|
||
$root = [
|
||
"text" => $user->id . ' - ' . $user->info->nickname . '(' . ($user->identity->identity_id > 0 ? '已激活' : '未激活') . ')',
|
||
"children" => $lists,
|
||
];
|
||
return view('Admin::users.bloodview', compact('root'));
|
||
}
|
||
|
||
//更改组织
|
||
public function seller(Request $request, User $user)
|
||
{
|
||
$sellers = Seller::where('type', 'organ')->whereNotIn('id', [$user->seller_id])->get();
|
||
return view('Admin::users.seller', compact('user', 'sellers'));
|
||
}
|
||
|
||
//更改组织执行
|
||
public function sellerdo(Request $request, User $user)
|
||
{
|
||
|
||
$seller_id = $request->organ_id;
|
||
if (!$seller_id || !is_numeric($seller_id)) {
|
||
return $this->error('请选择组织');
|
||
}
|
||
|
||
$seller = Seller::find($seller_id);
|
||
if ($seller) {
|
||
$uids = UserRelation::where('bloodline', 'like', "%," . $user->id . ",%")
|
||
->orWhere('user_id', $user->id)
|
||
->pluck('user_id')
|
||
->toArray();
|
||
User::whereIn('id', $uids)->update(['seller_id' => $seller->id]);
|
||
} else {
|
||
return $this->error('组织不存在');
|
||
}
|
||
return $this->success('变更成功', 'close');
|
||
}
|
||
|
||
//设置取消业务员
|
||
public function salesman(Request $request, User $user)
|
||
{
|
||
$value = $request->value;
|
||
if ($user->update(['is_salesman' => $value])) {
|
||
return $this->success('设置成功');
|
||
} else {
|
||
return $this->error('设置失败');
|
||
}
|
||
}
|
||
}
|