Commit afbf1ecc by 白满斌

init

parent 3a67fc99
......@@ -12,7 +12,5 @@ gitMergeTest.sh
/public/*.jpeg
.env
.env.example
土特产数据导入/
土特产图片/
/public/storage
......@@ -19,156 +19,5 @@ class AddressController extends BaseController{
$data = $service->getPAndCDataService();
return $this->respond($data);
}
// 用户管理:设置用户地区数据用
public function getAreaListCity(){
$service = new AddrService();
$data = $service->getListCityService();
// 数据处理:顶部增加 全国,area_code 100000
$data['data'] = array_merge([['name'=>'全国','area_code'=>100000,'p_code'=>1,]], $data['data']);
return $this->respond($data);
}
// 订单列表,筛选下拉框用
public function getAreaListCityUser(Request $request){
$userInfo = $request->attributes->get('user_info');
$is_admin = $userInfo['is_admin'];// 超管
$service = new AddrService();
if($is_admin || strpos(','.$userInfo['area_pro_name'].',', ',全国,' ) !== false){
// 超管或者 有全国权限
$data = $service->getListCityService();
return $this->respond($data);
}else{
$area_pro = $userInfo['area_pro'];
$data = $service->getListCityUserService($area_pro );
return $this->respond($data);
}
}
//添加收货地址
public function add(Request $request){
$userid = $request->attributes->get('user_info')['id'];
$phone_code = $request->post('code', "+86");
$phone = $request->post('phone', "");
$person = $request->post('name', "");
$country = $request->post('country', 1);
$country_name = $request->post('country_name', '中国');
$p_code = $request->post('p', 0);
$p_name = $request->post('p_n', 0);
$c_code = $request->post('c', 0);
$c_name = $request->post('c_n', 0);
$area_code = $request->post('a', 0);
$area_name = $request->post('a_n', 0);
$t_code = $request->post('t', 0);
$t_name = $request->post('t_n', 0);
$address = $request->post('addr', "");
$isDefault = $request->post('is_default', "0"); // 1设置为默认
//$userid = $request->get('def', 0);
// $userid = $request->get('area_code', "");
if(empty($userid) || empty($phone)|| empty($person)|| empty($address)
|| empty($p_name)|| empty($c_name) || empty($area_name) || empty($country_name)){
return $this->respondError(10001, '参数异常');
}
if(empty($phone) || false == checkPhone($phone)){
return $this->respondError(10002, '手机号不正确');
}
if (mb_strlen($person) > 32){ //密码复杂度等后面再加,
return $this->respondError(10001, '名字不能超过32个字符');
}
if (mb_strlen($address) > 100){ //密码复杂度等后面再加,
return $this->respondError(10001, '详细地址不能超过100个字符');
}
$service = new AddrService();
$data = $service->addAddr($userid,$phone_code,$phone,$person,$country,$country_name,
$p_code,$p_name,$c_code,$c_name,$area_code,$area_name,$t_code,$t_name,$address, $isDefault);
return response()->json($data);
}
//添加收货地址
public function edit(Request $request){
$userid = $request->attributes->get('user_info')['id'];
$id = $request->post('id', "0");
$phone_code = $request->post('code', "+86");
$phone = $request->post('phone', "");
$person = $request->post('name', "");
$country = $request->post('country', 1);
$country_name = $request->post('country_name', '中国');
$p_code = $request->post('p', 0);
$p_name = $request->post('p_n', 0);
$c_code = $request->post('c', 0);
$c_name = $request->post('c_n', 0);
$area_code = $request->post('a', 0);
$area_name = $request->post('a_n', 0);
$t_code = $request->post('t', 0);
$t_name = $request->post('t_n', 0);
$address = $request->post('addr', "");
$isDefault = $request->post('is_default', "0"); // 1设置为默认
//$userid = $request->get('def', 0);
// $userid = $request->get('area_code', "");
if(empty($id) ||empty($userid) || empty($phone)|| empty($person)|| empty($address)
|| empty($p_name)|| empty($c_name) || empty($area_name) || empty($country_name)){
return $this->respondError(10001, '参数异常');
}
if(empty($phone) || false == checkPhone($phone)){
return $this->respondError(10002, '手机号不正确');
}
if (mb_strlen($person) > 32){ //密码复杂度等后面再加,
return $this->respondError(10001, '名字不能超过32个字符');
}
if (mb_strlen($address) > 100){ //密码复杂度等后面再加,
return $this->respondError(10001, '详细地址不能超过100个字符');
}
$service = new AddrService();
$data = $service->editAddr($id,$userid,$phone_code,$phone,$person,$country,$country_name,
$p_code,$p_name,$c_code,$c_name,$area_code,$area_name,$t_code,$t_name,$address, $isDefault);
return response()->json($data);
}
//获取收货地址
public function lst(Request $request){
$userid = $request->attributes->get('user_info')['id'];
if(empty($userid)){
return $this->respondError(10001, '参数异常');
}
$service = new AddrService();
$data = $service->getAddr($userid);
return response()->json($data);
}
//删除收货地址
public function del(Request $request){
$userid = $request->attributes->get('user_info')['id'];
$id = $request->get('id', 0);
if($id<=0){
return $this->respondError(10001, '参数异常');
}
$service = new AddrService();
$data = $service->delAddr($userid,$id);
return response()->json($data);
}
//设置为默认收货地址
public function set(Request $request){
$userid = $request->attributes->get('user_info')['id'];
$id = $request->get('id', 0);
if($id<=0){
return $this->respondError(10001, '参数异常');
}
$service = new AddrService();
$data = $service->setAddr($userid,$id);
return response()->json($data);
}
}
\ No newline at end of file
......@@ -22,6 +22,37 @@ class LoginController extends BaseController
}
//小程序登录
public function getWxLogin(Request $request){
$code = $request->get('js_code', ""); //
$platform = $request->get('platform', ""); //
if(empty($code)){
return $this->respondError(10001, 'js_code码异常');
}
$data = $this->loginService->getWxLoginService($code, $platform);
return $this->respond($data);
}
public function getWxPhone(Request $request){
$code = $request->get('code', ""); //
$openid = $request->get('openid', ""); //
$nickName = $request->get('nick_name', ""); //
$platform = $request->get('platform', ""); //
if(empty($code)){
return $this->respondError(10001, 'code码异常');
}
if(empty($openid)){
return $this->respondError(10001, 'opneid码异常');
}
// if(empty($nickName)){
// return $this->respondError(10001, '昵称不能为空');
// }
$data = $this->loginService->getWxPhoneService($code , $openid, $platform, $nickName);
return $this->respond($data);
}
/**
* 登录
* @param Request $request
......
......@@ -18,11 +18,26 @@ class SchoolController extends BaseController{
$this->schoolService = new SchoolService();
}
public function selectExam(Request $request){
$result = $this->schoolService->selectExamService();
return $this->respond($result);
}
public function getConfig(Request $request){
$result = $this->schoolService->selectConfigService();
$examid = (int)$request->input('exam_id', 0);
$result = $this->schoolService->selectConfigService($examid);
return $this->respond($result);
}
//获取考点列表
public function getPlaceInfo(Request $request){
$placeid = (int)$request->input('place_id', 0);
$result = $this->schoolService->getPlaceInfoService($placeid);
return $this->respond($result);
}
//列表
public function lst(Request $request) {
$search['name'] = $request->input('name', "");
......
......@@ -45,10 +45,16 @@ class VerifyTokenMiddleware
$result['msg'] = '非法请求';
return response()->json($result);
}
$type = $platform == 'web' ? 1 : 2;
if($type == 1){
$userModel = new AdminUserModel();
}else{
$userModel = new FrontUserModel();
}
$debug = $request->input('debug', '');
if ($debug == 'yihuoapi.eoffcn.com.debug') {
if ($debug == 'tj_debug') {
// debug模式快速传参定位问题
$inputUserId = $request->input('id', 1);
$userInfo = $userModel->findDataWithField(['id' => $inputUserId]);
......@@ -70,7 +76,6 @@ class VerifyTokenMiddleware
return response()->json(['code' => 50001, 'msg' => '请先登录~']);
}
$type = $platform == 'web' ? 1 : 2;
$LoginCacheModel = new LoginCacheModel();
$ret = $LoginCacheModel->findData(['uid'=>$verifyRet->id, 'type'=>$type]);
......
......@@ -15,6 +15,7 @@ use App\Models\StudentEval;
use App\Models\FrontUserModel;
use App\Models\LoginCacheModel;
use App\Models\StudentConsult;
use App\Models\WxTokenModel;
use Illuminate\Support\Facades\Http;
use setasign\Fpdi\Fpdi;
use FPDF;
......@@ -27,6 +28,174 @@ class LoginService
const CAPTCHA_EXPIRE = 300;
// 用户名正则校验规则, 字母数字下划线至少存在其中的两种, 长度6-20
protected $userAccountNamePattern = '/^(?=.*[a-zA-Z])(?=.*[\d_])[\w]{6,20}$/';
public static $wx_access_token_url = 'https://api.weixin.qq.com/cgi-bin/token?';
public static $wx_code2session_url = 'https://api.weixin.qq.com/sns/jscode2session?';
public static $wx_get_phone = 'https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=';
public static $send_msg = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=';
public static $send_msg_template_id = 'GLlVWOELj1u3M6FMtd5bTAsYVfuVwr3ZW3uLo5hv2e0';
public static function sendGetRequest($url)
{
$response = Http::get($url);
// 你可以从响应中获取内容
$bodyData = json_decode($response->body(), true);
if(isset($bodyData['errcode']) && $bodyData['errcode'] != 0){
return ['code' => 50001, 'msg' => '授权异常,未获取到openid', 'data' => $bodyData];
}
return ['code' => 0, 'msg' => 'success', 'data' =>$bodyData];
}
public function sendWXPostRequest($url, $data)
{
$response = Http::withHeaders([
'Content-Type' => 'application/json',
])->post($url, $data);
$bodyData = $response->json(); // 如果响应是 JSON 格式,解析为数组或对象
if(isset($bodyData['errcode']) && $bodyData['errcode'] != 0){
return ['code' => 50001, 'msg' => $bodyData['errmsg'], 'data' => $bodyData];
}
return ['code' => 0, 'msg' => 'success', 'data' =>$bodyData['phone_info']];
}
public function sendWXPostRequestForMSg($url, $data)
{
$response = Http::withHeaders([
'Content-Type' => 'application/json',
])->post($url, $data);
$bodyData = $response->json(); // 如果响应是 JSON 格式,解析为数组或对象
if(isset($bodyData['errcode']) && $bodyData['errcode'] != 0){
return ['code' => 50001, 'msg' => $bodyData['errmsg'], 'data' => $bodyData];
}
return ['code' => 0, 'msg' => 'success', 'data' =>$bodyData];
}
protected static function getWXAccessTokenService(){
try {
$wxTokenModel = new WxTokenModel();
$accessTokenRet = $wxTokenModel->findData([], 'id', 'DESC');
if(!empty($accessTokenRet)){
$time = time();
$cacheTime = strtotime($accessTokenRet['created_at']);
if($time - $cacheTime <= 7000){
return ['code' => 0, 'msg' => 'success', 'data' => ['access_token' => $accessTokenRet['auth']]];
}
}
//获取微信配置
$appid = env('WX_APP_ID');
$appSecret = env('WX_APP_SECRET');
if(empty($appid) || empty($appSecret)){
return ['code' => 50001, 'msg' => '系统异常,配置未获取到', 'data' => []];
}
$reqUrl = self::$wx_access_token_url.'grant_type=client_credential&appid='.$appid . '&secret='.$appSecret;
$apiServiceRet = self::sendGetRequest($reqUrl);
if($apiServiceRet['code'] != 0){
return $apiServiceRet;
}
$token = $apiServiceRet['data']['access_token'];
$wxTokenModel->insertData(['auth'=>$token]);
return ['code' => 0, 'msg' => 'success', 'data' => ['access_token' => $token]];
} catch (\Exception $e) {
Log::channel('errorlog')->error("getWXAccessTokenService: " . $e->getMessage());
return ['code' => 50001, 'msg' => '系统异常', 'data' => []];
}
}
public function loginAppletHandle($openid, $platform, $phone = "", $userName = "") {
$where = [
'openid'=>$openid,
];
$frontUserModel = new FrontUserModel();
$findRetdata = $frontUserModel->findData($where);
if (empty($findRetdata)){
$insertUser = [
'openid' => $openid,
'user_name' => $userName,
'phone' => $phone,
];
$userId= $frontUserModel->insertData($insertUser);
}else{
$userId =$findRetdata['id'];
$phone = $findRetdata['phone'];
$userName = $findRetdata['user_name'];
}
$isNeedAuth = 0;
// if(empty($phone)){
// $isNeedAuth = 1;
// }
//生成auth
$info = [
'id' => $userId,
'phone' => $phone,
'platform' => $platform,
];
$auth = JwtService::createToken($info, $platform);
$insert = [
'auth' => $auth,
'uid' => $userId,
'type' => 2,
];
$LoginCacheModel = new LoginCacheModel();
$LoginCacheModel->insertData($insert);
return ['code'=>0, 'msg'=>'success','data'=>['Authorization'=>$auth, 'phone'=>$phone,'user_name'=>$userName, 'openid'=>$openid,
'isNeedAuth'=> $isNeedAuth, 'info'=>$info]];
}
//小程序登录
public function getWxLoginService($code, $platform){
try {
$appid = env('WX_APP_ID');
$appSecret = env('WX_APP_SECRET');
if(empty($appid) || empty($appSecret)){
return ['code' => 50001, 'msg' => '系统异常,配置未获取到', 'data' => []];
}
$param = 'appid='.$appid.'&secret='.$appSecret.'&js_code='.$code.'&grant_type=authoriza';
$reqUrl = self::$wx_code2session_url.$param;
$apiServiceRet = self::sendGetRequest($reqUrl);
if($apiServiceRet['code'] != 0){
return $apiServiceRet;
}
if($apiServiceRet['code'] != 0){
return $apiServiceRet;
}
//获取用户信息
$loginRet = $this->loginAppletHandle($apiServiceRet['data']['openid'], $platform);
if($loginRet['code'] != 0){
return $loginRet;
}
return ['code' => 0, 'msg' => 'success', 'data' =>$loginRet['data']];
} catch (\Exception $e) {
return ['code' => 50001, 'msg' => '系统异常', 'data' => ['msg' => "registerService: " . $e->getMessage()]];
}
}
public function loginHandle($phone, $passwd, $platform) {
......@@ -63,6 +232,83 @@ class LoginService
}
public function getWxPhoneService($code, $openid, $platform, $nickName = ""){
try {
$accessTokenRet = self::getWXAccessTokenService();
if($accessTokenRet['code'] != 0){
return $accessTokenRet;
}
$param = [
'code' => $code,
'openid' => $openid,
];
$reqUrl = self::$wx_get_phone.$accessTokenRet['data']['access_token'];
$apiServiceRet = self::sendWXPostRequest($reqUrl, $param);
if($apiServiceRet['code'] != 0){
return $apiServiceRet;
}
$phoneInfo = $apiServiceRet['data'];
//如果走到这一步,那就需要注册用户并登录
$authRet = $this->loginAppletHandleForGetPhone($openid, $platform, $phoneInfo['purePhoneNumber'], $nickName);
if($authRet['code'] != 0){
return $authRet;
}
return ['code' => 0, 'msg' => 'success', 'data' =>$authRet['data']];
} catch (\Exception $e) {
Log::channel('errorlog')->error("registerService: " . $e->getMessage());
return ['code' => 50001, 'msg' => '系统异常', 'data' => [$e->getMessage()]];
}
}
public function loginAppletHandleForGetPhone($openid, $platform, $phone, $userName ) {
$where = [
'openid'=>$openid,
];
$frontUserModel = new FrontUserModel();
$findRetdata = $frontUserModel->findData($where);
if (empty($findRetdata)){
$insertUser = [
'openid' => $openid,
'user_name' => $userName,
'phone' => $phone,
];
$userId= $frontUserModel->insertData($insertUser);
}else{
$insertUser = [
'user_name' => $userName,
'phone' => $phone,
];
$frontUserModel->updateData($where ,$insertUser);
$userId = $findRetdata['id'];
}
$isNeedAuth = 0;
//生成auth
$info = [
'id' => $userId,
'phone' => $phone,
'platform' => $platform,
];
$auth = JwtService::createToken($info, $platform);
$insert = [
'auth' => $auth,
'uid' => $userId,
'type' => 2,
];
$LoginCacheModel = new LoginCacheModel();
$LoginCacheModel->insertData($insert);
return ['code'=>0, 'msg'=>'success','data'=>['Authorization'=>$auth, 'phone'=>$phone,'user_name'=>$userName, 'openid'=>$openid,
'isNeedAuth'=> $isNeedAuth, 'info'=>$info]];
}
public function studentInfoSubmitService($name, $phone, $baseInfo)
{
......@@ -160,7 +406,7 @@ class LoginService
}
}
public function studentConsultSubmitService($name, $phone, $info, $from)
public function studentConsultSubmitService($name, $phone, $info)
{
try {
......@@ -176,7 +422,6 @@ class LoginService
'user_name'=>$name,
'phone'=>$phone,
'info'=>$info,
'from'=>$from,
]);
return ['code'=>0, 'msg'=>'success', 'data'=>['id'=>$insertId]];
......
......@@ -22,15 +22,52 @@ use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\File;
use App\Models\SchoolMajorScore;
use App\Models\SchoolPlanBefore;
use App\Models\PlaceModel;
use App\Models\ExamModel;
class SchoolService extends BaseService{
public function selectConfigService(){
public function selectExamService(){
$AreaProvinceModel = new AreaProvinceModel();
$res = $AreaProvinceModel->selectDataWithField(['p_code'=>1], ['id','name']);
return ['code'=>0, 'msg'=>'success', 'data'=>['area_list'=>$res]];
$ExamModel = new ExamModel();
$res = $ExamModel->selectData(['is_pub'=>1]);
return ['code'=>0, 'msg'=>'success', 'data'=>$res];
}
public function selectConfigService($examid){
$PlaceModel = new PlaceModel();
$res = $PlaceModel->selectData(['exam_id'=>$examid]);
$data = [];
foreach ($res as $key => $value){
$data[$value['c_code']]['area'] = $value['area'];
$data[$value['c_code']]['place'][] = [
'id' =>$value['id'],
'name' =>$value['name'],
];
}
return ['code'=>0, 'msg'=>'success', 'data'=>array_values($data)];
}
public function getPlaceInfoService($placeid){
$PlaceModel = new PlaceModel();
$res = $PlaceModel->findData(['id'=>$placeid]);
$data = [
'id'=>$res['id'],
'name'=>$res['name'],
'addr'=>$res['addr'],
'area'=>$res['area'],
'img'=>'/uploads/tianjin/'.$res['img'],
];
//获取周边信息,美食、住宿、文具、打印、充电、公厕、交通
return ['code'=>0, 'msg'=>'success', 'data'=>[]];
}
public function listService($search, $pageId, $pageSize)
......
<?php
/**
* Created by PhpStorm.
* User: bmb369
* Date: 2024-05-07
* Time: 14:20
*/
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\DB;
class ExamModel extends Base {
protected $table = 'gz_exam';
use SoftDeletes;
protected $dates = ['deleted_at'];
protected $primaryKey = 'id';
}
\ No newline at end of file
<?php
/**
* Created by PhpStorm.
* User: bmb369
* Date: 2024-05-07
* Time: 14:20
*/
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\DB;
class PlaceModel extends Base {
protected $table = 'gz_place';
use SoftDeletes;
protected $dates = ['deleted_at'];
protected $primaryKey = 'id';
}
\ No newline at end of file
......@@ -36,7 +36,8 @@ Route::group(['prefix'=> 'student'], function () {
//学校信息
Route::group(['prefix'=> 'school'], function () {
Route::get('getconfig', ['uses' => 'SchoolController@getConfig', 'label' => '列表',]);
Route::get('exam_list', ['uses' => 'SchoolController@selectExam', 'label' => '列表',]);
Route::get('place_list', ['uses' => 'SchoolController@getConfig', 'label' => '列表',]);
Route::get('list', ['uses' => 'SchoolController@lst', 'label' => '列表',]);
Route::get('special_list', ['uses' => 'SchoolController@specialList', 'label' => '列表',]);
Route::get('special_detail', ['uses' => 'SchoolController@specialDetail', 'label' => '列表',]);
......
......@@ -11,12 +11,4 @@ Route::post('submit_score', ['uses' => 'LoginController@studentScoreInfoSubmit',
Route::post('submit_eval', ['uses' => 'LoginController@studentEvalSubmit', 'label' => '收集学员意向信息', 'description' => '收集学员信息']);
Route::post('submit_consult', ['uses' => 'LoginController@studentConsultSubmit', 'label' => '中公高招高考志愿规划咨询单', 'description' => '中公高招高考志愿规划咨询单']);
// 2025普通类专业+院校 || 院校专业组 高考志愿预案表(姓名、手机号、省份、选科、分数、位次)
Route::post('common/preference/major', ['uses' => 'LoginController@commonPreferenceMajor', 'label' => '收集学员意向信息', 'description' => '2025普通类专业+院校 || 院校专业组 高考志愿预案表(姓名、手机号、省份、选科、分数、位次)']);
// 获取家长报名意向填写期数列表
Route::get('parents/intention/periods', ['uses' => 'LoginController@parentsIntentionPeriods', 'label' => '收集学员意向信息', 'description' => '获取家长报名意向填写期数列表']);
// 家长报名意向填写
Route::post('parents/intention', ['uses' => 'LoginController@parentsIntention', 'label' => '收集学员意向信息', 'description' => '家长报名意向填写']);
Route::post('wx_login', ['uses' => 'LoginController@getWxLogin', 'label' => '登录', 'description' => '登录']);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment