IbpOrderProcessRule.java 3.36 KB
package com.sitech.ismp.coll.busi.e2e.rule;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.sitech.ismp.coll.busi.e2e.E2EConstant;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eIbpOrderDao;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eIbpOrderExceptDao;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eFile2dbFinishTag;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eIbpOrder;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eIbpOrderExcept;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eProcessFinishTag;
import com.sitech.util.Formater;
import com.sitech.util.JSONUtil;

/**
 * IBP定单处理分析规则
 *
 * @author   linxc
 * @version  
 * @since    Ver 1.1
 * @Date	 2012	May 14, 2012		5:15:18 PM
 */
public class IbpOrderProcessRule extends AnalysisRule {
	
	private TbE2eIbpOrderExceptDao exceptDao;

	public IbpOrderProcessRule(Map<String, String> params) {
		super(params);
		exceptDao = new TbE2eIbpOrderExceptDao(params);
	}

	protected void excute() {
		// 已经入库,但未分析的IBP在途工单文件
		List<TbE2eFile2dbFinishTag> ibpOrderFileList = getTbE2eFile2dbFinishTag(
				E2EConstant.FILE_TYPE_IBP_ORDER,
				E2EConstant.getIbpProcessRule(kbpClass));
		
		if(ibpOrderFileList == null || ibpOrderFileList.size() == 0){
			return;
		}
		
		for (TbE2eFile2dbFinishTag orderFileTag : ibpOrderFileList) {
			processIbpOrderFile(orderFileTag);
			
			TbE2eProcessFinishTag processTag = new TbE2eProcessFinishTag(orderFileTag,
					E2EConstant.getIbpProcessRule(kbpClass));
			processTagDao.insertTbE2eProcessFinishTag(processTag);
		}
	}

	private void processIbpOrderFile(TbE2eFile2dbFinishTag orderFileTag) {
		Date fileTime = orderFileTag.getFILE_TIME();
		TbE2eIbpOrderDao orderDao = new TbE2eIbpOrderDao(params);

		List<TbE2eIbpOrder> ibpOrderList = orderDao.selectTbE2eIbpOrder(params,productType, fileTime);
		
		if (ibpOrderList != null && ibpOrderList.size() != 0) {
			for (TbE2eIbpOrder ibpOrder : ibpOrderList) {
				processKpi(ibpOrder);
			}
		}		
	}

	private void processKpi(TbE2eIbpOrder ibpOrder) {
		try{
			// UNIT_ID = KBP_CLASS:CRM订单号-CRM订单版本号-P6号-任务号
			String uCrmOrderId = Formater.neatenunitid(ibpOrder
					.getCUST_ORDER_ID());
			String uCrmOrderVersion = Formater.neatenunitid(ibpOrder
					.getCRM_VERSION());
			String uP6OrderId = Formater.neatenunitid(ibpOrder.getP6_ID());
			String uTaskId = Formater.neatenunitid(ibpOrder.getTASK_ID());

			String unitId = kbpClass + ":" + productType + "-" + uCrmOrderId + "-"
					+ uCrmOrderVersion + "-" + uP6OrderId + "-" + uTaskId;

			String kpiId = "PM-02-00-000-01";

			double currTime = new Date().getTime();

			double startTime = ibpOrder.getTASK_START_TIME().getTime();
					

			String kpiValue = Double.toString((currTime - startTime) / (60 * 60 * 1000));
			kpiValue = Formater.formatDecimalKpivalue(kpiValue);	
			
			
			logger.info(unitId + "\t" + kpiId + "\t" +  kpiValue);			
			TbE2eIbpOrderExcept exceptOrder = new TbE2eIbpOrderExcept(ibpOrder,
					unitId, "PM-02-00-000-01", kpiValue);
			String extEventInfo = JSONUtil.toJSON(exceptOrder);
			if(kpiToEvent(unitId, kpiId, kpiValue,1, extEventInfo)){
				saveAbnormalOrder(exceptOrder);
			}
		}catch (Exception e) {
			logger.error("Exception while processKpi", e);
		}		
	}

	private void saveAbnormalOrder(TbE2eIbpOrderExcept exceptOrder) {

		exceptDao.insertTbE2eIbpOrderExcept(exceptOrder);
	}
}