IbpOrderFinishRule.java 5.08 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.TbE2eIbpOrderDao;
import com.sitech.ismp.coll.busi.e2e.dao.TbE2eIbpOrderFinishExceptDao;
import com.sitech.ismp.coll.busi.e2e.dao.VE2eIbpOrderFinishDao;
import com.sitech.ismp.coll.busi.e2e.domain.IbpFinOrderFileTag;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eIbpOrder;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eIbpOrderFinishExcept;
import com.sitech.ismp.coll.busi.e2e.domain.TbE2eProcessFinishTag;
import com.sitech.ismp.coll.busi.e2e.domain.VE2eIbpOrderFinish;
import com.sitech.util.Formater;
import com.sitech.util.JSONUtil;

/**
 * IBP定单完工分析规则
 * 
 * @author linxc
 * @version
 * @since Ver 6.1
 * @Date 2012 May 14, 2012 5:12:33 PM
 */
public class IbpOrderFinishRule extends AnalysisRule {
	private VE2eIbpOrderFinishDao origOrderDao;
	private TbE2eIbpOrderFinishExceptDao exceptOrderDao;
	
	private String productTag;


	public IbpOrderFinishRule(Map<String, String> params) {
		super(params);
		if (E2EConstant.PRODUCT_TYPE_OpNet48New.equals(productType)) {
			productTag = "Y";
		}
		origOrderDao = new VE2eIbpOrderFinishDao(params);
		exceptOrderDao = new TbE2eIbpOrderFinishExceptDao(params);
	}

	protected void excute() {
		List<IbpFinOrderFileTag> fileTagList = fileFinishTagdao.selectIbpFinOrderFileTag();
		if(fileTagList == null || fileTagList.size() == 0){
			return;
		}
		
		for(IbpFinOrderFileTag fileTag : fileTagList){
			process(fileTag.getFILE_TIME());
			
			TbE2eProcessFinishTag caProcessTag = new TbE2eProcessFinishTag(
					fileTag.getCA_ORDER_FILE_ID(), fileTag.getFILE_TIME(),
					E2EConstant.FILE_TYPE_CA_OUTSIDE_ORDER,
					E2EConstant.RULE_TYPE_IBP_ORDER_FINISH);
			TbE2eProcessFinishTag ibpProcessTag = new TbE2eProcessFinishTag(
					fileTag.getIBP_FIN_FILE_ID(), fileTag.getFILE_TIME(),
					E2EConstant.FILE_TYPE_IBP_FINISH_ORDER,
					E2EConstant.RULE_TYPE_IBP_ORDER_FINISH);

			processTagDao.insertTbE2eProcessFinishTag(caProcessTag);
			processTagDao.insertTbE2eProcessFinishTag(ibpProcessTag);
		}	
	}

	private void process(Date fileTime) {
		List<VE2eIbpOrderFinish> list = origOrderDao.selectVE2eIbpOrderFinish(productTag, fileTime);

		if (list == null || list.size() == 0) {
			return;
		}
		
		for (VE2eIbpOrderFinish order : list) {
			Date beginTime;
			Date endTime = new Date();
			
			if ("Y".equals(order.getIS_TEST_V())
					&& order.getTEST_V_TIME() != null) {
				// 有测速时间首先使用测速时间
				beginTime = order.getTEST_V_TIME();
			} else if (order.getRETURN2IBP_FIN_TIME() != null) {
				// 否则使用外线回单时间
				beginTime = order.getRETURN2IBP_FIN_TIME();
			} else {
				// 未回IBP,不处理
				continue;
			}
			
			if (order.getFINISH_TIME() != 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;

			float timeout = (endTime.getTime() - beginTime.getTime())
					/ (60 * 60 * 1000);
			
			
			if (timeout > 1) {
				// 客保回单超过1个小时
				
				// 1. 根据P6_ID查询所有的WOP工单是否都有回IBP时间
				List<VE2eIbpOrderFinish> list1 = origOrderDao.selectVE2eIbpOrderFinishByP6(order.getP6_ID());
				if(list1 != null){
					Map<String,VE2eIbpOrderFinish> finishMap = new HashMap<String, VE2eIbpOrderFinish>();
					Map<String,VE2eIbpOrderFinish> unfinishMap = new HashMap<String, VE2eIbpOrderFinish>();
					
					for(VE2eIbpOrderFinish v : list1){
						if(v.getRETURN2IBP_FIN_TIME() == null && v.getTEST_V_TIME() == null){
							// 测速时间和回IBP时间都为空,说明定单未完工,这种情况不处理
							unfinishMap.put(v.getWOP_ORDER_ID(), v);
						}else{
							finishMap.put(v.getWOP_ORDER_ID(), v);
						}
					}
					
					boolean isContinue = false;
					for (String key : unfinishMap.keySet()) {
						if (finishMap.get(key) == null) {
							isContinue = true;
							break;
						}
					}
					if(isContinue){
						// 继续处理下一条
						continue;
					}
				}
				
				// 2. 则通过P6关联IBP,检查工单是否停在家庭数字网关,若不是,则不处理
				TbE2eIbpOrderDao dao = new TbE2eIbpOrderDao(params);
				List<TbE2eIbpOrder> ibpList = dao.selectTbE2eIbpOrderByP6(order
						.getP6_ID());
				if (ibpList == null || ibpList.size() == 0) {
					continue;
				}
			}
			
			
			String kpiValue = Double.toString(timeout);
			kpiValue = Formater.formatDecimalKpivalue(kpiValue);
			
			TbE2eIbpOrderFinishExcept exceptOrder = new TbE2eIbpOrderFinishExcept(unitId,
					"PM-02-00-000-01", kpiValue, order);
			
			String extEventInfo = JSONUtil.toJSON(exceptOrder);

			if (kpiToEvent(unitId, "PM-02-00-000-01", kpiValue, 1, extEventInfo)) {		
				exceptOrderDao.insertTbE2eIbpOrderFinishExcept(exceptOrder);
			} 
			
			
		}		
		
	}

}