|
|
@ -3,6 +3,7 @@ package com.youlai.boot.mini.service.impl; |
|
|
import ch.hsr.geohash.GeoHash; |
|
|
import ch.hsr.geohash.GeoHash; |
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
import cn.hutool.core.collection.CollUtil; |
|
|
import cn.hutool.core.lang.Assert; |
|
|
import cn.hutool.core.lang.Assert; |
|
|
|
|
|
import cn.hutool.core.util.StrUtil; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
@ -29,6 +30,8 @@ import com.youlai.boot.mini.model.entity.MiniStrayAnimalNote; |
|
|
import com.youlai.boot.mini.model.entity.MiniStrayAnimalNoteMedia; |
|
|
import com.youlai.boot.mini.model.entity.MiniStrayAnimalNoteMedia; |
|
|
import com.youlai.boot.mini.model.form.StrayAnimalForm; |
|
|
import com.youlai.boot.mini.model.form.StrayAnimalForm; |
|
|
import com.youlai.boot.mini.model.query.OwnStrayAnimalQuery; |
|
|
import com.youlai.boot.mini.model.query.OwnStrayAnimalQuery; |
|
|
|
|
|
import com.youlai.boot.mini.model.vo.MiniStrayAnimalNoteMediaVO; |
|
|
|
|
|
import com.youlai.boot.mini.model.vo.StrayAnimalDetailsVO; |
|
|
import com.youlai.boot.mini.model.vo.StrayAnimalShortVO; |
|
|
import com.youlai.boot.mini.model.vo.StrayAnimalShortVO; |
|
|
import com.youlai.boot.mini.service.StrayAnimalService; |
|
|
import com.youlai.boot.mini.service.StrayAnimalService; |
|
|
import lombok.RequiredArgsConstructor; |
|
|
import lombok.RequiredArgsConstructor; |
|
|
@ -38,6 +41,7 @@ import org.apache.commons.io.FilenameUtils; |
|
|
import org.locationtech.jts.geom.Coordinate; |
|
|
import org.locationtech.jts.geom.Coordinate; |
|
|
import org.locationtech.jts.geom.GeometryFactory; |
|
|
import org.locationtech.jts.geom.GeometryFactory; |
|
|
import org.locationtech.jts.geom.Point; |
|
|
import org.locationtech.jts.geom.Point; |
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
import org.springframework.web.multipart.MultipartFile; |
|
|
@ -55,6 +59,13 @@ import java.util.*; |
|
|
@Slf4j |
|
|
@Slf4j |
|
|
public class StrayAnimalServiceImpl extends ServiceImpl<MiniStrayAnimalMapper, MiniStrayAnimal> implements StrayAnimalService { |
|
|
public class StrayAnimalServiceImpl extends ServiceImpl<MiniStrayAnimalMapper, MiniStrayAnimal> implements StrayAnimalService { |
|
|
|
|
|
|
|
|
|
|
|
@Value("${oss.aliyun.endpoint}") |
|
|
|
|
|
private String endpoint; |
|
|
|
|
|
|
|
|
|
|
|
@Value("${oss.aliyun.bucket-name}") |
|
|
|
|
|
private String bucketName; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final AliyunFileService aliyunFileService; |
|
|
private final AliyunFileService aliyunFileService; |
|
|
|
|
|
|
|
|
private final MiniStrayAnimalNoteMapper miniStrayAnimalNoteMapper; |
|
|
private final MiniStrayAnimalNoteMapper miniStrayAnimalNoteMapper; |
|
|
@ -63,6 +74,10 @@ public class StrayAnimalServiceImpl extends ServiceImpl<MiniStrayAnimalMapper, M |
|
|
|
|
|
|
|
|
private final MiniStrayAnimalConverter miniStrayAnimalConverter; |
|
|
private final MiniStrayAnimalConverter miniStrayAnimalConverter; |
|
|
|
|
|
|
|
|
|
|
|
public String getDefaultCatCoverHost() { |
|
|
|
|
|
return "https://" + bucketName + "." + endpoint; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
@ -85,7 +100,6 @@ public class StrayAnimalServiceImpl extends ServiceImpl<MiniStrayAnimalMapper, M |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void saveMediaFiles(MiniStrayAnimalNote note, List<MultipartFile> images, List<MultipartFile> videos, long currentTimestamp) { |
|
|
private void saveMediaFiles(MiniStrayAnimalNote note, List<MultipartFile> images, List<MultipartFile> videos, long currentTimestamp) { |
|
|
long sortOrder = currentTimestamp; |
|
|
|
|
|
// 处理图片
|
|
|
// 处理图片
|
|
|
if (images != null) { |
|
|
if (images != null) { |
|
|
for (MultipartFile image : images) { |
|
|
for (MultipartFile image : images) { |
|
|
@ -105,7 +119,6 @@ public class StrayAnimalServiceImpl extends ServiceImpl<MiniStrayAnimalMapper, M |
|
|
BufferedImage imageInfo = ImageIO.read(image.getInputStream()); |
|
|
BufferedImage imageInfo = ImageIO.read(image.getInputStream()); |
|
|
miniStrayAnimalNoteMedia.setWidth(imageInfo.getWidth()); |
|
|
miniStrayAnimalNoteMedia.setWidth(imageInfo.getWidth()); |
|
|
miniStrayAnimalNoteMedia.setHeight(imageInfo.getHeight()); |
|
|
miniStrayAnimalNoteMedia.setHeight(imageInfo.getHeight()); |
|
|
miniStrayAnimalNoteMedia.setSortOrder(sortOrder++); |
|
|
|
|
|
miniStrayAnimalNoteMedia.setCreateTimestamp(currentTimestamp); |
|
|
miniStrayAnimalNoteMedia.setCreateTimestamp(currentTimestamp); |
|
|
miniStrayAnimalNoteMedia.setCreateTime(new Date(currentTimestamp)); |
|
|
miniStrayAnimalNoteMedia.setCreateTime(new Date(currentTimestamp)); |
|
|
miniStrayAnimalNoteMedia.setCreateBy(note.getMiniUserId()); |
|
|
miniStrayAnimalNoteMedia.setCreateBy(note.getMiniUserId()); |
|
|
@ -135,7 +148,6 @@ public class StrayAnimalServiceImpl extends ServiceImpl<MiniStrayAnimalMapper, M |
|
|
miniStrayAnimalNoteMedia.setMediaType(AnimalNoteMediaTypeEnum.VIDEO.name().toLowerCase()); |
|
|
miniStrayAnimalNoteMedia.setMediaType(AnimalNoteMediaTypeEnum.VIDEO.name().toLowerCase()); |
|
|
miniStrayAnimalNoteMedia.setSourceUrl(url); |
|
|
miniStrayAnimalNoteMedia.setSourceUrl(url); |
|
|
miniStrayAnimalNoteMedia.setStorageKey(objectName); |
|
|
miniStrayAnimalNoteMedia.setStorageKey(objectName); |
|
|
miniStrayAnimalNoteMedia.setSortOrder(sortOrder++); |
|
|
|
|
|
miniStrayAnimalNoteMedia.setCreateTimestamp(currentTimestamp); |
|
|
miniStrayAnimalNoteMedia.setCreateTimestamp(currentTimestamp); |
|
|
miniStrayAnimalNoteMedia.setCreateTime(new Date(currentTimestamp)); |
|
|
miniStrayAnimalNoteMedia.setCreateTime(new Date(currentTimestamp)); |
|
|
miniStrayAnimalNoteMedia.setCreateBy(note.getMiniUserId()); |
|
|
miniStrayAnimalNoteMedia.setCreateBy(note.getMiniUserId()); |
|
|
@ -235,6 +247,7 @@ public class StrayAnimalServiceImpl extends ServiceImpl<MiniStrayAnimalMapper, M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
public void updateStrayAnimal(String animalUuid, StrayAnimalForm formData) { |
|
|
public void updateStrayAnimal(String animalUuid, StrayAnimalForm formData) { |
|
|
// 校验动物是否存在
|
|
|
// 校验动物是否存在
|
|
|
MiniStrayAnimal animal = getValidAnimal(animalUuid); |
|
|
MiniStrayAnimal animal = getValidAnimal(animalUuid); |
|
|
@ -435,10 +448,62 @@ public class StrayAnimalServiceImpl extends ServiceImpl<MiniStrayAnimalMapper, M |
|
|
|
|
|
|
|
|
queryParams.setMiniUserId(SecurityUtils.getUserId()); |
|
|
queryParams.setMiniUserId(SecurityUtils.getUserId()); |
|
|
|
|
|
|
|
|
|
|
|
IPage<StrayAnimalShortVO> result = this.miniStrayAnimalMapper.getOwnPage(page, queryParams); |
|
|
|
|
|
if (result.getTotal() > 0) { |
|
|
|
|
|
result.getRecords().forEach(item -> { |
|
|
|
|
|
if (StrUtil.isBlank(item.getFirstImageUrl())) { |
|
|
|
|
|
switch (item.getAnimalType()) { |
|
|
|
|
|
case "cat": |
|
|
|
|
|
item.setFirstImageUrl(getDefaultCatCoverHost() + "/default_cat.png"); |
|
|
|
|
|
break; |
|
|
|
|
|
case "dog": |
|
|
|
|
|
item.setFirstImageUrl(getDefaultCatCoverHost() + "/default_dog.png"); |
|
|
|
|
|
break; |
|
|
|
|
|
default: |
|
|
|
|
|
item.setFirstImageUrl(getDefaultCatCoverHost() + "/default_other.png"); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
// 查询数据
|
|
|
// 查询数据
|
|
|
// return this.miniStrayAnimalMapper.getOwnPage(page, queryParams);
|
|
|
|
|
|
IPage<StrayAnimalShortVO> result = null; |
|
|
|
|
|
return result; |
|
|
return result; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public StrayAnimalDetailsVO getDetails(String animalUuid, Long miniUserId) { |
|
|
|
|
|
// 校验动物是否存在
|
|
|
|
|
|
MiniStrayAnimal animal = getValidAnimal(animalUuid); |
|
|
|
|
|
|
|
|
|
|
|
StrayAnimalDetailsVO strayAnimalDetailsVO = miniStrayAnimalMapper.getStrayAnimalDetails(animalUuid, miniUserId); |
|
|
|
|
|
|
|
|
|
|
|
MiniStrayAnimalNote appStrayAnimalNote = miniStrayAnimalNoteMapper.selectOne(new LambdaQueryWrapper<MiniStrayAnimalNote>() |
|
|
|
|
|
.eq(MiniStrayAnimalNote::getStrayAnimalId, animal.getId())); |
|
|
|
|
|
if (appStrayAnimalNote != null) { |
|
|
|
|
|
Map<String, Object> param = new HashMap<>(); |
|
|
|
|
|
param.put("noteId", appStrayAnimalNote.getId()); |
|
|
|
|
|
|
|
|
|
|
|
param.put("mediaType", AnimalNoteMediaTypeEnum.IMAGE.name().toLowerCase()); |
|
|
|
|
|
List<MiniStrayAnimalNoteMediaVO> images = miniStrayAnimalNoteMediaMapper.getMediaByNoteIdAndType(param); |
|
|
|
|
|
if (CollectionUtils.isNotEmpty(images)) { |
|
|
|
|
|
images.forEach(item -> { |
|
|
|
|
|
item.setNoteUuid(appStrayAnimalNote.getUuid()); |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
param.put("mediaType", AnimalNoteMediaTypeEnum.VIDEO.name().toLowerCase()); |
|
|
|
|
|
List<MiniStrayAnimalNoteMediaVO> videos = miniStrayAnimalNoteMediaMapper.getMediaByNoteIdAndType(param); |
|
|
|
|
|
if (CollectionUtils.isNotEmpty(videos)) { |
|
|
|
|
|
videos.forEach(item -> { |
|
|
|
|
|
item.setNoteUuid(appStrayAnimalNote.getUuid()); |
|
|
|
|
|
}); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
strayAnimalDetailsVO.setImages(images); |
|
|
|
|
|
strayAnimalDetailsVO.setVideos(videos); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return strayAnimalDetailsVO; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|