cup 2 years ago
parent
commit
0c52ebe68e

+ 14 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/MarketingMgrController.java

@@ -42,6 +42,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -97,8 +98,19 @@ public class MarketingMgrController extends BaseApiController {
     )
     public TableDataInfo list(@RequestBody MarketingQueryParam marketingQueryParam) {
         startPage();
-        List<MarketingListVO> list = marketingService.listMarketing(marketingQueryParam);
-        return getDataTable(list);
+        List<Marketing> marketingList = marketingService.listMarketing(marketingQueryParam);
+        List<MarketingListVO> marketingListVOS = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(marketingList)) {
+            marketingListVOS = marketingList.stream().map(marketing -> {
+                MarketingListVO marketingListVO = new MarketingListVO();
+                com.qs.mp.common.utils.bean.BeanUtils.copyProperties(marketing, marketingListVO);
+                return marketingListVO;
+            }).collect(Collectors.toList());
+        }
+        TableDataInfo res = getDataTable(marketingList);
+        res.setRows(marketingListVOS);
+
+        return res;
     }
 
     @PostMapping("/detail/{id}")

+ 1 - 1
mp-service/src/main/java/com/qs/mp/admin/service/IMarketingService.java

@@ -37,7 +37,7 @@ public interface IMarketingService extends IService<Marketing> {
      * @param
      * @return
      */
-    List<MarketingListVO> listMarketing(MarketingQueryParam marketingQueryParam);
+    List<Marketing> listMarketing(MarketingQueryParam marketingQueryParam);
 
     /**
      * 根据活动id删除活动相关信息

+ 2 - 13
mp-service/src/main/java/com/qs/mp/admin/service/impl/MarketingServiceImpl.java

@@ -377,7 +377,7 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
     }
 
     @Override
-    public List<MarketingListVO> listMarketing(MarketingQueryParam marketingQueryParam) {
+    public List<Marketing> listMarketing(MarketingQueryParam marketingQueryParam) {
         LambdaQueryWrapper<Marketing> queryWrapper = new LambdaQueryWrapper<>();
         if (StringUtils.isNotBlank(marketingQueryParam.getTitle())) {
             queryWrapper.like(Marketing::getTitle, marketingQueryParam.getTitle());
@@ -404,18 +404,7 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
         queryWrapper.orderByDesc(Marketing::getCreatedTime);
 
 
-        List<MarketingListVO> marketingListVOS = new ArrayList<>();
-        List<Marketing> list = this.list(queryWrapper);
-        if (CollectionUtils.isNotEmpty(list)) {
-            marketingListVOS = list.stream().map(marketing -> {
-                MarketingListVO marketingListVO = new MarketingListVO();
-                BeanUtils.copyProperties(marketing, marketingListVO);
-                return marketingListVO;
-            }).collect(Collectors.toList());
-        }
-
-
-        return marketingListVOS;
+        return this.list(queryWrapper);
     }
 
     @Override

+ 45 - 25
mp-service/src/main/java/com/qs/mp/user/service/impl/UserHitPrizeServiceImpl.java

@@ -32,6 +32,7 @@ import java.time.LocalTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
+import java.util.stream.Collectors;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -184,35 +185,17 @@ public class UserHitPrizeServiceImpl extends ServiceImpl<UserHitPrizeMapper, Use
             // 查看奖级下的奖品
             List<TicketAwardsPrize> ticketAwardsPrizes = userHitPrizeService.listPrize(ticket, userId);
 
-            // 开奖
-            int random = -1;
-            // 计算总权重
-            double sumWeight = 0;
-            for (TicketAwardsPrize ticketAwardsPrize : ticketAwardsPrizes) {
-                sumWeight += ticketAwardsPrize.getRemainQty();
-            }
+            List<TicketAwardsPrize> newTicketAwardsPrizes =  new ArrayList<>();
 
-            //产生随机数
-            double randomNumber;
-            randomNumber = Math.random();
-
-            //根据随机数在所有奖品分布的区域并确定所抽奖品
-            double d1 = 0;
-            double d2 = 0;
-            for (int i = 0; i < ticketAwardsPrizes.size(); i++) {
-                d2 += Double.parseDouble(String.valueOf(ticketAwardsPrizes.get(i).getQuantity())) / sumWeight;
-                if (i == 0) {
-                    d1 = 0;
-                } else {
-                    d1 += Double.parseDouble(String.valueOf(ticketAwardsPrizes.get(i - 1).getQuantity())) / sumWeight;
-                }
-                if (randomNumber > d1 && randomNumber <= d2) {
-                    random = i;
-                    break;
+            for (TicketAwardsPrize ticketAwardsPrize : ticketAwardsPrizes) {
+                if (ticketAwardsPrize.getRemainQty() != 0) {
+                    newTicketAwardsPrizes.add(ticketAwardsPrize);
                 }
             }
 
-            TicketAwardsPrize ticketAwardsPrize = ticketAwardsPrizes.get(random);
+            int random = getRandom(newTicketAwardsPrizes);
+
+            TicketAwardsPrize ticketAwardsPrize = newTicketAwardsPrizes.get(random);
 
             userHitPrizeDetailVO.setPrizeId(ticketAwardsPrize.getPrizeId());
             userHitPrizeDetailVO.setPicUrl(ticketAwardsPrize.getPicUrl());
@@ -229,6 +212,43 @@ public class UserHitPrizeServiceImpl extends ServiceImpl<UserHitPrizeMapper, Use
 
     }
 
+    /**
+     * 获取中奖索引
+     * @param newTicketAwardsPrizes
+     * @return
+     */
+    private int getRandom(List<TicketAwardsPrize> newTicketAwardsPrizes) {
+        // 开奖
+        int random = -1;
+        // 计算总权重
+        double sumWeight = 0;
+        for (TicketAwardsPrize ticketAwardsPrize : newTicketAwardsPrizes) {
+            sumWeight += ticketAwardsPrize.getRemainQty();
+        }
+
+        //产生随机数
+        double randomNumber;
+        randomNumber = Math.random();
+
+        //根据随机数在所有奖品分布的区域并确定所抽奖品
+        double d1 = 0;
+        double d2 = 0;
+        for (int i = 0; i < newTicketAwardsPrizes.size(); i++) {
+            d2 += Double.parseDouble(String.valueOf(newTicketAwardsPrizes.get(i).getRemainQty())) / sumWeight;
+            if (i == 0) {
+                d1 = 0;
+            } else {
+                d1 += Double.parseDouble(String.valueOf(newTicketAwardsPrizes.get(i - 1).getRemainQty())) / sumWeight;
+            }
+            if (randomNumber >= d1 && randomNumber < d2) {
+                random = i;
+                break;
+            }
+        }
+        return random;
+    }
+
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void cashPrize(Ticket ticket, Long userId, String awardsId, String prizeId) {