AdminClassController.php 12.8 KB
<?php
// +----------------------------------------------------------------------
// | bronet [ 以客户为中心 以奋斗者为本 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013-2017 http://www.bronet.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 老猫 <bronet@126.com>
// +----------------------------------------------------------------------
namespace app\portal\controller;

use cmf\controller\AdminBaseController;
use think\Db;

class AdminClassController extends AdminBaseController
{

    public function index(){
        $param=$this->request->param();
        $where=[];
        $where['p.delete_time']=null;
        $where['r.delete_time']=null;
        $where['c.delete_time']=null;
        if(!empty($param['status'])){
            $where['c.status']=$param['status'];
        }
        if(!empty($param['product'])){
            $where['c.product_id']=$param['product'];
        }
        if(!empty($param['room'])){
            $where['c.room_id']=$param['room'];
        }
        $startTime = empty($param['start_time']) ? 0 : strtotime($param['start_time']);
        $endTime   = empty($param['end_time']) ? 0 : strtotime($param['end_time']);
        if (!empty($startTime) && !empty($endTime)) {
            $where['c.create_time'] = [['>= time', $startTime], ['<= time', $endTime]];
        } else {
            if (!empty($startTime)) {
                $where['c.create_time'] = ['>= time', $startTime];
            }
            if (!empty($endTime)) {
                $where['c.create_time'] = ['<= time', $endTime];
            }
        }



        $data=Db::name('class')
            ->alias('c')
            ->join('room r','c.room_id=r.id')
            ->join('product p','c.product_id=p.id')
            ->where($where)
            ->order('c.create_time','desc')
            ->field('c.*,r.name as rname,p.name as pname')
            ->paginate(20);
        $data->appends($param);


        $room=Db::name('room')->where('delete_time',null)->select();
        $product=Db::name('product')->where('delete_time',null)->select();
        $this->assign('room',$room);
        $this->assign('product',$product);



        $this->assign('select_room', isset($param['room']) ? $param['room'] : '');
        $this->assign('status', isset($param['status']) ? $param['status'] : '');
        $this->assign('select_product', isset($param['product']) ? $param['product'] : '');
        $this->assign('start_time', isset($param['start_time']) ? $param['start_time'] : '');
        $this->assign('end_time', isset($param['end_time']) ? $param['end_time'] : '');
        $this->assign('list',$data);
        $this->assign('page',$data->render());
        return $this->fetch("index");
    }

    public function add()
    {
        $room=Db::name('room')->where('delete_time',null)->select();
        $product=Db::name('product')->where('delete_time',null)->select();
        $this->assign('room',$room);
        $this->assign('product',$product);
        return $this->fetch();
    }

    public function addPost(){
        $param=$this->request->param();
        //参数处理
        $param['create_time']=time();
        $param['start_time']=strtotime($param['start_time']);

        if ($param['type']==1){
            $param['min_people']=floor($param['people']);
        }else{
            $param['max_people']=floor($param['people']);
        }
        unset($param['people']);

        $param['times']=floor($param['times']);

        //执行数据插入
        Db::name('class')->insert($param);
        $this->success('添加成功',url('AdminClass/index'));
    }

    public function edit(){
        $param=$this->request->param();
        $data=Db::name('class')
            ->alias('c')
            ->join('room r','c.room_id=r.id')
            ->join('product p','c.product_id=p.id')
            ->where('c.id',$param['id'])
            ->field('c.*,r.name as rname,p.name as pname')
            ->find();
        $this->assign('list',$data);

        $room=Db::name('room')->where('delete_time',null)->select();
        $product=Db::name('product')->where('delete_time',null)->select();
        $this->assign('room',$room);
        $this->assign('product',$product);
        return $this->fetch();
    }
    public function editPost(){
        $param=$this->request->param();
        //是否可以编辑
        $class=Db::name('class')->where('id',$param['id'])->find();
        if (time()>$class['start_time']){
            $this->error('已进行的课程无法编辑');
        }



        //参数处理
        $param['create_time']=time();
        $param['start_time']=strtotime($param['start_time']);

        if ($param['type']==1){
            $param['min_people']=floor($param['people']);
        }else{
            $param['max_people']=floor($param['people']);
        }
        unset($param['people']);

        $param['times']=floor($param['times']);

        //执行数据插入
        Db::name('class')->update($param);
        $this->success('编辑成功',url('AdminClass/index'));
    }

    public function delete(){
        $param=$this->request->param();
        Db::name('class')->where('id',$param['id'])->update(['delete_time'=>time()]);
        $this->success('删除成功');
    }


    //教练申请
    public function coach(){
        $param=$this->request->param();
        $data=Db::name('coach_class_apply')
            ->alias('cc')
            ->join('coach c','cc.coach_id=c.id')
            ->where('cc.class_id',$param['id'])
            ->field('cc.*,c.name as cname,c.mobile')
            ->order('cc.create_time','desc')->select();
        $this->assign('list',$data);
        return $this->fetch();
    }

    public function coachCheck(){
        $param=$this->request->param();
        $this->assign('list',$param);
        return $this->fetch('coach_check');
    }

    public function coachCheckPost(){
        $param=$this->request->param();
        $data=Db::name('coach_class_apply')->where('id',$param['id'])->find();
        $re1=Db::name('coach_class_apply')->where(['class_id'=>$data['class_id'],'status'=>1])->count();
        $re2=Db::name('class')->where('id',$data['class_id'])->find();
        if ($re1!=0 && $re2['type']==2){
            $this->error('私教课程无法通过多个教练');
        }
        Db::name('coach_class_apply')->where('id',$param['id'])->update($param);
        $this->success('审核完成',url('AdminClass/coach',array('id'=>$param['id'])));
    }

