Files
im/app/api/controller/UserController.php
T

267 lines
9.5 KiB
PHP
Raw Normal View History

2025-11-07 09:56:20 +08:00
<?php
namespace app\api\controller;
use Shopwwi\WebmanFilesystem\FilesystemFactory;
use Shopwwi\WebmanFilesystem\Facade\Storage;
use app\model\User as UserModel;
use app\model\Realname as RealnameModel;
use support\Request;
2025-12-24 16:59:05 +08:00
use support\Response;
2025-11-07 09:56:20 +08:00
use support\think\Db;
use hg\apidoc\annotation as Apidoc;
/**
* 用户相关
*/
class UserController extends BaseController{
/**
* 不需要鉴权的方法
* @var array
*/
public $noNeedAuth = ['*'];
/**
* 无需登录及鉴权的方法
* @var array
*/
public $noNeedLogin = [];
/**
* @Apidoc\Title("个人资料")
2026-02-27 13:53:53 +08:00
* @Apidoc\Method("GET","POST")
* @Apidoc\Tag("常用")
2025-11-07 09:56:20 +08:00
* @Apidoc\Desc("GET为获取用户信息,POST为修改数据")
* @Apidoc\Param("nickname", type="string",require=true, desc="昵称")
*/
2026-03-25 02:48:30 +08:00
public function profile()
{
2025-11-07 09:56:20 +08:00
$data = \support\Jwt::getUser();
if(Request()->method() == 'POST'){
$nickname = input('nickname');
2025-12-24 16:59:05 +08:00
$gender = input('gender',null);
$faceURL = input('faceURL',null);
$birth = input('birth',null);
2026-02-15 19:41:56 +08:00
$bio = input('bio',null);
2025-12-24 16:59:05 +08:00
$save_data =[];
if($nickname){
$save_data['nickname'] = $nickname;
}
2026-01-12 12:42:08 +08:00
if($gender!=null){
2025-12-24 16:59:05 +08:00
$save_data['sex'] = $gender;
}
if($faceURL){
2026-02-15 19:41:56 +08:00
$save_data['faceURL'] = $faceURL;
}
if($bio){
$save_data['bio'] = $bio;
2025-12-24 16:59:05 +08:00
}
if($birth){
$save_data['birthday'] = datetime($birth/1000,'Y-m-d');
}
if(!empty($save_data)){
\support\Jwt::getUser()->save($save_data);
2025-11-07 09:56:20 +08:00
}
return $this->success(__('successful'));
}
2026-03-25 02:48:30 +08:00
$data = \support\Jwt::getUserInfo($data);
2025-11-07 09:56:20 +08:00
$data= Hook('user.profile',$data);
return $this->success(__('successful'),$data[0]);
}
/**
* @Apidoc\Title("修改密码")
* @Apidoc\Method("POST")
* @Apidoc\Param("password", type="string",require=true, desc="旧密码")
* @Apidoc\Param("newpassword", type="string",require=true, desc="新密码")
* @Apidoc\Param("renewpassword", type="string",require=true, desc="新密码")
*/
public function change_password(){
$password = input('password');
$newpassword = input('newpassword');
$renewpassword = input('renewpassword');
if (!$password || !$newpassword || !$renewpassword) {
return $this->error(__('Invalid parameters'));
}
if ($newpassword !== $renewpassword) {
return $this->error(__('Invalid parameters'));
}
try{
\support\Jwt::changepwd($newpassword,$password);
return $this->success(__('Reset password successful'));
} catch (\Throwable $e) {
return $this->error($e->getMessage());
}
}
/**
* 修改交易密码
* @Apidoc\Method("POST")
* @Apidoc\Param("password", type="string",require=true, desc="旧密码(新设时可用为空)")
* @Apidoc\Param("newpassword", type="string",require=true, desc="新密码")
* @Apidoc\Param("renewpassword", type="string",require=true, desc="新密码")
*/
public function change_trade_password(){
$password = input('password');
$newpassword = input('newpassword');
$renewpassword = input('renewpassword');
if (!$newpassword || !$renewpassword || $newpassword !== $renewpassword) {
return $this->error(__('Invalid parameters'));
}
try{
\support\Jwt::change_trade_pwd($newpassword,$password);
return $this->success(__('Reset trade password successful'));
} catch (\Throwable $e) {
return $this->error($e->getMessage());
}
}
/**
* 根据关键字查询用户列表
* @Apidoc\Method("POST")
* @Apidoc\Param("kw", type="string",require=true, desc="关键字")
*/
function getuserlist(){
$kw = Input('kw');
$user_id = \support\Jwt\JwtToken::getCurrentId();
$list = [];
if($kw){
//$list = User::where('id','<>',\support\Jwt\JwtToken::getCurrentId())->whereLike('nickname|username|email','%'.$kw.'%')->limit(0,10)->order('id asc')->field('id,username')->select();
//$list = User::where('id','<>',\support\Jwt\JwtToken::getCurrentId())->whereLike('username','%'.$kw.'%')->limit(0,10)->order('id asc')->field('id,username,username as name')->select();
$list = UserModel::whereLike('username','%'.$kw.'%')->where('id','<>',$user_id)->limit(0,10)->order('id asc')->field('id,username,username as name')->select();
// foreach($list as $k=>$v){
// }
}
return $this->success(__('successful'),$list);
}
/**
* 头像上传
* @Apidoc\Method("POST")
* @Apidoc\Param("file", type="File", require=true, desc="文件")
*/
public function avatar(Request $request)
{
//单文件上传
2026-02-15 19:41:56 +08:00
$res = $this->_upload($request);
if(is_string($res)){
return $this->fail( $res);
2025-11-07 09:56:20 +08:00
}
2026-02-15 19:41:56 +08:00
$data = [
'avatar' => $res[0]['file_name'],
];
\support\Jwt::getUser()->save($data);
return $this->success(__('successful'),$data);
2025-11-07 09:56:20 +08:00
}
2026-03-25 02:48:30 +08:00
/**
* 设置个人banner
* @Apidoc\Method("POST")
* @Apidoc\Param("file", type="File", require=true, desc="文件")
*/
public function setBanner(Request $request)
{
$user_id = \support\Jwt\JwtToken::getCurrentId();
//单文件上传
$res = $this->_upload($request);
if(is_string($res)){
return $this->fail( $res);
}
$data = [
'profile_banner' => $res[0]['file_name'],
];
Db::name('user_extend')->where('user_id',$user_id)->save($data);
return $this->success(__('successful'),$data);
}
2025-12-24 16:59:05 +08:00
function realname(Request $request): Response
{
2025-11-07 09:56:20 +08:00
/**
* @var UserModel $user
*/
$user = \support\Jwt::getUser();
if($request->method() == 'POST'){
$data = [
'realname' => Input('realname'),
'idcard' => Input('idcard'),
'user_id' => $user->id,
];
if(!$data['realname'] || !$data['idcard']){
return $this->error(__('Incoret param'));
}
if($user->realname_verify == 1){
return $this->error(__('You have verified'));
}
if(RealnameModel::where('idcard',$data['idcard'])->where('user_id','<>',$user->id)->count()){
return $this->error(__('ID card already exists'));
}
Db::startTrans();
try {
RealnameModel::create($data);
$user->realname_verify = 1;
$user->save();
if($user->parent_id && cache('invite_'.$user->parent_id.'_'.date('Ymd')) < 1){
\app\model\User::currency1($user->parent_id,40,\app\enum\BalanceType::INVITE_NEW_USER);
cache('invite_'.$user->parent_id.'_'.date('Ymd'),1);
}
Db::commit();
return $this->success('ok',$user);
} catch (\Exception $e) {
Db::rollback();
return $this->error(__($e->getMessage()));
}
}else{
$user->realname = RealnameModel::where('user_id',$user->id)->find();
return $this->success('ok',$user);
}
}
2025-12-24 16:59:05 +08:00
/**
* find
* @Apidoc\Method("POST")
* @Apidoc\Param("userIDs", type="array", require=true, desc="userIDs")
*/
function find(Request $request): Response
{
2026-02-15 19:41:56 +08:00
$ids = Input('userIDs');
if(is_string($ids)){
$ids = explode(',',$ids);
}
2026-03-01 21:05:19 +08:00
//$userIDs = array_map('\support\Encrypt::userIDDecode',$ids);
2025-12-24 16:59:05 +08:00
//$res = $request->IM->user->getUsersInfo($userIDs);
2026-03-25 02:48:30 +08:00
$list = Db::name('user')->alias('u')
->leftJoin('user_extend ue','ue.user_id=u.id')
->field('u.*,ue.profile_banner')
->whereIn('u.userID',$ids)
2025-12-24 16:59:05 +08:00
->paginate(Input('limit',10));
$list->each(function($user){
2026-03-25 02:48:30 +08:00
$data = \support\Jwt::getUserInfo($user);
$data= Hook('user.profile',$data);
return $data[0];
2025-12-24 16:59:05 +08:00
//$user->hidden(['password']);
});
return $this->success('ok',$list);
}
/**
* search
* @Apidoc\Method("POST")
* @Apidoc\Param("keyword", type="string", require=true, desc="关键字")
* @Apidoc\Param("searchtype", type="string", require=true, desc="搜索类型")
*/
function search(Request $request): Response
{
$keyword = Input('keyword');
$searchtype = Input('searchtype');
2026-03-25 02:48:30 +08:00
$fields = 'u.userID,u.avatar,u.username,u.nickname,u.avatar,u.sex,u.email,u.mobile,u.birthday,u.bio,ue.profile_banner';
$model = Db::name('user')->alias('u')
->join('user_extend ue','ue.user_id=u.id')
->field($fields)
->where('status',1);
$model = $model->where('u.userID',$keyword);
2026-02-15 19:41:56 +08:00
// if($searchtype =='id'){
// $model = $model->where('id',$keyword);
// }else{
// $model = $model->whereLike('username|id','%'.$keyword.'%');
// }
2025-12-24 16:59:05 +08:00
$list = $model->paginate(Input('limit',10));
2026-02-15 19:41:56 +08:00
$list->each(function ($item){
2026-03-01 21:05:19 +08:00
$item['id'] = $item['userID'];
2026-02-15 19:41:56 +08:00
return $item;
});
2025-12-24 16:59:05 +08:00
return $this->success('ok',$list);
}
2025-11-07 09:56:20 +08:00
}