记得上下班打卡 | 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
bfefa70a
Commit
bfefa70a
authored
Nov 18, 2021
by
jiangxiulong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Lock
parent
a97f895e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
117 additions
and
120 deletions
+117
-120
SweetIntegralActivityDrawServiceImpl.java
...et/service/impl/SweetIntegralActivityDrawServiceImpl.java
+117
-120
No files found.
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/service/impl/SweetIntegralActivityDrawServiceImpl.java
View file @
bfefa70a
...
@@ -67,136 +67,133 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
...
@@ -67,136 +67,133 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
@Override
@Override
public
ResponseDto
<
SweetIntegralActivityPrizeVo
>
create
(
String
integralActivityId
)
{
public
ResponseDto
<
SweetIntegralActivityPrizeVo
>
create
(
String
integralActivityId
)
{
// TODO: 2021/10/26 看情况是否加锁 一个用户整个逻辑单进程
Map
tokenClaims
=
CurrentUtil
.
getTokenClaims
();
boolean
isLock
=
redisDataUtils
.
setIntegralDrawLock
(
"1111"
);
String
userId
=
StringUtils
.
defaultString
((
String
.
valueOf
(
tokenClaims
.
get
(
"sub"
))),
""
);
// 加锁
boolean
isLock
=
redisDataUtils
.
setIntegralDrawLock
(
userId
);
if
(!
isLock
)
{
if
(!
isLock
)
{
return
ResponseDto
.
failure
(
"
太快了
"
);
return
ResponseDto
.
failure
(
"
您的手速太快啦~
"
);
}
else
{
}
else
{
try
{
try
{
System
.
out
.
println
(
"获取锁成功,开始执行逻辑"
);
String
nickname
=
StringUtils
.
defaultString
((
String
.
valueOf
(
tokenClaims
.
get
(
"nickname"
))),
""
);
Thread
.
sleep
(
2000
);
return
ResponseDto
.
success
();
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"程序执行异常{}"
);
return
ResponseDto
.
failure
(
"异常了"
);
}
finally
{
redisDataUtils
.
delIntegralDrawLock
(
"1111"
);
System
.
out
.
println
(
"执行完毕。释放锁完成;"
);
}
}
/*Map tokenClaims = CurrentUtil.getTokenClaims();
String userId = StringUtils.defaultString((String.valueOf(tokenClaims.get("sub"))), "");
String nickname = StringUtils.defaultString((String.valueOf(tokenClaims.get("nickname"))), "");
IntegralActivityVo integralActivity = redisDataUtils.getIntegralActivityInfo(integralActivityId);
IntegralActivityVo
integralActivity
=
redisDataUtils
.
getIntegralActivityInfo
(
integralActivityId
);
if (integralActivity.getIsOnline() == 1) {
if
(
integralActivity
.
getIsOnline
()
==
1
)
{
return ResponseDto.failure("该活动已下线");
return
ResponseDto
.
failure
(
"该活动已下线"
);
}
}
if (integralActivity.getTimeType() == 2) {
if
(
integralActivity
.
getTimeType
()
==
2
)
{
LocalDateTime startTime = integralActivity.getStartTime();
LocalDateTime
startTime
=
integralActivity
.
getStartTime
();
LocalDateTime endTime = integralActivity.getEndTime();
LocalDateTime
endTime
=
integralActivity
.
getEndTime
();
LocalDateTime nowTime = LocalDateTime.now();
LocalDateTime
nowTime
=
LocalDateTime
.
now
();
if (nowTime.isAfter(endTime)) { // 已结束
if
(
nowTime
.
isAfter
(
endTime
))
{
// 已结束
return ResponseDto.failure("该活动已结束");
return
ResponseDto
.
failure
(
"该活动已结束"
);
}
}
if (startTime.isAfter(nowTime)) { // 未开始
if
(
startTime
.
isAfter
(
nowTime
))
{
// 未开始
return ResponseDto.failure("该活动未开始");
return
ResponseDto
.
failure
(
"该活动未开始"
);
}
}
}
}
// 判断用户积分是否>=integralActivity.setActivityNum();
// 判断用户积分是否>=integralActivity.setActivityNum();
ResponseDto<StoneScoreListDto> userInfoRes = feignStoneIntegralClient.stoneUserInfo();
ResponseDto
<
StoneScoreListDto
>
userInfoRes
=
feignStoneIntegralClient
.
stoneUserInfo
();
if (!userInfoRes.getCode().equals("0")) {
if
(!
userInfoRes
.
getCode
().
equals
(
"0"
))
{
return ResponseDto.failure("获取用户积分数据失败");
return
ResponseDto
.
failure
(
"获取用户积分数据失败"
);
} else {
}
else
{
StoneScoreListDto userInfoData = userInfoRes.getData();
StoneScoreListDto
userInfoData
=
userInfoRes
.
getData
();
if (userInfoData.getStatus() == 2) {
if
(
userInfoData
.
getStatus
()
==
2
)
{
return ResponseDto.failure("您的积分账户已被冻结!");
return
ResponseDto
.
failure
(
"您的积分账户已被冻结!"
);
} else {
}
else
{
BigDecimal scoreRest = userInfoData.getScoreRest();
BigDecimal
scoreRest
=
userInfoData
.
getScoreRest
();
if (scoreRest.compareTo(BigDecimal.valueOf(integralActivity.getActivityNum())) == -1) {
if
(
scoreRest
.
compareTo
(
BigDecimal
.
valueOf
(
integralActivity
.
getActivityNum
()))
==
-
1
)
{
return ResponseDto.failure("您的积分账户余额不足!");
return
ResponseDto
.
failure
(
"您的积分账户余额不足!"
);
}
}
}
}
}
}
// 如果库存没了 限制的中奖人数到了就从列表剔出 列表为空就都没有库存了
// 如果库存没了 限制的中奖人数到了就从列表剔出 列表为空就都没有库存了
List<SweetIntegralActivityPrize> prizeList = integralActivity.getPrizeList();
List
<
SweetIntegralActivityPrize
>
prizeList
=
integralActivity
.
getPrizeList
();
ArrayList<SweetIntegralActivityPrize> sweetIntegralActivityPrizeArrayList = SweetNewObjectUtil.getSweetIntegralActivityPrizeArrayList();
ArrayList
<
SweetIntegralActivityPrize
>
sweetIntegralActivityPrizeArrayList
=
SweetNewObjectUtil
.
getSweetIntegralActivityPrizeArrayList
();
for (SweetIntegralActivityPrize info : prizeList) {
for
(
SweetIntegralActivityPrize
info
:
prizeList
)
{
int integralActivityPrizeNum = redisDataUtils.getIntegralActivityPrizeNum(integralActivityId, info.getPrizeId());
int
integralActivityPrizeNum
=
redisDataUtils
.
getIntegralActivityPrizeNum
(
integralActivityId
,
info
.
getPrizeId
());
int integralActivityPrizeWinnersNum = redisDataUtils.getIntegralActivityPrizeWinnersNum(integralActivityId, info.getPrizeId());
int
integralActivityPrizeWinnersNum
=
redisDataUtils
.
getIntegralActivityPrizeWinnersNum
(
integralActivityId
,
info
.
getPrizeId
());
if (integralActivityPrizeNum > 0 && integralActivityPrizeWinnersNum > 0) {
if
(
integralActivityPrizeNum
>
0
&&
integralActivityPrizeWinnersNum
>
0
)
{
sweetIntegralActivityPrizeArrayList.add(info);
sweetIntegralActivityPrizeArrayList
.
add
(
info
);
}
}
}
}
if (CollectionUtils.isEmpty(sweetIntegralActivityPrizeArrayList)) {
if
(
CollectionUtils
.
isEmpty
(
sweetIntegralActivityPrizeArrayList
))
{
return ResponseDto.failure("活动太火爆了,奖品已经没有库存啦~");
return
ResponseDto
.
failure
(
"活动太火爆了,奖品已经没有库存啦~"
);
}
}
SweetIntegralActivityPrize sweetIntegralActivityPrize = this.lotteryDraw(sweetIntegralActivityPrizeArrayList);
SweetIntegralActivityPrize
sweetIntegralActivityPrize
=
this
.
lotteryDraw
(
sweetIntegralActivityPrizeArrayList
);
SweetIntegralActivityPrizeVo sweetIntegralActivityPrizeVo = SweetIntegralActivityPrizeVo.getNew().copy(sweetIntegralActivityPrize);
SweetIntegralActivityPrizeVo
sweetIntegralActivityPrizeVo
=
SweetIntegralActivityPrizeVo
.
getNew
().
copy
(
sweetIntegralActivityPrize
);
// 减库存 顺便判断库存是否够 todo 这块可能不能这么判断 后台增加库存的时候如果是-1会丢库存 实际-1这个并没有发出
// 减库存 顺便判断库存是否够 -1的时候回滚回去
long activityPrizeNum = redisDataUtils.decrIntegralActivityPrizeNum(integralActivityId, sweetIntegralActivityPrizeVo.getPrizeId(), 1);
long
activityPrizeNum
=
redisDataUtils
.
decrIntegralActivityPrizeNum
(
integralActivityId
,
sweetIntegralActivityPrizeVo
.
getPrizeId
(),
1
);
long activityPrizeWinnersNum = redisDataUtils.decrIntegralActivityPrizeWinnersNum(integralActivityId, sweetIntegralActivityPrizeVo.getPrizeId(), 1);
long
activityPrizeWinnersNum
=
redisDataUtils
.
decrIntegralActivityPrizeWinnersNum
(
integralActivityId
,
sweetIntegralActivityPrizeVo
.
getPrizeId
(),
1
);
if (activityPrizeNum < 0) {// 库存不够了
if
(
activityPrizeNum
<
0
)
{
// 库存不够了
redisDataUtils.incrIntegralActivityPrizeNum(integralActivityId, sweetIntegralActivityPrizeVo.getPrizeId(), 1);
redisDataUtils
.
incrIntegralActivityPrizeNum
(
integralActivityId
,
sweetIntegralActivityPrizeVo
.
getPrizeId
(),
1
);
return ResponseDto.failure("活动太火爆了,奖品已经没有库存了!");
return
ResponseDto
.
failure
(
"活动太火爆了,奖品已经没有库存了!"
);
}
}
if (activityPrizeWinnersNum < 0) {// 库存不够了
if
(
activityPrizeWinnersNum
<
0
)
{
// 库存不够了
redisDataUtils.incrIntegralActivityPrizeWinnersNum(integralActivityId, sweetIntegralActivityPrizeVo.getPrizeId(), 1);
redisDataUtils
.
incrIntegralActivityPrizeWinnersNum
(
integralActivityId
,
sweetIntegralActivityPrizeVo
.
getPrizeId
(),
1
);
return ResponseDto.failure("活动太火爆了,奖品已经没有库存了~");
return
ResponseDto
.
failure
(
"活动太火爆了,奖品已经没有库存了~"
);
}
}
// 减积分
// 减积分
feignStoneIntegralClient.de2111(userId, integralActivity.getActivityNum(), integralActivity.getActivityTitle());
feignStoneIntegralClient
.
de2111
(
userId
,
integralActivity
.
getActivityNum
(),
integralActivity
.
getActivityTitle
());
// 抽奖入库
// 抽奖入库
String drawId = IDGenerator.nextSnowId();
String
drawId
=
IDGenerator
.
nextSnowId
();
IntegralActivityDrawVo integralActivityDrawVo = IntegralActivityDrawVo.getNew();
IntegralActivityDrawVo
integralActivityDrawVo
=
IntegralActivityDrawVo
.
getNew
();
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
(
sweetIntegralActivityPrize
.
getPrizeId
());
integralActivityDrawVo.setPrizeTitle(sweetIntegralActivityPrize.getPrizeTitle());
integralActivityDrawVo
.
setPrizeTitle
(
sweetIntegralActivityPrize
.
getPrizeTitle
());
integralActivityDrawVo.setPrizeType(sweetIntegralActivityPrize.getPrizeType());
integralActivityDrawVo
.
setPrizeType
(
sweetIntegralActivityPrize
.
getPrizeType
());
integralActivityDrawVo.setPrizeTypeNum(sweetIntegralActivityPrize.getPrizeTypeNum());
integralActivityDrawVo
.
setPrizeTypeNum
(
sweetIntegralActivityPrize
.
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
=
sweetIntegralActivityPrize
.
getPrizeType
();
if (prizeType == 2) {// 中奖积分
if
(
prizeType
==
2
)
{
// 中奖积分
// 增加积分
// 增加积分
feignStoneIntegralClient.in2111(userId, sweetIntegralActivityPrize.getPrizeTypeNum(), integralActivity.getActivityTitle());
feignStoneIntegralClient
.
in2111
(
userId
,
sweetIntegralActivityPrize
.
getPrizeTypeNum
(),
integralActivity
.
getActivityTitle
());
// 发放状态
// 发放状态
receivingStatus = 2;
receivingStatus
=
2
;
}
}
if (prizeType == 1) { // 谢谢惠顾
if
(
prizeType
==
1
)
{
// 谢谢惠顾
receivingStatus = 3;
receivingStatus
=
3
;
}
integralActivityDrawVo
.
setReceivingStatus
(
receivingStatus
);
// redis
redisDataUtils
.
setIntegralActivityDraw
(
integralActivityDrawVo
);
// mongo
mongoTemplate
.
insert
(
integralActivityDrawVo
,
IntegralActivityDrawVo
.
class
.
getSimpleName
());
// mysql 抽奖记录
LinkedList
<
String
>
sqls
=
CollectionUtil
.
linkedListString
();
LinkedList
<
Object
[]>
sqlsDataA
=
CollectionUtil
.
linkedListObjectArr
();
sqls
.
add
(
SqlMapping
.
get
(
"integral_activity_draw.insert"
));
sqlsDataA
.
add
(
new
Object
[]{
drawId
,
integralActivityId
,
integralActivity
.
getActivityNum
(),
sweetIntegralActivityPrize
.
getPrizeId
(),
sweetIntegralActivityPrize
.
getPrizeTitle
(),
sweetIntegralActivityPrize
.
getPrizeType
(),
sweetIntegralActivityPrize
.
getPrizeTypeNum
(),
sweetIntegralActivityPrize
.
getRelationId
(),
userId
,
nickname
,
receivingStatus
});
queueUtils
.
sendMsgByRedis
(
MQConst
.
SweetQueue
.
SWEET_INTEGRAL_ACTIVITY_DRAW
.
getKey
(),
SqlMapping
.
gets
(
sqls
,
sqlsDataA
));
return
ResponseDto
.
success
(
sweetIntegralActivityPrizeVo
);
}
catch
(
Exception
e
)
{
log
.
error
(
"积分抽奖异常 e:{}"
,
e
);
return
ResponseDto
.
failure
(
"操作失败,请稍后重试!"
);
}
finally
{
// 执行完毕。释放锁
redisDataUtils
.
delIntegralDrawLock
(
userId
);
}
}
}
integralActivityDrawVo.setReceivingStatus(receivingStatus);
// redis
redisDataUtils.setIntegralActivityDraw(integralActivityDrawVo);
// mongo
mongoTemplate.insert(integralActivityDrawVo, IntegralActivityDrawVo.class.getSimpleName());
// mysql 抽奖记录
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlsDataA = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("integral_activity_draw.insert"));
sqlsDataA.add(new Object[]{
drawId, integralActivityId, integralActivity.getActivityNum(),
sweetIntegralActivityPrize.getPrizeId(), sweetIntegralActivityPrize.getPrizeTitle(), sweetIntegralActivityPrize.getPrizeType(),
sweetIntegralActivityPrize.getPrizeTypeNum(), sweetIntegralActivityPrize.getRelationId(),
userId, nickname,
receivingStatus
});
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_INTEGRAL_ACTIVITY_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
return ResponseDto.success(sweetIntegralActivityPrizeVo);*/
}
}
@Override
@Override
...
...
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