ManController.class.php 5.12 KB
<?php
/**
 * 邀请人员接口
 * User: heyuelong
 * Date: 2017年12月26日11:28:04
 */

namespace Apicp\Controller\Invite;

use Com\PackageValidate;
use Common\Common\AttachOperation;
use Common\Common\Constant;
use Common\Common\Notice;
use Common\Common\User;
use Common\Service\ImgService;
use Common\Service\InviteLogService;
use Common\Service\QuestionService;
use Common\Service\SettingService;

class ManController extends \Apicp\Controller\AbstractController
{
    /** @var QuestionService */
    protected $_question_service;
    /** @var InviteLogService */
    protected $_invite_log_service;

    public function __construct()
    {
        // 初始化问题类
        $this->_question_service = new QuestionService();
        $this->_invite_log_service = new InviteLogService();
        parent::__construct();
    }

    /**
     *Man
     * @author
     * @desc 邀请人员
     * @param Int question_id:true 问题ID
     * @param array  uids:true 邀请人员UID集合([1,2,3])
     * @return array  已邀请人员
                    array(
                    'invite_users' =>
                                    array(
                                    '张三'
                                    ),
                     );
     */
    public function Index_post()
    {
        // 验证数据
        list($uids, $questionInfo) = $this->verification();

        $conditons = [
            'question_id' => $questionInfo['question_id'],
            'uid' => $uids
        ];

        // 已邀请过的用户UID
        $old_invite_uid = [];
        // 获取被邀请数据
        $list = $this->_invite_log_service->list_by_conds($conditons, null, [], 'uid');

        if (!empty($list)) {
            $invite_all_uid = array_column($list, 'uid');
            // 获取已经邀请过的人员UID
            $old_invite_uid = array_intersect($uids, $invite_all_uid);
            // 需要发送消息的用户UID
            $invite_uid = array_diff($uids, $old_invite_uid);
        } else {
            $invite_uid = $uids;
        }

        try {
            // 开启事务
            $this->_invite_log_service->start_trans();
            $data = [];
            // 组装邀请人员日志数据
            foreach ($invite_uid as $uid) {
                $data[] = [
                    'question_id' => $questionInfo['question_id'],
                    'ea_id' => $this->_login->user['eaId'],
                    'uid' => $uid
                ];
            }

            // 写入记录表
            if (!empty($data)) {

                $this->_invite_log_service->insert_all($data);
            }

            // 提交事务
            $this->_invite_log_service->commit();
        } catch (\Think\Exception $e) {
            \Think\Log::record($e);
            // 事务回滚
            $this->_invite_log_service->rollback();
            E('_ERR_QUESTION_INVITE_MAN');
            return false;
        } catch (\Exception $e) {
            \Think\Log::record($e);
            // 事务回滚
            $this->_invite_log_service->rollback();
            E('_ERR_QUESTION_INVITE_MAN');
            return false;
        }

        // 初始化已邀请的用户集合
        $invite_users = [];
        // 如果存在已邀请的重复数据
        if (!empty($old_invite_uid)) {
            sort($old_invite_uid);
            // 获取用户信息
            $user = User::instance()->listBasicByConds(['memUids' => $old_invite_uid]);
            $invite_users = array_column($user['list'], 'memUsername');
        }

        // 如果需邀请的人不为空
        if(!empty($invite_uid)){
            $invite_uid=array_diff($invite_uid,[$questionInfo['uid']]);
         }

        // 发送消息给被邀请人员
        Notice::instance()->InviteNoticeT($invite_uid, $questionInfo);

        $this->_result = ['invite_users' => $invite_users];
        return true;
    }

    /**
     * 验证数据
     * @return array
     */
    protected function verification()
    {
        // 验证规则
        $rules = [
            'question_id' => 'require',
            'uids' => 'require'
        ];

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

        // 提问详情
        $questionInfo = $this->_question_service->get($question_id);
        if (empty($questionInfo)) {
            // 提问信息不存在
            E('_ERR_ANSWER_QUESTION_NOT_FOUND');
        }

        // 待审核不能邀请
        if (Constant::QUESTION_CHECK_STATUS_WAIT==$questionInfo['check_status']) {
            // 提问状态是待审核
            E('_ERR_ANSWER_QUESTION_STATUS_WAIT');
        }

        // 获取设置开关
        $setting = new SettingService();
        list(, , $is_invite, $invite_right, $invite_number, $invite_max_man) = $setting->get_setting_data();
        // 未开启邀请功能
        if (empty($is_invite)) {
            E('_ERR_NOT_OPEN_QUESTION_INVITE');
        }

        // 邀请人
        $uids = $validate->postData['uids'];
        $uids = array_unique(array_filter($uids));

        return [$uids, $questionInfo];
    }

}