CoachController.php 10.9 KB
<?php

namespace api\home\controller;

use api\home\model\ToolsModel;
use api\home\service\ToolsService;
use cmf\controller\RestBaseController;
use think\Db;

/**
 * @title 教练端-个人中心
 */
class CoachController extends RestBaseController
{

    /**
     * @title 教练资格认证
     * @description 教练资格认证接口
     * @author Pan Haowen
     * @url /home/coach/coachApply
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @return avatar:用户头像
     * @return product:计划课程
     */
    public function coachApply(){
        $userId = $this->getUserId();
        $data['avatar']=cmf_get_image_preview_url(Db::name('user')->where('id',$userId)->find()['avatar']);
        $data['product']=Db::name('product')->where('delete_time',null)->select();
        $this->success('获取数据成功',$data);
    }


    /**
     * @title 教练资格认证提交
     * @description 教练资格认证提交接口
     * @author Pan Haowen
     * @url /home/coach/coachApplyPost
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:avatar type:varchar require:1  desc:用户头像
     * @param name:name type:varchar require:1  desc:姓名
     * @param name:product type:varchar require:1  desc:产品id(多选用,隔开)
     * @param name:type type:varchar require:1  desc:授课类型(多选用,隔开)
     * @param name:training type:varchar require:1  desc:培训机构
     * @param name:mobile type:int require:1  desc:授课电话
     * @param name:card type:varchar require:1  desc:身份证号
     * @param name:brief type:varchar require:1  desc:个人简介
     */
    public function coachApplyPost()
    {
        $userId = $this->getUserId();
        $param = $this->request->param();
        $param['user_id']=$userId;
        $param['create_time']=time();
        $param['status']=0;
        $param['product']=substr($param['product'],1,strlen($param['product'])-1);
//        $param['product']=implode(',',$param['product']);
        //判断是否有审核不通过的申请
        $re = Db::name('coach')->where('user_id', $userId)->find();
        if ($re) {
            $data=Db::name('coach')->where('id', $re['id'])->update($param);
        }else{
            $data=Db::name('coach')->insert($param);
        }
        if ($data) {
            $this->success('操作成功');
        }else{
            $this->error('操作失败');
        }
    }


    /**
     * @title 首页
     * @description 教练资格认证提交接口
     * @author Pan Haowen
     * @url /home/coach/index
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     */
    public function index()
    {
        $userId = $this->getUserId();
        $coach=Db::name('coach')->where('user_id',$userId)->find();
        $coach['avatar']=cmf_get_image_preview_url($coach['avatar']);
        $coach['create_time']=date('Y-m-d H:i',$coach['create_time']);
        $this->success('获取信息成功',$coach);
    }


    /**
     * @title 教练主页
     * @description 主页接口
     * @author Pan Haowen
     * @url /home/coach/coachIndex
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:coach_id type:int require:1  desc:教练id
     * @param name:time type:int require:1  desc:时间搜索条件
     */
    public function coachIndex()
    {
        $this->getUserId();
        $param=$this->request->param();
        $coach=Db::name('coach')->where('id',$param['coach_id'])->find();
        $coach['avatar']=cmf_get_image_preview_url($coach['avatar']);
        $coach['create_time']=date('Y年m月d日',$coach['create_time']);
        $coach['type']=explode(',',$coach['type']);
        $coach['product']=Db::name('product')->where(['delete_time'=>null,'id'=>['in',explode(',',$coach['product'])]])->field('name')->select();


        $where=[];
//        if (!empty($param['time'])) {
//            $where['c.start_time'] = [['>= time', $param['time']], ['<= time', strtotime('+1 month', $param['time'])]];
//        } else {
//            $where['c.start_time'] = [['>= time', strtotime('+1 month', strtotime(date('Y-m', time())))], ['<= time', strtotime('+2 month', strtotime(date('Y-m', time())))]];
//        }
        $data=Db::name('coach_class_apply')
            ->alias('cca')
            ->join('class c','cca.class_id=c.id')
            ->join('product p','c.product_id=p.id')
            ->where($where)
            ->where(['cca.status'=>1,'cca.coach_id'=>$coach['id'],'p.delete_time'=>null,'c.delete_time'=>null,'c.status'=>1])
            ->field('p.name as pname,c.type,cca.coach_id,c.id as cid')
            ->select()
            ->each(function ($item) {
                $item['times']=Db::name('coach_class')->where(['status'=>0,'coach_id'=>$item['coach_id'],'class_id'=>$item['cid']])->count();
                $item['star']=Db::name('user_coach_class')
                    ->alias('ucc')
                    ->join('coach_class cc','ucc.coach_class_id=cc.id')
                    ->where(['cc.status'=>0,'cc.coach_id'=>$item['coach_id'],'cc.class_id'=>$item['cid'],'ucc.status'=>1])
                    ->avg('star');
                return $item;
            });

        $new_arr=array();
        foreach($data as $k=>$v ){
            $new_arr[$v['pname']][] = $v;
        }

        $this->success("获取数据成功", ['data'=>$new_arr,'coach'=>$coach]);
    }


