0


基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(四)

编辑员工和分类模块功能开发

1. 编辑员工

1.1 需求分析与设计

1.1.1 产品原型

在员工管理列表页面点击 “编辑” 按钮,跳转到编辑页面,在编辑页面回显员工信息并进行修改,最后点击 “保存” 按钮完成编辑操作。

修改页面原型

注:点击修改时,数据应该正常回显到修改页面。

在这里插入图片描述

1.1.2 接口设计

根据上述原型图分析,编辑员工功能涉及到两个接口:

  • 根据id查询员工信息
  • 编辑员工信息

1). 根据id查询员工信息
在这里插入图片描述
在这里插入图片描述

2). 编辑员工信息

在这里插入图片描述
在这里插入图片描述

注:因为是修改功能,请求方式可设置为PUT。

1.2 代码开发

1.2.1 回显员工信息功能

1). Controller层

在 EmployeeController 中创建 getById 方法:

/**
     * 根据id查询员工信息
     * @param id
     * @return
     */@GetMapping("/{id}")@ApiOperation("根据id查询员工信息")publicResult<Employee>getById(@PathVariableLong id){Employee employee = employeeService.getById(id);returnResult.success(employee);}

2). Service层接口

在 EmployeeService 接口中声明 getById 方法:

/**
     * 根据id查询员工
     * @param id
     * @return
     */EmployeegetById(Long id);

3). Service层实现类

在 EmployeeServiceImpl 中实现 getById 方法:

/**
     * 根据id查询员工
     *
     * @param id
     * @return
     */publicEmployeegetById(Long id){Employee employee = employeeMapper.getById(id);
        employee.setPassword("****");return employee;}

4). Mapper层

在 EmployeeMapper 接口中声明 getById 方法:

/**
     * 根据id查询员工信息
     * @param id
     * @return
     */@Select("select * from employee where id = #{id}")EmployeegetById(Long id);
1.2.2 修改员工信息功能

1). Controller层

在 EmployeeController 中创建 update 方法:

/**
     * 编辑员工信息
     * @param employeeDTO
     * @return
     */@PutMapping@ApiOperation("编辑员工信息")publicResultupdate(@RequestBodyEmployeeDTO employeeDTO){
        log.info("编辑员工信息:{}", employeeDTO);
        employeeService.update(employeeDTO);returnResult.success();}

2). Service层接口

在 EmployeeService 接口中声明 update 方法:

/**
     * 编辑员工信息
     * @param employeeDTO
     */voidupdate(EmployeeDTO employeeDTO);

3). Service层实现类

在 EmployeeServiceImpl 中实现 update 方法:

/**
     * 编辑员工信息
     *
     * @param employeeDTO
     */publicvoidupdate(EmployeeDTO employeeDTO){Employee employee =newEmployee();BeanUtils.copyProperties(employeeDTO, employee);

        employee.setUpdateTime(LocalDateTime.now());
        employee.setUpdateUser(BaseContext.getCurrentId());

        employeeMapper.update(employee);}

1.3 功能测试

进入到员工列表查询。

在这里插入图片描述

对员工姓名为杰克的员工数据修改,点击修改,数据已回显。

在这里插入图片描述

修改后,点击保存。

在这里插入图片描述

2. 分类模块功能开发

2.1 需求分析与设计

2.1.1 产品原型

后台系统中可以管理分类信息,分类包括两种类型,分别是 菜品分类套餐分类

菜品分类相关功能。

新增菜品分类:当我们在后台系统中添加菜品时需要选择一个菜品分类,在移动端也会按照菜品分类来展示对应的菜品。

菜品分类分页查询:系统中的分类很多的时候,如果在一个页面中全部展示出来会显得比较乱,不便于查看,所以一般的系统中都会以分页的方式来展示列表数据。

根据id删除菜品分类:在分类管理列表页面,可以对某个分类进行删除操作。需要注意的是当分类关联了菜品或者套餐时,此分类不允许删除。

修改菜品分类:在分类管理列表页面点击修改按钮,弹出修改窗口,在修改窗口回显分类信息并进行修改,最后点击确定按钮完成修改操作。

启用禁用菜品分类:在分类管理列表页面,可以对某个分类进行启用或者禁用操作。

分类类型查询:当点击分类类型下拉框时,从数据库中查询所有的菜品分类数据进行展示。

分类管理原型:

在这里插入图片描述

业务规则:

  • 分类名称必须是唯一的
  • 分类按照类型可以分为菜品分类和套餐分类
  • 新添加的分类状态默认为“禁用”
2.1.2 接口设计

根据上述原型图分析,菜品分类模块共涉及6个接口。

  • 新增分类
  • 分类分页查询
  • 根据id删除分类
  • 修改分类
  • 启用禁用分类
  • 根据类型查询分类

