package com.ruoyi.promotion.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.ruoyi.common.core.constant.SecurityConstants;
|
import com.ruoyi.common.core.enums.DisabledEnum;
|
import com.ruoyi.common.core.exception.ServiceException;
|
import com.ruoyi.common.core.utils.StringUtils;
|
import com.ruoyi.common.core.utils.page.BeanUtils;
|
import com.ruoyi.common.core.utils.page.CollUtils;
|
import com.ruoyi.common.core.utils.page.PageDTO;
|
import com.ruoyi.common.core.web.page.BasePage;
|
import com.ruoyi.common.security.utils.SecurityUtils;
|
import com.ruoyi.promotion.controller.forepart.dto.ForepartPromotionWishDTO;
|
import com.ruoyi.promotion.controller.forepart.dto.ForepartPromotionWishListDTO;
|
import com.ruoyi.promotion.controller.forepart.vo.ForepartPopupVO;
|
import com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishBulletVO;
|
import com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishListVO;
|
import com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishRecommendVO;
|
import com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishVO;
|
import com.ruoyi.promotion.controller.management.dto.MgtPromotionWishQuery;
|
import com.ruoyi.promotion.controller.management.dto.MgtPromotionWishRecommendDTO;
|
import com.ruoyi.promotion.controller.management.vo.MgtPromotionWishListVO;
|
import com.ruoyi.promotion.controller.management.vo.MgtPromotionWishVO;
|
import com.ruoyi.promotion.domain.PromotionWish;
|
import com.ruoyi.promotion.domain.PromotionWishList;
|
import com.ruoyi.promotion.mapper.PromotionWishMapper;
|
import com.ruoyi.promotion.service.IPromotionWishListService;
|
import com.ruoyi.promotion.service.IPromotionWishRecommendService;
|
import com.ruoyi.promotion.service.IPromotionWishService;
|
import com.ruoyi.system.api.domain.Member;
|
import com.ruoyi.system.api.domain.PromotionWishRecommend;
|
import com.ruoyi.system.api.domain.dto.MemberDTO;
|
import com.ruoyi.system.api.domain.vo.MgtPromotionWishRecommendVO;
|
import com.ruoyi.system.api.feignClient.MemberClient;
|
import com.ruoyi.system.api.feignClient.OrderClient;
|
import java.time.LocalDate;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
import java.util.Set;
|
import java.util.stream.Collectors;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
/**
|
* <p>
|
* 心愿求购 服务实现类
|
* </p>
|
*
|
* @author mitao
|
* @since 2024-10-29
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class PromotionWishServiceImpl extends
|
ServiceImpl<PromotionWishMapper, PromotionWish> implements
|
IPromotionWishService {
|
private final MemberClient memberClient;
|
private final IPromotionWishListService promotionWishListService;
|
private final IPromotionWishRecommendService promotionWishRecommendService;
|
private final OrderClient orderClient;
|
|
/**
|
* 个人中心-获取推荐商品可购买数
|
* @return
|
*/
|
@Override
|
public Integer getRecommendNum() {
|
Member currentMember = getCurrentMember();
|
return baseMapper.getRecommendNum(currentMember.getId());
|
}
|
|
/**
|
* 获取心愿求购列表
|
*
|
* @param query
|
* @return
|
*/
|
@Override
|
public PageDTO<MgtPromotionWishVO> queryPage(MgtPromotionWishQuery query) {
|
// 封装会员条件查询对象
|
MemberDTO memberDTO = null;
|
Set<Long> memberIdSet = null;
|
Page<PromotionWish> page = new Page<>(query.getPageCurr(), query
|
.getPageSize());
|
if (StringUtils.isNotBlank(query.getNickname()) || StringUtils.isNotBlank(
|
query.getPhone())) {
|
memberDTO = new MemberDTO();
|
memberDTO.setNickname(query.getNickname());
|
memberDTO.setPhone(query.getPhone());
|
}
|
if (StringUtils.isNotNull(memberDTO)) {
|
// 远程调用会员服务进行条件查询
|
List<Member> memberList = memberClient.getMemberListByCondition(memberDTO,
|
SecurityConstants.INNER).getData();
|
if (StringUtils.isEmpty(memberList)) {
|
return PageDTO.empty(page);
|
}
|
memberIdSet = memberList.stream().map(Member::getId)
|
.collect(Collectors.toSet());
|
}
|
|
// 分页查询心愿求购列表
|
page = this.lambdaQuery()
|
.eq(StringUtils.isNotNull(query.getRecommendStatus()),
|
PromotionWish::getRecommendStatus, query.getRecommendStatus())
|
.in(StringUtils.isNotEmpty(memberIdSet), PromotionWish::getMemberId,
|
memberIdSet).orderByDesc(PromotionWish::getCreateTime).page(page);
|
if (StringUtils.isEmpty(page.getRecords())) {
|
return PageDTO.empty(page);
|
}
|
// 封装VO
|
PageDTO<MgtPromotionWishVO> pageVO = PageDTO.of(page,
|
MgtPromotionWishVO.class);
|
List<MgtPromotionWishVO> MgtPromotionWishVOList = pageVO.getList();
|
Set<Long> memberIdSets = MgtPromotionWishVOList.stream()
|
.map(MgtPromotionWishVO::getMemberId)
|
.collect(Collectors.toSet());
|
if (StringUtils.isNotEmpty(memberIdSets)) {
|
List<Member> data = memberClient.getMemberListByIds(memberIdSets,
|
SecurityConstants.INNER).getData();
|
if (StringUtils.isNotEmpty(data)) {
|
Map<Long, Member> memberMap = data.stream()
|
.collect(Collectors.toMap(Member::getId, member -> member));
|
for (MgtPromotionWishVO mgtPromotionWishVO : MgtPromotionWishVOList) {
|
Member member = memberMap.get(mgtPromotionWishVO.getMemberId());
|
if (StringUtils.isNotNull(member)) {
|
mgtPromotionWishVO.setNickname(member.getNickname());
|
if (StringUtils.isBlank(mgtPromotionWishVO.getPhone())) {
|
mgtPromotionWishVO.setPhone(member.getPhone());
|
}
|
}
|
}
|
}
|
}
|
return pageVO;
|
}
|
/**
|
* 查看详情
|
*
|
* @param id
|
* @return
|
*/
|
@Override
|
public MgtPromotionWishVO getDetails(Long id) {
|
PromotionWish promotionWish = baseMapper.selectById(id);
|
MgtPromotionWishVO mgtPromotionWishVO = BeanUtils.copyBean(promotionWish,
|
MgtPromotionWishVO.class);
|
if (StringUtils.isNotNull(mgtPromotionWishVO)) {
|
//查询用户信息
|
Member member = memberClient.getMembeOne(promotionWish.getMemberId(),
|
SecurityConstants.INNER).getData();
|
if (StringUtils.isNotNull(member)) {
|
mgtPromotionWishVO.setNickname(member.getNickname());
|
if (StringUtils.isBlank(mgtPromotionWishVO.getPhone())) {
|
mgtPromotionWishVO.setPhone(member.getPhone());
|
}
|
}
|
//查询心愿求购商品
|
List<PromotionWishList> wishLists = promotionWishListService.list(
|
Wrappers.lambdaQuery(PromotionWishList.class)
|
.eq(PromotionWishList::getWishId, id));
|
mgtPromotionWishVO.setWishListVOList(BeanUtils.copyList(wishLists,
|
MgtPromotionWishListVO.class));
|
if (promotionWish.getRecommendStatus().equals(DisabledEnum.YES.getCode())) {
|
//查询推荐商品
|
List<PromotionWishRecommend> recommendList = promotionWishRecommendService.list(
|
Wrappers.lambdaQuery(PromotionWishRecommend.class)
|
.eq(PromotionWishRecommend::getWishId, id));
|
if (CollUtils.isNotEmpty(recommendList)) {
|
List<MgtPromotionWishRecommendVO> recommendVOList = BeanUtils.copyToList(
|
recommendList, MgtPromotionWishRecommendVO.class);
|
for (MgtPromotionWishRecommendVO vo : recommendVOList) {
|
MgtPromotionWishRecommendVO result = orderClient.getWishDataBySkuId(vo.getId(),
|
SecurityConstants.INNER).getData();
|
if (StringUtils.isNotNull(result)) {
|
vo.setPurchasedNum(result.getPurchasedNum());
|
vo.setOrderNo(result.getOrderNo());
|
}
|
}
|
mgtPromotionWishVO.setRecommendListVOList(recommendVOList);
|
}
|
}
|
}
|
return mgtPromotionWishVO;
|
}
|
/**
|
* 推荐商品
|
* @param dto
|
* @return
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void recommend(MgtPromotionWishRecommendDTO dto) {
|
PromotionWish promotionWish = baseMapper.selectById(dto.getWishId());
|
if (StringUtils.isNull(promotionWish)) {
|
throw new ServiceException("该心愿求购不存在");
|
}
|
PromotionWishRecommend promotionWishRecommend = BeanUtils.copyBean(dto,
|
PromotionWishRecommend.class);
|
promotionWishRecommendService.save(promotionWishRecommend);
|
promotionWish.setRecommendStatus(DisabledEnum.YES.getCode());
|
baseMapper.updateById(promotionWish);
|
}
|
/**
|
* 删除
|
* @param id
|
* @return
|
*/
|
@Override
|
public void deleteById(Long id) {
|
Long count = promotionWishRecommendService.lambdaQuery()
|
.eq(PromotionWishRecommend::getWishId, id)
|
.eq(PromotionWishRecommend::getPurchaseStatus, DisabledEnum.YES.getCode()).count();
|
if (count > 0) {
|
throw new ServiceException("用户已购买推荐商品,不能删除");
|
}
|
baseMapper.deleteById(id);
|
}
|
/**
|
* 删除推荐商品
|
* @param id
|
* @return
|
*/
|
@Override
|
public void deleteRecommend(Long id) {
|
PromotionWishRecommend promotionWishRecommend = promotionWishRecommendService.getById(id);
|
if (Objects.nonNull(promotionWishRecommend)) {
|
if (promotionWishRecommend.getPurchaseStatus().equals(DisabledEnum.YES.getCode())) {
|
throw new ServiceException("用户已购买推荐商品,不能删除");
|
}
|
baseMapper.deleteById(id);
|
}
|
}
|
/**
|
* 获取首页弹幕数据
|
* @return
|
*/
|
@Override
|
public List<ForepartPromotionWishBulletVO> getBulletList() {
|
List<ForepartPromotionWishBulletVO> bulletList = baseMapper.getBulletList();
|
if (CollUtils.isEmpty(bulletList)) {
|
return bulletList;
|
}
|
List<Long> memberIds = bulletList.stream().map(ForepartPromotionWishBulletVO::getMemberId)
|
.collect(Collectors.toList());
|
List<Member> data = memberClient.getMemberListByIds(memberIds, SecurityConstants.INNER)
|
.getData();
|
if (CollUtils.isNotEmpty(data)) {
|
Map<Long, Member> memberMap = data.stream()
|
.collect(Collectors.toMap(Member::getId, e -> e));
|
bulletList = bulletList.stream().peek(bullet -> {
|
Member member = memberMap.get(bullet.getMemberId());
|
if (StringUtils.isNotNull(member)) {
|
bullet.setNickname(member.getNickname());
|
bullet.setAvatar(member.getAvatar());
|
}
|
}).collect(Collectors.toList());
|
}
|
return bulletList;
|
}
|
/**
|
* 求购历史-达成心愿数
|
* @return
|
*/
|
@Override
|
public Long getCompletedWishCount() {
|
return baseMapper.getCompletedWishCount();
|
}
|
|
/**
|
* 获取弹窗信息
|
* @return
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public ForepartPopupVO getPopup() {
|
// 获取当前登录用户
|
Member member = getCurrentMember();
|
ForepartPopupVO forepartPopupVO = new ForepartPopupVO();
|
if (StringUtils.isNotNull(member)) {
|
// 查询用户心愿求购
|
List<PromotionWish> wishList = this.lambdaQuery()
|
.eq(PromotionWish::getMemberId, member.getId())
|
.eq(PromotionWish::getRecommendStatus, DisabledEnum.YES.getCode())
|
.eq(PromotionWish::getFirstEnterFlag, DisabledEnum.NO.getCode())
|
.list();
|
// 默认不显示弹窗
|
forepartPopupVO.setShowPopup(DisabledEnum.NO.getCode());
|
// 查询推荐商品列表
|
List<ForepartPromotionWishRecommendVO> recommendList = baseMapper.getRecommendList(
|
member.getId());
|
forepartPopupVO.setRecommendList(recommendList);
|
if (CollUtils.isNotEmpty(wishList)) {
|
//已推荐,且未查看
|
forepartPopupVO.setPopupType(1);
|
forepartPopupVO.setShowPopup(DisabledEnum.YES.getCode());
|
// 查询未推荐心愿数量
|
long wishNum = this.lambdaQuery()
|
.eq(PromotionWish::getMemberId, member.getId())
|
.eq(PromotionWish::getRecommendStatus, DisabledEnum.NO.getCode())
|
.count();
|
forepartPopupVO.setWishNum((int) wishNum);
|
// 心愿达成:更新首次进入标志
|
this.lambdaUpdate()
|
.eq(PromotionWish::getMemberId, member.getId())
|
.eq(PromotionWish::getRecommendStatus, DisabledEnum.YES.getCode())
|
.set(PromotionWish::getFirstEnterFlag, DisabledEnum.YES.getCode())
|
.update();
|
}else {
|
//心愿进行中
|
List<PromotionWish> promotionWisheList = baseMapper.selectNotRecommend(member.getId());
|
forepartPopupVO.setWishNum(promotionWisheList.size());
|
if (CollUtils.isNotEmpty(promotionWisheList)) {
|
forepartPopupVO.setShowPopup(DisabledEnum.YES.getCode());
|
forepartPopupVO.setPopupType(2);
|
//更新上次弹窗时间
|
promotionWisheList.forEach(wish -> wish.setLastPromptDate(LocalDate.now()));
|
updateBatchById(promotionWisheList);
|
}
|
}
|
}
|
return forepartPopupVO;
|
}
|
|
/**
|
* 获取当前登录用户
|
* @return
|
*/
|
private Member getCurrentMember() {
|
Long userId = SecurityUtils.getUserId();
|
return memberClient.getMemberByUserId(userId, SecurityConstants.INNER).getData();
|
}
|
|
/**
|
* 求购历史
|
* @param basePage
|
* @return
|
*/
|
@Override
|
public PageDTO<ForepartPromotionWishVO> getWishHistory(BasePage basePage) {
|
Member currentMember = getCurrentMember();
|
if (StringUtils.isNotNull(currentMember)) {
|
Page<ForepartPromotionWishVO> page = baseMapper.getWishHistory(new Page<>(basePage.getPageCurr(),basePage.getPageSize()), currentMember.getId());
|
return PageDTO.of(page);
|
}
|
return null;
|
}
|
|
/**
|
* 发布求购
|
* @param dto
|
* @return
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Long publish(ForepartPromotionWishDTO dto) {
|
//当前用户
|
Member currentMember = getCurrentMember();
|
PromotionWish promotionWish = BeanUtils.copyBean(dto, PromotionWish.class);
|
promotionWish.setMemberId(currentMember.getId());
|
baseMapper.insert(promotionWish);
|
// 保存商品列表
|
List<ForepartPromotionWishListDTO> wishList = dto.getWishList();
|
List<PromotionWishList> promotionWishLists = BeanUtils.copyToList(wishList,
|
PromotionWishList.class);
|
promotionWishLists.forEach(promotionWishList -> promotionWishList.setWishId(promotionWish.getId()));
|
promotionWishListService.saveBatch(promotionWishLists);
|
return promotionWish.getId();
|
}
|
/**
|
* 心愿求购详情
|
* @param id
|
* @return
|
*/
|
@Override
|
public ForepartPromotionWishVO getPromotionWishDetails(Long id) {
|
PromotionWish promotionWish = this.getById(id);
|
ForepartPromotionWishVO vo = null;
|
if (StringUtils.isNotNull(promotionWish)) {
|
vo = BeanUtils.copyBean(promotionWish, ForepartPromotionWishVO.class);
|
//查询心愿求购商品列表
|
List<PromotionWishList> wishList = promotionWishListService.lambdaQuery()
|
.eq(PromotionWishList::getWishId, promotionWish.getId()).list();
|
vo.setWishList(BeanUtils.copyList(wishList, ForepartPromotionWishListVO.class));
|
|
// 查询推荐商品列表
|
List<PromotionWishRecommend> list = promotionWishRecommendService.lambdaQuery()
|
.eq(PromotionWishRecommend::getWishId, promotionWish.getId()).list();
|
vo.setRecommendList(BeanUtils.copyList(list, ForepartPromotionWishRecommendVO.class));
|
}
|
return vo;
|
}
|
}
|