记得上下班打卡 | 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
60acb331
Commit
60acb331
authored
Dec 07, 2021
by
jiangxiulong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
中奖返回值、EstimatedNum
parent
855d6704
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
135 additions
and
19 deletions
+135
-19
SweetConstant.java
...a/com/liquidnet/service/sweet/constant/SweetConstant.java
+1
-1
IntegralActivityPrizeApiVo.java
...dnet/service/sweet/dto/vo/IntegralActivityPrizeApiVo.java
+63
-0
ISweetIntegralActivityDrawService.java
...vice/sweet/service/ISweetIntegralActivityDrawService.java
+2
-1
SweetIntegralActivityServiceImpl.java
.../sweet/service/impl/SweetIntegralActivityServiceImpl.java
+15
-0
SweetRedisAdminUtils.java
...ient/admin/zhengzai/sweet/utils/SweetRedisAdminUtils.java
+32
-3
SweetIntegralActivityDrawController.java
...sweet/controller/SweetIntegralActivityDrawController.java
+2
-1
SweetIntegralActivityDrawServiceImpl.java
...et/service/impl/SweetIntegralActivityDrawServiceImpl.java
+12
-10
RedisDataUtils.java
...ava/com/liquidnet/service/sweet/utils/RedisDataUtils.java
+8
-3
No files found.
liquidnet-bus-api/liquidnet-service-sweet-api/src/main/java/com/liquidnet/service/sweet/constant/SweetConstant.java
View file @
60acb331
...
...
@@ -37,7 +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:luckyDraw
Num:activityId:"
;
public
static
final
String
REDIS_KEY_SWEET_
INTEGRAL_ACTIVITY_ESTIMATEDNUM
=
"sweet:integralActivity:estimated
Num:activityId:"
;
public
static
final
String
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_TOTAL_PRIZE_NUM
=
"sweet:integralActivity:totalPrizeNum: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/IntegralActivityPrizeApiVo.java
0 → 100644
View file @
60acb331
package
com
.
liquidnet
.
service
.
sweet
.
dto
.
vo
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
IntegralActivityPrizeApiVo
implements
Serializable
,
Cloneable
{
private
static
final
long
serialVersionUID
=
-
303399210433737206L
;
@ApiModelProperty
(
value
=
"奖品id"
)
private
String
prizeId
;
@ApiModelProperty
(
value
=
"关联活动id"
)
private
String
integralActivityId
;
@ApiModelProperty
(
value
=
"抽奖id"
)
private
String
drawId
;
@ApiModelProperty
(
value
=
"奖品名称"
)
private
String
prizeTitle
;
@ApiModelProperty
(
value
=
"奖品描述"
)
private
String
prizeDescribe
;
@ApiModelProperty
(
value
=
"初始展示奖品图片"
)
private
String
prizeImgInit
;
@ApiModelProperty
(
value
=
"中奖选中奖品图片"
)
private
String
prizeImgSelect
;
@ApiModelProperty
(
value
=
"奖品类型 1积分 2优惠券 3实物 4登登登VIP"
)
private
Integer
prizeType
;
@ApiModelProperty
(
value
=
"单次奖励数量如积分 中奖给多少物"
)
private
Integer
prizeTypeNum
;
private
static
final
IntegralActivityPrizeApiVo
obj
=
new
IntegralActivityPrizeApiVo
();
public
static
IntegralActivityPrizeApiVo
getNew
()
{
try
{
return
(
IntegralActivityPrizeApiVo
)
obj
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
return
new
IntegralActivityPrizeApiVo
();
}
}
public
IntegralActivityPrizeApiVo
copy
(
IntegralActivityPrizeVo
source
)
{
if
(
null
==
this
)
return
this
;
this
.
setIntegralActivityId
(
source
.
getIntegralActivityId
());
this
.
setPrizeId
(
source
.
getPrizeId
());
this
.
setIntegralActivityId
(
source
.
getIntegralActivityId
());
this
.
setPrizeTitle
(
source
.
getPrizeTitle
());
this
.
setPrizeDescribe
(
source
.
getPrizeDescribe
());
this
.
setPrizeImgInit
(
source
.
getPrizeImgInit
());
this
.
setPrizeImgSelect
(
source
.
getPrizeImgSelect
());
this
.
setPrizeType
(
source
.
getPrizeType
());
this
.
setPrizeTypeNum
(
source
.
getPrizeTypeNum
());
return
this
;
}
}
liquidnet-bus-api/liquidnet-service-sweet-api/src/main/java/com/liquidnet/service/sweet/service/ISweetIntegralActivityDrawService.java
View file @
60acb331
...
...
@@ -3,6 +3,7 @@ package com.liquidnet.service.sweet.service;
import
com.liquidnet.service.base.PagedResult
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo
;
import
com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeApiVo
;
import
com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeVo
;
import
com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw
;
import
com.baomidou.mybatisplus.extension.service.IService
;
...
...
@@ -19,7 +20,7 @@ import java.util.List;
*/
public
interface
ISweetIntegralActivityDrawService
extends
IService
<
SweetIntegralActivityDraw
>
{
ResponseDto
<
IntegralActivityPrizeVo
>
create
(
String
integralActivityId
);
ResponseDto
<
IntegralActivityPrize
Api
Vo
>
create
(
String
integralActivityId
);
ResponseDto
<
PagedResult
<
IntegralActivityDrawVo
>>
drawList
(
Integer
type
,
String
integralActivityId
,
Integer
pageNum
);
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/sweet/service/impl/SweetIntegralActivityServiceImpl.java
View file @
60acb331
...
...
@@ -76,6 +76,8 @@ public class SweetIntegralActivityServiceImpl extends ServiceImpl<SweetIntegralA
sweetIntegralActivityPrizeMapper
.
insert
(
sweetIntegralActivityPrize
);
// 奖品库存
sweetRedisAdminUtils
.
incrIntegralActivityPrizeNum
(
integralActivityId
,
sweetIntegralActivityPrize
.
getPrizeId
(),
sweetIntegralActivityPrize
.
getPrizeNum
());
// 预估人数
sweetRedisAdminUtils
.
incrIntegralActivityEstimatedNum
(
integralActivityId
,
sweetIntegralActivity
.
getEstimatedNum
());
}
}
// 活动redis处理
...
...
@@ -94,10 +96,23 @@ public class SweetIntegralActivityServiceImpl extends ServiceImpl<SweetIntegralA
SweetIntegralActivity
sweetIntegralActivity
=
SweetIntegralActivityFromParam
.
getNew
().
copy
(
param
);
sweetIntegralActivity
.
setUpdatedAt
(
nowTime
);
String
integralActivityId
=
param
.
getIntegralActivityId
();
SweetIntegralActivity
sweetIntegralActivityOld
=
sweetIntegralActivityMapper
.
selectOne
(
Wrappers
.
lambdaQuery
(
SweetIntegralActivity
.
class
).
eq
(
SweetIntegralActivity:
:
getIntegralActivityId
,
integralActivityId
)
);
int
update
=
sweetIntegralActivityMapper
.
update
(
sweetIntegralActivity
,
Wrappers
.
lambdaUpdate
(
SweetIntegralActivity
.
class
).
eq
(
SweetIntegralActivity:
:
getIntegralActivityId
,
integralActivityId
)
);
Integer
estimatedNum
=
sweetIntegralActivityOld
.
getEstimatedNum
();
Integer
estimatedNumNew
=
sweetIntegralActivity
.
getEstimatedNum
();
int
estimatedNumDiff
=
estimatedNumNew
-
estimatedNum
;
if
(
estimatedNumDiff
>
0
)
{
//增加
sweetRedisAdminUtils
.
incrIntegralActivityEstimatedNum
(
integralActivityId
,
estimatedNumDiff
);
}
else
if
(
estimatedNumDiff
<
0
)
{
// 减少
sweetRedisAdminUtils
.
decrIntegralActivityEstimatedNum
(
integralActivityId
,
Math
.
abs
(
estimatedNumDiff
));
}
List
<
SweetIntegralActivityPrizeFormParam
>
prizeList
=
param
.
getPrizeList
();
if
(!
CollectionUtils
.
isEmpty
(
prizeList
))
{
for
(
SweetIntegralActivityPrizeFormParam
prize
:
prizeList
)
{
...
...
liquidnet-bus-client/liquidnet-client-admin/liquidnet-client-admin-zhengzai/src/main/java/com/liquidnet/client/admin/zhengzai/sweet/utils/SweetRedisAdminUtils.java
View file @
60acb331
...
...
@@ -26,6 +26,9 @@ public class SweetRedisAdminUtils {
boolean
set
=
redisDataSourceUtil
.
getRedisSweetUtil
().
set
(
redisKey
,
integralActivityVo
);
}
/**
* 奖品库存
*/
public
void
incrIntegralActivityPrizeNum
(
String
integralActivityId
,
String
prizeId
,
Integer
num
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_NUM
.
concat
(
integralActivityId
)
...
...
@@ -55,6 +58,12 @@ public class SweetRedisAdminUtils {
}
}
public
void
setIntegralActivityTotalPrizeNum
(
String
integralActivityId
,
int
totalPrizeNum
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_TOTAL_PRIZE_NUM
.
concat
(
integralActivityId
);
redisDataSourceUtil
.
getRedisSweetUtil
().
set
(
redisKey
,
totalPrizeNum
);
}
public
void
setIntegralActivityDraw
(
LinkedList
<
IntegralActivityDrawVo
>
sweetIntegralActivityDraws
,
String
integralActivityId
,
String
userId
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_IN_USER
.
concat
(
integralActivityId
)
...
...
@@ -71,9 +80,29 @@ public class SweetRedisAdminUtils {
redisDataSourceUtil
.
getRedisSweetUtil
().
set
(
redisKeyDraw
,
info
);
}
public
void
setIntegralActivityTotalPrizeNum
(
String
integralActivityId
,
int
totalPrizeNum
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_TOTAL_PRIZE_NUM
/**
* 预估人数
*/
public
void
incrIntegralActivityEstimatedNum
(
String
integralActivityId
,
Integer
num
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_ESTIMATEDNUM
.
concat
(
integralActivityId
);
redisDataSourceUtil
.
getRedisSweetUtil
().
set
(
redisKey
,
totalPrizeNum
);
redisDataSourceUtil
.
getRedisSweetUtil
().
incr
(
redisKey
,
num
);
}
public
void
decrIntegralActivityEstimatedNum
(
String
integralActivityId
,
Integer
num
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_ESTIMATEDNUM
.
concat
(
integralActivityId
);
redisDataSourceUtil
.
getRedisSweetUtil
().
decr
(
redisKey
,
num
);
}
public
int
getIntegralActivityEstimatedNum
(
String
integralActivityId
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_ESTIMATEDNUM
.
concat
(
integralActivityId
);
Object
obj
=
redisDataSourceUtil
.
getRedisSweetUtil
().
get
(
redisKey
);
if
(
null
==
obj
)
{
return
0
;
}
else
{
return
(
int
)
obj
;
}
}
}
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/controller/SweetIntegralActivityDrawController.java
View file @
60acb331
...
...
@@ -4,6 +4,7 @@ package com.liquidnet.service.sweet.controller;
import
com.liquidnet.service.base.PagedResult
;
import
com.liquidnet.service.base.ResponseDto
;
import
com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo
;
import
com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeApiVo
;
import
com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeVo
;
import
com.liquidnet.service.sweet.service.ISweetIntegralActivityDrawService
;
import
io.swagger.annotations.Api
;
...
...
@@ -35,7 +36,7 @@ public class SweetIntegralActivityDrawController {
@ApiImplicitParams
({
@ApiImplicitParam
(
type
=
"query"
,
dataType
=
"String"
,
name
=
"integralActivityId"
,
value
=
"活动id"
,
required
=
true
)
})
public
ResponseDto
<
IntegralActivityPrizeVo
>
create
(
public
ResponseDto
<
IntegralActivityPrize
Api
Vo
>
create
(
@RequestParam
(
"integralActivityId"
)
String
integralActivityId
)
{
return
activityDrawService
.
create
(
integralActivityId
);
...
...
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/service/impl/SweetIntegralActivityDrawServiceImpl.java
View file @
60acb331
...
...
@@ -15,6 +15,7 @@ import com.liquidnet.service.feign.candy.api.FeignCandyBaseClient;
import
com.liquidnet.service.feign.stone.api.FeignStoneIntegralClient
;
import
com.liquidnet.service.stone.dto.StoneScoreListDto
;
import
com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo
;
import
com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeApiVo
;
import
com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeVo
;
import
com.liquidnet.service.sweet.dto.vo.IntegralActivityVo
;
import
com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw
;
...
...
@@ -69,7 +70,7 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
private
FeignCandyBaseClient
feignCandyBaseClient
;
@Override
public
ResponseDto
<
IntegralActivityPrizeVo
>
create
(
String
integralActivityId
)
{
public
ResponseDto
<
IntegralActivityPrize
Api
Vo
>
create
(
String
integralActivityId
)
{
Map
tokenClaims
=
CurrentUtil
.
getTokenClaims
();
String
userId
=
StringUtils
.
defaultString
((
String
.
valueOf
(
tokenClaims
.
get
(
CurrentUtil
.
TOKEN_SUB
))),
""
);
// 加锁
...
...
@@ -116,8 +117,9 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
// 如果库存没了就从列表剔出 列表为空就都没有库存了
ArrayList
<
IntegralActivityPrizeVo
>
activityPrizeVoArrayList
=
SweetNewObjectUtil
.
getIntegralActivityPrizeVoArrayList
();
// 概率计算
// TODO: 2021/12/6 黑名单只中券 不记录次数
boolean
lotteryDraw
=
this
.
lotteryDraw
(
integralActivity
.
getEstimatedNum
(),
integralActivity
.
getIntegralActivityId
(),
userId
);
// TODO: 2021/12/6 黑名单只中券 不记录次数
redisDataUtils
.
decrIntegralActivityEstimatedNum
(
integralActivityId
,
1
);
boolean
lotteryDraw
=
this
.
lotteryDraw
(
integralActivityId
,
userId
);
if
(
lotteryDraw
)
{
// 实物
List
<
IntegralActivityPrizeVo
>
prizeList
=
integralActivity
.
getPrizeList2
();
for
(
IntegralActivityPrizeVo
info
:
prizeList
)
{
...
...
@@ -207,8 +209,8 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
SweetQueue
.
SWEET_INTEGRAL_ACTIVITY_DRAW
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlsDataA
));
integralActivityPrizeVo
.
setPrizeRelationList
(
null
);
return
ResponseDto
.
success
(
integralActivityPrize
Vo
);
IntegralActivityPrizeApiVo
activityPrizeApiVo
=
IntegralActivityPrizeApiVo
.
getNew
().
copy
(
integralActivityPrizeVo
);
return
ResponseDto
.
success
(
activityPrizeApi
Vo
);
}
catch
(
Exception
e
)
{
log
.
error
(
"积分抽奖异常 e:{}"
,
e
);
return
ResponseDto
.
failure
(
"操作失败,请稍后重试!"
);
...
...
@@ -412,7 +414,7 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
/**
* 抽奖方法 计算中哪个奖池的奖品
*/
private
boolean
lotteryDraw
(
Integer
estimatedNum
,
String
integralActivityId
,
String
uid
)
{
private
boolean
lotteryDraw
(
String
integralActivityId
,
String
uid
)
{
// 随机数
double
random
=
Math
.
random
()
*
100
;
BigDecimal
randomBig
=
BigDecimal
.
valueOf
(
random
);
...
...
@@ -420,19 +422,19 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
int
prizeNum
=
redisDataUtils
.
getIntegralActivityTotalPrizeNum
(
integralActivityId
);
BigDecimal
prizeNumBig
=
BigDecimal
.
valueOf
(
prizeNum
);
// 概率
int
luckyDrawNum
=
redisDataUtils
.
getLuckyDraw
Num
(
integralActivityId
);
BigDecimal
diffEstimatedNum
=
BigDecimal
.
valueOf
(
estimatedNum
-
luckyDraw
Num
);
int
estimatedNum
=
redisDataUtils
.
getIntegralActivityEstimated
Num
(
integralActivityId
);
BigDecimal
estimatedNumBig
=
BigDecimal
.
valueOf
(
estimated
Num
);
// 会员概率*2
try
{
ResponseDto
<
Boolean
>
isMemberDto
=
feignAdamBaseClient
.
isMember
(
uid
);
Boolean
isMember
=
isMemberDto
.
getData
();
if
(
isMember
)
{
diffEstimatedNum
=
diffEstimatedNum
.
divide
(
BigDecimal
.
valueOf
(
2
),
2
,
BigDecimal
.
ROUND_HALF_UP
);
estimatedNumBig
=
estimatedNumBig
.
divide
(
BigDecimal
.
valueOf
(
2
),
2
,
BigDecimal
.
ROUND_HALF_UP
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"获取用户是否是会员失败 [uid:{}, e:{}]"
,
uid
,
e
);
}
BigDecimal
multiply
=
prizeNumBig
.
divide
(
diffEstimatedNum
,
2
,
BigDecimal
.
ROUND_HALF_UP
).
multiply
(
BigDecimal
.
valueOf
(
100
));
BigDecimal
multiply
=
prizeNumBig
.
divide
(
estimatedNumBig
,
2
,
BigDecimal
.
ROUND_HALF_UP
).
multiply
(
BigDecimal
.
valueOf
(
100
));
// 对比大小
if
(
multiply
.
compareTo
(
randomBig
)
>=
0
)
{
return
true
;
// 大于等于随机数中实物
...
...
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/utils/RedisDataUtils.java
View file @
60acb331
...
...
@@ -769,14 +769,19 @@ public class RedisDataUtils {
}
}
public
int
get
LuckyDraw
Num
(
String
integralActivityId
)
{
String
redisKey
Draw
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_INFO
public
int
get
IntegralActivityEstimated
Num
(
String
integralActivityId
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_ESTIMATEDNUM
.
concat
(
integralActivityId
);
Object
obj
=
redisUtil
.
get
(
redisKey
Draw
);
Object
obj
=
redisUtil
.
get
(
redisKey
);
if
(
null
==
obj
)
{
return
0
;
}
else
{
return
(
int
)
obj
;
}
}
public
void
decrIntegralActivityEstimatedNum
(
String
integralActivityId
,
Integer
num
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_ESTIMATEDNUM
.
concat
(
integralActivityId
);
redisUtil
.
decr
(
redisKey
,
num
);
}
}
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