瑞吉外卖逻辑分析

瑞吉外卖逻辑分析
mengnankkzhou业务
service
ShopServiceImpl:
使用redis设置和查询店铺的状态。redistemplate.opsforvalue.set/get(key)
AddressBookServiceImpl:
新增地址,实体类设置字段的值,然后调用mapper的insert方法。
修改地址,调用updata调用主键去更新方法更新
设置默认地址,设置默认地址,然后获取当前用户的id,然后在sql中set用于默认地址,where userid。然后更新默认字段 return
使用LambdaUpdateWrapper去写一个查询条件
1 | Long userId = BaseContext.getCurrentId(); |
CategoryServiceImpl:
新增菜品,新建菜品的实体类,使用beanuntil,拷贝DTO层数据,然后set状态,然后insert
分类查询,使用pagehelper插件,=.startpage(num,size);
然后使用Page<>保证菜品类,然后根据模糊匹配进行搜索,然后mapper调用,然后新建一个分页包装的reseponse返回这个数量和结果。
根据id删除菜品,先mapper查,然后看dishcount字段是不是关联了菜品,关联套餐不能删除,抛出异常。没有的话,就del删除。
ReportServiceImpl:
查询,使用一个map来装这个数据,然后返回数据,传入到mapper中的where/if标签里面一般是。
Mapper XML 中使用 <if test="xxx != null"> 拼接 where 条件。
TOPk,还是使用map,但是加上了连表查询。
1 | SELECT d.name, SUM(od.number) as total_sales |
SetmealServiceImpl:
新增套餐,先新建套餐实体类,拷贝dto数据,插入条数据,获取外键,然后获取关联的菜品,设置外键,然后保存。然后mapper里面使用foreach来遍历填写数据
分页插件查询。
批量删除套餐,使用foreach,lamda表达式,通过id查找数据,如果套餐的stuse为1.说明在售卖,不能删除,抛出异常。然后通过id删除套餐表中的数据。删除菜品关系表中的数据。
套餐的启用和停售,判断套餐内是否有停售菜品,有停售菜品的时候不能启用套餐,
如果是起售状态的话,直接更新为停售
修改套餐:
获取实体类对象,然后拷贝dto,然后更新数据。获取外键,删除套餐和菜品的关联关系。设置新的关系。然后重新插入
controller
DishController:
查询的时候,先从redis中根据key来拿数据,查到缓存的话,就直接返回缓存。没有的话,就从数据库中拿,然后存入redis中。
查询缓存:注解 @Cacheable,用于 将方法的返回值缓存起来,提高查询效率,避免重复查数据库。你这段代码的意思是:按分类 ID 查询套餐,并将结果缓存,条件是结果不为空。












