Files
liche/admin/controllers/app/licheb/Userslog.php
T
2022-07-21 16:05:40 +08:00

524 lines
26 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/**
* Notes:狸车宝顾问_日志
* Created on: 2022/4/15 16:43
* Created by: dengbw
*/
class Userslog extends HD_Controller
{
private $tabAry = [1 => '客户统计', 2 => '回访统计'];
public function __construct()
{
parent::__construct();
$this->load->model('app/licheb/app_licheb_users_model', 'mdUsers');
$this->load->model('app/licheb/app_licheb_users_log_model', 'mdUsersLog');
$this->load->model('app/licheb/app_licheb_bizs_log_model', 'mdBizsLog');
$this->load->model('receiver/receiver_customers_visit_sales_model', 'mdCustomerVisitSales');
$this->load->model('receiver/receiver_customers_model', 'mdCustomers');
$this->load->model("biz/biz_model", 'mdBiz');
$this->load->model('area_model', 'mdArea');
}
public function index()
{
return $this->lists();
}
public function lists()
{
$params = $this->input->get();
$params['page'] = $params['page'] ? intval($params['page']) : 1;
$params['size'] = $params['size'] ? intval($params['size']) : 20;
$data = $this->dataBizSelect($params);
$data['typeAry'] = $this->mdBiz->type_ary();
$this->data = $data;
$this->show_view('app/licheb/userslog/lists', true);
}
public function lists_users()
{
$params = $this->input->get();
$params['page'] = $params['page'] ? intval($params['page']) : 1;
$params['size'] = $params['size'] ? intval($params['size']) : 20;
$params['tab'] = $params['tab'] ? intval($params['tab']) : 1;
if ($params['tab'] == 2) {
$view = 'app/licheb/userslog/lists_visit';
$data = $this->visitSelect($params);
} else {
$view = 'app/licheb/userslog/lists_users';
$data = $this->dataUsersSelect($params);
}
$data['tabAry'] = $this->tabAry;
$this->data = $data;
$this->show_view($view, true);
}
private function dataBizSelect($params)
{
$lists = $where = $where_c = $where_dt = [];
$same_day = 0;
if ($params['time']) {
$time = explode(' ~ ', $params['time']);
$time[0] == $time[1] && $same_day = 1;
if ($time[0]) {
$where["log_date>="] = $time[0];
$where_c["c_time>="] = strtotime("{$time[0]} 00:00:00");
$where_dt["dt_time>="] = "{$time[0]} 00:00:00";
}
if ($time[1]) {
$where["log_date<="] = $time[1];
$where_c["c_time<="] = strtotime("{$time[1]} 23:59:59");
$where_dt["dt_time<="] = "{$time[1]} 23:59:59";
}
} else {
$where_c["c_time>="] = strtotime("2022-04-15 00:00:00");
$where_dt["dt_time>="] = "2022-04-15 00:00:00";
}
//门店搜索
if (!$same_day && ($params['type'] || $params['biz_id'] || $params['city_id'] || $params['county_id'])) {
$where_cdt['status'] = 1;
$params['type'] && $where_cdt['type'] = $params['type'];
$params['biz_id'] && $where_cdt['id'] = $params['biz_id'];
$params['city_id'] && $where_cdt['city_id'] = $params['city_id'];
$params['county_id'] && $where_cdt['county_id'] = $params['county_id'];
$res_biz = $this->mdBiz->select($where_cdt, 'id desc', 0, 0, 'id');
if ($res_biz) {
$str_ids = implode(',', array_column($res_biz, 'id'));
$where_c["biz_id in ({$str_ids})"] = null;
$where_dt["biz_id in ({$str_ids})"] = null;
} else {
$where_c['biz_id'] = -2;
$where_dt['biz_id'] = -2;
}
}
if ($params['type']) {
$where["type"] = $params['type'];
} else {
$params['type'] = '';
}
if ($params['biz_id']) {
$where['biz_id'] = $params['biz_id'];
} else if ($params['city_id']) {
$where_biz['status'] = 1;
$params['city_id'] && $where_biz['city_id'] = $params['city_id'];
$params['county_id'] && $where_biz['county_id'] = $params['county_id'];
$res_biz = $this->mdBiz->select($where_biz, 'id desc', 0, 0, 'id');
if ($res_biz) {
$str_ids = implode(',', array_column($res_biz, 'id'));
$where["biz_id in ({$str_ids})"] = null;
} else {
$where['biz_id'] = -2;
}
} else {
$params['city_id'] = '';
$params['county_id'] = '';
$params['biz_id'] = '';
}
$total = $this->mdBizsLog->count($where);
$offlineSources = $this->mdCustomers->offlineSources();
if ($total) {
$res = $this->mdBizsLog->select($where, "id desc", $params['page'], $params['size']);
if ($res) {
$str_ids = implode(',', array_unique(array_column($res, 'biz_id')));
$map_biz = $this->mdBiz->map('id', 'biz_name', ["id in ({$str_ids})" => null]);
foreach ($res as $v) {
$biz_name = $biz_type = $customer_info = $c_num_info = $order_info = '';
$customers = $c_num = $orders = 0;
$map_biz[$v['biz_id']] && $biz_name = $params['size'] == 10000 ? $map_biz[$v['biz_id']] : "<a href=\"javascript:void(0);\"
data-open=\"/app/licheb/userslog/lists_users?tab=1&biz_id={$v['biz_id']}&time={$v['log_date']} ~ {$v['log_date']}\">
{$map_biz[$v['biz_id']]}</a>";
$temp = ['biz_name' => $biz_name, 'defeats' => $v['defeats']
, 't_num' => $v['t_num'], 'orders' => $v['orders']
, 'bills' => $v['bills'], 'reassigns' => $v['reassigns'], 'receives' => $v['receives']
, 'qy_adds' => $v['qy_adds'], 'log_date' => $v['log_date']];
$customer_json = $v['customer_json'] ? json_decode($v['customer_json'], true) : [];
$c_num_json = $v['customer_json'] ? json_decode($v['c_num_json'], true) : [];
$order_json = $v['customer_json'] ? json_decode($v['order_json'], true) : [];
foreach ($offlineSources as $key1 => $value1) {
$nums = intval($v['customer_' . $key1]);
$nums_c_num = intval($v['c_num_' . $key1]);
$nums_orders = intval($v['order_' . $key1]);
if ($nums) {
$customers += $nums;
if ($params['size'] != 10000) {
if ($customer_info) {
$customer_info .= "<br>{$value1['name']}{$nums}";
} else {
$customer_info = "<br>{$value1['name']}{$nums}";
}
}
}
if ($nums_c_num) {
$c_num += $nums_c_num;
if ($params['size'] != 10000) {
if ($c_num_info) {
$c_num_info .= "<br>{$value1['name']}{$nums_c_num}";
} else {
$c_num_info = "<br>{$value1['name']}{$nums_c_num}";
}
}
}
if ($nums_orders) {
$orders += $nums_orders;
if ($params['size'] != 10000) {
if ($order_info) {
$order_info .= "<br>{$value1['name']}{$nums_orders}";
} else {
$order_info = "<br>{$value1['name']}{$nums_orders}";
}
}
}
if ($params['size'] == 10000) {//导出使用
$temp['customer_' . $key1] = $nums;
$temp['c_num_' . $key1] = $nums_c_num;
$temp['order_' . $key1] = $nums_orders;
foreach ($value1['list'] as $key2 => $value2) {
$temp['customer_' . $key2] = intval($customer_json[$key1]['list'][$key2]['num']);
$temp['c_num_' . $key2] = intval($c_num_json[$key1]['list'][$key2]['num']);
$temp['order_' . $key2] = intval($order_json[$key1]['list'][$key2]['num']);
}
}
}
$temp['customers'] = $customer_info ? "总数:{$customers}{$customer_info}" : $customers;
$temp['c_num'] = $c_num_info ? "总数:{$c_num}{$c_num_info}" : $c_num;
$temp['orders'] = $order_info ? "总数:{$orders}{$order_info}" : $orders;
$lists[] = $temp;
}
}
}
if ($params['size'] != 10000) {
$customers = $c_num = $orders = 0;
$customers_info = $c_num_info = $orders_info = '';
foreach ($offlineSources as $k => $v) {
if ($same_day) {
$sum2 = $this->mdUsersLog->sum("customer_{$k}", $where);//客户数
if ($sum2['customer_' . $k]) {//客户数
$customers += $sum2['customer_' . $k];
$customers_info .= "<br>{$v['name']}{$sum2['customer_'.$k]}";
}
$sum2 = $this->mdUsersLog->sum("c_num_{$k}", $where);//进店人数
if ($sum2['c_num_' . $k]) {
$c_num += $sum2['c_num_' . $k];
$c_num_info .= "<br>{$v['name']}{$sum2['c_num_'.$k]}";
}
} else {
$count2 = $this->mdCustomers->count(array_merge($where_c, ['of_id' => $k]));//客户数
if ($count2) {
$customers += $count2;
$customers_info .= "<br>{$v['name']}{$count2}";
}
$count2 = $this->mdCustomers->count(array_merge($where_dt, ['of_id' => $k]));//进店人数
if ($count2) {
$c_num += $count2;
$c_num_info .= "<br>{$v['name']}{$count2}";
}
}
$sum2 = $this->mdUsersLog->sum("order_{$k}", $where);//订单数
if ($sum2['order_' . $k]) {
$orders += $sum2['order_' . $k];
$orders_info .= "<br>{$v['name']}{$sum2['order_'.$k]}";
}
}
$menus[] = ['title' => "客户数", 'note' => $customers ? "总数:{$customers}{$customers_info}" : '0人'];
$menus[] = ['title' => "进店人数", 'note' => $c_num ? "总数:{$c_num}{$c_num_info}" : '0人'];
$menus[] = ['title' => "订单数", 'note' => $orders ? "总数:{$orders}{$orders_info}" : '0个'];
$sum = $this->mdUsersLog->sum('t_num', $where);
$menus[] = ['title' => "试驾数", 'value' => intval($sum['t_num']), 'tag' => '次'];
$sum = $this->mdUsersLog->sum('defeats', $where);
$menus[] = ['title' => "战败数", 'value' => intval($sum['defeats']), 'tag' => '个'];
$sum = $this->mdUsersLog->sum('bills', $where);
$menus[] = ['title' => "开票数", 'value' => intval($sum['bills']), 'tag' => '个'];
$sum = $this->mdUsersLog->sum('qy_adds', $where);
$menus[] = ['title' => "企微数", 'value' => intval($sum['qy_adds']), 'tag' => '人'];
$sum = $this->mdUsersLog->sum('reassigns', $where);
$menus[] = ['title' => "改派数", 'value' => intval($sum['reassigns']), 'tag' => '个'];
$sum = $this->mdUsersLog->sum('receives', $where);
$menus[] = ['title' => "接收数", 'value' => intval($sum['receives']), 'tag' => '个'];
$data['menus'] = $menus;
}
$data['pager'] = array('count' => ceil($total / $params['size']), 'curr' => $params['page'], 'totle' => $total);
$data['lists'] = $lists;
$data['params'] = $params;
$data['_title'] = "门店日志";
return $data;
}
private function dataUsersSelect($params)
{
$_title = '顾问日志';
$lists = $where = [];
if ($params['uname']) {
$where["sale_id in(select id from lc_app_licheb_users where uname like '%{$params['uname']}%')"] = null;
}
if ($params['biz_id']) {
$where['biz_id'] = $params['biz_id'];
$re_biz = $this->mdBiz->get(['id' => $params['biz_id']]);
$re_biz && $_title = $re_biz['biz_name'] . '_顾问日志';
}
if ($params['time']) {
$time = explode(' ~ ', $params['time']);
$time[0] && $where["log_date>="] = $time[0];
$time[1] && $where["log_date<="] = $time[1];
}
$total = $this->mdUsersLog->count($where);
if ($total) {
$res = $this->mdUsersLog->select($where, "log_date desc,id desc", $params['page'], $params['size']);
$sale_ids = [];
foreach ($res as $v) {
$v['sale_id'] && !in_array($v['sale_id'], $sale_ids) && $sale_ids[] = $v['sale_id'];
}
$map_sale = [];
if ($sale_ids) {
$str_ids = implode(',', $sale_ids);
$map_sale = $this->mdUsers->map('id', 'uname', ["id in ({$str_ids})" => null]);
}
$offlineSources = $this->mdCustomers->offlineSources();
foreach ($res as $v) {
$uname = $map_sale[$v['sale_id']] ? $map_sale[$v['sale_id']] : '';
$temp = ['uname' => $uname, 't_num' => $v['t_num'], 'defeats' => $v['defeats'], 'bills' => $v['bills']
, 'qy_adds' => $v['qy_adds'], 'qy_dels' => $v['qy_dels'], 'log_date' => $v['log_date']];
$customer_json = $v['customer_json'] ? json_decode($v['customer_json'], true) : [];
$c_num_json = $v['customer_json'] ? json_decode($v['c_num_json'], true) : [];
$order_json = $v['customer_json'] ? json_decode($v['order_json'], true) : [];
$customers = $c_num = $orders = 0;
foreach ($offlineSources as $key1 => $value1) {
$nums = intval($v['customer_' . $key1]);
$nums_c_num = intval($v['c_num_' . $key1]);
$nums_orders = intval($v['order_' . $key1]);
$nums && $customers += $nums;
$nums_c_num && $c_num += $nums_c_num;
$nums_orders && $orders += $nums_orders;
if ($params['size'] == 10000) {//导出使用
$temp['customer_' . $key1] = $nums;
$temp['c_num_' . $key1] = $nums_c_num;
$temp['order_' . $key1] = $nums_orders;
foreach ($value1['list'] as $key2 => $value2) {
$temp['customer_' . $key2] = intval($customer_json[$key1]['list'][$key2]['num']);
$temp['c_num_' . $key2] = intval($c_num_json[$key1]['list'][$key2]['num']);
$temp['order_' . $key2] = intval($order_json[$key1]['list'][$key2]['num']);
}
}
}
$temp['customers'] = $customers;
$temp['c_num'] = $c_num;
$temp['orders'] = $orders;
$lists[] = $temp;
}
}
if ($params['size'] != 10000) {
$sum = $this->mdUsersLog->sum('customers', $where);
$menus[] = ['title' => "客户数", 'value' => intval($sum['customers']), 'tag' => '人'];
$sum_c = $this->mdUsersLog->sum('c_num', $where);
$menus[] = ['title' => "进店人数", 'value' => intval($sum_c['c_num']), 'tag' => '人'];
$sum = $this->mdUsersLog->sum('orders', $where);
$menus[] = ['title' => "订单数", 'value' => intval($sum['orders']), 'tag' => '个'];
$sum = $this->mdUsersLog->sum('t_num', $where);
$menus[] = ['title' => "试驾数", 'value' => intval($sum['t_num']), 'tag' => '次'];
$sum = $this->mdUsersLog->sum('defeats', $where);
$menus[] = ['title' => "战败数", 'value' => intval($sum['defeats']), 'tag' => '个'];
$sum = $this->mdUsersLog->sum('bills', $where);
$menus[] = ['title' => "开票数", 'value' => intval($sum['bills']), 'tag' => '个'];
$sum = $this->mdUsersLog->sum('qy_adds', $where);
$menus[] = ['title' => "新增企微", 'value' => intval($sum['qy_adds']), 'tag' => '人'];
$sum = $this->mdUsersLog->sum('qy_dels', $where);
$menus[] = ['title' => "删除企微", 'value' => intval($sum['qy_dels']), 'tag' => '人'];
$data['menus'] = $menus;
}
$data['pager'] = array('count' => ceil($total / $params['size']), 'curr' => $params['page'], 'totle' => $total);
$data['lists'] = $lists;
$data['params'] = $params;
$data['_title'] = $_title;
return $data;
}
public function visitSelect($params)
{
$_title = '顾问日志';
$lists = $where = [];
if ($params['uname']) {
$where["sales_id in(select id from lc_app_licheb_users where uname like '%{$params['uname']}%')"] = null;
}
if ($params['biz_id']) {
$where['biz_id'] = $params['biz_id'];
$re_biz = $this->mdBiz->get(['id' => $params['biz_id']]);
$re_biz && $_title = $re_biz['biz_name'] . '_顾问日志';
}
if ($params['time']) {
$time = explode(' ~ ', $params['time']);
$time[0] && $where["t_day>="] = $time[0];
$time[1] && $where["t_day<="] = $time[1];
}
$total = $this->mdCustomerVisitSales->count($where);
if ($total) {
$res = $this->mdCustomerVisitSales->select($where, "t_day desc,id desc", $params['page'], $params['size']);
$sales_ids = [];
foreach ($res as $v) {
$v['sales_id'] && !in_array($v['sales_id'], $sales_ids) && $sales_ids[] = $v['sales_id'];
}
$map_sale = [];
if ($sales_ids) {
$str_ids = implode(',', $sales_ids);
$map_sale = $this->mdUsers->map('id', 'uname', ["id in ({$str_ids})" => null]);
}
foreach ($res as $v) {
$uname = '';
$map_sale[$v['sales_id']] && $uname = $map_sale[$v['sales_id']];
$follows = $v['t_follows'] + $v['h_follows'] + $v['w_follows'];
$temp = ['uname' => $uname, 'follows' => $follows, 't_follows' => $v['t_follows']
, 'h_follows' => $v['h_follows'], 'w_follows' => $v['w_follows'], 't_day' => $v['t_day']];
$lists[] = $temp;
}
}
if ($params['size'] != 10000) {
$sum_h = $this->mdCustomerVisitSales->sum('h_follows', $where);
$sum_t = $this->mdCustomerVisitSales->sum('t_follows', $where);
$sum_w = $this->mdCustomerVisitSales->sum('w_follows', $where);
$sum = $sum_h['h_follows'] + $sum_t['t_follows'] + $sum_w['w_follows'];
$menus[] = ['title' => "计划跟进数", 'value' => intval($sum), 'tag' => '个'];
$menus[] = ['title' => "已跟进数", 'value' => intval($sum_h['h_follows']), 'tag' => '个'];
$menus[] = ['title' => "新增未跟进数", 'value' => intval($sum_t['t_follows']), 'tag' => '个'];
$menus[] = ['title' => "逾期未跟进数", 'value' => intval($sum_w['w_follows']), 'tag' => '个'];
$data['menus'] = $menus;
}
$data['pager'] = array('count' => ceil($total / $params['size']), 'curr' => $params['page'], 'totle' => $total);
$data['lists'] = $lists;
$data['params'] = $params;
$data['_title'] = $_title;
return $data;
}
public function get()
{
}
public function add()
{
}
public function edit()
{
}
public function del()
{
}
public function batch()
{
}
public function export()
{
$params = $this->input->get();
$params['page'] = 1;
$params['size'] = 10000;
$data = $indexs = [];
$this->load->library('excel');
if ($params['tab'] == 1) {//客户统计
$res = $this->dataUsersSelect($params);
$offlineSources = $this->mdCustomers->offlineSources();
$fileName = $res['_title'] . '_' . $this->tabAry[$params['tab']] . "_" . date('YmdHis');
$list[1] = ['顾问', '日期', '客户数', '进店人数', '订单数', '试驾数', '战败数', '开票数', '新增企微', '删除企微'];
$list[2] = ['顾问', '日期', '客户数'];
$list[3] = ['顾问', '日期', '进店人数'];
$list[4] = ['顾问', '日期', '订单数'];
foreach ($offlineSources as $k1 => $v1) {
$list[2][] = "{$v1['name']}";
$list[3][] = "{$v1['name']}";
$list[4][] = "{$v1['name']}";
foreach ($v1['list'] as $k2 => $v2) {
$list[2][] = $v2;
$list[3][] = $v2;
$list[4][] = $v2;
}
}
//第一条标题
$sheet['总览'][] = $list[1];
$sheet['客户'][] = $list[2];
$sheet['进店'][] = $list[3];
$sheet['订单'][] = $list[4];
foreach ($res['lists'] as $k => $v) {
$list[1] = [$v['uname'], $v['log_date'], $v['customers'], $v['c_num'], $v['orders'], $v['t_num'], $v['defeats']
, $v['bills'], $v['qy_adds'], $v['qy_dels']];
$list[2] = [$v['uname'], $v['log_date'], $v['customers']];
$list[3] = [$v['uname'], $v['log_date'], $v['c_num']];
$list[4] = [$v['uname'], $v['log_date'], $v['orders']];
foreach ($offlineSources as $k2 => $v2) {
$list[2][] = $v['customer_' . $k2];
$list[3][] = $v['c_num_' . $k2];
$list[4][] = $v['order_' . $k2];
foreach ($v2['list'] as $k3 => $v3) {
$list[2][] = $v['customer_' . $k3];
$list[3][] = $v['c_num_' . $k3];
$list[4][] = $v['order_' . $k3];
}
}
$sheet['总览'][] = $list[1];
$sheet['客户'][] = $list[2];
$sheet['进店'][] = $list[3];
$sheet['订单'][] = $list[4];
}
$this->excel->exportExcel($sheet, $fileName);
} else if ($params['tab'] == 2) {//回访统计
$res = $this->visitSelect($params);
$indexs = ['biz_name' => '门店', 'uname' => '顾问', 'follows' => '计划跟进数', 'h_follows' => '已跟进数'
, 't_follows' => '今日新增未跟进数', 'w_follows' => '逾期未跟进数', 't_day' => '日期'];
$fileName = $res['_title'] . '_' . $this->tabAry[$params['tab']];
foreach ($res['lists'] as $key => $value) {
$data[] = $value;
}
array_unshift($data, $indexs);
$this->excel->out_csv($data, $indexs, $fileName . "_" . date('YmdHis'));
} else {//门店统计
$res = $this->dataBizSelect($params);
$offlineSources = $this->mdCustomers->offlineSources();
$fileName = $res['_title'] . "_" . date('YmdHis');
$list[1] = ['门店', '日期', '客户数', '进店人数', '订单数', '试驾数', '战败数', '开票数', '企微数', '改派数', '接收数'];
$list[2] = ['门店', '日期', '客户数'];
$list[3] = ['门店', '日期', '进店人数'];
$list[4] = ['门店', '日期', '订单数'];
foreach ($offlineSources as $k1 => $v1) {
$list[2][] = "{$v1['name']}";
$list[3][] = "{$v1['name']}";
$list[4][] = "{$v1['name']}";
foreach ($v1['list'] as $k2 => $v2) {
$list[2][] = $v2;
$list[3][] = $v2;
$list[4][] = $v2;
}
}
//第一条标题
$sheet['总览'][] = $list[1];
$sheet['客户'][] = $list[2];
$sheet['进店'][] = $list[3];
$sheet['订单'][] = $list[4];
foreach ($res['lists'] as $k => $v) {
$list[1] = [$v['biz_name'], $v['log_date'], $v['customers'], $v['c_num'], $v['orders'], $v['t_num'], $v['defeats']
, $v['bills'], $v['qy_adds'], $v['reassigns'], $v['receives']];
$list[2] = [$v['biz_name'], $v['log_date'], $v['customers']];
$list[3] = [$v['biz_name'], $v['log_date'], $v['c_num']];
$list[4] = [$v['biz_name'], $v['log_date'], $v['orders']];
foreach ($offlineSources as $k2 => $v2) {
$list[2][] = $v['customer_' . $k2];
$list[3][] = $v['c_num_' . $k2];
$list[4][] = $v['order_' . $k2];
foreach ($v2['list'] as $k3 => $v3) {
$list[2][] = $v['customer_' . $k3];
$list[3][] = $v['c_num_' . $k3];
$list[4][] = $v['order_' . $k3];
}
}
$sheet['总览'][] = $list[1];
$sheet['客户'][] = $list[2];
$sheet['进店'][] = $list[3];
$sheet['订单'][] = $list[4];
}
$this->excel->exportExcel($sheet, $fileName);
}
}
}