Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
order-group
Overview
Overview
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
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
order-group-application
order-group
Commits
1fb057b9
Commit
1fb057b9
authored
May 17, 2021
by
周晓航
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改 sdk版本 Redis数据根据开关配置 替换ES数据
parent
5e14d013
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
193 additions
and
9 deletions
+193
-9
ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/config/OrderCenterProperties.java
+29
-1
ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/response/orderInfo/OrderInfoReqs.java
+1
-1
ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/service/OrderDownLoadSdkService.java
+163
-7
No files found.
ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/config/OrderCenterProperties.java
View file @
1fb057b9
...
@@ -13,10 +13,38 @@
...
@@ -13,10 +13,38 @@
package
com
.
freemud
.
application
.
sdk
.
api
.
ordercenter
.
config
;
package
com
.
freemud
.
application
.
sdk
.
api
.
ordercenter
.
config
;
import
com.freemud.application.sdk.api.config.CenterConfigProperties
;
import
com.freemud.application.sdk.api.config.CenterConfigProperties
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.List
;
@Component
@Component
@ConfigurationProperties
(
prefix
=
"order"
)
@ConfigurationProperties
(
prefix
=
"order"
)
public
class
OrderCenterProperties
extends
CenterConfigProperties
{
public
class
OrderCenterProperties
extends
CenterConfigProperties
{
/**
* 校验 多少时间类 从redis拿 数据 反馈es查询结果
*/
private
int
redisToEsTimeLimit
=
0
;
private
List
<
String
>
redisToEsPartnerIds
=
new
ArrayList
<>();
public
List
<
String
>
getRedisToEsPartnerIds
()
{
return
redisToEsPartnerIds
;
}
public
void
setRedisToEsPartnerIds
(
List
<
String
>
redisToEsPartnerIds
)
{
this
.
redisToEsPartnerIds
=
redisToEsPartnerIds
;
}
public
int
getRedisToEsTimeLimit
()
{
return
redisToEsTimeLimit
;
}
public
void
setRedisToEsTimeLimit
(
int
redisToEsTimeLimit
)
{
this
.
redisToEsTimeLimit
=
redisToEsTimeLimit
;
}
}
}
ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/response/orderInfo/OrderInfoReqs.java
View file @
1fb057b9
...
@@ -19,7 +19,7 @@ import lombok.Data;
...
@@ -19,7 +19,7 @@ import lombok.Data;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.util.List
;
import
java.util.List
;
// fisherman
@Data
@Data
public
class
OrderInfoReqs
{
public
class
OrderInfoReqs
{
...
...
ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/service/OrderDownLoadSdkService.java
View file @
1fb057b9
package
com
.
freemud
.
application
.
sdk
.
api
.
ordercenter
.
service
;
package
com
.
freemud
.
application
.
sdk
.
api
.
ordercenter
.
service
;
import
com.alibaba.fastjson.JSON
;
import
com.freemud.application.sdk.api.base.BaseRequest
;
import
com.freemud.application.sdk.api.base.BaseRequest
;
import
com.freemud.application.sdk.api.log.ApiLog
;
import
com.freemud.application.sdk.api.log.LogThreadLocal
;
import
com.freemud.application.sdk.api.log.ThirdPartyLog
;
import
com.freemud.application.sdk.api.log.ThirdPartyLog
;
import
com.freemud.application.sdk.api.ordercenter.config.OrderCenterProperties
;
import
com.freemud.application.sdk.api.ordercenter.config.OrderDownLoadCenterProperties
;
import
com.freemud.application.sdk.api.ordercenter.config.OrderDownLoadCenterProperties
;
import
com.freemud.application.sdk.api.ordercenter.constant.InterfaceAddressConstant
;
import
com.freemud.application.sdk.api.ordercenter.constant.InterfaceAddressConstant
;
import
com.freemud.application.sdk.api.ordercenter.enums.ResponseResultEnum
;
import
com.freemud.application.sdk.api.ordercenter.enums.ResponseResultEnum
;
...
@@ -10,6 +12,7 @@ import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq;
...
@@ -10,6 +12,7 @@ import com.freemud.application.sdk.api.ordercenter.request.OrderConditionsReq;
import
com.freemud.application.sdk.api.ordercenter.request.ParkingOrderConditionsReq
;
import
com.freemud.application.sdk.api.ordercenter.request.ParkingOrderConditionsReq
;
import
com.freemud.application.sdk.api.ordercenter.request.QueryAfterSalesOrderConditionsReq
;
import
com.freemud.application.sdk.api.ordercenter.request.QueryAfterSalesOrderConditionsReq
;
import
com.freemud.application.sdk.api.ordercenter.request.QueryOrderByScrollRequest
;
import
com.freemud.application.sdk.api.ordercenter.request.QueryOrderByScrollRequest
;
import
com.freemud.application.sdk.api.ordercenter.request.create.BatchQueryByCodesReq
;
import
com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse
;
import
com.freemud.application.sdk.api.ordercenter.response.BaseDownLoadResponse
;
import
com.freemud.application.sdk.api.ordercenter.response.AfterSalesListResp
;
import
com.freemud.application.sdk.api.ordercenter.response.AfterSalesListResp
;
import
com.freemud.application.sdk.api.ordercenter.response.BaseResponse
;
import
com.freemud.application.sdk.api.ordercenter.response.BaseResponse
;
...
@@ -19,15 +22,15 @@ import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoR
...
@@ -19,15 +22,15 @@ import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoR
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderStatisticsResp
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderStatisticsResp
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.QueryByCodeResponse
;
import
com.freemud.application.sdk.api.ordercenter.response.orderInfo.QueryByCodeResponse
;
import
com.freemud.application.sdk.api.util.RequestThirdPartyUtils
;
import
com.freemud.application.sdk.api.util.RequestThirdPartyUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.core.ParameterizedTypeReference
;
import
org.springframework.core.ParameterizedTypeReference
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.web.client.RestTemplate
;
import
org.springframework.web.client.RestTemplate
;
import
java.util.
List
;
import
java.util.
*
;
import
java.util.
Object
s
;
import
java.util.
stream.Collector
s
;
/**
/**
* All rights Reserved, Designed By www.freemud.com
* All rights Reserved, Designed By www.freemud.com
...
@@ -50,7 +53,10 @@ public class OrderDownLoadSdkService {
...
@@ -50,7 +53,10 @@ public class OrderDownLoadSdkService {
@Autowired
@Autowired
private
OrderDownLoadCenterProperties
orderCenterProperties
;
private
OrderDownLoadCenterProperties
orderCenterProperties
;
public
static
final
String
SUCCESS_RESPONSE_CODE
=
"100"
;
public
static
final
String
SUCCESS_RESPONSE_CODE
=
"100"
;
@Autowired
private
OrderCenterProperties
orderCenter
;
@Autowired
private
OrderSdkService
orderSdkService
;
/**
/**
* 根据综合条件查询订单
* 根据综合条件查询订单
*/
*/
...
@@ -59,6 +65,7 @@ public class OrderDownLoadSdkService {
...
@@ -59,6 +65,7 @@ public class OrderDownLoadSdkService {
BaseDownLoadResponse
<
List
<
OrderInfoReqs
>>
responseDTO
=
RequestThirdPartyUtils
.
httpJsonReqComplexDownLoad
(
restTemplate
,
InterfaceAddressConstant
.
QUERY_ORDER_BY_CONDITIONS
,
BaseDownLoadResponse
<
List
<
OrderInfoReqs
>>
responseDTO
=
RequestThirdPartyUtils
.
httpJsonReqComplexDownLoad
(
restTemplate
,
InterfaceAddressConstant
.
QUERY_ORDER_BY_CONDITIONS
,
createBaseRequest
(
request
,
trackingNo
),
new
ParameterizedTypeReference
<
BaseDownLoadResponse
<
List
<
OrderInfoReqs
>>>()
{
createBaseRequest
(
request
,
trackingNo
),
new
ParameterizedTypeReference
<
BaseDownLoadResponse
<
List
<
OrderInfoReqs
>>>()
{
});
});
batchCheckTime
(
request
,
responseDTO
);
ThirdPartyLog
.
infoConvertJson
(
begin
,
System
.
currentTimeMillis
(),
InterfaceAddressConstant
.
QUERY_ORDER_BY_CONDITIONS
,
request
,
responseMini
(
responseDTO
));
ThirdPartyLog
.
infoConvertJson
(
begin
,
System
.
currentTimeMillis
(),
InterfaceAddressConstant
.
QUERY_ORDER_BY_CONDITIONS
,
request
,
responseMini
(
responseDTO
));
return
responseHandle
(
responseDTO
);
return
responseHandle
(
responseDTO
);
}
}
...
@@ -123,8 +130,8 @@ public class OrderDownLoadSdkService {
...
@@ -123,8 +130,8 @@ public class OrderDownLoadSdkService {
QueryByCodeResponse
queryResponse
=
RequestThirdPartyUtils
.
httpGetReqComplex
(
this
.
restTemplate
,
url
QueryByCodeResponse
queryResponse
=
RequestThirdPartyUtils
.
httpGetReqComplex
(
this
.
restTemplate
,
url
,
createBaseRequest
(
null
,
trackingNo
),
new
ParameterizedTypeReference
<
QueryByCodeResponse
>()
{
,
createBaseRequest
(
null
,
trackingNo
),
new
ParameterizedTypeReference
<
QueryByCodeResponse
>()
{
});
});
// fisherman 【ID1029765】 【技术线】【订单】订单ES服务订单数据查询热数据从DB(Redis)获取
return
queryResponse
;
return
checkTime
(
partnerId
,
queryResponse
)
;
}
}
/**
/**
...
@@ -219,5 +226,154 @@ public class OrderDownLoadSdkService {
...
@@ -219,5 +226,154 @@ public class OrderDownLoadSdkService {
}
}
/**
* 批量查询
* 【ID1029765】 【技术线】【订单】订单ES服务订单数据查询热数据从DB(Redis)获取
* @param responseDTO
*/
private
void
batchCheckTime
(
OrderConditionsReq
request
,
BaseDownLoadResponse
<
List
<
OrderInfoReqs
>>
responseDTO
)
{
// 商户级别配置开关 是否需要数据替换操作
if
(!
checkConfig
(
request
.
getPartnerId
())){
return
;
}
if
(
responseDTO
==
null
||
CollectionUtils
.
isEmpty
(
responseDTO
.
getResult
()))
{
return
;
}
List
<
OrderInfoReqs
>
result
=
responseDTO
.
getResult
();
// 过滤 需要查询 redis 的 ordercode
List
<
String
>
orderCodes
=
result
.
stream
().
filter
(
orderInfoReqs
->
isAfterTime
(
orderInfoReqs
.
getUpdateTime
()))
.
map
(
OrderInfoReqs:
:
getOrderCode
).
collect
(
Collectors
.
toList
());
if
(
CollectionUtils
.
isEmpty
(
orderCodes
))
{
return
;
}
try
{
ApiLog
.
info
(
"进入redis 数据替换 ES 逻辑"
,
LogThreadLocal
.
getTrackingNo
(),
null
);
// 查询redis
BatchQueryByCodesReq
batchQueryByCodesReq
=
new
BatchQueryByCodesReq
();
batchQueryByCodesReq
.
setOrderCodes
(
orderCodes
);
BaseResponse
<
List
<
OrderInfoReqs
>>
redisResponse
=
orderSdkService
.
batchQueryByCodes
(
batchQueryByCodesReq
,
LogThreadLocal
.
getTrackingNo
());
ApiLog
.
info
(
"list 热点数据查询redis, "
,
batchQueryByCodesReq
,
redisResponse
);
if
(
CollectionUtils
.
isEmpty
(
redisResponse
.
getResult
()))
{
return
;
}
// 替换原有查询结果
List
<
OrderInfoReqs
>
orderInfoReqs
=
replaceData
(
result
,
redisResponse
.
getResult
());
ApiLog
.
info
(
"list 替换 结果 "
,
result
,
orderInfoReqs
);
responseDTO
.
setResult
(
orderInfoReqs
);
}
catch
(
Exception
e
){
// 不要影响主流程
ApiLog
.
info
(
"Redis替换ES异常 error"
,
responseDTO
,
e
);
}
}
/**
* 校验 是否需要走 ES热点数据替换
* @param partnerId
* @return true 需要, false 不需要
*/
private
boolean
checkConfig
(
String
partnerId
)
{
// 查询参数没传递 partnerId
if
(
Objects
.
isNull
(
partnerId
))
{
return
false
;
}
// 查询时间
if
(
orderCenter
.
getRedisToEsTimeLimit
()
<
0
)
{
return
false
;
}
// 没有配置商户
List
<
String
>
redisToEsPartnerIds
=
orderCenter
.
getRedisToEsPartnerIds
();
if
(
CollectionUtils
.
isEmpty
(
redisToEsPartnerIds
))
{
return
false
;
}
return
redisToEsPartnerIds
.
contains
(
partnerId
);
}
/**
* 替换原有查询结果 需要考虑替换的时间复杂度
* 用流 拿出 原有的数据 + 现有数据 (有排序功能 不能使用这种方式)
* @param to 需要替换的数据
* @param from 新数据
*/
private
List
<
OrderInfoReqs
>
replaceData
(
List
<
OrderInfoReqs
>
to
,
List
<
OrderInfoReqs
>
from
)
{
if
(
CollectionUtils
.
isEmpty
(
to
)
||
CollectionUtils
.
isEmpty
(
from
))
{
return
to
;
}
// 这里还可以优化 暂时先上线
from
.
forEach
(
orderInfoReqs
->
{
for
(
int
i
=
0
;
i
<
to
.
size
();
i
++)
{
OrderInfoReqs
infoReqs
=
to
.
get
(
i
);
if
(
orderInfoReqs
.
getOrderCode
().
equals
(
infoReqs
.
getOrderCode
()))
{
to
.
set
(
i
,
orderInfoReqs
);
break
;
}
}
});
return
to
;
}
/**
* 更新时间在6小时以内,则根据orderCode调用DB(Redis)查询一次并替换该订单对象
* @param partnerId 商户级别开关控制
* @param queryResponse
* @return
*/
private
QueryByCodeResponse
checkTime
(
String
partnerId
,
QueryByCodeResponse
queryResponse
)
{
// 商户级别开关控制 fisherman
ApiLog
.
info
(
"获取到的商户级别配置, timeLimit redisToEsPartnerIds"
,
orderCenter
.
getRedisToEsTimeLimit
(),
orderCenter
.
getRedisToEsPartnerIds
());
// 商户级别配置开关 是否需要数据替换操作
if
(!
checkConfig
(
partnerId
)){
return
queryResponse
;
}
if
(
queryResponse
==
null
||
queryResponse
.
getResult
()
==
null
)
{
return
queryResponse
;
}
OrderInfoReqs
infoReqs
=
queryResponse
.
getResult
();
String
strtime
=
infoReqs
.
getUpdateTime
();
if
(
Objects
.
isNull
(
strtime
))
{
return
queryResponse
;
}
if
(
isAfterTime
(
strtime
))
{
// 在 6小时范围内 ,就查询 redis 进行 对象数据替换
try
{
ApiLog
.
info
(
"进入redis 数据替换 ES 逻辑"
,
LogThreadLocal
.
getTrackingNo
(),
null
);
BatchQueryByCodesReq
batchQueryByCodesReq
=
new
BatchQueryByCodesReq
();
batchQueryByCodesReq
.
setOrderCodes
(
Collections
.
singletonList
(
infoReqs
.
getOrderCode
()));
BaseResponse
<
List
<
OrderInfoReqs
>>
redisResponse
=
orderSdkService
.
batchQueryByCodes
(
batchQueryByCodesReq
,
LogThreadLocal
.
getTrackingNo
());
ApiLog
.
info
(
"热点数据查询redis, "
,
batchQueryByCodesReq
,
redisResponse
);
if
(
CollectionUtils
.
isEmpty
(
redisResponse
.
getResult
()))
{
return
queryResponse
;
}
List
<
OrderInfoReqs
>
result
=
redisResponse
.
getResult
();
result
.
forEach
(
orderInfoReqs
->
{
if
(
infoReqs
.
getOrderCode
().
equals
(
orderInfoReqs
.
getOrderCode
()))
{
queryResponse
.
setResult
(
orderInfoReqs
);
}
});
ApiLog
.
info
(
"替换 结果 "
,
result
,
queryResponse
);
return
queryResponse
;
}
catch
(
Exception
e
){
// 不要影响主流程
ApiLog
.
info
(
"Redis替换ES异常 error"
,
queryResponse
,
e
);
return
queryResponse
;
}
}
return
queryResponse
;
}
/**
*
* @param time 13位时间戳
* @return
*/
private
boolean
isAfterTime
(
String
time
)
{
Date
dateTime
=
new
Date
(
Long
.
parseLong
(
time
));
// 和设置的时间 进行对比
Calendar
calendar
=
Calendar
.
getInstance
();
// - 6 小时 注意 下面是 加 [负数]
calendar
.
add
(
Calendar
.
HOUR
,-
orderCenter
.
getRedisToEsTimeLimit
());
Date
limitDate
=
calendar
.
getTime
();
return
dateTime
.
after
(
limitDate
);
}
}
}
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