瑞吉外卖项目-菜品类别与套餐类别添加和修改以及查询,菜品的添加修改等功能

本文详述了瑞吉外卖项目中菜品和分类的管理功能,包括分类的新增、查询、删除和修改,以及菜品的上传、新增、查询和修改。通过MyBatisPlus实现公共字段填充,使用ThreadLocal处理用户ID,确保数据一致性。同时,介绍了文件上传下载的实现,并在遇到分类关联菜品或套餐时,进行了异常处理,防止误删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整理记录下学习整个瑞吉外卖项目,详细代码可在我的Gitee仓库瑞吉外卖实战克隆下载学习使用!

7. 分类管理

7.1 公共字段填充

7.1.1问题

在新增员工时需要设置创建时间、创建人、修改时间、修改人等字段,在编辑员工信息时也要设置修改时间和修改人。这些字段属于公共字段,同时很多表也存在,如图在这里插入图片描述

7.1.2 解决办法

使用MyBatisPlus的公共字段填充功能,在填充字段或更新的时候为指定字段进行赋予指定值,另外对于存在session中的用户id,可以用ThreadLocal(Thread局部变量)来解决,每次Http请求发送后后台会创建唯一的线程来执行对应操作,且ThreadLocal会给线程提供单一的存储空间,线程内才能访问,获取到值,可通过set()和get()来设置和获取当前线程对应的局部变量值。

7.1.3 代码开发

  • 编写BaseContext工具类,使用ThreadLocal保存和获取用户id
	public class BaseContext {
   
    private static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    /**
     * 设置值
     * @param id
     */
    public static void setCurrentId(Long id){
   
        threadLocal.set(id);
    }
    /**
     * 获取值
     * @return
     */
    public static Long getCurrentId(){
   
        return threadLocal.get();
    }
}	
  • 实体类属性加上@TableField注解,指定自动填充策略,如图![[Pasted image 20230301113501.png]]
  • 按框架要求编写元数据对象处理器,在此类中进行统一赋值,需实现MetaObjectHandler接口
@Component  
@Slf4j  
public class MyMetaObjecthandler implements MetaObjectHandler {
     
    /**  
     * 插入操作,自动填充  
     * @param metaObject  
     */  
    @Override  
    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",BaseContext.getCurrentId());  
        metaObject.setValue("updateUser",BaseContext.getCurrentId());  
    }  
    /**  
     * 更新操作,自动填充  
     * @param metaObject  
     */  
    @Override  
    public void updateFill(MetaObject metaObject) {
     
        log.info("公共字段自动填充[update]...");  
        log.info(metaObject.toString());  
        long id = Thread.currentThread().getId();  
        log.info("线程id为:{}",id);  
        metaObject.setValue("updateTime",LocalDateTime.now());  
        metaObject.setValue("updateUser",BaseContext.getCurrentId());  
    }  
}
  • 在登录过滤器代码中使用BaseContext设置id,如图
    ![[Pasted image 20230301152907.png]]
  • 将之前controller中写的设置createTime等公共字段值注释掉,如图
    ![[Pasted image 20230301152756.png]]

7.1.4 测试

新添加用户,如图![[Pasted image 20230301153202.png]]
测试成功,数据正确,如图![[Pasted image 20230301153329.png]]

7.2 新增分类

7.2.1 需求分析

![[Pasted image 20230301153458.png]]
可以在后台系统的分类管理页面分别添加菜品和套餐分类,如图
![[Pasted image 20230301153603.png]]
![[Pasted image 20230301153615.png]]

7.2.2 数据模型

将窗口新增的数据插入到category表中,表结构如图在这里插入图片描述

7.2.3 代码开发

  • 实体类编写,也可进行导入,如下:
@Data
public class Category implements Serializable {
   
    private static final long serialVersionUID = 1L;
    private Long id;
    //类型 1 菜品分类 2 套餐分类
    private Integer type;
    //分类名称
    private String name;
    //顺序
    private Integer sort;
    //创建时间
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    //更新时间
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    //创建人
    @TableField(fill = FieldFill.INSERT)
    private Long createUser;
    //修改人
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;
}
  • 和之前员工功能一样,新增controller、mapper层和业务层接口及实现类,如图
    ![[Pasted image 20230301155354.png]]
  • controller层添加代码,完成添加菜品功能,如下:
@RestController  
@RequestMapping("/category")  
@Slf4j  
@RequiredArgsConstructor  
public class CategoryController {
     
	private final CategoryService categoryService; 
    /**  
     * 新增分类  
     * @param category  
     * @return  
     */  
    @PostMapping  
    public Result<String> save(@RequestBody Category category){
     
        log.info("category:{}",category);  
        categoryService.save(category);  
        return Result.success("新增分类成功");  
    }
}

7.2.4 测试

添加川菜信息, 如图![[Pasted image 20230301161329.png]]
点击确定后显示已存在,说明功能完成,![[Pasted image 20230301161412.png]]

7.3 分类信息分页查询

7.3.1代码开发

和之前员工分页查询类似,代码如下:

    /**
     * 分页查询
     * @param page
     * @param pageSize
     * @return
     */
    @
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值