RankingController.class.php
4.52 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
<?php
/**
* 获取不同范围的用户积分排名.
*
* @auther zs_anything
* @date 2017/08/03
*/
namespace Api\Controller\Integral;
use Common\Common\Cache;
use Common\Common\Department;
use Common\Common\User;
use Common\Model\AuthorityMainModel;
use Common\Model\PluginModel;
use VcySDK\Integral;
use VcySDK\Service;
class RankingController extends AbstractController
{
public function Index()
{
// 获取排行数据
$this->getAllRanking();
// 获取人员信息
$this->getUidInfo();
return true;
}
/**
* 获取排行数据
*/
private function getAllRanking()
{
// 验证权限
$authorRange = $this->checkAuthRange(PluginModel::INTEGRAL_CENTER);
$rankingParams = [];
$dpIds = $this->getDpIdsParams();
if (!empty($dpIds)) {
$rankingParams['dpIds'] = $dpIds;
}
list($jobIds, $roleIds) = $this->getJobOrRoleParams($authorRange);
$rankingParams['jobIds'] = $jobIds;
$rankingParams['roleIds'] = $roleIds;
// 获取范围内的用户积分排名
$sdk = new Integral(Service::instance());
$rankingParams['memUid'] = $this->_login->user['memUid'];
$rankingParams['rankType'] = I('post.rank_type', $sdk::INTEGRAL_RANKING_TYPE_TOTAL);
$rankingParams['pageNum'] = I('post.page', 1);
$rankingParams['pageSize'] = I('post.limit', 10);
$this->_result = $sdk->getDiffRangeRanking($rankingParams);
return true;
}
/**
* 获取人员信息
* @return bool
*/
protected function getUidInfo()
{
// 获取人员ID
$uidArr = array_column($this->_result['list'], 'memUid');
if (empty($uidArr)) {
return true;
}
// 获取人员数据
$user = new User();
$userList = $user->listByUid($uidArr);
foreach ($this->_result['list'] as &$item) {
// 头像
$item['memFace'] = empty($userList[$item['memUid']]['memFace']) ?
'' : $userList[$item['memUid']]['memFace'];
// 人名
$item['memUsername'] = empty($userList[$item['memUid']]['memUsername']) ?
'' : $userList[$item['memUid']]['memUsername'];
// 自己
if ($this->_login->user['memUid'] == $item['memUid']) {
$item['isMy'] = true;
}
}
return true;
}
/**
* 获取部门IDs参数
* 如果前端没传,默认当前用户所在全部部门及子部门
* @return array
*/
private function getDpIdsParams()
{
$department = new Department();
// 如果部门为-1, 取当前用户所在部门
$dpIds = I('post.dp_ids', -1);
if (-1 == $dpIds) {
$dpIds = $department->list_dpId_by_uid($this->_login->user['memUid']);
}
// 获取所有子部门,包含自己
$myDpIds = $department->list_childrens_by_cdid($dpIds, true);
return array_keys($myDpIds);
}
/**
* 获取岗位或角色参数
* 如果前端没有传,取当前用户配置的可见范围数据
* @param $authorRange
* @return array
*/
private function getJobOrRoleParams($authorRange)
{
$jobIds = I('job_ids', -1);
$roleIds = I('role_ids', -1);
// 查询系统当前配置的积分排名筛选类型
$visibleRangeType = AuthorityMainModel::VISIBLE_RANGE_TYPE_JOB;
$settings = Cache::instance()->get('Common.AppSetting');
if (!empty($settings) && array_key_exists("rank_filter", $settings)) {
$visibleRangeType = $settings['rank_filter']['value'];
}
// 按岗位筛选
if (AuthorityMainModel::VISIBLE_RANGE_TYPE_JOB == $visibleRangeType) {
if (-1 == $jobIds) {
$jobIds = empty($authorRange[PluginModel::INTEGRAL_CENTER]) ? [] : $authorRange[PluginModel::INTEGRAL_CENTER];
} else {
$jobIds = [$jobIds];
}
// 清空角色IDs
$roleIds = [];
}
// 按角色筛选
if (AuthorityMainModel::VISIBLE_RANGE_TYPE_ROLE == $visibleRangeType) {
if (-1 == $roleIds) {
$roleIds = empty($authorRange[PluginModel::INTEGRAL_CENTER]) ? [] : $authorRange[PluginModel::INTEGRAL_CENTER];
} else {
$roleIds = [$roleIds];
}
// 清空岗位IDs
$jobIds = [];
}
return array($jobIds, $roleIds);
}
}