InfoController.class.php 5.13 KB
<?php
/**
 * Created by PhpStorm.
 * User: liyifei2012it
 * Date: 17/7/26
 * Time: 14:08
 */
namespace Api\Controller\Customtask;

use Common\Common\Constant;
use Common\Common\Integral as IntegralCom;
use Common\Common\TaskHelper;
use Common\Service\CustomtaskService;
use Common\Service\CustomtaskContentService;
use Common\Service\CustomtaskRightService;
use Common\Service\UserContentService;
use Common\Service\UserTaskService;

class InfoController extends \Api\Controller\AbstractController
{
    /**
     * Info
     * @author liyifei
     * @desc 常规任务详情接口
     * @param Int customtask_id:true 常规任务ID
     * @return array
                array(
                    'customtask_id' => 1, // 任务ID
                    'task_name' => '电商冲击,实体店靠什么赢', // 任务标题
                    'task_status' => 4, // 任务状态(3=进行中;4=已结束;5=已终止)
                    'start_time' => 1491897290000, // 任务开始时间
                    'end_time' => 1491897290001, // 任务结束时间
                    'send_time' => 1491897290001, // 发布时间
                    'is_reward' => 1, // 是否发放激励(1=不发放;2=发放)
                    'reward_setting' => array( // 激励设置(is_reward=1时,此参数值为空字符串)
                        'type' => 1, // 激励类型(1=勋章;2=积分)
                        'integral' => 0, // 积分数(type=2时,返回该参数,否则不返回)
                        'medals' => array( // 勋章信息(type=1时,返回该参数,否则不返回)
                            'im_id' => 3, // 勋章ID
                            'icon' => 'http://qy.vchangyi.com/icon.jpg', // 勋章图标URL或者前端路径
                            'icon_type' => 1, // 勋章图标来源(1=用户上传;2=系统预设)
                            'name' => '勋章1', // 勋章名称
                            'desc' => '这是一个勋章', // 勋章描述
                        ),
                    ),
                    'description' => '这是一个任务描述', // 任务描述
                    'total_task' => 10, // 总任务数
                    'complete_task' => 3, // 已完成的任务数
                    'my_rank' => 10, // 我的排名(排名为0时,前端页面不显示排名数)
                );
     */
    public function Index_post()
    {
        $customtaskId = I('post.customtask_id', 0, 'intval');
        if ($customtaskId == 0) {
            E('_ERR_CUSTOMTASK_ID_IS_EMPTY');
        }

        // 常规任务详情
        $customtaskServ = new CustomtaskService();
        $customtask = $customtaskServ->get($customtaskId);
        if (empty($customtask)) {
            E('_ERR_CUSTOMTASK_NOT_FOUND');

        } elseif (in_array($customtask['task_status'], [Constant::CUSTOMTASK_STATUS_DRAFT, Constant::CUSTOMTASK_STATUS_UNSTART])) {
            E('_ERR_CUSTOMTASK_TASK_STATUS_ABNORMAL');
        }

        // 登录人员
        $user = $this->_login->user;

        // 是否有权限查看
        $rightServ = new CustomtaskRightService();
        $checkRes = $rightServ->checkUserRight($user, $customtaskId);
        if (!$checkRes) {
            E('_ERR_CUSTOMTASK_DONT_HAVE_RIGHT');
        }

        // 用户是否已领取进行中的任务,未领取时自动领取
        $userContentServ = new UserContentService();
        if ($customtask['task_status'] == Constant::CUSTOMTASK_STATUS_PROCESS) {
            $userTaskTotal = $userContentServ->count_by_conds([
                'uid' => $user['memUid'],
                'customtask_id' => $customtaskId,
            ]);
            if ($userTaskTotal == 0) {
                $taskHelper = &TaskHelper::instance();
                $taskHelper->buildNewCustomtask($user);
            }
        }

        // 激励开启,反序列化激励设置
        if ($customtask['is_reward'] == Constant::CUSTOMTASK_REWARD_OPEN && !empty($customtask['reward_setting'])) {
            $reward = unserialize($customtask['reward_setting']);
            // 激励设置为勋章时,补全勋章信息
            if ($reward['type'] == Constant::REWARD_TYPE_MEDAL && !empty($reward['medal_id'])) {
                $integralServ = &IntegralCom::instance();
                $medals = $integralServ->listMedal($reward['medal_id']);
                $reward['medals'] = $medals[0];
                unset($reward['medal_id']);
            }
            $customtask['reward_setting'] = $reward;
        }

        // 总任务数
        $contentServ = new CustomtaskContentService();
        $customtask['total_task'] = $contentServ->count_by_conds(['customtask_id' => $customtaskId]);

        // 已完成的任务数
        $customtask['complete_task'] = $userContentServ->count_by_conds([
            'uid' => $user['memUid'],
            'customtask_id' => $customtaskId,
            'content_status' => Constant::USER_CONTENT_STATUS_COMPLETE,
        ]);

        // 我的排名
        $userTaskServ = new UserTaskService();
        $customtask['my_rank'] = $userTaskServ->getMyRank($user['memUid'], $customtaskId);

        $this->_result = $customtask;
    }
}