Files
xk-api-yii/member/modules/v1/controllers/UserController.php
2025-10-23 16:26:04 +08:00

287 lines
9.0 KiB
PHP

<?php
namespace member\modules\v1\controllers;
use common\core\BaseAppController;
use common\enums\ProductOrderEnum;
use common\models\oldDb\BaseConfig;
use common\models\oldDb\ProductOrder;
use common\models\oldDb\User;
use common\services\PlatformService;
use common\services\SmsService;
use common\services\WechatService;
use member\models\forms\LoginForm;
use member\models\forms\UpdatePassForm;
use yii\db\Exception;
/**
* @doc-module 用户端
*/
class UserController extends BaseAppController
{
public $optional = ['login', 'send-code', 'update-user-info', 'agreement'];
/**
* @doc-name 用户端登录注册
* @doc-param string mobile 手机号 / optional
* @doc-param string smsCode 验证码 / optional
* @doc-param string code 微信code / optional
* @doc-param int status 1微信登录3手机号登录4手机号注册5开发登录
* @doc-return string token token
* @doc-return mixed @StoreUser{*} 门店用户信息
* @doc-return mixed @User{*} 用户信息
* @doc-return string platform_token 平台token
*/
public function actionLogin()
{
$post = \Yii::$app->request->post();
$this->requestValidate($post, [
['status', 'required']
]);
$form = new LoginForm();
$form->attributes = $post;
return $form->userlogin();
}
/**
* 登录互联网医院平台
*/
public function actionLoginPlatform(){
$post = \Yii::$app->request->post();
return (new PlatformService())->userLogin($post);
}
/**
* @doc-name 用户授权
* @doc-param string iv iv加密算法的初始向量
* @doc-param string encryptedData 包括敏感数据在内的完整用户信息的加密数据
* @doc-return mixed User{*} 用户详情
*/
public function actionUpdateUserInfo()
{
$post = \Yii::$app->request->post();
$this->requestValidate($post, [
[['iv', 'encryptedData'], 'required']
]);
$user = \Yii::$app->user->identity;
$data = WechatService::getInstance()->app->encryptor->decryptData($user->session_key, $post['iv'], $post['encryptedData']);
$user->attributes = [
'nickname' => $data['nickName'],
'gender' => $data['gender'],
'country' => $data['country'],
'province' => $data['province'],
'city' => $data['city'],
'avatarurl' => $data['avatarUrl'],
'mobile' => $data['phoneNumber'] ?? '',
];
$user->saveOrFail();
return $user;
}
/**
* @doc-name 手机号授权
* @doc-param string iv iv加密算法的初始向量
* @doc-param string encryptedData 包括敏感数据在内的完整用户信息的加密数据
* @doc-return mixed User{*} 用户详情
*/
public function actionPhoneNumber()
{
$post = \Yii::$app->request->post();
$this->requestValidate($post, [
[['iv', 'encryptedData'], 'required'],
]);
$user = \Yii::$app->user->identity;
$data = WechatService::getInstance()->app->encryptor->decryptData($user->session_key, $post['iv'], $post['encryptedData']);
if(!$user->mobile){
$user->mobile = $data['phoneNumber'];
$user->saveOrFail();
// $response = (new Client(['http_errors' => false]))->post(\Yii::$app->params['platform']['url']."/platform/v1/sync/user", [
// 'headers' => ['Authorization' =>"Bearer ".\Yii::$app->params['platform']['token']],
// 'form_params' => [
// 'id' => $user->id,
// 'mobile' => $user->mobile,
// 'nickname' => '微信用户',
// 'avatarurl' => $user->avatarurl
// ],
// ]);
// $result = json_decode($response->getBody(),true);
// if ($result['errcode'] == -1) {
// throw new Exception($result['msg']);
// }
}
return[
'user'=>$user,
'plate_token'=>"Bearer ".\Yii::$app->params['platform']['token'],
];
}
/**
* @doc-name 用户信息
* @doc-return mixed @User{*} 用户详情
*/
public function actionInfo()
{
$get = \Yii::$app->request->post();
$user= \Yii::$app->user->identity;
$ProductOrder['unpay'] = ProductOrder::find()->where([
'user_id' => $user->getId(),
'store_id' => $get['store_id'] ?? 11001
])->andWhere([
'status' => ProductOrderEnum::UNPAY
])->count();
$ProductOrder['wait_send'] = ProductOrder::find()->where([
'user_id' => $user->getId(),
'store_id' => $get['store_id'] ?? 11001
])->andWhere([
'status' =>ProductOrderEnum::WAIT_SEND
])->count();
$ProductOrder['wait_accept'] = ProductOrder::find()->where([
'user_id' => $user->getId(),
'store_id' => $get['store_id'] ?? 11001
])->andWhere([
'status' => ProductOrderEnum::WAIT_ACCEPT
])->count();
if ($user->gender==1){
$user->gender='男';
}elseif ($user->gender==2){
$user->gender='女';
}else{
$user->gender='未知';
}
return [
'user' => $user,
'sex' => $user->gender,
'ProductOrder'=>$ProductOrder
];
}
/**
* @doc-name 编辑信息
* @doc-param string nickname 昵称 / optional
* @doc-param string mobile 电话 / optional
* @doc-param string gender 性别0默认1男2女 / optional
* @doc-param string country 国家 / optional
* @doc-param string province 省 / optional
* @doc-param string city 市 / optional
* @doc-param string avatarurl 头像 / optional
* @doc-param string idcard 身份证 / optional
* @doc-param int age 年龄 / optional
**/
public function actionEditInfo()
{
$post = \Yii::$app->request->post();
$user = User::find()->where([
'id' => \Yii::$app->user->id
])->one();
if (!$user) throw new Exception('用户不存在');
$user->nickname=$post['nickname']??$user->nickname;
$user->mobile=$post['mobile']??$user->mobile;
$user->gender=$post['gender']??$user->gender;
$user->country=$post['country']??$user->country;
$user->province=$post['province']??$user->province;
$user->city=$post['city']??$user->city;
$user->avatarurl=$post['avatarurl']??$user->avatarurl;
$user->idcard=$post['idcard']??$user->idcard;
$user->age=$post['age']??$user->age;
$user->saveOrFail();
return ['编辑成功'];
}
/**
* @doc-name 修改密码
* @doc-param string old_pass 旧密码
* @doc-param string new_pass 新密码
*/
public function actionUpdatePassword()
{
$form = new UpdatePassForm();
$form->attributes = \Yii::$app->request->post();
return $form->updatePassword();
}
/**
* @doc-name 退出登录
* @doc-param string token token
*/
public function actionLogout()
{
$post = \Yii::$app->request->post();
$this->requestValidate($post, [
[['token'], 'required'],
]);
$user = User::find()->where([
'id' => \Yii::$app->user->identity->getId(),
'token' => $post['token'],
])->one();
if (!$user) throw new Exception('账号不存在');
User::updateAll(['token' => ''], ['id' => \Yii::$app->user->identity->getId(), 'token' => $post['token']]);
}
/**
* @doc-name 手机号登录发送短信
* @doc-param string mobile 手机号码
* @doc-return string smsCode 验证码
*/
public function actionSendCode()
{
$code = (string)mt_rand(100000, 999999);
$post = \Yii::$app->request->post();
$this->requestValidate($post, [
['mobile', 'required']
]);
$message=[
'content' => '您的验证码为:" ' .$code. ' ",请勿泄露与他人',
'template' => 'SMS_274460204',
'data' => [
'code' => $code
]
];
$cache = \Yii::$app->cache;
$cache->set( 'login_sms_code_'.$post['mobile'], $code, 600);
$cache->set( 'login_sms_time_'.$post['mobile'], time(), 600);
$response = (new SmsService())->sendCaptcha($post['mobile'], $code);
return [$response];
}
/**
* @doc-name 协议
* @doc-param int end 1用户端2服务端
* @doc-return mixed @BaseConfig{*} 信息
*/
public function actionAgreement()
{
$post = \Yii::$app->request->post();
$this->requestValidate($post, [
['end', 'required']
]);
$BaseConfig = BaseConfig::find()->where([
'end' => $post['end'],
// 'store_id' => $post['store_id'],
'status' => 0
])->andWhere(['type' => [1, 2]])->select(['type', 'content', 'change_at'])->all();
return $BaseConfig;
}
}