接下来,详细地分析每个接口。

1). 新增分类

在这里插入图片描述
在这里插入图片描述

2). 分类分页查询

在这里插入图片描述
在这里插入图片描述

3). 根据id删除分类

在这里插入图片描述

4). 修改分类

在这里插入图片描述
在这里插入图片描述

5). 启用禁用分类

在这里插入图片描述
在这里插入图片描述

6). 根据类型查询分类

在这里插入图片描述
在这里插入图片描述

2.1.3 表设计

category表结构:
字段名数据类型说明****备注idbigint主键自增namevarchar(32)分类名称唯一typeint分类类型1菜品分类 2套餐分类sortint排序字段用于分类数据的排序statusint状态1启用 0禁用create_timedatetime创建时间update_timedatetime最后修改时间create_userbigint创建人idupdate_userbigint最后修改人id

2.2 代码实现

2.2.1 Mapper层

DishMapper.java

packagecom.sky.mapper;@MapperpublicinterfaceDishMapper{/**
     * 根据分类id查询菜品数量
     * @param categoryId
     * @return
     */@Select("select count(id) from dish where category_id = #{categoryId}")IntegercountByCategoryId(Long categoryId);}

SetmealMapper.java

packagecom.sky.mapper;@MapperpublicinterfaceSetmealMapper{/**
     * 根据分类id查询套餐的数量
     * @param id
     * @return
     */@Select("select count(id) from setmeal where category_id = #{categoryId}")IntegercountByCategoryId(Long id);}

CategoryMapper.java

packagecom.sky.mapper;importjava.util.List;@MapperpublicinterfaceCategoryMapper{/**
     * 插入数据
     * @param category
     */@Insert("insert into category(type, name, sort, status, create_time, update_time, create_user, update_user)"+" VALUES"+" (#{type}, #{name}, #{sort}, #{status}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser})")voidinsert(Category category);/**
     * 分页查询
     * @param categoryPageQueryDTO
     * @return
     */Page<Category>pageQuery(CategoryPageQueryDTO categoryPageQueryDTO);/**
     * 根据id删除分类
     * @param id
     */@Delete("delete from category where id = #{id}")voiddeleteById(Long id);/**
     * 根据id修改分类
     * @param category
     */voidupdate(Category category);/**
     * 根据类型查询分类
     * @param type
     * @return
     */List<Category>findByType(Integer type);}

CategoryMapper.xml,进入到resources/mapper目录下

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.sky.mapper.CategoryMapper"><selectid="pageQuery"resultType="com.sky.entity.Category">
        select * from category
        <where><iftest="name != null and name != ''">
                and name like concat('%',#{name},'%')
            </if><iftest="type != null">
                and type = #{type}
            </if></where>
        order by sort asc , create_time desc
    </select><updateid="update"parameterType="Category">
        update category
        <set><iftest="type != null">
                type = #{type},
            </if><iftest="name != null">
                name = #{name},
            </if><iftest="sort != null">
                sort = #{sort},
            </if><iftest="status != null">
                status = #{status},
            </if><iftest="updateTime != null">
                update_time = #{updateTime},
            </if><iftest="updateUser != null">
                update_user = #{updateUser}
            </if></set>
        where id = #{id}
    </update><selectid="findByType"resultType="Category">
        select * from category
        where status = 1
        <iftest="type != null">
            and type = #{type}
        </if>
        order by sort asc,create_time desc
    </select></mapper>
2.2.2 Service层

CategoryService.java

packagecom.sky.service;publicinterfaceCategoryService{/**
     * 新增分类
     * @param categoryDTO
     */voidsave(CategoryDTO categoryDTO);/**
     * 分页查询
     * @param categoryPageQueryDTO
     * @return
     */PageResultpageQuery(CategoryPageQueryDTO categoryPageQueryDTO);/**
     * 根据id删除分类
     * @param id
     */voiddeleteById(Long id);/**
     * 修改分类
     * @param categoryDTO
     */voidupdate(CategoryDTO categoryDTO);/**
     * 启用、禁用分类
     * @param status
     * @param id
     */voidstartOrStop(Integer status,Long id);/**
     * 根据类型查询分类
     * @param type
     * @return
     */List<Category>findByType(Integer type);}

CategoryServiceImpl.java

@ServicepublicclassCategoryServiceImplimplementsCategoryService{@AutowiredprivateCategoryMapper categoryMapper;@AutowiredprivateSetmealMapper setmealMapper;@AutowiredprivateDishMapper dishMapper;//菜品添加@Overridepublicvoidadd(CategoryDTO categoryDTO){Category category=newCategory();BeanUtils.copyProperties(categoryDTO,category);
        category.setCreateTime(LocalDateTime.now());
        category.setUpdateTime(LocalDateTime.now());
        category.setUpdateUser(BaseContext.getCurrentId());
        category.setCreateUser(BaseContext.getCurrentId());
        category.setStatus(StatusConstant.DISABLE);
        categoryMapper.add(category);}//菜品分页查询@OverridepublicPageResultpage(CategoryPageQueryDTO categoryPageQueryDTO){PageHelper.startPage(categoryPageQueryDTO.getPage(),categoryPageQueryDTO.getPageSize());Page<Category> page= categoryMapper.page(categoryPageQueryDTO);PageResult pageResult=newPageResult();
          pageResult.setTotal(page.getTotal());
          pageResult.setRecords( page.getResult());return pageResult;}//启用禁用@OverridepublicvoidstartOrStop(Integer status,Long id){Category category =Category.builder().id(id).status(status).build();

        categoryMapper.update(category);}//根据类型查询@OverridepublicList<Category>findByType(Integer type){List<Category> categoryList=categoryMapper.findByType(type);return categoryList;}//菜品的删除@Overridepublicvoiddelete(Long id){if(dishMapper.countByCategoryid(id)>0){thrownewDeletionNotAllowedException(MessageConstant.CATEGORY_BE_RELATED_BY_DISH);}if(setmealMapper.selectCount(id)>0){thrownewDeletionNotAllowedException(MessageConstant.DISH_BE_RELATED_BY_SETMEAL);}
        categoryMapper.delete(id);}//菜品的修改@Overridepublicvoidupdate(CategoryDTO categoryDTO){Category category=newCategory();BeanUtils.copyProperties(categoryDTO,category);
        category.setUpdateTime(LocalDateTime.now());
        category.setUpdateUser(BaseContext.getCurrentId());
        categoryMapper.update(category);}}
