新增套餐
在新增套餐之前要实现根据分类查询菜品
根据分类id查询菜品
~~~controller
@GetMapping("/list")
@ApiOperation("根据分类id查询菜品")
public Result<List<Dish>> list(Long categoryId){
List<Dish> list = dishService.list(categoryId);
return Result.success(list);
}
~~~service
List<Dish> list(Long categoryId);
~~~serviceImpl
@Override
public List<Dish> list(Long categoryId) {
Dish dish = Dish.builder()
.categoryId(categoryId)
.status(StatusConstant.ENABLE)
.build();
return dishMapper.list(dish);
}
~~~mapper
@Select("select * from dish where category_id=#{categoryId}")
List<Dish> list(Dish dish);
新增套餐
~~~controller
@PostMapping()
@ApiOperation("新增菜品")
public Result addSet(@RequestBody SetmealDTO setmealDTO){
log.info("新增菜品:{}",setmealDTO);
setmealService.addSet(setmealDTO);
return Result.success();
}
~~~service
void addSet(SetmealDTO setmealDTO);
~~~serviceImpl
@Transactional
public void addSet(SetmealDTO setmealDTO) {
Setmeal setmeal = new Setmeal();
BeanUtils.copyProperties(setmealDTO, setmeal);
//向套餐表插入数据
setmealMapper.insert(setmeal);
//获取生成的套餐id
Long setmealId = setmeal.getId();
List<SetmealDish> setmealDishes = setmealDTO.getSetmealDishes();
setmealDishes.forEach(setmealDish -> {
setmealDish.setSetmealId(setmealId);
});
//保存套餐和菜品的关联关系
setmealDishMapper.insertBatch(setmealDishes);
}
~~~mapper
@AotoFill(value = OperationType.INSERT)
void insert(Setmeal setmeal);
void insertBatch(List<SetmealDish> setmealDishes);
~~~mapperXML
<insert id="insert" parameterType="Setmeal" useGeneratedKeys="true" keyProperty="id">
insert into setmeal
(category_id, name, price, status, description, image, create_time, update_time, create_user, update_user)
values (#{categoryId}, #{name}, #{price}, #{status}, #{description}, #{image}, #{createTime}, #{updateTime},
#{createUser}, #{updateUser})
</insert>
<insert id="insertBatch" parameterType="list">
insert into setmeal_dish
(setmeal_id,dish_id,name,price,copies)
values
<foreach collection="setmealDishes" item="sd" separator=",">
(#{sd.setmealId},#{sd.dishId},#{sd.name},#{sd.price},#{sd.copies})
</foreach>
</insert>
分页查询
~~~controller
@GetMapping("/page")
@ApiOperation("分页查询")
public Result page (SetmealPageQueryDTO setmealPageQueryDTO){
log.info("分页查询:{}",setmealPageQueryDTO);
PageResult pageResult = setmealService.pageQuery(setmealPageQueryDTO);
return Result.success(pageResult);
}
~~~service
PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO);
~~~serviceImpl
@Override
public PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO) {
PageHelper.startPage(setmealPageQueryDTO.getPage(),setmealPageQueryDTO.getPageSize());
Page page = setmealMapper.pageQuery(setmealPageQueryDTO);
return new PageResult(page.getTotal(),page.getResult());
}
~~~mapper
Page<SetmealVO> pageQuery(SetmealPageQueryDTO setmealPageQueryDTO);
~~~mapperXML
<select id="pageQuery" resultType="com.sky.vo.SetmealVO">
select
s.*,c.name categoryName
from
setmeal s
left join
category c
on
s.category_id = c.id
<where>
<if test="name != null">
and s.name like concat('%',#{name},'%')
</if>
<if test="status != null">
and s.status = #{status}
</if>
<if test="categoryId != null">
and s.category_id = #{categoryId}
</if>
</where>
order by s.create_time desc
</select>
批量删除
~~~controller
@DeleteMapping()
@ApiOperation("批量删除套餐")
public Result delete(@RequestParam List<Long> ids){
setmealService.deleteBatch(ids);
return Result.success();
}
~~~service
void deleteBatch(List<Long> ids);
~~~serviceImpl
@Override
@Transactional
public void deleteBatch(List<Long> ids) {
ids.forEach(id ->{
//判断是否再售卖中,售卖中得不可改变
Setmeal setmeal = setmealMapper.getById(id);
if (setmeal.getStatus()==StatusConstant.ENABLE){
throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ON_SALE);
}
});
ids.forEach(setmealId -> {
//删除套餐表中的数据
setmealMapper.deleteById(setmealId);
//删除套餐菜品关系表中的数据
setmealDishMapper.deleteBySetmealId(setmealId);
});
~~~mapper
@Select("select *from setmeal where id =#{id}")
Setmeal getById(Long id);
@Delete("delete from setmeal where id = #{id}")
void deleteById(Long setmealId);
@Delete("delete from setmeal_dish where setmeal_id = #{setmealId}")
void deleteBySetmealId(Long setmealId);
修改套餐
根据id查询套餐
~~~controller
@GetMapping("/{id}")
@ApiOperation("根据id查询套餐")
public Result getSetById(@PathVariable Long id){
log.info("根据id查询套餐:{}",id);
Setmeal s = setmealService.getSetById(id);
return Result.success(s);
}
~~~service
Setmeal getSetById(Long id);
~~~serviceImpl
@Override
public Setmeal getSetById(Long id) {
Setmeal s= setmealMapper.getSetById(id);
return s;
}
~~~mapper
@Select("select * from setmeal where id = #{id}")
Setmeal getSetById(Long id);
修改套餐
~~~controller
@PutMapping
@ApiOperation("修改套餐")
public Result updateSet(@RequestBody SetmealDTO setmealDTO){
log.info("修改套餐:{}",setmealDTO);
setmealService.updateSet(setmealDTO);
return Result.success();
}
~~~service
void updateSet(SetmealDTO setmealDTO);
~~~serviceImpl
@Override
public void updateSet(SetmealDTO setmealDTO) {
Setmeal setmeal = new Setmeal();
BeanUtils.copyProperties(setmealDTO, setmeal);
//1、修改套餐表,执行update
setmealMapper.update(setmeal);
//套餐id
Long setmealId = setmealDTO.getId();
//2、删除套餐和菜品的关联关系,操作setmeal_dish表,执行delete
setmealDishMapper.deleteBySetmealId(setmealId);
List<SetmealDish> setmealDishes = setmealDTO.getSetmealDishes();
setmealDishes.forEach(setmealDish -> {
setmealDish.setSetmealId(setmealId);
});
//3、重新插入套餐和菜品的关联关系,操作setmeal_dish表,执行insert
setmealDishMapper.insertBatch(setmealDishes);
}
~~~mapper
@AotoFill(value = OperationType.UPDATE)
void update(Setmeal setmeal);
~~~mapperXML
<update id="update">
update setmeal
<set>
<if test="name != null">name = #{name},</if>
<if test="categoryId != null">category_id = #{categoryId},</if>
<if test="price != null">price = #{price},</if>
<if test="status != null">status = #{status},</if>
<if test="description != null">description = #{description},</if>
<if test="image != null">image = #{image},</if>
</set>
where id = #{id}
</update>
起售停售
~~~controller
public Result startOrStop (@PathVariable Integer status, Long id){
log.info("起售停售:{},{}",status,id);
setmealService.startOrStop(status,id);
return Result.success();
}
~~~service
void startOrStop(Integer status, Long id);
~~~serviceImpl
@Override
public void startOrStop(Integer status, Long id) {
//起售套餐时,判断套餐内是否有停售菜品,有停售菜品提示"套餐内包含未启售菜品,无法启售"
if(status == StatusConstant.ENABLE){
//select a.* from dish a left join setmeal_dish b on a.id = b.dish_id where b.setmeal_id = ?
List<Dish> dishList = dishMapper.getBySetmealId(id);
if(dishList != null && dishList.size() > 0){
dishList.forEach(dish -> {
if(StatusConstant.DISABLE == dish.getStatus()){
throw new SetmealEnableFailedException(MessageConstant.SETMEAL_ENABLE_FAILED);
}
});
}
}
Setmeal setmeal = Setmeal.builder()
.id(id)
.status(status)
.build();
setmealMapper.update(setmeal);
}
~~~mapper