NewsService.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. <?php
  2. namespace App\JsonRpc;
  3. use App\Model\Article;
  4. use App\Model\ArticleData;
  5. use App\Model\Category;
  6. use App\Model\WebsiteCategory;
  7. use App\Tools\PublicData;
  8. use Hyperf\DbConnection\Db;
  9. use Hyperf\RpcServer\Annotation\RpcService;
  10. use App\Tools\Result;
  11. #[RpcService(name: "NewsService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
  12. class NewsService implements NewsServiceInterface
  13. {
  14. /**
  15. * 获取导航池列表
  16. * @param array $data
  17. * @return array
  18. */
  19. public function getCategoryList(array $data): array
  20. {
  21. $where = [];
  22. if(isset($data['name']) && $data['name']){
  23. array_push($where, ['category.name','like','%'.$data['name'].'%']);
  24. }
  25. if(isset($data['department_id']) && $data['department_id']){
  26. array_push($where, ['category.department_id','=',$data['department_id']]);
  27. }
  28. $city_id='';
  29. if(isset($data['city_id']) && $data['city_id']){
  30. $city_id = intval($data['city_id']);
  31. }
  32. $rep = Category::where($where)
  33. ->when($city_id, function ($query) use ($city_id) {
  34. if(isset($city_id) && $city_id) {
  35. $query->whereJsonContains("category.city_arr_id", $city_id);
  36. }
  37. })
  38. ->leftJoin('district','category.city_id','district.id')
  39. ->leftJoin('department','category.department_id','department.id')
  40. ->select("category.*","district.name as city_name","department.name as department_name")
  41. ->limit($data['pageSize'])->orderByDesc('category.updated_at')->offset(($data['page']-1)*$data['pageSize'])->get();
  42. $count = Category::where($where)->when($city_id, function ($query) use ($city_id) {
  43. if(isset($city_id) && $city_id) {
  44. $query->whereJsonContains("category.city_arr_id", $city_id);
  45. }
  46. })->count();
  47. $data = [
  48. 'rows'=>$rep->toArray(),
  49. 'count'=>$count
  50. ];
  51. if(empty($rep->toArray())){
  52. return Result::error("没有导航池数据");
  53. }
  54. return Result::success($data);
  55. }
  56. /**
  57. * @param array $data
  58. * @return array
  59. */
  60. public function categoryList(array $data): array
  61. {
  62. $where[] = [
  63. 'pid','=',$data['pid']
  64. ];
  65. if(isset($data['name'])){
  66. array_push($where, ['category.name','like','%'.$data['name'].'%']);
  67. }
  68. var_dump($where);
  69. $result = Category::where($where)->select('category.*','category.id as category_id')->get();
  70. if(empty($result)){
  71. return Result::error("没有栏目数据");
  72. }
  73. return Result::success($result);
  74. }
  75. /**
  76. * @param array $data
  77. * @return array
  78. */
  79. public function addCategory(array $data): array
  80. {
  81. $id = Category::insertGetId($data);
  82. if(empty($id)){
  83. return Result::error("添加失败");
  84. }
  85. return Result::success(['id'=>$id]);
  86. }
  87. /**
  88. * @param array $data
  89. * @return array
  90. */
  91. public function delCategory(array $data): array
  92. {
  93. $categoryList = Category::where(['pid'=>$data['id']])->get();
  94. var_dump("分类列表:",$data,$categoryList);
  95. if($categoryList->toArray()){
  96. return Result::error("分类下面有子分类不能删除");
  97. }
  98. $articleList = Article::where(['catid'=>$data['id']])->get();
  99. var_dump("文章列表:",$articleList);
  100. if($articleList->toArray()){
  101. return Result::error("分类下面有资讯不能删除");
  102. }
  103. $result = Category::where($data)->delete();
  104. if(!$result){
  105. return Result::error("删除失败");
  106. }
  107. return Result::success($result);
  108. }
  109. /**
  110. * @param array $data
  111. * @return array
  112. */
  113. public function updateCategory(array $data): array
  114. {
  115. $where = [
  116. 'id'=>$data['id']
  117. ];
  118. $result = Category::where($where)->update($data);
  119. if($result){
  120. return Result::success($result);
  121. }else{
  122. return Result::error("更新失败");
  123. }
  124. }
  125. /**
  126. * 获取导航池信息
  127. * @param array $data
  128. * @return array
  129. */
  130. public function getCategoryInfo(array $data): array
  131. {
  132. $where = [
  133. 'id'=>$data['id']
  134. ];
  135. $result = Category::where($where)->first();
  136. if($result){
  137. return Result::success($result);
  138. }else{
  139. return Result::error("更新失败");
  140. }
  141. }
  142. /**
  143. * @param array $data
  144. * @return array
  145. */
  146. public function getArticleList(array $data): array
  147. {
  148. $where= [];
  149. if(isset($data['title']) && $data['title']){
  150. array_push($where,['article.title','like','%'.$data['title'].'%']);
  151. }
  152. if(isset($data['category_name']) && $data['category_name']){
  153. array_push($where,['category.name','like','%'.$data['category_name'].'%']);
  154. }
  155. if(isset($data['author']) && $data['author']){
  156. array_push($where,['article.author','=',$data['author']]);
  157. }
  158. if(isset($data['islink']) && $data['islink']!==""){
  159. array_push($where,['article.islink','=',$data['islink']]);
  160. }
  161. if(isset($data['status']) && $data['status']!==""){
  162. array_push($where,['article.status','=',$data['status']]);
  163. }
  164. $rep = Article::where($where)
  165. ->whereNotIn('article.status',[404])
  166. ->leftJoin('category','article.catid','category.id')
  167. ->select("article.*","category.name as category_name")
  168. ->orderBy("article.id","desc")
  169. ->limit($data['pageSize'])
  170. ->offset(($data['page']-1)*$data['pageSize'])->get();
  171. $count = Article::where($where)->whereNotIn('article.status',[404])
  172. ->leftJoin('category','article.catid','category.id')->count();
  173. $data = [
  174. 'rows'=>$rep->toArray(),
  175. 'count'=>$count
  176. ];
  177. if(empty($rep)){
  178. return Result::error("没有信息数据");
  179. }
  180. return Result::success($data);
  181. }
  182. /**
  183. * @param array $data
  184. * @return array
  185. */
  186. public function addArticle(array $data): array
  187. {
  188. Db::beginTransaction();
  189. try{
  190. $articleData = $data;
  191. unset($articleData['content']);
  192. $articleData['imgurl'] = isset($articleData['imgurl']) && $articleData['imgurl']?PublicData::saveImageUrl($articleData['imgurl']):'';
  193. $id = Article::insertGetId($articleData);
  194. $data['content'] = PublicData::replaceContentImg($data['content']);
  195. $articleDataContent = [
  196. 'article_id'=>$id,
  197. 'content'=>$data['content']
  198. ];
  199. ArticleData::insertGetId($articleDataContent);
  200. Db::commit();
  201. } catch(\Throwable $ex){
  202. Db::rollBack();
  203. var_dump($ex->getMessage());
  204. return Result::error("创建失败",0);
  205. }
  206. return Result::success(['id'=>$id]);
  207. }
  208. /**
  209. * @param array $data
  210. * @return array
  211. */
  212. public function delArticle(array $data): array
  213. {
  214. $result = Article::where($data)->delete();
  215. if(!$result){
  216. return Result::error("删除失败");
  217. }
  218. return Result::success($result);
  219. }
  220. /**
  221. * @param array $data
  222. * @return array
  223. */
  224. public function updateArticle(array $data): array
  225. {
  226. Db::beginTransaction();
  227. try{
  228. $data['cat_arr_id'] = isset($data['cat_arr_id'])?json_encode($data['cat_arr_id']):'';
  229. $data['tag'] = isset($data['tag'])?json_encode($data['tag']):'';
  230. $articleData = $data;
  231. $articleData['imgurl'] = isset($articleData['imgurl']) && $articleData['imgurl']?PublicData::saveImageUrl($articleData['imgurl']):'';
  232. unset($articleData['content']);
  233. unset($articleData['status_name']);
  234. unset($articleData['name']);
  235. unset($articleData['content']);
  236. unset($articleData['pid_arr']);
  237. unset($articleData['pid']);
  238. $id = Article::where(['id'=>$data['id']])->update($articleData);
  239. $data['content'] = PublicData::replaceContentImg($data['content']);
  240. $articleDataContent = [
  241. 'content'=>$data['content']
  242. ];
  243. ArticleData::where(['article_id'=>$data['id']])->update($articleDataContent);
  244. } catch(\Throwable $ex){
  245. Db::rollBack();
  246. var_dump($ex->getMessage());
  247. return Result::error("更新失败",0);
  248. }
  249. return Result::success([]);
  250. }
  251. /**
  252. * 更新资讯状态
  253. * @param array $data
  254. * @return array
  255. */
  256. public function upArticleStatus(array $data):array
  257. {
  258. $result = Article::where(['id'=>$data['id']])->update($data);
  259. if($result){
  260. return Result::success();
  261. }else{
  262. return Result::error("更新状态失败",0);
  263. }
  264. }
  265. /**
  266. * @param array $data
  267. * @return array
  268. */
  269. public function getArticleInfo(array $data): array
  270. {
  271. $where = [
  272. 'article.id'=>$data['id']
  273. ];
  274. $result = Article::where($where)->leftJoin("article_data","article.id","article_data.article_id")->first();
  275. if($result){
  276. $result = $result->toArray();
  277. $result['imgurl'] = isset($result['imgurl']) && $result['imgurl']?PublicData::getImageUrl($result['imgurl']):'';
  278. $result['content'] = isset($result['content']) && $result['content']?PublicData::completionContentImg($result['content']):'';
  279. return Result::success($result);
  280. }else{
  281. return Result::error("查询失败",0);
  282. }
  283. }
  284. /**
  285. * 获取新闻
  286. * @param array $data
  287. * @return array
  288. */
  289. public function getWebsiteArticlett(array $data): array
  290. {
  291. $category = WebsiteCategory::where('website_id',$data['website_id'])->select('category_id')->get();
  292. $category = $category->toArray();
  293. $result= [];
  294. if($category){
  295. $category_ids = [];
  296. foreach($category as $val){
  297. array_push($category_ids,$val['category_id']);
  298. }
  299. if(isset($data['placeid'])){
  300. $placeid=$data['placeid']-1;
  301. $result=Article::where('status',1)->where('level',$data['level'])->whereIn("catid",$category_ids)->orderBy("created_at","desc")->offset($placeid)->limit($data['pageSize'])->get();
  302. }else{
  303. $result=Article::where('status',1)->where('level',$data['level'])->whereIn("catid",$category_ids)->orderBy("created_at","desc")->offset(0)->limit($data['pageSize'])->get();
  304. }
  305. if(empty($result)){
  306. return Result::error("暂无头条新闻",0);
  307. }
  308. return Result::success($result);
  309. }else{
  310. return Result::error("本网站下暂无相关栏目",0);
  311. }
  312. }
  313. /**
  314. * 获取模块新闻
  315. * @param array $data
  316. * @return array
  317. */
  318. public function getWebsiteModelArticles(array $data): array
  319. {
  320. $catid=$data['catid'];
  321. $category = WebsiteCategory::where('website_id',$data['website_id'])->where('category_id',$catid)->select('category_id')->get();
  322. $category = $category->toArray();
  323. if(!empty($category)){
  324. $where=[
  325. 'status' => 1,
  326. 'catid' => $catid
  327. ];
  328. if($data['level']==1){
  329. $level=[
  330. 0=>'1',
  331. 1=>'4',
  332. 2=>'5'
  333. ];
  334. $result = Article::where($where)->whereIn('level',$level)->orderBy("created_at","desc")->limit($data['pagesize'])->get();
  335. }elseif($data['level']==2){
  336. $level='2';
  337. $result = Article::where($where)->where('level',$level)->orderBy("created_at","desc")->limit($data['pagesize'])->get();
  338. }else{
  339. $level='3';
  340. $result = Article::where($where)->where('level',$level)->orderBy("created_at","desc")->limit($data['pagesize'])->get();
  341. }
  342. $result= $result->toArray();
  343. if(!empty($result) && isset($data['placeid']) && !empty($data['placeid'])){
  344. $placeid=$data['placeid']-1;
  345. if($level==2 || $level==3){
  346. $where =[
  347. 'level' => $level
  348. ];
  349. $result = Article::where($where)
  350. ->orderBy("created_at","desc")
  351. ->offset($placeid)
  352. ->limit($data['pagesize'])->get();
  353. }else{
  354. $result = Article::where($where)
  355. ->whereIn('level',$level)
  356. ->offset($placeid)
  357. ->orderBy("created_at","desc")
  358. ->limit($data['pagesize'])->get();
  359. }
  360. }
  361. if(empty($result)){
  362. return Result::error("此栏目暂无相关新闻",0);
  363. }
  364. }else{
  365. return Result::error("此网站暂无此栏目",0);
  366. }
  367. return Result::success($result);
  368. }
  369. }