getMuseumPageData(); $pages = $page_data['pages']; if ($pages > 0) { for ($page = 1; $page < $pages; $page++) { //查询是否存在第一页数据 $page_data = $SpotTmpModel->where(['page' => $page])->first(); if ($page_data) { $museum_list = json_decode($page_data->data, true); $this->add_museum($museum_list); continue; } $list_data = $MuseumServer->getMuseumList($page); $list = isset($list_data['rows']['records']) ? $list_data['rows']['records'] : ''; if (!$list) continue; $SpotTmpModel->insert(['page' => $page, 'data' => json_encode($list)]); } } // 加载模板 return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => '']); } /** * 添加博物馆数据到数据库 * @author 唐远望 * @version 1.0 * @date 2026-04-02 */ public function add_museum($list) { $SpotModel = new SpotModel(); $CitysModel = new CitysModel(); $museum_type_config = [ '文化文物系统国有博物馆' => '1', '其他行业国有博物馆' => '2', '非国有博物馆' => '3', ]; foreach ($list as $key => $value) { $province_name = isset($value['NB_S_NAME']) ? $value['NB_S_NAME'] : ''; $city_name = isset($value['NB_SS_NAME']) ? $value['NB_SS_NAME'] : ''; $district_name = isset($value['NB_X_NAME']) ? $value['NB_X_NAME'] : ''; //特殊地区1级移除市 if ($province_name && in_array($province_name, ['北京市', '天津市', '上海市', '重庆市'])) { //移除市这个字符 $province_name = trim(str_replace('市', '', $province_name)); } else if ($province_name && in_array($province_name, ['北京', '天津', '上海', '重庆'])) { } else if ($province_name && in_array($province_name, ['内蒙古', '广西', '西藏', '新疆', '宁夏'])) { switch ($province_name) { case '内蒙古': $province_name = '内蒙古自治区'; break; case '广西': $province_name = '广西壮族自治区'; break; case '西藏': $province_name = '西藏自治区'; break; case '新疆': $province_name = '新疆维吾尔自治区'; break; case '宁夏': $province_name = '宁夏回族自治区'; break; } } else if ($province_name && in_array($province_name, ['内蒙古自治区', '广西壮族自治区', '西藏自治区', '新疆维吾尔自治区', '宁夏回族自治区'])) { } else if (strpos($province_name, '省') === false) { //是否存在市省,如果不存在则补全 if (strpos($province_name, '省') === false) { $province_name = $province_name . '省'; } } $province_id = '0'; if ($province_name != '') { $province_info = $CitysModel->where([['name', 'like', "%$province_name%"], ['level', '=', '1']])->first(); $province_id = $province_info ? $province_info->id : '0'; } $city_id = '0'; if ($city_name != '') { $city_info = $CitysModel->where([['name', 'like', "%$city_name%"], ['level', '=', '2']])->first(); $city_name = $city_info ? $city_info->name : ''; $city_id = $city_info ? $city_info->id : '0'; } $district_id = '0'; if ($district_name) { $district_info = $CitysModel->where([['name', 'like', "%$district_name%"], ['level', '=', '3']])->first(); $district_name = $district_info ? $district_info->name : ''; $district_id = $district_info ? $district_info->id : '0'; } $insert_data['museum_type_id'] = isset($museum_type_config[$value['NB_BWGXZ_NAME']]) ? $museum_type_config[$value['NB_BWGXZ_NAME']] : '0'; $insert_data['museum_level'] = isset($value['NB_ZLDJ_NAME']) ? $value['NB_ZLDJ_NAME'] : ''; $insert_data['is_open'] = '0'; $insert_data['name'] = isset($value['NB_BWGMC']) ? $value['NB_BWGMC'] : ''; $insert_data['intro'] = isset($value['NB_BWGJJ']) ? trim($value['NB_BWGJJ']) : ''; $insert_data['province_name'] = $province_name; $insert_data['province_id'] = $province_id; $insert_data['city_name'] = $city_name; $insert_data['city_id'] = $city_id; $insert_data['district_name'] = $district_name; $insert_data['district_id'] = $district_id; $insert_data['district_name'] = ''; $insert_data['insert_time'] = time(); //查询是否存在博物馆 $museum_info = $SpotModel->where(['name' => $insert_data['name'], 'province_name' => $insert_data['province_name']])->first(); if (!$museum_info) { $SpotModel->insert($insert_data); } } } /** * 获取附近博物馆列表数据 * @author 唐远望 * @version 1.0 * @date 2026-04-02 */ public function nearby_list(Request $request, SpotModel $SpotModel, TextTranslate $TextTranslate) { $longitude = $request->input('longitude', ''); $latitude = $request->input('latitude', ''); $page = $request->input('page', 1); $limit = $request->input('limit', 10); $query = $SpotModel->query()->where('status', 0); $field = ['id', 'name', 'museum_type_id', 'museum_level', 'is_open', 'intro', 'longitude', 'latitude', 'province_name', 'city_name', 'district_name']; $latlot_feild = ["DB::raw('(6371 * ACOS(COS(RADIANS(' . $latitude . ')) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS(' . $longitude . ')) + SIN(RADIANS(' . $latitude . ')) * SIN(RADIANS(latitude)))) AS distance')"]; if (is_numeric($longitude) && $longitude > 0 && is_numeric($latitude) && $latitude > 0) { $field = array_merge($field, $latlot_feild); $query->select($field)->orderBy('distance', 'asc'); } else { $query->select($field); } $data = $query->paginate($limit, ['*'], 'page', $page); if (!empty($data['data'])) { foreach ($$data['data'] as $key => $value) { $data['data'][$key]['distance'] = isset($value['distance']) ? $value['distance'] : '0'; } } return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $data]); } /** * 翻译博物馆数据 * @author 唐远望 * @version 1.0 * @date 2025-12-04 * @param Request $request */ public function translate(SpotModel $SpotModel, TextTranslate $TextTranslate) { $result = $SpotModel->where([['status', '=', 0], ['level', '<', 3]])->get()->toarray(); if (!empty($result)) { foreach ($result as $key => $value) { //增加睡眠时间,防止请求过快被腾讯云接口拒绝 usleep(1000); $result = $TextTranslate->translateText($value['name'], 'zh', 'en'); if ($result['success']) { $target_text = $result['target_text'] ?? ''; //更新本地数据为英文 $SpotModel->where(['id' => $value['id']])->update(['name' => $target_text]); } } return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $result]); } } }