    public function coachDelete(){
        $param=$this->request->param();
        Db::name('coach_class_apply')->where('id',$param['id'])->delete();
        $this->success('删除成功');
    }

    //用户申请
    public function user(){
        $param=$this->request->param();
        $data=Db::name('user_class_apply')
            ->alias('uc')
            ->join('user u','uc.user_id=u.id')
            ->where('uc.class_id',$param['id'])
            ->field('uc.*,u.*,uc.id as ucid')
            ->order('uc.create_time','desc')
            ->select();
        $this->assign('list',$data);
        return $this->fetch();
    }

    public function userCheck(){
        $param=$this->request->param();
        $data=Db::name('user_class_apply')->where('id',$param['id'])->find();
        $this->assign('list',$data);
        return $this->fetch('user_check');
    }

    public function userCheckPost(){
        $param=$this->request->param();
        $data=Db::name('user_class_apply')->where('id',$param['id'])->find();
        $re1=Db::name('user_class_apply')->where(['class_id'=>$data['class_id'],'status'=>1])->count();
        $re2=Db::name('class')->where('id',$data['class_id'])->find();
        if ($re1>$re2['max_people'] && $re2['type']==2){
            $this->error('私教课程学员数量上限');
        }
        Db::name('user_class_apply')->where('id',$param['id'])->update($param);
        $this->success('审核完成',url('AdminClass/user',array('id'=>$data['class_id'])));
    }

    public function userDelete(){
        $param=$this->request->param();
        Db::name('user_class_apply')->where('id',$param['id'])->delete();
        $this->success('删除成功');
    }


    //课程安排
    public function course(){
        $param=$this->request->param();
        $data=Db::name('coach_class')
            ->alias('cc')
            ->join('coach c','cc.coach_id=c.id')
            ->where('cc.class_id',$param['id'])
            ->field('cc.*,c.name as cname,c.mobile')
            ->order('cc.create_time','desc')
            ->select()->each(function ($item) {
                if (time()>$item['end_time']) {
                    $item['status2']='已结束';
                }
                else if (time()<$item['create_time']){
                    $item['status2']='即将进行';
                }
                else if (time()>$item['create_time']&&time()<$item['end_time']){
                    $item['status2']='进行中';
                }
                $re=Db::name('user_class_apply')
                    ->alias('uca')
                    ->join('user u','uca.user_id=u.id')
                    ->join('class c','c.id=uca.class_id')
                    ->where(['uca.status'=>1,'uca.class_id'=>$item['class_id'],'c.type'=>2])
                    ->field('u.*')
                    ->find();
                $item['user']=$re['user_nickname'];
                return $item;
            });
        $class=Db::name('class')->where('id',$param['id'])->find();
        $this->assign('class',$class);
        $this->assign('list',$data);
        return $this->fetch();
    }

    public function courseAdd(){
        $param=$this->request->param();
        $coach=Db::name('coach_class_apply')
            ->alias('cc')
            ->join('coach c','cc.coach_id=c.id')
            ->where(['cc.status'=>1,'class_id'=>$param['id']])
            ->select();
        $this->assign('coach',$coach);
        $this->assign('list',$param);
        return $this->fetch('course_add');
    }

    public function courseAddPost(){
        $param=$this->request->param();
        $param['start_time']=strtotime($param['start_time']);
        $param['end_time']=strtotime($param['end_time']);
        $param['create_time']=time();
        //判断时间合理性
        $data=Db::name('class')->where('id',$param['class_id'])->find();
        if (date('Y-m',$data['start_time'])!=date('Y-m',$param['start_time']) || date('Y-m',$data['start_time'])!=date('Y-m',$param['end_time'])){
            $this->error('上课时间月份与开课时间月份不一致');
        }
        Db::name('coach_class')->insert($param);
        $this->success('添加成功',url('AdminClass/course',array('id'=>$param['class_id'])));
    }

    public function courseEdit(){
        $param=$this->request->param();
        $coach=Db::name('coach_class_apply')
            ->alias('cc')
            ->join('coach c','cc.coach_id=c.id')
            ->where('cc.status',1)
            ->select();
        $this->assign('coach',$coach);

        $data=Db::name('coach_class')->where('id',$param['id'])->find();
        $this->assign('list',$data);
        return $this->fetch('course_edit');
    }

    public function courseEditPost()
    {
        $param=$this->request->param();
        $param['start_time']=strtotime($param['start_time']);
        $param['end_time']=strtotime($param['end_time']);
        $param['create_time']=time();
        //判断时间合理性
        $data=Db::name('class')->where('id',$param['class_id'])->find();
        if (date('Y-m',$data['start_time'])!=date('Y-m',$param['start_time']) || date('Y-m',$data['start_time'])!=date('Y-m',$param['end_time'])){
            $this->error('上课时间月份与开课时间月份不一致');
        }
        Db::name('coach_class')->where('id',$param['id'])->update($param);
        $this->success('编辑成功');
    }

    public  function courseDelete()
    {
        $param=$this->request->param();
        Db::name('coach_class')->where('id',$param['id'])->delete();
        $this->success('删除成功');
    }

    public function cancel(){
        $param=$this->request->param();
        //是否可以编辑
        $class=Db::name('class')->where('id',$param['id'])->find();
        if (time()>$class['start_time']){
            $this->error('已进行的课程无法下线');
        }
        Db::name('class')->where('id',$param['id'])->update(['status'=>2]);
        $this->success('操作成功');
    }

    public function up(){
        $param=$this->request->param();
        $class=Db::name('class')->where('id',$param['id'])->find();
        if (time()<$class['start_time']){
            $this->error('已结束的课程无法上线');
        }
        Db::name('class')->where('id',$param['id'])->update(['status'=>1]);
        $this->success('操作成功');
    }

}