diff --git a/sino-act-web/src/main/java/com/ruoyi/dto/GtPrizeConfigTemp.java b/sino-act-web/src/main/java/com/ruoyi/dto/GtPrizeConfigTemp.java new file mode 100644 index 000000000..ebe6bd349 --- /dev/null +++ b/sino-act-web/src/main/java/com/ruoyi/dto/GtPrizeConfigTemp.java @@ -0,0 +1,55 @@ +package com.ruoyi.dto; + +import com.sinosoft.activity.domain.DrawConfig; +import com.sinosoft.activity.domain.DrawPrizeInfo; + +import java.io.Serializable; + +public class GtPrizeConfigTemp implements Serializable { + /** + * + */ + private static final long serialVersionUID = 3431401981054724955L; + private long baseNumer; + private long weightLength; + private long startNumer; + private long endNumber; + private DrawConfig config; + private DrawPrizeInfo prizeInfo; + public long getBaseNumer() { + return baseNumer; + } + public void setBaseNumer(long baseNumer) { + this.baseNumer = baseNumer; + } + public long getWeightLength() { + return weightLength; + } + public void setWeightLength(long weightLength) { + this.weightLength = weightLength; + } + public long getStartNumer() { + return startNumer; + } + public void setStartNumer(long startNumer) { + this.startNumer = startNumer; + } + public long getEndNumber() { + return endNumber; + } + public void setEndNumber(long endNumber) { + this.endNumber = endNumber; + } + public DrawConfig getConfig() { + return config; + } + public void setConfig(DrawConfig config) { + this.config = config; + } + public DrawPrizeInfo getPrizeInfo() { + return prizeInfo; + } + public void setPrizeInfo(DrawPrizeInfo prizeInfo) { + this.prizeInfo = prizeInfo; +} +} diff --git a/sino-act-web/src/main/java/com/ruoyi/service/DrawService.java b/sino-act-web/src/main/java/com/ruoyi/service/DrawService.java index 62615f258..9f4a5dc5b 100644 --- a/sino-act-web/src/main/java/com/ruoyi/service/DrawService.java +++ b/sino-act-web/src/main/java/com/ruoyi/service/DrawService.java @@ -2,19 +2,34 @@ package com.ruoyi.service; import com.ruoyi.cache.Cache; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.dto.GtPrizeConfigTemp; +import com.ruoyi.web.vo.Const; +import com.sinosoft.activity.domain.DrawConfig; +import com.sinosoft.activity.domain.DrawPrizeInfo; import com.sinosoft.activity.domain.DrawRule; +import com.sinosoft.activity.service.IDrawConfigService; +import com.sinosoft.activity.service.IDrawPrizeInfoService; import com.sinosoft.activity.service.IDrawRuleService; +import com.sinosoft.activity.vo.PrizeInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class DrawService { private static final Logger logger = LoggerFactory.getLogger(DrawService.class); @Autowired private IDrawRuleService drawRuleService; + @Autowired + private IDrawConfigService drawConfigService; + @Autowired + private IDrawPrizeInfoService drawPrizeInfoService; /** * 刷新抽奖需要的缓存信息 * @@ -41,53 +56,56 @@ public class DrawService { DrawRule drawRule = drawRuleService.selectDrawRuleList(drawRuleParams).get(0); cacheAdd("_" + drawCode + "_" + currentDateStr + "_rule_", drawRule, "_" + drawCode + "_" + yesterdayDateStr + "_rule_", timeOut); // 奖项配置加入缓存 - QueryRule gtDrawConfigQueryRule = QueryRule.getInstance(); - gtDrawConfigQueryRule.addEqual("drawCode", drawCode); - gtDrawConfigQueryRule.addEqual("state", Constant.DRAW_CONFIG_STATUS_EFFECTIVE); - gtDrawConfigQueryRule.addAscOrder("prizeLevel"); - List gtDrawConfigs = gtDrawConfigService.queryByQueryRule(gtDrawConfigQueryRule); - cacheAdd("_" + drawCode + "_" + currentDateStr + "_config_", gtDrawConfigs, "_" + drawCode + "_" + yesterdayDateStr + "_config_", timeOut); - // 空奖品加入缓存 - QueryRule gtDrawConfigBlankCondition = QueryRule.getInstance(); - gtDrawConfigBlankCondition.addEqual("drawCode", drawCode); - gtDrawConfigBlankCondition.addEqual("state", Constant.DRAW_CONFIG_STATUS_EFFECTIVE); - gtDrawConfigBlankCondition.addEqual("prizeLevel", "blank"); - List gtDrawConfigBlankList = gtDrawConfigService.queryByQueryRule(gtDrawConfigBlankCondition); - if (gtDrawConfigBlankList == null) { +// gtDrawConfigQueryRule.addAscOrder("prizeLevel"); + DrawConfig drawConfigParams = new DrawConfig(); + drawConfigParams.setDRAWCODE(drawCode); + drawConfigParams.setSTATUS(Const.STATUS_VALID); + List drawConfigs = drawConfigService.selectDrawConfigList(drawConfigParams); + cacheAdd("_" + drawCode + "_" + currentDateStr + "_config_", drawConfigs, "_" + drawCode + "_" + yesterdayDateStr + "_config_", timeOut); + // 空奖奖项配置 + DrawConfig drawConfigBlank = null; + // 非空奖项配置 + List gtDrawConfigList = new ArrayList<>(); + for (DrawConfig drawConfig : drawConfigs) { + String prizelevel = drawConfig.getPRIZELEVEL(); + if (Const.PRIZE_LEVEL_BLANK.equals(prizelevel)) { + drawConfigBlank = drawConfig; + } else { + gtDrawConfigList.add(drawConfig); + } + } + if (drawConfigBlank == null) { throw new Exception("空奖品配置错误"); } - QueryRule blankQueryRule = QueryRule.getInstance(); - blankQueryRule.addEqual("prizeCode", gtDrawConfigBlankList.get(0).getPrizeCode()); - blankQueryRule.addEqual("status", "1"); - GtPrizeInfo blankPrize = gtPrizeInfoService.queryUniqueGtPrizeInfo(blankQueryRule); + // 非空奖奖项配置加入缓存 + cacheAdd("_" + drawCode + "_" + currentDateStr + "_gtDrawConfigList_", gtDrawConfigList, "_" + drawCode + "_" + yesterdayDateStr + "_gtDrawConfigList_", timeOut); + // 空奖奖项配置加入缓存 + Cache.remove("_" + drawCode + "_blankConfig_"); + Cache.add("_" + drawCode + "_blankConfig_", drawConfigBlank); + //空奖奖品加入缓存 + + String prizeCodeBlank = drawConfigBlank.getPRIZECODE(); + PrizeInfo prizeInfoParams = new PrizeInfo(); + prizeInfoParams.setDRAWCODE(drawCode); + prizeInfoParams.setSTATUS(Const.STATUS_VALID); + List drawPrizeInfos = drawPrizeInfoService.selectDrawPrizeInfoByDrawCode(prizeInfoParams); + Map prizeMap = new HashMap<>(); + for (DrawPrizeInfo prizeInfo : drawPrizeInfos) { + String prizeCode = prizeInfo.getPRIZECODE(); + prizeMap.put(prizeCode, prizeInfo); + } + DrawPrizeInfo blankPrize = prizeMap.get(prizeCodeBlank); Cache.remove("_" + drawCode + "_blank_"); Cache.add("_" + drawCode + "_blank_", blankPrize); - // 空奖奖项配置加入缓存 - QueryRule gtBlankDrawConfigCondition = QueryRule.getInstance(); - gtBlankDrawConfigCondition.addEqual("drawCode", drawCode); - gtBlankDrawConfigCondition.addEqual("prizeLevel", "blank"); - List gtBlankDrawConfigList = gtDrawConfigService.queryByQueryRule(gtBlankDrawConfigCondition); - if (gtBlankDrawConfigList != null && gtBlankDrawConfigList.size() > 0) { - GtDrawConfig gtDrawConfig = gtBlankDrawConfigList.get(0); - Cache.remove("_" + drawCode + "_blankConfig_"); - Cache.add("_" + drawCode + "_blankConfig_", gtDrawConfig); - } - // 非空奖奖项配置加入缓存 - QueryRule gtDrawConfigCondition = QueryRule.getInstance(); - gtDrawConfigCondition.addEqual("drawCode", drawCode); - gtDrawConfigCondition.addEqual("state", Constant.DRAW_CONFIG_STATUS_EFFECTIVE); - gtDrawConfigCondition.addNotEqual("prizeLevel", "blank"); - gtDrawConfigCondition.addAscOrder("prizeLevel"); - List gtDrawConfigList = gtDrawConfigService.queryByQueryRule(gtDrawConfigCondition); - cacheAdd("_" + drawCode + "_" + currentDateStr + "_gtDrawConfigList_", gtDrawConfigList, "_" + drawCode + "_" + yesterdayDateStr + "_gtDrawConfigList_", timeOut); + // 计算总权重 BigDecimal totalProbability = BigDecimal.ZERO; // 最小概率 BigDecimal minProbability = BigDecimal.ZERO; if (gtDrawConfigList != null && gtDrawConfigList.size() > 0) { for (int i = 0; i < gtDrawConfigList.size(); i++) { - GtDrawConfig gtDrawConfig = gtDrawConfigList.get(i); - String prizeWigth = new BigDecimal(gtDrawConfig.getProbability()).divide(new BigDecimal(100)).toString(); + DrawConfig gtDrawConfig = gtDrawConfigList.get(i); + String prizeWigth = new BigDecimal(gtDrawConfig.getPROBABILITY()).divide(new BigDecimal(100)).toString(); totalProbability = totalProbability.add(new BigDecimal(prizeWigth)); String n = prizeWigth; if (i == 0) { @@ -110,15 +128,12 @@ public class DrawService { long tmp = 0; if (gtDrawConfigList != null && gtDrawConfigList.size() > 0) { for (int i = 0; i < gtDrawConfigList.size(); i++) { - GtDrawConfig gtDrawConfig = gtDrawConfigList.get(i); - String probability = gtDrawConfig.getProbability(); + DrawConfig gtDrawConfig = gtDrawConfigList.get(i); + String probability = gtDrawConfig.getPROBABILITY(); GtPrizeConfigTemp gtPrizeConfigTemp = new GtPrizeConfigTemp(); gtPrizeConfigTemp.setBaseNumer(baseNumer.longValue()); gtPrizeConfigTemp.setConfig(gtDrawConfig); - QueryRule prizeQueryRule = QueryRule.getInstance(); - prizeQueryRule.addEqual("prizeCode", gtDrawConfig.getPrizeCode()); - List prizeInfo = gtPrizeInfoService.queryByQueryRule(prizeQueryRule); - gtPrizeConfigTemp.setPrizeInfo(prizeInfo.get(0)); + gtPrizeConfigTemp.setPrizeInfo(prizeMap.get(gtDrawConfig.getPRIZECODE())); // 区间1从0开始 if (i == 0) { // 区间数从1开始 @@ -137,7 +152,7 @@ public class DrawService { tmp = end; } // 奖项开始结束区间加入缓存 - cacheAdd("_cache_" + drawCode + "_" + currentDateStr + "_" + gtDrawConfig.getPrizeLevel() + "_", gtPrizeConfigTemp, "_cache_" + drawCode + "_" + yesterdayDateStr + "_" + gtDrawConfig.getPrizeLevel() + "_", timeOut); + cacheAdd("_cache_" + drawCode + "_" + currentDateStr + "_" + gtDrawConfig.getPRIZELEVEL() + "_", gtPrizeConfigTemp, "_cache_" + drawCode + "_" + yesterdayDateStr + "_" + gtDrawConfig.getPRIZELEVEL() + "_", timeOut); } } } diff --git a/sino-act-web/src/main/java/com/ruoyi/web/vo/Const.java b/sino-act-web/src/main/java/com/ruoyi/web/vo/Const.java index 54a7b4140..037413520 100644 --- a/sino-act-web/src/main/java/com/ruoyi/web/vo/Const.java +++ b/sino-act-web/src/main/java/com/ruoyi/web/vo/Const.java @@ -29,4 +29,6 @@ public interface Const { String STATUS_VALID = "1"; String STATUS_INVALID = "0"; + + String PRIZE_LEVEL_BLANK = "blank"; } diff --git a/sino-activity/src/main/java/com/sinosoft/activity/mapper/DrawPrizeInfoMapper.java b/sino-activity/src/main/java/com/sinosoft/activity/mapper/DrawPrizeInfoMapper.java index 567c6b0a1..87b1c737f 100644 --- a/sino-activity/src/main/java/com/sinosoft/activity/mapper/DrawPrizeInfoMapper.java +++ b/sino-activity/src/main/java/com/sinosoft/activity/mapper/DrawPrizeInfoMapper.java @@ -2,6 +2,7 @@ package com.sinosoft.activity.mapper; import java.util.List; import com.sinosoft.activity.domain.DrawPrizeInfo; +import com.sinosoft.activity.vo.PrizeInfo; /** * 存储奖品的基础信息Mapper接口 @@ -34,6 +35,7 @@ public interface DrawPrizeInfoMapper public List selectDrawPrizeInfoList(DrawPrizeInfo drawPrizeInfo); List findDrawPrizeInfoList(); + List selectDrawPrizeInfoByDrawCode(PrizeInfo prizeInfo); /** * 新增存储奖品的基础信息 diff --git a/sino-activity/src/main/java/com/sinosoft/activity/service/IDrawPrizeInfoService.java b/sino-activity/src/main/java/com/sinosoft/activity/service/IDrawPrizeInfoService.java index 81be02b7d..cea606bd3 100644 --- a/sino-activity/src/main/java/com/sinosoft/activity/service/IDrawPrizeInfoService.java +++ b/sino-activity/src/main/java/com/sinosoft/activity/service/IDrawPrizeInfoService.java @@ -2,6 +2,7 @@ package com.sinosoft.activity.service; import java.util.List; import com.sinosoft.activity.domain.DrawPrizeInfo; +import com.sinosoft.activity.vo.PrizeInfo; /** * 存储奖品的基础信息Service接口 @@ -32,6 +33,7 @@ public interface IDrawPrizeInfoService * @return */ List findDrawPrizeInfoList(); + List selectDrawPrizeInfoByDrawCode(PrizeInfo prizeInfo); /** * 新增存储奖品的基础信息 diff --git a/sino-activity/src/main/java/com/sinosoft/activity/service/impl/DrawPrizeInfoServiceImpl.java b/sino-activity/src/main/java/com/sinosoft/activity/service/impl/DrawPrizeInfoServiceImpl.java index d30523a76..ca97dcb18 100644 --- a/sino-activity/src/main/java/com/sinosoft/activity/service/impl/DrawPrizeInfoServiceImpl.java +++ b/sino-activity/src/main/java/com/sinosoft/activity/service/impl/DrawPrizeInfoServiceImpl.java @@ -2,6 +2,8 @@ package com.sinosoft.activity.service.impl; import java.util.Date; import java.util.List; + +import com.sinosoft.activity.vo.PrizeInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.sinosoft.activity.mapper.DrawPrizeInfoMapper; @@ -49,6 +51,10 @@ public class DrawPrizeInfoServiceImpl implements IDrawPrizeInfoService public List findDrawPrizeInfoList() { return drawPrizeInfoMapper.findDrawPrizeInfoList(); } + @Override + public List selectDrawPrizeInfoByDrawCode(PrizeInfo prizeInfo) { + return drawPrizeInfoMapper.selectDrawPrizeInfoByDrawCode(prizeInfo); + } /** * 新增存储奖品的基础信息 diff --git a/sino-activity/src/main/java/com/sinosoft/activity/vo/PrizeInfo.java b/sino-activity/src/main/java/com/sinosoft/activity/vo/PrizeInfo.java new file mode 100644 index 000000000..a1e482827 --- /dev/null +++ b/sino-activity/src/main/java/com/sinosoft/activity/vo/PrizeInfo.java @@ -0,0 +1,15 @@ +package com.sinosoft.activity.vo; + +import com.sinosoft.activity.domain.DrawPrizeInfo; + +public class PrizeInfo extends DrawPrizeInfo { + private String DRAWCODE; + + public String getDRAWCODE() { + return DRAWCODE; + } + + public void setDRAWCODE(String DRAWCODE) { + this.DRAWCODE = DRAWCODE; + } +} diff --git a/sino-activity/src/main/resources/mapper/activity/DrawPrizeInfoMapper.xml b/sino-activity/src/main/resources/mapper/activity/DrawPrizeInfoMapper.xml index b9127e000..713835536 100644 --- a/sino-activity/src/main/resources/mapper/activity/DrawPrizeInfoMapper.xml +++ b/sino-activity/src/main/resources/mapper/activity/DrawPrizeInfoMapper.xml @@ -21,9 +21,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select PRIZEID, PRIZECODE, PRIZENAME, PRIZETYPE, PRIZEVALUE, COMMENTS, CREATETIMESTAMP, LASTUPDATETIMESTAMP, STATUS, INTEGRALPROJECTCODE from draw_prize_info +