ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/domain/PromotionWish.java
New file @@ -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; } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/mapper/PromotionWishMapper.java
New file @@ -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(); } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/mapper/PromotionWishRecommendMapper.java
New file @@ -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); } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishRecommendService.java
New file @@ -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); } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/IPromotionWishService.java
New file @@ -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); } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishRecommendServiceImpl.java
New file @@ -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(); } } ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/PromotionWishServiceImpl.java
New file @@ -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; } } ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/PromotionWishMapper.xml
New file @@ -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> ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/PromotionWishRecommendMapper.xml
New file @@ -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>