request()->token['root_org']])->field('id, name')->select(); return json(['code' => 0, 'data' => $styleArr, 'msg' => '获取成功']); } /** * 设计师预约 */ public function designer_reserve(){ $token = request()->token; if ($token['isEmployee']) { return json(['code' => 1, 'data' =>'员工无法预约', 'msg' =>'员工无法预约']); } $param = request()->only(['id'=> '', 'designer_id'=> '', 'type'=> '', 'share_uid'=> 0]); $employee = $param['share_uid'] ? Employee::where([['uid', '=', $param['share_uid']], ['root_id', '=', $token['root_org']]])->findOrEmpty() : []; $designer_data['designer_id'] = $param['designer_id']; $designer_data['uid'] = $token['uid']; $designer_data['employee_id'] = !empty($employee) ? $employee['id'] : 0; $designer_data['pipe_type'] = 'materialCase'; $designer_data['data_id'] = $param['id']; $designer_data['root_id'] = $token['root_org']; DesignerReserve::create($designer_data); $where[] = ['id', '=', $param['designer_id']]; $where[] = ['root_id', '=', $token['root_org']]; $root_id = $token['root_org']; $data = Employee::with(['designer'=>function($query) use ($root_id){ $query->where('root_id', $root_id)->visible(['headimgurl','employee_id','desc','good_at','position','work_years','addtime','good_house','design_concept','vcr','id designer_id'])->bind(['desc','good_at','position','work_years','addtime','good_house','design_concept','vcr','name','headimgurl']); }])->where($where)->field('name title,id,show,id designer_id,root_id')->findOrEmpty(); $data['share_pipe_type'] = 'materialCase'; $data['share_data_id'] = $param['id']; event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, $data, 'designer')); //预约设计师获客线索提醒:*** 预约了 **** 设计师,请跟进沟通 $username = User::where('id', '=', $token['uid'])->value('nickname'); if (!$data->isEmpty()) { $designer_name = $data['title']; } else { $designer_name = ''; } $new = $username . '预约了' . $designer_name . '设计师,请及时跟进'; if (!empty($employee)){ event(new Msg($employee['id'], $new, 'designer')); } return json(['code' => 0, 'data' =>'预约成功', 'msg' =>'预约成功']); } /* * material case list */ public function caselist() { $param = $this->request->param(); $where[] = ['root_id', '=', request()->token['root_org']]; $where[] = ['del', '=', 0]; $where[] = ['publish', '=', 1]; setCondition($param, ['commu_id', 'community_id'], '=', $where); setCondition($param, 'style_id', '=', $where); setCondition($param, ['square_start', 'square'], '>=', $where); setCondition($param, ['square_end', 'square'], '<', $where); setCondition($param, ['keyword', 'title'], ['like', '%VALUE%'], $where); setCondition($param, 'housetype_id', '=', $where); if (!empty($param['case_type'])) { if ($param['case_type'] == 1) { $where[] = ['desc', '<>', '']; $where[] = ['desc', 'not null','']; } if ($param['case_type'] == 2) { $where[] = ['real_case', '<>', '']; $where[] = ['real_case', 'not null','']; } } $page = !empty($param['page']) ? $param['page'] : 1; $limit = !empty($param['limit']) ? $param['limit'] : 15; $list = MaterialCase::with(['community','decostyle'])->field('id,title,cover_img,view_times,square,addtime,community_id,style_id,vr_case,recommend')->where($where)->page($page, $limit)->order('recommend desc, updatetime desc')->select(); return json(['code' => 0, 'data' => $list, 'msg' => '获取成功']); } /** * 装修案例 */ public function casedetail() { $id = $this->request->param('id'); $share = input('share', '', 'trim'); $data = MaterialCase::with([ 'community', 'designer', 'decostyle', 'housetype' ])->find($id); $token = $this->request->token; if ($data['designer']){ $designer = Designer::where([['employee_id', '=', $data['designer']['id']], ['root_id', '=', $token['root_org']]])->findOrEmpty(); if (!$designer->isEmpty()) { $data['designer']['good_at'] = $designer['good_at']; $data['designer']['position'] = $designer['position']; } else { $data['designer']['good_at'] = ''; $data['designer']['position'] = ''; } $data['designer']['headimgurl'] = User::where('id', '=', $data['designer']['uid'])->value('headimgurl'); } if (empty($share) && !$token['isEmployee']){ MaterialCase::where('id', $id)->inc('view_times')->update(); } if (!empty($token['uid']) && !$token['isEmployee'] && empty($share)) { event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, $data)); } // 关联案例 if (!empty($data['designer_id'])) { $relatedcaselist = MaterialCase::where([['designer_id', '=', $data->designer_id], ['id', '<>', $id], ['root_id', '=', $token['root_org']], ['del', '=', 0], ['publish', '=', 1]]) ->with(['community' => function ($query) { $query->field('id,name'); }, 'decostyle' => function ($query) { $query->field('id,name'); }])->page(1, 4)->order('id desc')->select()->each(function ($item) { $item->clue_number = CustomerClue::where([['pipe_type', '=', 'materialCase'], ['pipe_id', '=', $item['id']]])->count(); })->toArray(); } else { $relatedcaselist = []; } $data['designer_related_cases'] = $relatedcaselist; // 查询上一条 $data['preid'] = MaterialCase::where([['updatetime', '>', $data['updatetime']], ['id', '<>', $id]]) ->order('updatetime asc')->value('id'); $data['nextid'] = MaterialCase::where([['updatetime', '<', $data['updatetime']], ['id', '<>', $id]]) ->order('updatetime desc')->value('id'); // 为null处理,防止前端报错 $data['real_case'] = !is_null($data['real_case']) ? $data['real_case'] : ''; $data['desc'] = !is_null($data['desc']) ? $data['desc'] : ''; $data['vr_case'] = !is_null($data['vr_case']) ? $data['vr_case'] : ''; $data['housetype']['name'] = $data->housetype->name; return json(['code' => 0, 'data' => $data, 'msg' => '获取成功']); } /** * 设计师相关案例 */ public function designercases() { $data = input(); //$style_id = $data['style_id']; $page = $data['page']; $limit = $data['limit']; $material_case_id = input('material_case_id', '', 'intval'); if ($material_case_id) {//相关推荐时,去除所查看的案例 $where[] = ['id', '<>', $material_case_id]; } //$where[] = ['style_id', '=', $style_id]; $designer_id = input('designer_id', '', 'intval'); if ($designer_id) { $where[] = ['designer_id', '=', $designer_id]; } else { return json(['code' => 0, 'data' => [], 'msg' => '获取成功']); } $where[] = ['root_id', '=', request()->token['root_org']]; $where[] = ['del', '=', 0]; $where[] = ['publish', '=', 1]; $relatedcaselist = MaterialCase::where($where)->with(['community', 'decostyle'])->page($page, $limit)->order('id desc')->select(); return json(['code' => 0, 'data' => $relatedcaselist, 'msg' => '获取成功']); } /* * 口碑见证列表 */ public function evidencelist() { $param = $this->request->param(); $param['difference'] = isset($param['difference']) ? $param['difference'] : 0; $where[] = ['root_id', '=', request()->token['root_org']]; $where[] = ['del', '=', 0]; $where[] = ['publish', '=', 1]; if ($param['difference']) { $where[] = ['difference', '=', $param['difference']]; } setCondition($param, 'cate', '=', $where); setCondition($param, ['keyword', 'title'], ['like', '%VALUE%'], $where); $page = !empty($param['page']) ? $param['page'] : 1; $limit = !empty($param['limit']) ? $param['limit'] : 15; $list = MaterialEvidence::where($where)->limit($limit)->page($page, $limit)->order('addtime desc')->select(); return json(['code' => 0, 'data' => $list, 'msg' => '获取成功']); } /** * 口碑见证详情 */ public function evidencedetail($id) { $evidence = MaterialEvidence::find($id); $token = $this->request->token; if (!$token['isEmployee']) { MaterialEvidence::where(['id' => $id])->inc('view_times')->update(); } // 足迹 if (!empty($token['uid']) && !$token['isEmployee']) { event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, $evidence)); } if (empty($evidence)) return json(['code' => self::error_msg, 'msg' => '数据不存在']); // 查询上一条 $lastId = MaterialEvidence::where([['addtime', '>', $evidence->addtime], ['id', '<>', $id]]) ->order('addtime asc')->value('id'); $nextId = MaterialEvidence::where([['addtime', '<', $evidence->addtime], ['id', '<>', $id]]) ->order('addtime desc')->value('id'); return json(['code' => 0, 'data' => $evidence, 'msg' => '获取成功', 'lastId' => $lastId, 'nextId' => $nextId]); } /** * 口碑见证分类 */ public function evidenceCate() { $styleArr = EvidenceCate::where(['root_id' => request()->token['root_org']])->field('id, name')->select(); return json(['code' => 0, 'data' => $styleArr, 'msg' => '获取成功']); } /* * 装修案例户型 */ public function housetypelist() { $housetypeArr = Housetype::where(['root_id' => request()->token['root_org']])->field('id,name')->select(); return json(['code' => 0, 'data' => $housetypeArr, 'msg' => '获取成功']); } /** * 装修案例小区列表 */ public function communitylist() { $communityArr = Community::where(['root_id' => request()->token['root_org']])->where([['type', '=', 0]])->field('id,name,pinyin,case_num')->select()->toArray(); $comidlist = array_column($communityArr, 'id'); $caseData = MaterialCase::where([['community_id', 'in', $comidlist], ['del', '=', 0], ['publish', '=', 1]])->group('community_id')->order('updatetime asc')->column('max(updatetime) as updatetime, sum(shared_times) as shared_times, count(id) as case_num', 'community_id'); foreach ($communityArr as &$i) { if (isset($caseData[$i['id']])) { $i['updatetime'] = $caseData[$i['id']]['updatetime']; $i['shared_times'] = (int)$caseData[$i['id']]['shared_times']; $i['case_num'] = (int)$caseData[$i['id']]['case_num']; } else { $i['updatetime'] = 0; $i['shared_times'] = 0; $i['case_num'] = 0; } } return json(['code' => 0, 'data' => $communityArr, 'msg' => '获取成功']); } /* * 案例vr足迹、热装楼盘vr足迹、线上展厅vr、名片vr */ public function vrfootprints() { $param = $this->request->param(); if(!in_array($param['type'],['materialCase','building','company','employeeCard','construction','groupVr','housetype'])){ return json(['code' => 1, 'msg' => '类型错误']); } if($param['type'] == 'company'){ $className = 'app\\model\\CompanyVrshow'; $obj = new $className(); $data = $obj->where('id',$param['id'])->field('id,url as vr_show,name')->find(); if(empty($data)) return json(['code' => 1, 'msg' => '数据不存在']); }if ($param['type'] == 'groupVr') { $className = 'app\\model\\VrGroup'; $obj = new $className(); $data = $obj->where('id|sid',$param['id'])->find(); if(empty($data)) return json(['code' => 1, 'msg' => '数据不存在']); $param['type'] = 'group'; }elseif($param['type'] == 'housetype'){ // $className = 'app\\model\\BuildingHousetype'; $obj = new $className(); $data = $obj->where('id',$param['id'])->find(); }else{ $className = 'app\\model\\' . ucfirst($param['type']); $obj = new $className(); $field = $param['type'] == 'employeeCard' ? 'employee_id' : 'id'; $data = $obj->where($field,$param['id'])->find(); } if(isset($param['prompt'])) $data->prompt = $param['prompt'];//扩展字段 按需求使用 // 足迹 $token = $this->request->token; if (!empty($token['uid']) && !$token['isEmployee']) { event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, $data, $param['type'].'Vr')); } } /** * vr作品场景 浏览详情 * 作品中的每个场景具体浏览了多长时间 * id 作品id或者sid * view_id 场景id * time 浏览时长 * viewtime 浏览场景的具体时间 */ public function saveViewFoots() { $token = $this->request->token; $param = Request::only(['sid','view_id','time'=>0,'viewtime'=>'']); $id = VrGroup::where('id|sid',$param['sid'])->value('id'); $where = [['uid', '=', $token['uid']],['pipe_type','like','%Vr%']]; $info = FootprintsModel::where($where)->order('id desc')->findOrEmpty(); if($info->isEmpty()) return json(['code' => 1,'data'=>'足迹不存在', 'msg' => '足迹不存在']); $arr = $info->getData('reg_info') ? json_decode($info->getData('reg_info'),true) : []; $ls_arr = [['vid'=>$param['view_id'],'time'=>$param['time'],'viewtime'=>$param['viewtime']]]; $arr['view_foots'] = isset($arr['view_foots']) ? array_merge($arr['view_foots'],$ls_arr) : $ls_arr; $info->reg_info = json_encode($arr); if($arr['view_foots']) $info->visit_due_time = array_sum(array_column($arr['view_foots'],'time')); $info->save(); return json(['code'=>0,'data'=>'保存完成','msg'=>'保存完成']); } }