ResRedeliveryRule.java 5.74 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;

/**
 * 资源重派分析规则
 * 查询有光网48小时标记,客户类型为住宅,操作类型为1(新建)的数据进行分析
 * 若超过4小时,则告警在综资
 * 
 * @author LINXC
 */
public class ResRedeliveryRule extends AnalysisRule {
	private TbE2eCaOrderDao origOrderDao;
	private TbE2eCaOrderExceptDao exceptOrderDao;

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

	public ResRedeliveryRule(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() {
		// 待分析的数据文件
		List<TbE2eFile2dbFinishTag> fileList = getTbE2eFile2dbFinishTag(
				E2EConstant.FILE_TYPE_CA_OUTSIDE_ORDER,
				E2EConstant.RULE_TYPE_RESEND2Zz);

		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_RESEND2Zz);

			processTagDao.insertTbE2eProcessFinishTag(processTag);
		}
	}

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

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

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

		for (TbE2eCaOrder order : caOrderList) {
			Date resendTime = order.getRESEND2ZZ_TIME();
			Date return2IbpTime = order.getRETURN2IBP_FIN_TIME();

			if(return2IbpTime != 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;



			double currTime = System.currentTimeMillis();

			String kpiValue = Double.toString((currTime - resendTime.getTime())
					/ (60 * 60 * 1000));
			kpiValue = Formater.formatDecimalKpivalue(kpiValue);

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

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

	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);
	}

}