FWBDemo.java 11.4 KB
package com.example.demo;

import com.example.demo.handle.nms.FZE_FOH_Handle;
import com.example.demo.model.T_TXD_FWB;
import com.example.demo.model.T_TXD_FWBPARTY;
import com.example.demo.service.T_TXD_FWB_Service;
import com.example.demo.util.XML.XML2ENTITY;
import com.example.demo.util.XML.XMLXPath;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Component
public class FWBDemo {
    protected static final Logger logger = LoggerFactory.getLogger(FWBDemo.class);

    @Autowired
    private static T_TXD_FWB_Service fwb_service;


    public static void main(String[] args) throws IOException,
            DocumentException {


//        FileInputStream fis = new FileInputStream("d://a.xml");
//        byte[] b = new byte[fis.available()];
//        fis.read(b);
//        String str = new String(b);

        String xml = "<MSG>\n" +
                "\t<META>\n" +
                "\t\t<SNDR>CFPS</SNDR>\n" +
                "\t\t<RCVR/>\n" +
                "\t\t<DDTM>20170714162918</DDTM>\n" +
                "\t\t<TYPE>ICUSTOMS</TYPE>\n" +
                "\t\t<STYP>FZE_FOH</STYP>\n" +
                "\t\t<SEQN>51077716</SEQN>\n" +
                "\t</META>\n" +
                "\t<ConsignmentStatus>\n" +
                "\t\t<MasterConsignment>\n" +
                "\t\t\t<TransportContractDocument>\n" +
                "\t\t\t\t<ID>851-09067704</ID>\n" +
                "\t\t\t\t<Name>Air Waybill</Name>\n" +
                "\t\t\t\t<TypeCode>741</TypeCode>\n" +
                "\t\t\t</TransportContractDocument>\n" +
                "\t\t\t<OriginLocation>\n" +
                "\t\t\t\t<ID>CGO</ID>\n" +
                "\t\t\t\t<Name>ZHENGZHOU</Name>\n" +
                "\t\t\t</OriginLocation>\n" +
                "\t\t\t<FinalDestinationLocation>\n" +
                "\t\t\t\t<ID>DAC</ID>\n" +
                "\t\t\t\t<Name>DHAKA</Name>\n" +
                "\t\t\t</FinalDestinationLocation>\n" +
                "\t\t\t<ReportedStatus>\n" +
                "\t\t\t\t<ReasonCode>FOH</ReasonCode>\n" +
                "\t\t\t\t<EventTime>\n" +
                "\t\t\t\t\t<OccurrenceDateTime>2017-07-13T19:25:55+08:00</OccurrenceDateTime>\n" +
                "\t\t\t\t\t<DateTimeTypeCode>Actual</DateTimeTypeCode>\n" +
                "\t\t\t\t</EventTime>\n" +
                "\t\t\t\t<SpecifiedLocation>\n" +
                "\t\t\t\t\t<ID>CGO</ID>\n" +
                "\t\t\t\t\t<Name/>\n" +
                "\t\t\t\t\t<TypeCode>Airport</TypeCode>\n" +
                "\t\t\t\t</SpecifiedLocation>\n" +
                "\t\t\t\t<AssociatedStatusConsignment>\n" +
                "\t\t\t\t\t<GrossWeightMeasure unitCode=\"KGM\">811</GrossWeightMeasure>\n" +
                "\t\t\t\t\t<GrossVolumeMeasure unitCode=\"MTQ\">0</GrossVolumeMeasure>\n" +
                "\t\t\t\t\t<PieceQuantity>27</PieceQuantity>\n" +
                "\t\t\t\t\t<TransportSplitDescription>T</TransportSplitDescription>\n" +
                "\t\t\t\t\t<SpecifiedLogisticsTransportMovement>\n" +
                "\t\t\t\t\t\t<ID>HX9366</ID>\n" +
                "\t\t\t\t\t\t<DepartureEvent>\n" +
                "\t\t\t\t\t\t\t<DepartureOccurrenceDateTime>2017-07-15T00:00:00+08:00</DepartureOccurrenceDateTime>\n" +
                "\t\t\t\t\t\t\t<DepartureDateTimeTypeCode>Schedual</DepartureDateTimeTypeCode>\n" +
                "\t\t\t\t\t\t</DepartureEvent>\n" +
                "\t\t\t\t\t</SpecifiedLogisticsTransportMovement>\n" +
                "\t\t\t\t\t<RecievedFromParty>\n" +
                "\t\t\t\t\t\t<Name>ZHANGJIAGANG RONGYUE IM EXPORT CO</Name>\n" +
                "\t\t\t\t\t\t<PostalStructuredAddress>\n" +
                "\t\t\t\t\t\t\t<StreetName>SHAZHOU WEST ROAD ZHANGJIAGANG CITY</StreetName>\n" +
                "\t\t\t\t\t\t</PostalStructuredAddress>\n" +
                "\t\t\t\t\t\t<DefinedTradeContact>\n" +
                "\t\t\t\t\t\t\t<DirectTelephoneCommunication>\n" +
                "\t\t\t\t\t\t\t\t<CompleteNumber/>\n" +
                "\t\t\t\t\t\t\t</DirectTelephoneCommunication>\n" +
                "\t\t\t\t\t\t</DefinedTradeContact>\n" +
                "\t\t\t\t\t</RecievedFromParty>\n" +
                "\t\t\t\t\t<IncludedMasterConsignmentItem>\n" +
                "\t\t\t\t\t\t<TypeCode listAgencyID=\"1\">FABRIC</TypeCode>\n" +
                "\t\t\t\t\t</IncludedMasterConsignmentItem>\n" +
                "\t\t\t\t\t<IncludedCustomsNote>\n" +
                "\t\t\t\t\t\t<ContentCode>CD</ContentCode>\n" +
                "\t\t\t\t\t\t<Content>P-CGOXH-ICUSTOMS0000</Content>\n" +
                "\t\t\t\t\t\t<SubjectCode/>\n" +
                "\t\t\t\t\t\t<CountryID/>\n" +
                "\t\t\t\t\t\t<UtilizedUnitLoadTransportEquipment/>\n" +
                "\t\t\t\t\t\t<IncludedHouseConsignment>\n" +
                "\t\t\t\t\t\t\t<GrossWeightMeasure unitCode=\"KGM\">811</GrossWeightMeasure>\n" +
                "\t\t\t\t\t\t\t<TotalGrossWeightMeasure unitCode=\"KGM\">811</TotalGrossWeightMeasure>\n" +
                "\t\t\t\t\t\t\t<PieceQuantity>27</PieceQuantity>\n" +
                "\t\t\t\t\t\t\t<TotalPieceQuantity>27</TotalPieceQuantity>\n" +
                "\t\t\t\t\t\t\t<TransportSplitDescription>T</TransportSplitDescription>\n" +
                "\t\t\t\t\t\t\t<TransportContractDocument>\n" +
                "\t\t\t\t\t\t\t\t<ID>WIN70715739</ID>\n" +
                "\t\t\t\t\t\t\t\t<TypeCode>703</TypeCode>\n" +
                "\t\t\t\t\t\t\t</TransportContractDocument>\n" +
                "\t\t\t\t\t\t</IncludedHouseConsignment>\n" +
                "\t\t\t\t\t</IncludedCustomsNote>\n" +
                "\t\t\t\t</AssociatedStatusConsignment>\n" +
                "\t\t\t</ReportedStatus>\n" +
                "\t\t</MasterConsignment>\n" +
                "\t</ConsignmentStatus>\n" +
                "</MSG>";

        Document doc = DocumentHelper.parseText(xml);

        try{
            FZE_FOH_Handle fze_foh_handle = new FZE_FOH_Handle();
            fze_foh_handle.handle(doc);
        }catch (Exception e){

        }


//        String currencyID =  XMLXPath.getSinglePathProperty(doc,"//MSG/MasterConsignment/DeclaredValueForCarriageAmount/@currencyID");

        String measure = XMLXPath.getSingleValueByPath(doc,"//MSG/ConsignmentStatus/MasterConsignment/GrossWeightMeasure/@unitCode");
        String measure1 = XMLXPath.getSingleValueByPath(doc,"//MSG/ConsignmentStatus/MasterConsignment/GrossWeightMeasure");

        long beginTime = System.currentTimeMillis();

        try{
            XML2ENTITY xml2ENTITY = new XML2ENTITY();
            Map<String, Object> map = xml2ENTITY.Dom2Map_propety(doc);
            T_TXD_FWB fwb= new T_TXD_FWB();
            //fwb.setFid(getBigDecimal(1));
            fwb.setMessageBakId(getBigDecimal(1));

            //        头部解析
            Map metamap = (Map) map.get("META");
            String SEDR = (String) metamap.get("SNDR");


            //报体解析入口

            Map MasterConsignment = (Map) map.get("MasterConsignment");
            fwb.setId(MasterConsignment.get("ID").toString());
            fwb.setTypecode(MasterConsignment.get("TypeCode").toString());
            fwb.setNilcarriagevaluecarriage(MasterConsignment.get("NilCarriageValueIndicator").toString());
            fwb.setDeclaredvalue(getBigDecimal(MasterConsignment.get("DeclaredValueForCarriageAmount")));

            //发货人节点
            Map consiger = (Map) MasterConsignment.get("ConsignorParty");
            fwb.setCrpPrimaryid(consiger.get("PrimaryID").toString());
            fwb.setCrpName(consiger.get("Name").toString());
            fwb.setCrpAccountid(consiger.get("AccountID").toString());
            fwb.setPsaStreetname(((Map)consiger.get("PostalStructuredAddress")).get("StreetName").toString()); //这个是不是发货人节点名称  库里面没字段注释 插入的时候要核实
            fwb.setPsaCityname(((Map)consiger.get("PostalStructuredAddress")).get("CityName").toString());
            fwb.setPsaCountryid(((Map)consiger.get("PostalStructuredAddress")).get("CountryID").toString());
            fwb.setPsaSpecifiedaddress(((Map)consiger.get("PostalStructuredAddress")).get("SpecifiedAddressLocation").toString());

            //收货人节点

            //航班节点,表中的航班字段在哪里没找到
            Map flight = (Map) MasterConsignment.get("SpecifiedLogisticsTransportMovement");
            String flightNo = flight.get("ID").toString();

            String flightDevTime = ((Map)flight.get("DepartureEvent")).get("ScheduledOccurrenceDateTime").toString();
            ZonedDateTime depZoneTime = ZonedDateTime.parse(flightDevTime);
            Date flightDate = Date.from(depZoneTime.toInstant()); //这个是入库航班日期格式

            //货物节点

            //插入主数据表
            int fid = fwb_service.insert(fwb);

            //处理字表
            //重复的AssociatedParty节点
            Object obj_AssociatedParty = MasterConsignment.get("AssociatedParty");
            if (obj_AssociatedParty.getClass().getName().equals("java.util.ArrayList")){//多个AssociatedParty
                List<Map> list_AssociatedParty = (List<Map>) MasterConsignment.get("AssociatedParty");
                for (Map AssociatedParty : list_AssociatedParty){
                    AssociatedPartyHandle(AssociatedParty);
                }
            }else if (obj_AssociatedParty.getClass().getName().equals("java.util.HashMap")){ //一个报文,一个ArrivalEvent代表装载只有一个目的地
                Map map_AssociatedParty = (Map) MasterConsignment.get("AssociatedParty");
                AssociatedPartyHandle(map_AssociatedParty);
            }

            //重复的ReportedStatus节点




            System.out.println(map.toString());

            System.out.println("Use time:"+(System.currentTimeMillis()-beginTime));

        }catch (Exception e){
            logger.info("报文解析异常"+e.toString()+"\n报文内容"+doc.asXML());
        }


    }


    static public void AssociatedPartyHandle(Map AssociatedParty){ //入库AssociatedParty实体处理
        T_TXD_FWBPARTY assParty = new T_TXD_FWBPARTY();
        assParty.setTxdFwbId(getBigDecimal(1));

    }


    /**
     * Object转BigDecimal类型-MRZ-2018年5月14日09:56:26
     *
     * @param value 要转的object类型
     * @return 转成的BigDecimal类型数据
     */
    public static BigDecimal getBigDecimal(Object value) {
        BigDecimal ret = null;
        if (value != null) {
            if (value instanceof BigDecimal) {
                ret = (BigDecimal) value;
            } else if (value instanceof String) {
                ret = new BigDecimal((String) value);
            } else if (value instanceof BigInteger) {
                ret = new BigDecimal((BigInteger) value);
            } else if (value instanceof Number) {
                ret = new BigDecimal(((Number) value).doubleValue());
            } else {
                throw new ClassCastException("Not possible to coerce [" + value + "] from class " + value.getClass() + " into a BigDecimal.");
            }
        }
        return ret;
    }

}