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

use Com\PackageValidate;
use Common\Common\Constant;
use Common\Common\Course;
use Common\Common\CourseHelper;
use Common\Common\TeacherSetting;
use Common\Service\ContentService;
use Common\Service\TaskService;
use Common\Service\DictService;

class ListController extends \Apicp\Controller\AbstractController
{
    /**
     * List
     * @author tangxingguo
     * @desc 授课任务列表接口
     * @param Int page:1 当前页
     * @param Int limit:20 当前页条数
     * @param Int teacher_id:true 讲师ID
     * @param String task_name 任务名称
     * @return array
                array(
                    'page' => 1, // 当前页
                    'limit' => 20, // 当前页条数
                    'total' => 100, // 总条数
                    'task_type_setting' => array(
                           'is_open' => 1, // 任务类型设置(1=关闭;2=开启)
                    ),
                    '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_id' => 'require|integer',
            'task_name' => 'max:64',
        ];

        // 验证请求数据
        $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);

        // 条件处理
        $conds = ['teacher_id' => $postData['teacher_id']];
        if (isset($postData['task_name'])) {
            $conds['task_name like ?'] = "%{$postData['task_name']}%";
        }

        // 任务列表
        $taskServ = new TaskService();
        $list = $taskServ->list_by_conds($conds, [$start, $perpage], ['created' => 'desc']);

        // 任务类型设置
        $taskTypeSetting = &TeacherSetting::instance()->getCacheSetting();

        // 任务类型名称(任务类型开启的情况下)
        $taskTypeOpen = $taskTypeSetting['task_type_setting']['is_open'];
        if (!empty($list) && $taskTypeOpen== Constant::TEACHER_TASK_SETTING_OPEN) {
            // 任务类型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::TASK_STATUS_IS_COMPLETE : Constant::TASK_STATUS_DNF;

            $list[$k] = $v;
        }

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

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