package com.izouma.nineth.service; import com.izouma.nineth.config.Constants; import com.izouma.nineth.domain.Asset; import com.izouma.nineth.domain.MetaSpatialWharf; import com.izouma.nineth.dto.MetaBoatDTO; import com.izouma.nineth.dto.MetaRestResult; import com.izouma.nineth.dto.PageQuery; import com.izouma.nineth.repo.AssetRepo; import com.izouma.nineth.repo.MetaSpatialWharfRepo; import com.izouma.nineth.utils.JpaUtils; import com.izouma.nineth.utils.SecurityUtils; import lombok.AllArgsConstructor; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Objects; @Service @AllArgsConstructor public class MetaSpatialWharfService { private MetaSpatialWharfRepo metaSpatialWharfRepo; private AssetRepo assetRepo; private final String BOAT_NAME = "%僵尸%"; public Page all(PageQuery pageQuery) { return metaSpatialWharfRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaSpatialWharf.class), JpaUtils.toPageRequest(pageQuery)); } public MetaRestResult park(MetaSpatialWharf metaSpatialWharf) { if (Objects.isNull(metaSpatialWharf)) { return MetaRestResult.returnError("Illegal parameter : parameter can not be null"); } if (Objects.isNull(metaSpatialWharf.getUserId())) { return MetaRestResult.returnError("Illegal parameter : userId can not be null"); } if (!metaSpatialWharf.getUserId().equals(SecurityUtils.getAuthenticatedUser().getId())) { return MetaRestResult.returnError("当前船只不属于你!"); } if (Objects.isNull(metaSpatialWharf.getBoatId())) { return MetaRestResult.returnError("Illegal parameter : boatId can not be null"); } if (Objects.isNull(metaSpatialWharf.getIsLandId())) { return MetaRestResult.returnError("Illegal parameter : isLandId can not be null"); } if (StringUtils.isBlank(metaSpatialWharf.getBoatType())) { return MetaRestResult.returnError("Illegal parameter : boatType can not be null"); } if (Objects.isNull(metaSpatialWharf.getMetaBoatPositionId())) { return MetaRestResult.returnError("Illegal parameter : metaBoatPositionId can not be null"); } MetaSpatialWharf position = metaSpatialWharfRepo.findByMetaBoatPositionIdAndDel(metaSpatialWharf.getMetaBoatPositionId(), false); if (Objects.nonNull(position)) { return MetaRestResult.returnError(String.format("该位置已被船[%S]停靠", position.getBoatId())); } MetaSpatialWharf dbMetaSpatialWharf = metaSpatialWharfRepo.findByBoatIdAndUserIdAndDel(metaSpatialWharf.getBoatId(), metaSpatialWharf.getUserId(), false); if (Objects.nonNull(dbMetaSpatialWharf)) { return MetaRestResult.returnError(String.format("该船只已经停靠在岛屿[%S]", dbMetaSpatialWharf.getIsLandId())); } Asset asset = assetRepo.findByIdAndUserIdAndDel(metaSpatialWharf.getBoatId(), metaSpatialWharf.getUserId(), false); if (Objects.isNull(asset)) { return MetaRestResult.returnError(String.format("藏品[%S]不存在", metaSpatialWharf.getBoatId())); } metaSpatialWharf.setBoatImg(asset.getPic().get(0).getUrl()); MetaSpatialWharf save = metaSpatialWharfRepo.save(metaSpatialWharf); save.setMeUse(true); return MetaRestResult.returnSuccess("停靠成功", save); } private String getRarityType(String name) { if (StringUtils.isBlank(name)) { return null; } if (name.contains(Constants.Rarity.U) && !name.contains(Constants.Rarity.UR)) { return Constants.Rarity.U; } if (name.contains(Constants.Rarity.R) && !name.contains(Constants.Rarity.SR)) { return Constants.Rarity.R; } if (name.contains(Constants.Rarity.SR) && !name.contains(Constants.Rarity.SSR)) { return Constants.Rarity.SR; } if (name.contains(Constants.Rarity.SSR)) { return Constants.Rarity.SSR; } if (name.contains(Constants.Rarity.UR)) { return Constants.Rarity.UR; } return null; } public MetaRestResult> queryBoats(List boatTypes) { if (CollectionUtils.isEmpty(boatTypes)) { return MetaRestResult.returnError("船只类型为空"); } List metaBoatDTOS = new ArrayList<>(); boatTypes.forEach(type -> { List parkingBoatIds = metaSpatialWharfRepo.findParkingBoatIds(SecurityUtils.getAuthenticatedUser().getId()); if (CollectionUtils.isEmpty(parkingBoatIds)) { parkingBoatIds = new ArrayList<>(); parkingBoatIds.add(0L); } List assets = findAllBoatsByType(type, parkingBoatIds); if (CollectionUtils.isNotEmpty(assets)) { assets.forEach(asset -> { metaBoatDTOS.add(new MetaBoatDTO(asset.getId(), asset.getPic().get(0).getUrl(), type)); }); } }); return MetaRestResult.returnSuccess(metaBoatDTOS); } private List findAllBoatsByType(String type, List parkingBoatIds) { Long id = SecurityUtils.getAuthenticatedUser().getId(); switch (type) { case Constants.Rarity.U: return assetRepo.findAllBoats(BOAT_NAME, Constants.META_NORMAL_STATUS, parkingBoatIds, Constants.Rarity.U_LIKE, Constants.Rarity.UR_LIKE, id); case Constants.Rarity.SR: return assetRepo.findAllBoats(BOAT_NAME, Constants.META_NORMAL_STATUS, parkingBoatIds, Constants.Rarity.SR_LIKE, Constants.Rarity.SSR_LIKE, id); case Constants.Rarity.SSR: return assetRepo.findAllBoats(BOAT_NAME, Constants.META_NORMAL_STATUS, parkingBoatIds, Constants.Rarity.SSR_LIKE, Constants.Rarity.U_LIKE, id); case Constants.Rarity.UR: return assetRepo.findAllBoats(BOAT_NAME, Constants.META_NORMAL_STATUS, parkingBoatIds, Constants.Rarity.UR_LIKE, Constants.Rarity.U_LIKE, id); default: return null; } } }