980 lines
33 KiB
PHP
980 lines
33 KiB
PHP
<?php
|
|
|
|
namespace app\admin\controller;
|
|
use app\admin\logic\ChartLogic;
|
|
use think\Db;
|
|
|
|
/**
|
|
* 数据的统计
|
|
* Class Cache
|
|
* @package app\admin\controller
|
|
*/
|
|
class Chart extends AdminBase
|
|
{
|
|
/**
|
|
* 总订单数据统计
|
|
* Class Cache
|
|
* @package app\admin\controller
|
|
*/
|
|
|
|
public function order_chart()
|
|
{
|
|
if ($this->request->isAjax()) {
|
|
$get = input();
|
|
$year = empty($get['date']) ? date('Y') : $get['date'];
|
|
$_year = $year;
|
|
$year = $this->getYearStartAndEnd($year);
|
|
$data = [
|
|
'zdd'=>0,//总订单
|
|
'xse'=>0,//销售额
|
|
'ys'=>0,//已收
|
|
'ys2'=>0,//应收
|
|
'yxse'=>[],//月销售额
|
|
'xlph'=>[],//销量排行
|
|
'xszb'=>[],//销售占比
|
|
];
|
|
$zdd_where = [
|
|
['del','=',0],
|
|
['create_time','>=',$year['start_timestamp']],
|
|
['create_time','<=',$year['end_timestamp']],
|
|
];
|
|
$data['zdd'] = Db::name('order')->where($zdd_where)->count();
|
|
$data['xse'] = Db::name('order')->where($zdd_where)->sum('total_amount');
|
|
$data['ys'] = Db::name('order')->where($zdd_where)->where('pay_zd',1)->sum('total_amount');
|
|
$data['ys2'] = Db::name('order')->where($zdd_where)->where('pay_zd',0)->sum('total_amount');
|
|
|
|
$query = "
|
|
SELECT
|
|
m.month,
|
|
COALESCE(SUM(o.total_amount), 0) AS total_sales
|
|
FROM (
|
|
SELECT 1 AS month UNION ALL
|
|
SELECT 2 UNION ALL
|
|
SELECT 3 UNION ALL
|
|
SELECT 4 UNION ALL
|
|
SELECT 5 UNION ALL
|
|
SELECT 6 UNION ALL
|
|
SELECT 7 UNION ALL
|
|
SELECT 8 UNION ALL
|
|
SELECT 9 UNION ALL
|
|
SELECT 10 UNION ALL
|
|
SELECT 11 UNION ALL
|
|
SELECT 12
|
|
) m
|
|
LEFT JOIN ls_order o
|
|
ON MONTH(FROM_UNIXTIME(o.create_time)) = m.month
|
|
AND YEAR(FROM_UNIXTIME(o.create_time)) = :year
|
|
GROUP BY m.month
|
|
ORDER BY m.month;
|
|
";
|
|
$yxse_list = Db::query($query,['year'=>$_year]);
|
|
$yxse_data = [];
|
|
foreach ($yxse_list as $v){
|
|
$yxse_data[] = $v['total_sales'];
|
|
}
|
|
$yxse = [
|
|
'list'=>$yxse_list,
|
|
'data'=>$yxse_data
|
|
];
|
|
$data['yxse'] = $yxse;
|
|
|
|
|
|
$query = "
|
|
SELECT
|
|
goods_id,
|
|
SUM(total_amount) AS sales_count
|
|
FROM
|
|
ls_order
|
|
WHERE
|
|
create_time >= {$year['start_timestamp']}
|
|
AND
|
|
create_time <= {$year['end_timestamp']}
|
|
GROUP BY
|
|
goods_id
|
|
ORDER BY
|
|
sales_count DESC
|
|
";
|
|
$xlph_list = Db::query($query);
|
|
$xlph_data_data = [];
|
|
$xlph_data_goods = [];
|
|
foreach ($xlph_list as $v){
|
|
$xlph_data_data[] = $v['sales_count'];
|
|
$xlph_data_goods[] = Db::name('goods')->where('id',$v['goods_id'])->value('name');
|
|
}
|
|
$xlph_data = [
|
|
'goods'=>$xlph_data_goods,
|
|
'data'=>$xlph_data_data
|
|
];
|
|
$xlph = [
|
|
'list'=>$xlph_list,
|
|
'data'=>$xlph_data
|
|
];
|
|
$data['xlph'] =$xlph;
|
|
|
|
//销售占比
|
|
$query = "
|
|
SELECT
|
|
admin_id,
|
|
SUM(total_amount) AS sales_count
|
|
FROM
|
|
ls_order
|
|
WHERE
|
|
create_time >= {$year['start_timestamp']}
|
|
AND
|
|
create_time <= {$year['end_timestamp']}
|
|
GROUP BY
|
|
admin_id
|
|
ORDER BY
|
|
sales_count DESC
|
|
";
|
|
$xszb_list = Db::query($query);
|
|
$xszb_data_data = [];
|
|
$xszb_data_goods = [];
|
|
foreach ($xszb_list as $v){
|
|
$xszb_data_data[] = $v['sales_count'];
|
|
$name = Db::name('admin')->where('id',$v['admin_id'])->value('name');
|
|
$xszb_data_goods[] = $name?$name:'其它';
|
|
}
|
|
// $xszb_data = [
|
|
// 'goods'=>$xszb_data_goods,
|
|
// 'data'=>$xszb_data_data
|
|
// ];
|
|
$xszb_data = [];
|
|
foreach ($xszb_data_goods as $k=>$v){
|
|
$xszb_data[] = ['value'=>$xszb_data_data[$k],'name'=>$v];
|
|
}
|
|
$xszb = [
|
|
'list'=>$xszb_list,
|
|
'data'=>$xszb_data
|
|
];
|
|
$data['xszb'] =$xszb;
|
|
|
|
$this->_success('获取成功',$data);
|
|
}
|
|
|
|
return $this->fetch();
|
|
}
|
|
|
|
function getYearStartAndEnd($year) {
|
|
// 创建年份的开始时间
|
|
$startDateTime = new \DateTime("$year-01-01 00:00:00");
|
|
$startTimestamp = $startDateTime->getTimestamp();
|
|
|
|
// 创建年份的结束时间
|
|
$endDateTime = new \DateTime("$year-12-31 23:59:59");
|
|
$endTimestamp = $endDateTime->getTimestamp();
|
|
|
|
return [
|
|
'start' => $startDateTime,
|
|
'end' => $endDateTime,
|
|
'start_timestamp' => $startTimestamp,
|
|
'end_timestamp' => $endTimestamp,
|
|
];
|
|
}
|
|
/**
|
|
* 财务中心数据统计
|
|
* Class Cache
|
|
* @package app\admin\controller
|
|
*/
|
|
public function finance_chart()
|
|
{
|
|
|
|
if ($this->request->isAjax()) {
|
|
$get = input();
|
|
$year = empty($get['date']) ? date('Y') : $get['date'];
|
|
$admin_id = empty($get['admin_id']) ?null : $get['admin_id'];
|
|
$admin_id2 = empty($get['admin_id2']) ?null : $get['admin_id2'];
|
|
$admin_id4 = empty($get['admin_id4']) ?null : $get['admin_id4'];
|
|
$_year = $year;
|
|
$year = $this->getYearStartAndEnd($year);
|
|
$data = [
|
|
'zdd'=>0,//总订单
|
|
'xse'=>0,//销售额
|
|
'ys'=>0,//已收
|
|
'ys2'=>0,//应收
|
|
'xse_ys'=>[],//销售额-应收-已收
|
|
];
|
|
$zdd_where = [
|
|
['del','=',0],
|
|
['create_time','>=',$year['start_timestamp']],
|
|
['create_time','<=',$year['end_timestamp']],
|
|
];
|
|
$data['zdd'] = Db::name('order')->where($zdd_where)->count();
|
|
$data['xse'] = Db::name('order')->where($zdd_where)->sum('total_amount');
|
|
$data['ys'] = Db::name('order')->where($zdd_where)->where('pay_zd',0)->sum('total_amount');
|
|
$data['ys2'] = Db::name('order')->where($zdd_where)->where('pay_zd',1)->sum('total_amount');
|
|
|
|
//销售额-应收-已收
|
|
$query = "
|
|
SELECT
|
|
m.month,
|
|
COALESCE(SUM(o.total_amount), 0) AS total_sales
|
|
FROM (
|
|
SELECT 1 AS month UNION ALL
|
|
SELECT 2 UNION ALL
|
|
SELECT 3 UNION ALL
|
|
SELECT 4 UNION ALL
|
|
SELECT 5 UNION ALL
|
|
SELECT 6 UNION ALL
|
|
SELECT 7 UNION ALL
|
|
SELECT 8 UNION ALL
|
|
SELECT 9 UNION ALL
|
|
SELECT 10 UNION ALL
|
|
SELECT 11 UNION ALL
|
|
SELECT 12
|
|
) m
|
|
LEFT JOIN ls_order o
|
|
ON MONTH(FROM_UNIXTIME(o.create_time)) = m.month
|
|
AND YEAR(FROM_UNIXTIME(o.create_time)) = :year
|
|
GROUP BY m.month
|
|
ORDER BY m.month;
|
|
";
|
|
$xse_list = Db::query($query,['year'=>$_year]);
|
|
$xse_data = [];
|
|
$xse = [];
|
|
foreach ($xse_list as $v){
|
|
$xse_data[] = $v['total_sales'];
|
|
}
|
|
$xse['xse'] = $xse_data;
|
|
|
|
$query = "
|
|
SELECT
|
|
o.pay_zd,
|
|
m.month,
|
|
|
|
COALESCE(SUM(o.total_amount), 0) AS total_sales
|
|
FROM (
|
|
SELECT 1 AS month UNION ALL
|
|
SELECT 2 UNION ALL
|
|
SELECT 3 UNION ALL
|
|
SELECT 4 UNION ALL
|
|
SELECT 5 UNION ALL
|
|
SELECT 6 UNION ALL
|
|
SELECT 7 UNION ALL
|
|
SELECT 8 UNION ALL
|
|
SELECT 9 UNION ALL
|
|
SELECT 10 UNION ALL
|
|
SELECT 11 UNION ALL
|
|
SELECT 12
|
|
) m
|
|
LEFT JOIN ls_order o
|
|
ON MONTH(FROM_UNIXTIME(o.create_time)) = m.month
|
|
AND YEAR(FROM_UNIXTIME(o.create_time)) = :year
|
|
AND o.pay_zd = 0
|
|
GROUP BY m.month
|
|
ORDER BY m.month;
|
|
";
|
|
$xse_list = Db::query($query,['year'=>$_year]);
|
|
$xse_ys_data = [];
|
|
|
|
foreach ($xse_list as $v){
|
|
$xse_ys_data[] = $v['total_sales'];
|
|
}
|
|
|
|
$xse['ys2'] =$xse_ys_data;
|
|
|
|
$query = "
|
|
SELECT
|
|
o.pay_zd,
|
|
m.month,
|
|
|
|
COALESCE(SUM(o.total_amount), 0) AS total_sales
|
|
FROM (
|
|
SELECT 1 AS month UNION ALL
|
|
SELECT 2 UNION ALL
|
|
SELECT 3 UNION ALL
|
|
SELECT 4 UNION ALL
|
|
SELECT 5 UNION ALL
|
|
SELECT 6 UNION ALL
|
|
SELECT 7 UNION ALL
|
|
SELECT 8 UNION ALL
|
|
SELECT 9 UNION ALL
|
|
SELECT 10 UNION ALL
|
|
SELECT 11 UNION ALL
|
|
SELECT 12
|
|
) m
|
|
LEFT JOIN ls_order o
|
|
ON MONTH(FROM_UNIXTIME(o.create_time)) = m.month
|
|
AND YEAR(FROM_UNIXTIME(o.create_time)) = :year
|
|
AND o.pay_zd = 1
|
|
GROUP BY m.month
|
|
ORDER BY m.month;
|
|
";
|
|
$xse_list = Db::query($query,['year'=>$_year]);
|
|
$xse_ys_data = [];
|
|
|
|
foreach ($xse_list as $v){
|
|
$xse_ys_data[] = $v['total_sales'];
|
|
}
|
|
|
|
$xse['ys'] =$xse_ys_data;
|
|
|
|
$data['xse_ys'] = $xse;
|
|
|
|
//客户渠道 channel_id
|
|
$query = "
|
|
SELECT
|
|
channel_id,
|
|
SUM(total_amount) AS value
|
|
FROM
|
|
ls_order
|
|
WHERE
|
|
create_time >= {$year['start_timestamp']}
|
|
AND
|
|
create_time <= {$year['end_timestamp']}
|
|
GROUP BY
|
|
channel_id
|
|
ORDER BY
|
|
value DESC
|
|
";
|
|
if($admin_id2){
|
|
$query = "
|
|
SELECT
|
|
channel_id,
|
|
SUM(total_amount) AS value
|
|
FROM
|
|
ls_order
|
|
WHERE
|
|
create_time >= {$year['start_timestamp']}
|
|
AND
|
|
create_time <= {$year['end_timestamp']}
|
|
AND admin_id = $admin_id2
|
|
GROUP BY
|
|
channel_id
|
|
ORDER BY
|
|
value DESC
|
|
";
|
|
}
|
|
$qd_list = Db::query($query);
|
|
foreach ($qd_list as $k=>$v){
|
|
$name = Db::name('orderchannel')->where('id',$v['channel_id'])->value('name');
|
|
$qd_list[$k]['name'] = $name?$name:'其它';
|
|
}
|
|
$data['qd'] = $qd_list;
|
|
|
|
//第二个客户渠道
|
|
//客户渠道 channel_id
|
|
$query = "
|
|
SELECT
|
|
brand_id,
|
|
count(*) AS value
|
|
FROM
|
|
ls_user_address
|
|
WHERE
|
|
createtime >= {$year['start_timestamp']}
|
|
AND
|
|
createtime <= {$year['end_timestamp']}
|
|
GROUP BY
|
|
brand_id
|
|
ORDER BY
|
|
value DESC
|
|
";
|
|
if($admin_id4){
|
|
$query = "
|
|
SELECT
|
|
brand_id,
|
|
count(*) AS value
|
|
FROM
|
|
ls_user_address
|
|
WHERE
|
|
createtime >= {$year['start_timestamp']}
|
|
AND
|
|
createtime <= {$year['end_timestamp']}
|
|
AND admin_id = $admin_id4
|
|
GROUP BY
|
|
brand_id
|
|
ORDER BY
|
|
value DESC
|
|
";
|
|
}
|
|
$qd2_list = Db::query($query);
|
|
foreach ($qd2_list as $k=>$v){
|
|
$name = Db::name('staffchannel')->where('id',$v['brand_id'])->value('name');
|
|
$qd2_list[$k]['name'] = $name?$name:'其它';
|
|
}
|
|
$data['qd2'] = $qd2_list;
|
|
|
|
//月目标完成率// 获取当前日期
|
|
$currentDate = new \DateTime();
|
|
// 获取当前月份的第一天
|
|
$firstDayOfMonth = new \DateTime($currentDate->format('Y-m-01 00:00:00'));
|
|
// 获取当前月份的最后一天
|
|
$lastDayOfMonth = new \DateTime($currentDate->format('Y-m-t 23:59:59'));
|
|
// 获取时间戳
|
|
$firstDayTimestamp = $firstDayOfMonth->getTimestamp();
|
|
$lastDayTimestamp = $lastDayOfMonth->getTimestamp();
|
|
|
|
$query = "
|
|
SELECT
|
|
admin_id,
|
|
SUM(total_amount) AS price
|
|
FROM
|
|
ls_order
|
|
WHERE
|
|
create_time >= {$firstDayTimestamp}
|
|
AND
|
|
create_time <= {$lastDayTimestamp}
|
|
AND pay_status = 1
|
|
GROUP BY
|
|
admin_id
|
|
ORDER BY
|
|
price DESC
|
|
";
|
|
$mb_list = Db::query($query);
|
|
foreach ($mb_list as $k=>$v){
|
|
$m = Db::name('admin')->where('id',$v['admin_id'])->find();
|
|
if($m){
|
|
$mb_list[$k]['index'] = $k+1;
|
|
$mb_list[$k]['name'] = $m['name'];
|
|
$mb_list[$k]['mb'] = $m['mb'];
|
|
$m_where = [
|
|
['admin_id','=',$v['admin_id']],
|
|
['create_time','>=',$firstDayTimestamp],
|
|
['create_time','<=',$lastDayTimestamp],
|
|
['pay_status','=',1]
|
|
];
|
|
$mb_list[$k]['num'] = Db::name('order')->where($m_where)->count('*');
|
|
$lv = round($v['price']/$m['mb'],2)*100;
|
|
$mb_list[$k]['lv'] = $lv.'%';
|
|
}else{
|
|
unset($mb_list[$k]);
|
|
}
|
|
|
|
|
|
}
|
|
$data['ymb'] = $mb_list;
|
|
|
|
//年卡销量情况
|
|
$ka = [
|
|
['value'=>'','name'=>'单次服务'],
|
|
['value'=>'','name'=>'年卡销量'],
|
|
['value'=>'','name'=>'次卡销量'],
|
|
['value'=>'','name'=>'其它服务'],
|
|
];
|
|
$ka_where = [
|
|
['del','=',0],
|
|
['create_time','>=',$year['start_timestamp']],
|
|
['create_time','<=',$year['end_timestamp']],
|
|
];
|
|
if($admin_id){
|
|
$ka_where[] = ['admin_id','=',$admin_id];
|
|
}
|
|
$ka[0]['value'] = Db::name('order')->where($ka_where)->where([
|
|
['number','=',1]
|
|
])->sum('total_amount');
|
|
$ka[1]['value'] = Db::name('order')->where($ka_where)->where([
|
|
['number','>',6]
|
|
])->sum('total_amount');
|
|
$ka[2]['value'] = Db::name('order')->where($ka_where)->where([
|
|
['number','>=',2],
|
|
['number','<=',6]
|
|
])->sum('total_amount');
|
|
$ka[3]['value'] = Db::name('order')->where($ka_where)->where([
|
|
['number','=',0]
|
|
])->sum('total_amount');
|
|
|
|
$data['ka'] = $ka;
|
|
$this->_success('获取成功',$data);
|
|
}
|
|
|
|
$admin = Db::name('admin')->where('root',0)->select();
|
|
|
|
$st = empty($input['st']) ? date('Y-m-d') : $input['st'];
|
|
$et = empty($input['et']) ? date('Y-m').'-31' : $input['et'];
|
|
$this->assign('st',$st);
|
|
$this->assign('et',$et);
|
|
$st = strtotime($st);
|
|
$et = strtotime($et);
|
|
|
|
|
|
$this->assign('admin',$admin);
|
|
return $this->fetch();
|
|
}
|
|
|
|
//按时间区间
|
|
public function date_range(){
|
|
//默认本月
|
|
$input = input();
|
|
$st = empty($input['st']) ? date('Y-m-d') : $input['st'];
|
|
$et = empty($input['et']) ? date('Y-m').'-31 23:59:59' : ($input['et'].' 23:59:59');
|
|
|
|
|
|
$admin_id = empty($input['admin_id']) ?null : $input['admin_id'];
|
|
$st = strtotime($st);
|
|
$et = strtotime($et);
|
|
|
|
// echo $st;
|
|
// echo '=';
|
|
// echo $et;
|
|
|
|
$data = [
|
|
'cn'=>[]
|
|
];
|
|
|
|
//产能
|
|
$cn = [];
|
|
//客户渠道 channel_id
|
|
$query = "
|
|
SELECT
|
|
admin_id,
|
|
SUM(number) AS value
|
|
FROM
|
|
ls_order
|
|
WHERE
|
|
create_time >= {$st}
|
|
AND
|
|
create_time <= {$et}
|
|
GROUP BY
|
|
admin_id
|
|
ORDER BY
|
|
value DESC
|
|
";
|
|
$cn_list = Db::query($query);
|
|
|
|
|
|
$cn_where = [
|
|
['create_time','>=',$st],
|
|
['create_time','<=',$et]
|
|
];
|
|
|
|
foreach ($cn_list as $k=>$v){
|
|
$cn_list[$k]['index'] =$k+1;
|
|
$fw = 0;
|
|
$yc = 0;
|
|
$fw_order_sn = Db::name('order')->where($cn_where)->where('admin_id',$v['admin_id'])->column('order_sn');
|
|
if(!empty($fw_order_sn)){
|
|
$fw = Db::name('order_exe')->whereIn('order_sn',$fw_order_sn)->where('staff_status',3)->count();
|
|
$yc = Db::name('order_exe')->whereIn('order_sn',$fw_order_sn)->where('abnormal',1)->count();
|
|
}
|
|
$name = Db::name('admin')->where('id',$v['admin_id'])->value('name');
|
|
$cn_list[$k]['name'] =$name ? $name:'其它';
|
|
// $cn_list[$k]['fw_sn'] = $fw_order_sn;
|
|
$cn_list[$k]['fw'] = $fw;
|
|
$cn_list[$k]['yc'] = $yc;
|
|
$cn_list[$k]['sy'] = $v['value']-$fw;
|
|
$cn_list[$k]['$fw_order_sn'] = $fw_order_sn;
|
|
|
|
|
|
//加时
|
|
$js = 0;
|
|
if(!empty($fw_order_sn)){
|
|
$js_exe_ids = Db::name('order_exe')->whereIn('order_sn',$fw_order_sn)->column('id');
|
|
$js = Db::name('order_timeadd')->whereIn('orderid',$js_exe_ids)->where('status',2)->sum('minute');
|
|
}
|
|
|
|
$cn_list[$k]['js'] = $js;
|
|
|
|
//报销
|
|
$bx = 0;
|
|
if(!empty($fw_order_sn)){
|
|
$yq_exe_ids = Db::name('order_exe')->whereIn('order_sn',$fw_order_sn)->column('id');
|
|
//报销
|
|
if(!empty($yq_exe_ids)){
|
|
$bx = Db::name('finance')->whereIn('order_id',$yq_exe_ids)->where('status',2)->sum('pay');
|
|
}
|
|
}
|
|
$cn_list[$k]['bx'] = $bx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
$data['cn'] = $cn_list;
|
|
|
|
//圆圈
|
|
$yq = [
|
|
'dd'=>0,//订单量
|
|
'fw'=>0,
|
|
'sy'=>0,
|
|
'bx'=>0,
|
|
'js'=>0
|
|
];
|
|
|
|
if($admin_id){
|
|
$cn_where[] = ['admin_id','=',$admin_id];
|
|
}
|
|
|
|
|
|
|
|
$yq['dd'] = Db::name('order')->where($cn_where)->sum('number');
|
|
$fw_order_sn = Db::name('order')->where($cn_where)->column('order_sn');
|
|
$yq['fw'] = Db::name('order_exe')->whereIn('order_sn',$fw_order_sn)->where('staff_status',3)->count();
|
|
$yq['sy'] = $yq['dd'] - $yq['fw'];
|
|
|
|
//加时
|
|
$yq_exe_ids = Db::name('order_exe')->whereIn('order_sn',$fw_order_sn)->column('id');
|
|
$yq['js'] = Db::name('order_timeadd')->whereIn('orderid',$yq_exe_ids)->where('status',2)->sum('minute');
|
|
//报销
|
|
$yq['bx'] = Db::name('finance')->whereIn('order_id',$yq_exe_ids)->where('status',2)->sum('pay');
|
|
|
|
//异常
|
|
$yq['yc'] = Db::name('order_exe')->whereIn('order_sn',$fw_order_sn)->where('abnormal',1)->count();
|
|
|
|
$yq_data = [
|
|
['name'=>'总订单量','value'=> $yq['dd']],
|
|
['name'=>'服务量','value'=> $yq['fw']],
|
|
['name'=>'剩余量','value'=> $yq['sy']],
|
|
['name'=>'报销数量','value'=> $yq['bx']],
|
|
['name'=>'加时数量','value'=> $yq['js']],
|
|
['name'=>'异常','value'=> $yq['yc']],
|
|
];
|
|
$data['yq'] = $yq_data;
|
|
|
|
//卡
|
|
$ka = [
|
|
['value'=>'','name'=>'单次服务'],
|
|
['value'=>'','name'=>'年卡销量'],
|
|
['value'=>'','name'=>'次卡销量'],
|
|
['value'=>'','name'=>'其它服务'],
|
|
];
|
|
$ka_where = [
|
|
['del','=',0],
|
|
['create_time','>=',$st],
|
|
['create_time','<=',$et],
|
|
];
|
|
if($admin_id){
|
|
$ka_where[] = ['admin_id','=',$admin_id];
|
|
}
|
|
$ka[0]['value'] = Db::name('order')->where($ka_where)->where([
|
|
['number','=',1]
|
|
])->sum('total_amount');
|
|
$ka[1]['value'] = Db::name('order')->where($ka_where)->where([
|
|
['number','>',6]
|
|
])->sum('total_amount');
|
|
$ka[2]['value'] = Db::name('order')->where($ka_where)->where([
|
|
['number','>=',2],
|
|
['number','<=',6]
|
|
])->sum('total_amount');
|
|
$ka[3]['value'] = Db::name('order')->where($ka_where)->where([
|
|
['number','=',0]
|
|
])->sum('total_amount');
|
|
|
|
$data['ka'] = $ka;
|
|
|
|
//排行
|
|
$ph = [];
|
|
|
|
if($admin_id){
|
|
$query = "
|
|
SELECT
|
|
goods_id,
|
|
SUM(total_amount) AS value
|
|
FROM
|
|
ls_order
|
|
WHERE
|
|
create_time >= {$st}
|
|
AND
|
|
create_time <= {$et}
|
|
AND admin_id = $admin_id
|
|
GROUP BY
|
|
goods_id
|
|
ORDER BY
|
|
value DESC
|
|
";
|
|
}else{
|
|
$query = "
|
|
SELECT
|
|
goods_id,
|
|
SUM(total_amount) AS value
|
|
FROM
|
|
ls_order
|
|
WHERE
|
|
create_time >= {$st}
|
|
AND
|
|
create_time <= {$et}
|
|
GROUP BY
|
|
goods_id
|
|
ORDER BY
|
|
value DESC
|
|
";
|
|
}
|
|
|
|
$ph_list = Db::query($query);
|
|
|
|
$ph_name = [];
|
|
$ph_value = [];
|
|
foreach ($ph_list as $k=>$v){
|
|
$ph_value[] = $v['value'];
|
|
$ph_name[] = Db::name('goods')->where('id',$v['goods_id'])->value('name');
|
|
}
|
|
|
|
$data['ph'] = [
|
|
'name'=>$ph_name,
|
|
'value'=>$ph_value
|
|
];
|
|
|
|
|
|
$this->_success('获取成功',$data);
|
|
}
|
|
|
|
|
|
public function orderexe_chart(){
|
|
$input = input();
|
|
|
|
$st = empty($input['st']) ? date('Y-m-d') : $input['st'];
|
|
$et = empty($input['et']) ? date('Y-m-d') : $input['et'];
|
|
$this->assign('st',$st);
|
|
$this->assign('et',$et);
|
|
$et = $et.' 23:59:59';
|
|
$st = strtotime($st);
|
|
$et = strtotime($et);
|
|
|
|
if ($this->request->isAjax()) {
|
|
$data = [
|
|
'fwzl'=>0,
|
|
'yfwl'=>0,
|
|
'wpdl'=>0,
|
|
'ycddl'=>0,
|
|
|
|
'fwqd'=>[]
|
|
];
|
|
$fwzl_where = [
|
|
['create_time','>=',$st],
|
|
['create_time','<=',$et],
|
|
['pay_status','=',1]
|
|
];
|
|
|
|
$yfwl_where = [
|
|
['autotime','>=',$st],
|
|
['autotime','<=',$et],
|
|
];
|
|
$data['fwzl'] = Db::name('order')->where($fwzl_where)->sum('number');
|
|
$data['yfwl'] = Db::name('order_exe')->where($yfwl_where)->where('staff_status',3)->count();
|
|
|
|
//剩余量
|
|
$data['sycs'] = $data['fwzl'] - $data['yfwl'];
|
|
|
|
$query = "
|
|
SELECT
|
|
count(*)
|
|
FROM
|
|
ls_order_exe
|
|
WHERE
|
|
(autotime >= {$st}
|
|
AND
|
|
autotime <= {$et})
|
|
AND
|
|
(
|
|
staff_status IS NULL
|
|
OR
|
|
staff_status = 0
|
|
)
|
|
";
|
|
$num = Db::query($query);
|
|
if(!empty($num[0]['count(*)'])){
|
|
$data['wpdl'] = $num[0]['count(*)'];
|
|
}
|
|
|
|
|
|
//服务渠道
|
|
$query = "
|
|
SELECT
|
|
channel_id,
|
|
SUM(number) AS value
|
|
FROM
|
|
ls_order
|
|
WHERE
|
|
create_time >= {$st}
|
|
AND
|
|
create_time <= {$et}
|
|
AND
|
|
pay_status = 1
|
|
GROUP BY
|
|
channel_id
|
|
ORDER BY
|
|
value DESC
|
|
";
|
|
$fwqd_list = Db::query($query);
|
|
foreach ($fwqd_list as $k=>$v){
|
|
$name = Db::name('orderchannel')->where('id',$v['channel_id'])->value('name');
|
|
$fwqd_list[$k]['name'] = $name?$name:'其它 ';
|
|
}
|
|
|
|
$data['fwqd'] = $fwqd_list;
|
|
|
|
//已服务订单
|
|
$query = "
|
|
SELECT
|
|
channel_id,
|
|
count(*) AS value
|
|
FROM
|
|
ls_order_exe
|
|
WHERE
|
|
autotime >= {$st}
|
|
AND
|
|
autotime <= {$et}
|
|
AND
|
|
staff_status = 3
|
|
GROUP BY
|
|
channel_id
|
|
ORDER BY
|
|
value DESC
|
|
";
|
|
$yfw_list = Db::query($query);
|
|
foreach ($yfw_list as $k=>$v){
|
|
$name = Db::name('orderchannel')->where('id',$v['channel_id'])->value('name');
|
|
$yfw_list[$k]['name'] = $name?$name:'其它 ';
|
|
}
|
|
|
|
$data['yfw'] = $yfw_list;
|
|
|
|
|
|
//未消耗订单
|
|
$query = "
|
|
SELECT
|
|
channel_id,
|
|
sum(number) AS value
|
|
FROM
|
|
ls_order
|
|
WHERE
|
|
create_time >= {$st}
|
|
AND
|
|
create_time <= {$et}
|
|
AND
|
|
pay_status = 1
|
|
GROUP BY
|
|
channel_id
|
|
ORDER BY
|
|
value DESC
|
|
";
|
|
$wxh_list = Db::query($query);
|
|
$wxh_where = [
|
|
['create_time','>=',$st],
|
|
['create_time','<=',$et],
|
|
['pay_status','=',1]
|
|
];
|
|
$wxh_order_sn = Db::name('order')->where($wxh_where)->column('order_sn');
|
|
|
|
$wxh_order_sn = implode(',',$wxh_order_sn);
|
|
$query = "
|
|
SELECT
|
|
channel_id,
|
|
count(*) AS value
|
|
FROM
|
|
ls_order_exe
|
|
WHERE order_sn IN($wxh_order_sn)
|
|
AND
|
|
staff_status = 3
|
|
GROUP BY
|
|
channel_id
|
|
ORDER BY
|
|
value DESC
|
|
";
|
|
$wxh_list2 = Db::query($query);
|
|
|
|
|
|
foreach ($wxh_list as $k=>$v){
|
|
//channel_id
|
|
foreach ($wxh_list2 as $k2=>$v2){
|
|
if($v['channel_id'] == $v2['channel_id']){
|
|
$wxh_list[$k]['value'] = $v['value'] - $v2['value'];
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ($wxh_list as $k=>$v){
|
|
$name = Db::name('orderchannel')->where('id',$v['channel_id'])->value('name');
|
|
$wxh_list[$k]['name'] = $name?$name:'其它 ';
|
|
}
|
|
|
|
$data['wxh'] = $wxh_list;
|
|
|
|
|
|
//产能低于多次
|
|
function getnum($num = 1,$st,$et){
|
|
$user_where = [
|
|
['createtime','>=',$st],
|
|
['createtime','<=',$et],
|
|
];
|
|
$mobiles = Db::name('user_address')->where($user_where)->column('telephone');
|
|
|
|
if($num == 1) {
|
|
$num_where = [
|
|
['number','<=',6]
|
|
];
|
|
}else{
|
|
$num_where = [
|
|
['number','>',6]
|
|
];
|
|
}
|
|
|
|
|
|
$cn_list = Db::table('ls_order')
|
|
->field('count(*) as num,order_sn,mobile, sum(number) AS value')
|
|
->whereIn('mobile', $mobiles)
|
|
->where('create_time', '>=', $st)
|
|
->where('create_time', '<=', $et)
|
|
->where($num_where) //
|
|
->where('pay_status', 1)
|
|
->group('order_sn')
|
|
->order('value', 'DESC')
|
|
->select();
|
|
|
|
$cn_order_sn = [];
|
|
|
|
foreach ($cn_list as $v){
|
|
$cn_order_sn[] = $v['order_sn'];
|
|
}
|
|
|
|
if(empty($cn_order_sn)) return 0;
|
|
|
|
|
|
$cn_order_sn = implode(',',$cn_order_sn);
|
|
$query = "
|
|
SELECT
|
|
order_sn,
|
|
count(*) AS value
|
|
FROM
|
|
ls_order_exe
|
|
WHERE order_sn IN ($cn_order_sn)
|
|
AND
|
|
staff_status = 3
|
|
GROUP BY
|
|
order_sn
|
|
ORDER BY
|
|
value DESC
|
|
";
|
|
$cn_list2 = Db::query($query);
|
|
|
|
foreach ($cn_list as $k=>$v){
|
|
//channel_id
|
|
foreach ($cn_list2 as $k2=>$v2){
|
|
if($v['order_sn'] == $v2['order_sn']){
|
|
$cn_list[$k]['value'] = $v['value'] - $v2['value'];
|
|
}
|
|
}
|
|
}
|
|
|
|
//次卡低于2次
|
|
foreach ($cn_list as $k=>$v){
|
|
if($v['value'] >= 2){
|
|
unset($cn_list[$k]);
|
|
}
|
|
}
|
|
//user_address
|
|
$cn2 = 0;
|
|
$cn_list_mobile = [];
|
|
foreach ($cn_list as $k=>$v){
|
|
$cn_list_mobile[] = $v['mobile'];
|
|
}
|
|
return Db::name('user_address')->where($user_where)->whereIn('telephone',$cn_list_mobile)->count();
|
|
}
|
|
|
|
|
|
|
|
|
|
$data['cn'] = [
|
|
['name'=>'年卡低于3次','value'=>getnum(2,$st,$et)],
|
|
['name'=>'次卡低于2次','value'=>getnum(1,$st,$et)]
|
|
];
|
|
|
|
|
|
|
|
$this->_success('获取成功',$data);
|
|
}
|
|
|
|
return $this->fetch();
|
|
}
|
|
|
|
} |