Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cloud-platform
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
youjj
cloud-platform
Commits
f19c10a6
Commit
f19c10a6
authored
Dec 07, 2019
by
libin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
抽奖过期时间设置
parent
6ddd65ec
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
39 additions
and
22 deletions
+39
-22
ActivityAttendanceRecordBiz.java
...fc/platform/activity/biz/ActivityAttendanceRecordBiz.java
+9
-4
ActivityPrizeBiz.java
...java/com/xxfc/platform/activity/biz/ActivityPrizeBiz.java
+30
-18
No files found.
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/biz/ActivityAttendanceRecordBiz.java
View file @
f19c10a6
...
@@ -22,6 +22,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
...
@@ -22,6 +22,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import
org.assertj.core.util.Lists
;
import
org.assertj.core.util.Lists
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.ValueOperations
;
import
org.springframework.data.redis.core.ValueOperations
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.scheduling.annotation.Async
;
...
@@ -35,6 +36,7 @@ import javax.servlet.ServletOutputStream;
...
@@ -35,6 +36,7 @@ import javax.servlet.ServletOutputStream;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.util.*
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
import
java.util.function.Supplier
;
import
java.util.function.Supplier
;
import
java.util.stream.Stream
;
import
java.util.stream.Stream
;
...
@@ -54,6 +56,9 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
...
@@ -54,6 +56,9 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
private
final
RedisTemplate
<
String
,
Object
>
redisTemplate
;
private
final
RedisTemplate
<
String
,
Object
>
redisTemplate
;
@Value
(
"${lottery.expire.days:60}"
)
private
int
expirDays
;
public
void
attendActivity
(
Integer
activityId
,
String
activityName
,
AppUserDTO
appUserDTO
)
{
public
void
attendActivity
(
Integer
activityId
,
String
activityName
,
AppUserDTO
appUserDTO
)
{
ActivityAttendanceRecord
record
=
new
ActivityAttendanceRecord
();
ActivityAttendanceRecord
record
=
new
ActivityAttendanceRecord
();
record
.
setActivityId
(
activityId
);
record
.
setActivityId
(
activityId
);
...
@@ -73,8 +78,8 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
...
@@ -73,8 +78,8 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
String
onlineKey
=
String
.
format
(
"%d:%d:%d"
,
appUserDTO
.
getUserid
(),
activityId
,
PrizeTypeEnum
.
ONLINE
.
getCode
());
String
onlineKey
=
String
.
format
(
"%d:%d:%d"
,
appUserDTO
.
getUserid
(),
activityId
,
PrizeTypeEnum
.
ONLINE
.
getCode
());
String
localeKey
=
String
.
format
(
"%d:%d:%d"
,
appUserDTO
.
getUserid
(),
activityId
,
PrizeTypeEnum
.
LOCALE
.
getCode
());
String
localeKey
=
String
.
format
(
"%d:%d:%d"
,
appUserDTO
.
getUserid
(),
activityId
,
PrizeTypeEnum
.
LOCALE
.
getCode
());
redisTemplate
.
delete
(
Arrays
.
asList
(
onlineKey
,
localeKey
));
redisTemplate
.
delete
(
Arrays
.
asList
(
onlineKey
,
localeKey
));
valueOperations
.
set
(
onlineKey
,
1L
);
valueOperations
.
set
(
onlineKey
,
1L
,
expirDays
,
TimeUnit
.
DAYS
);
valueOperations
.
set
(
localeKey
,
1L
);
valueOperations
.
set
(
localeKey
,
1L
,
expirDays
,
TimeUnit
.
DAYS
);
}
}
}
}
...
@@ -130,11 +135,11 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
...
@@ -130,11 +135,11 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
return
false
;
return
false
;
}
}
if
(
prizeType
==
PrizeTypeEnum
.
ONLINE
.
getCode
()){
if
(
prizeType
==
PrizeTypeEnum
.
ONLINE
.
getCode
()){
valueOperations
.
set
(
String
.
format
(
"%d:%d:%d"
,
userid
,
activityId
,
prizeType
),
activityAttendanceRecord
.
getOnlineLotteryNum
());
valueOperations
.
set
(
String
.
format
(
"%d:%d:%d"
,
userid
,
activityId
,
prizeType
),
activityAttendanceRecord
.
getOnlineLotteryNum
()
,
expirDays
,
TimeUnit
.
DAYS
);
return
activityAttendanceRecord
.
getOnlineLotteryNum
()>
0
;
return
activityAttendanceRecord
.
getOnlineLotteryNum
()>
0
;
}
}
if
(
prizeType
==
PrizeTypeEnum
.
LOCALE
.
getCode
()){
if
(
prizeType
==
PrizeTypeEnum
.
LOCALE
.
getCode
()){
valueOperations
.
set
(
String
.
format
(
"%d:%d:%d"
,
userid
,
activityId
,
prizeType
),
activityAttendanceRecord
.
getLocaleLotteryNum
());
valueOperations
.
set
(
String
.
format
(
"%d:%d:%d"
,
userid
,
activityId
,
prizeType
),
activityAttendanceRecord
.
getLocaleLotteryNum
()
,
expirDays
,
TimeUnit
.
DAYS
);
return
activityAttendanceRecord
.
getLocaleLotteryNum
()>
0
;
return
activityAttendanceRecord
.
getLocaleLotteryNum
()>
0
;
}
}
return
false
;
return
false
;
...
...
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/biz/ActivityPrizeBiz.java
View file @
f19c10a6
...
@@ -22,6 +22,7 @@ import org.apache.commons.collections.CollectionUtils;
...
@@ -22,6 +22,7 @@ import org.apache.commons.collections.CollectionUtils;
import
org.redisson.api.RLock
;
import
org.redisson.api.RLock
;
import
org.springframework.aop.framework.AopContext
;
import
org.springframework.aop.framework.AopContext
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.ValueOperations
;
import
org.springframework.data.redis.core.ValueOperations
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.scheduling.annotation.Async
;
...
@@ -55,7 +56,9 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -55,7 +56,9 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
@Resource
(
name
=
"redisTemplate"
)
@Resource
(
name
=
"redisTemplate"
)
private
ValueOperations
<
String
,
Object
>
valueOperations
;
private
ValueOperations
<
String
,
Object
>
valueOperations
;
private
final
RedissonLock
redissonLock
;
private
final
RedissonLock
redissonLock
;
private
final
String
LOTTERY_PRE_KEY
=
"lottery:"
;
@Value
(
"${lottery.expire.days:60}"
)
private
int
expirDays
;
private
static
final
String
LOTTERY_PRE_KEY
=
"lottery:"
;
/**
/**
* 查询奖品
* 查询奖品
...
@@ -107,7 +110,7 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -107,7 +110,7 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
* @param prizeType
* @param prizeType
* @return
* @return
*/
*/
@Cache
(
key
=
LOTTERY_PRE_KEY
+
"{1}"
)
@Cache
(
key
=
LOTTERY_PRE_KEY
+
"{1}"
)
public
List
<
ActivityPrize
>
findActivityPrizeByType
(
Integer
prizeType
)
{
public
List
<
ActivityPrize
>
findActivityPrizeByType
(
Integer
prizeType
)
{
Example
example
=
new
Example
(
ActivityPrize
.
class
);
Example
example
=
new
Example
(
ActivityPrize
.
class
);
example
.
orderBy
(
"serialNumber"
).
asc
();
example
.
orderBy
(
"serialNumber"
).
asc
();
...
@@ -119,10 +122,10 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -119,10 +122,10 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
}
}
for
(
ActivityPrize
activityPrize
:
activityPrizes
)
{
for
(
ActivityPrize
activityPrize
:
activityPrizes
)
{
if
(
activityPrize
.
getTotalStock
()
!=
null
)
{
if
(
activityPrize
.
getTotalStock
()
!=
null
)
{
String
prizeStockKey
=
String
.
format
(
"%s%d:%d"
,
LOTTERY_PRE_KEY
,
prizeType
,
activityPrize
.
getSerialNumber
());
String
prizeStockKey
=
String
.
format
(
"%s%d:%d"
,
LOTTERY_PRE_KEY
,
prizeType
,
activityPrize
.
getSerialNumber
());
redisTemplate
.
delete
(
prizeStockKey
);
redisTemplate
.
delete
(
prizeStockKey
);
valueOperations
.
set
(
prizeStockKey
,
Integer
.
valueOf
(
activityPrize
.
getTotalStock
().
toString
()));
valueOperations
.
set
(
prizeStockKey
,
Integer
.
valueOf
(
activityPrize
.
getTotalStock
().
toString
())
,
expirDays
,
TimeUnit
.
DAYS
);
}
}
}
}
return
activityPrizes
;
return
activityPrizes
;
...
@@ -137,10 +140,10 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -137,10 +140,10 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
* @param appUserDTO
* @param appUserDTO
* @return
* @return
*/
*/
public
LotteryVo
activityLottery
(
Integer
activityId
,
Integer
prizeType
,
String
lotteryDate
,
AppUserDTO
appUserDTO
)
{
public
LotteryVo
activityLottery
(
Integer
activityId
,
Integer
prizeType
,
String
lotteryDate
,
AppUserDTO
appUserDTO
)
{
LotteryVo
lotteryVo
=
new
LotteryVo
();
LotteryVo
lotteryVo
=
new
LotteryVo
();
List
<
ActivityPrize
>
activityPrizes
=
((
ActivityPrizeBiz
)
AopContext
.
currentProxy
()).
findActivityPrizeByType
(
prizeType
);
List
<
ActivityPrize
>
activityPrizes
=
((
ActivityPrizeBiz
)
AopContext
.
currentProxy
()).
findActivityPrizeByType
(
prizeType
);
ActivityPrize
notActivityPrize
=
activityPrizes
.
stream
().
filter
(
x
->
x
.
getPrizeGoodsType
()
==
0
).
findFirst
().
orElseGet
(()
->
{
ActivityPrize
notActivityPrize
=
activityPrizes
.
stream
().
filter
(
x
->
x
.
getPrizeGoodsType
()
==
0
).
findFirst
().
orElseGet
(()
->
{
ActivityPrize
activityPrize
=
new
ActivityPrize
();
ActivityPrize
activityPrize
=
new
ActivityPrize
();
activityPrize
.
setName
(
"谢谢参与"
);
activityPrize
.
setName
(
"谢谢参与"
);
activityPrize
.
setPrizeGoodsType
(
PrizeGoodsTypeEnum
.
NO_PRIZE
.
getCode
());
activityPrize
.
setPrizeGoodsType
(
PrizeGoodsTypeEnum
.
NO_PRIZE
.
getCode
());
...
@@ -150,19 +153,20 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -150,19 +153,20 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
});
});
String
lotteryNumKey
=
String
.
format
(
"%d:%d:%d"
,
appUserDTO
.
getUserid
(),
activityId
,
prizeType
);
String
lotteryNumKey
=
String
.
format
(
"%d:%d:%d"
,
appUserDTO
.
getUserid
(),
activityId
,
prizeType
);
Object
lotteryNum
=
valueOperations
.
get
(
lotteryNumKey
);
Object
lotteryNum
=
valueOperations
.
get
(
lotteryNumKey
);
boolean
hasLotteryNum
=
lotteryNum
==
null
?
activityAttendanceRecordBiz
.
hasNumberOfLuckyDrawByType
(
activityId
,
prizeType
,
appUserDTO
.
getUserid
()):((
Integer
)
lotteryNum
)
>
0
;
boolean
hasLotteryNum
=
lotteryNum
==
null
?
activityAttendanceRecordBiz
.
hasNumberOfLuckyDrawByType
(
activityId
,
prizeType
,
appUserDTO
.
getUserid
())
:
((
Integer
)
lotteryNum
)
>
0
;
if
(
hasLotteryNum
)
{
if
(
hasLotteryNum
)
{
//更改抽奖次数
activityAttendanceRecordBiz
.
updateLotteryNumByActivityIdAndUserIdAndPrizeType
(
activityId
,
appUserDTO
.
getUserid
(),
prizeType
);
valueOperations
.
decrement
(
lotteryNumKey
);
//抽奖
//抽奖
int
index
=
LotteryUtils
.
getrandomIndex
(
activityPrizes
);
int
index
=
LotteryUtils
.
getrandomIndex
(
activityPrizes
);
//获取对应的奖品
//获取对应的奖品
ActivityPrize
activityPrize
=
activityPrizes
.
get
(
index
);
ActivityPrize
activityPrize
=
activityPrizes
.
get
(
index
);
//判断是否设置最大奖品数
//判断是否设置最大奖品数
(谢谢参与排除)
if
(
activityPrize
.
getDayMaxUse
()
!=
null
)
{
if
(
activityPrize
.
getDayMaxUse
()
!=
null
&&
activityPrize
.
getPrizeGoodsType
()
!=
PrizeGoodsTypeEnum
.
NO_PRIZE
.
getCode
()
)
{
String
key
=
String
.
format
(
"%s:%s%d:%s"
,
lotteryDate
,
LOTTERY_PRE_KEY
,
activityId
,
activityPrize
.
getSerialNumber
());
String
key
=
String
.
format
(
"%s:%s%d:%s"
,
lotteryDate
,
LOTTERY_PRE_KEY
,
activityId
,
activityPrize
.
getSerialNumber
());
Long
prizeDayUseStock
=
valueOperations
.
increment
(
key
);
Long
prizeDayUseStock
=
valueOperations
.
increment
(
key
);
//第一次时设置每天奖品份数的过期时间为1天
if
(
prizeDayUseStock
.
intValue
()
==
1
)
{
redisTemplate
.
expire
(
key
,
1
,
TimeUnit
.
DAYS
);
}
//达到日上限
//达到日上限
if
(
prizeDayUseStock
.
intValue
()
>
activityPrize
.
getDayMaxUse
())
{
if
(
prizeDayUseStock
.
intValue
()
>
activityPrize
.
getDayMaxUse
())
{
activityPrize
=
notActivityPrize
;
activityPrize
=
notActivityPrize
;
...
@@ -183,17 +187,17 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -183,17 +187,17 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
activityWinningRecord
.
setPrizeType
(
prizeType
);
activityWinningRecord
.
setPrizeType
(
prizeType
);
activityWinningRecord
.
setUserId
(
appUserDTO
.
getUserid
());
activityWinningRecord
.
setUserId
(
appUserDTO
.
getUserid
());
activityWinningRecord
.
setHasWinning
(
0
);
activityWinningRecord
.
setHasWinning
(
0
);
boolean
hasStock
=
activityPrize
.
getPrizeGoodsType
()
!=
PrizeGoodsTypeEnum
.
NO_PRIZE
.
getCode
()
&&
activityPrize
.
getTotalStock
()
!=
0
&&
prizeStock
!=
null
&&
(
Integer
)
prizeStock
!=
0
;
boolean
hasStock
=
activityPrize
.
getPrizeGoodsType
()
!=
PrizeGoodsTypeEnum
.
NO_PRIZE
.
getCode
()
&&
activityPrize
.
getTotalStock
()
!=
0
&&
prizeStock
!=
null
&&
(
Integer
)
prizeStock
!=
0
;
if
(
hasStock
)
{
if
(
hasStock
)
{
String
key
=
String
.
format
(
"%s%d:%d:%d"
,
LOTTERY_PRE_KEY
,
activityId
,
prizeType
,
activityPrize
.
getSerialNumber
());
String
key
=
String
.
format
(
"%s%d:%d:%d"
,
LOTTERY_PRE_KEY
,
activityId
,
prizeType
,
activityPrize
.
getSerialNumber
());
RLock
rLock
=
redissonLock
.
getRLock
(
key
);
RLock
rLock
=
redissonLock
.
getRLock
(
key
);
try
{
try
{
boolean
isSuccess
=
rLock
.
tryLock
(
1
,
2
,
TimeUnit
.
SECONDS
);
boolean
isSuccess
=
rLock
.
tryLock
(
1
,
2
,
TimeUnit
.
SECONDS
);
if
(
isSuccess
)
{
if
(
isSuccess
)
{
prizeStock
=
valueOperations
.
get
(
prizeStockKey
);
prizeStock
=
valueOperations
.
get
(
prizeStockKey
);
log
.
info
(
"tryLock success, key = [{}]"
,
key
);
log
.
info
(
"tryLock success, key = [{}]"
,
key
);
try
{
try
{
if
(
prizeStock
!=
null
&&
(
Integer
)
prizeStock
>
0
)
{
if
(
prizeStock
!=
null
&&
(
Integer
)
prizeStock
>
0
)
{
//更新库存
//更新库存
((
ActivityPrizeBiz
)
AopContext
.
currentProxy
()).
updatePrizeStock
(
prizeType
,
activityPrize
.
getSerialNumber
());
((
ActivityPrizeBiz
)
AopContext
.
currentProxy
()).
updatePrizeStock
(
prizeType
,
activityPrize
.
getSerialNumber
());
//更新缓存库存
//更新缓存库存
...
@@ -221,7 +225,12 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -221,7 +225,12 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
}
}
if
(
PrizeTypeEnum
.
LOCALE
.
getCode
()
==
prizeType
)
{
if
(
PrizeTypeEnum
.
LOCALE
.
getCode
()
==
prizeType
)
{
//兑奖码生成
//兑奖码生成
String
expiryDateCode
=
ReferralCodeUtil
.
encode
(
valueOperations
.
increment
(
String
.
valueOf
(
activityId
)).
intValue
());
String
expireDateCodeKey
=
String
.
format
(
"%s:%s%d"
,
lotteryDate
.
substring
(
0
,
4
),
LOTTERY_PRE_KEY
,
activityId
);
Long
expireDateCodeCounter
=
valueOperations
.
increment
(
expireDateCodeKey
);
if
(
expireDateCodeCounter
==
1
)
{
redisTemplate
.
expire
(
expireDateCodeKey
,
expirDays
,
TimeUnit
.
DAYS
);
}
String
expiryDateCode
=
ReferralCodeUtil
.
encode
(
expireDateCodeCounter
.
intValue
());
activityWinningRecord
.
setExpiryDateCode
(
expiryDateCode
);
activityWinningRecord
.
setExpiryDateCode
(
expiryDateCode
);
lotteryVo
.
setExpiryDateCode
(
expiryDateCode
);
lotteryVo
.
setExpiryDateCode
(
expiryDateCode
);
}
}
...
@@ -238,7 +247,10 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -238,7 +247,10 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
activityWinningRecord
.
setPrizeName
(
activityPrize
.
getName
());
activityWinningRecord
.
setPrizeName
(
activityPrize
.
getName
());
activityWinningRecordBiz
.
saveRecord
(
activityWinningRecord
);
activityWinningRecordBiz
.
saveRecord
(
activityWinningRecord
);
lotteryVo
.
setSerialNumber
(
activityPrize
.
getSerialNumber
());
lotteryVo
.
setSerialNumber
(
activityPrize
.
getSerialNumber
());
}
else
{
//更改对应抽奖类型的抽奖次数
activityAttendanceRecordBiz
.
updateLotteryNumByActivityIdAndUserIdAndPrizeType
(
activityId
,
appUserDTO
.
getUserid
(),
prizeType
);
valueOperations
.
decrement
(
lotteryNumKey
);
}
else
{
lotteryVo
.
setMessage
(
"抽奖次数已用完!!!"
);
lotteryVo
.
setMessage
(
"抽奖次数已用完!!!"
);
}
}
return
lotteryVo
;
return
lotteryVo
;
...
...
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