service = new CustomerService(); } /** * 获取列表 * * @param Request $request 请求对象 * @return mixed 返回分页数据及总数 */ public function index(Request $request) { try { $raw = $this->service->serviceList($request); $data = $this->transformData($raw, method_exists($this, 'indexFormat') ? [$this, 'indexFormat'] : null); foreach ($data['records'] as &$item) { $item = $this->service->getCustomer($item); } return $this->success($data); } catch (\Throwable $e) { return $this->error($e->getMessage().$e->getLine().$e->getFile()); } } /** * 客户分级 * @param Request $request * @return \support\Response */ public function getGrade(Request $request) { $grade = []; $gradeConstants = Constants::GRADE_EN; if('zh_CN' == 'zh_CN'){ $gradeConstants = Constants::GRADE_ZH; }elseif ('zh_CN' == 'ru'){ $gradeConstants = Constants::GRADE_RU; } foreach ($gradeConstants as $key => $value) { $grade[] = [ 'id' => $key, 'name' => $value, ]; } return $this->success($grade); } /** * 商机 * @param Request $request * @return \support\Response */ public function getMagnitude(Request $request) { $grade = []; $magnitudeConstants = Constants::MAGNITUDE_EN; if('zh_CN' == 'zh_CN'){ $magnitudeConstants = Constants::MAGNITUDE; }elseif ('zh_CN' == 'ru'){ $magnitudeConstants = Constants::MAGNITUDE_RU; } foreach ($magnitudeConstants as $key => $value) { $grade[] = [ 'id' => $key, 'name' => $value, ]; } return $this->success($grade); } /** * 客户渠道 * @param Request $request * @return \support\Response */ public function getChannel(Request $request) { $list = Channel::getAll(); if('zh_CN' != 'zh_CN'){ foreach ($list as &$value) { $value['name'] = $value['name_en']; } }elseif ('zh_CN' == 'ru'){ foreach ($list as &$value) { $value['name'] = $value['name_ru']; } } return $this->success($list); } /** * 国家 * @param Request $request * @return \support\Response */ public function getCountry(Request $request) { $list = Country::getAll(); if('zh_CN' != 'zh_CN'){ foreach ($list as &$value) { $value['name'] = $value['name_en']; } }elseif ('zh_CN' == 'ru'){ foreach ($list as &$value) { $value['name'] = $value['name_ru']; } } return $this->success($list); } /** * 待跟进客户列表 * @param Request $request * @return \support\Response */ public function waitFollow(Request $request) { $userId = $request->user->uid; $filter = Util::getParam($request, 'filter'); $page = $request->input('current', 1); $perPage = $request->input('size', 10); $where = [ ['user_id', '=', $userId], ['corp_abbr', '=', $request->basic_data['corp_abbr']], ['follow_next', '<>', 0], ]; if($filter == 0){ $where[] = ['follow_next', '<=', time() + 3600 * 24]; } elseif ($filter == 1) { $where[] = ['follow_next', '<=', time() + 3600 * 24 * 3]; } elseif ($filter == 2) { $where[] = ['follow_next', '<=', time() + 3600 * 24 * 7]; } $customer = Customer::where($where) ->whereNotNull('follow_next') ->orderBy('follow_next') ->paginate($perPage, ['*'], 'page', $page); foreach ($customer as &$item) { $item['follow_remaining'] = $item->follow_next-time(); $item['follow_next'] = date('Y-m-d H:i:s',$item->follow_next); } return $this->success($this->page($customer)); } /** * 客户列表 * @param Request $request * @return \support\Response */ public function list(Request $request) { try { $param = $request->all(); $param['user_id'] = $request->user->uid; $param['corp_abbr'] = $request->basic_data['corp_abbr']; $result = (new CustomerService())->list($param); return $this->success($this->page($result)); } catch (\Throwable $e) { return $this->error($e->getMessage()); } } /** * 客户恢复 * @param Request $request * @return \support\Response */ public function restore(Request $request) { $id = Util::getParam($request,'id', ''); if (Util::isEmpty($id)) { return $this->error(trans('id_empty')); } $userId = $request->user->uid; $where = [ 'id' => $id, 'user_id' => $userId, ]; $res = Customer::where($where)->restore(); if($res){ return $this->success($res, trans('success')); }else{ return $this->error(trans('fail')); } } /** * 无用线索举报 * @param Request $request * @return \support\Response */ public function report(Request $request) { $param = $request->all(); if (Util::isEmpty($param['id'])) { return $this->error(trans('id_empty')); } $param['user_id'] = $request->user->uid; $param['corp_abbr'] = $request->basic_data['corp_abbr']; $res = (new CustomerService())->report($param); if($res){ return $this->success($res, trans('success')); }else{ return $this->error(trans('fail')); } } /** * 客户详情 * @param Request $request * @return \support\Response */ public function detail(Request $request) { $id = Util::getParam($request, 'id'); if (Util::isEmpty($id)) { return $this->error('id' . trans('not_null')); } // $res = Customer::with('tags')->select('id', 'user_id', 'grade', 'channel_id', 'car_type_id', 'country_id', 'magnitude', 'email', 'phone', 'WhatsApp', 'contacts', 'describe', 'address', 'lat', 'lng', 'follow_next', 'follow_remark', 'sex') // ->where('id', $id) // ->first(); $res = (new CustomerService)->detail($request->all()); if ($res) { $res->toArray(); } else { return $this->error('记录不存在'); } $res = CustomerService::getCustomer($res, 'zh_CN', true); return $this->success($res); } /** * 客户录入 * @param Request $request * @return \support\Response */ public function save(Request $request) { $id = Util::getParam($request, 'id'); $channel_id = Util::getParam($request, 'channel_id'); if (Util::isEmpty($channel_id)) { return $this->error(trans('channel_not_null')); } $country_id = Util::getParam($request, 'country_id', 0); if (Util::isEmpty($country_id)) { // return $this->error('country_id'.trans('not_null')); } // $car_type_id = Util::getParam($request, 'car_type_id'); // if (Util::isEmpty($car_type_id)) { // return $this->error(trans('car_type_not_null')); // } $contacts = Util::getParam($request, 'contacts'); $email = Util::getParam($request, 'email'); $phone = Util::getParam($request, 'phone'); if (Util::isEmpty($contacts) && Util::isEmpty($email) && Util::isEmpty($phone)) { return $this->error(trans('contacts_not_null')); } $corpInfo = Corp::where('abbr', $request->basic_data['corp_abbr'])->first(); $corpId = $corpInfo->id; $data = [ 'user_id' => $request->user->uid, 'corp_abbr' => $corpId, 'grade' => Util::getParam($request, 'grade', 0), 'channel_id' => $channel_id, 'country_id' => $country_id, // 'car_type_id' => $car_type_id, 'magnitude' => Util::getParam($request, 'magnitude', 0), 'email' => $email, 'phone' => $phone, 'WhatsApp' => Util::getParam($request, 'WhatsApp', ''), 'contacts' => $contacts, 'describe' => Util::getParam($request, 'describe'), 'lat' => Util::getParam($request, 'lat', 0), 'lng' => Util::getParam($request, 'lng', 0), 'address' => Util::getParam($request, 'address', ''), 'sex' => Util::getParam($request, 'sex', 0), 'obtain' => time(), ]; if (Util::isEmpty($id)) { $data['enter_user_id'] = $request->user->uid; $res = Customer::create($data); } else { unset($data['grade']); $res = Customer::where('id', $id) ->update($data); // Log::info('update', ['res' => $res]); (!$res) ?: $res = Customer::find($id)->toArray(); } if ($res) { return $this->success($res, trans('save_success')); } else { return $this->error(trans('save_fail')); } } /** * 更新下次跟进时间 * @param Request $request * @return \support\Response */ public function followNext(Request $request) { $id = Util::getParam($request, 'id'); if (Util::isEmpty($id)) { return $this->error('id' . trans('not_null')); } $data = [ 'follow_next' => Util::getParam($request, 'follow_next', 0), 'follow_remark' => Util::getParam($request, 'follow_remark', 0), 'warn' => 0, ]; $res = Customer::where('id', $id) ->update($data); if ($res) { return $this->success($res, trans('save_success')); } else { return $this->error(trans('save_fail')); } } /** * 删除客户 * @param Request $request * @return \support\Response */ public function delete(Request $request) { $id = Util::getParam($request, 'id'); $force = Util::getParam($request, 'force',''); $userId = $request->user->uid; $where = [ 'id' => $id, 'user_id' => $userId, ]; $customer = Customer::where($where)->withTrashed()->first(); if(empty($customer)){ return $this->error( trans('fail')); } try { Db::beginTransaction(); if ($force == 'force') { //强制删除 $res = $customer->forceDelete(); } else { $customer->user_id = 0; $customer->save(); //记录客户关系变化 $his = CustomerHis::create([ 'customer_id' => $id, 'user_his' => $userId, 'user_id' => 0, ]); //软删除 $res = $customer->delete(); } Db::commit(); } catch (\Throwable $e) { Db::rollback(); return $this->error($e->getMessage()); } if ($res) { return $this->success($res, trans('success')); } else { return $this->error(trans('fail')); } } /** * 统计客户 * @param Request $request * @return \support\Response */ public function statistics(Request $request) { $created = Util::getParam($request, 'created'); if (Util::isEmpty($created)) { return $this->error('created' . trans('not_null')); } $userId = $request->user->uid; //$created_at = $request->user['created_at']; $created_at = User::find($userId)->value('created_at'); $created_at = strtotime($created_at); $day = ceil((time() - $created_at + 1) / 60 / 60 / 24); $where[] = ['user_id', '=', $userId]; //$where[] = ['corp_abbr', '=', $request->basic_data['corp_abbr']]; $start = strtotime($created . '-01'); $year = date('Y', $start); $month = date('n', $start); //获取月份 $end = mktime(00, 00, 00, $month + 1, 1, $year); $where[] = ['created_at', '>=', $start]; $where[] = ['created_at', '<', $end]; $customer = Customer::where($where)->count(); //初步接触 $whereGrade = $where; $whereGrade[] = ['grade', '<=', 2]; $customerInit = Customer::where($whereGrade)->count(); //跟进中 $customeroFllow = Customer::where($where)->whereIn('grade', [3, 4])->count(); //已成交 $whereGrade = $where; $whereGrade[] = ['grade', '=', 5]; $customerDeal = Customer::where($whereGrade)->count(); //拜访数 $whereVisit = $where; $whereVisit[] = ['type', '=', 0]; $visit = Follow::where($whereVisit)->count(); //跟进数 $whereVisit = $where; $whereVisit[] = ['type', '=', 1]; $follow = Follow::where($whereVisit)->count(); $res = [ 'customer' => $customer, //客户数 'visit' => $visit, //拜访 'follow' => $follow, //跟进 'day' => $day, //注册天数 'customer_init' => $customerInit, //初步接触 'customero_fllow' => $customeroFllow, //跟进中 'customer_deal' => $customerDeal, //已成交 ]; if ($res) { return $this->success($res, trans('success')); } else { return $this->error(trans('fail')); } } /** * 领取公海客户 * @param Request $request * @return \support\Response */ public function claim(Request $request) { $customerId = Util::getParam($request, 'customer_id'); $userId = $request->user->uid; if (Util::isEmpty($customerId)) { return $this->error(trans('customer_id').trans('not_null')); } $data = [ 'user_id' => $request->user->uid, 'obtain' => time(), ]; try { Db::beginTransaction(); $customer= Customer::withTrashed()->find($customerId); if(empty($customer) || $customer->user_id != 0){ return $this->error( trans('claim_fail')); } $customer->restore(); $res = $customer->update($data); //记录客户关系变化 $his = CustomerHis::create([ 'customer_id' => $customerId, 'user_his' => 0, 'user_id' => $userId, ]); if (!empty($customer->sn) && $customer->type==1){ $inquiryLog = InquiryLog::where('order_no', $customer->sn)->first(); if (!empty($inquiryLog)) { $inquiryLog->recipient = $userId; $inquiryLog->save(); } } Db::commit(); } catch (\Throwable $e) { Db::rollback(); return $this->error($e->getMessage()); } if ($res) { return $this->success($res, trans('success')); } else { return $this->error(trans('fail')); } } /** * 批量转让 * @param Request $request * @return \support\Response */ public function cede(Request $request) { $customerId = Util::getParam($request, 'customer_id'); $userId = Util::getParam($request, 'user_id'); $user = User::where(['id' => $userId])->first(); if (Util::isEmpty($user)) { return $this->error( trans('user_none')); } $query= Customer::withTrashed()->whereIn('id',explode(',',$customerId)); try { $customer = $query->get(); Db::beginTransaction(); foreach ($customer as $item) { //记录客户关系变化 $his = CustomerHis::create([ 'customer_id' => $item->id, 'user_his' => $item->user_id, 'user_id' => $user['id'], ]); if (!empty($customer->sn) && $customer->type==1){ $inquiryLog = InquiryLog::where('order_no', $customer->sn)->first(); if (!empty($inquiryLog)) { $inquiryLog->recipient = $userId; $inquiryLog->save(); } } $item->restore(); } $data = [ 'user_id' => $user->id, 'obtain' => time(), ]; $res = $query->update($data); Db::commit(); } catch (\Throwable $e) { Db::rollback(); return $this->error($e->getMessage()); } if ($res) { return $this->success($res, trans('success')); } else { return $this->error(trans('fail')); } } /** * 跟进状态 * @param Request $request * @return \support\Response */ public function grade(Request $request) { $id = Util::getParam($request, 'id'); $grade = Util::getParam($request, 'grade'); if (Util::isEmpty($id)) { return $this->error( 'id' . trans('not_null')); } if (Util::isEmpty($id)) { return $this->error( 'grade' . trans('not_null')); } $data = [ 'grade' => $grade, ]; $res = Customer::where('id', $id) ->update($data); if ($res) { return $this->success($res, trans('save_success')); } else { return $this->error(trans('save_fail')); } } }