package com.izouma.nineth.service; import com.izouma.nineth.domain.MetaBoatPosition; import com.izouma.nineth.domain.MetaSpatialInfo; import com.izouma.nineth.domain.MetaSpatialWharf; import com.izouma.nineth.dto.MetaRestResult; import com.izouma.nineth.dto.PageQuery; import com.izouma.nineth.enums.MetaIsLandTypeEnum; import com.izouma.nineth.repo.MetaBoatPositionRepo; import com.izouma.nineth.repo.MetaSpatialInfoRepo; import com.izouma.nineth.repo.MetaSpatialWharfRepo; import com.izouma.nineth.utils.JpaUtils; import com.izouma.nineth.utils.SecurityUtils; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import java.util.List; import java.util.Objects; @Service @AllArgsConstructor public class MetaBoatPositionService { private MetaBoatPositionRepo metaBoatPositionRepo; private MetaSpatialInfoRepo metaSpatialInfoRepo; private MetaSpatialWharfRepo metaSpatialWharfRepo; public Page all(PageQuery pageQuery) { return metaBoatPositionRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaBoatPosition.class), JpaUtils.toPageRequest(pageQuery)); } public MetaRestResult> queryBoatPosition(Long spaceInfoId) { Long userId = SecurityUtils.getAuthenticatedUser().getId(); MetaSpatialInfo metaSpatialInfo = metaSpatialInfoRepo.findByIdAndDel(spaceInfoId, false); if (Objects.isNull(metaSpatialInfo)) { return MetaRestResult.returnError("查询不到空间信息"); } if (!metaSpatialInfo.getUserId().equals(userId)) { return MetaRestResult.returnError("该空间不属于你"); } if (metaSpatialInfo.getType() != 2) { return MetaRestResult.returnError("该空间不属于万岛空间"); } MetaIsLandTypeEnum metaIsLandTypeEnum = queryIsLandType(metaSpatialInfo.getSize()); if (Objects.isNull(metaIsLandTypeEnum)) { return MetaRestResult.returnError("该空间大小不合法"); } List metaBoatPositions = metaBoatPositionRepo.findAllByTypeAndDel(metaIsLandTypeEnum, false); metaBoatPositions.forEach(metaBoatPosition -> { MetaSpatialWharf metaSpatialWharf = metaSpatialWharfRepo.findAllByIsLandIdAndMetaBoatPositionIdAndDel(spaceInfoId, metaBoatPosition.getId(), false); if (Objects.nonNull(metaSpatialWharf)) { metaSpatialWharf.setMeUse(metaSpatialWharf.getUserId().equals(userId)); metaBoatPosition.setBoatInfo(metaSpatialWharf); } }); return MetaRestResult.returnSuccess(metaBoatPositions); } private MetaIsLandTypeEnum queryIsLandType(int size) { switch (size) { case 10000: return MetaIsLandTypeEnum.TEN_THOUSAND; case 60000: return MetaIsLandTypeEnum.SIXTY_THOUSAND; case 90000: return MetaIsLandTypeEnum.NINETY_THOUSAND; default: return null; } } }