Răsfoiți Sursa

用户收藏商户动态模块开发

wangzhijun 1 lună în urmă
părinte
comite
75b7229c7b

+ 2 - 2
nightFragrance-massage/src/main/java/com/ylx/discover/moment/domain/vo/MomentPageVO.java

@@ -23,8 +23,8 @@ public class MomentPageVO {
     @ApiModelProperty("商户昵称")
     private String technicianNickName;
 
-    @ApiModelProperty("收藏量")
-    private Integer saveCount;
+    @ApiModelProperty("点赞量")
+    private Integer likeCount;
 
     @ApiModelProperty("浏览量")
     private Integer viewCount;

+ 35 - 0
nightFragrance-massage/src/main/java/com/ylx/moment/controller/CustomerMomentCollectController.java

@@ -0,0 +1,35 @@
+package com.ylx.moment.controller;
+
+import com.ylx.common.core.domain.R;
+import com.ylx.moment.domain.dto.CustomerMomentDTO;
+import com.ylx.moment.service.MomentCollectService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/customer/moment")
+@Api(tags = {"客户端动态模块"})
+@Slf4j
+@PreAuthorize("@customerAuth.isCustomer()")
+public class CustomerMomentCollectController {
+
+    @Resource
+    private MomentCollectService momentCollectService;
+
+    @ApiOperation("切换动态收藏状态")
+    @PostMapping("/collect/toggle")
+    public R<Boolean> toggleCollect(@Validated @RequestBody CustomerMomentDTO dto) {
+        boolean isCollected = momentCollectService.toggleCollect(dto);
+        return R.ok(isCollected);
+    }
+
+}

+ 24 - 0
nightFragrance-massage/src/main/java/com/ylx/moment/domain/MomentCollect.java

@@ -0,0 +1,24 @@
+package com.ylx.moment.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("t_moment_collect")
+public class MomentCollect implements Serializable {
+
+    private static final long serialVersionUID = 7357933387999220442L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    private Long momentId;
+
+    private Long userId;
+
+    private LocalDateTime createTime;
+}

+ 2 - 2
nightFragrance-massage/src/main/java/com/ylx/moment/domain/TechnicianMoment.java

@@ -55,9 +55,9 @@ public class TechnicianMoment implements Serializable {
     private Integer viewCount;
 
     /**
-     * 收藏
+     * 点赞
      */
-    private Integer saveCount;
+    private Integer likeCount;
 
     /**
      * 发布时间

+ 19 - 0
nightFragrance-massage/src/main/java/com/ylx/moment/domain/dto/CustomerMomentDTO.java

@@ -0,0 +1,19 @@
+package com.ylx.moment.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+@ApiModel("客户端动态收藏DTO")
+public class CustomerMomentDTO implements Serializable {
+    private static final long serialVersionUID = 5084300550810552889L;
+
+    @NotNull(message = "商户动态ID不能为空")
+    @ApiModelProperty("商户动态ID")
+    private Long momentId;
+
+}

+ 9 - 0
nightFragrance-massage/src/main/java/com/ylx/moment/mapper/MomentCollectMapper.java

@@ -0,0 +1,9 @@
+package com.ylx.moment.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ylx.moment.domain.MomentCollect;
+import org.apache.ibatis.annotations.Param;
+
+public interface MomentCollectMapper extends BaseMapper<MomentCollect> {
+    void incrementSaveCount(@Param("momentId") Long momentId, @Param("step") int step);
+}

+ 11 - 0
nightFragrance-massage/src/main/java/com/ylx/moment/service/MomentCollectService.java

@@ -0,0 +1,11 @@
+package com.ylx.moment.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ylx.moment.domain.MomentCollect;
+import com.ylx.moment.domain.dto.CustomerMomentDTO;
+
+public interface MomentCollectService extends IService<MomentCollect> {
+
+    boolean toggleCollect(CustomerMomentDTO dto);
+
+}

+ 50 - 0
nightFragrance-massage/src/main/java/com/ylx/moment/service/impl/MomentCollectServiceImpl.java

@@ -0,0 +1,50 @@
+package com.ylx.moment.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ylx.base.BaseServiceImpl;
+import com.ylx.moment.domain.MomentCollect;
+import com.ylx.moment.domain.dto.CustomerMomentDTO;
+import com.ylx.moment.mapper.MomentCollectMapper;
+import com.ylx.moment.service.MomentCollectService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Slf4j
+@Service
+public class MomentCollectServiceImpl extends BaseServiceImpl<MomentCollectMapper, MomentCollect>
+        implements MomentCollectService {
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean toggleCollect(CustomerMomentDTO dto) {
+        Long userId = this.getCurrentUserId();
+        Long momentId = dto.getMomentId();
+
+        try {
+            // 1. 尝试插入收藏记录
+            MomentCollect collect = new MomentCollect();
+            collect.setUserId(userId);
+            collect.setMomentId(momentId);
+            this.save(collect);
+
+            // 2. 插入成功,说明是【新增收藏】,主表收藏数 +1
+            this.baseMapper.incrementSaveCount(momentId, 1);
+            return true;
+
+        } catch (DuplicateKeyException e) {
+            // 3. 触发唯一索引冲突,说明【已经收藏过】,执行取消收藏
+            LambdaQueryWrapper<MomentCollect> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(MomentCollect::getUserId, userId)
+                    .eq(MomentCollect::getMomentId, momentId);
+            this.remove(wrapper);
+
+            // 4. 主表收藏数 -1
+            this.baseMapper.incrementSaveCount(momentId, -1);
+            return false;
+        }
+    }
+
+}

+ 12 - 0
nightFragrance-massage/src/main/resources/mapper/moment/MomentCollectMapper.xml

@@ -0,0 +1,12 @@
+<?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.ylx.moment.mapper.MomentCollectMapper">
+
+    <update id="incrementSaveCount">
+        UPDATE
+            t_technician_moment
+        SET save_count = IFNULL(save_count, 0) + #{step}
+        WHERE
+            id = #{momentId}
+    </update>
+</mapper>

+ 1 - 1
nightFragrance-massage/src/main/resources/mapper/moment/TechnicianMomentMapper.xml

@@ -174,7 +174,7 @@
             m.content,
             m.cover_url,
             t.te_nick_name AS technicianNickName,
-            IFNULL(m.save_count, 0) AS saveCount,
+            IFNULL(m.like_count, 0) AS likeCount,
             IFNULL(m.view_count, 0) AS viewCount,
             m.media_type,
             m.publish_time,