IMFReaderTask.java 2.6 KB
package com.air.agent.imf;

import org.apache.log4j.Logger;

import com.air.agent.imf.bean.MainKit;
import com.air.agent.imf.bean.ManifestEntity;
import com.air.agent.imf.bean.PreparesecondaryEntity;
import com.air.agent.imf.bean.SubKit;
import com.air.agent.imf.dao.impl.DaoImpl;
import com.airport.util.SystemBean;
import com.airport.util.parse.XMPParse;
import com.caac.imf.api.IMFClient;

/**
 * Depiction:
 * <p>
 * Modify:
 * <p>
 * Author: William Lynn
 * <p>
 * Create Date:2018年6月10日 下午5:09:04
 * 
 */
public class IMFReaderTask extends Thread {
	private static final Logger logger = Logger.getLogger(IMFReaderTask.class);
	private static final String MESSAGE_TYPE_TAG = "/MSG/DECLAREPREPAREMASTERXMLBODY/Head/MessageType";
	private IMFClient client;

	public IMFReaderTask(IMFClient client) {
		this.client = client;
	}

	@Override
	public void run() {
		while (true) {
			if (App.isLoginOk) {
				synchronized (this) {
					String message = this.client.getMSG();
					if (message != null) {
						logger.info("====================================");
						logger.info(message);
						logger.info("====================================");
						message = message.replaceAll("\n", "");
						handleMessage(message);
					}
				}
			} else {
				logger.info("***");
			}

			try {
				Thread.sleep(100L);
			} catch (InterruptedException var3) {
				logger.info("InterruptedException: " + var3.toString());
			}
		}
	}

	/**
	 * 是否为主单
	 * 
	 * @param message
	 * 
	 * @return
	 */
	private boolean isMaster(String message) {
		String messageType;
		try {
			messageType = XMPParse.getNodeValueFromXmlString(message, MESSAGE_TYPE_TAG);
			logger.info("isMaster(): messageType-->"+messageType);
			return messageType.equalsIgnoreCase("MT2201MASTER");
		} catch (Exception e) {
			logger.info("isMaster(): error info-->"+e.toString());
		}

		return false;
	}

	private void handleMessage(String message) {
		DaoImpl dao = (DaoImpl) SystemBean.getBean("dao");
		if (isMaster(message)) {
			logger.info("解析主单");
			ManifestEntity bean = MainKit.parseXml(message);
			bean.setId(dao.getMaxMasterId()+1);
			long ret = dao.saveMain(bean);
			logger.info("保存主单:" + ret);
		} else {
			logger.info("解析分单");
			PreparesecondaryEntity bean = SubKit.parseXml(message);
			long masterId = dao.getMasterId(bean.getWaybillnomaster());
			if (masterId > 0) {
				logger.info("主单ID:" + masterId);
				bean.setPreparemasterid(masterId);
				bean.setId(dao.getMaxSubId()+1);
				long ret = dao.saveSub(bean);
				logger.info("保存分单:" + ret);
			} else {
				logger.info("主单不存在");
			}
		}
	}

}