<?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]; } }