From 11fa4b3bcdda902de8d9818038a1bd35beaa5ec4 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期一, 04 十一月 2024 09:14:38 +0800 Subject: [PATCH] 09.25心愿求购新增 --- ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/mapper/PromotionWishMapper.java | 60 ++++ ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishRecommendService.java | 29 + ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/PromotionWishMapper.xml | 115 +++++++ ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/PromotionWish.java | 76 +++++ ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/mapper/PromotionWishRecommendMapper.java | 23 + ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishServiceImpl.java | 397 ++++++++++++++++++++++++++ ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishRecommendServiceImpl.java | 43 ++ ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishService.java | 97 ++++++ ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/PromotionWishRecommendMapper.xml | 26 + 9 files changed, 866 insertions(+), 0 deletions(-) diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/PromotionWish.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/PromotionWish.java new file mode 100644 index 0000000..74b26b4 --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/PromotionWish.java @@ -0,0 +1,76 @@ +package com.ruoyi.promotion.domain; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * <p> + * 心愿求购 + * </p> + * + * @author mitao + * @since 2024-10-29 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("t_promotion_wish") +@ApiModel(value="PromotionWish对象", description="心愿求购") +public class PromotionWish implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键id") + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + @ApiModelProperty(value = "用户id") + private Long memberId; + + @ApiModelProperty(value = "联系方式") + private String phone; + + @ApiModelProperty(value = "推荐状态 0:未推荐商品 1:已推荐商品") + private Integer recommendStatus; + + @ApiModelProperty(value = "首次进入标志 0:未查看 1:已查看") + private Integer firstEnterFlag; + + @ApiModelProperty(value = "上次弹窗时间") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate lastPromptDate; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "创建者") + private String createBy; + + @ApiModelProperty(value = "创建时间") + @TableField(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + @ApiModelProperty(value = "更新者") + private String updateBy; + + @ApiModelProperty(value = "更新时间") + @TableField(fill = FieldFill.INSERT_UPDATE) + private LocalDateTime updateTime; + + @ApiModelProperty(value = "删除标志(0代表存在 1代表删除)") + private Integer delFlag; + + +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/mapper/PromotionWishMapper.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/mapper/PromotionWishMapper.java new file mode 100644 index 0000000..2fb5589 --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/mapper/PromotionWishMapper.java @@ -0,0 +1,60 @@ +package com.ruoyi.promotion.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishBulletVO; +import com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishRecommendVO; +import com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishVO; +import com.ruoyi.promotion.domain.PromotionWish; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +/** + * <p> + * 心愿求购 Mapper 接口 + * </p> + * + * @author mitao + * @since 2024-10-29 + */ +public interface PromotionWishMapper extends BaseMapper<PromotionWish> { + /** + * 个人中心-获取推荐商品可购买数 + * @return + */ + Integer getRecommendNum(Long memberId); + /** + * 获取首页弹幕数据 + * @return + */ + List<ForepartPromotionWishBulletVO> getBulletList(); + + /** + * 获取推荐商品列表 + * @param memberId + * @return + */ + List<ForepartPromotionWishRecommendVO> getRecommendList(Long memberId); + + /** + * 获取未推荐的心愿求购数量 + * @param memberId + * @return + */ + List<PromotionWish> selectNotRecommend(Long memberId); + + /** + * 心愿求购历史列表 + * @param page + * @param memberId + * @return + */ + Page<ForepartPromotionWishVO> getWishHistory(Page<ForepartPromotionWishVO> page, + @Param("memberId") Long memberId); + + /** + * 求购历史-达成心愿数 + * @return + */ + Long getCompletedWishCount(); +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/mapper/PromotionWishRecommendMapper.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/mapper/PromotionWishRecommendMapper.java new file mode 100644 index 0000000..3155bea --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/mapper/PromotionWishRecommendMapper.java @@ -0,0 +1,23 @@ +package com.ruoyi.promotion.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.api.domain.PromotionWishRecommend; +import org.apache.ibatis.annotations.Param; + +/** + * <p> + * 心愿求购平台推荐商品 Mapper 接口 + * </p> + * + * @author mitao + * @since 2024-10-29 + */ +public interface PromotionWishRecommendMapper extends BaseMapper<PromotionWishRecommend> { + /** + * 扣减推荐商品库存 + * @param goodsQuantity + * @param id + * @return + */ + Integer subRecommendAvailableNum(@Param("goodsQuantity") Integer goodsQuantity, @Param("id")Long id); +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishRecommendService.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishRecommendService.java new file mode 100644 index 0000000..0261b94 --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishRecommendService.java @@ -0,0 +1,29 @@ +package com.ruoyi.promotion.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.system.api.domain.PromotionWishRecommend; + +/** + * <p> + * 心愿求购平台推荐商品 服务类 + * </p> + * + * @author mitao + * @since 2024-10-29 + */ +public interface IPromotionWishRecommendService extends IService<PromotionWishRecommend> { + /** + * 扣减推荐商品库存 + * @param goodsQuantity + * @param id + * @return + */ + Integer subRecommendAvailableNum(Integer goodsQuantity, Long id); + /** + * 恢复荐商品可购数量 + * @param goodsQuantity + * @param id + * @return + */ + void addRecommendAvailableNum(Integer goodsQuantity, Long id); +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishService.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishService.java new file mode 100644 index 0000000..648de8b --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishService.java @@ -0,0 +1,97 @@ +package com.ruoyi.promotion.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.utils.page.PageDTO; +import com.ruoyi.common.core.web.page.BasePage; +import com.ruoyi.promotion.controller.forepart.dto.ForepartPromotionWishDTO; +import com.ruoyi.promotion.controller.forepart.vo.ForepartPopupVO; +import com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishBulletVO; +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.MgtPromotionWishVO; +import com.ruoyi.promotion.domain.PromotionWish; +import java.util.List; + +/** + * <p> + * 心愿求购 服务类 + * </p> + * + * @author mitao + * @since 2024-10-29 + */ +public interface IPromotionWishService extends IService<PromotionWish> { + + /** + * 个人中心-获取推荐商品可购买数 + * @return + */ + Integer getRecommendNum(); + /** + * 获取心愿求购列表 + * + * @param query + * @return + */ + PageDTO<MgtPromotionWishVO> queryPage(MgtPromotionWishQuery query); + /** + * 查看详情 + * + * @param id + * @return + */ + MgtPromotionWishVO getDetails(Long id); + /** + * 推荐商品 + * @param dto + * @return + */ + void recommend(MgtPromotionWishRecommendDTO dto); + /** + * 删除 + * @param id + * @return + */ + void deleteById(Long id); + /** + * 删除推荐商品 + * @param id + * @return + */ + void deleteRecommend(Long id); + /** + * 获取首页弹幕数据 + * @return + */ + List<ForepartPromotionWishBulletVO> getBulletList(); + /** + * 求购历史-达成心愿数 + * @return + */ + Long getCompletedWishCount(); + /** + * 获取弹窗信息 + * @return + */ + ForepartPopupVO getPopup(); + /** + * 求购历史 + * @param page + * @return + */ + PageDTO<ForepartPromotionWishVO> getWishHistory(BasePage page); + /** + * 发布求购 + * @param dto + * @return + */ + Long publish(ForepartPromotionWishDTO dto); + /** + * 心愿求购详情 + * @param id + * @return + */ + ForepartPromotionWishVO getPromotionWishDetails(Long id); + +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishRecommendServiceImpl.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishRecommendServiceImpl.java new file mode 100644 index 0000000..822ec1f --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishRecommendServiceImpl.java @@ -0,0 +1,43 @@ +package com.ruoyi.promotion.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.promotion.mapper.PromotionWishRecommendMapper; +import com.ruoyi.promotion.service.IPromotionWishRecommendService; +import com.ruoyi.system.api.domain.PromotionWishRecommend; +import org.springframework.stereotype.Service; + +/** + * <p> + * 心愿求购平台推荐商品 服务实现类 + * </p> + * + * @author mitao + * @since 2024-10-29 + */ +@Service +public class PromotionWishRecommendServiceImpl extends + ServiceImpl<PromotionWishRecommendMapper, PromotionWishRecommend> implements + IPromotionWishRecommendService { + /** + * 扣减推荐商品库存 + * @param goodsQuantity + * @param id + * @return + */ + @Override + public Integer subRecommendAvailableNum(Integer goodsQuantity, Long id) { + return baseMapper.subRecommendAvailableNum(goodsQuantity, id); + } + /** + * 恢复荐商品可购数量 + * @param goodsQuantity + * @param id + * @return + */ + @Override + public void addRecommendAvailableNum(Integer goodsQuantity, Long id) { + this.lambdaUpdate() + .setSql("available_num = available_num +" + goodsQuantity) + .eq(PromotionWishRecommend::getId, id).update(); + } +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishServiceImpl.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishServiceImpl.java new file mode 100644 index 0000000..f129003 --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishServiceImpl.java @@ -0,0 +1,397 @@ +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; + } +} diff --git a/ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/PromotionWishMapper.xml b/ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/PromotionWishMapper.xml new file mode 100644 index 0000000..26df359 --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/PromotionWishMapper.xml @@ -0,0 +1,115 @@ +<?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.ruoyi.promotion.mapper.PromotionWishMapper"> + + <!-- 通用查询映射结果 --> + <resultMap id="BaseResultMap" type="com.ruoyi.promotion.domain.PromotionWish"> + <id column="id" property="id" /> + <result column="member_id" property="memberId" /> + <result column="phone" property="phone" /> + <result column="recommend_status" property="recommendStatus" /> + <result column="remark" property="remark" /> + <result column="create_by" property="createBy" /> + <result column="create_time" property="createTime" /> + <result column="update_by" property="updateBy" /> + <result column="update_time" property="updateTime" /> + <result column="del_flag" property="delFlag" /> + </resultMap> + + <resultMap id="WishResultMap" type="com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishVO"> + <id column="id" property="id" /> + <result column="member_id" property="memberId" /> + <result column="phone" property="phone" /> + <result column="recommend_status" property="recommendStatus" /> + <result column="goodsName" property="goodsName" /> + <result column="create_time" property="createTime" /> + <collection property="recommendList" javaType="java.util.List" resultMap="RecommendResultMap"/> + </resultMap> + + <resultMap id="RecommendResultMap" type="com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishRecommendVO"> + <id column="recommendId" property="id" /> + <result column="recommendGoodsName" property="goodsName" /> + <result column="selling_price" property="sellingPrice" /> + <result column="available_num" property="availableNum" /> + <result column="goods_image_url" property="goodsImageUrl" /> + <result column="expire_time" property="expireTime" /> + </resultMap> + + <select id="getBulletList" + resultType="com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishBulletVO"> + SELECT tpw.member_id, tpw.create_time, tpwl.expected_year, tpwl.goods_name + FROM t_promotion_wish tpw + INNER JOIN t_promotion_wish_list tpwl ON tpw.id = tpwl.wish_id + <where> + tpw.del_flag = 0 AND tpw.recommend_status = 1 + </where> + GROUP BY tpwl.wish_id,tpw.member_id + </select> + <select id="getRecommendList" + resultType="com.ruoyi.promotion.controller.forepart.vo.ForepartPromotionWishRecommendVO" + parameterType="java.lang.Long"> + SELECT + r.id, r.goods_name, r.selling_price, r.available_num, r.goods_image_url,r.expire_time + FROM + t_promotion_wish w + LEFT JOIN + t_promotion_wish_recommend r ON w.id = r.wish_id + <where> + w.del_flag = 0 + AND w.member_id = #{memberId} + AND w.recommend_status = 1 + AND r.purchase_status = 0 + AND r.expire_time > NOW(); + </where> + </select> + <select id="selectNotRecommend" resultType="com.ruoyi.promotion.domain.PromotionWish" + parameterType="java.lang.Long"> + SELECT + * + FROM + t_promotion_wish + <where> + del_flag = 0 + AND member_id = #{memberId} + AND recommend_status = 0 + AND (last_prompt_date IS NULL OR last_prompt_date < CURDATE()); + </where> + </select> + <select id="getWishHistory" resultMap="WishResultMap"> + SELECT tpw.id, + tpw.member_id, + tpw.phone, + tpw.recommend_status, + tpw.create_time, + GROUP_CONCAT(tpwl.goods_name) AS goodsName, + tpwr.id AS recommendId, + tpwr.goods_name AS recommendGoodsName, + tpwr.selling_price, + tpwr.available_num, + tpwr.goods_image_url, + tpwr.expire_time + FROM t_promotion_wish tpw + LEFT JOIN t_promotion_wish_list tpwl ON tpw.id = tpwl.wish_id + LEFT JOIN t_promotion_wish_recommend tpwr ON tpwr.wish_id = tpw.id + <where> + tpw.del_flag = 0 AND tpw.member_id = #{memberId} + </where> + GROUP BY tpw.id + </select> + <select id="getRecommendNum" resultType="java.lang.Integer" + parameterType="java.lang.Long"> + SELECT COALESCE(SUM(tpwr.available_num), 0) + FROM t_promotion_wish tpw + LEFT JOIN t_promotion_wish_recommend tpwr ON tpwr.wish_id = tpw.id + <where> + tpw.del_flag = 0 + AND tpwr.expire_time >= NOW() + AND tpw.member_id = #{memberId} + </where> + </select> + <select id="getCompletedWishCount" resultType="java.lang.Long"> + SELECT COUNT(id) + FROM t_promotion_wish + </select> + +</mapper> diff --git a/ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/PromotionWishRecommendMapper.xml b/ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/PromotionWishRecommendMapper.xml new file mode 100644 index 0000000..9dc5305 --- /dev/null +++ b/ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/PromotionWishRecommendMapper.xml @@ -0,0 +1,26 @@ +<?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.ruoyi.promotion.mapper.PromotionWishRecommendMapper"> + + <!-- 通用查询映射结果 --> + <resultMap id="BaseResultMap" type="com.ruoyi.system.api.domain.PromotionWishRecommend"> + <id column="id" property="id" /> + <result column="wish_id" property="wishId" /> + <result column="goods_name" property="goodsName" /> + <result column="selling_price" property="sellingPrice" /> + <result column="available_num" property="availableNum" /> + <result column="goods_image_url" property="goodsImageUrl" /> + <result column="expire_time" property="expireTime" /> + <result column="purchase_status" property="purchaseStatus" /> + <result column="create_by" property="createBy" /> + <result column="create_time" property="createTime" /> + <result column="update_by" property="updateBy" /> + <result column="update_time" property="updateTime" /> + <result column="del_flag" property="delFlag" /> + </resultMap> + <update id="subRecommendAvailableNum"> + UPDATE t_promotion_wish_recommend SET available_num = available_num - #{goodsQuantity} + WHERE id = #{id} AND available_num >= #{goodsQuantity} + </update> + +</mapper> -- Gitblit v1.7.1