外卖项目03---分类管理业务开发
创始人
2024-01-22 20:22:08
0

目录

一、公共字段自动填充 41

1.1问题分析 41

​编辑1.2公共字段自动填充---代码实现并测试 42

1.3公共字段自动填充---功能完善 43

二、新增分类 44

2.1需求分析 44

三、分类信息查询 45

3.1需求分析 45

3.2代码开发 流程分析

四、删除分类 46

4.1需求分析 46

4.2代码开发 

4.3功能完善---代码开发(自定义业务异常处理) 47

五、修改分类 48

5.1需求分析 48


一、公共字段自动填充 41

1.1问题分析 41

公共字段:在不同的功能处,都有存在响应的字段。实际上就是重复的内容,用到的地方比较多。

1.2公共字段自动填充---代码实现并测试 42

 实现步骤:

步骤一:在实体类属性上添加注解@TableField 

 步骤二:创建一个实体的公共类,用于公共字段的处理

步骤三:对公共字段的处理的属性信息在对应的方法处进行修改处理

之前的字段:

本部分的代码如下:

@Component
@Slf4j
public class MyMetaObjecthandler implements MetaObjectHandler {@Override //insert语句执行时才会运行该语句 添加时的处理操作public void insertFill(MetaObject metaObject) {log.info("公共字段自动填充[insert]...");log.info(metaObject.toString());metaObject.setValue("createTime", LocalDateTime.now());metaObject.setValue("updateTime",LocalDateTime.now());metaObject.setValue("createUser",new Long(1));//由于我们需要获得Sesion中的数据信息,// 但是该类中不能直接获取,先用“1”来代替填充数据metaObject.setValue("updateUser",new Long(1));}@Override //update语句执行时才会运行该语句 更新时的处理操作public void updateFill(MetaObject metaObject) {log.info("公共字段自动填充[update]...");log.info(metaObject.toString());metaObject.setValue("updateTime",LocalDateTime.now());metaObject.setValue("updateUser",new Long(1));}
}

1.3公共字段自动填充---功能完善 43

问题处理:本部分解决在1.2中createUser和updateUser时,设置的属性信息为固定值。将该固定值设置为动态获得当前登陆用户的id。

解决方案:

 

 ThreadLocal:

实现步骤:

 步骤一:创建BaseContext工具类。

代码:

/*** 基于ThreadLocal封装工具类,用户保存和获取当前登陆用户id*/
public class BaseContext {private static ThreadLocal threadLocal = new ThreadLocal<>();public static void setCurrentId(Long id){threadLocal.set(id);//设置id}public static Long getCurrrentId(){//获取id并返回long类return threadLocal.get();}
}

步骤二:在LoginCheckFilter方法中调用创建的工具类,使得其能够调用获取用户登陆成功的id信息

            Long empId = (Long) request.getSession().getAttribute("employee");BaseContext.setCurrentId(empId);

步骤三:在MyMethaObjecthandler方法中,获取步骤二设定的id值

二、新增分类 44

2.1需求分析 44

 

 分类管理的数据模型:数据库中的表category

代码开发的基础准备:(骨架的搭建)

 

三、分类信息查询 45

3.1需求分析 45

需求分析:将分类管理进行分页处理 

3.2代码开发 流程分析

本部分代码:

    /*** 分页查询* @param page* @param pageSize* @return*/@GetMapping("/page")public R page(int page,int pageSize){//分页构造器Page pageInfo = new Page<>(page,pageSize);//条件构造器,需要设置一个过滤的条件,进行排序。在category实体类里面有一个排序的条件sortLambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();//添加排序条件,根据sort进行排序queryWrapper.orderByAsc(Category::getSort);//根据sort这个字段来进行升序排序//进行分页查询categoryService.page(pageInfo,queryWrapper);//根据page类进行分页查询return R.success(pageInfo);}

四、删除分类 46

4.1需求分析 46

注:如果这个分类下面连接着其他的具体的某个菜,是不能被删除的。例如:热门菜品分类:关联着鱼香肉丝。那么这个热门菜品的这个分类是不能被删除的。

4.2代码开发 

 初步的代码:

    /*** 根据id删除分类* @param id* @return*/@DeleteMappingpublic R delete(Long id){log.info("删除分类,id为:{}",id);categoryService.removeById(id);return R.success("分类信息删除成功");}

4.3功能完善---代码开发(自定义业务异常处理) 47

前期的基础内容准备:基础的类和基础的接口 

 解决方案;因为删除菜品分类之前,需要有一个判断的过程,看是否能被删除掉。4.2中使用的是mtbatis给封装好的一个remove。我们就需要创建一个新的,在CategoryService的接口中创建一个新的方法。

解决该问题的步骤

步骤一:创建分类管理类中创建异常的方法

步骤二:在对应的实现类中方法代码书写

@Service
public class CategoryServiceImpl extends ServiceImpl implements CategoryService {@Autowiredprivate SetmealService setmealService;@Autowiredprivate DishService dishService;/*** 根据id删除分类,删除之前需要进行判断* @param id*/@Overridepublic void remove(Long id) {//构造查询对象LambdaQueryWrapper dishLambdaQueryWrapper = new LambdaQueryWrapper<>();//添加查询条件,根据分类id进行查询dishLambdaQueryWrapper.eq(Dish::getCategoryId,id);//查询输出的Long id。传入的id和CategoryId进行匹配int count1 = dishService.count(dishLambdaQueryWrapper);//1、查询当前分类是否关联了菜品,如果已经关联,抛出一个业务异常。if(count1 > 0){//已经关联菜品,抛出一个业务异常throw new CustomException("当前分类下关联了菜品,不能删除");//实际上就是在前端的页面上点击删除后,// 会弹出窗口提示异常的信息}//2、查询当前分类是否关联了套餐,如果已经关联,抛出一个业务异常//构造查询对象LambdaQueryWrapper setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();//添加查询条件,根据分类id进行查询setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId,id);int count2 = setmealService.count(setmealLambdaQueryWrapper);if(count2 > 0){//已经关联套餐,抛出一个业务异常throw new CustomException("当前分类下关联了套餐,不能删除");}//正常删除super.removeById(id);}
}

步骤三:在上述的基础上创建一个自定义的业务异常类(公共类)

代码:

/*** 自定义业务异常类*/
public class CustomException extends RuntimeException {public CustomException(String message){super(message);}}

 并在之前的全局异常位置进行添加处理:

代码如下:

    /*** 异常处理方法* @return*/@ExceptionHandler(CustomException.class)public R exceptionHandler(CustomException ex){log.error(ex.getMessage());return R.error(ex.getMessage());//通过ex就可以直接获取前面定义的message信息。}
}

步骤四:在Controller层中进行方法的调用

代码:

    /*** 根据id删除分类* @param id* @return*/@DeleteMappingpublic R delete(Long id){log.info("删除分类,id为:{}",id);//        categoryService.removeById(id);//removeById是mybatis内置的方法。categoryService.remove(id);//这个是自己创建的业务异常删除的方法,调用CategoryServiceImpl中的remove方法return R.success("分类信息删除成功");}

五、修改分类 48

5.1需求分析 48

 信息回显:就是点击“修改”按钮后,弹出的窗口上就有对应的信息内容展示。

代码部分:在controller层进行修改处理

    /*** 根据id修改分类信息* @param category* @return*/@PutMappingpublic R update(@RequestBody Category category){log.info("修改分类信息:{}",category);categoryService.updateById(category);return R.success("修改分类信息成功");}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...