diff --git a/src/main/java/com/youlai/boot/auth/service/impl/WxMaAuthServiceImpl.java b/src/main/java/com/youlai/boot/auth/service/impl/WxMaAuthServiceImpl.java index 02d85bb..24bdb09 100644 --- a/src/main/java/com/youlai/boot/auth/service/impl/WxMaAuthServiceImpl.java +++ b/src/main/java/com/youlai/boot/auth/service/impl/WxMaAuthServiceImpl.java @@ -181,6 +181,7 @@ public class WxMaAuthServiceImpl implements WxMaAuthService { private SysUser createNewUser(String mobile) { SysUser user = new SysUser(); user.setMobile(mobile); + user.setUuid(IdUtil.fastSimpleUUID()); user.setUsername("wx_" + IdUtil.fastSimpleUUID().substring(0, 8)); user.setNickname("微信用户"); user.setStatus(1); diff --git a/src/main/java/com/youlai/boot/mini/controller/StrayAnimalController.java b/src/main/java/com/youlai/boot/mini/controller/StrayAnimalController.java index 6b501f5..4a37904 100644 --- a/src/main/java/com/youlai/boot/mini/controller/StrayAnimalController.java +++ b/src/main/java/com/youlai/boot/mini/controller/StrayAnimalController.java @@ -6,14 +6,19 @@ import com.youlai.boot.common.enums.ActionTypeEnum; import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.result.PageResult; import com.youlai.boot.common.result.Result; +import com.youlai.boot.framework.security.util.SecurityUtils; import com.youlai.boot.mini.model.dto.DeleteStrayAnimalDTO; import com.youlai.boot.mini.model.dto.DeleteStrayAnimalNoteMediaDTO; import com.youlai.boot.mini.model.dto.EditVisibilityDTO; import com.youlai.boot.mini.model.form.StrayAnimalForm; import com.youlai.boot.mini.model.query.OwnStrayAnimalQuery; +import com.youlai.boot.mini.model.vo.StrayAnimalDetailsVO; import com.youlai.boot.mini.model.vo.StrayAnimalShortVO; import com.youlai.boot.mini.service.StrayAnimalService; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -118,4 +123,13 @@ public class StrayAnimalController { return PageResult.success(strayAnimalService.getOwnPage(queryParams)); } + + @Operation(summary = "获取动物信息详情(登录状态下)") + @RequestMapping(value = "/getDetails/{animalUuid}", method = RequestMethod.GET) + public Result getDetails( + @PathVariable String animalUuid){ + return Result.success(strayAnimalService.getDetails(animalUuid, SecurityUtils.getUserId())); + } + + } diff --git a/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalMapper.java b/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalMapper.java index cbf9e27..4fd299e 100644 --- a/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalMapper.java +++ b/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalMapper.java @@ -5,7 +5,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.youlai.boot.mini.model.entity.MiniStrayAnimal; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.youlai.boot.mini.model.query.OwnStrayAnimalQuery; +import com.youlai.boot.mini.model.vo.StrayAnimalDetailsVO; import com.youlai.boot.mini.model.vo.StrayAnimalShortVO; +import org.apache.ibatis.annotations.Param; /** * 流浪动物基础信息表 Mapper 接口 @@ -19,5 +21,7 @@ public interface MiniStrayAnimalMapper extends BaseMapper { void updateStrayAnimal(MiniStrayAnimal miniStrayAnimal); - IPage getOwnPage(Page page, OwnStrayAnimalQuery queryParams); + IPage getOwnPage(Page page, @Param("queryParams") OwnStrayAnimalQuery queryParams); + + StrayAnimalDetailsVO getStrayAnimalDetails(@Param("animalUuid") String animalUuid, @Param("miniUserId") Long miniUserId); } diff --git a/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteMediaMapper.java b/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteMediaMapper.java index c326c67..0ebc1aa 100644 --- a/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteMediaMapper.java +++ b/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteMediaMapper.java @@ -2,16 +2,20 @@ package com.youlai.boot.mini.mapper; import com.youlai.boot.mini.model.entity.MiniStrayAnimalNoteMedia; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.youlai.boot.mini.model.vo.MiniStrayAnimalNoteMediaVO; +import java.util.List; import java.util.Map; /** * 流浪信息资源表 Mapper 接口 * * @author jwy -* @since +* @since */ public interface MiniStrayAnimalNoteMediaMapper extends BaseMapper { int getMediaCountByNoteIdAndType(Map param); + + List getMediaByNoteIdAndType(Map param); } diff --git a/src/main/java/com/youlai/boot/mini/model/entity/MiniStrayAnimalNoteMedia.java b/src/main/java/com/youlai/boot/mini/model/entity/MiniStrayAnimalNoteMedia.java index 5760a35..7f40ee3 100644 --- a/src/main/java/com/youlai/boot/mini/model/entity/MiniStrayAnimalNoteMedia.java +++ b/src/main/java/com/youlai/boot/mini/model/entity/MiniStrayAnimalNoteMedia.java @@ -60,10 +60,6 @@ public class MiniStrayAnimalNoteMedia implements Serializable { @Schema(description = "时长(秒,视频用)") private Integer duration; - @TableField("sort_order") - @Schema(description = "排序顺序") - private Long sortOrder; - @TableField("create_time") @Schema(description = "创建时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") diff --git a/src/main/java/com/youlai/boot/mini/model/vo/MiniStrayAnimalNoteMediaVO.java b/src/main/java/com/youlai/boot/mini/model/vo/MiniStrayAnimalNoteMediaVO.java new file mode 100644 index 0000000..4f4f7d4 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/model/vo/MiniStrayAnimalNoteMediaVO.java @@ -0,0 +1,36 @@ +package com.youlai.boot.mini.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class MiniStrayAnimalNoteMediaVO { + + @Schema(type = "string", description = "资源ID") + private String noteMediaUuid; + + @Schema(type = "string", description = "动物笔记UUID", example = "0677d62d63ec693bf1bd6dab8a877dc1", requiredMode = Schema.RequiredMode.REQUIRED) + private String noteUuid; + + @Schema(description = "媒体类型,image-图片,video-视频") + private String mediaType; + + @Schema(description = "资源URL") + private String sourceUrl; + + @Schema(description = "对象存储中的key") + private String storageKey; + + @Schema(description = "缩略图URL(视频需要)") + private String thumbnailUrl; + + @Schema(description = "宽度(像素)") + private Integer width; + + @Schema(description = "高度(像素)") + private Integer height; + + @Schema(description = "时长(秒,视频用)") + private Integer duration; + +} diff --git a/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalDetailsVO.java b/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalDetailsVO.java new file mode 100644 index 0000000..90b0891 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalDetailsVO.java @@ -0,0 +1,46 @@ +package com.youlai.boot.mini.model.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + + +@Data +public class StrayAnimalDetailsVO extends StrayAnimalShortVO { + + @Schema(description = "颜色", example = "白色") + private String color; + + @Schema(description = "体型,small-小,medium-中等,large-大", example = "medium") + private String size; + + @Schema(description = "状态,found-发现,adopted-已被领养,missing-失踪", example = "missing", required = true) + private String status="found"; + + @Schema(description = "经度", example = "118.08125") + private Double lng; + + @Schema(description = "纬度", example = "24.606929") + private Double lat; + + @Schema(description = "省", example = "福建省") + private String province; + + @Schema(description = "市", example = "厦门市") + private String city; + + @Schema(description = "区(县)", example = "集美区") + private String district; + + @Schema(description = "完整详细地址,含省市区(县)", example = "福建省厦门市集美区侨英街道莲花尚院1号院") + private String address; + + @Schema(description = "图片信息", example = "[]") + private List images; + + @Schema(description = "视频信息", example = "[]") + private List videos; + +} + diff --git a/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalShortVO.java b/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalShortVO.java index 7beea8f..b07deab 100644 --- a/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalShortVO.java +++ b/src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalShortVO.java @@ -7,8 +7,8 @@ import lombok.Data; @Data public class StrayAnimalShortVO { - @Schema(description = "作者id", example = "true") - private Long authorId; + @Schema(description = "作者uuid", example = "true") + private String authorUuid; @Schema(description = "作者昵称", example = "true") private String authorName; @@ -80,7 +80,7 @@ public class StrayAnimalShortVO { private Boolean isLiked; @Schema(description = "当前用户是否收藏", example = "false") - private Boolean Collected; + private Boolean isCollected; @Schema(description = "审核状态:0通过,1审核中,2审核未通过", example = "0") private Integer auditStatus; diff --git a/src/main/java/com/youlai/boot/mini/service/StrayAnimalService.java b/src/main/java/com/youlai/boot/mini/service/StrayAnimalService.java index f10d6c4..4c9cf40 100644 --- a/src/main/java/com/youlai/boot/mini/service/StrayAnimalService.java +++ b/src/main/java/com/youlai/boot/mini/service/StrayAnimalService.java @@ -8,6 +8,7 @@ import com.youlai.boot.mini.model.dto.EditVisibilityDTO; import com.youlai.boot.mini.model.entity.MiniStrayAnimal; import com.youlai.boot.mini.model.form.StrayAnimalForm; import com.youlai.boot.mini.model.query.OwnStrayAnimalQuery; +import com.youlai.boot.mini.model.vo.StrayAnimalDetailsVO; import com.youlai.boot.mini.model.vo.StrayAnimalShortVO; import jakarta.validation.Valid; import org.springframework.web.multipart.MultipartFile; @@ -29,5 +30,7 @@ public interface StrayAnimalService extends IService { void delete(DeleteStrayAnimalDTO deleteStrayAnimalDTO); IPage getOwnPage(OwnStrayAnimalQuery queryParams); + + StrayAnimalDetailsVO getDetails(String animalUuid, Long miniUserId); } diff --git a/src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalServiceImpl.java b/src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalServiceImpl.java index 41de9cf..9a536e9 100644 --- a/src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalServiceImpl.java +++ b/src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalServiceImpl.java @@ -3,6 +3,7 @@ package com.youlai.boot.mini.service.impl; import ch.hsr.geohash.GeoHash; import cn.hutool.core.collection.CollUtil; 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.update.LambdaUpdateWrapper; 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.form.StrayAnimalForm; 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.service.StrayAnimalService; import lombok.RequiredArgsConstructor; @@ -38,6 +41,7 @@ import org.apache.commons.io.FilenameUtils; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.GeometryFactory; import org.locationtech.jts.geom.Point; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -55,6 +59,13 @@ import java.util.*; @Slf4j public class StrayAnimalServiceImpl extends ServiceImpl implements StrayAnimalService { + @Value("${oss.aliyun.endpoint}") + private String endpoint; + + @Value("${oss.aliyun.bucket-name}") + private String bucketName; + + private final AliyunFileService aliyunFileService; private final MiniStrayAnimalNoteMapper miniStrayAnimalNoteMapper; @@ -63,6 +74,10 @@ public class StrayAnimalServiceImpl extends ServiceImpl images, List videos, long currentTimestamp) { - long sortOrder = currentTimestamp; // 处理图片 if (images != null) { for (MultipartFile image : images) { @@ -105,7 +119,6 @@ public class StrayAnimalServiceImpl extends ServiceImpl 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 result = null; 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() + .eq(MiniStrayAnimalNote::getStrayAnimalId, animal.getId())); + if (appStrayAnimalNote != null) { + Map param = new HashMap<>(); + param.put("noteId", appStrayAnimalNote.getId()); + + param.put("mediaType", AnimalNoteMediaTypeEnum.IMAGE.name().toLowerCase()); + List images = miniStrayAnimalNoteMediaMapper.getMediaByNoteIdAndType(param); + if (CollectionUtils.isNotEmpty(images)) { + images.forEach(item -> { + item.setNoteUuid(appStrayAnimalNote.getUuid()); + }); + } + + param.put("mediaType", AnimalNoteMediaTypeEnum.VIDEO.name().toLowerCase()); + List videos = miniStrayAnimalNoteMediaMapper.getMediaByNoteIdAndType(param); + if (CollectionUtils.isNotEmpty(videos)) { + videos.forEach(item -> { + item.setNoteUuid(appStrayAnimalNote.getUuid()); + }); + } + + strayAnimalDetailsVO.setImages(images); + strayAnimalDetailsVO.setVideos(videos); + } + + return strayAnimalDetailsVO; + } + } diff --git a/src/main/java/com/youlai/boot/system/model/entity/SysUser.java b/src/main/java/com/youlai/boot/system/model/entity/SysUser.java index 92cc954..fc7dbbe 100644 --- a/src/main/java/com/youlai/boot/system/model/entity/SysUser.java +++ b/src/main/java/com/youlai/boot/system/model/entity/SysUser.java @@ -13,6 +13,11 @@ import lombok.Setter; @Setter public class SysUser extends BaseEntity { + /** + * uuid + */ + private String uuid; + /** * 用户名 */ @@ -72,4 +77,4 @@ public class SysUser extends BaseEntity { * 是否删除(0-否 1-是) */ private Integer isDeleted; -} \ No newline at end of file +} diff --git a/src/main/resources/default-img/default_cat.png b/src/main/resources/default-img/default_cat.png new file mode 100644 index 0000000..670a31d Binary files /dev/null and b/src/main/resources/default-img/default_cat.png differ diff --git a/src/main/resources/default-img/default_dog.png b/src/main/resources/default-img/default_dog.png new file mode 100644 index 0000000..d509b9f Binary files /dev/null and b/src/main/resources/default-img/default_dog.png differ diff --git a/src/main/resources/default-img/default_other.png b/src/main/resources/default-img/default_other.png new file mode 100644 index 0000000..92e725d Binary files /dev/null and b/src/main/resources/default-img/default_other.png differ diff --git a/src/main/resources/mapper/mini/MiniStrayAnimalMapper.xml b/src/main/resources/mapper/mini/MiniStrayAnimalMapper.xml index 1b50115..6b10c36 100644 --- a/src/main/resources/mapper/mini/MiniStrayAnimalMapper.xml +++ b/src/main/resources/mapper/mini/MiniStrayAnimalMapper.xml @@ -118,77 +118,144 @@ + + diff --git a/src/main/resources/mapper/mini/MiniStrayAnimalNoteMediaMapper.xml b/src/main/resources/mapper/mini/MiniStrayAnimalNoteMediaMapper.xml index e7dbb62..c3dbe87 100644 --- a/src/main/resources/mapper/mini/MiniStrayAnimalNoteMediaMapper.xml +++ b/src/main/resources/mapper/mini/MiniStrayAnimalNoteMediaMapper.xml @@ -14,4 +14,21 @@ note_id = #{noteId} AND media_type = #{mediaType} + +