331 lines
14 KiB
PHP
331 lines
14 KiB
PHP
|
<?php
|
||
|
|
||
|
|
||
|
namespace app\admin\controller\xilufitness\analyse;
|
||
|
|
||
|
|
||
|
use app\admin\controller\xilufitness\traits\Fitness;
|
||
|
use app\admin\model\Admin;
|
||
|
use app\admin\model\User;
|
||
|
use app\common\controller\Backend;
|
||
|
use app\common\model\Attachment;
|
||
|
use fast\Date;
|
||
|
use think\Db;
|
||
|
|
||
|
class Index extends Backend
|
||
|
{
|
||
|
use Fitness;
|
||
|
|
||
|
/**
|
||
|
* 数据统计查看
|
||
|
*/
|
||
|
public function index()
|
||
|
{
|
||
|
$dayDate = $this->getDayDate();
|
||
|
$courseAnalyse['course_1'] = Db::name('xilufitness_work_course')->where($this->getWhereParams(1,1))->count('*'); //待开团课
|
||
|
$courseAnalyse['course_2'] = Db::name('xilufitness_work_course')->where($this->getWhereParams(2,2))->count('*'); //待开私教课
|
||
|
$courseAnalyse['course_3'] = Db::name('xilufitness_work_camp')->where($this->getWhereParams(3,3))->count('*'); //待开活动
|
||
|
$courseAnalyse['coach_count'] = Db::name('xilufitness_coach')->where($this->getWhereParams(4,0))->count('*'); //教练
|
||
|
$dayAnalyse['recharge_amount'] = Db::name('xilufitness_order')
|
||
|
->where($this->getWhereParams(5,0,$dayDate['start_at'],$dayDate['end_at']))
|
||
|
->sum('pay_amount'); //今日充值金额
|
||
|
$dayAnalyse['record_count'] = Db::name('xilufitness_order_verification_records')
|
||
|
->where($this->getWhereParams(6,0,$dayDate['start_at'],$dayDate['end_at']))
|
||
|
->count('*'); //今日核销课程数
|
||
|
$dayAnalyse['sign_count'] = Db::name('xilufitness_order')
|
||
|
->where($this->getWhereParams(7,0,$dayDate['start_at'],$dayDate['end_at']))
|
||
|
->count('*');//今日报名数
|
||
|
$dayAnalyse['user_count'] = Db::name('xilufitness_user')
|
||
|
->where($this->getWhereParams(8,0,$dayDate['start_at'],$dayDate['end_at']))
|
||
|
->count('*');//今日会员注册数
|
||
|
|
||
|
$analyseData['shop_count'] = Db::name('xilufitness_shop')
|
||
|
->where($this->getWhereParams(9,0))
|
||
|
->count('*'); //门店数量
|
||
|
$analyseData['user_count'] = Db::name('xilufitness_user')
|
||
|
->where($this->getWhereParams(10,0))
|
||
|
->count('*'); //会员总数量
|
||
|
$analyseData['recharge_total_amount'] = Db::name('xilufitness_order')
|
||
|
->where($this->getWhereParams(11,0))
|
||
|
->sum('pay_amount'); //充值总金额
|
||
|
$analyseData['sign_total_amount'] = Db::name('xilufitness_order')
|
||
|
->where($this->getWhereParams(12,0))
|
||
|
->sum('pay_amount'); //报名总金额
|
||
|
$this->assign('courseAnalyse',$courseAnalyse);
|
||
|
$this->assign('dayAnalyse',$dayAnalyse);
|
||
|
$this->assign('analyseData',$analyseData);
|
||
|
$login_account_type = $this->getFitnessAccountRole(); //登录账号类型
|
||
|
$this->assign('is_fitness_shop',$login_account_type == 2 ? 1 : 0);
|
||
|
return $this->view->fetch();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 订单数据展示
|
||
|
*/
|
||
|
public function get_data(){
|
||
|
$c_where = $this->getCommonWhere();
|
||
|
$datetime = $this->request->param('datetime','');
|
||
|
$range_data = $this->dateRange($datetime);
|
||
|
$x_data = [];
|
||
|
$y_data = [];
|
||
|
$column = [];
|
||
|
//订单数量统计
|
||
|
$column[0] = '团课';
|
||
|
$column[1] = '私教课';
|
||
|
$column[2] = '活动';
|
||
|
|
||
|
foreach ($range_data['list'] as $key => $val){
|
||
|
$start_at = $range_data['range_type'] == 1 ? $key.":00:00" : $key." 00:00:00";
|
||
|
$end_at = $range_data['range_type'] == 1 ? $key.":59:50" : $key." 23:59:59";
|
||
|
$x_data[] = $val;
|
||
|
$y_data['data_0'][] = Db::name('xilufitness_order')
|
||
|
->where(function ($query) use($start_at,$end_at,$c_where){
|
||
|
$query->where(['order_type' => 1, 'pay_status' => 1, 'pay_time' => [['egt',strtotime($start_at)],['elt',strtotime($end_at)]] ]);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id',$c_where['brand_id']);
|
||
|
}
|
||
|
if(!empty($c_where['shop_id'])){
|
||
|
$query->where('shop_id',$c_where['shop_id']);
|
||
|
}
|
||
|
})
|
||
|
->count('*');
|
||
|
$y_data['data_1'][] = Db::name('xilufitness_order')
|
||
|
->where(function ($query) use($start_at,$end_at,$c_where){
|
||
|
$query->where(['order_type' => 2, 'pay_status' => 1, 'pay_time' => [['egt',strtotime($start_at)],['elt',strtotime($end_at)]] ]);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id',$c_where['brand_id']);
|
||
|
}
|
||
|
if(!empty($c_where['shop_id'])){
|
||
|
$query->where('shop_id',$c_where['shop_id']);
|
||
|
}
|
||
|
})
|
||
|
->count('*');
|
||
|
$y_data['data_3'][] = Db::name('xilufitness_order')
|
||
|
->where(function ($query) use($start_at,$end_at,$c_where){
|
||
|
$query->where(['order_type' => 3, 'pay_status' => 1, 'pay_time' => [['egt',strtotime($start_at)],['elt',strtotime($end_at)]] ]);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id',$c_where['brand_id']);
|
||
|
}
|
||
|
if(!empty($c_where['shop_id'])){
|
||
|
$query->where('shop_id',$c_where['shop_id']);
|
||
|
}
|
||
|
})
|
||
|
->count('*');
|
||
|
unset($start_at);
|
||
|
unset($end_at);
|
||
|
}
|
||
|
$result = ['series' => $y_data, 'fieldtextdata' => $column,'column' =>$x_data];
|
||
|
return json(['code' => 1, 'data' => $result]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 根据日期范围返回x轴日期数据列表
|
||
|
*/
|
||
|
private function dateRange($datetime=''){
|
||
|
$list = [];
|
||
|
if(empty($datetime)){
|
||
|
//默认近 8天的数据
|
||
|
$current_time = strtotime(date('Y-m-d',strtotime("-7 day",time())));
|
||
|
$end_time = strtotime(date('Y-m-d',time()));
|
||
|
$i = 0;
|
||
|
do{
|
||
|
$next_time = date('Y-m-d',strtotime("+$i day",$current_time));
|
||
|
$list[$next_time] = $next_time;
|
||
|
} while($end_time > strtotime($next_time) && ++$i );
|
||
|
$range_type = 2;
|
||
|
} else {
|
||
|
$date_range = explode(" - ",$datetime);
|
||
|
$total_time = strtotime($date_range[1]) - strtotime($date_range[0]);
|
||
|
if($total_time <= 86400){
|
||
|
//一天内的
|
||
|
$day_time = date('Y-m-d',strtotime($date_range[0]));
|
||
|
$day_times = ['00','01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23'];
|
||
|
foreach ($day_times as $key => $val){
|
||
|
$list[$day_time.' '.$val] = $day_time.' '.$val.'点';
|
||
|
}
|
||
|
$range_type = 1;
|
||
|
} else {
|
||
|
$current_time = strtotime($date_range[0]);
|
||
|
$end_time = strtotime(date('Y-m-d',strtotime($date_range[1])));
|
||
|
$i = 0;
|
||
|
do{
|
||
|
$next_time = date('Y-m-d',strtotime("+$i day",$current_time));
|
||
|
$list[$next_time] = $next_time;
|
||
|
} while($end_time > strtotime($next_time) && ++$i );
|
||
|
$range_type = 2;
|
||
|
}
|
||
|
}
|
||
|
return ['list' => $list, 'range_type' => $range_type];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取搜索条件
|
||
|
*/
|
||
|
private function getWhereParams(int $key,int $course_type=0,$start_at='',$end_at=''){
|
||
|
$c_where = $this->getCommonWhere();
|
||
|
switch ($key){
|
||
|
case $key == 1:
|
||
|
case $key == 2:
|
||
|
$where = function ($query) use($c_where,$course_type){
|
||
|
$query->where(['status' => 'normal', 'course_type' => $course_type, 'start_at' => ['gt',time()] ]);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id','eq',$c_where['brand_id']);
|
||
|
}
|
||
|
if(!empty($c_where['shop_id'])){
|
||
|
$query->where('shop_id','eq',$c_where['shop_id']);
|
||
|
}
|
||
|
};
|
||
|
break;
|
||
|
case $key == 3:
|
||
|
$where = function ($query) use($c_where,$course_type){
|
||
|
$query->where(['status' => 'normal','start_at' => ['gt',time()] ]);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id','eq',$c_where['brand_id']);
|
||
|
}
|
||
|
if(!empty($c_where['shop_id'])){
|
||
|
$query->where('shop_id','eq',$c_where['shop_id']);
|
||
|
}
|
||
|
};
|
||
|
break;
|
||
|
case $key == 4:
|
||
|
$where = function ($query) use($c_where){
|
||
|
$query->where(['status' => 'normal']);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id','eq',$c_where['brand_id']);
|
||
|
}
|
||
|
if(!empty($c_where['shop_id'])){
|
||
|
$query->whereRaw("FIND_IN_SET({$c_where['shop_id']},`shop_ids`)");
|
||
|
}
|
||
|
};
|
||
|
break;
|
||
|
case $key == 5:
|
||
|
$where = function ($query) use($c_where,$start_at,$end_at){
|
||
|
$query->where(['order_type' => 0, 'pay_status' => 1, 'pay_time' => [['egt',$start_at],['elt',$end_at]]]);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id','eq',$c_where['brand_id']);
|
||
|
}
|
||
|
if(!empty($c_where['shop_id'])){
|
||
|
$query->where('shop_id','eq',$c_where['shop_id']);
|
||
|
}
|
||
|
};
|
||
|
break;
|
||
|
case $key == 6:
|
||
|
$where = function ($query) use($c_where,$start_at,$end_at){
|
||
|
$query->where(['check_time' => [['egt',$start_at],['elt',$end_at]]]);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id','eq',$c_where['brand_id']);
|
||
|
}
|
||
|
if(!empty($c_where['shop_id'])){
|
||
|
$query->where('shop_id','eq',$c_where['shop_id']);
|
||
|
}
|
||
|
};
|
||
|
break;
|
||
|
case $key == 7:
|
||
|
$where = function ($query) use($c_where,$start_at,$end_at){
|
||
|
$query->where(['pay_time' => [['egt',$start_at],['elt',$end_at]], 'order_type' => [['neq',0],['neq',4]]]);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id','eq',$c_where['brand_id']);
|
||
|
}
|
||
|
if(!empty($c_where['shop_id'])){
|
||
|
$query->where('shop_id','eq',$c_where['shop_id']);
|
||
|
}
|
||
|
};
|
||
|
break;
|
||
|
case $key == 8:
|
||
|
$where = function ($query) use($c_where,$start_at,$end_at){
|
||
|
$query->where(['createtime' => [['egt',$start_at],['elt',$end_at]]]);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id','eq',$c_where['brand_id']);
|
||
|
}
|
||
|
};
|
||
|
break;
|
||
|
case $key == 9:
|
||
|
$where = function ($query) use($c_where){
|
||
|
$query->where(['status' => 'normal']);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id','eq',$c_where['brand_id']);
|
||
|
}
|
||
|
if(!empty($c_where['shop_id'])){
|
||
|
$query->where('id','eq',$c_where['shop_id']);
|
||
|
}
|
||
|
};
|
||
|
break;
|
||
|
case $key == 10:
|
||
|
$where = function ($query) use($c_where){
|
||
|
$query->where(['status' => 'normal']);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id','eq',$c_where['brand_id']);
|
||
|
}
|
||
|
};
|
||
|
break;
|
||
|
case $key == 11:
|
||
|
$where = function ($query) use($c_where){
|
||
|
$query->where(['pay_status' => 1, 'order_type' => 0]);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id','eq',$c_where['brand_id']);
|
||
|
}
|
||
|
};
|
||
|
break;
|
||
|
case $key == 12:
|
||
|
$where = function ($query) use($c_where){
|
||
|
$query->where(['pay_status' => 1, 'order_type' => [['neq',0],['neq',4]], 'order_status' => ['neq',4]]);
|
||
|
if(!empty($c_where['brand_id'])){
|
||
|
$query->where('brand_id','eq',$c_where['brand_id']);
|
||
|
}
|
||
|
if(!empty($c_where['shop_id'])){
|
||
|
$query->where('shop_id','eq',$c_where['shop_id']);
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
return $where;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取公共搜索条件信息
|
||
|
*/
|
||
|
private function getCommonWhere(){
|
||
|
$fitness_brand_id = $this->getFitnessBrandId();
|
||
|
$fitness_shop_id = $this->getFitnessShopId();
|
||
|
return ['brand_id' => $fitness_brand_id, 'shop_id' => $fitness_shop_id];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取今日时间
|
||
|
*/
|
||
|
private function getDayDate(){
|
||
|
$start_at = mktime(0,0,0,date('m'),date('d'),date('Y'));
|
||
|
$end_at = mktime(23,59,59,date('m'),date('d'),date('Y'));
|
||
|
return ['start_at' => $start_at, 'end_at' => $end_at];
|
||
|
}
|
||
|
//添加
|
||
|
public function add(){
|
||
|
return;
|
||
|
}
|
||
|
//编辑
|
||
|
public function edit($ids = null) {
|
||
|
return;
|
||
|
}
|
||
|
//删除
|
||
|
public function del($ids = null) {
|
||
|
return;
|
||
|
}
|
||
|
//回收站列表
|
||
|
public function recyclebin() {
|
||
|
return;
|
||
|
}
|
||
|
//回收站(真实删除或清空)
|
||
|
public function destroy($ids = null) {
|
||
|
return;
|
||
|
}
|
||
|
//回收站还原
|
||
|
public function restore($ids = null) {
|
||
|
return;
|
||
|
}
|
||
|
//批量操作(修改状态)
|
||
|
public function multi($ids = null) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
}
|