Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Fedex
/
iClear-api
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
tao.mo
2023-06-09 17:20:29 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
0efa9a46640686fb20419a39a6290530829d37e3
0efa9a46
1 parent
5ba41a55
增加公章图样接口需求
mt 2023年6月9日17:20:20
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
173 additions
and
55 deletions
doc/FedEx在线申报系统API - iKnowU.docx
src/main/java/com/erry/iclear/dateInterface/api/IKnowUInterface.java
src/main/java/com/erry/iclear/dateInterface/api/request/StampParam.java
src/main/java/com/erry/iclear/dateInterface/enums/ErrorCodeEnum.java
src/main/java/com/erry/iclear/dateInterface/util/FileUtils.java
src/main/resources/application-dev.properties
src/main/resources/application-prod.properties
src/main/resources/application-test.properties
src/test/java/com/erry/iclear/dateInterface/StampRequest.java
doc/FedEx在线申报系统API - iKnowU.docx
View file @
0efa9a4
No preview for this file type
src/main/java/com/erry/iclear/dateInterface/api/IKnowUInterface.java
View file @
0efa9a4
package
com
.
erry
.
iclear
.
dateInterface
.
api
;
import
com.erry.iclear.dateInterface.api.request.HsCodeParam
;
import
com.erry.iclear.dateInterface.api.request.StampParam
;
import
com.erry.iclear.dateInterface.api.response.ResultHsCode
;
import
com.erry.iclear.dateInterface.api.response.StampResult
;
import
com.erry.iclear.dateInterface.entity.IClearApiHsCodeLog
;
import
com.erry.iclear.dateInterface.enums.ErrorCodeEnum
;
import
com.erry.iclear.dateInterface.service.HsCodeService
;
import
com.erry.iclear.dateInterface.service.IClearApiHsCodeLogService
;
import
com.erry.iclear.dateInterface.util.FileUtils
;
import
com.erry.iclear.dateInterface.util.StringUtil
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.log4j.spi.ErrorCode
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.File
;
import
java.util.Date
;
/**
...
...
@@ -24,9 +29,10 @@ import java.util.Date;
@RequestMapping
(
"/iknowU"
)
@Slf4j
public
class
IKnowUInterface
{
@Autowired
HsCodeService
hsCodeService
;
@Value
(
"${stamp_path}"
)
String
stampPath
;
@Value
(
"${stamp_file_name}"
)
String
stampFileName
;
@Autowired
IClearApiHsCodeLogService
iClearApiHsCodeLogService
;
...
...
@@ -35,24 +41,35 @@ public class IKnowUInterface {
@PostMapping
(
"/stampQuery"
)
@ResponseBody
public
StampResult
stampQuery
(
HttpServletRequest
request
,
@RequestBody
St
ring
consignmentCode
)
{
log
.
info
(
"接收到请求数据consignmentCode:【"
+
consignmentCode
+
"】"
);
,
@RequestBody
St
ampParam
stampParam
)
{
log
.
info
(
"接收到请求数据consignmentCode:【"
+
stampParam
.
getConsignmentCode
()
+
"】"
);
String
appId
=
(
String
)
request
.
getHeader
(
"Appid"
);
String
appkey
=
(
String
)
request
.
getHeader
(
"Appkey"
);
IClearApiHsCodeLog
iclearApiHsCodeLog
=
new
IClearApiHsCodeLog
();
StampResult
stampResult
=
null
;
long
begin
=
System
.
currentTimeMillis
();
String
filePath
=
this
.
stampPath
+
stampParam
.
getConsignmentCode
()
+
File
.
separator
+
stampFileName
;
try
{
iclearApiHsCodeLog
.
setAppId
(
appId
);
iclearApiHsCodeLog
.
setAppKey
(
appkey
);
iclearApiHsCodeLog
.
setCreateTime
(
new
Date
());
iclearApiHsCodeLog
.
setCode
(
consignmentCode
);
iclearApiHsCodeLog
.
setCode
(
stampParam
.
getConsignmentCode
());
File
file
=
new
File
(
filePath
);
//判断文件是否存在
if
(
file
.
exists
()){
String
base64Image
=
FileUtils
.
convertFileToBase64
(
filePath
);
stampResult
=
new
StampResult
(
Boolean
.
TRUE
,
ErrorCodeEnum
.
SUCCESS
.
getCode
(),
ErrorCodeEnum
.
SUCCESS
.
getName
(),
base64Image
);
}
else
{
stampResult
=
new
StampResult
(
Boolean
.
FALSE
,
ErrorCodeEnum
.
ERROR_10119
.
getCode
(),
ErrorCodeEnum
.
ERROR_10119
.
getName
(),
null
);
}
}
catch
(
Exception
ex
){
log
.
error
(
ex
.
getMessage
(),
ex
);
stampResult
=
new
StampResult
(
Boolean
.
FALSE
,
ErrorCodeEnum
.
ERROR_
30101
.
getCode
(),
ErrorCodeEnum
.
ERROR_30101
.
getName
(),
null
);
stampResult
=
new
StampResult
(
Boolean
.
FALSE
,
ErrorCodeEnum
.
ERROR_
10119
.
getCode
(),
ErrorCodeEnum
.
ERROR_10119
.
getName
(),
null
);
return
stampResult
;
}
finally
{
iclearApiHsCodeLog
.
setReceiveResult
(
stampResult
.
getMsg
());
iclearApiHsCodeLog
.
setCode
(
filePath
);
iclearApiHsCodeLog
.
setErrorCode
(
stampResult
.
getCode
());
iclearApiHsCodeLog
.
setResponseTime
(
new
Date
());
long
end
=
System
.
currentTimeMillis
();
...
...
src/main/java/com/erry/iclear/dateInterface/api/request/StampParam.java
0 → 100644
View file @
0efa9a4
package
com
.
erry
.
iclear
.
dateInterface
.
api
.
request
;
import
io.swagger.annotations.ApiModel
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* 请求公章图样参数
* mt
* 2023年6月9日15:57:52
*/
@ApiModel
(
value
=
"stampParam"
,
description
=
"需要查询的公章图样运单号"
)
@Data
public
class
StampParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
786697399667065141L
;
//运单号
String
consignmentCode
;
}
src/main/java/com/erry/iclear/dateInterface/enums/ErrorCodeEnum.java
View file @
0efa9a4
...
...
@@ -18,6 +18,7 @@ public enum ErrorCodeEnum {
ERROR_10017
(
"10017"
,
"无Appkey(缺少参数)"
),
ERROR_10018
(
"10018"
,
"无TimeStamp(缺少参数)"
),
ERROR_10019
(
"10019"
,
"未指定hscode编码,10分钟之内只允许查询一次。"
),
ERROR_10119
(
"10119"
,
"根据运单号查询用户上传的公章图样失败"
),
ERROR_30001
(
"30001"
,
"数据格式不正确"
),
ERROR_30002
(
"30002"
,
"缺少必填项"
),
ERROR_30003
(
"30003"
,
"数据校验不通过"
),
...
...
@@ -28,6 +29,7 @@ public enum ErrorCodeEnum {
ERROR_30104
(
"30104"
,
"skuCode或skuName长度超出限制"
),
ERROR_30105
(
"30105"
,
"skuCode编码最少输入4位字符,skuName最少输入2个字符"
);
ErrorCodeEnum
(
String
code
,
String
name
){
this
.
code
=
code
;
this
.
name
=
name
;
...
...
src/main/java/com/erry/iclear/dateInterface/util/FileUtils.java
View file @
0efa9a4
This diff could not be displayed because it is too large.
src/main/resources/application-dev.properties
View file @
0efa9a4
...
...
@@ -7,39 +7,41 @@ spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.type
=
com.alibaba.druid.pool.DruidDataSource
#spring.datasource.jndi-name=jdbc/iclearProdTestDS
#
推送海关回执
#
\u63A8\u9001\u6D77\u5173\u56DE\u6267
task.pushCustomsTask
=
0 0/1 * * * ?
#
推送完整报文
#
\u63A8\u9001\u5B8C\u6574\u62A5\u6587
task.pushMawbTask
=
0 0/1 * * * ?
#
推送失败的回执数据
#
\u63A8\u9001\u5931\u8D25\u7684\u56DE\u6267\u6570\u636E
task.pushErrorReturnDate
=
0 0/3 * * * ?
#
推送失败的申报数据
#
\u63A8\u9001\u5931\u8D25\u7684\u7533\u62A5\u6570\u636E
task.pushErrorDeclareDate
=
0 0/3 * * * ?
#
监听iclear节点是否正常定时任务间隔
#
\u76D1\u542Ciclear\u8282\u70B9\u662F\u5426\u6B63\u5E38\u5B9A\u65F6\u4EFB\u52A1\u95F4\u9694
task.monitorIclearNodes
=
0 0/5 * * * ?
api.base-
address
=
http://localhost:8080/Exp
#
获取token账号
#
\u83B7\u53D6token\u8D26\u53F7
api.token-
info.username
=
iclear_external_ctm
#
获取token密码
#
\u83B7\u53D6token\u5BC6\u7801
api.token-
info.password
=
toQu3arch6
#IClearC
类提交运单地址
#IClearC
\u7C7B\u63D0\u4EA4\u8FD0\u5355\u5730\u5740
api.address.iclear-submit-
url
=
${api.base-address}/chmConsignmentController/submitConsignments
#IClear
校验运单地址
#IClear
\u6821\u9A8C\u8FD0\u5355\u5730\u5740
api.address.iclear-check-
url
=
${api.base-address}/chmConsignmentController/checkChmAndDetaliD
#IClear
校验C类运单地址
#IClear
\u6821\u9A8CC\u7C7B\u8FD0\u5355\u5730\u5740
api.address.iclear-check-url-
c
=
${api.base-address}/chmConsignmentController/checkChmAndDetaliC
#
获取token地址
#
\u83B7\u53D6token\u5730\u5740
api.address.token-
url
=
https://apiuat.iclrccd-fedex.com/login
#
刷新token地址
#
\u5237\u65B0token\u5730\u5740
api.address.refresh-token-
url
=
https://apiuat.iclrccd-fedex.com/user/token/refresh
#
传输海关回执地址
#
\u4F20\u8F93\u6D77\u5173\u56DE\u6267\u5730\u5740
api.address.customs-
url
=
https://apiuat.iclrccd-fedex.com/export/outbound/customs
#
推送完整报文地址
#
\u63A8\u9001\u5B8C\u6574\u62A5\u6587\u5730\u5740
api.address.complete-msg-
url
=
https://apiuat.iclrccd-fedex.com/export/outbound/mawb
#iclear
应用节点是否能够正常访问
#iclear
\u5E94\u7528\u8282\u70B9\u662F\u5426\u80FD\u591F\u6B63\u5E38\u8BBF\u95EE
iclear.address.url42
=
http://localhost:8080/Exp
iclear.address.url43
=
http://localhost:8080/Exp
#代理地址(刷新token、传输海关回执地址、推送完整报文地址)
stamp_path
=
/var/share/iclear/resources/upload/attachment/slipType_chm/
stamp_file_name
=
stamp.png
#\u4EE3\u7406\u5730\u5740\uFF08\u5237\u65B0token\u3001\u4F20\u8F93\u6D77\u5173\u56DE\u6267\u5730\u5740\u3001\u63A8\u9001\u5B8C\u6574\u62A5\u6587\u5730\u5740\uFF09
api.address.proxy-
url
=
cn2-proxy.apac.fedex.com
api.address.proxy-
port
=
3128
\ No newline at end of file
...
...
src/main/resources/application-prod.properties
View file @
0efa9a4
spring.servlet.context-
path
=
/API
spring.datasource.jndi-
name
=
jdbc/iclearDS
#
推送海关回执
#
\u63A8\u9001\u6D77\u5173\u56DE\u6267
task.pushCustomsTask
=
0 0/1 * * * ?
#
推送完整报文
#
\u63A8\u9001\u5B8C\u6574\u62A5\u6587
task.pushMawbTask
=
0 0/1 * * * ?
#
推送失败的回执数据
#
\u63A8\u9001\u5931\u8D25\u7684\u56DE\u6267\u6570\u636E
task.pushErrorReturnDate
=
0 0/30 * * * ?
#
推送失败的申报数据
#
\u63A8\u9001\u5931\u8D25\u7684\u7533\u62A5\u6570\u636E
task.pushErrorDeclareDate
=
0 0/30 * * * ?
#
监听iclear节点是否正常定时任务间隔
#
\u76D1\u542Ciclear\u8282\u70B9\u662F\u5426\u6B63\u5E38\u5B9A\u65F6\u4EFB\u52A1\u95F4\u9694
task.monitorIclearNodes
=
0 0/5 * * * ?
api.base-
address
=
https://declaration.fedex.com.cn/Exp
#
获取token账号
#
\u83B7\u53D6token\u8D26\u53F7
api.token-
info.username
=
iclear_export_prod
#
获取token密码
#
\u83B7\u53D6token\u5BC6\u7801
api.token-
info.password
=
1qaz@WSX
#IClearC
类提交运单地址
#IClearC
\u7C7B\u63D0\u4EA4\u8FD0\u5355\u5730\u5740
api.address.iclear-submit-
url
=
${api.base-address}/chmConsignmentController/submitConsignments
#IClear
校验运单地址
#IClear
\u6821\u9A8C\u8FD0\u5355\u5730\u5740
api.address.iclear-check-
url
=
${api.base-address}/chmConsignmentController/checkChmAndDetaliD
#IClear
校验C类运单地址
#IClear
\u6821\u9A8CC\u7C7B\u8FD0\u5355\u5730\u5740
api.address.iclear-check-url-
c
=
${api.base-address}/chmConsignmentController/checkChmAndDetaliC
#
获取token地址
#
\u83B7\u53D6token\u5730\u5740
api.address.token-
url
=
https://apictm.iclrccd-fedex.com/login
#
刷新token地址
#
\u5237\u65B0token\u5730\u5740
api.address.refresh-token-
url
=
https://apictm.iclrccd-fedex.com/admin/user/token/refresh
#
传输海关回执地址
#
\u4F20\u8F93\u6D77\u5173\u56DE\u6267\u5730\u5740
api.address.customs-
url
=
https://apictm.iclrccd-fedex.com/export/outbound/customs
#
推送完整报文地址
#
\u63A8\u9001\u5B8C\u6574\u62A5\u6587\u5730\u5740
api.address.complete-msg-
url
=
https://apictm.iclrccd-fedex.com/export/outbound/mawb
#iclear
应用节点是否能够正常访问
#iclear
\u5E94\u7528\u8282\u70B9\u662F\u5426\u80FD\u591F\u6B63\u5E38\u8BBF\u95EE
iclear.address.url42
=
https://pjec0003.cndczmd.apac.fedex.com:9002/Exp/
iclear.address.url43
=
https://pjec0004.cndczmd.apac.fedex.com:9002/Exp/
#代理地址(刷新token、传输海关回执地址、推送完整报文地址)
stamp_path
=
/var/share/iclear/resources/upload/attachment/slipType_chm/
stamp_file_name
=
stamp.png
#\u4EE3\u7406\u5730\u5740\uFF08\u5237\u65B0token\u3001\u4F20\u8F93\u6D77\u5173\u56DE\u6267\u5730\u5740\u3001\u63A8\u9001\u5B8C\u6574\u62A5\u6587\u5730\u5740\uFF09
api.address.proxy-
url
=
cn2-proxy.apac.fedex.com
api.address.proxy-
port
=
3128
...
...
src/main/resources/application-test.properties
View file @
0efa9a4
spring.servlet.context-
path
=
/API
spring.datasource.jndi-
name
=
jdbc/iclearDS
#
推送海关回执
#
\u63A8\u9001\u6D77\u5173\u56DE\u6267
task.pushCustomsTask
=
0 0/1 * * * ?
#
推送完整报文
#
\u63A8\u9001\u5B8C\u6574\u62A5\u6587
task.pushMawbTask
=
0 0/1 * * * ?
#
推送失败的回执数据
#
\u63A8\u9001\u5931\u8D25\u7684\u56DE\u6267\u6570\u636E
task.pushErrorReturnDate
=
0 0/3 * * * ?
#
推送失败的申报数据
#
\u63A8\u9001\u5931\u8D25\u7684\u7533\u62A5\u6570\u636E
task.pushErrorDeclareDate
=
0 0/3 * * * ?
#
监听iclear节点是否正常定时任务间隔
#
\u76D1\u542Ciclear\u8282\u70B9\u662F\u5426\u6B63\u5E38\u5B9A\u65F6\u4EFB\u52A1\u95F4\u9694
task.monitorIclearNodes
=
0 0/5 * * * ?
api.base-
address
=
https://declarationuat.fedex.com.cn/Exp
#
获取token账号
#
\u83B7\u53D6token\u8D26\u53F7
api.token-
info.username
=
iclear_external_ctm
#
获取token密码
#
\u83B7\u53D6token\u5BC6\u7801
api.token-
info.password
=
toQu3arch6
#IClearC
类提交运单地址
#IClearC
\u7C7B\u63D0\u4EA4\u8FD0\u5355\u5730\u5740
api.address.iclear-submit-
url
=
${api.base-address}/chmConsignmentController/submitConsignments
#IClear
校验运单地址
#IClear
\u6821\u9A8C\u8FD0\u5355\u5730\u5740
api.address.iclear-check-
url
=
${api.base-address}/chmConsignmentController/checkChmAndDetaliD
#IClear
校验C类运单地址
#IClear
\u6821\u9A8CC\u7C7B\u8FD0\u5355\u5730\u5740
api.address.iclear-check-url-
c
=
${api.base-address}/chmConsignmentController/checkChmAndDetaliC
#
获取token地址
#
\u83B7\u53D6token\u5730\u5740
api.address.token-
url
=
https://apiuat.iclrccd-fedex.com/login
#
刷新token地址
#
\u5237\u65B0token\u5730\u5740
api.address.refresh-token-
url
=
https://apiuat.iclrccd-fedex.com/user/token/refresh
#
传输海关回执地址
#
\u4F20\u8F93\u6D77\u5173\u56DE\u6267\u5730\u5740
api.address.customs-
url
=
https://apiuat.iclrccd-fedex.com/export/outbound/customs
#
推送完整报文地址
#
\u63A8\u9001\u5B8C\u6574\u62A5\u6587\u5730\u5740
api.address.complete-msg-
url
=
https://apiuat.iclrccd-fedex.com/export/outbound/mawb
#iclear
应用节点是否能够正常访问
#iclear
\u5E94\u7528\u8282\u70B9\u662F\u5426\u80FD\u591F\u6B63\u5E38\u8BBF\u95EE
iclear.address.url42
=
http://ujec0003.cndczmd.apac.fedex.com:9001/Exp/#login
iclear.address.url43
=
http://ujec0004.cndczmd.apac.fedex.com:9001/Exp/#login
#代理地址(刷新token、传输海关回执地址、推送完整报文地址)
stamp_path
=
/var/share/iclear/resources/upload/attachment/slipType_chm/
stamp_file_name
=
stamp.png
#\u4EE3\u7406\u5730\u5740\uFF08\u5237\u65B0token\u3001\u4F20\u8F93\u6D77\u5173\u56DE\u6267\u5730\u5740\u3001\u63A8\u9001\u5B8C\u6574\u62A5\u6587\u5730\u5740\uFF09
api.address.proxy-
url
=
cn2-proxy.apac.fedex.com
api.address.proxy-
port
=
3128
\ No newline at end of file
...
...
src/test/java/com/erry/iclear/dateInterface/StampRequest.java
0 → 100644
View file @
0efa9a4
package
com
.
erry
.
iclear
.
dateInterface
;
import
com.arronlong.httpclientutil.HttpClientUtil
;
import
com.arronlong.httpclientutil.builder.HCB
;
import
com.arronlong.httpclientutil.common.HttpConfig
;
import
com.arronlong.httpclientutil.common.HttpHeader
;
import
com.arronlong.httpclientutil.common.SSLs
;
import
com.erry.iclear.dateInterface.api.response.IClearCheckResult
;
import
com.erry.iclear.dateInterface.api.response.StampResult
;
import
com.erry.iclear.dateInterface.util.FileUtils
;
import
com.erry.iclear.dateInterface.util.JsonToJava
;
import
com.erry.iclear.dateInterface.util.SHA256Util
;
import
org.apache.http.Header
;
/**
* 获取HSCODE接口地址
* fedex
* 2022年4月14日17:55:55
*/
public
class
StampRequest
{
public
static
String
url
=
"https://localhost:8780"
;
//获取HSCODE接口地址
public
static
String
path
=
"/iknowU/stampQuery"
;
//时间戳
public
static
String
timeStamp
=
"1649839249891"
;
//APPID
public
static
String
appId
=
"DEMO1"
;
//APPKEY
public
static
String
appKey
=
"iClearExportDemo1"
;
//需要申请
public
static
String
security
=
"8c7f1108316abfb1"
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
hscodeRequest
();
}
/**
* 获取HSCODE接口地址
*/
public
static
void
hscodeRequest
()
throws
Exception
{
//hscode 编码可修改
String
json
=
"{\"consignmentCode\":\"aaaaaaaa\"}"
;
String
token
=
SHA256Util
.
getSHA256String
(
StampRequest
.
appId
+
StampRequest
.
appKey
+
StampRequest
.
security
+
StampRequest
.
timeStamp
);
System
.
out
.
println
(
token
);
//消息头
Header
[]
headers
=
HttpHeader
.
custom
()
.
other
(
"Content-Type"
,
"application/json"
)
.
other
(
"Appid"
,
StampRequest
.
appId
)
.
other
(
"appKey"
,
StampRequest
.
appKey
)
.
other
(
"TimeStamp"
,
StampRequest
.
timeStamp
)
.
other
(
"token"
,
token
)
.
build
();
//客户端配置
HCB
hcb
=
HCB
.
custom
()
.
timeout
(
20000
)
.
pool
(
100
,
10
)
.
sslpv
(
SSLs
.
SSLProtocolVersion
.
TLSv1_2
)
.
ssl
()
.
retry
(
3
);
//URL
String
url
=
StampRequest
.
url
+
StampRequest
.
path
;
//HTTP请求
HttpConfig
config
=
HttpConfig
.
custom
()
.
headers
(
headers
)
.
url
(
url
)
.
encoding
(
"utf-8"
)
.
client
(
hcb
.
build
())
.
json
(
json
);
String
result
=
HttpClientUtil
.
post
(
config
);
StampResult
stampResult
=
JsonToJava
.
parseJson
(
result
,
StampResult
.
class
);
FileUtils
.
convertBase64ToFile
(
stampResult
.
getBase64Image
(),
"C:\\Users\\erry-Fedex\\Desktop\\电子章"
,
"bbbbbbb.png"
);
}
}
Please
register
or
login
to post a comment