Jiaqi.xu

Merge remote-tracking branch 'origin/master'

Showing 29 changed files with 448 additions and 214 deletions
create table T_ICLEAR_API_CHECK_LOG
(
ID bigint primary key identity (1,1),
request_appid varchar(200),
request_appkey varchar(200),
request_token varchar(200),
consignment_code varchar(200),
request_text text,
response_text text,
request_ip varchar(200),
create_time datetime,
success int,
code varchar(200),
)
......@@ -42,7 +42,7 @@ public class CustomsDataInterface {
private ChmConsignmentDetailService chmConsignmentDetailService;
@ApiOperation(value = "推送主单数据", httpMethod = "POST", notes = "ex: http://192.168.1.75:8080/customs/sendMawb")
@ApiOperation(value = "D类推送主单数据", httpMethod = "POST", notes = "ex: http://192.168.1.75:8080/customs/sendMawb")
@PostMapping("/sendMawb")
@ResponseBody
public ResultRS sendMawb(HttpServletRequest request
......@@ -109,12 +109,12 @@ public class CustomsDataInterface {
sw.stop();
// //3、TODO 校验子单
// sw.start("checkMawbDetail");
// result=mawbDetailServicel.checkMawbDetail(mawb);
// if(!result.getSuccess()){
// return result;
// }
// sw.stop();
sw.start("checkMawbDetail");
result=mawbDetailServicel.checkMawbDetail(mawb);
if(!result.getSuccess()){
return result;
}
sw.stop();
//4、保存运单到iclear中
......
......@@ -12,7 +12,9 @@ import com.erry.iclear.dateInterface.api.response.ResultRS;
import com.erry.iclear.dateInterface.entity.ChmConsignment;
import com.erry.iclear.dateInterface.entity.DeclaredInfo;
import com.erry.iclear.dateInterface.entity.IClearApiLog;
import com.erry.iclear.dateInterface.entity.TIClearApiCheckLog;
import com.erry.iclear.dateInterface.repository.ChmConsignmentRepository;
import com.erry.iclear.dateInterface.repository.IClearApiCheckLogRepository;
import com.erry.iclear.dateInterface.service.*;
import com.erry.iclear.dateInterface.util.JsonToJava;
import com.erry.iclear.dateInterface.util.StringUtil;
......@@ -58,11 +60,74 @@ public class FedexDataInterface {
@Autowired
private ChmConsignmentRepository chmConsignmentRepository;
@Autowired
private IClearApiCheckLogRepository iClearApiCheckLogRepository;
@Value("${api.address.iclear-submit-url}")
String iclearCSubmitUrl;
@ApiOperation(value = "Fedex推送运单数据", httpMethod = "POST", notes = "ex: http://192.168.1.75:8080/fedex/sendMawbFedex")
@ApiOperation(value = "BASF运单数据校验接口", httpMethod = "POST", notes = "ex: http://192.168.1.75:8080/fedex/checkBASFMawbFedex")
@PostMapping("/checkBASFMawbFedex")
@ResponseBody
public ResultRS checkBASFMawbFedex(HttpServletRequest request
,@RequestBody Fedexc fedexc) throws HttpProcessException {
String appId=(String) request.getHeader("Appid");
String appKey=(String) request.getHeader("Appkey");
String timeStamp=(String) request.getHeader("TimeStamp");
String token=(String) request.getHeader("Token");
String addr = request.getRemoteAddr();
TIClearApiCheckLog tIclearApiCheckLog = new TIClearApiCheckLog();
tIclearApiCheckLog.setRequestAppid(appId);
tIclearApiCheckLog.setRequestAppkey(appKey);
tIclearApiCheckLog.setRequestIp(addr);
tIclearApiCheckLog.setRequestToken(token);
tIclearApiCheckLog.setConsignmentCode(fedexc.getConsignmentCode());
tIclearApiCheckLog.setCreateTime(new Date());
tIclearApiCheckLog.setRequestText(
new String("requestHeader[appId:"+appId+"," +
"appKey:"+appKey+"," +
"timeStamp:"+timeStamp+"," +
"token:"+token) + "],"
+ fedexc.toString()
);
TIClearApiCheckLog tiClearApiCheckLogSave = iClearApiCheckLogRepository.save(tIclearApiCheckLog);
log.info("checkBASFMawbFedex:"+fedexc.toString());
log.info("appId:{},appKey:{},timeStamp:{},token:{}",appId,appKey,timeStamp,token);
ResultRS result = fedexService.checkBasfInterfaceData(fedexc);
StopWatch sw = new StopWatch("checkBASFMawbFedex");
sw.start("generate FedexMawb");
fedexc.setAppId(appId);
FedexMawb saveMawbFedexResult = fedexService.generateFedexMawb(fedexc);
sw.stop();
sw.start("checkFedexMawb");
String msg = result.getMsg();
String iclearCheckMsg = fedexService.checkFedexMawb(saveMawbFedexResult).getMsg();
result.setMsg(msg+";"+iclearCheckMsg);
sw.stop();
log.info(sw.prettyPrint());
if(result.getSuccess()){
result.setSuccess(Boolean.TRUE);
result.setCode("0");
}
tiClearApiCheckLogSave.setResponseText(result.getMsg());
tiClearApiCheckLogSave.setCode(result.getCode());
tiClearApiCheckLogSave.setSuccess(result.getSuccess());
iClearApiCheckLogRepository.save(tiClearApiCheckLogSave);
log.info(result.toString());
return result;
}
@ApiOperation(value = "C类Fedex推送运单数据", httpMethod = "POST", notes = "ex: http://192.168.1.75:8080/fedex/sendMawbFedex")
@PostMapping("/sendMawbFedex")
@ResponseBody
public ResultRS sendMawbFedex(HttpServletRequest request
......@@ -283,4 +348,5 @@ public class FedexDataInterface {
result.setCode("0");
return result;
}
}
......
......@@ -57,8 +57,7 @@ public class HsCodeInterface {
return resultHsCode;
}
}catch(Exception ex){
log.error(ex.getMessage());
ex.printStackTrace();
log.error(ex.getMessage(),ex);
resultHsCode = new ResultHsCode(Boolean.FALSE,"30101","数据查询异常",null);
return resultHsCode;
}finally {
......@@ -74,4 +73,4 @@ public class HsCodeInterface {
iClearApiHsCodeLogService.saveIClearApiHsCodeLog(iclearApiHsCodeLog);
}
}
}
\ No newline at end of file
}
......
......@@ -30,7 +30,7 @@ public class FedexDetail {
private Long basfId;
@Column(name="CONSIGNMENTDETAILID")
@NotNull(message="参数consignmentDetailId不能为空")
// @NotNull(message="参数consignmentDetailId不能为空")
private Long consignmentDetailId;
@ApiModelProperty(value = "商品编号")
......
......@@ -50,7 +50,7 @@ public class Fedexc implements Serializable {
@ApiModelProperty(value = "运单ID", name = "consignmentId", example = "运单记录的唯一ID")
@Column(name = "CONSIGNMENTID")
@NotNull(message="参数consignmentId不能为空!")
// @NotNull(message="参数consignmentId不能为空!")
// @NotBlank(message="参数consignmentId不能为空!")
private Long consignmentId;
......
......@@ -114,7 +114,6 @@ public class MawbDetail implements Serializable{
private String secondUnit;
@ApiModelProperty(value = "第二法定数量")
@NotNull(message="参数secondQty不能为空")
@Column(name = "SECONDQTY")
private Integer secondQty;
......
package com.erry.iclear.dateInterface.entity;
import com.erry.iclear.dateInterface.common.BaseModel;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
/**
* BASF校验接口日志表
*
* sql/BASF校验接口.sql
*/
@Entity
@Table(name = "T_ICLEAR_API_CHECK_LOG")
@Data
public class TIClearApiCheckLog extends BaseModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID" )
private Long id;
@Column(name = "request_appid" )
private String requestAppid;
@Column(name = "request_appkey" )
private String requestAppkey;
@Column(name = "request_token" )
private String requestToken;
@Column(name = "consignment_code" )
private String consignmentCode;
@Column(name = "request_text" )
private String requestText;
@Column(name = "response_text" )
private String responseText;
@Column(name = "request_ip" )
private String requestIp;
@Column(name = "create_time" )
private Date createTime;
@Column(name = "success" )
private Boolean success;
@Column(name = "code" )
private String code;
}
......@@ -36,22 +36,22 @@ public class HsCodeInterceptor extends HandlerInterceptorAdapter {
//String uri = request.getRequestURI();
if(StringUtils.isBlank(appId)){
this.returnJson(response,false,"10016","Appid 不能为空");
this.returnJson(response,false,"10016","Appid不能为空");
return false;
}
if(StringUtils.isBlank(appkey)){
this.returnJson(response,false,"10017","Appkey 不能为空");
this.returnJson(response,false,"10017","Appkey不能为空");
return false;
}
if(StringUtils.isBlank(timeStamp)){
this.returnJson(response,false,"10018","TimeStamp 不能为空");
this.returnJson(response,false,"10018","TimeStamp不能为空");
return false;
}
if(StringUtils.isBlank(token)){
this.returnJson(response,false,"10013","token 不能为空");
this.returnJson(response,false,"10013","token不能为空");
return false;
}
......
......@@ -35,22 +35,22 @@ public class SignInterceptor extends HandlerInterceptorAdapter {
if(StringUtils.isBlank(appId)){
this.returnJson(response,false,"10016","Appid 不能为空");
this.returnJson(response,false,"10016","Appid不能为空");
return false;
}
if(StringUtils.isBlank(appkey)){
this.returnJson(response,false,"10017","Appkey 不能为空");
this.returnJson(response,false,"10017","Appkey不能为空");
return false;
}
if(StringUtils.isBlank(timeStamp)){
this.returnJson(response,false,"10018","TimeStamp 不能为空");
this.returnJson(response,false,"10018","TimeStamp不能为空");
return false;
}
if(StringUtils.isBlank(token)){
this.returnJson(response,false,"10013","token 不能为空");
this.returnJson(response,false,"10013","token不能为空");
return false;
}
......@@ -99,4 +99,4 @@ public class SignInterceptor extends HandlerInterceptorAdapter {
}
}
}
\ No newline at end of file
}
......
package com.erry.iclear.dateInterface.repository;
import com.erry.iclear.dateInterface.entity.IClearApiLog;
import com.erry.iclear.dateInterface.entity.TIClearApiCheckLog;
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 IClearApiCheckLogRepository extends JpaRepository<TIClearApiCheckLog, Integer>, JpaSpecificationExecutor<TIClearApiCheckLog> {
}
......@@ -139,6 +139,7 @@ public class ApiService {
//推送时间
declearTask.setPushTime(new Date());
String objJson = JsonToJava.toJson(d);
log.info("推送海关回执json: " + objJson);
//推送海关回执数据
String json = HttpUtils.doPost(this.customsUrl,objJson,headerMap);
//接口响应时间
......@@ -160,12 +161,12 @@ public class ApiService {
log.info("海关回执推送失败,推送相应码为:"+tokenResult.getErrorcode() + ",推送ID为:" + d.getId());
}
}catch(Exception ex){
log.error("推送海关回执异常:" + ex.getMessage(), ex);
//接口响应时间
declearTask.setResponseTime(new Date());
declearTask.setResponseResults("99999");
declearTask.setResponseContent(ex.getMessage());
declearTaskList.add(declearTask);
ex.printStackTrace();
}
});
declearTaskList.forEach(declearTask -> {
......@@ -203,7 +204,7 @@ public class ApiService {
});
this.sendMawb(token,mawbList);
}catch(Exception ex){
ex.printStackTrace();
log.error("pushMawbAcc",ex);
}
}
/**
......@@ -261,7 +262,7 @@ public class ApiService {
declearTask.setResponseResults("99999");
declearTask.setResponseContent(ex.getMessage());
declearTaskList.add(declearTask);
ex.printStackTrace();
log.error("sendMawb",ex);
}
});
declearTaskList.forEach(declearTask -> {
......
......@@ -234,8 +234,7 @@ public class ChmConsignmentService {
}catch (Exception e){
result=null;
e.printStackTrace();
log.error("convertToChmConsignment() error:"+e.getMessage());
log.error("sendMawb",e);
}
return result;
}
......@@ -292,8 +291,7 @@ public class ChmConsignmentService {
}
}catch (Exception e){
result=null;
e.printStackTrace();
log.error("convertToChmConsignmentFedex() error:"+e.getMessage());
log.error("convertToChmConsignmentFedex() error:"+e.getMessage(),e);
}
return result;
}
......@@ -430,8 +428,7 @@ public class ChmConsignmentService {
result.setOverseasConsigneeEname(consignment.getOverseasConsignorFnCname());
}catch (Exception e){
result=null;
e.printStackTrace();
log.error("convertToChmConsignment() error:"+e.getMessage());
log.error("convertToChmConsignment() error:"+e.getMessage(),e);
}
return result;
}
......
......@@ -45,7 +45,7 @@ public class DeclearTaskService{
declareTaskRepository.saveAll(declareTaskList);
}
}catch (Exception e){
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
......@@ -70,7 +70,7 @@ public class DeclearTaskService{
declareTaskRepository.saveAll(declareTaskList);
}
}catch (Exception e){
e.printStackTrace();
log.error(e.getMessage(),e);
}
}
......
......@@ -27,8 +27,7 @@ public class DictionaryEntriesService {
try {
result=dictionaryEntriesRepository.findAllDictionaryEntries();
}catch (Exception e){
e.printStackTrace();
log.error("getAllDictionaryEntries() error:"+e.getMessage());
log.error(e.getMessage(),e);
}
return result;
}
......
......@@ -3,12 +3,14 @@ package com.erry.iclear.dateInterface.service;
import com.erry.iclear.dateInterface.api.request.FedexConsignment;
import com.erry.iclear.dateInterface.api.request.ConsignmentDetail;
import com.erry.iclear.dateInterface.entity.DeclaredInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
@Slf4j
public class FedexConsignmentService {
public List<FedexConsignment> fedexConsignmentList(List<DeclaredInfo> consignment){
......@@ -62,7 +64,7 @@ public class FedexConsignmentService {
fedexConsignmentList.add(fedexConsignment);
}
}catch (Exception e){
e.printStackTrace();
log.error(e.getMessage(),e);
}
return fedexConsignmentList;
}
......
......@@ -11,15 +11,22 @@ import com.erry.iclear.dateInterface.entity.ChmConsignmentDetail;
import com.erry.iclear.dateInterface.repository.FedexMawbRepository;
import com.erry.iclear.dateInterface.util.JsonToJava;
import com.google.gson.Gson;
import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.Header;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.persistence.*;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author Administrator
......@@ -50,51 +57,7 @@ public class FedexService {
FedexMawb result=null;
try{
log.info("saveMawb start>>>>>>>>>>>");
//运单头部信息
FedexMawb fedexMawb = new FedexMawb();
fedexMawb.setAppId(fedexc.getAppId());
fedexMawb.setMsgId(fedexc.getMsgId());
fedexMawb.setConsignmentCodeId(fedexc.getConsignmentId());
fedexMawb.setType(fedexc.getConsType());
//TODO 记录时为同一张表,用 '-->' 记录具体存放字段(方便查看,以免误解)
//运单号-->提单号
fedexMawb.setBillNo(fedexc.getConsignmentCode());
//经营单位 --> 消费使用/生产销售单位名称
fedexMawb.setOwnerName(fedexc.getOperateUnitName());
//经营单位海关编码 --> 消费使用/生产销售单位代码
fedexMawb.setOwnerCode(fedexc.getOperateUnitCode());
//经营单位社会信用证代码 --> 消费使用/生产销售单位单位统一编码
fedexMawb.setOwnerCodeScc(fedexc.getOperateSCC());
//发件人 --> 境内收发货人名称
fedexMawb.setTradeName(fedexc.getSender());
//发件人海关编码 --> 境内收发货人编号
fedexMawb.setTradeCode(fedexc.getShipperCustomsCode());
//发件人社会信用证代码 --> 生产核销单位统一信用代码---报关形式类型
fedexMawb.setTradeCodeScc(fedexc.getShipperSCC());
fedexMawb.setEanNo(fedexc.getEanNo());
//明细
List<FedexMawbDetail> mawbDetailList = new ArrayList<>();
if (fedexc.getConsignmentList().size()>0){
for (FedexDetail fedexcDetail : fedexc.getConsignmentList()){
FedexMawbDetail mawbDetail = new FedexMawbDetail();
mawbDetail.setDetailId(String.valueOf(fedexcDetail.getConsignmentDetailId()));
mawbDetail.setGmodel(fedexcDetail.getModel());
mawbDetail.setCodeTS(fedexcDetail.getSkuCode());
mawbDetail.setGname(fedexcDetail.getSkuName());
mawbDetail.setGqty(fedexcDetail.getKnockdownNumber());
mawbDetail.setGunit(fedexcDetail.getKnockdownUnit());
mawbDetail.setFirstUnit(fedexcDetail.getUnitLegalFirst());
mawbDetail.setFirstQty(fedexcDetail.getQtyLegalFirst());
mawbDetail.setSecondQty(fedexcDetail.getQtyLegalSecond());
mawbDetail.setSecondUnit(fedexcDetail.getUnitLegalSecond());
mawbDetail.setDeclTotal(fedexcDetail.getDeclaredAmount());
mawbDetail.setTradeCurr(fedexcDetail.getCurrency());
mawbDetail.setDeclaredWeight(fedexcDetail.getDeclaredWeight());
mawbDetailList.add(mawbDetail);
}
}
fedexMawb.setMawbDetailList(mawbDetailList);
FedexMawb fedexMawb = this.generateFedexMawb(fedexc);
result = fedexMawbRepository.save(fedexMawb);
log.info("saveMawb end>>>>>>>>>>>");
}catch (Exception e){
......@@ -103,6 +66,57 @@ public class FedexService {
return result;
}
public FedexMawb generateFedexMawb(Fedexc fedexc){
//运单头部信息
FedexMawb fedexMawb = new FedexMawb();
fedexMawb.setAppId(fedexc.getAppId());
fedexMawb.setMsgId(fedexc.getMsgId());
fedexMawb.setConsignmentCodeId(fedexc.getConsignmentId());
fedexMawb.setType(fedexc.getConsType());
//TODO 记录时为同一张表,用 '-->' 记录具体存放字段(方便查看,以免误解)
//运单号-->提单号
fedexMawb.setBillNo(fedexc.getConsignmentCode());
//经营单位 --> 消费使用/生产销售单位名称
fedexMawb.setOwnerName(fedexc.getOperateUnitName());
//经营单位海关编码 --> 消费使用/生产销售单位代码
fedexMawb.setOwnerCode(fedexc.getOperateUnitCode());
//经营单位社会信用证代码 --> 消费使用/生产销售单位单位统一编码
fedexMawb.setOwnerCodeScc(fedexc.getOperateSCC());
//发件人 --> 境内收发货人名称
fedexMawb.setTradeName(fedexc.getSender());
//发件人海关编码 --> 境内收发货人编号
fedexMawb.setTradeCode(fedexc.getShipperCustomsCode());
//发件人社会信用证代码 --> 生产核销单位统一信用代码---报关形式类型
fedexMawb.setTradeCodeScc(fedexc.getShipperSCC());
fedexMawb.setEanNo(fedexc.getEanNo());
//明细
List<FedexMawbDetail> mawbDetailList = new ArrayList<>();
List<FedexDetail> consignmentList = fedexc.getConsignmentList();
if (Objects.nonNull(consignmentList) &&consignmentList.size()>0){
for (FedexDetail fedexcDetail : fedexc.getConsignmentList()){
FedexMawbDetail mawbDetail = new FedexMawbDetail();
mawbDetail.setDetailId(String.valueOf(fedexcDetail.getConsignmentDetailId()));
mawbDetail.setGmodel(fedexcDetail.getModel());
mawbDetail.setCodeTS(fedexcDetail.getSkuCode());
mawbDetail.setGname(fedexcDetail.getSkuName());
mawbDetail.setGqty(fedexcDetail.getKnockdownNumber());
mawbDetail.setGunit(fedexcDetail.getKnockdownUnit());
mawbDetail.setFirstUnit(fedexcDetail.getUnitLegalFirst());
mawbDetail.setFirstQty(fedexcDetail.getQtyLegalFirst());
mawbDetail.setSecondQty(fedexcDetail.getQtyLegalSecond());
mawbDetail.setSecondUnit(fedexcDetail.getUnitLegalSecond());
mawbDetail.setDeclTotal(fedexcDetail.getDeclaredAmount());
mawbDetail.setTradeCurr(fedexcDetail.getCurrency());
mawbDetail.setDeclaredWeight(fedexcDetail.getDeclaredWeight());
mawbDetailList.add(mawbDetail);
}
}
fedexMawb.setMawbDetailList(mawbDetailList);
return fedexMawb;
}
/**
* 校验主单
* @param fedexMawb
......@@ -145,7 +159,56 @@ public class FedexService {
result.setMsg(iclearCheckResponseResult.getMessage());
log.info("<<<<<<<< checkMawb start >>>>>>>>>> mawb:"+gson.toJson(fedexMawb) +" result :" +result.getSuccess() +" iclear check response : " + json + " status : " + result.getSuccess());
}catch (Exception e){
log.error("checkMawb() error:" + e.getMessage());
log.error("checkMawb() error:",e);
}
return result;
}
/**
* 校验BASF接口信息
* @param fedexc
* @return
*/
public ResultRS checkBasfInterfaceData(Fedexc fedexc){
ResultRS result = new ResultRS(Boolean.FALSE,"","");
if(Objects.equals(fedexc,null)){
result.setCode("-7");
result.setMsg("请求信息不能为空");
}else{
List<String> msgList = new ArrayList<>();
// 参数consignmentCode不能为空
String consignmentCode = fedexc.getConsignmentCode();
if(StringUtils.isEmpty(consignmentCode)){
msgList.add("参数consignmentCode不能为空");
}
// 参数consignmentId不能为空
// Long consignmentId = fedexc.getConsignmentId();
// if(Objects.isNull(consignmentId)){
// msgList.add("参数consignmentId不能为空");
// }
// 参数consType不能为空
String consType = fedexc.getConsType();
if(StringUtils.isEmpty(consType)){
msgList.add("参数consType不能为空");
}
// 参数sender不能为空
String sender = fedexc.getSender();
if(StringUtils.isEmpty(sender)){
msgList.add("参数sender不能为空");
}
// 参数shipperSCC不能为空
String shipperSCC = fedexc.getShipperSCC();
if(StringUtils.isEmpty(shipperSCC)){
msgList.add("参数shipperSCC不能为空");
}
if(msgList.size() > 0){
String join = msgList.stream().collect(Collectors.joining(";"));
result.setCode("-7");
result.setMsg(join);
}
}
return result;
}
......
......@@ -61,8 +61,7 @@ public class HsCodeService {
resultHsCode.setMsg("操作成功");
resultHsCode.setHsCodeResultList(hsCodeList);
}catch(Exception ex){
log.error(ex.getMessage());
ex.printStackTrace();
log.error(ex.getMessage(),ex);
resultHsCode.setSuccess(Boolean.FALSE);
resultHsCode.setCode("30101");
resultHsCode.setMsg("数据查询异常");
......@@ -83,8 +82,8 @@ public class HsCodeService {
resultHsCode.setMsg("操作成功");
resultHsCode.setHsCodeResultList(hsCodeList);
}catch(Exception ex){
log.error(ex.getMessage());
ex.printStackTrace();
log.error(ex.getMessage(),ex);
resultHsCode.setSuccess(Boolean.FALSE);
resultHsCode.setCode("30101");
resultHsCode.setMsg("数据查询异常");
......
......@@ -44,7 +44,7 @@ public class IClearApiHsCodeLogService {
rs = true;
}
}catch(Exception ex){
ex.printStackTrace();
log.error(ex.getMessage(),ex);
}
return rs;
}
......
......@@ -5,10 +5,12 @@ import com.erry.iclear.dateInterface.api.request.MawbDetail;
import com.erry.iclear.dateInterface.api.response.ResultRS;
import com.erry.iclear.dateInterface.repository.MawbDetailRepository;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
/**
* @author Administrator
......@@ -22,18 +24,26 @@ public class MawbDetailService {
public void saveMawbDetail(List<MawbDetail> mawbDetailList){
log.info("");
log.info("");
}
public ResultRS checkMawbDetail(Mawb mawb){
ResultRS result = new ResultRS(Boolean.FALSE,null,null);
ResultRS result = new ResultRS(Boolean.FALSE,"30002",null);
try{
for (MawbDetail detail : mawb.getMawbDetailList()) {
String secondUnit = detail.getSecondUnit();
if (StringUtils.isNotEmpty(secondUnit)) {
Integer secondQty = detail.getSecondQty();
if (Objects.isNull(secondQty)) {
result.setMsg("参数secondQty不能为空");
return result;
}
}
}
result.setSuccess(Boolean.TRUE);
}catch (Exception e){
log.error("checkMawbDetail() error:"+e.getMessage());
......
......@@ -103,7 +103,8 @@ public class IClearApiTask {
this.token = tokenResult.getData().getToken();
}
}catch(Exception ex){
ex.printStackTrace();
log.error(ex.getMessage(),ex);
}
}
if(this.token == null){
......
......@@ -27,13 +27,13 @@ public class DateUtils {
private DateUtils() {
};
public static String YEAR_MONTH = "yyyyMM";
public static String SHORT_DATE = "yyyyMMdd";
/**
* 功能:计算两个日期之间相差多少天 ((date2-date1)后取整)
*
*
* @param date1 减日期
* @param date2 被减日期
* @return
......@@ -47,12 +47,12 @@ public class DateUtils {
calendar1.set(Calendar.MINUTE, 0);
calendar1.set(Calendar.SECOND, 0);
calendar1.set(Calendar.MILLISECOND, 0);
calendar2.set(Calendar.HOUR_OF_DAY, 0);
calendar2.set(Calendar.MINUTE, 0);
calendar2.set(Calendar.SECOND, 0);
calendar2.set(Calendar.MILLISECOND, 0);
long l = Math.abs(calendar2.getTimeInMillis() - calendar1.getTimeInMillis());
long increaseDate = l / 1000 / 60 / 60 / 24;
if ((l % (1000 * 60 * 60 * 24)) > 0) {
......@@ -60,10 +60,10 @@ public class DateUtils {
}
return (int) increaseDate;
}
/**
* date2 是否是date1 的下一天
*
*
* @param date1
* @param date2
* @return
......@@ -77,7 +77,7 @@ public class DateUtils {
/**
* 功能:按yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd转换为日期
*
*
* @param s
* @return
* @throws Exception
......@@ -108,7 +108,7 @@ public class DateUtils {
/**
* date1 > date2+before-->true
*
*
* @param date1
* @param date2
* @param before
......@@ -133,7 +133,7 @@ public class DateUtils {
/**
* 功能:判断时间是否是凌晨(0-6),默认当前系统时间
*
*
* @param date
* @return
* @throws Exception
......@@ -154,7 +154,7 @@ public class DateUtils {
/**
* 功能:根据传入的字符串,得到holdTime,得到的时间为1970年的HH:mm:ss
* 如果格式不对(不为例如:23:12:23或着23:56或着23),抛出异常
*
*
* @param str
* @return
*/
......@@ -188,7 +188,7 @@ public class DateUtils {
/**
* 日期转为HoldTime格式HH:mm
*
*
* @param date
* @return
*/
......@@ -202,7 +202,7 @@ public class DateUtils {
/**
* 功能:算出两个日期中所包含的月份
*
*
* @param fromDate
* @param toDate
* @return
......@@ -237,7 +237,7 @@ public class DateUtils {
/**
* 功能:获取yyyyMM的年月
*
*
* @param date
* @return
*/
......@@ -248,7 +248,7 @@ public class DateUtils {
/**
* 功能:获取yyyyMMdd的年月日
*
*
* @param date
* @return
*/
......@@ -259,7 +259,7 @@ public class DateUtils {
/**
* 功能:获取yyyyMM的年月
*
*
* @param month
* @return
*/
......@@ -274,8 +274,8 @@ public class DateUtils {
/**
* 功能:格式yyyyMMdd日期
*
*
*
*
* @param date
* @return
*/
......@@ -290,7 +290,7 @@ public class DateUtils {
/**
* 功能:根据两个日期,算出某个月份的第一天,或者最后一天
*
*
* @param dateFrom
* @param dateTo
* @param month
......@@ -334,7 +334,7 @@ public class DateUtils {
/**
* 功能:根据一个日期,算出是这个月中的第几天
*
*
* @param date
* @return
*/
......@@ -346,7 +346,7 @@ public class DateUtils {
/**
* 功能:取出一个月中某天的日期
*
*
* @param month
* @param num
* @return
......@@ -364,7 +364,7 @@ public class DateUtils {
/**
* 功能:得到本周第一天日期
*
*
* @return
*/
public static Date getCurrentWeekMonday() {
......@@ -387,7 +387,7 @@ public class DateUtils {
/**
* 功能:得到本周最后一天的日期
*
*
* @return
*/
public static Date getCurrentWeekSaturday() {
......@@ -408,7 +408,7 @@ public class DateUtils {
/**
* 功能:从指定日期移动一定的天数
*
*
* @param date
* @param day
* @return
......@@ -426,7 +426,7 @@ public class DateUtils {
/**
* 功能:从当天日期移动一定的月数
*
*
* @param month
* @return
*/
......@@ -442,7 +442,7 @@ public class DateUtils {
/**
* 功能:获取昨天
*
*
* @return
*/
public static Date getYesterday() {
......@@ -458,7 +458,7 @@ public class DateUtils {
/**
* 功能:根据某个日期,返回本月第一天
*
*
* @param date 任何一天
* @return Date 当月第一天
*/
......@@ -475,7 +475,7 @@ public class DateUtils {
/**
* 功能:根据某个日期,返回本月最后一天
*
*
* @param date 任何一天
* @return Date 当月第一天
*/
......@@ -494,7 +494,7 @@ public class DateUtils {
/**
* 功能:获取起始日期和终止日期之间的日期(包含起始和终止日期)
*
*
* @param startDate
* @param endDate
* @return
......@@ -526,7 +526,7 @@ public class DateUtils {
/**
* 功能:取得两个日期中最小的日期,如果两个日期参数都为null则返回null
*
*
* @param date1
* @param date2
* @return Date or null
......@@ -546,7 +546,7 @@ public class DateUtils {
/**
* 功能:取得两个日期中最大的日期,如果两个日期参数都为null则返回null
*
*
* @param date1
* @param date2
* @return
......@@ -566,7 +566,7 @@ public class DateUtils {
/**
* 功能:获取指定日期和天数的星期几
*
*
* @param date 指定日期
* @param day 指定天数
* @return
......@@ -584,7 +584,7 @@ public class DateUtils {
/**
* 功能:判断两个Date是否为一天
*
*
* @param date1
* @param date2
* @return
......@@ -599,7 +599,7 @@ public class DateUtils {
/**
* 功能:把date1的小时,分钟,秒换成date2的小时,分钟,秒,返回换值后的date1
*
*
* @param date1
* @param date2
* @return
......@@ -619,10 +619,10 @@ public class DateUtils {
return cl1.getTime();
}
/**
* 功能:把date1的小时,分钟,秒换成23:59:59
*
*
* @param date1
* @return yyyy-MM-dd 23:59:59
*/
......@@ -638,7 +638,7 @@ public class DateUtils {
/**
* 功能:添加天数
*
*
* @param basicDate
* @param days 正、负 整数 或0
* @return
......@@ -656,7 +656,7 @@ public class DateUtils {
/**
* 功能:对日期进行格式化输出
*
*
* @param date 日期
* @param format
* @return
......@@ -675,7 +675,7 @@ public class DateUtils {
/**
* 功能:获取两个日期之间的天数
*
*
* @param dateFrom 起始日期
* @param dateEnd 结束日期
* @return
......@@ -699,7 +699,7 @@ public class DateUtils {
/**
* 功能:把日期字符串格式化为日期类型
*
*
* @param datetext 日期字符串
* @param format 日期格式,如果不传则使用"yyyy-MM-dd HH:mm:ss"格式
* @return
......@@ -730,7 +730,7 @@ public class DateUtils {
/**
* 功能:取得两天之间的日期数组,包含开始日期与结束日期
*
*
* @param startDateStr 开始日期
* @param endDateStr 结束日期
* @return Date[] 日期数组
......@@ -748,7 +748,7 @@ public class DateUtils {
/**
* 功能:获取两日期之间的天数
*
*
* @param dateFrom 起始日期
* @param dateEnd 结束日期
* @return
......@@ -776,7 +776,7 @@ public class DateUtils {
/**
* 功能: 待确定
*
*
* @param startDateStr
* @param endDateStr
* @return
......@@ -804,7 +804,7 @@ public class DateUtils {
/**
* 功能:获取星期几 SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, and
* SATURDAY
*
*
* @param date
* @return
*/
......@@ -819,7 +819,7 @@ public class DateUtils {
/**
* 功能:字符串转换为日期
*
*
* @param datetext yyyy/MM/dd
* @return
*/
......@@ -834,14 +834,14 @@ public class DateUtils {
Date date = df.parse(datetext);
return date;
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage(),e);
return null;
}
}
/**
* 功能: 添加Minute
*
*
* @param cdate
* @param amount
* @return
......@@ -852,10 +852,10 @@ public class DateUtils {
cl.add(Calendar.MINUTE, amount);
return cl.getTime();
}
/**
* 功能: 添加Hour
*
*
* @param cdate
* @param amount
* @return
......@@ -866,10 +866,10 @@ public class DateUtils {
cl.add(Calendar.HOUR_OF_DAY, amount);
return cl.getTime();
}
/**
* 功能: 添加Date
*
*
* @param cdate
* @param amount
* @return
......@@ -883,7 +883,7 @@ public class DateUtils {
/**
* 功能: 添加Year
*
*
* @param basicDate
* @param year
* @return
......@@ -895,14 +895,13 @@ public class DateUtils {
cal.add(GregorianCalendar.YEAR, year);
return formatDate(cal.getTime(), "yyyy-MM-dd");
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
/**
* 添加Month
*
*
* @param cdate
* @param amount
* @return
......@@ -926,7 +925,7 @@ public class DateUtils {
/**
* 功能: 日期转换为字符串
*
*
* @param dd
* @return yyyy/MM/dd
*/
......@@ -953,7 +952,7 @@ public class DateUtils {
/**
* 功能:根据某个日期,返回本月的天数
*
*
* @param date 本月任何一天
* @return 天数
*/
......@@ -965,7 +964,7 @@ public class DateUtils {
/**
* 功能:获取指定日 开始本月的之后天数
*
*
* @param stringDate yyyy-MM-dd
* @return 天数(eg:"1,2,3,")
*/
......@@ -982,7 +981,7 @@ public class DateUtils {
/**
* 功能:获取指定日 开始本月的之前天数
*
*
* @param stringDate yyyy-MM-dd
* @return 天数(eg:"1,2,3,")
*/
......@@ -997,7 +996,7 @@ public class DateUtils {
/**
* 功能:获取指定日 开始本月的所有天数
*
*
* @param stringDate yyyy-MM-dd
* @return 天数(eg:"1,2,3,")
*/
......@@ -1015,7 +1014,7 @@ public class DateUtils {
/**
* 功能:三个月的指定日期
*
*
* @param stringDate
* @return
*/
......@@ -1029,7 +1028,7 @@ public class DateUtils {
/**
* 功能:根据某个日期,返回本月的所有日期数组
*
*
* @param date 给定日期
* @return 本月的所有日期数组
*/
......@@ -1050,7 +1049,7 @@ public class DateUtils {
/**
* 功能:根据某个日期,返回monthNum个月的第一天数组
*
*
* @param date 开始日期
* @param monthNum 月份个数
* @return 每个月的第一天数组
......@@ -1069,7 +1068,7 @@ public class DateUtils {
/**
* 功能:根据1个日期,返回N天之内的日期数组
*
*
* @param startDateStr 开始日期
* @param dayTimes 天数
* @return 这段时间之间的日期数组
......@@ -1087,7 +1086,7 @@ public class DateUtils {
/**
* 功能:根据1个日期,返回N天之内的yy-MM月份数组
*
*
* @param startDateStr 开始日期
* @param dayTimes 天数
* @return 这段时间之间的日期数组
......@@ -1116,7 +1115,7 @@ public class DateUtils {
/**
* 功能:根据1个日期,返回上N个月的第一天
*
*
* @param date 日期
* @param month 上N月
* @return 上N个月的第一天
......@@ -1158,7 +1157,7 @@ public class DateUtils {
/**
* Get the date of monday in this week
*
*
* @return yyyy-MM-dd
*/
public static String getMondayOfThisWeek() {
......@@ -1186,7 +1185,7 @@ public class DateUtils {
/**
* Get the date of sunday in this week
*
*
* @return yyyy-MM-dd
*/
public static String getSundayOfThisWeek() {
......@@ -1214,7 +1213,7 @@ public class DateUtils {
/**
* Get the date of AfterDays
*
*
* @param day
* @return yyyy-MM-dd
*/
......@@ -1237,7 +1236,7 @@ public class DateUtils {
/**
* Get data time in user's specific format
*
*
* @param strFormat
* @return String strDtTime
*/
......@@ -1253,7 +1252,7 @@ public class DateUtils {
/**
* Get data time in yyyyMMddHHmmss format
*
*
* @return String strDtTime
*/
public static String getDateTimeStamp() {
......@@ -1265,7 +1264,7 @@ public class DateUtils {
/**
* Get date time in yyyyMMdd format
*
*
* @return String strDtTime
*/
public static String getDateStamp() {
......@@ -1277,7 +1276,7 @@ public class DateUtils {
/**
* Get date time in HHmmss format
*
*
* @return String strDtTime
*/
public static String getTimeStamp() {
......@@ -1289,7 +1288,7 @@ public class DateUtils {
/**
* Get date time in yyyy年MM月dd日hh:mm:ss format
*
*
* @return String sb
*/
public static String getDateTimeCN() {
......@@ -1320,7 +1319,7 @@ public class DateUtils {
/**
* Get date time in Hashmap
*
*
* @return a HashMap
*/
public static Map<String, Integer> getDateTimeToHashMap() {
......@@ -1337,7 +1336,7 @@ public class DateUtils {
/**
* Format time 2005-10-08 10:03:41.0 to 2005-10-08 10:03:41 .
*
*
* @param str the time string
* @return String
*/
......@@ -1400,7 +1399,7 @@ public class DateUtils {
/**
* 获取从start到end之间的日期(格式yyyyMM)
*
*
* @param start
* @param end
* @return
......@@ -1415,10 +1414,10 @@ public class DateUtils {
}
return months;
}
/**
* 获取从start到end之间的日期(格式yyyyMMdd)
*
*
* @param start
* @param end
* @return
......@@ -1433,10 +1432,10 @@ public class DateUtils {
}
return days;
}
/**
* 将字符串日期转换为Date
*
*
* @param s
* @return
*/
......@@ -1463,10 +1462,10 @@ public class DateUtils {
}
}
}
/**
* 获取当期日期
*
* 获取当期日期
*
* @return
*/
public static Date getCurrentDate(){
......@@ -1475,7 +1474,7 @@ public class DateUtils {
curDate.set(Calendar.MINUTE, 0);
curDate.set(Calendar.SECOND, 0);
curDate.set(Calendar.MILLISECOND, 0);
return curDate.getTime();
}
......@@ -1495,4 +1494,4 @@ public class DateUtils {
public static Date timeStampToDate(long timeStamp){
return new Date(timeStamp);
}
}
\ No newline at end of file
}
......
spring:
datasource:
url: jdbc:sqlserver://40.73.78.157:1433;DatabaseName=IClearUat
url: jdbc:sqlserver://40.73.78.157:1433;DatabaseName=IClearDev
username: sa
password: Fedex_123
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
......@@ -38,4 +38,4 @@ api:
#传输海关回执地址
customs-url: https://apiuat.iclrccd-fedex.com/export/outbound/customs
#推送完整报文地址
complete-msg-url: https://apiuat.iclrccd-fedex.com/export/outbound/mawb
\ No newline at end of file
complete-msg-url: https://apiuat.iclrccd-fedex.com/export/outbound/mawb
......
spring:
datasource:
url: jdbc:sqlserver://40.73.78.157:1433;DatabaseName=IClearDev
url: jdbc:sqlserver://40.73.78.157:1433;DatabaseName=IClearUat
username: sa
password: Fedex_123
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
......@@ -35,4 +35,4 @@ api:
#传输海关回执地址
customs-url: https://apiuat.iclrccd-fedex.com/export/outbound/customs
#推送完整报文地址
complete-msg-url: https://apiuat.iclrccd-fedex.com/export/outbound/mawb
\ No newline at end of file
complete-msg-url: https://apiuat.iclrccd-fedex.com/export/outbound/mawb
......
......@@ -39,6 +39,10 @@
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<root level="error">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</springProfile>
<springProfile name="prod">
......@@ -46,6 +50,10 @@
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
<root level="error">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</springProfile>
......
......@@ -24,17 +24,17 @@ public class ApiTest {
//获取HSCODE接口地址
public static String hscodeRequest = "hscode/hscodeRequest";
public static String timeStamp = "1649839249891";
public static String timeStamp = "1645153943";
public static String appId = "IDE";
public static String appKey = "iClearExport";
//需要申请
public static String security = "b92131f03f19a348";
public static String security = "bb348f1ba6ab7cc1";
public static void main(String[] args) throws Exception{
//D类申报的数据落地接口
// ApiTest.sendMawb();
ApiTest.sendMawb();
//C类申报的数据落地接口
ApiTest.sendMawbBasf();
// ApiTest.sendMawbBasf();
//C类EDI数据接口
// ApiTest.selectDecListBasf();
//C类回执数据接口
......@@ -51,34 +51,34 @@ public class ApiTest {
String masbJson ="{\"ieFlag\":\"E\",\"type\":\"EX\",\"agentCode\":\"1111980005\",\"agentName\":\"联邦快递(中国)有限公司\",\"billNo\":\"202204141\",\"contrNo\":\"3006622200\",\"customMaster\":\"0208\",\"cutMode\":\"601\",\"declTrnRel\":\"0\",\"distinatePort\":\"DEU000\",\"ediId\":\"001\",\"feeCurr\":\"EUR\",\"feeMark\":\"3\",\"feeRate\":110.9,\"grossWet\":4.6,\"iePort\":\"0101\",\"insurCurr\":\"EUR\",\"insurMark\":\"3\",\"insurRate\":0.74,\"netWt\":32,\"ownerCode\":\"3118962277\",\"ownerName\":\"测试核销单位\",\"packNo\":1,\"tradeCountry\":\"USA\",\"tradeMode\":\"110\",\"tradeCode\":\"32099616DM\",\"trafMode\":\"5\",\"tradeName\":\"测试发件人\",\"transMode\":\"1\",\"wrapType\":\"23\",\"tradeCodeScc\":\"A74125896321456987\",\"ownerCodeScc\":\"913100007421296207\",\"tradeAreaCode\":\"DEU\",\"entyPortCode\":\"310302\",\"goodsPlace\":\"\",\"declareName\":\"Jimmy shen\",\"overseasConsigneeEname\":\"PRYSMIAN KABEL UND SYSTEME GMBH\",\"mawbDetailList\":[{\"detailId\":\"204\",\"classMark\":\"\",\"codeTS\":\"8504409999\",\"declPrice\":3365,\"declTotal\":3365,\"dutyMode\":\"1\",\"exgNo\":\"\",\"exgVersion\":\"\",\"firstUnit\":\"007\",\"firstQty\":1,\"originCountry\":\"CHN\",\"secondUnit\":\"035\",\"secondQty\":1,\"tradeCurr\":\"EUR\",\"useTo\":\"03\",\"destinationCountry\":\"DEU\",\"ciqCode\":\"\",\"destCode\":\"110102\",\"districtCode\":\"44079\",\"gno\":1,\"gname\":\"变频调速装置\",\"gmodel\":\"4|0|控制电机用|240KW|西门子/SIEMENS|6RA8081-6GV62-0AA0|||\",\"gqty\":1,\"gunit\":\"007\"}]}";
System.out.println(new Date(Long.valueOf(timeStamp)));
String token = SHA256Util.getSHA256String("IDE" + "iClearExport" + ApiTest.security + ApiTest.timeStamp);
String token = SHA256Util.getSHA256String("DEMO1" + "iClearExportDemo1" + ApiTest.security + ApiTest.timeStamp);
System.out.println(token);
Header[] headers = HttpHeader.custom()
.other("Content-Type", "application/json")
.other("Appid", ApiTest.appId)
.other("appKey", ApiTest.appKey)
.other("TimeStamp", ApiTest.timeStamp)
.other("token", token)
.build();
HCB hcb = HCB.custom()
.timeout(20000)
.pool(100, 10)
.sslpv(SSLs.SSLProtocolVersion.TLSv1_2)
.ssl()
.retry(3);
//String url = "https://40.73.78.157:8780/customs/sendMawb";
String url = ApiTest.url + ApiTest.sendMawb;
HttpConfig config = HttpConfig.custom()
.headers(headers)
.url(url)
.encoding("utf-8")
.client(hcb.build())
// .json(new Gson().toJson(createMawb()));
.json(masbJson);
System.out.println(HttpClientUtil.post(config));
// Header[] headers = HttpHeader.custom()
// .other("Content-Type", "application/json")
// .other("Appid", ApiTest.appId)
// .other("appKey", ApiTest.appKey)
// .other("TimeStamp", ApiTest.timeStamp)
// .other("token", token)
// .build();
//
// HCB hcb = HCB.custom()
// .timeout(20000)
// .pool(100, 10)
// .sslpv(SSLs.SSLProtocolVersion.TLSv1_2)
// .ssl()
// .retry(3);
//
// //String url = "https://40.73.78.157:8780/customs/sendMawb";
// String url = ApiTest.url + ApiTest.sendMawb;
// HttpConfig config = HttpConfig.custom()
// .headers(headers)
// .url(url)
// .encoding("utf-8")
// .client(hcb.build())
//// .json(new Gson().toJson(createMawb()));
// .json(masbJson);
// System.out.println(HttpClientUtil.post(config));
}
/**
......
......@@ -35,8 +35,8 @@ public class SendMawbFedex {
*/
public static void sendMawbBasf() throws Exception{
//申报数据:consignmentCode 运单号需要修改
String json ="{\"consignmentCode\":\"271002102051\",\"consignmentId\":164535620,\"consType\":\"C\",\"sender\":\"巴斯夫护理化学品(上海)有限公司\",\"shipperCustomsCode\":\"3119920047\",\"shipperSCC\":\"91310000607239894U\",\"operateUnitName\":\"巴斯夫护理化学品(上海)有限公司\",\"operateUnitCode\":\"3119920047\",\"operateSCC\":\"91310000607239894U\",\"consignmentList\":[{\"consignmentDetailId\":83010676,\"skuCode\":\"2917341090\",\"skuName\":\"邻苯二甲酸二丁酯\",\"model\":\"品名:邻苯二甲酸二丁酯 |品牌类型:0|出口享惠情况:0|成分含量:100% 邻苯二甲酸二丁酯|用途:化学分析用试剂,实验用途|GTIN:|CAS:|其他[非必报要素,请根据实际情况填报]:|\",\"knockdownNumber\":1,\"knockdownUnit\":\"035\",\"qtyLegalFirst\":1,\"unitLegalFirst\":\"035\",\"qtyLegalSecond\":\"1.0000\",\"unitLegalSecond\":\"\",\"declaredAmount\":10,\"currency\":\"USD\",\"declaredWeight\":1}]}";
String json ="{\"consignmentCode\":\"281833508306\",\"consignmentId\":14054615,\"consType\":\"C\",\"sender\":\"鲁泰纺织股份有限公司\",\"operateUnitName\":\"鲁泰纺织股份有限公司\",\"operateUnitCode\":\"3703930116\",\"operateSCC\":\"91370302613281175K\",\"shipperCustomsCode\":\"3703930116\",\"shipperSCC\":\"91370302613281175K\",\"EANNo\":\"0000000001\",\"consignmentList\":[{\"consignmentDetailId\":15815679,\"skuCode\":\"4205001090\",\"skuName\":\"其他动物皮革制的坐具套\",\"model\":\"品名:其他动物皮革制的坐具套|品牌类型:0|出口享惠情况:0|材质[皮革或再生皮革]:皮革|GTIN:|CAS:|其他[非必报要素,请根据实际情况填报]:|\",\"knockdownNumber\":1,\"knockdownUnit\":\"035\",\"qtyLegalFirst\":1,\"unitLegalFirst\":\"035\",\"declaredAmount\":1,\"currency\":\"USD\",\"declaredWeight\":1}]}";
System.out.println(json);
String token = SHA256Util.getSHA256String(SendMawbFedex.appId + SendMawbFedex.appKey + SendMawbFedex.security + SendMawbFedex.timeStamp);
System.out.println(token);
//消息头
......