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
yi.wang
2021-09-15 14:06:34 +0800
Browse Files
Options
Browse Files
Download
Plain Diff
Commit
8f5d7d0359b06c7528caca74069f498479cdca93
8f5d7d03
2 parents
ab80dc06
06c3f227
Merge remote-tracking branch 'origin/master'
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
980 additions
and
60 deletions
src/main/java/com/erry/iclear/dateInterface/api/BasfDataInterface.java
src/main/java/com/erry/iclear/dateInterface/api/CustomsDataInterface.java
src/main/java/com/erry/iclear/dateInterface/api/request/BasfMawb.java
src/main/java/com/erry/iclear/dateInterface/api/request/BasfMawbDetail.java
src/main/java/com/erry/iclear/dateInterface/api/request/Basfc.java
src/main/java/com/erry/iclear/dateInterface/api/request/BasfcDetail.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/entity/ChmConsignmentDetail.java
src/main/java/com/erry/iclear/dateInterface/repository/BasfMawbRepository.java
src/main/java/com/erry/iclear/dateInterface/repository/MawbAdd.java
src/main/java/com/erry/iclear/dateInterface/service/BasfService.java
src/main/java/com/erry/iclear/dateInterface/service/ChmConsignmentDetailService.java
src/main/java/com/erry/iclear/dateInterface/service/ChmConsignmentService.java
src/main/java/com/erry/iclear/dateInterface/service/IClearApiLogService.java
src/main/java/com/erry/iclear/dateInterface/service/MawbService.java
src/main/java/com/erry/iclear/dateInterface/task/IClearApiTask.java
src/main/resources/application-dev.yml
src/test/java/com/erry/iclear/dateInterface/ChmConsignmentServiceTest.java
src/main/java/com/erry/iclear/dateInterface/api/BasfDataInterface.java
0 → 100644
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
api
;
import
com.erry.iclear.dateInterface.api.request.BasfMawb
;
import
com.erry.iclear.dateInterface.api.request.Basfc
;
import
com.erry.iclear.dateInterface.api.response.ResultRS
;
import
com.erry.iclear.dateInterface.entity.IClearApiLog
;
import
com.erry.iclear.dateInterface.service.BasfService
;
import
com.erry.iclear.dateInterface.service.ChmConsignmentService
;
import
com.erry.iclear.dateInterface.service.IClearApiLogService
;
import
com.google.gson.Gson
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.StopWatch
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.Date
;
import
java.util.Objects
;
@RestController
@RequestMapping
(
"/basf"
)
@Slf4j
public
class
BasfDataInterface
{
private
Gson
gson
=
new
Gson
();
@Autowired
private
BasfService
basfService
;
@Autowired
private
ChmConsignmentService
chmConsignmentService
;
@Autowired
private
IClearApiLogService
iClearApiLogService
;
@ApiOperation
(
value
=
"BASF推送运单数据"
,
httpMethod
=
"POST"
,
notes
=
"ex: http://192.168.1.75:8080/customs/sendMawbBasf"
)
@PostMapping
(
"/sendMawbBasf"
)
@ResponseBody
public
ResultRS
sendMawbBasf
(
HttpServletRequest
request
,
@Validated
@RequestBody
Basfc
basfc
)
{
log
.
info
(
"接收到请求数据consignmentCode:"
+
basfc
.
getConsignmentCode
()+
" data:"
+
gson
.
toJson
(
basfc
));
ResultRS
result
=
new
ResultRS
(
Boolean
.
FALSE
,
""
,
""
);
if
(
Objects
.
equals
(
basfc
,
null
)){
result
.
setCode
(
"-7"
);
result
.
setMsg
(
"请求信息不能为空"
);
return
result
;
}
//1、保存请求信息,保存到iClear的 SQLServer
StopWatch
sw
=
new
StopWatch
(
"receice mawbBasf"
);
sw
.
start
(
"save log"
);
String
appId
=(
String
)
request
.
getHeader
(
"Appid"
);
String
appKey
=(
String
)
request
.
getHeader
(
"Appkey"
);
String
timeStamp
=(
String
)
request
.
getHeader
(
"TimeStamp"
);
IClearApiLog
saveIClearApiLogResult
=
iClearApiLogService
.
saveIClearApiLog
(
iClearApiLogService
.
convertToIClearApiLogC
(
basfc
,
appId
,
appKey
,
new
Date
(
Long
.
valueOf
(
timeStamp
))));
basfc
.
setAppId
(
appId
);
BasfMawb
saveMawbBasfResult
=
null
;
if
(!
Objects
.
equals
(
saveIClearApiLogResult
,
null
)){
log
.
info
(
"请求保存成功,msgId:"
+
saveIClearApiLogResult
.
getMsgId
());
basfc
.
setMsgId
(
saveIClearApiLogResult
.
getMsgId
());
basfc
.
getBasfcDetailList
().
forEach
(
d
->{
d
.
setMsgId
(
saveIClearApiLogResult
.
getMsgId
());
});
saveMawbBasfResult
=
basfService
.
saveMawbBasf
(
basfc
);
if
(!
Objects
.
equals
(
saveMawbBasfResult
,
null
)){
log
.
info
(
"请求数据运单号"
+
basfc
.
getConsignmentCode
()+
"保存成功,msgId:"
+
saveMawbBasfResult
.
getMsgId
());
}
else
{
log
.
info
(
"请求数据运单号"
+
basfc
.
getConsignmentCode
()+
"保存失败,msgId:"
+
saveMawbBasfResult
.
getMsgId
());
}
}
else
{
log
.
info
(
"请求日志保存失败,consignmentCode:"
+
basfc
.
getConsignmentCode
());
}
sw
.
stop
();
//2、TODO 校验主单
/* sw.start("checkMawb");
result=mawbService.checkMawb(mawb);
if(!result.getSuccess()){
return result;
}
sw.stop();*/
// //3、TODO 校验子单
// sw.start("checkMawbDetail");
// result=mawbDetailServicel.checkMawbDetail(mawb);
// if(!result.getSuccess()){
// return result;
// }
// sw.stop();
//4、保存运单到iclear中
sw
.
start
(
"processChmConsignment"
);
result
=
chmConsignmentService
.
processChmConsignmentBasf
(
saveMawbBasfResult
,
timeStamp
,
appId
);
if
(!
result
.
getSuccess
()){
return
result
;
}
sw
.
stop
();
//5、更新日志
sw
.
start
(
"updateIClearApiLog"
);
if
(!
Objects
.
equals
(
saveIClearApiLogResult
,
null
)){
saveIClearApiLogResult
.
setReceiveResult
(
result
.
getSuccess
().
toString
());
saveIClearApiLogResult
.
setErrorCode
(
result
.
getCode
());
saveIClearApiLogResult
.
setResponseTime
(
new
Date
());
saveIClearApiLogResult
.
setSpendTime
(
sw
.
getTotalTimeMillis
());
iClearApiLogService
.
updateIClearApiLog
(
saveIClearApiLogResult
);
}
log
.
info
(
"请求数据consignmentCode:"
+
basfc
.
getConsignmentCode
()
+
" 接收结束"
);
sw
.
stop
();
log
.
info
(
sw
.
prettyPrint
());
//6、return result
result
.
setSuccess
(
Boolean
.
TRUE
);
result
.
setCode
(
"0"
);
return
result
;
}
}
src/main/java/com/erry/iclear/dateInterface/api/CustomsDataInterface.java
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
api
;
import
com.erry.iclear.dateInterface.api.request.Basfc
;
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.repository.MawbAdd
;
import
com.erry.iclear.dateInterface.service.*
;
import
com.erry.iclear.dateInterface.util.DateUtils
;
import
com.erry.iclear.dateInterface.util.SHA256Util
;
...
...
@@ -49,7 +51,7 @@ public class CustomsDataInterface {
@PostMapping
(
"/sendMawb"
)
@ResponseBody
public
ResultRS
sendMawb
(
HttpServletRequest
request
,
@Validated
@RequestBody
Mawb
mawb
)
{
,
@Validated
(
MawbAdd
.
class
)
@RequestBody
Mawb
mawb
)
{
log
.
info
(
"接收到请求数据billNo:"
+
mawb
.
getBillNo
()+
" data:"
+
gson
.
toJson
(
mawb
));
ResultRS
result
=
new
ResultRS
(
Boolean
.
FALSE
,
""
,
""
);
...
...
@@ -133,7 +135,6 @@ public class CustomsDataInterface {
result
.
setCode
(
"0"
);
return
result
;
}
}
...
...
src/main/java/com/erry/iclear/dateInterface/api/request/BasfMawb.java
0 → 100644
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
api
.
request
;
import
com.erry.iclear.dateInterface.repository.MawbAdd
;
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
javax.validation.Valid
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.List
;
/**
* @author Administrator
*/
@ApiModel
(
value
=
"mawb"
,
description
=
"主运单"
)
@Entity
@Table
(
name
=
"T_ICLEAR_API_MAWB"
)
@DynamicInsert
@DynamicUpdate
@Data
public
class
BasfMawb
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
7092144710653831972L
;
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"Id"
,
insertable
=
false
,
nullable
=
false
)
private
Long
id
;
@Column
(
name
=
"MSGID"
)
private
Long
msgId
;
@ApiModelProperty
(
value
=
"用户ID"
,
name
=
"AppId"
,
example
=
"IDE"
)
@Column
(
name
=
"APPID"
)
private
String
AppId
;
@ApiModelProperty
(
value
=
"进出口标志"
,
name
=
"IEFlag"
,
example
=
"固定值:E"
)
@Column
(
name
=
"IEFLAG"
)
private
String
ieFlag
;
@ApiModelProperty
(
value
=
"报关类型"
,
name
=
"Type"
,
example
=
"固定值:EX"
)
@Column
(
name
=
"TYPE"
)
private
String
type
;
@ApiModelProperty
(
value
=
"申报单位代码"
,
name
=
"agentCode"
,
example
=
"固定值:1111980005"
)
//@NotBlank(message="参数agentCode不能为空")
@Column
(
name
=
"AGENTCODE"
)
private
String
agentCode
;
@ApiModelProperty
(
value
=
"申报单位名称"
,
name
=
"agentName"
,
example
=
"固定值:联邦快递(中国)有限公司"
)
//@NotBlank(message="参数agentName不能为空")
@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"
)
//@NotBlank(message="参数declTrnRel不能为空")
@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
BigDecimal
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
=
"上海保险"
)
@NotBlank
(
message
=
"参数ownerName不能为空"
,
groups
=
{
MawbAdd
.
class
})
@Column
(
name
=
"OWNERNAME"
)
private
String
ownerName
;
@ApiModelProperty
(
value
=
"件数"
,
name
=
"packNo"
,
example
=
""
)
@Column
(
name
=
"PACKNO"
)
private
Integer
packNo
;
@ApiModelProperty
(
value
=
"预录入编号"
,
name
=
"preEntryId"
,
example
=
""
)
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
=
""
)
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
=
"运单ID"
,
name
=
"consignmentCodeId"
,
example
=
""
)
@Column
(
name
=
"CONSIGNMENTCODEID"
)
private
Long
consignmentCodeId
;
@ApiModelProperty
(
value
=
"EANNo"
,
name
=
"EANNo"
,
example
=
""
)
@Column
(
name
=
"EANNO"
)
private
String
EANNo
;
@Valid
@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/BasfMawbDetail.java
0 → 100644
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
api
.
request
;
public
class
BasfMawbDetail
{
}
src/main/java/com/erry/iclear/dateInterface/api/request/Basfc.java
0 → 100644
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
api
.
request
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.Data
;
import
org.hibernate.annotations.DynamicInsert
;
import
org.hibernate.annotations.DynamicUpdate
;
import
javax.persistence.*
;
import
javax.validation.Valid
;
import
javax.validation.constraints.NotBlank
;
import
java.io.Serializable
;
import
java.util.List
;
@ApiModel
(
value
=
"basfc"
,
description
=
"主运单"
)
@Entity
@Table
(
name
=
"T_ICLEAR_API_BASFC"
)
@DynamicInsert
@DynamicUpdate
@Data
public
class
Basfc
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
7092144710653831972L
;
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"Id"
,
insertable
=
false
,
nullable
=
false
)
private
Long
id
;
@ApiModelProperty
(
value
=
"用户ID"
,
name
=
"AppId"
,
example
=
"BASF"
)
@Column
(
name
=
"APPID"
)
private
String
AppId
;
@Column
(
name
=
"MSGID"
)
private
Long
msgId
;
/*@ApiModelProperty(value = "权限", name = "AppKey", example = "iClearExportC")
@Column(name = "APP_KEY")
private String AppKey;*/
@ApiModelProperty
(
value
=
"加密码"
,
name
=
"Secret"
)
@Column
(
name
=
"SECRET"
)
private
String
secret
;
@ApiModelProperty
(
value
=
"运单号"
,
name
=
"consignmentCode"
)
@Column
(
name
=
"CONSIGNMENTCODE"
)
@NotBlank
(
message
=
"参数consignmentCode不能为空!"
)
private
String
consignmentCode
;
@ApiModelProperty
(
value
=
"运单ID"
,
name
=
"consignmentId"
,
example
=
"运单记录的唯一ID"
)
@Column
(
name
=
"CONSIGNMENTID"
)
@NotBlank
(
message
=
"参数consignmentId不能为空!"
)
private
Long
consignmentId
;
@ApiModelProperty
(
value
=
"运单类型"
,
name
=
"consType"
,
example
=
"A/B/C/D"
)
@Column
(
name
=
"CONSTYPE"
)
@NotBlank
(
message
=
"参数consType不能为空!"
)
private
String
consType
;
@ApiModelProperty
(
value
=
"发件人"
,
name
=
"sender"
)
@Column
(
name
=
"SENDER"
)
@NotBlank
(
message
=
"参数sender不能为空!"
)
private
String
sender
;
@ApiModelProperty
(
value
=
"发件人海关编码"
,
name
=
"shipperCustomsCode"
)
@Column
(
name
=
"SHIPPERCUSTOMSCODE"
)
private
String
shipperCustomsCode
;
@ApiModelProperty
(
value
=
"发件人社会信用证代码"
,
name
=
"shipperSCC"
)
@Column
(
name
=
"SHIPPERSCC"
)
@NotBlank
(
message
=
"参数shipperSCC不能为空!"
)
private
String
shipperSCC
;
@ApiModelProperty
(
value
=
"经营单位"
,
name
=
"operateUnitName"
)
@Column
(
name
=
"OPERATEUNITNAME"
)
private
String
operateUnitName
;
@ApiModelProperty
(
value
=
"经营单位海关编码"
,
name
=
"operateUnitCode"
)
@Column
(
name
=
"OPERATEUNITCODE"
)
private
String
operateUnitCode
;
@ApiModelProperty
(
value
=
"经营单位社会信用证代码"
,
name
=
"operateSCC"
)
@Column
(
name
=
"OPERATESCC"
)
private
String
operateSCC
;
@ApiModelProperty
(
value
=
"EANNo"
,
name
=
"EANNo"
)
@Column
(
name
=
"EANNO"
)
private
String
EANNo
;
@Valid
@ApiModelProperty
(
value
=
"运单明细"
,
name
=
"basfcDetailList"
,
example
=
""
)
@OneToMany
(
cascade
=
CascadeType
.
PERSIST
)
@JoinColumn
(
name
=
"BASFCID"
)
private
List
<
BasfcDetail
>
basfcDetailList
;
}
src/main/java/com/erry/iclear/dateInterface/api/request/BasfcDetail.java
0 → 100644
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
api
.
request
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.persistence.*
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.math.BigDecimal
;
@ApiModel
(
value
=
"basfcDetail"
,
description
=
"运单明细"
)
@Entity
@Table
(
name
=
"T_ICLEAR_API_BASFCDETAIL"
)
@Data
public
class
BasfcDetail
{
private
static
final
long
serialVersionUID
=
-
6706944312498119267L
;
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
@Column
(
name
=
"Id"
,
insertable
=
false
,
nullable
=
false
)
private
Long
id
;
@Column
(
name
=
"MSGID"
)
private
Long
msgId
;
@Column
(
name
=
"BASFCID"
)
private
Long
basfId
;
@Column
(
name
=
"CONSIGNMENTDETAILID"
)
@NotBlank
(
message
=
"参数consignmentDetailId不能为空"
)
private
String
consignmentDetailId
;
@ApiModelProperty
(
value
=
"商品编号"
)
@NotBlank
(
message
=
"参数skuCode不能为空"
)
@Column
(
name
=
"SKUCODE"
)
private
String
skuCode
;
@ApiModelProperty
(
value
=
"品名"
)
@NotBlank
(
message
=
"参数skuName不能为空"
)
@Column
(
name
=
"SKUNAME"
)
private
String
skuName
;
@ApiModelProperty
(
value
=
"规格型号"
)
@NotBlank
(
message
=
"参数model不能为空"
)
@Column
(
name
=
"MODEL"
)
private
String
model
;
@ApiModelProperty
(
value
=
"第一计量单位(法定单位)"
)
@Column
(
name
=
"UNITLEGALFIRST"
)
private
String
unitLegalFirst
;
@ApiModelProperty
(
value
=
"第一法定数量"
)
@Column
(
name
=
"QTY_LEGALFIRST"
)
private
BigDecimal
qtyLegalFirst
;
@ApiModelProperty
(
value
=
"成交计量单位"
)
@Column
(
name
=
"KNOCKDOWNUNIT"
)
private
String
knockdownUnit
;
@ApiModelProperty
(
value
=
"成交数量"
)
@Column
(
name
=
"KNOCKDOWNNUMBER"
)
private
BigDecimal
knockdownNumber
;
@ApiModelProperty
(
value
=
"第二计量单位"
)
@Column
(
name
=
"UNITLEGALSECOND"
)
private
String
unitLegalSecond
;
@ApiModelProperty
(
value
=
"第二法定数量"
)
@Column
(
name
=
"QTYLEGALSECOND"
)
private
BigDecimal
qtyLegalSecond
;
@ApiModelProperty
(
value
=
"申报金额"
)
@Column
(
name
=
"DECLAREDAMOUNT"
)
private
BigDecimal
declaredAmount
;
@ApiModelProperty
(
value
=
"币制"
)
@Column
(
name
=
"CURRENCY"
)
private
String
currency
;
@ApiModelProperty
(
value
=
"申报重量"
)
@Column
(
name
=
"DECLAREDWEIGHT"
)
private
BigDecimal
declaredWeight
;
}
src/main/java/com/erry/iclear/dateInterface/api/request/Mawb.java
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
api
.
request
;
import
com.erry.iclear.dateInterface.repository.MawbAdd
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
@@ -259,6 +260,14 @@ public class Mawb implements Serializable {
@Column
(
name
=
"OVERSEASCONSIGNEEENAME"
)
private
String
overseasConsigneeEname
;
@ApiModelProperty
(
value
=
"运单ID"
,
name
=
"consignmentCodeId"
,
example
=
""
)
@Column
(
name
=
"CONSIGNMENTCODEID"
)
private
Long
consignmentCodeId
;
@ApiModelProperty
(
value
=
"EANNo"
,
name
=
"EANNo"
,
example
=
""
)
@Column
(
name
=
"EANNO"
)
private
String
EANNo
;
@Valid
@ApiModelProperty
(
value
=
"运单明细"
,
name
=
"mawbDetailList"
,
example
=
""
)
@OneToMany
(
cascade
=
CascadeType
.
PERSIST
)
...
...
src/main/java/com/erry/iclear/dateInterface/api/request/MawbDetail.java
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
api
.
request
;
import
com.erry.iclear.dateInterface.repository.MawbAdd
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
...
...
@@ -152,5 +153,7 @@ public class MawbDetail implements Serializable{
@Column
(
name
=
"DISTRICTCODE"
)
private
String
districtCode
;
@ApiModelProperty
(
value
=
"申报重量"
)
@Column
(
name
=
"DECLAREDWEIGHT"
)
private
BigDecimal
declaredWeight
;
}
...
...
src/main/java/com/erry/iclear/dateInterface/entity/ChmConsignmentDetail.java
View file @
8f5d7d0
...
...
@@ -246,8 +246,8 @@ public class ChmConsignmentDetail implements Serializable {
/**
* 申报重量
* */
//
@Column(name = "DECLARED_WEIGHT")
//
private BigDecimal declaredWeight;
@Column
(
name
=
"DECLARED_WEIGHT"
)
private
BigDecimal
declaredWeight
;
/**
* 录入品名
*/
...
...
src/main/java/com/erry/iclear/dateInterface/repository/BasfMawbRepository.java
0 → 100644
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
repository
;
import
com.erry.iclear.dateInterface.api.request.BasfMawb
;
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
BasfMawbRepository
extends
JpaRepository
<
BasfMawb
,
Integer
>,
JpaSpecificationExecutor
<
BasfMawb
>
{
}
src/main/java/com/erry/iclear/dateInterface/repository/MawbAdd.java
0 → 100644
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
repository
;
public
interface
MawbAdd
{
}
src/main/java/com/erry/iclear/dateInterface/service/BasfService.java
0 → 100644
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
service
;
import
com.erry.iclear.dateInterface.api.request.*
;
import
com.erry.iclear.dateInterface.repository.BasfMawbRepository
;
import
com.erry.iclear.dateInterface.util.NumberUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author Administrator
*/
@Service
@Slf4j
public
class
BasfService
{
@Autowired
private
BasfMawbRepository
basfMawbRepository
;
/**
* 保存主单Request --basfc
* @param basfc
*/
public
BasfMawb
saveMawbBasf
(
Basfc
basfc
){
BasfMawb
result
=
null
;
try
{
log
.
info
(
"saveMawb start>>>>>>>>>>>"
);
//运单头部信息
BasfMawb
basfMawb
=
new
BasfMawb
();
basfMawb
.
setAppId
(
basfc
.
getAppId
());
basfMawb
.
setMsgId
(
basfc
.
getMsgId
());
basfMawb
.
setConsignmentCodeId
(
basfc
.
getConsignmentId
());
basfMawb
.
setType
(
basfc
.
getConsType
());
//TODO 记录时为同一张表,用 '-->' 记录具体存放字段(方便查看,以免误解)
//运单号-->提单号
basfMawb
.
setBillNo
(
basfc
.
getConsignmentCode
());
//经营单位 --> 消费使用/生产销售单位名称
basfMawb
.
setOwnerName
(
basfc
.
getOperateUnitName
());
//经营单位海关编码 --> 消费使用/生产销售单位代码
basfMawb
.
setOwnerCode
(
basfc
.
getOperateUnitCode
());
//经营单位社会信用证代码 --> 消费使用/生产销售单位单位统一编码
basfMawb
.
setOwnerCodeScc
(
basfc
.
getOperateSCC
());
//发件人 --> 境内收发货人名称
basfMawb
.
setTradeName
(
basfc
.
getSender
());
//发件人海关编码 --> 境内收发货人编号
basfMawb
.
setTradeCode
(
basfc
.
getShipperCustomsCode
());
//发件人社会信用证代码 --> 生产核销单位统一信用代码---报关形式类型
basfMawb
.
setTradeCodeScc
(
basfc
.
getShipperSCC
());
basfMawb
.
setEANNo
(
basfc
.
getEANNo
());
//明细
List
<
MawbDetail
>
mawbDetailList
=
new
ArrayList
<>();
if
(
basfc
.
getBasfcDetailList
().
size
()>
0
){
for
(
BasfcDetail
basfcDetail
:
basfc
.
getBasfcDetailList
()){
MawbDetail
mawbDetail
=
new
MawbDetail
();
mawbDetail
.
setDetailId
(
basfcDetail
.
getConsignmentDetailId
());
mawbDetail
.
setGmodel
(
basfcDetail
.
getModel
());
mawbDetail
.
setCodeTS
(
basfcDetail
.
getSkuCode
());
mawbDetail
.
setGname
(
basfcDetail
.
getSkuName
());
mawbDetail
.
setGqty
(
basfcDetail
.
getKnockdownNumber
());
mawbDetail
.
setGunit
(
basfcDetail
.
getKnockdownUnit
());
mawbDetail
.
setFirstUnit
(
basfcDetail
.
getUnitLegalFirst
());
mawbDetail
.
setFirstQty
(
NumberUtils
.
bigDecimalToIntger
(
basfcDetail
.
getQtyLegalFirst
()));
mawbDetail
.
setSecondQty
(
NumberUtils
.
bigDecimalToIntger
(
basfcDetail
.
getQtyLegalSecond
()));
mawbDetail
.
setSecondUnit
(
basfcDetail
.
getUnitLegalSecond
());
mawbDetail
.
setDeclTotal
(
basfcDetail
.
getDeclaredAmount
());
mawbDetail
.
setTradeCurr
(
basfcDetail
.
getCurrency
());
mawbDetail
.
setDeclaredWeight
(
basfcDetail
.
getDeclaredWeight
());
mawbDetailList
.
add
(
mawbDetail
);
}
}
basfMawb
.
setMawbDetailList
(
mawbDetailList
);
result
=
basfMawbRepository
.
save
(
basfMawb
);
log
.
info
(
"saveMawb end>>>>>>>>>>>"
);
}
catch
(
Exception
e
){
log
.
error
(
"saveMawb() error:"
+
e
.
getMessage
());
}
return
result
;
}
}
src/main/java/com/erry/iclear/dateInterface/service/ChmConsignmentDetailService.java
View file @
8f5d7d0
...
...
@@ -134,6 +134,62 @@ public class ChmConsignmentDetailService {
/**
* 转换运单明细
* @param mawbDetail
* @return
*/
public
ChmConsignmentDetail
convertToChmConsignmentDetailBasf
(
MawbDetail
mawbDetail
,
ChmConsignment
chmConsignment
){
ChmConsignmentDetail
result
=
new
ChmConsignmentDetail
();
try
{
result
.
setChmConsignment
(
chmConsignment
);
//商品编号
result
.
setSkuCode
(
mawbDetail
.
getCodeTS
());
//申报总价
result
.
setAmount
(
mawbDetail
.
getDeclTotal
());
//第一计量单位(法定单位)
DictionaryEntries
firstUnitDictionaryEntries
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
TRANSACTION_UNIT
+
mawbDetail
.
getFirstUnit
());
if
(!
Objects
.
equals
(
firstUnitDictionaryEntries
,
null
)){
result
.
setUnitLegalFirstId
(
firstUnitDictionaryEntries
);
result
.
setUnitLegalFirst
(
firstUnitDictionaryEntries
.
getChineseName
());
}
//第一法定数量
result
.
setQtyLegalFirst
(
BigDecimal
.
valueOf
(
mawbDetail
.
getFirstQty
().
doubleValue
()));
//成交计量单位
//2021年7月8日 成交单位有修改,原取值第一法定计量单位,先取值成交单位。xjq
DictionaryEntries
knockdownUnitEntries
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
TRANSACTION_UNIT
+
mawbDetail
.
getGunit
());
if
(!
Objects
.
equals
(
knockdownUnitEntries
,
null
)){
result
.
setKnockdownUnitDic
(
knockdownUnitEntries
);
result
.
setKnockdownUnit
(
knockdownUnitEntries
.
getChineseName
());
}
//商品规格、型号
result
.
setModel
(
mawbDetail
.
getGmodel
());
//商品名称
result
.
setSkuName
(
mawbDetail
.
getGname
());
//成交数量
result
.
setKnockdownNumber
(
BigDecimal
.
valueOf
(
mawbDetail
.
getGqty
().
doubleValue
()));
//第二计量单位
DictionaryEntries
secondUnitDictionaryEntries
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
TRANSACTION_UNIT
+
mawbDetail
.
getSecondUnit
());
if
(!
Objects
.
equals
(
secondUnitDictionaryEntries
,
null
)){
result
.
setUnitLegalSecondId
(
secondUnitDictionaryEntries
);
result
.
setUnitLegalSecond
(
secondUnitDictionaryEntries
.
getChineseName
());
}
//第二法定数量
result
.
setQtyLegalSecond
(
BigDecimal
.
valueOf
(
mawbDetail
.
getSecondQty
().
doubleValue
()));
//成交币制
DictionaryEntries
currencyDictionaryEntries
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
CURRENCY_SYSTEM
+
mawbDetail
.
getTradeCurr
());
if
(!
Objects
.
equals
(
currencyDictionaryEntries
,
null
)){
result
.
setCurrencyDic
(
currencyDictionaryEntries
);
result
.
setCurrency
(
currencyDictionaryEntries
.
getChineseName
());
}
result
.
setDeclaredWeight
(
mawbDetail
.
getDeclaredWeight
());
result
.
setDetailId
(
mawbDetail
.
getDetailId
());
}
catch
(
Exception
e
){
log
.
error
(
"convertToChmConsignmentDetailBasf() error:"
+
e
.
getMessage
());
}
return
result
;
}
/**
* 转换运单明细
* @param detail
* @param gno
* @return
...
...
src/main/java/com/erry/iclear/dateInterface/service/ChmConsignmentService.java
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
service
;
//import cn.hutool.core.date.DateUtil;
import
com.erry.iclear.dateInterface.api.request.BasfMawb
;
import
com.erry.iclear.dateInterface.api.request.Mawb
;
import
com.erry.iclear.dateInterface.api.response.ResultRS
;
import
com.erry.iclear.dateInterface.common.Constant
;
...
...
@@ -235,6 +236,59 @@ public class ChmConsignmentService {
return
result
;
}
public
ChmConsignment
convertToChmConsignmentBasf
(
BasfMawb
mawb
,
Date
pushTime
,
String
creator
){
ChmConsignment
result
=
new
ChmConsignment
();
try
{
//运单号
result
.
setConsignmentCode
(
mawb
.
getBillNo
());
//运单类型
DictionaryEntries
consType
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
MSG_TYPE_C
);
if
(
consType
!=
null
){
result
.
setConsTypeId
(
consType
);
result
.
setConsType
(
consType
.
getChineseName
());
}
//监管方式
/*DictionaryEntries tradeModeDictionaryEntries = Constant.dictionaryEntriesCache.get(Constant.SUPERVISION_MODE+Integer.parseInt(mawb.getTradeMode()));
if(!Objects.equals(tradeModeDictionaryEntries,null)){
result.setTradeModeDic(tradeModeDictionaryEntries);
result.setTradeMode(tradeModeDictionaryEntries.getChineseName());
}*/
//境内收发货人社会信用证代码
result
.
setTradeCoSCC
(
mawb
.
getTradeCodeScc
());
//境内发货人(经营单位编码)
result
.
setOperateUnitCode
(
mawb
.
getTradeCode
());
//境内收发货人名称
result
.
setOperateUnitName
(
mawb
.
getTradeName
());
//经营单位
result
.
setOwnerName
(
mawb
.
getOwnerName
());
//经营单位海关编码
result
.
setOwnerCode
(
mawb
.
getOwnerCode
());
//经营单位社会信用证代码
result
.
setOwnerCodeScc
(
mawb
.
getOwnerCodeScc
());
/*//TODO 生产核销单位统一信用代码---报关形式类型
result.setTradeCoSCC(mawb.getTradeCodeScc());
//TODO 消费使用/生产销售单位单位统一编码
result.setOwnerCodeScc(mawb.getOwnerCodeScc());*/
//运单状态: C类待申报
DictionaryEntries
transferWaybillStatusDictionaryEntries
=
Constant
.
dictionaryEntriesCache
.
get
(
Constant
.
TRANSFER_WAY_BILL_STATUS
+
"16"
);
if
(!
Objects
.
equals
(
transferWaybillStatusDictionaryEntries
,
null
)){
result
.
setConsStatusDic
(
transferWaybillStatusDictionaryEntries
);
result
.
setConsStatus
(
transferWaybillStatusDictionaryEntries
.
getChineseName
());
}
//推送时间作为创建时间,可以用来校验数据的有序性,如果新的推送时间小于已有的创建时间,就不更新数据
result
.
setCreateTime
(
new
Date
());
result
.
setUpdateTime
(
pushTime
);
result
.
setCreator
(
creator
);
}
catch
(
Exception
e
){
result
=
null
;
e
.
printStackTrace
();
log
.
error
(
"convertToChmConsignmentBasf() error:"
+
e
.
getMessage
());
}
return
result
;
}
/**
* 运单转换主单
* @return
...
...
@@ -425,8 +479,6 @@ public class ChmConsignmentService {
ResultRS
result
=
new
ResultRS
(
Boolean
.
FALSE
,
null
,
null
);
try
{
Date
pushTime
=
DateUtils
.
timeStampToDate
(
Long
.
valueOf
(
timeStamp
));
//1、将请求转换为运单
ChmConsignment
chmConsignment
=
this
.
convertToChmConsignment
(
mawb
,
pushTime
,
creator
);
if
(
Objects
.
equals
(
chmConsignment
,
null
)){
result
.
setCode
(
"30001"
);
...
...
@@ -435,7 +487,7 @@ public class ChmConsignmentService {
}
List
<
ChmConsignmentDetail
>
chmConsignmentDetailList
=
new
ArrayList
<>();
mawb
.
getMawbDetailList
().
forEach
(
detail
->{
chmConsignmentDetailList
.
add
(
chmConsignmentDetailService
.
convertToChmConsignmentDetail
(
detail
,
chmConsignment
));
chmConsignmentDetailList
.
add
(
chmConsignmentDetailService
.
convertToChmConsignmentDetail
(
detail
,
chmConsignment
));
});
chmConsignment
.
setChmConsignmentDetailList
(
chmConsignmentDetailList
);
...
...
@@ -495,4 +547,83 @@ public class ChmConsignmentService {
result
.
setSuccess
(
Boolean
.
TRUE
);
return
result
;
}
/**
* 保存或更新 iclear中的运单信息
* @param mawb
* @param timeStamp
*/
public
ResultRS
processChmConsignmentBasf
(
BasfMawb
basfMawb
,
String
timeStamp
,
String
creator
)
{
ResultRS
result
=
new
ResultRS
(
Boolean
.
FALSE
,
null
,
null
);
try
{
Date
pushTime
=
DateUtils
.
timeStampToDate
(
Long
.
valueOf
(
timeStamp
));
ChmConsignment
chmConsignment
=
this
.
convertToChmConsignmentBasf
(
basfMawb
,
pushTime
,
creator
);
if
(
Objects
.
equals
(
chmConsignment
,
null
)){
result
.
setCode
(
"30001"
);
result
.
setMsg
(
"数据格式不正确"
);
return
result
;
}
List
<
ChmConsignmentDetail
>
chmConsignmentDetailList
=
new
ArrayList
<>();
basfMawb
.
getMawbDetailList
().
forEach
(
detail
->{
chmConsignmentDetailList
.
add
(
chmConsignmentDetailService
.
convertToChmConsignmentDetailBasf
(
detail
,
chmConsignment
));
});
chmConsignment
.
setChmConsignmentDetailList
(
chmConsignmentDetailList
);
//2、校验 7天+运单 ,如果有数据并且 还未报关就更新,如果数据就插入
ChmConsignment
chmConsignmentDB
=
this
.
findChmConsignmentByConsignmentCode
(
chmConsignment
.
getConsignmentCode
(),
DateUtils
.
addDate
(
DateUtils
.
getCurrentDate
(),-
7
));
//3、新增或更新
//新增:如果没有就插入
if
(
Objects
.
equals
(
chmConsignmentDB
,
null
)){
log
.
info
(
"新增主单"
+
basfMawb
.
getBillNo
());
ChmConsignment
chmConsignmentSaveResult
=
this
.
saveChmConsignment
(
chmConsignment
);
if
(!
Objects
.
equals
(
chmConsignmentSaveResult
,
null
)){
log
.
info
(
"主单"
+
basfMawb
.
getBillNo
()+
" 保存成功,chmConsignmentId:"
+
chmConsignmentSaveResult
.
getId
());
}
else
{
log
.
info
(
"主单"
+
basfMawb
.
getBillNo
()+
" 保存失败"
);
result
.
setCode
(
"30002"
);
result
.
setMsg
(
"主单"
+
basfMawb
.
getBillNo
()+
" 保存失败"
);
return
result
;
}
//更新:
//如果有数据并且满足条件后才能更新数据
//条件1、状态为 待申报海关
//条件2、本次推送时间 > 上次推送的时间
}
else
if
(!
Objects
.
equals
(
chmConsignmentDB
,
null
)
&&
Objects
.
equals
(
chmConsignmentDB
.
getConsStatusDic
().
getCode
(),
"transferWaybillStatus_5"
)
//TODO 提交时需要打开
&&
pushTime
.
getTime
()>
chmConsignmentDB
.
getUpdateTime
().
getTime
()
){
//更新数据
log
.
info
(
"更新主单"
+
basfMawb
.
getBillNo
());
for
(
ChmConsignmentDetail
newDetail:
chmConsignment
.
getChmConsignmentDetailList
()){
for
(
ChmConsignmentDetail
oldDetail:
chmConsignmentDB
.
getChmConsignmentDetailList
()){
if
(
Objects
.
equals
(
newDetail
.
getDetailId
(),
oldDetail
.
getDetailId
())){
//newDetail.setChmConsignment(chmConsignmentDB);
newDetail
.
setId
(
oldDetail
.
getId
());
}
}
}
chmConsignment
.
setId
(
chmConsignmentDB
.
getId
());
chmConsignment
.
setCreateTime
(
chmConsignmentDB
.
getCreateTime
());
chmConsignment
.
setUpdateTime
(
pushTime
);
ChmConsignment
updateResult
=
this
.
saveChmConsignment
(
chmConsignment
);
if
(!
Objects
.
equals
(
updateResult
,
null
)){
log
.
info
(
"主单"
+
basfMawb
.
getBillNo
()+
" 更新成功,chmConsignmentId:"
+
updateResult
.
getId
());
}
else
{
log
.
info
(
"主单"
+
basfMawb
.
getBillNo
()+
" 更新失败"
);
result
.
setCode
(
"30003"
);
result
.
setMsg
(
"主单"
+
basfMawb
.
getBillNo
()+
" 更新失败"
);
return
result
;
}
}
}
catch
(
Exception
e
){
log
.
error
(
""
+
e
.
getMessage
());
}
result
.
setSuccess
(
Boolean
.
TRUE
);
return
result
;
}
}
...
...
src/main/java/com/erry/iclear/dateInterface/service/IClearApiLogService.java
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
.
service
;
import
com.erry.iclear.dateInterface.api.request.Basfc
;
import
com.erry.iclear.dateInterface.api.request.Mawb
;
import
com.erry.iclear.dateInterface.common.Constant
;
import
com.erry.iclear.dateInterface.entity.IClearApiLog
;
...
...
@@ -58,6 +59,29 @@ public class IClearApiLogService {
return
result
;
}
/**
* 创建日志
* @return
*/
public
IClearApiLog
convertToIClearApiLogC
(
Basfc
basfc
,
String
appId
,
String
appKey
,
Date
pushTime
){
IClearApiLog
result
=
new
IClearApiLog
();
try
{
result
.
setMsgType
(
Constant
.
MSG_TYPE_C
);
result
.
setAppId
(
appId
);
result
.
setAppKey
(
appKey
);
result
.
setCreateTime
(
new
Date
());
result
.
setPushTime
(
pushTime
);
result
.
setReceiveResult
(
null
);
result
.
setResponseTime
(
null
);
result
.
setSpendTime
(
null
);
result
.
setSendTimes
(
1
);
result
.
setBillNo
(
basfc
.
getConsignmentCode
());
//result.setContrNo(mawb.getContrNo());
}
catch
(
Exception
e
){
log
.
error
(
"convertToIClearApiLog() error:"
+
e
.
getMessage
());
}
return
result
;
}
public
void
updateIClearApiLog
(
IClearApiLog
iClearApiLog
){
...
...
src/main/java/com/erry/iclear/dateInterface/service/MawbService.java
View file @
8f5d7d0
...
...
@@ -3,21 +3,25 @@ package com.erry.iclear.dateInterface.service;
import
com.arronlong.httpclientutil.HttpClientUtil
;
import
com.arronlong.httpclientutil.common.HttpConfig
;
import
com.arronlong.httpclientutil.common.HttpHeader
;
import
com.erry.iclear.dateInterface.api.request.Basfc
;
import
com.erry.iclear.dateInterface.api.request.BasfcDetail
;
import
com.erry.iclear.dateInterface.api.request.Mawb
;
import
com.erry.iclear.dateInterface.api.request.MawbDetail
;
import
com.erry.iclear.dateInterface.api.response.IClearCheckResponseResult
;
import
com.erry.iclear.dateInterface.api.response.ResultRS
;
import
com.erry.iclear.dateInterface.api.response.TokenResult
;
import
com.erry.iclear.dateInterface.entity.ChmConsignment
;
import
com.erry.iclear.dateInterface.entity.ChmConsignmentDetail
;
import
com.erry.iclear.dateInterface.repository.MawbAdd
;
import
com.erry.iclear.dateInterface.repository.MawbRepository
;
import
com.erry.iclear.dateInterface.util.JsonToJava
;
import
com.erry.iclear.dateInterface.util.NumberUtils
;
import
com.google.gson.Gson
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.http.Header
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Service
;
import
org.springframework.validation.annotation.Validated
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
src/main/java/com/erry/iclear/dateInterface/task/IClearApiTask.java
View file @
8f5d7d0
...
...
@@ -25,20 +25,8 @@ public class IClearApiTask {
public
void
pushCustomsTask
(){
try
{
log
.
info
(
"pushCustomsTask start>>>>>>>>>>>>"
);
if
(
token
==
null
){
try
{
//获取token
TokenResult
tokenResult
=
apiService
.
getToken
();
if
(
tokenResult
.
getErrorcode
().
equals
(
Constants
.
ApiResponseKeys
.
SUCCESS
)){
this
.
token
=
tokenResult
.
getData
().
getToken
();
}
}
catch
(
Exception
ex
){
ex
.
printStackTrace
();
}
}
if
(
this
.
token
==
null
){
throw
new
Exception
(
"获取token失败!"
);
}
getToken
();
//获取token成功则进行海关回执推送
apiService
.
pushCustoms
(
this
.
token
);
log
.
info
(
"pushCustomsTask end>>>>>>>>>>>>"
);
...
...
@@ -54,20 +42,8 @@ public class IClearApiTask {
public
void
pushMawbTask
(){
try
{
log
.
info
(
"pushMawbTask start>>>>>>>>>>>>"
);
if
(
token
==
null
){
try
{
//获取token
TokenResult
tokenResult
=
apiService
.
getToken
();
if
(
tokenResult
.
getErrorcode
().
equals
(
Constants
.
ApiResponseKeys
.
SUCCESS
)){
this
.
token
=
tokenResult
.
getData
().
getToken
();
}
}
catch
(
Exception
ex
){
ex
.
printStackTrace
();
}
}
if
(
this
.
token
==
null
){
throw
new
Exception
(
"获取token失败!"
);
}
getToken
();
//获取token成功则进行海关回执推送
apiService
.
pushMawb
(
this
.
token
);
log
.
info
(
"pushMawbTask end>>>>>>>>>>>>"
);
...
...
@@ -82,20 +58,8 @@ public class IClearApiTask {
public
void
pushErrorReturnDate
(){
try
{
log
.
info
(
"pushErrorReturnDate start>>>>>>>>>>>>"
);
if
(
token
==
null
){
try
{
//获取token
TokenResult
tokenResult
=
apiService
.
getToken
();
if
(
tokenResult
.
getErrorcode
().
equals
(
Constants
.
ApiResponseKeys
.
SUCCESS
)){
this
.
token
=
tokenResult
.
getData
().
getToken
();
}
}
catch
(
Exception
ex
){
ex
.
printStackTrace
();
}
}
if
(
this
.
token
==
null
){
throw
new
Exception
(
"获取token失败!"
);
}
getToken
();
//获取token成功则进行海关回执推送
apiService
.
pushErrorReturnDate
(
this
.
token
);
log
.
info
(
"pushErrorReturnDate end>>>>>>>>>>>>"
);
...
...
@@ -110,6 +74,21 @@ public class IClearApiTask {
public
void
pushErrorData
(){
try
{
log
.
info
(
"pushErrorDeclareDate start>>>>>>>>>>>>"
);
//获取token
getToken
();
//获取token成功则进行海关回执推送
apiService
.
pushErrorDeclareDate
(
this
.
token
);
log
.
info
(
"pushErrorDeclareDate end>>>>>>>>>>>>"
);
}
catch
(
Exception
e
){
log
.
error
(
"pushErrorDeclareDate() error:"
+
e
.
getMessage
());
}
}
/**
* 获取token
* @throws Exception
*/
private
void
getToken
()
throws
Exception
{
if
(
token
==
null
){
try
{
//获取token
...
...
@@ -124,11 +103,5 @@ public class IClearApiTask {
if
(
this
.
token
==
null
){
throw
new
Exception
(
"获取token失败!"
);
}
//获取token成功则进行海关回执推送
apiService
.
pushErrorDeclareDate
(
this
.
token
);
log
.
info
(
"pushErrorDeclareDate end>>>>>>>>>>>>"
);
}
catch
(
Exception
e
){
log
.
error
(
"pushErrorDeclareDate() error:"
+
e
.
getMessage
());
}
}
}
...
...
src/main/resources/application-dev.yml
View file @
8f5d7d0
...
...
@@ -27,6 +27,8 @@ api:
address
:
#IClear校验运单地址
iclear-check-url
:
http://40.73.78.157:8081/chmConsignmentController/checkChmAndDetaliD
#IClear校验C类运单地址
iclear-check-url-c
:
http://40.73.78.157:8081/chmConsignmentController/checkChmAndDetaliC
#获取token地址
token-url
:
https://apiuat.iclrccd-fedex.com/login
#刷新token地址
...
...
src/test/java/com/erry/iclear/dateInterface/ChmConsignmentServiceTest.java
View file @
8f5d7d0
package
com
.
erry
.
iclear
.
dateInterface
;
import
com.erry.iclear.dateInterface.api.request.Mawb
;
import
com.erry.iclear.dateInterface.api.request.MawbDetail
;
import
com.erry.iclear.dateInterface.api.CustomsDataInterface
;
import
com.erry.iclear.dateInterface.api.request.*
;
import
com.erry.iclear.dateInterface.api.response.ResultRS
;
import
com.erry.iclear.dateInterface.repository.MawbAdd
;
import
com.erry.iclear.dateInterface.service.BasfService
;
import
com.erry.iclear.dateInterface.service.ChmConsignmentService
;
import
com.erry.iclear.dateInterface.service.MawbService
;
import
org.junit.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
java.math.BigDecimal
;
import
java.util.ArrayList
;
...
...
@@ -17,8 +22,14 @@ public class ChmConsignmentServiceTest extends IClearApiApplicationTests {
@Autowired
private
ChmConsignmentService
chmConsignmentService
;
@Autowired
private
CustomsDataInterface
customsDataInterface
;
@Test
@Autowired
private
BasfService
mawbService
;
/*@Test
public void testProcessChmConsignment(){
try{
Mawb mawb = this.createNewMawb();
...
...
@@ -28,12 +39,59 @@ public class ChmConsignmentServiceTest extends IClearApiApplicationTests {
}catch (Exception e){
e.printStackTrace();
}
}*/
@Test
public
void
testProcessChmConsignment1
(){
try
{
Basfc
basfc
=
this
.
createNewBasf
();
BasfMawb
mawb
=
mawbService
.
saveMawbBasf
(
basfc
);
//Basfc basfc = this.createNewBasf();
String
timeStamp
=
String
.
valueOf
(
new
Date
().
getTime
());
ResultRS
resultRS
=
chmConsignmentService
.
processChmConsignmentBasf
(
mawb
,
timeStamp
,
"BASF"
);
System
.
out
.
println
(
resultRS
.
toString
());
}
catch
(
Exception
e
){
e
.
printStackTrace
();
}
}
private
Basfc
createNewBasf
(){
List
<
BasfcDetail
>
basfcDetailList
=
new
ArrayList
<>();
BasfcDetail
basfcDetail
=
new
BasfcDetail
();
basfcDetail
.
setConsignmentDetailId
(
"111"
);
basfcDetail
.
setSkuCode
(
"123456789"
);
basfcDetail
.
setSkuName
(
"测试"
);
basfcDetail
.
setModel
(
"0|0|1|||||||||"
);
basfcDetail
.
setUnitLegalFirst
(
"035"
);
basfcDetail
.
setQtyLegalFirst
(
BigDecimal
.
valueOf
(
1
));
basfcDetail
.
setKnockdownUnit
(
"035"
);
basfcDetail
.
setKnockdownNumber
(
BigDecimal
.
valueOf
(
1
));
basfcDetail
.
setUnitLegalSecond
(
"007"
);
basfcDetail
.
setQtyLegalSecond
(
BigDecimal
.
valueOf
(
1
));
basfcDetail
.
setDeclaredAmount
(
BigDecimal
.
valueOf
(
1
));
basfcDetail
.
setCurrency
(
"USD"
);
basfcDetail
.
setDeclaredWeight
(
BigDecimal
.
valueOf
(
1
));
basfcDetailList
.
add
(
basfcDetail
);
Basfc
basfc
=
new
Basfc
();
basfc
.
setConsignmentCode
(
"211015003"
);
basfc
.
setConsignmentId
(
1L
);
basfc
.
setConsType
(
"C"
);
basfc
.
setSender
(
"发件人"
);
basfc
.
setShipperCustomsCode
(
"1234567890"
);
basfc
.
setShipperSCC
(
"123456789012345678"
);
basfc
.
setOperateUnitName
(
""
);
basfc
.
setOperateUnitCode
(
""
);
basfc
.
setOperateSCC
(
""
);
basfc
.
setEANNo
(
""
);
basfc
.
setBasfcDetailList
(
basfcDetailList
);
return
basfc
;
}
private
Mawb
createNewMawb
(){
MawbDetail
d1
=
new
MawbDetail
();
d1
.
setClassMark
(
""
);
d1
.
setCodeTS
(
"
69125472
"
);
d1
.
setCodeTS
(
""
);
d1
.
setDeclPrice
(
BigDecimal
.
valueOf
(
111.123
));
d1
.
setDeclTotal
(
BigDecimal
.
valueOf
(
788
));
d1
.
setDutyMode
(
"1"
);
...
...
@@ -100,7 +158,7 @@ public class ChmConsignmentServiceTest extends IClearApiApplicationTests {
mawb
.
setType
(
"EX"
);
mawb
.
setAgentCode
(
"1111980005"
);
mawb
.
setAgentName
(
"联邦快递(中国)有限公司"
);
mawb
.
setBillNo
(
"2
02105210784
"
);
mawb
.
setBillNo
(
"2
11015002
"
);
mawb
.
setContrNo
(
"NO.565733"
);
mawb
.
setCustomMaster
(
"0101"
);
mawb
.
setCutMode
(
"101"
);
...
...
Please
register
or
login
to post a comment