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
17c72286
Commit
17c72286
authored
Dec 13, 2019
by
libin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
banner添加小程序url跳转字段,抽奖奖品库存与发送奖品修改换成异步处理(rabbitmq)
parent
983f05db
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
171 additions
and
45 deletions
+171
-45
RabbitConstant.java
...wxiaoqi/security/common/config/rabbit/RabbitConstant.java
+6
-0
ActivityLotteryDTO.java
...va/com/xxfc/platform/activity/dto/ActivityLotteryDTO.java
+34
-0
ActivityWinningRecord.java
.../xxfc/platform/activity/entity/ActivityWinningRecord.java
+1
-4
ActivityApplication.java
.../java/com/xxfc/platform/activity/ActivityApplication.java
+0
-2
ActivityAttendanceRecordBiz.java
...fc/platform/activity/biz/ActivityAttendanceRecordBiz.java
+0
-1
ActivityPrizeBiz.java
...java/com/xxfc/platform/activity/biz/ActivityPrizeBiz.java
+30
-32
RabbitActivityConfig.java
...m/xxfc/platform/activity/config/RabbitActivityConfig.java
+2
-0
ActivityPrizeMqHandler.java
...xfc/platform/activity/handler/ActivityPrizeMqHandler.java
+90
-0
Banner.java
...pi/src/main/java/com/xxfc/platform/app/entity/Banner.java
+4
-0
BannerVo.java
...c/main/java/com/xxfc/platform/app/entity/vo/BannerVo.java
+2
-0
BannerBiz.java
...er/src/main/java/com/xxfc/platform/app/biz/BannerBiz.java
+2
-6
No files found.
ace-common/src/main/java/com/github/wxiaoqi/security/common/config/rabbit/RabbitConstant.java
View file @
17c72286
...
@@ -15,6 +15,8 @@ public class RabbitConstant {
...
@@ -15,6 +15,8 @@ public class RabbitConstant {
public
static
final
String
ORDER_TOPIC
=
ORDER
+
TOPIC_EXC
;
public
static
final
String
ORDER_TOPIC
=
ORDER
+
TOPIC_EXC
;
public
static
final
String
INTEGRAL
=
"integral"
;
public
static
final
String
INTEGRAL
=
"integral"
;
public
static
final
String
INTEGRAL_TOPIC
=
INTEGRAL
+
TOPIC_EXC
;
public
static
final
String
INTEGRAL_TOPIC
=
INTEGRAL
+
TOPIC_EXC
;
public
static
final
String
ACTIVITY_PRIZE
=
"activity:prize"
;
public
static
final
String
ACTIVITY_PRIZE_TOPIC
=
ACTIVITY_PRIZE
+
TOPIC_EXC
;
/**************************key*********************************/
/**************************key*********************************/
//用户
//用户
...
@@ -35,11 +37,15 @@ public class RabbitConstant {
...
@@ -35,11 +37,15 @@ public class RabbitConstant {
public
static
final
String
KEY_WALLET_WITH_DRAW
=
"wallet.withdraw"
;
public
static
final
String
KEY_WALLET_WITH_DRAW
=
"wallet.withdraw"
;
//抽奖
public
static
final
String
KEY_ACTIVITY_PRIZE_RECORD
=
"prize:record"
;
static
{
static
{
exchangeTopicSet
=
new
HashSet
<
String
>()
{{
exchangeTopicSet
=
new
HashSet
<
String
>()
{{
add
(
ADMIN_TOPIC
);
add
(
ADMIN_TOPIC
);
add
(
ORDER_TOPIC
);
add
(
ORDER_TOPIC
);
add
(
INTEGRAL_TOPIC
);
add
(
INTEGRAL_TOPIC
);
add
(
ACTIVITY_PRIZE_TOPIC
);
}};
}};
}
}
}
}
xx-activity/xx-activity-api/src/main/java/com/xxfc/platform/activity/dto/ActivityLotteryDTO.java
0 → 100644
View file @
17c72286
package
com
.
xxfc
.
platform
.
activity
.
dto
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/13 15:11
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
ActivityLotteryDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
Integer
userId
;
private
String
phone
;
private
Integer
serialNumber
;
private
Integer
activityId
;
private
Integer
prizeType
;
private
String
prizeName
;
private
String
iconPath
;
private
Integer
hasWinning
;
private
String
expiryDateCode
;
private
Date
lotteryTime
;
private
Integer
goodsId
;
private
Integer
prizeGoodsType
;
}
xx-activity/xx-activity-api/src/main/java/com/xxfc/platform/activity/entity/ActivityWinningRecord.java
View file @
17c72286
...
@@ -3,10 +3,7 @@ package com.xxfc.platform.activity.entity;
...
@@ -3,10 +3,7 @@ package com.xxfc.platform.activity.entity;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Data
;
import
javax.persistence.Column
;
import
javax.persistence.*
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.Id
;
import
javax.persistence.Table
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.Date
;
...
...
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/ActivityApplication.java
View file @
17c72286
...
@@ -10,7 +10,6 @@ import org.springframework.cache.annotation.EnableCaching;
...
@@ -10,7 +10,6 @@ import org.springframework.cache.annotation.EnableCaching;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
import
org.springframework.cloud.client.discovery.EnableDiscoveryClient
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
import
org.springframework.context.annotation.EnableAspectJAutoProxy
;
import
org.springframework.context.annotation.EnableAspectJAutoProxy
;
import
org.springframework.scheduling.annotation.EnableAsync
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
tk.mybatis.spring.annotation.MapperScan
;
import
tk.mybatis.spring.annotation.MapperScan
;
...
@@ -28,7 +27,6 @@ import tk.mybatis.spring.annotation.MapperScan;
...
@@ -28,7 +27,6 @@ import tk.mybatis.spring.annotation.MapperScan;
"com.github.wxiaoqi.security.common.support"
"com.github.wxiaoqi.security.common.support"
})
})
@EnableAspectJAutoProxy
(
exposeProxy
=
true
)
@EnableAspectJAutoProxy
(
exposeProxy
=
true
)
@EnableAsync
@EnableDiscoveryClient
@EnableDiscoveryClient
@EnableScheduling
@EnableScheduling
@EnableAceAuthClient
@EnableAceAuthClient
...
...
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/biz/ActivityAttendanceRecordBiz.java
View file @
17c72286
...
@@ -202,7 +202,6 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
...
@@ -202,7 +202,6 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
timeStr
};
timeStr
};
}
}
@Async
public
void
updateLotteryNumByActivityIdAndUserIdAndPrizeType
(
Integer
activityId
,
Integer
userId
,
Integer
prizeType
){
public
void
updateLotteryNumByActivityIdAndUserIdAndPrizeType
(
Integer
activityId
,
Integer
userId
,
Integer
prizeType
){
mapper
.
updateLotteryNumByActivityIdAndUserIdAndPrizeType
(
activityId
,
userId
,
prizeType
);
mapper
.
updateLotteryNumByActivityIdAndUserIdAndPrizeType
(
activityId
,
userId
,
prizeType
);
}
}
...
...
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/biz/ActivityPrizeBiz.java
View file @
17c72286
...
@@ -4,15 +4,15 @@ import com.ace.cache.annotation.Cache;
...
@@ -4,15 +4,15 @@ import com.ace.cache.annotation.Cache;
import
com.ace.cache.annotation.CacheClear
;
import
com.ace.cache.annotation.CacheClear
;
import
com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO
;
import
com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.biz.BaseBiz
;
import
com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
com.github.wxiaoqi.security.common.exception.BaseException
;
import
com.github.wxiaoqi.security.common.util.ReferralCodeUtil
;
import
com.github.wxiaoqi.security.common.util.ReferralCodeUtil
;
import
com.xxfc.platform.activity.config.RedissonLock
;
import
com.xxfc.platform.activity.config.RedissonLock
;
import
com.xxfc.platform.activity.constant.PrizeGoodsTypeEnum
;
import
com.xxfc.platform.activity.constant.PrizeGoodsTypeEnum
;
import
com.xxfc.platform.activity.constant.PrizeTypeEnum
;
import
com.xxfc.platform.activity.constant.PrizeTypeEnum
;
import
com.xxfc.platform.activity.dto.ActivityLotteryDTO
;
import
com.xxfc.platform.activity.dto.CouponDTO
;
import
com.xxfc.platform.activity.dto.CouponDTO
;
import
com.xxfc.platform.activity.dto.UserCouponSendDTO
;
import
com.xxfc.platform.activity.entity.ActivityPrize
;
import
com.xxfc.platform.activity.entity.ActivityPrize
;
import
com.xxfc.platform.activity.entity.ActivityWinningRecord
;
import
com.xxfc.platform.activity.mapper.ActivityPrizeMapper
;
import
com.xxfc.platform.activity.mapper.ActivityPrizeMapper
;
import
com.xxfc.platform.activity.util.LotteryUtils
;
import
com.xxfc.platform.activity.util.LotteryUtils
;
import
com.xxfc.platform.activity.vo.ActivityPrizeVo
;
import
com.xxfc.platform.activity.vo.ActivityPrizeVo
;
...
@@ -21,12 +21,12 @@ import lombok.RequiredArgsConstructor;
...
@@ -21,12 +21,12 @@ import lombok.RequiredArgsConstructor;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RLock
;
import
org.springframework.amqp.rabbit.core.RabbitTemplate
;
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.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.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
import
tk.mybatis.mapper.entity.Example
;
import
tk.mybatis.mapper.entity.Example
;
...
@@ -49,10 +49,9 @@ import java.util.stream.Collectors;
...
@@ -49,10 +49,9 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
(
onConstructor
=
@__
(
@Autowired
))
@RequiredArgsConstructor
(
onConstructor
=
@__
(
@Autowired
))
public
class
ActivityPrizeBiz
extends
BaseBiz
<
ActivityPrizeMapper
,
ActivityPrize
>
{
public
class
ActivityPrizeBiz
extends
BaseBiz
<
ActivityPrizeMapper
,
ActivityPrize
>
{
private
final
ActivityWinningRecordBiz
activityWinningRecordBiz
;
private
final
ActivityAttendanceRecordBiz
activityAttendanceRecordBiz
;
private
final
ActivityAttendanceRecordBiz
activityAttendanceRecordBiz
;
private
final
UserCouponBiz
userCouponBiz
;
private
final
CouponBiz
couponBiz
;
private
final
CouponBiz
couponBiz
;
private
final
RabbitTemplate
rabbitTemplate
;
private
final
RedisTemplate
<
String
,
Object
>
redisTemplate
;
private
final
RedisTemplate
<
String
,
Object
>
redisTemplate
;
@Resource
(
name
=
"redisTemplate"
)
@Resource
(
name
=
"redisTemplate"
)
private
ValueOperations
<
String
,
Object
>
valueOperations
;
private
ValueOperations
<
String
,
Object
>
valueOperations
;
...
@@ -157,6 +156,9 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -157,6 +156,9 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
*/
*/
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
();
ActivityLotteryDTO
activityLotteryDTO
=
new
ActivityLotteryDTO
();
activityLotteryDTO
.
setHasWinning
(
0
);
//查询奖品信息
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
();
...
@@ -166,6 +168,8 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -166,6 +168,8 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
activityPrize
.
setSerialNumber
(
8
);
activityPrize
.
setSerialNumber
(
8
);
return
activityPrize
;
return
activityPrize
;
});
});
//用户对应活动类型抽奖次数
String
lotteryNumKey
=
String
.
format
(
"%s%d:%d:%d"
,
USER_LOTTERY_PRE_KEY
,
appUserDTO
.
getUserid
(),
activityId
,
prizeType
);
String
lotteryNumKey
=
String
.
format
(
"%s%d:%d:%d"
,
USER_LOTTERY_PRE_KEY
,
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
;
...
@@ -197,16 +201,13 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -197,16 +201,13 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
}
}
}
}
ActivityWinningRecord
activityWinningRecord
=
new
ActivityWinningRecord
();
//判断是否有库存
activityWinningRecord
.
setActivityId
(
activityId
);
activityWinningRecord
.
setPrizeType
(
prizeType
);
activityWinningRecord
.
setUserId
(
appUserDTO
.
getUserid
());
activityWinningRecord
.
setHasWinning
(
0
);
boolean
hasStock
=
activityPrize
.
getPrizeGoodsType
()
!=
PrizeGoodsTypeEnum
.
NO_PRIZE
.
getCode
()
boolean
hasStock
=
activityPrize
.
getPrizeGoodsType
()
!=
PrizeGoodsTypeEnum
.
NO_PRIZE
.
getCode
()
&&
activityPrize
.
getTotalStock
()
!=
null
&&
activityPrize
.
getTotalStock
()
!=
null
&&
activityPrize
.
getTotalStock
()!=
0
&&
activityPrize
.
getTotalStock
()!=
0
&&
prizeStock
!=
null
&&
prizeStock
!=
null
&&
(
Integer
)
prizeStock
!=
0
;
&&
(
Integer
)
prizeStock
!=
0
;
if
(
hasStock
)
{
if
(
hasStock
)
{
String
lockKey
=
String
.
format
(
"%s%d:%d:%d"
,
LOTTERY_PRE_KEY
,
activityId
,
prizeType
,
activityPrize
.
getSerialNumber
());
String
lockKey
=
String
.
format
(
"%s%d:%d:%d"
,
LOTTERY_PRE_KEY
,
activityId
,
prizeType
,
activityPrize
.
getSerialNumber
());
RLock
rLock
=
redissonLock
.
getRLock
(
lockKey
);
RLock
rLock
=
redissonLock
.
getRLock
(
lockKey
);
...
@@ -217,14 +218,12 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -217,14 +218,12 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
log
.
info
(
"tryLock success, key = [{}]"
,
lockKey
);
log
.
info
(
"tryLock success, key = [{}]"
,
lockKey
);
try
{
try
{
if
(
prizeStock
!=
null
&&
(
Integer
)
prizeStock
>
0
)
{
if
(
prizeStock
!=
null
&&
(
Integer
)
prizeStock
>
0
)
{
//更新库存
//更新奖品的缓存库存
((
ActivityPrizeBiz
)
AopContext
.
currentProxy
()).
updatePrizeStock
(
prizeType
,
activityPrize
.
getSerialNumber
());
//更新缓存库存
valueOperations
.
decrement
(
prizeStockKey
);
valueOperations
.
decrement
(
prizeStockKey
);
//设置为已中奖
//设置为已中奖
activity
WinningRecord
.
setHasWinning
(
1
);
activity
LotteryDTO
.
setHasWinning
(
1
);
activity
WinningRecord
.
setIconPath
(
activityPrize
.
getIconPath
());
activity
LotteryDTO
.
setIconPath
(
activityPrize
.
getIconPath
());
activity
WinningRecord
.
setLotteryTime
(
new
Date
());
activity
LotteryDTO
.
setLotteryTime
(
new
Date
());
}
else
{
}
else
{
activityPrize
=
notActivityPrize
;
activityPrize
=
notActivityPrize
;
}
}
...
@@ -240,35 +239,35 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -240,35 +239,35 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
log
.
info
(
"tryLock fail, key = [{}]"
,
lockKey
);
log
.
info
(
"tryLock fail, key = [{}]"
,
lockKey
);
}
}
}
catch
(
InterruptedException
e
)
{
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
(
);
log
.
error
(
"tryLock fail, key = [{}]"
,
lockKey
);
}
}
if
(
PrizeTypeEnum
.
LOCALE
.
getCode
()
==
prizeType
)
{
if
(
PrizeTypeEnum
.
LOCALE
.
getCode
()
==
prizeType
)
{
//兑奖码生成
//兑奖码生成
String
expireDateCodeKey
=
String
.
format
(
"%s:%s%d"
,
lotteryDate
.
substring
(
0
,
4
),
LOTTERY_PRE_KEY
,
activityId
);
String
expireDateCodeKey
=
String
.
format
(
"%s:%s%d"
,
lotteryDate
.
substring
(
0
,
4
),
LOTTERY_PRE_KEY
,
activityId
);
//兑奖次数自增
Long
expireDateCodeCounter
=
valueOperations
.
increment
(
expireDateCodeKey
);
Long
expireDateCodeCounter
=
valueOperations
.
increment
(
expireDateCodeKey
);
if
(
expireDateCodeCounter
==
1
)
{
if
(
expireDateCodeCounter
==
1
)
{
redisTemplate
.
expire
(
expireDateCodeKey
,
expirDays
,
TimeUnit
.
DAYS
);
redisTemplate
.
expire
(
expireDateCodeKey
,
expirDays
,
TimeUnit
.
DAYS
);
}
}
String
expiryDateCode
=
ReferralCodeUtil
.
encode
(
expireDateCodeCounter
.
intValue
());
String
expiryDateCode
=
ReferralCodeUtil
.
encode
(
expireDateCodeCounter
.
intValue
());
activity
WinningRecord
.
setExpiryDateCode
(
expiryDateCode
);
activity
LotteryDTO
.
setExpiryDateCode
(
expiryDateCode
);
lotteryVo
.
setExpiryDateCode
(
expiryDateCode
);
lotteryVo
.
setExpiryDateCode
(
expiryDateCode
);
}
}
//发放优惠券
if
(
activityPrize
.
getPrizeGoodsType
()
==
PrizeGoodsTypeEnum
.
COUPON
.
getCode
())
{
UserCouponSendDTO
userCouponSendDTO
=
new
UserCouponSendDTO
();
userCouponSendDTO
.
setCouponId
(
activityPrize
.
getGoodsId
());
userCouponSendDTO
.
setCouponNum
(
1
);
userCouponSendDTO
.
setPhone
(
appUserDTO
.
getUsername
());
userCouponBiz
.
sendCoupon
(
userCouponSendDTO
);
activityWinningRecord
.
setGoodsId
(
activityPrize
.
getGoodsId
());
}
}
}
activityLotteryDTO
.
setActivityId
(
activityId
);
activityWinningRecord
.
setPrizeName
(
activityPrize
.
getName
());
activityLotteryDTO
.
setPrizeType
(
prizeType
);
activityWinningRecordBiz
.
saveRecord
(
activityWinningRecord
);
activityLotteryDTO
.
setUserId
(
appUserDTO
.
getUserid
());
activityLotteryDTO
.
setPhone
(
appUserDTO
.
getUsername
());
activityLotteryDTO
.
setPrizeName
(
activityPrize
.
getName
());
Optional
.
ofNullable
(
activityPrize
.
getGoodsId
()).
ifPresent
(
goodsId
->
activityLotteryDTO
.
setGoodsId
(
goodsId
));
activityLotteryDTO
.
setSerialNumber
(
activityPrize
.
getSerialNumber
());
activityLotteryDTO
.
setPrizeGoodsType
(
activityPrize
.
getPrizeGoodsType
());
lotteryVo
.
setSerialNumber
(
activityPrize
.
getSerialNumber
());
lotteryVo
.
setSerialNumber
(
activityPrize
.
getSerialNumber
());
//更改对应抽奖类型的抽奖次数
//减少用户抽奖次数
activityAttendanceRecordBiz
.
updateLotteryNumByActivityIdAndUserIdAndPrizeType
(
activityId
,
appUserDTO
.
getUserid
(),
prizeType
);
valueOperations
.
decrement
(
lotteryNumKey
);
valueOperations
.
decrement
(
lotteryNumKey
);
//发送抽奖结果消息
rabbitTemplate
.
convertAndSend
(
RabbitConstant
.
ACTIVITY_PRIZE_TOPIC
,
RabbitConstant
.
KEY_ACTIVITY_PRIZE_RECORD
,
activityLotteryDTO
);
}
else
{
}
else
{
lotteryVo
.
setMessage
(
"抽奖次数已用完!!!"
);
lotteryVo
.
setMessage
(
"抽奖次数已用完!!!"
);
}
}
...
@@ -281,7 +280,6 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
...
@@ -281,7 +280,6 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
* @param prizeType
* @param prizeType
* @param serialNumber
* @param serialNumber
*/
*/
@Async
public
void
updatePrizeStock
(
Integer
prizeType
,
Integer
serialNumber
)
{
public
void
updatePrizeStock
(
Integer
prizeType
,
Integer
serialNumber
)
{
mapper
.
updatePrizeStock
(
prizeType
,
serialNumber
);
mapper
.
updatePrizeStock
(
prizeType
,
serialNumber
);
}
}
...
...
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/config/RabbitActivityConfig.java
View file @
17c72286
...
@@ -25,6 +25,7 @@ public class RabbitActivityConfig extends RabbitCommonConfig {
...
@@ -25,6 +25,7 @@ public class RabbitActivityConfig extends RabbitCommonConfig {
//优惠券
//优惠券
public
static
final
String
COUPON_CANCEL_QUEUE
=
"coupon.cancel.queue"
;
public
static
final
String
COUPON_CANCEL_QUEUE
=
"coupon.cancel.queue"
;
public
static
final
String
PRIZE_RECORD_QUEUE
=
"prize:record:queue"
;
static
{
static
{
myQueue
=
new
ArrayList
<
BindDTO
>(){{
myQueue
=
new
ArrayList
<
BindDTO
>(){{
...
@@ -35,6 +36,7 @@ public class RabbitActivityConfig extends RabbitCommonConfig {
...
@@ -35,6 +36,7 @@ public class RabbitActivityConfig extends RabbitCommonConfig {
add
(
new
BindDTO
(
ACTIVITY_NEW_QUEUE
,
ADMIN_TOPIC
,
KEY_APPUSER_AUTH
));
add
(
new
BindDTO
(
ACTIVITY_NEW_QUEUE
,
ADMIN_TOPIC
,
KEY_APPUSER_AUTH
));
add
(
new
BindDTO
(
INTEGRAL_HANDLE_QUEUE
,
INTEGRAL_TOPIC
,
INTEGRAL_ROUTING_KEY
));
add
(
new
BindDTO
(
INTEGRAL_HANDLE_QUEUE
,
INTEGRAL_TOPIC
,
INTEGRAL_ROUTING_KEY
));
add
(
new
BindDTO
(
COUPON_CANCEL_QUEUE
,
ORDER_TOPIC
,
KEY_ORDER_CANCEL
));
add
(
new
BindDTO
(
COUPON_CANCEL_QUEUE
,
ORDER_TOPIC
,
KEY_ORDER_CANCEL
));
add
(
new
BindDTO
(
PRIZE_RECORD_QUEUE
,
ACTIVITY_PRIZE_TOPIC
,
KEY_ACTIVITY_PRIZE_RECORD
));
}};
}};
}
}
...
...
xx-activity/xx-activity-server/src/main/java/com/xxfc/platform/activity/handler/ActivityPrizeMqHandler.java
0 → 100644
View file @
17c72286
package
com
.
xxfc
.
platform
.
activity
.
handler
;
import
com.rabbitmq.client.Channel
;
import
com.xxfc.platform.activity.biz.ActivityAttendanceRecordBiz
;
import
com.xxfc.platform.activity.biz.ActivityPrizeBiz
;
import
com.xxfc.platform.activity.biz.ActivityWinningRecordBiz
;
import
com.xxfc.platform.activity.biz.UserCouponBiz
;
import
com.xxfc.platform.activity.config.RabbitActivityConfig
;
import
com.xxfc.platform.activity.constant.PrizeGoodsTypeEnum
;
import
com.xxfc.platform.activity.dto.ActivityLotteryDTO
;
import
com.xxfc.platform.activity.dto.UserCouponSendDTO
;
import
com.xxfc.platform.activity.entity.ActivityWinningRecord
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.ValueOperations
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
java.io.IOException
;
import
java.util.Date
;
import
java.util.concurrent.TimeUnit
;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/13 11:22
*/
@Component
@RequiredArgsConstructor
(
onConstructor
=
@__
(
@Autowired
))
@Slf4j
public
class
ActivityPrizeMqHandler
{
private
final
ActivityPrizeBiz
activityPrizeBiz
;
private
final
ActivityAttendanceRecordBiz
activityAttendanceRecordBiz
;
private
final
ActivityWinningRecordBiz
activityWinningRecordBiz
;
private
final
UserCouponBiz
userCouponBiz
;
private
final
RedisTemplate
<
String
,
Object
>
redisTemplate
;
@Resource
(
name
=
"redisTemplate"
)
private
ValueOperations
valueOperations
;
private
final
String
R_CONSUME
=
"lottery:reconsume"
;
private
final
int
R_CONSUME_MAX_NUM
=
3
;
@RabbitListener
(
queues
=
RabbitActivityConfig
.
PRIZE_RECORD_QUEUE
)
public
void
processActivityPrizeMsg
(
ActivityLotteryDTO
activityLotteryDTO
,
Channel
channel
){
log
.
info
(
"抽奖消息的数据【{}】"
,
activityLotteryDTO
);
try
{
if
(
activityLotteryDTO
.
getHasWinning
()
==
1
)
{
//更新库存
log
.
info
(
"更新库存:参数【prizeType:{}==serialNumber:{}】"
,
activityLotteryDTO
.
getPrizeType
(),
activityLotteryDTO
.
getSerialNumber
());
activityPrizeBiz
.
updatePrizeStock
(
activityLotteryDTO
.
getPrizeType
(),
activityLotteryDTO
.
getSerialNumber
());
//发放优惠券
if
(
activityLotteryDTO
.
getPrizeGoodsType
()
==
PrizeGoodsTypeEnum
.
COUPON
.
getCode
())
{
UserCouponSendDTO
userCouponSendDTO
=
new
UserCouponSendDTO
();
userCouponSendDTO
.
setCouponId
(
activityLotteryDTO
.
getGoodsId
());
userCouponSendDTO
.
setCouponNum
(
1
);
userCouponSendDTO
.
setPhone
(
activityLotteryDTO
.
getPhone
());
log
.
info
(
"抽中优惠券发送:【参数:{}】"
,
userCouponSendDTO
);
userCouponBiz
.
sendCoupon
(
userCouponSendDTO
);
}
}
ActivityWinningRecord
activityWinningRecord
=
new
ActivityWinningRecord
();
BeanUtils
.
copyProperties
(
activityLotteryDTO
,
activityWinningRecord
);
activityWinningRecord
.
setCrtTime
(
new
Date
());
log
.
info
(
"抽奖记录【{}】"
,
activityWinningRecord
);
activityWinningRecordBiz
.
saveRecord
(
activityWinningRecord
);
//更改对应抽奖类型的抽奖次数
log
.
info
(
"更改对应抽奖类型的抽奖次数【activityId:{}==userId:{}==prizeType:{}】"
,
activityLotteryDTO
.
getActivityId
(),
activityLotteryDTO
.
getUserId
(),
activityLotteryDTO
.
getPrizeType
());
activityAttendanceRecordBiz
.
updateLotteryNumByActivityIdAndUserIdAndPrizeType
(
activityLotteryDTO
.
getActivityId
(),
activityLotteryDTO
.
getUserId
(),
activityLotteryDTO
.
getPrizeType
());
}
catch
(
Exception
ex
){
log
.
error
(
"抽奖消息消费失败【{}】"
,
ex
);
try
{
Long
reConsumeCounter
=
valueOperations
.
increment
(
R_CONSUME
);
if
(
reConsumeCounter
<=
R_CONSUME_MAX_NUM
)
{
channel
.
basicRecover
(
false
);
log
.
info
(
"抽奖消息重回队列成功"
);
}
if
(
reConsumeCounter
==
1
){
redisTemplate
.
expire
(
R_CONSUME
,
1
,
TimeUnit
.
DAYS
);
}
}
catch
(
IOException
e
)
{
log
.
error
(
"消费抽奖消息重回队列失败【{}】"
,
e
);
}
}
}
}
xx-app/xx-app-api/src/main/java/com/xxfc/platform/app/entity/Banner.java
View file @
17c72286
...
@@ -84,6 +84,10 @@ public class Banner {
...
@@ -84,6 +84,10 @@ public class Banner {
@ApiModelProperty
(
value
=
"ios跳转地址"
)
@ApiModelProperty
(
value
=
"ios跳转地址"
)
private
String
iosUrl
;
private
String
iosUrl
;
@Column
(
name
=
"applet_url"
)
@ApiModelProperty
(
"小程序跳转地址"
)
private
String
appletUrl
;
/**
/**
* 是否删除,0否,1是
* 是否删除,0否,1是
*/
*/
...
...
xx-app/xx-app-api/src/main/java/com/xxfc/platform/app/entity/vo/BannerVo.java
View file @
17c72286
...
@@ -26,6 +26,8 @@ public class BannerVo {
...
@@ -26,6 +26,8 @@ public class BannerVo {
private
String
iosUrl
;
private
String
iosUrl
;
private
String
appletUrl
;
/**
/**
* seo html标签优化
* seo html标签优化
*/
*/
...
...
xx-app/xx-app-server/src/main/java/com/xxfc/platform/app/biz/BannerBiz.java
View file @
17c72286
...
@@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.common.vo.PageDataVO;
...
@@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.common.vo.PageDataVO;
import
com.xxfc.platform.app.entity.Banner
;
import
com.xxfc.platform.app.entity.Banner
;
import
com.xxfc.platform.app.entity.vo.BannerVo
;
import
com.xxfc.platform.app.entity.vo.BannerVo
;
import
com.xxfc.platform.app.mapper.BannerMapper
;
import
com.xxfc.platform.app.mapper.BannerMapper
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
java.time.Instant
;
import
java.time.Instant
;
...
@@ -26,12 +27,7 @@ public class BannerBiz extends BaseBiz<BannerMapper,Banner> {
...
@@ -26,12 +27,7 @@ public class BannerBiz extends BaseBiz<BannerMapper,Banner> {
List
<
Banner
>
banners
=
mapper
.
findBannerListByType
(
type
,
location
,
platform
);
List
<
Banner
>
banners
=
mapper
.
findBannerListByType
(
type
,
location
,
platform
);
banners
.
forEach
(
banner
->
{
banners
.
forEach
(
banner
->
{
BannerVo
bannerVo
=
new
BannerVo
();
BannerVo
bannerVo
=
new
BannerVo
();
bannerVo
.
setCover
(
banner
.
getCover
());
BeanUtils
.
copyProperties
(
banner
,
bannerVo
);
bannerVo
.
setUrl
(
banner
.
getUrl
());
bannerVo
.
setTitle
(
banner
.
getTitle
());
bannerVo
.
setId
(
banner
.
getId
());
bannerVo
.
setAlt
(
banner
.
getAlt
());
bannerVo
.
setIosUrl
(
banner
.
getIosUrl
());
bannerVos
.
add
(
bannerVo
);
bannerVos
.
add
(
bannerVo
);
});
});
return
bannerVos
;
return
bannerVos
;
...
...
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