Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-module-job
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-module-job
Commits
7426dca0
提交
7426dca0
authored
7月 30, 2025
作者:
000516
浏览文件
操作
浏览文件
下载
差异文件
订单 - 发货单物流查询(跨越、JDTC)
上级
13b01c8a
0e389f95
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
137 行增加
和
9 行删除
+137
-9
pom.xml
pom.xml
+4
-1
SentQueryController.java
...ava/com/sfa/job/controller/order/SentQueryController.java
+49
-3
OrdersSentDaoImpl.java
.../com/sfa/job/domain/order/dao/impl/OrdersSentDaoImpl.java
+1
-1
OrderSentInfoResponse.java
...java/com/sfa/job/pojo/response/OrderSentInfoResponse.java
+22
-0
OrdersSentDto.java
src/main/java/com/sfa/job/pojo/response/OrdersSentDto.java
+2
-1
KyeUtil.java
src/main/java/com/sfa/job/util/KyeUtil.java
+59
-3
没有找到文件。
pom.xml
浏览文件 @
7426dca0
...
...
@@ -120,7 +120,10 @@
<groupId>
com.squareup.okhttp3
</groupId>
<artifactId>
okhttp
</artifactId>
</dependency>
<dependency>
<groupId>
com.kyexpress
</groupId>
<artifactId>
kye-openapi-sdk
</artifactId>
</dependency>
</dependencies>
<build>
...
...
src/main/java/com/sfa/job/controller/order/SentQueryController.java
浏览文件 @
7426dca0
package
com
.
sfa
.
job
.
controller
.
order
;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.sfa.common.core.enums.ECode
;
import
com.sfa.common.core.exception.ServiceException
;
import
com.sfa.common.redis.service.RedisService
;
import
com.sfa.job.constants.RedisKeyJob
;
import
com.sfa.job.pojo.response.OrderSentInfoResponse
;
import
com.sfa.job.pojo.response.OrdersSentDto
;
import
com.sfa.job.service.order.IOrdersSentQueryService
;
import
com.sfa.job.util.JdtcUtil
;
import
com.sfa.job.util.KyeUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.CollectionUtils
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author : liqiulin
...
...
@@ -26,6 +33,8 @@ public class SentQueryController {
@Autowired
private
JdtcUtil
jdtcUtil
;
@Autowired
private
KyeUtil
kyeUtil
;
@Autowired
private
IOrdersSentQueryService
orderSentQueryService
;
@Autowired
private
RedisService
redisService
;
...
...
@@ -45,11 +54,14 @@ public class SentQueryController {
private
Object
queryBySentNode
(
String
sentNo
){
OrdersSentDto
sent
=
orderSentQueryService
.
getSent
(
sentNo
);
Object
sentInfo
=
null
;
List
<
OrderSentInfoResponse
>
sentInfo
=
null
;
switch
(
sent
.
getTransport
())
{
case
"134"
:
sentInfo
=
jdTC134
(
sent
);
break
;
case
"109"
:
sentInfo
=
kye109
(
sent
);
break
;
default
:
throw
new
ServiceException
(
ECode
.
SENT_ISNULL_ERROR
);
}
...
...
@@ -57,8 +69,42 @@ public class SentQueryController {
return
sent
;
}
private
Object
jdTC134
(
OrdersSentDto
sent
){
private
List
<
OrderSentInfoResponse
>
kye109
(
OrdersSentDto
sent
)
{
JSONArray
traces
=
kyeUtil
.
getOrderTrace
(
sent
.
getExpressNo
());
if
(
CollectionUtils
.
isEmpty
(
traces
)){
return
null
;
}
JSONArray
exteriorRouteList
=
traces
.
getJSONObject
(
0
).
getJSONArray
(
"exteriorRouteList"
);
return
pKye109
(
exteriorRouteList
);
}
private
List
<
OrderSentInfoResponse
>
jdTC134
(
OrdersSentDto
sent
){
JSONArray
traces
=
jdtcUtil
.
getOrderTrace
(
sent
.
getBjSentNo
()
+
"-"
+
sent
.
getBjSentVersion
());
return
CollectionUtils
.
isEmpty
(
traces
)
?
null
:
traces
.
get
(
0
);
JSONObject
jb
=
traces
.
getJSONObject
(
0
);
return
pJdTC134
(
jb
.
getJSONArray
(
"traceDetails"
));
}
private
List
<
OrderSentInfoResponse
>
pJdTC134
(
JSONArray
exteriorRouteList
){
List
<
OrderSentInfoResponse
>
sentInfoList
=
new
ArrayList
<>();
exteriorRouteList
.
forEach
(
exteriorRoute
->
{
JSONObject
exteriorRouteJson
=
(
JSONObject
)
exteriorRoute
;
OrderSentInfoResponse
sentInfo
=
new
OrderSentInfoResponse
();
sentInfo
.
setOperateTime
(
exteriorRouteJson
.
getString
(
"operateTime"
));
sentInfo
.
setOperateRemark
(
exteriorRouteJson
.
getString
(
"operateRemark"
));
sentInfoList
.
add
(
sentInfo
);
});
return
sentInfoList
;
}
private
List
<
OrderSentInfoResponse
>
pKye109
(
JSONArray
exteriorRouteList
){
List
<
OrderSentInfoResponse
>
sentInfoList
=
new
ArrayList
<>();
exteriorRouteList
.
forEach
(
exteriorRoute
->
{
JSONObject
exteriorRouteJson
=
(
JSONObject
)
exteriorRoute
;
OrderSentInfoResponse
sentInfo
=
new
OrderSentInfoResponse
();
sentInfo
.
setOperateTime
(
exteriorRouteJson
.
getString
(
"uploadDate"
));
sentInfo
.
setOperateRemark
(
exteriorRouteJson
.
getString
(
"routeDescription"
));
sentInfoList
.
add
(
sentInfo
);
});
return
sentInfoList
;
}
}
src/main/java/com/sfa/job/domain/order/dao/impl/OrdersSentDaoImpl.java
浏览文件 @
7426dca0
...
...
@@ -34,7 +34,7 @@ public class OrdersSentDaoImpl implements IOrdersSentDao {
public
OrdersSentDto
getSent
(
String
sentNo
)
{
OrdersSent
sentDo
=
ordersSentMapper
.
selectBySentNo
(
sentNo
);
if
(
Objects
.
isNull
(
sentDo
)){
throw
new
CheckedException
(
ECode
.
PARAM_CODE
_ISNULL_ERROR
);
throw
new
CheckedException
(
ECode
.
SENT
_ISNULL_ERROR
);
}
return
BeanUtils
.
transitionDto
(
sentDo
,
OrdersSentDto
.
class
);
}
...
...
src/main/java/com/sfa/job/pojo/response/OrderSentInfoResponse.java
0 → 100644
浏览文件 @
7426dca0
package
com
.
sfa
.
job
.
pojo
.
response
;
import
lombok.Data
;
/**
* @author : liqiulin
* @date : 2025-07-30 15
* @describe :
*/
@Data
public
class
OrderSentInfoResponse
{
/**
* 路由节点描述
*/
private
String
operateRemark
;
/**
* 路由节点时间
*/
private
String
operateTime
;
}
src/main/java/com/sfa/job/pojo/response/OrdersSentDto.java
浏览文件 @
7426dca0
...
...
@@ -5,6 +5,7 @@ import lombok.Data;
import
java.io.Serializable
;
import
java.util.Date
;
import
java.util.List
;
/**
* T100出货单中的物流单据
...
...
@@ -66,7 +67,7 @@ public class OrdersSentDto implements Serializable {
*/
private
String
ddNo
;
private
Object
sentInfo
;
private
List
<
OrderSentInfoResponse
>
sentInfo
;
@TableField
(
exist
=
false
)
...
...
src/main/java/com/sfa/job/util/KyeUtil.java
浏览文件 @
7426dca0
package
com
.
sfa
.
job
.
util
;
/**
package
com
.
sfa
.
job
.
util
;
import
com.alibaba.fastjson2.JSONArray
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.kyexpress.openapi.sdk.KyeDefaultOpenApi
;
import
com.kyexpress.openapi.sdk.exception.KyeOpenApiException
;
import
com.sfa.common.core.enums.ECode
;
import
com.sfa.common.core.exception.ServiceException
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
/**
* @author : liqiulin
* @date : 2025-07-29 17
* @describe :
*/
public
class
KyeUtil
{
* @describe : 跨越物流
*/
@Slf4j
@Component
public
class
KyeUtil
{
/**
* =================== Kye API - config ===================
*/
@Value
(
"${kye.wl_app_key}"
)
private
String
APP_KEY
;
@Value
(
"${kye.wl_app_secret}"
)
private
String
APP_SECRET
;
@Value
(
"${kye.customer_code}"
)
private
String
CUSTOMER_CODE
;
@Value
(
"${kye.platform_flag}"
)
private
String
PLATFORM_FLAG
;
@Value
(
"${kye.is_sandbox}"
)
private
Boolean
IS_SANDBOX
;
/**
* =================== JDTC API - month ===================
*/
private
final
String
QUERY_ROUTE_M
=
"open.api.openCommon.queryRoute"
;
private
final
String
QUERY_PUBLIC_ROUTE_M
=
"open.api.openCommon.queryPublicRoute"
;
public
JSONArray
getOrderTrace
(
String
orderNo
){
try
{
Boolean
isSandbox
=
IS_SANDBOX
;
String
appKey
=
APP_KEY
;
String
appSecret
=
APP_SECRET
;
String
customerCode
=
CUSTOMER_CODE
;
String
platformFlag
=
PLATFORM_FLAG
;
String
bizBody
=
"{\"customerCode\":\""
+
customerCode
+
"\",\"waybillNumbers\":[\""
+
orderNo
+
"\"],\"platformFlag\":\""
+
platformFlag
+
"\"}"
;
// 沙盒环境(env=prod && isSandbox=true)
String
response
=
KyeDefaultOpenApi
.
builder
(
appKey
,
appSecret
).
env
(
"prod"
).
api
(
QUERY_PUBLIC_ROUTE_M
).
sandbox
(
isSandbox
).
body
(
bizBody
).
connectTimeout
(
3000
).
readTimeout
(
15000
).
request
().
response
();
JSONObject
rJson
=
JSONObject
.
parseObject
(
response
);
if
(!
rJson
.
getBoolean
(
"success"
)){
log
.
error
(
"请求跨越物流轨迹接口返回异常:{}"
,
response
);
throw
new
ServiceException
(
ECode
.
KYE_ORDER_TRACE_API_ERROR
);
}
return
rJson
.
getJSONObject
(
"data"
).
getJSONArray
(
"esWaybill"
);
}
catch
(
KyeOpenApiException
e
)
{
throw
new
ServiceException
(
ECode
.
KYE_ORDER_TRACE_QUERY_ERROR
);
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论