记得上下班打卡 | git大法好,push需谨慎

Commit e3ec157d authored by jiangxiulong's avatar jiangxiulong

抽奖 vo

parent 65a713fd
...@@ -38,6 +38,12 @@ public class IntegralActivityPrizeVo implements Serializable, Cloneable { ...@@ -38,6 +38,12 @@ public class IntegralActivityPrizeVo implements Serializable, Cloneable {
@ApiModelProperty(value = "单次奖励数量如积分 中奖给多少物") @ApiModelProperty(value = "单次奖励数量如积分 中奖给多少物")
private Integer prizeTypeNum; private Integer prizeTypeNum;
@ApiModelProperty(value = "奖品数量")
private Integer prizeNum;
@ApiModelProperty(value = "中奖概率")
private BigDecimal winningProbability;
@ApiModelProperty(value = "创建时间") @ApiModelProperty(value = "创建时间")
private LocalDateTime createdAt; private LocalDateTime createdAt;
...@@ -67,6 +73,8 @@ public class IntegralActivityPrizeVo implements Serializable, Cloneable { ...@@ -67,6 +73,8 @@ public class IntegralActivityPrizeVo implements Serializable, Cloneable {
this.setPrizeImgSelect(source.getPrizeImgSelect()); this.setPrizeImgSelect(source.getPrizeImgSelect());
this.setPrizeType(source.getPrizeType()); this.setPrizeType(source.getPrizeType());
this.setPrizeTypeNum(source.getPrizeTypeNum()); this.setPrizeTypeNum(source.getPrizeTypeNum());
this.setPrizeNum(source.getPrizeNum());
this.setWinningProbability(source.getWinningProbability());
this.setCreatedAt(source.getCreatedAt()); this.setCreatedAt(source.getCreatedAt());
this.setUpdatedAt(source.getUpdatedAt()); this.setUpdatedAt(source.getUpdatedAt());
return this; return this;
......
...@@ -3,7 +3,7 @@ package com.liquidnet.service.sweet.service; ...@@ -3,7 +3,7 @@ package com.liquidnet.service.sweet.service;
import com.liquidnet.service.base.PagedResult; import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo;
import com.liquidnet.service.sweet.dto.vo.admin.SweetIntegralActivityPrizeVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeVo;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw; import com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
...@@ -19,7 +19,7 @@ import java.util.List; ...@@ -19,7 +19,7 @@ import java.util.List;
*/ */
public interface ISweetIntegralActivityDrawService extends IService<SweetIntegralActivityDraw> { public interface ISweetIntegralActivityDrawService extends IService<SweetIntegralActivityDraw> {
ResponseDto<SweetIntegralActivityPrizeVo> create(String integralActivityId); ResponseDto<IntegralActivityPrizeVo> create(String integralActivityId);
ResponseDto<PagedResult<IntegralActivityDrawVo>> drawList(Integer type, String integralActivityId, Integer pageNum); ResponseDto<PagedResult<IntegralActivityDrawVo>> drawList(Integer type, String integralActivityId, Integer pageNum);
......
...@@ -2,8 +2,8 @@ package com.liquidnet.service.sweet.utils; ...@@ -2,8 +2,8 @@ package com.liquidnet.service.sweet.utils;
import com.liquidnet.service.base.PagedResult; import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeVo;
import com.liquidnet.service.sweet.dto.vo.admin.SweetIntegralActivityPrizeVo; import com.liquidnet.service.sweet.dto.vo.admin.SweetIntegralActivityPrizeVo;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrize; import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrize;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -11,6 +11,7 @@ import java.util.LinkedList; ...@@ -11,6 +11,7 @@ import java.util.LinkedList;
public class SweetNewObjectUtil { public class SweetNewObjectUtil {
private static final ArrayList<SweetIntegralActivityPrizeVo> sweetIntegralActivityPrizeVoArrayList = new ArrayList<>(); private static final ArrayList<SweetIntegralActivityPrizeVo> sweetIntegralActivityPrizeVoArrayList = new ArrayList<>();
private static final ArrayList<IntegralActivityPrizeVo> integralActivityPrizeVoArrayList = new ArrayList<>();
private static final ArrayList<SweetIntegralActivityPrize> sweetIntegralActivityPrizeArrayList = new ArrayList<>(); private static final ArrayList<SweetIntegralActivityPrize> sweetIntegralActivityPrizeArrayList = new ArrayList<>();
private static final LinkedList<IntegralActivityDrawVo> sweetIntegralActivityDrawVoLinkedList = new LinkedList<>(); private static final LinkedList<IntegralActivityDrawVo> sweetIntegralActivityDrawVoLinkedList = new LinkedList<>();
private static final PagedResult<IntegralActivityDrawVo> sweetIntegralActivityDrawVoPagedResult = new PagedResult<>(); private static final PagedResult<IntegralActivityDrawVo> sweetIntegralActivityDrawVoPagedResult = new PagedResult<>();
...@@ -31,4 +32,8 @@ public class SweetNewObjectUtil { ...@@ -31,4 +32,8 @@ public class SweetNewObjectUtil {
return (ArrayList<SweetIntegralActivityPrize>) sweetIntegralActivityPrizeArrayList.clone(); return (ArrayList<SweetIntegralActivityPrize>) sweetIntegralActivityPrizeArrayList.clone();
} }
public static ArrayList<IntegralActivityPrizeVo> getIntegralActivityPrizeVoArrayList() {
return (ArrayList<IntegralActivityPrizeVo>) integralActivityPrizeVoArrayList.clone();
}
} }
...@@ -4,7 +4,7 @@ package com.liquidnet.service.sweet.controller; ...@@ -4,7 +4,7 @@ package com.liquidnet.service.sweet.controller;
import com.liquidnet.service.base.PagedResult; import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo;
import com.liquidnet.service.sweet.dto.vo.admin.SweetIntegralActivityPrizeVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeVo;
import com.liquidnet.service.sweet.service.ISweetIntegralActivityDrawService; import com.liquidnet.service.sweet.service.ISweetIntegralActivityDrawService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
...@@ -35,7 +35,7 @@ public class SweetIntegralActivityDrawController { ...@@ -35,7 +35,7 @@ public class SweetIntegralActivityDrawController {
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "integralActivityId", value = "活动id", required = true) @ApiImplicitParam(type = "query", dataType = "String", name = "integralActivityId", value = "活动id", required = true)
}) })
public ResponseDto<SweetIntegralActivityPrizeVo> create( public ResponseDto<IntegralActivityPrizeVo> create(
@RequestParam("integralActivityId") String integralActivityId @RequestParam("integralActivityId") String integralActivityId
) { ) {
return activityDrawService.create(integralActivityId); return activityDrawService.create(integralActivityId);
......
...@@ -14,10 +14,9 @@ import com.liquidnet.service.feign.adam.api.FeignAdamBaseClient; ...@@ -14,10 +14,9 @@ import com.liquidnet.service.feign.adam.api.FeignAdamBaseClient;
import com.liquidnet.service.feign.stone.api.FeignStoneIntegralClient; import com.liquidnet.service.feign.stone.api.FeignStoneIntegralClient;
import com.liquidnet.service.stone.dto.StoneScoreListDto; import com.liquidnet.service.stone.dto.StoneScoreListDto;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo; import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo;
import com.liquidnet.service.sweet.dto.vo.admin.SweetIntegralActivityPrizeVo;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw; import com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrize;
import com.liquidnet.service.sweet.mapper.SweetIntegralActivityDrawMapper; import com.liquidnet.service.sweet.mapper.SweetIntegralActivityDrawMapper;
import com.liquidnet.service.sweet.service.ISweetIntegralActivityDrawService; import com.liquidnet.service.sweet.service.ISweetIntegralActivityDrawService;
import com.liquidnet.service.sweet.utils.QueueUtils; import com.liquidnet.service.sweet.utils.QueueUtils;
...@@ -67,7 +66,7 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg ...@@ -67,7 +66,7 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
private FeignAdamBaseClient feignAdamBaseClient; private FeignAdamBaseClient feignAdamBaseClient;
@Override @Override
public ResponseDto<SweetIntegralActivityPrizeVo> create(String integralActivityId) { public ResponseDto<IntegralActivityPrizeVo> create(String integralActivityId) {
Map tokenClaims = CurrentUtil.getTokenClaims(); Map tokenClaims = CurrentUtil.getTokenClaims();
String userId = StringUtils.defaultString((String.valueOf(tokenClaims.get("sub"))), ""); String userId = StringUtils.defaultString((String.valueOf(tokenClaims.get("sub"))), "");
// 加锁 // 加锁
...@@ -112,26 +111,24 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg ...@@ -112,26 +111,24 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
} }
// 如果库存没了 限制的中奖人数到了就从列表剔出 列表为空就都没有库存了 // 如果库存没了 限制的中奖人数到了就从列表剔出 列表为空就都没有库存了
List<SweetIntegralActivityPrize> prizeList = integralActivity.getPrizeList(); List<IntegralActivityPrizeVo> prizeList = integralActivity.getPrizeList();
ArrayList<SweetIntegralActivityPrize> sweetIntegralActivityPrizeArrayList = SweetNewObjectUtil.getSweetIntegralActivityPrizeArrayList(); ArrayList<IntegralActivityPrizeVo> activityPrizeVoArrayList = SweetNewObjectUtil.getIntegralActivityPrizeVoArrayList();
for (SweetIntegralActivityPrize info : prizeList) { for (IntegralActivityPrizeVo info : prizeList) {
int integralActivityPrizeNum = redisDataUtils.getIntegralActivityPrizeNum(integralActivityId, info.getPrizeId()); int integralActivityPrizeNum = redisDataUtils.getIntegralActivityPrizeNum(integralActivityId, info.getPrizeId());
if (integralActivityPrizeNum > 0) { if (integralActivityPrizeNum > 0) {
sweetIntegralActivityPrizeArrayList.add(info); activityPrizeVoArrayList.add(info);
} }
} }
if (CollectionUtils.isEmpty(sweetIntegralActivityPrizeArrayList)) { if (CollectionUtils.isEmpty(activityPrizeVoArrayList)) {
return ResponseDto.failure("活动太火爆了,奖品已经没有库存啦~"); return ResponseDto.failure("活动太火爆了,奖品已经没有库存啦~");
} }
SweetIntegralActivityPrize sweetIntegralActivityPrize = this.lotteryDraw(sweetIntegralActivityPrizeArrayList); IntegralActivityPrizeVo integralActivityPrizeVo = this.lotteryDraw(activityPrizeVoArrayList);
SweetIntegralActivityPrizeVo sweetIntegralActivityPrizeVo = SweetIntegralActivityPrizeVo.getNew().copy(sweetIntegralActivityPrize);
// 减库存 顺便判断库存是否够 -1的时候回滚回去 // 减库存 顺便判断库存是否够 -1的时候回滚回去
long activityPrizeNum = redisDataUtils.decrIntegralActivityPrizeNum(integralActivityId, sweetIntegralActivityPrizeVo.getPrizeId(), 1); long activityPrizeNum = redisDataUtils.decrIntegralActivityPrizeNum(integralActivityId, integralActivityPrizeVo.getPrizeId(), 1);
log.info("奖品库存情况 activityPrizeNum:{}", activityPrizeNum); log.info("奖品库存情况 activityPrizeNum:{}", activityPrizeNum);
if (activityPrizeNum < 0) {// 库存不够了 if (activityPrizeNum < 0) {// 库存不够了
long prizeNum = redisDataUtils.incrIntegralActivityPrizeNum(integralActivityId, sweetIntegralActivityPrizeVo.getPrizeId(), 1); long prizeNum = redisDataUtils.incrIntegralActivityPrizeNum(integralActivityId, integralActivityPrizeVo.getPrizeId(), 1);
log.info("奖品库存情况回滚后 prizeNum:{}", prizeNum); log.info("奖品库存情况回滚后 prizeNum:{}", prizeNum);
return ResponseDto.failure("活动太火爆了,奖品已经没有库存了!"); return ResponseDto.failure("活动太火爆了,奖品已经没有库存了!");
} }
...@@ -144,20 +141,20 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg ...@@ -144,20 +141,20 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
integralActivityDrawVo.setDrawId(drawId); integralActivityDrawVo.setDrawId(drawId);
integralActivityDrawVo.setIntegralActivityId(integralActivityId); integralActivityDrawVo.setIntegralActivityId(integralActivityId);
integralActivityDrawVo.setActivityNum(integralActivity.getActivityNum()); integralActivityDrawVo.setActivityNum(integralActivity.getActivityNum());
integralActivityDrawVo.setPrizeId(sweetIntegralActivityPrize.getPrizeId()); integralActivityDrawVo.setPrizeId(integralActivityPrizeVo.getPrizeId());
integralActivityDrawVo.setPrizeTitle(sweetIntegralActivityPrize.getPrizeTitle()); integralActivityDrawVo.setPrizeTitle(integralActivityPrizeVo.getPrizeTitle());
integralActivityDrawVo.setPrizeType(sweetIntegralActivityPrize.getPrizeType()); integralActivityDrawVo.setPrizeType(integralActivityPrizeVo.getPrizeType());
integralActivityDrawVo.setPrizeTypeNum(sweetIntegralActivityPrize.getPrizeTypeNum()); integralActivityDrawVo.setPrizeTypeNum(integralActivityPrizeVo.getPrizeTypeNum());
// integralActivityDrawVo.setRelationId(sweetIntegralActivityPrize.getRelationId()); // integralActivityDrawVo.setRelationId(sweetIntegralActivityPrize.getRelationId());
integralActivityDrawVo.setUserId(userId); integralActivityDrawVo.setUserId(userId);
integralActivityDrawVo.setNickname(nickname); integralActivityDrawVo.setNickname(nickname);
LocalDateTime nowTime = LocalDateTime.now(); LocalDateTime nowTime = LocalDateTime.now();
integralActivityDrawVo.setCreatedAt(nowTime); integralActivityDrawVo.setCreatedAt(nowTime);
Integer receivingStatus = 1; Integer receivingStatus = 1;
Integer prizeType = sweetIntegralActivityPrize.getPrizeType(); Integer prizeType = integralActivityPrizeVo.getPrizeType();
if (prizeType == 2) {// 中奖积分 if (prizeType == 2) {// 中奖积分
// 增加积分 // 增加积分
ResponseDto<String> in2111 = feignStoneIntegralClient.in2112(userId, sweetIntegralActivityPrize.getPrizeTypeNum(), integralActivity.getActivityTitle()); ResponseDto<String> in2111 = feignStoneIntegralClient.in2112(userId, integralActivityPrizeVo.getPrizeTypeNum(), integralActivity.getActivityTitle());
log.info("中奖加积分返回值情况 in2111:{}", in2111); log.info("中奖加积分返回值情况 in2111:{}", in2111);
// 发放状态 // 发放状态
receivingStatus = 2; receivingStatus = 2;
...@@ -177,15 +174,15 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg ...@@ -177,15 +174,15 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
sqls.add(SqlMapping.get("integral_activity_draw.insert")); sqls.add(SqlMapping.get("integral_activity_draw.insert"));
sqlsDataA.add(new Object[]{ sqlsDataA.add(new Object[]{
drawId, integralActivityId, integralActivity.getActivityNum(), drawId, integralActivityId, integralActivity.getActivityNum(),
sweetIntegralActivityPrize.getPrizeId(), sweetIntegralActivityPrize.getPrizeTitle(), sweetIntegralActivityPrize.getPrizeType(), integralActivityPrizeVo.getPrizeId(), integralActivityPrizeVo.getPrizeTitle(), integralActivityPrizeVo.getPrizeType(),
sweetIntegralActivityPrize.getPrizeTypeNum(), //sweetIntegralActivityPrize.getRelationId(), integralActivityPrizeVo.getPrizeTypeNum(), //sweetIntegralActivityPrize.getRelationId(),
userId, nickname, userId, nickname,
receivingStatus receivingStatus
}); });
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_INTEGRAL_ACTIVITY_DRAW.getKey(), queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_INTEGRAL_ACTIVITY_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA)); SqlMapping.gets(sqls, sqlsDataA));
return ResponseDto.success(sweetIntegralActivityPrizeVo); return ResponseDto.success(integralActivityPrizeVo);
} catch (Exception e) { } catch (Exception e) {
log.error("积分抽奖异常 e:{}", e); log.error("积分抽奖异常 e:{}", e);
return ResponseDto.failure("操作失败,请稍后重试!"); return ResponseDto.failure("操作失败,请稍后重试!");
...@@ -328,7 +325,7 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg ...@@ -328,7 +325,7 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
/** /**
* 抽奖方法 * 抽奖方法
*/ */
private static SweetIntegralActivityPrize lotteryDraw(List<SweetIntegralActivityPrize> prizeList) { private static IntegralActivityPrizeVo lotteryDraw(List<IntegralActivityPrizeVo> prizeList) {
if (prizeList == null || prizeList.isEmpty()) { if (prizeList == null || prizeList.isEmpty()) {
return null; return null;
} }
...@@ -337,14 +334,14 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg ...@@ -337,14 +334,14 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
// 计算总概率,这样可以保证不一定总概率是1 // 计算总概率,这样可以保证不一定总概率是1
BigDecimal sumRate = BigDecimal.ZERO; BigDecimal sumRate = BigDecimal.ZERO;
for (SweetIntegralActivityPrize prize : prizeList) { for (IntegralActivityPrizeVo prize : prizeList) {
sumRate = sumRate.add(prize.getWinningProbability()); sumRate = sumRate.add(prize.getWinningProbability());
} }
// 计算每个物品在总概率的基础下的概率情况 // 计算每个物品在总概率的基础下的概率情况
List<BigDecimal> sortOrignalRates = new ArrayList<>(size); List<BigDecimal> sortOrignalRates = new ArrayList<>(size);
BigDecimal tempSumRate = BigDecimal.ZERO; BigDecimal tempSumRate = BigDecimal.ZERO;
for (SweetIntegralActivityPrize prize : prizeList) { for (IntegralActivityPrizeVo prize : prizeList) {
tempSumRate = tempSumRate.add(prize.getWinningProbability()); tempSumRate = tempSumRate.add(prize.getWinningProbability());
sortOrignalRates.add(tempSumRate.divide(sumRate, 4, BigDecimal.ROUND_HALF_UP)); sortOrignalRates.add(tempSumRate.divide(sumRate, 4, BigDecimal.ROUND_HALF_UP));
} }
...@@ -357,8 +354,8 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg ...@@ -357,8 +354,8 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
int index = sortOrignalRates.indexOf(nextDoubleNew); int index = sortOrignalRates.indexOf(nextDoubleNew);
SweetIntegralActivityPrize sweetIntegralActivityPrize = prizeList.get(index); IntegralActivityPrizeVo integralActivityPrizeVo = prizeList.get(index);
return sweetIntegralActivityPrize; return integralActivityPrizeVo;
} }
/*public static void main(String[] args) { /*public static void main(String[] args) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment