ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/domain/GetLotteryEventList.java
New file @@ -0,0 +1,13 @@ package com.ruoyi.goods.api.domain; import lombok.Data; /** * @author zhibing.pu * @date 2025/7/30 15:59 */ @Data public class GetLotteryEventList { private Integer activityType; private Long userId; } ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/factory/LotteryEventFallbackFactory.java
@@ -1,6 +1,7 @@ package com.ruoyi.goods.api.factory; import com.ruoyi.common.core.domain.R; import com.ruoyi.goods.api.domain.GetLotteryEventList; import com.ruoyi.goods.api.domain.TLotteryEvent; import com.ruoyi.goods.api.service.LotteryEventClient; import org.springframework.cloud.openfeign.FallbackFactory; @@ -17,7 +18,7 @@ return new LotteryEventClient() { @Override public R<List<TLotteryEvent>> getLotteryEventList(Integer activityType) { public R<List<TLotteryEvent>> getLotteryEventList(GetLotteryEventList getLotteryEventList) { return R.fail("根据开启方式获取活动列表失败:" + cause.getMessage()); } }; ruoyi-api/ruoyi-api-goods/src/main/java/com/ruoyi/goods/api/service/LotteryEventClient.java
@@ -2,10 +2,13 @@ import com.ruoyi.common.core.constant.ServiceNameConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.goods.api.domain.GetLotteryEventList; import com.ruoyi.goods.api.domain.TLotteryEvent; import com.ruoyi.goods.api.domain.TUserLotteryEvent; import com.ruoyi.goods.api.factory.LotteryEventFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; @@ -21,9 +24,9 @@ /** * 根据开启方式获取活动列表 * * @param activityType * @param getLotteryEventList * @return */ @PostMapping("/lotteryEvent/getLotteryEventList") R<List<TLotteryEvent>> getLotteryEventList(@RequestParam("activityType") Integer activityType); R<List<TLotteryEvent>> getLotteryEventList(@RequestBody GetLotteryEventList getLotteryEventList); } ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java
@@ -9,6 +9,7 @@ import com.ruoyi.common.security.auth.AuthUtil; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.goods.api.domain.GetLotteryEventList; import com.ruoyi.goods.api.domain.TLotteryEvent; import com.ruoyi.goods.api.service.LotteryEventClient; import com.ruoyi.system.api.domain.dto.AppMiniRegisterDto; @@ -77,7 +78,10 @@ Map<String, Object> miniToken = tokenService.createMiniToken(appMiniLoginVo); //判断新用户是都符合抽奖条件 miniToken.put("lotteryDraw", false); List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(1).getData(); GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); getLotteryEventList.setActivityType(1); getLotteryEventList.setUserId(SecurityUtils.getUserId()); List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); if (data.size() > 0) { miniToken.put("lotteryDraw", true); miniToken.put("lotteryEventId", data.get(0).getId()); ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/concole/LotteryEventController.java
@@ -1,12 +1,18 @@ package com.ruoyi.goods.controller.concole; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.R; import com.ruoyi.goods.api.domain.GetLotteryEventList; import com.ruoyi.goods.api.domain.TLotteryEvent; import com.ruoyi.goods.api.domain.TUserLotteryEvent; import com.ruoyi.goods.service.lottery.ILotteryEventService; import com.ruoyi.goods.service.lottery.IUserLotteryEventService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; /** @@ -19,21 +25,35 @@ @Resource private ILotteryEventService lotteryEventService; @Resource private IUserLotteryEventService userLotteryEventService; /** * 根据开启方式获取活动列表 * * @param activityType * @param getLotteryEventList * @return */ @ResponseBody @PostMapping("/getLotteryEventList") public R<List<TLotteryEvent>> getLotteryEventList(@RequestParam("activityType") Integer activityType) { List<TLotteryEvent> list = lotteryEventService.list(new LambdaQueryWrapper<TLotteryEvent>().eq(TLotteryEvent::getActivityType, activityType) public R<List<TLotteryEvent>> getLotteryEventList(@RequestBody GetLotteryEventList getLotteryEventList) { Integer activityType = getLotteryEventList.getActivityType(); Long userId = getLotteryEventList.getUserId(); List<TLotteryEvent> list = lotteryEventService.list(new LambdaQueryWrapper<TLotteryEvent>().eq(TLotteryEvent::getActivityType, activityType) .eq(TLotteryEvent::getDelFlag, 0).last(" and now() between start_time and end_time")); //分享抽奖,需要判断最后一次抽奖间隔时间 if(activityType == 3 && !list.isEmpty()){ TLotteryEvent lotteryEvent = list.get(0); Integer intervalTime = lotteryEvent.getIntervalTime(); TUserLotteryEvent one = userLotteryEventService.getOne(new QueryWrapper<TUserLotteryEvent>().eq("user_id", userId).eq("lottery_event_id", lotteryEvent.getId()).last(" order by create_time desc limit 0, 1")); //当前时间小于间隔时间 if(null != one && one.getCreateTime().plusDays(intervalTime).compareTo(LocalDateTime.now()) > 0){ return R.ok(new ArrayList<>()); } } return R.ok(list); } } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventServiceImpl.java
@@ -87,9 +87,38 @@ vo.setId(lotteryEvent.getId()); vo.setName(lotteryEvent.getName()); vo.setActivityProfile(lotteryEvent.getActivityProfile()); List<TUserLotteryEvent> userLotteryEvents = userLotteryEventService.list(new QueryWrapper<TUserLotteryEvent>().eq("lottery_event_id", id).eq("user_id", userId)); vo.setLaveTimes(lotteryEvent.getTimes() - userLotteryEvents.size()); //查询抽检活动奖品 //订单抽奖,每次进去都是新的抽奖机会 if(2 == lotteryEvent.getActivityType()){ vo.setLaveTimes(lotteryEvent.getTimes()); }else{ List<TUserLotteryEvent> userLotteryEvents = userLotteryEventService.list(new QueryWrapper<TUserLotteryEvent>().eq("lottery_event_id", id).eq("user_id", userId)); vo.setLaveTimes(lotteryEvent.getTimes() - userLotteryEvents.size()); //构建我的奖品明细 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()); if (Arrays.asList(2, 3).contains(s.getPrizeType())) { 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); } //查询抽奖活动奖品 List<TLotteryEventPrize> lotteryEventPrizeList = lotteryEventPrizeService.list(new QueryWrapper<TLotteryEventPrize>().eq("lottery_event_id", id)); vo.setPrizeList(lotteryEventPrizeList); //答题正确率 @@ -99,28 +128,6 @@ 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()); if (Arrays.asList(2, 3).contains(s.getPrizeType())) { 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); return vo; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppCouponController.java
@@ -6,6 +6,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.goods.api.domain.GetLotteryEventList; import com.ruoyi.goods.api.domain.TLotteryEvent; import com.ruoyi.goods.api.service.LotteryEventClient; import com.ruoyi.member.domain.dto.AppMemberCouponPageDto; @@ -153,7 +154,10 @@ }) public R<String> shareCoupon(@PathVariable("couponId") String couponId) { //检测是否可以抽奖 List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(3).getData(); GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); getLotteryEventList.setActivityType(3); getLotteryEventList.setUserId(SecurityUtils.getUserId()); List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); if (data.size() > 0) { return R.ok(data.get(0).getId()); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppIntegralController.java
@@ -4,6 +4,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.goods.api.domain.GetLotteryEventList; import com.ruoyi.goods.api.domain.TLotteryEvent; import com.ruoyi.goods.api.service.LotteryEventClient; import com.ruoyi.member.domain.vo.AppIntegralRecordPageVo; @@ -93,7 +94,10 @@ throw new ServiceException(AppErrorConstant.DOUBLE_INTEGRAL_TASK); } //判断是否可以抽奖 List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(3).getData(); GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); getLotteryEventList.setActivityType(3); getLotteryEventList.setUserId(SecurityUtils.getUserId()); List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); Map<String, Object> map = new HashMap<>(); if(data.size() > 0){ TLotteryEvent tLotteryEvent = data.get(0); ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/miniapp/AppMemberController.java
@@ -5,6 +5,7 @@ import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.goods.api.domain.GetLotteryEventList; import com.ruoyi.goods.api.domain.TLotteryEvent; import com.ruoyi.goods.api.service.LotteryEventClient; import com.ruoyi.member.domain.dto.AppMemberBrowseDto; @@ -66,7 +67,10 @@ Long userId = SecurityUtils.getUserId(); AppUserInfoVo appUserInfoVo = memberService.getAppUserInfo(userId); //判断是否可以抽奖 List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(3).getData(); GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); getLotteryEventList.setActivityType(3); getLotteryEventList.setUserId(SecurityUtils.getUserId()); List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); Map<String, Object> map = new HashMap<>(); if(data.size() > 0){ TLotteryEvent tLotteryEvent = data.get(0); ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerVerifyAwardVo.java
@@ -22,6 +22,9 @@ @ApiModelProperty(value = "奖品id") private String prizeId; @ApiModelProperty(value = "用户id") private Long userId; @ApiModelProperty(value = "用户姓名") private String userName; ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -35,6 +35,7 @@ import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.common.security.utils.CodeFactoryUtil; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.goods.api.domain.GetLotteryEventList; import com.ruoyi.goods.api.domain.TLotteryEvent; import com.ruoyi.goods.api.service.LotteryEventClient; import com.ruoyi.order.config.WxPayConfiguration; @@ -405,7 +406,10 @@ appSureOrderVo.setAppSureOrderGoodsVoList(appSureOrderGoodsVoList); appSureOrderVo.setLotteryDraw(false); // 返回AppPlaceOrderVo对象 List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); getLotteryEventList.setActivityType(2); getLotteryEventList.setUserId(SecurityUtils.getUserId()); List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); if (data.size() > 0) { BigDecimal finalOrderPayMoney = orderPayMoney; List<TLotteryEvent> collect = data.stream().filter(s -> s.getPayMoney().compareTo(finalOrderPayMoney) <= 0).collect(Collectors.toList()); @@ -524,7 +528,10 @@ appPanicBuyVo.setOrderPayMoney(orderPayMoney); appPanicBuyVo.setLotteryDraw(false); // 返回AppPlaceOrderVo对象 List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); getLotteryEventList.setActivityType(2); getLotteryEventList.setUserId(SecurityUtils.getUserId()); List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); if (data.size() > 0) { BigDecimal finalOrderPayMoney = orderPayMoney; List<TLotteryEvent> collect = data.stream().filter(s -> s.getPayMoney().compareTo(finalOrderPayMoney) <= 0).collect(Collectors.toList()); @@ -868,7 +875,10 @@ appPlaceOrderVo.setLotteryDraw(false); // 返回AppPlaceOrderVo对象 List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); getLotteryEventList.setActivityType(2); getLotteryEventList.setUserId(SecurityUtils.getUserId()); List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); if (data.size() > 0) { BigDecimal finalOrderPayMoney = orderPayMoney; List<TLotteryEvent> collect = data.stream().filter(s -> s.getPayMoney().compareTo(finalOrderPayMoney) <= 0).collect(Collectors.toList()); @@ -1361,7 +1371,10 @@ redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activityId + "-" + goodsId, surpNum - buyNum); appPlaceOrderVo.setLotteryDraw(false); // 返回AppPlaceOrderVo对象 List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); getLotteryEventList.setActivityType(2); getLotteryEventList.setUserId(SecurityUtils.getUserId()); List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); if (data.size() > 0) { BigDecimal finalOrderPayMoney = orderPayMoney; List<TLotteryEvent> collect = data.stream().filter(s -> s.getPayMoney().compareTo(finalOrderPayMoney) <= 0).collect(Collectors.toList()); @@ -1649,7 +1662,10 @@ appPlaceOrderVo.setPrepayId(orderPayment.getPrepayId()); appPlaceOrderVo.setLotteryDraw(false); // 返回AppPlaceOrderVo对象 List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(2).getData(); GetLotteryEventList getLotteryEventList = new GetLotteryEventList(); getLotteryEventList.setActivityType(2); getLotteryEventList.setUserId(SecurityUtils.getUserId()); List<TLotteryEvent> data = lotteryEventClient.getLotteryEventList(getLotteryEventList).getData(); if (data.size() > 0) { List<TLotteryEvent> collect = data.stream().filter(s -> s.getPayMoney().compareTo(order.getPayMoney()) <= 0).collect(Collectors.toList()); if (collect.size() > 0) { @@ -2347,12 +2363,12 @@ orderGoods.setBuyNum(1); ConsumerGoods consumerGoods = new ConsumerGoods(); consumerGoods.setUsedNum(1); if(null != timeCard){ //核销一次加一次 orderGoods.setBuyNum(1); orderGoods.setServiceNum(1); consumerGoods.setServiceNum(timeCard.getTimesCount()); consumerGoods.setUsedNum(1); consumerGoods.setUseTime(new Date()); } orderGoods.setCycleNumFlag(1); @@ -2365,7 +2381,7 @@ consumerGoods.setServiceStatus(1); consumerGoods.setShopId(order.getShopId()); consumerGoods.setUserId(order.getUserId()); consumerGoods.setOrderId(orderId); consumerGoods.setOrderId(order.getOrderId()); consumerGoods.setOrderGoodsId(orderGoods.getOrderGoodsId()); consumerGoods.setGoodsName(sku.getTitle()); consumerGoods.setCycleNumFlag(1); @@ -2376,7 +2392,7 @@ //生成返回 MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); merVerifyOrderVo.setOrderId(orderId); merVerifyOrderVo.setOrderId(order.getOrderId()); merVerifyOrderVo.setOrderNo(order.getOrderNo()); merVerifyOrderVo.setOrderStatus(order.getOrderStatus()); merVerifyOrderVo.setOrderFrom(order.getOrderFrom()); @@ -2445,7 +2461,7 @@ if (integral > 0) { memberTotalChangeDto.setChangeIntegral(integral); memberTotalChangeDto.setTypeIntegral(1); memberTotalChangeDto.setOrderId(orderId); memberTotalChangeDto.setOrderId(order.getOrderId()); memberTotalChangeDto.setOrderNo(order.getOrderNo()); } } @@ -2471,7 +2487,7 @@ consumerGoodsService.updateById(consumerGoods); //生成返回 MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); merVerifyOrderVo.setOrderId(orderId); merVerifyOrderVo.setOrderId(order.getOrderId()); merVerifyOrderVo.setOrderNo(order.getOrderNo()); merVerifyOrderVo.setOrderStatus(order.getOrderStatus()); merVerifyOrderVo.setOrderFrom(order.getOrderFrom()); @@ -2638,7 +2654,7 @@ consumerGoods.setServiceStatus(1); consumerGoods.setShopId(order.getShopId()); consumerGoods.setUserId(order.getUserId()); consumerGoods.setOrderId(orderId); consumerGoods.setOrderId(order.getOrderId()); consumerGoods.setGoodsId(sku.getSku_id()); consumerGoods.setOrderGoodsId(orderGoods.getOrderGoodsId()); consumerGoods.setGoodsName(sku.getTitle()); @@ -2652,7 +2668,7 @@ consumerGoodsService.save(consumerGoods); //生成返回 MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); merVerifyOrderVo.setOrderId(orderId); merVerifyOrderVo.setOrderId(order.getOrderId()); merVerifyOrderVo.setOrderNo(order.getOrderNo()); merVerifyOrderVo.setOrderStatus(order.getOrderStatus()); merVerifyOrderVo.setOrderFrom(order.getOrderFrom()); @@ -2721,7 +2737,7 @@ if (integral > 0) { memberTotalChangeDto.setChangeIntegral(integral); memberTotalChangeDto.setTypeIntegral(1); memberTotalChangeDto.setOrderId(orderId); memberTotalChangeDto.setOrderId(order.getOrderId()); memberTotalChangeDto.setOrderNo(order.getOrderNo()); } } @@ -2745,7 +2761,7 @@ consumerGoodsService.updateById(consumerGoods); //生成返回 MerVerifyOrderVo merVerifyOrderVo = new MerVerifyOrderVo(); merVerifyOrderVo.setOrderId(orderId); merVerifyOrderVo.setOrderId(order.getOrderId()); merVerifyOrderVo.setOrderNo(order.getOrderNo()); merVerifyOrderVo.setOrderStatus(order.getOrderStatus()); merVerifyOrderVo.setOrderFrom(order.getOrderFrom()); @@ -5668,7 +5684,8 @@ if (memberGiftRecord.getGiftFrom() == 2 && !memberGiftRecord.getShopId().equals(shopId)) { throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); } merVerifyAwardVo.setUserId(member.getUserId()); merVerifyAwardVo.setUserName(member.getRealName()); merVerifyAwardVo.setUserMobile(member.getMobile()); if (1 == memberGiftRecord.getPrizeFrom()) {