|
|
@@ -0,0 +1,115 @@
|
|
|
+package com.gubersail.shop.app.story.service.impl;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.gubersail.shop.app.api.story.dto.AppWeChatUserStoryDto;
|
|
|
+import com.gubersail.shop.app.api.story.entity.AppWeChatUserStory;
|
|
|
+import com.gubersail.shop.app.api.story.entity.AppWechatUserStoryLikes;
|
|
|
+import com.gubersail.shop.app.api.story.vo.AppWeChatUserStoryVo;
|
|
|
+import com.gubersail.shop.app.story.mapper.AppWeChatUserStoryMapper;
|
|
|
+import com.gubersail.shop.app.story.mapper.AppWechatUserStoryLikesMapper;
|
|
|
+import com.gubersail.shop.app.story.service.IAppWeChatUserStoryService;
|
|
|
+import com.gubersail.shop.app.util.PageHelperUtil;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import org.springblade.common.enums.NumberEnum;
|
|
|
+import org.springblade.core.mp.support.Condition;
|
|
|
+import org.springblade.core.mp.support.Query;
|
|
|
+import org.springblade.core.secure.BladeUser;
|
|
|
+import org.springblade.core.secure.utils.AuthUtil;
|
|
|
+import org.springblade.core.tool.api.R;
|
|
|
+import org.springblade.core.tool.utils.BeanUtil;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+import org.springframework.util.ObjectUtils;
|
|
|
+
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author Rain
|
|
|
+ */
|
|
|
+@Service
|
|
|
+@AllArgsConstructor
|
|
|
+public class AppWeChatUserStoryServiceImpl extends ServiceImpl<AppWeChatUserStoryMapper, AppWeChatUserStory> implements IAppWeChatUserStoryService {
|
|
|
+
|
|
|
+ private final AppWechatUserStoryLikesMapper appWechatUserStoryLikesMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IPage<AppWeChatUserStoryDto> getList(AppWeChatUserStoryVo weChatUserStoryVo, Query query) {
|
|
|
+ IPage<AppWeChatUserStoryDto> dtoPage = new Page<>();
|
|
|
+ LambdaQueryWrapper<AppWeChatUserStory> searchQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ searchQueryWrapper.eq(AppWeChatUserStory::getIsDeleted, NumberEnum.Zero.number);
|
|
|
+ IPage<AppWeChatUserStory> weChatUserStoryPage = baseMapper.selectPage(Condition.getPage(query), searchQueryWrapper);
|
|
|
+ PageHelperUtil.getPageInfoDto(weChatUserStoryPage, dtoPage);
|
|
|
+ searchQueryWrapper.orderByDesc(AppWeChatUserStory::getLikes).orderByDesc(AppWeChatUserStory::getCreateTime);
|
|
|
+ if (weChatUserStoryPage.getRecords().isEmpty()) {
|
|
|
+ return dtoPage;
|
|
|
+ }
|
|
|
+ BladeUser nowStoryUser = AuthUtil.getUser();
|
|
|
+ List<AppWeChatUserStoryDto> dtoList = BeanUtil.copyProperties(weChatUserStoryPage.getRecords(), AppWeChatUserStoryDto.class);
|
|
|
+ List<Long> ids = dtoList.stream().map(AppWeChatUserStoryDto::getId).collect(Collectors.toList());
|
|
|
+ List<AppWechatUserStoryLikes> appWechatUserStoryLikesList = appWechatUserStoryLikesMapper.selectList(new LambdaQueryWrapper<AppWechatUserStoryLikes>()
|
|
|
+ .eq(AppWechatUserStoryLikes::getUserId, nowStoryUser.getUserId()).in(AppWechatUserStoryLikes::getStoryId, ids).eq(AppWechatUserStoryLikes::getIsDelete, NumberEnum.Zero.number));
|
|
|
+ if (!CollectionUtils.isEmpty(appWechatUserStoryLikesList)) {
|
|
|
+ Set<Long> likedStoryIds = appWechatUserStoryLikesList.stream()
|
|
|
+ .map(AppWechatUserStoryLikes::getStoryId)
|
|
|
+ .collect(Collectors.toSet());
|
|
|
+ dtoList.forEach(dto -> dto.setLiked(likedStoryIds.contains(dto.getId())));
|
|
|
+ }
|
|
|
+ dtoPage.setRecords(dtoList);
|
|
|
+ return dtoPage;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public AppWeChatUserStoryDto getDetail(Long id) {
|
|
|
+ AppWeChatUserStory weChatUserStory = baseMapper.selectById(id);
|
|
|
+ if (ObjectUtils.isEmpty(weChatUserStory)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ AppWeChatUserStoryDto dto = BeanUtil.copyProperties(weChatUserStory, AppWeChatUserStoryDto.class);
|
|
|
+ if (ObjectUtils.isEmpty(dto)) {
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
+ Integer storyLikes = appWechatUserStoryLikesMapper.selectCount(new LambdaQueryWrapper<AppWechatUserStoryLikes>()
|
|
|
+ .eq(AppWechatUserStoryLikes::getStoryId, id).eq(AppWechatUserStoryLikes::getIsDelete, NumberEnum.Zero.number).eq(AppWechatUserStoryLikes::getUserId, AuthUtil.getUserId()));
|
|
|
+ dto.setLiked(storyLikes > 0);
|
|
|
+ return dto;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R likeStory(Long id, Integer likeStatus) {
|
|
|
+ BladeUser nowStoryUser = AuthUtil.getUser();
|
|
|
+ Date nowDate = new Date();
|
|
|
+ AppWechatUserStoryLikes storyLikes = new AppWechatUserStoryLikes();
|
|
|
+ storyLikes.setStoryId(id);
|
|
|
+ storyLikes.setUserId(nowStoryUser.getUserId());
|
|
|
+ if (NumberEnum.ONE.number.equals(likeStatus)) {
|
|
|
+ storyLikes.setCreateUser(nowStoryUser.getUserId());
|
|
|
+ storyLikes.setCreateTime(nowDate);
|
|
|
+ appWechatUserStoryLikesMapper.insert(storyLikes);
|
|
|
+ } else {
|
|
|
+ storyLikes.setUpdateUser(nowStoryUser.getUserId());
|
|
|
+ storyLikes.setUpdateTime(nowDate);
|
|
|
+ storyLikes.setIsDelete(NumberEnum.ONE.number);
|
|
|
+ appWechatUserStoryLikesMapper.update(storyLikes, new LambdaQueryWrapper<AppWechatUserStoryLikes>()
|
|
|
+ .eq(AppWechatUserStoryLikes::getStoryId, id).eq(AppWechatUserStoryLikes::getUserId, nowStoryUser.getUserId())
|
|
|
+ .eq(AppWechatUserStoryLikes::getIsDelete, NumberEnum.Zero.number));
|
|
|
+ }
|
|
|
+ AppWeChatUserStory weChatUserStory = baseMapper.selectById(id);
|
|
|
+ AppWeChatUserStory updateStory = new AppWeChatUserStory();
|
|
|
+ Integer newLikes = likeStatus.equals(NumberEnum.ONE.number) ? 1 : -1;
|
|
|
+ updateStory.setLikes(weChatUserStory.getLikes() + newLikes);
|
|
|
+ updateStory.setUpdateUser(nowStoryUser.getUserId());
|
|
|
+ updateStory.setUpdateTime(nowDate);
|
|
|
+ int updateCount = baseMapper.update(updateStory, new LambdaQueryWrapper<AppWeChatUserStory>().eq(AppWeChatUserStory::getId, id).eq(AppWeChatUserStory::getIsDeleted, NumberEnum.Zero.number));
|
|
|
+ return R.status(updateCount > 0);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|