EAIServiceStub.java 9.38 KB
package com.sitech.ismp.coll.busi.e2e.rule;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;

import org.apache.log4j.Logger;

import com.sitech.ismp.coll.busi.e2e.domain.TbE2eCrmOrder;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eEaiOrderExcept;

public class EAIServiceStub{
	protected Logger logger = Logger.getLogger("BUSI_COLL");
	protected Logger error = Logger.getLogger("ERROR");
	
	public String invokeEai(String url,String crmId, String crmVersion){
		SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String strDate = sf.format(new Date());
		
		List<TbE2eCrmOrder> paramList = new ArrayList<TbE2eCrmOrder>();
		TbE2eCrmOrder order = new TbE2eCrmOrder();
		order.setCRM_ORDER_ID(crmId);
		order.setVERSION_NUM(crmVersion);
	
		paramList.add(order);
		
		List<TbE2eEaiOrderExcept> result = invokeEai(url, strDate, paramList);
		
		return result.get(0).getAUDIT_STATUS();
	}
	
	public List<TbE2eEaiOrderExcept> invokeEai(String url, String requestTime, List<TbE2eCrmOrder> paramList){
		if(paramList == null || paramList.size() == 0){
			return null;
		}
		Map<String, TbE2eCrmOrder> paramMap = new HashMap<String, TbE2eCrmOrder>();
		for(TbE2eCrmOrder order : paramList){
			String crmOrderId = order.getCRM_ORDER_ID();
			String crmOrderVersion = order.getVERSION_NUM();
			paramMap.put(crmOrderId + "_" + crmOrderVersion, order);
		}
		
		SOAPConnection connection = null;
		try {
			String encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
			SOAPConnectionFactory connectionFactory = SOAPConnectionFactory
					.newInstance();
			connection = connectionFactory.createConnection();
			MessageFactory messageFactory = MessageFactory.newInstance();
			SOAPMessage message = messageFactory.createMessage();
			SOAPPart soapPart = message.getSOAPPart();
			SOAPEnvelope envelope = soapPart.getEnvelope();
			envelope.addNamespaceDeclaration("m0",
					"http://server.eai.com/common");

			SOAPBody body = envelope.getBody();
			body.setEncodingStyle(encodingStyle);
			SOAPElement bodyElement = body.addChildElement(new QName(
					"http://server.eai.com/request", "object", "NS1"));
			addBodyHead(bodyElement, requestTime);
			addBodyObject(bodyElement, paramList);

			message.saveChanges();

			SOAPMessage reply = connection.call(message, url);
			reply.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "gb2312");

			return dealReault(paramMap, reply);
		} 
		catch (Exception e) {
			error.error("Exception while invokeEai.", e);
			return dealExceptReault(paramList);
		} finally {
			if (connection != null) {
				try {
					connection.close();
				} catch (SOAPException e) {
				}
			}
		}
	}
	
	/**
	 * 调用EAI实时接口出错
	 */
	private List<TbE2eEaiOrderExcept> dealExceptReault(
			List<TbE2eCrmOrder> paramList) {
		List<TbE2eEaiOrderExcept> result = new ArrayList<TbE2eEaiOrderExcept>();
		for(TbE2eCrmOrder order : paramList){
			TbE2eEaiOrderExcept except = new TbE2eEaiOrderExcept(order);
			except.setAUDIT_STATUS("调用EAI实时接口失败,订单状态未知");			
			result.add(except);
		}
		return result;
	}

	private void addBodyHead(SOAPElement bodyElement, String requestTime) throws Exception {
		
		SOAPElement m0headElement = bodyElement.addChildElement("head_object","m0");
		
		addSubElement(m0headElement, "m0", "head", "head_name", "AUDIT_FLAG", "1");
		addSubElement(m0headElement, "m0", "head", "head_name", "TRANSACTION_TYPE", "ITSM");
		addSubElement(m0headElement, "m0", "head", "head_name", "INTERFACE_TYPE", "ITSM_Order_Analysis");
		addSubElement(m0headElement, "m0", "head", "head_name", "SOURCE_ID", "ITSM");
		addSubElement(m0headElement, "m0", "head", "head_name", "TARGET_ID", "EAI");
		addSubElement(m0headElement, "m0", "head", "head_name", "ACTION_TYPE", "0");
		addSubElement(m0headElement, "m0", "head", "head_name", "CONTENT_FIELD", "order");
		addSubElement(m0headElement, "m0", "head", "head_name", "FORWARDQMName", "");
		addSubElement(m0headElement, "m0", "head", "head_name", "FORWARDQName", "");
		addSubElement(m0headElement, "m0", "head", "head_name", "FORWARD_DESTINATION", "");
		addSubElement(m0headElement, "m0", "head", "head_name", "CREATE_TIME", requestTime);
		addSubElement(m0headElement, "m0", "head", "head_name", "REQUEST_TIME", requestTime);
		addSubElement(m0headElement, "m0", "head", "head_name", "SEQ", "1");
		addSubElement(m0headElement, "m0", "head", "head_name", "REQUEST_ID", "20120512142040000001");
		addSubElement(m0headElement, "m0", "head", "head_name", "MsgId", "");
		addSubElement(m0headElement, "m0", "head", "head_name", "REQUEST_ID2", "");
		addSubElement(m0headElement, "m0", "head", "head_name", "REQUEST_ID3", "");
	}
	
	private SOAPElement addSubElement(SOAPElement fatherElement,String prefix, String name, 
			String attrName, String attrValue, String textNode) throws Exception {
		SOAPElement subElement = fatherElement.addChildElement(name,prefix);
		subElement.addTextNode(textNode);
		subElement.addAttribute(new QName(attrName), attrValue);
		return subElement;
	}
	
	private void addBodyObject(SOAPElement bodyElement, List<TbE2eCrmOrder> paramList) throws Exception {
		SOAPElement bodyObjectElement = bodyElement.addChildElement("body_object", "NS1");
		
		int i=0;
		for (TbE2eCrmOrder param : paramList) {
			String aBPOrderNumber = param.getCRM_ORDER_ID();
			String aBPRevision = param.getVERSION_NUM();
			String aBPLineNumber = "";
			
			SOAPElement subElement = addSubElement(bodyObjectElement, "NS1", "body_attr", "rec_num", String.valueOf(i+1), "");
			addSubElement(subElement, "NS1", "attr", "attr_name", "ABPOrderNumber", aBPOrderNumber);
			addSubElement(subElement, "NS1", "attr", "attr_name", "ABPRevision", aBPRevision);
			addSubElement(subElement, "NS1", "attr", "attr_name", "ABPLineNumber", aBPLineNumber);
			
			i++;
		}
		SOAPElement subElement2 = bodyObjectElement.addChildElement("Ext_attr");
		subElement2.addChildElement("NAME").addTextNode("OrderTotal");
		subElement2.addChildElement("VALUE").addTextNode(String.valueOf(paramList.size()));
	}
	
	@SuppressWarnings("unchecked")
	private List<TbE2eEaiOrderExcept> dealReault(Map<String, TbE2eCrmOrder> paramMap, SOAPMessage dataMessage) throws Exception {
		List<TbE2eEaiOrderExcept> result = new ArrayList<TbE2eEaiOrderExcept>();
 
		SOAPBody soapBody = dataMessage.getSOAPBody();
		System.out.println("==========================================================================================");
		System.out.println("soapBody.hasFault()==="+soapBody.hasFault());
		System.out.println("==========================================================================================");
		//判断是否出错
		if (!soapBody.hasFault()) {
			Iterator<SOAPElement> nS1objects = soapBody.getChildElements();
			while (nS1objects.hasNext()) {
				SOAPElement nS1object = nS1objects.next();
				Iterator<SOAPElement> nS1ResultObjects = nS1object.getChildElements();
				while (nS1ResultObjects.hasNext()) {				
					SOAPElement nS1ResultObject = nS1ResultObjects.next();
					
					String elementName = nS1ResultObject.getNodeName();
					if (null != elementName && elementName.equals("NS1:result_object")) {
						Iterator nS1BodyAttrs = nS1ResultObject.getChildElements();
						while (nS1BodyAttrs.hasNext()) {
							SOAPElement nS1BodyAttr = (SOAPElement)nS1BodyAttrs.next();
							
							Iterator m0Attrs = nS1BodyAttr.getChildElements();
							
							Map<String,String> tempMap = new HashMap<String, String>();
							while (m0Attrs.hasNext()) {
								SOAPElement m0Attr = (SOAPElement)m0Attrs.next();
								
								tempMap.put(m0Attr.getAttribute("attr_name"), m0Attr.getValue());
							}
							
							String crmOrderId = tempMap.get("OrderNumber");
							String crmOrderVersion = tempMap.get("Revision");
							String crmStatus = tempMap.get("CRMStatus");
							String ibpStatus = tempMap.get("IBPStatus");
							
							TbE2eCrmOrder crmOrder = paramMap.get(crmOrderId + "_" + crmOrderVersion);
							
							TbE2eEaiOrderExcept except = new TbE2eEaiOrderExcept(crmOrder);
							
							String auditSatus = getAuditStatus(crmStatus, ibpStatus);
							except.setAUDIT_STATUS(auditSatus);
							
							result.add(except);
						}
					
					}
				
				}
				
			}

		} 
		return result;
	}
	
	private String getAuditStatus(String crmStatus, String ibpStatus) {

		String status = "CRM发送状态:";
		if ("Y".equals(crmStatus)) {
			status += "发送成功";
		} else if ("N".equals(crmStatus)) {
			status += "未发送";
		} else if ("E".equals(crmStatus)) {
			status += "发送失败";
		} else {
			status += "未知";
		}

		status += ", IBP接收状态:";
		if ("Y".equals(ibpStatus)) {
			status += "接收成功";
		} else if ("N".equals(ibpStatus)) {
			status += "未接收";
		} else if ("E".equals(ibpStatus)) {
			status += "接收失败";
		} else {
			status += "未知";
		}
		return status;
	}
	
	public static void main(String[] args) {
		EAIServiceStub stub = new EAIServiceStub();
		String status = stub.invokeEai("http://10.5.238.186:7080/ITSM_Order_Analysis", "2-28000723345", "2");
		System.out.println(status);
	}
}