package com.sky.service.impl; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.sky.constant.MessageConstant; import com.sky.constant.StatusConstant; import com.sky.dto.SetmealDTO; import com.sky.dto.SetmealPageQueryDTO; import com.sky.entity.Dish; import com.sky.entity.Setmeal; import com.sky.entity.SetmealDish; import com.sky.exception.DeletionNotAllowedException; import com.sky.exception.SetmealEnableFailedException; import com.sky.mapper.DishMapper; import com.sky.mapper.SetmealMapper; import com.sky.mapper.Setmeal_dishMapper; import com.sky.result.PageResult; import com.sky.service.SetmealService; import com.sky.vo.SetmealVO; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service public class SetmealServiceImpl implements SetmealService { @Autowired private SetmealMapper setmealMapper; @Autowired private Setmeal_dishMapper setmeal_dishMapper; @Autowired private DishMapper dishMapper; @Override public void addSetmeal(SetmealDTO setmealDTO) { Setmeal setmeal=new Setmeal(); BeanUtils.copyProperties(setmealDTO,setmeal); setmealMapper.insert(setmeal); List setmealDishList =setmealDTO.getSetmealDishes(); for(SetmealDish setmealDish:setmealDishList){ setmealDish.setSetmealId(setmeal.getId()); setmeal_dishMapper.add(setmealDish); } } @Override public PageResult pageQuery(SetmealPageQueryDTO setmealPageQueryDTO) { PageHelper.startPage(setmealPageQueryDTO.getPage(),setmealPageQueryDTO.getPageSize()); List setmealVOList=setmealMapper.queryByCond(setmealPageQueryDTO); Page p= (Page) setmealVOList; PageResult pageResult=new PageResult(p.getTotal(),p.getResult()); return pageResult; } @Override @Transactional public void deleteBatch(Long[] ids) { for(Long id:ids){ Setmeal setmeal = setmealMapper.getById(id); if(StatusConstant.ENABLE == setmeal.getStatus()){ //起售中的套餐不能删除 throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ON_SALE); } else{ Long setmealId=id; setmealMapper.deleteById(id); setmeal_dishMapper.deleteByDishId(id); } } } @Override public SetmealVO getByIdWithDish(Long id) { Setmeal setmeal = setmealMapper.getById(id); List setmealDishes = setmeal_dishMapper.getBySetmealId(id); SetmealVO setmealVO = new SetmealVO(); BeanUtils.copyProperties(setmeal, setmealVO); setmealVO.setSetmealDishes(setmealDishes); return setmealVO; } @Override public void update(SetmealDTO setmealDTO) { Setmeal setmeal = new Setmeal(); BeanUtils.copyProperties(setmealDTO, setmeal); //1、修改套餐表,执行update setmealMapper.update(setmeal); //套餐id Long setmealId = setmealDTO.getId(); //2、删除套餐和菜品的关联关系,操作setmeal_dish表,执行delete setmeal_dishMapper.deleteByDishId(setmealId); List setmealDishes = setmealDTO.getSetmealDishes(); setmealDishes.forEach(setmealDish -> { setmealDish.setSetmealId(setmealId); }); //3、重新插入套餐和菜品的关联关系,操作setmeal_dish表,执行insert for(SetmealDish setmealDish:setmealDishes){ setmeal_dishMapper.add(setmealDish); } } @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 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); } }