package com.nis.web.service.configuration; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; import org.apache.poi.ss.formula.functions.T; import org.dom4j.Node; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import antlr.StringUtils; import com.google.common.collect.Lists; import com.nis.domain.FunctionServiceDict; import com.nis.domain.Page; import com.nis.domain.basics.AsnIpCfg; import com.nis.domain.configuration.AppFeatureIndex; import com.nis.domain.configuration.AppIpCfg; import com.nis.domain.configuration.AppPolicyCfg; import com.nis.domain.configuration.AvFileSampleCfg; import com.nis.domain.configuration.BaseCfg; import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.CfgIndexInfo; import com.nis.domain.configuration.ComplexkeywordCfg; import com.nis.domain.configuration.DdosIpCfg; 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.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.specific.ConfigGroupInfo; import com.nis.domain.specific.SpecificServiceCfg; import com.nis.util.ConfigServiceUtil; import com.nis.util.Constants; import com.nis.util.DateUtil; import com.nis.util.DateUtils; import com.nis.util.DictUtils; import com.nis.util.FileUtils; import com.nis.util.ServiceConfigTemplateUtil; import com.nis.util.StringUtil; import com.nis.web.dao.configuration.CommonPolicyDao; import com.nis.web.dao.configuration.ConfigSynchronizationDao; import com.nis.web.dao.specific.ConfigGroupInfoDao; import com.nis.web.dao.specific.SpecificServiceCfgDao; import com.nis.web.security.UserUtils; import com.nis.web.service.BaseService; /** * 配置全量同步事务类 * @author zhangwei * */ @Service public class ConfigSynchronizationService extends BaseService{ @Autowired protected ConfigSynchronizationDao configSynchronizationDao; @Autowired protected CommonPolicyDao commonPolicyDao; @Autowired protected SpecificServiceCfgDao specificServiceCfgDao; @Autowired protected ConfigGroupInfoDao configGroupInfoDao; private boolean lastServiceTag = false;//标识是否是最后一个同步业务 /** * 配置全量更新下发 * @param request * @param response * @throws IllegalAccessException * @throws IllegalArgumentException * @throws SecurityException * @throws NoSuchFieldException * @throws ClassNotFoundException */ public void send(HttpServletRequest request,HttpServletResponse response,BaseCfg cfg) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, ClassNotFoundException { long start = System.currentTimeMillis(); ServiceConfigTemplateUtil serviceTemplate = new ServiceConfigTemplateUtil(); if(cfg==null){ List> serviceList = serviceTemplate.getServiceList(); int lastService = 0; lastServiceTag = false; for(Map service:serviceList){ lastService ++; if(lastService==serviceList.size()){ lastServiceTag = true; } String tableName = service.get("tableName").toString(); String serviceType = service.get("serviceType").toString(); String className = service.get("className").toString(); String serviceId = service.get("id").toString(); BaseCfg entity = new BaseCfg(); entity.setServiceId(Integer.valueOf(serviceId)); entity.setIsAudit(1); entity.setIsValid(1); entity.setTableName(tableName); if("1".equals(serviceType)){//maat类配置 List> cfgList = (List>) service.get("cfgList"); List> userRegionList = (List>) service.get("userRegionList"); if(cfgList.size()>0){ Page page=new Page(request,response,Constants.MAAT_JSON_SEND_SIZE,"a"); handleNtcMaatData(cfgList,userRegionList,page,entity,request,response,false,tableName); }else{ int cfgType = Integer.parseInt(service.get("cfgType").toString()); if("ddos_ip_cfg".equals(tableName)){ Page page=new Page(request,response,Constants.MAAT_JSON_SEND_SIZE,"a"); handleDdosMaatData(cfgList,userRegionList,page,entity,request,response,false); }else{ Page page=new Page(request,response,Constants.MAAT_JSON_SEND_SIZE,"a"); handleSingleMaatData(cfgType,userRegionList,page,entity,request,response,false); } } }else if("2".equals(serviceType)){//回调类配置 entity.setTableName(tableName); entity.setServiceId(Integer.valueOf(serviceId)); Page page=new Page(request,response,Constants.MAAT_JSON_SEND_SIZE,"a"); handleCallbackData(className,page,entity,request,response,false); } } long end = System.currentTimeMillis(); logger.info("本次配置全量同步,开始时间:"+start +",结束时间:"+end +",共计花费"+((end-start)/1000+"秒")); }else{ } } /** * 处理ntc业务maat类配置 * @param serviceId * @param request * @param response * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalAccessException * @throws IllegalArgumentException */ public void handleNtcMaatData(List>cfgList,List>userRegionList, Page page,BaseCfg entity,HttpServletRequest request,HttpServletResponse response, boolean isUpdateCfg,String tableName) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ boolean hasData = true; while(hasData){ entity.setPage(page); List list = Lists.newArrayList(); if("cfg_index_info".equals(tableName)){ list = configSynchronizationDao.getCfgIndexList(entity); if(!StringUtil.isEmpty(list)){ hasData=auditNtcMaatData(cfgList,userRegionList,page,entity,list,hasData,isUpdateCfg); if(hasData) { page.setPageNo(page.getNext()); } }else{ hasData = false; } }else if("file_digest_cfg".equals(tableName)){ list = configSynchronizationDao.getFileDigestListByService(entity); if(!StringUtil.isEmpty(list)){ hasData=auditFileDigestData(cfgList,userRegionList,page,entity,list,hasData,isUpdateCfg); if(hasData) { page.setPageNo(page.getNext()); } }else{ hasData = false; } }else if("app_policy_cfg".equals(tableName)){ list = configSynchronizationDao.getAppPolicyList(entity); if(!StringUtil.isEmpty(list)){ hasData=auditAppPolicyData(cfgList,userRegionList,page,entity,list,hasData,isUpdateCfg); if(hasData) { page.setPageNo(page.getNext()); } }else{ hasData = false; } }else if("app_feature_index".equals(tableName)){ list = configSynchronizationDao.getAppFeatureIndexList(entity); if(!StringUtil.isEmpty(list)){ hasData=auditAppFeatureData(cfgList,userRegionList,page,entity,list,hasData,isUpdateCfg); if(hasData) { page.setPageNo(page.getNext()); } }else{ hasData = false; } }else{ logger.info("全量同步未知业务"); hasData = false; } } } /** * MAAT配置批量下发 * @param cfgList * @param userRegionList * @param page * @param entity * @param list * @param hasData * @param isUpdateCfg 业务配置全部生效时需同步更新库表配置状态 * @return * @throws NoSuchFieldException * @throws SecurityException * @throws IllegalArgumentException * @throws IllegalAccessException */ public boolean auditNtcMaatData(List> cfgList, List> userRegionList, Page page, BaseCfg entity, List list, boolean hasData, boolean isUpdateCfg)throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ ToMaatBean maatBean; MaatCfg maatCfg; List configCompileList; List groupRelationList; List ipRegionList; List strRegionList; List numRegionList; List digestRegionList; List areaIpRegionList; List ipList = new ArrayList(); List asnIpList = new ArrayList(); List strList = new ArrayList(); List complexStrList = new ArrayList(); List numList = new ArrayList(); List fileList = new ArrayList(); maatBean = new ToMaatBean(); configCompileList = new ArrayList(); List compileIds = new ArrayList(); List asnGroupIds = new ArrayList(); for(CfgIndexInfo cfg:list){ compileIds.add(cfg.getCompileId()); if(entity.getServiceId().equals(37)||entity.getServiceId().equals(149)){ asnGroupIds.add(cfg.getUserRegion4()); } } if(isUpdateCfg) { if(!StringUtil.isEmpty(compileIds) && !StringUtil.isEmpty(entity.getTableName())) { commonPolicyDao.auditCfgBatch( entity.getTableName(), entity,compileIds,null); } } if(cfgList!=null){ for(Map m:cfgList){ String tableName = m.get("tableName").toString(); if("1".equals(m.get("cfgType"))){ if(tableName.equals("asn_ip_cfg")){ if(!StringUtil.isEmpty(asnGroupIds)) { if(isUpdateCfg) { //批量审核时只查询未下发的asnip asnIpList.addAll(configSynchronizationDao.getAsnIpList(asnGroupIds,0)); }else { //全量下发时需要检索所有asnip asnIpList.addAll(configSynchronizationDao.getAsnIpList(asnGroupIds,null)); } } }else{ ipList.addAll(configSynchronizationDao.getIpPortList(tableName, compileIds)); } }else if("2".equals(m.get("cfgType"))){ strList.addAll(configSynchronizationDao.getStrList(tableName,compileIds)); }else if("3".equals(m.get("cfgType"))){ complexStrList.addAll(configSynchronizationDao.getComplexStrList(tableName,compileIds)); }else if("4".equals(m.get("cfgType"))){ }else if("5".equals(m.get("cfgType"))){ fileList.addAll(configSynchronizationDao.getFileDigestList(tableName, compileIds)); } if(isUpdateCfg) { if(tableName.equals("asn_ip_cfg")){ if(!StringUtil.isEmpty(asnGroupIds)) { commonPolicyDao.auditCfgBatch(tableName, entity,asnGroupIds,null); } }else{ commonPolicyDao.auditCfgBatch( tableName, entity,compileIds,null); } } } } //批量获取regionId,groupId(相同编译下的IP类配置多条ip只获取一个组号),分组复用的域配置不需要重新获取regionId,groupId List regionIds = ConfigServiceUtil.getId(3, ipList.size()+strList.size()+complexStrList.size()+numList.size()+fileList.size()); List groupIds = ConfigServiceUtil.getId(2, ipList.size()+strList.size()+complexStrList.size()+numList.size()+fileList.size()); for(CfgIndexInfo cfg:list){ maatCfg = new MaatCfg(); maatCfg.initDefaultValue(); groupRelationList = new ArrayList(); ipRegionList = new ArrayList(); strRegionList = new ArrayList(); numRegionList = new ArrayList(); digestRegionList = new ArrayList(); areaIpRegionList = new ArrayList(); List list1 = new ArrayList(); List list2 = new ArrayList(); List list3 = new ArrayList(); List list4 = new ArrayList(); List list5 = new ArrayList(); String userRegion = ""; //处理自定义域 if(userRegionList!=null){ for(Map n:userRegionList){ Object userRegionPosition = n.get("userRegionPosition"); if(userRegionPosition!=null && (userRegionPosition.toString().equals("1")||userRegionPosition.toString().equals("0"))){ //通过反射机制获取自定义域字段值 String regionColumn = n.get("regionColumn").toString(); Class aClass = null; if(userRegionPosition.toString().equals(("0"))){ aClass = BaseCfg.class; }else{ aClass = CfgIndexInfo.class; } Object value = ""; if(entity.getServiceId().equals(517)||entity.getServiceId().equals(560)){//代理替换策略 String[] regionArray = regionColumn.split(","); for(int r=0;r0){ GroupCfg groupCfg=new GroupCfg(); groupCfg.setCompileId(cfg.getCompileId()); groupCfg.setGroupId(Integer.parseInt(cfg.getUserRegion4())); groupCfg.setIsValid(entity.getIsValid()); groupCfg.setAuditTime(StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime()); groupRelationList.add(groupCfg); ipRegionList.addAll(groupReuseCfgAddRemoveConvert(list1,Constants.VALID_YES,null)); }else if(!StringUtil.isEmpty(asnGroupIds)) { GroupCfg groupCfg=new GroupCfg(); groupCfg.setCompileId(cfg.getCompileId()); groupCfg.setGroupId(Integer.parseInt(cfg.getUserRegion4())); groupCfg.setIsValid(entity.getIsValid()); groupCfg.setAuditTime(StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime()); groupRelationList.add(groupCfg); ipRegionList.addAll(ipRegionList); } //配置域转换 configCovert(ipList,strList,complexStrList, numList,fileList,regionIds,groupIds,entity,cfg.getCompileId(), StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime(), groupRelationList,ipRegionList,strRegionList,numRegionList,digestRegionList,areaIpRegionList,userRegion); BeanUtils.copyProperties(cfg, maatCfg); maatCfg.setAction(cfg.getAction()); maatCfg.setAuditTime(StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime()); maatCfg.setIpRegionList(ipRegionList); maatCfg.setStrRegionList(strRegionList); maatCfg.setNumRegionList(numRegionList); maatCfg.setDigestRegionList(digestRegionList); maatCfg.setGroupRelationList(groupRelationList); maatCfg.setGroupNum(groupRelationList.size()); maatCfg.setAreaIpRegionList(areaIpRegionList); maatCfg.setIsValid(entity.getIsValid()); maatCfg.setAuditTime(new Date()); if(!StringUtil.isEmpty(userRegion)){ maatCfg.setUserRegion(userRegion); } configCompileList.add(maatCfg); } page.setList(list); if(page.isLastPage()){ hasData = false; } if(!StringUtil.isEmpty(configCompileList.size())){ maatBean.setConfigCompileList(configCompileList); maatBean.setAuditTime(new Date()); maatBean.setCreatorName(UserUtils.getUser().getName()); maatBean.setVersion(Constants.MAAT_VERSION); maatBean.setOpAction(Constants.INSERT_ACTION); String json=gsonToJson(maatBean); //调用服务接口下发配置数据 if(isUpdateCfg) { logger.info("配置批量下发:"+json); //调用服务接口同步回调类配置 ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); if(result!=null){ logger.info("配置批量下发响应信息:"+result.getMsg()); } }else { //调用服务接口配置全量更新 FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+page.getPageNo()+"_"+System.currentTimeMillis()+".json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(((!hasData)&&lastServiceTag)?"FINISHED":null)); } } return hasData; } /** * 文件摘要配置批量下发 * @param cfgList * @param userRegionList * @param page * @param entity * @param list * @param hasData * @param isUpdateCfg 业务配置全部生效时需同步更新库表配置状态 * @return * @throws NoSuchFieldException * @throws SecurityException * @throws IllegalArgumentException * @throws IllegalAccessException */ public boolean auditFileDigestData(List> cfgList, List> userRegionList, Page page, BaseCfg entity, List list, boolean hasData, boolean isUpdateCfg)throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ ToMaatBean maatBean; MaatCfg maatCfg; List configCompileList; List groupRelationList; List ipRegionList; List strRegionList; List numRegionList; List digestRegionList; List areaIpRegionList; List ipList = new ArrayList(); List strList = new ArrayList(); List complexStrList = new ArrayList(); List numList = new ArrayList(); List fileList = new ArrayList(); maatBean = new ToMaatBean(); configCompileList = new ArrayList(); List compileIds = new ArrayList(); for(FileDigestCfg cfg:list){ compileIds.add(cfg.getCompileId()); fileList.add(cfg); } if(isUpdateCfg) { if(!StringUtil.isEmpty(compileIds) && !StringUtil.isEmpty(entity.getTableName())) { commonPolicyDao.auditCfgBatch( entity.getTableName(), entity,compileIds,null); } } if(cfgList!=null){ for(Map m:cfgList){ String tableName = m.get("tableName").toString(); if("1".equals(m.get("cfgType"))){ ipList.addAll(configSynchronizationDao.getIpPortList(tableName, compileIds)); }else if("2".equals(m.get("cfgType"))){ strList.addAll(configSynchronizationDao.getStrList(tableName,compileIds)); }else if("3".equals(m.get("cfgType"))){ complexStrList.addAll(configSynchronizationDao.getComplexStrList(tableName,compileIds)); }else if("4".equals(m.get("cfgType"))){ }else if("5".equals(m.get("cfgType"))){ fileList.addAll(configSynchronizationDao.getFileDigestList(tableName, compileIds)); } if(isUpdateCfg) { commonPolicyDao.auditCfgBatch( tableName, entity,compileIds,null); } } } //批量获取regionId,groupId(相同编译下的IP类配置多条ip只获取一个组号),分组复用的域配置不需要重新获取regionId,groupId List regionIds = ConfigServiceUtil.getId(3, ipList.size()+strList.size()+complexStrList.size()+numList.size()+fileList.size()); List groupIds = ConfigServiceUtil.getId(2, ipList.size()+strList.size()+complexStrList.size()+numList.size()+fileList.size()); for(FileDigestCfg cfg:list){ maatCfg = new MaatCfg(); maatCfg.initDefaultValue(); groupRelationList = new ArrayList(); ipRegionList = new ArrayList(); strRegionList = new ArrayList(); numRegionList = new ArrayList(); digestRegionList = new ArrayList(); areaIpRegionList = new ArrayList(); List list1 = new ArrayList(); List list2 = new ArrayList(); List list3 = new ArrayList(); List list4 = new ArrayList(); List list5 = new ArrayList(); String userRegion = ""; //处理自定义域 if(userRegionList!=null){ for(Map n:userRegionList){ Object userRegionPosition = n.get("userRegionPosition"); if(userRegionPosition!=null && (userRegionPosition.toString().equals("1")||userRegionPosition.toString().equals("0"))){ //通过反射机制获取自定义域字段值 String regionColumn = n.get("regionColumn").toString(); Class aClass = null; if(userRegionPosition.toString().equals(("0"))){ aClass = BaseCfg.class; }else{ aClass = FileDigestCfg.class; } Object value = ""; Field field = aClass.getDeclaredField(regionColumn); field.setAccessible(true); value = field.get(cfg); if(!StringUtil.isEmpty(value)){ if(StringUtil.isEmpty(n.get("regionKey"))){ userRegion = value.toString(); }else{ userRegion += n.get("regionKey")+"="+value+Constants.USER_REGION_SPLIT; } } } // System.out.println("userRegionList:"+n.get("regionKey")+","+n.get("regionColumn")+","+n.get("handleType")); } if(userRegion.endsWith(Constants.USER_REGION_SPLIT)){ userRegion = userRegion.substring(0, userRegion.length()-1); } } //配置域转换 configCovert(ipList,strList,complexStrList, numList,fileList,regionIds,groupIds,entity,cfg.getCompileId(), StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime(), groupRelationList,ipRegionList,strRegionList,numRegionList,digestRegionList,areaIpRegionList,userRegion); BeanUtils.copyProperties(cfg, maatCfg); maatCfg.setAction(cfg.getAction()); maatCfg.setAuditTime(StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime()); maatCfg.setIpRegionList(ipRegionList); maatCfg.setStrRegionList(strRegionList); maatCfg.setNumRegionList(numRegionList); maatCfg.setDigestRegionList(digestRegionList); maatCfg.setGroupRelationList(groupRelationList); maatCfg.setGroupNum(groupRelationList.size()); maatCfg.setAreaIpRegionList(areaIpRegionList); maatCfg.setIsValid(entity.getIsValid()); maatCfg.setAuditTime(new Date()); if(!StringUtil.isEmpty(userRegion)){ maatCfg.setUserRegion(userRegion); } configCompileList.add(maatCfg); } page.setList(list); if(page.isLastPage()){ hasData = false; } if(!StringUtil.isEmpty(configCompileList.size())){ maatBean.setConfigCompileList(configCompileList); maatBean.setAuditTime(new Date()); maatBean.setCreatorName(UserUtils.getUser().getName()); maatBean.setVersion(Constants.MAAT_VERSION); maatBean.setOpAction(Constants.INSERT_ACTION); String json=gsonToJson(maatBean); //调用服务接口下发配置数据 if(isUpdateCfg) { logger.info("配置批量下发:"+json); //调用服务接口同步回调类配置 ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); if(result!=null){ logger.info("配置批量下发响应信息:"+result.getMsg()); } }else { //调用服务接口配置全量更新 FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+page.getPageNo()+"_"+System.currentTimeMillis()+".json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(((!hasData)&&lastServiceTag)?"FINISHED":null)); } } return hasData; } /** * APP策略配置批量下发 * @param cfgList * @param userRegionList * @param page * @param entity * @param list * @param hasData * @param isUpdateCfg 业务配置全部生效时需同步更新库表配置状态 * @return * @throws NoSuchFieldException * @throws SecurityException * @throws IllegalArgumentException * @throws IllegalAccessException */ public boolean auditAppPolicyData(List> cfgList, List> userRegionList, Page page, BaseCfg entity, List list, boolean hasData, boolean isUpdateCfg)throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ ToMaatBean maatBean; MaatCfg maatCfg; List configCompileList; List groupRelationList; List ipRegionList; List strRegionList; List numRegionList; List digestRegionList; List areaIpRegionList; List ipList = new ArrayList(); List strList = new ArrayList(); List complexStrList = new ArrayList(); List numList = new ArrayList(); List fileList = new ArrayList(); maatBean = new ToMaatBean(); configCompileList = new ArrayList(); List compileIds = new ArrayList(); List asnGroupIds = new ArrayList(); for(AppPolicyCfg cfg:list){ compileIds.add(cfg.getCompileId()); } if(isUpdateCfg) { if(!StringUtil.isEmpty(compileIds) && !StringUtil.isEmpty(entity.getTableName())) { commonPolicyDao.auditCfgBatch( entity.getTableName(), entity,compileIds,null); } } if(cfgList!=null){ for(Map m:cfgList){ String tableName = m.get("tableName").toString(); if("1".equals(m.get("cfgType"))){ ipList.addAll(configSynchronizationDao.getIpPortList(tableName, compileIds)); }else if("2".equals(m.get("cfgType"))){ strList.addAll(configSynchronizationDao.getStrList(tableName,compileIds)); }else if("3".equals(m.get("cfgType"))){ complexStrList.addAll(configSynchronizationDao.getComplexStrList(tableName,compileIds)); }else if("4".equals(m.get("cfgType"))){ }else if("5".equals(m.get("cfgType"))){ fileList.addAll(configSynchronizationDao.getFileDigestList(tableName, compileIds)); } if(isUpdateCfg) { if(!StringUtil.isEmpty(compileIds) && !StringUtil.isEmpty(entity.getTableName())) { commonPolicyDao.auditCfgBatch( entity.getTableName(), entity,compileIds,null); } } } } //批量获取regionId,groupId(相同编译下的IP类配置多条ip只获取一个组号),compileIds.size()表示app策略本身有一个字符串域 List regionIds = ConfigServiceUtil.getId(3, ipList.size()+strList.size()+compileIds.size()+complexStrList.size()+numList.size()+fileList.size()); List groupIds = ConfigServiceUtil.getId(2, ipList.size()+strList.size()+compileIds.size()+complexStrList.size()+numList.size()+fileList.size()); for(AppPolicyCfg cfg:list){ maatCfg = new MaatCfg(); maatCfg.initDefaultValue(); groupRelationList = new ArrayList(); ipRegionList = new ArrayList(); strRegionList = new ArrayList(); numRegionList = new ArrayList(); digestRegionList = new ArrayList(); areaIpRegionList = new ArrayList(); List list1 = new ArrayList(); List list2 = new ArrayList(); List list3 = new ArrayList(); List list4 = new ArrayList(); List list5 = new ArrayList(); String userRegion = ""; //处理自定义域 if(userRegionList!=null){ for(Map n:userRegionList){ Object userRegionPosition = n.get("userRegionPosition"); if(userRegionPosition!=null && (userRegionPosition.toString().equals("1")||userRegionPosition.toString().equals("0"))){ //通过反射机制获取自定义域字段值 String regionColumn = n.get("regionColumn").toString(); Class aClass = null; if(userRegionPosition.toString().equals(("0"))){ aClass = BaseCfg.class; }else{ aClass = AppPolicyCfg.class; } Object value = ""; Field field = aClass.getDeclaredField(regionColumn); field.setAccessible(true); value = field.get(cfg); if(!StringUtil.isEmpty(value)){ if(StringUtil.isEmpty(n.get("regionKey"))){ userRegion = value.toString(); }else{ userRegion += n.get("regionKey")+"="+value+Constants.USER_REGION_SPLIT; } } } } if(userRegion.endsWith(Constants.USER_REGION_SPLIT)){ userRegion = userRegion.substring(0, userRegion.length()-1); } } //将app码与行为码设置为字符串域 StringBuffer cfgKeywords = new StringBuffer(); BaseStringCfg strCfg = new BaseStringCfg(); if(cfg.getServiceId().equals(35)||cfg.getServiceId().equals(147)||cfg.getServiceId().equals(1059)){//基础协议 cfgKeywords.append(Constants.PROTO_ID_REGION + "=" + cfg.getAppCode()); }else if(cfg.getServiceId().equals(33)||cfg.getServiceId().equals(145)||cfg.getServiceId().equals(1056)){ cfgKeywords.append(Constants.APP_ID_REGION + "=" + cfg.getAppCode()); if(cfg.getBehavCode()!=null){ cfgKeywords.append(Constants.KEYWORD_EXPR); cfgKeywords.append(Constants.BEHAV_ID_REGION + "=" + cfg.getBehavCode()); } }else if(cfg.getServiceId().equals(36)||cfg.getServiceId().equals(148)||cfg.getServiceId().equals(1060)){//隧道加密协议 cfgKeywords.append(Constants.PROTO_ID_REGION + "=" + cfg.getAppCode()); if(cfg.getBehavCode()!=null){ cfgKeywords.append(Constants.KEYWORD_EXPR); cfgKeywords.append(Constants.BEHAV_ID_REGION + "=" + cfg.getBehavCode()); } } cfg.setCfgKeywords(cfgKeywords.toString()); BeanUtils.copyProperties(cfg, strCfg); strList.add(strCfg); //配置域转换 configCovert(ipList,strList,complexStrList, numList,fileList,regionIds,groupIds,entity,cfg.getCompileId(), StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime(), groupRelationList,ipRegionList,strRegionList,numRegionList,digestRegionList,areaIpRegionList,userRegion); BeanUtils.copyProperties(cfg, maatCfg); maatCfg.setAction(cfg.getAction()); maatCfg.setAuditTime(StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime()); maatCfg.setIpRegionList(ipRegionList); maatCfg.setStrRegionList(strRegionList); maatCfg.setNumRegionList(numRegionList); maatCfg.setDigestRegionList(digestRegionList); maatCfg.setGroupRelationList(groupRelationList); maatCfg.setGroupNum(groupRelationList.size()); maatCfg.setAreaIpRegionList(areaIpRegionList); maatCfg.setIsValid(entity.getIsValid()); maatCfg.setAuditTime(new Date()); if(!StringUtil.isEmpty(userRegion)){ maatCfg.setUserRegion(userRegion); } configCompileList.add(maatCfg); } page.setList(list); if(page.isLastPage()){ hasData = false; } if(!StringUtil.isEmpty(configCompileList.size())){ maatBean.setConfigCompileList(configCompileList); maatBean.setAuditTime(new Date()); maatBean.setCreatorName(UserUtils.getUser().getName()); maatBean.setVersion(Constants.MAAT_VERSION); maatBean.setOpAction(Constants.INSERT_ACTION); String json=gsonToJson(maatBean); //调用服务接口下发配置数据 if(isUpdateCfg) { logger.info("配置批量下发:"+json); //调用服务接口同步回调类配置 ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); if(result!=null){ logger.info("配置批量下发响应信息:"+result.getMsg()); } }else { //调用服务接口配置全量更新 FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+page.getPageNo()+"_"+System.currentTimeMillis()+".json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(((!hasData)&&lastServiceTag)?"FINISHED":null)); } } return hasData; } /** * APP特征批量下发 * @param cfgList * @param userRegionList * @param page * @param entity * @param list * @param hasData * @param isUpdateCfg 业务配置全部生效时需同步更新库表配置状态 * @return * @throws NoSuchFieldException * @throws SecurityException * @throws IllegalArgumentException * @throws IllegalAccessException */ public boolean auditAppFeatureData(List> cfgList, List> userRegionList, Page page, BaseCfg entity, List list, boolean hasData, boolean isUpdateCfg)throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ ToMaatBean maatBean; MaatCfg maatCfg; List configCompileList; List groupRelationList; List ipRegionList; List strRegionList; List numRegionList; List digestRegionList; List areaIpRegionList; List ipList = new ArrayList(); List strList = new ArrayList(); List complexStrList = new ArrayList(); List numList = new ArrayList(); List fileList = new ArrayList(); maatBean = new ToMaatBean(); configCompileList = new ArrayList(); List compileIds = new ArrayList(); List asnGroupIds = new ArrayList(); for(AppFeatureIndex cfg:list){ compileIds.add(cfg.getCompileId()); if(entity.getServiceId().equals(37)||entity.getServiceId().equals(149)){ asnGroupIds.add(cfg.getUserRegion4()); } } if(cfgList!=null){ for(Map m:cfgList){ String tableName = m.get("tableName").toString(); if("1".equals(m.get("cfgType"))){ ipList.addAll(configSynchronizationDao.getAppIpPortList(tableName, compileIds)); }else if("2".equals(m.get("cfgType"))){ strList.addAll(configSynchronizationDao.getStrList(tableName,compileIds)); }else if("3".equals(m.get("cfgType"))){ complexStrList.addAll(configSynchronizationDao.getComplexStrList(tableName,compileIds)); }else if("4".equals(m.get("cfgType"))){ }else if("5".equals(m.get("cfgType"))){ fileList.addAll(configSynchronizationDao.getFileDigestList(tableName, compileIds)); } } } //批量获取regionId,groupId(相同编译下的IP类配置多条ip只获取一个组号),分组复用的域配置不需要重新获取regionId,groupId List regionIds = ConfigServiceUtil.getId(3, ipList.size()+strList.size()+complexStrList.size()+numList.size()+fileList.size()); List groupIds = ConfigServiceUtil.getId(2, ipList.size()+strList.size()+complexStrList.size()+numList.size()+fileList.size()); for(AppFeatureIndex cfg:list){ maatCfg = new MaatCfg(); maatCfg.initDefaultValue(); groupRelationList = new ArrayList(); ipRegionList = new ArrayList(); strRegionList = new ArrayList(); numRegionList = new ArrayList(); digestRegionList = new ArrayList(); areaIpRegionList = new ArrayList(); List list1 = new ArrayList(); List list2 = new ArrayList(); List list3 = new ArrayList(); List list4 = new ArrayList(); List list5 = new ArrayList(); String userRegion = ""; //处理自定义域 if(userRegionList!=null){ for(Map n:userRegionList){ Object userRegionPosition = n.get("userRegionPosition"); if(userRegionPosition!=null && (userRegionPosition.toString().equals("1")||userRegionPosition.toString().equals("0"))){ //通过反射机制获取自定义域字段值 String regionColumn = n.get("regionColumn").toString(); Class aClass = null; if(userRegionPosition.toString().equals(("0"))){ aClass = BaseCfg.class; }else{ aClass = AppFeatureIndex.class; } Object value = ""; Field field = aClass.getDeclaredField(regionColumn); field.setAccessible(true); value = field.get(cfg); if(!StringUtil.isEmpty(value)){ if(StringUtil.isEmpty(n.get("regionKey"))){ userRegion = value.toString(); }else{ userRegion += n.get("regionKey")+"="+value+Constants.USER_REGION_SPLIT; } } } } if(userRegion.endsWith(Constants.USER_REGION_SPLIT)){ userRegion = userRegion.substring(0, userRegion.length()-1); } } //配置域转换 configCovert(ipList,strList,complexStrList, numList,fileList,regionIds,groupIds,entity,cfg.getCompileId(), StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime(), groupRelationList,ipRegionList,strRegionList,numRegionList,digestRegionList,areaIpRegionList,userRegion); BeanUtils.copyProperties(cfg, maatCfg); maatCfg.setAction(cfg.getAction()); maatCfg.setAuditTime(StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime()); maatCfg.setIpRegionList(ipRegionList); maatCfg.setStrRegionList(strRegionList); maatCfg.setNumRegionList(numRegionList); maatCfg.setDigestRegionList(digestRegionList); maatCfg.setGroupRelationList(groupRelationList); maatCfg.setGroupNum(groupRelationList.size()); maatCfg.setAreaIpRegionList(areaIpRegionList); maatCfg.setIsValid(entity.getIsValid()); maatCfg.setAuditTime(new Date()); if(!StringUtil.isEmpty(userRegion)){ maatCfg.setUserRegion(userRegion); } configCompileList.add(maatCfg); } page.setList(list); if(page.isLastPage()){ hasData = false; } if(!StringUtil.isEmpty(configCompileList.size())){ maatBean.setConfigCompileList(configCompileList); maatBean.setAuditTime(new Date()); maatBean.setCreatorName(UserUtils.getUser().getName()); maatBean.setVersion(Constants.MAAT_VERSION); maatBean.setOpAction(Constants.INSERT_ACTION); String json=gsonToJson(maatBean); //调用服务接口下发配置数据 if(isUpdateCfg) { logger.info("配置批量下发:"+json); //调用服务接口同步回调类配置 ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); if(result!=null){ logger.info("配置批量下发响应信息:"+result.getMsg()); } }else { //调用服务接口配置全量更新 FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+page.getPageNo()+"_"+System.currentTimeMillis()+".json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(((!hasData)&&lastServiceTag)?"FINISHED":null)); } } return hasData; } /** * 处理ddos配置 * @param serviceId * @param request * @param response * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalAccessException * @throws IllegalArgumentException */ public void handleDdosMaatData(List>cfgList,List>userRegionList, Page page,BaseCfg entity,HttpServletRequest request,HttpServletResponse response, boolean isUpdateCfg) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ boolean hasData = true; while(hasData){ entity.setPage(page); List list = configSynchronizationDao.getDdosIpCfgList(entity); if(!StringUtil.isEmpty(list)){ hasData=auditDdosMaatData(cfgList,userRegionList, page,entity,list,hasData,isUpdateCfg); if(hasData) { page.setPageNo(page.getNext()); } }else{ hasData = false; } } } /** * 处理单域maat配置 * @param serviceId * @param request * @param response * @throws SecurityException * @throws NoSuchFieldException * @throws IllegalAccessException * @throws IllegalArgumentException */ public void handleSingleMaatData(int cfgType,List>userRegionList, Page page,BaseCfg entity,HttpServletRequest request,HttpServletResponse response, boolean isUpdateCfg) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ boolean hasData = true; while(hasData){ entity.setPage(page); List list = Lists.newArrayList(); if(cfgType==1){ if(entity.getServiceId().equals(1028)){ list = configSynchronizationDao.getAppIpFeatureList(entity); }else{ list = configSynchronizationDao.getIpPortListByService(entity); } }else if(cfgType==2){ list = configSynchronizationDao.getStrListByService(entity); }else if(cfgType==3){ list = configSynchronizationDao.getComplexStrListByService(entity); } if(!StringUtil.isEmpty(list)){ if(entity.getServiceId().equals(1028)){ hasData=auditAppIpData(userRegionList, page,entity,list,hasData,isUpdateCfg); }else{ hasData=auditSingleMaatData(cfgType,userRegionList, page,entity,list,hasData,isUpdateCfg); } if(hasData) { page.setPageNo(page.getNext()); } }else{ hasData = false; } } } /** * ddos配置批量下发 * @param cfgList * @param userRegionList * @param page * @param entity * @param list * @param hasData * @param isUpdateCfg 业务配置全部生效时需同步更新库表配置状态 * @return * @throws NoSuchFieldException * @throws SecurityException * @throws IllegalArgumentException * @throws IllegalAccessException */ public boolean auditDdosMaatData(List> cfgList, List>userRegionList, Page page, BaseCfg entity, List list, boolean hasData, boolean isUpdateCfg) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ ToMaatBean maatBean; MaatCfg maatCfg; List configCompileList; List groupRelationList; List ipRegionList; List strRegionList; List numRegionList; List digestRegionList; List areaIpRegionList; maatBean = new ToMaatBean(); configCompileList = new ArrayList(); //批量获取regionId,groupId List regionIds = ConfigServiceUtil.getId(3, list.size()); List groupIds = ConfigServiceUtil.getId(2, list.size()); for(int i=0;i list1 = new ArrayList(); String userRegion = ""; //处理自定义域 if(userRegionList!=null){ for(Map n:userRegionList){ Object userRegionPosition = n.get("userRegionPosition"); if(userRegionPosition!=null && (userRegionPosition.toString().equals("1")||userRegionPosition.toString().equals("0"))){ //通过反射机制获取自定义域字段值 String regionColumn = n.get("regionColumn").toString(); Class aClass = null; if(userRegionPosition.toString().equals(("0"))){ aClass = BaseCfg.class; }else{ aClass = DdosIpCfg.class; } Object value = ""; Field field = aClass.getDeclaredField(regionColumn); field.setAccessible(true); value = field.get(cfg); if(!StringUtil.isEmpty(value)){ if(StringUtil.isEmpty(n.get("regionKey"))){ userRegion = value.toString(); }else{ userRegion += n.get("regionKey")+"="+value+Constants.USER_REGION_SPLIT; } } } } if(userRegion.endsWith(Constants.USER_REGION_SPLIT)){ userRegion = userRegion.substring(0, userRegion.length()-1); } } list1.add(cfg); if(list1.size()>0){ Map map = cfgToMaatConvert(ipRegionList,list1,1,groupRelationList); groupRelationList=map.get("groupList"); ipRegionList=map.get("dstList"); if(map.get("numRegionList")!=null){ numRegionList.addAll(map.get("numRegionList")); } } BeanUtils.copyProperties(cfg, maatCfg); maatCfg.setAction(cfg.getAction()); maatCfg.setAuditTime(StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime()); maatCfg.setIpRegionList(ipRegionList); maatCfg.setStrRegionList(strRegionList); maatCfg.setNumRegionList(numRegionList); maatCfg.setDigestRegionList(digestRegionList); maatCfg.setGroupRelationList(groupRelationList); maatCfg.setGroupNum(groupRelationList.size()); maatCfg.setAreaIpRegionList(areaIpRegionList); maatCfg.setIsValid(entity.getIsValid()); if(!StringUtil.isEmpty(userRegion)){ maatCfg.setUserRegion(userRegion); } configCompileList.add(maatCfg); } page.setList(list); if(page.isLastPage()){ hasData = false; } if(!StringUtil.isEmpty(configCompileList.size())){ maatBean.setConfigCompileList(configCompileList); maatBean.setAuditTime(new Date()); maatBean.setCreatorName(UserUtils.getUser().getName()); maatBean.setVersion(Constants.MAAT_VERSION); maatBean.setOpAction(Constants.INSERT_ACTION); String json=gsonToJson(maatBean); //调用服务接口下发配置数据 if(isUpdateCfg) { logger.info("配置批量下发:"+json); //调用服务接口同步回调类配置 ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); if(result!=null){ logger.info("配置批量下发响应信息:"+result.getMsg()); } }else { //调用服务接口配置全量更新 FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+page.getPageNo()+"_"+System.currentTimeMillis()+".json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(((!hasData)&&lastServiceTag)?"FINISHED":null)); } } return hasData; } /** * 单域配置批量下发 * @param cfgList * @param userRegionList * @param page * @param entity * @param list * @param hasData * @param isUpdateCfg 业务配置全部生效时需同步更新库表配置状态 * @return * @throws NoSuchFieldException * @throws SecurityException * @throws IllegalArgumentException * @throws IllegalAccessException */ public boolean auditSingleMaatData(int cfgType, List>userRegionList, Page page, BaseCfg entity, List list, boolean hasData, boolean isUpdateCfg) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ ToMaatBean maatBean; MaatCfg maatCfg; List configCompileList; List groupRelationList; List ipRegionList; List strRegionList; List numRegionList; List digestRegionList; List areaIpRegionList; maatBean = new ToMaatBean(); configCompileList = new ArrayList(); //批量获取regionId,groupId List regionIds = ConfigServiceUtil.getId(3, list.size()); List groupIds = ConfigServiceUtil.getId(2, list.size()); IpPortCfg ipCfg = new IpPortCfg(); BaseStringCfg strCfg = new BaseStringCfg(); ComplexkeywordCfg complexStrCfg = new ComplexkeywordCfg(); for(int i=0;i n:userRegionList){ Object userRegionPosition = n.get("userRegionPosition"); if(userRegionPosition!=null){ //通过反射机制获取自定义域字段值 String regionColumn = n.get("regionColumn").toString(); Class aClass = null; if(userRegionPosition.toString().equals(("0"))){ aClass = BaseCfg.class; }else{ if(cfgType==1){ aClass = IpPortCfg.class; }else if(cfgType==2){ aClass = BaseStringCfg.class; }else if(cfgType==3){ aClass = ComplexkeywordCfg.class; } } Object value = ""; Field field = aClass.getDeclaredField(regionColumn); field.setAccessible(true); if(cfgType==1){ value = field.get(ipCfg); }else if(cfgType==2){ value = field.get(strCfg); }else if(cfgType==3){ value = field.get(complexStrCfg); } if(!StringUtil.isEmpty(value)){ if(StringUtil.isEmpty(n.get("regionKey"))){ userRegion = value.toString(); }else{ userRegion += n.get("regionKey")+"="+value+Constants.USER_REGION_SPLIT; } } } } if(userRegion.endsWith(Constants.USER_REGION_SPLIT)){ userRegion = userRegion.substring(0, userRegion.length()-1); } } if(cfgType==1){ ipCfg.setRegionId(regionIds.get(0)); regionIds.remove(0); ipCfg.setGroupId(groupIds.get(0)); groupIds.remove(0); list1.add(ipCfg); }else if(cfgType==2){ strCfg.setRegionId(regionIds.get(0)); regionIds.remove(0); strCfg.setGroupId(groupIds.get(0)); groupIds.remove(0); list1.add(strCfg); }else if(cfgType==3){ complexStrCfg.setRegionId(regionIds.get(0)); regionIds.remove(0); complexStrCfg.setGroupId(groupIds.get(0)); groupIds.remove(0); list1.add(complexStrCfg); } if(list1.size()>0){ if(cfgType==1){ Map map = cfgToMaatConvert(ipRegionList,list1,1,groupRelationList); groupRelationList=map.get("groupList"); ipRegionList=map.get("dstList"); if(map.get("numRegionList")!=null){ numRegionList.addAll(map.get("numRegionList")); } }else if(cfgType==2||cfgType==3){ Map map = cfgToMaatConvert(strRegionList,list1,2,groupRelationList); groupRelationList=map.get("groupList"); strRegionList=map.get("dstList"); } } BeanUtils.copyProperties(cfg, maatCfg); maatCfg.setAction(cfg.getAction()); maatCfg.setAuditTime(StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime()); maatCfg.setIpRegionList(ipRegionList); maatCfg.setStrRegionList(strRegionList); maatCfg.setNumRegionList(numRegionList); maatCfg.setDigestRegionList(digestRegionList); maatCfg.setGroupRelationList(groupRelationList); maatCfg.setGroupNum(groupRelationList.size()); maatCfg.setAreaIpRegionList(areaIpRegionList); maatCfg.setIsValid(entity.getIsValid()); if(!StringUtil.isEmpty(userRegion)){ maatCfg.setUserRegion(userRegion); } configCompileList.add(maatCfg); } page.setList(list); if(page.isLastPage()){ hasData = false; } if(!StringUtil.isEmpty(configCompileList.size())){ maatBean.setConfigCompileList(configCompileList); maatBean.setAuditTime(new Date()); maatBean.setCreatorName(UserUtils.getUser().getName()); maatBean.setVersion(Constants.MAAT_VERSION); maatBean.setOpAction(Constants.INSERT_ACTION); String json=gsonToJson(maatBean); //调用服务接口下发配置数据 if(isUpdateCfg) { logger.info("配置批量下发:"+json); //调用服务接口同步回调类配置 ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); if(result!=null){ logger.info("配置批量下发响应信息:"+result.getMsg()); } }else { //调用服务接口配置全量更新 FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+page.getPageNo()+"_"+System.currentTimeMillis()+".json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(((!hasData)&&lastServiceTag)?"FINISHED":null)); } } return hasData; } /** * 处理app ip特征(分组复用)配置 * @param serviceId * @param request * @param response */ public boolean auditAppIpData(List>userRegionList, Page page, BaseCfg entity, List list, boolean hasData, boolean isUpdateCfg) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ ToMaatBean maatBean; MaatCfg maatCfg; List configCompileList; List groupRelationList; List ipRegionList; List strRegionList; List numRegionList; List digestRegionList; List areaIpRegionList; maatBean = new ToMaatBean(); configCompileList = new ArrayList(); //同一编译IP的分组 Map> dataMap=new HashMap<>(); for(int i=0;i ipList=new ArrayList<>(); ipList.add(cfg); dataMap.put(cfg.getCompileId(), ipList); } } for(List entitys:dataMap.values()) { maatCfg = new MaatCfg(); maatCfg.initDefaultValue(); groupRelationList = new ArrayList(); ipRegionList = new ArrayList(); strRegionList = new ArrayList(); numRegionList = new ArrayList(); digestRegionList = new ArrayList(); areaIpRegionList = new ArrayList(); SpecificServiceCfg specificServiceCfg=specificServiceCfgDao.getBySpecServiceId(entitys.get(0).getSpecServiceId()); ConfigGroupInfo configGroupInfo=configGroupInfoDao.getConfigGroupInfoByGroupId(specificServiceCfg.getGroupId()); /*if(configGroupInfo==null) { Integer groupId = ConfigServiceUtil.getId(2, 1).get(0); specificServiceCfg.setGroupId(groupId); configGroupInfo = new ConfigGroupInfo(); configGroupInfo.setGroupId(specificServiceCfg.getGroupId()); configGroupInfo.setGroupName(specificServiceCfg.getSpecServiceName()); configGroupInfo.setIsIssued(0); configGroupInfo.setCompileId(entitys.get(0).getCompileId()); configGroupInfo.setGroupType(1); configGroupInfoDao.insertConfigGroupInfo(configGroupInfo); //更新group_id specificServiceCfg.setOpTime(new Date()); specificServiceCfgDao.update(specificServiceCfg); }*/ Integer groupId=configGroupInfo.getGroupId(); GroupCfg groupCfg=new GroupCfg(); groupCfg.setCompileId(entitys.get(0).getCompileId()); groupCfg.setGroupId(groupId); groupCfg.setIsValid(Constants.VALID_YES); groupCfg.setAuditTime(StringUtil.isEmpty(entity.getAuditTime())?entitys.get(0).getAuditTime():entity.getAuditTime()); groupRelationList.add(groupCfg); BeanUtils.copyProperties(entitys.get(0), maatCfg); ipRegionList.addAll(groupReuseCfgAddRemoveConvert(entitys,Constants.VALID_YES,groupId)); maatCfg.setAction(entitys.get(0).getAction()); maatCfg.setAuditTime(entitys.get(0).getAuditTime()); maatCfg.setIpRegionList(ipRegionList); maatCfg.setStrRegionList(strRegionList); maatCfg.setNumRegionList(numRegionList); maatCfg.setDigestRegionList(digestRegionList); maatCfg.setGroupRelationList(groupRelationList); maatCfg.setGroupNum(groupRelationList.size()); maatCfg.setAreaIpRegionList(areaIpRegionList); maatCfg.setIsValid(entitys.get(0).getIsValid()); // 设置APP自定义域 String userRegion = "APP_ID=" + entitys.get(0).getAppCode()/*+Constants.USER_REGION_SPLIT+"ASEV_ID="+businessType*/; maatCfg.setUserRegion(userRegion); configCompileList.add(maatCfg); maatBean.setConfigCompileList(configCompileList); maatBean.setAuditTime(entitys.get(0).getAuditTime()); maatBean.setCreatorName(entitys.get(0).getCurrentUser().getName()); maatBean.setVersion(Constants.MAAT_VERSION); maatBean.setOpAction(Constants.INSERT_ACTION); } page.setList(list); if(page.isLastPage()){ hasData = false; } if(!StringUtil.isEmpty(configCompileList.size())){ String json=gsonToJson(maatBean); //调用服务接口下发配置数据 if(isUpdateCfg) { logger.info("配置批量下发:"+json); //调用服务接口同步回调类配置 ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); if(result!=null){ logger.info("配置批量下发响应信息:"+result.getMsg()); } }else { //调用服务接口配置全量更新 FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+page.getPageNo()+"_"+System.currentTimeMillis()+".json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,(((!hasData)&&lastServiceTag)?"FINISHED":null)); } } return hasData; } /** * 处理回调类业务配置 * @param serviceId * @param request * @param response * @throws ClassNotFoundException */ public void handleCallbackData(String className, Page page,BaseCfg entity,HttpServletRequest request,HttpServletResponse response, boolean isUpdateCfg) throws ClassNotFoundException{ boolean hasData = true; while(hasData){ entity.setPage(page); hasData=auditCallbackData(className,page,entity,hasData,isUpdateCfg); if(hasData){ page.setPageNo(page.getNext()); } } } /** * 回调类配置下发 * @param className * @param page * @param entity * @param hasData * @param isUpdateCfg * @throws ClassNotFoundException */ public boolean auditCallbackData(String className, Page page,BaseCfg entity, boolean hasData, boolean isUpdateCfg) throws ClassNotFoundException{ ToMaatBean maatBean; MaatCfg maatCfg; List configCompileList; List groupRelationList; List ipRegionList; List strRegionList; List numRegionList; List digestRegionList; List areaIpRegionList; maatBean = new ToMaatBean(); configCompileList = new ArrayList(); List list = new ArrayList(); List newList = new ArrayList(); if(entity.getServiceId().equals(3)){//ip drop回调类配置用了主表和子表关系 list = configSynchronizationDao.getCfgIndexList(entity); List compileIds = Lists.newArrayList(); for(int i=0;i0){ //调用服务接口下发配置数据 String json=gsonToJson(newList); if(isUpdateCfg) { logger.info("配置批量下发:"+json); //调用服务接口同步回调类配置 ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); if(result!=null){ logger.info("配置批量下发响应信息:"+result.getMsg()); } }else { FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+page.getPageNo()+"_"+System.currentTimeMillis()+".json", json, false); //调用服务接口同步回调类配置 JSONObject result = ConfigServiceUtil.configSync(json,2,entity.getServiceId(),entity.getTableName(),(((!hasData)&&lastServiceTag)?"FINISHED":null)); } } return hasData; } /** * 配置域转换 * @param ipList * @param strList * @param complexStrList * @param numList * @param fileList * @param regionIds * @param groupIds * @param entity * @param compileId * @param auditTime * @param groupRelationList * @param ipRegionList * @param strRegionList * @param numRegionList * @param digestRegionList * @param areaIpRegionList * @param userRegion */ public void configCovert(List ipList,List strList,List complexStrList, List numList, List fileList,List regionIds,List groupIds,BaseCfg entity, Integer compileId,Date auditTime,List groupRelationList, List ipRegionList, List strRegionList, List numRegionList, List digestRegionList, List areaIpRegionList,String userRegion){ List list1 = new ArrayList(); List list2 = new ArrayList(); List list3 = new ArrayList(); List list4 = new ArrayList(); List list5 = new ArrayList(); if(ipList.size()>0){ for(int index=0;index0){ ipList.removeAll(list1); Map map = cfgToMaatConvert(ipRegionList,list1,1,groupRelationList); groupRelationList=map.get("groupList"); ipRegionList=map.get("dstList"); if(map.get("numRegionList")!=null){ numRegionList.addAll(map.get("numRegionList")); } } if(list2.size()>0){ strList.removeAll(list2); Map map = cfgToMaatConvert(strRegionList,list2,2,groupRelationList); groupRelationList=map.get("groupList"); strRegionList=map.get("dstList"); } if(list3.size()>0){ complexStrList.removeAll(list3); Map map = cfgToMaatConvert(strRegionList,list3,3,groupRelationList); groupRelationList=map.get("groupList"); strRegionList=map.get("dstList"); } if(list4.size()>0){ numList.removeAll(list4); Map map = cfgToMaatConvert(numRegionList,list4,4,groupRelationList); groupRelationList=map.get("groupList"); numRegionList=map.get("dstList"); } if(list5.size()>0){ fileList.removeAll(list5); Map map = cfgToMaatConvert(digestRegionList,list5,5,groupRelationList); groupRelationList=map.get("groupList"); digestRegionList=map.get("dstList"); } } }