StudyInfoController.class.php 4.64 KB
<?php
/**
 * Created by PhpStorm.
 * User: liyifei2012it
 * Date: 18/4/25
 * Time: 16:48
 */
namespace Apicp\Controller\Map;

use Com\PackageValidate;
use Common\Common\Constant;
use Common\Common\User;
use Common\Service\MapPathService;
use Common\Service\MapService;
use Common\Service\PathService;
use Common\Service\UserPathService;

class StudyInfoController extends \Apicp\Controller\AbstractController
{
    /**
     * StudyInfo
     * @author liyifei
     * @desc 员工学习详情接口
     * @param Int map_id:true 地图ID
     * @param String uid:true 人员ID
     * @return array 员工学习详情列表
            array(
                'map_id' => 123, // 地图ID
                'user' => array(
                    'uid' => 1, // 人员ID
                    'username' => '张三', // 姓名
                    'dp_name' => array('技术部','后端'), // 所属部门
                    'job' => 'PHP', // 职位
                    'role' => '梁山好汉', // 角色
                    'face' => 'http://dsc.vhangyi.com/1.jpg', // 头像
                ),
                'page' => 1, // 页码
                'limit' => 9, // 每页数据条数
                'total' => 9, // 数据总数
                'list' => array( // 列表数据
                    array(
                        'path_id' => 1, // 路径ID
                        'path_name' => '路径1', // 路径名称
                        'study_time' => 10, // 学习时长(单位:秒)
                        'complete_status' => 10, // 完成状态(1=未完成;2=已完成)
                        'update_time' => 1491897290000, // 学习时间
                    ),
                )
            )
     */
    public function Index_post()
    {
        // 验证规则
        $rules = [
            'page' => 'integer',
            'limit' => 'integer',
            'map_id' => 'require|integer',
            'uid' => 'require',
        ];

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

        // 地图是否存在
        $mapServ = new MapService();
        $map = $mapServ->get($map_id);
        if (empty($map)) {
            E('_ERR_MAP_NOT_FOUND');
        }

        // 用户已学的学习路径
        $conds = [
            'map_id' => $map_id,
            'uid' => $postData['uid'],
        ];
        $userPathServ = new UserPathService();
        $userPathList = $userPathServ->list_by_conds($conds);
        if (!empty($userPathList)) {
            $userPathList = array_combine_by_key($userPathList, 'path_id');
        }

        // 地图关联的学习路径
        $mapPathServ = new MapPathService();
        $mapPathList = $mapPathServ->list_by_conds(['map_id' => $map_id], null, ['`order`' => 'ASC']);
        $pathIds = array_column($mapPathList, 'path_id');

        // 学习路径详情
        $pathServ = new PathService();
        $pathList = $pathServ->list_by_pks($pathIds);
        $pathList = array_combine_by_key($pathList, 'path_id');

        foreach ($mapPathList as $k => $path) {
            $path_id = $path['path_id'];

            // 补全路径名称
            $mapPathList[$k]['path_name'] = $pathList[$path_id]['path_name'];

            // 补全学习状态、学习时长、学习时间
            if (isset($userPathList[$path_id])) {
                $mapPathList[$k]['complete_status'] = $userPathList[$path_id]['complete_status'];
                $mapPathList[$k]['study_time'] = $userPathList[$path_id]['study_time'];
                $mapPathList[$k]['update_time'] = $userPathList[$path_id]['update_time'];

            } else {
                $mapPathList[$k]['complete_status'] = Constant::COMPLETE_STATUS_IS_FALSE;
                $mapPathList[$k]['study_time'] = 0;
                $mapPathList[$k]['update_time'] = 0;
            }
        }

        // 人员详情
        $userServ = &User::instance();
        $user = $userServ->getByUid($postData['uid'], true, 1);

        $this->_result = [
            'map_id' => $postData['map_id'],
            'user' => [
                'uid' => $postData['uid'],
                'username' => $user['memUsername'],
                'dp_name' => array_column($user['dpName'], 'dpName'),
                'job' => $user['memJob'],
                'role' => $user['memRole'],
                'mobile' => $user['memMobile'],
                'face' => $user['memFace'],
            ],
            'page' => Constant::PAGING_DEFAULT_PAGE,
            'limit' => Constant::PAGING_DEFAULT_LIMIT,
            'total' => count($mapPathList),
            'list' => $mapPathList,
        ];
    }
}