Browse Source

获取详情

master
review512jwy@163.com 1 month ago
parent
commit
7dbc60ef8c
  1. 1
      src/main/java/com/youlai/boot/auth/service/impl/WxMaAuthServiceImpl.java
  2. 14
      src/main/java/com/youlai/boot/mini/controller/StrayAnimalController.java
  3. 6
      src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalMapper.java
  4. 4
      src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteMediaMapper.java
  5. 4
      src/main/java/com/youlai/boot/mini/model/entity/MiniStrayAnimalNoteMedia.java
  6. 36
      src/main/java/com/youlai/boot/mini/model/vo/MiniStrayAnimalNoteMediaVO.java
  7. 46
      src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalDetailsVO.java
  8. 6
      src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalShortVO.java
  9. 3
      src/main/java/com/youlai/boot/mini/service/StrayAnimalService.java
  10. 75
      src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalServiceImpl.java
  11. 5
      src/main/java/com/youlai/boot/system/model/entity/SysUser.java
  12. BIN
      src/main/resources/default-img/default_cat.png
  13. BIN
      src/main/resources/default-img/default_dog.png
  14. BIN
      src/main/resources/default-img/default_other.png
  15. 195
      src/main/resources/mapper/mini/MiniStrayAnimalMapper.xml
  16. 17
      src/main/resources/mapper/mini/MiniStrayAnimalNoteMediaMapper.xml

1
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) { private SysUser createNewUser(String mobile) {
SysUser user = new SysUser(); SysUser user = new SysUser();
user.setMobile(mobile); user.setMobile(mobile);
user.setUuid(IdUtil.fastSimpleUUID());
user.setUsername("wx_" + IdUtil.fastSimpleUUID().substring(0, 8)); user.setUsername("wx_" + IdUtil.fastSimpleUUID().substring(0, 8));
user.setNickname("微信用户"); user.setNickname("微信用户");
user.setStatus(1); user.setStatus(1);

14
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.enums.LogModuleEnum;
import com.youlai.boot.common.result.PageResult; import com.youlai.boot.common.result.PageResult;
import com.youlai.boot.common.result.Result; 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.DeleteStrayAnimalDTO;
import com.youlai.boot.mini.model.dto.DeleteStrayAnimalNoteMediaDTO; import com.youlai.boot.mini.model.dto.DeleteStrayAnimalNoteMediaDTO;
import com.youlai.boot.mini.model.dto.EditVisibilityDTO; import com.youlai.boot.mini.model.dto.EditVisibilityDTO;
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.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 io.swagger.v3.oas.annotations.Operation; 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 io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -118,4 +123,13 @@ public class StrayAnimalController {
return PageResult.success(strayAnimalService.getOwnPage(queryParams)); return PageResult.success(strayAnimalService.getOwnPage(queryParams));
} }
@Operation(summary = "获取动物信息详情(登录状态下)")
@RequestMapping(value = "/getDetails/{animalUuid}", method = RequestMethod.GET)
public Result<StrayAnimalDetailsVO> getDetails(
@PathVariable String animalUuid){
return Result.success(strayAnimalService.getDetails(animalUuid, SecurityUtils.getUserId()));
}
} }

