Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mall-server
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
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
yimu
mall-server
Commits
867ee2ca
Commit
867ee2ca
authored
Mar 10, 2022
by
wlx@33.cn
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加盲盒商品预热
parent
de2c130a
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
128 additions
and
7 deletions
+128
-7
MallServerFrontApplication.java
...com/fzm/mall/server/front/MallServerFrontApplication.java
+3
-0
GoodCache.java
...a/com/fzm/mall/server/front/constant/cache/GoodCache.java
+7
-0
IOrderBindBoxServiceImpl.java
...er/front/order/service/impl/IOrderBindBoxServiceImpl.java
+26
-5
GoodRedis.java
.../main/java/com/fzm/mall/server/front/redis/GoodRedis.java
+24
-0
GoodsSkuTask.java
...va/com/fzm/mall/server/front/task/goods/GoodsSkuTask.java
+56
-0
application-dev.yml
mall-server-front/src/main/resources/application-dev.yml
+4
-0
application-test.yml
mall-server-front/src/main/resources/application-test.yml
+3
-0
application-test1.yml
mall-server-front/src/main/resources/application-test1.yml
+5
-2
No files found.
mall-server-front/src/main/java/com/fzm/mall/server/front/MallServerFrontApplication.java
View file @
867ee2ca
...
...
@@ -6,10 +6,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import
org.springframework.boot.web.servlet.MultipartConfigFactory
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
org.springframework.util.unit.DataSize
;
import
javax.servlet.MultipartConfigElement
;
@EnableScheduling
@MapperScan
(
"com.fzm.mall.server.front.*.mapper"
)
@SpringBootApplication
(
scanBasePackages
=
"com.fzm.mall"
)
public
class
MallServerFrontApplication
{
...
...
@@ -21,6 +23,7 @@ public class MallServerFrontApplication {
System
.
out
.
println
(
"ssssssssssssssssssssss"
+
e
.
toString
());
}
}
@Bean
public
MultipartConfigElement
multipartConfigElement
()
{
MultipartConfigFactory
factory
=
new
MultipartConfigFactory
();
...
...
mall-server-front/src/main/java/com/fzm/mall/server/front/constant/cache/GoodCache.java
View file @
867ee2ca
package
com
.
fzm
.
mall
.
server
.
front
.
constant
.
cache
;
import
com.fzm.mall.server.front.constant.MALLGlobalConfig
;
/**
* springboot 2.0
*
...
...
@@ -67,4 +69,9 @@ public class GoodCache {
* 商品提货物流信息
*/
public
static
final
String
GOOD_LOGISTICS
=
"mall_good_logistics_"
;
/**
* 商品可用规格库存信息
*/
public
static
final
String
GOOD_SKU_EFFECTIVE
=
MALLGlobalConfig
.
PJ_SUFFIX
+
"_good_sku_effective_"
;
}
mall-server-front/src/main/java/com/fzm/mall/server/front/order/service/impl/IOrderBindBoxServiceImpl.java
View file @
867ee2ca
...
...
@@ -4,6 +4,8 @@ import com.fzm.mall.server.front.constant.GoodMainConst;
import
com.fzm.mall.server.front.goods.mapper.GoodSkuMapper
;
import
com.fzm.mall.server.front.goods.model.vo.SkuVo
;
import
com.fzm.mall.server.front.order.service.IOrderBindBoxService
;
import
com.fzm.mall.server.front.redis.GoodRedis
;
import
com.fzm.mall.server.front.redis.OrderRedis
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -13,6 +15,7 @@ import org.springframework.util.CollectionUtils;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.concurrent.ThreadLocalRandom
;
import
java.util.concurrent.TimeUnit
;
/**
* @author wulixian
...
...
@@ -20,19 +23,33 @@ import java.util.concurrent.ThreadLocalRandom;
*/
@Slf4j
@Service
@RequiredArgsConstructor
(
onConstructor
=
@__
(
@Autowired
))
public
class
IOrderBindBoxServiceImpl
implements
IOrderBindBoxService
{
private
final
GoodSkuMapper
goodSkuMapper
;
@Autowired
private
GoodSkuMapper
goodSkuMapper
;
@Autowired
private
GoodRedis
goodRedis
;
@Override
public
SkuVo
genRandomSku
(
String
goodsId
)
{
long
wStart
=
System
.
currentTimeMillis
();
SkuVo
result
=
null
;
/**
*
从数据库获取库存大于0的盲盒sku列表
*
提前预热,减轻数据库压力
*/
List
<
SkuVo
>
skuList
=
goodSkuMapper
.
listAvailableSku
(
goodsId
);
long
wStart
=
System
.
currentTimeMillis
();
List
<
SkuVo
>
skuList
=
goodRedis
.
getEffecticveSku
(
goodsId
);
if
(
CollectionUtils
.
isEmpty
(
skuList
)){
log
.
error
(
"redis中读取"
);
/**
* 从数据库获取库存大于0的盲盒sku列表
*/
skuList
=
goodSkuMapper
.
listAvailableSku
(
goodsId
);
/**
* 1分钟缓存
*/
goodRedis
.
setEffecticveSku
(
goodsId
,
skuList
,
1
,
TimeUnit
.
MINUTES
);
}
while
(!
CollectionUtils
.
isEmpty
(
skuList
)){
int
difficulty
=
skuList
.
stream
().
map
(
SkuVo:
:
getDifficulty
).
findFirst
().
get
();
result
=
genRandomSku
(
skuList
,
difficulty
);
...
...
@@ -53,6 +70,10 @@ public class IOrderBindBoxServiceImpl implements IOrderBindBoxService {
}
long
wEnd
=
System
.
currentTimeMillis
();
log
.
info
(
"循环耗时:"
+(
wEnd
-
wStart
));
/**
* 将缓存更新
*/
goodRedis
.
setEffecticveSku
(
goodsId
,
skuList
,
1
,
TimeUnit
.
MINUTES
);
if
(
result
==
null
)
{
throw
new
RuntimeException
(
"库存不足!!!"
);
}
...
...
mall-server-front/src/main/java/com/fzm/mall/server/front/redis/GoodRedis.java
View file @
867ee2ca
...
...
@@ -5,6 +5,8 @@ import com.fzm.mall.server.front.asset.model.vo.good.*;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fzm.mall.server.front.goods.model.GoodSale
;
import
com.fzm.mall.server.front.goods.model.GoodSpu
;
import
com.fzm.mall.server.front.goods.model.vo.SkuVo
;
import
com.fzm.mall.server.front.order.model.Order
;
import
com.fzm.mall.server.front.repository.RedisRepository
;
import
com.fzm.mall.server.front.constant.cache.GoodCache
;
import
lombok.RequiredArgsConstructor
;
...
...
@@ -216,4 +218,26 @@ public class GoodRedis {
public
void
delState
(
String
gid
)
{
redisRepository
.
delObj
(
GoodCache
.
GOOD_STATE
+
gid
);
}
public
void
setEffecticveSku
(
String
goodsId
,
List
<
SkuVo
>
effectiveSkuList
,
long
time
,
TimeUnit
timeUnit
){
redisRepository
.
setObj
(
GoodCache
.
GOOD_SKU_EFFECTIVE
+
goodsId
,
effectiveSkuList
,
time
,
timeUnit
);
}
public
List
<
SkuVo
>
getEffecticveSku
(
String
goodsId
){
try
{
Object
obj
=
redisRepository
.
getObj
(
GoodCache
.
GOOD_SKU_EFFECTIVE
+
goodsId
);
if
(
obj
!=
null
)
{
return
JSON
.
parseArray
(
JSON
.
toJSONString
(
obj
),
SkuVo
.
class
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
// 缓存中获取的数据转换发生错误,重置缓存
delEffecticveSku
(
goodsId
);
}
return
null
;
}
public
void
delEffecticveSku
(
String
goodsId
){
redisRepository
.
delObj
(
GoodCache
.
GOOD_SKU_EFFECTIVE
+
goodsId
);
}
}
mall-server-front/src/main/java/com/fzm/mall/server/front/task/goods/GoodsSkuTask.java
0 → 100644
View file @
867ee2ca
package
com
.
fzm
.
mall
.
server
.
front
.
task
.
goods
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.fzm.mall.server.front.constant.StateConst
;
import
com.fzm.mall.server.front.enums.GoodSpuSalesTypeEnum
;
import
com.fzm.mall.server.front.goods.mapper.GoodSkuMapper
;
import
com.fzm.mall.server.front.goods.mapper.GoodSpuMapper
;
import
com.fzm.mall.server.front.goods.model.GoodSpu
;
import
com.fzm.mall.server.front.goods.model.vo.SkuVo
;
import
com.fzm.mall.server.front.redis.GoodRedis
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.CollectionUtils
;
import
java.util.List
;
import
java.util.concurrent.TimeUnit
;
/**
* @author wulixian
* @since 2022/3/10
*/
@Component
@Slf4j
public
class
GoodsSkuTask
{
@Autowired
private
GoodSkuMapper
goodSkuMapper
;
@Autowired
private
GoodSpuMapper
goodSpuMapper
;
@Autowired
private
GoodRedis
goodRedis
;
//提前预加载盲盒商品
@Scheduled
(
cron
=
"${goods.effective-sku-preload}"
)
public
void
preLoadBlindBoxEffectiveSku
()
{
log
.
info
(
"开始预加载盲盒商品"
);
QueryWrapper
<
GoodSpu
>
spuWrapper
=
new
QueryWrapper
<>();
spuWrapper
.
eq
(
"status"
,
StateConst
.
ACTIVE_SUCCESS
)
.
eq
(
"sales_type"
,
GoodSpuSalesTypeEnum
.
BLIND_BOX
.
getType
());
List
<
GoodSpu
>
spuList
=
goodSpuMapper
.
selectList
(
spuWrapper
);
if
(
CollectionUtils
.
isEmpty
(
spuList
)){
return
;
}
spuList
.
forEach
(
goodSpu
->
{
List
<
SkuVo
>
skuList
=
goodSkuMapper
.
listAvailableSku
(
goodSpu
.
getGoodsId
());
/**
* 定时任务预加载设置缓存时间为23小时
*/
goodRedis
.
setEffecticveSku
(
goodSpu
.
getGoodsId
(),
skuList
,
23
,
TimeUnit
.
HOURS
);
});
}
}
mall-server-front/src/main/resources/application-dev.yml
View file @
867ee2ca
...
...
@@ -95,3 +95,6 @@ alipay:
pay-notify-url
:
http://testwxc.huowulian365.com/root/xls/alipay/without/payNotify
pay-postfee-url
:
http://testwxc.huowulian365.com/root/xls/alipay/without/payPostFee
refund-notify-url
:
http://testwxc.huowulian365.com/root/pay/refundNotify
goods
:
effective-sku-preload
:
0 0 0 * * ?
\ No newline at end of file
mall-server-front/src/main/resources/application-test.yml
View file @
867ee2ca
...
...
@@ -95,3 +95,6 @@ express:
key
:
key
# 阿里云调用: appcode
appcode
:
d97dd0febda34a64a751f3ff6ea6d242
goods
:
effective-sku-preload
:
0 0 0 * * ?
mall-server-front/src/main/resources/application-test1.yml
View file @
867ee2ca
...
...
@@ -75,4 +75,7 @@ alipay:
notify-url
:
http://47.99.152.140:8092/pay/mainNotify
pay-notify-url
:
http://testwxc.huowulian365.com/root/xls/alipay/without/payNotify
pay-postfee-url
:
http://testwxc.huowulian365.com/root/xls/alipay/without/payPostFee
refund-notify-url
:
http://testwxc.huowulian365.com/root/pay/refundNotify
\ No newline at end of file
refund-notify-url
:
http://testwxc.huowulian365.com/root/pay/refundNotify
goods
:
effective-sku-preload
:
0 0 0 * * ?
\ No newline at end of file
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