Merge branch 'master' of ssh://47.101.48.251:/data/git/wx.sstbc.com

master
lion 2 months ago
commit 7494cea04e

@ -26,6 +26,7 @@ use App\Models\User;
use App\Repositories\DoorRepository; use App\Repositories\DoorRepository;
use App\Repositories\EntranceRepository; use App\Repositories\EntranceRepository;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use App\Models\Course; use App\Models\Course;
@ -127,6 +128,11 @@ class OtherController extends CommonController
*/ */
public function homeV2() public function homeV2()
{ {
// 生成缓存键(该方法无参数,使用固定键名)
$cacheKey = 'home_v2_data';
// 尝试从缓存获取数据缓存5分钟300秒
$data = Cache::remember($cacheKey, 300, function () {
// 默认开始时间 // 默认开始时间
$start_date = CourseType::START_DATE; $start_date = CourseType::START_DATE;
// 默认结束日期一年以后 // 默认结束日期一年以后
@ -301,7 +307,12 @@ class OtherController extends CommonController
$config->course_signs_unique_total = CourseSign::courseSignsTotalByUnique($configStartDate, $configEndDate, 1, $configCourseIds->unique()->values(), false); $config->course_signs_unique_total = CourseSign::courseSignsTotalByUnique($configStartDate, $configEndDate, 1, $configCourseIds->unique()->values(), false);
} }
return $this->success(compact('list', 'suzhou', 'country', 'monthCourses', 'time_axis', 'article', 'yearConfigs')); // 返回数据数组
return compact('list', 'suzhou', 'country', 'monthCourses', 'time_axis', 'article', 'yearConfigs');
});
// 返回响应
return $this->success($data);
} }
/** /**
@ -329,6 +340,11 @@ class OtherController extends CommonController
$course_type_id = $params['course_type_id']; $course_type_id = $params['course_type_id'];
$courses = $params['courses']; $courses = $params['courses'];
// 生成缓存键(基于参数)
$cacheKey = 'courses_home_' . md5($start_date . '_' . $end_date . '_' . implode(',', $course_type_id));
// 尝试从缓存获取数据缓存5分钟300秒
$data = Cache::remember($cacheKey, 300, function () use ($start_date, $end_date, $course_type_id, $courses) {
// 报名人数 // 报名人数
$list['course_signs_total'] = CourseSign::courseSignsTotal($start_date, $end_date, null, $courses->pluck('id')); $list['course_signs_total'] = CourseSign::courseSignsTotal($start_date, $end_date, null, $courses->pluck('id'));
// 审核通过人数 // 审核通过人数
@ -450,7 +466,12 @@ class OtherController extends CommonController
// 获取统计项元数据 // 获取统计项元数据
$statistics_metadata = Course::getStatisticsMetadata(); $statistics_metadata = Course::getStatisticsMetadata();
return $this->success(compact('list', 'courseTypesSum', 'areas', 'areas_schoolmate', 'statistics_metadata')); // 返回数据数组
return compact('list', 'courseTypesSum', 'areas', 'areas_schoolmate', 'statistics_metadata');
});
// 返回响应
return $this->success($data);
} }
/** /**

@ -369,17 +369,10 @@ class UserController extends BaseController
} }
// 所在区域like 匹配关联 company 的 company_area多个英文逗号分隔为 or // 所在区域like 匹配关联 company 的 company_area多个英文逗号分隔为 or
if (isset($all['company_area']) && $all['company_area'] !== '') { if (isset($all['company_area']) && $all['company_area'] !== '') {
$company_area = array_filter(array_map('trim', explode(',', $all['company_area']))); $query->whereHas('company', function ($c) use ($all) {
if (!empty($company_area)) { $c->filterByArea($all['company_area']);
$query->whereHas('company', function ($c) use ($company_area) {
$c->where(function ($q) use ($company_area) {
foreach ($company_area as $v) {
$q->orWhere('company_area', 'like', '%' . $v . '%');
}
});
}); });
} }
}
// 公司地址:模糊匹配关联 company 的 company_address 或 company_city // 公司地址:模糊匹配关联 company 的 company_address 或 company_city
if (isset($all['address']) && $all['address'] !== '') { if (isset($all['address']) && $all['address'] !== '') {
$query->whereHas('company', function ($c) use ($all) { $query->whereHas('company', function ($c) use ($all) {

@ -38,6 +38,57 @@ class Company extends SoftDeletesModel
}); });
} }
/**
* 根据区域名称筛选公司
* 支持区域名称映射和特殊逻辑(如"苏州市外"
* @param \Illuminate\Database\Eloquent\Builder $query
* @param string|array $companyArea 区域名称,多个用英文逗号分隔或传入数组
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeFilterByArea($query, $companyArea)
{
if (empty($companyArea)) {
return $query;
}
// 如果是字符串,转换为数组
if (is_string($companyArea)) {
$company_area = array_filter(array_map('trim', explode(',', $companyArea)));
} else {
$company_area = array_filter(array_map('trim', (array) $companyArea));
}
if (empty($company_area)) {
return $query;
}
// 区域名称映射:搜索参数 -> 数据库值
$areaMapping = [
'高新区' => '虎丘',
];
// 检查是否包含"苏州市外"
$hasSuzhouOut = in_array('苏州市外', $company_area);
if ($hasSuzhouOut) {
// 如果包含"苏州市外",查询所有不等于"苏州"的记录
return $query->where('company_area', '!=', '苏州')
->whereNotNull('company_area')
->where('company_area', '!=', '');
} else {
// 将搜索参数转换为数据库值
$company_area = array_map(function ($v) use ($areaMapping) {
return isset($areaMapping[$v]) ? $areaMapping[$v] : $v;
}, $company_area);
return $query->where(function ($q) use ($company_area) {
foreach ($company_area as $v) {
$q->orWhere('company_area', 'like', '%' . $v . '%');
}
});
}
}
/** /**
* 地址转经纬度 * 地址转经纬度
*/ */

Loading…
Cancel
Save