ufutx.dma/app/Http/Controllers/Admin/ServiceRoleController.php
2026-03-04 14:42:40 +08:00

247 lines
9.8 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Events\OperationLoggedEvent;
use App\Facades\UploadService;
use App\Facades\WechatService;
use App\Http\Controllers\Controller;
use App\Http\Response\ResponseJson;
use App\Models\ServiceRole;
use App\Models\ServiceRoleOrder;
use App\Models\ServiceRoleUser;
use App\Models\ServiceUser;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use SimpleSoftwareIO\QrCode\Facades\QrCode;
class ServiceRoleController extends Controller
{
use ResponseJson;
public function roles()
{
$roles = ServiceRole::all();
return $this->success('ok', $roles);
}
public function serviceUsers(Request $request, $role_id = null)
{
// $users = ServiceUser::with('roles', 'user:id,name,avatar');
// $keyword = $request->input('keyword');
// if ($keyword) {
// $keyword = trim($keyword);
// $users = $users->where( function ($sql) use($keyword) {
// $sql->where("name", 'like', '%'.$keyword.'%')
// ->orWhere('mobile', 'like', '%'.$keyword.'%');
// });
// }
// if ($role_id) {
// $users = $users->whereHas('roles', function ($sql) use($role_id) {
// $sql->where('service_roles.id', $role_id);
// });
// }
// $users = $users->orderByDesc('id')->paginate();
// foreach ($users as $user)
// {
// $user->protocol = json_decode($user->protocol)?:[];
// }
// return $this->success('ok', $users);
$users = ServiceUser::with('roles', 'user:id,name,avatar')
->when($request->filled('keyword'), function ($query) use ($request) {
$keyword = trim($request->input('keyword'));
$query->where(function ($query) use ($keyword) {
$query->where('name', 'like', "%{$keyword}%")
->orWhere('mobile', 'like', "%{$keyword}%");
});
})
->when($role_id, function ($query) use ($role_id) {
$query->whereHas('roles', function ($query) use ($role_id) {
$query->where('service_roles.id', $role_id);
});
})
->orderByDesc('id')
->paginate();
$users->each(function ($user) {
$user->protocol = json_decode($user->protocol) ?: [];
});
return $this->success('ok', $users);
}
public function getRoleUsers(Request $request, $role_id)
{
$per_page = $request->input('per_page', 15);
$keyword = $request->get('keyword');
$users = ServiceRole::find($role_id);
$service_user = $users->service_user()
->when($keyword, function ($query) use ($keyword) {
$query->where(function ($query) use ($keyword) {
$query->where('name', 'like', "%{$keyword}%")
->orWhere('mobile', 'like', "%{$keyword}%");
});
})
->whereHas('user')
->orderByDesc('id')
->paginate($per_page);
return $this->success('ok', $service_user);
}
public function storeServiceUser(Request $request)
{
DB::beginTransaction();
$data['name'] = $request->input('name');
$data['mobile'] = $request->input('mobile');
if ($data['mobile']) {
$is_exists = ServiceUser::where('mobile', $data['mobile'])->exists();
if ($is_exists)
return $this->failure("手机号已存在");
}
$data['card_num'] = $request->input('card_num');
$data['protocol'] = json_encode($request->input(['protocol']) ?: []);
$service_user = ServiceUser::create($data);
$role_ids = $request->input('role_ids');
if (is_array($role_ids) && count($role_ids)) {
ServiceRoleUser::where('s_user_id', $service_user->id)->delete();
$data = [];
foreach ($role_ids as $role_id) {
$data[] = ['role_id' => $role_id, 'user_id' => $service_user->user_id, 's_user_id' => $service_user->id, 'created_at' => date('Y-m-d H:i:s')];
}
ServiceRoleUser::insert($data);
}
$service_user->bind_qrcode = '';
//生成绑定二维码 todo
// if (config('app.env') == 'production') {
// $scene = 'service_user_id='.$service_user->id;
// $page = 'pages/service/bindServe';
// $qrcode = WechatService::getMPQrcode($scene, $page);
// $service_user->bind_qrcode = $qrcode;
// $service_user->save();
// }
$domain = config('app.url');
$path = storage_path('qrcode/service_user_' . $service_user->id . '_bind_qrcode.svg');
// QrCode::generate($domain.'/h5/#/bindingService?service_user_id='.$service_user->id, $path);
QrCode::generate($domain . '/api/h5/wechat/user/auth?target_path=bindingService?service_user_id=' . $service_user->id, $path);
if (file_exists($path)) {
$pic = UploadService::uploadFile($path);
@unlink($path);
$service_user->bind_qrcode = $pic;
$service_user->save();
}
DB::commit();
//操作记录
OperationLoggedEvent::dispatch("创建了服务人员:$service_user->id ");
return $this->success('ok', $service_user);
}
public function updateServiceUser(Request $request, $id)
{
// DB::beginTransaction();
// $service_user = ServiceUser::find($id);
// $data['name'] = $request->input('name');
// $data['mobile'] = $request->input('mobile');
// $data['card_num'] = $request->input('card_num');
// $data['protocol'] = json_encode($request->input(['protocol'])?:[]);
// ServiceUser::where('id', $id)->update($data);
// $role_ids = $request->input('role_ids');
// if (is_array($role_ids) && count($role_ids)) {
// ServiceRoleUser::where('s_user_id', $service_user->id)->delete();
// $data = [];
// foreach ($role_ids as $role_id) {
// $data[] = ['role_id'=>$role_id, 'user_id'=>$service_user->user_id, 's_user_id'=>$service_user->id, 'created_at'=>date('Y-m-d H:i:s')];
// }
// ServiceRoleUser::insert($data);
// }
// DB::commit();
// return $this->success('ok');
DB::beginTransaction();
try {
//获取服务人员
$service_user = ServiceUser::find($id);
//更新服务人员信息
$service_user->update([
'name' => $request->input('name'),
'mobile' => $request->input('mobile'),
'card_num' => $request->input('card_num'),
'protocol' => json_encode($request->input('protocol', [])),
]);
//同步服务人员角色
$role_ids = $request->input('role_ids');
$service_user->service_roles()->syncWithPivotValues($role_ids, ['user_id' => $service_user->user_id]);
//如果服务人员有副教练资料
if ($service_user->coaches) {
//角色取消副教练
if (!in_array(2, $role_ids)) {
//变更资料为待审核
$service_user->coaches->update(['status' => 0]);
} elseif ($service_user->coaches->status == 0) {
//角色增加副教练 且 有申请中的资料 把资料审核通过
$service_user->coaches->update(['status' => 1]);
}
}
DB::commit();
//操作记录
OperationLoggedEvent::dispatch("更新了服务人员:$service_user->id ");
return $this->success('ok');
} catch (\Exception $e) {
DB::rollback();
return $this->jsonResponse(2, $e->getMessage());
}
}
public function deleteServiceUser(Request $request, ServiceUser $service_user)
{
DB::transaction(function () use ($service_user) {
//删除服务人员关联的订单订单
if ($service_user->user_id) {
ServiceRoleOrder::where('user_id', $service_user->user_id)->delete();
}
//删除服务人员关联的角色
ServiceRoleUser::where('s_user_id', $service_user->id)->delete();
//删除服务人员
$service_user->delete();
//操作记录
OperationLoggedEvent::dispatch("删除了服务人员:$service_user->id ");
});
return $this->success('ok');
}
public function deleteRoleUser(Request $request, $id)
{
ServiceRoleUser::where('id', $id)->delete();
return $this->success('ok');
}
public function setServiceUserRoles(Request $request, ServiceUser $service_user)
{
if (!$service_user->user_id)
return $this->failure("服务人员未绑定微信");
$role_ids = $request->input('role_ids');
if (is_array($role_ids) && count($role_ids)) {
ServiceRoleUser::where('user_id', $service_user->user_id)->delete();
$data = [];
foreach ($role_ids as $role_id) {
$data[] = ['role_id' => $role_id, 'user_id' => $service_user->user_id, 'created_at' => date('Y-m-d H:i:s')];
}
ServiceRoleUser::insert($data);
}
//操作记录
OperationLoggedEvent::dispatch("给服务人员:$service_user->id 添加角色");
return $this->success('ok');
}
public function updateRole(Request $request, $role_id)
{
$data['type'] = $request->input('type');
$data['value'] = $request->input('value');
if ($data['type'] == "RATIO" && $data['value'] > 1)
return $this->failure("收益比例不能超过100%");
ServiceRole::where('id', $role_id)->update($data);
return $this->success('ok');
}
}