wei.zhou

日志落地

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