CaOrderOutsideRule.java 6.73 KB
package com.sitech.ismp.coll.busi.e2e.rule;

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

import com.sitech.ismp.coll.busi.e2e.E2EConstant;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eCaOrderDao;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eCaOrderExceptDao;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eCaOrder;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eCaOrderExcept;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eFile2dbFinishTag;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eProcessFinishTag;
import com.sitech.util.Formater;
import com.sitech.util.JSONUtil;

/**
 * 客保外线施工分析规则
 * 
 * @author linxc
 * @version
 * @since Ver 6.1
 * @Date 2012 May 21, 2012 9:16:44 AM
 */
public class CaOrderOutsideRule extends AnalysisRule {
	private TbE2eCaOrderDao origOrderDao;
	private TbE2eCaOrderExceptDao exceptOrderDao;

	/** 光网48小时标记 */
	private String productTag;
	/** 客户类型 */
	private String clientType;
	/** 操作类型 */
	private String operType;


	public CaOrderOutsideRule(Map<String, String> params) {
		super(params);
		if (E2EConstant.PRODUCT_TYPE_OpNet48New.equals(productType)) {
			productTag = "Y";
			clientType = "住宅";
			operType = "1";
		}

		origOrderDao = new TbE2eCaOrderDao(params);
		exceptOrderDao = new TbE2eCaOrderExceptDao(params);
	}

	protected void excute() {
		logger.info("Product type : " + productType);
		
		// 待分析的数据文件
		List<TbE2eFile2dbFinishTag> fileList = getTbE2eFile2dbFinishTag(
				E2EConstant.FILE_TYPE_CA_OUTSIDE_ORDER,
				E2EConstant.RULE_TYPE_CA_OUTSIDE_ORDER);

		if (fileList == null || fileList.size() == 0) {
			return;
		}

		for (TbE2eFile2dbFinishTag orderFileTag : fileList) {
			logger.info("File info : " + orderFileTag.toString());
			processOrderFile(orderFileTag);

			TbE2eProcessFinishTag processTag = new TbE2eProcessFinishTag(
					orderFileTag, E2EConstant.RULE_TYPE_CA_OUTSIDE_ORDER);

			processTagDao.insertTbE2eProcessFinishTag(processTag);
		}
	}

	/**
	 * 分析工单超时情况
	 */
	protected void processOrderFile(TbE2eFile2dbFinishTag orderFileTag) {
		// 文件时间
		Date fileTime = orderFileTag.getFILE_TIME();

		List<TbE2eCaOrder> caOrderList = origOrderDao.selectTbE2eCaOrder2(
				fileTime, productTag, clientType, operType);

		if (caOrderList == null || caOrderList.size() == 0) {
			return;
		}

		for (TbE2eCaOrder order : caOrderList) {
			// 资源重派时间
			Date resendTime = order.getRESEND2ZZ_TIME();
			if (resendTime != null) {
				// 如果有资源重派时间,则单独处理
				continue;
			}
			
			String uCrmId = Formater.neatenunitid(order.getCRM_ORDER_ID());
			String uP6Id = Formater.neatenunitid(order.getP6_ID());
			String uWopId = Formater.neatenunitid(order.getWOP_ORDER_ID());

			String unitId = kbpClass + ":" + productType + "-" + uCrmId + "-" + uP6Id + "-"
					+ uWopId;
			
			Date caCreateTime = order.getCA_CREATE_TIME();
			// 预约开始时间
			Date subscribeStartTime = order.getSUBSCRIBE_START_TIME();
			double beginTime;
			
			
			if (subscribeStartTime != null) {
				beginTime = subscribeStartTime.getTime();
			} else if (caCreateTime != null) {
				beginTime = caCreateTime.getTime();
			} else {
				continue;
			}
			
			double endTime;
			Date testVTime = order.getTEST_V_TIME(); // 测速时间
			Date return2IbpFinTime = order.getRETURN2IBP_FIN_TIME(); // 客保回单时间
			Date currTime = new Date(); // 当前时间

			if (testVTime != null) {
				endTime = testVTime.getTime();
			} else if (return2IbpFinTime != null) {
				endTime = return2IbpFinTime.getTime();
			} else {
				endTime = currTime.getTime();
			}

			String kpiValue = Double.toString((endTime - beginTime)
					/ (60 * 60 * 1000));
			kpiValue = Formater.formatDecimalKpivalue(kpiValue);

			TbE2eCaOrderExcept alarmOrder = new TbE2eCaOrderExcept(unitId,
					"PM-02-00-000-01", kpiValue, order);
			String extAlarmInfo = getJson(alarmOrder);

			TbE2eCaOrderExcept preAlarmOrder = new TbE2eCaOrderExcept(unitId,
					"PM-02-00-000-02", kpiValue, order);
			String extPreAlarmInfo = getJson(preAlarmOrder);

			if (kpiToEvent(unitId, "PM-02-00-000-01", kpiValue, 1, extAlarmInfo)) {
				exceptOrderDao.insertTbE2eCaOrderExcept(alarmOrder);// 告警
			} else if (kpiToEvent(unitId, "PM-02-00-000-02", kpiValue, 2,
					extPreAlarmInfo)) {
				exceptOrderDao.insertTbE2eCaOrderExcept(preAlarmOrder);// 预警
			}
		}
	}

