Merge branch 'feature/tag' into feature/en
This commit is contained in:
@@ -5,6 +5,7 @@ namespace app\controller;
|
||||
use app\model\Channel;
|
||||
use app\model\Customer;
|
||||
use app\model\Follow;
|
||||
use app\service\UserService;
|
||||
use app\util\Util;
|
||||
use config\constants\Constants;
|
||||
use support\Log;
|
||||
@@ -12,6 +13,13 @@ use support\Request;
|
||||
|
||||
class CustomerController
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* 不需要登录的方法
|
||||
*/
|
||||
protected $noNeedLogin = ['collect'];
|
||||
|
||||
/**
|
||||
* 客户分级
|
||||
* @param Request $request
|
||||
@@ -73,6 +81,41 @@ class CustomerController
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 待跟进客户列表
|
||||
* @param Request $request
|
||||
* @return \support\Response
|
||||
*/
|
||||
public function waitFollow(Request $request)
|
||||
{
|
||||
$userId = $request->user['id'];
|
||||
$filter = Util::getParam($request, 'filter');
|
||||
$page = $request->input('page', 1);
|
||||
$perPage = $request->input('per_page', 10);
|
||||
$where = [
|
||||
['user_id', '=', $userId],
|
||||
['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 Util::page($customer);
|
||||
}
|
||||
|
||||
/**
|
||||
* 客户列表
|
||||
* @param Request $request
|
||||
@@ -83,9 +126,9 @@ class CustomerController
|
||||
|
||||
$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:近七天跟进客户
|
||||
$follow = $request->input('follow', ''); //跟进状态
|
||||
$keyword = $request->input('keyword', ''); //follow_last
|
||||
$follow_last = $request->input('follow_last', ''); //最后跟进:1:当天跟进客户,2:近三天跟进客户,3:近七天跟进客户
|
||||
|
||||
$where = [];
|
||||
|
||||
@@ -93,31 +136,30 @@ class CustomerController
|
||||
if (Util::isEmpty($userId)) {
|
||||
return Util::fail(['user_id' => $userId], trans('user_none'));
|
||||
}
|
||||
$where[] =['user_id',$userId] ;
|
||||
$where[] = ['user_id', $userId];
|
||||
//验证权限
|
||||
// if ($request->user['role'] != 1) {
|
||||
// $where[] =['user_id',$userId] ;
|
||||
// }
|
||||
$grade = [];
|
||||
if (!Util::isEmpty($follow) && $follow == 0) {
|
||||
$where[] = ['grade','<=', 2];
|
||||
$where[] = ['grade', '<=', 2];
|
||||
} elseif (!Util::isEmpty($follow) && $follow == 1) {
|
||||
$grade = [3, 4];
|
||||
$grade = [3, 4];
|
||||
} elseif (!Util::isEmpty($follow) && $follow == 2) {
|
||||
$where[] = ['grade','=', 5];
|
||||
$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')];
|
||||
$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')];
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 执行分页查询
|
||||
// 执行分页查询 //关联标签tags //关联标签及分组tags.group
|
||||
$query = Customer::where($where)
|
||||
->orderBy('id', 'desc');
|
||||
if (!Util::isEmpty($keyword)) {
|
||||
@@ -131,16 +173,46 @@ class CustomerController
|
||||
$query->whereIn('grade', $grade);
|
||||
|
||||
}
|
||||
// return Util::success($query->toSql().serialize($where),$follow);
|
||||
|
||||
$recycle = Util::getParam($request,'recycle', '');
|
||||
if ($recycle == 'recycle') {
|
||||
$query->onlyTrashed();
|
||||
}
|
||||
|
||||
$data = $query->paginate($perPage, ['*'], 'page', $page);
|
||||
|
||||
foreach ($data->items() as &$value) {
|
||||
$value = Customer::getCustomer($value);
|
||||
$value = Customer::getCustomer($value, $request);
|
||||
}
|
||||
|
||||
return Util::page($data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 客户恢复
|
||||
* @param Request $request
|
||||
* @return \support\Response
|
||||
*/
|
||||
public function restore(Request $request)
|
||||
{
|
||||
$id = Util::getParam($request,'id', '');
|
||||
if (Util::isEmpty($id)) {
|
||||
return Util::fail([], trans('id_empty'));
|
||||
}
|
||||
$userId = $request->user['id'];
|
||||
$where = [
|
||||
'id' => $id,
|
||||
'user_id' => $userId,
|
||||
];
|
||||
$res = Customer::where($where)->restore();
|
||||
if($res){
|
||||
return Util::success($res, trans('success'));
|
||||
}else{
|
||||
return Util::fail([], trans('fail'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 客户详情
|
||||
* @param Request $request
|
||||
@@ -153,7 +225,7 @@ class CustomerController
|
||||
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')
|
||||
$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();
|
||||
if ($res) {
|
||||
@@ -162,7 +234,7 @@ class CustomerController
|
||||
return Util::fail([], '记录不存在');
|
||||
}
|
||||
|
||||
$res = Customer::getCustomer($res);
|
||||
$res = Customer::getCustomer($res, $request, true);
|
||||
|
||||
return Util::success($res);
|
||||
}
|
||||
@@ -191,7 +263,7 @@ class CustomerController
|
||||
$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'));
|
||||
return Util::fail([], trans('contacts_not_null'));
|
||||
}
|
||||
|
||||
$data = [
|
||||
@@ -271,10 +343,11 @@ class CustomerController
|
||||
$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);
|
||||
->update($data);
|
||||
|
||||
if ($res) {
|
||||
return Util::success($res, trans('save_success'));
|
||||
@@ -291,8 +364,22 @@ class CustomerController
|
||||
public function delete(Request $request)
|
||||
{
|
||||
$id = Util::getParam($request, 'id');
|
||||
$customer = Customer::where('id', $id)->first();
|
||||
$res = $customer->delete();
|
||||
$force = Util::getParam($request, 'force','');
|
||||
|
||||
$userId = $request->user['id'];
|
||||
$where = [
|
||||
'id' => $id,
|
||||
'user_id' => $userId,
|
||||
];
|
||||
$customer = Customer::where($where)->withTrashed()->first();
|
||||
if(empty($customer)){
|
||||
return Util::fail('', trans('fail'));
|
||||
}
|
||||
if($force == 'force'){
|
||||
$res = $customer->forceDelete();
|
||||
}else{
|
||||
$res = $customer->delete();
|
||||
}
|
||||
if ($res) {
|
||||
return Util::success($res, trans('success'));
|
||||
} else {
|
||||
@@ -313,19 +400,19 @@ class CustomerController
|
||||
}
|
||||
$userId = $request->user['id'];
|
||||
$created_at = $request->user['created_at'];
|
||||
$day = ceil((time()-$created_at+1)/60/60/24);
|
||||
$day = ceil((time() - $created_at + 1) / 60 / 60 / 24);
|
||||
$where[] = ['user_id', '=', $userId];
|
||||
$start = strtotime($created.'-01');
|
||||
$start = strtotime($created . '-01');
|
||||
$year = date('Y', $start);
|
||||
$month = date('n',$start); //获取月份
|
||||
$end = mktime(00, 00, 00, $month+1, 1, $year);
|
||||
$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];
|
||||
$whereGrade[] = ['grade', '<=', 2];
|
||||
$customerInit = Customer::where($whereGrade)->count();
|
||||
|
||||
//跟进中
|
||||
@@ -333,7 +420,7 @@ class CustomerController
|
||||
|
||||
//已成交
|
||||
$whereGrade = $where;
|
||||
$whereGrade[] = ['grade','=', 5];
|
||||
$whereGrade[] = ['grade', '=', 5];
|
||||
$customerDeal = Customer::where($whereGrade)->count();
|
||||
|
||||
//拜访数
|
||||
@@ -347,13 +434,13 @@ class CustomerController
|
||||
$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, //已成交
|
||||
'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'));
|
||||
@@ -362,4 +449,63 @@ class CustomerController
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 线索分配
|
||||
* @param Request $request
|
||||
* @return \support\Response
|
||||
*/
|
||||
public function collect(Request $request)
|
||||
{
|
||||
Log::info('send follow start',$request->all());
|
||||
$user_sn = Util::getParam($request, 'user_sn'); //用户sn
|
||||
$user_email = Util::getParam($request, 'user_email'); //邮箱
|
||||
$sn = Util::getParam($request, 'order_no'); //客户sn验证客户唯一性
|
||||
$channel_id = Util::getParam($request, 'channel_id'); //渠道
|
||||
$country_id = Util::getParam($request, 'country_id'); //国家
|
||||
$magnitude = Util::getParam($request, 'magnitude'); //商机
|
||||
$describe = Util::getParam($request, 'describe'); //客户详情
|
||||
$phone = Util::getParam($request, 'phone'); //用户详情
|
||||
$email = Util::getParam($request, 'email'); //用户详情
|
||||
$WhatsApp = Util::getParam($request, 'WhatsApp');
|
||||
$contacts = Util::getParam($request, 'contacts'); //联系人
|
||||
|
||||
|
||||
if (Util::isEmpty($user_sn)) {
|
||||
return Util::fail([], '用户sn不能为空');
|
||||
}
|
||||
if (Util::isEmpty($user_email)) {
|
||||
return Util::fail([], '用户邮箱不能为空');
|
||||
}
|
||||
if (Util::isEmpty($sn)) {
|
||||
return Util::fail([], '客户sn不能为空');
|
||||
}
|
||||
|
||||
$user = UserService::updateSn($user_sn, $user_email);
|
||||
|
||||
if(!$user){
|
||||
return Util::fail($user, $user_email.'用户不存在');
|
||||
}
|
||||
|
||||
$res = Customer::firstOrCreate(
|
||||
['sn' => $sn],
|
||||
[
|
||||
'user_id' => $user->id,
|
||||
'channel_id' => $channel_id,
|
||||
'country_id' => $country_id,
|
||||
'magnitude' => $magnitude,
|
||||
'describe' => $describe,
|
||||
'phone' => $phone,
|
||||
'email' => $email,
|
||||
'WhatsApp' => $WhatsApp,
|
||||
'contacts' => $contacts,
|
||||
]
|
||||
);
|
||||
|
||||
if ($res) {
|
||||
return Util::success($res, trans('success'));
|
||||
} else {
|
||||
return Util::fail($res, trans('fail'));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user