CrmOrderAcceptRule.java 4.37 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.TbE2eCrmOrderDao;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eCrmOrderExceptDao;
import com.sitech.ismp.coll.busi.e2e.domain.CrmOrderFileTag;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eCrmOrder;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eCrmOrderExcept;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eProcessFinishTag;
import com.sitech.util.Formater;
import com.sitech.util.JSONUtil;

/**
 * ClassName:CrmOrderAcceptRule
 * CRM订单受理分析规则
 *
 * @author   linxc
 * @version  
 * @since    Ver 1.1
 * @Date	 2012	May 11, 2012		2:31:29 PM
 */
public class CrmOrderAcceptRule extends AnalysisRule{
	/** 属性名称 */
	private String propName;
	/** 属性值 */
	private String propValue;
	
	public CrmOrderAcceptRule(Map<String, String> params) {
		super(params);
		
		propName = params.get("CRM_PROP_NAME");
		propValue = params.get("CRM_PROP_VALUE");
	}

	protected void excute() {
		logger.info("Begin execute CrmOrderAcceptRule...");
		
		List<CrmOrderFileTag> crmOrderFileTagList = fileFinishTagdao
				.selectCrmOrderFileTag(E2EConstant.RULE_TYPE_CRM_ORDER_ACCEPT);
				
		if(mark(crmOrderFileTagList)){
			for (CrmOrderFileTag fileTag : crmOrderFileTagList) {
				processOrderFile(fileTag.getFILE_TIME());
			}	
		}
	}

	protected void processOrderFile(Date fileTime) {
		TbE2eCrmOrderDao crmOrderDao = new TbE2eCrmOrderDao(params);

		List<TbE2eCrmOrder> crmOrderList = crmOrderDao.selectTbE2eCrmOrder(
				propName, propValue, fileTime);

		if (crmOrderList != null || crmOrderList.size() > 0) {
			logger.info("Count: " + crmOrderList.size());
			for (TbE2eCrmOrder crmOrder : crmOrderList) {
				processKpi(crmOrder);
			}
		}
	}

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

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

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

			double createTime = crmOrder.getORDER_CREATE_TIME().getTime();

			double submitTime = crmOrder.getORDER_SUBMIT_TIME() == null ? new Date()
					.getTime()
					: crmOrder.getORDER_SUBMIT_TIME().getTime();
					

			String kpiValue = Double.toString((submitTime - createTime) / (60 * 60 * 1000));
			kpiValue = Formater.formatDecimalKpivalue(kpiValue);
			
			logger.info("UNIT_ID: " + unitId + ", KPI_ID: " + kpiId + ", KPI_VALUE: " + kpiValue);
			
			double overTime = Double.parseDouble(kpiValue);
			TbE2eCrmOrderExcept exceptCrmOrder = new TbE2eCrmOrderExcept(crmOrder, unitId, overTime, "PM-02-00-000-01");
			String extEventInfo = JSONUtil.toJSON(exceptCrmOrder);
			
			if (kpiToEvent(unitId, kpiId, kpiValue, 1, extEventInfo)) {
				saveAbnormalOrder(exceptCrmOrder);
				logger.info("saveAbnormalOrder.");
			}

		}catch (Exception e) {
			logger.error("Exception while processKpi", e);
		}		
	}

	/**
	 * 保存到异常工单表
	 * @param kpiValue 
	 * @param unitId 
	 * @param crmOrder 
	 */
	private void saveAbnormalOrder(TbE2eCrmOrderExcept exceptCrmOrder) {		
		new TbE2eCrmOrderExceptDao(params).insertTbE2eCrmOrderExcept(exceptCrmOrder);
	}
	
	/**
	 * 为已经分析过的文件打标记
	 */
	private boolean mark(List<CrmOrderFileTag> crmOrderFileTagList) {
		if (crmOrderFileTagList == null || crmOrderFileTagList.size() == 0) {
			logger.info("No new data file, exit!");
			return false;
		}
		
		for (CrmOrderFileTag fileTag : crmOrderFileTagList) {
			TbE2eProcessFinishTag crmOrderProcessTag = new TbE2eProcessFinishTag(
					fileTag.getCRM_ORDER_FILE_ID(), fileTag.getFILE_TIME(),
					E2EConstant.FILE_TYPE_CRM_ORDER,
					E2EConstant.RULE_TYPE_CRM_ORDER_ACCEPT);
			TbE2eProcessFinishTag crmPropProcessTag = new TbE2eProcessFinishTag(
					fileTag.getCRM_PROP_FILE_ID(), fileTag.getFILE_TIME(),
					E2EConstant.FILE_TYPE_CRM_ORDER_PROP,
					E2EConstant.RULE_TYPE_CRM_ORDER_ACCEPT);
			
			processTagDao.insertTbE2eProcessFinishTag(crmOrderProcessTag);
			processTagDao.insertTbE2eProcessFinishTag(crmPropProcessTag);
		}	
		
		return true;
	}
}