tao.mo

API代码提交

mt
2021年8月6日13:35:03
......@@ -5,7 +5,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.validation.annotation.Validated;
import javax.persistence.*;
import javax.validation.Valid;
......@@ -117,7 +116,7 @@ public class Mawb implements Serializable {
@ApiModelProperty(value = "毛重", name = "grossWet", example = "")
@NotNull(message="参数grossWet不能为空")
@Column(name = "CROSSWET")
private Integer grossWet;
private BigDecimal grossWet;
@ApiModelProperty(value = "出入境关闭", name = "IEPort", example = "固定值:0101")
@NotBlank(message="参数iePort不能为空")
......
package com.erry.iclear.dateInterface.api.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.validation.annotation.Validated;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
......@@ -20,7 +18,7 @@ import java.math.BigDecimal;
@Entity
@Table(name = "T_ICLEAR_API_MAWBDETAIL")
@Data
public class MawbDetail implements Serializable {
public class MawbDetail implements Serializable{
private static final long serialVersionUID = -6706944312498119267L;
@Id
......
......@@ -33,6 +33,9 @@ public class DictionaryEntries implements Serializable {
@Column(name = "DICT_CODE")
private String dictCode;
@Column(name = "EXT2")
private String ext2;
@Column(name = "EXT3")
private String ext3;
......
......@@ -16,6 +16,6 @@ public interface DeclearTaskRepository extends JpaSpecificationExecutor<DeclearT
* 根据运单号集合+创建时间 运单
* @return
*/
@Query( nativeQuery = true,value ="SELECT * FROM T_DECLEAR_TASK WHERE FILE_TYPE = 1 AND PUSH_NUMBER < 3 AND (RESPONSE_RESULTS IS NULL OR RESPONSE_RESULTS <> '0') ORDER BY OPERATION_TIME ASC" )
@Query( nativeQuery = true,value ="SELECT TOP 10 * FROM T_DECLEAR_TASK WHERE FILE_TYPE = 1 AND PUSH_NUMBER < 3 AND (RESPONSE_RESULTS IS NULL OR RESPONSE_RESULTS <> '0') ORDER BY OPERATION_TIME ASC" )
public List<DeclearTask> findDeclearTask();
}
......
......@@ -30,7 +30,7 @@ public interface DictionaryEntriesRepository extends JpaRepository<DictionaryEn
* 查找全部DictionaryEntries
* @return
*/
@Query(nativeQuery = true, value = "select ID,CODE,CHINESE_NAME,DICT_CODE,EXT3,EXT6 from T_BI_DICTIONARY_ENTRIES where STATUS=1")
@Query(nativeQuery = true, value = "select ID,CODE,CHINESE_NAME,DICT_CODE,EXT2,EXT3,EXT6 from T_BI_DICTIONARY_ENTRIES where STATUS=1")
public List<DictionaryEntries> findAllDictionaryEntries();
}
......
......@@ -30,8 +30,8 @@ public interface ReceiptMessageRepository extends JpaSpecificationExecutor<Recei
public List<ReceiptMessage> findReceiptMessageList();
@Modifying(clearAutomatically = false)
@Query(nativeQuery = true,value = "UPDATE T_DECLEAR_TASK SET PUSH_TIME = ?1,PUSH_NUMBER = PUSH_NUMBER + 1,RESPONSE_TIME = ?2,RESPONSE_RESULTS = ?3,RESPONSE_CONTENT = ?4 WHERE FILE_TYPE = 2 AND CHMSIGNMENT_ID = ?5")
void updateDeclearTaskStatus(Date pushTime, Date responseTime, String responseResults, String responseContent, Long chmsignmentId);
@Query(nativeQuery = true,value = "UPDATE T_DECLEAR_TASK SET PUSH_TIME = ?1,PUSH_NUMBER = PUSH_NUMBER + 1,RESPONSE_TIME = ?2,RESPONSE_RESULTS = ?3,RESPONSE_CONTENT = ?4 WHERE FILE_TYPE = ?5 AND CHMSIGNMENT_ID = ?6")
void updateDeclearTaskStatus(Date pushTime, Date responseTime, String responseResults, String responseContent, String fileType, Long chmsignmentId);
}
\ No newline at end of file
......
......@@ -3,9 +3,13 @@ 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.Mawb;
import com.erry.iclear.dateInterface.api.request.MawbDetail;
import com.erry.iclear.dateInterface.api.request.ReceiptMessage;
import com.erry.iclear.dateInterface.api.response.TokenResult;
import com.erry.iclear.dateInterface.common.Constants;
import com.erry.iclear.dateInterface.entity.ChmConsignment;
import com.erry.iclear.dateInterface.entity.ChmConsignmentDetail;
import com.erry.iclear.dateInterface.entity.DeclearTask;
import com.erry.iclear.dateInterface.repository.ChmConsignmentRepository;
import com.erry.iclear.dateInterface.repository.DeclearTaskRepository;
......@@ -52,6 +56,12 @@ public class ApiService {
@Autowired
ChmConsignmentRepository consignmentRepository;
@Autowired
ChmConsignmentService consignmentService;
@Autowired
ChmConsignmentDetailService consignmentDetailService;
/**
* 获取token信息
* @return
......@@ -62,7 +72,7 @@ public class ApiService {
map.put("username", this.username);
map.put("password", this.password);
HttpConfig config = HttpConfig.custom()
.url(tokenUrl)
.url(this.tokenUrl)
.map(map)
.encoding("utf-8");
String tokenJson = HttpClientUtil.post(config);
......@@ -79,7 +89,7 @@ public class ApiService {
Map<String,Object> map = new HashMap<String,Object>();
map.put("token", token);
HttpConfig config = HttpConfig.custom()
.url(refreshTokenUrl)
.url(this.refreshTokenUrl)
.map(map)
.encoding("utf-8");
HttpClientUtil.post(config);
......@@ -92,7 +102,7 @@ public class ApiService {
*/
public void pushCustoms(String token){
//获取海关回执数据
List<ReceiptMessage> receiptMessageList = receiptMessageRepository.findReceiptMessageList();
List<ReceiptMessage> receiptMessageList = this.receiptMessageRepository.findReceiptMessageList();
this.sendCustoms(token,receiptMessageList);
}
......@@ -118,7 +128,7 @@ public class ApiService {
//推送海关回执数据
HttpConfig config = HttpConfig.custom()
.headers(headers)
.url(customsUrl)
.url(this.customsUrl)
.encoding("utf-8")
.json(objJson);
String json = HttpClientUtil.post(config);
......@@ -151,10 +161,11 @@ public class ApiService {
});
declearTaskList.forEach(declearTask -> {
//将已经推送完成的回执信息状态修改
receiptMessageRepository.updateDeclearTaskStatus(declearTask.getPushTime(),
this.receiptMessageRepository.updateDeclearTaskStatus(declearTask.getPushTime(),
declearTask.getResponseTime(),
declearTask.getResponseResults(),
declearTask.getResponseContent(),
"2",
declearTask.getChmsignmentId().longValue());
});
}
......@@ -165,19 +176,95 @@ public class ApiService {
* @throws Exception
*/
public void pushMawb(String token){
Header[] headers = HttpHeader.custom()
.other("Content-Type", "application/json")
.other("Authorization", token)
.build();
//获取海关回执数据
try{
List<DeclearTask> declearTaskList = declearTaskRepository.findDeclearTask();
/****************将Export对象转换成西门子交互实体对象****************/
//查询需要推送数据
List<Mawb> mawbList = new ArrayList<Mawb>();
List<DeclearTask> declearTaskList = this.declearTaskRepository.findDeclearTask();
declearTaskList.forEach(declearTask -> {
Long consignmentId = declearTask.getChmsignmentId().longValue();
consignmentRepository.findChmConsignmentById(consignmentId);
//查询需要推送运单数据,并且转换
ChmConsignment consignment = this.consignmentRepository.findChmConsignmentById(consignmentId);
Mawb mawb = this.consignmentService.convertToChmConsignment(consignment);
//获取需要推送运单数据,并且转换
if(consignment.getChmConsignmentDetailList() != null){
List<MawbDetail> mawbDetailList = new ArrayList<MawbDetail>();
for(int i = 0 ; i < consignment.getChmConsignmentDetailList().size() ; i++){
ChmConsignmentDetail detail = consignment.getChmConsignmentDetailList().get(i);
MawbDetail mawbDetail = this.consignmentDetailService.convertToChmConsignmentDetail(detail, String.valueOf((i + 1)));
mawbDetailList.add(mawbDetail);
}
mawb.setMawbDetailList(mawbDetailList);
}
mawbList.add(mawb);
});
this.sendMawb(token,mawbList);
}catch(Exception ex){
ex.printStackTrace();
}
}
/**
* 将完整报文发送至西门子
* @param token
* @param mawbList
*/
public void sendMawb(String token ,List<Mawb> mawbList){
Header[] headers = HttpHeader.custom()
.other("Content-Type", "application/json")
.other("Authorization", token)
.build();
List<DeclearTask> declearTaskList = new ArrayList<DeclearTask>();
mawbList.forEach(d->{
DeclearTask declearTask = new DeclearTask();
try {
//设置ID
declearTask.setChmsignmentId(BigDecimal.valueOf(d.getId()));
//推送时间
declearTask.setPushTime(new Date());
String objJson = JsonToJava.toJson(d);
//推送海关回执数据
HttpConfig config = HttpConfig.custom()
.headers(headers)
.url(this.customsUrl)
.encoding("utf-8")
.json(objJson);
String json = HttpClientUtil.post(config);
//接口响应时间
declearTask.setResponseTime(new Date());
TokenResult tokenResult = JsonToJava.parseJson(json,TokenResult.class);
if(tokenResult.getErrorcode().equals(Constants.ApiResponseKeys.SUCCESS)){
//推送成功,记录推送状态
declearTask.setResponseResults(tokenResult.getErrorcode());
declearTask.setResponseContent(tokenResult.getErrormessage());
declearTaskList.add(declearTask);
}else if(tokenResult.getErrorcode().equals(Constants.ApiResponseKeys.KEY_10004)){
//如果凭证失效,则刷新凭证
refreshToken(token);
}else{
//推送失败,记录推送状态
declearTask.setResponseResults(tokenResult.getErrorcode());
declearTask.setResponseContent(tokenResult.getErrormessage());
declearTaskList.add(declearTask);
log.info("完整报关单推送失败,推送相应码为:"+tokenResult.getErrorcode() + ",推送ID为:" + d.getId());
}
}catch(Exception ex){
//接口响应时间
declearTask.setResponseTime(new Date());
declearTask.setResponseResults("接口调用失败!");
declearTask.setResponseContent(ex.getMessage());
declearTaskList.add(declearTask);
ex.printStackTrace();
}
});
declearTaskList.forEach(declearTask -> {
//将已经推送完成的报关单状态修改
this.receiptMessageRepository.updateDeclearTaskStatus(declearTask.getPushTime(),
declearTask.getResponseTime(),
declearTask.getResponseResults(),
declearTask.getResponseContent(),
"1",
declearTask.getChmsignmentId().longValue());
});
}
}
......
......@@ -5,6 +5,7 @@ import com.erry.iclear.dateInterface.common.Constant;
import com.erry.iclear.dateInterface.entity.*;
import com.erry.iclear.dateInterface.repository.ChmConsignmentDetailRepository;
import com.erry.iclear.dateInterface.repository.ChmConsignmentRepository;
import com.erry.iclear.dateInterface.util.NumberUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -51,7 +52,6 @@ public class ChmConsignmentDetailService {
result.setLevyTypeDic(levyTypeDictionaryEntries);
result.setLevyType(levyTypeDictionaryEntries.getChineseName());
}
//货号
//版本号
//第一计量单位(法定单位)
......@@ -60,8 +60,6 @@ public class ChmConsignmentDetailService {
result.setUnitLegalFirstId(firstUnitDictionaryEntries);
result.setUnitLegalFirst(firstUnitDictionaryEntries.getChineseName());
}
//第一法定数量
result.setQtyLegalFirst(BigDecimal.valueOf(mawbDetail.getFirstQty().doubleValue()));
//成交计量单位
......@@ -71,7 +69,6 @@ public class ChmConsignmentDetailService {
result.setKnockdownUnitDic(knockdownUnitEntries);
result.setKnockdownUnit(knockdownUnitEntries.getChineseName());
}
//商品规格、型号
result.setModel(mawbDetail.getGmodel());
//商品名称
......@@ -85,16 +82,12 @@ public class ChmConsignmentDetailService {
result.setHabitatDic(habitatDictonaryEntries);
result.setHabitat(habitatDictonaryEntries.getChineseName());
}
//第二计量单位
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()));
//成交币制
......@@ -104,7 +97,6 @@ public class ChmConsignmentDetailService {
result.setCurrency(currencyDictionaryEntries.getChineseName());
}
//用途/生产厂家
//工缴费
//最终目的国
......@@ -114,8 +106,6 @@ public class ChmConsignmentDetailService {
result.setDestinationCountry(destinationCountryDictionaryEntries.getChineseName());
}
//检验检疫编码
//申报货物英文名称
result.setContentDescription(mawbDetail.getDeclGoodsEname());
......@@ -126,27 +116,107 @@ public class ChmConsignmentDetailService {
result.setOrigplacecode(Objects.equals(origplacecodeMapping,null)?"":origplacecodeMapping.getOrigplaceName());
}
//境内目的地/境内货源地
DomesticDestinationMapping domesticDestinationDictionaryEntries = Constant.domesticDestinationMappingCache.get(mawbDetail.getDistrictCode());
if(!Objects.equals(domesticDestinationDictionaryEntries,null)){
result.setDomesticDestinationMapping(domesticDestinationDictionaryEntries);
result.setDomesticDestination(Objects.equals(destinationCountryDictionaryEntries,null)?"":destinationCountryDictionaryEntries.getChineseName());
}
result.setDetailId(mawbDetail.getDetailId());
}catch (Exception e){
log.error("convertToChmConsignmentDetail() error:"+e.getMessage());
}
return result;
}
/**
* 转换运单明细
* @param detail
* @param gno
* @return
*/
public MawbDetail convertToChmConsignmentDetail(ChmConsignmentDetail detail,String gno){
MawbDetail result = new MawbDetail();
try{
//明细ID
result.setDetailId(detail.getId().toString());
//归类标志
result.setClassMark("");
//商品编号 必须是十位,不足的后补 00
result.setCodeTS(detail.getSkuCode());
//申报单价 小数点保留4位
result.setDeclPrice(NumberUtils.bigDecimalFormat(detail.getOriRegion(),4));
//申报总价 小数点保留2位
result.setDeclTotal(NumberUtils.bigDecimalFormat(detail.getAmount(),2));
//征免方式 数字一字码,0~9
if(!Objects.equals(detail.getLevyTypeDic(),null)){
result.setDutyMode(detail.getLevyTypeDic().getExt2());
}
//货号 有值传值,无值填空值
result.setExgNo("");
//版本号 有值传值,无值填空值
result.setExgVersion("");
//第一计量单位(法定单位) 数字三字码
if(!Objects.equals(detail.getUnitLegalFirstId(),null)){
result.setFirstUnit(detail.getUnitLegalFirstId().getExt2());
}
//第一法定数量
result.setFirstQty(NumberUtils.bigDecimalToIntger(detail.getQtyLegalFirst()));
//成交计量单位 数字三字码
if(!Objects.equals(detail.getKnockdownUnitDic(),null)){
result.setGunit(detail.getKnockdownUnitDic().getExt2());
}
//商品规格、型号
result.setGmodel(detail.getModel());
//商品名称 品名必填且必须包含中文字符
result.setGname(detail.getSkuName());
//商品序号
result.setGno(gno);
//成交数量
result.setGqty(detail.getKnockdownNumber());
//原产国 英文三字码
if(!Objects.equals(detail.getHabitatDic(),null)){
result.setOriginCountry(detail.getHabitatDic().getExt3());
}
//第二计量单位 数字三字码
if(!Objects.equals(detail.getUnitLegalSecondId(),null)){
result.setSecondUnit(detail.getUnitLegalSecondId().getExt2());
}
//第二法定数量
result.setSecondQty(NumberUtils.bigDecimalToIntger(detail.getQtyLegalSecond()));
//成交币制 英文三字码
if(!Objects.equals(detail.getCurrencyDic(),null)){
result.setTradeCurr(detail.getCurrencyDic().getExt2());
}
//用途/生产厂家
result.setUseTo("");
//工缴费
result.setWorkUsd(new BigDecimal(0));
//最终目的国 英文三字码
if(!Objects.equals(detail.getDestinationCountryDic(),null)){
result.setDestinationCountry(detail.getDestinationCountryDic().getExt3());
}
//检验检疫编码
result.setCiqCode("");
//申报货物英文名称
result.setDeclGoodsEname(detail.getContentDescription());
//目的地代码 有值传值,无值填空值
if(!Objects.equals(detail.getOrigplacecodeMapping(),null)){
result.setDestCode(detail.getOrigplacecodeMapping().getOrigplaceCode());
}else{
result.setDestCode("");
}
//境内目的地/境内货源地
if(!Objects.equals(detail.getDomesticDestinationMapping(),null)){
result.setDistrictCode(detail.getDomesticDestinationMapping().getDistrictCode());
}
result.setDetailId(detail.getDetailId());
}catch (Exception e){
log.error("convertToChmConsignmentDetail() error:"+e.getMessage());
}
return result;
}
public List<ChmConsignmentDetail> findChmConsignmentDetailListByConsignmentCode(Long consignmentId){
List<ChmConsignmentDetail> result = new ArrayList<>();
......@@ -158,28 +228,19 @@ public class ChmConsignmentDetailService {
return result;
}
public void saveDetailList(List<ChmConsignmentDetail> chmConsignmentDetailList){
chmConsignmentDetailRepository.saveAll(chmConsignmentDetailList);
}
public void saveChmConsignmentDetail(ChmConsignmentDetail consignmentDetail){
chmConsignmentDetailRepository.save(consignmentDetail);
}
public void deleteChmConsignmentDetail(Long id){
chmConsignmentDetailRepository.deleteById(id);
}
public void deleteChmConsignmentDetailBatch(List<Long> idList){
chmConsignmentDetailRepository.deleteChmConsignmentDetailByChnConIdList(idList);
}
}
......
......@@ -10,7 +10,9 @@ import com.erry.iclear.dateInterface.entity.ChmConsignmentDetail;
import com.erry.iclear.dateInterface.entity.DictionaryEntries;
import com.erry.iclear.dateInterface.repository.ChmConsignmentRepository;
import com.erry.iclear.dateInterface.util.DateUtils;
import com.erry.iclear.dateInterface.util.NumberUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -59,7 +61,6 @@ public class ChmConsignmentService {
result.setConsignmentHeadCode(billNo[0]);
result.setConsignmentCode(billNo[1]);
}
//合同号
result.setContractCode(mawb.getContrNo());
//主管海关(申报地海关)
......@@ -70,26 +71,19 @@ public class ChmConsignmentService {
result.setTaxNatureDic(levyTypeDictionaryEntries);
result.setTaxNature(levyTypeDictionaryEntries.getChineseName());
}
//报关/转关关系标志:固定值0 ,但数据字典里没有0
//经停港/指运港
ChmCarryPort chmCarryPort =Constant.chmCarryPortCache.get(mawb.getDistinatePort());
if(!Objects.equals(chmCarryPort,null)){
result.setThroughStopPortDic(chmCarryPort);
result.setThroughStopPort(chmCarryPort.getPortNo());
}
//TODO 报关标志【待确认】
DictionaryEntries declaredDocTypeDictionaryEntries = Constant.dictionaryEntriesCache.get(Constant.DECLARED_DOC_TYPE + mawb.getEdiId());
if(!Objects.equals(declaredDocTypeDictionaryEntries,null)){
result.setDeclaredDocTypeDic(declaredDocTypeDictionaryEntries);
result.setDeclaredDocType(declaredDocTypeDictionaryEntries.getChineseName());
}
//海关编号
result.setCustomsNo(mawb.getEntryId());
//运费币制
......@@ -98,28 +92,20 @@ public class ChmConsignmentService {
result.setTransCurrencyDic(currencyDictionaryEntries);
result.setTransCurrency(currencyDictionaryEntries.getChineseName());
}
//TODO 运费标记:固定值 3 【iclear中, 和成交方式相关,只有成交方式 1、2 时,才能传 3 】
//运费总价
result.setTransCost(mawb.getFeeRate());
//毛重
result.setGrossWeight(BigDecimal.valueOf(mawb.getGrossWet()));
result.setGrossWeight(mawb.getGrossWet());
//出入境关闭:固定值 0101
//录入人名称:固定值 必填项,但填的值是空值
//保险费币制
DictionaryEntries insuranceDictionaryEntries = Constant.dictionaryEntriesCache.get(Constant.CURRENCY_SYSTEM+mawb.getInsurCurr());
if(!Objects.equals(insuranceDictionaryEntries,null)){
result.setInsuranceCostCurrencyDic(insuranceDictionaryEntries);
result.setInsuranceCostCurrency(insuranceDictionaryEntries.getChineseName());
}
//保险费标记 ,根据transMode决定
//保险费/率
result.setInsuranceCost(mawb.getInsurRate());
//备案号
......@@ -132,7 +118,6 @@ public class ChmConsignmentService {
result.setOtherCurrencyDic(otherDictionaryEntries);
result.setOtherCurrency(otherDictionaryEntries.getChineseName());
}
//杂费/率
result.setOtherCost(mawb.getOtherRate());
//杂费标志
......@@ -140,8 +125,6 @@ public class ChmConsignmentService {
result.setOwnerCode(mawb.getOwnerCode());
//TODO 消费使用/生产销售单位名称
result.setOwnerName(mawb.getOwnerName());
//件数
result.setCounts(mawb.getPackNo().longValue());
//预录入编号
......@@ -152,23 +135,18 @@ public class ChmConsignmentService {
result.setFromCountryDic(fromCountryDictionaryEntries);
result.setFromCountry(fromCountryDictionaryEntries.getChineseName());
}
//运单类型
DictionaryEntries consType = Constant.dictionaryEntriesCache.get(Constant.consType_D);
if(consType != null){
result.setConsTypeId(consType);
result.setConsType(consType.getChineseName());
}
//监管方式
DictionaryEntries tradeModeDictionaryEntries = Constant.dictionaryEntriesCache.get(Constant.SUPERVISION_MODE+mawb.getTradeMode());
if(!Objects.equals(tradeModeDictionaryEntries,null)){
result.setTradeModeDic(tradeModeDictionaryEntries);
result.setTradeMode(tradeModeDictionaryEntries.getChineseName());
}
//境内收发货人编号
result.setTradeCoSCC(mawb.getTradeCode());
//运输方式代码
......@@ -177,8 +155,6 @@ public class ChmConsignmentService {
result.setVehicleWay(vehicleWayDictionaryEntries);
result.setVehicleWayCode(vehicleWayDictionaryEntries.getCode());
}
//境内收发货人名称
result.setOperateUnitName(mawb.getTradeName());
//成交方式
......@@ -187,69 +163,49 @@ public class ChmConsignmentService {
result.setDealModeDic(dealModeDictionaryEntries);
result.setDealMode(dealModeDictionaryEntries.getChineseName());
}
//包装种类
DictionaryEntries packageTypeDictionaryEntries = Constant.dictionaryEntriesCache.get(Constant.NEW_PACKAGE_TYPE+mawb.getWrapType());
if(!Objects.equals(packageTypeDictionaryEntries,null)){
result.setPackageTypeDic(packageTypeDictionaryEntries);
result.setPackageType(packageTypeDictionaryEntries.getChineseName());
}
//TODO 生产核销单位统一信用代码---报关形式类型
result.setTradeCoSCC(mawb.getTradeCodeScc());
//TODO 消费使用/生产销售单位单位统一编码
result.setOwnerCodeScc(mawb.getOwnerCodeScc());
//贸易国别
DictionaryEntries tradeAreaCodeDictionaryEntries=Constant.dictionaryEntriesCache.get(Constant.COUNTRY+mawb.getTradeAreaCode());
if(!Objects.equals(tradeAreaCodeDictionaryEntries,null)){
result.setTradeAreaCodeDic(tradeAreaCodeDictionaryEntries);
result.setTradeAreaCode(tradeAreaCodeDictionaryEntries.getChineseName());
}
//标记及号码
result.setDeclaredRemark(mawb.getMarkNo());
//入境口岸代码:固定值 310302
//存放地点:固定值 空值
//申报人员姓名---报关员证号
result.setDeclaredUnitName(mawb.getDeclareName());
//境外发货人代码
//境外收货人编码
result.setOverseasConsignorCode(mawb.getOverseasConsigneeCode());
//境外收货人名称(外文)
result.setOverseasConsignorFnCname(mawb.getOverseasConsigneeEname());
//运单状态: 待申报海关
DictionaryEntries transferWaybillStatusDictionaryEntries=Constant.dictionaryEntriesCache.get(Constant.TRANSFER_WAY_BILL_STATUS+"5");
if(!Objects.equals(transferWaybillStatusDictionaryEntries,null)){
result.setConsStatusDic(transferWaybillStatusDictionaryEntries);
result.setConsStatus(transferWaybillStatusDictionaryEntries.getChineseName());
}
//添加TSN口岸
DictionaryEntries portTSN = Constant.dictionaryEntriesCache.get(Constant.PORT_TSN);
if (!Objects.equals(portTSN,null)){
result.setPortId(portTSN);
result.setPortName(portTSN.getChineseName());
}
//西门子数据都为TSN口岸,可通过口岸查询查看
if (creator.equals("IDE")){
result.setDeclaredPort("TSN");
}
//推送时间作为创建时间,可以用来校验数据的有序性,如果新的推送时间小于已有的创建时间,就不更新数据
result.setCreateTime(new Date());
result.setUpdateTime(pushTime);
......@@ -263,6 +219,148 @@ public class ChmConsignmentService {
return result;
}
/**
* 运单转换主单
* @return
*/
public Mawb convertToChmConsignment(ChmConsignment consignment){
Mawb result = new Mawb();
try{
//将运单ID赋值,作为排查数据依据
result.setId(consignment.getId());
//进出口标志:固定值 E
result.setIeFlag("E");
//申报类型:固定值 EX
result.setType("EX");
//申报单位代码:固定值 1111980005
result.setAgentCode("1111980005");
//申报单位名称:固定值 联邦快递(中国)有限公司
result.setAgentName("联邦快递(中国)有限公司");
//提单号:有总单号则取值“总单号_运单号”,没有总单号则取值“运单号”
//总单号不为空
if(StringUtils.isNotBlank(consignment.getConsignmentHeadCode())){
result.setBillNo(consignment.getConsignmentHeadCode() + "_" + consignment.getConsignmentCode());
}else{
result.setBillNo(consignment.getConsignmentCode());
}
//合同号 最大长度32
result.setContrNo(consignment.getContractCode());
//主管海关(申报地海关) 固定值 0101
result.setCustomMaster("0101");
//征免性质 数字三字码
if(!Objects.equals(consignment.getTaxNatureDic(),null)){
result.setCutMode(consignment.getTaxNatureDic().getExt2());
}
//经停港/指运港 固定值:0
result.setDeclTrnRel("0");
//经停港/指运港 6位港口代码 ASM000、Mar-51、996102
if(!Objects.equals(consignment.getThroughStopPortDic(),null)){
result.setDistinatePort(consignment.getThroughStopPortDic().getPcCode());
}
//报关标志 数字三字码或英文二字码
if(!Objects.equals(consignment.getDeclaredDocTypeDic(),null)){
result.setEdiId(consignment.getDeclaredDocTypeDic().getExt2());
}
//海关编号
result.setEntryId(consignment.getCustomsNo());
//运费币制 英文三字码
if(!Objects.equals(consignment.getTransCurrencyDic(),null)){
result.setFeeCurr(consignment.getTransCurrencyDic().getExt2());
}
//TODO 运费标记:固定值 3 【iclear中, 和成交方式相关,只有成交方式 1、2 时,才能传 3 】
result.setFeeMark("3");
//运费总价 保留2位小数
result.setFeeRate(NumberUtils.bigDecimalFormat(consignment.getTransCost(),2));
//毛重 保留5位小数
result.setGrossWet(NumberUtils.bigDecimalFormat(consignment.getGrossWeight(),5));
//出入境关闭:固定值 0101
result.setIePort("0101");
//录入人名称:固定值 必填项,但填的值是空值
result.setInputerName("");
//保险费币制
if(!Objects.equals(consignment.getInsuranceCostCurrencyDic(),null)){
result.setInsurCurr(consignment.getInsuranceCostCurrencyDic().getExt2());
}
//保险费标记 ,根据transMode决定
result.setInsurMark("");
//保险费/率 保留2位小数
result.setInsurRate(NumberUtils.bigDecimalFormat(consignment.getInsuranceCost(),2));
//备案号
result.setManualNo(consignment.getRecordCode());
//净重 保留5位小数
result.setNetWt(NumberUtils.bigDecimalFormat(consignment.getNetWeight(),5));
//杂费币制 数字三字码
if(!Objects.equals(consignment.getOtherCurrencyDic(),null)){
result.setOtherCurr(consignment.getOtherCurrencyDic().getExt6());
}
//杂费/率
result.setOtherRate(NumberUtils.bigDecimalFormat(consignment.getOtherCost(),2));
//杂费标志
result.setOtherMark("");
//TODO 消费使用/生产销售单位代码
result.setOwnerCode(consignment.getOwnerCode());
//TODO 消费使用/生产销售单位名称
result.setOwnerName(consignment.getOwnerName());
//件数
result.setPackNo(consignment.getCounts().intValue());
//预录入编号
result.setPreEntryId(consignment.getEnteringNo());
//启运国/运抵国 英文三字码
if(!Objects.equals(consignment.getFromCountryDic(),null)){
result.setTradeCountry(consignment.getFromCountryDic().getExt3());
}
//监管方式 数字四字码
if(!Objects.equals(consignment.getTradeModeDic(),null)){
result.setTradeMode(consignment.getTradeModeDic().getExt2());
}
//境内收发货人编号
result.setTradeCode(consignment.getTradeCoSCC());
//运输方式代码 一字码,数字或大写英文字母
if(!Objects.equals(consignment.getVehicleWay(),null)){
result.setTrafMode(consignment.getVehicleWay().getExt2());
}
//境内收发货人名称
result.setTradeName(consignment.getOperateUnitName());
//成交方式 数字一字码,从1~4,共4个
if(!Objects.equals(consignment.getDealModeDic(),null)){
result.setTransMode(consignment.getDealModeDic().getExt6());
}
//包装种类 取值范围(0,1,4,6,22,29,32,33,39,92,93,99)
if(!Objects.equals(consignment.getPackageTypeDic(),null)){
result.setWrapType(consignment.getPackageTypeDic().getExt2());
}
//TODO 生产核销单位统一信用代码---报关形式类型
result.setTradeCodeScc(consignment.getTradeCoSCC());
//TODO 消费使用/生产销售单位单位统一编码
result.setOwnerCodeScc(consignment.getOwnerCodeScc());
//贸易国别 英文三字码
if(!Objects.equals(consignment.getTradeAreaCodeDic(),null)){
result.setTradeAreaCode(consignment.getTradeAreaCodeDic().getExt3());
}
//标记及号码
result.setMarkNo(consignment.getDeclaredRemark());
//入境口岸代码:固定值 310302
result.setEntyPortCode("310302");
//存放地点:固定值 空值
result.setGoodsPlace("");
//申报人员姓名---报关员证号
result.setDeclareName(consignment.getDeclaredUnitName());
//境外发货人代码
result.setOverseasConsignorCode("");
//境外收货人编码
result.setOverseasConsigneeCode(consignment.getOverseasConsignorCode());
//境外收货人名称(外文)
result.setOverseasConsigneeEname(consignment.getOverseasConsignorFnCname());
}catch (Exception e){
result=null;
e.printStackTrace();
log.error("convertToChmConsignment() error:"+e.getMessage());
}
return result;
}
/**
* 保存主单
......@@ -278,7 +376,6 @@ public class ChmConsignmentService {
return null;
}
/**
* 保存主单
* @param chmConsignment
......@@ -293,14 +390,6 @@ public class ChmConsignmentService {
return null;
}
/**
* 根据运单号查找数据
* @param consignmentCode
......@@ -315,7 +404,6 @@ public class ChmConsignmentService {
return null;
}
/**
* 保存或更新 iclear中的运单信息
* @param mawb
......@@ -339,11 +427,9 @@ public class ChmConsignmentService {
});
chmConsignment.setChmConsignmentDetailList(chmConsignmentDetailList);
//2、校验 7天+运单 ,如果有数据并且 还未报关就更新,如果数据就插入
ChmConsignment chmConsignmentDB=this.findChmConsignmentByConsignmentCode(chmConsignment.getConsignmentCode(), DateUtils.addDate(DateUtils.getCurrentDate(),-7));
//3、新增或更新
//新增:如果没有就插入
if (Objects.equals(chmConsignmentDB,null)){
......@@ -369,7 +455,6 @@ public class ChmConsignmentService {
//更新数据
log.info("更新主单"+ mawb.getBillNo());
//由于订单明细中,无法确定唯一一条数据,所以无法做到update,只能先删除在插入
for(ChmConsignmentDetail newDetail:chmConsignment.getChmConsignmentDetailList()){
for(ChmConsignmentDetail oldDetail: chmConsignmentDB.getChmConsignmentDetailList()){
......@@ -396,26 +481,7 @@ public class ChmConsignmentService {
}catch (Exception e){
log.error(""+e.getMessage());
}
result.setSuccess(Boolean.TRUE);
return result;
}
}
......
......@@ -50,7 +50,7 @@ public class IClearApiTask {
/**
* TODO 定时任务:每分钟推送: 完整报文
*/
@Scheduled(cron = "${task.pushMawbTask}")
//@Scheduled(cron = "${task.pushMawbTask}")
public void pushMawbTask(){
try{
log.info("pushMawbTask start>>>>>>>>>>>>");
......
package com.erry.iclear.dateInterface.util;
import java.math.BigDecimal;
/**
* 数值处理类
* mt
* 2021年8月5日16:31:02
*/
public class NumberUtils {
/**
* 保留两位小数(四舍五入),0.00之后有数字全部保留位0.01
* @param bdForMat
* @return
*/
public static BigDecimal bigDecimalFormat(BigDecimal bdForMat,int num){
if(bdForMat != null){
bdForMat = bdForMat.setScale(num, BigDecimal.ROUND_HALF_UP);
if(bdForMat.compareTo(BigDecimal.ZERO) == 0){
bdForMat = new BigDecimal(0.01).setScale(num,BigDecimal.ROUND_HALF_UP);
}
return bdForMat;
}
return null;
}
/**
* 将Bigdecimal转换成Integer
* @param bigDecimal
* @return
*/
public static Integer bigDecimalToIntger(BigDecimal bigDecimal){
Integer integer = new Integer(0);
if(bigDecimal != null){
integer = bigDecimal.intValue();
}
return integer;
}
}
package com.erry.iclear.dateInterface.util;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringUtil {
/**
* 正则表达式:验证邮箱
*/
private static final String REGEX_EMAIL = "^([a-z0-9A-Z_]+[-|\\.]?)+[a-z0-9A-Z_]@([a-z0-9A-Z_]+(-[a-z0-9A-Z_]+)?\\.)+[a-zA-Z_]{2,}$";
/**
* 正则表达式:验证数字
*/
private static final String REGEX_NUBMER = "\\d+\\.\\d+$|-\\d+\\.\\d+$";
/**
* 判断字符串是否为空
*
* @param src
* @return
*/
public static boolean isEmpty(String src) {
return src == null || "".equals(src.trim());
}
/**
* 判断字符串不为空
*
* @param src
* @return
*/
public static boolean isNotEmpty(String src) {
return !isEmpty(src);
}
public static String toStringExcludeNull(Object obj) {
return obj == null ? "" : obj.toString();
}
/**
* 判断字符串是否为空
*
* @param src
* @return
*/
public static boolean isEmptyWithTrim(String src) {
return src == null || "".equals(src.trim());
}
/**
* 将字符串前补0到指定长度
*
* @param value
* @param length
* @return
*/
public static String fillZero(String value, int length) {
if (value == null) {
return null;
} else {
while (value.length() < length) {
value = "0" + value;
}
}
return value;
}
/**
* 截取指定长度的字符串
*
* @param str
* @param length
* @return
*/
public static String truncate(String str, int length) {
if (!isEmpty(str) && str.length() > length) {
return str.substring(0, length);
}
return str;
}
/**
* 将首字母大写
*
* @param str
* @return
*/
public static String upcaseFirstLetter(String str) {
if (str == null) {
return null;
}
String firstChar = str.substring(0, 1);
return firstChar.toUpperCase() + str.substring(1, str.length());
}
/**
* 按指定长度format数字long
*
* @param num
* @param length
* @return
*/
public static String formatLong(long num, int length) {
String number = Long.toString(num);
while (number.length() < length) {
number = "0" + number;
}
return number;
}
/**
* 判断字符串是否为半角英文或数字
*
* @param str
* @return
*/
public static boolean isAllHalfWidth(String str) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
int ascii = chars[i];
if ((ascii >= 48 && ascii <= 57) //0-9
|| (ascii >= 65 && ascii <= 90) //A-Z
|| (ascii >= 97 && ascii <= 122)) { //a-z
} else {
return false;
}
}
return true;
}
/**
* 判断字符串是否整数
*
* @param str
* @return
*/
public static boolean isNum(String str) {
if (StringUtil.isEmptyWithTrim(str)) {
return false;
}
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
int ascii = chars[i];
if ((ascii >= 48 && ascii <= 57)) //0-9)
{
} else {
return false;
}
}
return true;
}
/**
* 判断字符串是否小数
*
* @param str
* @return
*/
public static boolean isNumeric(String str) {
Pattern pattern = Pattern.compile(REGEX_NUBMER);
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
public static String toString(String str) {
return str == null ? "" : str;
}
public static String toString(Object obj) {
return obj == null ? "" : obj.toString();
}
/**
* 将字符串数组按指定分隔符转为字符串
*
* @param arr
* @param seperator
* @return
*/
public static String convertArrayToString(String[] arr, String seperator) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < arr.length; i++) {
sb.append(seperator + arr[i]);
}
if (sb.length() > 0) {
sb.deleteCharAt(0);
}
return sb.toString();
}
/**
* Return the string of exception
*
* @param t
* @return
* @throws IOException
*/
public static String exceptionToString(Throwable t) throws IOException {
if (t == null) {
return null;
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
t.printStackTrace(new PrintStream(baos));
} finally {
baos.close();
}
String sb = baos.toString();
if (sb.length() > 5000) {
return sb.substring(0, 5000);
}
return sb;
}
/**
* 将字符串按指定的分隔符分隔成数组
*
* @param str
* @param separator
* @return
*/
public static String[] split(String str, String separator) {
return StringUtils.split(str, separator);
}
/**
* 获取字符串被特定字符分割后的最后一个元素
*/
public static String getLastSperator(String str, String sperator) {
String[] ss = split(str, sperator);
return ss[ss.length - 1];
}
/**
* 判断传入的字符串是否可以被解析为数字
*/
public static boolean isNumberString(String s) {
try {
if (isEmptyWithTrim(s) || s == null || "null".equals(s)) {
return true;
}
Double.valueOf(s);
return true;
} catch (NumberFormatException e) {
return false;
}
}
public static String cutLastSperator(String s, String sperator) {
return s.substring(0, s.length() - getLastSperator(s, sperator).length() - sperator.length());
}
/**
* 截取字符串中以除某个字符串结尾的所有字符
*/
public static String cutSperatorLast(String s, String sperator) {
if (s == null || s.length() == 0) {
return s;
}
if (s.substring(s.length() - sperator.length()).equals(sperator)) {
return cutSperatorLast(s.substring(0, s.length() - 1), sperator);
}
return s;
}
public static String toUtf8String(String s) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 0 && c <= 255) {
sb.append(c);
} else {
byte[] b;
try {
b = Character.toString(c).getBytes("utf-8");
} catch (Exception ex) {
ex.printStackTrace();
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0) {
k += 256;
}
sb.append("%" + Integer.toHexString(k).toUpperCase());
}
}
}
return sb.toString();
}
/**
* 根据不同浏览器将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名.
*
* @param s 原文件名
* @return 重新编码后的文件名
*/
public static String toUtf8String(HttpServletRequest request, String s) {
String agent = request.getHeader("User-Agent");
try {
boolean isFireFox = (agent != null && agent.toLowerCase().indexOf("firefox") != -1);
if (isFireFox) {
// s = new String(s.getBytes("UTF-8"), "ISO8859-1");
} else {
s = StringUtil.toUtf8String(s);
if ((agent != null && agent.indexOf("MSIE") != -1)) {
if (s.length() > 150) {
// 根据request的locale 得出可能的编码
s = new String(s.getBytes("UTF-8"), "ISO8859-1");
}
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return s;
}
/**
* 把Json字符串中属性值为空字符串的值替换成null
* 例如:"bespeakTakeTime": "", 替换成 "bespeakTakeTime": null,
*
* @param sourceString
* @param properties
* @return
*/
public static String replaceByProperties(String sourceString, String properties) {
String targetString = "";
String[] stringArray = properties.split(",");
for (int i = 0; i < stringArray.length; i++) {
String s = stringArray[i];
String sourceSubStr = "\"" + s + "\":\"\",";
String targetSubStr = "\"" + s + "\": null,";
targetString = sourceString.replace(sourceSubStr, targetSubStr);
}
return targetString;
}
/**
* 把String List转成逗号分隔的String
*
* @param stringList
* @return
*/
public static String listToString(List<String> stringList) {
if (stringList == null) {
return null;
}
StringBuilder result = new StringBuilder();
boolean flag = false;
for (String string : stringList) {
if (flag) {
result.append(",");
} else {
flag = true;
}
result.append(string);
}
return result.toString();
}
/**
* 校验邮箱
*
* @param email
* @return 校验通过返回true,否则返回false
*/
public static boolean isEmail(String email) {
return Pattern.matches(REGEX_EMAIL, email);
}
/**
* 校验邮箱
*
* @param emailMulti
* @return 逗号分隔的多个邮件地址都校验通过返回true,否则返回false
*/
public static boolean isEmailMulti(String emailMulti) {
String[] emailAttr = emailMulti.split(",");
boolean isEmail = true;
for (String email : emailAttr) {
if (!isEmail(email)) {
isEmail = false;
}
}
return isEmail;
}
/**
* List<Long> 转String 用于sql
*
* @param lists
* @return
*/
public static String listLongToStr(List<Long> lists) {
StringBuffer str = new StringBuffer("");
for (Long value : lists) {
str.append(value).append(",");
}
return str.toString().substring(0, str.toString().lastIndexOf(","));
}
/**
* List<Integer> 转String 用于sql
*
* @param lists
* @return
*/
public String listIntegerToStr(List<Integer> lists) {
StringBuffer str = new StringBuffer("");
for (Integer value : lists) {
str.append(value).append(",");
}
return str.toString().substring(0, str.toString().lastIndexOf(","));
}
/**
* List<String> 转String 用于sql
*
* @param lists
* @return
*/
public String listStringToStr(List<String> lists) {
StringBuffer srt = new StringBuffer("");
for (String value : lists) {
srt.append("'").append(value).append("'").append(",");
}
return srt.toString().substring(0, srt.toString().lastIndexOf(","));
}
public static String getRandomString(int length) {
return RandomStringUtils.randomAlphanumeric(length);
}
public static String[] splitForList(String str, String regex) {
ArrayList resultStr = new ArrayList();
if (!isEmptyWithTrim(str)) {
String[] strs = str.split(regex);
for (String s : strs) {
if (!isEmptyWithTrim(s)) {
resultStr.add(s.trim());
}
}
}
return (String[]) resultStr.toArray(new String[resultStr.size()]);
}
/**
* 获取固定字节长度字符串
* @param original
* @param length
* @return
*/
public static String formatStringLength(String original, int length) {
if (original == null) {
original = "";
}
int newLength = original.getBytes().length;
while (newLength > length) {
original = original.substring(0,original.length() - 1);
newLength = original.getBytes().length;
}
return original;
}
/**
* 获取固定字节长度字符串
* @param original
* @param length
* @return
*/
public static String formatStringLength(String original, long length) {
if (original == null) {
original = "";
}
long newLength = original.getBytes().length;
while (newLength > length) {
original = original.substring(0, original.length() - 1);
newLength = original.getBytes().length;
}
return original;
}
public static String autoCompletionStringAfterByZero(String _orig, long _length) {
if (_orig == null) {
_orig = "";
}
while (_orig.length() < _length) {
_orig += "0";
}
return _orig;
}
public static String formatInteger(int num, int length) {
String number = (new Integer(num)).toString();
while (number.length() < length) {
number = "0" + number;
}
return number;
}
/**
* String List 转 String[]
*
* @param strList
* @return
*/
public static String[] listRotationArray(List<String> strList) {
if (strList == null || strList.size() == 0) {
return new String[]{""};
}
return (String[]) strList.toArray(new String[strList.size()]);
}
//如果不足9位置,那么前面补充0
private String strFormat(int length, String strOrign, boolean isAfter, String str) {
if (strOrign == null) {
strOrign = "000000000";
} else {
strOrign = strOrign.trim();
}
while (strOrign.getBytes().length > length) {
strOrign = strOrign.substring(0, strOrign.length() - 1);
}
//不够9为前面补0
while (strOrign.getBytes().length < 9) {
strOrign = "0" + strOrign;
}
//9位之后补空格
while (strOrign.getBytes().length < length) {
strOrign += " ";
}
return strOrign;
}
/**
* 后补空格
*
* @param length
* @param strOrign
* @return
*/
public static String strFormat(int length, String strOrign) {
if (strOrign == null) {
strOrign = " ";
} else {
strOrign = strOrign.trim();
}
while (strOrign.getBytes().length > length) {
strOrign = strOrign.substring(0, strOrign.length() - 1);
}
//9位之后补空格
while (strOrign.getBytes().length < length) {
strOrign += " ";
}
return strOrign;
}
/**
* Java实现按字节长度截取字符串
* @param s
* @param length
* @return
* @throws Exception
*/
public static String bSubstring(String s, int length) throws Exception {
byte[] bytes = s.getBytes("Unicode");
int n = 0; // 表示当前的字节数
int i = 2; // 要截取的字节数,从第3个字节开始
for (; i < bytes.length && n < length; i++) {
// 奇数位置,如3、5、7等,为UCS2编码中两个字节的第二个字节
if (i % 2 == 1) {
n++; // 在UCS2第二个字节时n加1
} else {
// 当UCS2编码的第一个字节不等于0时,该UCS2字符为汉字,一个汉字算两个字节
if (bytes[i] != 0) {
n++;
}
}
}
// 如果i为奇数时,处理成偶数
if (i % 2 == 1) {
// 该UCS2字符是汉字时,去掉这个截一半的汉字
if (bytes[i - 1] != 0) {
i = i - 1;
} else {
// 该UCS2字符是字母或数字,则保留该字符
i = i + 1;
}
}
return new String(bytes, 0, i, "Unicode");
}
/**
* 获取固定字节长度字符串
* @param length
* @param strOrign
* @param strFix
* @return
*/
public static String strLengthFormatNew(int length, String strOrign, String strFix) {
strOrign = strOrign == null ? strFix : strOrign.trim();
StringBuffer resultStrBuffer = null;
if (strOrign.getBytes().length > length) {
strOrign = strOrign.substring(0, length);
while (resultStrBuffer.toString().getBytes().length > length) {
// strOrign = strOrign.substring(0, strOrign.length() - 1);
strOrign = strOrign.substring(0, length);
}
resultStrBuffer = new StringBuffer(strOrign);
} else {
resultStrBuffer = new StringBuffer(strOrign);
//9位之后补空格
while (resultStrBuffer.toString().getBytes().length < length) {
resultStrBuffer.append(strFix);
}
}
return resultStrBuffer.toString();
}
/**
* @param length
* @param strOrign
* @return
*/
@Deprecated
public static String strLengthFormat(int length, String strOrign, String strFix) {
if (strOrign == null) {
strOrign = " ";
} else {
strOrign = strOrign.trim();
}
while (strOrign.getBytes().length > length) {
// strOrign = strOrign.substring(0, strOrign.length() - 1);
strOrign = strOrign.substring(0, length);
}
//9位之后补空格
while (strOrign.getBytes().length < length) {
strOrign += strFix;
}
return strOrign;
}
/**
* 前面补数据
*
* @param length
* @param strOrign
* @return
*/
public static String strFrontFormat(int length, String strOrign, String strFix) {
if (strOrign == null) {
strOrign = " ";
} else {
strOrign = strOrign.trim();
}
while (strOrign.getBytes().length > length) {
// strOrign = strOrign.substring(0, strOrign.length() - 1);
strOrign = strOrign.substring(0, length);
}
//前面补零
while (strOrign.getBytes().length < length) {
strOrign = strFix + strOrign;
}
return strOrign;
}
/**
* 前面补数据
*
* @param length
* @param strOrign
* @return
*/
public static String strFrontFormatNew(int length, String strOrign, String strFix) {
strOrign = strOrign == null ? strFix : strOrign.trim();
if (strOrign == null) {
strOrign = " ";
} else {
strOrign = strOrign.trim();
}
while (strOrign.getBytes().length > length) {
// strOrign = strOrign.substring(0, strOrign.length() - 1);
strOrign = strOrign.substring(0, length);
}
//前面补零
while (strOrign.getBytes().length < length) {
strOrign = strFix + strOrign;
}
return strOrign;
}
/**
* sql in查询条件数量分割
*
* @param orignList
* @param splitCount
* @return
*/
public static List<List> listSplit(List orignList, int splitCount) {
List<List> resultList = new ArrayList<>();
if (orignList == null || orignList.isEmpty()) {
resultList = null;
} else {
int orignListSize = orignList.size();
int cycleTimes = (orignListSize + splitCount - 1) / splitCount;
for (int i = 1; i <= cycleTimes; i++) {
List list = orignList.subList(splitCount * (i - 1), (splitCount * i > orignListSize ? orignListSize : splitCount * i));
resultList.add(list);
}
}
return resultList;
}
public static String valueOf(Object obj) {
return (obj == null || obj.toString().trim().equals("")) ? null : obj.toString();
}
public static String formatStringLaterSpace(String original, long length) {
String result = "";
long bytes = 0;
int index = 0;
while (bytes < length) {
String s = " ";
if (index < original.length()) {
s = original.substring(index, index + 1);
}
bytes += s.getBytes().length;
if (bytes > length) {
for (int i = 0; i < bytes - length; i++) {
result += " ";
}
} else {
result += s;
}
index++;
}
return result;
}
/**
* BigDecimal 格式化
* @param value
* @param wholeLength --整数位
* @param decimalLength --小数位
* @return
*/
public static String formatBigDecimal(BigDecimal value, long wholeLength, long decimalLength){
String str = "" + value;
if(!str.contains(".")){
str = str + ".0" ;
if(str.length() == 2){
str = "0" + str;
}
}
String[]arrays = str.split("\\.");
//整数位格式化
while (arrays[0].length() < wholeLength) {
arrays[0] = "0" + arrays[0];
}
//小数位格式化
while (arrays[1].length() < decimalLength) {
arrays[1] = arrays[1] + "0";
}
return arrays[0] + "." + arrays[1];
}
/**
* BigDecimal 格式化
* @param value
* @param type --小数位 舍入方式
* @param wholeLength --整数位
* @param decimalLength --小数位
* @return
*/
public static String formatBigDecimalNoPoint(BigDecimal value, int type,int wholeLength, int decimalLength){
String str = value.setScale(decimalLength,type).toString();
String[]arrays = str.split("\\.");
//整数位格式化
while (arrays[0].length() < wholeLength) {
arrays[0] = "0" + arrays[0];
}
//小数位格式化
while (arrays[1].length() < decimalLength) {
arrays[1] = arrays[1] + "0";
}
return arrays[0] + arrays[1];
}
/**
* BigDecimal 格式化
* @param value
* @param decimalLength --小数位
* @return
*/
public static String formatBigDecimalNew(BigDecimal value, int decimalLength){
return formatBigDecimalNew(value,BigDecimal.ROUND_HALF_UP,19, decimalLength);
}
/**
* BigDecimal 格式化
* @param value
* @param roundHalfType --小数位 舍入方式
* @param wholeLength --整数位
* @param decimalLength --小数位
* @return
*/
public static String formatBigDecimalNew(BigDecimal value, int roundHalfType,int wholeLength, int decimalLength){
String result = "";
if(value != null) {
String valueNewStr = value.setScale(decimalLength,roundHalfType).toString();
if(valueNewStr.length() > wholeLength){
String[] valueNewArry = valueNewStr.split("\\.");
if(valueNewArry[0].length() > wholeLength){
result = valueNewArry[0].substring(wholeLength - 1) + "." + valueNewArry[1];
} else {
result = valueNewStr;
}
} else {
result = valueNewStr;
}
}
return result;
}
public static void main(String[] args){
BigDecimal aa = new BigDecimal("111.9992440000600000");
String valueNew = StringUtil.formatBigDecimalNew(aa,BigDecimal.ROUND_HALF_UP,3,5);
String valueNew1 = StringUtil.formatBigDecimalNew(null,5);
System.out.println(valueNew);
System.out.println(valueNew1);
}
}
......@@ -111,7 +111,7 @@ public class ChmConsignmentServiceTest extends IClearApiApplicationTests {
mawb.setFeeCurr("USD");
mawb.setFeeMark("3");
mawb.setFeeRate(BigDecimal.valueOf(100.58));
mawb.setGrossWet(500);
mawb.setGrossWet(BigDecimal.valueOf(500));
mawb.setIePort("0101");
mawb.setInputerName("");
mawb.setInsurCurr("MOP");
......
......@@ -148,7 +148,7 @@ public class HttpClientTest {
mawb.setFeeCurr("USD");
mawb.setFeeMark("3");
mawb.setFeeRate(BigDecimal.valueOf(100.58));
mawb.setGrossWet(500);
mawb.setGrossWet(BigDecimal.valueOf(500));
mawb.setIePort("0101");
mawb.setInputerName("");
mawb.setInsurCurr("MOP");
......