根据接口设计进行代码实现
3.1DishController
目录
/**
* 菜品起售停售
* @param status
* @param id
* @return
*/
@PostMapping("/status/{status}")
@ApiOperation("菜品起售停售")
public Result<String> startOrStop(@PathVariable Integer status, Long id){
dishService.startOrStop(status,id);
return Result.success();
}
3.2DishService
/**
* 菜品起售停售
* @param status
* @param id
*/
void startOrStop(Integer status, Long id);
3.3DishServiceImpl
在setmealDishMapper.getSetmealIdsByDishIds(dishIds)中,之前课程中该部分代码已经写好了,但是在调试过程中发现之前传入的ids,所以我在SetmealDishMapper.xml中加入了新的SQL语句防止别名对不上导致错误
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.mapper.SetmealDishMapper">
<select id="getSetmealIdsByDishIds" resultType="java.lang.Long">
select setmeal_id from sky_take_out.setmeal_dish where dish_id in
<foreach collection="ids" separator="," open="(" close=")" item="dishId">
#{dishId}
</foreach>
</select>
<select id="getSetmealIdsByDishId" resultType="java.lang.Long">
select setmeal_id from sky_take_out.setmeal_dish where dish_id in
<foreach collection="dishIds" separator="," open="(" close=")" item="dishId">
#{dishId}
</foreach>
</select>
</mapper>
/**
* 菜品起售停售
*
* @param status
* @param id
*/
@Transactional
public void startOrStop(Integer status, Long id) {
Dish dish = Dish.builder()
.id(id)
.status(status)
.build();
dishMapper.update(dish);
if (status == StatusConstant.DISABLE) {
// 如果是停售操作,还需要将包含当前菜品的套餐也停售
List<Long> dishIds = new ArrayList<>();
dishIds.add(id);
// select setmeal_id from setmeal_dish where dish_id in (?,?,?)
List<Long> setmealIds = setmealDishMapper.getSetmealIdsByDishIds(dishIds);
if (setmealIds != null && setmealIds.size() > 0) {
for (Long setmealId : setmealIds) {
Setmeal setmeal = Setmeal.builder()
.id(setmealId)
.status(StatusConstant.DISABLE)
.build();
setmealMapper.update(setmeal);
}
}
}
}