<?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; } }