FooterService.php 11 KB

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