From fb514e661e644bc40dba3d2413a64ff5e86bf6be Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期三, 11 六月 2025 11:02:29 +0800
Subject: [PATCH] add: 点赞、收藏功能补充
---
src/main/resources/mapper/film/FilmCollectsMapper.xml | 5
src/main/java/com/mzl/flower/dto/request/film/FilmLikesQueryDTO.java | 7
src/main/java/com/mzl/flower/mapper/film/FilmLikesMapper.java | 11 +
src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java | 21 +
src/main/java/com/mzl/flower/web/film/FilmCollectsController.java | 55 +++++
src/main/java/com/mzl/flower/dto/response/film/FilmWorksVO.java | 18 +
src/main/java/com/mzl/flower/entity/film/FilmCollects.java | 29 ++
src/main/java/com/mzl/flower/dto/request/film/FilmCollectsQueryDTO.java | 18 +
src/main/java/com/mzl/flower/dto/request/film/FilmWorksQueryDTO.java | 7
src/main/java/com/mzl/flower/service/film/impl/FilmLikesServiceImpl.java | 23 +
src/main/resources/mapper/film/FilmWorksMapper.xml | 92 ++++++++
src/main/java/com/mzl/flower/service/film/impl/FilmCollectsServiceImpl.java | 83 +++++++
src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java | 1
src/main/java/com/mzl/flower/dto/request/film/FilmLikesDTO.java | 89 --------
src/main/java/com/mzl/flower/dto/request/film/FilmCollectsDTO.java | 20 +
src/main/java/com/mzl/flower/service/film/FilmCollectsService.java | 26 ++
src/main/java/com/mzl/flower/dto/response/film/FilmLikesVO.java | 48 ----
src/main/java/com/mzl/flower/mapper/film/FilmCollectsMapper.java | 28 ++
src/main/java/com/mzl/flower/dto/response/film/FilmCollectsVO.java | 27 ++
19 files changed, 463 insertions(+), 145 deletions(-)
diff --git a/src/main/java/com/mzl/flower/dto/request/film/FilmCollectsDTO.java b/src/main/java/com/mzl/flower/dto/request/film/FilmCollectsDTO.java
new file mode 100644
index 0000000..c771a70
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/film/FilmCollectsDTO.java
@@ -0,0 +1,20 @@
+package com.mzl.flower.dto.request.film;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+@Data
+public class FilmCollectsDTO {
+ /**
+ * 关联的影视作品ID
+ */
+ private Integer filmId;
+
+ /**
+ * 收藏状态(0取消,1有效)
+ */
+ private Boolean status;
+
+}
diff --git a/src/main/java/com/mzl/flower/dto/request/film/FilmCollectsQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/film/FilmCollectsQueryDTO.java
new file mode 100644
index 0000000..b65aeb0
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/film/FilmCollectsQueryDTO.java
@@ -0,0 +1,18 @@
+package com.mzl.flower.dto.request.film;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class FilmCollectsQueryDTO {
+
+ @ApiModelProperty("影视作品ID")
+ private Integer filmId;
+
+ @ApiModelProperty("状态")
+ private Boolean status;
+
+
+}
diff --git a/src/main/java/com/mzl/flower/dto/request/film/FilmLikesDTO.java b/src/main/java/com/mzl/flower/dto/request/film/FilmLikesDTO.java
index fde8c23..5e1ee63 100644
--- a/src/main/java/com/mzl/flower/dto/request/film/FilmLikesDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/film/FilmLikesDTO.java
@@ -13,94 +13,7 @@
private Integer filmId;
/**
- * 拍摄地点名称
- */
- private String locationName;
-
- /**
- * 详细地址
- */
- private String address;
-
- /**
- * 纬度坐标(精确到小数点后6位)
- */
- private BigDecimal gpsLat;
-
- /**
- * 经度坐标(精确到小数点后6位)
- */
- private BigDecimal gpsLng;
-
- /**
- * 拍摄开始日期
- */
- private LocalDate startDate;
-
- /**
- * 拍摄结束日期
- */
- private LocalDate endDate;
-
- /**
- * 场景类型
- */
- private String sceneType;
-
- /**
- * 经典画面描述
- */
- private String classicScene;
-
- /**
- * 是否开放参观(0否,1是)
- */
- private Boolean isOpenVisit;
-
- /**
- * 参观提示(JSON格式存储)
- */
- private String visitInfo;
-
- /**
- * 地标性建筑描述
- */
- private String landmarkDesc;
-
- /**
- * 交通指引说明
- */
- private String transportGuide;
-
- /**
- * 停车场信息
- */
- private String parkingInfo;
-
- /**
- * 周边设施描述
- */
- private String surroundingFacilities;
-
- /**
- * AR实景对比功能入口URL
- */
- private String arEntry;
-
- /**
- * 状态(0禁用,1启用)
+ * 收藏状态(0取消,1有效)
*/
private Boolean status;
-
-
- /**
- * 打卡记录量
- */
- private Integer checkinCount;
-
- /**
- * 游客实拍图(存储JSON数组)
- */
- private String visitorPhotos;
-
}
diff --git a/src/main/java/com/mzl/flower/dto/request/film/FilmLikesQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/film/FilmLikesQueryDTO.java
index 1f26dbf..2828458 100644
--- a/src/main/java/com/mzl/flower/dto/request/film/FilmLikesQueryDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/film/FilmLikesQueryDTO.java
@@ -5,6 +5,9 @@
@Data
public class FilmLikesQueryDTO {
- @ApiModelProperty(value = "会员等级名称")
- private String name;
+ @ApiModelProperty("影视作品ID")
+ private Integer filmId;
+
+ @ApiModelProperty("状态")
+ private Boolean status;
}
diff --git a/src/main/java/com/mzl/flower/dto/request/film/FilmWorksQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/film/FilmWorksQueryDTO.java
index d00ec48..a9742a7 100644
--- a/src/main/java/com/mzl/flower/dto/request/film/FilmWorksQueryDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/film/FilmWorksQueryDTO.java
@@ -33,4 +33,11 @@
@ApiModelProperty(value = "关键字(中文名称、英文名称、导演、演员、剧情、动作)")
private String keywords;
+
+ private String userId;
+
+ private Integer id;
+
+
+
}
diff --git a/src/main/java/com/mzl/flower/dto/response/film/FilmCollectsVO.java b/src/main/java/com/mzl/flower/dto/response/film/FilmCollectsVO.java
new file mode 100644
index 0000000..737dc82
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/response/film/FilmCollectsVO.java
@@ -0,0 +1,27 @@
+package com.mzl.flower.dto.response.film;
+
+import com.mzl.flower.base.AbstractTransDTO;
+import com.mzl.flower.base.annotation.DictTrans;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class FilmCollectsVO extends AbstractTransDTO {
+ private Long id;
+
+ @ApiModelProperty("影视作品ID")
+ private Integer filmId;
+
+ @ApiModelProperty("状态")
+ private Boolean status;
+
+ @ApiModelProperty("创建日期")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("修改日期")
+ private LocalDateTime updateTime;
+
+}
diff --git a/src/main/java/com/mzl/flower/dto/response/film/FilmLikesVO.java b/src/main/java/com/mzl/flower/dto/response/film/FilmLikesVO.java
index 10ff0ab..c25e0da 100644
--- a/src/main/java/com/mzl/flower/dto/response/film/FilmLikesVO.java
+++ b/src/main/java/com/mzl/flower/dto/response/film/FilmLikesVO.java
@@ -5,61 +5,21 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
-import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class FilmLikesVO extends AbstractTransDTO {
private Long id;
- @ApiModelProperty("会员等级名称")
- private String name;
+ @ApiModelProperty("影视作品ID")
+ private Integer filmId;
- @ApiModelProperty("成长点-区间-开始")
- private int startPoint;
-
- @ApiModelProperty("成长点-区间-结束")
- private int endPoint;
-
- @ApiModelProperty("会员折扣类型(百分比、固定金额)")
- @DictTrans(target = "discountTypeStr", codeType = "DISCOUNT_TYPE")
- private String discountType;
-
- private String discountTypeStr;
-
- @ApiModelProperty("会员折扣百分比")
- private BigDecimal discountRatio;
-
- @ApiModelProperty("会员折扣固定金额")
- private BigDecimal discountAmount;
-
- @ApiModelProperty("消费金额(元)")
- private int consumptionAmount;
-
- @ApiModelProperty("已消费产生的成长值")
- private int growthValue;
-
- @ApiModelProperty("未消费产生的下降值")
- private int downgradeValue;
+ @ApiModelProperty("状态")
+ private Boolean status;
@ApiModelProperty("创建日期")
private LocalDateTime createTime;
@ApiModelProperty("修改日期")
private LocalDateTime updateTime;
-
- @ApiModelProperty("操作人")
- private String createName;
-
- @ApiModelProperty("背景")
- private String background;
-
- @ApiModelProperty("图片")
- private String pictures;
-
- @ApiModelProperty(value = "会员成长值获取规则")
- private String growthValueDesc;
-
- @ApiModelProperty("更新人")
- private String updateBy;
}
diff --git a/src/main/java/com/mzl/flower/dto/response/film/FilmWorksVO.java b/src/main/java/com/mzl/flower/dto/response/film/FilmWorksVO.java
index 4cb8789..811d30b 100644
--- a/src/main/java/com/mzl/flower/dto/response/film/FilmWorksVO.java
+++ b/src/main/java/com/mzl/flower/dto/response/film/FilmWorksVO.java
@@ -145,5 +145,23 @@
private String filmPictures;
+ private Boolean liked;
+
+ private Boolean collected;
+
+ /**
+ * 收藏量
+ */
+ private Integer voCollectCount;
+
+ /**
+ * 点赞量
+ */
+ private Integer voLikeCount;
+
+ /**
+ * 评论量
+ */
+ private Integer voCommentCount;
}
diff --git a/src/main/java/com/mzl/flower/entity/film/FilmCollects.java b/src/main/java/com/mzl/flower/entity/film/FilmCollects.java
new file mode 100644
index 0000000..43df8a0
--- /dev/null
+++ b/src/main/java/com/mzl/flower/entity/film/FilmCollects.java
@@ -0,0 +1,29 @@
+package com.mzl.flower.entity.film;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.mzl.flower.base.BaseAutoEntity;
+import lombok.Data;
+
+/**
+ * 影视作品收藏表
+ *
+ * @author generator@Fang
+ * @since 2025-05-29
+ */
+@Data
+@TableName("film_collects")
+public class FilmCollects extends BaseAutoEntity {
+
+
+ /**
+ * 关联的影视作品ID
+ */
+ private Integer filmId;
+
+ /**
+ * 收藏状态(0取消,1有效)
+ */
+ private Boolean status;
+
+
+}
diff --git a/src/main/java/com/mzl/flower/mapper/film/FilmCollectsMapper.java b/src/main/java/com/mzl/flower/mapper/film/FilmCollectsMapper.java
new file mode 100644
index 0000000..69c1b5e
--- /dev/null
+++ b/src/main/java/com/mzl/flower/mapper/film/FilmCollectsMapper.java
@@ -0,0 +1,28 @@
+package com.mzl.flower.mapper.film;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mzl.flower.entity.film.FilmCollects;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ * 影视作品收藏表 Mapper 接口
+ * </p>
+ *
+ * @author generator@Fang
+ * @since 2025-05-29
+ */
+@Repository
+public interface FilmCollectsMapper extends BaseMapper<FilmCollects> {
+
+ @Select("select * from film_collects where film_id = #{filmId} and create_by = #{createBy}")
+ FilmCollects getFilmCollectsByfilmIdAndCreateBy(Integer filmId, String createBy);
+
+ @Update("UPDATE film_collects SET status = #{status}, update_by = #{updateBy}, update_time = NOW() WHERE id = #{id}")
+ int updateStatusById(@Param("id") Long id,
+ @Param("status") Boolean status,
+ @Param("updateBy") String updateBy);
+}
diff --git a/src/main/java/com/mzl/flower/mapper/film/FilmLikesMapper.java b/src/main/java/com/mzl/flower/mapper/film/FilmLikesMapper.java
index 81f01a2..6dcfccd 100644
--- a/src/main/java/com/mzl/flower/mapper/film/FilmLikesMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/film/FilmLikesMapper.java
@@ -2,6 +2,9 @@
import com.mzl.flower.entity.film.FilmLikes;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
/**
@@ -15,4 +18,12 @@
@Repository
public interface FilmLikesMapper extends BaseMapper<FilmLikes> {
+
+ @Select("select * from film_likes where film_id = #{filmId} and create_by = #{createBy}")
+ FilmLikes getFilmLikesByfilmIdAndCreateBy(Integer filmId, String createBy);
+
+ @Update("UPDATE film_likes SET status = #{status}, update_by = #{updateBy}, update_time = NOW() WHERE id = #{id}")
+ int updateStatusById(@Param("id") Long id,
+ @Param("status") Boolean status,
+ @Param("updateBy") String updateBy);
}
diff --git a/src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java b/src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java
index 2abdb5f..700fe84 100644
--- a/src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java
@@ -25,4 +25,5 @@
List<FilmWorksVO> getFilmWorksAll();
List<FilmWorksVO> queryPage(@Param("dto") FilmWorksQueryDTO dto, Page page);
+ FilmWorksVO selectInfoById(@Param("id") Long id, @Param("userId") String userId);
}
diff --git a/src/main/java/com/mzl/flower/service/film/FilmCollectsService.java b/src/main/java/com/mzl/flower/service/film/FilmCollectsService.java
new file mode 100644
index 0000000..2667734
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/film/FilmCollectsService.java
@@ -0,0 +1,26 @@
+package com.mzl.flower.service.film;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mzl.flower.dto.request.film.FilmCollectsDTO;
+import com.mzl.flower.dto.request.film.FilmCollectsQueryDTO;
+import com.mzl.flower.dto.response.film.FilmCollectsVO;
+import com.mzl.flower.entity.film.FilmCollects;
+
+/**
+ * <p>
+ * 影视作品点赞表 服务类
+ * </p>
+ *
+ * @author generator@Fang
+ * @since 2025-05-29
+ */
+public interface FilmCollectsService extends IService<FilmCollects> {
+
+ void saveFilmCollects(FilmCollectsDTO filmCollectsDTO);
+
+ Boolean updateFilmCollects(FilmCollectsDTO filmCollectsDTO);
+ void deleteFilmCollects(String id);
+
+ Page<FilmCollectsVO> queryPage(FilmCollectsQueryDTO filmCollectsQueryDTO, Page page);
+}
diff --git a/src/main/java/com/mzl/flower/service/film/impl/FilmCollectsServiceImpl.java b/src/main/java/com/mzl/flower/service/film/impl/FilmCollectsServiceImpl.java
new file mode 100644
index 0000000..5b66fb0
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/film/impl/FilmCollectsServiceImpl.java
@@ -0,0 +1,83 @@
+package com.mzl.flower.service.film.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mzl.flower.config.exception.ValidationException;
+import com.mzl.flower.config.security.SecurityUtils;
+import com.mzl.flower.dto.request.film.FilmCollectsDTO;
+import com.mzl.flower.dto.request.film.FilmCollectsQueryDTO;
+import com.mzl.flower.dto.response.film.FilmCollectsVO;
+import com.mzl.flower.entity.film.FilmCollects;
+import com.mzl.flower.mapper.film.FilmCollectsMapper;
+import com.mzl.flower.service.film.FilmCollectsService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 影视作品收藏表 服务实现类
+ * </p>
+ *
+ * @author generator@Fang
+ * @since 2025-05-29
+ */
+@Service
+public class FilmCollectsServiceImpl extends ServiceImpl<FilmCollectsMapper, FilmCollects> implements FilmCollectsService {
+
+ @Resource
+ private FilmCollectsMapper filmCollectsMapper;
+
+ @Override
+ public void saveFilmCollects(FilmCollectsDTO filmCollectsDTO) {
+ FilmCollects filmCollects = new FilmCollects();
+ filmCollects.setFilmId(filmCollectsDTO.getFilmId());
+ filmCollects.setStatus(true);
+ if (filmCollectsMapper.insert(filmCollects) <= 0) {
+ throw new ValidationException("添加评论收藏失败");
+ }
+ }
+
+ @Override
+ public Boolean updateFilmCollects(FilmCollectsDTO filmCollectsDTO) {
+ // 没有,新增
+ FilmCollects filmCollects = filmCollectsMapper.getFilmCollectsByfilmIdAndCreateBy(filmCollectsDTO.getFilmId(), SecurityUtils.getUserId());
+ if (filmCollects == null) {
+ filmCollects = new FilmCollects();
+ filmCollects.setFilmId(filmCollectsDTO.getFilmId());
+ filmCollects.setStatus(true);
+ filmCollects.setCreateBy(SecurityUtils.getUserId());
+ if (filmCollectsMapper.insert(filmCollects) <= 0) {
+ throw new ValidationException("添加评论收藏失败");
+ }
+ } else {
+ // 状态取反
+ filmCollects.setStatus(!filmCollects.getStatus());
+ filmCollects.update(SecurityUtils.getUserId());
+ // 校验主键是否存在
+ if (filmCollects.getId() == null) {
+ throw new ValidationException("主键 ID 不能为空");
+ }
+ int affectedRows = filmCollectsMapper.updateStatusById(
+ filmCollects.getId(), // 确保 id 是 Long 类型
+ filmCollects.getStatus(),
+ SecurityUtils.getUserId() // 更新人
+ );
+ if (affectedRows <= 0) {
+ throw new ValidationException("更新评论点赞状态失败");
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void deleteFilmCollects(String id) {
+
+ }
+
+ @Override
+ public Page<FilmCollectsVO> queryPage(FilmCollectsQueryDTO filmCollectsQueryDTO, Page page) {
+ return null;
+ }
+}
diff --git a/src/main/java/com/mzl/flower/service/film/impl/FilmLikesServiceImpl.java b/src/main/java/com/mzl/flower/service/film/impl/FilmLikesServiceImpl.java
index 6a511bb..e9aa6df 100644
--- a/src/main/java/com/mzl/flower/service/film/impl/FilmLikesServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/film/impl/FilmLikesServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.config.exception.ValidationException;
+import com.mzl.flower.config.security.SecurityUtils;
import com.mzl.flower.dto.request.film.FilmLikesDTO;
import com.mzl.flower.dto.request.film.FilmLikesQueryDTO;
import com.mzl.flower.dto.response.film.FilmLikesVO;
@@ -40,20 +41,32 @@
@Override
public Boolean updateFilmLikes(FilmLikesDTO filmLikesDTO) {
- LocalDateTime now = LocalDateTime.now();
+
// 没有,新增
- FilmLikes filmLikes = null;
- if (filmLikesDTO == null) {
+ FilmLikes filmLikes = filmLikesMapper.getFilmLikesByfilmIdAndCreateBy(filmLikesDTO.getFilmId(), SecurityUtils.getUserId());
+ if (filmLikes == null) {
filmLikes = new FilmLikes();
filmLikes.setFilmId(filmLikesDTO.getFilmId());
filmLikes.setStatus(true);
+ filmLikes.setCreateBy(SecurityUtils.getUserId());
if (filmLikesMapper.insert(filmLikes) <= 0) {
throw new ValidationException("添加评论点赞失败");
}
} else {
// 状态取反
- filmLikesDTO.setStatus(!filmLikesDTO.getStatus());
- if (filmLikesMapper.updateById(filmLikes) <= 0) {
+ filmLikes.setStatus(!filmLikes.getStatus());
+ filmLikes.update(SecurityUtils.getUserId());
+
+ // 校验主键是否存在
+ if (filmLikes.getId() == null) {
+ throw new ValidationException("主键 ID 不能为空");
+ }
+ int affectedRows = filmLikesMapper.updateStatusById(
+ filmLikes.getId(), // 确保 id 是 Long 类型
+ filmLikes.getStatus(),
+ SecurityUtils.getUserId() // 更新人
+ );
+ if (affectedRows <= 0) {
throw new ValidationException("更新评论点赞状态失败");
}
}
diff --git a/src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java b/src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java
index 4fa277e..030f7e2 100644
--- a/src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java
@@ -87,8 +87,18 @@
if(StringUtils.isNotBlank(dto.getCreateDateEndStr())){
dto.setCreateDateEnd(DateUtils.dateToLocalDateTime(dto.getCreateDateEndStr(),false));
}
+
+ //todo 这里的用户ID可能为空,用户存在不登录的情况下访问,传null
+ try {
+ dto.setUserId(SecurityUtils.getUserId());
+ } catch (Exception e) {
+ dto.setUserId(null);
+ }
+
List<FilmWorksVO> list = filmWorksMapper.queryPage(dto,page);
page.setRecords(list);
+
+
return page;
}
@@ -129,13 +139,14 @@
@Override
public FilmWorksVO detail(Long id) {
- FilmWorks filmWork = filmWorksMapper.selectById(id);
- if(filmWork==null){
+ // userId 可以是空,因为用户可以登录
+
+ String userId = SecurityUtils.getUserId();
+ FilmWorksVO filmWorksVO = filmWorksMapper.selectInfoById(id,userId);
+ if(filmWorksVO==null){
return null;
}
- FilmWorksVO filmWorksVO = new FilmWorksVO();
- BeanUtils.copyProperties(filmWork,filmWorksVO);
- CustomerDTO currentCustomer = customerMapper.getCurrentCustomer(filmWork.getCreateBy());
+ CustomerDTO currentCustomer = customerMapper.getCurrentCustomer(filmWorksVO.getCreateBy());
filmWorksVO.setNickname(currentCustomer.getNickName());
filmWorksVO.setAvatar(currentCustomer.getCover());
return filmWorksVO;
diff --git a/src/main/java/com/mzl/flower/web/film/FilmCollectsController.java b/src/main/java/com/mzl/flower/web/film/FilmCollectsController.java
new file mode 100644
index 0000000..b3ce33a
--- /dev/null
+++ b/src/main/java/com/mzl/flower/web/film/FilmCollectsController.java
@@ -0,0 +1,55 @@
+package com.mzl.flower.web.film;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mzl.flower.base.BaseController;
+import com.mzl.flower.base.R;
+import com.mzl.flower.base.ReturnDataDTO;
+import com.mzl.flower.dto.request.film.FilmCollectsDTO;
+import com.mzl.flower.dto.request.film.FilmCollectsQueryDTO;
+import com.mzl.flower.dto.response.film.FilmCollectsVO;
+import com.mzl.flower.service.film.FilmCollectsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotNull;
+
+
+@Api(value = "影视作品收藏", tags = "影视作品收藏")
+@RestController
+@RequestMapping("/v2/film-collects")
+@RequiredArgsConstructor
+public class FilmCollectsController extends BaseController {
+
+ private final FilmCollectsService filmCollectsService;
+
+ @GetMapping("/filmCollects/list")
+ @ApiOperation(value = "影视作品收藏列表", httpMethod = "GET")
+ public ResponseEntity<ReturnDataDTO<Page<FilmCollectsVO>>> getFilmCollectsList(Page page, FilmCollectsQueryDTO dto) {
+ return returnData(R.SUCCESS.getCode(), filmCollectsService.queryPage(dto, page));
+ }
+
+ @GetMapping(value = "/filmCollects/delete")
+ @ApiOperation(value = "删除影视作品收藏 ", httpMethod = "GET", notes = "ID")
+ public ResponseEntity delete(@NotNull(message = "id不能为空") Long id) {
+ filmCollectsService.deleteFilmCollects(String.valueOf(id));
+ return returnData(R.SUCCESS.getCode(), null);
+ }
+
+ @PostMapping(value = "/filmCollects/new")
+ @ApiOperation(value = "保存影视作品收藏", httpMethod = "POST")
+ public ResponseEntity insert(@RequestBody FilmCollectsDTO filmCollectsDTO) {
+ filmCollectsService.saveFilmCollects(filmCollectsDTO);
+ return returnData(R.SUCCESS.getCode(), null);
+ }
+
+ @PostMapping(value = "/filmCollects/edit")
+ @ApiOperation(value = "更新影视作品收藏", httpMethod = "POST")
+ public ResponseEntity update(@RequestBody FilmCollectsDTO filmCollectsDTO) {
+ filmCollectsService.updateFilmCollects(filmCollectsDTO);
+ return returnData(R.SUCCESS.getCode(), null);
+ }
+
+}
diff --git a/src/main/resources/mapper/film/FilmCollectsMapper.xml b/src/main/resources/mapper/film/FilmCollectsMapper.xml
new file mode 100644
index 0000000..bd18a86
--- /dev/null
+++ b/src/main/resources/mapper/film/FilmCollectsMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mzl.flower.mapper.film.FilmCollectsMapper">
+
+</mapper>
diff --git a/src/main/resources/mapper/film/FilmWorksMapper.xml b/src/main/resources/mapper/film/FilmWorksMapper.xml
index 45a3347..9b19ce0 100644
--- a/src/main/resources/mapper/film/FilmWorksMapper.xml
+++ b/src/main/resources/mapper/film/FilmWorksMapper.xml
@@ -6,15 +6,51 @@
SELECT
t.*,
c.name AS nickname,
- c.cover AS avatar
+ c.cover AS avatar,
+ COALESCE(l.like_count, 0) AS vo_like_count,
+ COALESCE(com.comment_count, 0) AS vo_comment_count,
+ COALESCE(col.collect_count, 0) AS vo_collect_count,
+ CASE WHEN l_user.status = 1 THEN 1 ELSE 0 END AS liked,
+ CASE WHEN col_user.status = 1 THEN 1 ELSE 0 END AS collected
FROM
film_works t
LEFT JOIN
t_customer_info c
ON
t.create_by = c.user_id
+ LEFT JOIN (
+ SELECT film_id, COUNT(*) AS like_count
+ FROM film_likes
+ WHERE status = 1
+ GROUP BY film_id
+ ) l ON t.id = l.film_id
+ LEFT JOIN (
+ SELECT film_id, COUNT(*) AS comment_count
+ FROM film_comments
+ WHERE state = 1
+ GROUP BY film_id
+ ) com ON t.id = com.film_id
+ LEFT JOIN (
+ SELECT film_id, COUNT(*) AS collect_count
+ FROM film_collects
+ WHERE status = 1
+ GROUP BY film_id
+ ) col ON t.id = col.film_id
+ LEFT JOIN (
+ SELECT film_id, status
+ FROM film_likes
+ WHERE create_by = #{dto.userId}
+ ) l_user ON t.id = l_user.film_id
+ LEFT JOIN (
+ SELECT film_id, status
+ FROM film_collects
+ WHERE create_by = #{dto.userId}
+ ) col_user ON t.id = col_user.film_id
WHERE
t.deleted = 0
+ <if test="dto.id != null and dto.id != ''">
+ AND t.id = #{dto.id}
+ </if>
<if test="dto.nameCn != null and dto.nameCn != ''">
AND t.name_cn LIKE CONCAT('%', #{dto.nameCn}, '%')
</if>
@@ -48,4 +84,58 @@
t.update_time DESC
</select>
+
+ <select id="selectInfoById" resultType="com.mzl.flower.dto.response.film.FilmWorksVO">
+ SELECT
+ t.*,
+ c.name AS nickname,
+ c.cover AS avatar,
+ COALESCE(l.like_count, 0) AS vo_like_count,
+ COALESCE(com.comment_count, 0) AS vo_comment_count,
+ COALESCE(col.collect_count, 0) AS vo_collect_count,
+ CASE WHEN l_user.status = 1 THEN 1 ELSE 0 END AS liked,
+ CASE WHEN col_user.status = 1 THEN 1 ELSE 0 END AS collected
+ FROM
+ film_works t
+ LEFT JOIN
+ t_customer_info c
+ ON
+ t.create_by = c.user_id
+ LEFT JOIN (
+ SELECT film_id, COUNT(*) AS like_count
+ FROM film_likes
+ WHERE status = 1
+ GROUP BY film_id
+ ) l ON t.id = l.film_id
+ LEFT JOIN (
+ SELECT film_id, COUNT(*) AS comment_count
+ FROM film_comments
+ WHERE state = 1
+ GROUP BY film_id
+ ) com ON t.id = com.film_id
+ LEFT JOIN (
+ SELECT film_id, COUNT(*) AS collect_count
+ FROM film_collects
+ WHERE status = 1
+ GROUP BY film_id
+ ) col ON t.id = col.film_id
+ LEFT JOIN (
+ SELECT film_id, status
+ FROM film_likes
+ WHERE create_by = #{userId}
+ ) l_user ON t.id = l_user.film_id
+ LEFT JOIN (
+ SELECT film_id, status
+ FROM film_collects
+ WHERE create_by = #{userId}
+ ) col_user ON t.id = col_user.film_id
+ WHERE
+ t.deleted = 0
+ <if test="id != null and id != ''">
+ AND t.id = #{id}
+ </if>
+ ORDER BY
+ t.update_time DESC
+ </select>
+
</mapper>
--
Gitblit v1.9.3