123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547 |
- <?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 app\model\AppSetting;
- use app\model\Wechat;
- use app\model\Miniprogram;
- use toolkits\Aec;
- use app\model\Building;
- use app\model\BuildingHousetype;
- use app\model\BuildingProgress;
- class Group extends Base
- {
- /**
- * 个人中心-内容管理 列表
- */
- public function myContentList()
- {
- //固定5个倒序
- $res = VrGroup::where([['emp_id','=',$this->employeeId],['status','=',2]])->limit(5)->order('id desc')->field('id,pic_path,title,sid,status')->select()->toArray();
- //今日新增数量
- $count = VrGroup::where([['emp_id','=',$this->employeeId],['createtime','>=',strtotime(date('Y-m-d'))]])->count();
- return json(['code'=>0,'data'=>$res,'count'=>$count,'msg'=>'']);
- }
- /**
- * 作品列表
- */
- public function list()
- {
- $param = Request::only(['floder_id'=>0,'limit'=>10,'page'=>1,'status'=>'']);
- $where = [
- ['floder_id','=',$param['floder_id']],
- ['emp_id','=',$this->employeeId],
- ['status','<>',0]
- ];
- if($param['status']!=='') $where[] = ['status','=',$param['status']];
- $res = VrGroup::where($where)->page((int)$param['page'],(int)$param['limit'])->order('id desc')->select()->toArray();
- $count = VrGroup::where($where)->count();
- return json(['code'=>0,'data'=>$res,'msg'=>'']);
- }
- /**
- * 获取草稿箱作品
- */
- public function getDraftsList()
- {
- $param = Request::only(['page'=>1,'limit'=>10]);
- $where = [
- ['status','=',0],
- ['emp_id','=',$this->employeeId]
- ];
- $data = VrGroup::where($where)->field('id,pic_path,updatetime,title,sid,status')->order('id desc')->page((int)$param['page'],(int)$param['limit'])->select()->toArray();
- foreach ($data as $k => $v) {
- $data[$k]['updatetime'] = $v['updatetime'] ? date('Y.m.d H:i',strtotime($v['updatetime'])) : '';
- }
- $count = VrGroup::where($where)->count();
- return json(['code'=>0,'data'=>$data,'count'=>$count]);
- }
- /**
- * 获取文件夹直属作品
- */
- public function getGroupList()
- {
- $param = Request::only(['page'=>1,'limit'=>10,'id'=>0]);
- $where = [
- ['floder_id','=',$param['id']],
- ['root_id','=',$this->rootId],
- ['status','<>',0]
- ];
- $data = VrGroup::where($where)->field('id,pic_path,updatetime,title,sid,status')->page((int)$param['page'],(int)$param['limit'])->select()->toArray();
- foreach ($data as $k => $v) {
- $data[$k]['updatetime'] = $v['updatetime'] ? date('Y.m.d H:i',strtotime($v['updatetime'])) : '';
- }
- $count = VrGroup::where($where)->count();
- return json(['code'=>0,'data'=>$data,'count'=>$count]);
- }
- /**
- * 获取作品详情
- */
- public function getGroupRead()
- {
- $param = Request::only(['id'=>0]);
- $where = [
- ['id','=',$param['id']],
- ['root_id','=',$this->rootId],
- ['emp_id','=',$this->employeeId]
- ];
- $info = VrGroup::with(['views'=>function($query){
- $query->order('sort asc,id asc');
- }])->where($where)->findOrEmpty();
- if($info->isEmpty()) return json(['code'=>1,'data'=>'获取失败','msg'=>'获取失败']);
- $where = [
- ['vr_group_id','=',$info->id]
- ];
- $views = VrView::with(['hotspot'])->where($where)->order('sort asc')->select()->toArray();
- $ali_oss_bindurl = config('app.vr_ali_oss_bindurl');
- $url = 'https://' . $ali_oss_bindurl;
- foreach ($views as $k => $v) {
- $views[$k]['vr_path'] = $url.'/'.$v['structure'];
- foreach ($v['hotspot'] as $k2 => $v2) {
- $arr = [];
- $arr1 = $v2['embedValue'] ? explode('|',$v2['embedValue']) : [];
- foreach ($arr1 as $v3) {
- $arr1_1 = explode(',',$v3);
- $arr[] = ['ath'=>$arr1_1[0],'atv'=>$arr1_1[1]];
- }
- $v2['embedValue'] = $arr;
- $arr2 = $v2['titlePosition'] ? explode(',',$v2['titlePosition']) : [];
- $v2['titlePosition'] = $arr2 ? ['ath'=>$arr2[0],'atv'=>$arr2[1]] : [];
- $json = json_encode($v2);
- $views[$k]['hotspot'][$k2] = ['content'=>$json];
- unset($json);
- }
- }
- $info->views = $views;
- //头像手机号二维码
- $emp = Employee::where('id',$this->employeeId)->field('uid,qrcode,phone')->find();
- $emp->headimgurl = User::where('id',$emp->uid)->value('headimgurl');
- return json(['code'=>0,'data'=>$info,'emp'=>$emp]);
- }
- /**
- * 编辑作品
- */
- public function editGroup()
- {
- $param = Request::only(['id'=>0,'title'=>'','logo_path'=>'','desc'=>'','size'=>'','pic_path'=>'','floder_id'=>0]);
- $where = [
- ['id','=',$param['id']],
- ['root_id','=',$this->rootId],
- ['emp_id','=',$this->employeeId]
- ];
- $info = VrGroup::where($where)->findOrEmpty();
- if($info->isEmpty()) return json(['code'=>1,'data'=>'','msg'=>'编辑失败']);
- unset($param['id']);
- if(empty($param['title'])) unset($param['title']);
- if(empty($param['logo_path'])) unset($param['logo_path']);
- if(empty($param['desc'])) unset($param['desc']);
- if(empty($param['size'])) unset($param['size']);
- if(empty($param['pic_path'])) unset($param['pic_path']);
- foreach ($param as $k => $v) {
- $info->$k = $v;
- }
-
- $info->updatetime = time();
- $info->save();
- return json(['code'=>0,'data'=>'保存完成','msg'=>'保存完成']);
- }
- /**
- * 发布作品
- */
- public function releaseGroup()
- {
- $param = Request::only(['id'=>0,'floder_id'=>0]);
- $where = [
- ['id','=',$param['id']],
- ['root_id','=',$this->rootId],
- ['emp_id','=',$this->employeeId]
- ];
- $info = VrGroup::where($where)->findOrEmpty();
- //2023-06-02 修改 可以重复编辑 可以重复发布
- // $msg = $info->isEmpty() ? '发布失败' : ($info->status==2 ? '作品已发布' : false);
- $msg = $info->isEmpty() ? '发布失败' : false;
- if($msg !== false) return json(['code'=>1,'data'=>$msg,'msg'=>$msg]);
- $switch = AppSetting::where([['code','=','auditSwitch'],['root_id','=',$this->rootId],['content','=',1]])->findOrEmpty();
- $info->status = $switch->isEmpty() ? 2 : 1;
- $info->publish_time = time();
- $info->review_time = time();
- if($param['floder_id']) $info->floder_id = $param['floder_id'];
- $info->save();
- $msg = $switch->isEmpty() ? '发布成功' : '发布完成,等待审核';
- if($info->status==2) dataStatistics($this->rootId,'group_count',1,'inc');//manage应用首页统计数据
- return json(['code'=>0,'data'=>$msg,'msg'=>$msg]);
- }
-
- /**
- * 创建一个作品
- */
- public function saveGroup()
- {
- $param = Request::only(['floder_id'=>0]);
- $sid = md5(time().'@'.mt_rand(1,99999999));
- $id = VrGroup::insertGetId([
- 'title'=>'',
- 'createtime'=>time(),
- 'status'=>0,
- 'updatetime'=>time(),
- 'emp_id'=>$this->employeeId,
- 'org_path'=>'',
- 'logo_path'=>'',
- 'floder_id'=>$param['floder_id'],
- 'desc'=>'',
- 'pic_path'=>'',
- 'view_count'=>0,
- 'root_id'=>$this->rootId,
- 'size'=>0,
- 'sid'=>$sid
- ]);
- return json(['code'=>0,'id'=>$id,'sid'=>$sid]);
- }
- /**
- * 保存场景
- * id 作品id
- * size 图片大小
- */
- public function saveImg()
- {
- $param = Request::only(['urls'=>'','id'=>0,'size'=>0,'view_title'=>'']);
- //垃圾数据
- if(empty($param['urls']) || strpos($param['urls'],'.jpg')===false) return json(['code'=>1,'data'=>'创建失败','msg'=>'创建失败']);
- //oss文件是否存在
- if(!$this->ossCheck($param['urls'])) return json(['code'=>1,'data'=>'文件不存在','msg'=>'文件不存在']);
- $group_info = VrGroup::where([['emp_id','=',$this->employeeId],['id','=',$param['id']]])->findOrEmpty();
- if($group_info->isEmpty() || !$param['size']) return json(['code'=>1,'data'=>'创建失败','msg'=>'创建失败']);
- $floder = explode('/',$param['urls']);//文件夹结构
- $img = end($floder);//文件名+后缀
- $img_arr = explode('.',$img);
- $vid = VrView::insertGetId([
- 'view_title'=>$param['view_title'],
- 'createtime'=>time(),
- 'updatetime'=>time(),
- 'pic_path'=>$param['urls'],//封面图
- 'emp_id'=>$this->employeeId,
- 'org_path'=>'',
- 'size'=>$param['size'],
- 'sort'=>9999,
- 'vr_group_id'=>$param['id'],
- 'vr_path'=>$img_arr[0],
- 'logo_path'=>'',
- 'structure'=>implode('/',array_diff($floder,[$img])).'/',
- 'root_id' => $this->rootId,
- 'cut_img_status'=>0
- ]);
- //作品大小
- $group_info->size = $group_info->size ? $group_info->size+$param['size'] : $param['size'];
- $group_info->view_count = $group_info->view_count ? $group_info->view_count+1 : 1;
- if (empty($group_info->pic_path)) $group_info->pic_path = $param['urls'];
- $group_info->save();
- //入队列然后返回
- $this->queued($vid);
- dataStatistics($this->rootId,'use_count',$param['size'],'inc');//manage应用首页统计数据
- return json(['code'=>0,'id'=>$param['id'],'sid'=>$group_info->sid]);
- }
- /**
- * 入切图队列
- */
- public function queued($id)
- {
- $jobHandlerClassName = 'app\jobs\CutImg';
- $jobQueueName = 'cutimg2';
- $orderData = [ //这个是需要传到消费者的数据
- 'view_id'=>$id
- ];
- $isPushed = Queue::later(0, $jobHandlerClassName, $orderData, $jobQueueName);
- return true;
- }
- /**
- * 编辑作品logo
- */
- public function editGroupLogo()
- {
- $param = Request::only(['id'=>0,'logo_path'=>'']);
- $where = [
- ['id','=',$param['id']],
- ['root_id','=',$this->rootId],
- ['emp_id','=',$this->employeeId]
- ];
- $info = VrGroup::where($where)->findOrEmpty();
- if($info->isEmpty()) return json(['code'=>1,'data'=>'','msg'=>'编辑失败']);
- $info->logo_path = $param['logo_path'];
- $info->save();
- return json(['code'=>0,'data'=>'保存完成','msg'=>'保存完成']);
- }
- /**
- * 编辑作品遮罩
- */
- public function editGroupMask()
- {
- $param = Request::only(['id'=>0,'mask'=>'','times'=>0]);
- $where = [
- ['id','=',$param['id']],
- ['root_id','=',$this->rootId],
- ['emp_id','=',$this->employeeId]
- ];
- $info = VrGroup::where($where)->findOrEmpty();
- if($info->isEmpty()) return json(['code'=>1,'data'=>'','msg'=>'编辑失败']);
- $info->mask = $param['mask'];
- $info->times = $param['times'];//放大缩小倍数
- $info->save();
- return json(['code'=>0,'data'=>'保存完成','msg'=>'保存完成']);
- }
- /**
- * 作品场景排序
- */
- public function groupOrder()
- {
- $param = Request::only(['id'=>0,'order'=>'']);
- $where = [
- ['id','=',$param['id']],
- ['root_id','=',$this->rootId],
- ['emp_id','=',$this->employeeId]
- ];
- $info = VrGroup::where($where)->findOrEmpty();
- if($info->isEmpty() || empty($param['order'])) return json(['code'=>1,'data'=>'','msg'=>'编辑失败']);
- $orders = explode(',',$param['order']);
- foreach ($orders as $k => $v) {
- VrView::where([['vr_group_id','=',$param['id']],['id','=',$v]])->update(['sort'=>$k]);
- }
- return json(['code'=>0,'data'=>'排序完成','msg'=>'排序完成']);
- }
- /**
- * 编辑热点
- */
- public function editHotspot()
- {
- $param = Request::only(['id'=>0,'hotspot'=>'']);
- $where = [
- ['id','=',$param['id']],
- ['emp_id','=',$this->employeeId]
- ];
- $info = VrHotspot::where($where)->findOrEmpty();
- if($info->isEmpty() || empty($param['hotspot'])) return json(['code'=>1,'data'=>'','msg'=>'编辑失败']);
- $arr = $this->checkArr($param['hotspot']);
- foreach ($arr as $key => $value) {
- $info->$key = $value;
- }
- $info->save();
- return json(['code'=>0,'data'=>'保存完成','msg'=>'保存完成']);
- }
- private function checkArr($json){
- $arr = json_decode($json,true);
- $data = [];
- foreach ($arr as $key => $val) {
- if ($key=='embedValue') {
- $embedValue = [];
- foreach ($val as $value) {
- $embedValue[] = $value['ath'].','.$value['atv'];
- }
- $data['embedValue'] = $embedValue ? implode('|',$embedValue) : '';
- }elseif ($key=='titlePosition' && !empty($arr[$key])) {
- $data['titlePosition'] = $val['ath'].','.$val['atv'];
- }else{
- $data[$key] = $val;
- }
- }
- if(isset($data['isSelected'])) unset($data['isSelected']);
- $data['embedType'] = !empty($data['embedValue']) ? 1 : 0;
- return $data;
- }
- /**
- * 添加热点
- */
- public function addHotspot()
- {
- $param = Request::only(['view_id'=>0,'hotspot'=>'']);
- $where = [
- ['id','=',$param['view_id']],
- ['emp_id','=',$this->employeeId]
- ];
- $info = VrView::where($where)->findOrEmpty();
- if($info->isEmpty() || empty($param['hotspot'])) return json(['code'=>1,'data'=>'','msg'=>'添加失败']);
- $save = [
- 'view_id'=>$param['view_id'],
- 'emp_id'=>$this->employeeId,
- 'root_id'=>$this->rootId
- ];
- $arr = $this->checkArr($param['hotspot']);
- $save = array_merge($save,$arr);
- $res = VrHotspot::create($save);
- return json(['code'=>0,'data'=>$res,'msg'=>'保存完成']);
- }
- /**
- * 删除热点
- */
- public function delHotspot()
- {
- $param = Request::only(['id'=>0]);
- $where = [
- ['id','=',$param['id']],
- ['emp_id','=',$this->employeeId]
- ];
- $info = VrHotspot::where($where)->findOrEmpty();
- if($info->isEmpty()) return json(['code'=>1,'data'=>'','msg'=>'删除失败']);
- VrHotspot::where($where)->delete();
- return json(['code'=>0,'data'=>'删除完成','msg'=>'删除完成']);
- }
- /**
- * 删除作品
- */
- public function delGroup()
- {
- $param = Request::only(['id'=>0]);
- $where = [
- ['id','=',$param['id']],
- ['root_id','=',$this->rootId],
- ['emp_id','=',$this->employeeId]
- ];
- $info = VrGroup::where($where)->findOrEmpty();
- $msg = $info->isEmpty() ? '删除失败' : ($info->status==1 ? '审核中无法删除' : false);
- if($msg !== false) return json(['code'=>1,'data'=>'','msg'=>$msg]);
- //关联楼盘户型之后不让删除
- $del_arr = ['app\model\Building'=>'营销楼盘','app\model\BuildingHousetype'=>'楼盘户型','app\model\BuildingProgress'=>'楼盘进度','app\model\ConstructionRecord'=>'在施工地'];
- $check_res = false;
- foreach ($del_arr as $key => $value) {
- $obj = new $key();
- $del_where = [['vr_group_ids','=',$param['id']]];
- $check = $obj->where($del_where)->value('id');
- if($check){
- $check_res = $value;
- break;
- }
- }
- if($check_res !== false) return json(['code'=>1,'data'=>'','msg'=>'已经关联'.$check_res.',无法删除']);
- //所有场景
- $where1 = [['vr_group_id','=',$info->id]];
- $views = VrView::where($where1)->column('id,cut_img_size,size,vr_path,structure');
- //所有热点
- $vids = array_column($views,'id');
- $where2 = [['view_id','in',$vids]];
- VrGroup::where($where)->delete();
- VrView::where($where1)->delete();
- VrHotspot::where($where2)->delete();
- //删除oss文件
- foreach ($views as $val) {
- $file = $val['structure'];
- $this->delOss($val['structure'],$val['vr_path']);
- }
- dataStatistics($this->rootId,'group_count',1,'dec');//manage应用首页统计数据
- dataStatistics($this->rootId,'use_count',$info->size,'dec');//manage应用首页统计数据
- return json(['code'=>0,'data'=>'删除完成','msg'=>'删除完成']);
- }
- /**
- * 删除oss
- */
- public function delOss($str,$name)
- {
- $arr = ['image_b','image_d','image_f','image_l','image_r','image_u','preview','thumb',$name];
- $objects = [];
- foreach ($arr as $v) {
- $objects[] = $str.$v.'.jpg';
- }
- $accessKeyId = config('app.vr_ali_oss_access_key_id');
- $accessKeySecret = config('app.vr_ali_oss_access_key_secret');
- $endpoint = config('app.vr_ali_oss_end_point');
- $bucket = config('app.vr_ali_oss_bucket');
- $oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
- try {
- $exist = $oss->deleteObjects($bucket, $objects);
- //删除空文件夹 oss自动删除空文件夹
- // $res = $oss->deleteBucket($bucket, $str);
- return true;
- } catch (OssException $e) {
- return false;
- }
- }
- /*
- * oss检测文件
- */
- private function ossCheck($file)
- {
- // $file = 'vr/2023/03/18/9F8E30932ECE44EB9C7FBC87A44FBD3D/9F8E30932ECE44EB9C7FBC87A44FBD3D.jpg';
- $accessKeyId = config('app.vr_ali_oss_access_key_id');
- $accessKeySecret = config('app.vr_ali_oss_access_key_secret');
- $endpoint = config('app.vr_ali_oss_end_point');
- $bucket = config('app.vr_ali_oss_bucket');
- $oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
- try {
- $exist = $oss->doesObjectExist($bucket, $file);
- return $exist;
- } catch (OssException $e) {
- return false;
- }
- }
- /**
- * 作品转移
- */
- public function shiftGroup()
- {
- $param = Request::only(['id'=>0,'floder_id'=>0]);
- $where = [
- ['id','=',$param['id']],
- ['root_id','=',$this->rootId],
- ['emp_id','=',$this->employeeId]
- ];
- $info = VrGroup::where($where)->findOrEmpty();
- if($info->isEmpty()) return json(['code'=>1,'data'=>'','msg'=>'转移失败']);
- $info->floder_id = $param['floder_id'];
- $info->save();
- return json(['code'=>0,'data'=>'转移完成','msg'=>'转移完成']);
- }
- /**
- * 获取小程序分享信息
- * pages/other/other?ctp=wzh68h&uid=123&type=vr&vrurl=https%3A//saastest.zhuangqixiaoguan.com/vr/%23/fe6d15f92136038ac49882238b3392d3/0/WmlRbllhTnl0MWtTMTFpSzkvcGRoUT09&emp=1
- */
- public function getShareApplet($id)
- {
- $aec = new Aec(config('app.aec_key'), config('app.aec_iv'));
- $where = [
- ['id','=',$id],
- ['root_id','=',$this->rootId]
- ];
- $info = VrGroup::where($where)->field('id,title,sid,pic_path,emp_id')->findOrEmpty();
- $info->content = '';
- $info->url = config('app.vr_show_domain').$info->sid.'/'.'0/'.$aec->encrypt($this->rootId.'#'.$info->emp_id);
- $info->thumbImg = $info->pic_path;
- $info->appid = Wechat::where('id',3)->value('account');
- $info->path = '';
- $info->ProgramType = 0;//0正式 1体验版 2开发板
- $info->isShareProgram = 1;//是否分享小程序 1分享 0跳转
- //
- $notify = Miniprogram::where('root_id',$this->rootId)->value('notify');
- $emp = Employee::where('id',$info->emp_id)->field('id,uid')->find();
-
- $str = 'pages/other/other?ctp='.$notify.'&uid='.$emp->uid.'&type=vr&vrurl='.$info->url.'&emp=1&cty=groupVr&aid='.$id;
- $info->path = $str;
- return json(['code'=>0,'data'=>$info]);
- }
- }
|