package com.xinquan.meditation.service.impl;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.xinquan.common.core.constant.SecurityConstants;
|
import com.xinquan.common.core.enums.DisabledEnum;
|
import com.xinquan.common.core.exception.ServiceException;
|
import com.xinquan.common.core.utils.page.BeanUtils;
|
import com.xinquan.common.core.utils.page.CollUtils;
|
import com.xinquan.common.core.utils.page.PageDTO;
|
import com.xinquan.common.security.utils.SecurityUtils;
|
import com.xinquan.meditation.domain.Meditation;
|
import com.xinquan.meditation.domain.MeditationCategory;
|
import com.xinquan.meditation.domain.MeditationMusic;
|
import com.xinquan.meditation.domain.MeditationQuestion;
|
import com.xinquan.meditation.domain.MeditationQuestionLike;
|
import com.xinquan.meditation.domain.MeditationUserFavorite;
|
import com.xinquan.meditation.domain.vo.ClientMeditationAndCateVO;
|
import com.xinquan.meditation.domain.vo.ClientMeditationCategoryVO;
|
import com.xinquan.meditation.domain.vo.ClientMeditationDetailsVO;
|
import com.xinquan.meditation.domain.vo.ClientMeditationQuestionVO;
|
import com.xinquan.meditation.domain.vo.ClientMeditationVO;
|
import com.xinquan.meditation.mapper.MeditationCategoryMapper;
|
import com.xinquan.meditation.mapper.MeditationMapper;
|
import com.xinquan.meditation.mapper.MeditationMusicMapper;
|
import com.xinquan.meditation.mapper.MeditationQuestionMapper;
|
import com.xinquan.meditation.service.MeditationQuestionLikeService;
|
import com.xinquan.meditation.service.MeditationService;
|
import com.xinquan.meditation.service.MeditationUserFavoriteService;
|
import com.xinquan.user.api.domain.AppUser;
|
import com.xinquan.user.api.domain.dto.AppUserDTO;
|
import com.xinquan.user.api.feign.RemoteAppUserService;
|
import java.util.Arrays;
|
import java.util.Collections;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
import java.util.Optional;
|
import java.util.Set;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
|
/**
|
* <p>
|
* 冥想音频表 服务实现类
|
* </p>
|
*
|
* @author mitao
|
* @since 2024-08-21
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class MeditationServiceImpl extends ServiceImpl<MeditationMapper, Meditation> implements MeditationService {
|
|
private final RemoteAppUserService remoteAppUserService;
|
private final MeditationCategoryMapper meditationCategoryMapper;
|
private final MeditationMusicMapper meditationMusicMapper;
|
private final MeditationQuestionMapper meditationQuestionMapper;
|
private final MeditationQuestionLikeService meditationQuestionLikeService;
|
private final MeditationUserFavoriteService meditationUserFavoriteService;
|
|
/**
|
* 获取私人订制
|
*
|
* @return 冥想列表
|
*/
|
@Override
|
public List<ClientMeditationVO> getPersonalityPlan() {
|
List<ClientMeditationVO> voList = null;
|
// 获取当前登录用户id
|
AppUser appUser = getCurrentUser();
|
if (Optional.ofNullable(appUser.getTagId()).isPresent()) {
|
String tagId = appUser.getTagId();
|
Integer sanskritFlag = appUser.getSanskritFlag();
|
Set<Long> tagIdSet = Arrays.stream(tagId.split(",")).map(Long::parseLong)
|
.collect(Collectors.toSet());
|
// 查询冥想列表
|
voList = baseMapper.getMeditationListByTagId(tagIdSet, sanskritFlag);
|
}
|
return voList;
|
}
|
|
/**
|
* 根据分类id获取冥想列表
|
*
|
* @param cateId 分类id
|
* @return 冥想列表
|
*/
|
@Override
|
public List<ClientMeditationVO> getMeditationListByCateId(Long cateId) {
|
List<ClientMeditationVO> voList = null;
|
// 获取当前登录用户id
|
AppUser appUser = getCurrentUser();
|
// 查询
|
List<Meditation> list = this.lambdaQuery().eq(Meditation::getCateId, cateId)
|
.eq(Meditation::getSanskrit, appUser.getSanskritFlag())
|
.orderByDesc(Meditation::getSortNum).last("limit 8").list();
|
if (CollUtils.isNotEmpty(list)) {
|
// 对象拷贝
|
voList = BeanUtils.copyList(list, ClientMeditationVO.class);
|
}
|
return voList;
|
}
|
|
/**
|
* 获取当前登录用户
|
*
|
* @return AppUser
|
*/
|
private AppUser getCurrentUser() {
|
Long userId = SecurityUtils.getUserId();
|
return remoteAppUserService.getUserByCondition(
|
AppUserDTO.builder().id(userId).build(),
|
SecurityConstants.INNER).getData();
|
}
|
|
/**
|
* 获取全部的冥想及分类列表
|
*
|
* @return 冥想和分类列表
|
*/
|
@Override
|
public List<ClientMeditationAndCateVO> getMeditationAndCateList() {
|
// 获取当前登录用户
|
AppUser appUser = getCurrentUser();
|
List<ClientMeditationAndCateVO> voList = CollUtils.newArrayList();
|
// 查询分类列表
|
List<MeditationCategory> cateList = meditationCategoryMapper.selectList(
|
Wrappers.lambdaQuery(MeditationCategory.class)
|
.orderByDesc(MeditationCategory::getSortNum));
|
if (CollUtils.isNotEmpty(cateList)) {
|
for (MeditationCategory cate : cateList) {
|
ClientMeditationAndCateVO vo = new ClientMeditationAndCateVO();
|
vo.setClientMeditationCategoryVO(
|
BeanUtils.copyBean(cateList, ClientMeditationCategoryVO.class));
|
vo.setClientMeditationVOList(getMeditationListByCateId(cate.getId()));
|
voList.add(vo);
|
}
|
}
|
return voList;
|
}
|
|
/**
|
* 根据分类id获取冥想列表-分页
|
*
|
* @param cateId 分类id
|
* @param pageCurr 当前页码
|
* @param pageSize 每页数量
|
* @return 冥想列表
|
*/
|
@Override
|
public PageDTO<ClientMeditationVO> getMeditationPageByCateId(Long cateId, Integer pageCurr,
|
Integer pageSize) {
|
PageDTO<ClientMeditationVO> pageDTO = PageDTO.empty(0L, 0L);
|
// 获取当前登录用户id
|
AppUser appUser = getCurrentUser();
|
// 查询
|
Page<Meditation> page = this.lambdaQuery().eq(Meditation::getCateId, cateId)
|
.eq(Meditation::getSanskrit, appUser.getSanskritFlag())
|
.orderByDesc(Meditation::getSortNum)
|
.page(new Page<>(pageCurr, pageSize));
|
// 如果没有查到数据直接返回
|
if (Optional.ofNullable(page.getRecords()).isPresent()) {
|
return pageDTO;
|
}
|
// 将实体类转换为VO
|
pageDTO = PageDTO.of(page, ClientMeditationVO.class);
|
return pageDTO;
|
}
|
|
/**
|
* 首页搜索首页
|
*
|
* @param condition 搜索条件
|
* @param pageCurr 当前页码
|
* @param pageSize 每页数量
|
* @return 冥想列表
|
*/
|
@Override
|
public PageDTO<ClientMeditationVO> search(String condition, Integer pageCurr,
|
Integer pageSize) {
|
PageDTO<ClientMeditationVO> pageDTO = PageDTO.empty(0L, 0L);
|
// 获取当前登录用户id
|
AppUser appUser = getCurrentUser();
|
// 查询
|
Page<Meditation> page = this.lambdaQuery()
|
.like(Meditation::getMeditationTitle, condition).or()
|
.eq(Meditation::getSanskrit, appUser.getSanskritFlag())
|
.orderByDesc(Meditation::getSortNum)
|
.page(new Page<>(pageCurr, pageSize));
|
// 如果没有查到数据直接返回
|
if (Optional.ofNullable(page.getRecords()).isPresent()) {
|
return pageDTO;
|
}
|
// 音频链接加密
|
/* page.getRecords().forEach(meditation -> {
|
try {
|
meditation.setTutorAudioUrl(DES.encryptDES(meditation.getTutorAudioUrl()));
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
});*/
|
// 将实体类转换为VO
|
pageDTO = PageDTO.of(page, ClientMeditationVO.class);
|
return pageDTO;
|
}
|
|
/**
|
* 获取冥想音频详情
|
*
|
* @param id 冥想音频id
|
* @return 客户端冥想详情视图对象
|
*/
|
@Override
|
public ClientMeditationDetailsVO getMeditationDetails(Long id) {
|
// 查询冥想音频
|
Meditation meditation = this.getById(id);
|
ClientMeditationDetailsVO vo = BeanUtils.copyBean(meditation,
|
ClientMeditationDetailsVO.class);
|
// 查询冥想音频
|
List<MeditationMusic> meditationMusics = meditationMusicMapper.selectList(
|
Wrappers.lambdaQuery(MeditationMusic.class)
|
.eq(MeditationMusic::getMeditationId, id));
|
if (CollUtils.isNotEmpty(meditationMusics)) {
|
// 获取音频链接
|
List<String> musicUrlList = meditationMusics.stream()
|
.map(MeditationMusic::getMusicUrl).collect(Collectors.toList());
|
vo.setMeditationMusicList(musicUrlList);
|
}
|
// 查询收藏记录
|
vo.setFavorite(meditationUserFavoriteService.lambdaQuery()
|
.eq(MeditationUserFavorite::getMeditationId, id)
|
.eq(MeditationUserFavorite::getAppUserId, SecurityUtils.getUserId())
|
.count() > 0 ? 1 : 2);
|
return vo;
|
}
|
|
/**
|
* 收藏/取消收藏
|
*
|
* @param id 冥想音频id
|
*/
|
@Override
|
public void favorite(Long id) {
|
Meditation meditation = this.getById(id);
|
if (Objects.isNull(meditation)) {
|
throw new ServiceException("该冥想音频不存在");
|
}
|
// 查询收藏记录
|
Optional<MeditationUserFavorite> userOperationOpt = meditationUserFavoriteService.lambdaQuery()
|
.eq(MeditationUserFavorite::getMeditationId, id)
|
.eq(MeditationUserFavorite::getAppUserId, SecurityUtils.getUserId())
|
.last("limit 1").oneOpt();
|
if (userOperationOpt.isPresent()) {
|
meditationUserFavoriteService.removeById(userOperationOpt.get());
|
// 增加收藏数
|
meditation.setFavoriteCount(meditation.getFavoriteCount() - 1);
|
} else {
|
// 增加收藏记录
|
MeditationUserFavorite meditationUserFavorite = new MeditationUserFavorite();
|
meditationUserFavorite.setMeditationId(id);
|
meditationUserFavorite.setAppUserId(SecurityUtils.getUserId());
|
meditationUserFavoriteService.save(meditationUserFavorite);
|
// 减少收藏数
|
meditation.setFavoriteCount(meditation.getFavoriteCount() + 1);
|
}
|
this.updateById(meditation);
|
}
|
|
/**
|
* 获取冥想音频提问列表-分页
|
*
|
* @param id 冥想音频id
|
* @param pageCurr 当前页码
|
* @param pageSize 每页数量
|
* @return 冥想音频提问分页列表
|
*/
|
@Override
|
public PageDTO<ClientMeditationQuestionVO> getMeditationQuestionPage(Long id,
|
Integer pageCurr, Integer pageSize) {
|
// 查询冥想提问列表
|
Page<MeditationQuestion> questionPage = meditationQuestionMapper.selectPage(
|
new Page<>(pageCurr, pageSize),
|
Wrappers.lambdaQuery(MeditationQuestion.class)
|
.eq(MeditationQuestion::getMeditationId, id)
|
.eq(MeditationQuestion::getShowFlag, DisabledEnum.YES)
|
.orderByDesc(MeditationQuestion::getPublishTime)
|
);
|
|
if (CollUtils.isEmpty(questionPage.getRecords())) {
|
return PageDTO.empty(questionPage);
|
}
|
|
// 将 questionPage 转换为 PageDTO
|
PageDTO<ClientMeditationQuestionVO> pageDTO = PageDTO.of(
|
questionPage, ClientMeditationQuestionVO.class);
|
List<ClientMeditationQuestionVO> questionVOList = pageDTO.getList();
|
|
// 提取用户ID集合
|
Set<Long> appUserIdSet = questionVOList.stream()
|
.map(ClientMeditationQuestionVO::getAppUserId)
|
.collect(Collectors.toSet());
|
|
// 远程调用,获取APP用户信息
|
Map<Long, AppUser> appUserMap = Collections.emptyMap();
|
if (!appUserIdSet.isEmpty()) {
|
List<AppUser> appUserList = remoteAppUserService.getAppUserList(appUserIdSet,
|
SecurityConstants.INNER)
|
.getData();
|
appUserMap = appUserList.stream()
|
.collect(Collectors.toMap(AppUser::getId, Function.identity()));
|
}
|
|
// 封装用户信息
|
for (ClientMeditationQuestionVO questionVO : questionVOList) {
|
AppUser appUser = appUserMap.get(questionVO.getAppUserId());
|
if (appUser != null) {
|
questionVO.setNickname(appUser.getNickname());
|
questionVO.setAvatar(appUser.getAvatar());
|
}
|
}
|
|
// 获取当前登录用户ID
|
Long userId = SecurityUtils.getUserId();
|
|
// 查询用户已点赞提问列表
|
Set<Long> likedQuestionIds = meditationQuestionLikeService.lambdaQuery()
|
.eq(MeditationQuestionLike::getAppUserId, userId)
|
.list()
|
.stream()
|
.map(MeditationQuestionLike::getMeditationQuestionId)
|
.collect(Collectors.toSet());
|
|
// 设置问题的点赞状态
|
questionVOList.forEach(question -> {
|
if (likedQuestionIds.contains(question.getId())) {
|
question.setLike(DisabledEnum.YES.getCode());
|
}
|
});
|
|
return pageDTO;
|
}
|
|
}
|