437 lines
18 KiB
PHP
437 lines
18 KiB
PHP
<?php
|
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
|
|
|
/**
|
|
* Created by PhpStorm.
|
|
* User: xuxb
|
|
* Date: 2021/7/26
|
|
* Time: 11:20
|
|
*/
|
|
class Customer extends HD_Controller
|
|
{
|
|
private $searchTpAry = array('mobile' => '客户手机号', 'name' => '客户姓名');
|
|
private $searchTimeAry = array('c_time' => '创建时间', 'p_time' => '分配时间', 'cont_time' => '最后联系时间', 'u_time' => '最后操作时间'
|
|
, 'dt_time' => '首次到店时间');
|
|
|
|
protected $log_dir;
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->load->model('receiver/receiver_customers_model', 'customers_model');
|
|
$this->load->model('receiver/receiver_customer_oplogs_model', 'customer_oplogs_model');
|
|
$this->load->model('receiver/receiver_clues_cfrom_model', 'clues_cfrom_model');
|
|
$this->load->model('receiver/receiver_xz_model');
|
|
$this->load->model('app/licheb/app_licheb_users_model');
|
|
$this->load->model("biz/biz_model");
|
|
$this->log_dir = 'receiver_' . get_class($this);
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
return $this->lists();
|
|
}
|
|
|
|
public function lists()
|
|
{
|
|
$status_arr = $this->customers_model->get_status();
|
|
unset($status_arr['-1']);
|
|
$params = $this->input->get();
|
|
!$params['city_id'] && $params['city_id'] = '';
|
|
!$params['county_id'] && $params['county_id'] = '';
|
|
!$params['city_id'] && $params['city_id'] = '';
|
|
!$params['county_id'] && $params['county_id'] = '';
|
|
!$params['biz_id'] && $params['biz_id'] = '';
|
|
!$params['cf_title'] && $params['cf_title'] = '';
|
|
!$params['qdjl_id'] && $params['qdjl_id'] = '';
|
|
$page = $params['page'] = $params['page'] ? intval($params['page']) : 1;
|
|
$size = $params['size'] = $params['size'] ? intval($params['size']) : 20;
|
|
|
|
$where = array('status>=0' => null);
|
|
if (false == strpos($_SERVER['HTTP_HOST'], 'dev')) {//dev时不限制
|
|
$where['biz_id<>'] = 1;
|
|
}
|
|
if ($params['title']) {
|
|
$where["{$params['search_tp']} like '%{$params['title']}%'"] = null;
|
|
}
|
|
!$params['search_tp'] && $params['search_tp'] = 'mobile';
|
|
strlen($params['status']) && $where["status"] = $params['status'];
|
|
$params['cf_title'] && $where['cf_title'] = $params['cf_title'];
|
|
if ($params['qdjl_id']) {
|
|
$re_bu = $this->app_licheb_users_model->get(array('id' => $params['qdjl_id']));
|
|
if ($re_bu['biz_id']) {
|
|
$where["biz_id in({$re_bu['biz_id']})"] = null;
|
|
} else {
|
|
$where['biz_id'] = -1;
|
|
}
|
|
}
|
|
//销售员筛选
|
|
if ($params['admin_id']) {
|
|
$where['admin_id'] = $params['admin_id'];
|
|
} else {
|
|
$where_lcb = array();
|
|
if ($params['biz_id_admin']) {//指定店铺所有销售员
|
|
$where_lcb['biz_id'] = $params['biz_id_admin'];
|
|
} else {
|
|
//指定城市的所有销售员
|
|
$where_biz = array();
|
|
if ($params['county_id_admin']) {
|
|
$where_biz['county_id'] = $params['county_id_admin'];
|
|
} else if ($params['city_id_admin']) {
|
|
$where_biz['city_id'] = $params['city_id_admin'];
|
|
}
|
|
if ($where_biz) {
|
|
$where_biz['status>-1'] = null;
|
|
$rows_biz = $this->biz_model->select($where_biz, 'id desc', 0, 0, 'id');
|
|
if ($rows_biz) {
|
|
$str_ids = implode(',', array_column($rows_biz, 'id'));
|
|
$where_lcb["biz_id in({$str_ids})"] = null;
|
|
} else {
|
|
$where_lcb['biz_id'] = -1;
|
|
}
|
|
}
|
|
}
|
|
//获取目标销售员列表
|
|
if ($where_lcb) {
|
|
$where_lcb['status>-1'] = null;
|
|
$rows_lcb = $this->app_licheb_users_model->select($where_lcb, 'id desc', 0, 0, 'id');
|
|
if ($rows_lcb) {
|
|
$str_ids = implode(',', array_column($rows_lcb, 'id'));
|
|
$str_ids = $str_ids . ',0';
|
|
$where["admin_id in({$str_ids})"] = null;
|
|
} else {
|
|
$where['admin_id'] = -1;
|
|
}
|
|
}
|
|
!$params['city_id_admin'] && $params['city_id_admin'] = '';
|
|
!$params['county_id_admin'] && $params['county_id_admin'] = '';
|
|
!$params['biz_id_admin'] && $params['biz_id_admin'] = '';
|
|
$params['admin_id'] = '';
|
|
}
|
|
if ($params['c_time']) {
|
|
$c_time = explode(' ~ ', $params['c_time']);
|
|
$c_time[0] && $where["c_time >="] = strtotime($c_time[0] . ' 00:00:00');
|
|
$c_time[1] && $where["c_time <="] = strtotime($c_time[1] . ' 23:59:59');
|
|
}
|
|
if ($params['p_time']) {
|
|
$p_time = explode(' ~ ', $params['p_time']);
|
|
$p_time[0] && $where["p_time >="] = $p_time[0] . ' 00:00:00';
|
|
$p_time[1] && $where["p_time <="] = $p_time[1] . ' 23:59:59';
|
|
}
|
|
if ($params['cont_time']) {
|
|
$cont_time = explode(' ~ ', $params['cont_time']);
|
|
$cont_time[0] && $where["cont_time >="] = $cont_time[0] . ' 00:00:00';
|
|
$cont_time[1] && $where["cont_time <="] = $cont_time[1] . ' 23:59:59';
|
|
}
|
|
if ($params['u_time']) {
|
|
$u_time = explode(' ~ ', $params['u_time']);
|
|
$u_time[0] && $where["u_time >="] = $u_time[0] . ' 00:00:00';
|
|
$u_time[1] && $where["u_time <="] = $u_time[1] . ' 23:59:59';
|
|
}
|
|
if ($params['dt_time']) {
|
|
$dt_time = explode(' ~ ', $params['dt_time']);
|
|
$dt_time[0] && $where["dt_time >="] = $dt_time[0] . ' 00:00:00';
|
|
$dt_time[1] && $where["dt_time <="] = $dt_time[1] . ' 23:59:59';
|
|
}
|
|
if ($params['cfrom_id'] || $params['cfrom_id2']) {
|
|
if ($params['cfrom_id'] == 24) {
|
|
$where['cf_id'] = 24;
|
|
$params['cfrom_id2'] && $where['t_id'] = $params['cfrom_id2'];
|
|
} else {
|
|
if ($params['cfrom_id2']) {
|
|
$where['cf_id'] = $params['cfrom_id2'];
|
|
} else {
|
|
$cf_rows = $this->clues_cfrom_model->select(['pid' => $params['cfrom_id']], '', '', '', 'id');
|
|
$cf_ids = array_column($cf_rows, 'id');
|
|
$cf_ids[] = $params['cfrom_id'];
|
|
$cf_str_ids = implode(',', array_filter($cf_ids));
|
|
$cf_str_ids && $where["cf_id in ({$cf_str_ids})"] = null;
|
|
}
|
|
}
|
|
}
|
|
$count = $this->customers_model->count($where);
|
|
$lists = [];
|
|
if ($count) {
|
|
$fileds = 'id,name,mobile,cf_title,cont_time,admin_id,status,biz_id,cf_id';
|
|
$rows = $this->customers_model->select($where, 'id desc', $page, $size, $fileds);
|
|
//获取来源
|
|
$cf_id_arr = array_unique(array_column($rows, 'cf_id'));
|
|
$cf_rows = $this->clues_cfrom_model->get_map_by_ids($cf_id_arr, 'id,title');
|
|
//获取销售员
|
|
$admin_id_arr = array_unique(array_column($rows, 'admin_id'));
|
|
$admin_id_arr && $admin_rows = $this->app_licheb_users_model->get_map_by_ids($admin_id_arr, 'id,uname');
|
|
//获取门店
|
|
$biz_id_arr = array_unique(array_column($rows, 'biz_id'));
|
|
$biz_id_arr && $biz_rows = $this->biz_model->get_map_by_ids($biz_id_arr, 'id,biz_name');
|
|
foreach ($rows as $key => $val) {
|
|
if (SUPER_ADMIN == $this->role) {
|
|
$mobile_sub = $val['mobile'];
|
|
} else {
|
|
$mobile_sub = $val['mobile'] ? substr_replace($val['mobile'], '*****', 0, 5) : '';
|
|
}
|
|
$lists[] = array(
|
|
'id' => $val['id'],
|
|
'name' => $val['name'],
|
|
'mobile' => $val['mobile'],
|
|
'mobile_sub' => $mobile_sub,
|
|
'cf_title' => $val['cf_title'],
|
|
'cf_name' => isset($cf_rows[$val['cf_id']]) ? $cf_rows[$val['cf_id']][0]['title'] : '',
|
|
'status_name' => $status_arr[$val['status']],
|
|
'admin_name' => isset($admin_rows[$val['admin_id']]) ? $admin_rows[$val['admin_id']][0]['uname'] : '',
|
|
'biz_name' => isset($biz_rows[$val['biz_id']]) ? $biz_rows[$val['biz_id']][0]['biz_name'] : '',
|
|
'cont_time' => $val['cont_time'] != '0000-00-00 00:00:00' ? $val['cont_time'] : '',
|
|
);
|
|
}
|
|
}
|
|
//渠道经理
|
|
$qdjl_lists = $this->app_licheb_users_model->select(array('group_id' => 4, 'status' => 1, 'biz_id<>' => '0'), 'id desc', 0, 0, 'id,uname as name');
|
|
|
|
$this->data['lists'] = $lists;
|
|
$this->data['pager'] = array('count' => ceil($count / $size), 'curr' => $page, 'totle' => $count);
|
|
$this->data['searchTpAry'] = $this->searchTpAry;
|
|
$this->data['searchTimeAry'] = $this->searchTimeAry;
|
|
$this->data['params'] = $params;
|
|
$this->data['status_arr'] = $status_arr;
|
|
$this->data['qdjl_lists'] = $qdjl_lists;
|
|
$this->data['_title'] = '客户列表';
|
|
return $this->show_view('receiver/customer/lists', true);
|
|
}
|
|
|
|
public function get()
|
|
{
|
|
$id = $this->input->get('id');
|
|
|
|
$this->load->model('auto/auto_brand_model');
|
|
$this->load->model('auto/auto_series_model');
|
|
|
|
$row = $this->customers_model->get(array('id' => $id));
|
|
if (!$row) {
|
|
return $this->show_json(SYS_CODE_FAIL, '客户不存在!');
|
|
}
|
|
|
|
$if_driver = 1 == $row['if_driver'] ? '是' : '否';
|
|
$is_top = 1 == $row['is_top'] ? '是' : '否';
|
|
$car_json = json_decode($row['car_json'], true);
|
|
$side = $car_json['version']['title'] ? $car_json['version']['title'] : '';
|
|
$color = $car_json['color']['title'] ? $car_json['color']['title'] : '';
|
|
|
|
$row_biz = $this->biz_model->get(array('id' => $row['biz_id']));
|
|
$row_brand = $this->auto_brand_model->get(array('id' => $row['brand_id']), 'name');
|
|
$row_seriy = $this->auto_series_model->get(array('id' => $row['s_id']), 'name');
|
|
//获取销售员
|
|
$row_admin = $this->app_licheb_users_model->get(array('id' => $row['admin_id']), 'id,uname');
|
|
|
|
//操作日志
|
|
$rows_log = $this->customer_oplogs_model->select(array('customer_id' => $id), 'c_time desc', 0, 0);
|
|
|
|
//用户信息
|
|
if (SUPER_ADMIN == $this->role) {
|
|
$mobile_sub = $row['mobile'];
|
|
} else {
|
|
$mobile_sub = $row['mobile'] ? substr_replace($row['mobile'], '*****', 0, 5) : '';
|
|
}
|
|
$info = array(
|
|
'id' => $row['id'],
|
|
'name' => $row['name'],
|
|
'mobile' => $mobile_sub,
|
|
'cf_title' => $row['cf_title'],
|
|
'c_time' => date('Y-m-d H:i:s', $row['c_time']),
|
|
'status' => $row['status'],
|
|
);
|
|
|
|
//到店信息
|
|
$toshop = array(
|
|
array(
|
|
array('title' => '门店', 'value' => $row_biz['biz_name']),
|
|
array('title' => '试驾', 'value' => $if_driver),
|
|
array('title' => '到店次数', 'value' => $row['a_num']),
|
|
array('title' => '试驾次数', 'value' => $row['t_num']),
|
|
),
|
|
array(
|
|
array('title' => '品牌', 'value' => $row_brand['name']),
|
|
array('title' => '车系', 'value' => $row_seriy['name']),
|
|
array('title' => '车型', 'value' => $side),
|
|
array('title' => '颜色', 'value' => $color),
|
|
),
|
|
array(
|
|
array('title' => '分配时间', 'value' => $row['p_time'] != '0000-00-00 00:00:00' ? $row['p_time'] : ''),
|
|
array('title' => '最后联系时间', 'value' => $row['cont_time'] != '0000-00-00 00:00:00' ? $row['cont_time'] : ''),
|
|
array('title' => '首次到店时间', 'value' => $row['dt_time'] != '0000-00-00 00:00:00' ? $row['dt_time'] : ''),
|
|
array('title' => '预计购买时间', 'value' => "{$row['buy_time']} 天内"),
|
|
),
|
|
array(
|
|
array('title' => '重点关注', 'value' => $is_top),
|
|
array('title' => '销售员', 'value' => $row_admin['uname']),
|
|
),
|
|
);
|
|
|
|
//操作日志
|
|
$logs = array();
|
|
foreach ($rows_log as $key => $value) {
|
|
$rec_text = $rec_url = '';
|
|
if ($value['type'] == 2) {
|
|
$rec_row = $this->receiver_xz_model->get(['id' => $value['log']], 'rec_url,duration');
|
|
if ($rec_row['duration']) {
|
|
$rec_row['rec_url'] && $rec_url = $rec_row['rec_url'];
|
|
!$rec_row['rec_url'] && $rec_text = '录音暂未生成';
|
|
} else {
|
|
$rec_text = '未接通';
|
|
}
|
|
}
|
|
$logs[] = array(
|
|
'uname' => $value['uname'],
|
|
'log' => $value['log'],
|
|
'rec_url' => $rec_url,
|
|
'rec_text' => $rec_text,
|
|
'type_name' => $this->customer_oplogs_model->typeAry()[$value['type']],
|
|
'c_time' => date('Y-m-d H:i', $value['c_time'])
|
|
);
|
|
}
|
|
|
|
//状态值,-1不显示
|
|
$statusAry = $this->customers_model->get_status();
|
|
unset($statusAry['-1']);
|
|
|
|
$this->data['statusAry'] = $statusAry;
|
|
$this->data['info'] = $info;
|
|
$this->data['toshop'] = $toshop;
|
|
$this->data['logs'] = $logs;
|
|
$this->data['_title'] = '客户详情';
|
|
return $this->show_view('receiver/customer/get', true);
|
|
}
|
|
|
|
public function add()
|
|
{
|
|
// TODO: Implement add() method.
|
|
}
|
|
|
|
/**
|
|
* 新增日志
|
|
* @return bool
|
|
*/
|
|
function add_log()
|
|
{
|
|
$params = $this->input->post();
|
|
if (!$params['id']) {
|
|
return $this->show_json(SYS_CODE_FAIL, '参数错误!');
|
|
}
|
|
if (!$params['log']) {
|
|
return $this->show_json(SYS_CODE_FAIL, '请输入内容!');
|
|
}
|
|
$addData = array(
|
|
'customer_id' => $params['id'],
|
|
'uid' => $this->uid,
|
|
'uname' => $this->username,
|
|
'type' => intval($params['type']),
|
|
'log' => $params['log'],
|
|
'c_time' => time()
|
|
);
|
|
$id = $this->customer_oplogs_model->add($addData);
|
|
if ($id) {
|
|
return $this->show_json(SYS_CODE_SUCCESS, '添加成功');
|
|
} else {
|
|
debug_log("[error]" . $this->customer_oplogs_model->db->last_query(), __FUNCTION__, $this->log_dir);
|
|
return $this->show_json(SYS_CODE_FAIL, '添加失败');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 编辑
|
|
* @return bool
|
|
*/
|
|
public function edit()
|
|
{
|
|
$info = $this->input->post('info');
|
|
if (!$info) {
|
|
return $this->show_json(SYS_CODE_FAIL, '非法参数!');
|
|
}
|
|
|
|
$row = $this->customers_model->get(array('id' => $info['id']));
|
|
if (!$row) {
|
|
return $this->show_json(SYS_CODE_FAIL, '客户信息不存在!');
|
|
}
|
|
|
|
$msg = '修改成功';
|
|
$code = SYS_CODE_SUCCESS;
|
|
if ($info['editType'] == 1) {
|
|
//更新状态
|
|
$statuAry = $this->customers_model->get_status();
|
|
$status_name = $statuAry[$row['status']];
|
|
$status_name_up = $statuAry[$info['status']];
|
|
$log = '更新状态(' . $status_name . ')为(' . $status_name_up . ')';
|
|
$up_data['status'] = $info['status'];
|
|
if ($info['status'] == 1 && $row['dt_time'] == '0000-00-00 00:00:00') {//修改首次到店时间
|
|
$up_data['dt_time'] = date('Y-m-d H:i:s');
|
|
}
|
|
$ret = $this->customers_model->update($up_data, array('id' => $info['id']));
|
|
if (!$ret) {
|
|
debug_log("[error]" . $this->customers_model->db->last_query(), __FUNCTION__, $this->log_dir);
|
|
$code = SYS_CODE_FAIL;
|
|
$msg = '修改状态失败';
|
|
} else {
|
|
$msg = '修改状态成功';
|
|
$this->addLog(array('customer_id' => $info['id'], 'type' => 0, 'log' => $log));
|
|
}
|
|
} else if ($info['editType'] == 2) {
|
|
//更新客户信息
|
|
if ($info['name'] == $row['name']) {
|
|
return $this->show_json(SYS_CODE_FAIL, '客户姓名未修改!');
|
|
}
|
|
$log = '更新客户姓名(' . $row['name'] . ')为(' . $info['name'] . ')';
|
|
$ret = $this->customers_model->update(array('name' => $info['name']), array('id' => $info['id']));
|
|
if (!$ret) {
|
|
debug_log("[error]" . $this->customers_model->db->last_query(), __FUNCTION__, $this->log_dir);
|
|
$code = SYS_CODE_FAIL;
|
|
$msg = '修改用户信息失败';
|
|
} else {
|
|
$msg = '修改用户信息成功';
|
|
$this->addLog(array('customer_id' => $info['id'], 'type' => 0, 'log' => $log));
|
|
}
|
|
}
|
|
|
|
return $this->show_json($code, $msg);
|
|
}
|
|
|
|
public function del()
|
|
{
|
|
// TODO: Implement del() method.
|
|
}
|
|
|
|
public function batch()
|
|
{
|
|
// TODO: Implement batch() method.
|
|
}
|
|
|
|
public function export()
|
|
{
|
|
// TODO: Implement export() method.
|
|
}
|
|
|
|
/**
|
|
* Notes:增加日志
|
|
* Created on: 2021/7/23 10:48
|
|
* Created by: dengbw
|
|
* @param array $ary
|
|
* @return mixed
|
|
*/
|
|
private function addLog($ary = array())
|
|
{
|
|
$id = 0;
|
|
if ($ary['log']) {
|
|
$addData = array(
|
|
'customer_id' => $ary['customer_id'],
|
|
'uid' => $this->uid,
|
|
'uname' => $this->username,
|
|
'type' => intval($ary['type']),
|
|
'log' => $ary['log'],
|
|
'cf_platform' => 'admin',
|
|
'c_time' => time()
|
|
);
|
|
$id = $this->customer_oplogs_model->add($addData);
|
|
}
|
|
return $id;
|
|
}
|
|
|
|
|
|
}
|