ArticleNewController.class.php
7.46 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
<?php
/**
* ArticleNewController.class.php
* 新增文章推荐 RPC 接口
* @author Deepseath
* @version $Id$
*/
namespace Rpc\Controller\Recommender;
use Common\Service\CommonRecommenderService;
use Common\Model\CommonRecommenderModel;
use Think\Log;
use Think\Exception;
use Common\Common\DataRight;
use Common\Model\CommonRecommenderRightModel;
use Common\Service\CommonRecommenderRightService;
/**
* 新增文章推荐 RPC 接口
* @uses 调用方法:\Com\Rpc::phprpc(rpc 接口 url)->invoke(接口方法名, 需要传入的参数数组key-value);
*/
class ArticleNewController 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',
'dataType',
'endTime',
'right',
];
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_90001');
}
$recommenderService = new CommonRecommenderService();
// 判断推荐的数据是否已存在
$exists = $recommenderService->getDuplicate(CommonRecommenderModel::TYPE_ARTICLE, $this->_params['app']
, $this->_params['dataId'], $this->_params['dataCategoryId']);
if (!empty($exists)) {
Log::record('数据已被推荐过,忽略再次推荐:app=' . $this->_params['app'] . '; dataId=' . $this->_params['dataId']
. '; dataCategoryId=' . $this->_params['dataCategoryId']);
return $this->_set_error('_ERR_RECOMMENDER_ARTICLE_DUPLICATE_90002');
}
// 用于推荐数据主表的数据
$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' => !empty($this->_params['endTime']) ? $this->_params['endTime'] : 0,
];
// 推荐权限表基础数据
$dataRight = [
'recommender_id' => 0,
'type' => $data['type'],
'displayorder' => 0,
'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);
// 设置其排序号为 ID
$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'] = 0;
Log::record('<!-- 新增推荐数据(失败):');
Log::record(print_r($data, true));
Log::record(print_r($e, true));
Log::record('结束新增推荐数据 -->');
return E(L('_ERR_RECOMMENDER_RPC_ARTICLE_NEW_ERROR_90008'));
}
Log::record('<!-- 新增推荐数据:');
Log::record(print_r($data, true));
Log::record('结束新增推荐数据 -->');
return true;
}
}