李俊

BASF校验接口

File mode changed
......@@ -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,10 +60,73 @@ public class FedexDataInterface {
@Autowired
private ChmConsignmentRepository chmConsignmentRepository;
@Autowired
private IClearApiCheckLogRepository iClearApiCheckLogRepository;
@Value("${api.address.iclear-submit-url}")
String iclearCSubmitUrl;
@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("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 = "Fedex推送运单数据", httpMethod = "POST", notes = "ex: http://192.168.1.75:8080/fedex/sendMawbFedex")
@PostMapping("/sendMawbFedex")
@ResponseBody
......@@ -283,4 +348,5 @@ public class FedexDataInterface {
result.setCode("0");
return result;
}
}
......
package com.erry.iclear.dateInterface.entity;
import com.erry.iclear.dateInterface.common.BaseModel;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
/**
* BASF校验接口日志表
*/
@Entity
@Table(name = "T_ICLEAR_API_CHECK_LOG")
@Data
public class TIClearApiCheckLog extends BaseModel {
@Id
@GeneratedValue
@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;
}
......@@ -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> {
}
......@@ -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;
}
......
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
......