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.google.gson.Gson; import com.google.gson.JsonObject; import com.nis.domain.FunctionServiceDict; import com.nis.domain.Page; import com.nis.domain.basics.AsnGroupInfo; 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.PxyObjSpoofingIpPool; import com.nis.domain.configuration.PxyObjTrustedCaCert; import com.nis.domain.configuration.PxyObjTrustedCaCrl; import com.nis.domain.configuration.WebsiteDomainTopic; import com.nis.domain.maat.GroupReuseAddBean; import com.nis.domain.maat.GroupReuseCfg; 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.basics.AsnGroupInfoDao; import com.nis.web.dao.configuration.AppCfgDao; 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; import com.sun.xml.internal.rngom.util.Utf16; /** * 配置全量同步事务类 * @author zhangwei * */ @Service public class ConfigSynchronizationService extends BaseService{ @Autowired protected ConfigSynchronizationDao configSynchronizationDao; @Autowired protected CommonPolicyDao commonPolicyDao; @Autowired protected SpecificServiceCfgDao specificServiceCfgDao; @Autowired protected ConfigGroupInfoDao configGroupInfoDao; @Autowired protected AsnGroupInfoDao asnGroupInfoDao; @Autowired protected AppCfgDao appCfgDao; private boolean lastServiceTag = false;//标识是否是最后一个同步业务 private boolean isFinished = false; /** * 配置全量更新下发 * @param serviceIdCondition 界面传入的全量同步某一个业务 * @param request * @param response * @throws IllegalAccessException * @throws IllegalArgumentException * @throws SecurityException * @throws NoSuchFieldException * @throws ClassNotFoundException */ public void send(Integer serviceIdCondition,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 =new ArrayList<>(); if(StringUtil.isEmpty(serviceIdCondition)) { serviceList= serviceTemplate.getServiceList(); }else { serviceList=serviceTemplate.getServiceListByServiceId(serviceIdCondition); } 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); } //如果业务没有配置数据,并且为最后一个业务,需要发送给服务接口一个结束标识 if(!isFinished && lastServiceTag){ String json = "{}"; //如果是所有业务全量同步需要发送一个service=-1的请求,有助于服务端删除分组复用配置 if(StringUtil.isEmpty(serviceIdCondition)){ entity.setServiceId(-1); } FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+System.currentTimeMillis()+"(finish data).json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,Integer.parseInt(serviceType),entity.getServiceId(),entity.getTableName(),"FINISHED"); logger.info("全量下发响应信息【finish】:"+result.toString()); } } 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; int index=0; 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; } //此业务无数据需同步,也许向服务端发送一个{}串 if(index ==0 && StringUtil.isEmpty(list) && !isUpdateCfg){ String json = "{}"; FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+System.currentTimeMillis()+"(m nodata).json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),entity.getTableName(),null); logger.info("全量下发响应信息:"+result.toString()); } index++; } } /** * 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"))){ 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(); String regionKey = n.get("regionKey").toString(); Object value = ""; Class aClass = null; if(userRegionPosition.toString().equals(("0"))){ aClass = BaseCfg.class; }else{ aClass = CfgIndexInfo.class; } 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); } //配置域转换 userRegion = 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()); if(!StringUtil.isEmpty(userRegion)){ maatCfg.setUserRegion(userRegion); } configCompileList.add(maatCfg); } page.setList(list); if(page.getLast()==page.getPageNo()){ 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 { //调用服务接口配置全量更新 isFinished = ((!hasData)&&lastServiceTag)?true:false; 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,isFinished?"FINISHED":null); logger.info("全量下发响应信息:"+result.toString()); } } 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()); if(!StringUtil.isEmpty(cfg.getCfdsLevel()) && (cfg.getCfdsLevel() > 10)){ cfg.setCfdsLevel((int)(cfg.getCfdsLevel()/10));//文件摘要置信度界面显示为70,80,90,100,下发为7,8,9,10 } 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()); if(!StringUtil.isEmpty(userRegion)){ maatCfg.setUserRegion(userRegion); } configCompileList.add(maatCfg); } page.setList(list); if(page.getLast()==page.getPageNo()){ 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 { //调用服务接口配置全量更新 isFinished = ((!hasData)&&lastServiceTag)?true:false; 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,isFinished?"FINISHED":null); logger.info("全量下发响应信息:"+result.toString()); } } 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()); if(!StringUtil.isEmpty(userRegion)){ maatCfg.setUserRegion(userRegion); } configCompileList.add(maatCfg); } page.setList(list); if(page.getLast()==page.getPageNo()){ 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 { //调用服务接口配置全量更新 isFinished = ((!hasData)&&lastServiceTag)?true:false; 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,isFinished?"FINISHED":null); logger.info("全量下发响应信息:"+result.toString()); } } 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(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.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)); } if(isUpdateCfg) { if(!StringUtil.isEmpty(compileIds) && !StringUtil.isEmpty(entity.getTableName())) { commonPolicyDao.auditCfgBatch( entity.getTableName(), 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(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()); if(!StringUtil.isEmpty(userRegion)){ maatCfg.setUserRegion(userRegion); } configCompileList.add(maatCfg); } page.setList(list); if(page.getLast()==page.getPageNo()){ 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 { //调用服务接口配置全量更新 isFinished = ((!hasData)&&lastServiceTag)?true:false; 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,isFinished?"FINISHED":null); logger.info("全量下发响应信息:"+result.toString()); } } 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; int index=0; 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; } //此业务无数据需同步,也许向服务端发送一个{}串 if(index ==0 && StringUtil.isEmpty(list) && !isUpdateCfg){ String json = "{}"; FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+System.currentTimeMillis()+"(d nodata).json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),entity.getTableName(),null); logger.info("全量下发响应信息:"+result.toString()); } index++; } } /** * 处理单域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; //APP IP按配置Id批量下发[服务端只支持maat和回调类格式的json串] List groupInfos=new ArrayList<>(); //ASN IP按配置Id全量下发[服务端只支持maat和回调类格式的json串] List asnGroupInfos=new ArrayList<>(); if(entity.getServiceId().equals(1028)){ ConfigGroupInfo groupInfo=new ConfigGroupInfo(); groupInfo.setIsIssued(1);//全量下发只用获取已下发的group信息 groupInfo.setGroupType(1); groupInfos=configGroupInfoDao.findAllList(groupInfo);//每一批次下发都取一次最新的group_info信息 if(StringUtil.isEmpty(groupInfos)){ hasData=false; } } if(entity.getServiceId().equals(400)){ AsnGroupInfo groupInfo=new AsnGroupInfo(); groupInfo.setIsValid(1);//全量下发只用获取已下发的group信息 asnGroupInfos=asnGroupInfoDao.findAsnGroupInfoList(groupInfo);//每一批次下发都取一次最新的group_info信息 if(StringUtil.isEmpty(asnGroupInfos)){ hasData=false; } } //此业务无数据需同步,也许向服务端发送一个{}串 if(!hasData && !isUpdateCfg){ String json = "{}"; FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+System.currentTimeMillis()+"(s asn or app nodata).json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),entity.getTableName(),null); logger.info("全量下发响应信息:"+result.toString()); } int index=0; List listData = Lists.newArrayList(); while(hasData){ entity.setPage(page); List list = Lists.newArrayList(); if(cfgType==1){ if(entity.getServiceId().equals(1028)){ page.setPageSize(-1); page.setPageNo(1); page.setLastPage(true); entity.setPage(page); entity.setCompileId(groupInfos.get(0).getCompileId()); entity.setGroupId(groupInfos.get(0).getGroupId()); list = configSynchronizationDao.getAppIpFeatureList(entity); listData.addAll(list); }else if(entity.getServiceId().equals(400)){ page.setPageSize(-1); page.setPageNo(1); page.setLastPage(true); entity.setPage(page); entity.setCompileId(asnGroupInfos.get(0).getCompileId()); entity.setGroupId(asnGroupInfos.get(0).getGroupId()); list = configSynchronizationDao.getAsnIpList(entity); listData.addAll(list); }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 if(entity.getServiceId().equals(400)){ hasData=auditAsnIpData(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; } //ASN IP if(entity.getServiceId().equals(400)){ //处理完成一个compile,删除一个Group if(!StringUtil.isEmpty(asnGroupInfos)){ asnGroupInfos.remove(0); } if(asnGroupInfos.size() > 0) { hasData=true; }else { hasData=false; if(StringUtil.isEmpty(listData) && !isUpdateCfg){ String json = "{}"; FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+System.currentTimeMillis()+"(asn nodata).json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),entity.getTableName(),null); logger.info("全量下发响应信息:"+result.toString()); } } //TODO 待处理 }else if(entity.getServiceId().equals(1028)){ //APP IP //处理完成一个compile,删除一个Group if(!StringUtil.isEmpty(groupInfos)){ groupInfos.remove(0); } if(groupInfos.size() > 0) { hasData=true; }else { hasData=false; if(StringUtil.isEmpty(listData) && !isUpdateCfg){ String json = "{}"; FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+System.currentTimeMillis()+"(app nodata).json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),entity.getTableName(),null); logger.info("全量下发响应信息:"+result.toString()); } } }else{ //此业务无数据需同步,也许向服务端发送一个{}串 if(index ==0 && StringUtil.isEmpty(list) && !isUpdateCfg){ String json = "{}"; FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+System.currentTimeMillis()+"(s nodata).json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),entity.getTableName(),null); logger.info("全量下发响应信息:"+result.toString()); } } index++; } } /** * 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(); List compileIds=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 = ""; //处理自定义域【DDOS自定义域组成json结构】 Map ddosUserRegion= new HashMap(); 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; ddosUserRegion.put(n.get("regionKey"), value); } } } } if(userRegion.endsWith(Constants.USER_REGION_SPLIT)){ userRegion = userRegion.substring(0, userRegion.length()-1); }else if(!StringUtil.isEmpty(ddosUserRegion)){ userRegion = new Gson().toJson(ddosUserRegion); } } if(isUpdateCfg && !StringUtil.isEmpty(cfg) && !StringUtil.isEmpty(cfg.getCompileId())) { compileIds.add(cfg.getCompileId()); } 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); } if(isUpdateCfg) { if(!StringUtil.isEmpty(compileIds) && !StringUtil.isEmpty(entity.getTableName())) { commonPolicyDao.auditCfgBatch( entity.getTableName(), entity,compileIds,null); } } page.setList(list); if(page.getLast()==page.getPageNo()){ 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 { //调用服务接口配置全量更新 isFinished = ((!hasData)&&lastServiceTag)?true:false; 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,isFinished?"FINISHED":null); logger.info("全量下发响应信息:"+result.toString()); } } 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(); List ids = 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){ if(entity.getTableName().equals("app_topic_domain_cfg")){ String domain = strCfg.getCfgKeywords(); WebsiteDomainTopic websiteDomainTopic = new WebsiteDomainTopic(); websiteDomainTopic.setDomain(domain); //查询domainId List domainDict = appCfgDao.getDomainDict(websiteDomainTopic); Long domainId = domainDict.get(0).getId(); userRegion += n.get("regionKey")+"="+domainId+Constants.USER_REGION_SPLIT; }else{ 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)); ipCfg.setIsValid(entity.getIsValid()); ipCfg.setAuditTime(StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime()); groupIds.remove(0); list1.add(ipCfg); }else if(cfgType==2){ strCfg.setRegionId(regionIds.get(0)); regionIds.remove(0); strCfg.setGroupId(groupIds.get(0)); strCfg.setIsValid(entity.getIsValid()); strCfg.setAuditTime(StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime()); groupIds.remove(0); list1.add(strCfg); }else if(cfgType==3){ complexStrCfg.setRegionId(regionIds.get(0)); regionIds.remove(0); complexStrCfg.setGroupId(groupIds.get(0)); complexStrCfg.setIsValid(entity.getIsValid()); complexStrCfg.setAuditTime(StringUtil.isEmpty(entity.getAuditTime()) ? cfg.getAuditTime():entity.getAuditTime()); 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); } if(isUpdateCfg) { if(!StringUtil.isEmpty(ids) && !StringUtil.isEmpty(entity.getTableName())) { commonPolicyDao.auditCfgBatch( entity.getTableName(), entity,ids,null); } } page.setList(list); if(page.getLast()==page.getPageNo()){ 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 { //调用服务接口配置全量更新 isFinished = ((!hasData)&&lastServiceTag)?true:false; 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,isFinished?"FINISHED":null); logger.info("全量下发响应信息:"+result.toString()); } } return hasData; } /** * 处理app ip特征(分组复用)配置 * 全量下发(全量下发接口只支持maat和回调类的json字符串格式) * 批量下发:【按照config group,每组每批次下发,一次之下发一种格式的配置maat/reuse,CompileIsIssued标识】 * @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; GroupReuseAddBean reuseMaatBean; MaatCfg maatCfg; List configCompileList; List groupRelationList; List ipRegionList; List strRegionList; List numRegionList; List digestRegionList; List areaIpRegionList; maatBean = new ToMaatBean(); reuseMaatBean = new GroupReuseAddBean(); configCompileList = new ArrayList(); List regionIds= new ArrayList();//存储app ip域id List compileIds= new ArrayList();//存储app compileId Integer isIssued=entity.getCompileIsIssued();//批量下发时使用,需要用来判断是否走分组复用接口 //同一编译IP的分组 Map> dataMap=new HashMap<>(); Integer compileId=entity.getCompileId(); Integer groupId=entity.getGroupId(); compileIds.add(compileId); List ipList=new ArrayList<>(); for(int i=0;i entitys:dataMap.values()) { maatCfg = new MaatCfg(); reuseMaatBean = new GroupReuseAddBean(); maatCfg.initDefaultValue(); groupRelationList = new ArrayList(); ipRegionList = new ArrayList(); strRegionList = new ArrayList(); numRegionList = new ArrayList(); digestRegionList = new ArrayList(); areaIpRegionList = new ArrayList(); if(isUpdateCfg && isIssued.equals(1)) { List groupReuseList=new ArrayList<>(); GroupReuseCfg groupReuseCfg=new GroupReuseCfg(); /*groupReuseCfg.setUserRegion(userRegion);*/ groupReuseCfg.setServiceId(entitys.get(0).getServiceId()); ipRegionList.addAll(groupReuseCfgAddRemoveConvert(entitys,entity.getIsValid(),entitys.get(0).getGroupId())); groupReuseCfg.setIpRegionList(ipRegionList); groupReuseCfg.setStrRegionList(strRegionList); groupReuseCfg.setNumRegionList(numRegionList); groupReuseList.add(groupReuseCfg); reuseMaatBean.setGroupReuseCfgList(groupReuseList); reuseMaatBean.setAuditTime(StringUtil.isEmpty(entity.getAuditTime())?entitys.get(0).getAuditTime():entity.getAuditTime()); reuseMaatBean.setCreatorName(entitys.get(0).getCurrentUser().getName()); reuseMaatBean.setVersion(Constants.MAAT_VERSION); reuseMaatBean.setOpAction(Constants.INSERT_ACTION); }else { GroupCfg groupCfg=new GroupCfg(); groupCfg.setCompileId(entitys.get(0).getCompileId()); groupCfg.setGroupId(entitys.get(0).getGroupId()); 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,entitys.get(0).getGroupId())); 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); } } if(isUpdateCfg) { if(!StringUtil.isEmpty(regionIds)) { commonPolicyDao.auditCfgBatch(entity.getTableName(), entity, regionIds, null); } if(isIssued.equals(0)) {//group第一次下发需要修改状态为已下发 if(!StringUtil.isEmpty(compileIds)) { commonPolicyDao.auditCfgBatch("config_group_info", entity, compileIds, null); } } } page.setList(list); if(page.getLast()==page.getPageNo()){ hasData = false; } if(!StringUtil.isEmpty(configCompileList.size())){ String json=gsonToJson(maatBean); //调用服务接口下发配置数据 if(isUpdateCfg) { if(isIssued.equals(1)) {//已下发过的compile或配置取消直接走ip复用接口 json=gsonToJson(reuseMaatBean); //logger.info("app ip批量生效:"+json); //调用服务接口同步回调类配置 ToMaatResult result = ConfigServiceUtil.postGroupReuseSources(json); if(result!=null){ logger.info("app ip批量生效响应信息:"+result.getMsg()); } }else {//未下发过的compile直接走正常maat配置接口 //logger.info("配置批量下发:"+json); //调用服务接口同步回调类配置 ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); if(result!=null){ logger.info("配置批量下发响应信息:"+result.getMsg()); } } }else { //调用服务接口配置全量更新 isFinished = ((!hasData)&&lastServiceTag)?true:false; FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+compileId+"_"+page.getPageNo()+"_"+System.currentTimeMillis()+".json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,isFinished?"FINISHED":null); logger.info("全量下发响应信息:"+result.toString()); } } return hasData; } /** * 处理ASN ip配置 * 全量下发(全量下发接口只支持maat和回调类的json字符串格式) * 批量下发:【按照asn group,每组每批次下发,一次之下发一种格式的配置maat/reuse,CompileIsIssued标识】 * @param serviceId * @param request * @param response */ public boolean auditAsnIpData(List>userRegionList, Page page, BaseCfg entity, List list, boolean hasData, boolean isUpdateCfg) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ ToMaatBean maatBean; GroupReuseAddBean reuseMaatBean; MaatCfg maatCfg; List configCompileList; List groupRelationList; List ipRegionList; List strRegionList; List numRegionList; List digestRegionList; List areaIpRegionList; maatBean = new ToMaatBean(); reuseMaatBean = new GroupReuseAddBean(); configCompileList = new ArrayList(); List regionIds= new ArrayList();//存储app ip域id List compileIds= new ArrayList();//存储app ip域id Integer isIssued=entity.getCompileIsIssued();//批量下发时使用,需要用来判断是否走分组复用接口 //同一编译IP的分组 Map> dataMap=new HashMap<>(); Integer compileId=entity.getCompileId(); Integer groupId=entity.getGroupId(); compileIds.add(compileId); List ipList=new ArrayList<>(); for(int i=0;i entitys:dataMap.values()) { maatCfg = new MaatCfg(); reuseMaatBean = new GroupReuseAddBean(); maatCfg.initDefaultValue(); groupRelationList = new ArrayList(); ipRegionList = new ArrayList(); strRegionList = new ArrayList(); numRegionList = new ArrayList(); digestRegionList = new ArrayList(); areaIpRegionList = new ArrayList(); //批量配置生效,当前组已下发过 if(isUpdateCfg && isIssued.equals(1)) { List groupReuseList=new ArrayList<>(); GroupReuseCfg groupReuseCfg=new GroupReuseCfg(); /*groupReuseCfg.setUserRegion(userRegion);*/ groupReuseCfg.setServiceId(entitys.get(0).getServiceId()); ipRegionList.addAll(groupReuseCfgAddRemoveConvert(entitys,entity.getIsValid(),entitys.get(0).getGroupId())); groupReuseCfg.setIpRegionList(ipRegionList); groupReuseCfg.setStrRegionList(strRegionList); groupReuseCfg.setNumRegionList(numRegionList); groupReuseList.add(groupReuseCfg); reuseMaatBean.setGroupReuseCfgList(groupReuseList); reuseMaatBean.setAuditTime(StringUtil.isEmpty(entity.getAuditTime())?entitys.get(0).getAuditTime():entity.getAuditTime()); reuseMaatBean.setCreatorName(entitys.get(0).getCurrentUser().getName()); reuseMaatBean.setVersion(Constants.MAAT_VERSION); reuseMaatBean.setOpAction(Constants.INSERT_ACTION); }else { GroupCfg groupCfg=new GroupCfg(); groupCfg.setCompileId(entitys.get(0).getCompileId()); groupCfg.setGroupId(entitys.get(0).getGroupId()); 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,entitys.get(0).getGroupId())); 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()); // 设置asn自定义域 String userRegion = "ASN_ID=AS" + entitys.get(0).getUserRegion1()/*+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); } } if(isUpdateCfg) { if(!StringUtil.isEmpty(regionIds)) { commonPolicyDao.auditCfgBatch(entity.getTableName(), entity, regionIds, null); } if(isIssued.equals(0)) {//group第一次下发需要修改状态为已下发 if(!StringUtil.isEmpty(compileIds)) { commonPolicyDao.auditCfgBatch("asn_group_info", entity, compileIds, null); } } } page.setList(list); if(page.getLast()==page.getPageNo()){ hasData = false; } if(!StringUtil.isEmpty(configCompileList.size())){ String json=gsonToJson(maatBean); //调用服务接口下发配置数据 if(isUpdateCfg) { if(isIssued.equals(1)) {//已下发过的compile或配置取消直接走ip复用接口 json=gsonToJson(reuseMaatBean); //logger.info("app ip批量生效:"+json); //调用服务接口同步回调类配置 ToMaatResult result = ConfigServiceUtil.postGroupReuseSources(json); if(result!=null){ logger.info("app ip批量生效响应信息:"+result.getMsg()); } }else {//未下发过的compile直接走正常maat配置接口 //logger.info("配置批量下发:"+json); //调用服务接口同步回调类配置 ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); if(result!=null){ logger.info("配置批量下发响应信息:"+result.getMsg()); } } }else { //调用服务接口配置全量更新 isFinished = ((!hasData)&&lastServiceTag)?true:false; FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+compileId+"_"+page.getPageNo()+"_"+System.currentTimeMillis()+".json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,1,entity.getServiceId(),null,isFinished?"FINISHED":null); logger.info("全量下发响应信息:"+result.toString()); } } 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; int index=0; while(hasData){ entity.setPage(page); hasData=auditCallbackData(className,page,entity,hasData,isUpdateCfg); if(hasData){ page.setPageNo(page.getNext()); } //此业务无数据需同步,也许向服务端发送一个{}串 if(index ==0 && StringUtil.isEmpty(page.getList()) && !isUpdateCfg){ String json = "{}"; FileUtils.writeToFile("/home/ceiec/configSync/"+DateUtils.getDate("yyyy-MM-dd")+"/"+entity.getServiceId()+"_"+System.currentTimeMillis()+"(h nodata).json", json, false); JSONObject result = ConfigServiceUtil.configSync(json,2,entity.getServiceId(),entity.getTableName(),null); logger.info("全量下发响应信息:"+result.toString()); } index++; } } /** * 回调类配置下发 * @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(); List ids = new ArrayList(); if(entity.getServiceId().equals(3)){//ip drop回调类配置用了主表和子表关系 list = configSynchronizationDao.getCfgIndexList(entity); if(!StringUtil.isEmpty(list)){ List compileIds = Lists.newArrayList(); for(int i=0;i(); list=configSynchronizationDao.getPxyObjTrustedCrlCfgListByCertId(ids); for(int i=0;i(); //只允许单独下发certId为空或0的crl配置 list = configSynchronizationDao.getPxyObjTrustedCrlCfgList(entity); 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); //调用服务接口同步回调类配置 isFinished = ((!hasData)&&lastServiceTag)?true:false; JSONObject result = ConfigServiceUtil.configSync(json,2,entity.getServiceId(),entity.getTableName(),isFinished?"FINISHED":null); logger.info("全量下发响应信息:"+result.toString()); } } 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 String 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"); } return userRegion; } }