ListController.class.php 4.88 KB
<?php
/**
 * Created by PhpStorm.
 * User: liyifei2012it
 * Date: 18/3/26
 * Time: 17:02
 */
namespace Api\Controller\Task;

use Com\PackageValidate;
use Common\Common\Constant;
use Common\Service\ContentService;
use Common\Service\DictService;
use Common\Service\TaskService;
use Common\Service\TeacherService;

class ListController extends \Api\Controller\AbstractController
{
    /**
     * TaskList
     * @author tangxingguo
     * @desc 授课任务列表接口
     * @param Int page:1 当前页
     * @param Int limit:20 当前页条数
     * @param Int teacher_task_id 当前页条数
     * @return array
                array(
                    'page' => 1, // 当前页
                    'limit' => 20, // 当前页条数
                    'total' => 100, // 总条数
                    'list' => array( // 列表数据
                        'task_id' => 1, // 任务ID
                        'teacher_id' => 1, // 讲师ID
                        'task_name' => '辣鸡', // 任务名称
                        'task_type_name' => '辣鸡类型', // 任务类型
                        'task_type_id' => 1, // 任务类型ID
                        'start_time' => 199999999999, // 任务开始时间
                        'end_time' => 199999999999, // 任务结束时间
                        'target' => 9.9, // 授课指标
                        'complete_hour' => 9.9, // 完成指标
                        'article_ids' => array( // 课程ID数组
                            1
                        ),
                        'task_status' => 1, // 任务状态(1=未完成;2=已完成)
                    ),
                );
     */
    public function Index_post()
    {
        $rules = [
            'page' => 'integer',
            'limit' => 'integer',
            'teacher_task_id' => 'integer',
        ];

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

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

        // 取讲师信息
        $teacherServ = new TeacherService();
        $teacherInfo = $teacherServ->get_by_conds([
            'uid' => $this->uid,
            'teacher_status' => Constant::TEACHER_STATUS_NORMAL
        ]);
        if (empty($teacherInfo)) {
            E('_ERR_TEACHER_NOT_FOUND');
        }

        // 任务列表
        $taskServ = new TaskService();
        $conds = ['teacher_id' => $teacherInfo['teacher_id']];
        if (isset($postData['teacher_task_id'])) {
            $conds['task_id'] = $postData['teacher_task_id'];
        }
        $list = $taskServ->list_by_conds($conds, [$start, $perpage], ['created' => 'desc']);

        if (!empty($list)) {
            // 任务类型ID
            $taskTypeIds = array_column($list, 'task_type_id');

            if (!empty($taskTypeIds)) {
                // 取任务类型名称
                $dictServ = new DictService();
                $taskTypeList = $dictServ->list_by_conds(['dict_id' => $taskTypeIds]);
                $taskTypeList = array_combine_by_key($taskTypeList, 'dict_id');
            }

            // 任务ID
            $taskIds = array_column($list, 'task_id');

            // 任务关联的内容
            $contentServ = new ContentService();
            $articleList = $contentServ->list_by_conds(['teacher_task_id' => $taskIds]);

            // 拼接字段
            foreach ($list as $k => $v) {
                // 拼接任务类型名称
                $v['task_type_name'] = isset($taskTypeList[$v['task_type_id']]) ?
                    $taskTypeList[$v['task_type_id']]['value'] : '';

                // 拼接课程课时、课程ID
                $v['complete_hour'] = 0;
                $v['article_ids'] = [];
                foreach ($articleList as $key => $value) {
                    if ($value['teacher_task_id'] == $v['task_id']) {
                        $v['complete_hour'] += $value['class_hour'];
                        $v['article_ids'][] = (int)$value['app_data_id'];
                        unset($articleList[$key]);
                    }
                }

                // 格式化数字
                $v['target'] = floatval($v['target']);

                // 任务状态
                $v['task_status'] = $v['complete_hour'] >= $v['target'] ?
                    Constant::TEACHER_TASK_STATUS_IS_COMPLETE : Constant::TEACHER_TASK_STATUS_DNF;

                $list[$k] = $v;
            }
        }

        // 数据总数
        $total = $taskServ->count_by_conds($conds);

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