ManController.class.php
5.82 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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
<?php
/**
* 邀请人员接口
* User: heyuelong
* Date: 2017年12月26日11:28:04
*/
namespace Api\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 \Api\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'],
'invite' => $this->uid,
'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'
];
$msg = [
'question_id.require' => '问题id不能为空',
'uids.require' => '邀请人员不能为空',
];
// 验证数据
$validate = new PackageValidate($rules, $msg, 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');
}
// 获取设置开关
$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');
}
// 如果邀请权限提问题人员
if ($invite_right == Constant::INVITE_QUESTION_RIGHT) {
if ($this->uid !== $questionInfo['uid']) {
E('_ERR_QUESTION_INVITE_AUTH');
}
}
$conditons = [
'question_id' => $question_id,
'invite' => $this->uid
];
// 获取我已邀请的次数
$list = $this->_invite_log_service->list_by_conds($conditons, null, [], 'distinct(created)');
$total = count($list);
// 邀请次数已用完
if ($total >= $invite_number) {
E('_ERR_QUESTION_INVITE_NUMBER');
}
// 邀请人
$uids = $validate->postData['uids'];
$uids = array_unique(array_filter($uids));
// 邀请人数超过最大限制
if (count($uids) > $invite_max_man) {
E('_ERR_QUESTION_INVITE_MAX_MAN');
}
return [$uids, $questionInfo];
}
}