jiangqs
2023-07-07 5627daeb1ac1a29947e902f9a7efb6730ed98611
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/birthday/BirthdayCardServiceImpl.java
@@ -2,26 +2,30 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.member.domain.dto.MerBirthdayEditDto;
import com.ruoyi.member.domain.dto.MgtBirthdayEditDto;
import com.ruoyi.member.domain.dto.MgtBirthdayGetDto;
import com.ruoyi.member.domain.dto.MgtBirthdayGiftDto;
import com.ruoyi.member.domain.pojo.birthday.BirthdayCard;
import com.ruoyi.member.domain.pojo.birthday.BirthdayGift;
import com.ruoyi.member.domain.vo.MerBirthdayEditInfoVo;
import com.ruoyi.member.domain.vo.MerBirthdayGetVo;
import com.ruoyi.member.domain.vo.MgtBirthdayGetVo;
import com.ruoyi.member.domain.vo.MgtBirthdayGiftVo;
import com.ruoyi.member.domain.pojo.member.MemberGiftRecord;
import com.ruoyi.member.domain.vo.*;
import com.ruoyi.member.mapper.birthday.BirthdayCardMapper;
import com.ruoyi.member.service.birthday.BirthdayCardService;
import com.ruoyi.member.service.birthday.BirthdayGiftService;
import com.ruoyi.member.service.member.MemberGiftRecordService;
import com.ruoyi.system.api.domain.dto.BirthdayGiftSendDto;
import com.ruoyi.system.api.service.RemoteCouponService;
import com.ruoyi.system.api.service.RemoteOrderService;
import com.ruoyi.system.api.service.RemoteShopService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.StringJoiner;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
/**
 * <p>
@@ -39,6 +43,18 @@
    @Resource
    private BirthdayGiftService birthdayGiftService;
    @Resource
    private RemoteShopService remoteShopService;
    @Resource
    private MemberGiftRecordService memberGiftRecordService;
    @Resource
    private RemoteCouponService remoteCouponService;
    @Resource
    private RemoteOrderService remoteOrderService;
    /**
     * @description  平台编辑生日卡
@@ -394,4 +410,212 @@
        birthdayCard.setCardStatus(merBirthdayEditDto.getCardStatus());
        this.saveOrUpdate(birthdayCard);
    }
    /**
     * @description 获取用户生日礼物
     * @author  jqs
     * @date    2023/7/7 10:55
     * @param shopId
     * @return  AppBirthdayCardVo
     */
    @Override
    public AppBirthdayCardVo getUserBirthdayCard(Long userId,Long shopId){
        AppBirthdayCardVo appBirthdayCardVo = new AppBirthdayCardVo();
        String currentYear = String.valueOf(LocalDate.now().getYear());
        List<MemberGiftRecord> memberGiftRecordList = memberGiftRecordService.listByUserIdAndYear(userId,currentYear);
        if(memberGiftRecordList!=null&&!memberGiftRecordList.isEmpty()){
            List<AppBirthdayGiftVo> birthdayGiftVoList = memberGiftRecordList.stream().map(
                    memberGiftRecord -> {
                        AppBirthdayGiftVo appBirthdayGiftVo = new AppBirthdayGiftVo();
                        switch (memberGiftRecord.getGiftType()) {
                            case 1:
                                // 礼物类型为1,即优惠券
                                appBirthdayGiftVo.setGiftName(memberGiftRecord.getCouponName());
                                appBirthdayGiftVo.setGiftNumber(memberGiftRecord.getCouponNumber());
                                break;
                            case 2:
                                // 礼物类型为2,即商品
                                appBirthdayGiftVo.setGiftName(memberGiftRecord.getGoodsName());
                                appBirthdayGiftVo.setGiftNumber(memberGiftRecord.getGoodsNumber());
                                break;
                            case 3:
                                // 礼物类型为3,即现金
                                appBirthdayGiftVo.setGiftName("现金");
                                appBirthdayGiftVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
                                break;
                            case 4:
                                // 礼物类型为4,即礼品
                                appBirthdayGiftVo.setGiftName(memberGiftRecord.getCouponName());
                                appBirthdayGiftVo.setGiftNumber(memberGiftRecord.getCouponNumber());
                                break;
                            default:
                                break;
                        }
                        return appBirthdayGiftVo;
                    }
            ).collect(Collectors.toList());
            appBirthdayCardVo.setGetGiftFlag(1);
            appBirthdayCardVo.setBirthdayGiftVoList(birthdayGiftVoList);
        }else{
            appBirthdayCardVo.setGetGiftFlag(0);
        }
        return appBirthdayCardVo;
    }
    /**
     * @description  获取用户生日礼物
     * @author  jqs
     * @date    2023/7/7 10:55
     * @param shopId
     * @return  AppBirthdayCardVo
     */
    @Override
    public AppBirthdayCardVo getBirthdayGift(Long userId, Long shopId){
        AppBirthdayCardVo appBirthdayCardVo = new AppBirthdayCardVo();
        List<AppBirthdayGiftVo> birthdayGiftVoList = new ArrayList<>();
        List<MemberGiftRecord> memberGiftRecordList = new ArrayList<>();
        List<BirthdayGiftSendDto> sendGoodsList = new ArrayList<>();
        List<BirthdayGiftSendDto> sendCouponList = new ArrayList<>();
        AppBirthdayGiftVo appBirthdayGiftVo;
        MemberGiftRecord memberGiftRecord;
        BigDecimal winningProbability;
        BigDecimal randomProbability;
        BirthdayGiftSendDto birthdayGiftSendDto;
        String currentYear = String.valueOf(LocalDate.now().getYear());
        // 获取平台生日卡信息
        BirthdayCard plBirthdayCard = birthdayCardMapper.getPlatformBirthdayCard(shopId);
        // 如果生日卡存在
        if (plBirthdayCard != null && plBirthdayCard.getCardStatus()==1) {
            // 获取生日卡对应的生日礼物列表
            List<BirthdayGift> birthdayGiftList = birthdayGiftService.listByCardId(plBirthdayCard.getCardId());
            if(!birthdayGiftList.isEmpty()){
                // 遍历生日礼物列表
                for (BirthdayGift birthdayGift : birthdayGiftList) {
                    winningProbability = birthdayGift.getWinningProbability();
                    randomProbability = new BigDecimal(new Random().nextInt(100));
                    if(winningProbability.compareTo(randomProbability)>0){
                        appBirthdayGiftVo = new AppBirthdayGiftVo();
                        memberGiftRecord = new MemberGiftRecord();
                        birthdayGiftSendDto = new BirthdayGiftSendDto();
                        BeanUtils.copyProperties(birthdayGift, memberGiftRecord);
                        memberGiftRecord.setGiftFrom(1);
                        memberGiftRecord.setGiftYear(currentYear);
                        memberGiftRecord.setCreateTime(new Date());
                        memberGiftRecord.setUserId(userId);
                        birthdayGiftSendDto.setUserId(userId);
                        birthdayGiftSendDto.setGiftFrom(1);
                        birthdayGiftSendDto.setGiftType(birthdayGift.getGiftType());
                        switch (birthdayGift.getGiftType()) {
                            case 1:
                                // 礼物类型为1,即优惠券
                                appBirthdayGiftVo.setGiftName(birthdayGift.getCouponName());
                                appBirthdayGiftVo.setGiftNumber(birthdayGift.getCouponNumber());
                                birthdayGiftSendDto.setCouponId(birthdayGift.getCouponId());
                                birthdayGiftSendDto.setCouponNumber(birthdayGift.getCouponNumber());
                                sendGoodsList.add(birthdayGiftSendDto);
                                break;
                            case 2:
                                // 礼物类型为2,即商品
                                appBirthdayGiftVo.setGiftName(birthdayGift.getGoodsName());
                                appBirthdayGiftVo.setGiftNumber(birthdayGift.getGoodsNumber());
                                birthdayGiftSendDto.setGoodsId(birthdayGift.getGoodsId());
                                birthdayGiftSendDto.setCouponNumber(birthdayGift.getGoodsNumber());
                                sendCouponList.add(birthdayGiftSendDto);
                                break;
                            case 3:
                                // 礼物类型为3,即现金
                                appBirthdayGiftVo.setGiftName("现金");
                                appBirthdayGiftVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
                                break;
                            case 4:
                                // 礼物类型为4,即礼品
                                appBirthdayGiftVo.setGiftName(birthdayGift.getCouponName());
                                appBirthdayGiftVo.setGiftNumber(birthdayGift.getCouponNumber());
                                break;
                            default:
                                break;
                        }
                        birthdayGiftVoList.add(appBirthdayGiftVo);
                        memberGiftRecordList.add(memberGiftRecord);
                    }
                }
            }
        }
        //获取商户营销开关状态
        Integer marketingStatus = remoteShopService.getShopMarketingStatus(shopId).getData();
        if(marketingStatus>1){
            //获取商户生日卡
            LambdaQueryWrapper<BirthdayCard> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(BirthdayCard::getDelFlag,0);
            queryWrapper.eq(BirthdayCard::getShopId,shopId);
            BirthdayCard shopBirthdayCard = this.getOne(queryWrapper,false);
            // 如果生日卡存在
            if (shopBirthdayCard != null && shopBirthdayCard.getCardStatus()==1) {
                // 获取生日卡对应的生日礼物列表
                List<BirthdayGift> birthdayGiftList = birthdayGiftService.listByCardId(shopBirthdayCard.getCardId());
                if(!birthdayGiftList.isEmpty()){
                    // 遍历生日礼物列表
                    for (BirthdayGift birthdayGift : birthdayGiftList) {
                        winningProbability = birthdayGift.getWinningProbability();
                        randomProbability = new BigDecimal(new Random().nextInt(100));
                        if(winningProbability.compareTo(randomProbability)>0){
                            appBirthdayGiftVo = new AppBirthdayGiftVo();
                            memberGiftRecord = new MemberGiftRecord();
                            birthdayGiftSendDto = new BirthdayGiftSendDto();
                            BeanUtils.copyProperties(birthdayGift, memberGiftRecord);
                            memberGiftRecord.setGiftFrom(2);
                            memberGiftRecord.setShopId(shopId);
                            memberGiftRecord.setGiftYear(currentYear);
                            memberGiftRecord.setCreateTime(new Date());
                            memberGiftRecord.setUserId(userId);
                            birthdayGiftSendDto.setUserId(userId);
                            birthdayGiftSendDto.setGiftFrom(2);
                            birthdayGiftSendDto.setShopId(shopId);
                            birthdayGiftSendDto.setGiftType(birthdayGift.getGiftType());
                            switch (birthdayGift.getGiftType()) {
                                case 1:
                                    // 礼物类型为1,即优惠券
                                    appBirthdayGiftVo.setGiftName(birthdayGift.getCouponName());
                                    appBirthdayGiftVo.setGiftNumber(birthdayGift.getCouponNumber());
                                    birthdayGiftSendDto.setCouponId(birthdayGift.getCouponId());
                                    birthdayGiftSendDto.setCouponNumber(birthdayGift.getCouponNumber());
                                    sendGoodsList.add(birthdayGiftSendDto);
                                    break;
                                case 2:
                                    // 礼物类型为2,即商品
                                    appBirthdayGiftVo.setGiftName(birthdayGift.getGoodsName());
                                    appBirthdayGiftVo.setGiftNumber(birthdayGift.getGoodsNumber());
                                    birthdayGiftSendDto.setGoodsId(birthdayGift.getGoodsId());
                                    birthdayGiftSendDto.setCouponNumber(birthdayGift.getGoodsNumber());
                                    sendCouponList.add(birthdayGiftSendDto);
                                    break;
                                case 3:
                                    // 礼物类型为3,即现金
                                    appBirthdayGiftVo.setGiftName("现金");
                                    appBirthdayGiftVo.setGiftNumber(memberGiftRecord.getMoney().doubleValue());
                                    break;
                                case 4:
                                    // 礼物类型为4,即礼品
                                    appBirthdayGiftVo.setGiftName(birthdayGift.getCouponName());
                                    appBirthdayGiftVo.setGiftNumber(birthdayGift.getCouponNumber());
                                    break;
                                default:
                                    break;
                            }
                            birthdayGiftVoList.add(appBirthdayGiftVo);
                            memberGiftRecordList.add(memberGiftRecord);
                        }
                    }
                }
            }
        }
        //发放奖品
        remoteOrderService.sendGoodsGift(sendGoodsList);
        remoteCouponService.sendCouponGift(sendCouponList);
        //保存用户礼物记录
        memberGiftRecordService.saveBatch(memberGiftRecordList);
        appBirthdayCardVo.setBirthdayGiftVoList(birthdayGiftVoList);
        return appBirthdayCardVo;
    }
}