withAttr('phone', function ($value) { return substr_replace($value, '*******', 2, 7); })->field('name,phone')->limit(10)->order('addtime asc')->select(); return json(['code' => 0, 'data' => $data]); } /** * 报名 视频下报名装修设计、热装楼盘询问装修、四个vr询问装修设计 */ public function signUp() { $token = request()->token; // 判断是否是员工 if ($token['isEmployee']) return json(['code' => 1, 'msg' => '员工无需报名']); $employee_id = $token['share_employee'] ?? 0; $root_id = $token['root_org']; $data = $this->request->only(['name', 'remark', 'mobile']); $data = array_filter($data); $type = input('type', '', 'trim'); $data_id = input('id', '', 'intval'); $objData = []; switch ($type) { case 'video': $objData = Video::where('id', '=', $data_id)->findOrEmpty(); break; case 'building': $objData = Building::where('id', '=', $data_id)->findOrEmpty(); break; case 'materialCaseVr': $info = MaterialCase::where('id', '=', $data_id)->findOrEmpty(); if (!$info->isEmpty()) { $objData['title'] = '案例"' . $info['title'] . '"VR'; } else { $objData['title'] = '案例VR'; } $objData['id'] = $data_id; break; case 'buildingVr': $info = Building::where('id', '=', $data_id)->findOrEmpty(); if (!$info->isEmpty()) { $objData['title'] = '热装楼盘"' . $info['name'] . '"VR'; } else { $objData['title'] = '热装楼盘VR'; } $objData['id'] = $data_id; break; case 'constructionVr': $info = Construction::where('id', '=', $data_id)->findOrEmpty(); if (!$info->isEmpty()) { $objData['title'] = '在施工地"' . $info['name'] . '"VR'; } else { $objData['title'] = '在施工地VR'; } $objData['id'] = $data_id; break; case 'companyVr': $objData['title'] = 'VR展厅'; break; case 'employeeCardVr': $objData['title'] = 'VR名片'; break; case 'TrainClassList': $info = Company::where('root_id', '=', $data_id)->findOrEmpty(); if (!$info->isEmpty()) { $objData['title'] = $info['company_name'] . '的课程列表'; } else { $objData['title'] = '课程列表'; } //$objData['id'] = $data_id; break; case 'TrainClass': $info = TrainClass::where([['root_id', '=', $token['root_org']],['id','=',$data_id]])->findOrEmpty(); if (!$info->isEmpty()) { $objData['title'] = $info['title'] . '的课程'; } else { $objData['title'] = '学习课程'; } $objData['id'] = $data_id; break; case 'TrainCourse': $info = TrainCourse::where([['root_id', '=', $token['root_org']],['id','=',$data_id]])->findOrEmpty(); if (!$info->isEmpty()) { $objData['title'] = $info['title'] . '的课件'; } else { $objData['title'] = '学习课件'; } $objData['id'] = $data_id; break; default: break; } $data['data'] = $objData; $data['uid'] = $token['uid']; // 添加足迹 if (!empty($data['uid'])) { event(new FootPrints($data['uid'], $employee_id, $root_id, $data, 'share')); } $user = User::findOrEmpty($data['uid']); if ($user->isEmpty()) { $user['nickname'] = '客户'; } switch ($type) { case 'video': $new = $user['nickname'] . '预约了装修服务,请及时跟进'; if ($employee_id) { event(new Msg($employee_id, $new, 'share_clue')); } break; case 'building': $new = $user['nickname'] . '询问了装修,请及时跟进'; if ($employee_id) { event(new Msg($employee_id, $new, 'share_clue')); } break; default: $new = $user['nickname'] . '询问了设计,请及时跟进'; if ($employee_id) { event(new Msg($employee_id, $new, 'share_clue')); } break; } return json(['code' => 0, 'msg' => '报名成功']); } /** * 获取装修设计方案报名 */ public function getDecorationDesign() { $token = request()->token; // 判断是否是员工 if ($token['isEmployee']) return json(['code' => 1, 'msg' => '员工无需报名']); // 查询员工信息 $employee_id = isset($token['share_employee']) ? intval($token['share_employee']) : 0; if (empty($employee_id)) return json(['code' => 0, 'msg' => '报名成功']); $employee = Employee::find($employee_id); $org_id = $employee->org_id; $root_id = $employee->root_id; $e_where[] = ['uid', '=', $token['uid']]; $e_where[] = ['state', 'in', ['在职', '待审核']]; $e_where[] = ['root_id', '=', $root_id]; $isEmployee = Employee::where($e_where)->findOrEmpty(); if (!$isEmployee->isEmpty()) return json(['code' => 1, 'msg' => '员工无需报名']); // 检测防止重复提交 $hadList = ModelFootprints::where([['uid', '=', $token['uid']], ['employee_id', '=', $employee_id], ['pipe_type', '=', 'getDecorationDesign']])->count(); if ($hadList) { return json(['code' => 1, 'msg' => '您已报名成功,请勿重复报名']); } $type = ucfirst(input('type', '', 'trim')); $id = input('id', '', 'intval'); // 初始化类型 $msgType = [ 'Article' => ['拓客图文', 'title'], 'MaterialCase' => ['案例', 'title'], 'Building' => ['热装楼盘', 'name'], 'Construction' => ['在施工地', 'name'], 'MaterialEvidence' => ['客户好评', 'title'], 'Video' => ['拓客视频', 'title'], 'CompanyStrength' => ['公司实力', 'title'] ]; // 判断类型是否正确 if (!isset($msgType[$type])) return json(['code' => 1, 'msg' => '类型不存在']); // 获取分享内容 $class = 'app\\model\\' . $type; $obj = new $class(); $objData = $obj->find($id); if (empty($objData)) return json(['code' => 1, 'msg' => '内容不存在']); // 获取报名信息 $data = $this->request->only(['community', 'area', 'bedroom', 'mobile']); $data = array_filter($data); $data['data'] = $objData->toArray(); $data['uid'] = $token['uid']; event(new FootPrints($data['uid'], $employee_id, $org_id, $data, 'getDecorationDesign')); $nickname = User::where('id', $token['uid'])->value('nickname'); $msg = $nickname . '在' . $msgType[$type][0] . '《' . $objData[$msgType[$type][1]] . '》中申请获取装修方案,请及时处理'; event(new Msg($employee_id, $msg, Str::snake($type))); // 更新线索电话 $condition = [ 'employee_id' => $employee_id, 'uid' => $token['uid'], 'org_id' => $org_id ?? 0 ]; // 建立线索关系 $had = CustomerClue::where($condition)->find(); if (empty($had->phone)) $had->phone = $data['mobile']; return json(['code' => 0, 'msg' => '报名成功']); } /** * 推荐内容(装修案例,图文素材,客户见证) */ public function recommend($type, $page, $limit) { $order = $type . ' desc'; $where['root_id'] = $this->request->token['root_org']; $where['publish'] = 1; $data = Recommend::with(['community', 'style'])->where($where)->order($order)->page($page, $limit)->select(); foreach ($data as &$item) { $item->difference = 2; //1视频,2图文 $item->cover = ''; //视频封面图 switch ($item['type']) { case 'evidence': $arr = explode(',', $item->getData('cover_img')); if (count($arr) > 1) { $item['cover_img'] = $arr[0]; } $type = MaterialEvidence::where('id', $item->id)->field('cover,difference')->find(); $item->difference = $type->difference; $item->cover = $type->cover; $desc = MaterialEvidence::where('id', '=', $item['id'])->value('desc'); $item->content = $desc; break; case 'article': $info = Article::where('id', '=', $item['id'])->withAttr('content', function ($value, $data) { $value = htmlspecialchars_decode($value); $value = preg_replace('/\s/', '', $value); $value = str_replace(" ", "", $value); $value = strip_tags($value); $text = mb_substr($value, 0, 40, "utf-8"); return $text; })->field('content')->find(); $item['content'] = $info['content']; break; case 'case': $info = MaterialCase::with(['designer'])->where('id', '=', $item['id'])->find(); $item->vr_case = $info['vr_case']; if (empty($info->designer)) { $company = Company::where('root_id', '=', $info['root_id'])->find(); $item->designer_name = $company['company_name']; $item->designer_headimgurl = $company['logo']; } else { $item->designer_name = $info->designer->name; if ($info['designer']['image_photo']) { $item->designer_headimgurl = $info['designer']['image_photo']; } else { $user_headimgurl = User::where('id', '=', $info->designer->uid)->value('headimgurl'); $item->designer_headimgurl = $user_headimgurl; } } break; default: break; } } if (isset($this->request->token['share_employee'])) { event(new FootPrints($this->request->token['uid'], $this->request->token['share_employee'] ?? 0, $this->request->token['share_org'] ?? 0, [], 'weiwang')); } return json(['code' => self::success, 'data' => $data, 'msg' => '获取成功']); } /** * 修改浏览时长 */ public function visit_due_time() { $id = input('id'); $type = input('pipe_type'); $time = input('time'); $token = $this->request->token; $type = $type=='housetype' ? 'buildingHousetype' : $type; $where[] = ['pipe_type', '=', $type]; $where[] = ['uid', '=', $token['uid']]; if (in_array($type, ['likeTest', 'styleTest', 'priceCalculation'])) { // 工具传值id为足迹ID FootprintsModel::where('id', $id)->update(['visit_due_time' => $time]); }elseif (in_array($type, ['groupVrVr','groupVr','group'])) { $id = VrGroup::where('id|sid',$id)->value('id'); $where = [['uid', '=', $token['uid']],['pipe_type','in',['groupVrVr','groupVr','group']]]; $id = FootprintsModel::where($where)->where('reg_info->"$.id" = ' . $id)->order('id desc')->value('id'); if($id) FootprintsModel::where('id', $id)->update(['visit_due_time' => $time]); } else { if (in_array($type, ['card', 'employeeCardVr', 'toolAll'])) { $where[] = ['employee_id', '=', $id]; $id = FootprintsModel::where($where)->order('id desc')->value('id'); if ($id) { FootprintsModel::where('id', $id)->update(['visit_due_time' => $time]); } } else { $yid = $id; $id = FootprintsModel::where($where)->where('reg_info->"$.id" = ' . $id)->order('id desc')->value('id'); if ($id) { FootprintsModel::where('id', $id)->update(['visit_due_time' => $time]); //增加记录素材的浏览时长到素材表 if(!empty($time) && in_array($type,['article','materialEvidence','materialCase','CompanyStrength','video'])){ $class = 'app\\model\\' . ucfirst($type); if (!class_exists($class)) return json(['code' => self::error_msg, 'msg' => '类型不存在']); $datas = (new $class())->where(['id' => $yid])->find(); $old_due_time = $datas->visit_due_time; $datas->visit_due_time = $old_due_time + $time; $datas->save(); } } } } return json(['code' => self::success, 'msg' => '操作成功']); } //预约 public function subscribe() { $param = request()->param(); $token = $this->request->token; $save['root_id'] = $token['root_org']; $save['sucai_id'] = $param['sucai_id']; $save['uid'] = $param['uid']; // $save['type'] = $param['type']; CustomerSubscribe::insert($save); return json(['code' => 0, 'msg' => '预约成功']); } /* * 分享人打开裂变内容,请求该内容需要展示的公司名称和logo */ public function content_belong_company() { $miniType = $this->request->param('client_type'); $uid = $this->request->param('uid'); $root_id = Miniprogram::where('notify', $miniType)->value('root_id'); $empid = Employee::where(['uid' => $uid, 'root_id' => $root_id])->value('id'); $company = Company::where('root_id', $root_id)->field(['company_name', 'logo', 'company_address'])->find(); return json(['code' => 0, 'msg' => '获取成功', 'data' => ['company_name' => $company['company_name'], 'logo' => $company['logo'], 'address' => $company['company_address'], 'employee_id' => $empid]]); } /* * 谈单工具各个板块足迹 */ public function toolAll() { $token = $this->request->token; $type = input('type',0); $arr = [0=>'',1=>'案例风格挑选',2=>'设计师推介',3=>'业主好评展示',4=>'在施工地展示',5=>'重点小区讲解',6=>'我的微官网',7=>'公司实力']; $nickname = User::where('id',$token['uid'])->value('nickname'); $arr = ['uid'=>$token['uid'],'name'=>$nickname,'type'=>$arr[$type]]; // 添加足迹 if (!empty($token['uid']) && !$token['isEmployee']) { event(new FootPrints($token['uid'], $token['share_employee'] ?? 0, $token['share_org'] ?? 0, $arr, 'toolAll')); } return json(['code' => 0, 'msg' => '足迹添加成功']); } /** * 通过经纪人分享的内容,用户进行报名(小程序端) */ public function add_customer() { $token = $this->request->token; $param = $this->request->only(['name', 'phone', 'community_name', 'agent_id']); $agtdata = AgentUser::where(['id' => $param['agent_id'], 'root_id' => $token['root_org']])->find(); if (empty($agtdata)) return json(['code' => 1, 'msg' => '推荐人信息未查询到']); if ($token['uid'] == $agtdata['uid']) return json(['code' => 1, 'msg' => '您的身份是推荐人,不能报名']); if ($token['isEmployee']) return json(['code' => 1, 'msg' => '您已加入企业,不能参加活动']); // 添加客户检测手机号的重复 $tips=(new AgentsLogic())->checkPepeat([$param['phone']], orgSubIds($agtdata['org_id']), $agtdata['agent_employee_id']); if(!empty($tips)) return $tips; $data = [ 'employee_id' => $agtdata['agent_employee_id'], 'org_id' => $agtdata['org_id'], 'state' => 0, 'name' => $param['name'], 'phone' => cypherphone(trim($param['phone'])), 'community_name' => $param['community_name'], 'sex' => !empty($param['sex']) ? $param['sex'] : 1, 'agents_id' => $agtdata['id'], 'agent_source_type' => 3 ]; //保存报备的客户 Db::startTrans(); try { // 更新线索电话 $condition = [ 'employee_id' => $agtdata['agent_employee_id'], 'uid' => $token['uid'], 'org_id' => $agtdata['org_id'] ]; // 更新线索信息,并默认报备状态 $had = CustomerClue::where($condition)->find(); if (empty($had->phone)) { $had->phone = $param['phone']; $had->state = 1; $had->save(); } $data['clue_id'] = $had['id']; $ms = Customer::insertGetId($data); $empuid = Employee::where('id', $agtdata['agent_employee_id'])->value('uid'); $log = [ 'employee_id' => $agtdata['agent_employee_id'], 'customer_id' => $ms, 'type' => '', 'remark' => '通过推荐人分享的内容报名的客户', 'user_id' => $empuid, 'state' => 1, 'org_id' => $agtdata['org_id'] ]; CustomerVisitLog::insertGetId($log); // 足迹 if (!empty($token['uid']) && !$token['isEmployee']) { $footerArr = [ 'name'=>$param['name'], 'phone'=>$param['phone'], 'community_name'=>$param['community_name'], ]; event(new FootPrints($token['uid'], $agtdata['agent_employee_id'] ?? 0, $agtdata['org_id'] ?? 0, $footerArr, 'agentShareContentCrm')); } Db::commit(); return json(['code' => 0, 'msg' => '报名成功']); } catch (\Exception $e) { Db::rollback(); return json(['code' => 1, 'msg' => '报名失败']); } } }