ManController.class.php
5.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
<?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];
}
}