Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
D
draw
Project
Project
Details
Activity
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
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
draw
draw
Commits
ad147fb5
Commit
ad147fb5
authored
Nov 11, 2022
by
邓吉芬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.多活动支持
parent
dabe3aab
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
198 additions
and
99 deletions
+198
-99
DrawController.java
src/main/java/com/miya/draw/controller/DrawController.java
+3
-3
AccountPrize.java
src/main/java/com/miya/draw/entity/AccountPrize.java
+4
-0
Activity.java
src/main/java/com/miya/draw/entity/Activity.java
+9
-9
Prize.java
src/main/java/com/miya/draw/entity/Prize.java
+3
-0
DrawManagerImpl.java
src/main/java/com/miya/draw/manager/DrawManagerImpl.java
+85
-54
IDrawManager.java
src/main/java/com/miya/draw/manager/IDrawManager.java
+6
-4
ActivityMapper.java
src/main/java/com/miya/draw/mapper/ActivityMapper.java
+2
-3
DrawClickRequest.java
src/main/java/com/miya/draw/request/DrawClickRequest.java
+5
-0
DrawUserInfoGainRequest.java
...n/java/com/miya/draw/request/DrawUserInfoGainRequest.java
+5
-0
MinePrizeGainRequest.java
...main/java/com/miya/draw/request/MinePrizeGainRequest.java
+6
-0
PrizeDrawListRequest.java
...main/java/com/miya/draw/request/PrizeDrawListRequest.java
+7
-0
IAccountPrizeService.java
...main/java/com/miya/draw/service/IAccountPrizeService.java
+9
-11
IActivityService.java
src/main/java/com/miya/draw/service/IActivityService.java
+18
-0
AccountPrizeServiceImpl.java
...a/com/miya/draw/service/impl/AccountPrizeServiceImpl.java
+10
-15
ActivityServiceImpl.java
.../java/com/miya/draw/service/impl/ActivityServiceImpl.java
+26
-0
No files found.
src/main/java/com/miya/draw/controller/DrawController.java
View file @
ad147fb5
...
...
@@ -58,7 +58,7 @@ public class DrawController {
@ApiOperation
(
value
=
"用户点击活抽奖"
)
@PostMapping
(
value
=
"draw/click"
)
public
RestResult
<
DrawClickResponse
>
drawClick
(
@RequestBody
@Valid
DrawClickRequest
request
)
throws
InterruptedException
{
DrawModel
drawModel
=
drawManager
.
drawClick
(
request
.
getPhone
());
DrawModel
drawModel
=
drawManager
.
drawClick
(
request
.
getPhone
()
,
request
.
getActivityId
()
);
BeanCopier
<
DrawClickResponse
>
beanCopier
=
BeanCopier
.
create
(
drawModel
,
DrawClickResponse
.
builder
().
build
(),
CopyOptions
.
create
());
DrawClickResponse
response
=
beanCopier
.
copy
();
return
RestResultUtil
.
createSuccessResult
(
response
);
...
...
@@ -68,7 +68,7 @@ public class DrawController {
@ApiOperation
(
value
=
"获得我的奖品"
)
@PostMapping
(
value
=
"gain/mine/prize"
)
public
RestResult
<
List
<
MinePrizeGainResponse
>>
gainMinePrize
(
@RequestBody
@Valid
MinePrizeGainRequest
request
)
{
List
<
DrawModel
>
drawModelList
=
drawManager
.
listMinePrizeList
(
request
.
getPhone
()
);
List
<
DrawModel
>
drawModelList
=
drawManager
.
listMinePrizeList
(
request
);
List
<
MinePrizeGainResponse
>
minePrizeGainResponseList
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
drawModelList
))
{
minePrizeGainResponseList
=
drawModelList
.
stream
().
map
(
drawModel
->
{
...
...
@@ -94,7 +94,7 @@ public class DrawController {
@ApiOperation
(
value
=
"整体中奖情况"
)
@PostMapping
(
value
=
"prize/draw/list"
)
public
RestResult
<
List
<
PrizeDrawListResponse
>>
prizeDrawList
(
@RequestBody
@Valid
PrizeDrawListRequest
request
)
{
List
<
DrawModel
>
drawModelList
=
drawManager
.
listAllWinningInfo
(
request
.
getSize
()
);
List
<
DrawModel
>
drawModelList
=
drawManager
.
listAllWinningInfo
(
request
);
drawModelList
.
forEach
(
x
->
{
if
(
StringUtils
.
isNotBlank
(
x
.
getAccountName
())){
...
...
src/main/java/com/miya/draw/entity/AccountPrize.java
View file @
ad147fb5
package
com
.
miya
.
draw
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
...
...
@@ -73,5 +74,8 @@ public class AccountPrize implements Serializable {
@ApiModelProperty
(
value
=
"更新时间"
)
private
LocalDateTime
updateTime
;
@TableField
(
exist
=
false
)
private
Integer
count
;
}
src/main/java/com/miya/draw/entity/Activity
Config
.java
→
src/main/java/com/miya/draw/entity/Activity.java
View file @
ad147fb5
...
...
@@ -19,16 +19,16 @@ import java.time.LocalDateTime;
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@ApiModel
(
value
=
"activity
_config
对象"
,
description
=
""
)
@TableName
(
"activity
_config
"
)
public
class
Activity
Config
implements
Serializable
{
@ApiModel
(
value
=
"activity对象"
,
description
=
""
)
@TableName
(
"activity"
)
public
class
Activity
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
@ApiModelProperty
(
value
=
"活动
Id
"
)
private
Long
activityId
;
@ApiModelProperty
(
value
=
"活动
名称
"
)
private
String
name
;
@ApiModelProperty
(
value
=
"抽奖方式 1满额抽奖 2足量抽奖"
)
private
Integer
raffle
;
...
...
@@ -54,11 +54,11 @@ public class ActivityConfig implements Serializable {
@ApiModelProperty
(
value
=
"0 不限制门店 1限制门店"
)
private
Integer
activityStoreStatus
;
@ApiModelProperty
(
value
=
"
活动是否有效 0无效 1有效
"
)
private
Integer
validStatus
;
@ApiModelProperty
(
value
=
"
开始时间
"
)
private
LocalDateTime
startTime
;
@ApiModelProperty
(
value
=
"
单个用户限制奖品Id,多个用逗号隔开
"
)
private
Lo
ng
prizeId
;
@ApiModelProperty
(
value
=
"
结束时间
"
)
private
Lo
calDateTime
endTime
;
@ApiModelProperty
(
value
=
"创建时间"
)
private
LocalDateTime
createTime
;
...
...
src/main/java/com/miya/draw/entity/Prize.java
View file @
ad147fb5
...
...
@@ -53,6 +53,9 @@ public class Prize implements Serializable {
@ApiModelProperty
(
value
=
"活动id"
)
private
Long
activityId
;
@ApiModelProperty
(
value
=
"限抽 0表示不限"
)
private
Integer
astrict
;
@ApiModelProperty
(
value
=
"是否有效 0无效 1有效"
)
private
Integer
validStatus
;
...
...
src/main/java/com/miya/draw/manager/DrawManagerImpl.java
View file @
ad147fb5
...
...
@@ -10,8 +10,9 @@ import com.miya.draw.entity.*;
import
com.miya.draw.enums.*
;
import
com.miya.draw.model.DrawModel
;
import
com.miya.draw.request.DrawUserInfoGainRequest
;
import
com.miya.draw.request.MinePrizeGainRequest
;
import
com.miya.draw.request.PrizeDrawListRequest
;
import
com.miya.draw.service.*
;
import
com.miya.draw.service.impl.ActivityConfigServiceImpl
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
...
...
@@ -63,7 +64,7 @@ public class DrawManagerImpl implements IDrawManager {
private
IOtherManager
otherManager
;
@Autowired
private
IActivity
ConfigService
activityConfig
Service
;
private
IActivity
Service
activity
Service
;
@Override
public
DrawModel
gainActivityUserInfo
(
DrawUserInfoGainRequest
request
)
{
...
...
@@ -76,40 +77,49 @@ public class DrawManagerImpl implements IDrawManager {
}
catch
(
Exception
e
)
{
log
.
error
(
"保存用户信息出错:{}"
,
e
.
getMessage
());
}
Activity
Config
activityConfig
=
activityConfigService
.
getConfig
(
);
if
(
activity
Config
==
null
){
Activity
activity
=
activityService
.
getById
(
request
.
getActivityId
()
);
if
(
activity
==
null
){
throw
new
BusinessException
(
ErrorEnum
.
SYSTEM_EXP
,
"未获取活动有效配置"
);
}
LocalDateTime
nowTime
=
LocalDateTime
.
now
();
LocalDateTime
start
=
nowTime
.
minusDays
(
activity
Config
.
getValidTime
()-
1
);
LocalDateTime
start
=
nowTime
.
minusDays
(
activity
.
getValidTime
()-
1
);
start
=
LocalDateTimeUtil
.
beginOfDay
(
start
);
LocalDateTime
end
=
LocalDateTimeUtil
.
endOfDay
(
nowTime
);
Integer
maxDrawCountLimit
=
activityConfig
.
getDrawMaxCount
();
Integer
alreadyDrawCount
=
accountPrizeService
.
gainAlreadyDrawCount
(
request
.
getPhone
(),
activityConfig
.
getActivityId
(),
start
,
end
);
List
<
String
>
storeIdList
=
activityStoreService
.
listAllActivityStoreId
(
activityConfig
.
getActivityId
());
List
<
String
>
goodCodeList
=
activityGoodsService
.
listAllActivityGoods
(
activityConfig
.
getActivityId
());
List
<
SyncTrade
>
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
request
.
getPhone
(),
start
,
end
,
storeIdList
,
goodCodeList
);
Integer
maxDrawCountLimit
=
activity
.
getDrawMaxCount
();
//获取已抽奖信息
Integer
alreadyDrawCount
=
accountPrizeService
.
gainAlreadyDrawCount
(
request
.
getPhone
(),
activity
.
getId
(),
start
,
end
);
List
<
String
>
goodCodeList
=
activityGoodsService
.
listAllActivityGoods
(
activity
.
getId
());
//获取订单信息
List
<
SyncTrade
>
buyGoodList
;
if
(
activity
.
getActivityStoreStatus
()
==
ActivityStoreStatusEnum
.
NO_CONFINE
.
getCode
()
){
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
request
.
getPhone
(),
start
,
end
,
null
,
goodCodeList
);
}
else
{
List
<
String
>
storeIdList
=
activityStoreService
.
listAllActivityStoreId
(
activity
.
getId
());
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
request
.
getPhone
(),
start
,
end
,
storeIdList
,
goodCodeList
);
}
BigDecimal
buyTotal
=
gainBuyTotal
(
buyGoodList
);
Long
purchasedAmount
=
buyTotal
.
multiply
(
BigDecimal
.
valueOf
(
100
)).
longValue
();
Integer
drawCountTotal
=
0
;
if
(
activity
Config
.
getRaffle
()==
RaffleEnum
.
AMOUNTUNIT
.
getCode
()){
if
(
activity
.
getRaffle
()==
RaffleEnum
.
AMOUNTUNIT
.
getCode
()){
buyTotal
=
getAmountTotal
(
buyGoodList
);
drawCountTotal
=
buyTotal
.
divide
(
new
BigDecimal
(
activity
Config
.
getAmountUnit
()),
RoundingMode
.
DOWN
).
intValue
();
drawCountTotal
=
buyTotal
.
divide
(
new
BigDecimal
(
activity
.
getAmountUnit
()),
RoundingMode
.
DOWN
).
intValue
();
//足量抽奖
}
else
{
drawCountTotal
=
buyTotal
.
divide
(
new
BigDecimal
(
activity
Config
.
getCountUnit
()),
RoundingMode
.
DOWN
).
intValue
();
drawCountTotal
=
buyTotal
.
divide
(
new
BigDecimal
(
activity
.
getCountUnit
()),
RoundingMode
.
DOWN
).
intValue
();
}
drawCountTotal
=
Math
.
min
(
activity
Config
.
getDrawMaxCount
(),
drawCountTotal
);
drawCountTotal
=
Math
.
min
(
activity
.
getDrawMaxCount
(),
drawCountTotal
);
drawCountTotal
=
drawCountTotal
-
alreadyDrawCount
;
Integer
joinActivityPeopleNum
=
accountPrizeService
.
countJoinActivityPeople
(
activity
Config
.
getActivity
Id
());
Integer
joinActivityPeopleNum
=
accountPrizeService
.
countJoinActivityPeople
(
activity
.
get
Id
());
return
DrawModel
.
builder
()
.
alreadyDrawCount
(
alreadyDrawCount
)
.
drawCountTotal
(
drawCountTotal
>=
0
?
drawCountTotal:
0
)
.
maxDrawCountLimit
(
maxDrawCountLimit
)
.
numOfDrawCount
(
Math
.
max
(
0
,
maxDrawCountLimit
-
alreadyDrawCount
))
.
purchasedAmount
(
purchasedAmount
)
.
taxAmountCache
(
Math
.
max
(
0L
,
BigDecimal
.
valueOf
(
activity
Config
.
getMaxMoney
()).
subtract
(
buyTotal
).
multiply
(
BigDecimal
.
valueOf
(
100
)).
longValue
()))
.
taxAmountCache
(
Math
.
max
(
0L
,
BigDecimal
.
valueOf
(
activity
.
getMaxMoney
()).
subtract
(
buyTotal
).
multiply
(
BigDecimal
.
valueOf
(
100
)).
longValue
()))
.
numOfJoinActivityPeople
(
joinActivityPeopleNum
)
.
build
();
}
...
...
@@ -144,12 +154,12 @@ public class DrawManagerImpl implements IDrawManager {
}
@Override
public
List
<
DrawModel
>
listMinePrizeList
(
String
phone
)
{
Activity
Config
activityConfig
=
activityConfigService
.
getConfig
(
);
if
(
activity
Config
==
null
){
public
List
<
DrawModel
>
listMinePrizeList
(
MinePrizeGainRequest
request
)
{
Activity
activity
=
activityService
.
getById
(
request
.
getActivityId
()
);
if
(
activity
==
null
){
throw
new
BusinessException
(
ErrorEnum
.
SYSTEM_EXP
,
"未获取活动有效配置"
);
}
List
<
AccountPrize
>
prizeList
=
accountPrizeService
.
listMinePrize
(
phone
,
activityConfig
.
getActivityId
());
List
<
AccountPrize
>
prizeList
=
accountPrizeService
.
listMinePrize
(
request
.
getPhone
(),
request
.
getActivityId
());
return
getDrawModels
(
prizeList
);
}
...
...
@@ -177,57 +187,63 @@ public class DrawManagerImpl implements IDrawManager {
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
DrawModel
drawClick
(
String
phone
)
throws
InterruptedException
{
public
DrawModel
drawClick
(
String
phone
,
Long
activityId
)
throws
InterruptedException
{
// 同一用户不可多次重复点击
RLock
lock
=
redissonClient
.
getLock
(
buildKey
(
phone
));
try
{
lock
.
tryLock
(
5
,
10
,
TimeUnit
.
SECONDS
);
//获取配置
ActivityConfig
activityConfig
=
activityConfigService
.
getConfig
();
// 1 验证是否可以抽奖
//1 判断活动是否有效
Activity
activity
=
activityService
.
getById
(
activityId
);
if
(
LocalDateTime
.
now
().
isBefore
(
activity
.
getStartTime
())){
throw
new
BusinessException
(
ErrorEnum
.
DRAW_CHECK_EXP
,
"抱歉,抽奖活动还未开始!"
);
}
if
(
LocalDateTime
.
now
().
isAfter
(
activity
.
getEndTime
())){
throw
new
BusinessException
(
ErrorEnum
.
DRAW_CHECK_EXP
,
"抱歉,抽奖活动已经结束!"
);
}
// 2 验证是否可以抽奖
LocalDateTime
nowTime
=
LocalDateTime
.
now
();
LocalDateTime
start
=
nowTime
.
minusDays
(
activity
Config
.
getValidTime
()-
1
);
LocalDateTime
start
=
nowTime
.
minusDays
(
activity
.
getValidTime
()-
1
);
start
=
LocalDateTimeUtil
.
beginOfDay
(
start
);
LocalDateTime
end
=
LocalDateTimeUtil
.
endOfDay
(
nowTime
);
List
<
SyncTrade
>
buyGoodList
;
if
(
activity
Config
.
getActivityStoreStatus
()
==
ActivityStoreStatusEnum
.
NO_CONFINE
.
getCode
()
){
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
phone
,
start
,
end
,
null
,
activityGoodsService
.
listAllActivityGoods
(
activity
Config
.
getActivityId
()
));
if
(
activity
.
getActivityStoreStatus
()
==
ActivityStoreStatusEnum
.
NO_CONFINE
.
getCode
()
){
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
phone
,
start
,
end
,
null
,
activityGoodsService
.
listAllActivityGoods
(
activity
Id
));
}
else
{
//限制门店的情况
List
<
String
>
storeCodeList
=
activityStoreService
.
listAllActivityStoreId
(
activity
Config
.
getActivityId
()
);
List
<
String
>
storeCodeList
=
activityStoreService
.
listAllActivityStoreId
(
activity
Id
);
if
(
CollectionUtils
.
isEmpty
(
storeCodeList
))
{
buyGoodList
=
Lists
.
newArrayList
();
}
else
{
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
phone
,
start
,
end
,
storeCodeList
,
activityGoodsService
.
listAllActivityGoods
(
activity
Config
.
getActivityId
()
));
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
phone
,
start
,
end
,
storeCodeList
,
activityGoodsService
.
listAllActivityGoods
(
activity
Id
));
}
}
int
drawCountTotal
=
0
;
//判断抽奖方式
//
满额
抽奖
if
(
activity
Config
.
getRaffle
()==
RaffleEnum
.
AMOUNTUNIT
.
getCode
()){
//
3
判断抽奖方式
//
足量
抽奖
if
(
activity
.
getRaffle
()==
RaffleEnum
.
AMOUNTUNIT
.
getCode
()){
BigDecimal
buyTotal
=
getAmountTotal
(
buyGoodList
);
drawCountTotal
=
buyTotal
.
divide
(
new
BigDecimal
(
activity
Config
.
getAmountUnit
()),
RoundingMode
.
DOWN
).
intValue
();
drawCountTotal
=
Math
.
min
(
activity
Config
.
getDrawMaxCount
(),
drawCountTotal
);
drawCountTotal
=
buyTotal
.
divide
(
new
BigDecimal
(
activity
.
getAmountUnit
()),
RoundingMode
.
DOWN
).
intValue
();
drawCountTotal
=
Math
.
min
(
activity
.
getDrawMaxCount
(),
drawCountTotal
);
if
(
drawCountTotal
<=
0
)
{
throw
new
BusinessException
(
ErrorEnum
.
DRAW_CHECK_EXP
,
"抱歉,
你的购物金额
不足,已无抽奖次数"
);
throw
new
BusinessException
(
ErrorEnum
.
DRAW_CHECK_EXP
,
"抱歉,
您购买的活动商品
不足,已无抽奖次数"
);
}
//
足量
抽奖
//
满额
抽奖
}
else
{
BigDecimal
buyTotal
=
gainBuyTotal
(
buyGoodList
);
drawCountTotal
=
buyTotal
.
divide
(
new
BigDecimal
(
activity
Config
.
getCountUnit
()),
RoundingMode
.
DOWN
).
intValue
();
drawCountTotal
=
Math
.
min
(
activity
Config
.
getDrawMaxCount
(),
drawCountTotal
);
drawCountTotal
=
buyTotal
.
divide
(
new
BigDecimal
(
activity
.
getCountUnit
()),
RoundingMode
.
DOWN
).
intValue
();
drawCountTotal
=
Math
.
min
(
activity
.
getDrawMaxCount
(),
drawCountTotal
);
if
(
drawCountTotal
<=
0
)
{
throw
new
BusinessException
(
ErrorEnum
.
DRAW_CHECK_EXP
,
"抱歉,
您购买的活动商品
不足,已无抽奖次数"
);
throw
new
BusinessException
(
ErrorEnum
.
DRAW_CHECK_EXP
,
"抱歉,
你的购物金额
不足,已无抽奖次数"
);
}
}
Integer
alreadyDrawCount
=
accountPrizeService
.
gainAlreadyDrawCount
(
phone
,
activity
Config
.
getActivityId
()
,
start
,
end
);
Integer
alreadyDrawCount
=
accountPrizeService
.
gainAlreadyDrawCount
(
phone
,
activity
Id
,
start
,
end
);
// 可抽奖次数> 已抽奖次数
Prize
prize
;
AccountPrize
accountPrize
;
if
(
drawCountTotal
-
alreadyDrawCount
>
0
)
{
// 获得奖品
List
<
Prize
>
prizeList
=
gainPrizeInfo
(
phone
,
activity
Config
);
List
<
Prize
>
prizeList
=
gainPrizeInfo
(
phone
,
activity
Id
);
// 抽奖
prize
=
selectCoupon
(
prizeList
);
// 乐观锁效验抽到的奖品它合不合规
...
...
@@ -240,7 +256,7 @@ public class DrawManagerImpl implements IDrawManager {
}
// 记录抽奖信息
accountPrize
=
new
AccountPrize
();
accountPrize
.
setActivityId
(
activity
Config
.
getActivityId
()
);
accountPrize
.
setActivityId
(
activity
Id
);
accountPrize
.
setPrizeId
(
prize
.
getId
());
accountPrize
.
setAccountName
(
phone
);
accountPrize
.
setAccountPhone
(
phone
);
...
...
@@ -252,7 +268,7 @@ public class DrawManagerImpl implements IDrawManager {
otherManager
.
sendCoupon
(
prize
.
getCouponId
(),
phone
,
accountPrize
.
getId
());
}
}
else
{
if
(
alreadyDrawCount
>=
activity
Config
.
getDrawMaxCount
())
{
if
(
alreadyDrawCount
>=
activity
.
getDrawMaxCount
())
{
throw
new
BusinessException
(
ErrorEnum
.
DRAW_CHECK_EXP
,
"抱歉,你的今日可抽奖次数已用完,请明日再来哦"
);
}
else
{
throw
new
BusinessException
(
ErrorEnum
.
DRAW_CHECK_EXP
,
"抱歉,你的购物金额或购买活动商品不足,已无抽奖次数"
);
...
...
@@ -287,17 +303,32 @@ public class DrawManagerImpl implements IDrawManager {
* 3. 如果满足中奖限制,将该奖品剔除
* @param
*/
public
List
<
Prize
>
gainPrizeInfo
(
String
phone
,
ActivityConfig
activityConfig
){
List
<
Prize
>
prizeList
=
prizeService
.
listAllPrizes
(
activity
Config
.
getActivityId
()
);
public
List
<
Prize
>
gainPrizeInfo
(
String
phone
,
Long
activityId
){
List
<
Prize
>
prizeList
=
prizeService
.
listAllPrizes
(
activity
Id
);
if
(
CollectionUtils
.
isEmpty
(
prizeList
))
{
throw
new
BusinessException
(
ErrorEnum
.
DRAW_CHECK_EXP
,
"活动已结束!"
);
}
if
(
activityConfig
.
getPrizeId
()
!=
null
){
int
count
=
accountPrizeService
.
gainAlreadyDrawCountByPrize
(
phone
,
activityConfig
.
getActivityId
(),
activityConfig
.
getPrizeId
());
if
(
count
>=
1
){
prizeList
=
prizeList
.
stream
().
filter
(
p
->!
activityConfig
.
getPrizeId
().
equals
(
p
.
getId
())
).
collect
(
Collectors
.
toList
());
//获取限制抽奖的奖品
List
<
Prize
>
restrictPrizeList
=
prizeList
.
stream
().
filter
(
p
->
p
.
getAstrict
()!=
0
).
collect
(
Collectors
.
toList
());
if
(!
CollectionUtils
.
isEmpty
(
restrictPrizeList
)){
List
<
Long
>
restrictPrizeId
=
restrictPrizeList
.
stream
().
map
(
Prize:
:
getId
).
collect
(
Collectors
.
toList
());
List
<
AccountPrize
>
accountPrizeList
=
accountPrizeService
.
gainAlreadyDrawCountByPrize
(
phone
,
activityId
,
restrictPrizeId
);
//不可以抽奖的奖品Id
List
<
Long
>
prizeIdList
=
Lists
.
newArrayList
();
if
(!
CollectionUtils
.
isEmpty
(
accountPrizeList
)){
for
(
AccountPrize
account:
accountPrizeList
){
for
(
Prize
prize:
restrictPrizeList
){
//判断是否已经达到抽奖限制次数
if
(
account
.
getPrizeId
().
equals
(
prize
.
getId
())
&&
account
.
getCount
()>=
prize
.
getAstrict
()){
prizeIdList
.
add
(
prize
.
getId
());
}
}
}
}
if
(!
CollectionUtils
.
isEmpty
(
prizeIdList
)){
//剔除已限制抽奖的奖品
prizeList
=
prizeList
.
stream
().
filter
(
p
->!
prizeIdList
.
contains
(
p
.
getId
())).
collect
(
Collectors
.
toList
());
}
System
.
out
.
println
(
Arrays
.
toString
(
prizeList
.
toArray
()));
}
return
prizeList
;
}
...
...
@@ -305,12 +336,12 @@ public class DrawManagerImpl implements IDrawManager {
@Override
public
List
<
DrawModel
>
listAllWinningInfo
(
Integer
size
)
{
Activity
Config
activityConfig
=
activityConfigService
.
getConfig
(
);
if
(
activity
Config
==
null
){
public
List
<
DrawModel
>
listAllWinningInfo
(
PrizeDrawListRequest
request
)
{
Activity
activity
=
activityService
.
getById
(
request
.
getActivityId
()
);
if
(
activity
==
null
){
throw
new
BusinessException
(
ErrorEnum
.
SYSTEM_EXP
,
"未获取活动有效配置"
);
}
List
<
AccountPrize
>
prizeList
=
accountPrizeService
.
listAllWinningInfo
(
size
,
activityConfig
.
getActivityId
());
List
<
AccountPrize
>
prizeList
=
accountPrizeService
.
listAllWinningInfo
(
request
.
getSize
(),
request
.
getActivityId
());
return
getDrawModels
(
prizeList
);
}
...
...
src/main/java/com/miya/draw/manager/IDrawManager.java
View file @
ad147fb5
...
...
@@ -2,6 +2,8 @@ package com.miya.draw.manager;
import
com.miya.draw.model.DrawModel
;
import
com.miya.draw.request.DrawUserInfoGainRequest
;
import
com.miya.draw.request.MinePrizeGainRequest
;
import
com.miya.draw.request.PrizeDrawListRequest
;
import
java.util.List
;
...
...
@@ -24,7 +26,7 @@ public interface IDrawManager {
* @param phone
* @return
*/
List
<
DrawModel
>
listMinePrizeList
(
String
phone
);
List
<
DrawModel
>
listMinePrizeList
(
MinePrizeGainRequest
request
);
/**
* 修改我的奖品的地址信息
...
...
@@ -44,12 +46,12 @@ public interface IDrawManager {
* @param phone
* @return
*/
DrawModel
drawClick
(
String
phone
)
throws
InterruptedException
;
DrawModel
drawClick
(
String
phone
,
Long
activityId
)
throws
InterruptedException
;
/**
* 获得所有的中奖信息
* @param
size
* @param
request
* @return
*/
List
<
DrawModel
>
listAllWinningInfo
(
Integer
size
);
List
<
DrawModel
>
listAllWinningInfo
(
PrizeDrawListRequest
request
);
}
src/main/java/com/miya/draw/mapper/Activity
Config
Mapper.java
→
src/main/java/com/miya/draw/mapper/ActivityMapper.java
View file @
ad147fb5
package
com
.
miya
.
draw
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.miya.draw.entity.Account
;
import
com.miya.draw.entity.ActivityConfig
;
import
com.miya.draw.entity.Activity
;
import
org.apache.ibatis.annotations.Mapper
;
/**
...
...
@@ -11,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper;
* @description:活动配置
*/
@Mapper
public
interface
Activity
ConfigMapper
extends
BaseMapper
<
ActivityConfig
>
{
public
interface
Activity
Mapper
extends
BaseMapper
<
Activity
>
{
}
src/main/java/com/miya/draw/request/DrawClickRequest.java
View file @
ad147fb5
...
...
@@ -6,6 +6,7 @@ import lombok.Data;
import
lombok.EqualsAndHashCode
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
/**
* 用户点击抽奖请求模型
...
...
@@ -20,4 +21,8 @@ public class DrawClickRequest extends BaseRequest {
@NotBlank
(
message
=
"手机号不能为空"
)
@ApiModelProperty
(
value
=
"手机号"
)
private
String
phone
;
@NotNull
(
message
=
"活动Id不能为空"
)
@ApiModelProperty
(
value
=
"手机号"
,
required
=
true
)
private
Long
activityId
;
}
src/main/java/com/miya/draw/request/DrawUserInfoGainRequest.java
View file @
ad147fb5
...
...
@@ -6,6 +6,7 @@ import lombok.Data;
import
lombok.EqualsAndHashCode
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
/**
* 获取抽奖用户信息请求模型
...
...
@@ -17,6 +18,10 @@ import javax.validation.constraints.NotBlank;
@EqualsAndHashCode
(
callSuper
=
true
)
public
class
DrawUserInfoGainRequest
extends
BaseRequest
{
@NotNull
(
message
=
"活动Id不能为空"
)
@ApiModelProperty
(
value
=
"手机号"
,
required
=
true
)
private
Long
activityId
;
@ApiModelProperty
(
value
=
"用户名"
)
private
String
userName
;
...
...
src/main/java/com/miya/draw/request/MinePrizeGainRequest.java
View file @
ad147fb5
...
...
@@ -6,6 +6,7 @@ import lombok.Data;
import
lombok.EqualsAndHashCode
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
/**
* 获得我的奖品
...
...
@@ -17,7 +18,12 @@ import javax.validation.constraints.NotBlank;
@Data
public
class
MinePrizeGainRequest
extends
BaseRequest
{
@NotNull
(
message
=
"活动Id不能为空"
)
@ApiModelProperty
(
value
=
"手机号"
,
required
=
true
)
private
Long
activityId
;
@NotBlank
(
message
=
"手机号不能为空"
)
@ApiModelProperty
(
value
=
"手机号"
,
required
=
true
)
private
String
phone
;
}
src/main/java/com/miya/draw/request/PrizeDrawListRequest.java
View file @
ad147fb5
...
...
@@ -5,6 +5,9 @@ import io.swagger.annotations.ApiModelProperty;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
/**
* 所有的中奖信息请求
*
...
...
@@ -15,6 +18,10 @@ import lombok.EqualsAndHashCode;
@ApiModel
(
value
=
"获取所有的中奖信息请求"
)
public
class
PrizeDrawListRequest
extends
BaseRequest
{
@NotNull
(
message
=
"活动Id不能为空"
)
@ApiModelProperty
(
value
=
"手机号"
,
required
=
true
)
private
Long
activityId
;
@ApiModelProperty
(
value
=
"一次请求多少条 默认30"
)
private
Integer
size
=
30
;
}
src/main/java/com/miya/draw/service/IAccountPrizeService.java
View file @
ad147fb5
package
com
.
miya
.
draw
.
service
;
import
com.miya.draw.entity.AccountPrize
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.miya.draw.entity.AccountPrize
;
import
java.time.LocalDateTime
;
import
java.util.List
;
/**
* <p>
* 服务类
* </p>
*
* @author jack
* @since 2021-05-05
* @author :djf
* @date :2022-11-10
* @description:
*/
public
interface
IAccountPrizeService
extends
IService
<
AccountPrize
>
{
/**
* 获得用户的抽奖次数
*
...
...
@@ -24,16 +22,16 @@ public interface IAccountPrizeService extends IService<AccountPrize> {
* @param end 结束时间
* @return 已抽奖次数
*/
Integer
gainAlreadyDrawCount
(
String
phone
,
Long
activityId
,
LocalDateTime
start
,
LocalDateTime
end
);
Integer
gainAlreadyDrawCount
(
String
phone
,
Long
activityId
,
LocalDateTime
start
,
LocalDateTime
end
);
/**
* 获取用户手机号抽中指定奖品的次数
* @param phone
* @param activityId
* @param prizeId
* @param prizeId
s
* @return
*/
Integer
gainAlreadyDrawCountByPrize
(
String
phone
,
Long
activityId
,
Long
prizeId
);
List
<
AccountPrize
>
gainAlreadyDrawCountByPrize
(
String
phone
,
Long
activityId
,
List
<
Long
>
prizeIds
);
/**
* 获得我的奖品列表
...
...
@@ -41,7 +39,7 @@ public interface IAccountPrizeService extends IService<AccountPrize> {
* @param phone
* @return
*/
List
<
AccountPrize
>
listMinePrize
(
String
phone
,
Long
activityId
);
List
<
AccountPrize
>
listMinePrize
(
String
phone
,
Long
activityId
);
/**
* 获得所有的中奖信息
...
...
src/main/java/com/miya/draw/service/IActivity
Config
Service.java
→
src/main/java/com/miya/draw/service/IActivityService.java
View file @
ad147fb5
package
com
.
miya
.
draw
.
service
;
import
com.miya.draw.entity.Activity
Config
;
import
com.miya.draw.entity.Activity
;
/**
* @author :djf
* @date :2022-10-25
* @description:活动配置
*/
public
interface
IActivity
Config
Service
{
public
interface
IActivityService
{
ActivityConfig
getConfig
();
/**
* 根据Id获取活动信息
* @param id
* @return
*/
Activity
getById
(
Long
id
);
}
src/main/java/com/miya/draw/service/impl/AccountPrizeServiceImpl.java
View file @
ad147fb5
...
...
@@ -12,12 +12,9 @@ import com.miya.draw.enums.ErrorEnum;
import
com.miya.draw.enums.PrizeTypeEnum
;
import
com.miya.draw.mapper.AccountPrizeMapper
;
import
com.miya.draw.mapper.PrizeMapper
;
import
com.miya.draw.service.IAccountPrizeService
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
com.miya.draw.service.IAccountPrizeService
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
...
...
@@ -41,10 +38,6 @@ public class AccountPrizeServiceImpl extends ServiceImpl<AccountPrizeMapper, Acc
@Resource
private
AccountPrizeMapper
accountPrizeMapper
;
@Resource
private
PrizeMapper
prizeMapper
;
@Override
...
...
@@ -85,12 +78,14 @@ public class AccountPrizeServiceImpl extends ServiceImpl<AccountPrizeMapper, Acc
}
@Override
public
Integer
gainAlreadyDrawCountByPrize
(
String
phone
,
Long
activityId
,
Long
prizeId
)
{
LambdaQueryWrapper
<
AccountPrize
>
wrapper
=
new
LambdaQueryWrapper
<>();
wrapper
.
eq
(
AccountPrize:
:
getActivityId
,
activityId
);
wrapper
.
eq
(
AccountPrize:
:
getPrizeId
,
prizeId
);
wrapper
.
eq
(
AccountPrize:
:
getAccountPhone
,
phone
);
return
accountPrizeMapper
.
selectCount
(
wrapper
);
public
List
<
AccountPrize
>
gainAlreadyDrawCountByPrize
(
String
phone
,
Long
activityId
,
List
<
Long
>
prizeIds
)
{
QueryWrapper
<
AccountPrize
>
wrapper
=
new
QueryWrapper
<>();
wrapper
.
select
(
"count(id) as count,prize_id "
)
.
eq
(
"activity_id"
,
activityId
)
.
eq
(
"account_phone"
,
phone
)
.
in
(
"prize_id"
,
prizeIds
)
.
last
(
"group by prize_id"
);
return
accountPrizeMapper
.
selectList
(
wrapper
);
}
/**
...
...
src/main/java/com/miya/draw/service/impl/Activity
Config
ServiceImpl.java
→
src/main/java/com/miya/draw/service/impl/ActivityServiceImpl.java
View file @
ad147fb5
...
...
@@ -2,13 +2,12 @@ package com.miya.draw.service.impl;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.miya.draw.entity.Activity
Config
;
import
com.miya.draw.mapper.Activity
Config
Mapper
;
import
com.miya.draw.service.IActivity
Config
Service
;
import
com.miya.draw.entity.Activity
;
import
com.miya.draw.mapper.ActivityMapper
;
import
com.miya.draw.service.IActivityService
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
...
...
@@ -17,19 +16,11 @@ import java.util.List;
* @description:
*/
@Service
public
class
ActivityConfigServiceImpl
extends
ServiceImpl
<
ActivityConfigMapper
,
ActivityConfig
>
implements
IActivityConfigService
{
public
class
ActivityServiceImpl
extends
ServiceImpl
<
ActivityMapper
,
Activity
>
implements
IActivityService
{
@Override
public
ActivityConfig
getConfig
()
{
LambdaQueryWrapper
<
ActivityConfig
>
wrapper
=
new
LambdaQueryWrapper
<>();
wrapper
.
eq
(
ActivityConfig:
:
getValidStatus
,
1
);
wrapper
.
last
(
"order by create_time desc "
);
List
<
ActivityConfig
>
list
=
baseMapper
.
selectList
(
wrapper
);
if
(!
CollectionUtils
.
isEmpty
(
list
)){
return
list
.
get
(
0
);
}
return
null
;
public
Activity
getById
(
Long
id
)
{
return
baseMapper
.
selectById
(
id
);
}
}
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