package com.chuanghai.ihotel.service.impl; import com.chuanghai.ihotel.common.exception.BizCodeEnume; import com.chuanghai.ihotel.common.exception.RRException; import com.chuanghai.ihotel.controller.request.RoomQueryRequest; import com.chuanghai.ihotel.entity.RoomTypeEntity; import com.chuanghai.ihotel.service.RoomTypeService; import com.chuanghai.ihotel.vo.RoomGroupVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.chuanghai.ihotel.common.utils.PageUtils; import com.chuanghai.ihotel.common.utils.MyQuery; import com.chuanghai.ihotel.common.utils.PageParam; import com.chuanghai.ihotel.dao.RoomDao; import com.chuanghai.ihotel.entity.RoomEntity; import com.chuanghai.ihotel.service.RoomService; import org.springframework.util.StringUtils; import java.util.List; import java.util.Map; import java.util.Set; @Service("roomService") public class RoomServiceImpl extends ServiceImpl implements RoomService { @Autowired private RoomTypeService roomTypeService; @Cacheable(value = {"room"}, key = "#root.method.name " + "+ '-' + #pageParam.curPage " + "+ '-' + #pageParam.pageSize " + "+ '-' + #pageParam.orderField " + "+ '-' + #pageParam.order " + "+ '-' + #request.roomNo " + "+ '-' + #request.build " + "+ '-' + #request.floor " + "+ '-' + #request.roomTypeId") @Override public PageUtils queryPage(PageParam pageParam, RoomQueryRequest request) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq(StringUtils.hasText(request.getRoomNo()), "room_no", request.getRoomNo()); queryWrapper.eq(StringUtils.hasText(request.getBuild()), "build", request.getBuild()); queryWrapper.eq(StringUtils.hasText(request.getFloor()), "floor", request.getFloor()); queryWrapper.eq(request.getRoomTypeId() != null, "room_type_id", request.getRoomTypeId()); IPage page = this.page( new MyQuery().getPage(pageParam), queryWrapper ); return new PageUtils(page); } @Cacheable(value = {"room"}, key = "#root.method.name " + "+ '-' + #pageParam.curPage " + "+ '-' + #pageParam.pageSize " + "+ '-' + #pageParam.orderField " + "+ '-' + #pageParam.order " + "+ '-' + #request.roomNo " + "+ '-' + #request.build " + "+ '-' + #request.floor " + "+ '-' + #request.roomTypeId") @Override public PageUtils queryPageGroup(PageParam pageParam, RoomQueryRequest request) { IPage page =this.getBaseMapper().queryPageGroup(new MyQuery().getPage(pageParam), request); return new PageUtils<>(page); } @CacheEvict(value = "room", allEntries = true) @Override public void mySave(RoomEntity room) { // 检测房型是否存在 RoomTypeEntity roomType = roomTypeService.getById(room.getRoomTypeId()); if (roomType == null) { throw new RRException(BizCodeEnume.PARAMETER_ERROR, "无效的roomTypeId"); } room.setRoomTypeName(roomType.getTypeName()); this.save(room); // 增加房型数量 roomType.setRoomNum(roomType.getRoomNum() + 1); roomTypeService.updateById(roomType); } @Override public Long getRoomIdNotIn(Long roomTypeId, List roomIds) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("room_type_id", roomTypeId); queryWrapper.notIn(roomIds.size()> 0, "id", roomIds); queryWrapper.last("limit 1"); RoomEntity room = this.getOne(queryWrapper); if (room != null) { return room.getId(); } else { return null; } } @CacheEvict(value = "room", allEntries = true) @Override public boolean myUpdate(RoomEntity room) { return this.updateById(room); } @CacheEvict(value = "room", allEntries = true) @Override public boolean myRemoveByIds(List ids) { return this.removeByIds(ids); } @Override public List getByRoomIds(Set roomIds) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.in("id", roomIds); return this.list(queryWrapper); } }