苍穹外卖开发心得(下)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 苍穹外卖开发心得(下)

苍穹外卖开发心得(上):https://developer.aliyun.com/article/1548478


微信小程序

https://mp.weixin.qq.com/cgi-bin/wx?token=&lang=zh_CN

本套教程需要再详情中将基础库改为2.7以下版本

  • 防止请求发送不出去

拦截器配置

registry.addInterceptor(jwtTokenAdminInterceptor)
        // 要拦截的网址
        .addPathPatterns("/user/**")
        // 要排除的网址
        .excludePathPatterns("/user/user/login")

配置类注解 @Configuration

开发的顺序

开发新增接口时注意这个新增是不是需要查询别的东西之类的,如果需要,那将很难进行测试

分页查询PageHelper

在进行数据库查询前,调用 PageHelper.startPage(pageNum, pageSize) 方法来开启分页功能。其中,pageNum 表示页码,pageSize 表示每页显示的记录数。执行完查询操作后,会自动进行分页,无需手动处理。


使用reids来进行缓存数据

/**
     * 根据分类id查询菜品
     *
     * @param categoryId
     * @return
     */
    // @GetMapping("/list")
    // @ApiOperation("根据分类id查询菜品")
    // public Result<List<DishVO>> list(Long categoryId) {
    //     Dish dish = new Dish();
    //     dish.setCategoryId(categoryId);
    //     dish.setStatus(StatusConstant.ENABLE);//查询起售中的菜品
    //
    //     List<DishVO> list = dishService.listWithFlavor(dish);
    //
    //     return Result.success(list);
    // }
    /* 进行接口改造,使得能存放进redis中 */
    @GetMapping("/list")
    @ApiOperation("根据分类id查询菜品")
    public Result<List<DishVO>> list(Long categoryId) {
        // 构造redis中的key dish_分类id
        String key="dish_"+categoryId;
        // 先查找redis中是否存在菜品数据 此处数据类型和存放进去的数据类型一致
        List<DishVO> list =(List<DishVO>) redisTemplate.opsForValue().get(key);
        if (list!=null &&list.size()>0){
        //     直接返回内容无需查询数据库
            return Result.success(list);
        }
        Dish dish = new Dish();
        dish.setCategoryId(categoryId);
        dish.setStatus(StatusConstant.ENABLE);//查询起售中的菜品
        /* 如果不存在,查询数据库,将查询道德数据放入reids中 */
        list = dishService.listWithFlavor(dish);
        redisTemplate.opsForValue().set(key,list);
        return Result.success(list);
    }

增删改查启停售都需要清除缓存

@PostMapping
    @ApiOperation("新增菜品")
    public Result<String> save(@RequestBody DishDTO dishDTO){
        log.info("新增菜品:{}", dishDTO);
        dishService.saveWithFlavor(dishDTO);
        return Result.success();
    }
/* 清理缓存数据 */
        String  key ="dish_"+dishDTO.getCategoryId();

Spring Cache

  • 一个款框架,能便捷的实现缓存功能还能便捷的切换基础

/* spel表达式来动态获取key */
@PostMapping
// @CachePut(cacheNames="userCache",key="#user.id") //如果使用spring cache缓存数据,key的生成:userCache::abc】
// @CachePut(cacheNames="userCache",key="#result.id")
// @CachePut(cacheNames="userCache",key="#p0.id")
// @CachePut(cacheNames="userCache",key="#a0.id")
// @CachePut(cacheNames="userCache",key="#root.args[0].id")
public User save(@RequestBody User user){
    userMapper.insert(user);
    return user;
}


程序入口

  • 在这里进行配置

使用静态方法来管理当前数据

  • 需求:购物车删除菜品的时候需要知道这个人的id,新增菜品的时候也是这样,不同人有不同的id,这时候将id用静态方法来管理获得,比较合适

编写类似一下的工具类

