From 017f226ac40fe43bd801f72493cd91ca4818f135 Mon Sep 17 00:00:00 2001 From: glx <783262171@qq.com> Date: Thu, 7 May 2026 13:07:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8A=A8=E7=89=A9=E7=AC=94?= =?UTF-8?q?=E8=AE=B0=E7=82=B9=E8=B5=9E=E6=94=B6=E8=97=8F=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youlai/boot/YouLaiBootApplication.java | 2 + .../freemarker/MyBatisPlusGenerator.java | 2 + .../controller/StrayAnimalController.java | 30 +++++ .../mini/job/CommentCountCalibrateJob.java | 40 ------- .../boot/mini/job/NoteStatsCalibrateJob.java | 108 +++++++++++++++++ .../MiniStrayAnimalNoteCollectMapper.java | 30 +++++ .../MiniStrayAnimalNoteCommentMapper.java | 9 +- .../mapper/MiniStrayAnimalNoteLikeMapper.java | 30 +++++ .../mapper/MiniStrayAnimalNoteMapper.java | 40 +++++++ .../entity/MiniStrayAnimalNoteCollect.java | 70 +++++++++++ .../model/entity/MiniStrayAnimalNoteLike.java | 70 +++++++++++ .../boot/mini/model/form/CommentLikeForm.java | 3 - .../boot/mini/model/form/NoteCollectForm.java | 15 +++ .../boot/mini/model/form/NoteLikeForm.java | 15 +++ .../boot/mini/service/StrayAnimalService.java | 7 ++ .../StrayAnimalNoteCommentServiceImpl.java | 5 +- .../service/impl/StrayAnimalServiceImpl.java | 113 ++++++++++++++++++ .../mini/MiniStrayAnimalNoteCollectMapper.xml | 42 +++++++ .../mini/MiniStrayAnimalNoteCommentMapper.xml | 28 +++-- .../mini/MiniStrayAnimalNoteLikeMapper.xml | 42 +++++++ .../mapper/mini/MiniStrayAnimalNoteMapper.xml | 76 ++++++++++++ 21 files changed, 725 insertions(+), 52 deletions(-) delete mode 100644 src/main/java/com/youlai/boot/mini/job/CommentCountCalibrateJob.java create mode 100644 src/main/java/com/youlai/boot/mini/job/NoteStatsCalibrateJob.java create mode 100644 src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteCollectMapper.java create mode 100644 src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteLikeMapper.java create mode 100644 src/main/java/com/youlai/boot/mini/model/entity/MiniStrayAnimalNoteCollect.java create mode 100644 src/main/java/com/youlai/boot/mini/model/entity/MiniStrayAnimalNoteLike.java create mode 100644 src/main/java/com/youlai/boot/mini/model/form/NoteCollectForm.java create mode 100644 src/main/java/com/youlai/boot/mini/model/form/NoteLikeForm.java create mode 100644 src/main/resources/mapper/mini/MiniStrayAnimalNoteCollectMapper.xml create mode 100644 src/main/resources/mapper/mini/MiniStrayAnimalNoteLikeMapper.xml diff --git a/src/main/java/com/youlai/boot/YouLaiBootApplication.java b/src/main/java/com/youlai/boot/YouLaiBootApplication.java index c9d4252..fe69a90 100644 --- a/src/main/java/com/youlai/boot/YouLaiBootApplication.java +++ b/src/main/java/com/youlai/boot/YouLaiBootApplication.java @@ -3,6 +3,7 @@ package com.youlai.boot; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; /** * 应用启动类 @@ -10,6 +11,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * @author Ray.Hao * @since 0.0.1 */ +@EnableScheduling @SpringBootApplication @MapperScan("com.youlai.boot.**.mapper") public class YouLaiBootApplication { diff --git a/src/main/java/com/youlai/boot/codegen/freemarker/MyBatisPlusGenerator.java b/src/main/java/com/youlai/boot/codegen/freemarker/MyBatisPlusGenerator.java index ae94d9b..aceb48b 100644 --- a/src/main/java/com/youlai/boot/codegen/freemarker/MyBatisPlusGenerator.java +++ b/src/main/java/com/youlai/boot/codegen/freemarker/MyBatisPlusGenerator.java @@ -101,6 +101,8 @@ public class MyBatisPlusGenerator { ,new TableConfig("mini_sign_record", IdType.AUTO, "mini") ,new TableConfig("mini_stray_animal_note_comment", IdType.AUTO, "mini") ,new TableConfig("mini_stray_animal_note_comment_like", IdType.AUTO, "mini") + ,new TableConfig("mini_stray_animal_note_like", IdType.AUTO, "mini") + ,new TableConfig("mini_stray_animal_note_collect", IdType.AUTO, "mini") // ,new TableConfig("mini_stray_animal", IdType.AUTO, "mini") // ,new TableConfig("mini_stray_animal", IdType.INPUT, "minitest") 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 ccce5a1..438099c 100644 --- a/src/main/java/com/youlai/boot/mini/controller/StrayAnimalController.java +++ b/src/main/java/com/youlai/boot/mini/controller/StrayAnimalController.java @@ -10,6 +10,8 @@ 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.NoteCollectForm; +import com.youlai.boot.mini.model.form.NoteLikeForm; import com.youlai.boot.mini.model.form.StrayAnimalForm; import com.youlai.boot.mini.model.query.OwnStrayAnimalQuery; import com.youlai.boot.mini.model.vo.SaveStrayAnimalVO; @@ -21,11 +23,13 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; +import java.util.Map; /** * 流浪动物信息 @@ -149,4 +153,30 @@ public class StrayAnimalController { return PageResult.success(strayAnimalService.getOthersCreatedPage(authorUuid, queryParams)); } + @Operation(summary = "笔记点赞/取消点赞接口") + @PostMapping(value = "/note/like/toggle") + @PreAuthorize("isAuthenticated()") + public Result> toggleNoteLike( + @Valid @RequestBody NoteLikeForm form + ) { + Long userId = SecurityUtils.getUserId(); + Map result = strayAnimalService.toggleNoteLike(form, userId); + return Result.success(result); + } + + @Operation(summary = "笔记收藏/取消收藏接口") + @PostMapping(value = "/note/collect/toggle") + @PreAuthorize("isAuthenticated()") + public Result> toggleNoteCollect( + @Valid @RequestBody NoteCollectForm form + ) { + Long userId = SecurityUtils.getUserId(); + Map result = strayAnimalService.toggleNoteCollect(form, userId); + return Result.success(result); + } + + //获取流浪动物笔记瀑布流 + + //增加浏览量 + } diff --git a/src/main/java/com/youlai/boot/mini/job/CommentCountCalibrateJob.java b/src/main/java/com/youlai/boot/mini/job/CommentCountCalibrateJob.java deleted file mode 100644 index da932b2..0000000 --- a/src/main/java/com/youlai/boot/mini/job/CommentCountCalibrateJob.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.youlai.boot.mini.job; - -import com.youlai.boot.mini.mapper.MiniStrayAnimalNoteCommentMapper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -/** - * 评论计数校准定时任务 - *

- * 定时校准评论数量 - */ -@Component -@Slf4j -@RequiredArgsConstructor -public class CommentCountCalibrateJob { - - private final MiniStrayAnimalNoteCommentMapper miniStrayAnimalNoteCommentMapper; - - // 每天凌晨 00:00:00 执行 - @Scheduled(cron = "0 0 0 * * ?") - @Transactional - public void calibrateCommentCounts() { - log.info("开始校准动物笔记评论数..."); - long startTime = System.currentTimeMillis(); - - try { - int updatedCount = miniStrayAnimalNoteCommentMapper.batchCalibrateAllCommentCounts(); - // 方案B:增量校准(数据量大时使用) - long costTime = System.currentTimeMillis() - startTime; - log.info("校准完成,共更新 {} 条笔记,耗时 {} ms", updatedCount, costTime); - } catch (Exception e) { - log.error("校准失败", e); - } - } - - -} diff --git a/src/main/java/com/youlai/boot/mini/job/NoteStatsCalibrateJob.java b/src/main/java/com/youlai/boot/mini/job/NoteStatsCalibrateJob.java new file mode 100644 index 0000000..2540295 --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/job/NoteStatsCalibrateJob.java @@ -0,0 +1,108 @@ +package com.youlai.boot.mini.job; + +import com.youlai.boot.mini.mapper.MiniStrayAnimalNoteCommentMapper; +import com.youlai.boot.mini.mapper.MiniStrayAnimalNoteMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * 动物笔记统计数据校准定时任务 + *

+ * 定时校准评论数、点赞数、收藏数,防止并发操作导致计数不准确 + */ +@Component +@Slf4j +@RequiredArgsConstructor +public class NoteStatsCalibrateJob { + + private final MiniStrayAnimalNoteCommentMapper miniStrayAnimalNoteCommentMapper; + private final MiniStrayAnimalNoteMapper miniStrayAnimalNoteMapper; + + /** + * 校准所有统计数据 + * 每天凌晨 00:00:00 执行 + */ + @Scheduled(cron = "0 0 0 * * ?") +// @Scheduled(cron = "0 */1 * * * ?") + @Transactional + public void calibrateAllStats() { + log.info("========== 开始校准动物笔记统计数据 =========="); + long totalStartTime = System.currentTimeMillis(); + + calibrateCommentCounts(); + calibrateCommentLikeCounts(); + calibrateNoteLikeCounts(); + calibrateCollectCounts(); + + long totalCostTime = System.currentTimeMillis() - totalStartTime; + log.info("========== 全部统计数据校准完成,总耗时 {} ms ==========", totalCostTime); + } + + /** + * 校准笔记评论数 + */ + private void calibrateCommentCounts() { + log.info("开始校准动物笔记评论数..."); + long startTime = System.currentTimeMillis(); + + try { + int updatedCount = miniStrayAnimalNoteCommentMapper.batchCalibrateAllCommentCounts(); + long costTime = System.currentTimeMillis() - startTime; + log.info("校准评论数完成,共更新 {} 条笔记,耗时 {} ms", updatedCount, costTime); + } catch (Exception e) { + log.error("校准评论数失败", e); + } + } + + /** + * 校准评论点赞数 + */ + private void calibrateCommentLikeCounts() { + log.info("开始校准评论点赞数..."); + long startTime = System.currentTimeMillis(); + + try { + int updatedCount = miniStrayAnimalNoteCommentMapper.batchCalibrateAllCommentLikeCounts(); + long costTime = System.currentTimeMillis() - startTime; + log.info("校准评论点赞数完成,共更新 {} 条评论,耗时 {} ms", updatedCount, costTime); + } catch (Exception e) { + log.error("校准评论点赞数失败", e); + } + } + + /** + * 校准笔记点赞数 + */ + private void calibrateNoteLikeCounts() { + log.info("开始校准动物笔记点赞数..."); + long startTime = System.currentTimeMillis(); + + try { + int updatedCount = miniStrayAnimalNoteMapper.batchCalibrateAllLikeCounts(); + long costTime = System.currentTimeMillis() - startTime; + log.info("校准点赞数完成,共更新 {} 条笔记,耗时 {} ms", updatedCount, costTime); + } catch (Exception e) { + log.error("校准点赞数失败", e); + } + } + + /** + * 校准笔记收藏数 + */ + private void calibrateCollectCounts() { + log.info("开始校准动物笔记收藏数..."); + long startTime = System.currentTimeMillis(); + + try { + int updatedCount = miniStrayAnimalNoteMapper.batchCalibrateAllCollectCounts(); + long costTime = System.currentTimeMillis() - startTime; + log.info("校准收藏数完成,共更新 {} 条笔记,耗时 {} ms", updatedCount, costTime); + } catch (Exception e) { + log.error("校准收藏数失败", e); + } + } + +} diff --git a/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteCollectMapper.java b/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteCollectMapper.java new file mode 100644 index 0000000..b990e9f --- /dev/null +++ b/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteCollectMapper.java @@ -0,0 +1,30 @@ +package com.youlai.boot.mini.mapper; + +import com.youlai.boot.mini.model.entity.MiniStrayAnimalNoteCollect; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +/** +* 用户收藏表 Mapper 接口 +* +* @author jwy +* @since +*/ +public interface MiniStrayAnimalNoteCollectMapper extends BaseMapper { + + /** + * 查询用户是否收藏该笔记 + */ + Integer selectUserCollectCount(@Param("noteId") Long noteId, @Param("userId") Long userId); + + /** + * 新增或更新收藏记录(原子操作) + */ + int insertOrUpdateCollect(MiniStrayAnimalNoteCollect collect); + + /** + * 逻辑删除收藏记录(取消收藏) + */ + int deleteCollect(@Param("noteId") Long noteId, @Param("userId") Long userId, @Param("currentTime") Long currentTime); + +} diff --git a/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteCommentMapper.java b/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteCommentMapper.java index 360fa3d..77ed3a8 100644 --- a/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteCommentMapper.java +++ b/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteCommentMapper.java @@ -9,7 +9,9 @@ import com.youlai.boot.mini.model.query.AnimalNoteSecondLevelCommentQueryParam; import com.youlai.boot.mini.model.vo.AnimalNoteFirstLevelCommentVO; import com.youlai.boot.mini.model.vo.AnimalNoteSecondLevelCommentVO; import org.apache.ibatis.annotations.Param; -import java.util.List;/** +import java.util.List; + +/** * 流浪动物笔记评论表 Mapper 接口 * * @author jwy @@ -52,4 +54,9 @@ public interface MiniStrayAnimalNoteCommentMapper extends BaseMapper { + + /** + * 查询用户是否点赞该笔记 + */ + Integer selectUserLikeCount(@Param("noteId") Long noteId, @Param("userId") Long userId); + + /** + * 新增或更新点赞记录(原子操作) + */ + int insertOrUpdateLike(MiniStrayAnimalNoteLike like); + + /** + * 逻辑删除点赞记录(取消点赞) + */ + int deleteLike(@Param("noteId") Long noteId, @Param("userId") Long userId, @Param("currentTime") Long currentTime); + +} diff --git a/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteMapper.java b/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteMapper.java index f89c9e2..46a6c52 100644 --- a/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteMapper.java +++ b/src/main/java/com/youlai/boot/mini/mapper/MiniStrayAnimalNoteMapper.java @@ -17,4 +17,44 @@ public interface MiniStrayAnimalNoteMapper extends BaseMapper { @@ -41,5 +44,9 @@ public interface StrayAnimalService extends IService { IPage getOthersCreatedPage(String authorUuid, OwnStrayAnimalQuery queryParams); List listByMapBounds(MapSearchDTO mapSearch); + + Map toggleNoteLike(NoteLikeForm form, Long userId); + + Map toggleNoteCollect(NoteCollectForm form, Long userId); } diff --git a/src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalNoteCommentServiceImpl.java b/src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalNoteCommentServiceImpl.java index e1e3268..393a81b 100644 --- a/src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalNoteCommentServiceImpl.java +++ b/src/main/java/com/youlai/boot/mini/service/impl/StrayAnimalNoteCommentServiceImpl.java @@ -293,15 +293,18 @@ public class StrayAnimalNoteCommentServiceImpl extends ServiceImpl 0) { currentLiked = true; + } else { + currentLiked = false; } + boolean targetLike = !currentLiked; + // 3. 执行点赞/取消点赞操作 if (targetLike) { // 点赞操作:不存在则新增,存在则更新为未删除状态 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 a808c00..5863078 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 @@ -7,6 +7,7 @@ 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; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.youlai.boot.common.constant.CommonConstants; @@ -20,7 +21,13 @@ import com.youlai.boot.framework.security.util.SecurityUtils; import com.youlai.boot.mini.converter.MiniStrayAnimalConverter; import com.youlai.boot.mini.mapper.MiniStrayAnimalMapper; import com.youlai.boot.mini.mapper.MiniStrayAnimalNoteMapper; +import com.youlai.boot.mini.mapper.MiniStrayAnimalNoteCollectMapper; +import com.youlai.boot.mini.mapper.MiniStrayAnimalNoteLikeMapper; import com.youlai.boot.mini.mapper.MiniStrayAnimalNoteMediaMapper; +import com.youlai.boot.mini.model.entity.MiniStrayAnimalNoteCollect; +import com.youlai.boot.mini.model.entity.MiniStrayAnimalNoteLike; +import com.youlai.boot.mini.model.form.NoteCollectForm; +import com.youlai.boot.mini.model.form.NoteLikeForm; import com.youlai.boot.mini.model.dto.DeleteStrayAnimalDTO; import com.youlai.boot.mini.model.dto.DeleteStrayAnimalNoteMediaDTO; import com.youlai.boot.mini.model.dto.EditVisibilityDTO; @@ -76,6 +83,8 @@ public class StrayAnimalServiceImpl extends ServiceImpl toggleNoteLike(NoteLikeForm form, Long userId) { + Long noteId = miniStrayAnimalNoteMapper.selectIdByUuid(form.getNoteUuid()); + if (noteId == null) { + throw new MsgException("笔记不存在或已删除"); + } + + long currentTime = System.currentTimeMillis(); + Boolean currentLiked; + + Integer count = miniStrayAnimalNoteLikeMapper.selectUserLikeCount(noteId, userId); + if (count != null && count > 0) { + currentLiked = true; + } else { + currentLiked = false; + } + + boolean targetLike = !currentLiked; + + if (targetLike) { + if (!Boolean.TRUE.equals(currentLiked)) { + MiniStrayAnimalNoteLike like = new MiniStrayAnimalNoteLike(); + like.setUuid(IdWorker.get32UUID()); + like.setNoteId(noteId); + like.setMiniUserId(userId); + like.setCreateBy(userId); + like.setCreateTimestamp(currentTime); + like.setCreateTime(new Date(currentTime)); + like.setUpdateBy(userId); + like.setUpdateTimestamp(currentTime); + like.setUpdateTime(new Date(currentTime)); + like.setDeleted(false); + miniStrayAnimalNoteLikeMapper.insertOrUpdateLike(like); + + miniStrayAnimalNoteMapper.incrementLikeCount(noteId); + } + } else { + if (Boolean.TRUE.equals(currentLiked)) { + miniStrayAnimalNoteLikeMapper.deleteLike(noteId, userId, currentTime); + + miniStrayAnimalNoteMapper.decrementLikeCount(noteId); + } + } + + Long likeCount = miniStrayAnimalNoteMapper.selectLikeCount(noteId); + Map result = new HashMap<>(); + result.put("isLiked", targetLike); + result.put("likeCount", likeCount != null ? likeCount : 0); + return result; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Map toggleNoteCollect(NoteCollectForm form, Long userId) { + Long noteId = miniStrayAnimalNoteMapper.selectIdByUuid(form.getNoteUuid()); + if (noteId == null) { + throw new MsgException("笔记不存在或已删除"); + } + + long currentTime = System.currentTimeMillis(); + Boolean currentCollected; + + Integer count = miniStrayAnimalNoteCollectMapper.selectUserCollectCount(noteId, userId); + if (count != null && count > 0) { + currentCollected = true; + } else { + currentCollected = false; + } + + boolean targetCollect = !currentCollected; + + if (targetCollect) { + if (!Boolean.TRUE.equals(currentCollected)) { + MiniStrayAnimalNoteCollect collect = new MiniStrayAnimalNoteCollect(); + collect.setUuid(IdWorker.get32UUID()); + collect.setNoteId(noteId); + collect.setMiniUserId(userId); + collect.setCreateBy(userId); + collect.setCreateTimestamp(currentTime); + collect.setCreateTime(new Date(currentTime)); + collect.setUpdateBy(userId); + collect.setUpdateTimestamp(currentTime); + collect.setUpdateTime(new Date(currentTime)); + collect.setDeleted(false); + miniStrayAnimalNoteCollectMapper.insertOrUpdateCollect(collect); + + miniStrayAnimalNoteMapper.incrementCollectCount(noteId); + } + } else { + if (Boolean.TRUE.equals(currentCollected)) { + miniStrayAnimalNoteCollectMapper.deleteCollect(noteId, userId, currentTime); + + miniStrayAnimalNoteMapper.decrementCollectCount(noteId); + } + } + + Long collectCount = miniStrayAnimalNoteMapper.selectCollectCount(noteId); + Map result = new HashMap<>(); + result.put("isCollected", targetCollect); + result.put("collectCount", collectCount != null ? collectCount : 0); + return result; + } + } diff --git a/src/main/resources/mapper/mini/MiniStrayAnimalNoteCollectMapper.xml b/src/main/resources/mapper/mini/MiniStrayAnimalNoteCollectMapper.xml new file mode 100644 index 0000000..70e9389 --- /dev/null +++ b/src/main/resources/mapper/mini/MiniStrayAnimalNoteCollectMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + INSERT INTO mini_stray_animal_note_collect + (uuid, note_id, mini_user_id, create_time, create_timestamp, create_by, update_time, update_timestamp, update_by, is_deleted) + VALUES + (#{uuid}, #{noteId}, #{miniUserId}, #{createTime}, #{createTimestamp}, #{createBy}, #{updateTime}, #{updateTimestamp}, #{updateBy}, #{deleted}) + ON DUPLICATE KEY UPDATE + is_deleted = 0, + update_time = VALUES(update_time), + update_timestamp = VALUES(update_timestamp), + update_by = VALUES(update_by) + + + + + UPDATE mini_stray_animal_note_collect + SET is_deleted = 1, + update_time = NOW(), + update_timestamp = #{currentTime}, + update_by = #{userId} + WHERE note_id = #{noteId} + AND mini_user_id = #{userId} + AND is_deleted = 0 + + + diff --git a/src/main/resources/mapper/mini/MiniStrayAnimalNoteCommentMapper.xml b/src/main/resources/mapper/mini/MiniStrayAnimalNoteCommentMapper.xml index b6fa467..b641ada 100644 --- a/src/main/resources/mapper/mini/MiniStrayAnimalNoteCommentMapper.xml +++ b/src/main/resources/mapper/mini/MiniStrayAnimalNoteCommentMapper.xml @@ -14,13 +14,14 @@ UPDATE mini_stray_animal_note n - SET n.comment_count = ( - SELECT COUNT(1) - FROM mini_stray_animal_note_comment c - WHERE c.note_id = n.id - AND c.flag = 0 - ) - WHERE 1 = 1 + LEFT JOIN ( + SELECT note_id, COUNT(1) AS actual_count + FROM mini_stray_animal_note_comment + WHERE is_deleted = 0 + GROUP BY note_id + ) c ON n.id = c.note_id + SET n.comment_count = COALESCE(c.actual_count, 0) + WHERE n.comment_count != COALESCE(c.actual_count, 0) @@ -188,4 +189,17 @@ AND is_deleted = 0 + + + UPDATE mini_stray_animal_note_comment c + LEFT JOIN ( + SELECT note_comment_id, COUNT(1) AS actual_count + FROM mini_stray_animal_note_comment_like + WHERE is_deleted = 0 + GROUP BY note_comment_id + ) l ON c.id = l.note_comment_id + SET c.like_count = COALESCE(l.actual_count, 0) + WHERE c.like_count != COALESCE(l.actual_count, 0) + + diff --git a/src/main/resources/mapper/mini/MiniStrayAnimalNoteLikeMapper.xml b/src/main/resources/mapper/mini/MiniStrayAnimalNoteLikeMapper.xml new file mode 100644 index 0000000..5b6e000 --- /dev/null +++ b/src/main/resources/mapper/mini/MiniStrayAnimalNoteLikeMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + INSERT INTO mini_stray_animal_note_like + (uuid, note_id, mini_user_id, create_time, create_timestamp, create_by, update_time, update_timestamp, update_by, is_deleted) + VALUES + (#{uuid}, #{noteId}, #{miniUserId}, #{createTime}, #{createTimestamp}, #{createBy}, #{updateTime}, #{updateTimestamp}, #{updateBy}, #{deleted}) + ON DUPLICATE KEY UPDATE + is_deleted = 0, + update_time = VALUES(update_time), + update_timestamp = VALUES(update_timestamp), + update_by = VALUES(update_by) + + + + + UPDATE mini_stray_animal_note_like + SET is_deleted = 1, + update_time = NOW(), + update_timestamp = #{currentTime}, + update_by = #{userId} + WHERE note_id = #{noteId} + AND mini_user_id = #{userId} + AND is_deleted = 0 + + + diff --git a/src/main/resources/mapper/mini/MiniStrayAnimalNoteMapper.xml b/src/main/resources/mapper/mini/MiniStrayAnimalNoteMapper.xml index ff50d3c..59202dc 100644 --- a/src/main/resources/mapper/mini/MiniStrayAnimalNoteMapper.xml +++ b/src/main/resources/mapper/mini/MiniStrayAnimalNoteMapper.xml @@ -14,4 +14,80 @@ LIMIT 1 + + + UPDATE mini_stray_animal_note + SET like_count = like_count + 1 + WHERE id = #{noteId} + AND is_deleted = 0 + + + + + UPDATE mini_stray_animal_note + SET like_count = like_count - 1 + WHERE id = #{noteId} + AND is_deleted = 0 + AND like_count > 0 + + + + + + + + UPDATE mini_stray_animal_note + SET collect_count = collect_count + 1 + WHERE id = #{noteId} + AND is_deleted = 0 + + + + + UPDATE mini_stray_animal_note + SET collect_count = collect_count - 1 + WHERE id = #{noteId} + AND is_deleted = 0 + AND collect_count > 0 + + + + + + + + UPDATE mini_stray_animal_note n + LEFT JOIN ( + SELECT note_id, COUNT(1) AS actual_count + FROM mini_stray_animal_note_like + WHERE is_deleted = 0 + GROUP BY note_id + ) l ON n.id = l.note_id + SET n.like_count = COALESCE(l.actual_count, 0) + WHERE n.like_count != COALESCE(l.actual_count, 0) + + + + + UPDATE mini_stray_animal_note n + LEFT JOIN ( + SELECT note_id, COUNT(1) AS actual_count + FROM mini_stray_animal_note_collect + WHERE is_deleted = 0 + GROUP BY note_id + ) c ON n.id = c.note_id + SET n.collect_count = COALESCE(c.actual_count, 0) + WHERE n.collect_count != COALESCE(c.actual_count, 0) + +