Files
account/modules/Member/app/Services/MemberService.php
2026-01-18 09:52:48 +08:00

300 lines
8.1 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
// +----------------------------------------------------------------------
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
// +----------------------------------------------------------------------
namespace Modules\Member\Services;
use Modules\Member\Models\Member;
use Modules\Member\Events\MemberUpdate;
class MemberService {
/**
* @title 获取会员列表
*
* @param [type] $request
* @return void
*/
public function getDataList($request){
$map = [];
if ($request->filled('username')) {
$map[] = ['username', 'like', '%' . $request->input('username') . '%'];
}
if ($request->filled('mobile')) {
$map[] = ['mobile', 'like', '%' . $request->input('mobile') . '%'];
}
if ($request->filled('email')) {
$map[] = ['email', 'like', '%' . $request->input('email') . '%'];
}
$query = Member::with(['social', 'level'])->where($map)->orderBy('uid', 'desc');
if ($request->filled('title')) {
$query->whereAny(['nickname', 'username'], 'like', '%' . $request->input('title') . '%');
}
$data = [
'total' => $query->count(),
'page' => $request->input('page', 1),
'data' => $query->offset($request->input('offset', 0))->limit($request->input('limit', 10))->get(),
];
return $data;
}
public function getDetail($request){
$request->validate([
'id_card' => 'required',
], [
'id_card.required' => '身份证号不能为空!',
]);
$query = Member::with(['level', 'extend']);
if ($request->filled('id_card')) {
$query->whereHas('extend', function ($query) use ($request) {
$query->where('id_card', $request->input('id_card'));
});
}
if ($request->is('api/*')) {
$query->select(['nickname', 'uid', 'level_id']);
}
if ($query->exists()) {
return $query->first();
} else {
throw new \Exception("会员不存在!", 1);
}
}
/**
* @title 创建用户
*
* @param [type] $request
* @return void
*/
public function create($request){
$request->validate([
'username' => 'required|unique:member',
'nickname' => 'required',
'mobile' => 'required|unique:member',
'password' => 'required|min:6|max:16'
], [
'username.required' => '用户名不能为空!',
'username.unique' => '用户名已存在!',
'nickname.required' => '昵称不能为空!',
'mobile.required' => '手机号不能为空!',
'mobile.unique' => '手机号已存在!',
'password.required' => '密码不能为空!',
'password.min' => '密码长度不能小于6位',
'password.max' => '密码长度不能大于16位'
]);
$member = new Member;
if ($request->filled('username')) {
$member->username = $request->input('username');
}
if ($request->filled('nickname')) {
$member->nickname = $request->input('nickname');
}
if ($request->filled('avatar')) {
$member->avatar = $request->input('avatar');
}
if ($request->filled('email')) {
$member->email = $request->input('email');
}
if ($request->filled('gender')) {
$member->gender = $request->input('gender');
}
if ($request->filled('birthday')) {
$member->birthday = $request->input('birthday');
}
if ($request->filled('date_type')) {
$member->date_type = $request->input('date_type');
}
if ($request->filled('mobile')) {
$member->mobile = $request->input('mobile');
}
if ($request->filled('level_expire_time')) {
$member->level_expire_time = $request->input('level_expire_time');
}
if ($request->filled('password')) {
$member->password = $request->input('password');
}
if ($request->filled('status')) {
$member->status = $request->input('status');
}
$member->invite_uid = $request->input('invite_uid', '1890000001');
$member->pm_uid = $request->input('pm_uid', '1890000001');
$member->store_uid = $request->input('store_uid', '1890000001');
$member->level_id = $request->input('level_id', '1');
$member->save();
return $member;
}
/**
* @title 更新用户
*
* @param [type] $request
* @return void
*/
public function update($request){
$request->validate([
'username' => 'unique:member,username,'.$request->input('uid').',uid',
'mobile' => 'unique:member,mobile,'.$request->input('uid').',uid',
],[
'username.unique' => '用户名已存在!',
'mobile.unique' => '手机号已存在!',
]);
if ($request->filled('uid')) {
$members = Member::where('uid', $request->input('uid'))->first();
}
if ($request->is('api/*') && auth('api')->user()) {
$members = Member::where('uid', auth('api')->user()['uid'])->first();
}
if ($request->filled('username')) {
$members->username = $request->input('username');
}
if ($request->filled('nickname')) {
$members->nickname = $request->input('nickname');
}
if ($request->filled('avatar')) {
$members->avatar = $request->input('avatar');
}
if ($request->filled('email')) {
$members->email = $request->input('email');
}
if ($request->filled('gender')) {
$members->gender = $request->input('gender');
}
if ($request->filled('birthday')) {
$members->birthday = $request->input('birthday');
}
if ($request->filled('date_type')) {
$members->date_type = $request->input('date_type');
}
if ($request->filled('mobile')) {
$members->mobile = $request->input('mobile');
}
if ($request->filled('password')) {
$members->password = $request->input('password');
}
if ($request->filled('level_expire_time')) {
$members->level_expire_time = $request->input('level_expire_time');
}
$members->save();
MemberUpdate::dispatch($members);
return $members;
}
public function delete($request){
if(!$request->filled('uid')){
throw new \Exception("非法操作!", 1);
}
if (is_array($request->input('uid'))) {
// 批量删除
$mebers = Member::whereIn('uid', $request->input('uid'))->get();
if ($mebers->isEmpty()) {
throw new \Exception("会员不存在!", 1);
}
$member = Member::destroy(request()->input('uid'));
return $member;
}else{
// 单个删除
try {
$mebers = Member::findOrFail($request->input('uid'));
} catch (\Throwable $th) {
throw new \Exception("会员不存在!", 1);
}
$mebers->delete();
return $mebers;
}
}
public function updatePasswd($request){
$request->validate([
'password' => 'required|min:6|max:16'
], [
'password.required' => '密码不能为空!',
'password.min' => '密码长度不能小于6位',
'password.max' => '密码长度不能大于16位'
]);
if ($request->is('api/*')) {
$request->validate([
'old_password' => 'required',
'password' => 'confirmed'
], [
'old_password.required' => '旧密码不能为空!',
'password.confirmed' => '两次密码不一致!'
]);
}
if(!$request->filled('uid')){
throw new \Exception("非法操作!", 1);
}
try {
$mebers = Member::findOrFail($request->input('uid'));
} catch (\Throwable $th) {
throw new \Exception("会员不存在!", 1);
}
if(!$request->filled('password')){
throw new \Exception("密码不能为空!", 1);
}
$mebers->password = $request->input('password');
$mebers->save();
return $mebers;
}
public function import($request){
$file = $request->file('file');
if ($file->isValid()) {
$ext = $file->extension();
if (in_array($ext, ['csv', 'xlsx']) === false) {
throw new \Exception("请上传csv文件");
}
$path = $file->store('import/'.date('Ymd'), 'public');
$tasks = app()->tasks->create([
'title' => '会员数据导入',
'type' => 'import',
'file' => $path,
'params' => $request->except('file'),
'status' => 0,
]);
if ($tasks->id) {
\Modules\Member\Jobs\MemberImport::dispatch($path, $tasks);
}
}
}
public function export($request){
$tasks = app()->tasks->create([
'title' => '会员数据导出',
'type' => 'export',
'file' => 'export/' . $request->input('fileName', time().'xlsx'),
'status' => 0,
]);
if ($tasks->id) {
\Modules\Member\Jobs\MemberExport::dispatch($request->all(), $tasks);
}
}
}