361 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			361 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace addons\xilufitness\services;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use addons\xilufitness\model\WorkCamp;
							 | 
						||
| 
								 | 
							
								use addons\xilufitness\model\WorkCourse;
							 | 
						||
| 
								 | 
							
								use addons\xilufitness\services\user\UserService;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CourseService extends BaseService
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取课程分类
							 | 
						||
| 
								 | 
							
								     * @param int $pid  父级id
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getCateByPid(int $pid){
							 | 
						||
| 
								 | 
							
								        $model = new \addons\xilufitness\model\CourseCate;
							 | 
						||
| 
								 | 
							
								        $list = $model
							 | 
						||
| 
								 | 
							
								            ->normal()
							 | 
						||
| 
								 | 
							
								            ->where(['pid' => $pid, 'brand_id' => $this->brand_id])
							 | 
						||
| 
								 | 
							
								            ->field(['id','cate_name'])
							 | 
						||
| 
								 | 
							
								            ->select();
							 | 
						||
| 
								 | 
							
								        return ['list' => $list];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 课程列表
							 | 
						||
| 
								 | 
							
								     * @param string $lat  纬度
							 | 
						||
| 
								 | 
							
								     * @param string $lng  经度
							 | 
						||
| 
								 | 
							
								     * @param int $course_type  课程类型 1 团课 2 私教 3 活动
							 | 
						||
| 
								 | 
							
								     * @param int $city_id  城市id
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getCourseList($lat,$lng,$course_type,$province_id,$city_id,$area_id,$cate_pid,$cate_id,$choose_date,$start_at,$end_at){
							 | 
						||
| 
								 | 
							
								        $shopModel = new \addons\xilufitness\model\Shop;
							 | 
						||
| 
								 | 
							
								        $workCourseModel = new WorkCourse();
							 | 
						||
| 
								 | 
							
								        $workCampModel = new WorkCamp();
							 | 
						||
| 
								 | 
							
								        $where['brand_id'] = $this->brand_id;
							 | 
						||
| 
								 | 
							
								        if(!empty($province_id)){
							 | 
						||
| 
								 | 
							
								            $where['province_id'] = $province_id;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if(!empty($city_id)){
							 | 
						||
| 
								 | 
							
								            $where['city_id'] = $city_id;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if(!empty($area_id)){
							 | 
						||
| 
								 | 
							
								            $where['area_id'] = $area_id;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $rows = $shopModel
							 | 
						||
| 
								 | 
							
								            ->field(['id','shop_name','lat','lng','city_id','brand_id',
							 | 
						||
| 
								 | 
							
								                "(6378.138 * 2 * asin(sqrt(pow(sin((lat * pi() / 180 - ".$lat." * pi() / 180) / 2),2) + cos(lat * pi() / 180) * cos(".$lat." * pi() / 180) * pow(sin((lng * pi() / 180 - ".$lng." * pi() / 180) / 2),2))) * 1000) as distance"])
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            ->order("distance asc")
							 | 
						||
| 
								 | 
							
								            ->paginate();
							 | 
						||
| 
								 | 
							
								        $list = $rows->items();
							 | 
						||
| 
								 | 
							
								        foreach ($list as $item){
							 | 
						||
| 
								 | 
							
								            $map['shop_id'] =  xilufitness_get_id_value($item['id']);
							 | 
						||
| 
								 | 
							
								            if($course_type != 3){
							 | 
						||
| 
								 | 
							
								                $map['work_course.status'] = 'normal';
							 | 
						||
| 
								 | 
							
								                $map['work_course.course_type'] =  $course_type;
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                $map['work_camp.status'] = 'normal';
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if(!empty($choose_date) && empty($start_at) && empty($end_at)){
							 | 
						||
| 
								 | 
							
								                if($course_type != 3){
							 | 
						||
| 
								 | 
							
								                    $map['class_time'] = strtotime($choose_date);
							 | 
						||
| 
								 | 
							
								                } else {
							 | 
						||
| 
								 | 
							
								                    $map['work_camp.start_at'] = ['egt',strtotime($choose_date)];
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            } else if(!empty($start_at) && !empty($end_at)){
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                $choose_date = !empty($choose_date) ? $choose_date : date('Y-m-d',time());
							 | 
						||
| 
								 | 
							
								                if($course_type != 3){
							 | 
						||
| 
								 | 
							
								                    $map['start_at'] = ['elt',strtotime($choose_date.' '.$start_at)];
							 | 
						||
| 
								 | 
							
								                    $map['end_at'] = ['egt',strtotime($choose_date.' '.$end_at)];
							 | 
						||
| 
								 | 
							
								                } else {
							 | 
						||
| 
								 | 
							
								                    $map['work_camp.start_at'] = ['egt',strtotime($choose_date.' '.$start_at)];
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                $map['end_at'] = ['egt',time()];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $item->append(['list']);
							 | 
						||
| 
								 | 
							
								            if($course_type == 1){
							 | 
						||
| 
								 | 
							
								                $lists = $workCourseModel
							 | 
						||
| 
								 | 
							
								                    ->field(['id','course_id','class_time','start_at','end_at','course_price','market_price','sign_count','wait_count','course_type'])
							 | 
						||
| 
								 | 
							
								                    ->with(['course' => function($query) use($cate_pid,$cate_id) {
							 | 
						||
| 
								 | 
							
								                        $c_where = '';
							 | 
						||
| 
								 | 
							
								                        if(!empty($cate_pid)){
							 | 
						||
| 
								 | 
							
								                            $c_where .= 'course.course_cate_pid = '.$cate_pid;
							 | 
						||
| 
								 | 
							
								                        }
							 | 
						||
| 
								 | 
							
								                        if(!empty($cate_id)){
							 | 
						||
| 
								 | 
							
								                            $c_where .= ' and course.course_cate_id = '.$cate_id;
							 | 
						||
| 
								 | 
							
								                        }
							 | 
						||
| 
								 | 
							
								                        if(!empty($c_where)){
							 | 
						||
| 
								 | 
							
								                            return $query->where($c_where)->withField(['id','title','thumb_image','lable_ids']);
							 | 
						||
| 
								 | 
							
								                        }
							 | 
						||
| 
								 | 
							
								                        return $query->withField(['id','title','thumb_image','lable_ids']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								                    }])
							 | 
						||
| 
								 | 
							
								                    ->where($map)
							 | 
						||
| 
								 | 
							
								                    ->select();
							 | 
						||
| 
								 | 
							
								            } elseif ($course_type == 2){
							 | 
						||
| 
								 | 
							
								                $lists = $workCourseModel
							 | 
						||
| 
								 | 
							
								                    ->field(['id','course_id','coach_id','class_time','start_at','end_at','course_price','market_price','sign_count','wait_count','course_type'])
							 | 
						||
| 
								 | 
							
								                    ->with(['coach' => function($query){
							 | 
						||
| 
								 | 
							
								                        return $query->withField(['id','coach_avatar']);
							 | 
						||
| 
								 | 
							
								                    },'course' => function($query) use($cate_pid,$cate_id) {
							 | 
						||
| 
								 | 
							
								                        $c_where = '';
							 | 
						||
| 
								 | 
							
								                        if(!empty($cate_pid)){
							 | 
						||
| 
								 | 
							
								                            $c_where .= 'course.course_cate_pid = '.$cate_pid;
							 | 
						||
| 
								 | 
							
								                        }
							 | 
						||
| 
								 | 
							
								                        if(!empty($cate_id)){
							 | 
						||
| 
								 | 
							
								                            $c_where .= ' and course.course_cate_id = '.$cate_id;
							 | 
						||
| 
								 | 
							
								                        }
							 | 
						||
| 
								 | 
							
								                        if(!empty($c_where)){
							 | 
						||
| 
								 | 
							
								                            return $query->where($c_where)->withField(['id','title','thumb_image','lable_ids']);
							 | 
						||
| 
								 | 
							
								                        }
							 | 
						||
| 
								 | 
							
								                        return $query->withField(['id','title','thumb_image','lable_ids']);
							 | 
						||
| 
								 | 
							
								                    }])
							 | 
						||
| 
								 | 
							
								                    ->where($map)
							 | 
						||
| 
								 | 
							
								                    ->select();
							 | 
						||
| 
								 | 
							
								            } elseif($course_type == 3) {
							 | 
						||
| 
								 | 
							
								                $lists = $workCampModel
							 | 
						||
| 
								 | 
							
								                    ->field(['id','shop_id','camp_id','start_at','end_at','camp_price','market_price','class_count','class_duration','camp_count','total_count','status'])
							 | 
						||
| 
								 | 
							
								                    ->with(['camp'  => function($query){
							 | 
						||
| 
								 | 
							
								                        return $query->withField(['id','title','thumb_image','lable_ids']);
							 | 
						||
| 
								 | 
							
								                    }])
							 | 
						||
| 
								 | 
							
								                    ->where($map)
							 | 
						||
| 
								 | 
							
								                    ->select();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $item->list = $lists;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return ['list' => $list, 'total_count' => $rows->total() ];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取收藏的教练
							 | 
						||
| 
								 | 
							
								     * @param string $lat 纬度
							 | 
						||
| 
								 | 
							
								     * @param string $lng 经度
							 | 
						||
| 
								 | 
							
								     * @param int $province_id 省分id
							 | 
						||
| 
								 | 
							
								     * @param int $city_id 市id
							 | 
						||
| 
								 | 
							
								     * @param int $area_id 区域id
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getCollectCoach($lat,$lng,$province_id,$city_id,$area_id){
							 | 
						||
| 
								 | 
							
								        $collectModel = new \addons\xilufitness\model\UserCollect;
							 | 
						||
| 
								 | 
							
								        $coachModel = new \addons\xilufitness\model\Coach;
							 | 
						||
| 
								 | 
							
								        $where['shop.brand_id'] = $this->brand_id;
							 | 
						||
| 
								 | 
							
								        $where['user_id'] = $this->getUserId();
							 | 
						||
| 
								 | 
							
								        $where['is_type'] = 2;
							 | 
						||
| 
								 | 
							
								        if(!empty($province_id)){
							 | 
						||
| 
								 | 
							
								            $where['shop.province_id'] = $province_id;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if(!empty($city_id)){
							 | 
						||
| 
								 | 
							
								            $where['shop.city_id'] = $city_id;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if(!empty($area_id)){
							 | 
						||
| 
								 | 
							
								            $where['shop.area_id'] = $area_id;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $rows = $collectModel
							 | 
						||
| 
								 | 
							
								            ->join("xilufitness_shop shop","shop_id = shop.id")
							 | 
						||
| 
								 | 
							
								            ->field(['shop.id','shop.lat','shop.lng','shop.shop_name','shop.address','data_id as coach_id',
							 | 
						||
| 
								 | 
							
								                "(6378.138 * 2 * asin(sqrt(pow(sin((shop.lat * pi() / 180 - ".$lat." * pi() / 180) / 2),2) + cos(shop.lat * pi() / 180) * cos(".$lat." * pi() / 180) * pow(sin((shop.lng * pi() / 180 - ".$lng." * pi() / 180) / 2),2))) * 1000) as distance"])
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            ->paginate();
							 | 
						||
| 
								 | 
							
								        $list = $rows->items();
							 | 
						||
| 
								 | 
							
								        if(!empty($list)){
							 | 
						||
| 
								 | 
							
								            foreach ($list as $key => $val){
							 | 
						||
| 
								 | 
							
								                $list[$key]['coach_list'] = $coachModel
							 | 
						||
| 
								 | 
							
								                    ->where(['id' => $val['coach_id'] ?? 0])
							 | 
						||
| 
								 | 
							
								                    ->field(['id','coach_name','coach_avatar','coach_group_id','lable_ids'])
							 | 
						||
| 
								 | 
							
								                    ->select();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return ['list' => $list, 'total_count' => $rows->total() ];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 课程详情
							 | 
						||
| 
								 | 
							
								     * @param int $id 课程id
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getDetail(int $id){
							 | 
						||
| 
								 | 
							
								        $model = new \addons\xilufitness\model\WorkCourse;
							 | 
						||
| 
								 | 
							
								        $info = $model
							 | 
						||
| 
								 | 
							
								            ->field(['id','course_id','coach_id','course_type','class_time','start_at','end_at','course_price',
							 | 
						||
| 
								 | 
							
								                'market_price','write_off_price','sign_count','wait_count','class_count'])
							 | 
						||
| 
								 | 
							
								            ->with(['course' => function($query){
							 | 
						||
| 
								 | 
							
								                return $query->withField(['id','title','thumb_images','lable_ids','content','tip_content','thumb_image']);
							 | 
						||
| 
								 | 
							
								            },'coach' => function($query){
							 | 
						||
| 
								 | 
							
								                return $query->withField(['id','coach_name','coach_group_id','coach_avatar','lable_ids']);
							 | 
						||
| 
								 | 
							
								            },'shop' => function($query){
							 | 
						||
| 
								 | 
							
								                return $query->withField(['id','shop_name','address','lat','lng']);
							 | 
						||
| 
								 | 
							
								            }])
							 | 
						||
| 
								 | 
							
								            ->where(['work_course.id' => $id, 'work_course.status' => ['neq','hidden'], 'work_course.brand_id' => $this->brand_id])
							 | 
						||
| 
								 | 
							
								            ->find();
							 | 
						||
| 
								 | 
							
								        //报名人数
							 | 
						||
| 
								 | 
							
								        $userList = CourseService::getInstance()->getSignList(xilufitness_get_id_value($info->id ?? 0),($info->course_type ?? -1));
							 | 
						||
| 
								 | 
							
								        if(!empty($info)){
							 | 
						||
| 
								 | 
							
								            $info->append(['user_signed']);
							 | 
						||
| 
								 | 
							
								            $is_sign = $this->getSignData($id,$this->getUserId(),$info['course_type'] ?? -1);
							 | 
						||
| 
								 | 
							
								            $info->user_signed = $is_sign;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return ['info' => $info, 'userList' => $userList];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 判断是否已报名
							 | 
						||
| 
								 | 
							
								     * @param int $id 课程/活动排课id
							 | 
						||
| 
								 | 
							
								     * @param int $user_id 用户id
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getSignData(int $id = 0,int $user_id = 0, int $course_type=-1){
							 | 
						||
| 
								 | 
							
								        $orderModel = new \addons\xilufitness\model\Order;
							 | 
						||
| 
								 | 
							
								        $orderSign = $orderModel
							 | 
						||
| 
								 | 
							
								            ->where(['data_id' => $id, 'user_id' => $user_id, 'pay_status' => 1, 'order_status' => ['neq',4], 'order_type' => $course_type ])
							 | 
						||
| 
								 | 
							
								            ->find();
							 | 
						||
| 
								 | 
							
								        return !empty($orderSign) ? 1 : 0;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取排课时间
							 | 
						||
| 
								 | 
							
								     * 默认当前时间往后一周
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getClassTime(){
							 | 
						||
| 
								 | 
							
								        $start_at = time();
							 | 
						||
| 
								 | 
							
								        $timeList = [];
							 | 
						||
| 
								 | 
							
								        $week = (new \addons\xilufitness\model\WorkCourse)->getWeek();
							 | 
						||
| 
								 | 
							
								        for ($i = 0; $i<=6; ++$i){
							 | 
						||
| 
								 | 
							
								            $timeList[$i] = [
							 | 
						||
| 
								 | 
							
								                'week' => ($i == 0 ? '今' : ($i == 1 ? '明': $week[date('w',$i == 0 ? $start_at : strtotime("+$i days",$start_at))])),
							 | 
						||
| 
								 | 
							
								                'day' => date('d',$i == 0 ? $start_at : strtotime("+$i days",$start_at)),
							 | 
						||
| 
								 | 
							
								                'day_date' => date('Y-m-d',$i == 0 ? $start_at : strtotime("+$i days",$start_at)),
							 | 
						||
| 
								 | 
							
								            ];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return ['list' => $timeList];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取时间段
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getTimeList(){
							 | 
						||
| 
								 | 
							
								        $list = [
							 | 
						||
| 
								 | 
							
								            0 => [
							 | 
						||
| 
								 | 
							
								                'title' => '6点-9点',
							 | 
						||
| 
								 | 
							
								                'start_at' => '06:00:00',
							 | 
						||
| 
								 | 
							
								                'end_at'   => '09:00:00'
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            1 => [
							 | 
						||
| 
								 | 
							
								                'title' => '9点-12点',
							 | 
						||
| 
								 | 
							
								                'start_at' => '09:00:00',
							 | 
						||
| 
								 | 
							
								                'end_at'   => '12:00:00'
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            2 => [
							 | 
						||
| 
								 | 
							
								                'title' => '12点-14点',
							 | 
						||
| 
								 | 
							
								                'start_at' => '12:00:00',
							 | 
						||
| 
								 | 
							
								                'end_at'   => '14:00:00'
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            3 => [
							 | 
						||
| 
								 | 
							
								                'title' => '14点-18点',
							 | 
						||
| 
								 | 
							
								                'start_at' => '14:00:00',
							 | 
						||
| 
								 | 
							
								                'end_at'   => '18:00:00'
							 | 
						||
| 
								 | 
							
								            ],
							 | 
						||
| 
								 | 
							
								            4 => [
							 | 
						||
| 
								 | 
							
								                'title' => '18点-24点',
							 | 
						||
| 
								 | 
							
								                'start_at' => '18:00:00',
							 | 
						||
| 
								 | 
							
								                'end_at'   => '14:00:00'
							 | 
						||
| 
								 | 
							
								            ]
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        return $list;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取活动详情
							 | 
						||
| 
								 | 
							
								     * @param int $id 活动id
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getCampDetail(int $id){
							 | 
						||
| 
								 | 
							
								        $model = new \addons\xilufitness\model\WorkCamp;
							 | 
						||
| 
								 | 
							
								        $info = $model
							 | 
						||
| 
								 | 
							
								            ->field(['id','camp_id','coach_id','shop_id','start_at','end_at','camp_price','write_off_price','market_price','class_count','class_duration','camp_count','sign_count','total_count','description'])
							 | 
						||
| 
								 | 
							
								            ->with(['camp'  => function($query){
							 | 
						||
| 
								 | 
							
								                return $query->withField(['id','title','thumb_image','lable_ids','thumb_images','content','tip_content','description']);
							 | 
						||
| 
								 | 
							
								            }, 'shop' => function($query){
							 | 
						||
| 
								 | 
							
								                return $query->withField(['id','shop_name','address','lat','lng']);
							 | 
						||
| 
								 | 
							
								            }, 'coach' => function($query){
							 | 
						||
| 
								 | 
							
								                return $query->withField(['id','coach_name','coach_avatar','lable_ids','coach_group_id']);
							 | 
						||
| 
								 | 
							
								            }])
							 | 
						||
| 
								 | 
							
								            ->where(['work_camp.brand_id' => $this->brand_id,'work_camp.id' => $id, 'work_camp.status' => ['neq','hidden'] ])
							 | 
						||
| 
								 | 
							
								            ->find();
							 | 
						||
| 
								 | 
							
								        if(!empty($info)){
							 | 
						||
| 
								 | 
							
								            $info->append(['current_camp_list']);
							 | 
						||
| 
								 | 
							
								            $current_camp_list = $model
							 | 
						||
| 
								 | 
							
								                ->field(['id','camp_id','shop_id','start_at','end_at','camp_price','market_price','class_count','class_duration','camp_count','sign_count','total_count','description'])
							 | 
						||
| 
								 | 
							
								                ->with(['camp'  => function($query){
							 | 
						||
| 
								 | 
							
								                    return $query->withField(['id','title','thumb_image','lable_ids','thumb_images','content','tip_content','description']);
							 | 
						||
| 
								 | 
							
								                }, 'shop' => function($query){
							 | 
						||
| 
								 | 
							
								                    return $query->withField(['id','shop_name','address','lat','lng']);
							 | 
						||
| 
								 | 
							
								                }, 'coach' => function($query){
							 | 
						||
| 
								 | 
							
								                    return $query->withField(['id','coach_name','coach_avatar','lable_ids','coach_group_id']);
							 | 
						||
| 
								 | 
							
								                }])
							 | 
						||
| 
								 | 
							
								                ->where(['work_camp.brand_id' => $this->brand_id,'work_camp.camp_id' => $info->camp_id ?? 0, 'work_camp.status' => 'normal', 'work_camp.end_at' => ['egt',time()], 'work_camp.shop_id' => $info->shop_id ?? 0 ])
							 | 
						||
| 
								 | 
							
								                ->select();
							 | 
						||
| 
								 | 
							
								            foreach ($current_camp_list as $key => $val){
							 | 
						||
| 
								 | 
							
								                $current_camp_list[$key]['user_signed'] = $this->getSignData(xilufitness_get_id_value($val['id']),$this->getUserId(),3);;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $info->current_camp_list = $current_camp_list;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        //报名人数
							 | 
						||
| 
								 | 
							
								        $userList = CourseService::getInstance()->getSignList(xilufitness_get_id_value($info->id ?? 0),3);
							 | 
						||
| 
								 | 
							
								        return ['info' => $info, 'userList' => $userList];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取本期报名人数列表
							 | 
						||
| 
								 | 
							
								     * @param int $is_type 类型 1 团课 2 私教 3 活动
							 | 
						||
| 
								 | 
							
								     * @param int $id 课程排课/活动排课/id
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getSignList(int $id, int $is_type){
							 | 
						||
| 
								 | 
							
								        $model = new \addons\xilufitness\model\Order;
							 | 
						||
| 
								 | 
							
								        $list = $model
							 | 
						||
| 
								 | 
							
								            ->field(['id','user_id','data_id'])
							 | 
						||
| 
								 | 
							
								            ->with(['user' => function($query){
							 | 
						||
| 
								 | 
							
								                return $query->withField(['id','nickname','avatar','train_day','train_duration','train_count']);
							 | 
						||
| 
								 | 
							
								            }])
							 | 
						||
| 
								 | 
							
								            ->where(['data_id' => $id, 'order_type' => $is_type, 'pay_status' => 1, 'order_status' => ['neq',4] ])
							 | 
						||
| 
								 | 
							
								            ->select();
							 | 
						||
| 
								 | 
							
								        $user_count = array_sum(array_column($list,'goods_num'));
							 | 
						||
| 
								 | 
							
								        return ['list' => $list, 'user_count' => $user_count];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取评价列表
							 | 
						||
| 
								 | 
							
								     * @param int $id 课程id
							 | 
						||
| 
								 | 
							
								     * @param int $course_type 课程类型 1 团课 2 私教课 3 活动
							 | 
						||
| 
								 | 
							
								     * @param int $shop_id 门店id
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function getCommentList($id,$course_type,$shop_id){
							 | 
						||
| 
								 | 
							
								        $model = new \addons\xilufitness\model\OrderComment;
							 | 
						||
| 
								 | 
							
								        $where['order_comment.brand_id'] = $this->brand_id;
							 | 
						||
| 
								 | 
							
								        if(!empty($id)){
							 | 
						||
| 
								 | 
							
								            $where['order_comment.course_camp_id'] = $id;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if(!empty($course_type)){
							 | 
						||
| 
								 | 
							
								            $where['order_comment.course_type'] = $course_type;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if(!empty($shop_id)){
							 | 
						||
| 
								 | 
							
								            $where['order_comment.shop_id'] = $shop_id;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $rows = $model
							 | 
						||
| 
								 | 
							
								            ->with(['user' => function($query){
							 | 
						||
| 
								 | 
							
								                return $query->withField(['id','avatar','nickname','train_duration']);
							 | 
						||
| 
								 | 
							
								            }])
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            ->field(['order_comment.id','order_comment.user_id','order_comment.star','order_comment.content','order_comment.createtime'])
							 | 
						||
| 
								 | 
							
								            ->order("order_comment.createtime desc")
							 | 
						||
| 
								 | 
							
								            ->paginate();
							 | 
						||
| 
								 | 
							
								        return ['list' => $rows->items(), 'total_count' => $rows->total()];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |