course/app/common/service/StudentService.php
2024-07-27 10:35:57 +08:00

162 lines
5.1 KiB
PHP

<?php
namespace app\common\service;
use app\api\controller\WechatSubscriptController;
use app\common\model\Student;
use app\common\model\StudentParent;
use app\constant\ResponseCode;
use think\Exception;
use Tinywan\Jwt\JwtToken;
class StudentService
{
/**
* @desc 登录
* @param $request
* @return array
*/
public function login($request)
{
try {
if (empty($request['password'])) {
throw new Exception('请填写密码');
}
$student = Student::where(['account' => $request['account']])->findOrEmpty();
if (!$student->isEmpty()) {
if (md5($request['password'] . $student->salt) != $student->password) {
throw new Exception('密码错误,请填写正确的密码');
}
$token_data = [
'id' => $student->id,
'role' => 'student'
];
$token = JwtToken::generateToken($token_data);
return [
'code' => ResponseCode::SUCCESS,
'data' => $token,
'msg' => 'success'
];
}else{
$parent = StudentParent::where(['account' => $request['account']])->findOrEmpty();
if(!$parent->isEmpty()){
if (md5($request['password'] . $parent->salt) != $parent->password) {
throw new Exception('密码错误,请填写正确的密码');
}
$token_data = [
'id' => $parent->id,
'role' => 'parent'
];
$token = JwtToken::generateToken($token_data);
return [
'code' => ResponseCode::SUCCESS,
'data' => $token,
'msg' => 'success'
];
}
}
throw new Exception('请检查账号信息,未匹配到任何学生或家长');
} catch (Exception $e) {
return [
'code' => ResponseCode::FAIL,
'msg' => $e->getMessage()
];
}
}
/**
* @desc 登录
* @param $request
* @return array
*/
public function userInfo($request)
{
try {
if (empty((array)$request->student) && empty((array)$request->parent)) {
throw new Exception('请登陆后再查看');
}
if(!empty((array)$request->student)){
$student = Student::where(['id' => $request->student->id])->field('id,student_name,account,openid,avatar')->findOrEmpty();
if ($student->isEmpty()) {
throw new Exception('未找到学生信息');
}
$info = $student->toArray();
$info['role'] = 'student';
}elseif (!empty((array)$request->parent)){
$parent = StudentParent::where(['id' => $request->parent->id])->field('id,parent_name,account,openid,avatar')->findOrEmpty();
if ($parent->isEmpty()) {
throw new Exception('未找到家长信息');
}
$info = $parent->toArray();
$info['role'] = 'parent';
}
return [
'code' => ResponseCode::SUCCESS,
'data' => $info,
'msg' => 'success'
];
} catch (Exception $e) {
return [
'code' => ResponseCode::FAIL,
'msg' => $e->getMessage()
];
}
}
/**
* @desc 更新code
* @param $request
* @return array|void
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function updateOpenid($request)
{
try {
if(empty($request->student)){
throw new Exception('请先教师登陆');
}
$teacher = Student::where(['id' => $request->student->id])->findOrEmpty();
if($teacher->isEmpty()){
throw new Exception('未找到教师信息');
}
$code = $request->post('code');
$user_info = WechatSubscriptController::getCodeAccessToken($code);
if (isset($result['code'])) {
throw new Exception('获取信息失败');
}
$openid = $user_info['openid'];
$student = Student::where(['id'=>$request->student->id])->findOrEmpty();
if($student->openid && $student->openid != $openid){
throw new Exception('当前账号已绑定其它学生,不能重复绑定');
}else{
$student->save([
'openid' => $openid,
]);
}
return [
'code' => ResponseCode::SUCCESS,
'msg' => 'success'
];
}catch (Exception $e){
return [
'code' => ResponseCode::FAIL,
'msg' => $e->getMessage()
];
}
}
}