package com.sky.context;
public class BaseContext {
    public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();
    public static void setCurrentId(Long id) {
        threadLocal.set(id);
    }
    public static Long getCurrentId() {
        return threadLocal.get();
    }
    public static void removeCurrentId() {
        threadLocal.remove();
    }
}

使用内网穿透工具将本地ip映射到网络上

Spring Task

  • 一个定时处理

cron表达式

  • 日和周两个有一个就好,因为会比较容易冲突
  • 可是使用生成器自动生成

使用的方式:

一、在启动类上面加上

@EnableScheduling//开启任务调度

项目的用户下单需求分析

  • 下单后一直没有支付,每隔一分钟去检查一次订单的情况
  • 派送完成但用户一直没有点击收到订单,这种情况打烊后一段时间去检查订单的情况

Apache ECharts

  • 一个功能强大灵活易用的数据可视化工具

Apache POI

  • 一个处理office各种文件格式中的开源项目

  • 遇到创建的表格比较复杂的时候可以先把表格样式弄出来

前端开发

## 使用vue-cli脚手架来创建工程

https://so.csdn.net/so/search?spm=1000.2115.3001.4498&q=%E4%BD%BF%E7%94%A8vue%E8%84%9A%E6%89%8B%E6%9E%B6%E5%88%9B%E5%BB%BA%E9%A1%B9%E7%9B%AE&t=&u=

Vue的基本复习

  • 插值的用法
<template>
  <div class="hello">
    <h1>{{ name }}</h1>
    <h1>{{ age > 40 ? '老奶' : '青年' }}</h1>
  </div>
