<?php

/**
 * 基础信息接口
 */
namespace app\api\controller\v1\common;
use app\api\exception\DbLinkException;
use think\Db;

class BasicInfor
{

    //获取区域列表信息
    public function getRegions(){
         $regions = Db::table('region')
            ->field('id,region_name,region_state,pid,create_time')
            ->where('region_state','=',1)
            ->select();
        $regionsdata  =self::getRegionsTree($regions);
            
        if(!$regionsdata){
            throw new DbLinkException;
        }        
        return json([
            'code' => 200,
            'message' => 'SUCCESS',
            'data' => $regionsdata
        ]);
    }


       //获取业务线列表信息
    public function getBusiness(){
         $business = Db::table('business_line')
            ->field('business_id,business_name,business_state,create_time')
            ->where('business_state','=',1)
            ->select();
        if(!$business){
            throw new DbLinkException;
        }

        
        return json([
            'code' => 200,
            'message' => 'SUCCESS',
            'data' => $business
        ]);
    }
 

     ///获取运营商列表信息
    public function getOperator(){
         $operator = Db::table('operator')
            ->field('operator_id,operator_name,operator_state,pid,create_time')
            ->where('operator_state','=',1)
            ->select();
        $operators  =self::getOperatorTree($operator);
        if(!$operators){
            throw new DbLinkException;
        }

        
        return json([
            'code' => 200,
            'message' => 'SUCCESS',
            'data' => $operators
        ]);
    }

      ///获取需求来源列表信息
    public function getSource(){
         $source = Db::table('demand_source')
            ->field('sources_id,sources_name,sources_state,create_time')
            ->where('sources_state','=',1)
            ->select();
        if(!$source){
            throw new DbLinkException;
        }

        
        return json([
            'code' => 200,
            'message' => 'SUCCESS',
            'data' => $source
        ]);
    }


      ///获取上游客户列表信息
    public function getCustomers(){
         $customers = Db::table('upstream_customers')
            ->field('customers_id,customers_name,customers_state,create_time')
            ->where('customers_state','=',1)
            ->select();
        if(!$customers){
            throw new DbLinkException;
        }

        
        return json([
            'code' => 200,
            'message' => 'SUCCESS',
            'data' => $customers
        ]);
    }


       //获取基站状态列表信息
    public function getBasestate(){
         $basestate = Db::table('station_statuscate')
            ->field('cate_id,cate_name,pid,state,create_time')
            ->where('state','=',1)
            ->order("sort asc")
            ->select();
          $basestates  =self::getBasestateTree($basestate);
        if(!$basestate){
            throw new DbLinkException;
        }

        
        return json([
            'code' => 200,
            'message' => 'SUCCESS',
            'data' => $basestates
        ]);
    }
          //获取项目数据权限
    public function getDataPermission(){
     $uid = request()->get('uid');
    //查找数据权限规则表
    $map=[];
    $permission=db::name('permission_data')->field('permission_ids')->where(['s_id'=>$uid])->find();

    $arr= json_decode($permission['permission_ids'],true);

    if($arr['department_id']){
        $department_ids=strpos($arr['department_id'],',');
        if($department_ids===false){
            $map[]=['department_id','=', $arr['department_id']];
        }else{
            $map[]=['department_id','in',$arr['department_id']];
        }
    }
    if($arr['region_id']){
        $area_ids=strpos($arr['region_id'],',');
        if($area_ids===false){
            $map[]=['area_id','=', $arr['region_id']];
        }else{
            $map[]=['area_id','in',$arr['region_id']];
        }
    }
    if($arr['business_id']){
        $business_ids=strpos($arr['business_id'],',');
        if($business_ids===false){
            $map[]=['business_line_id','=', $arr['business_id']];
        }else{
            $map[]=['business_line_id','in',$arr['business_id']];
        }
    }
    //如果数据规则表不存在数据信息 ,默认返回此用户的部门id
    if(!$map){
        $staff = db::name('staff')->field('d_id')->where(['id'=>$uid])->find();
        if($staff && $staff['d_id']!==0){
            $map[]=['department_id','=',$staff['d_id']];
        }
    }
   

        
        return json([
            'code' => 200,
            'message' => 'SUCCESS',
            'data' => $map
        ]);
    }
  

  static function getBasestateTree($array, $pid =0, $level = 0){
    //声明静态数组,避免递归调用时,多次声明导致数组覆盖
    static $list = [];
    foreach ($array as $key => $value){
        //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
        if ($value['pid'] == $pid){
            //父节点为根节点的节点,级别为0,也就是第一级
            $value['level'] = $level;
            //把数组放到list中
            $list[] = $value;
            //把这个节点从数组中移除,减少后续递归消耗
            unset($array[$key]);
            //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
            self::getBasestateTree($array, $value['cate_id'], $level+1);
        }
    }
    return $list;
}

  static function getOperatorTree($array, $pid =0, $level = 0){
    //声明静态数组,避免递归调用时,多次声明导致数组覆盖
    static $list = [];
    foreach ($array as $key => $value){
        //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
        if ($value['pid'] == $pid){
            //父节点为根节点的节点,级别为0,也就是第一级
            $value['level'] = $level;
            //把数组放到list中
            $list[] = $value;
            //把这个节点从数组中移除,减少后续递归消耗
            unset($array[$key]);
            //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
            self::getOperatorTree($array, $value['operator_id'], $level+1);
        }
    }
    return $list;
}

  static function getRegionsTree($array, $pid =0, $level = 0){
    //声明静态数组,避免递归调用时,多次声明导致数组覆盖
    static $list = [];
    foreach ($array as $key => $value){
        //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
        if ($value['pid'] == $pid){
            //父节点为根节点的节点,级别为0,也就是第一级
            $value['level'] = $level;
            //把数组放到list中
            $list[] = $value;
            //把这个节点从数组中移除,减少后续递归消耗
            unset($array[$key]);
            //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
            self::getRegionsTree($array, $value['id'], $level+1);
        }
    }
    return $list;
}
}