350 lines
11 KiB
PHP
350 lines
11 KiB
PHP
<?php
|
|
|
|
namespace app\controller;
|
|
|
|
use app\model\Channel;
|
|
use app\model\Customer;
|
|
use app\model\Follow;
|
|
use app\util\Util;
|
|
use config\constants\Constants;
|
|
use support\Log;
|
|
use support\Request;
|
|
|
|
class CustomerController
|
|
{
|
|
/**
|
|
* 客户分级
|
|
* @param Request $request
|
|
* @return \support\Response
|
|
*/
|
|
public function getGrade(Request $request)
|
|
{
|
|
$grade = [];
|
|
foreach (Constants::GRADE as $key => $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 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([], 'channel_id' . trans('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([], 'car_type_id' . trans('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([], 'country_id' . trans('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');
|
|
$id = 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' => Util::getParam($request, 'grade', 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 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),
|
|
];
|
|
|
|
$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'));
|
|
}
|
|
}
|
|
|
|
} |