Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
J
jd-activity
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
曾水平
jd-activity
Commits
2cea6c85
Commit
2cea6c85
authored
May 24, 2021
by
曾水平
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
补充本地缓存;数据库连接池配置
parent
6bb1891c
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
101 additions
and
14 deletions
+101
-14
build.gradle
build.gradle
+1
-0
AppController.java
...ava/cn/com/duiba/jdactivity/controller/AppController.java
+2
-2
Open2DuibaController.java
...com/duiba/jdactivity/controller/Open2DuibaController.java
+5
-5
AccessTokenUtils.java
...duiba/jdactivity/developer/jd/utils/AccessTokenUtils.java
+79
-5
application-prod.properties
src/main/resources/application-prod.properties
+1
-1
application.properties
src/main/resources/application.properties
+12
-0
JdApiUtilTest.java
...om/duiba/jdactivity/developer/jd/utils/JdApiUtilTest.java
+1
-1
No files found.
build.gradle
View file @
2cea6c85
...
@@ -48,6 +48,7 @@ dependencies {
...
@@ -48,6 +48,7 @@ dependencies {
compile
(
"org.aspectj:aspectjweaver:1.8.11"
)
compile
(
"org.aspectj:aspectjweaver:1.8.11"
)
//http
//http
compile
'cn.com.duiba.credits:duiba-java-sdk:0.0.23'
compile
'cn.com.duiba.credits:duiba-java-sdk:0.0.23'
compile
(
'com.github.ben-manes.caffeine:caffeine:3.0.2'
)
}
}
...
...
src/main/java/cn/com/duiba/jdactivity/controller/AppController.java
View file @
2cea6c85
...
@@ -80,7 +80,7 @@ public class AppController {
...
@@ -80,7 +80,7 @@ public class AppController {
Long
id
=
accessTokenUtils
.
saveAccessToken
(
jdAppEnum
,
accessTokenByCode
,
shopJosResult
);
Long
id
=
accessTokenUtils
.
saveAccessToken
(
jdAppEnum
,
accessTokenByCode
,
shopJosResult
);
LOGGER
.
info
(
"login,保存AccessToken成功"
);
LOGGER
.
info
(
"login,保存AccessToken成功"
);
if
(
id
!=
null
&&
id
>
0
)
{
if
(
id
!=
null
&&
id
>
0
)
{
Long
shopId
=
accessTokenUtils
.
getAccessToken
(
shopJosResult
.
getVenderId
(),
shopJosResult
.
getShopId
()).
getShopId
();
Long
shopId
=
accessTokenUtils
.
getAccessToken
WithCache
(
shopJosResult
.
getVenderId
(),
shopJosResult
.
getShopId
()).
getShopId
();
LOGGER
.
info
(
"login,保存AccessToken成功,shopId={}"
,
shopId
);
LOGGER
.
info
(
"login,保存AccessToken成功,shopId={}"
,
shopId
);
}
}
...
@@ -118,7 +118,7 @@ public class AppController {
...
@@ -118,7 +118,7 @@ public class AppController {
if
(
user
==
null
)
{
if
(
user
==
null
)
{
return
ResultBuilder
.
fail
(
"未登录"
);
return
ResultBuilder
.
fail
(
"未登录"
);
}
}
TbShopAccessTokenDto
accessToken
=
accessTokenUtils
.
getAccessToken
(
user
.
getVenderId
(),
user
.
getShopId
());
TbShopAccessTokenDto
accessToken
=
accessTokenUtils
.
getAccessToken
WithCache
(
user
.
getVenderId
(),
user
.
getShopId
());
JdAppEnum
jdAppEnum
=
JdAppEnum
.
getAppByAppKey
(
accessToken
.
getAppKey
());
JdAppEnum
jdAppEnum
=
JdAppEnum
.
getAppByAppKey
(
accessToken
.
getAppKey
());
Result
<
ShopJosResult
>
shopJosResultResult
=
jdApiUtil
.
venderShopQuery
(
jdAppEnum
,
accessToken
.
getAccessToken
());
Result
<
ShopJosResult
>
shopJosResultResult
=
jdApiUtil
.
venderShopQuery
(
jdAppEnum
,
accessToken
.
getAccessToken
());
JSONObject
jsonObject
=
new
JSONObject
();
JSONObject
jsonObject
=
new
JSONObject
();
...
...
src/main/java/cn/com/duiba/jdactivity/controller/Open2DuibaController.java
View file @
2cea6c85
...
@@ -104,7 +104,7 @@ public class Open2DuibaController {
...
@@ -104,7 +104,7 @@ public class Open2DuibaController {
source
=
JdTokenSourceEnum
.
JD
.
getSource
();
source
=
JdTokenSourceEnum
.
JD
.
getSource
();
}
}
TbShopAccessTokenDto
accessToken
=
accessTokenUtils
.
getAccessToken
(
venderId
,
shopId
);
TbShopAccessTokenDto
accessToken
=
accessTokenUtils
.
getAccessToken
WithCache
(
venderId
,
shopId
);
LOGGER
.
info
(
"获取accessToken,结果={}"
,
JSON
.
toJSONString
(
accessToken
));
LOGGER
.
info
(
"获取accessToken,结果={}"
,
JSON
.
toJSONString
(
accessToken
));
JdAppEnum
appByAppKey
=
JdAppEnum
.
getAppByAppKey
(
accessToken
.
getAppKey
());
JdAppEnum
appByAppKey
=
JdAppEnum
.
getAppByAppKey
(
accessToken
.
getAppKey
());
...
@@ -185,7 +185,7 @@ public class Open2DuibaController {
...
@@ -185,7 +185,7 @@ public class Open2DuibaController {
uid
=
uid
.
replaceAll
(
" "
,
"+"
);
uid
=
uid
.
replaceAll
(
" "
,
"+"
);
signVerify
(
"是否关注店铺"
);
signVerify
(
"是否关注店铺"
);
TbShopAccessTokenDto
accessToken
=
accessTokenUtils
.
getAccessToken
(
venderId
,
shopId
);
TbShopAccessTokenDto
accessToken
=
accessTokenUtils
.
getAccessToken
WithCache
(
venderId
,
shopId
);
JdAppEnum
appEnum
=
JdAppEnum
.
getAppByAppKey
(
accessToken
.
getAppKey
());
JdAppEnum
appEnum
=
JdAppEnum
.
getAppByAppKey
(
accessToken
.
getAppKey
());
String
pin
=
convert2Pin
(
appEnum
,
accessToken
.
getAccessToken
(),
uid
);
String
pin
=
convert2Pin
(
appEnum
,
accessToken
.
getAccessToken
(),
uid
);
Result
<
Boolean
>
follow
=
jdApiUtil
.
isFollowByPinAndVid
(
appEnum
,
pin
,
shopId
);
Result
<
Boolean
>
follow
=
jdApiUtil
.
isFollowByPinAndVid
(
appEnum
,
pin
,
shopId
);
...
@@ -208,7 +208,7 @@ public class Open2DuibaController {
...
@@ -208,7 +208,7 @@ public class Open2DuibaController {
uid
=
uid
.
replaceAll
(
" "
,
"+"
);
uid
=
uid
.
replaceAll
(
" "
,
"+"
);
signVerify
(
"关注店铺"
);
signVerify
(
"关注店铺"
);
TbShopAccessTokenDto
accessToken
=
accessTokenUtils
.
getAccessToken
(
venderId
,
shopId
);
TbShopAccessTokenDto
accessToken
=
accessTokenUtils
.
getAccessToken
WithCache
(
venderId
,
shopId
);
JdAppEnum
appEnum
=
JdAppEnum
.
getAppByAppKey
(
accessToken
.
getAppKey
());
JdAppEnum
appEnum
=
JdAppEnum
.
getAppByAppKey
(
accessToken
.
getAppKey
());
String
pin
=
convert2Pin
(
appEnum
,
accessToken
.
getAccessToken
(),
uid
);
String
pin
=
convert2Pin
(
appEnum
,
accessToken
.
getAccessToken
(),
uid
);
Result
<
Boolean
>
follow
=
jdApiUtil
.
followByPinAndVid
(
appEnum
,
pin
,
shopId
,
accessToken
.
getAccessToken
());
Result
<
Boolean
>
follow
=
jdApiUtil
.
followByPinAndVid
(
appEnum
,
pin
,
shopId
,
accessToken
.
getAccessToken
());
...
@@ -270,7 +270,7 @@ public class Open2DuibaController {
...
@@ -270,7 +270,7 @@ public class Open2DuibaController {
uid
=
uid
.
replaceAll
(
" "
,
"+"
);
uid
=
uid
.
replaceAll
(
" "
,
"+"
);
signVerify
(
"是否是会员"
);
signVerify
(
"是否是会员"
);
TbShopAccessTokenDto
accessToken
=
accessTokenUtils
.
getAccessToken
(
venderId
,
shopId
);
TbShopAccessTokenDto
accessToken
=
accessTokenUtils
.
getAccessToken
WithCache
(
venderId
,
shopId
);
JdAppEnum
appEnum
=
JdAppEnum
.
getAppByAppKey
(
accessToken
.
getAppKey
());
JdAppEnum
appEnum
=
JdAppEnum
.
getAppByAppKey
(
accessToken
.
getAppKey
());
String
pin
=
convert2Pin
(
appEnum
,
accessToken
.
getAccessToken
(),
uid
);
String
pin
=
convert2Pin
(
appEnum
,
accessToken
.
getAccessToken
(),
uid
);
Result
<
EssentialCustomerInfo
>
result
=
jdApiUtil
.
getCustomer
(
appEnum
,
accessToken
.
getAccessToken
(),
pin
);
Result
<
EssentialCustomerInfo
>
result
=
jdApiUtil
.
getCustomer
(
appEnum
,
accessToken
.
getAccessToken
(),
pin
);
...
@@ -299,7 +299,7 @@ public class Open2DuibaController {
...
@@ -299,7 +299,7 @@ public class Open2DuibaController {
uid
=
uid
.
replaceAll
(
" "
,
"+"
);
uid
=
uid
.
replaceAll
(
" "
,
"+"
);
signVerify
(
"发放优惠券"
);
signVerify
(
"发放优惠券"
);
TbShopAccessTokenDto
accessToken
=
accessTokenUtils
.
getAccessToken
(
venderId
,
shopId
);
TbShopAccessTokenDto
accessToken
=
accessTokenUtils
.
getAccessToken
WithCache
(
venderId
,
shopId
);
JdAppEnum
appEnum
=
JdAppEnum
.
getAppByAppKey
(
accessToken
.
getAppKey
());
JdAppEnum
appEnum
=
JdAppEnum
.
getAppByAppKey
(
accessToken
.
getAppKey
());
String
pin
=
convert2Pin
(
appEnum
,
accessToken
.
getAccessToken
(),
uid
);
String
pin
=
convert2Pin
(
appEnum
,
accessToken
.
getAccessToken
(),
uid
);
...
...
src/main/java/cn/com/duiba/jdactivity/developer/jd/utils/AccessTokenUtils.java
View file @
2cea6c85
...
@@ -11,14 +11,21 @@ import cn.com.duiba.jdactivity.service.TbShopAccessTokenService;
...
@@ -11,14 +11,21 @@ import cn.com.duiba.jdactivity.service.TbShopAccessTokenService;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONValidator
;
import
com.alibaba.fastjson.JSONValidator
;
import
com.github.benmanes.caffeine.cache.Cache
;
import
com.github.benmanes.caffeine.cache.Caffeine
;
import
com.github.benmanes.caffeine.cache.Expiry
;
import
com.jd.open.api.sdk.domain.seller.ShopSafService.response.query.ShopJosResult
;
import
com.jd.open.api.sdk.domain.seller.ShopSafService.response.query.ShopJosResult
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.tuple.Pair
;
import
org.checkerframework.checker.index.qual.NonNegative
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.time.LocalDate
;
import
java.time.ZoneOffset
;
import
java.util.Comparator
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
...
@@ -44,6 +51,34 @@ public class AccessTokenUtils {
...
@@ -44,6 +51,34 @@ public class AccessTokenUtils {
@Resource
@Resource
private
TbShopAccessTokenService
tbShopAccessTokenService
;
private
TbShopAccessTokenService
tbShopAccessTokenService
;
/**
* 活动类型名称缓存
*/
private
static
final
Cache
<
String
,
TbShopAccessTokenDto
>
ACCESS_TOKEN_CACHE
=
Caffeine
.
newBuilder
()
.
expireAfter
(
new
Expiry
<
String
,
TbShopAccessTokenDto
>()
{
@Override
public
long
expireAfterCreate
(
String
key
,
TbShopAccessTokenDto
value
,
long
currentTime
)
{
// 明天零点跟过期时间取最小
return
Math
.
min
(
value
.
getExpiresTime
().
getTime
(),
LocalDate
.
now
().
plusDays
(
1
).
atStartOfDay
().
toEpochSecond
(
ZoneOffset
.
of
(
"+8"
)));
}
@Override
public
long
expireAfterUpdate
(
String
key
,
TbShopAccessTokenDto
value
,
long
currentTime
,
@NonNegative
long
currentDuration
)
{
// 明天零点跟过期时间取最小
return
Math
.
min
(
value
.
getExpiresTime
().
getTime
(),
LocalDate
.
now
().
plusDays
(
1
).
atStartOfDay
().
toEpochSecond
(
ZoneOffset
.
of
(
"+8"
)));
}
@Override
public
long
expireAfterRead
(
String
key
,
TbShopAccessTokenDto
value
,
long
currentTime
,
@NonNegative
long
currentDuration
)
{
return
0
;
}
})
.
initialCapacity
(
10
)
.
maximumSize
(
100
)
.
build
();
public
String
generateAuthUrl
(
JdAppEnum
appKey
,
String
state
)
{
public
String
generateAuthUrl
(
JdAppEnum
appKey
,
String
state
)
{
Map
<
String
,
String
>
param
=
new
TreeMap
<>();
Map
<
String
,
String
>
param
=
new
TreeMap
<>();
param
.
put
(
"app_key"
,
appKey
.
getAppKey
());
param
.
put
(
"app_key"
,
appKey
.
getAppKey
());
...
@@ -75,10 +110,8 @@ public class AccessTokenUtils {
...
@@ -75,10 +110,8 @@ public class AccessTokenUtils {
return
null
;
return
null
;
}
}
private
static
String
getCacheKey
(
Long
venderId
,
Long
shopId
)
{
public
Long
saveAccessToken
(
JdAppEnum
jdAppEnum
,
AccessTokenResponse
accessTokenByCode
,
ShopJosResult
data
)
{
return
String
.
format
(
"%s_%s"
,
venderId
,
shopId
);
TbShopAccessTokenDto
tbShopAccessTokenDto
=
assembleTbShopAccessTokenDto
(
jdAppEnum
,
accessTokenByCode
,
data
);
return
tbShopAccessTokenService
.
insert
(
tbShopAccessTokenDto
);
}
}
private
TbShopAccessTokenDto
assembleTbShopAccessTokenDto
(
JdAppEnum
jdAppEnum
,
AccessTokenResponse
accessTokenByCode
,
ShopJosResult
data
)
{
private
TbShopAccessTokenDto
assembleTbShopAccessTokenDto
(
JdAppEnum
jdAppEnum
,
AccessTokenResponse
accessTokenByCode
,
ShopJosResult
data
)
{
...
@@ -99,8 +132,49 @@ public class AccessTokenUtils {
...
@@ -99,8 +132,49 @@ public class AccessTokenUtils {
return
tbShopAccessTokenDto
;
return
tbShopAccessTokenDto
;
}
}
private
static
Pair
<
String
,
String
>
splitCacheKey
(
String
key
)
throws
BizException
{
String
[]
split
=
key
.
split
(
"_"
);
if
(
split
.
length
!=
2
)
{
throw
new
BizException
(
"key不合法"
+
key
);
}
return
Pair
.
of
(
split
[
0
],
split
[
1
]);
}
public
Long
saveAccessToken
(
JdAppEnum
jdAppEnum
,
AccessTokenResponse
accessTokenByCode
,
ShopJosResult
data
)
{
ACCESS_TOKEN_CACHE
.
invalidate
(
getCacheKey
(
data
.
getVenderId
(),
data
.
getShopId
()));
TbShopAccessTokenDto
tbShopAccessTokenDto
=
assembleTbShopAccessTokenDto
(
jdAppEnum
,
accessTokenByCode
,
data
);
return
tbShopAccessTokenService
.
insert
(
tbShopAccessTokenDto
);
}
public
TbShopAccessTokenDto
getAccessTokenWithCache
(
Long
venderId
,
Long
shopId
)
throws
BizException
{
if
(
venderId
==
null
||
shopId
==
null
||
venderId
==
0L
||
shopId
==
0L
)
{
throw
new
BizException
(
"店铺参数不存在"
);
}
String
key
=
getCacheKey
(
venderId
,
shopId
);
TbShopAccessTokenDto
tbShopAccessTokenDto
=
ACCESS_TOKEN_CACHE
.
get
(
key
,
s
->
{
try
{
Pair
<
String
,
String
>
pair
=
splitCacheKey
(
key
);
return
getAccessTokenWithoutCache
(
Long
.
parseLong
(
pair
.
getRight
()),
Long
.
parseLong
(
pair
.
getRight
()));
}
catch
(
BizException
e
)
{
LOGGER
.
warn
(
"加载缓存失败"
);
return
null
;
}
});
if
(
tbShopAccessTokenDto
==
null
)
{
throw
new
BizException
(
"店铺授权获取失败"
+
shopId
);
}
if
(
tbShopAccessTokenDto
.
getExpiresTime
().
before
(
new
Date
()))
{
ACCESS_TOKEN_CACHE
.
invalidate
(
key
);
throw
new
BizException
(
"店铺授权获取失败"
+
shopId
);
}
return
tbShopAccessTokenDto
;
}
p
ublic
TbShopAccessTokenDto
getAccessToken
(
Long
venderId
,
Long
shopId
)
throws
BizException
{
p
rivate
TbShopAccessTokenDto
getAccessTokenWithoutCache
(
Long
venderId
,
Long
shopId
)
throws
BizException
{
if
(
venderId
==
null
||
shopId
==
null
||
venderId
==
0L
||
shopId
==
0L
)
{
if
(
venderId
==
null
||
shopId
==
null
||
venderId
==
0L
||
shopId
==
0L
)
{
throw
new
BizException
(
"店铺参数不存在"
);
throw
new
BizException
(
"店铺参数不存在"
);
}
}
...
...
src/main/resources/application-prod.properties
View file @
2cea6c85
#MySQL配置 注意这是内网地址
#MySQL配置 注意这是内网地址
spring.datasource.url
=
jdbc:mysql://mysql-cn-north-1-5321aee1b70d421c.rds.jdcloud.com:3306/custom?
serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.url
=
jdbc:mysql://mysql-cn-north-1-5321aee1b70d421c.rds.jdcloud.com:3306/custom?
createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&connectTimeout=5000&socketTimeout=60000
spring.datasource.username
=
jd_activity
spring.datasource.username
=
jd_activity
spring.datasource.password
=
kP6oWdeYU78tHee70bcs
spring.datasource.password
=
kP6oWdeYU78tHee70bcs
spring.datasource.driver-class-name
=
com.mysql.cj.jdbc.Driver
spring.datasource.driver-class-name
=
com.mysql.cj.jdbc.Driver
...
...
src/main/resources/application.properties
View file @
2cea6c85
...
@@ -17,4 +17,16 @@ spring.thymeleaf.prefix=classpath:templates/
...
@@ -17,4 +17,16 @@ spring.thymeleaf.prefix=classpath:templates/
spring.thymeleaf.suffix
=
.html
spring.thymeleaf.suffix
=
.html
spring.thymeleaf.mode
=
HTML
spring.thymeleaf.mode
=
HTML
spring.thymeleaf.cache
=
false
spring.thymeleaf.cache
=
false
#连接池最大连接数
spring.datasource.tomcat.max-active
=
8
#连接池的初始化连接数
spring.datasource.tomcat.initial-size
=
3
#连接池最大空闲链接数
spring.datasource.tomcat.max-idle
=
8
#连接池最小空闲连接数
spring.datasource.tomcat.min-idle
=
0
#等待连接池的最大时间
spring.datasource.tomcat.max-wait
=
3000
#连接最大存活时间
spring.datasource.tomcat.max-age
=
1800000
src/test/java/cn/com/duiba/jdactivity/developer/jd/utils/JdApiUtilTest.java
View file @
2cea6c85
...
@@ -65,7 +65,7 @@ class JdApiUtilTest extends BaseTest {
...
@@ -65,7 +65,7 @@ class JdApiUtilTest extends BaseTest {
void
createCoupon
()
{
void
createCoupon
()
{
System
.
out
.
println
(
JSON
.
toJSONString
(
System
.
out
.
println
(
JSON
.
toJSONString
(
jdApiUtil
.
createCoupon
(
JdAppEnum
.
DUIBA
,
"dfef1ede28aa455999ddefe2944980cfzguy"
,
jdApiUtil
.
createCoupon
(
JdAppEnum
.
DUIBA
,
"dfef1ede28aa455999ddefe2944980cfzguy"
,
"测试优惠券-
zsp-06"
,
2
)));
"测试优惠券-
排行榜-01"
,
50
)));
}
}
...
...
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