This commit is contained in:
dengbw
2022-08-12 17:58:44 +08:00
parent 0d4e88d482
commit 9cc15c55e6
+256 -7
View File
@@ -10,6 +10,7 @@ require_once APPPATH . 'controllers/wxapp/Wxapp.php';
class Biz extends Wxapp
{
private $biz_id;
function __construct($inputs, $app_key)
{
@@ -19,15 +20,252 @@ class Biz extends Wxapp
$this->check_status = array();//用户状态校验
$this->check_mobile = array();//需要手机号
$this->check_headimg = array();//授权微信信息
$this->load->model("biz/biz_model", 'mdBiz');
$this->load->model("biz/biz_brand_model", 'mdBizBrand');
$this->load->model("biz/biz_base_model", 'mdBizBase');
$this->load->model("biz/biz_sell_model", 'mdBizSell');
$this->load->model('area_model');
$this->load->model('sys/sys_street_model', 'mdStreet');
$this->load->model('receiver/order/receiver_orders_model', 'mdOrders');
$this->load->model('receiver/order/receiver_orders_v2_model', 'mdOrders');
$this->load->model('receiver/receiver_customers_model', 'mdCustomers');
$this->biz_id = $this->get_biz_id();
}
/**
* Notes:门店数据
* Created on: 2022/8/10 14:37
* Created by: dengbw
* @return array
*/
protected function get_stats()
{
$this->load->model('app/app_lichene_qy_log_model', 'mdWechatqyLog');
$s_time = $this->input_param('s_time');
$e_time = $this->input_param('e_time');
!$s_time && $s_time = date('Y-m-d');
!$e_time && $e_time = date('Y-m-d');
$c_time = ['s_time' => strtotime($s_time), 'e_time' => strtotime(date('Y-m-d 23:59:59', strtotime($e_time)))];
$o_time = ['s_time' => $s_time . ' 00:00:00', 'e_time' => $e_time . ' 23:59:59'];
//客户
$customers = $this->mdCustomers->count(['biz_id' => $this->biz_id, 'status>=' => 0, 'c_time>=' => $c_time['s_time'],
'c_time<=' => $c_time['e_time']]);
//进店
$intos = $this->mdCustomers->db->select('a.id')
->from('lc_receiver_customer_oplogs as a')
->join('lc_receiver_customers as b', "b.id=a.customer_id", 'left')
->where(['a.type' => 4, 'a.log' => '客户到店', 'a.c_time>=' => $c_time['s_time'], 'a.c_time<=' => $c_time['e_time'],
'b.status>=' => 0, 'b.biz_id' => $this->biz_id])
->count_all_results();
//企微添加
$wxqys_add = 0;
$res_user = $this->app_user_model->select(['status' => 1, 'userid<>' => '', 'biz_id' => $this->biz_id], 'id desc', 0, 0, 'userid');
if ($res_user) {
$str_ids = implode("','", array_unique(array_column($res_user, 'userid')));
$wxqys_add = $this->mdWechatqyLog->count(["userid in('{$str_ids}')" => null, 'change_type' => 'add_external_contact']);
}
//点亮
$wxqys = $this->mdCustomers->count(['biz_id' => $this->biz_id, 'status>=' => 0, 'c_time>=' => $c_time['s_time'],
'c_time<=' => $c_time['e_time'], 'wxqy' => 1]);
//成交
$orders = $this->mdOrders->count(['biz_id' => $this->biz_id, 'status>=' => 0, 'order_time>=' => $o_time['s_time'], 'order_time<=' => $o_time['e_time']]);
//退定
$refunds = $this->mdOrders->count(['biz_id' => $this->biz_id, 'status' => 2, 'refund_time>=' => $o_time['s_time'], 'refund_time<=' => $o_time['e_time']]);
$data['tabs'] = [['title' => '客户/进店', 'value_1' => $customers, 'value_2' => '/' . $intos, 'url' => 'pages/'],
['title' => '企微添加/点亮', 'value_1' => $wxqys_add, 'value_2' => '/' . $wxqys, 'url' => 'pages/'],
['title' => '成交/退定', 'value_1' => $orders, 'value_2' => '/' . $refunds, 'url' => 'pages/'],
];
$orders_per = number_format_com($orders / $customers * 100, 1, '');
$intos_per = number_format_com($intos / $customers * 100, 1, '');
$data['funnel'] = ['title' => '线索转化漏斗',
'expected_data' => [['name' => "成交数({$orders_per}%)", 'value' => 33.3], ['name' => "到店数({$intos_per}%)", 'value' => 66.7], ['name' => '客户量', 'value' => 100]]
, 'actual_data' => [['name' => '成交数', 'value' => $orders], ['name' => '到店数', 'value' => $intos], ['name' => '客户量', 'value' => $customers]]];
$data['title'] = '门店数据';
return $data;
}
/**
* Notes:客户/订单走势图
* Created on: 2022/8/12 10:56
* Created by: dengbw
* @return mixed
*/
protected function get_stats_days()
{
$days = intval($this->input_param('days'));
!$days && $days = 7;
$customers = $orders = $xAxis = [];
for ($i = ($days - 1); $i >= 0; $i--) {
$s_time = date('Y-m-d', strtotime("-{$i} day"));
$c_time = ['s_time' => strtotime($s_time), 'e_time' => strtotime(date('Y-m-d 23:59:59', strtotime($s_time)))];
$o_time = ['s_time' => $s_time . ' 00:00:00', 'e_time' => $s_time . ' 23:59:59'];
$xAxis[] = $days > 7 ? date('d', strtotime($s_time)) : date('n-d', strtotime($s_time));
$customers[] = $this->mdCustomers->count(['biz_id' => $this->biz_id, 'status>=' => 0, 'c_time>=' => $c_time['s_time'], 'c_time<=' => $c_time['e_time']]);;
$orders[] = $this->mdOrders->count(['biz_id' => $this->biz_id, 'status>=' => 0, 'order_time>=' => $o_time['s_time'], 'order_time<=' => $o_time['e_time']]);
}
$data = ['title' => "{$days}日走势图", 'legend_data' => ["{$days}日客户数", "{$days}日订单数"], 'xAxis' => $xAxis,
'series' => [['name' => "{$days}日客户数", 'type' => 'line', 'stack' => '总量', 'smooth' => true, 'data' => $customers]
, ['name' => "{$days}日订单数", 'type' => 'line', 'stack' => '总量', 'smooth' => true, 'data' => $orders]]];
return $data;
}
/**
* Notes:客户数据
* Created on: 2022/8/11 16:09
* Created by: dengbw
* @return mixed
*/
protected function get_stats_customer()
{
$s_time = $this->input_param('s_time');
$e_time = $this->input_param('e_time');
!$s_time && $s_time = date('Y-m-d');
!$e_time && $e_time = date('Y-m-d');
$c_time = ['s_time' => strtotime($s_time), 'e_time' => strtotime(date('Y-m-d 23:59:59', strtotime($e_time)))];
$pie1_level = $pie2_level = $pie1_offline = $pie2_offline = $users = $users_customer = [];
$sdata_level = $this->mdCustomers->get_sdata('level');
$where = ['biz_id' => $this->biz_id, 'status>=' => 0, 'c_time>=' => $c_time['s_time'], 'c_time<=' => $c_time['e_time']];
foreach ($sdata_level as $v) {
$value_1 = $this->mdCustomers->count(array_merge($where, ['level' => $v]));
$pie1_level[] = ['name' => $v, 'value' => $value_1];
$value_2 = $this->mdCustomers->db->select('a.id')
->from('lc_receiver_customer_oplogs as a')
->join('lc_receiver_customers as b', "b.id=a.customer_id", 'left')
->where(['a.type' => 4, 'a.log' => '客户到店', 'a.c_time>=' => $c_time['s_time'], 'a.c_time<=' => $c_time['e_time'],
'b.status>=' => 0, 'b.biz_id' => $this->biz_id, 'b.level' => $v])
->count_all_results();
$pie2_level[] = ['name' => $v, 'value' => $value_2];
}
$offlineSources = $this->mdCustomers->offlineSources();
foreach ($offlineSources as $k => $v) {
$value_1 = $this->mdCustomers->count(array_merge($where, ['of_id' => $k]));
$pie1_offline[] = ['name' => $v['name'], 'value' => $value_1];
$value_2 = $this->mdCustomers->db->select('a.id')
->from('lc_receiver_customer_oplogs as a')
->join('lc_receiver_customers as b', "b.id=a.customer_id", 'left')
->where(['a.type' => 4, 'a.log' => '客户到店', 'a.c_time>=' => $c_time['s_time'], 'a.c_time<=' => $c_time['e_time'],
'b.status>=' => 0, 'b.biz_id' => $this->biz_id, 'b.of_id' => $k])
->count_all_results();
$pie2_offline[] = ['name' => $v['name'], 'value' => $value_2];
}
$res_user = $this->app_user_model->select(['status' => 1, 'biz_id' => $this->biz_id], 'id desc', 0, 0, 'id,uname');
foreach ($res_user as $k => $v) {
$users[] = $v['uname'];
$users_customer[] = $this->mdCustomers->count(array_merge($where, ['admin_id' => $v['id']]));
}
$data['pie1'] = ['title' => '客户来源(录入)', 'series_data_1' => $pie1_level, 'series_data_2' => $pie1_offline];
$data['pie2'] = ['title' => '客户来源(进店)', 'series_data_1' => $pie2_level, 'series_data_2' => $pie2_offline];
$data['bar'] = ['title' => '顾问录入客户', 'xAxis_data' => $users, 'series_data' => $users_customer];
$data['title'] = '客户数据';
return $data;
}
/**
* Notes:企微数据
* Created on: 2022/8/11 15:40
* Created by: dengbw
* @return mixed
*/
protected function get_stats_wxqy()
{
$this->load->model('app/app_lichene_qy_log_model', 'mdWechatqyLog');
$s_time = $this->input_param('s_time');
$e_time = $this->input_param('e_time');
!$s_time && $s_time = date('Y-m-d');
!$e_time && $e_time = date('Y-m-d');
$c_time = ['s_time' => strtotime($s_time), 'e_time' => strtotime(date('Y-m-d 23:59:59', strtotime($e_time)))];
$bar1_xAxis_data = $bar1_series_data = $bar2_xAxis_data = $bar2_series_data = [];
$res_user = $this->app_user_model->select(['status' => 1, 'biz_id' => $this->biz_id], 'id desc', 0, 0, 'id,uname,userid');
foreach ($res_user as $k => $v) {
$bar1_xAxis_data[] = $v['uname'];
$wxqys_add = 0;
if ($v['userid']) {
$wxqys_add = $this->mdWechatqyLog->count(["userid" => $v['userid'], 'change_type' => 'add_external_contact'
, 'c_time>=' => $c_time['s_time'], 'c_time<=' => $c_time['e_time']]);
}
$bar1_series_data[] = $wxqys_add;
$bar2_xAxis_data[] = $v['uname'];
$bar2_series_data[] = $this->mdCustomers->count(['admin_id' => $v['id'], 'biz_id' => $this->biz_id, 'status>=' => 0
, 'c_time>=' => $c_time['s_time'], 'c_time<=' => $c_time['e_time'], 'wxqy' => 1]);
}
$data['bar1'] = ['title' => '企微添加好友', 'xAxis_data' => $bar1_xAxis_data, 'series_data' => $bar1_series_data];
$data['bar2'] = ['title' => '企微添加点亮', 'xAxis_data' => $bar2_xAxis_data, 'series_data' => $bar2_series_data];
$data['title'] = '企微数据';
return $data;
}
/**
* Notes:订单数据
* Created on: 2022/8/11 15:40
* Created by: dengbw
* @return mixed
*/
protected function get_stats_order()
{
$s_time = $this->input_param('s_time');
$e_time = $this->input_param('e_time');
!$s_time && $s_time = date('Y-m-d');
!$e_time && $e_time = date('Y-m-d');
$c_time = ['s_time' => strtotime($s_time), 'e_time' => strtotime(date('Y-m-d 23:59:59', strtotime($e_time)))];
$o_time = ['s_time' => $s_time . ' 00:00:00', 'e_time' => $e_time . ' 23:59:59'];
$pie1_series_data = $users = $users_customer = $users_order = [];
$offlineSources = $this->mdCustomers->offlineSources();
foreach ($offlineSources as $k => $v) {
$value = $this->mdOrders->db->select('a.id')
->from('lc_receiver_orders_v2 as a')
->join('lc_receiver_customers as b', "b.id=a.customer_id", 'left')
->where(['a.biz_id' => $this->biz_id, 'a.status>=' => 0, 'a.order_time>=' => $o_time['s_time'], 'a.order_time<=' => $o_time['e_time']
, 'b.of_id' => $k])
->count_all_results();
$pie1_series_data[] = ['name' => $v['name'], 'value' => $value];
}
$res_user = $this->app_user_model->select(['status' => 1, 'biz_id' => $this->biz_id], 'id desc', 0, 0, 'id,uname');
foreach ($res_user as $k => $v) {
$users[] = $v['uname'];
$users_customer[] = $this->mdCustomers->count(['admin_id' => $v['id'], 'biz_id' => $this->biz_id, 'status>=' => 0
, 'c_time>=' => $c_time['s_time'], 'c_time<=' => $c_time['e_time']]);
$users_order[] = $this->mdOrders->count(['admin_id' => $v['id'], 'biz_id' => $this->biz_id, 'status>=' => 0
, 'order_time>=' => $o_time['s_time'], 'order_time<=' => $o_time['e_time']]);
}
$this->load->model('auto/auto_brand_model', 'mdAutoBrand');
$series_data_1 = $series_data_2 = [];
$where_o = ['biz_id' => $this->biz_id, 'status>=' => 0, 'order_time>=' => $o_time['s_time'], 'order_time<=' => $o_time['e_time']];
$where_r = ['biz_id' => $this->biz_id, 'status' => 2, 'refund_time>=' => $o_time['s_time'], 'refund_time<=' => $o_time['e_time']];
//成交
$orders = $this->mdOrders->count($where_o);
$res_o = $this->mdOrders->select($where_o, 'id desc', 0, 0, 'distinct(brand_id) as brand_id');
if ($res_o) {
$str_ids = implode(",", array_unique(array_column($res_o, 'brand_id')));
$map_brand = $this->mdAutoBrand->map('id', 'name', ["id in({$str_ids})" => null]);
foreach ($res_o as $k => $v) {
$name = $map_brand[$v['brand_id']] ? $map_brand[$v['brand_id']] : '-';
$value = 0;
if ($v['brand_id']) {
$value = $this->mdOrders->count(array_merge($where_o, ['brand_id' => $v['brand_id']]));
}
$series_data_1[] = ['name' => $name, 'value' => $value];
}
}
//退定
$refunds = $this->mdOrders->count($where_r);
$res_r = $this->mdOrders->select($where_r, 'id desc', 0, 0, 'distinct(brand_id) as brand_id');
if ($res_r) {
$str_ids = implode(",", array_unique(array_column($res_r, 'brand_id')));
$map_brand = $this->mdAutoBrand->map('id', 'name', ["id in({$str_ids})" => null]);
foreach ($res_r as $k => $v) {
$name = $map_brand[$v['brand_id']] ? $map_brand[$v['brand_id']] : '-';
$value = 0;
if ($v['brand_id']) {
$value = $this->mdOrders->count(array_merge($where_r, ['brand_id' => $v['brand_id']]));
}
$series_data_2[] = ['name' => $name, 'value' => $value];
}
}
$data['pie1'] = ['title' => '订单来源', 'series_data' => $pie1_series_data];
$data['pie2'] = ['title' => '品牌分布'
, 'series_data' => [['name' => '成交数', 'value' => $orders, 'selected' => true], ['name' => '退定数', 'value' => $refunds]]
, 'series_data_1' => $series_data_1, 'series_data_2' => $series_data_2
];
$data['bar'] = ['title' => '顾问成交情况', 'xAxis_data' => $users
, 'series' => [['name' => '客户数', 'type' => 'bar', 'data' => $users_customer], ['name' => '订单数', 'type' => 'bar', 'data' => $users_order]]];
$data['title'] = '订单数据';
return $data;
}
/**
* Notes:店铺概况_tab
* Created on: 2022/1/5 15:13
@@ -41,6 +279,12 @@ class Biz extends Wxapp
protected function get_situation()
{
$this->load->model("biz/biz_brand_model", 'mdBizBrand');
$this->load->model("biz/biz_base_model", 'mdBizBase');
$this->load->model("biz/biz_sell_model", 'mdBizSell');
$this->load->model("biz/biz_model", 'mdBiz');
$this->load->model('area_model');
$this->load->model('sys/sys_street_model', 'mdStreet');
$tabs_id = intval($this->input_param('tabs_id'));
$biz_id = $this->session['new_biz_id'] ? $this->session['new_biz_id'] : intval($this->session['biz_id']);
$re_biz = $this->mdBiz->get(['id' => $biz_id, 'status' => 1]);
@@ -135,6 +379,8 @@ class Biz extends Wxapp
protected function get_street()
{
$this->load->model('area_model');
$this->load->model('sys/sys_street_model', 'mdStreet');
$id = intval($this->input->get('id'));
$list[] = ['id' => 0, 'name' => '选择乡镇'];
if (!$id) {
@@ -162,6 +408,9 @@ class Biz extends Wxapp
protected function post_situation()
{
$this->load->model("biz/biz_base_model", 'mdBizBase');
$this->load->model("biz/biz_sell_model", 'mdBizSell');
$this->load->model("biz/biz_model", 'mdBiz');
$tabs_id = intval($this->input_param('tabs_id'));
$info = $this->input_param('info');
if (!$tabs_id || !$info) {