123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- <?php
- namespace App\JsonRpc;
- use App\Model\FooterCategory;
- use App\Model\Website;
- use App\Model\FooterContent;
- use App\Model\Web;
- use Hyperf\RpcServer\Annotation\RpcService;
- use App\Tools\Result;
- use Hyperf\DbConnection\Db;
- use PhpParser\Node\Expr\Clone_;
- use Overtrue\Pinyin\Pinyin;
- use function Hyperf\Support\retry;
- use function PHPSTORM_META\type;
- use function PHPUnit\Framework\assertIsNotInt;
- use function PHPUnit\Framework\isNull;
- #[RpcService(name: "FooterService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
- class FooterService implements FooterServiceInterface
- {
- /**
- * 获取底部导航列表
- * @param array $data
- * @return array
- */
- public function getFooterCategory(array $data): array
- {
- $where = ['pid' => 0];
- if(isset($data['website_name'])){
- array_push($where, ['website.website_name','like','%'.$data['website_name'].'%']);
- }
- if(isset($data['name'])){
- array_push($where, ['footer_category.name','like','%'.$data['name'].'%']);
- }
- $query = FooterCategory::query();
- if (!empty($where)) {
- $query->where($where);
- }
- $count = $query->count();
- $rep = $query->leftJoin("website", "website.id", "footer_category.website_id")
- ->select("footer_category.*", "website.website_name", "website.id as website_id")
- ->offset(($data['page'] - 1) * $data['pageSize'])
- ->limit($data['pageSize'])
- ->orderByDesc("updated_at")
- ->get();
-
- // var_dump($where);
- $result = [];
- $result = [
- 'rows'=>$rep,
- 'count'=>$count
- ];
- if(empty($result)){
- return Result::error("没有查到相关数据!");
- }
- return Result::success($result);
- }
- /**
- * 添加底部导航
- * @param array $data
- * @return array
- */
- public function addFooterCategory(array $data): array
- {
- if(empty($data)){
- $result = Website::select('website_name','id')->get();
- }else{
- // 底部导航类型 0:内容型;1:列表型;
- $webid = Website::select('website_name','id')->where('id',$data['website_id'])->first();
- if(empty($webid)){
- return Result::error("该网站不存在!");
- }
- $isChild = 0;
- if(isset($data['is_child']) && !empty($data['is_child']) && $data['is_child'] == 1){
- $child = [
- 'name' => $data['child_name'],
- 'website_id' => $data['website_id'],
- 'type' => 0,
- ];
- $isChild = $data['is_child'];
- unset($data['child_name']);
- unset($data['is_child']);
- }
- // return Result::success($data);
- Db::beginTransaction();
- try{
- // 同一网站下的底部导航名称不能重复
- $name = FooterCategory::where('website_id',$data['website_id'])->where('name',$data['name'])->first();
- if(!empty($name)){
- Db::rollBack();
- return Result::error("该底部导航名称已存在!");
- }
- $pinyin = new Pinyin();
- $data['name_pinyin'] = $pinyin->permalink($data['name'], '') ;
- $result = [];
- $result['parent'] = FooterCategory::insertGetId($data);
- if($isChild == 1){
- $child['pid'] = $result['parent'];
- $child['name_pinyin'] = $pinyin->permalink($child['name'], '');
- // 暂时用不到 若是一个栏目对应多个子级栏目 则需要判断子级栏目名称是否重复
- // $child_name = FooterCategory::where('website_id',$data['website_id'])->where('pid',$child['pid'])->first();
- // if(!empty($child_name)){
- // Db::rollBack();
- // return Result::error("该子级栏目名称已存在!");
- // }
- $result['child'] = FooterCategory::insertGetId($child);
- if(empty($result['child'])){
- Db::rollBack();
- return Result::error("子级栏目添加失败!");
- }
- }
- Db::commit();
- } catch(\Throwable $ex){
- Db::rollBack();
- $errorMessage = $ex->getMessage();
- return Result::error("添加失败!",$errorMessage);
- }
- }
- return Result::success($result);
- }
- /**
- * 修改底部导航
- * @param array $data
- * @return array
- */
- public function upFooterCategory(array $data): array
- {
- $footer_category = FooterCategory::where('id', $data['id'])->first();
- if(empty($footer_category)) {
- return Result::error("该底部导航不存在!");
- }
- if(empty($data['website_id'])){
- $footer_category = FooterCategory::where('footer_category.id',$data['id'])
- ->leftJoin("website","website.id","footer_category.website_id")
- ->select("footer_category.*","website.website_name","website.id as website_id")
- ->first();
- $child = FooterCategory::where('pid',$footer_category['id'])->first();
- if(!empty($child)){
- $footer_category['child_name'] = $child['name'];
- $footer_category['child_id'] = $child['id'];
- $footer_category['is_child'] = 1;
- }else{
- $footer_category['is_child'] = 0;
- }
- $result = [
- 'rows'=>$footer_category,
- ];
- }else{
- $all_categories = FooterCategory::where('website_id',$data['website_id'])->where('id','!=',$data['id'])->pluck('name')->toArray();
- // 检查修改后的数据是否与已有数据重复
- if (in_array($data['name'], $all_categories)) {
- return Result::error("修改后的底部导航名称已存在!");
- }
- $webid = Website::where('id',$data['website_id'])->first();
- if(empty($webid)){
- return Result::error("该网站不存在!");
- }
- $pinyin = new Pinyin();
- $child_data = [];
- $result = [];
- Db::beginTransaction();
- try{
- if(isset($data['is_child']) && $data['is_child']!=''){
- $child = FooterCategory::where('pid',$data['id'])->first();
- if($data['is_child'] == 1){
- if(empty($data['child_name'])){
- Db::rollBack();
- return Result::error("请输入子级栏目名称!");
- var_dump($data['child_name']);
- }
- if(empty($child)){
- $child_data = [
- 'name' => $data['child_name'],
- 'name_pinyin' => $pinyin->permalink($data['child_name'], ''),
- 'website_id' => $data['website_id'],
- 'type' => 0,
- 'pid' => $data['id'],
- ];
- $result['addchild'] = FooterCategory::insertGetId($child_data);
- if(empty($result['addchild'])){
- Db::rollBack();
- return Result::error("子级栏目添加失败!");
- }
- }else{
- $child_data = [
- 'name' => $data['child_name'],
- 'name_pinyin' => $pinyin->permalink($data['child_name'], ''),
- ];
- $result['upchild'] = FooterCategory::where('pid',$data['id'])->update($child_data);
- if(empty($result['upchild'])){
- Db::rollBack();
- return Result::error("子级栏目修改失败!");
- }
- }
- }else{
- if(!empty($child)){
- $result['del_child_content'] = FooterContent::where('fcat_id',$child['id'])->delete();
- $result['delchild'] = FooterCategory::where('pid',$data['id'])->delete();
- if(empty($result['delchild'])) {
- Db::rollBack();
- return Result::error("子级栏目删除失败!");
- }
- }
- }
- unset($data['child_name']);
- unset($data['is_child']);
- $data['name_pinyin'] = $pinyin->permalink($data['name'], '');
- $result['rows'] = FooterCategory::where('id', $data['id'])->update($data);
- if(empty($result['rows'])){
- Db::rollBack();
- return Result::error("栏目修改失败!");
- }
- Db::commit();
- }else{
- return Result::error("请选择是否添加子级栏目!");
- }
- } catch(\Throwable $ex){
- Db::rollBack();
- var_dump($ex->getMessage());
- return Result::error("修改失败!",0);
- }
- }
- if (empty($result)) {
- return Result::error("修改失败!");
- }else{
- return Result::success($result);
- }
-
- }
- /**
- * 删除底部导航
- * @param array $data
- * @return array
- */
- public function delFooterCategory(array $data): array
- {
- Db::beginTransaction();
- try{
- $footer_category = FooterCategory::where('id', $data['id'])->first();
- if (!$footer_category) {
- Db::rollBack();
- return Result::error("该底部导航不存在!");
- }else{
-
- $result['footer_category'] = FooterCategory::where('id', $data['id'])->delete();
- $result['footer_content'] = FooterContent::where('fcat_id', $data['id'])->delete();
- $child = FooterCategory::where('pid', $data['id'])->first();
- if(!empty($child)){
- $result['child'] = FooterCategory::where('pid', $data['id'])->delete();
- $result['child_content'] = FooterContent::where('fcat_id', $child['id'])->delete();
- }
- Db::commit();
- }
-
- } catch(\Throwable $ex){
- Db::rollBack();
- var_dump($ex->getMessage());
- return Result::error("删除失败",0);
- }
- return Result::success($result);
- }
- /**
- * 添加底部导航(列表)内容
- * @param array $data
- * @return array
- */
- public function addFooterContent(array $data): array
- {
- // 底部导航类型 0:内容型;1:列表型;
- // var_dump($data);
- $cat = FooterCategory::where('id', $data['fcat_id'])->first();
- // return Result::success($cat);
- if (!$cat) {
- return Result::error("该底部导航不存在!");
- }
- if($cat['type'] != $data['type_id']){
- return Result::error("请输入正确的底部导航类型!");
- }
- // 内容型底部导航只能有一条内容
- if($cat['type'] == 0){
- $content = FooterContent::where('fcat_id', $data['fcat_id'])->first();
- if(!empty($content)){
- return Result::error("该底部导航已添加内容!");
- }
- }else{
- // 列表型底部导航\列表标头型底部导航列表标题不能重复
- if(!isset($data['list_title']) || empty($data['list_title'])){
- return Result::error("请输入底部导航列表标题!");
- }
- $content = FooterContent::where('fcat_id', $data['fcat_id'])->where('list_title',$data['list_title'])->first();
- if(!empty($content)){
- return Result::error("该列表标题已存在!");
- }
- }
- $result = FooterContent::insertGetId($data);
- if(empty($result)){
- return Result::error("添加失败!");
- }else{
- return Result::success($result);
- }
- }
- /**
- * 获取底部导航(列表)内容
- * @param array $data
- * @return array
- */
- public function getFooterContent(array $data): array
- {
- $where = [];
- $fcat_id = [];
- $footer_category = FooterCategory::where('id', $data['fcat_id'])->first();
- if(empty($footer_category)){
- return Result::error("该底部导航不存在!");
- }
- $footer_category = $footer_category->toArray();
- $fcat_id = $footer_category['id'];
- if($footer_category['type'] == 1){
- if(isset($data['list_title'])){
- array_push($where, ['list_title','like','%'.$data['list_title'].'%']);
- }
- if(isset($data['con_title'])){
- array_push($where, ['con_title','like','%'.$data['con_title'].'%']);
- }
- $child = FooterCategory::where('pid', $data['fcat_id'])->first();
- if($child){
- $fcat_id = [$footer_category['id'], $child->id];
- }
- }
- $count = FooterContent::whereIn('fcat_id', (array)$fcat_id)->where($where)->count();
- $rep = FooterContent::whereIn('fcat_id', (array)$fcat_id)->where($where)
- ->leftJoin('footer_category', 'footer_category.id', '=', 'footer_content.fcat_id')
- ->select('footer_content.*', 'footer_category.type', 'footer_category.name as fcat_name')
- ->limit($data['pageSize'])
- ->offset(($data['page'] - 1) * $data['pageSize'])
- ->orderBy("updated_at", "desc")
- ->get();
- if(empty($rep)){
- return Result::error("没有查到相关数据!");
- }else{
- $result = [
- 'rows' => $rep,
- 'count' => $count
- ];
- return Result::success($result);
- }
- }
- /**
- * 获取某个底部导航(列表)内容
- * @param array $data
- * @return array
- */
- public function getOneFooterContent(array $data): array
- {
- $result = FooterContent::where('footer_content.id', $data['id'])
- ->leftJoin('footer_category','footer_category.id','fcat_id')
- ->select('footer_content.*','footer_category.type','footer_category.pid','footer_category.name as fcat_name')
- ->first();
- if(empty($result)){
- return Result::error("请输入正确的底部导航内容id!");
- }
- return Result::success($result);
- }
- /**
- * 编辑底部导航(列表)内容
- * @param array $data
- * @return array
- */
- public function upFooterContent(array $data): array
- {
- $content = FooterContent::where('footer_content.id', $data['id'])
- ->leftJoin('footer_category','footer_category.id','fcat_id')
- ->select('footer_content.*','footer_category.type','footer_category.id as fcat_id')
- ->first();
- if(!$content){
- return Result::error("该底部导航内容不存在!");
- }
- if($content['type'] != $data['type_id']){
- return Result::error("请输入正确的底部导航类型!");
- }
- if($content['type_id'] == 1){
- if(!isset($data['list_title']) || empty($data['list_title'])){
- return Result::error("请输入底部导航列表标题!");
- }
- $list_title = FooterContent::where('fcat_id', $data['fcat_id'])->where('list_title',$data['list_title'])->first();
- if(!empty($list_title)){
- return Result::error("该列表标题已存在!");
- }
- }
- unset($data['type_id']);
- $result = FooterContent::where('id', $data['id'])->update($data);
- if(empty($result)){
- return Result::error("修改失败!");
- }else{
- return Result::success($result);
- }
- }
- /**
- * 删除底部导航(列表)内容
- * @param array $data
- * @return array
- */
- public function delFooterContent(array $data): array
- {
- $result = FooterContent::where('id', $data['id'])->delete($data);
- if(empty($result)){
- return Result::error("删除失败!");
- }else{
- return Result::success($result);
- }
- }
- }
|