</template>
<script>
export default {
  data() {
    return {
      name: '张三',
      age: '30'
    }
  }
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped></style>
//上面的标题会变成下面的张三,而另一个年龄会变成老年。如此做判断的
属性绑定

  • 这种时候想要展示data区域的name属性的值,需要使用属性绑定
简写

事件绑定

双向绑定

条件渲染

跨域问题

  • 配置代理后需要重启服务才能生效
axios统一调用方式发送请求

Vue-Router
  • vue是单页面路由,根据浏览器的路径不同,使用不同的视图组件替换这个页面内容

  • 也可是使用npm install vue-router来实现路由功能

  • 现在index中定义路由表,然后在页面中分别有路由视图组件,路由连接
  • 路由有标签式和编程式两种方式来跳转

编程式

404处理
//这样能实现访问不存在资源的时候显示404
  {
    path: '/404',
    component: () => import('../views/404View.vue')
  }, {
    path: '*',
    redirect: '/404'
  }

嵌套路由

  • 如果直接访问/c页面就显示相应的页面
使用重定向进行默认设置

vuex
  • 管理需要共享的数据

  • 使用这个功能的标志是多了store这个文件夹

**步骤一:**index中创建方法后,

步骤二: 在mutations中定义的函数因为不能直接调用,所以必须通过以下方式来调用

调用异步请求

  • 如图,在vuex中定义请求后要如何调用起来
  • 注意会有代理问题
TypeScript

  • 指定取值的范围

本文作者https://blog.csdn.net/qq_61654952?spm=1000.2115.3001.5343

  • 编译成js后,会变成方法

[外链图片转存中…(img-EhKxU8Vm-1712314231766)]

  • 如果直接访问/c页面就显示相应的页面
使用重定向进行默认设置

[外链图片转存中…(img-bwnjzw3H-1712314231767)]

vuex
  • 管理需要共享的数据

[外链图片转存中…(img-vaX7q7Ey-1712314231767)]

[外链图片转存中…(img-okxEjIki-1712314231768)]

  • 使用这个功能的标志是多了store这个文件夹

[外链图片转存中…(img-zQiJk4w6-1712314231768)]

[外链图片转存中…(img-susgEZlQ-1712314231768)]

**步骤一:**index中创建方法后,

[外链图片转存中…(img-PRr357Aq-1712314231768)]

步骤二: 在mutations中定义的函数因为不能直接调用,所以必须通过以下方式来调用

[外链图片转存中…(img-kP6I4NaE-1712314231768)]

[外链图片转存中…(img-VdyhpKXT-1712314231769)]

调用异步请求

[外链图片转存中…(img-m66u91rp-1712314231769)]

[外链图片转存中…(img-JIJwhaio-1712314231769)]

  • 如图,在vuex中定义请求后要如何调用起来
  • 注意会有代理问题
TypeScript

[外链图片转存中…(img-rBvk9sui-1712314231770)]

[外链图片转存中…(img-vlfMABWM-1712314231770)]

[外链图片转存中…(img-7doQuGPt-1712314231770)]

  • 指定取值的范围

[外链图片转存中…(img-B1tSYwZq-1712314231770)]

[外链图片转存中…(img-egRQsefR-1712314231771)]

[外链图片转存中…(img-2qouvsDY-1712314231771)]

  • 编译成js后,会变成方法

[外链图片转存中…(img-YV5FsncG-1712314231771)]

[外链图片转存中…(img-jiyUC6fr-1712314231772)]


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
小程序 安全
【实训项目】“优品果园”-线上水果商城小程序
【实训项目】“优品果园”-线上水果商城小程序
|
5月前
|
前端开发 Java API
苍穹外卖开发心得(上)
苍穹外卖开发心得(上)
235 5
|
6月前
|
存储 安全 JavaScript
萌宠宜家商城系统
萌宠宜家商城系统
|
NoSQL 网络协议 算法
不愧是抖音电商,问的真细。
前段时间分享了一位师弟的面经,他在提前批顺利拿到字节跳动抖音部门电商部门的offer,算是我知道的为数不多能在提前批阶段斩获offer的应届生了,其中编程语言和算法类考察面经详见该篇文章:抖音电商,提前批offer!。
226 0
|
弹性计算 搜索推荐 应用服务中间件
运营给产品送的情人节礼物竟然是?
产品画像,礼物就是产品画像。
运营给产品送的情人节礼物竟然是?
|
运维 监控 架构师
饿了么技术往事(上)
作为一个互联网创业公司,饿了么从初创到壮大,在移动互联网时代,业务量和技术团队的体量经历了10倍增长,这其中的经历,是互联网领域许多创业公司技术团队的一个缩影。在这里把我们成长过程中的体会和教训记录下来。——黄晓路
15186 7
饿了么技术往事(上)
|
缓存 监控 容灾
饿了么技术往事(下)
在商业竞争中,技术团队和其他团队一样,作为组织的一部分,应该是荣辱与共的。但是,就行业而言,饿了么创造的社会价值也是显而易见的,而且,饿了么塑造了这个行业最初的模样,对社会创造的价值影响是长远的!
9034 8
饿了么技术往事(下)
|
运维 安全 前端开发
饿了么技术往事(中)
在上一篇文章《饿了么技术往事(上)》中,我介绍了饿了么最早期 All in One 阶段的架构,以及第二阶段业务系统拆分与团队运营的一些思考,以及我对于架构师职责的感受,接下来我会详细介绍饿了么全面服务化的架构演进历程。
9225 11
饿了么技术往事(中)
|
安全
“变身”之后,超级美团来了?!
“改头换面”之后,你还能认出它吗? 现如今不止医美界,企业圈也早已掀起一股“换头”风,即对品牌Logo和UI体系的更新换代。 这些或大刀阔斧、或精雕细琢的调整,无不显示着品牌的战略意图。而企业以新面貌示人背后,一场品牌升级战已然打响。
162 0
“变身”之后,超级美团来了?!
|
新零售 供应链 双11
京东618主场迎战:变与不变,志在必得
京东618主场迎战:变与不变,志在必得
471 0
京东618主场迎战:变与不变,志在必得