6
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.youlai.boot.mini.model.entity.MiniStrayAnimal;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.mini.model.query.OwnStrayAnimalQuery; 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.model.vo.StrayAnimalShortVO;
import org.apache.ibatis.annotations.Param;
/** /**
* 流浪动物基础信息表 Mapper 接口 * 流浪动物基础信息表 Mapper 接口
@ -19,5 +21,7 @@ public interface MiniStrayAnimalMapper extends BaseMapper<MiniStrayAnimal> {
void updateStrayAnimal(MiniStrayAnimal miniStrayAnimal); void updateStrayAnimal(MiniStrayAnimal miniStrayAnimal);
IPage<StrayAnimalShortVO> getOwnPage(Page<StrayAnimalShortVO> page, OwnStrayAnimalQuery queryParams); IPage<StrayAnimalShortVO> getOwnPage(Page<StrayAnimalShortVO> page, @Param("queryParams") OwnStrayAnimalQuery queryParams);
StrayAnimalDetailsVO getStrayAnimalDetails(@Param("animalUuid") String animalUuid, @Param("miniUserId") Long miniUserId);
} }

4
src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteMediaMapper.java

@ -2,7 +2,9 @@ package com.youlai.boot.mini.mapper;
import com.youlai.boot.mini.model.entity.MiniStrayAnimalNoteMedia; import com.youlai.boot.mini.model.entity.MiniStrayAnimalNoteMedia;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.youlai.boot.mini.model.vo.MiniStrayAnimalNoteMediaVO;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -14,4 +16,6 @@ import java.util.Map;
public interface MiniStrayAnimalNoteMediaMapper extends BaseMapper<MiniStrayAnimalNoteMedia> { public interface MiniStrayAnimalNoteMediaMapper extends BaseMapper<MiniStrayAnimalNoteMedia> {
int getMediaCountByNoteIdAndType(Map<String, Object> param); int getMediaCountByNoteIdAndType(Map<String, Object> param);
List<MiniStrayAnimalNoteMediaVO> getMediaByNoteIdAndType(Map<String, Object> param);
} }

4
src/main/java/com/youlai/boot/mini/model/entity/MiniStrayAnimalNoteMedia.java

@ -60,10 +60,6 @@ public class MiniStrayAnimalNoteMedia implements Serializable {
@Schema(description = "时长(秒,视频用)") @Schema(description = "时长(秒,视频用)")
private Integer duration; private Integer duration;
@TableField("sort_order")
@Schema(description = "排序顺序")
private Long sortOrder;
@TableField("create_time") @TableField("create_time")
@Schema(description = "创建时间") @Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

36
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;
}

46
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<MiniStrayAnimalNoteMediaVO> images;
@Schema(description = "视频信息", example = "[]")
private List<MiniStrayAnimalNoteMediaVO> videos;
}

6
src/main/java/com/youlai/boot/mini/model/vo/StrayAnimalShortVO.java

@ -7,8 +7,8 @@ import lombok.Data;
@Data @Data
public class StrayAnimalShortVO { public class StrayAnimalShortVO {
@Schema(description = "作者id", example = "true") @Schema(description = "作者uuid", example = "true")
private Long authorId; private String authorUuid;
@Schema(description = "作者昵称", example = "true") @Schema(description = "作者昵称", example = "true")
private String authorName; private String authorName;
@ -80,7 +80,7 @@ public class StrayAnimalShortVO {
private Boolean isLiked; private Boolean isLiked;
@Schema(description = "当前用户是否收藏", example = "false") @Schema(description = "当前用户是否收藏", example = "false")
private Boolean Collected; private Boolean isCollected;
@Schema(description = "审核状态:0通过,1审核中,2审核未通过", example = "0") @Schema(description = "审核状态:0通过,1审核中,2审核未通过", example = "0")
private Integer auditStatus; private Integer auditStatus;

3
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.entity.MiniStrayAnimal;
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.StrayAnimalDetailsVO;
import com.youlai.boot.mini.model.vo.StrayAnimalShortVO; import com.youlai.boot.mini.model.vo.StrayAnimalShortVO;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@ -29,5 +30,7 @@ public interface StrayAnimalService extends IService<MiniStrayAnimal> {
void delete(DeleteStrayAnimalDTO deleteStrayAnimalDTO); void delete(DeleteStrayAnimalDTO deleteStrayAnimalDTO);
IPage<StrayAnimalShortVO> getOwnPage(OwnStrayAnimalQuery queryParams); IPage<StrayAnimalShortVO> getOwnPage(OwnStrayAnimalQuery queryParams);
StrayAnimalDetailsVO getDetails(String animalUuid, Long miniUserId);
} }

75
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 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;
}
} }

5
src/main/java/com/youlai/boot/system/model/entity/SysUser.java

@ -13,6 +13,11 @@ import lombok.Setter;
@Setter @Setter
public class SysUser extends BaseEntity { public class SysUser extends BaseEntity {
/**
* uuid
*/
private String uuid;
/** /**
* 用户名 * 用户名
*/ */

