$value) { $grade[] = [ 'id' => $key, 'name' => $value, ]; } return Util::success($grade); } /** * 商机 * @param Request $request * @return \support\Response */ public function getMagnitude(Request $request) { $grade = []; foreach (Constants::MAGNITUDE as $key => $value) { $grade[] = [ 'id' => $key, 'name' => $value, ]; } return Util::success($grade); } /** * 客户渠道 * @param Request $request * @return \support\Response */ public function getChannel(Request $request) { $list = Channel::getAll(); return Util::success($list); } /** * 待跟进客户列表 * @param Request $request * @return \support\Response */ public function waitFollow(Request $request) { $userId = $request->user['id']; $where = [ ['user_id', '=', $userId], ['follow_next', '<>', 0], // ['follow_next', '<=', time() + 3600 * 24], // ['follow_next', '>', time()], // ['warn', '<', 1] ]; $customer = Customer::where($where)->whereNotNull('follow_next')->orderBy('follow_next')->get(); foreach ($customer as &$item) { $item['follow_remaining'] = $item->follow_next-time(); } return Util::success($customer,trans('success')); } /** * 客户列表 * @param Request $request * @return \support\Response */ public function list(Request $request) { $page = $request->input('page', 1); $perPage = $request->input('per_page', 10); $follow = $request->input('follow', ''); //跟进状态 $keyword = $request->input('keyword', ''); //follow_last $follow_last = $request->input('follow_last', ''); //最后跟进:1:当天跟进客户,2:近三天跟进客户,3:近七天跟进客户 $where = []; $userId = $request->user['id']; if (Util::isEmpty($userId)) { return Util::fail(['user_id' => $userId], trans('user_none')); } $where[] = ['user_id', $userId]; //验证权限 // if ($request->user['role'] != 1) { // $where[] =['user_id',$userId] ; // } $grade = []; if (!Util::isEmpty($follow) && $follow == 0) { $where[] = ['grade', '<=', 2]; } elseif (!Util::isEmpty($follow) && $follow == 1) { $grade = [3, 4]; } elseif (!Util::isEmpty($follow) && $follow == 2) { $where[] = ['grade', '=', 5]; } if (!Util::isEmpty($follow_last) && $follow_last == 0) { $where[] = ['follow_last', '>', strtotime('-1 day')]; } elseif (!Util::isEmpty($follow_last) && $follow_last == 1) { $where[] = ['follow_last', '>', strtotime('-3 day')]; } elseif (!Util::isEmpty($follow_last) && $follow_last == 2) { $where[] = ['follow_last', '>', strtotime('-7 day')]; } // 执行分页查询 $query = Customer::where($where) ->orderBy('id', 'desc'); if (!Util::isEmpty($keyword)) { $query->where(function ($query) use ($keyword) { $query->where('contacts', 'like', "%{$keyword}%") ->orWhere('phone', 'like', "%{$keyword}%"); }); } if (!Util::isEmpty($grade)) { $query->whereIn('grade', $grade); } // return Util::success($query->toSql().serialize($where),$follow); $data = $query->paginate($perPage, ['*'], 'page', $page); foreach ($data->items() as &$value) { $value = Customer::getCustomer($value); } return Util::page($data); } /** * 客户详情 * @param Request $request * @return \support\Response */ public function detail(Request $request) { $id = Util::getParam($request, 'id'); if (Util::isEmpty($id)) { return Util::fail([], 'id' . trans('not_null')); } $res = Customer::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(); if ($res) { $res->toArray(); } else { return Util::fail([], '记录不存在'); } $res = Customer::getCustomer($res); return Util::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 Util::fail([], trans('channel_not_null')); } $country_id = Util::getParam($request, 'country_id', 0); if (Util::isEmpty($country_id)) { // return Util::fail([],'country_id'.trans('not_null')); } $car_type_id = Util::getParam($request, 'car_type_id'); if (Util::isEmpty($car_type_id)) { return Util::fail([], 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 Util::fail([], trans('contacts_not_null')); } $data = [ 'user_id' => $request->user['id'], '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), ]; if (Util::isEmpty($id)) { $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 Util::success($res, trans('save_success')); } else { return Util::fail($res, trans('save_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 Util::fail('', 'id' . trans('not_null')); } if (Util::isEmpty($id)) { return Util::fail('', 'grade' . trans('not_null')); } $data = [ 'grade' => $grade, ]; $res = Customer::where('id', $id) ->update($data); if ($res) { return Util::success($res, trans('save_success')); } else { return Util::fail($res, trans('save_fail')); } } /** * 更新下次跟进时间 * @param Request $request * @return \support\Response */ public function followNext(Request $request) { $id = Util::getParam($request, 'id'); if (Util::isEmpty($id)) { return Util::fail([], '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 Util::success($res, trans('save_success')); } else { return Util::fail($res, trans('save_fail')); } } /** * 删除客户 * @param Request $request * @return \support\Response */ public function delete(Request $request) { $id = Util::getParam($request, 'id'); $customer = Customer::where('id', $id)->first(); $res = $customer->delete(); if ($res) { return Util::success($res, trans('success')); } else { return Util::fail($res, trans('fail')); } } /** * 统计客户 * @param Request $request * @return \support\Response */ public function statistics(Request $request) { $created = Util::getParam($request, 'created'); if (Util::isEmpty($created)) { return Util::fail([], 'created' . trans('not_null')); } $userId = $request->user['id']; $created_at = $request->user['created_at']; $day = ceil((time() - $created_at + 1) / 60 / 60 / 24); $where[] = ['user_id', '=', $userId]; $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)->distinct('customer_id')->count(); //跟进数 $whereVisit = $where; $whereVisit[] = ['type', '=', 1]; $follow = Follow::where($whereVisit)->distinct('customer_id')->count(); $res = [ 'customer' => $customer, //客户数 'visit' => $visit, //拜访 'follow' => $follow, //跟进 'day' => $day, //注册天数 'customer_init' => $customerInit, //初步接触 'customero_fllow' => $customeroFllow, //跟进中 'customer_deal' => $customerDeal, //已成交 ]; if ($res) { return Util::success($res, trans('success')); } else { return Util::fail($res, trans('fail')); } } }