SuccessCaseService.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: ywl
  5. * Date: 2017/4/14
  6. * Time: 11:38
  7. */
  8. namespace App\Web\Services;
  9. use App\Ad\Facades\SysAdFacade;
  10. use App\Common\Facades\UserCenterFacade;
  11. use App\Exceptions\ApiException;
  12. use App\Services\CommonUserBaseService;
  13. use App\Web\Facades\SuccessCaseFacade;
  14. use App\Web\Facades\HelpFacade;
  15. use App\Web\Facades\WebFacade;
  16. use App\Web\Models\DictFunctionModel;
  17. use App\Web\Models\DictIndustryModel;
  18. use App\Web\Models\SuccessCaseModel;
  19. use App\Web\Models\WebSeoModel;
  20. use App\Web\Models\WebStaticPageModel;
  21. use Illuminate\Support\Facades\Cache;
  22. use Illuminate\Support\Facades\DB;
  23. class SuccessCaseService extends CommonUserBaseService
  24. {
  25. protected $cache = true;
  26. protected $cacheBucket = 'SuccessCase:';
  27. /**
  28. * WebService construct
  29. * @param SuccessCaseModel $model
  30. * */
  31. public function __construct(SuccessCaseModel $model)
  32. {
  33. $this->model = $model;
  34. }
  35. /**
  36. * 保存成功案例数据
  37. * */
  38. public function saveSuccessCase($params){
  39. $saveData=$this->buildSuccessCaseData($params);
  40. $userId=$this->getAuthUserId();
  41. $seoData=empty($params['seo_data'])?[]:$params['seo_data'];
  42. $urlaId=empty($saveData['seo_id'])?0:$saveData['seo_id'];
  43. if(!empty($seoData)){
  44. $urlaUnique = WebFacade::checkUrlaUnique($seoData['urla'],$urlaId);
  45. if (!$urlaUnique) {
  46. throw new ApiException(10019, ['name' => $seoData['urla']]);
  47. }
  48. }
  49. $id = $this->model->saveSuccessCaseData($saveData);
  50. if(!empty($id)){
  51. if(isset($params['seo_data'])){
  52. $seoParams=[];
  53. $seoParams['relation_table']=WebService::RELATION_TABLE_SUCCESS_CASE;
  54. $seoParams['relation_id']=$id;
  55. $seoParams['urla']=$seoData['urla'];
  56. $seoParams['seo_title']=$seoData['seo_title'];
  57. $seoParams['seo_keyword']=$seoData['seo_keyword'];
  58. $seoParams['seo_describe']=$seoData['seo_describe'];
  59. if(empty($urlaId)){
  60. $seoParams['user_id']=$userId;
  61. $urlaId = WebFacade::saveSeoData($seoParams);
  62. $this->model->newInstance()->where('id','=',$id)->update(['seo_id'=>$urlaId]);
  63. }else{
  64. $seoParams['id']=$urlaId;
  65. $urlaId= WebFacade::saveSeoData($seoParams);
  66. }
  67. }
  68. // 获取是否需要修改排序数据
  69. if (isset($saveData['sort'])) {
  70. $getData = $this->model->selectRaw('id')
  71. ->where('sort', '=', $saveData['sort'])
  72. ->where('id', '<>', $id)->first();
  73. if (!empty($getData['id'])) {
  74. $this->model->where('sort','>=',$saveData['sort'])
  75. ->where('id', '<>', $id)
  76. ->update(['sort' => DB::raw('sort + 1')]);
  77. }
  78. }
  79. if(!empty($saveData['status'])&&$saveData['status']==2){
  80. //移除对应seo
  81. $delSeoParams=[];
  82. $delSeoParams['relation_table']=WebService::RELATION_TABLE_SUCCESS_CASE;
  83. $delSeoParams['relation_id']=$id;
  84. $ret = WebFacade::delSeoByRelation($delSeoParams);
  85. }
  86. }
  87. //更新所有页面缓存
  88. WebFacade::clearPageCache('urla:');
  89. return $id;
  90. }
  91. /**
  92. * 构建成功案例保存数据
  93. * */
  94. private function buildSuccessCaseData($params){
  95. $saveData=[];
  96. $userId=$this->getAuthUserId();
  97. $nowTime=nowTime();
  98. $saveData['update_time']=$nowTime;
  99. if(!empty($params['id'])){
  100. $saveData['id']=$params['id'];
  101. if (isset($params['seo_id'])) {
  102. $saveData['seo_id'] = $params['seo_id'];
  103. }
  104. if(isset($params['title'])){
  105. $titleUnique =$this->model->checkTitleUnique($params['title'],$params['id']);
  106. if (!$titleUnique) {
  107. throw new ApiException(10018, ['name' => $params['title']]);
  108. }
  109. $saveData['title']=empty($params['title'])?'':$params['title'];
  110. }
  111. if(isset($params['pub_date'])){
  112. $saveData['pub_date']=empty($params['pub_date'])?null:$params['pub_date'];;
  113. }
  114. if(isset($params['description'])){
  115. $saveData['description']=empty($params['description'])?'':$params['description'];
  116. }
  117. if(isset($params['content'])){
  118. $saveData['content']=empty($params['content'])?'':$params['content'];
  119. }
  120. if(isset($params['image_url'])){
  121. $saveData['image_url']=empty($params['image_url'])?'':$params['image_url'];
  122. }
  123. if(isset($params['image_alt'])){
  124. $saveData['image_alt']=empty($params['image_alt'])?'':$params['image_alt'];
  125. }
  126. if(isset($params['main_image'])){
  127. $saveData['main_image']=empty($params['main_image'])?'':$params['main_image'];
  128. }
  129. if(isset($params['main_image_alt'])){
  130. $saveData['main_image_alt']=empty($params['main_image_alt'])?'':$params['main_image_alt'];
  131. }
  132. if(isset($params['up_data'])){
  133. $saveData['up_data']=empty($params['up_data'])?'':json_encode($params['up_data']);
  134. }
  135. if(isset($params['function_id'])){
  136. $saveData['function_id']=empty($params['function_id'])?0:$params['function_id'];
  137. }
  138. if(isset($params['industry_id'])){
  139. $saveData['industry_id']=empty($params['industry_id'])?0:$params['industry_id'];
  140. }
  141. if(isset($params['company_name'])){
  142. $saveData['company_name']=empty($params['company_name'])?'':$params['company_name'];
  143. }
  144. if(isset($params['company_desc'])){
  145. $saveData['company_desc']=empty($params['company_desc'])?'':$params['company_desc'];
  146. }
  147. if(isset($params['company_logo'])){
  148. $saveData['company_logo']=empty($params['company_logo'])?'':$params['company_logo'];
  149. }
  150. if(isset($params['virtual_view'])){
  151. $saveData['virtual_view']=empty($params['virtual_view'])?0:$params['virtual_view'];
  152. }
  153. if(isset($params['sort'])){
  154. $saveData['sort']=empty($params['sort'])?0:$params['sort'];
  155. }
  156. if(isset($params['status'])){
  157. $saveData['status']=$params['status'];
  158. }
  159. }else{
  160. $titleUnique =$this->model->checkTitleUnique($params['title']);
  161. if (!$titleUnique) {
  162. throw new ApiException(10018, ['name' => $params['title']]);
  163. }
  164. if(empty($params['title'])){
  165. throw new ApiException(11002);
  166. }
  167. if(isset($params['status'])){
  168. $saveData['status']=$params['status'];
  169. }
  170. $saveData['user_id']=$userId;
  171. $saveData['title']=empty($params['title'])?'':$params['title'];
  172. $saveData['pub_date']=empty($params['pub_date'])?null:$params['pub_date'];
  173. $saveData['description']=empty($params['description'])?'':$params['description'];
  174. $saveData['content']=empty($params['content'])?'':$params['content'];
  175. $saveData['image_url']=empty($params['image_url'])?'':$params['image_url'];
  176. $saveData['image_alt']=empty($params['image_alt'])?'':$params['image_alt'];
  177. $saveData['main_image']=empty($params['main_image'])?'':$params['main_image'];
  178. $saveData['main_image_alt']=empty($params['main_image_alt'])?'':$params['main_image_alt'];
  179. $saveData['up_data']=empty($params['up_data'])?'':json_encode($params['up_data']);
  180. $saveData['function_id']=empty($params['function_id'])?0:$params['function_id'];
  181. $saveData['industry_id']=empty($params['industry_id'])?0:$params['industry_id'];
  182. $saveData['company_name']=empty($params['company_name'])?'':$params['company_name'];
  183. $saveData['company_desc']=empty($params['company_desc'])?'':$params['company_desc'];
  184. $saveData['company_logo']=empty($params['company_logo'])?'':$params['company_logo'];
  185. $saveData['virtual_view']=empty($params['virtual_view'])?0:$params['virtual_view'];
  186. $saveData['sort']=empty($params['sort'])?0:$params['sort'];
  187. $saveData['create_time']=$nowTime;
  188. }
  189. return $saveData;
  190. }
  191. /**
  192. * 成功案例列表
  193. * */
  194. public function getSuccessCaseList($params){
  195. $ret=$this->model->getSuccessCaseList($params);
  196. $pageListData=empty($ret['data'])?[]:$ret['data'];
  197. if(!empty($pageListData)){
  198. $ids=array_column($pageListData,'seo_id');
  199. $seoList=[];
  200. if(!empty($ids)){
  201. $seoList=WebFacade:: getSeoListByIds($ids);
  202. if(!empty($seoList)){
  203. $seoList=mapByKey($seoList,'id');
  204. }
  205. }
  206. foreach ($pageListData as &$pageItem){
  207. $pageItem['seo_data']=empty($seoList[$pageItem['seo_id']])?[]:$seoList[$pageItem['seo_id']];
  208. $pageItem['urla']=empty($seoList[$pageItem['seo_id']]['urla'])?'':$seoList[$pageItem['seo_id']]['urla'];
  209. }
  210. }
  211. $ret['data']=$pageListData;
  212. return $ret;
  213. }
  214. /**
  215. * 获取成功案例详情
  216. * */
  217. public function getSuccessCaseInfo($params){
  218. $caseInfo= $this->model->getSuccessCaseInfo($params);
  219. if(!empty($caseInfo)){
  220. if(!empty($caseInfo['seo_id'])){
  221. $caseInfo['seo_data']=WebFacade::getSeoInfo(['id'=>$caseInfo['seo_id']]);
  222. }else{
  223. $caseInfo['seo_data'] = [
  224. 'seo_describe' => '',
  225. 'seo_keyword' => '',
  226. 'seo_title' => '',
  227. 'urla' => ''
  228. ];
  229. }
  230. $caseInfo['up_data']=empty($caseInfo['up_data'])?[]:json_decode($caseInfo['up_data'],true);
  231. }
  232. return $caseInfo;
  233. }
  234. /**
  235. * 新闻排序
  236. */
  237. public function changeSuccessCaseSort($caseId, $sort)
  238. {
  239. $data = [];
  240. $getData = $this->findOneById($caseId, 'id,sort');
  241. if ($sort == 0) { // 置顶
  242. $sortData = $this->findOneBy([
  243. 'sort' => $sort,
  244. 'id' => ['<>', $caseId]
  245. ], 'id');
  246. if (empty($sortData['id'])) {
  247. throw new ApiException(1004, ['msg' => '当前已经是最高一行']);
  248. }
  249. if ($getData['sort'] == 0) {
  250. $this->incrementBy([
  251. 'id' => ['<>', $caseId]
  252. ], 'sort');
  253. } else {
  254. $this->incrementBy([
  255. 'id' => ['<', $caseId]
  256. ], 'sort');
  257. }
  258. $upData['sort']= $sort;
  259. } elseif ($sort == '-1') { // 上移
  260. $upSortData = $this->model->where('sort', '<', $getData['sort'])
  261. ->orderBy('sort', 'desc')->first();
  262. if (empty($upSortData)) {
  263. throw new ApiException(1004, ['msg' => '当前已经是最高一行']);
  264. } else {
  265. $upData = $upSortData->toArray();
  266. }
  267. } elseif ($sort == '+1') { // 下移
  268. $downSortData = $this->model->where('sort', '>', $getData['sort'])
  269. ->orderBy('sort', 'asc')->first();
  270. if (empty($downSortData)) {
  271. throw new ApiException(1004, ['msg' => '当前已经是最后一行']);
  272. } else {
  273. $upData = $downSortData->toArray();
  274. }
  275. }
  276. $data['sort'] = $upData['sort'];
  277. $this->updateBy([
  278. 'sort' => $data['sort']
  279. ], [
  280. 'sort' => $getData['sort']
  281. ]);
  282. $rst = $this->update($caseId, [
  283. 'sort' => $data['sort']
  284. ]);
  285. //更新所有页面缓存
  286. WebFacade::clearPageCache('urla:');
  287. return $rst;
  288. }
  289. /**
  290. * 更新成功案例浏览量
  291. * */
  292. public function upSuccessCasePv($caseId, $value=1) {
  293. if($value>1){
  294. $ret= $this->model->where('id','=',$caseId)->increment('total_view',$value);
  295. $ret= $this->model->where('id','=',$caseId)->increment('virtual_view',$value);
  296. }else{
  297. $totalView = $this->getFieldById('total_view', $caseId);
  298. $value = (($value * -1) > $totalView) ? ($totalView * -1) : $value;
  299. $ret= $this->model->where('id','=',$caseId)->increment('total_view',$value);
  300. }
  301. return $ret;
  302. }
  303. /**
  304. * 获取成功案例详情渲染数据
  305. * */
  306. public function getSuccessCaseRenderData($params){
  307. $caseInfo= $this->model->getSuccessCaseInfo($params);
  308. if(!empty($caseInfo)){
  309. if(!empty($caseInfo['up_data'])){
  310. $caseInfo['up_data']=json_decode($caseInfo['up_data'],true);
  311. }
  312. }
  313. return $caseInfo;
  314. }
  315. /**
  316. * 文章推荐设置
  317. * */
  318. public function handpickSet($params){
  319. $id=empty($params['id'])?0:$params['id'];
  320. $isHandpick=empty($params['is_handpick'])?0:$params['is_handpick'];
  321. $ret= $this->model->where('id', '=', $id)
  322. ->update(['is_handpick' => $isHandpick,'update_time'=>nowTime()]);
  323. //更新所有页面缓存
  324. WebFacade::clearPageCache('urla:');
  325. return $id;
  326. }
  327. }