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
c56596c7
Commit
c56596c7
authored
Nov 08, 2022
by
邓吉芬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1. 修改活动门店可配置化
2. 单个用户限中奖品
parent
25cbfdc4
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
107 additions
and
12 deletions
+107
-12
ActivityConfig.java
src/main/java/com/miya/draw/entity/ActivityConfig.java
+6
-0
ActivityStoreStatusEnum.java
...ain/java/com/miya/draw/enums/ActivityStoreStatusEnum.java
+25
-0
DrawManagerImpl.java
src/main/java/com/miya/draw/manager/DrawManagerImpl.java
+34
-8
IAccountPrizeService.java
...main/java/com/miya/draw/service/IAccountPrizeService.java
+9
-0
IActivityStoreService.java
...ain/java/com/miya/draw/service/IActivityStoreService.java
+1
-1
AccountPrizeServiceImpl.java
...a/com/miya/draw/service/impl/AccountPrizeServiceImpl.java
+26
-0
ActivityStoreServiceImpl.java
.../com/miya/draw/service/impl/ActivityStoreServiceImpl.java
+2
-1
SyncTradeServiceImpl.java
...java/com/miya/draw/service/impl/SyncTradeServiceImpl.java
+3
-2
bussiness-config.yml
src/main/resources/bussiness-config.yml
+1
-0
No files found.
src/main/java/com/miya/draw/entity/ActivityConfig.java
View file @
c56596c7
...
...
@@ -51,9 +51,15 @@ public class ActivityConfig implements Serializable {
@ApiModelProperty
(
value
=
"抽奖次数有效时间 1:当天有效 2:两天内有效以此类推"
)
private
int
validTime
;
@ApiModelProperty
(
value
=
"0 不限制门店 1限制门店"
)
private
Integer
activityStoreStatus
;
@ApiModelProperty
(
value
=
"活动是否有效 0无效 1有效"
)
private
Integer
validStatus
;
@ApiModelProperty
(
value
=
"单个用户限制奖品Id,多个用逗号隔开"
)
private
Long
prizeId
;
@ApiModelProperty
(
value
=
"创建时间"
)
private
LocalDateTime
createTime
;
...
...
src/main/java/com/miya/draw/enums/ActivityStoreStatusEnum.java
0 → 100644
View file @
c56596c7
package
com
.
miya
.
draw
.
enums
;
import
lombok.Getter
;
/**
* @author :djf
* @date :2022-11-08
* @description:活动限制门店状态
*/
@Getter
public
enum
ActivityStoreStatusEnum
{
NO_CONFINE
(
0
,
"不限制"
),
CONFINE
(
1
,
"限制"
);
private
int
code
;
private
String
name
;
ActivityStoreStatusEnum
(
int
code
,
String
name
)
{
this
.
code
=
code
;
this
.
name
=
name
;
}
}
src/main/java/com/miya/draw/manager/DrawManagerImpl.java
View file @
c56596c7
...
...
@@ -85,7 +85,7 @@ public class DrawManagerImpl implements IDrawManager {
LocalDateTime
end
=
LocalDateTimeUtil
.
endOfDay
(
nowTime
);
Integer
maxDrawCountLimit
=
activityConfig
.
getDrawMaxCount
();
Integer
alreadyDrawCount
=
accountPrizeService
.
gainAlreadyDrawCount
(
request
.
getPhone
(),
activityConfig
.
getActivityId
(),
start
,
end
);
List
<
String
>
storeIdList
=
activityStoreService
.
listAllActivityStoreId
();
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
);
BigDecimal
buyTotal
=
gainBuyTotal
(
buyGoodList
);
...
...
@@ -188,8 +188,14 @@ public class DrawManagerImpl implements IDrawManager {
LocalDateTime
start
=
nowTime
.
minusDays
(
activityConfig
.
getValidTime
()-
1
);
start
=
LocalDateTimeUtil
.
beginOfDay
(
start
);
LocalDateTime
end
=
LocalDateTimeUtil
.
endOfDay
(
nowTime
);
List
<
SyncTrade
>
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
phone
,
start
,
end
,
activityStoreService
.
listAllActivityStoreId
(),
activityGoodsService
.
listAllActivityGoods
(
activityConfig
.
getActivityId
()));
int
drawCountTotal
=
0
;
List
<
SyncTrade
>
buyGoodList
;
if
(
activityConfig
.
getActivityStoreStatus
()
==
ActivityStoreStatusEnum
.
NO_CONFINE
.
getCode
()
){
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
phone
,
start
,
end
,
null
,
activityGoodsService
.
listAllActivityGoods
(
activityConfig
.
getActivityId
()));
}
else
{
buyGoodList
=
syncTradeService
.
listCanDrawGoods
(
phone
,
start
,
end
,
activityStoreService
.
listAllActivityStoreId
(
activityConfig
.
getActivityId
()),
activityGoodsService
.
listAllActivityGoods
(
activityConfig
.
getActivityId
()));
}
int
drawCountTotal
=
0
;
//判断抽奖方式
//满额抽奖
if
(
activityConfig
.
getRaffle
()==
RaffleEnum
.
AMOUNTUNIT
.
getCode
()){
...
...
@@ -215,10 +221,7 @@ public class DrawManagerImpl implements IDrawManager {
AccountPrize
accountPrize
;
if
(
drawCountTotal
-
alreadyDrawCount
>
0
)
{
// 获得奖品
List
<
Prize
>
prizeList
=
prizeService
.
listAllPrizes
(
activityConfig
.
getActivityId
());
if
(
CollectionUtils
.
isEmpty
(
prizeList
))
{
throw
new
BusinessException
(
ErrorEnum
.
DRAW_CHECK_EXP
,
"活动已结束!"
);
}
List
<
Prize
>
prizeList
=
gainPrizeInfo
(
phone
,
activityConfig
);
// 抽奖
prize
=
selectCoupon
(
prizeList
);
// 乐观锁效验抽到的奖品它合不合规
...
...
@@ -269,10 +272,32 @@ public class DrawManagerImpl implements IDrawManager {
start
=
LocalDateTimeUtil
.
beginOfDay
(
start
);
LocalDateTime
end
=
LocalDateTimeUtil
.
endOfDay
(
nowTime
);
}
/**
* 用户限中奖品后重新获取奖品List
* 1. 获取限制的奖品Id
* 2. 查询当前号码是否满足中奖限制
* 3. 如果满足中奖限制,将该奖品剔除
* @param
*/
public
List
<
Prize
>
gainPrizeInfo
(
String
phone
,
ActivityConfig
activityConfig
){
List
<
Prize
>
prizeList
=
prizeService
.
listAllPrizes
(
activityConfig
.
getActivityId
());
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
());
}
System
.
out
.
println
(
Arrays
.
toString
(
prizeList
.
toArray
()));
}
return
prizeList
;
}
@Override
public
List
<
DrawModel
>
listAllWinningInfo
(
Integer
size
)
{
ActivityConfig
activityConfig
=
activityConfigService
.
getConfig
();
...
...
@@ -323,6 +348,7 @@ public class DrawManagerImpl implements IDrawManager {
/**
*
* 加锁可以
*
* @param phone
...
...
src/main/java/com/miya/draw/service/IAccountPrizeService.java
View file @
c56596c7
...
...
@@ -26,6 +26,15 @@ public interface IAccountPrizeService extends IService<AccountPrize> {
*/
Integer
gainAlreadyDrawCount
(
String
phone
,
Long
activityId
,
LocalDateTime
start
,
LocalDateTime
end
);
/**
* 获取用户手机号抽中指定奖品的次数
* @param phone
* @param activityId
* @param prizeId
* @return
*/
Integer
gainAlreadyDrawCountByPrize
(
String
phone
,
Long
activityId
,
Long
prizeId
);
/**
* 获得我的奖品列表
*
...
...
src/main/java/com/miya/draw/service/IActivityStoreService.java
View file @
c56596c7
...
...
@@ -19,5 +19,5 @@ public interface IActivityStoreService extends IService<ActivityStore> {
* 获得参加活动的所有门店id
* @return
*/
List
<
String
>
listAllActivityStoreId
();
List
<
String
>
listAllActivityStoreId
(
Long
activityId
);
}
src/main/java/com/miya/draw/service/impl/AccountPrizeServiceImpl.java
View file @
c56596c7
...
...
@@ -3,8 +3,10 @@ package com.miya.draw.service.impl;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.miya.draw.config.constant.ConStants
;
import
com.miya.draw.config.exception.BusinessException
;
import
com.miya.draw.entity.AccountPrize
;
import
com.miya.draw.entity.ActivityGoods
;
import
com.miya.draw.entity.Prize
;
import
com.miya.draw.enums.ErrorEnum
;
import
com.miya.draw.enums.PrizeTypeEnum
;
...
...
@@ -13,12 +15,16 @@ 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
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.time.Duration
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -39,6 +45,8 @@ public class AccountPrizeServiceImpl extends ServiceImpl<AccountPrizeMapper, Acc
private
PrizeMapper
prizeMapper
;
@Override
public
Integer
gainAlreadyDrawCount
(
String
phone
,
Long
activityId
,
LocalDateTime
start
,
LocalDateTime
end
)
{
LambdaQueryWrapper
<
AccountPrize
>
wrapper
=
new
LambdaQueryWrapper
<>();
...
...
@@ -76,4 +84,22 @@ public class AccountPrizeServiceImpl extends ServiceImpl<AccountPrizeMapper, Acc
return
accountPrizeMapper
.
selectCount
(
wrapper
);
}
@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
);
}
/**
* 获得获得商品的key
*
* @return
*/
private
String
buildKey
(
String
phone
,
Long
activityId
,
Long
prizeId
)
{
//shizu:draw:activity:good
return
ConStants
.
SHIZU_DRAW_PREFIX
+
ConStants
.
SHIZU_ACTIVITY_PRIZE
+
":"
+
activityId
+
":"
+
prizeId
+
":"
+
phone
;
}
}
src/main/java/com/miya/draw/service/impl/ActivityStoreServiceImpl.java
View file @
c56596c7
...
...
@@ -40,7 +40,7 @@ public class ActivityStoreServiceImpl extends ServiceImpl<ActivityStoreMapper, A
private
RedisTemplate
<
String
,
Object
>
redisTemplate
;
@Override
public
List
<
String
>
listAllActivityStoreId
()
{
public
List
<
String
>
listAllActivityStoreId
(
Long
activityId
)
{
List
<
String
>
storeIds
=
new
ArrayList
<>();
try
{
Object
object
=
redisTemplate
.
opsForValue
().
get
(
buildKey
());
...
...
@@ -52,6 +52,7 @@ public class ActivityStoreServiceImpl extends ServiceImpl<ActivityStoreMapper, A
}
LambdaQueryWrapper
<
ActivityStore
>
wrapper
=
new
LambdaQueryWrapper
<>();
wrapper
.
eq
(
ActivityStore:
:
getValidState
,
YesOrNoEnum
.
YES
.
getCode
());
wrapper
.
eq
(
ActivityStore:
:
getActivityId
,
activityId
);
List
<
ActivityStore
>
storeList
=
activityStoreMapper
.
selectList
(
wrapper
);
if
(
CollectionUtils
.
isNotEmpty
(
storeList
))
{
storeIds
=
storeList
.
stream
().
map
(
ActivityStore:
:
getStoreId
).
collect
(
Collectors
.
toList
());
...
...
src/main/java/com/miya/draw/service/impl/SyncTradeServiceImpl.java
View file @
c56596c7
...
...
@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
...
...
@@ -34,13 +35,13 @@ public class SyncTradeServiceImpl extends ServiceImpl<SyncTradeMapper, SyncTrade
@Override
public
List
<
SyncTrade
>
listCanDrawGoods
(
String
phone
,
LocalDateTime
start
,
LocalDateTime
end
,
List
<
String
>
storeIdList
,
List
<
String
>
goodCodeList
)
{
if
(
CollectionUtils
.
isEmpty
(
storeIdList
)
||
CollectionUtils
.
isEmpty
(
goodCodeList
))
{
if
(
CollectionUtils
.
isEmpty
(
goodCodeList
))
{
return
Lists
.
newArrayList
();
}
LambdaQueryWrapper
<
SyncTrade
>
wrapper
=
new
LambdaQueryWrapper
<>();
wrapper
.
eq
(
SyncTrade:
:
getPhone
,
phone
)
.
between
(
SyncTrade:
:
getTranTime
,
start
,
end
)
.
in
(
SyncTrade:
:
getStoreId
,
storeIdList
)
.
in
(
CollectionUtils
.
isNotEmpty
(
storeIdList
),
SyncTrade:
:
getStoreId
,
storeIdList
)
.
in
(
SyncTrade:
:
getCode
,
goodCodeList
);
return
syncTradeMapper
.
selectList
(
wrapper
);
}
...
...
src/main/resources/bussiness-config.yml
View file @
c56596c7
...
...
@@ -8,3 +8,4 @@ draw:
maxmoney
:
200
#满额抽奖时理论上最多花费金额 元
maxamount
:
0
#满量抽奖时理论上最多买多少件
validTime
:
1
#抽奖次数有效时间 1:当天有效 2:两天内有效以此类推
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