package com.izouma.nineth.service; import com.izouma.nineth.domain.MetaSpatialInfo; import com.izouma.nineth.domain.SpaceObjectsInfo; import com.izouma.nineth.dto.PageQuery; import com.izouma.nineth.exception.BusinessException; import com.izouma.nineth.repo.MetaSpatialInfoRepo; import com.izouma.nineth.repo.SpaceObjectsInfoRepo; import com.izouma.nineth.utils.JpaUtils; import com.izouma.nineth.utils.ObjUtils; import jodd.util.StringUtil; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.util.Objects; @Service @AllArgsConstructor public class MetaSpatialInfoService { private MetaSpatialInfoRepo metaSpatialInfoRepo; private SpaceObjectsInfoRepo spaceObjectsInfoRepo; public Page all(PageQuery pageQuery) { return metaSpatialInfoRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaSpatialInfo.class), JpaUtils.toPageRequest(pageQuery)); } @Transactional public MetaSpatialInfo save(MetaSpatialInfo record) { if (Objects.nonNull(record.getAssetId())) { MetaSpatialInfo metaSpatialInfo = metaSpatialInfoRepo.findByAssetIdAndDel(record.getAssetId(), false); if (Objects.nonNull(metaSpatialInfo) && !Objects.equals(metaSpatialInfo.getId(), record.getId())) { throw new BusinessException("当前资产id已经存在"); } } if (StringUtil.isNotBlank(record.getHcTxHash())) { MetaSpatialInfo metaSpatialInfo = metaSpatialInfoRepo.findByHcTxHashAndDel(record.getHcTxHash(), false); if (Objects.nonNull(metaSpatialInfo) && !Objects.equals(metaSpatialInfo.getId(), record.getId())) { throw new BusinessException("当前hash已经存在"); } } MetaSpatialInfo metaSpatialInfo = metaSpatialInfoRepo.findByRegionAndCoordinateAndDel(record.getRegion(), record.getCoordinate(), false); if (Objects.nonNull(metaSpatialInfo) && !Objects.equals(metaSpatialInfo.getId(), record.getId())) { throw new BusinessException("当前区域内已经存在该坐标的空间"); } if (record.getId() != null) { MetaSpatialInfo orig = metaSpatialInfoRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录")); ObjUtils.merge(orig, record); if (Objects.isNull(record.getAssetId())) { orig.setAssetId(null); } if (Objects.isNull(record.getUserId())) { orig.setUserId(null); } MetaSpatialInfo save = metaSpatialInfoRepo.save(orig); SpaceObjectsInfo spaceObjectsInfo = spaceObjectsInfoRepo.findBySpaceIdAndDel(save.getId(), false); if (Objects.isNull(spaceObjectsInfo)) { spaceObjectsInfo = new SpaceObjectsInfo(); } spaceObjectsInfo.setSpaceId(save.getId()); if (Objects.isNull(spaceObjectsInfo.getUserId()) || Objects.isNull(save.getUserId()) || !spaceObjectsInfo.getUserId().equals(save.getUserId())) { spaceObjectsInfo.setBuildingPosList(null); spaceObjectsInfo.setUserId(Objects.isNull(save.getUserId()) ? null : save.getUserId()); spaceObjectsInfoRepo.save(spaceObjectsInfo); } return save; } MetaSpatialInfo save = metaSpatialInfoRepo.save(record); SpaceObjectsInfo spaceObjectsInfo = new SpaceObjectsInfo(); spaceObjectsInfo.setSpaceId(save.getId()); spaceObjectsInfo.setBuildingPosList(null); spaceObjectsInfo.setUserId(Objects.isNull(save.getUserId()) ? null : save.getUserId()); spaceObjectsInfoRepo.save(spaceObjectsInfo); return save; } @Transactional public void del(Long id) { metaSpatialInfoRepo.softDelete(id); spaceObjectsInfoRepo.softDelete(id); } }