作者 朱兆平

解析PFFM优化

... ... @@ -11,13 +11,15 @@ import com.example.demo.util.XML.XML2ENTITY;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class XmlToMapDemo {
protected static final Logger logger = LoggerFactory.getLogger(XmlToMapDemo.class);
public static void main(String[] args) throws IOException,
DocumentException {
final Logger logger = LoggerFactory.getLogger(XmlToMapDemo.class);
// FileInputStream fis = new FileInputStream("d://a.xml");
// byte[] b = new byte[fis.available()];
... ... @@ -1176,43 +1178,67 @@ public class XmlToMapDemo {
Map<String, Object> map = XML2ENTITY.Dom2Map(doc);
// 头部解析
Map metamap = (Map) map.get("META");
String SEDR = (String) metamap.get("SNDR");
logger.info(SEDR);
//报体解析入口
Map LogisticsTransportManifest = (Map) map.get("LogisticsTransportManifest");
List<Map> event = (List<Map>) LogisticsTransportManifest.get("ArrivalEvent");
for (Map everyEvent : event){
String ScheduledArrivalOccurrenceDateTime = (String) everyEvent.get("ScheduledArrivalOccurrenceDateTime");
String FirstArrivalCountryID = ((Map) everyEvent.get("OccurrenceArrivalLocation")).get("FirstArrivalCountryID").toString();
//LogisticsTransportMovement 航班节点解析入口
Map Map_LogisticsTransportMovement = (Map) LogisticsTransportManifest.get("LogisticsTransportMovement");
String StageCode = Map_LogisticsTransportMovement.get("StageCode").toString();//航班号/航班日期
Object AssociatedTransportCargoList = everyEvent.get("AssociatedTransportCargo");
//ArrivalEvent多节点解析入口
Object Obj_ArrivalEvent = LogisticsTransportManifest.get("ArrivalEvent");
if (Obj_ArrivalEvent.getClass().getName().equals("java.util.ArrayList")){//多个ArrivalEvent,多个装载目的地
List<Map> event = (List<Map>) LogisticsTransportManifest.get("ArrivalEvent");
for (Map everyEvent : event){
ArrivalEventHandle(everyEvent);
}
}else if (Obj_ArrivalEvent.getClass().getName().equals("java.util.HashMap")){ //一个报文,一个ArrivalEvent代表装载只有一个目的地
Map map_ArrivalEvent = (Map) LogisticsTransportManifest.get("ArrivalEvent");
ArrivalEventHandle(map_ArrivalEvent);
}
if (AssociatedTransportCargoList.getClass().getName().equals("java.util.ArrayList")){ //这里是为了判断 只发一票装载的情况,实际上上面event节点也要这样判断返回的是LIST还是MAP
List<Map> AssociatedTransportCargo = (List<Map>) everyEvent.get("AssociatedTransportCargo");
for(Map AssociatedTransportCargoMap : AssociatedTransportCargo){
String uldType = AssociatedTransportCargoMap.get("TypeCode").toString();
String uldNumber = ((Map) AssociatedTransportCargoMap.get("UtilizedUnitLoadTransportEquipment")).get("ID").toString();
String PositioningEvent_OccurrencePositioningLocation_ID = ((Map)(((Map)(((Map) AssociatedTransportCargoMap.get("UtilizedUnitLoadTransportEquipment")).get("PositioningEvent"))).get("OccurrencePositioningLocation"))).get("ID").toString();
Object IncludedMasterConsignmentList = AssociatedTransportCargoMap.get("IncludedMasterConsignment");
if (IncludedMasterConsignmentList.getClass().getName().equals("java.util.ArrayList")){
}else if (IncludedMasterConsignmentList.getClass().getName().equals("java.util.HashMap")){ //这里为MAP代表一个板里面装一件货
Map IncludedMasterConsignmentMap = (Map)IncludedMasterConsignmentList;
String awbNumber = ((Map)IncludedMasterConsignmentMap.get("TransportContractDocument")).get("ID").toString();
logger.info(awbNumber);
}
}
}else if (AssociatedTransportCargoList.getClass().getName().equals("java.util.HashMap")){//是MAP单取下面节点就行,只发一票装载 报文中是一个航班,一个板箱,一个运单
System.out.println(map.toString());
}
System.out.println("Use time:"+(System.currentTimeMillis()-beginTime));
}
}
System.out.println(map.toString());
static public void ArrivalEventHandle(Map ArrivalEvent){
Map Map_ArrivalEvent = ArrivalEvent;
String ScheduledArrivalOccurrenceDateTime = (String) Map_ArrivalEvent.get("ScheduledArrivalOccurrenceDateTime");
String FirstArrivalCountryID = ((Map) Map_ArrivalEvent.get("OccurrenceArrivalLocation")).get("FirstArrivalCountryID").toString();
System.out.println("Use time:"+(System.currentTimeMillis()-beginTime));
Object AssociatedTransportCargoList = Map_ArrivalEvent.get("AssociatedTransportCargo");
if (AssociatedTransportCargoList.getClass().getName().equals("java.util.ArrayList")){ //这里是为了判断 只发一票装载的情况,实际上上面event节点也要这样判断返回的是LIST还是MAP
List<Map> AssociatedTransportCargo = (List<Map>) Map_ArrivalEvent.get("AssociatedTransportCargo");
for(Map AssociatedTransportCargoMap : AssociatedTransportCargo){
String uldType = AssociatedTransportCargoMap.get("TypeCode").toString();
String uldNumber = ((Map) AssociatedTransportCargoMap.get("UtilizedUnitLoadTransportEquipment")).get("ID").toString();
String PositioningEvent_OccurrencePositioningLocation_ID = ((Map)(((Map)(((Map) AssociatedTransportCargoMap.get("UtilizedUnitLoadTransportEquipment")).get("PositioningEvent"))).get("OccurrencePositioningLocation"))).get("ID").toString();
Object IncludedMasterConsignmentList = AssociatedTransportCargoMap.get("IncludedMasterConsignment");
if (IncludedMasterConsignmentList.getClass().getName().equals("java.util.ArrayList")){
List<Map> IncludedMasterConsignmentMaps = (List<Map>) AssociatedTransportCargoMap.get("IncludedMasterConsignment");
for (Map IncludedMasterConsignment : IncludedMasterConsignmentMaps){
String awbNumber = ((Map)IncludedMasterConsignment.get("TransportContractDocument")).get("ID").toString();
logger.info("一板多运单-"+awbNumber);
}
}else if (IncludedMasterConsignmentList.getClass().getName().equals("java.util.HashMap")){ //这里为MAP代表一个板里面装一件货
Map IncludedMasterConsignmentMap = (Map)IncludedMasterConsignmentList;
String awbNumber = ((Map)IncludedMasterConsignmentMap.get("TransportContractDocument")).get("ID").toString();
logger.info(awbNumber);
}
}
}else if (AssociatedTransportCargoList.getClass().getName().equals("java.util.HashMap")){//是MAP单取下面节点就行,只发一票装载 报文中是一个航班,一个板箱,一个运单
}
}
}
\ No newline at end of file
... ...