DiverseYouthNightSchool/application/admin/controller/xilufitness/analyse/Index.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;
}
}