4 Star 0 Fork 0

zhou/sky-take-out-2

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
【模板】
接口定义:
    请求路径:
    请求方式:
    请求参数:
    响应数据:

思路分析:
    controller:
    service:
    mapper:


day02:
员工模块:employee
    1.新增员工:
        接口定义:
            请求路径:/admin/employee
            请求方式:POST
            请求参数:json格式--> {"username":"xxx","name":"xxx"...} 使用DTO封装
            响应数据:Result data:null

        思路分析:
            controller:
                在EmployeeController中定义一个新增方法:
                1.打印日志
                2.调用service的新增方法
                3.返回结果对象
            service:
                在EmployeeService接口中定义一个新增方法,并在实现类中实现该方法:
                0.补充基础属性
                1.密码加密之后再插入到数据库
                2.调用mapper的insert方法
            mapper:
                在EmployeeMapper接口中定义一个新增方法:
                --基于注解写sql句: insert into employee values(null,#{},#{},#{},#{},#{},#{})

    存在的问题:
        1.java.sql.SQLIntegrityConstraintViolationException: Duplicate entry 'lisi' for key 'employee.idx_username'
        原因:因为username在表中设置了唯一约束,添加相同的用户名会报上述的错
        解决方案:通过全局异常处理器处理该异常,返回响应的错误信息

        2.设置创建人和更新人的时候,id直接写死了
        解决方案:通过jwt令牌解析之后,获取当前登录人id,给创建人和更新人赋值
        TheadLocal

    2.员工分页:
        接口定义:
            请求路径:/admin/employee/page
            请求方式:GET
            请求参数:?name=xx&page=xx&pageSize=xx
            响应数据:Result<PageResult>

        思路分析:
            controller:
                在EmployeeController中定义一个分页查询方法:
                1.调用service的分页查询方法,获取分页结果对象PageResult
                2.返回结果
            service:
                在EmployeeService接口中定义一个分页方法,并在实现类中实现该方法:
                //使用分页插件完成分页
                0.导入分页插件依赖
                1.设置分页参数 PageHelper.startPage(x,x)
                2.调用mapper的条件分页查询
                3.强转Page类型
                4.封装PageResult对象,并返回
            mapper:
                在EmployeeMapper接口中定义一个条件分页方法:
                基于xml开发--动态sql <if>
                sql语句:select * from employee where name like concat('%',#{name},'%') order by create_time desc

【扩展】修改密码:
       接口分析:
           请求路径:/admin/employee/editPassword
           请求方式:PUT
           请求参数:{oldPassword: "123456", newPassword: "111111"}  //需要自己补充员工id
           响应数据:Result  data:null

       思路分析:
           controller:
               调用service
           service:
               1.需要自己补充员工id--从哪里获取?需要动态获取(获取当前登陆人的id)
               -- ThreadLocal存了id,从ThreadLocal获取
               2.对比数据库中的密码和前端传递过来的旧密码(加密之后对比)是否一致
               3.如果一致,对新密码进行加密
               4.调用mapper层的更新方法
           mapper:
               update employee set password = 111111 where id = ?


day03:
    公共字段自动填充:
        思路分析: 选择用AOP技术实现
            0.导入aop相关依赖
            1.定义切面类,在类中定义方法(通知--选择前置通知@Before)
            2.在方法上面打上注解,并且写上表达式(使用注解的方式)
                2.1 自定义一个注解
            3.方法体逻辑分析:
                3.1 根据连接点,获取到方法签名,根据方法签名,拿到方法的参数对象 Employee
                3.2 判断方法的操作类型(根据注解里面的属性值判断)---注解的属性类型选择枚举类型
                    如果是新增,那么赋值四个字段(创建时间、更新时间、创建人、更新人)
                    如果是更新,那么赋值两个字段(更新时间、更新人)
                3.2 通过反射,可以拿到字节码对象,根据字节码对象获取方法对象,调用方法对象,赋值
                    通过反射,可以拿到字节码对象,根据字节码对象获取成员变量,设置该变量的值

            注解里面定义两个变量
            public class XXX{
                public static final String INSERT = "insert";
                public static final String UPDATE = "update";
            }

            用枚举类
            public Enum Opreation {
                INSERT,UPDATE
            }

         涉及的技术点:AOP、自定义注解、反射、枚举

    删除菜品:
        接口定义:
            请求路径:/admin/dish
            请求方式:DELETE
            请求参数:ids=1,2,3..
            响应数据:Result data:null

        思路分析:
            controller:

            service:
                //0.开启事务
                1.启售中的菜品不能删除,查dish
                2.被套餐关联的菜品不能删除,查setmeal_dish
                3.先删菜品
                4.再删口味
            mapper:
                sql语句:
                delete from dish where id in (1,2,3);
                delete from dish_flavor where dish_id in (1,2,3);

    修改菜品:
        根据id查询菜品
            接口定义:
                请求路径:/admin/dish/{id}
                请求方式:GET
                请求参数:路径参数 id
                响应数据:Result data:DishVO
        根据类型查询分类【已完成】
        文件上传【已完成】
        修改菜品
            接口定义:
                请求路径:/admin/dish
                请求方式:PUT
                请求参数:json 使用DishDTO封装
                响应数据:Result data:null

        思路分析:

    菜品启售停售:【作业】
        接口定义:
            请求路径:/admin/dish/status/{status}
            请求方式:POST
            请求参数:路径参数status+普通参数id
            响应数据:Result data:null
        思路分析:
            菜品停售,则包含菜品的套餐同时停售
            controller:
                在DishController中定义一个启售停售方法:
                1.调用service的方法
                2.返回结果
            service:
                在DishService接口中定义一个启售停售方法,并在实现类中实现:
                1.构造Dish对象,调用mapper更新方法,更新状态
                2.如果是停售,需要将关联的套餐也停售
                2.1 根据菜品id查询套餐信息(联表查询dish、setmeal、setmeal_dish)
                2.2 如果能查出套餐,则调用套餐mapper,修改套餐状态为停售
                注意:此处涉及到多张表的修改操作,所以需要开启事务
            mapper:
                在DishMapper中定义更新方法
                在SetmealMapper中定义查询方法和更新方法

---------------------------------------------------------------------------------------
day04: 项目实战--完成套餐管理
- 新增套餐
- 套餐分页查询
- 删除套餐
- 修改套餐
- 起售停售套餐
---------------------------------------------------------------------------------------
    1.新增套餐
        1.1 文件上传【已完成】
        1.2 根据分类类型查询分类列表【已完成】
        1.3 根据分类id或菜品名称查询菜品
            接口定义:
                请求路径:/admin/dish/list
                请求方式:GET
                请求参数:categoryId \  name
                响应参数:Result data:菜品对象dish
        1.4 新增套餐
            接口定义:
                请求路径:/admin/setmeal
                请求方式:POST
                请求参数:json格式 使用SetmealDTO封装
                响应参数:Result data:null

    2.套餐分页查询
        接口定义:
            请求路径:/admin/setmeal/page
            请求方式:GET
            请求参数:page=1&pageSize=10&name=test&categoryId=13&status=1
            响应参数:Result data:套餐分页列表 PageResult

    3.删除套餐
        接口定义:
            请求路径:/admin/setmeal
            请求方式:DELETE
            请求参数:ids (数组参数)
            响应参数:Result data:null

    4.修改套餐
        4.1 根据id查询套餐
            接口定义:
                请求路径:/admin/setmeal/{id}
                请求方式:GET
                请求参数:路径参数 id
                响应参数:Result data: SetmealVO

        4.2 根据类型查询分类(已完成)
        4.3 根据分类id查询菜品(已完成)
        4.4 图片上传(已完成)

        4.5 修改套餐
            接口定义:
                请求路径:/admin/setmeal
                请求方式:PUT
                请求参数:json格式 封装到SetmealDTO
                响应参数:Result data: null

    5.起售停售套餐
        接口定义:
            请求路径:/admin/setmeal/status/{status}
            请求方式:POST
            请求参数:路径参数 status + 普通参数 id
            响应参数:Result data: null


day05:
    店铺营业状态设置--基于redis存在状态
        思路分析:
            controller:
                在ShopController中定义一个设置状态的方法:
                1.注入RedisTemplate对象,通过对象获取ValueOperations对象
                2.通过ValueOperations对象操作String类型数据
                3.直接往redis中设置一个字符串类型,value就是状态值
            service: 无
            mapper: 无

    管理端-店铺营业状态获取--基于redis获取状态
        思路分析:
            controller:
                在ShopController中定义一个查询状态的方法:
                1.通过RedisTemplate对象获取ValueOperations对象
                2.通过ValueOperations对象获取SHOP_STATUS
                3.将得到的value值响应给前端
            service: 无
            mapper: 无

day06:
    微信登录
        接口定义:
            请求地址:/user/user/login
            请求方式:POST
            请求参数:json格式 {"code":"xxx"}  DTO封装
            响应数据:Result Data:xxxVO封装

day07:
    缓存菜品:
        1.查询的时候,给每个分类下的菜品缓存到redis中

        2.增删改的时候,需要清理缓存
            情况一:新增菜品的时候,只清除当前菜品所属分类下的缓存菜品数据
            情况二:修改菜品和更新菜品的时候,全部清除所有分类下的菜品缓存数据

    购物车:
        添加购物车
            接口定义:
                请求路径:/user/shoppingCart/add
                请求方式:POST
                请求参数:{"dishId":"xxx","dishFlavor":"xxx",...} JSON格式,使用DTO封装
                响应数据:Result data:null

        查看购物车
            接口定义:
                请求路径:/user/shoppingCart/list
                请求方式:GET
                请求参数:无      【注意:根据用户id查询购物车】
                响应数据:Result data:List<ShoppingCart>

        清空购物车
            接口定义:
                请求路径:/user/shoppingCart/clean
                请求方式:DELETE
                请求参数:无  【注意:需要根据用户id进行删除】
                响应数据:Result data:null

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ZhouKay/sky-take-out-2.git
git@gitee.com:ZhouKay/sky-take-out-2.git
ZhouKay
sky-take-out-2
sky-take-out-2
master

搜索帮助