<?php /** * 【手机端】03-培训安排接口 * Created by PhpStorm. * @author:wanghuan * @date:2017-08-29 */ namespace Api\Controller\Plan; use Common\Service\StageService; use Common\Service\PlanService; use Common\Service\PlanDoService; class ListController extends \Api\Controller\AbstractController { /** @var StageService */ protected $stage_serv; /** @var PlanService */ protected $plan_s; /** @var PlanDoService */ protected $plan_do_s; public function before_action($action = '') { if (!parent::before_action($action)) { return false; } $this->stage_serv = new StageService(); // 实例化培训计划service $this->plan_s = new PlanService(); // 实例化培训计划执行状态service $this->plan_do_s = new PlanDoService(); return true; } /** * 培训安排列表 */ public function Index_post() { // 培训id $ed_id = I('post.ed_id', 0, 'intval'); // 培训id为空 if (!$ed_id) { E('_EMPTY_ED_ID'); } // 培训详情 $this->get_education($ed_id); // 培训安排查询条件 $cond['ed_id'] = $ed_id; // 分页 $page_option = null; // 排序 $order_option['plan_order'] = 'ASC'; // 培训安排列表 $plans = $this->plan_s->list_by_conds($cond, $page_option, $order_option); if (!empty($plans)) { // 数据格式化 $plans = $this->format_data($ed_id, $plans); } $result = [ 'ed_id' => $ed_id, 'plans' => $plans ]; // 返回结果 $this->_result = $result; } /** * 格式化培训计划数据 * * @param int $ed_id 培训id * @param array $data 待格式化数据 * * @return array 格式化后数据 */ protected function format_data($ed_id, $data) { $stage_field = 'stage_id, stage_name, stage_order'; $list = $this->stage_serv->list_by_conds(['ed_id' => $ed_id], null, ['stage_order' => 'ASC'], $stage_field); // 培训计划执行状态查询条件 $cond = [ 'pd_uid' => $this->uid, 'ed_id' => $ed_id ]; // 培训计划执行状态列表 $plan_do_list = $this->plan_do_s->list_by_conds($cond); // 格式化培训阶段 $stage_list = []; foreach ($list as $stage) { $stage_id = $stage['stage_id']; // 格式化后数据 $stage_list[$stage_id] = [ 'stage_id' => $stage_id, 'stage_name' => $stage['stage_name'], 'stage_order' => $stage['stage_order'], 'content_list' => [], ]; foreach ($data as $key => $val) { if ($stage_id != $val['stage_id']) { continue; } unset($val['stage_id']); // 获取培训状态 $plan_status = $this->get_plan_status($val, $plan_do_list); $plan = [ 'plan_id' => intval($val['plan_id']), 'plan_name' => $val['plan_name'], 'plan_type' => intval($val['plan_type']), 'plan_obj_id' => intval($val['plan_obj_id']), 'plan_use_time' => $val['plan_use_time'], 'plan_status' => $plan_status, 'plan_sign_begin' => $val['plan_sign_begin'], 'plan_sign_end' => $val['plan_sign_end'], 'plan_sign_comments' => $val['plan_sign_comments'], 'link' => '' ]; // 课程、调研、考试RPC所需参数 $params = [ 'ed_id' => $ed_id, 'plan_id' => intval($val['plan_id']), 'app_data_id' => intval($val['plan_obj_id']) ]; // 初始化应用名 $app_dir = ''; switch ($val['plan_type']) { case PlanService::PLAN_TYPE_SOURCE: // 课程素材 $app_dir = 'Course'; break; case PlanService::PLAN_TYPE_QUESTION: // 调研 $app_dir = 'Questionnaire'; break; case PlanService::PLAN_TYPE_EXAM: // 考试 $app_dir = 'Exam'; break; default: break; } // 应用名不为空 if (!empty($app_dir)) { // link重新赋值 $plan['link'] = oaUrl('Frontend/Index/Train/Index', $params, '', $app_dir); } $stage_list[$stage_id]['content_list'][] = $plan; } } return array_values($stage_list); } /** * 获取培训计划执行状态 * * @param array $plan 培训计划详情 * @param array $plan_do_list 当前登录用户培训计划完成状态列表 * * @return int 培训计划执行状态 */ protected function get_plan_status($plan, $plan_do_list) { // 培训计划操作状态:锁定 $plan_status = PlanService::PLAN_OPERATE_LOCK; // 培训计划启用状态 $plan_use_status = $plan['plan_use_status']; // 培训计划启用状态:失效 if (PlanService::PLAN_STATUS_CLOSE == $plan_use_status) { // 锁定 $plan_status = PlanService::PLAN_OPERATE_LOCK; } elseif (PlanService::PLAN_STATUS_OPEN == $plan_use_status) { // 启用 $plan_do_list = array_combine_by_key($plan_do_list, 'plan_id'); // 培训计划执行状态详情 $plan_do = $plan_do_list[$plan['plan_id']]; // 执行状态不为空为已完成状态 if (!empty($plan_do)) { // 已完成 $plan_status = PlanService::PLAN_OPERATE_DONE; } else { // 培训计划启用时间 $plan_use_time = $plan['plan_use_time']; // 当前时间小于启用时间 if (MILLI_TIME < $plan_use_time) { // 锁定 $plan_status = PlanService::PLAN_OPERATE_LOCK; } else { // 开启 $plan_status = PlanService::PLAN_OPERATE_OPEN; } } } return $plan_status; } }