456 lines
16 KiB
PHP
456 lines
16 KiB
PHP
<?php
|
||
/**
|
||
* Created by PhpStorm.
|
||
* User: Administrator
|
||
* Date: 2020/4/26
|
||
* Time: 14:36
|
||
*/
|
||
|
||
namespace app\api\model;
|
||
|
||
use think\Db;
|
||
use think\facade\Log;
|
||
use think\Model;
|
||
|
||
class RecZhejiangMajor extends Model
|
||
{
|
||
|
||
/*
|
||
* 新高考专业查询
|
||
* */
|
||
public static function getNewMajorBy($array,$page = 1,$limit =10 ,$user_id,$vipType)
|
||
{
|
||
$where = [];
|
||
//方便统计总数定义推荐类型
|
||
$whereType = [];
|
||
//推薦類型默認0
|
||
$type = 0;
|
||
$year = config('setsub.year');
|
||
//默认排序条件
|
||
$sort = 'dataType desc';
|
||
//搜索条件
|
||
unset($array['is_login']);
|
||
unset($array['page']);
|
||
unset($array['type']);
|
||
unset($array['userPro']);
|
||
foreach ($array as $key => $value) {
|
||
if (!empty($value)) {
|
||
switch ($key) {
|
||
case 'score':
|
||
$where[] = ['myscore', '=', $value];
|
||
break;
|
||
case 'mySub':
|
||
$where[] = ['mykemu', '=', $value];
|
||
$val = preg_split('//', $value, -1, PREG_SPLIT_NO_EMPTY);
|
||
$where[] = ['chooseNums', 'in', ($val[0].','.$val[1].','.$val[2].','.$val[0].$val[1].','.$val[0].$val[2].','.$val[1].$val[2].','.$val[0].$val[1].$val[2].',999')];
|
||
break;
|
||
case 'reType':
|
||
$type = $value;
|
||
$value = $value - 1;
|
||
//未购买权限limit-1
|
||
if (($value == 0 || $value == 1) && ($limit == 2 || $limit == 5)) {
|
||
$limit = $limit - 1;
|
||
}
|
||
$whereType[] = ['dataType', '=', $value];
|
||
break;
|
||
case 'province':
|
||
$value = changeCode($value);
|
||
$where[] = ['provinceId', 'in', ($value)];
|
||
break;
|
||
case 'batch':
|
||
$where[] = ['batch', 'in', ($value)];
|
||
break;
|
||
|
||
case 'schoolType':
|
||
$where[] = ['collegeType', 'in', ($value)];
|
||
break;
|
||
case 'is_985':
|
||
$where[] = ['is985', '=', $value];
|
||
break;
|
||
case 'is_211':
|
||
$where[] = ['is211', '=', $value];
|
||
break;
|
||
case 'is_yldx':
|
||
$where[] = ['is_yldx', '=', $value];
|
||
break;
|
||
case 'is_ylxk':
|
||
$where[] = ['is_ylxk', '=', $value];
|
||
break;
|
||
case 'is_public':
|
||
$where[] = ['is_public', '=', $value];
|
||
break;
|
||
case 'sort':
|
||
$sort = config('setsub.sort')[$value];
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
//计算总数
|
||
if($vipType == 1){
|
||
$count = Db::table('rec_zhejiang_majors')
|
||
->where($where)
|
||
->where($whereType)//提上去加索引
|
||
->count();
|
||
}else{
|
||
$count = $limit;
|
||
}
|
||
//查询院校总数,可保底,稳妥,冲
|
||
$resNum = self::getMajorNum($where,$limit,$vipType,$type);
|
||
|
||
//查询数据
|
||
$result = Db::table('rec_zhejiang_majors')
|
||
->field('collegeName,probability,rankOfCn,professionCode,is985,is211,issyl,provinceName,estimatedRanking,minScore,collegeId,id,batch,planNum,chooseCns,classify,professionName,majorCode')
|
||
->where($where)
|
||
->where($whereType)
|
||
->page($page, $limit)
|
||
->order($sort)
|
||
->select();
|
||
|
||
empty($result) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||
//查询用户收藏的专业
|
||
$resCollect = [];
|
||
if($user_id){
|
||
$resCollect = CollectNewMajor::getUserNewMajor($user_id);
|
||
}
|
||
//查询位次和院校排名
|
||
foreach ($result as $key =>$val) {
|
||
$result[$key]['tags'] = $val['provinceName']." ".$val['classify'];
|
||
//判断211,985,双一流是否是1
|
||
if($val['is985'])
|
||
$result[$key]['tags'] = $result[$key]['tags']." "."985";
|
||
if($val['is211'])
|
||
$result[$key]['tags'] = $result[$key]['tags']." "."211";
|
||
if($val['issyl'])
|
||
$result[$key]['tags'] = $result[$key]['tags']." "."双一流";
|
||
//收藏赋值
|
||
$result[$key]['is_collect'] = 0;
|
||
if(is_array($resCollect)){
|
||
if(in_array($val['id']."_".$val['majorCode']."_".$val['professionCode'],$resCollect)){
|
||
$result[$key]['is_collect'] = 1;
|
||
}
|
||
}
|
||
$result[$key]['lowestRank'] = $result[$key]['estimatedRanking'];
|
||
}
|
||
|
||
|
||
|
||
//分页数据
|
||
$info = [
|
||
'limit' => $limit,
|
||
'page_current' => $page,
|
||
'page_sum' => ceil($count / $limit),
|
||
];
|
||
//组合返回
|
||
$list = [
|
||
'msg' => $msg,
|
||
'count' => $count,
|
||
'info' => $info,
|
||
'res' => $result,
|
||
'countSchool' => $resNum
|
||
];
|
||
|
||
|
||
return $list;
|
||
}
|
||
|
||
//获取新高考專業总数和保底,稳妥、推荐
|
||
public static function getMajorNum($where,$limit,$vipType,$type){
|
||
$arrNomalCount = array();
|
||
$arrNomalCount[1] = 0;
|
||
$arrNomalCount[2] = 0;
|
||
$arrNomalCount[3] = 0;
|
||
$arrLimitCount = array();
|
||
$result = array();
|
||
$cacheTime = empty($vipType)?3600:false;
|
||
//总数
|
||
$arrNomalCount[0] = Db::table('rec_zhejiang_majors')
|
||
->where($where)->cache($cacheTime)
|
||
->count();
|
||
if($vipType == 0){
|
||
//保底数量
|
||
$arrNomalCount[3] = Db::table('rec_zhejiang_majors')
|
||
->where($where)->where('dataType','=',2)->cache($cacheTime)
|
||
->count();
|
||
//稳妥数量
|
||
$arrNomalCount[2] = Db::table('rec_zhejiang_majors')
|
||
->where($where)->where('dataType','=',1)->cache($cacheTime)
|
||
->count();
|
||
//冲刺数量
|
||
$arrNomalCount[1] = Db::table('rec_zhejiang_majors')
|
||
->where($where)->where('dataType','=',0)->cache($cacheTime)
|
||
->count();
|
||
|
||
//未购买权限的底部数据
|
||
$arrLimitCount['3'] = $arrNomalCount[3] - $limit;
|
||
$arrLimitCount['3']= $arrLimitCount['3']>0? $arrLimitCount['3']:0;
|
||
$arrLimitCount['2'] = $arrNomalCount[2] - $limit;
|
||
$arrLimitCount['2']= $arrLimitCount['2']>0? $arrLimitCount['2']:0;
|
||
$arrLimitCount['1'] = $arrNomalCount[1] - $limit;
|
||
$arrLimitCount['1']= $arrLimitCount['1']>0? $arrLimitCount['1']:0;
|
||
|
||
}else{
|
||
if($type){
|
||
$arrNomalCount[$type] = Db::table('rec_zhejiang_majors')
|
||
->where($where)->where('dataType','=',$type-1)
|
||
->count();
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
$result['topNumCount'] = $arrNomalCount;
|
||
$result['bottomNumCount'] = $arrLimitCount;
|
||
|
||
return $result;
|
||
}
|
||
|
||
/*
|
||
* 新高考院校查询
|
||
* */
|
||
public static function getNewMajorSch($array,$page = 1,$limit =10 ,$user_id,$vipType)
|
||
{
|
||
$where = [];
|
||
$year = config('setsub.year');
|
||
//默认排序条件
|
||
$sort = "id ASC";
|
||
//搜索条件
|
||
unset($array['is_login']);
|
||
unset($array['page']);
|
||
unset($array['type']);
|
||
unset($array['reType']);
|
||
unset($array['userPro']);
|
||
foreach ($array as $key => $value) {
|
||
if (!empty($value)) {
|
||
switch ($key) {
|
||
case 'score':
|
||
$where[] = ['myscore', '=', $value];
|
||
break;
|
||
case 'mySub':
|
||
$where[] = ['mykemu', '=', $value];
|
||
break;
|
||
case 'province':
|
||
$value = changeCode($value);
|
||
$where[] = ['provinceId', 'in', ($value)];
|
||
break;
|
||
case 'batch':
|
||
$where[] = ['batch', 'in', ($value)];
|
||
break;
|
||
case 'schoolType':
|
||
$where[] = ['collegeType', 'in', ($value)];
|
||
break;
|
||
case 'is_985':
|
||
$where[] = ['is985', '=', $value];
|
||
break;
|
||
case 'is_211':
|
||
$where[] = ['is211', '=', $value];
|
||
break;
|
||
case 'is_yldx':
|
||
$where[] = ['is_yldx', '=', $value];
|
||
break;
|
||
case 'is_ylxk':
|
||
$where[] = ['is_ylxk', '=', $value];
|
||
break;
|
||
case 'is_public':
|
||
$where[] = ['is_public', '=', $value];
|
||
break;
|
||
case 'sort':
|
||
$sort = config('setsub.sort')[$value];
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
$hideCount = 0;
|
||
//计算总数
|
||
if($vipType == 1){
|
||
$count = Db::table('rec_zhejiang_schs')
|
||
->where($where)
|
||
->count();
|
||
}else{
|
||
$count = $limit;
|
||
$hideCount = Db::table('rec_zhejiang_schs')
|
||
->where($where)
|
||
->count();
|
||
$hideCount = $hideCount - $limit;
|
||
$hideCount = $hideCount<0?0:$hideCount;
|
||
}
|
||
|
||
//查询数据
|
||
$result = Db::table('rec_zhejiang_schs')
|
||
->field('collegeName,rankOfCn,provinceName,collegeId,id,planNum,classify,collegeCode,majorNum')
|
||
->where($where)
|
||
->page($page, $limit)
|
||
->order($sort)
|
||
->select();
|
||
|
||
empty($result) ? $msg = '暂无数据!' : $msg = '查询成功!';
|
||
|
||
//查询用户收藏的专业
|
||
$resCollect = [];
|
||
if($user_id){
|
||
$resCollect = CollectNewSch::getNewUserSch($user_id);
|
||
}
|
||
//查询位次和院校排名
|
||
foreach ($result as $key =>$val) {
|
||
$result[$key]['logo'] = '';
|
||
$result[$key]['tags'] = $val['provinceName']." ".$val['classify'];
|
||
$result[$key]['is_sch'] = 1;
|
||
//收藏赋值
|
||
$result[$key]['is_collect'] = 0;
|
||
if(is_array($resCollect)){
|
||
if(in_array($val['id'],$resCollect)){
|
||
$result[$key]['is_collect'] = 1;
|
||
}
|
||
}
|
||
|
||
$result[$key]['lowestRank'] = Db::table('yzy_zj_major_score')->where([['sch_id','=',$val['collegeId']],['year','=',$year]])->min('estimatedRanking');
|
||
$result[$key]['minScore'] = Db::table('yzy_zj_major_score')->where([['sch_id','=',$val['collegeId']],['year','=',$year]])->min('minScore');
|
||
}
|
||
|
||
|
||
|
||
//分页数据
|
||
$info = [
|
||
'limit' => $limit,
|
||
'page_current' => $page,
|
||
'page_sum' => ceil($count / $limit),
|
||
];
|
||
//组合返回
|
||
$list = [
|
||
'msg' => $msg,
|
||
'count' => $count,
|
||
'info' => $info,
|
||
'res' => $result,
|
||
'hideCount' => $hideCount
|
||
];
|
||
|
||
|
||
return $list;
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
/*
|
||
* 根据条件获取新高考专业数量
|
||
* */
|
||
public static function getNewMajorCount($array)
|
||
{
|
||
$where = [];
|
||
//搜索条件
|
||
unset($array['is_login']);
|
||
unset($array['type']);
|
||
unset($array['userPro']);
|
||
unset($array['page']);
|
||
foreach ($array as $key => $value) {
|
||
if (!empty($value)) {
|
||
switch ($key) {
|
||
case 'score':
|
||
$where[] = ['myscore', '=', $value];
|
||
break;
|
||
case 'mySub':
|
||
$where[] = ['mykemu', '=', $value];
|
||
$val = $mySub = preg_split('//', $value, -1, PREG_SPLIT_NO_EMPTY);
|
||
$where[] = ['chooseNums', 'in', ($val[0].','.$val[1].','.$val[2].','.$val[0].$val[1].','.$val[0].$val[2].','.$val[1].$val[2].','.$val[0].$val[1].$val[2].',999')];
|
||
break;
|
||
case 'reType':
|
||
$where[] = ['dataType', '=', $value];
|
||
break;
|
||
case 'province':
|
||
$value = changeCode($value);
|
||
$where[] = ['provinceId', 'in', ($value)];
|
||
break;
|
||
case 'batch':
|
||
$where[] = ['batch', 'in', ($value)];
|
||
break;
|
||
case 'schoolType':
|
||
$where[] = ['collegeType', 'in', ($value)];
|
||
break;
|
||
case 'is_985':
|
||
$where[] = ['is985', '=', $value];
|
||
break;
|
||
case 'is_211':
|
||
$where[] = ['is211', '=', $value];
|
||
break;
|
||
case 'is_yldx':
|
||
$where[] = ['is_yldx', '=', $value];
|
||
break;
|
||
case 'is_ylxk':
|
||
$where[] = ['is_ylxk', '=', $value];
|
||
break;
|
||
case 'is_public':
|
||
$where[] = ['is_public', '=', $value];
|
||
break;
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
//计算总数
|
||
|
||
$count = Db::table('rec_zhejiang_majors')
|
||
->where($where)
|
||
->count();
|
||
return $count;
|
||
}
|
||
|
||
/*
|
||
* 根据条件获取新高考院校数量
|
||
* */
|
||
public static function getNewSchoolCount($array)
|
||
{
|
||
$where = [];
|
||
//搜索条件
|
||
unset($array['is_login']);
|
||
unset($array['type']);
|
||
unset($array['userPro']);
|
||
unset($array['page']);
|
||
foreach ($array as $key => $value) {
|
||
if (!empty($value)) {
|
||
switch ($key) {
|
||
case 'score':
|
||
$where[] = ['myscore', '=', $value];
|
||
break;
|
||
case 'mySub':
|
||
$where[] = ['mykemu', '=', $value];
|
||
break;
|
||
case 'province':
|
||
$value = changeCode($value);
|
||
$where[] = ['provinceId', 'in', ($value)];
|
||
break;
|
||
case 'batch':
|
||
$where[] = ['batch', 'in', ($value)];
|
||
break;
|
||
case 'schoolType':
|
||
$where[] = ['collegeType', 'in', ($value)];
|
||
break;
|
||
case 'is_985':
|
||
$where[] = ['is985', '=', $value];
|
||
break;
|
||
case 'is_211':
|
||
$where[] = ['is211', '=', $value];
|
||
break;
|
||
case 'is_yldx':
|
||
$where[] = ['is_yldx', '=', $value];
|
||
break;
|
||
case 'is_ylxk':
|
||
$where[] = ['is_ylxk', '=', $value];
|
||
break;
|
||
case 'is_public':
|
||
$where[] = ['is_public', '=', $value];
|
||
break;
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
//计算总数
|
||
$count = Db::table('rec_zhejiang_schs')
|
||
->where($where)
|
||
->count();
|
||
return $count;
|
||
}
|
||
|
||
} |