PlanClassController.php 8.0 KB
<?php

namespace api\home\controller;

use cmf\controller\RestBaseController;
use think\Db;

/**
 * @title 会员端-计划表现
 */
class PlanClassController extends RestBaseController
{
    /**
     * @title 首页
     * @description 计划表现首页接口
     * @author Pan Haowen
     * @url /home/plan_class/index
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:time type:int require:0  desc:时间搜索条件
     * @return data:计划表现列表
     * @return plan:计划累计数
     * @return prize:待领取奖品
     */
    public function index()
    {
        $userId = $this->getUserId();
        $param = $this->request->param();
        $where=[];
        if (!empty($param['time'])) {
            $where['c.start_time'] = [['>= time', intval($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('user_class_apply')
            ->alias('uca')
            ->join('class c','uca.class_id=c.id')
            ->join('room r','c.room_id=r.id')
            ->join('product p','c.product_id=p.id')
            ->where($where)
            ->where(['uca.status'=>1,'uca.user_id'=>$userId,'p.delete_time'=>null,'c.delete_time'=>null,'c.status'=>1])
            ->order('uca.create_time','desc')
            ->field('p.name as pname,r.name as rname,c.start_time,c.times,uca.user_id,c.id as cid,uca.id,c.type')
            ->select()
            ->each(function ($item) {
                $item['assess']=0;
                $item['filter']=0;
                $item['train']=0;
                //缺勤
                $item['queke']=Db::name('user_coach_class')
                    ->alias('ucc')
                    ->join('coach_class cc','ucc.coach_class_id=cc.id')
                    ->where(['ucc.user_id'=>$item['user_id'],'cc.class_id'=>$item['cid'],'ucc.status'=>2,'cc.status'=>0])
                    ->count();
                //目标评估得分,功能筛查评分
                $score=Db::name('user_coach_class')
                    ->alias('ucc')
                    ->join('coach_class cc','ucc.coach_class_id=cc.id')
                    ->where(['ucc.user_id'=>$item['user_id'],'cc.class_id'=>$item['cid'],'cc.status'=>0,'ucc.status'=>1])
                    ->select()
                    ->each(function ($item2) {
                        $assess=explode(',',$item2['assess_target_score_id']);
                        $filter=explode(',',$item2['filter_target_score_id']);
                        $item2['assess']=Db::name('assess_target_score')->where('id','in',$assess)->sum('score');
                        $item2['filter']=Db::name('filter_target_score')->where('id','in',$filter)->sum('score');
                        return $item2;
                    });
                foreach ($score as $k=>$V){
                    $item['assess']+=$score[$k]['assess'];
                    $item['filter']+=$score[$k]['filter'];
                }
                //协同训练课程数
                $train=Db::name('user_coach_class')
                    ->alias('ucc')
                    ->join('coach_class cc','ucc.coach_class_id=cc.id')
                    ->where(['ucc.user_id'=>$item['user_id'],'cc.class_id'=>$item['cid'],'cc.status'=>0,'ucc.status'=>1])
                    ->select()
                    ->each(function ($item3) {
                        $item3['train'] =count(explode(',',$item3['train_id']),1);
                        return $item3;
                    });
                foreach ($train as $k=>$V){
                    $item['train']+=$train[$k]['train'];
                }
                return $item;
            });


        $plan=Db::name('user')->where('id',$userId)->find()['plan'];
        $prize=Db::name('prize')->where(['user_id'=>$userId,'status'=>0])->count();

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




    /**
     * @title 目标课程得分
     * @description 目标课程得分接口
     * @author Pan Haowen
     * @url /home/plan_class/assess
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:class_id type:int require:1  desc:课程id
     * @return data:得分列表
     */
    public function assess()
    {
        $this->getUserId();
        $param = $this->request->param();
        $data=Db::name('class')
            ->alias('c')
            ->join('coach_class cc','cc.class_id=c.id')
            ->join('product p','c.product_id=p.id')
            ->join('user_coach_class ucc','ucc.coach_class_id=cc.id')
            ->where(['cc.status'=>0,'ucc.status'=>1,'c.id'=>$param['class_id']])
            ->field('cc.start_time,cc.end_time,cc.id,ucc.assess_target_score_id,p.name')
            ->select()
            ->each(function ($item) {
                $item['start_time']=date('Y/m/d H:i',$item['start_time']);
                $item['end_time']=date('Y/m/d H:i',$item['end_time']);
                $assess=explode(',',$item['assess_target_score_id']);
                $item['score']=Db::name('assess_target_score')->where('id','in',$assess)->sum('score');
                return $item;
            });
        $this->success("获取数据成功", $data);
    }


    /**
     * @title 功能筛查得分
     * @description 功能筛查得分接口
     * @author Pan Haowen
     * @url /home/plan_class/filter
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:class_id type:int require:1  desc:课程id
     * @return data:得分列表
     */
    public function filter()
    {
        $this->getUserId();
        $param = $this->request->param();
        $data=Db::name('class')
            ->alias('c')
            ->join('coach_class cc','cc.class_id=c.id')
            ->join('user_coach_class ucc','ucc.coach_class_id=cc.id')
            ->join('product p','c.product_id=p.id')
            ->where(['cc.status'=>0,'ucc.status'=>1,'c.id'=>$param['class_id']])
            ->field('cc.start_time,cc.end_time,cc.id,ucc.filter_target_score_id,p.name')
            ->select()
            ->each(function ($item) {
                $item['start_time']=date('Y/m/d H:i',$item['start_time']);
                $item['end_time']=date('Y/m/d H:i',$item['end_time']);
                $item['score']=Db::name('filter_target_score')->where('id',$item['filter_target_score_id'])->find()['score'];
//                $filter=explode(',',$item['filter_target_score_id']);
//                $item['score']=Db::name('filter_target_score')->where('id','in',$filter)->sum('score');
                return $item;
            });
        $this->success("获取数据成功", $data);
    }


    /**
     * @title 协同课程数量
     * @description 协同课程数量接口
     * @author Pan Haowen
     * @url /home/plan_class/train
     * @method POST
     * @header name:XX-Token require:1 default: desc:token
     * @param name:class_id type:int require:1  desc:课程id
     * @return data:协同课程数量
     */
    public function train()
    {
        $this->getUserId();
        $param = $this->request->param();
        $data=Db::name('class')
            ->alias('c')
            ->join('coach_class cc','cc.class_id=c.id')
            ->join('user_coach_class ucc','ucc.coach_class_id=cc.id')
            ->join('product p','c.product_id=p.id')
            ->where(['cc.status'=>0,'ucc.status'=>1,'c.id'=>$param['class_id']])
            ->field('cc.start_time,cc.end_time,cc.id,ucc.filter_target_score_id,p.name,cc.train_id')
            ->select()
            ->each(function ($item) {
                $item['start_time']=date('Y/m/d H:i',$item['start_time']);
                $item['end_time']=date('Y/m/d H:i',$item['end_time']);
                $item['score'] =count(explode(',',$item['train_id']),1);
                return $item;
            });
        $this->success("获取数据成功", $data);
    }
}