2.2.3 Controller层

CategoryController.java

packagecom.sky.controller.admin;/**
 * 分类管理
 */@RestController@RequestMapping("/admin/category")@Api(tags ="分类相关接口")@Slf4jpublicclassCategoryController{@AutowiredprivateCategoryService categoryService;/**
     * 新增分类
     * @param categoryDTO
     * @return
     */@PostMapping@ApiOperation("新增分类")publicResult<String>save(@RequestBodyCategoryDTO categoryDTO){
        log.info("新增分类:{}", categoryDTO);
        categoryService.save(categoryDTO);returnResult.success();}/**
     * 分类分页查询
     * @param categoryPageQueryDTO
     * @return
     */@GetMapping("/page")@ApiOperation("分类分页查询")publicResult<PageResult>page(CategoryPageQueryDTO categoryPageQueryDTO){
        log.info("分页查询:{}", categoryPageQueryDTO);PageResult pageResult = categoryService.pageQuery(categoryPageQueryDTO);returnResult.success(pageResult);}/**
     * 删除分类
     * @param id
     * @return
     */@DeleteMapping@ApiOperation("删除分类")publicResult<String>deleteById(Long id){
        log.info("删除分类:{}", id);
        categoryService.deleteById(id);returnResult.success();}/**
     * 修改分类
     * @param categoryDTO
     * @return
     */@PutMapping@ApiOperation("修改分类")publicResult<String>update(@RequestBodyCategoryDTO categoryDTO){
        categoryService.update(categoryDTO);returnResult.success();}/**
     * 启用、禁用分类
     * @param status
     * @param id
     * @return
     */@PostMapping("/status/{status}")@ApiOperation("启用禁用分类")publicResult<String>startOrStop(@PathVariable("status")Integer status,Long id){
        categoryService.startOrStop(status,id);returnResult.success();}/**
     * 根据类型查询分类
     * @param type
     * @return
     */@GetMapping("/list")@ApiOperation("根据类型查询分类")publicResult<List<Category>>list(Integer type){List<Category> list = categoryService.list(type);returnResult.success(list);}}

2.3 功能测试

重启服务,访问http://localhost:80,进入分类管理

分页查询:

在这里插入图片描述

分类类型:

在这里插入图片描述

启用禁用:

在这里插入图片描述

点击禁用

在这里插入图片描述

修改:

回显

在这里插入图片描述

修改后

在这里插入图片描述

新增:

在这里插入图片描述

点击确定,查询列表

在这里插入图片描述

删除:

在这里插入图片描述

删除后,查询分类列表

在这里插入图片描述
删除成功

后记
👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹


本文转载自: https://blog.csdn.net/m0_59230408/article/details/132808113
版权归原作者 失重外太空. 所有, 如有侵权,请联系我们删除。

“基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(四)”的评论:

还没有评论