ArticleUpdateController.class.php
7.58 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
<?php
/**
* ArticleUpdateController.class.php
* 更新文章推荐 RPC 接口
* @author Deepseath
* @version $Id$
*/
namespace Rpc\Controller\Recommender;
use Common\Service\CommonRecommenderService;
use Common\Model\CommonRecommenderModel;
use Think\Log;
use Common\Common\DataRight;
use Common\Service\CommonRecommenderRightService;
use Think\Exception;
use Common\Model\CommonRecommenderRightModel;
/**
* 更新文章推荐 RPC 接口
* @uses 调用方法:\Com\Rpc::phprpc(rpc 接口 url)->invoke(接口方法名, 需要传入的参数数组key-value);
*/
class ArticleUpdateController extends AbstractController
{
/**
* 更新文章推荐信息
* @desc 【RPC】更新文章推荐信息接口
* @param string app:true 被推荐数据所在应用模块目录标识名
* @param string dataCategoryId:true 被推荐数据所属的分类Id,可以为空,但必须提供该参数
* @param string dataId:true 被推荐数据的原始数据 Id。<strong style="color: red">注意:请确保被推荐数据 app、dataCategoryId、dataId 联合值为唯一</strong>
* @param string title:false: 文章标题
* @param string summary:false: 文章摘要
* @param string attachId:false: 封面图片附件 ID
* @param string pic:false: 封面图片 url
* @param string url:false: 文章链接
* @param integer dateline:false:0 文章发布时间戳,不设置或者为空,则以推荐时间为准
* @param string dataType:false:0 数据类型
* @param integer endTime:false:0 数据有效期截止时间
* @param array right:false 文章阅读权限范围 为空=全公司;array=有范围
* <pre>
* + users 用户 id 列表
* + tags 标签 id 列表
* + departments 部门 id 列表
* + roles 角色 id 列表
* + jobs 岗位 id 列表
* </pre>
* @return boolean
*/
public function Index()
{
if (!$this->_checkKeyParams()) {
return false;
}
$keys = [
'title',
'summary',
'attachId',
'pic',
'url',
'dateline',
'right',
'dataType',
'endTime',
];
foreach ($keys as $_key) {
if (!isset($this->_params[$_key])) {
$this->_params[$_key] = '';
}
}
if (empty($this->_params['app']) && empty($this->_params['dataId']) && empty($this->_params['dataCategoryId'])) {
Log::record('推荐的数据标记为空');
return $this->_set_error('_ERR_RECOMMENDER_ARTICLE_NULL_90003');
}
$recommenderService = new CommonRecommenderService();
// 判断推荐的数据是否已存在
$exists = $recommenderService->getDuplicate(CommonRecommenderModel::TYPE_ARTICLE, $this->_params['app']
, $this->_params['dataId']);
if (!empty($exists)) {
$recommenderId = $exists['recommender_id'];
} else {
Log::record('该数据尚未被推荐过,更新改为新增推荐:app=' . $this->_params['app'] . '; dataId=' . $this->_params['dataId']
. '; dataCategoryId=' . $this->_params['dataCategoryId']);
$recommenderId = null;
}
// 推荐主表数据
$data = [
'type' => CommonRecommenderModel::TYPE_ARTICLE,
'displayorder' => CommonRecommenderModel::VALUE_DISPLAYORDER_MIN,
'hide' => CommonRecommenderModel::HIDE_NO,
'system' => CommonRecommenderModel::SYSTEM_NO,
'title' => $this->_params['title'],
'attach_id' => $this->_params['attachId'],
'pic' => $this->_params['pic'],
'url' => $this->_params['url'],
'description' => $this->_params['summary'],
'app_dir' => $this->_params['app'],
'app_identifier' => APP_IDENTIFIER,
'data_id' => $this->_params['dataId'],
'data_category_id' => $this->_params['dataCategoryId'],
'data' => [],
'dateline' => !$this->_params['dateline'] ? MILLI_TIME : $this->_params['dateline'],
'adminer_id' => '',
'adminer' => '',
'data_type' => $this->_params['dataType'],
'end_time' => $this->_params['endTime'],
];
// 推荐权限表基础数据
$dataRight = [
'recommender_id' => $recommenderId,
'type' => $data['type'],
'displayorder' => $recommenderId,
'hide' => $data['hide'],
'system' => $data['system'],
'app_dir' => $data['app_dir'],
'app_identifier' => $data['app_identifier'],
'data_id' => $data['data_id'],
'data_category_id' => $data['data_category_id'],
'dateline' => $data['dateline'],
'adminer_id' => '',
'adminer' => ''
];
try {
$recommenderService->start_trans();
// 更新推荐主表数据
$recommenderId = $recommenderService->recommenderUpdate($data, $recommenderId);
// 更新排序号
if (empty($exists)) {
$recommenderService->update($recommenderId, [
'displayorder' => $recommenderId
]);
}
// 检查banner,存在更新banner信息
$bannerInfo = $recommenderService->get_by_conds([
'type' => CommonRecommenderModel::TYPE_BANNER,
'app_dir' => $data['app_dir'],
'data_id' => $data['data_id'],
]);
if (!empty($bannerInfo)) {
$newBanner = [
'title' => $this->_params['title'],
'attach_id' => $this->_params['attachId'],
'pic' => $this->_params['pic'],
'url' => $this->_params['url'],
];
$recommenderService->update($bannerInfo['recommender_id'], $newBanner);
}
// 结束主表数据更新
// 更新权限表
$dataRight['recommender_id'] = $recommenderId;
$dataRight['displayorder'] = $recommenderId;
$recommenderRightService = new CommonRecommenderRightService();
$dataRightService = new DataRight($recommenderRightService, [
'field_obj_type' => 'obj_type',
'field_obj_id' => 'obj_id',
'field_data_id' => 'recommender_id',
'obj_id_all' => CommonRecommenderRightModel::OBJ_ID_ALL_VALUE
]);
// 初始化权限范围为全公司
$rightData = [];
if ($this->_params['right'] && is_array($this->_params['right'])) {
// 如果传入了权限信息则设置权限数据
$rightData = $this->_params['right'];
}
$dataRightService->update($recommenderId, $dataRight, $rightData);
// 结束权限表更新
$recommenderService->commit();
} catch (Exception $e) {
$recommenderService->rollback();
$data['recommender_id'] = $recommenderId;
Log::record('<!-- 更新推荐数据(失败):');
Log::record(print_r($data, true));
Log::record(print_r($e, true));
Log::record('结束更新推荐数据 -->');
return E(L('_ERR_RECOMMENDER_RPC_ARTICLE_UPDATE_ERROR_90009'));
}
$data['recommender_id'] = $recommenderId;
Log::record('<!-- 更新推荐数据:');
Log::record(print_r($data, true));
Log::record('结束更新推荐数据 -->');
return true;
}
}