FooterService.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. <?php
  2. namespace App\JsonRpc;
  3. use App\Model\FooterCategory;
  4. use App\Model\Website;
  5. use App\Model\FooterContent;
  6. use App\Model\Web;
  7. use Hyperf\RpcServer\Annotation\RpcService;
  8. use App\Tools\Result;
  9. use Hyperf\DbConnection\Db;
  10. use PhpParser\Node\Expr\Clone_;
  11. use Overtrue\Pinyin\Pinyin;
  12. #[RpcService(name: "FooterService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
  13. class FooterService implements FooterServiceInterface
  14. {
  15. /**
  16. * 获取底部导航
  17. * @param array $data
  18. * @return array
  19. */
  20. public function getFooterCategory(array $data): array
  21. {
  22. $where = [];
  23. if(isset($data['website_name'])){
  24. array_push($where, ['website.website_name','like','%'.$data['website_name'].'%']);
  25. }
  26. if(isset($data['name'])){
  27. array_push($where, ['footer_category.name','like','%'.$data['name'].'%']);
  28. }
  29. $query = FooterCategory::leftJoin("website", "website.id", "footer_category.website_id")
  30. ->select("footer_category.*", "website.website_name", "website.id as website_id");
  31. if (!empty($where)) {
  32. $query->where($where);
  33. }
  34. $count = $query->count();
  35. $rep = $query->offset(($data['page'] - 1) * $data['pageSize'])
  36. ->limit($data['pageSize'])
  37. ->orderByDesc("updated_at")
  38. ->get();
  39. // var_dump($where);
  40. $result = [];
  41. $result = [
  42. 'rows'=>$rep,
  43. 'count'=>$count
  44. ];
  45. if(empty($result)){
  46. return Result::error("没有查到相关数据!");
  47. }
  48. return Result::success($result);
  49. }
  50. /**
  51. * 添加底部导航
  52. * @param array $data
  53. * @return array
  54. */
  55. public function addFooterCategory(array $data): array
  56. {
  57. if(empty($data)){
  58. $result = Website::select('website_name','id')->get();
  59. }else{
  60. // 底部导航类型 0:内容型;1:列表型;
  61. $webid = Website::select('website_name','id')->where('id',$data['website_id'])->first();
  62. if(empty($webid)){
  63. return Result::error("该网站不存在!");
  64. }
  65. Db::beginTransaction();
  66. try{
  67. // 同一网站下的底部导航名称不能重复
  68. $name = FooterCategory::where('website_id',$data['website_id'])->where('name',$data['name'])->first();
  69. if(!empty($name)){
  70. return Result::error("该底部导航名称已存在!");
  71. }
  72. $pinyin = new Pinyin();
  73. $result = FooterCategory::insertGetId($data);
  74. $name_pinyin['name_pinyin'] = $pinyin->permalink($data['name'], '') ;
  75. // return Result::success($name_pinyin);
  76. $result = FooterCategory::where('id', $result)->update($name_pinyin);
  77. Db::commit();
  78. } catch(\Throwable $ex){
  79. Db::rollBack();
  80. $errorMessage = $ex->getMessage();
  81. return Result::error("添加失败!",$errorMessage);
  82. }
  83. }
  84. if(empty($result)){
  85. return Result::error("添加失败!");
  86. }else{
  87. return Result::success($result);
  88. }
  89. }
  90. /**
  91. * 修改底部导航
  92. * @param array $data
  93. * @return array
  94. */
  95. public function upFooterCategory(array $data): array
  96. {
  97. $footer_category = FooterCategory::where('id', $data['id'])->first();
  98. if(empty($footer_category)) {
  99. return Result::error("该底部导航不存在!");
  100. }
  101. if(empty($data['website_id'])){
  102. $web = Website::select('website_name','id')->get();
  103. $footer_category = FooterCategory::where('footer_category.id',$data['id'])
  104. ->leftJoin("website","website.id","footer_category.website_id")
  105. ->select("footer_category.*","website.website_name","website.id as website_id")
  106. ->first();
  107. if(isset($data['name'])){
  108. $footer_category['name'] = $data['name'];
  109. }
  110. $result = [
  111. 'rows'=>$footer_category,
  112. 'web'=>$web
  113. ];
  114. }else{
  115. $all_categories = FooterCategory::where('website_id',$data['website_id'])->where('id','!=',$data['id'])->pluck('name')->toArray();
  116. // 检查修改后的数据是否与已有数据重复
  117. if (in_array($data['name'], $all_categories)) {
  118. return Result::error("修改后的底部导航名称已存在!");
  119. }
  120. $webid = Website::where('id',$data['website_id'])->first();
  121. if(empty($webid)){
  122. return Result::error("该网站不存在!");
  123. }
  124. $pinyin = new Pinyin();
  125. $data['name_pinyin'] = $pinyin->permalink($data['name'], '');
  126. $result = FooterCategory::where('id', $data['id'])->update($data);
  127. }
  128. if (empty($result)) {
  129. return Result::error("修改失败!");
  130. }else{
  131. return Result::success($result);
  132. }
  133. }
  134. /**
  135. * 删除底部导航
  136. * @param array $data
  137. * @return array
  138. */
  139. public function delFooterCategory(array $data): array
  140. {
  141. Db::beginTransaction();
  142. try{
  143. $footer_category = FooterCategory::where('id', $data['id'])->first();
  144. if (!$footer_category) {
  145. Db::rollBack();
  146. return Result::error("该底部导航不存在!");
  147. }else{
  148. $result['footer_category'] = FooterCategory::where('id', $data['id'])->delete();
  149. $result['footer_content'] = FooterContent::where('fcat_id', $data['id'])->delete();
  150. Db::commit();
  151. // $result = FooterCategory::where('footer_category.id',$data['id'])
  152. // ->leftJoin("footer_content","footer_content.fcat_id","footer_category.id")
  153. // ->delete();
  154. }
  155. } catch(\Throwable $ex){
  156. Db::rollBack();
  157. var_dump($ex->getMessage());
  158. return Result::error("删除失败",0);
  159. }
  160. return Result::success($result);
  161. }
  162. /**
  163. * 添加底部导航(列表)内容
  164. * @param array $data
  165. * @return array
  166. */
  167. public function addFooterContent(array $data): array
  168. {
  169. // 底部导航类型 0:内容型;1:列表型;
  170. // var_dump($data);
  171. $cat = FooterCategory::where('id', $data['fcat_id'])->first();
  172. if (!$cat) {
  173. return Result::error("该底部导航不存在!");
  174. }
  175. if($cat['type'] != $data['type']){
  176. return Result::error("请输入正确的底部导航类型!");
  177. }
  178. if($cat['type'] == 0){
  179. $content = FooterContent::where('fcat_id', $data['fcat_id'])->first();
  180. if(!empty($content)){
  181. return Result::error("该底部导航已添加内容!");
  182. }
  183. }else{
  184. // return Result::success($data);
  185. if(!isset($data['list_title']) || empty($data['list_title'])){
  186. return Result::error("请输入底部导航列表标题!");
  187. }
  188. $content = FooterContent::where('fcat_id', $data['fcat_id'])->where('list_title',$data['list_title'])->first();
  189. if(!empty($content)){
  190. return Result::error("该列表标题已存在!");
  191. }
  192. }
  193. unset($data['type']);
  194. $result = FooterContent::insertGetId($data);
  195. if(empty($result)){
  196. return Result::error("添加失败!");
  197. }else{
  198. return Result::success($result);
  199. }
  200. }
  201. /**
  202. * 获取底部导航(列表)内容
  203. * @param array $data
  204. * @return array
  205. */
  206. public function getFooterContent(array $data): array
  207. {
  208. $where = [];
  209. array_push($where, ['fcat_id',$data['fcat_id']]);
  210. $type = FooterCategory::where('id', $data['fcat_id'])->value('type');
  211. // return Result::success($type);
  212. if($type == 1){
  213. if(isset($data['list_title'])){
  214. array_push($where, ['list_title','like','%'.$data['list_title'].'%']);
  215. }
  216. if(isset($data['con_title'])){
  217. array_push($where, ['con_title','like','%'.$data['con_title'].'%']);
  218. }
  219. var_dump($where);
  220. }
  221. // return Result::success($where);
  222. $query = FooterContent:: leftJoin('footer_category','footer_category.id','fcat_id')
  223. ->select('footer_content.*','footer_category.type');
  224. $count = $query->where($where)->count();
  225. $rep = $query->where($where)
  226. ->limit($data['pageSize'])
  227. ->offset(($data['page']-1)*$data['pageSize'])
  228. ->orderBy("updated_at","desc")
  229. ->get();
  230. if(empty($rep)){
  231. return Result::error("没有查到相关数据!");
  232. }else{
  233. $result = [
  234. 'rows'=>$rep,
  235. 'count'=>$count
  236. ];
  237. return Result::success($result);
  238. }
  239. }
  240. /**
  241. * 获取某个底部导航(列表)内容
  242. * @param array $data
  243. * @return array
  244. */
  245. public function getOneFooterContent(array $data): array
  246. {
  247. $result = FooterContent::where('footer_content.id', $data['id'])
  248. ->leftJoin('footer_category','footer_category.id','fcat_id')
  249. ->select('footer_content.*','footer_category.type')
  250. ->first();
  251. if(empty($result)){
  252. return Result::error("请输入正确的底部导航内容id!");
  253. }else{
  254. return Result::success($result);
  255. }
  256. }
  257. /**
  258. * 编辑底部导航(列表)内容
  259. * @param array $data
  260. * @return array
  261. */
  262. public function upFooterContent(array $data): array
  263. {
  264. $content = FooterContent::where('footer_content.id', $data['id'])
  265. ->leftJoin('footer_category','footer_category.id','fcat_id')
  266. ->select('footer_content.*','footer_category.type','footer_category.id as fcat_id')
  267. ->first();
  268. if(!$content){
  269. return Result::error("该底部导航内容不存在!");
  270. }
  271. if($content['type'] != $data['type']){
  272. return Result::error("请输入正确的底部导航类型!");
  273. }
  274. if($content['type'] == 1){
  275. if(!isset($data['list_title']) || empty($data['list_title'])){
  276. return Result::error("请输入底部导航列表标题!");
  277. }
  278. $list_title = FooterContent::where('id','!=',$data['id'])->where('fcat_id', $content['fcat_id'])->where('list_title',$data['list_title'])->first();
  279. if(!empty($list_title)){
  280. return Result::error("该列表标题已存在!");
  281. }
  282. }
  283. unset($data['type']);
  284. $result = FooterContent::where('id', $data['id'])->update($data);
  285. if(empty($result)){
  286. return Result::error("修改失败!");
  287. }else{
  288. return Result::success($result);
  289. }
  290. }
  291. /**
  292. * 删除底部导航(列表)内容
  293. * @param array $data
  294. * @return array
  295. */
  296. public function delFooterContent(array $data): array
  297. {
  298. $result = FooterContent::where('id', $data['id'])->delete($data);
  299. if(empty($result)){
  300. return Result::error("删除失败!");
  301. }else{
  302. return Result::success($result);
  303. }
  304. }
  305. }