123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- <?php
- namespace app\client\controller;
- use app\event\FootPrints;
- use app\event\Msg;
- use app\model\Community;
- use app\model\CompanyVrshow;
- use app\model\CustomerClue;
- use app\model\DesignerReserve;
- use app\model\Employee;
- use app\model\MaterialCase;
- use app\model\Decostyle;
- use app\model\EvidenceCate;
- use app\model\Housetype;
- use app\model\MaterialEvidence;
- use app\model\Designer;
- use app\model\User;
- use app\model\VrGroup;
- use app\model\Footprints as FootprintsModel;
- use think\facade\Request;
- class Material extends Base
- {
- /**
- * 装修案例风格
- */
- public function decostylelist()
- {
- $styleArr = Decostyle::where(['root_id' => 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'=>'保存完成']);
- }
- }
|