Setting.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. <?php
  2. declare(strict_types=1);
  3. namespace app\mobile\controller;
  4. use app\model\VrFloder;
  5. use app\model\VrGroup;
  6. use app\model\VrView;
  7. use app\model\Employee;
  8. use app\model\User;
  9. use think\facade\Request;
  10. use vr\Krpano;
  11. use OSS\OssClient;
  12. use app\model\VrHotspot;
  13. use think\facade\Queue;
  14. use think\facade\Log;
  15. use app\model\AppSetting;
  16. use app\model\Org;
  17. use app\model\Miniprogram;
  18. use app\model\Company;
  19. use toolkits\Aec;
  20. use Firebase\JWT\JWT;
  21. use openssl\Aes;
  22. use openssl\CryptAes;
  23. use app\model\CustomerVisitLog;
  24. use app\model\OutCallLog;
  25. class Setting extends Base
  26. {
  27. /**
  28. * 获取版本设置
  29. */
  30. public function getVersion()
  31. {
  32. $param = Request::only(['type'=>'ios']);
  33. $type = $param['type']=='ios' ? 'iosVersion' : 'androidVersion';
  34. $where = [['code','in',['ossImgSetting','cutImgSize',$type]]];
  35. $data = AppSetting::where($where)->select()->toArray();
  36. $arr = [];
  37. foreach ($data as $v) {
  38. if ($v['content']) $arr = array_merge($arr,json_decode($v['content'],true));
  39. }
  40. $data = $arr;
  41. //图片oss配置
  42. $arr['ali_oss_access_key_id'] = config('app.ali_oss_access_key_id');
  43. $arr['ali_oss_access_key_secret'] = config('app.ali_oss_access_key_secret');
  44. $arr['ali_oss_end_point'] = config('app.ali_oss_end_point');
  45. $arr['ali_oss_bucket'] = config('app.ali_oss_bucket');
  46. $arr['ali_oss_bindurl'] = config('app.ali_oss_bindurl');
  47. $arr = json_encode($arr);
  48. $key = 'zqxggetuserdataa';
  49. $iv = 'zqxgivaesyoudata';
  50. $str = openssl_encrypt($arr, 'AES-128-CBC', $key,OPENSSL_RAW_DATA,$iv);
  51. $str = base64_encode($str);
  52. return json(['code'=>0,'data'=>$str,'msg'=>'','str'=>$str]);
  53. }
  54. /**
  55. * 切换店面列表
  56. * 用手机号关联不同店面
  57. */
  58. public function company()
  59. {
  60. //关联店面
  61. $phones = Employee::where([['id','=',$this->employeeId]])->value('phone');
  62. $employees = Employee::where([['phone', '=', $phones],['uid','>',0], ['state', '=', '在职'], ['disable', '=', 0]])->column('root_id, is_manager, org_id,name,uid,phone', 'root_id');
  63. $orgs = Org::where([['id', 'in', array_column($employees, 'org_id')]])->column('id,name', 'id');
  64. $notifyList = Miniprogram::where([['root_id', 'in', array_column($employees, 'root_id')]])->column('root_id,notify', 'root_id');
  65. $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();
  66. //
  67. $aec = new Aec(config('app.aec_key'), config('app.aec_iv'));
  68. foreach ($companyList as &$item) {
  69. $item['client_type'] = isset($notifyList[$item['root_id']]) ? $notifyList[$item['root_id']]['notify'] : '';
  70. $item['is_manager'] = isset($employees[$item['root_id']]) ? $employees[$item['root_id']]['is_manager'] : 0;
  71. $item['org_name'] = (isset($employees[$item['root_id']]) && isset($orgs[$employees[$item['root_id']]['org_id']])) ? $orgs[$employees[$item['root_id']]['org_id']]['name'] : '';
  72. if ($item['status'] == 1) {
  73. $item['off'] = 1;
  74. $item['off_remark'] = '账号被禁用';
  75. } elseif ($item['end_date'] < date('Y-m-d')) {
  76. $item['off'] = 1;
  77. $item['off_remark'] = '账号已过期';
  78. } else {
  79. $item['off'] = 0;
  80. $item['off_remark'] = '账号正常';
  81. }
  82. if(!empty($item['logo']) && !empty($item['brand'])){
  83. $item['brand']['logo']=$item['logo'];
  84. }
  85. $item['this'] = $item['root_id']==$this->rootId ? 1 : 0;
  86. $item['name'] = isset($employees[$item['root_id']]) ? $employees[$item['root_id']]['name'] : '';
  87. //手机号
  88. $item['phone'] = isset($employees[$item['root_id']]) ? $employees[$item['root_id']]['phone'] : '';
  89. if ($item['phone']) $item['phone'] = substr_replace($aec->decrypt($item['phone']), '******', 3, 6);
  90. $item['uid'] = isset($employees[$item['root_id']]) ? $employees[$item['root_id']]['uid'] : 0;
  91. }
  92. //头像
  93. $uids = array_column($companyList,'uid');
  94. $imgs = User::where([['id','in',$uids]])->column('headimgurl','id');
  95. //所属集团
  96. $pids = array_column($companyList,'company_group');
  97. $pname = Company::where([['id','in',$pids]])->column('company_name','id');
  98. foreach ($companyList as $key => $value) {
  99. $companyList[$key]['headimgurl'] = $value['uid']&&isset($imgs[$value['uid']]) ? $imgs[$value['uid']] : '';
  100. $companyList[$key]['p_name'] = $value['company_group']&&isset($pname[$value['company_group']]) ? $pname[$value['company_group']] : '';
  101. }
  102. return json(['code' => 0, 'data' => $companyList]);
  103. }
  104. /**
  105. * 切换店面
  106. */
  107. public function changeShop()
  108. {
  109. $param = Request::only(['root_id'=>0]);
  110. $company = Company::where('root_id',$param['root_id'])->findOrEmpty();
  111. if ($company->isEmpty() || $company->end_date < date('Y-m-d') || $company->status == 1) return json(['code' => 1, 'data' =>'切换失败','msg'=>'切换失败']);
  112. //
  113. $y_phone = Employee::where('id',$this->employeeId)->value('phone');
  114. $operaters = Employee::where([['root_id','=',$param['root_id']],['phone','=',$y_phone],['uid','>',0],['state','=','在职']])->order('last_login_time desc,updatetime desc')->findOrEmpty();
  115. if($operaters->isEmpty()) return json(['code' => 1, 'data' =>'切换失败','msg'=>'切换失败']);
  116. $t = [
  117. 'employee_id' => $operaters->id,
  118. 'root_id' => $operaters->root_id,
  119. 'uid' => $operaters->uid,
  120. 'is_manager'=>$operaters->is_manager
  121. ];
  122. //信息加密
  123. $aes = new Aes(config('app.jwt_key'));
  124. $key = $aes->encrypt(http_build_query($t));
  125. // token数据设置
  126. $payload = array(
  127. "iss" => "https://" . request()->domain(),
  128. "aud" => 'app',
  129. "iat" => time(),
  130. "nbf" => time(),
  131. "data" => $key
  132. );
  133. $data['token'] = JWT::encode($payload, config('app.jwt_key'));
  134. $head = User::where([['id', '=', $operaters->uid]])->value('headimgurl');
  135. $data['check']['headimgurl'] = $head ?: '';
  136. $data['company_name'] = $operaters->company->name;
  137. $data['name'] = $operaters->name;
  138. $data['phone'] = $operaters->phone;
  139. //默认创建一个根目录文件夹
  140. $floder = VrFloder::where([['root_id', '=', $operaters->root_id], ['create_user', '=', $operaters->id], ['fld_type', '=', 1], ['depth', '=', 0]])->findOrEmpty();
  141. if ($floder->isEmpty()) { //添加一个根目录
  142. VrFloder::insert([
  143. 'fld_name' => '我的',
  144. 'createtime' => time(),
  145. 'vr_num' => 0,
  146. 'fld_type' => 1,
  147. 'create_user' => $operaters->id,
  148. 'lft' => 1,
  149. 'rgt' => 2,
  150. 'depth' => 0,
  151. 'root_id' => $operaters->root_id
  152. ]);
  153. }
  154. $operaters->last_login_time = date('Y-m-d H:i:s');//最近登陆时间
  155. $operaters->save();
  156. return success('获取成功', $data);
  157. }
  158. /**
  159. * app工作台顶补轮播图
  160. * skip 0不跳 1跳转h5
  161. */
  162. public function getTopBrana()
  163. {
  164. $ali_oss_bindurl = config('app.ali_oss_bindurl');
  165. if ($this->rootId == 23 || $this->rootId == 1027) {
  166. $data = [
  167. 'url' => 'https://' . $ali_oss_bindurl . '/' .'Material/6497f97f79690.png',
  168. 'skip' => 1
  169. ];
  170. }else{
  171. $data = [
  172. 'url' => 'https://' . $ali_oss_bindurl . '/' .'Material/649109c90cd6d.jpg',
  173. 'skip' => 0
  174. ];
  175. }
  176. return success('获取成功', $data);
  177. }
  178. /**
  179. * 安卓手机品牌设置
  180. * phoneType 1=华为、2=荣耀、3=小米、4=OPPO、5=vivo
  181. * OPPO: 13.0 = /Music/Recordings/Call Recordings
  182. */
  183. public function getMobileBrand()
  184. {
  185. $param = Request::only(['phoneType'=>0,'systemVersion'=>0]);
  186. if(!$param['phoneType'] || !$param['systemVersion']) return json(['code'=>0,'data'=>'']);
  187. $mobile_brand = [1=>'华为',2=>'荣耀',3=>'小米',4=>'OPPO',5=>'VIVO'];
  188. //未知品牌手机
  189. if(!isset($mobile_brand[$param['phoneType']])) return json(['code'=>0,'data'=>'']);
  190. $version = [
  191. 26 => [
  192. 1 => '/Sounds/CallRecord',
  193. 2 => '/Sounds/CallRecord',
  194. 3=> '/MIUI/sound_recorder/call_rec',
  195. 4 => '/Recordings',
  196. 5 => '/Record/Call'
  197. ],
  198. 31 => [
  199. 1 => '/Sounds/CallRecord',
  200. 2 => '/Sounds/CallRecord',
  201. 3=> '/MIUI/sound_recorder/call_rec',
  202. 4 => '/Recordings',
  203. 5 => '/Recordings/Record/Call'
  204. ],
  205. 33 => [
  206. 1 => '/Sounds/CallRecord',
  207. 2 => '/Sounds/CallRecord',
  208. 3=> '/MIUI/sound_recorder/call_rec',
  209. 4 => '/Music/Recordings/Call Recordings',
  210. 5 => '/Recordings/Record/Call'
  211. ]
  212. ];
  213. if (isset($version[$param['systemVersion']])) return json(['code'=>0,'data'=>$version[$param['systemVersion']][$param['phoneType']]]);
  214. //未查询到版本号 使用最接近的版本号
  215. $keys = array_keys($version);
  216. rsort($keys);
  217. if($param['systemVersion']<end($keys)) return json(['code'=>0,'data'=>'']);
  218. $res = '';
  219. foreach ($keys as $val) {
  220. if($param['systemVersion'] > $val){
  221. $res = $version[$val][$param['phoneType']];
  222. }
  223. }
  224. return json(['code'=>0,'data'=>$res]);
  225. }
  226. /**
  227. * 保存录音文件
  228. * length=通话时长
  229. * size=文件大小
  230. */
  231. public function setMusicFile()
  232. {
  233. $param = Request::only(['customer_id'=>0,'url'=>'','size'=>0,'length'=>0]);
  234. if(!$param['customer_id'] || !$param['url']) return json(['code'=>1,'msg'=>'保存失败']);
  235. $where = [['customer_id','=',$param['customer_id']],['employee_id','=',$this->employeeId],['data_type','=','mobile_call']];
  236. $info = CustomerVisitLog::where($where)->order('id desc')->findOrEmpty();
  237. if($info->isEmpty()) return json(['code'=>1,'msg'=>'保存失败']);
  238. //检测录音文件
  239. if(!ossFileExist($param['url'])) return json(['code'=>1,'msg'=>'通话录音文件不存在']);
  240. if(strpos($info->remark,'#')===false) $info->remark = $info->remark.',通话时长'.$param['length'].'秒#'.$param['url'];
  241. $info->save();
  242. //修改通话时长
  243. $log = OutCallLog::where([['customer_id','=',$param['customer_id']],['employee_id','=',$this->employeeId]])->order('id desc')->findOrEmpty();
  244. if(!$log->isEmpty()){
  245. $log->billsec = $param['length'];
  246. $log->fsize = $param['size'];
  247. $log->url = config('app.ali_oss_bindurl').$param['url'];
  248. $log->status = 1;
  249. $log->save();
  250. }
  251. return json(['code'=>0,'data'=>'保存完成']);
  252. }
  253. }