尧图网络科技 Logo 尧图网络科技
  • 首页
  • 关于我们
  • 建站服务
  • UI 设计
  • 案例展示
  • SEO 优化
  • 资讯中心
  • 联系我们

资讯详情

深度解读 · 专业分析

  • 首页
  • 资讯中心
  • /
  • 旅游攻略页详解

最新资讯

  • 全部资讯
  • 行业动态
  • UI 设计
  • SEO 优化
  • 网站开发

旅游攻略页详解

📅 发布时间:2026/8/10 20:26:16 👁 浏览次数:
旅游攻略页详解

旅游攻略页详解

需求分析

1.排行榜页的显示

2.排行榜的定期更新

3.主题推荐

4.旅游攻略导航

第一部分(排行榜页的显示)

image

在前端就可以看到需要的攻略一共有三个,海外,国内和热门,需要用一个type字段来区分,然后根据浏览数去排序就好了,具体的排序依据还要看到时候的业务需要

依旧是f12起手去看接口

image

非常的明显的一个rank字样代表排行榜,对应的是StrategyRanks中的rank方法,传了一个type参数,发送请求的是get方法

接下来确定返回值类型,这个需要去前端看

  <div class="nav-title"><h3>海外攻略推荐排行</h3><b class="gn-arrow"></b></div><div class="nav-panel rank-panel"><ol><li v-for="(item, index) in rankList1" :key="item.id"><em class="rank-num">{{ index + 1 }}</em><strong><a :href="`/destination/details/${item.destId}`" target="_blank">{{ item.destName }}</a></strong><a :href="`/strategy/article/${item.strategyId}`" target="_blank">{{ item.strategyTitle }}</a></li></ol></div></div>const rankList1 = ref([])
