package com.nis.util; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.collect.Lists; import com.nis.domain.configuration.AppPolicyCfg; import com.nis.domain.configuration.AvFileSampleCfg; import com.nis.domain.configuration.AvSignSampleCfg; import com.nis.domain.configuration.BaseCfg; import com.nis.domain.configuration.CfgIndexInfo; import com.nis.domain.configuration.DnsIpCfg; import com.nis.domain.configuration.DnsResStrategy; import com.nis.domain.configuration.FileDigestCfg; import com.nis.domain.configuration.IpPortCfg; import com.nis.domain.configuration.PxyObjKeyring; import com.nis.domain.configuration.PxyObjTrustedCaCert; import com.nis.domain.configuration.PxyObjTrustedCaCrl; import com.nis.domain.maat.MaatCfg; import com.nis.domain.maat.ToMaatBean; import com.nis.domain.maat.ToMaatResult; import com.nis.domain.maat.ToUpdateMaatBeanStatus; import com.nis.domain.maat.MaatCfg.DigestCfg; import com.nis.domain.maat.MaatCfg.GroupCfg; import com.nis.domain.maat.MaatCfg.IpCfg; import com.nis.domain.maat.MaatCfg.NumBoundaryCfg; import com.nis.domain.maat.MaatCfg.StringCfg; import com.nis.domain.maat.ToUpdateMaatBeanStatus.UpdateMaatCfgStatus; import com.nis.web.dao.configuration.ConfigSynchronizationDao; import com.nis.web.service.BaseService; import com.nis.web.service.SpringContextHolder; /** * 配置任务调度通用类 * 定时任务调用,处理界面配置状态修改,以及下发综合服务处理 * @author ThinkPad * */ public class SchedulerTaskUtil { //调度任务的配置信息,复用配置同步DAO private static ConfigSynchronizationDao configSynchronizationDao = SpringContextHolder.getBean(ConfigSynchronizationDao.class); private Logger logger = LoggerFactory.getLogger(getClass()); /** * 根据业务与编译ID查询配置,修改失效或生效状态,并下发至综合服务 * @param serviceId 不可空 * @param compileId 不可空 * @param oldIsValid 配置当前状态 0无效,1有效,可空 * @param newIsValid 配置最新修改状态 0无效,1有效,不可空 * @return boolean */ public boolean updateConfigByServiceAndCompile(Integer serviceId,Integer compileId,Integer oldIsValid,Integer newIsValid){ //根据业务查询配置文件,获取该业务的配置域表信息 ServiceConfigTemplateUtil serviceTemplate = new ServiceConfigTemplateUtil(); List> serviceList = serviceTemplate.getServiceListByServiceId(serviceId); //根据编译ID查询配置表中的配置信息 for(Map service:serviceList){ String tableName = service.get("tableName").toString(); String serviceType = service.get("serviceType").toString(); String className = service.get("className").toString(); BaseCfg entity = new BaseCfg(); entity.setServiceId(serviceId); entity.setTableName(tableName); List list = Lists.newArrayList(); List callBackCfgList = Lists.newArrayList(); boolean isUpdateContent = false; /** * 根据编译ID查询配置,如果配置当前审核状态为未审核(is_audit=0),并且newIsValid=1需要查询详细的域配置信息,下发配置详细内容, * 如果已审核(is_audit=1),则只查询配置主表,更新配置状态即可, * 如果审核取消(is_audit=3)则删除定时任务,表示配置已最终删除,此状态处理原则上在配置修改拦截器中处理 */ if("1".equals(serviceType)){//maat类配置 Date updateTime = new Date(); //下发并修改配置状态的参数类 ToUpdateMaatBeanStatus maatStatusBean = new ToUpdateMaatBeanStatus(); UpdateMaatCfgStatus updateCfg = new UpdateMaatCfgStatus(); List configCompileStartStopList = new ArrayList(); maatStatusBean.setVersion(Constants.MAAT_VERSION); maatStatusBean.setOpAction(Constants.INSERT_ACTION); maatStatusBean.setAuditTime(updateTime); maatStatusBean.setCreatorName("TaskScheduler");//任务调度定时修改状态 //下发带有配置内容的参数对象 ToMaatBean maatBean = new ToMaatBean(); MaatCfg maatCfg = new MaatCfg(); List configCompileList = new ArrayList(); List groupRelationList = new ArrayList(); List ipRegionList = new ArrayList(); List strRegionList = new ArrayList(); List numRegionList = new ArrayList(); List digestRegionList = new ArrayList(); List areaIpRegionList = new ArrayList(); // for(Integer compileId:compileIds){ entity.setCompileId(compileId); //查询配置 if("cfg_index_info".equals(tableName)){ list = configSynchronizationDao.getCfgIndexList(entity); List> cfgList = (List>) service.get("cfgList"); for(int i=0;i m:cfgList){ String regionTableName = m.get("tableName").toString(); config.setTableName(regionTableName); configSynchronizationDao.updateCfgStatus(cfg);//修改界面数据库配置状态 } } } } }else if("file_digest_cfg".equals(tableName)){ list = configSynchronizationDao.getFileDigestListByService(entity); List> cfgList = (List>) service.get("cfgList"); for(int i=0;i m:cfgList){ String regionTableName = m.get("tableName").toString(); config.setTableName(regionTableName); configSynchronizationDao.updateCfgStatus(cfg);//修改界面数据库配置状态 } } } } }else if("app_policy_cfg".equals(tableName)){ list = configSynchronizationDao.getAppPolicyList(entity); List> cfgList = (List>) service.get("cfgList"); for(int i=0;i m:cfgList){ String regionTableName = m.get("tableName").toString(); config.setTableName(regionTableName); configSynchronizationDao.updateCfgStatus(cfg);//修改界面数据库配置状态 } } } } } if(!isUpdateContent){ updateCfg.setIsValid(newIsValid); updateCfg.setCompileId(compileId); updateCfg.setAuditTime(updateTime); configCompileStartStopList.add(updateCfg); } // } if(isUpdateContent){//修改配置内容以及状态 //下发配置内容 }else{//只修改配置状态 maatStatusBean.setConfigCompileStartStopList(configCompileStartStopList); String json=BaseService.gsonToJson(maatBean); //调用服务启停接口 String result = ConfigServiceUtil.configStatusUpdate(json); logger.debug("MAAT类配置启停状态修改结果:"+result); } }else if("2".equals(serviceType)){//回调类配置 List ids = Lists.newArrayList(); // for(Integer compileId:compileIds){ entity.setCompileId(compileId); //查询配置 if(entity.getServiceId().equals(3)){//ip drop回调类配置用了主表和子表关系 list = configSynchronizationDao.getCfgIndexList(entity); if(!StringUtil.isEmpty(list)){ List compileIdArray = Lists.newArrayList(); for(int i=0;i