|
@@ -0,0 +1,213 @@
|
|
|
|
|
+package org.jeecg.modules.rooms.service;
|
|
|
|
|
+
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
|
|
+import cn.hutool.core.bean.copier.CopyOptions;
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
+import com.baomidou.mybatisplus.extension.service.IService;
|
|
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
+import org.apache.commons.collections.map.HashedMap;
|
|
|
|
|
+import org.apache.commons.lang3.ObjectUtils;
|
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
+import org.jeecg.common.api.vo.Result;
|
|
|
|
|
+import org.jeecg.modules.business.entity.BusHotel;
|
|
|
|
|
+import org.jeecg.modules.business.service.impl.BusHotelServiceImpl;
|
|
|
|
|
+import org.jeecg.modules.rooms.DTO.BatchBuildFloorRoomDto;
|
|
|
|
|
+import org.jeecg.modules.rooms.DTO.BatchRoomsDto;
|
|
|
|
|
+import org.jeecg.modules.rooms.DTO.CesRoomSearchDto;
|
|
|
|
|
+import org.jeecg.modules.rooms.DTO.CesRoomsDto;
|
|
|
|
|
+import org.jeecg.modules.rooms.Enum.CouponEnums;
|
|
|
|
|
+import org.jeecg.modules.rooms.Vo.CesRoomsVo;
|
|
|
|
|
+import org.jeecg.modules.rooms.entity.CesRoomBuildingFloor;
|
|
|
|
|
+import org.jeecg.modules.rooms.entity.CesRooms;
|
|
|
|
|
+import org.jeecg.modules.rooms.mapper.CesRoomsMapper;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+
|
|
|
|
|
+import javax.annotation.Resource;
|
|
|
|
|
+import javax.transaction.Transactional;
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * <p>
|
|
|
|
|
+ * 服务实现类
|
|
|
|
|
+ * </p>
|
|
|
|
|
+ *
|
|
|
|
|
+ * @author fendo
|
|
|
|
|
+ * @since 2023-03-07
|
|
|
|
|
+ */
|
|
|
|
|
+@Service
|
|
|
|
|
+public class CesRoomsServiceImpl extends ServiceImpl<CesRoomsMapper, CesRooms> implements IService<CesRooms> {
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private CesRoomsMapper roomsMapper;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private BusHotelServiceImpl busHotelService;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private CesRoomBuildingFloorServiceImpl buildingFloorService;
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 查询房间
|
|
|
|
|
+ * @param dto
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ public Result list(CesRoomSearchDto dto){
|
|
|
|
|
+
|
|
|
|
|
+ QueryWrapper<CesRooms> queryWrapper = new QueryWrapper<>();
|
|
|
|
|
+ if(!StringUtils.isBlank(dto.getBuildId())){
|
|
|
|
|
+ queryWrapper.eq(CesRooms.BUILD_ID,dto.getBuildId());
|
|
|
|
|
+ }
|
|
|
|
|
+ if(!StringUtils.isBlank(dto.getFloorId())){
|
|
|
|
|
+ queryWrapper.eq(CesRooms.FLOOR_ID,dto.getFloorId());
|
|
|
|
|
+ }
|
|
|
|
|
+ if(!StringUtils.isBlank(dto.getHotelIds())){
|
|
|
|
|
+ List<String> hotelIds = Arrays.stream(dto.getHotelIds().split(",")).collect(Collectors.toList());
|
|
|
|
|
+ queryWrapper.in(CesRooms.HOTEL_ID, hotelIds);
|
|
|
|
|
+ }
|
|
|
|
|
+ queryWrapper.eq(CesRooms.INVALID,false);
|
|
|
|
|
+ queryWrapper.orderByDesc(CesRooms.SORT, CesRooms.CREATEAT);
|
|
|
|
|
+ IPage<CesRooms> dataPage = roomsMapper.selectPage(new Page<>(dto.getPageNo().intValue(),dto.getPageSize().intValue()),queryWrapper);
|
|
|
|
|
+ List<CesRooms> records = dataPage.getRecords();
|
|
|
|
|
+ Map<String,Object> map = new HashedMap();
|
|
|
|
|
+
|
|
|
|
|
+ if(!CollectionUtil.isEmpty(records)){
|
|
|
|
|
+
|
|
|
|
|
+ List<String> hotelIds = records.stream().map(v -> v.getHotelId()).collect(Collectors.toList());
|
|
|
|
|
+ List<String> buildIds = records.stream().map(v -> v.getBuildId()).collect(Collectors.toList());
|
|
|
|
|
+ List<String> floorIds = records.stream().map(v -> v.getFloorId()).collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ List<BusHotel> busHotels = busHotelService.findHotelsByIds(hotelIds);
|
|
|
|
|
+ buildIds.addAll(floorIds);
|
|
|
|
|
+ List<CesRoomBuildingFloor> buildingFloors = buildingFloorService.getBuildFloorsByIds(buildIds);
|
|
|
|
|
+
|
|
|
|
|
+ List<CesRoomsVo> result = new ArrayList<>();
|
|
|
|
|
+
|
|
|
|
|
+ records.forEach(v -> {
|
|
|
|
|
+ CesRoomsVo vo = new CesRoomsVo();
|
|
|
|
|
+ BeanUtil.copyProperties(v,vo);
|
|
|
|
|
+
|
|
|
|
|
+ Optional<BusHotel> hotelOptional = busHotels.stream().filter(h -> h.getId().equals(v.getHotelId())).findFirst();
|
|
|
|
|
+ if (hotelOptional.isPresent()) vo.setHotelName(hotelOptional.get().getName());
|
|
|
|
|
+
|
|
|
|
|
+ Optional<CesRoomBuildingFloor> buildingOptional = buildingFloors.stream().filter(b -> b.getId().equals(v.getBuildId())).findFirst();
|
|
|
|
|
+ if (buildingOptional.isPresent()) vo.setBuildName(buildingOptional.get().getName());
|
|
|
|
|
+
|
|
|
|
|
+ Optional<CesRoomBuildingFloor> floorOptional = buildingFloors.stream().filter(b -> b.getId().equals(v.getFloorId())).findFirst();
|
|
|
|
|
+ if (floorOptional.isPresent()) vo.setFloorName(floorOptional.get().getName());
|
|
|
|
|
+
|
|
|
|
|
+ result.add(vo);
|
|
|
|
|
+ });
|
|
|
|
|
+ map.put("records",result);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ map.put("records",records);
|
|
|
|
|
+ }
|
|
|
|
|
+ map.put("total",dataPage.getTotal());
|
|
|
|
|
+ return Result.OK(map);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 创建房间
|
|
|
|
|
+ * @param roomsDto
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ public Result create(CesRoomsDto roomsDto){
|
|
|
|
|
+ roomsDto.setCreateAt(LocalDateTime.now());
|
|
|
|
|
+ roomsDto.setSort(99);
|
|
|
|
|
+ roomsDto.setInvalid(false);
|
|
|
|
|
+ roomsDto.setUpdateAt(LocalDateTime.now());
|
|
|
|
|
+ roomsMapper.insert(roomsDto);
|
|
|
|
|
+ return Result.ok("创建成功!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ public Result modify(CesRoomsDto roomsDto){
|
|
|
|
|
+ CesRooms room = baseMapper.selectOne(Wrappers.<CesRooms>lambdaQuery().eq(CesRooms::getId, roomsDto.getId()).eq(CesRooms::getInvalid,false));
|
|
|
|
|
+ if(ObjectUtils.isEmpty(room)) return Result.ok("数据未找到!");
|
|
|
|
|
+ BeanUtil.copyProperties(roomsDto,room, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
|
|
|
|
|
+ room.setUpdateAt(LocalDateTime.now());
|
|
|
|
|
+ roomsMapper.updateById(room);
|
|
|
|
|
+ return Result.ok("修改成功!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 前端删除一个
|
|
|
|
|
+ * @param id
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ public Result deleteOne(String id){
|
|
|
|
|
+ CesRooms rooms = roomsMapper.selectOne(Wrappers.<CesRooms>lambdaQuery().eq(CesRooms::getId,id).eq(CesRooms::getInvalid,false));
|
|
|
|
|
+ if(ObjectUtils.isEmpty(rooms)) return Result.ok("删除成功!");
|
|
|
|
|
+ rooms.setInvalid(true);
|
|
|
|
|
+ rooms.setUpdateAt(LocalDateTime.now());
|
|
|
|
|
+ roomsMapper.updateById(rooms);
|
|
|
|
|
+ return Result.ok("删除成功!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public Result delete(List<String> ids){
|
|
|
|
|
+ List<CesRooms> rooms = roomsMapper.selectBatchIds(ids);
|
|
|
|
|
+ if(CollectionUtil.isEmpty(rooms)) return Result.ok("删除成功!");
|
|
|
|
|
+ rooms.forEach(v -> {
|
|
|
|
|
+ v.setUpdateAt(LocalDateTime.now());
|
|
|
|
|
+ v.setInvalid(true);
|
|
|
|
|
+ });
|
|
|
|
|
+ saveOrUpdateBatch(rooms);
|
|
|
|
|
+ return Result.ok("删除成功!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ public Result removeAll(String hotelId){
|
|
|
|
|
+ List<CesRooms> rooms = roomsMapper.selectList(Wrappers.<CesRooms>lambdaQuery().eq(CesRooms::getHotelId, hotelId).eq(CesRooms::getInvalid,false));
|
|
|
|
|
+ if(CollectionUtil.isEmpty(rooms)) return Result.ok("删除成功!");
|
|
|
|
|
+ rooms.forEach(v -> {
|
|
|
|
|
+ v.setUpdateAt(LocalDateTime.now());
|
|
|
|
|
+ v.setInvalid(true);
|
|
|
|
|
+ });
|
|
|
|
|
+ saveOrUpdateBatch(rooms);
|
|
|
|
|
+ return Result.ok("全部删除成功!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 批量新增楼层房间
|
|
|
|
|
+ * @param batchRoomsDto
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ @Transactional(rollbackOn = Exception.class)
|
|
|
|
|
+ public Result saveBatchRoom(BatchRoomsDto batchRoomsDto){
|
|
|
|
|
+ CesRoomBuildingFloor buildingFloor = buildingFloorService.getBuildFloorById(batchRoomsDto.getBuildId());
|
|
|
|
|
+ if(ObjectUtils.isEmpty(buildingFloor)) return Result.error("楼栋不正确,请重新选择!");
|
|
|
|
|
+ List<BatchBuildFloorRoomDto> floorRoomsList = batchRoomsDto.getChildren();
|
|
|
|
|
+ List<CesRooms> rooms = new ArrayList<>();
|
|
|
|
|
+ floorRoomsList.forEach(v -> {
|
|
|
|
|
+ //生成楼层数据
|
|
|
|
|
+ CesRoomBuildingFloor floor = new CesRoomBuildingFloor();
|
|
|
|
|
+ floor.setHotelId(batchRoomsDto.getHotelId());
|
|
|
|
|
+ floor.setParentId(buildingFloor.getId());
|
|
|
|
|
+ floor.setName(v.getFloorName());
|
|
|
|
|
+ floor.setType(CouponEnums.RoomBuildingFloorTypeEnum.FLOOR.code());
|
|
|
|
|
+ floor.setCreateAt(LocalDateTime.now());
|
|
|
|
|
+ floor.setUpdateAt(LocalDateTime.now());
|
|
|
|
|
+
|
|
|
|
|
+ buildingFloorService.save(floor);
|
|
|
|
|
+ List<CesRooms> roomsList = v.getChildren();
|
|
|
|
|
+ roomsList.forEach(room -> {
|
|
|
|
|
+ room.setHotelId(batchRoomsDto.getHotelId());
|
|
|
|
|
+ room.setBuildId(buildingFloor.getId());
|
|
|
|
|
+ room.setFloorId(floor.getId());
|
|
|
|
|
+ room.setCreateAt(LocalDateTime.now());
|
|
|
|
|
+ room.setUpdateAt(LocalDateTime.now());
|
|
|
|
|
+ rooms.add(room);
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ saveBatch(rooms);
|
|
|
|
|
+ return Result.ok("保存成功!");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|