BIN
src/main/resources/default-img/default_cat.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

BIN
src/main/resources/default-img/default_dog.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

BIN
src/main/resources/default-img/default_other.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB

195
src/main/resources/mapper/mini/MiniStrayAnimalMapper.xml

@ -118,77 +118,144 @@
<select id="getOwnPage" resultType="com.youlai.boot.mini.model.vo.StrayAnimalShortVO" databaseId="mysql"> <select id="getOwnPage" resultType="com.youlai.boot.mini.model.vo.StrayAnimalShortVO" databaseId="mysql">
WITH first_image AS (
SELECT
m.note_id,
m.source_url,
ROW_NUMBER() OVER (
PARTITION BY m.note_id
ORDER BY m.id ASC
) AS rn
FROM mini_stray_animal_note_media m
WHERE m.media_type = 'image'
AND m.is_deleted = 0
)
SELECT SELECT
u.id, u.uuid AS authorUuid,
u.username, u.nickname AS authorName,
u.nickname, u.avatar AS authorAvatar,
u.mobile,
u.gender, a.uuid AS animalUuid,
u.avatar, n.uuid AS animalNoteUuid,
u.STATUS,
u.email, a.animal_type,
d.NAME AS dept_name,
GROUP_CONCAT( r.NAME ) AS roleNames, fi.source_url AS firstImageUrl,
u.create_time
n.title,
n.content,
n.visibility,
n.view_count,
n.like_count,
n.comment_count,
n.collect_count,
-- 当前用户是否点赞
EXISTS (
SELECT 1
FROM mini_stray_animal_note_like l
WHERE l.note_id = n.id
AND l.mini_user_id = #{queryParams.miniUserId}
AND l.is_deleted = 0
) AS isLiked,
-- 当前用户是否收藏
EXISTS (
SELECT 1
FROM mini_stray_animal_note_collect c
WHERE c.note_id = n.id
AND c.mini_user_id = #{queryParams.miniUserId}
AND c.is_deleted = 0
) AS isCollected,
a.audit_status
FROM FROM
sys_user u mini_stray_animal a
LEFT JOIN sys_dept d ON u.dept_id = d.id INNER JOIN sys_user u ON a.mini_user_id = u.id
LEFT JOIN sys_user_role sur ON u.id = sur.user_id LEFT JOIN mini_stray_animal_note n ON n.stray_animal_id = a.id
LEFT JOIN sys_role r ON sur.role_id = r.id LEFT JOIN first_image fi ON fi.note_id = n.id AND fi.rn = 1
<where> <where>
u.is_deleted = 0 n.is_deleted = 0 AND a.is_deleted = 0
<!-- 非超级管理员用户限制查看超级管理员 -->
AND NOT EXISTS ( <!-- 指定用户 -->
SELECT AND n.mini_user_id = #{queryParams.miniUserId}
1
FROM sys_user_role sur <!-- 动物类型 -->
INNER JOIN sys_role r ON sur.role_id = r.id <if test="queryParams.animalType != null and queryParams.animalType != ''">
WHERE AND a.animal_type = #{queryParams.animalType}
sur.user_id = u.id
AND r.code = '${@com.youlai.boot.common.constant.SystemConstants@ROOT_ROLE_CODE}'
)
<if test='queryParams.keywords!=null and queryParams.keywords.trim() neq ""'>
AND (
u.username LIKE CONCAT('%',#{queryParams.keywords},'%')
OR u.nickname LIKE CONCAT('%',#{queryParams.keywords},'%')
OR u.mobile LIKE CONCAT('%',#{queryParams.keywords},'%')
)
</if>
<if test='queryParams.status!=null'>
AND u.status = #{queryParams.status}
</if>
<if test='queryParams.deptId!=null'>
AND concat(',',concat(d.tree_path,',',d.id),',') like concat('%,',#{queryParams.deptId},',%')
</if> </if>
<if test="queryParams.createTime != null and queryParams.createTime.size > 0">
<if test="queryParams.createTime[0] != null and queryParams.createTime[0] != ''"> <!-- 时间范围 -->
<bind name="startDate" value="queryParams.createTime[0].length() == 10 ? queryParams.createTime[0] + ' 00:00:00' : queryParams.createTime[0]"/> <if test="queryParams.createStartTimestamp != null">
AND u.create_time &gt;= #{startDate} AND a.create_timestamp >= #{queryParams.createStartTimestamp}
</if>
<if test="queryParams.createTime[1] != null and queryParams.createTime[1] != ''">
<bind name="endDate" value="queryParams.createTime[1].length() == 10 ? queryParams.createTime[1] + ' 23:59:59' : queryParams.createTime[1]"/>
AND u.create_time &lt;= #{endDate}
</if>
</if> </if>
<if test="queryParams.roleIds != null and queryParams.roleIds.size() > 0">
AND sur.role_id IN <if test="queryParams.createEndTimestamp != null">
<foreach item="roleId" collection="queryParams.roleIds" open="(" separator="," close=")"> AND #{queryParams.createEndTimestamp} >= a.create_timestamp
#{roleId}
</foreach>
</if> </if>
</where> </where>
GROUP BY
u.id ORDER BY a.id DESC
<choose>
<!-- 如果排序参数都传入 --> </select>
<when test="queryParams.sortBy != null and queryParams.sortBy != '' and queryParams.order != null">
ORDER BY u.${queryParams.sortBy} ${queryParams.order} <select id="getStrayAnimalDetails" resultType="com.youlai.boot.mini.model.vo.StrayAnimalDetailsVO">
</when> SELECT
<!-- 默认排序 --> su.uuid AS authorUuid,
<otherwise> su.nickname AS authorName,
ORDER BY u.update_time DESC, u.create_time DESC su.avatar AS authorAvatar,
</otherwise> a.uuid AS animalUuid,
</choose> a.animal_type,
a.color,
a.size,
a.status,
a.audit_status,
n.uuid animalNoteUuid,
n.title,
n.content,
n.visibility,
n.view_count,
n.like_count,
n.comment_count,
n.collect_count,
<if test="miniUserId != null">
-- 当前用户是否点赞
EXISTS (
SELECT 1
FROM mini_stray_animal_note_like l
WHERE l.note_id = n.id
AND l.mini_user_id = #{miniUserId}
AND l.is_deleted = 0
) AS isLiked,
-- 当前用户是否收藏
EXISTS (
SELECT 1
FROM mini_stray_animal_note_collect c
WHERE c.note_id = n.id
AND c.mini_user_id = #{miniUserId}
AND c.is_deleted = 0
) AS isCollected,
</if>
a.province,
a.city,
a.district,
ST_X(a.gd_location_point) AS lng,
ST_Y(a.gd_location_point) AS lat,
a.address
FROM
mini_stray_animal a
LEFT JOIN mini_stray_animal_note n ON a.id = n.stray_animal_id
LEFT JOIN sys_user su ON su.id = a.mini_user_id AND su.is_deleted = 0
WHERE a.uuid = #{animalUuid}
</select> </select>
</mapper> </mapper>

17
src/main/resources/mapper/mini/MiniStrayAnimalNoteMediaMapper.xml

@ -14,4 +14,21 @@
note_id = #{noteId} AND media_type = #{mediaType} note_id = #{noteId} AND media_type = #{mediaType}
</select> </select>
<select id="getMediaByNoteIdAndType" resultType="com.youlai.boot.mini.model.vo.MiniStrayAnimalNoteMediaVO">
SELECT
uuid AS noteMediaUuid,
media_type,
source_url,
storage_key,
thumbnail_url,
width,
height,
duration
FROM
mini_stray_animal_note_media
WHERE
note_id = #{noteId} AND media_type = #{mediaType} AND is_deleted = 0
ORDER BY id desc
</select>
</mapper> </mapper>

Loading…
Cancel
Save