	private String getJson(TbE2eCaOrderExcept order) {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("UNIT_ID", order.getUNIT_ID());
		map.put("KPI_ID", order.getKPI_ID());
		map.put("CRM_ORDER_ID", order.getCRM_ORDER_ID());
		map.put("P6_ID", order.getP6_ID());
		map.put("WOP_ORDER_ID", order.getWOP_ORDER_ID());
		map.put("WOP_VERSION_ID", order.getWOP_VERSION_ID());
		map.put("ORDER_VERSION_TYPE", order.getORDER_VERSION_TYPE());
		map.put("ACCESS_TYPE", order.getACCESS_TYPE());
		map.put("PRODUCT_TYPE", order.getPRODUCT_TYPE());
		map.put("PRODUCT_NUM", order.getPRODUCT_NUM());
		map.put("SERVICE_TYPE", order.getSERVICE_TYPE());
		map.put("PAY_TYPE", order.getPAY_TYPE());
		map.put("OPER_TYPE", order.getOPER_TYPE());
		map.put("OPER_SUB_TYPE", order.getOPER_SUB_TYPE());
		map.put("DISTICT_BUREAU", order.getDISTICT_BUREAU());
		map.put("PART_BUREAU", order.getPART_BUREAU());
		map.put("FIRST_SEND_TIME", order.getFIRST_SEND_TIME());
		map.put("RECEIVE_CHANNEL", order.getRECEIVE_CHANNEL());
		map.put("SUBSCRIBE_START_TIME", order.getSUBSCRIBE_START_TIME());
		map.put("SUBSCRIBE_END_TIME", order.getSUBSCRIBE_END_TIME());
		map.put("CA_SUBSCRIBE_TIME", order.getCA_SUBSCRIBE_TIME());
		map.put("CA_UP_TIME", order.getCA_UPDATE_TIME());
		map.put("CA_CREATE_TIME", order.getCA_CREATE_TIME());
		map.put("RETURN2IBP_FIN_TIME", order.getRETURN2IBP_FIN_TIME());
		map.put("OUTLINE_FIN_TIME", order.getOUTLINE_FIN_TIME());
		// 客保工单状态
		map.put("WORK_ORDER_STATUS", order.getORDER_STATUS());
		map.put("ORDER_SUB_STATUS", order.getORDER_SUB_STATUS());
		map.put("ORDER_SUB_UD_TIME", order.getORDER_SUB_UD_TIME());
		map.put("IS_TEST_V", order.getIS_TEST_V());
		map.put("TEST_V_RESULT", order.getTEST_V_RESULT());
		map.put("TEST_V_TIME", order.getTEST_V_TIME());
		map.put("PRODUCT_TAG", order.getPRODUCT_TAG());
		map.put("DATA2FILE_TIME", order.getDATA2FILE_TIME());
		map.put("FILE_TIME", order.getFILE_TIME());
		map.put("IN_DB_TIME", order.getIN_DB_TIME());
		map.put("OVER_TIME_NUM", order.getOVER_TIME_NUM());
		map.put("END_TIME", order.getEND_TIME());
		
		map.put("SUSPEND_TIME", order.getSUSPEND_TIME());
		map.put("UNSUSPEND_TIME", order.getUNSUSPEND_TIME());
		map.put("RESEND2ZZ_TIME", order.getRESEND2ZZ_TIME());
		map.put("CLIENT_TYPE", order.getCLIENT_TYPE());
		map.put("DEVICE_NUM", order.getDEVICE_NUM());

		return JSONUtil.toJSON(map);
	}

}