123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- <?php
- namespace app\data\controller\api;
- use app\data\model\BasePostageRegion;
- use hg\apidoc\annotation\Param;
- use hg\apidoc\annotation\Returned;
- use hg\apidoc\annotation\Title;
- use think\admin\Controller;
- use think\Cache;
- /**
- * @Title("地区模块")
- */
- class Area extends Controller
- {
- /**
- * @Title("获取地区信息")
- * @Param("level",desc="1省2市3区")
- * @Param("pid",desc="上级区域ID")
- * @Returned("id",desc="地区ID")
- * @Returned("name",desc="地区名称")
- * @Returned("short",desc="地区简短名称")
- * @Returned("pinyin",desc="地区拼音")
- * @Returned("first",desc="地区首字母")
- */
- public function area(){
- $data=$this->_vali([
- 'level.require'=>'级别必须',
- 'pid.require'=>"上级必须",
- ]);
- $this->success(
- '',
- BasePostageRegion::where('level',$data['level'])
- ->where('pid',$data['pid'])
- ->order('pinyin')
- ->select()
- );
- }
- /**
- * @Title("获取地区信息(按字母排序)")
- * @Param("level",desc="1省2市3区")
- * @Param("hot",desc="1是否获取热门城市")
- */
- public function sort(){
- $data=$this->_vali([
- 'level.require'=>'级别必须',
- 'level.in:1,2,3'=>'级别必须',
- ]);
- $sortArea=$this->app->cache->remember("app_area_sort_{$data['level']}",function ()use ($data){
- $citys=BasePostageRegion::field(['id','name','first'])->where('level',$data['level'])->select();
- $a = [];
- for ($i = 65; $i < 91; $i++) {
- $one = [
- 'index' => chr($i),
- 'child' => []
- ];
- foreach ($citys as $key => &$city) {
- if ($city['first'] == $one['index']) {
- $one['child'][] = [
- 'title' => $city['name'],
- 'weight' => $city['id'],
- 'id' => $city['id'],
- ];
- unset($citys[$key]);
- }
- }
- $a[] = $one;
- }
- return $a;
- },0);
- $info=[
- 'areas'=>$sortArea,
- ];
- if(input('hot')){
- $info['hot']=BasePostageRegion::hot();
- }
- $this->success('',$info);
- }
- /**
- * @Title("地区递归三级联动")
- */
- public function tree(){
- function area(&$data,$areas,$first=false){
- foreach ($areas as $k=>$area){
- if($first){
- if($area['pid']==0) {
- area($area, $areas);
- unset($area['pid']);
- $data[] = $area;
- unset($areas[$k]);
- }
- }else{
- if($data['value']==$area['pid']){
- area($area, $areas);
- unset($area['pid']);
- $data['children'][]=$area;
- unset($areas[$k]);
- }
- }
- }
- }
- $cache=$this->app->cache;
- $fromCache=$cache->get('app_area');
- if(!$fromCache){
- $fina=[];
- $areas=BasePostageRegion::where('level','<=',3)->field('id as value,name as label,pid')->select()->toArray();
- area($fina,$areas,true);
- $fromCache=$fina;
- $cache->remember('app_area',$fina,0);
- }
- $this->success('',$fromCache);
- }
- /**
- * @Title("根据名称获取信息")
- * @Param("name",desc="城市名")
- */
- public function name(){
- $rs=null;
- $cache=$this->app->cache;
- if($name=input('name')){
- $cacheName="area_name_".$name;
- $rs=$cache->get($cacheName,null);
- if(!$rs){
- $rs=BasePostageRegion::where('name|short',$name)->find();
- $cache->set($cacheName,$rs);
- }
- }
- $this->success('',$rs);
- }
- }
|