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
wei.zhou
2021-06-15 19:33:11 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
3504c7866cc22bf676c78dc17b5044a2e0f92fe5
3504c786
1 parent
e9ba0165
日志落地
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
723 additions
and
26 deletions
doc/建表语句.sql
doc/数据推送接口文档v3.docx
pom.xml
src/main/java/com/erry/iclear/dateInterface/IClearApiApplication.java
src/main/java/com/erry/iclear/dateInterface/api/CustomsDataInterface.java
src/main/java/com/erry/iclear/dateInterface/api/request/Mawb.java
src/main/java/com/erry/iclear/dateInterface/api/request/MawbDetail.java
src/main/java/com/erry/iclear/dateInterface/common/Constant.java
src/main/java/com/erry/iclear/dateInterface/entity/IClearApiLog.java
src/main/java/com/erry/iclear/dateInterface/repository/IClearApiLogRepository.java
src/main/java/com/erry/iclear/dateInterface/repository/MawbDetailRepository.java
src/main/java/com/erry/iclear/dateInterface/repository/MawbRepository.java
src/main/java/com/erry/iclear/dateInterface/service/IClearApiLogService.java
src/main/java/com/erry/iclear/dateInterface/service/MawbDetailService.java
src/main/java/com/erry/iclear/dateInterface/service/MawbService.java
src/main/java/com/erry/iclear/dateInterface/util/MD5Util.java
src/main/resources/application-dev.yml
src/main/resources/application-prod.yml
src/main/resources/application-test.yml
src/main/resources/logback.xml
src/test/java/com/erry/iclear/dateInterface/ApiTest.java
doc/建表语句.sql
0 → 100644
View file @
3504c78
CREATE
TABLE
T_ICLEAR_API_LOG
(
MSGID
int
identity
(
1
,
1
)
primary
key
--PK
,
MSG_TYPE
VARCHAR
(
20
)
--类型
,
APPID
VARCHAR
(
20
)
--用户ID
,
APPKEY
VARCHAR
(
20
)
--用户key
,
CREATE_TIME
datetime
--创建时间
,
UPDATE_TIME
datetime
--更新时间
--,REQUEST_MSG VARCHAR(500)
,
RECEIVE_RESULT
VARCHAR
(
100
)
--记录接收后是否验证通过的结果
,
RESPONSE_TIME
datetime
-- 响应时间
,
SPEND_TIME
numeric
(
5
,
0
)
--消耗时间(ms)
,
SENDTIMES
datetime
--更新次数
,
BILLNO
VARCHAR
(
20
)
--运单号
,
CONTRNO
VARCHAR
(
20
)
--合同号
)
CREATE
TABLE
T_ICLEAR_API_MAWB
(
ID
int
identity
(
1
,
1
)
primary
key
--PK
,
MSGID
int
,
IEFlag
varchar
(
1
)
,
TYPE
VARCHAR
(
6
)
,
AGENTCODE
VARCHAR
(
18
)
,
AGENTNAME
VARCHAR
(
70
)
,
BILLNO
VARCHAR
(
32
)
,
CONTRNO
VARCHAR
(
32
)
,
CUSTOMMASTER
VARCHAR
(
4
)
,
CUTMODE
VARCHAR
(
3
)
,
DECLTRNREL
VARCHAR
(
1
)
,
DISTINATEPORT
VARCHAR
(
6
)
,
EDIID
VARCHAR
(
3
)
,
ENTRYID
VARCHAR
(
18
)
,
FEECURR
VARCHAR
(
3
)
,
FEEMARK
VARCHAR
(
1
)
,
FEERATE
NUMERIC
(
19
,
5
)
,
CROSSWET
NUMERIC
(
19
,
5
)
,
IEPORT
VARCHAR
(
4
)
,
INPUTERNAME
VARCHAR
(
32
)
,
INSURCURR
VARCHAR
(
3
)
,
INSURMARK
VARCHAR
(
1
)
,
INSURRATE
NUMERIC
(
19
,
5
)
,
MANUALNO
VARCHAR
(
12
)
,
NETWT
NUMERIC
(
19
,
5
)
,
OTHERCURR
VARCHAR
(
3
)
,
OTHERRATE
NUMERIC
(
19
,
5
)
,
OTHERMARK
VARCHAR
(
1
)
,
OWNERCODE
VARCHAR
(
18
)
,
OWNERNAME
VARCHAR
(
70
)
,
PACKNO
NUMERIC
(
9
)
,
PREENTRYID
VARCHAR
(
9
)
,
TRADECOUNTRY
VARCHAR
(
3
)
,
TRADEMODE
VARCHAR
(
4
)
,
TRADECODE
VARCHAR
(
18
)
,
TRAFMODE
VARCHAR
(
1
)
,
TRADENAME
VARCHAR
(
70
)
,
TRANSMODE
VARCHAR
(
1
)
,
WRAPTYPE
VARCHAR
(
2
)
,
TRADECODESCC
VARCHAR
(
18
)
,
OWNERCODESCC
VARCHAR
(
18
)
,
TRADEAREACODE
VARCHAR
(
3
)
,
MARKNO
VARCHAR
(
400
)
,
ENTYPORTCODE
VARCHAR
(
8
)
,
GOODSPLACE
VARCHAR
(
100
)
,
DECLARENAME
VARCHAR
(
50
)
,
OVERSEASCONSIGNORCODE
VARCHAR
(
50
)
,
OVERSEASCONSIGNEECODE
VARCHAR
(
50
)
,
OVERSEASCONSIGNEEENAME
VARCHAR
(
400
)
)
CREATE
TABLE
T_ICLEAR_API_MAWBDETAIL
(
ID
int
identity
(
1
,
1
)
primary
key
--PK
,
MSGID
int
,
MAWBID
int
,
CLASSMARK
VARCHAR
(
1
)
,
CODETS
VARCHAR
(
10
)
,
DECLPRICE
NUMERIC
(
19
,
5
)
,
DECLTOTAL
NUMERIC
(
19
,
5
)
,
DUTYMODE
VARCHAR
(
1
)
,
EXGNO
VARCHAR
(
30
)
,
EXGVERSION
VARCHAR
(
8
)
,
FIRSTUNIT
VARCHAR
(
3
)
,
FIRSTQTY
NUMERIC
(
19
,
5
)
,
GUNIT
VARCHAR
(
3
)
,
GMODE
VARCHAR
(
255
)
,
GNAME
VARCHAR
(
255
)
,
GNO
NUMERIC
(
19
)
,
GQTY
NUMERIC
(
19
,
5
)
,
ORIGINCURRENTY
VARCHAR
(
3
)
,
SECONDUNIT
VARCHAR
(
3
)
,
SECONDQTY
NUMERIC
(
19
,
5
)
,
TRADECURR
VARCHAR
(
3
)
,
USETO
VARCHAR
(
2
)
,
WORKUSD
NUMERIC
(
19
,
4
)
,
DESTINATIONCOUNTRY
VARCHAR
(
3
)
,
CIQCODE
VARCHAR
(
20
)
,
DECLGOODSENAME
VARCHAR
(
100
)
,
DESTCODE
VARCHAR
(
8
)
,
DISTRICTCODE
VARCHAR
(
5
)
)
\ No newline at end of file
doc/数据推送接口文档v3.docx
View file @
3504c78
No preview for this file type
pom.xml
View file @
3504c78
...
...
@@ -39,6 +39,22 @@
<scope>
provided
</scope>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-jpa
</artifactId>
</dependency>
<dependency>
<groupId>
com.microsoft.sqlserver
</groupId>
<artifactId>
mssql-jdbc
</artifactId>
<scope>
runtime
</scope>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
druid
</artifactId>
<version>
1.1.9
</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-actuator</artifactId>-->
...
...
@@ -50,7 +66,6 @@
<!-- <version>2.1.7.RELEASE</version>-->
<!-- </dependency>-->
<dependency>
<groupId>
com.google.code.gson
</groupId>
<artifactId>
gson
</artifactId>
...
...
@@ -90,6 +105,12 @@
<version>
20.0
</version>
</dependency>
<dependency>
<groupId>
commons-codec
</groupId>
<artifactId>
commons-codec
</artifactId>
</dependency>
</dependencies>
...
...
src/main/java/com/erry/iclear/dateInterface/IClearApiApplication.java
View file @
3504c78
...
...
@@ -11,7 +11,6 @@ import org.springframework.scheduling.annotation.EnableScheduling;
*/
@Slf4j
@SpringBootApplication
@EnableScheduling
public
class
IClearApiApplication
{
...
...
src/main/java/com/erry/iclear/dateInterface/api/CustomsDataInterface.java
View file @
3504c78
...
...
@@ -2,13 +2,26 @@ package com.erry.iclear.dateInterface.api;
import
com.erry.iclear.dateInterface.api.request.Mawb
;
import
com.erry.iclear.dateInterface.api.response.ResultRS
;
import
com.erry.iclear.dateInterface.common.Constant
;
import
com.erry.iclear.dateInterface.entity.IClearApiLog
;
import
com.erry.iclear.dateInterface.service.IClearApiLogService
;
import
com.erry.iclear.dateInterface.service.MawbDetailService
;
import
com.erry.iclear.dateInterface.service.MawbService
;
import
com.erry.iclear.dateInterface.util.MD5Util
;
import
com.google.gson.Gson
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpRequest
;
import
org.springframework.util.Assert
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.HashMap
;
import
java.util.Objects
;
/**
* @author Administrator
*/
...
...
@@ -19,27 +32,142 @@ public class CustomsDataInterface {
private
Gson
gson
=
new
Gson
();
@Autowired
private
MawbService
mawbService
;
@Autowired
private
MawbDetailService
mawbDetailServicel
;
@Autowired
private
IClearApiLogService
iClearApiLogService
;
@ApiOperation
(
value
=
"推送主单数据"
,
httpMethod
=
"POST"
,
notes
=
"ex: http://192.168.1.75:8080/customs/sendMawb"
)
@PostMapping
(
"/sendMawb"
)
@ResponseBody
public
ResultRS
sendMawb
(
@RequestBody
Mawb
mawb
)
{
public
ResultRS
sendMawb
(
HttpServletRequest
request
,
@RequestBody
Mawb
mawb
)
{
log
.
info
(
"接收到主单数据:"
+
gson
.
toJson
(
mawb
));
ResultRS
result
=
new
ResultRS
();
result
.
setSuccess
(
Boolean
.
FALSE
);
//0、TODO 校验用户名密码
if
(
Objects
.
equals
(
mawb
,
null
)){
result
.
setCode
(
"-7"
);
result
.
setMsg
(
"主单信息不能为空"
);
return
result
;
}
//0、保存请求信息,保存到iClear的 SQLServer
String
appId
=(
String
)
request
.
getHeader
(
"Appid"
);
String
appkey
=(
String
)
request
.
getHeader
(
"Appkey"
);
IClearApiLog
saveIClearApiLogResult
=
iClearApiLogService
.
saveIClearApiLog
(
iClearApiLogService
.
convertToIClearApiLog
(
mawb
,
appId
,
appkey
));
//1、TODO 收到主单信息后,数据先落地
if
(!
Objects
.
equals
(
saveIClearApiLogResult
,
null
)){
log
.
info
(
"请求保存成功,msgId:"
+
saveIClearApiLogResult
.
getMsgId
());
mawb
.
setMsgId
(
saveIClearApiLogResult
.
getMsgId
());
// mawb.getMawbDetailList().forEach(d->{
// d.setMsgId(saveIClearApiLogResult.getMsgId());
// });
Mawb
saveMawbResult
=
mawbService
.
saveMawb
(
mawb
);
if
(!
Objects
.
equals
(
saveMawbResult
,
null
)){
log
.
info
(
"请求主单数据保存成功,msgId:"
+
saveMawbResult
.
getMsgId
());
}
else
{
log
.
info
(
"请求主单数据保存失败,msgId:"
+
saveMawbResult
.
getMsgId
());
}
}
else
{
log
.
info
(
"请求保存失败,msgId:"
+
saveIClearApiLogResult
.
getMsgId
());
}
//2、TODO 校验主单
//1、TODO 校验用户名密码
result
=
this
.
checkAppSecret
(
request
,
result
);
//2、TODO 校验主单
if
(
result
.
getSuccess
()==
true
){
result
.
setSuccess
(
mawbService
.
checkMawb
(
mawb
));
}
//3、TODO 校验子单
if
(
result
.
getSuccess
()==
true
){
}
//4、TODO 保存主单
if
(
result
.
getSuccess
()==
true
){
}
return
result
;
}
/**
* 校验用户
* @param request
* @param result
*/
private
ResultRS
checkAppSecret
(
HttpServletRequest
request
,
ResultRS
result
)
{
String
appId
=(
String
)
request
.
getHeader
(
"Appid"
);
String
appkey
=(
String
)
request
.
getHeader
(
"Appkey"
);
String
timeStamp
=(
String
)
request
.
getHeader
(
"TimeStamp"
);
String
token
=
(
String
)
request
.
getHeader
(
"token"
);
if
(
StringUtils
.
isBlank
(
appId
)){
result
.
setCode
(
"-1"
);
result
.
setMsg
(
"Appid 不能为空"
);
return
result
;
}
if
(
StringUtils
.
isBlank
(
appkey
)){
result
.
setCode
(
"-2"
);
result
.
setMsg
(
"Appkey 不能为空"
);
return
result
;
}
if
(
StringUtils
.
isBlank
(
timeStamp
)){
result
.
setCode
(
"-6"
);
result
.
setMsg
(
"TimeStamp 不能为空"
);
return
result
;
}
if
(
StringUtils
.
isBlank
(
token
)){
result
.
setCode
(
"-4"
);
result
.
setMsg
(
"TimeStamp 不能为空"
);
return
result
;
}
HashMap
<
String
,
String
>
secretMap
=
Constant
.
appIdSecurity
.
get
(
appId
);
if
(
secretMap
==
null
){
result
.
setCode
(
"-100"
);
result
.
setMsg
(
"系统异常,该appId没有注册"
);
return
result
;
}
String
secretInSys
=
secretMap
.
get
(
appkey
);
if
(
StringUtils
.
isBlank
(
secretInSys
))
{
result
.
setCode
(
"-101"
);
result
.
setMsg
(
"系统异常,该appId没有权限/密码"
);
return
result
;
}
String
md5Str
=
MD5Util
.
md5
(
appId
+
appkey
+
secretInSys
+
timeStamp
);
if
(!
token
.
equals
(
md5Str
)){
result
.
setCode
(
"-4"
);
result
.
setMsg
(
"Token验证失败"
);
return
result
;
}
result
.
setSuccess
(
true
);
return
result
;
}
...
...
src/main/java/com/erry/iclear/dateInterface/api/request/Mawb.java
View file @
3504c78
...
...
@@ -3,7 +3,10 @@ package com.erry.iclear.dateInterface.api.request;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
org.hibernate.annotations.DynamicInsert
;
import
org.hibernate.annotations.DynamicUpdate
;
import
javax.persistence.*
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.List
;
...
...
@@ -11,151 +14,213 @@ import java.util.List;
/**
* @author Administrator
*/
@ApiModel
(
value
=
"mawb"
,
description
=
"主运单"
)
@Entity
@Table
(
name
=
"T_ICLEAR_API_MAWB"
)
@DynamicInsert
@DynamicUpdate
@Data
public
class
Mawb
implements
Serializable
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"Id"
,
insertable
=
false
,
nullable
=
false
)
private
Integer
id
;
@Column
(
name
=
"MSGID"
)
private
Integer
msgId
;
@ApiModelProperty
(
value
=
"进出口标志"
,
name
=
"IEFlag"
,
example
=
"固定值:E"
)
@Column
(
name
=
"IEFLAG"
)
private
String
IEFlag
;
@ApiModelProperty
(
value
=
"报关类型"
,
name
=
"Type"
,
example
=
"固定值:EX"
)
private
String
Type
;
@Column
(
name
=
"TYPE"
)
private
String
type
;
@ApiModelProperty
(
value
=
"申报单位代码"
,
name
=
"agentCode"
,
example
=
"固定值:1111980005"
)
@Column
(
name
=
"AGENTCODE"
)
private
String
agentCode
;
@ApiModelProperty
(
value
=
"申报单位名称"
,
name
=
"agentName"
,
example
=
"固定值:联邦快递(中国)有限公司"
)
@Column
(
name
=
"AGENTNAME"
)
private
String
agentName
;
@ApiModelProperty
(
value
=
"提单号"
,
name
=
"billNo"
,
example
=
"固定值:有总单号则取值‘总单号_运单号‘,没有总单号则取值‘运单号‘"
)
@Column
(
name
=
"BILLNO"
)
private
String
billNo
;
@ApiModelProperty
(
value
=
"合同号"
,
name
=
"contrNo"
,
example
=
""
)
@Column
(
name
=
"CONTRNO"
)
private
String
contrNo
;
@ApiModelProperty
(
value
=
"主管海关(申报地海关)"
,
name
=
"customMaster"
,
example
=
"固定值:0101"
)
@Column
(
name
=
"CUSTOMMASTER"
)
private
String
customMaster
;
@ApiModelProperty
(
value
=
"征免性质"
,
name
=
"cutMode"
,
example
=
"101"
)
@Column
(
name
=
"CUTMODE"
)
private
String
cutMode
;
@ApiModelProperty
(
value
=
"报关/转关关系标志"
,
name
=
"declTrnRel"
,
example
=
"固定值:0"
)
@Column
(
name
=
"DECLTRNREL"
)
private
String
declTrnRel
;
@ApiModelProperty
(
value
=
"经停港/指运港"
,
name
=
"distinatePort"
,
example
=
"ASM000"
)
@Column
(
name
=
"DISTINATEPORT"
)
private
String
distinatePort
;
@ApiModelProperty
(
value
=
"报关标志"
,
name
=
"EdiId"
,
example
=
"001"
)
@Column
(
name
=
"EDIID"
)
private
String
ediId
;
@ApiModelProperty
(
value
=
"海关编号"
,
name
=
"EntryId"
,
example
=
"001"
)
@Column
(
name
=
"ENTRYID"
)
private
String
entryId
;
@ApiModelProperty
(
value
=
"运费币制"
,
name
=
"feeCurr"
,
example
=
"固定值:3"
)
@Column
(
name
=
"FEECURR"
)
private
String
feeCurr
;
@ApiModelProperty
(
value
=
"运费标记"
,
name
=
"feeMark"
,
example
=
"99.22"
)
@Column
(
name
=
"FEEMARK"
)
private
String
feeMark
;
@ApiModelProperty
(
value
=
"运费/率"
,
name
=
"feeRate"
,
example
=
"43.34358"
)
@Column
(
name
=
"FEERATE"
)
private
BigDecimal
feeRate
;
@ApiModelProperty
(
value
=
"毛重"
,
name
=
"grossWet"
,
example
=
""
)
@Column
(
name
=
"CROSSWET"
)
private
Integer
grossWet
;
@ApiModelProperty
(
value
=
"出入境关闭"
,
name
=
"IEPort"
,
example
=
"固定值:0101"
)
@Column
(
name
=
"IEPORT"
)
private
String
IEPort
;
@ApiModelProperty
(
value
=
"录入人名称"
,
name
=
"InputerName"
,
example
=
"固定值:0101"
)
@Column
(
name
=
"INPUTERNAME"
)
private
String
inputerName
;
@ApiModelProperty
(
value
=
"保险费币制"
,
name
=
"insurCurr"
,
example
=
"MOP"
)
@Column
(
name
=
"INSURCURR"
)
private
String
insurCurr
;
@ApiModelProperty
(
value
=
"保险费标记"
,
name
=
"insurMark"
,
example
=
"固定值:3"
)
@Column
(
name
=
"INSURMARK"
)
private
String
insurMark
;
@ApiModelProperty
(
value
=
"保险费/率"
,
name
=
"insurRate"
,
example
=
""
)
@Column
(
name
=
"INSURRATE"
)
private
BigDecimal
insurRate
;
@ApiModelProperty
(
value
=
"备案号"
,
name
=
"manualNo"
,
example
=
""
)
@Column
(
name
=
"MANUALNO"
)
private
String
manualNo
;
@ApiModelProperty
(
value
=
"净重"
,
name
=
"netWt"
,
example
=
""
)
@Column
(
name
=
"NETWT"
)
private
BigDecimal
netWt
;
@ApiModelProperty
(
value
=
"杂费币制"
,
name
=
"otherCurr"
,
example
=
""
)
@Column
(
name
=
"OTHERCURR"
)
private
String
otherCurr
;
@ApiModelProperty
(
value
=
"杂费/率"
,
name
=
"otherRate"
,
example
=
""
)
@Column
(
name
=
"OTHERRATE"
)
private
BigDecimal
otherRate
;
@ApiModelProperty
(
value
=
"杂费标志"
,
name
=
"otherMark"
,
example
=
""
)
@Column
(
name
=
"OTHERMARK"
)
private
String
otherMark
;
@ApiModelProperty
(
value
=
"消费使用/生产销售单位代码"
,
name
=
"ownerCode"
,
example
=
"Z321654987"
)
@Column
(
name
=
"OWNERCODE"
)
private
String
ownerCode
;
@ApiModelProperty
(
value
=
"消费使用/生产销售单位名称"
,
name
=
"ownerName"
,
example
=
"上海保险"
)
@Column
(
name
=
"OWNERNAME"
)
private
String
ownerName
;
@ApiModelProperty
(
value
=
"件数"
,
name
=
"packNo"
,
example
=
""
)
@Column
(
name
=
"PACKNO"
)
private
Integer
packNo
;
@ApiModelProperty
(
value
=
"预录入编号"
,
name
=
"preEntryId"
,
example
=
""
)
@Column
(
name
=
"PREENTRYID"
)
private
String
preEntryId
;
@ApiModelProperty
(
value
=
"启运国/运抵国"
,
name
=
"tradeCountry"
,
example
=
"USA"
)
@Column
(
name
=
"TRADECOUNTRY"
)
private
String
tradeCountry
;
@ApiModelProperty
(
value
=
"监管方式"
,
name
=
"tradeMode"
,
example
=
"0200"
)
@Column
(
name
=
"TRADEMODE"
)
private
String
tradeMode
;
@ApiModelProperty
(
value
=
"境内收发货人编号"
,
name
=
"tradeCode"
,
example
=
"Z321654987"
)
@Column
(
name
=
"TRADECODE"
)
private
String
tradeCode
;
@ApiModelProperty
(
value
=
"运输方式代码"
,
name
=
"trafMode"
,
example
=
"1"
)
@Column
(
name
=
"TRAFMODE"
)
private
String
trafMode
;
@ApiModelProperty
(
value
=
"境内收发货人名称"
,
name
=
"tradeName"
,
example
=
"上海铢怡国际货物运输代理有限公司"
)
@Column
(
name
=
"TRADENAME"
)
private
String
tradeName
;
@ApiModelProperty
(
value
=
"成交方式"
,
name
=
"transMode"
,
example
=
"2"
)
@Column
(
name
=
"TRANSMODE"
)
private
String
transMode
;
@ApiModelProperty
(
value
=
"包装种类"
,
name
=
"wrapType"
,
example
=
"22"
)
@Column
(
name
=
"WRAPTYPE"
)
private
String
wrapType
;
@ApiModelProperty
(
value
=
"生产核销单位统一信用代码---报关形式类型"
,
name
=
"TradeCodeScc"
,
example
=
"A74125896321456987"
)
@Column
(
name
=
"TRADECODESCC"
)
private
String
tradeCodeScc
;
@ApiModelProperty
(
value
=
"消费使用/生产销售单位单位统一编码"
,
name
=
"ownerCodeScc"
,
example
=
""
)
@Column
(
name
=
"OWNERCODESCC"
)
private
String
ownerCodeScc
;
@ApiModelProperty
(
value
=
"贸易国别"
,
name
=
"tradeAreaCode"
,
example
=
""
)
@Column
(
name
=
"TRADEAREACODE"
)
private
String
tradeAreaCode
;
@ApiModelProperty
(
value
=
"标记及号码"
,
name
=
"markNo"
,
example
=
"N/M"
)
@Column
(
name
=
"MARKNO"
)
private
String
markNo
;
@ApiModelProperty
(
value
=
"入境口岸代码"
,
name
=
"entyPortCode"
,
example
=
"固定值:310302"
)
@Column
(
name
=
"ENTYPORTCODE"
)
private
String
entyPortCode
;
@ApiModelProperty
(
value
=
"入境口岸代码"
,
name
=
"goodsPlace"
,
example
=
"固定值:空值"
)
@Column
(
name
=
"GOODSPLACE"
)
private
String
goodsPlace
;
@ApiModelProperty
(
value
=
"申报人员姓名---报关员证号"
,
name
=
"declareName"
,
example
=
"固定值:空值"
)
@Column
(
name
=
"DECLARENAME"
)
private
String
declareName
;
@ApiModelProperty
(
value
=
"境外发货人代码"
,
name
=
"overseasConsignorCode"
,
example
=
""
)
@Column
(
name
=
"OVERSEASCONSIGNORCODE"
)
private
String
overseasConsignorCode
;
@ApiModelProperty
(
value
=
"境外收货人编码"
,
name
=
"overseasConsigneeCode"
,
example
=
""
)
@Column
(
name
=
"OVERSEASCONSIGNEECODE"
)
private
String
overseasConsigneeCode
;
@ApiModelProperty
(
value
=
"境外收货人名称(外文)"
,
name
=
"overseasConsigneeEname"
,
example
=
""
)
@Column
(
name
=
"OVERSEASCONSIGNEEENAME"
)
private
String
overseasConsigneeEname
;
@ApiModelProperty
(
value
=
"运单明细"
,
name
=
"mawbDetailList"
,
example
=
""
)
@OneToMany
(
cascade
=
CascadeType
.
PERSIST
)
@JoinColumn
(
name
=
"MAWBID"
)
private
List
<
MawbDetail
>
mawbDetailList
;
}
...
...
src/main/java/com/erry/iclear/dateInterface/api/request/MawbDetail.java
View file @
3504c78
...
...
@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModel;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.persistence.*
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
...
...
@@ -12,82 +13,120 @@ import java.math.BigDecimal;
* @author Administrator
*/
@ApiModel
(
value
=
"mawbDetail"
,
description
=
"运单明细"
)
@Entity
@Table
(
name
=
"T_ICLEAR_API_MAWBDETAIL"
)
@Data
public
class
MawbDetail
implements
Serializable
{
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"Id"
,
insertable
=
false
,
nullable
=
false
)
private
Integer
id
;
@Column
(
name
=
"MSGID"
)
private
Integer
msgId
;
@Column
(
name
=
"MAWBID"
)
private
Integer
MAWBID
;
@ApiModelProperty
(
value
=
"商品编号"
,
example
=
"空值"
)
@Column
(
name
=
"CLASSMARK"
)
private
String
classMark
;
@ApiModelProperty
(
value
=
"商品编号"
)
@Column
(
name
=
"CODETS"
)
private
String
codeTS
;
@ApiModelProperty
(
value
=
"申报单价"
,
example
=
"空值"
)
@Column
(
name
=
"DECLPRICE"
)
private
BigDecimal
declPrice
;
@ApiModelProperty
(
value
=
"申报总价"
)
@Column
(
name
=
"DECLTOTAL"
)
private
BigDecimal
declTotal
;
@ApiModelProperty
(
value
=
"征免方式"
)
@Column
(
name
=
"DUTYMODE"
)
private
String
dutyMode
;
@ApiModelProperty
(
value
=
"货号"
)
@Column
(
name
=
"EXGNO"
)
private
String
exgNo
;
@ApiModelProperty
(
value
=
"货号"
)
@Column
(
name
=
"EXGVERSION"
)
private
String
exgVersion
;
@ApiModelProperty
(
value
=
"第一计量单位(法定单位)"
)
@Column
(
name
=
"FIRSTUNIT"
)
private
String
firstUnit
;
@ApiModelProperty
(
value
=
"第一法定数量"
)
@Column
(
name
=
"FIRSTQTY"
)
private
Integer
firstQty
;
@ApiModelProperty
(
value
=
"成交计量单位"
)
@Column
(
name
=
"GUNIT"
)
private
String
GUnit
;
@ApiModelProperty
(
value
=
"商品规格、型号"
)
@Column
(
name
=
"GMODE"
)
private
String
GModel
;
@ApiModelProperty
(
value
=
"商品名称"
)
@Column
(
name
=
"GNAME"
)
private
String
GName
;
@ApiModelProperty
(
value
=
"商品序号"
)
@Column
(
name
=
"GNO"
)
private
String
GNo
;
@ApiModelProperty
(
value
=
"成交数量"
)
@Column
(
name
=
"GQTY"
)
private
Integer
GQty
;
@ApiModelProperty
(
value
=
"原产国"
)
@Column
(
name
=
"ORIGINCURRENTY"
)
private
String
originCountry
;
@ApiModelProperty
(
value
=
"第二计量单位"
)
@Column
(
name
=
"SECONDUNIT"
)
private
String
secondUnit
;
@ApiModelProperty
(
value
=
"第二法定数量"
)
@Column
(
name
=
"SECONDQTY"
)
private
Integer
secondQty
;
@ApiModelProperty
(
value
=
"成交币制"
)
@Column
(
name
=
"TRADECURR"
)
private
String
tradeCurr
;
@ApiModelProperty
(
value
=
"用途/生产厂家"
)
@Column
(
name
=
"USETO"
)
private
String
useTo
;
@ApiModelProperty
(
value
=
"工缴费"
)
@Column
(
name
=
"WORKUSD"
)
private
BigDecimal
workUsd
;
@ApiModelProperty
(
value
=
"检验检疫编"
)
@Column
(
name
=
"CIQCODE"
)
private
String
ciqCode
;
@ApiModelProperty
(
value
=
"最终目的国(地区)"
)
@Column
(
name
=
"DESTINATIONCOUNTRY"
)
private
String
destinationCountry
;
@ApiModelProperty
(
value
=
"申报货物英文名称"
)
@Column
(
name
=
"DECLGOODSENAME"
)
private
String
declGoodsEname
;
@ApiModelProperty
(
value
=
"目的地代码"
)
@Column
(
name
=
"DESTCODE"
)
private
String
destCode
;
@ApiModelProperty
(
value
=
"境内目的地/境内货源地"
)
@Column
(
name
=
"DISTRICTCODE"
)
private
String
districtCode
;
...
...
src/main/java/com/erry/iclear/dateInterface/common/Constant.java
View file @
3504c78
...
...
@@ -13,8 +13,9 @@ public class Constant {
public
static
Map
<
String
,
HashMap
<
String
,
String
>>
appIdSecurity
=
new
HashMap
<>();
public
static
String
MSG_TYPE_C
=
"C"
;
public
static
String
MSG_TYPE_D
=
"D"
;
...
...
src/main/java/com/erry/iclear/dateInterface/entity/IClearApiLog.java
0 → 100644
View file @
3504c78
package
com
.
erry
.
iclear
.
dateInterface
.
entity
;
import
lombok.Data
;
import
javax.persistence.*
;
import
java.io.Serializable
;
import
java.util.Date
;
/**
* @author Administrator
*/
@Entity
@Table
(
name
=
"T_ICLEAR_API_LOG"
)
@Data
public
class
IClearApiLog
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"MSGID"
,
insertable
=
false
,
nullable
=
false
)
private
Integer
msgId
;
@Column
(
name
=
"MSG_TYPE"
)
private
String
msgType
;
@Column
(
name
=
"APPID"
)
private
String
appId
;
@Column
(
name
=
"APPKEY"
)
private
String
appKey
;
@Column
(
name
=
"CREATE_TIME"
)
private
Date
createTime
;
@Column
(
name
=
"UPDATE_TIME"
)
private
Date
updateTime
;
//收到的json,用 T_ICLEAR_API_MAWB表保存
//@Column(name= "REQUEST_MSG")
//private String request_msg;
@Column
(
name
=
"RECEIVE_RESULT"
)
private
String
receiveResult
;
@Column
(
name
=
"RESPONSE_TIME"
)
private
Date
responseTime
;
@Column
(
name
=
"SPEND_TIME"
)
private
Long
spendTime
;
@Column
(
name
=
"SENDTIMES"
)
private
int
sendTimes
;
@Column
(
name
=
"BILLNO"
)
private
String
billNo
;
@Column
(
name
=
"CONTRNO"
)
private
String
contrNo
;
}
src/main/java/com/erry/iclear/dateInterface/repository/IClearApiLogRepository.java
0 → 100644
View file @
3504c78
package
com
.
erry
.
iclear
.
dateInterface
.
repository
;
import
com.erry.iclear.dateInterface.entity.IClearApiLog
;
import
org.hibernate.annotations.DynamicInsert
;
import
org.hibernate.annotations.DynamicUpdate
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaSpecificationExecutor
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.annotation.Transactional
;
/**
* @author Administrator
*/
@DynamicUpdate
@DynamicInsert
@Repository
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
interface
IClearApiLogRepository
extends
JpaRepository
<
IClearApiLog
,
Integer
>,
JpaSpecificationExecutor
<
IClearApiLog
>
{
}
src/main/java/com/erry/iclear/dateInterface/repository/MawbDetailRepository.java
0 → 100644
View file @
3504c78
package
com
.
erry
.
iclear
.
dateInterface
.
repository
;
import
com.erry.iclear.dateInterface.api.request.MawbDetail
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaSpecificationExecutor
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.annotation.Transactional
;
@Repository
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
interface
MawbDetailRepository
extends
JpaRepository
<
MawbDetail
,
Integer
>,
JpaSpecificationExecutor
<
MawbDetail
>
{
}
src/main/java/com/erry/iclear/dateInterface/repository/MawbRepository.java
0 → 100644
View file @
3504c78
package
com
.
erry
.
iclear
.
dateInterface
.
repository
;
import
com.erry.iclear.dateInterface.api.request.Mawb
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.JpaSpecificationExecutor
;
import
org.springframework.stereotype.Repository
;
import
org.springframework.transaction.annotation.Transactional
;
/**
* @author Administrator
*/
@Repository
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
interface
MawbRepository
extends
JpaRepository
<
Mawb
,
Integer
>,
JpaSpecificationExecutor
<
Mawb
>
{
}
src/main/java/com/erry/iclear/dateInterface/service/IClearApiLogService.java
0 → 100644
View file @
3504c78
package
com
.
erry
.
iclear
.
dateInterface
.
service
;
import
com.erry.iclear.dateInterface.api.request.Mawb
;
import
com.erry.iclear.dateInterface.common.Constant
;
import
com.erry.iclear.dateInterface.entity.IClearApiLog
;
import
com.erry.iclear.dateInterface.repository.IClearApiLogRepository
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.Date
;
/**
* @author Administrator
*/
@Service
@Slf4j
public
class
IClearApiLogService
{
@Autowired
private
IClearApiLogRepository
iClearApiLogRepository
;
/**
* 保存日志
* @param iClearApiLog
*/
public
IClearApiLog
saveIClearApiLog
(
IClearApiLog
iClearApiLog
){
try
{
return
iClearApiLogRepository
.
save
(
iClearApiLog
);
}
catch
(
Exception
e
){
log
.
error
(
"saveIClearApiLog() error:"
+
e
.
getMessage
());
}
return
null
;
}
/**
* 创建日志
* @return
*/
public
IClearApiLog
convertToIClearApiLog
(
Mawb
mawb
,
String
appId
,
String
appKey
){
IClearApiLog
result
=
new
IClearApiLog
();
try
{
result
.
setMsgType
(
Constant
.
MSG_TYPE_D
);
result
.
setAppId
(
appId
);
result
.
setAppKey
(
appKey
);
result
.
setCreateTime
(
new
Date
());
result
.
setUpdateTime
(
new
Date
());
result
.
setReceiveResult
(
null
);
result
.
setResponseTime
(
null
);
result
.
setSpendTime
(
null
);
result
.
setSendTimes
(
1
);
result
.
setBillNo
(
mawb
.
getBillNo
());
result
.
setContrNo
(
mawb
.
getContrNo
());
}
catch
(
Exception
e
){
log
.
error
(
"convertToIClearApiLog() error:"
+
e
.
getMessage
());
}
return
result
;
}
}
src/main/java/com/erry/iclear/dateInterface/service/MawbDetailService.java
View file @
3504c78
...
...
@@ -2,9 +2,13 @@ package com.erry.iclear.dateInterface.service;
import
com.erry.iclear.dateInterface.api.request.Mawb
;
import
com.erry.iclear.dateInterface.api.request.MawbDetail
;
import
com.erry.iclear.dateInterface.repository.MawbDetailRepository
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* @author Administrator
*/
...
...
@@ -12,9 +16,12 @@ import org.springframework.stereotype.Service;
@Slf4j
public
class
MawbDetailService
{
public
void
saveMawbDetail
(
MawbDetail
mawbDetail
){
log
.
info
(
""
)
;
@Autowired
private
MawbDetailRepository
mawbDetailRepository
;
public
void
saveMawbDetail
(
List
<
MawbDetail
>
mawbDetailList
){
log
.
info
(
""
);
log
.
info
(
""
);
}
...
...
src/main/java/com/erry/iclear/dateInterface/service/MawbService.java
View file @
3504c78
package
com
.
erry
.
iclear
.
dateInterface
.
service
;
import
com.erry.iclear.dateInterface.api.request.Mawb
;
import
com.erry.iclear.dateInterface.repository.MawbRepository
;
import
com.google.gson.Gson
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Service
;
...
...
@@ -15,20 +17,23 @@ public class MawbService {
private
Gson
gson
=
new
Gson
();
@Autowired
private
MawbRepository
mawbRepository
;
/**
* 保存主单
* 保存主单
Request
* @param mawb
*/
public
void
saveMawb
(
Mawb
mawb
){
public
Mawb
saveMawb
(
Mawb
mawb
){
Mawb
result
=
null
;
try
{
log
.
info
(
"saveMawb start>>>>>>>>>>>"
);
result
=
mawbRepository
.
save
(
mawb
);
log
.
info
(
"saveMawb end>>>>>>>>>>>"
);
}
catch
(
Exception
e
){
log
.
error
(
"saveMawb() error:"
+
e
.
getMessage
());
}
return
result
;
}
...
...
src/main/java/com/erry/iclear/dateInterface/util/MD5Util.java
0 → 100644
View file @
3504c78
package
com
.
erry
.
iclear
.
dateInterface
.
util
;
import
java.io.UnsupportedEncodingException
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.Set
;
import
java.util.TreeMap
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONException
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.parser.Feature
;
/**
* @author Administrator
*/
public
class
MD5Util
{
private
static
Log
logger
=
LogFactory
.
getLog
(
MD5Util
.
class
);
public
static
String
md5
(
String
inStr
)
{
try
{
return
DigestUtils
.
md5Hex
(
inStr
.
getBytes
(
"UTF-8"
));
}
catch
(
UnsupportedEncodingException
e
)
{
throw
new
RuntimeException
(
"MD5签名过程中出现错误"
);
}
}
public
static
String
sign
(
Map
<
String
,
Object
>
params
,
String
appSecret
)
{
StringBuilder
valueSb
=
new
StringBuilder
();
// 将参数以参数名的字典升序排序
Map
<
String
,
Object
>
sortParams
=
new
TreeMap
<
String
,
Object
>(
params
);
Set
<
Entry
<
String
,
Object
>>
entrys
=
sortParams
.
entrySet
();
// 遍历排序的字典,并拼接value1+value2......格式
for
(
Entry
<
String
,
Object
>
entry
:
entrys
)
{
valueSb
.
append
(
entry
.
getValue
());
}
valueSb
.
append
(
appSecret
);
return
md5
(
valueSb
.
toString
());
}
public
static
String
getParam
(
JSONObject
jsonObj
,
StringBuffer
sb
)
{
if
(
jsonObj
.
get
(
"sign"
)!=
null
){
jsonObj
.
remove
(
"sign"
);
}
// 将参数以参数名的字典升序排序
for
(
Entry
<
String
,
Object
>
entry
:
jsonObj
.
entrySet
())
{
try
{
JSONArray
array
=
JSONArray
.
parseArray
(
entry
.
getValue
().
toString
());
if
(
array
!=
null
)
{
for
(
int
i
=
0
;
i
<
array
.
size
();
i
++)
{
getParam
(
array
.
getJSONObject
(
i
),
sb
);
}
}
}
catch
(
JSONException
e
){
try
{
JSONObject
obj
=
JSONObject
.
parseObject
(
entry
.
getValue
().
toString
());
getParam
(
obj
,
sb
);
}
catch
(
JSONException
E2
){
sb
.
append
(
entry
.
getValue
());
}
}
}
return
sb
.
toString
();
}
public
static
String
md5
(
Object
inStr
,
String
key
)
{
try
{
JSONObject
json
=
JSON
.
parseObject
(
JSONObject
.
toJSONString
(
inStr
),
Feature
.
OrderedField
);
String
str
=
MD5Util
.
getParam
(
json
,
new
StringBuffer
());
return
DigestUtils
.
md5Hex
((
str
+
key
).
getBytes
(
"UTF-8"
));
}
catch
(
UnsupportedEncodingException
e
)
{
throw
new
RuntimeException
(
"MD5签名过程中出现错误"
);
}
}
}
src/main/resources/application-dev.yml
View file @
3504c78
...
...
@@ -5,7 +5,25 @@ server:
spring
:
application
:
name
:
iClearExport.DataInterface
profiles
:
active
:
@
activatedProperties@
jpa
:
database
:
sql_server
show-sql
:
true
hibernate
:
ddl-auto
:
none
naming
:
physical-strategy
:
org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
datasource
:
url
:
jdbc:sqlserver://40.73.78.157:1433;DatabaseName=IClearDev
username
:
sa
password
:
Fedex_123
driver-class-name
:
com.microsoft.sqlserver.jdbc.SQLServerDriver
type
:
com.alibaba.druid.pool.DruidDataSource
task
:
pushMawbToIClear
:
0 0/1 * * * ?
\ No newline at end of file
pushMawbToIClear
:
0 0/1 * * * ?
...
...
src/main/resources/application-prod.yml
View file @
3504c78
...
...
@@ -3,12 +3,11 @@ server:
spring
:
application
:
name
:
iClearExport.DataInterface
profiles
:
active
:
@
activatedProperties@
task
:
pushMawbToIClear
:
0 0/1 * * * ?
\ No newline at end of file
...
...
src/main/resources/application-test.yml
View file @
3504c78
server
:
port
:
8080
spring
:
application
:
name
:
iClearExport.DataInterface
profiles
:
active
:
@
activatedProperties@
task
:
pushMawbToIClear
:
0 0/1 * * * ?
\ No newline at end of file
...
...
src/main/resources/logback.xml
0 → 100644
View file @
3504c78
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<contextName>
iClear-api
</contextName>
<appender
name=
"CONSOLE"
class=
"ch.qos.logback.core.ConsoleAppender"
>
<encoder
class=
"ch.qos.logback.core.encoder.LayoutWrappingEncoder"
>
<layout
class=
"ch.qos.logback.classic.PatternLayout"
>
<pattern>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread{0}] %c{0} - %msg%n
</pattern>
</pattern>
</layout>
</encoder>
</appender>
<appender
name=
"FILE"
class=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<prudent>
false
</prudent>
<append>
true
</append>
<file>
d:/home/app/logs/iClear-api.log
</file>
<rollingPolicy
class=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<fileNamePattern>
d:/home/app/logs/iClear-api-%d.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class=
"ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"
>
<maxFileSize>
500MB
</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>
30
</maxHistory>
<totalSizeCap>
1GB
</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread{0}] %c{0} - %msg%n
</pattern>
<charset>
utf-8
</charset>
</encoder>
</appender>
<logger
name=
"io.lettuce.core"
level=
"ERROR"
/>
<logger
name=
"com.netflix"
level=
"OFF"
/>
<springProfile
name=
"dev | test"
>
<root
level=
"info"
>
<appender-ref
ref=
"CONSOLE"
/>
<appender-ref
ref=
"FILE"
/>
</root>
</springProfile>
<springProfile
name=
"prod"
>
<root
level=
"info"
>
<appender-ref
ref=
"CONSOLE"
/>
<appender-ref
ref=
"FILE"
/>
</root>
</springProfile>
</configuration>
\ No newline at end of file
src/test/java/com/erry/iclear/dateInterface/ApiTest.java
View file @
3504c78
...
...
@@ -104,7 +104,7 @@ public class ApiTest {
mawb
.
setInsurRate
(
BigDecimal
.
valueOf
(
23.44
));
mawb
.
setManualNo
(
"备案号"
);
mawb
.
setNetWt
(
BigDecimal
.
valueOf
(
80
));
mawb
.
setOtherCurr
(
"
杂费币制
"
);
mawb
.
setOtherCurr
(
"
001
"
);
mawb
.
setOtherRate
(
BigDecimal
.
valueOf
(
10
));
mawb
.
setOtherMark
(
""
);
mawb
.
setOwnerCode
(
"Z321654987"
);
...
...
@@ -128,16 +128,16 @@ public class ApiTest {
mawb
.
setOverseasConsignorCode
(
"Z785421"
);
mawb
.
setOverseasConsigneeCode
(
"Z785421"
);
mawb
.
setOverseasConsigneeEname
(
"出口时必填收件人公司名(原)"
);
mawb
.
setMawbDetailList
(
mawbDetailList
);
//
mawb.setMawbDetailList(mawbDetailList);
List
list
=(
List
<
MawbDetail
>)
mawb
.
getMawbDetailList
();
list
.
forEach
(
d
->{
System
.
out
.
println
(
d
.
toString
());
});
//
List list=(List<MawbDetail>) mawb.getMawbDetailList();
//
list.forEach(d->{
//
System.out.println(d.toString());
//
});
...
...
Please
register
or
login
to post a comment