IbpOrderCreateRule.java 4.1 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.TbE2eIbpOrderCreateExceptDao;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eProcessFinishTagDao;
import com.sitech.ismp.coll.busi.e2e.dao.VE2eIbpOrderCreateDao;
import com.sitech.ismp.coll.busi.e2e.domain.IbpOrderCreateFileTag;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eIbpOrderCreateExcept;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eProcessFinishTag;
import com.sitech.ismp.coll.busi.e2e.domain.VE2eIbpOrderCreate;
import com.sitech.util.Formater;
import com.sitech.util.JSONUtil;

/**
 * IBP定单生成环节分析(从CRM订单提交到IBP定单生成)
 * 
 * @author linxc
 * @version
 * @since Ver 6.1
 * @Date 2012 May 15, 2012 9:48:01 AM
 */
public class IbpOrderCreateRule extends AnalysisRule {
	/** 产品类型 */
	private String tagType;	
	/** 属性名称 */
	private String propName = params.get("CRM_PROP_NAME");
	/** 属性值 */
	private String propValue = params.get("CRM_PROP_VALUE");
	
	private VE2eIbpOrderCreateDao dao;
	TbE2eIbpOrderCreateExceptDao exceptDao;
	TbE2eProcessFinishTagDao processTagDao;
	
	public IbpOrderCreateRule(Map<String, String> params) {
		super(params);		
		dao = new VE2eIbpOrderCreateDao(params);
		processTagDao = new TbE2eProcessFinishTagDao(params);
		exceptDao = new TbE2eIbpOrderCreateExceptDao(params);
	}

	protected void excute() {
		List<IbpOrderCreateFileTag> fileTagList = dao
				.selectIbpOrderCreateFileTag(E2EConstant.RULE_TYPE_IBP_ORDER_CREATE);

		if (fileTagList == null || fileTagList.size() == 0) {
			return;
		}			
		
		for (IbpOrderCreateFileTag tag : fileTagList) {
			TbE2eProcessFinishTag tag1 = new TbE2eProcessFinishTag(tag
					.getCRM_ORDER_FILE_ID(), tag.getFILE_TIME(),
					E2EConstant.FILE_TYPE_CRM_ORDER,
					E2EConstant.RULE_TYPE_IBP_ORDER_CREATE);
			TbE2eProcessFinishTag tag2 = new TbE2eProcessFinishTag(tag
					.getCRM_PROP_FILE_ID(), tag.getFILE_TIME(),
					E2EConstant.FILE_TYPE_CRM_ORDER_PROP,
					E2EConstant.RULE_TYPE_IBP_ORDER_CREATE);
			TbE2eProcessFinishTag tag3 = new TbE2eProcessFinishTag(tag
					.getIBP_REC_FILE_ID(), tag.getFILE_TIME(),
					E2EConstant.FILE_TYPE_IBP_ORDER,
					E2EConstant.RULE_TYPE_IBP_ORDER_CREATE);

			processTagDao.insertTbE2eProcessFinishTag(tag1);
			processTagDao.insertTbE2eProcessFinishTag(tag2);
			processTagDao.insertTbE2eProcessFinishTag(tag3);
			
			process(tag.getFILE_TIME());
		}
	}
	private void process(Date fileTime) {
		List<VE2eIbpOrderCreate> list = dao.selectVE2eIbpOrderCreate(tagType,
				propName, propValue, fileTime);

		if (list == null || list.size() == 0) {
			return;
		}
		
		for (VE2eIbpOrderCreate order : list) {
			processKpi(order);
		}		
	}

	private void processKpi(VE2eIbpOrderCreate order) {
		try{
			// UNIT_ID = KBP_CLASS:产品-CRM订单号-版本号-行项目编号
			String uCrmOrderId = Formater.neatenunitid(order.getCRM_ORDER_ID());
			String uCrmOrderVersion = Formater.neatenunitid(order
					.getVERSION_NUM());
			String uRowNum = Formater.neatenunitid(order.getCRM_ROW_NUM());		

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

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

			double p6CreateTime = order.getORDER_CREATE_TIME().getTime();

			double crmSubmitTime = order.getORDER_SUBMIT_TIME().getTime();
					
			String kpiValue = Double.toString((p6CreateTime - crmSubmitTime) / (60 * 60 * 1000));
			kpiValue = Formater.formatDecimalKpivalue(kpiValue);	
				
			logger.debug(unitId + "\t" + kpiId + "\t" + kpiValue);
			TbE2eIbpOrderCreateExcept exceptOrder = new TbE2eIbpOrderCreateExcept(
					order, 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(TbE2eIbpOrderCreateExcept exceptOrder) {
		exceptDao.insertTbE2eIbpOrderCreateExcept(exceptOrder);
	}
}