CompleteListController.class.php 4.86 KB
<?php
/**
 * Created by PhpStorm.
 * User: liyifei2012it
 * Date: 17/7/26
 * Time: 14:08
 */

namespace Api\Controller\Customtask;

use Com\PackageValidate;
use Common\Common\Constant;
use Common\Common\Integral;
use Common\Service\CustomtaskService;
use Common\Service\UserTaskService;

class CompleteListController extends \Api\Controller\AbstractController
{
    /**
     * CompleteList
     * @author tangxingguo
     * @desc 已完成常规任务列表接口
     * @param Int page 页码
     * @param Int limit 每页数据条数
     * @return array
                array(
                    'page' => 1, // 页码
                    'limit' => 20, // 每页数据条数
                    'total' => 100, // 数据总数
                    'list' => array(
                        'customtask_id' => 1, // 任务ID
                        'task_name' => '艰难的任务', // 任务名称
                        'update_time' => 1501724335242, // 任务最后更新时间
                        'is_reward' => 1, // 是否发放激励(1=不发放;2=发放)
                        'reward_setting' => array( // 激励设置(is_reward=1时,此参数值为空字符串)
                            'type' => 1, // 激励类型(1=勋章;2=积分)
                            'medal_id' => 'xxx', // 勋章ID
                            'medal_name' => '荣耀王者', // 勋章名
                            'integral' => 0, // 积分数
                        ),
                    ),
                );
     */
    public function Index_post()
    {
        // 验证规则
        $rules = [
            'page' => 'integer',
            'limit' => 'integer',
        ];

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

        // 完成任务的总数
        $userTaskServ = new UserTaskService();
        $total = $userTaskServ->count_by_conds(['uid' => $this->uid, 'complete_status' => Constant::USER_TASK_COMPLETE_STATUS_COMPLETE]);

        // 任务列表
        $list = [];
        if ($total > 0) {
            // 分页
            $postData['page'] = isset($postData['page']) ? $postData['page'] : Constant::PAGING_DEFAULT_PAGE;
            $postData['limit'] = isset($postData['limit']) ? $postData['limit'] : Constant::PAGING_DEFAULT_LIMIT;
            list($start, $perpage) = page_limit($postData['page'], $postData['limit']);

            // 已完成的常规任务
            $order_option = ['update_time' => 'DESC'];
            $myTasks = $userTaskServ->list_by_conds(['uid' => $this->uid, 'complete_status' => Constant::USER_TASK_COMPLETE_STATUS_COMPLETE], [$start, $perpage], $order_option);
            if (!empty($myTasks)) {
                // 取常规任务信息
                $taskIds = array_column($myTasks, 'customtask_id');
                $taskServ = new CustomtaskService();
                $taskList = $taskServ->list_by_conds(['customtask_id' => $taskIds]);
                $taskList = array_combine_by_key($taskList, 'customtask_id');

                // 勋章
                $IntegralServ = new Integral();
                $integralList = $IntegralServ->listMedal();
                if (!empty($integralList)) {
                    $integralList = array_combine_by_key($integralList, 'im_id');
                }

                // 合并勋章、标题
                foreach ($myTasks as $v) {
                    if (isset($taskList[$v['customtask_id']])) {
                        $task = $taskList[$v['customtask_id']];
                        $rewardSetting = empty($task['reward_setting']) ? [] : unserialize($task['reward_setting']);
                        if (isset($rewardSetting['type']) && $rewardSetting['type'] == Constant::REWARD_TYPE_MEDAL) {
                            // 勋章ID
                            $mId = $rewardSetting['medal_id'];
                            $rewardSetting['medal_name'] = isset($integralList[$mId]) ? $integralList[$mId]['name'] : '';
                            $rewardSetting['medal_url'] = isset($integralList[$mId]) ? $integralList[$mId]['icon'] : '';
                            $rewardSetting['medal_type'] = isset($integralList[$mId]) ? $integralList[$mId]['icon_type'] : '';
                        }
                        $list[] = [
                            'customtask_id' => $v['customtask_id'],
                            'task_name' => $task['task_name'],
                            'update_time' => $v['update_time'],
                            'is_reward' => $task['is_reward'],
                            'reward_setting' => $rewardSetting,
                        ];
                    }
                }
            }
        }

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