记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董敬伟
liquidnet-bus-v1
Commits
18187100
Commit
18187100
authored
Dec 06, 2021
by
jiangxiulong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
choujiang
parent
03672984
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
61 additions
and
38 deletions
+61
-38
SweetConstant.java
...a/com/liquidnet/service/sweet/constant/SweetConstant.java
+1
-0
IntegralActivityVo.java
...om/liquidnet/service/sweet/dto/vo/IntegralActivityVo.java
+4
-0
SweetIntegralActivityDrawServiceImpl.java
...et/service/impl/SweetIntegralActivityDrawServiceImpl.java
+45
-38
RedisDataUtils.java
...ava/com/liquidnet/service/sweet/utils/RedisDataUtils.java
+11
-0
No files found.
liquidnet-bus-api/liquidnet-service-sweet-api/src/main/java/com/liquidnet/service/sweet/constant/SweetConstant.java
View file @
18187100
...
...
@@ -37,6 +37,7 @@ public class SweetConstant {
public
static
final
String
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_USER_KEY
=
":userId:"
;
public
static
final
String
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_INFO
=
"sweet:integralActivity:DrawInfo:drawId:"
;
public
static
final
String
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_LOCK
=
"sweet:integralActivity:lock:userId:"
;
public
static
final
String
REDIS_KEY_SWEET_LUCKY_DRAW_NUM
=
"sweet:integralActivity:luckyDrawNum:activityId:"
;
// 答题活动
public
final
static
String
REDIS_KEY_SWEET_ANSWER_PHONE
=
"sweet:answer:phone:"
;
// 城市投票活动
...
...
liquidnet-bus-api/liquidnet-service-sweet-api/src/main/java/com/liquidnet/service/sweet/dto/vo/IntegralActivityVo.java
View file @
18187100
...
...
@@ -28,6 +28,9 @@ public class IntegralActivityVo implements Serializable, Cloneable {
@ApiModelProperty
(
value
=
"活动玩一次所需积分"
)
private
Integer
activityNum
;
@ApiModelProperty
(
value
=
"预估玩此活动的总人数"
)
private
Integer
estimatedNum
;
@ApiModelProperty
(
value
=
"活动时间类型 1长期 2开始结束时间"
)
private
Integer
timeType
;
...
...
@@ -80,6 +83,7 @@ public class IntegralActivityVo implements Serializable, Cloneable {
this
.
setActivityImg
(
source
.
getActivityImg
());
this
.
setActivityType
(
source
.
getActivityType
());
this
.
setActivityNum
(
source
.
getActivityNum
());
this
.
setEstimatedNum
(
source
.
getEstimatedNum
());
this
.
setTimeType
(
source
.
getTimeType
());
this
.
setStartTime
(
source
.
getStartTime
());
this
.
setEndTime
(
source
.
getEndTime
());
...
...
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/service/impl/SweetIntegralActivityDrawServiceImpl.java
View file @
18187100
...
...
@@ -111,18 +111,36 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
}
}
// 如果库存没了 限制的中奖人数到了就从列表剔出 列表为空就都没有库存了
List
<
IntegralActivityPrizeVo
>
prizeList
=
integralActivity
.
getPrizeList
();
// 如果库存没了就从列表剔出 列表为空就都没有库存了
ArrayList
<
IntegralActivityPrizeVo
>
activityPrizeVoArrayList
=
SweetNewObjectUtil
.
getIntegralActivityPrizeVoArrayList
();
for
(
IntegralActivityPrizeVo
info
:
prizeList
)
{
int
integralActivityPrizeNum
=
redisDataUtils
.
getIntegralActivityPrizeNum
(
integralActivityId
,
info
.
getPrizeId
());
if
(
integralActivityPrizeNum
>
0
)
{
activityPrizeVoArrayList
.
add
(
info
);
// 概率计算
boolean
lotteryDraw
=
this
.
lotteryDraw
(
integralActivity
.
getPrizeList2
(),
integralActivity
.
getEstimatedNum
(),
integralActivity
.
getIntegralActivityId
());
if
(
lotteryDraw
)
{
// 实物
List
<
IntegralActivityPrizeVo
>
prizeList
=
integralActivity
.
getPrizeList2
();
for
(
IntegralActivityPrizeVo
info
:
prizeList
)
{
int
integralActivityPrizeNum
=
redisDataUtils
.
getIntegralActivityPrizeNum
(
integralActivityId
,
info
.
getPrizeId
());
if
(
integralActivityPrizeNum
>
0
)
{
activityPrizeVoArrayList
.
add
(
info
);
}
}
/*if (CollectionUtils.isEmpty(activityPrizeVoArrayList)) {
return ResponseDto.failure("活动太火爆了,奖品已经没有库存啦~");
}*/
}
if
(
CollectionUtils
.
isEmpty
(
activityPrizeVoArrayList
))
{
return
ResponseDto
.
failure
(
"活动太火爆了,奖品已经没有库存啦~"
);
if
(!
lotteryDraw
||
CollectionUtils
.
isEmpty
(
activityPrizeVoArrayList
))
{
List
<
IntegralActivityPrizeVo
>
prizeList
=
integralActivity
.
getPrizeList1
();
for
(
IntegralActivityPrizeVo
info
:
prizeList
)
{
int
integralActivityPrizeNum
=
redisDataUtils
.
getIntegralActivityPrizeNum
(
integralActivityId
,
info
.
getPrizeId
());
if
(
integralActivityPrizeNum
>
0
)
{
activityPrizeVoArrayList
.
add
(
info
);
}
}
/*if (CollectionUtils.isEmpty(activityPrizeVoArrayList)) {
return ResponseDto.failure("活动太火爆了,奖品已经没有库存啦~");
}*/
}
IntegralActivityPrizeVo
integralActivityPrizeVo
=
this
.
lotteryDraw1
(
activityPrizeVoArrayList
);
// 减库存 顺便判断库存是否够 -1的时候回滚回去
...
...
@@ -338,7 +356,7 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
}
/**
* 抽奖方法
积分、券
* 抽奖方法
计算中哪一个
*/
private
static
IntegralActivityPrizeVo
lotteryDraw1
(
List
<
IntegralActivityPrizeVo
>
prizeList
)
{
if
(
prizeList
==
null
||
prizeList
.
isEmpty
())
{
...
...
@@ -374,39 +392,28 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
}
/**
* 抽奖方法
实物、会员
* 抽奖方法
计算中哪个奖池的奖品
*/
private
static
IntegralActivityPrizeVo
lotteryDraw2
(
List
<
IntegralActivityPrizeVo
>
prizeList
)
{
if
(
prizeList
==
null
||
prizeList
.
isEmpty
())
{
return
null
;
}
int
size
=
prizeList
.
size
();
// 计算总概率,这样可以保证不一定总概率是1
BigDecimal
sumRate
=
BigDecimal
.
ZERO
;
private
boolean
lotteryDraw
(
List
<
IntegralActivityPrizeVo
>
prizeList
,
Integer
estimatedNum
,
String
integralActivityId
)
{
// 随机数
double
random
=
Math
.
random
()
*
100
;
BigDecimal
randomBig
=
BigDecimal
.
valueOf
(
random
);
// 剩余总库存 todo 添加编辑的时候设置个总库存省区计算
int
prizeNum
=
0
;
for
(
IntegralActivityPrizeVo
prize
:
prizeList
)
{
sumRate
=
sumRate
.
add
(
prize
.
getWinningProbability
());
int
integralActivityPrizeNum
=
redisDataUtils
.
getIntegralActivityPrizeNum
(
integralActivityId
,
prize
.
getPrizeId
());
prizeNum
+=
integralActivityPrizeNum
;
}
// 计算每个物品在总概率的基础下的概率情况
List
<
BigDecimal
>
sortOrignalRates
=
new
ArrayList
<>(
size
);
BigDecimal
tempSumRate
=
BigDecimal
.
ZERO
;
for
(
IntegralActivityPrizeVo
prize
:
prizeList
)
{
tempSumRate
=
tempSumRate
.
add
(
prize
.
getWinningProbability
());
sortOrignalRates
.
add
(
tempSumRate
.
divide
(
sumRate
,
4
,
BigDecimal
.
ROUND_HALF_UP
));
BigDecimal
prizeNumBig
=
BigDecimal
.
valueOf
(
prizeNum
);
// 概率
int
luckyDrawNum
=
redisDataUtils
.
getLuckyDrawNum
(
integralActivityId
);
BigDecimal
multiply
=
prizeNumBig
.
divide
(
BigDecimal
.
valueOf
(
estimatedNum
-
luckyDrawNum
)).
multiply
(
BigDecimal
.
valueOf
(
100
));
// 对比大小
if
(
multiply
.
compareTo
(
randomBig
)
>=
0
)
{
return
true
;
// 大于等于随机数中实物
}
else
{
return
false
;
}
// 根据区块值来获取抽取到的物品索引
double
nextDouble
=
Math
.
random
();
BigDecimal
nextDoubleNew
=
BigDecimal
.
valueOf
(
nextDouble
);
sortOrignalRates
.
add
(
nextDoubleNew
);
Collections
.
sort
(
sortOrignalRates
);
int
index
=
sortOrignalRates
.
indexOf
(
nextDoubleNew
);
IntegralActivityPrizeVo
integralActivityPrizeVo
=
prizeList
.
get
(
index
);
return
integralActivityPrizeVo
;
}
/*public static void main(String[] args) {
...
...
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/utils/RedisDataUtils.java
View file @
18187100
...
...
@@ -751,4 +751,15 @@ public class RedisDataUtils {
return
(
List
<
TempBannerVo
>)
obj
;
}
}
public
int
getLuckyDrawNum
(
String
integralActivityId
)
{
String
redisKeyDraw
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_INFO
.
concat
(
integralActivityId
);
Object
obj
=
redisUtil
.
get
(
redisKeyDraw
);
if
(
null
==
obj
)
{
return
0
;
}
else
{
return
(
int
)
obj
;
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment