客户与跟进

This commit is contained in:
2025-03-14 14:27:33 +08:00
parent 0b95eb8bf0
commit 2dc378734f
23 changed files with 1102 additions and 22 deletions
+42
View File
@@ -0,0 +1,42 @@
<?php
namespace app\controller;
use app\model\Area;
use app\util\Util;
use support\Request;
class AreaController
{
public function getAll (Request $request)
{
$parentId = Util::getParam($request,'parent_id');
$level = Util::getParam($request,'level')?:1;
$list = $this->getRegions($parentId, $level);
return json($list);
}
function getRegions($parentId = null, $level = 1) {
$regions = [];
$where= array();
if(!Util::isEmpty($parentId)){
$where['parent_id'] = $parentId;
}
$where['level'] = $level;
$results = Area::where($where)->get();
foreach ($results as $row) {
// $row['level'] = $level; // 添加层级信息
// $regions = array_merge($regions, $this->getRegions($row['id'], $level + 1)); // 递归调用
$row['children'] = $this->getRegions($row['id'], $row['level'] + 1);
$regions[] = $row;
}
return $regions;
}
}
@@ -0,0 +1,21 @@
<?php
namespace app\controller;
use app\model\CarType;
use app\model\Customer;
use PDO;
use support\Db;
use support\Redis;
use support\Request;
class CarTypeController
{
public function getAll(Request $request)
{
$list = CarType::getAll();
return json($list);
}
}
+152 -3
View File
@@ -3,16 +3,165 @@
namespace app\controller;
use app\model\Customer;
use app\util\Util;
use config\constants\Constants;
use support\Log;
use support\Request;
class CustomerController
{
public function list(Request $request)
/**
* 客户分级
* @param Request $request
* @return \support\Response
*/
public function getGrade(Request $request)
{
$list = Customer::get()->toArray();
return json($list);
$grade = [];
foreach (Constants::GRADE as $key => $value) {
$grade[] = [
'status' => $key,
'text' => $value,
];
}
return json($grade);
}
/**
* 客户偏好
* @param Request $request
* @return \support\Response
*/
public function getCarType(Request $request)
{
$grade = [];
foreach (Constants::GRADE as $key => $value) {
$grade[] = [
'status' => $key,
'text' => $value,
];
}
return json($grade);
}
/**
* 客户列表
* @param Request $request
* @return \support\Response
*/
public function list(Request $request)
{
$page = $request->input('page', 1);
$perPage = $request->input('per_page', 10);
$where = [];
$userId = $request->user['id'];
if (Util::isEmpty($userId)) {
return Util::fail(['user_id' => $userId], trans('user_none'));
}
if ($request->user['role'] != 1) {
$where['user_id'] = $userId;
}
// 执行分页查询
$data = Customer::where($where)
->orderBy('id', 'desc')
->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')
->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');
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',''),
];
if (Util::isEmpty($id)) {
$res = Customer::create($data);
} else {
$res = Customer::where('id', $id)
->update($data);
// Log::info('update', ['res' => $res]);
(!$res)?: $res=Customer::find($id)->toArray();
}
if ($res) {
return Util::success($res);
} else {
return Util::fail($res);
}
}
}
+153
View File
@@ -0,0 +1,153 @@
<?php
namespace app\controller;
use app\model\Customer;
use app\model\Follow;
use app\util\Util;
use config\constants\Constants;
use Google\Cloud\Speech\V2\Client\SpeechClient;
use Google\Cloud\Speech\V2\RecognitionConfig;
use support\Request;
class FollowController
{
/**
* 客户分级
* @param Request $request
* @return \support\Response
*/
public function getFollowType(Request $request)
{
$grade = [];
foreach (Constants::FOLLOW as $key => $value) {
$grade[] = [
'status' => $key,
'text' => $value,
];
}
return Util::success($grade);
}
/**
* 跟进列表
* @param Request $request
* @return \support\Response
*/
public function list(Request $request)
{
$page = $request->input('page', 1);
$perPage = $request->input('per_page', 10);
//客户id
$customer_id = Util::getParam($request,'customer_id');
if(Util::isEmpty($customer_id)){
return Util::fail([],'customer_id'.trans('not_null'));
}
$where = [];
$where['customer_id'] = $customer_id;
//用户角色
$userId = $request->user['id'];
if(Util::isEmpty($userId)){
return Util::fail(['user_id'=>$userId],trans('user_none'));
}
if($request->user['role']!=1){
$where['user_id'] = $userId;
}
//跟进id
$id = Util::getParam($request,'id');
if(!Util::isEmpty($id)){
$where['id'] = $id;
}
// 执行分页查询
$data = Follow::where($where)
->orderBy('id', 'desc')
->paginate($perPage, ['*'], 'page', $page);
foreach ($data->items() as &$value){
$value = Follow::getFollow($value);
}
return Util::page($data);
}
/**
* 跟进详情
* @param Request $request
* @return \support\Response
*/
public function detail(Request $request)
{
//跟进id
$id = Util::getParam($request,'id');
if(Util::isEmpty($id)){
return Util::fail([],'id'.trans('not_null'));
}
$res = Follow::select('id','user_id','customer_id','type','picture','remark','audio','audio_text','lat','lng','address')
->where('id',$id)
->first();
if($res){
$res->toArray();
}else{
return Util::fail([],'记录不存在');
}
$res = Follow::getFollow($res);
return Util::success($res);
}
/**
* 客户录入
* @param Request $request
* @return \support\Response
*/
public function save(Request $request)
{
$customer_id = Util::getParam($request,'customer_id');
if(Util::isEmpty($customer_id)){
return Util::fail([],'customer_id'.trans('not_null'));
}
$type = Util::getParam($request,'type');
if(Util::isEmpty($type)){
return Util::fail([],'type'.trans('not_null'));
}
$picture = Util::getParam($request,'picture');
if(Util::isEmpty($picture)){
return Util::fail([],'picture'.trans('not_null'));
}
$data = [
'user_id'=>$request->user['id'],
'customer_id'=>$customer_id,
'type'=>$type,
'picture'=>$picture,
'remark'=>Util::getParam($request,'remark',''),
'audio'=>Util::getParam($request,'audio',''),
'audio_text'=>Util::getParam($request,'audio',''),
'lat'=>Util::getParam($request,'lat'),
'lng'=>Util::getParam($request,'lng'),
'address'=>Util::getParam($request,'address'),
];
$res = Follow::create($data);
$customer = Customer::find($customer_id);
$customer->follow_last = $res->created_at;
$customer->save();
if($res){
return Util::success($res);
}else{
return Util::fail($res);
}
}
}
+48 -1
View File
@@ -2,14 +2,61 @@
namespace app\controller;
use app\model\User;
use app\util\JwtUtil;
use app\util\Util;
use support\Redis;
use support\Request;
class UserController
{
/**
* 不需要登录的方法
*/
protected $noNeedLogin = ['login'];
public function login(Request $request)
{
return json([]);
// Util::isEmpty($request->post('email'));
$email = Util::getParam($request,'email');
if(Util::isEmpty($email)){
return Util::fail([],'email'.trans('not_null'));
}
// Util::isEmpty($request->post('password'));
$password = Util::getParam($request,'password');
if(Util::isEmpty($password)){
return Util::fail([],'password'.trans('not_null'));
}
$user = User::select(['id','name','sex','role','avatar','email','password'])
->where('status',0)
->where('email',$request->post('email'))
->first();
if(!$user){
return Util::fail(['user'=>$user],trans('user_none'));
}
$user = $user->toArray();
$userPassword = $user['password'];
//加密
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
//验证密码
if (!password_verify($userPassword, $hashedPassword)) {
return Util::fail([],trans('password_error'));
}
$userId = $user['id']; // 实际从数据库获取
Redis::set('user_'.$userId, $user);
//密码验证成功后加密生成 Token
$token = JwtUtil::generateToken($userId);
$result = $user;
unset($result['password']);
$result['token'] = $token;
return Util::success($result,trans('login_success'));
}