Files
crm-server/app/controller/CustomerController.php
T

297 lines
9.0 KiB
PHP
Raw Normal View History

2025-03-11 13:34:12 +08:00
<?php
namespace app\controller;
2025-03-17 18:01:53 +08:00
use app\model\Channel;
2025-03-11 13:34:12 +08:00
use app\model\Customer;
2025-03-19 12:44:55 +08:00
use app\model\Follow;
2025-03-14 14:27:33 +08:00
use app\util\Util;
use config\constants\Constants;
use support\Log;
2025-03-11 13:34:12 +08:00
use support\Request;
class CustomerController
{
2025-03-14 14:27:33 +08:00
/**
* 客户分级
* @param Request $request
* @return \support\Response
*/
public function getGrade(Request $request)
{
$grade = [];
foreach (Constants::GRADE as $key => $value) {
$grade[] = [
2025-03-17 18:01:53 +08:00
'id' => $key,
'name' => $value,
2025-03-14 14:27:33 +08:00
];
}
2025-03-17 18:01:53 +08:00
return Util::success($grade);
2025-03-14 14:27:33 +08:00
}
/**
2025-03-17 18:01:53 +08:00
* 商机
2025-03-14 14:27:33 +08:00
* @param Request $request
* @return \support\Response
*/
2025-03-17 18:01:53 +08:00
public function getMagnitude(Request $request)
2025-03-14 14:27:33 +08:00
{
$grade = [];
2025-03-17 18:01:53 +08:00
foreach (Constants::MAGNITUDE as $key => $value) {
2025-03-14 14:27:33 +08:00
$grade[] = [
2025-03-17 18:01:53 +08:00
'id' => $key,
'name' => $value,
2025-03-14 14:27:33 +08:00
];
}
2025-03-17 18:01:53 +08:00
return Util::success($grade);
}
/**
* 客户渠道
* @param Request $request
* @return \support\Response
*/
public function getChannel(Request $request)
{
$list = Channel::getAll();
return Util::success($list);
2025-03-14 14:27:33 +08:00
}
/**
* 客户列表
* @param Request $request
* @return \support\Response
*/
2025-03-11 13:34:12 +08:00
public function list(Request $request)
{
2025-03-14 14:27:33 +08:00
$page = $request->input('page', 1);
$perPage = $request->input('per_page', 10);
2025-03-19 14:17:25 +08:00
$follow = $request->input('follow',''); //跟进状态
$keyword = $request->input('keyword',''); //follow_last
$follow_last = $request->input('follow_last',''); //最后跟进:1:当天跟进客户,2:近三天跟进客户,3:近七天跟进客户
2025-03-14 14:27:33 +08:00
$where = [];
$userId = $request->user['id'];
if (Util::isEmpty($userId)) {
return Util::fail(['user_id' => $userId], trans('user_none'));
}
2025-03-19 14:17:25 +08:00
$where[] =['user_id',$userId] ;
//验证权限
// if ($request->user['role'] != 1) {
// $where[] =['user_id',$userId] ;
// }
2025-03-18 17:23:09 +08:00
$grade = [];
2025-03-18 15:07:22 +08:00
if (!Util::isEmpty($follow) && $follow == 0) {
2025-03-18 17:23:09 +08:00
$where[] = ['grade','<=', 2];
2025-03-18 15:07:22 +08:00
} elseif (!Util::isEmpty($follow) && $follow == 1) {
2025-03-18 17:23:09 +08:00
$grade = [3, 4];
2025-03-18 15:07:22 +08:00
} elseif (!Util::isEmpty($follow) && $follow == 2) {
2025-03-18 17:23:09 +08:00
$where[] = ['grade','=', 5];
2025-03-18 15:07:22 +08:00
}
2025-03-18 17:23:09 +08:00
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')];
}
2025-03-14 14:27:33 +08:00
// 执行分页查询
2025-03-18 17:23:09 +08:00
$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);
2025-03-14 14:27:33 +08:00
foreach ($data->items() as &$value) {
$value = Customer::getCustomer($value);
}
return Util::page($data);
2025-03-11 13:34:12 +08:00
}
2025-03-14 14:27:33 +08:00
/**
* 客户详情
* @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'));
}
2025-03-19 15:00:06 +08:00
$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')
2025-03-14 14:27:33 +08:00
->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'));
}
2025-03-18 17:23:09 +08:00
$country_id = Util::getParam($request, 'country_id', 0);
2025-03-14 14:27:33 +08:00
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,
2025-03-18 15:07:22 +08:00
'WhatsApp' => Util::getParam($request, 'WhatsApp', ''),
2025-03-14 14:27:33 +08:00
'contacts' => $contacts,
'describe' => Util::getParam($request, 'describe'),
2025-03-18 15:07:22 +08:00
'lat' => Util::getParam($request, 'lat', 0),
'lng' => Util::getParam($request, 'lng', 0),
'address' => Util::getParam($request, 'address', ''),
2025-03-18 17:23:09 +08:00
'sex' => Util::getParam($request, 'sex', 0),
2025-03-14 14:27:33 +08:00
];
if (Util::isEmpty($id)) {
$res = Customer::create($data);
} else {
$res = Customer::where('id', $id)
->update($data);
// Log::info('update', ['res' => $res]);
2025-03-18 15:07:22 +08:00
(!$res) ?: $res = Customer::find($id)->toArray();
2025-03-14 14:27:33 +08:00
}
if ($res) {
2025-03-18 15:07:22 +08:00
return Util::success($res, trans('save_success'));
} else {
return Util::fail($res, trans('save_fail'));
}
}
2025-03-19 12:44:55 +08:00
/**
* 更新下次跟进时间
* @param Request $request
* @return \support\Response
*/
2025-03-19 14:17:25 +08:00
public function followNext(Request $request)
2025-03-19 12:44:55 +08:00
{
$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'));
}
}
2025-03-18 15:07:22 +08:00
/**
* 删除客户
* @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'));
2025-03-14 14:27:33 +08:00
} else {
2025-03-18 15:07:22 +08:00
return Util::fail($res, trans('fail'));
2025-03-14 14:27:33 +08:00
}
}
2025-03-11 13:34:12 +08:00
2025-03-19 12:44:55 +08:00
/**
* 统计客户
* @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'];
2025-03-20 16:40:33 +08:00
$created_at = $request->user['created_at'];
$day = ceil((time()-$created_at+1)/60/60/24);
2025-03-19 12:44:55 +08:00
$id = Util::getParam($request, 'id');
2025-03-19 12:53:30 +08:00
$where[] = ['user_id', '=', $userId];
2025-03-19 12:44:55 +08:00
$where[] = ['created_at', '>', strtotime($created.'-01')];
$customer = Customer::where($where)->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,
2025-03-20 16:40:33 +08:00
'day'=>$day,
2025-03-19 12:44:55 +08:00
];
if ($res) {
return Util::success($res, trans('success'));
} else {
return Util::fail($res, trans('fail'));
}
}
2025-03-11 13:34:12 +08:00
}