123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- <?php
- declare(strict_types=1);
- namespace app\mobile\controller;
- use app\model\VrFloder;
- use app\model\VrGroup;
- use app\model\VrView;
- use app\model\Employee;
- use app\model\User;
- use think\facade\Request;
- use vr\Krpano;
- use OSS\OssClient;
- use app\model\VrHotspot;
- use think\facade\Queue;
- use think\facade\Log;
- use app\model\AppSetting;
- use app\model\Org;
- use app\model\Miniprogram;
- use app\model\Company;
- use toolkits\Aec;
- use Firebase\JWT\JWT;
- use openssl\Aes;
- use openssl\CryptAes;
- use app\model\CustomerVisitLog;
- use app\model\OutCallLog;
- class Setting extends Base
- {
- /**
- * 获取版本设置
- */
- public function getVersion()
- {
- $param = Request::only(['type'=>'ios']);
- $type = $param['type']=='ios' ? 'iosVersion' : 'androidVersion';
- $where = [['code','in',['ossImgSetting','cutImgSize',$type]]];
- $data = AppSetting::where($where)->select()->toArray();
- $arr = [];
- foreach ($data as $v) {
- if ($v['content']) $arr = array_merge($arr,json_decode($v['content'],true));
- }
- $data = $arr;
- //图片oss配置
- $arr['ali_oss_access_key_id'] = config('app.ali_oss_access_key_id');
- $arr['ali_oss_access_key_secret'] = config('app.ali_oss_access_key_secret');
- $arr['ali_oss_end_point'] = config('app.ali_oss_end_point');
- $arr['ali_oss_bucket'] = config('app.ali_oss_bucket');
- $arr['ali_oss_bindurl'] = config('app.ali_oss_bindurl');
- $arr = json_encode($arr);
- $key = 'zqxggetuserdataa';
- $iv = 'zqxgivaesyoudata';
- $str = openssl_encrypt($arr, 'AES-128-CBC', $key,OPENSSL_RAW_DATA,$iv);
- $str = base64_encode($str);
- return json(['code'=>0,'data'=>$str,'msg'=>'','str'=>$str]);
- }
- /**
- * 切换店面列表
- * 用手机号关联不同店面
- */
- public function company()
- {
- //关联店面
- $phones = Employee::where([['id','=',$this->employeeId]])->value('phone');
- $employees = Employee::where([['phone', '=', $phones],['uid','>',0], ['state', '=', '在职'], ['disable', '=', 0]])->column('root_id, is_manager, org_id,name,uid,phone', 'root_id');
- $orgs = Org::where([['id', 'in', array_column($employees, 'org_id')]])->column('id,name', 'id');
- $notifyList = Miniprogram::where([['root_id', 'in', array_column($employees, 'root_id')]])->column('root_id,notify', 'root_id');
- $companyList = Company::with(['brand'])->where([['root_id', 'in', array_column($employees, 'root_id')]])->select()->visible(['company_name', 'root_id', 'status', 'end_date','logo','company_group'])->toArray();
- //
- $aec = new Aec(config('app.aec_key'), config('app.aec_iv'));
- foreach ($companyList as &$item) {
- $item['client_type'] = isset($notifyList[$item['root_id']]) ? $notifyList[$item['root_id']]['notify'] : '';
- $item['is_manager'] = isset($employees[$item['root_id']]) ? $employees[$item['root_id']]['is_manager'] : 0;
- $item['org_name'] = (isset($employees[$item['root_id']]) && isset($orgs[$employees[$item['root_id']]['org_id']])) ? $orgs[$employees[$item['root_id']]['org_id']]['name'] : '';
- if ($item['status'] == 1) {
- $item['off'] = 1;
- $item['off_remark'] = '账号被禁用';
- } elseif ($item['end_date'] < date('Y-m-d')) {
- $item['off'] = 1;
- $item['off_remark'] = '账号已过期';
- } else {
- $item['off'] = 0;
- $item['off_remark'] = '账号正常';
- }
- if(!empty($item['logo']) && !empty($item['brand'])){
- $item['brand']['logo']=$item['logo'];
- }
- $item['this'] = $item['root_id']==$this->rootId ? 1 : 0;
-
- $item['name'] = isset($employees[$item['root_id']]) ? $employees[$item['root_id']]['name'] : '';
- //手机号
- $item['phone'] = isset($employees[$item['root_id']]) ? $employees[$item['root_id']]['phone'] : '';
- if ($item['phone']) $item['phone'] = substr_replace($aec->decrypt($item['phone']), '******', 3, 6);
- $item['uid'] = isset($employees[$item['root_id']]) ? $employees[$item['root_id']]['uid'] : 0;
- }
- //头像
- $uids = array_column($companyList,'uid');
- $imgs = User::where([['id','in',$uids]])->column('headimgurl','id');
- //所属集团
- $pids = array_column($companyList,'company_group');
- $pname = Company::where([['id','in',$pids]])->column('company_name','id');
- foreach ($companyList as $key => $value) {
- $companyList[$key]['headimgurl'] = $value['uid']&&isset($imgs[$value['uid']]) ? $imgs[$value['uid']] : '';
- $companyList[$key]['p_name'] = $value['company_group']&&isset($pname[$value['company_group']]) ? $pname[$value['company_group']] : '';
- }
- return json(['code' => 0, 'data' => $companyList]);
- }
- /**
- * 切换店面
- */
- public function changeShop()
- {
- $param = Request::only(['root_id'=>0]);
- $company = Company::where('root_id',$param['root_id'])->findOrEmpty();
- if ($company->isEmpty() || $company->end_date < date('Y-m-d') || $company->status == 1) return json(['code' => 1, 'data' =>'切换失败','msg'=>'切换失败']);
- //
- $y_phone = Employee::where('id',$this->employeeId)->value('phone');
- $operaters = Employee::where([['root_id','=',$param['root_id']],['phone','=',$y_phone],['uid','>',0],['state','=','在职']])->order('last_login_time desc,updatetime desc')->findOrEmpty();
- if($operaters->isEmpty()) return json(['code' => 1, 'data' =>'切换失败','msg'=>'切换失败']);
- $t = [
- 'employee_id' => $operaters->id,
- 'root_id' => $operaters->root_id,
- 'uid' => $operaters->uid,
- 'is_manager'=>$operaters->is_manager
- ];
- //信息加密
- $aes = new Aes(config('app.jwt_key'));
- $key = $aes->encrypt(http_build_query($t));
- // token数据设置
- $payload = array(
- "iss" => "https://" . request()->domain(),
- "aud" => 'app',
- "iat" => time(),
- "nbf" => time(),
- "data" => $key
- );
- $data['token'] = JWT::encode($payload, config('app.jwt_key'));
- $head = User::where([['id', '=', $operaters->uid]])->value('headimgurl');
- $data['check']['headimgurl'] = $head ?: '';
- $data['company_name'] = $operaters->company->name;
- $data['name'] = $operaters->name;
- $data['phone'] = $operaters->phone;
- //默认创建一个根目录文件夹
- $floder = VrFloder::where([['root_id', '=', $operaters->root_id], ['create_user', '=', $operaters->id], ['fld_type', '=', 1], ['depth', '=', 0]])->findOrEmpty();
- if ($floder->isEmpty()) { //添加一个根目录
- VrFloder::insert([
- 'fld_name' => '我的',
- 'createtime' => time(),
- 'vr_num' => 0,
- 'fld_type' => 1,
- 'create_user' => $operaters->id,
- 'lft' => 1,
- 'rgt' => 2,
- 'depth' => 0,
- 'root_id' => $operaters->root_id
- ]);
- }
- $operaters->last_login_time = date('Y-m-d H:i:s');//最近登陆时间
- $operaters->save();
- return success('获取成功', $data);
- }
- /**
- * app工作台顶补轮播图
- * skip 0不跳 1跳转h5
- */
- public function getTopBrana()
- {
- $ali_oss_bindurl = config('app.ali_oss_bindurl');
- if ($this->rootId == 23 || $this->rootId == 1027) {
- $data = [
- 'url' => 'https://' . $ali_oss_bindurl . '/' .'Material/6497f97f79690.png',
- 'skip' => 1
- ];
- }else{
- $data = [
- 'url' => 'https://' . $ali_oss_bindurl . '/' .'Material/649109c90cd6d.jpg',
- 'skip' => 0
- ];
- }
- return success('获取成功', $data);
- }
- /**
- * 安卓手机品牌设置
- * phoneType 1=华为、2=荣耀、3=小米、4=OPPO、5=vivo
- * OPPO: 13.0 = /Music/Recordings/Call Recordings
- */
- public function getMobileBrand()
- {
- $param = Request::only(['phoneType'=>0,'systemVersion'=>0]);
- if(!$param['phoneType'] || !$param['systemVersion']) return json(['code'=>0,'data'=>'']);
- $mobile_brand = [1=>'华为',2=>'荣耀',3=>'小米',4=>'OPPO',5=>'VIVO'];
- //未知品牌手机
- if(!isset($mobile_brand[$param['phoneType']])) return json(['code'=>0,'data'=>'']);
- $version = [
- 26 => [
- 1 => '/Sounds/CallRecord',
- 2 => '/Sounds/CallRecord',
- 3=> '/MIUI/sound_recorder/call_rec',
- 4 => '/Recordings',
- 5 => '/Record/Call'
- ],
- 31 => [
- 1 => '/Sounds/CallRecord',
- 2 => '/Sounds/CallRecord',
- 3=> '/MIUI/sound_recorder/call_rec',
- 4 => '/Recordings',
- 5 => '/Recordings/Record/Call'
- ],
- 33 => [
- 1 => '/Sounds/CallRecord',
- 2 => '/Sounds/CallRecord',
- 3=> '/MIUI/sound_recorder/call_rec',
- 4 => '/Music/Recordings/Call Recordings',
- 5 => '/Recordings/Record/Call'
- ]
- ];
- if (isset($version[$param['systemVersion']])) return json(['code'=>0,'data'=>$version[$param['systemVersion']][$param['phoneType']]]);
- //未查询到版本号 使用最接近的版本号
- $keys = array_keys($version);
- rsort($keys);
- if($param['systemVersion']<end($keys)) return json(['code'=>0,'data'=>'']);
- $res = '';
- foreach ($keys as $val) {
- if($param['systemVersion'] > $val){
- $res = $version[$val][$param['phoneType']];
- }
- }
- return json(['code'=>0,'data'=>$res]);
- }
- /**
- * 保存录音文件
- * length=通话时长
- * size=文件大小
- */
- public function setMusicFile()
- {
- $param = Request::only(['customer_id'=>0,'url'=>'','size'=>0,'length'=>0]);
- if(!$param['customer_id'] || !$param['url']) return json(['code'=>1,'msg'=>'保存失败']);
- $where = [['customer_id','=',$param['customer_id']],['employee_id','=',$this->employeeId],['data_type','=','mobile_call']];
- $info = CustomerVisitLog::where($where)->order('id desc')->findOrEmpty();
- if($info->isEmpty()) return json(['code'=>1,'msg'=>'保存失败']);
- //检测录音文件
- if(!ossFileExist($param['url'])) return json(['code'=>1,'msg'=>'通话录音文件不存在']);
- if(strpos($info->remark,'#')===false) $info->remark = $info->remark.',通话时长'.$param['length'].'秒#'.$param['url'];
- $info->save();
- //修改通话时长
- $log = OutCallLog::where([['customer_id','=',$param['customer_id']],['employee_id','=',$this->employeeId]])->order('id desc')->findOrEmpty();
- if(!$log->isEmpty()){
- $log->billsec = $param['length'];
- $log->fsize = $param['size'];
- $log->url = config('app.ali_oss_bindurl').$param['url'];
- $log->status = 1;
- $log->save();
- }
- return json(['code'=>0,'data'=>'保存完成']);
- }
- }
|