CourseListController.class.php 5.65 KB
<?php
/**
 * Created by PhpStorm.
 * User: liyifei2012it
 * Date: 18/4/2
 * Time: 11:23
 */
namespace Api\Controller\Task;

use Com\PackageValidate;
use Common\Common\Constant;
use Common\Common\Course;
use Common\Common\Train;
use Common\Service\ContentService;
use Common\Service\TeacherService;

class CourseListController extends \Api\Controller\AbstractController
{
    /**
     * CourseList
     * @author tangxingguo
     * @desc 授课记录列表接口(讲师本人查看的授课记录页)
     * @param Int page:false:1 页码
     * @param Int limit:false:20 每页记录数
     * @param Int teacher_task_id 授课任务ID
     * @return array|bool 课程列表
                  array(
                      'page' => 1, // 页码
                      'limit' => 20, // 每页记录数
                      'total' => 200, // 记录总数
                      'list' => array(
                          array(
                              'article_id' => 12, // 课程ID
                              'title' => '冰糖雪梨', // 课程标题
                              'article_type' => 1, // 课程类型(1=单课程,2=系列课程)
                              'cover_url' => 'http://qy.vchangyi.org', // 封面图片URL
                              'study_total' => 10, // 已学习人数
                              'course_nature' => 3, // 课程性质(1=必修课;2=选修课;3=公共课)
                              'data_type' => 1, // 数据类型(1=线上课程;2=线下课程)
                              'article_type' => 1, //  线上课程存在,课程类型(1=单课程;2=系列课程)
                              'plan_id' => 1, //  培训计划ID
                              'ed_id' => 1, //  培训ID
                          ),
                      ),
                  )
     */
    public function Index_post()
    {
        // 验证规则
        $rules = [
            'page' => 'integer',
            'limit' => 'integer',
            'teacher_task_id' => 'integer|gt:0',
        ];

        // 验证数据
        $validate = new PackageValidate($rules, [], array_keys($rules));
        $postData = $validate->postData;

        $teacherServ = new TeacherService();
        $teacher = $teacherServ->get_by_conds([
            'uid' => $this->uid,
            'teacher_status' => Constant::TEACHER_STATUS_NORMAL
        ]);
        if (empty($teacher)) {
            E('_ERR_TEACHER_NOT_FOUND');
        }

        // 分页
        $postData['page'] = $postData['page'] ?? Constant::PAGING_DEFAULT_PAGE;
        $postData['limit'] = $postData['limit'] ?? Constant::PAGING_DEFAULT_LIMIT;
        list($start, $perpage) = page_limit($postData['page'], $postData['limit']);

        // 排序
        $orders = [
            'created' => 'DESC'
        ];

        // 课程列表
        $contentServ = new ContentService();
        $conds = [
            'teacher_id' => $teacher['teacher_id'],
        ];
        if (isset($postData['teacher_task_id'])) {
            $conds['teacher_task_id'] = $postData['teacher_task_id'];
        }
        $list = $contentServ->list_by_conds($conds, [$start, $perpage], $orders);

        // 取plan_id、ed_id;线上课程课程类型(系列课程、单课程)
        $onlineArticleIds = [];
        $offlineArticleIds = [];
        foreach ($list as $key => $value) {
            // 线上课程
            if ($value['data_type'] == Constant::TASK_CONTENT_DATA_TYPE_ONLINE) {
                $onlineArticleIds[] = $value['app_data_id'];

                // 线下课程
            } elseif ($value['data_type'] == Constant::TASK_CONTENT_DATA_TYPE_OFFLINE) {
                $offlineArticleIds[] = $value['app_data_id'];
            }
        }

        // 线上课程
        $train = &Train::instance();
        if (!empty($onlineArticleIds)) {
            // 取课程类型
            $course = &Course::instance();
            $onlineArticleList = $course->getArticleList(['article_id' => $onlineArticleIds]);
            $onlineArticleList = array_combine_by_key($onlineArticleList, 'article_id');
        }

        // 线下课程
        if (!empty($offlineArticleIds)) {
            // 取plan_id、ed_id;
            $offlinePlanList = $train->getPlanList([
                'plan_type' => Train::PLAN_TYPE_OFFLINE_COURSE,
                'plan_obj_id' => $offlineArticleIds,
            ]);
            $offlinePlanList = array_combine_by_key($offlinePlanList, 'plan_obj_id');
        }

        // 数据拼接
        foreach ($list as $k => $v) {
            $v['article_id'] = $v['app_data_id'];

            // 线上课程
            if ($v['data_type'] == Constant::TASK_CONTENT_DATA_TYPE_ONLINE) {
                // 课程类型
                $v['article_type'] = isset($onlineArticleList[$v['app_data_id']]) ?
                    $onlineArticleList[$v['app_data_id']]['article_type'] : '';
            }

            // 线下课程
            if ($v['data_type'] == Constant::TASK_CONTENT_DATA_TYPE_OFFLINE) {
                // 培训计划ID
                $v['plan_id'] = isset($offlinePlanList[$v['app_data_id']]) ?
                    $offlinePlanList[$v['app_data_id']]['plan_id'] : '';

                // 培训ID
                $v['ed_id'] = isset($offlinePlanList[$v['app_data_id']]) ?
                    $offlinePlanList[$v['app_data_id']]['ed_id'] : '';
            }

            $list[$k] = $v;
        }

        // 课程总数
        $total = $contentServ->count_by_conds($conds);

        $this->_result = [
            'page' => (int)$postData['page'],
            'limit' => (int)$postData['limit'],
            'total' => (int)$total,
            'list' => $list,
        ];
    }
}