// +---------------------------------------------------------------------- namespace App\Services\Common; use App\Http\Validator\MemberValidator; use App\Models\MemberModel; use App\Models\UserModel; use App\Services\BaseService; use App\Services\ConfigService; use App\Services\EmailService; use App\Services\SmsService; use App\Services\UsdtWalletService; use Earnp\GoogleAuthenticator\GoogleAuthenticator; /** * 用户管理-服务类 * @author laravel开发员 * @since 2020/11/11 * Class UserService * @package App\Services\Common */ class UserService extends BaseService { /** * 构造函数 * @author laravel开发员 * @since 2020/11/11 * UserService constructor. */ public function __construct() { $this->model = new UserModel(); $this->memberModel = new MemberModel(); } /** * 获取用户列表 * @return array * @since 2020/11/11 * @author laravel开发员 */ public function getList() { $param = request()->all(); // 查询条件 $map = []; // 用户账号 $username = getter($param, "username"); if ($username) { $map[] = ["username", 'like', "%{$username}%"]; } // 用户姓名 $realname = getter($param, "realname"); if ($realname) { $map[] = ['realname', 'like', "%{$realname}%"]; } // 用户性别 $gender = getter($param, "gender"); if ($gender) { $map[] = ['gender', '=', $gender]; } // 用户类型 $userType = getter($param, "user_type"); if ($userType) { $map[] = ['user_type', '=', $userType]; } return parent::getList($map); // TODO: Change the autogenerated stub } /** * 添加或编辑用户 * @return array * @since 2020/11/11 * @author laravel开发员 */ public function edit() { // 请求参数 $data = request()->all(); // 用户名 $username = trim($data['username']); // 密码 $password = trim($data['password']); // 添加时设置密码 if (empty($data['id'])) { $data['password'] = get_password($password . md5($password.'otc')); // 用户名重复性验证 $count = $this->model ->where("username", '=', $username) ->where("mark", "=", 1) ->count(); if ($count > 0) { return returnJson("系统中已存在相同的用户名", false); } } else { if($password){ $data['password'] = get_password($password . md5($password.'otc')); } // 用户名重复性验证 $count = $this->model ->where("username", '=', $username) ->where("id", "<>", $data['id']) ->where("mark", "=", 1) ->count(); if ($count > 0) { return returnJson("系统中已存在相同的用户名", false); } // 币商会员账号验证 if($data['user_type'] == 2){ // 用户名重复性验证 $count = $this->memberModel ->where("username", '=', $username) ->where("id", "<>", $data['user_id']) ->where("mark", "=", 1) ->count(); if ($count > 0) { return returnJson("系统中已存在相同的会员账号", false); } } } // 头像处理 $adminId = isset($data['id'])? $data['id'] : 0; $avatar = isset($data['avatar']) ? trim($data['avatar']) : ''; if (strpos($avatar, "temp")) { $data['avatar'] = save_image($avatar, 'user'); } else { $data['avatar'] = str_replace(IMG_URL, "", $data['avatar']); } $error = ""; $data['birthday'] = isset($data['birthday'])? $data['birthday'] : '000-00-00'; $data['bond'] = isset($data['bond'])? $data['bond'] : '0'; $data['create_time'] = isset($data['create_time'])? $data['create_time'] : time(); // 谷歌验证码 if(empty($adminId) || empty($data['google_secret'])){ $google = GoogleAuthenticator::CreateSecret(); $data['google_secret'] = isset($google['secret'])? $google['secret'] : ''; } $this->model->startTrans(); $result = $this->model->edit($data, $error); if (!$result) { $this->model->rollBack(); return returnJson($error, false); } // 删除已存在的用户角色关系数据 $userRoleService = new UserRoleService(); $userRoleService->deleteUserRole($result); // 插入用户角色关系数据 $userRoleService->insertUserRole($result, $data['role_ids']); // 新建币商会员账号 $userId = isset($data['user_id'])? $data['user_id'] : 0; $ppassword = '123456'; $data = [ 'username'=> $username, 'realname'=> isset($data['realname'])? $data['realname'] : '', 'gender'=> isset($data['gender'])? $data['gender'] : 0, 'user_type'=> 2, 'mark'=> 1, 'status'=> 1, ]; // 生成trc2.0钱包地址 if(!$userId){ $data['password'] = get_password($ppassword . md5($ppassword.'otc')); $trcAddress = UsdtWalletService::make()->getTrxAddress(); if($trcAddress){ $data['trc_wif'] = isset($trcAddress['wif'])? $trcAddress['wif'] : ''; $data['trc_hexaddress'] = isset($trcAddress['hexAddress'])? $trcAddress['hexAddress'] : ''; $data['trc_address'] = isset($trcAddress['address'])? $trcAddress['address'] : ''; }else{ $this->model->rollBack(); return returnJson('生成TRC钱包地址失败', false); } // 生erc2.0钱包地址 $ercAddress = UsdtWalletService::make()->getErcAddress(); if($trcAddress){ $data['erc_wif'] = isset($ercAddress['wif'])? $ercAddress['wif'] : ''; $data['erc_hexaddress'] = isset($ercAddress['hexAddress'])? $ercAddress['hexAddress'] : ''; $data['erc_address'] = isset($ercAddress['address'])? $ercAddress['address'] : ''; }else{ $this->model->rollBack(); return returnJson('生成ERC钱包地址失败', false); } } $info = $this->memberModel->getInfo($userId); if($info){ if(!$this->memberModel->where(['id'=> $userId])->update($data)){ $this->model->rollBack(); return returnJson('修改交易员信息失败', false); } $this->model->commit(); $this->model->where(['id'=> $adminId])->update(['user_id'=> $userId]); }else{ if(!$userId = $this->memberModel->edit($data)){ $this->model->rollBack(); return returnJson($userId? '修改交易员信息失败':'创建交易员账号失败', false); } $this->model->commit(); // 更新绑定会员账号 $this->model->where(['id'=> $result])->update(['user_id'=> $userId]); // 用户交易配置 MemberSettingService::make()->getInfo($userId); } return returnJson(); } /** * 获取用户信息 * @param $userId 用户ID * @return array * @author laravel开发员 * @since 2020/11/10 */ public function getUserInfo($userId) { $userInfo = $this->model->getInfo($userId); $userInfo['roles'] = []; $userInfo['authorities'] = []; // 权限节点列表 $menuService = new MenuService(); $permissionList = $menuService->getPermissionsList($userId); $userInfo['permissionList'] = $permissionList; return returnJson("操作成功", true, $userInfo); } /** * 更新个人资料 * @author laravel开发员 * @since 2020/11/11 */ public function updateUserInfo($userId) { // 参数 $param = request()->all(); // 个人信息 $data = [ 'id' => $userId, 'realname' => $param['realname'], 'nickname' => $param['nickname'], 'gender' => $param['gender'], 'mobile' => $param['mobile'], 'email' => $param['email'], 'intro' => $param['intro'], ]; // 头像处理 $avatar = isset($param['avatar']) ? $param['avatar'] : ""; if (strpos($avatar, "data:image") !== false) { $expData = explode(';', $avatar); $fileInfo = explode('/', $expData[0]); $fileExt = $fileInfo[1] == 'jpeg' ? 'jpg' : $fileInfo[1]; // 文件存储路径 $filePath = create_image_path("user", $fileExt); // 获取图片流 $item = explode(',', $avatar); file_put_contents(ATTACHMENT_PATH . $filePath, base64_decode($item[1])); $data['avatar'] = $filePath; } else { $data['avatar'] = str_replace(IMG_URL, "", $param['avatar']); } $result = $this->model->edit($data); if (!$result) { return returnJson("更新资料信息失败", false); } return returnJson("更新资料信息成功"); } /** * 更新密码 * @param $userId 用户ID * @return array * @author laravel开发员 * @since 2020/11/14 */ public function updatePwd($userId) { // 获取参数 $param = request()->all(); // 原始密码 $oldPassword = trim(getter($param, "oldPassword")); if (!$oldPassword) { return returnJson("旧密码不能为空", false); } // 新密码 $newPassword = trim(getter($param, "newPassword")); if (!$newPassword) { return returnJson("新密码不能为空", false); } $userInfo = $this->model->getInfo($userId); if (!$userInfo) { return returnJson("用户信息不存在", false); } if ($userInfo['password'] != get_password($oldPassword . md5($oldPassword.'otc'))) { return returnJson("旧密码输入不正确", false); } // 设置新密码 $userInfo['password'] = get_password($newPassword . md5($newPassword.'otc')); $result = $this->model->edit($userInfo); if (!$result) { return returnJson("修改失败", false); } return returnJson("修改成功"); } /** * 更新交易密码 * @param $userId 用户ID * @param $adminId 管理ID * @return array * @author laravel开发员 * @since 2020/11/14 */ public function updateTradePwd($userId, $adminId) { // 获取参数 $param = request()->all(); // 原始密码 $loginPassword = trim(getter($param, "loginPassword")); if (!$loginPassword) { return returnJson("登录密码不能为空", false); } // 新密码 $newPassword = trim(getter($param, "newPassword")); if (!$newPassword) { return returnJson("新密码不能为空", false); } $userInfo = $this->model->getInfo($adminId); $memberInfo = MemberService::make()->getInfo($userId); if (!$userInfo || empty($memberInfo)) { return returnJson("用户信息不存在", false); } if ($userInfo['password'] != get_password($loginPassword . md5($loginPassword.'otc'))) { return returnJson("登录密码输入不正确", false); } // 设置新密码 $password = get_password($newPassword . md5($newPassword.'otc')); $result = $this->memberModel->where(['id'=> $userId])->update(['trade_password'=> $password]); if (!$result) { return returnJson("交易密码更新设置失败", false); } return returnJson("交易密码更新设置成功"); } /** * 更新谷歌验证码 * @param $userId 用户ID * @return array */ public function updateGoogle($userId) { // 获取参数 $param = request()->all(); // 验证码 $code = trim(getter($param, "code")); $username = trim(getter($param, "username")); if(empty($username)){ return returnJson("账号参数错误", false); } if (!$code) { return returnJson("验证码不能为空", false); } // 验证码 $validator = new MemberValidator(); if(!is_array($validator->check(['mobile'=> $username],'mobile'))){ if(!EmailService::make()->check($username, $code, 'google')){ return returnJson(EmailService::make()->getError(), false); } }else{ if(!SmsService::make()->check($username, $code, 'google')){ return returnJson(SmsService::make()->getError(), false); } } // $googleCode = trim(getter($param, "google_code")); if (!$googleCode) { return returnJson("谷歌验证码不能为空", false); } $userInfo = $this->model->getInfo($userId); if (!$userInfo) { return returnJson("用户信息不存在", false); } // 谷歌验证码 $googleSecret = isset($userInfo['google_secret'])? $userInfo['google_secret'] : ''; if(empty($googleSecret)){ return returnJson("您尚未绑定谷歌验证码", false); } if (!GoogleAuthenticator::CheckCode($googleSecret, $googleCode)) { return returnJson("谷歌验证码错误", false); } // 设置新谷歌验证码 $google = GoogleAuthenticator::CreateSecret(); $googleSecret = isset($google['secret'])? $google['secret'] : ''; $googleLimitTime = ConfigService::make()->getConfigByCode('google_limit_time'); $googleLimitTime = $googleLimitTime>0? $googleLimitTime : 1; $result = $this->model->where(['id'=> $userId])->update(['google_secret'=> $googleSecret,'google_verify_time'=> time() + $googleLimitTime*3600]); if (!$result) { return returnJson("谷歌验证码更新设置失败", false); } return returnJson("谷歌验证码更新设置成功"); } /** * 重置密码 * @return array * @since 2020/11/14 * @author laravel开发员 */ public function resetPwd() { // 获取参数 $param = request()->all(); // 用户ID $userId = getter($param, "id"); if (!$userId) { return returnJson("用户ID不能为空", false); } $userInfo = $this->model->getInfo($userId); if (!$userInfo) { return returnJson("用户信息不存在", false); } // 设置新密码 $userInfo['password'] = get_password("123456" . md5('123456'.'otc')); $result = $this->model->edit($userInfo); if (!$result) { return returnJson("重置密码失败", false); } return returnJson("重置密码成功"); } }