Pu Zhibing
4 天以前 d6a0c57043e8cc20694a3c678bf8e3a8f28f6499
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java
@@ -10,22 +10,27 @@
import com.ruoyi.goods.api.domain.LotteryEvent;
import com.ruoyi.goods.api.domain.LotteryEventPrize;
import com.ruoyi.goods.api.domain.UserLotteryEvent;
import com.ruoyi.goods.api.domain.UserLotteryEventQuestions;
import com.ruoyi.goods.domain.vo.AppLotteryEventPageVo;
import com.ruoyi.goods.domain.vo.LotteryEventVo;
import com.ruoyi.goods.domain.vo.UserLotteryEventVo;
import com.ruoyi.goods.mapper.lottery.LotteryEventMapper;
import com.ruoyi.goods.service.lottery.ILotteryEventPrizeService;
import com.ruoyi.goods.service.lottery.ILotteryEventService;
import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsAnswersService;
import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsService;
import com.ruoyi.goods.service.lottery.IUserLotteryEventService;
import com.ruoyi.system.api.domain.poji.member.Member;
import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord;
import com.ruoyi.system.api.domain.poji.shop.Shop;
import com.ruoyi.system.api.service.RemoteCouponService;
import com.ruoyi.system.api.service.RemoteMemberService;
import com.ruoyi.system.api.service.RemoteShopService;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.concurrent.TimeUnit;
@@ -54,7 +59,10 @@
   private RedissonClient redissonClient;
   
   @Resource
   private IUserLotteryEventQuestionsAnswersService userLotteryEventQuestionsService;
   private IUserLotteryEventQuestionsService userLotteryEventQuestionsAnswersService;
   @Resource
   private RemoteShopService remoteShopService;
   
   
   /**
@@ -65,6 +73,7 @@
    */
   @Override
   public LotteryEventVo getLotteryEvent(String id) {
      Long userId = SecurityUtils.getUserId();
      LotteryEvent lotteryEvent = this.getById(id);
      //构建返回结果
      LotteryEventVo vo = new LotteryEventVo();
@@ -76,14 +85,30 @@
      //查询抽检活动奖品
      List<LotteryEventPrize> lotteryEventPrizeList = lotteryEventPrizeService.list(new QueryWrapper<LotteryEventPrize>().eq("lottery_event_id", id));
      vo.setPrizeList(lotteryEventPrizeList);
      //答题正确率
      if (5 == lotteryEvent.getActivityType()) {
         UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsAnswersService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", id).eq("user_id", userId));
         if (null == questionsServiceOne) {
            vo.setCorrectAnswerRate(questionsServiceOne.getCorrectAnswerRate());
         }
      }
      //构建我的奖品明细
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
      List<UserLotteryEventVo> collect = userLotteryEvents.stream().map(s -> {
         UserLotteryEventVo userLotteryEventVo = new UserLotteryEventVo();
         userLotteryEventVo.setName(s.getObjectName());
         userLotteryEventVo.setPrizeType(s.getPrizeType());
         userLotteryEventVo.setNumber(s.getNumber());
         userLotteryEventVo.setVerifyCode(s.getVerifyCode());
         MemberGiftRecord memberGiftRecord = remoteMemberService.getVerifyPrizeByGiftId(s.getId()).getData();
         userLotteryEventVo.setVerifyCode("3-" + memberGiftRecord.getPrizeId());
         userLotteryEventVo.setIsVerify(1 == memberGiftRecord.getVerifyStatus() ? 0 : 1);
         userLotteryEventVo.setVerifyTime(null == memberGiftRecord.getVerifyTime() ? "" : sdf.format(memberGiftRecord.getVerifyTime()));
         Member member = remoteMemberService.getMember(userId).getData();
         userLotteryEventVo.setVerifyShop("全部门店");
         if (null != member && null != member.getRelationShopId()) {
            Shop shop = remoteShopService.getShop(member.getRelationShopId()).getData();
            userLotteryEventVo.setVerifyShop(shop.getShopName());
         }
         return userLotteryEventVo;
      }).collect(Collectors.toList());
      vo.setYourPrizeList(collect);
@@ -100,11 +125,12 @@
   @Override
   public R lotteryDraw(String id) {
      Long userId = SecurityUtils.getUserId();
      Member member = remoteMemberService.getMember(userId).getData();
      LotteryEvent lotteryEvent = this.getById(id);
      //判断答题抽奖是否满足抽奖条件
      if (lotteryEvent.getActivityType() == 5) {
         BigDecimal correctAnswerRate = userLotteryEventQuestionsService.getCorrectAnswerRate(userId, id);
         if (correctAnswerRate.compareTo(lotteryEvent.getAccuracy()) < 0) {
         UserLotteryEventQuestions questionsServiceOne = userLotteryEventQuestionsAnswersService.getOne(new QueryWrapper<UserLotteryEventQuestions>().eq("lottery_event_id", id).eq("user_id", userId));
         if (questionsServiceOne.getCorrectAnswerRate().compareTo(lotteryEvent.getAccuracy()) < 0) {
            return R.fail("答题抽奖失败,答题正确率低于活动要求");
         }
      }
@@ -145,11 +171,6 @@
            userLotteryEvent.setObjectId(lotteryEventPrize.getObjectId());
            userLotteryEvent.setObjectName(lotteryEventPrize.getObjectName());
            userLotteryEvent.setNumber(lotteryEventPrize.getNumber());
            //商品需要生成核销码和核销状态
            if (Arrays.asList(2, 3).contains(lotteryEventPrize.getPrizeType())) {
               userLotteryEvent.setVerifyCode(IdUtils.simpleUUID());
               userLotteryEvent.setIsVerify(0);
            }
            //中奖优惠券
            if (1 == lotteryEventPrize.getPrizeType()) {
               remoteCouponService.addMemberCoupon(lotteryEventPrize.getObjectId(), lotteryEventPrize.getNumber(), userId);
@@ -160,6 +181,39 @@
            }
            userLotteryEvent.setCreateTime(LocalDateTime.now());
            userLotteryEventService.save(userLotteryEvent);
            //添加奖品数据
            MemberGiftRecord memberGiftRecord = new MemberGiftRecord();
            memberGiftRecord.setPrizeId(IdUtils.simpleUUID());
            memberGiftRecord.setDelFlag(0);
            memberGiftRecord.setUserId(userId);
            memberGiftRecord.setGiftId(userLotteryEvent.getId());
            memberGiftRecord.setGiftFrom(1);
            memberGiftRecord.setShopId(member.getRelationShopId());
            switch (lotteryEventPrize.getPrizeType()) {
               case 1:
                  memberGiftRecord.setGiftType(1);
                  memberGiftRecord.setCouponId(userLotteryEvent.getObjectId());
                  memberGiftRecord.setCouponNumber(userLotteryEvent.getNumber());
                  break;
               case 2:
                  memberGiftRecord.setGiftType(2);
                  memberGiftRecord.setGoodsId(userLotteryEvent.getObjectId());
                  memberGiftRecord.setGoodsNumber(userLotteryEvent.getNumber());
                  break;
               case 3:
                  memberGiftRecord.setGiftType(4);
                  memberGiftRecord.setGiftName(userLotteryEvent.getObjectName());
                  memberGiftRecord.setGiftNumber(userLotteryEvent.getNumber());
                  break;
               case 4:
                  memberGiftRecord.setGiftType(5);
                  memberGiftRecord.setIntegralNumber(userLotteryEvent.getNumber());
                  break;
            }
            memberGiftRecord.setPrizeFrom(2);
            memberGiftRecord.setCreateTime(new Date());
            memberGiftRecord.setVerifyStatus(1);
            remoteMemberService.saveMemberGiftRecord(memberGiftRecord);
            return R.ok();
         }
      } catch (Exception e) {