    /**
     * @title 场所详情
     * @description 场所详情接口
     * @author Pan Haowen
     * @url /home/coach/room
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:room_id type:int require:1  desc:场所id
     * @param name:time type:int require:0  desc:筛选课程时间戳
     * @return room:场所详情
     * @return class:该场所课程
     */
    public function room()
    {
        $userId = $this->getUserId();
        $param = $this->request->param();

        $data['room'] = Db::name('room')->where('id', $param['room_id'])->find();
        //图片处理
        $data['room']['thumbnail'] = cmf_get_image_preview_url($data['room']['thumbnail']);

        //距离计算
        $distance=new ToolsService();
        $user = Db::name('user')->where('id', $userId)->find();
        $dis=$distance->distance($user['jing'],$user['wei'],$data['room']['lng'],$data['room']['lat']);
        if($dis<1000){
            $dis=floor($dis).'m';
        }else{
            $dis=round(($dis/1000),1).'km';
        }
        $data['room']['distance'] = $dis;

        //根据时间计算课程
        $where['c.delete_time'] = null;
        $where['c.status']=3;
        $where['p.delete_time'] = null;
        $where['c.room_id'] = $param['room_id'];
        if (!empty($param['time'])) {
            $time1=$param['time'];
            $time2=strtotime('+1 month',$param['time']);
            $where['c.start_time'] = [['>= time',intval($time1) ], ['<= time',$time2]];
        }
        else {
            $where['c.start_time'] = [['>= time', strtotime('+1 month', strtotime(date('Y-m', time())))], ['<= time', strtotime('+2 month', strtotime(date('Y-m', time())))]];
        }
        $data['class'] = Db::name('class')
            ->alias('c')
            ->join('product p', 'c.product_id=p.id')
            ->where($where)
//            ->where(['c.start_time'=>[['>= time',intval($param['time'])], ['<= time',$time2]]])
            ->group('c.product_id')
            ->field('p.*,c.room_id,count(*) as count')
            ->select()
            ->each(function ($item) {
                $item['thumbnail'] = cmf_get_image_preview_url($item['thumbnail']);
                return $item;
            });

        $this->success("获取数据成功", $data);
    }


    /**
     * @title 计划产品
     * @description 计划产品
     * @author Pan Haowen
     * @url /home/coach/Class
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:product_id type:int require:1  desc:产品id
     * @param name:room_id type:int require:1  desc:场所id
     * @param name:time type:int require:0  desc:筛选课程时间戳
     * @return room:场所信息
     * @return product:产品信息
     * @return tuan:团课教程
     * @return si:私课教程
     */
    public function Class()
    {
        $userId = $this->getUserId();
        $param = $this->request->param();
        //场所信息
        $data['room'] = Db::name('room')->where('id', $param['room_id'])->field('id,name,lat,lng,location')->find();
        $distance=new ToolsService();
        $user = Db::name('user')->where('id', $userId)->find();
        $dis=$distance->distance($user['jing'],$user['wei'],$data['room']['lng'],$data['room']['lat']);
        if($dis<1000){
            $dis=floor($dis).'m';
        }else{
            $dis=round(($dis/1000),1).'km';
        }
        $data['room']['distance'] = $dis;

        //产品信息
        $data['product'] = Db::name('product')->where('id', $param['product_id'])->find();
        $data['product']['thumbnail'] = cmf_get_image_preview_url($data['product']['thumbnail']);


        //根据时间计算课程
        $where['delete_time'] = null;
        $where['room_id'] = $param['room_id'];
        $where['product_id'] = $param['product_id'];
        if (!empty($param['time'])) {
            $where['start_time'] = [['>= time', intval($param['time'])], ['<= time', strtotime('+1 month', $param['time'])]];
        } else {
            $where['start_time'] = [['>= time', strtotime('+1 month', strtotime(date('Y-m', time())))], ['<= time', strtotime('+2 month', strtotime(date('Y-m', time())))]];
        }
        //团教课程
        $data['tuan'] = Db::name('class')
            ->where($where)
            ->where(['type'=>1,'status'=>3])
            ->limit(2)
            ->select()
            ->each(function ($item) {
                $item['avatar'] = Db::name('user_class_apply')->where(['class_id' => $item['id'], 'status' => 1])->limit(4)->select()->each(function ($item2) {
                    $user = Db::name('user')->where('id', $item2['user_id'])->find();
                    $item2['avatar'] = cmf_get_image_preview_url($user['avatar']);
                    $item2['user_name'] = $user['user_nickname'];
                    return $item2;
                });
                return $item;
            });

        //私教课程
        $data['si'] = Db::name('class')
            ->where($where)
            ->where(['type'=>2,'status'=>3])
            ->limit(2)
            ->select()
            ->each(function ($item) {
                $coach_id = Db::name('coach_class_apply')->where(['class_id' => $item['id'], 'status' => 1])->find()['coach_id'];
                $coach = Db::name('coach')->where('id', $coach_id)->find();
                $item['avatar'] = cmf_get_image_preview_url($coach['avatar']);
                $item['coach_name'] = $coach['name'];
                return $item;
            });
        $this->success("获取数据成功", $data);
    }
}