const rankList2 = ref([])
const rankList3 = ref([])
const themeList = ref([])onMounted(() => {nextTick(() => {getBannerStrategy()getStrategtRank(1)getStrategtRank(2)getStrategtRank(3)getStrategyTheme()})

从这段代码中可以看出前端需要的是一个可以遍历的list,需要的数据是item.后面的字段名,rank表中的数据完全符合,直接返回List<>泛型里面装一个rank的实体类,然后参数type是用直接传的方式,我们直接在参数列表去接,这样controller中的代码就可以确定了,能copy的就不要手搓,不然敲错了是真的难受

 @GetMapping("/rank")public R<List<StrategyRank>> rank(Long type) {return R.ok(strategyRankService.queryRank(type));}

下面去业务层,前端传来了一个用来确定状态(海外,国内,热门)的type,直接使用条件构造器首先根据type查询然后,然后根据statisnum字段进行降序排序,这里需要注意的是我们的需求二存在更新排行耪一说,所以我们需要加入对最新时间的筛选,代码如下

 //切记insql中的字段是数据库的字段而不是实体类中的数据,不要敲错了return lambdaQuery().inSql(StrategyRank::getStatisTime, "select max(statis_time) from ta_strategy_rank ").eq(StrategyRank::getType, type).orderByDesc(StrategyRank::getStatisnum).last("limit 10").list();

这样就可以成功查询排行榜内容并进行显示了,效果如下

image

第二部分(排行榜的定期更新)

本节的定期更新涉及定时任务

image

在若依的后端管理系统可以看到有一个已经写好的定时任务的模块,可以在里面添加定时任务

image

我们只需要在该页面完成各项的添加,便能在定时任务的界面随时控制定时任务的开关,最关键的便是添加方法,这是后端要去做的

在项目中定时任务一定是有一个专属的服务去完成的,我们本部分想要做的是排行榜的定时更新,也就是将排行榜的更新作为定时任务,我们需要去完成这个定时更新

在完成顺序上个人建议是一定要最后写业务逻辑,先要让这个方法调用能通,如果一下子全写完报错的话会无从下手的

第一步,远程接口中定义对应的远程调用接口,更新不需要返回数据,也没有什么参数,唯一需要的只有请求来源,放在请求头中,用于区分你的请求是从哪里来的,接口代码如下

 @PostMapping("/strategies/feign/statisRank")R<?> statisRank(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);

每写一个这种远程调用的接口都需要一个降级类,就是当你这个接口调用失败之后,会作何处理的类,不写的话,降级类(fallback)会报错的,这个写起来也简单,只要去降级类实现对应的方法即可

  @Overridepublic R<?> statisRank(String source) {return R.fail(Lists.newArrayList(), "查询攻略排行失败:" + throwable.getMessage());}

这样远程调用的接口部分就写好了

第二步,完成排行榜服务的接口和业务(测试版)

根据上面的远程调用接口直接复制,加一个private权限修饰符,完成方法体,调用service去完成对应的更新方法即可controller接口如下

  @PostMapping("/feign/statisRank")public R<?> statisRank(){strategyService.queryRank();return R.ok();};

然后去实现queryRank()方法,这里简单写一个打印的操作,一会儿测试一下是否能通

第三步,在定时任务服务中创建我们对应的任务类,然后添加注解@Component(对应的任务名,首字母小写),最后写方法(权限修饰符是public,不然别人读不到了),这里要用我们远程调用接口写的方法,所以需要添加依赖,然后把接口注入去调用对应的方法

@Component("strategyTask")
public class StrategyTask {@Autowiredprivate RemoteStrategyService remoteStrategyService;public void statisRank(){remoteStrategyService.statisRank("inner");}
}

接下来去后端管理系统中做一个测试,写法如图所示,然后在管理界面把启动按钮打开

image
image

在后端的控制台中看到结果成功显示,说明我们的定时任务已经通了,可以成功调用更新方法,接下来就是最后一步,完成排行榜更新业务

image

再次看这个排行榜,本身的数据是从rank表取出来的,但是更新的数据是从攻略表取出来的,因为排行榜本身的数据就是从攻略表排序取出来的,接下来我们来厘清一下思路,首先确定rank表需要的数据,然后从攻略表按条件查询,最后从查到的每条数据中把rank表需要的数据填满即可。接下来看看代码

 Date now = new Date();//查国外List<Strategy> abroadList = lambdaQuery().eq(Strategy::getIsabroad, 1).orderByDesc(Strategy::getViewnum).last("limit 10").list();List<StrategyRank> abroadRank = new ArrayList<>();addRank(abroadList, now,abroadRank,1L);//查国内List<Strategy> domesticList = lambdaQuery().eq(Strategy::getIsabroad, 0).orderByDesc(Strategy::getViewnum).last("limit 10").list();List<StrategyRank> domesticRank = new ArrayList<>();addRank(domesticList, now,domesticRank,2L);//查热门List<Strategy> hotList = lambdaQuery().orderByDesc(Strategy::getViewnum).last("limit 10").list();List<StrategyRank> hotRank = new ArrayList<>();addRank(hotList, now,hotRank,3L);}@Overridepublic List<ThemeVo> queryTheme() {QueryWrapper<Strategy> queryWrapper = new QueryWrapper<>();queryWrapper.groupBy("theme_name");queryWrapper.select(" theme_name themeName, GROUP_CONCAT(DISTINCT dest_name) names,GROUP_CONCAT(DISTINCT dest_id) ids");List<Map<String, Object>> mapList = baseMapper.selectMaps(queryWrapper);List<ThemeVo> themeVoList = new ArrayList<>();for(Map<String, Object> map : mapList){String  themeName = (String) map.get("themeName");String ids = (String) map.get("ids");String names = (String) map.get("names");String[] namearr = names.split(",");String[] idarr = ids.split(",");List<Destination> dests = new ArrayList<>();for(int i = 0;i<namearr.length;i++){Long id= Long.parseLong(idarr[i]);String name = namearr[i];Destination destination = new Destination();destination.setId(id);destination.setName(name);dests.add(destination);}ThemeVo themeVo = new ThemeVo(themeName, dests);themeVoList.add(themeVo);}return themeVoList;}

这里因为进行补全数据的时候代码操作是一摸一样的,所以把代码提取出来共用了

第三部分(主题推荐)

相关新闻

2026汕头卫生间漏水避坑指南 - 企业资讯

2026汕头卫生间漏水避坑指南 - 企业资讯

2026/8/10 20:24:58 查看详情
解锁Spotify高清视频:用Votify下载1080P音乐MV的完整教程

解锁Spotify高清视频:用Votify下载1080P音乐MV的完整教程

2026/8/10 20:24:58 查看详情
大兴安岭地区提示工程师去哪报名正规?中山优才教育避坑指南 - 人工智能报名机构推荐

大兴安岭地区提示工程师去哪报名正规?中山优才教育避坑指南 - 人工智能报名机构推荐

2026/8/10 20:24:58 查看详情
2026年找靠谱系统门窗公司看什么指标?墨派森集团 - 品牌优推

2026年找靠谱系统门窗公司看什么指标?墨派森集团 - 品牌优推

2026/8/10 21:33:05 查看详情
React-multistep高级技巧:实现条件步骤与复杂流程控制

React-multistep高级技巧:实现条件步骤与复杂流程控制

2026/8/10 21:33:05 查看详情
广州越秀网络文化经营备案公司口碑好测评实录:本地服务机构口碑对比与挑选指南 - GrowthUME

广州越秀网络文化经营备案公司口碑好测评实录:本地服务机构口碑对比与挑选指南 - GrowthUME

2026/8/10 21:33:05 查看详情
终极教程:使用samba-documents-provider实现Android设备无缝访问Samba共享

终极教程:使用samba-documents-provider实现Android设备无缝访问Samba共享

2026/8/10 21:33:05 查看详情
Pangolin与MultiMolecule生态:一站式RNA分析工具链搭建指南

Pangolin与MultiMolecule生态:一站式RNA分析工具链搭建指南

2026/8/10 21:33:05 查看详情
打破硬件限制:OpenCore Legacy Patcher让老Mac重获新生的完整指南

打破硬件限制:OpenCore Legacy Patcher让老Mac重获新生的完整指南

2026/8/10 21:32:15 查看详情
BepInEx配置管理器:游戏插件配置的终极可视化解决方案

BepInEx配置管理器:游戏插件配置的终极可视化解决方案

2026/8/10 0:00:35 查看详情
2026年兰州成套电竞酒店家具工厂怎么选择(附居易风电竞酒店家具(兰州联络处)) - 热点品牌推荐

2026年兰州成套电竞酒店家具工厂怎么选择(附居易风电竞酒店家具(兰州联络处)) - 热点品牌推荐

2026/8/10 0:00:53 查看详情
覆盖广州全域搬家服务 到家兄弟搬家一站式解决各类搬迁难题 - 到家兄弟搬家

覆盖广州全域搬家服务 到家兄弟搬家一站式解决各类搬迁难题 - 到家兄弟搬家

2026/8/10 0:00:53 查看详情
[具身智能-806]:全自主移动机器人完整链路解析:从AI导航决策到机械运动落地的分层工作原理。

[具身智能-806]:全自主移动机器人完整链路解析:从AI导航决策到机械运动落地的分层工作原理。

2026/8/10 5:02:13 查看详情
单臂路由技术解析与VLAN间通信实战

单臂路由技术解析与VLAN间通信实战

2026/8/10 4:38:48 查看详情
Netty带宽饱和场景下的连接处理优化方案

Netty带宽饱和场景下的连接处理优化方案

2026/8/10 5:04:35 查看详情
飞书AI团队协作效能评估报告(2024Q2独家数据):TOP10企业已启用「AI协作健康度」仪表盘

飞书AI团队协作效能评估报告(2024Q2独家数据):TOP10企业已启用「AI协作健康度」仪表盘

2026/8/9 21:22:04 查看详情
当AI成为你的专属音乐制作人:SongGeneration如何重塑创作边界

当AI成为你的专属音乐制作人:SongGeneration如何重塑创作边界

2026/8/10 20:12:58 查看详情
回收苹果手机哪个平台靠谱?从资质到报价全维度测评 - 甄选测评馆

回收苹果手机哪个平台靠谱?从资质到报价全维度测评 - 甄选测评馆

2026/8/10 20:13:06 查看详情

关于尧图

立足北京本地的一站式网站建设服务与设计教学平台,深耕企业网站定制开发、全网 SEO 优化及网络推广服务。

快速链接

  • 关于我们
  • 建站服务
  • 案例展示
  • 资讯中心

服务项目

  • 企业官网定制
  • UI 界面设计
  • SEO 优化推广
  • 移动端适配

联系方式

电话:400-XXX-XXXX

邮箱:info@zskr.cn

地址:北京市朝阳区 XXX 路 XX 号

© 2026 尧图网络科技 版权所有 | 京 ICP 备 XXXXXXXX 号