package com.nis.web.service.basics; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.beust.jcommander.internal.Lists; import com.google.common.collect.Maps; import com.nis.domain.FunctionRegionDict; 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.AsnKeywordCfg; import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.CfgIndexInfo; import com.nis.domain.maat.GroupReuseAddBean; import com.nis.domain.maat.GroupReuseCfg; import com.nis.domain.maat.MaatCfg; import com.nis.domain.maat.MaatCfg.DigestCfg; import com.nis.domain.maat.MaatCfg.GroupCfg; import com.nis.domain.maat.MaatCfg.IpCfg; import com.nis.domain.maat.MaatCfg.NumBoundaryCfg; import com.nis.domain.maat.MaatCfg.StringCfg; import com.nis.domain.maat.ToMaatBean; import com.nis.domain.maat.ToMaatResult; import com.nis.domain.specific.ConfigGroupInfo; import com.nis.util.ConfigServiceUtil; import com.nis.util.Constants; import com.nis.util.DictUtils; import com.nis.util.StringUtil; import com.nis.web.dao.CrudDao; import com.nis.web.dao.basics.AsnGroupInfoDao; import com.nis.web.dao.basics.AsnIpCfgDao; import com.nis.web.dao.configuration.IpCfgDao; import com.nis.web.dao.specific.ConfigGroupInfoDao; import com.nis.web.security.UserUtils; import com.nis.web.service.CrudService; import com.nis.web.service.SpringContextHolder; @Service public class AsnIpCfgService extends CrudService, AsnIpCfg> { @Autowired private AsnIpCfgDao asnIpCfgDao; // @Autowired // private SpecificServiceCfgDao specificServiceCfgDao; @Autowired private ConfigGroupInfoDao configGroupInfoDao; @Autowired private AsnGroupInfoDao asnGroupInfoDao; /** * @param page * @param entity * @return */ public Page findPage(Page page, AsnIpCfg entity) { entity.getSqlMap().put("dsf", configScopeFilter(entity.getCurrentUser(),"r")); entity.setPage(page); List list=asnIpCfgDao.findPage(entity); page.setList(list); return page; } public List findByPage(String ids) { List list=asnIpCfgDao.findByPage(ids); return list; } public boolean hasValidAsnIp(Long asnId) { return asnIpCfgDao.hasValidAsnIp(asnId)>0; } public AsnIpCfg get(Long id ) { return asnIpCfgDao.get(id); } @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public void save(List entitys) { logger.warn("Start to save IP,size:"+entitys.size()); long start=System.currentTimeMillis(); SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; try{ batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); for(AsnIpCfg asnIpCfg:entitys) { ((AsnIpCfgDao) batchSqlSession.getMapper(AsnIpCfgDao.class)).insert(asnIpCfg); } batchSqlSession.commit(); }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } long end=System.currentTimeMillis(); logger.warn("Save IP finish,cost:"+(end-start)); } @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public void update(AsnIpCfg entity){ List auditAsnIpList=new ArrayList<>(); List auditAsnGroupList=new ArrayList<>(); Date editTime=new Date(); entity.setEditTime(editTime); entity.setEditorId(entity.getCurrentUser().getId()); String userRegion1=entity.getUserRegion1(); AsnGroupInfo groupInfo=new AsnGroupInfo(); groupInfo.setAsnId(Long.parseLong(userRegion1)); groupInfo=asnGroupInfoDao.getInfoByAsnNo(groupInfo); String org=groupInfo.getOrganization().trim(); String country=groupInfo.getCountry().trim(); String detail=groupInfo.getDetail().trim(); entity.setOrganization(org); entity.setCountry(country); entity.setDetail(detail); entity.setCompileId(groupInfo.getCompileId()); /** * isvalid=0 and asnNo=false 直接修改 * isvalid=0 and asnNo=true 需要下发 * isvalid=1 需要下发asnNo下所有的域配置 */ /*if(groupInfo.getIsUsed().equals(1) && entity.getIsValid().equals(Constants.VALID_NO)){ entity.setAuditTime(editTime); entity.setAuditorId(entity.getCurrentUser().getId()); entity.setIsValid(Constants.VALID_YES); entity.setIsAudit(Constants.AUDIT_YES); auditAsnIpList.add(entity); } if(groupInfo.getIsUsed().equals(1) && entity.getIsValid().equals(Constants.VALID_YES)){ entity.setAuditTime(editTime); entity.setAuditorId(entity.getCurrentUser().getId()); entity.setIsValid(Constants.VALID_YES); entity.setIsAudit(Constants.AUDIT_YES); auditAsnGroupList.add(groupInfo); }*/ if(entity.getIsValid() ==1){ entity.setAuditTime(editTime); entity.setAuditorId(entity.getCurrentUser().getId()); entity.setEditTime(editTime); entity.setEditorId(entity.getCurrentUser().getId()); entity.setIsValid(Constants.VALID_YES); entity.setIsAudit(Constants.AUDIT_YES); }else{ entity.setEditTime(editTime); entity.setEditorId(entity.getCurrentUser().getId()); entity.setIsValid(Constants.VALID_NO); entity.setIsAudit(Constants.VALID_NO); } asnIpCfgDao.update(entity); //ASN下发状态时可以更改,更改之后直接下发 if(entity.getIsValid() ==1){ auditAsnIpList.add(entity); asnIPRegionSendToMaat(auditAsnIpList,Constants.VALID_YES,Constants.OPACTION_PUT); } //common group 新增下发 ASN IP配置 /*if(!StringUtil.isEmpty(auditAsnIpList)){ asnIPRegionSendToMaat(auditAsnIpList,Constants.VALID_YES,Constants.OPACTION_POST); }*/ //common group 修改已下发过的配置,全量下发 ASN NO下的所有有效配置 /*if(entity.getIsAudit().equals(Constants.VALID_YES)){ auditAllAsnRegionCfg(entity,auditAsnGroupList,null); }*/ } /** * * @param asnNoMaps 所有asn的信息 * @param configGroupInfos asn组织的数据库信息 * @param asnOrgMap asn和组织的关系 * @param isImportAll 是否导入全量 */ @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public void processAsnIp(FunctionServiceDict service,FunctionRegionDict regionDict,List ipCfgList,List> asnNoMaps,String isSend,String isImportAll,Integer requestId, String attribute, String classify){ logger.warn("Start to save asn ip size:"+ipCfgList.size()); long start=System.currentTimeMillis(); //List asnIpCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE); Date date=new Date(); SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; int index=0; Map auditInfo=new HashMap<>(); //存储未下发的asno及asnIP Map> noAuditGroupIds=new HashMap<>(); //存储已下发的asnno Map> auditGroupIds=new HashMap<>(); //本次未下发的组信息 List noAuditGroupList=new ArrayList(); Long asno=0l; try{ List regionIds=ConfigServiceUtil.getId(3, ipCfgList.size()); batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); for (BaseIpCfg cfg : ipCfgList) { AsnIpCfg asnIpCfg=new AsnIpCfg(); BeanUtils.copyProperties(cfg, asnIpCfg,new String[] {"cfgId"}); asnIpCfg.setTableName(AsnIpCfg.getTablename()); asnIpCfg.setAction(service==null?0:service.getAction()); asnIpCfg.setCfgRegionCode(regionDict.getConfigRegionCode()); asnIpCfg.setCfgType(regionDict.getConfigRegionValue()); asnIpCfg.setCreateTime(date); asnIpCfg.setCreatorId(UserUtils.getUser().getId()); asnIpCfg.setDoLog(2); asnIpCfg.setFunctionId(regionDict.getFunctionId()); if(isSend.equals("1")) { asnIpCfg.setIsAudit(Constants.AUDIT_YES); asnIpCfg.setIsValid(Constants.VALID_YES); asnIpCfg.setAuditorId(UserUtils.getUser().getId()); asnIpCfg.setAuditTime(date); }else { asnIpCfg.setIsAudit(Constants.AUDIT_NOT_YET); asnIpCfg.setIsValid(Constants.VALID_NO); } asnIpCfg.setIsAreaEffective(0); asnIpCfg.setLable("0"); asnIpCfg.setRequestId(StringUtil.isEmpty(requestId) ? 0 : requestId); asnIpCfg.setAttribute(attribute); asnIpCfg.setClassify(classify); asnIpCfg.setServiceId(service==null?0:service.getServiceId()); asnIpCfg.setRegionId(regionIds.get(index)); asno=Long.parseLong(asnIpCfg.getUserRegion1()); //设置group id,compileId asnIpCfg.setAsnIpGroup(asnNoMaps.get(2).get(Long.parseLong(asnIpCfg.getUserRegion1())).getGroupId()); asnIpCfg.setCompileId(asnNoMaps.get(2).get(Long.parseLong(asnIpCfg.getUserRegion1())).getCompileId()); /*if(isSend.equals("1")) { //判断组是否已下发 if(asnNoMaps.get(3).keySet().contains(asno)){ }else{ asnNoMaps.get(3).put(asno, asnNoMaps.get(2).get(asno)); } }*/ ((AsnIpCfgDao) batchSqlSession.getMapper(AsnIpCfgDao.class)).insert(asnIpCfg); index++; } batchSqlSession.commit(); }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } //6、配置取消所有编译[编译取消,编译下的所有group和region都会取消(已和服务端确认)] /*if(!StringUtil.isEmpty(deleteAsnCompile)){ long startAudit=System.currentTimeMillis(); ToMaatBean maatBean = new ToMaatBean(); MaatCfg maatCfg = new MaatCfg(); List configCompileList = new ArrayList(); List groupRelationList = new ArrayList(); List ipRegionList = new ArrayList(); List strRegionList = new ArrayList(); List numRegionList = new ArrayList(); List digestRegionList = new ArrayList(); List areaIpRegionList = new ArrayList(); List serviceList = DictUtils.getFunctionServiceDictList(600); Integer serviceId=0; serviceId=serviceList.get(0).getServiceId(); for(Entry e:deleteAsnCompile.entrySet()) { maatCfg.setCompileId(e.getValue().getCompileId()); maatCfg.setServiceId(serviceId); maatCfg.setIsValid(0);//无效 configCompileList.add(maatCfg); } maatBean.setConfigCompileList(configCompileList); maatBean.setAuditTime(createTime); maatBean.setCreatorName(UserUtils.getUser().getName()); maatBean.setVersion(Constants.MAAT_VERSION); maatBean.setOpAction(Constants.UPDATE_ACTION); //调用服务接口取消配置 String json=gsonToJson(maatBean); logger.info("ASN IP 业务的编译配置全部失效参数:"+json); long auditEnd=System.currentTimeMillis(); logger.warn("Cancle all ASN compile finish,cost:"+(auditEnd-startAudit)); ToMaatResult result = ConfigServiceUtil.put(json,1); logger.info("ASN IP所有编译取消返回结果:"+result.getMsg()); long resultEnd=System.currentTimeMillis(); logger.warn("Cancle all ASN compile finish,cost:"+(resultEnd-auditEnd)); }*/ long end=System.currentTimeMillis(); logger.warn("Save asn ip finish,cost:"+(end-start)); } /** * * @param asnNoMaps 所有asn的信息 * @param configGroupInfos asn组织的数据库信息 * @param asnOrgMap asn和组织的关系 * @param isImportAll 是否导入全量 */ @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public void processGroup(FunctionServiceDict service,List> asnNoMaps,List> asnOrgList,String isSend,String isImportAll){ logger.warn("Start to save group"); long start=System.currentTimeMillis(); Map deleteAsnCompile=null; Date createTime=new Date(); SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; int index=0; Integer serviceId=service.getServiceId(); try{ //1、删除所有asn ip asnIpCfgDao.deleteAll(); //2、删除所有的asn_group_info asnGroupInfoDao.deleteAll(); //3、删除所有的组织信息 configGroupInfoDao.deleteAllAsnGroup(); batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); //4、遍历保存所有的config_group_info if(!StringUtil.isEmpty(asnOrgList)){ Map newOrgMap=asnOrgList.get(0);//【0】 新的config group info Map oldOrgMap=asnOrgList.get(1);//【1】 旧的config group info //入库旧的asn组织信息 if(!StringUtil.isEmpty(oldOrgMap)){ index=0; for(Entry e:oldOrgMap.entrySet()) { ConfigGroupInfo configGroupInfo=e.getValue(); configGroupInfo.setIsIssued(0); ((ConfigGroupInfoDao) batchSqlSession.getMapper(ConfigGroupInfoDao.class)).insertWithId(configGroupInfo); if(index != 0 && index%Constants.IMPORT_LIMIT==0) { batchSqlSession.commit(); } index++; } batchSqlSession.commit(); } //入库新的asn组织信息 if(!StringUtil.isEmpty(newOrgMap)){ index=0; List groupIds=ConfigServiceUtil.getId(2, newOrgMap.size()); for(Entry e:newOrgMap.entrySet()) { ConfigGroupInfo configGroupInfo=e.getValue(); configGroupInfo.setGroupId(groupIds.get(index)); configGroupInfo.setIsIssued(0); configGroupInfo.setIsUsed(0); configGroupInfo.setIsAuditAll(0); configGroupInfo.setGroupType(4); configGroupInfo.setInsertTime(createTime); asnOrgList.get(1).put(configGroupInfo.getGroupName(), configGroupInfo); ((ConfigGroupInfoDao) batchSqlSession.getMapper(ConfigGroupInfoDao.class)).insertWithoutId(configGroupInfo); if(index != 0 && index%Constants.IMPORT_LIMIT==0) { batchSqlSession.commit(); } index++; } batchSqlSession.commit(); } } //4、遍历保存所有的asn_group_info if(!asnNoMaps.isEmpty()){ Map newAsnGroup =asnNoMaps.get(0); //【0】 新的asn group info Map oldAsnGroup =asnNoMaps.get(1); //【1】 旧的asn group info Map allAsnGroup =asnNoMaps.get(2); //【2】 所有的asn group info Map auditedAsnNoMap=asnNoMaps.get(3); //【3】已下发的所有asn信息【失效所有的asn 编译】 deleteAsnCompile=auditedAsnNoMap; //保存新增的asn 信息 if(!newAsnGroup.isEmpty()){ index=0; List compileIds=ConfigServiceUtil.getId(1, newAsnGroup.size()); List groupIds=ConfigServiceUtil.getId(2, newAsnGroup.size()); List regionIds=ConfigServiceUtil.getId(3, newAsnGroup.size()); for(Entry e:newAsnGroup.entrySet()) { AsnGroupInfo asnGroupInfo=e.getValue(); asnGroupInfo.setAsnId(e.getKey()); asnGroupInfo.setIsValid(0); asnGroupInfo.setIsUsed(0); asnGroupInfo.setCreatorId(UserUtils.getUser().getId()); asnGroupInfo.setCreateTime(createTime); asnGroupInfo.setGroupId(groupIds.get(index)); asnGroupInfo.setCompileId(compileIds.get(index)); asnGroupInfo.setRegionId(regionIds.get(index)); asnGroupInfo.setOrgGroupId(asnOrgList.get(1).get(asnGroupInfo.getOrganization()).getGroupId()); asnNoMaps.get(0).put(e.getKey(), asnGroupInfo);//设置完各种id后更新map数据 asnNoMaps.get(2).put(e.getKey(), asnGroupInfo);//设置完各种id后更新map数据 ((AsnGroupInfoDao) batchSqlSession.getMapper(AsnGroupInfoDao.class)).insertWithId(asnGroupInfo); if(index != 0 && index%Constants.IMPORT_LIMIT==0) { batchSqlSession.commit(); } index++; } batchSqlSession.commit(); } //保存旧的asn信息 if(!oldAsnGroup.isEmpty()){ index=0; for(Entry e:oldAsnGroup.entrySet()) { AsnGroupInfo asnGroupInfo=e.getValue(); asnGroupInfo.setIsValid(0); asnGroupInfo.setOrgGroupId(asnOrgList.get(1).get(asnGroupInfo.getOrganization()).getGroupId()); ((AsnGroupInfoDao) batchSqlSession.getMapper(AsnGroupInfoDao.class)).insertWithoutId(asnGroupInfo); if(index != 0 && index%Constants.IMPORT_LIMIT==0) { batchSqlSession.commit(); } index++; } batchSqlSession.commit(); } } }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } //6、配置取消所有编译[编译取消,编译下的所有group和region都会取消(已和服务端确认)] if(!StringUtil.isEmpty(deleteAsnCompile)){ long startAudit=System.currentTimeMillis(); ToMaatBean maatBean = new ToMaatBean(); MaatCfg maatCfg = new MaatCfg(); List configCompileList = new ArrayList(); List groupRelationList = new ArrayList(); List ipRegionList = new ArrayList(); List strRegionList = new ArrayList(); List numRegionList = new ArrayList(); List digestRegionList = new ArrayList(); List areaIpRegionList = new ArrayList(); List serviceList = DictUtils.getFunctionServiceDictList(600); for(Entry e:deleteAsnCompile.entrySet()) { maatCfg.setCompileId(e.getValue().getCompileId()); maatCfg.setServiceId(serviceId); maatCfg.setIsValid(0);//无效 configCompileList.add(maatCfg); } maatBean.setConfigCompileList(configCompileList); maatBean.setAuditTime(createTime); maatBean.setCreatorName(UserUtils.getUser().getName()); maatBean.setVersion(Constants.MAAT_VERSION); maatBean.setOpAction(Constants.UPDATE_ACTION); //调用服务接口取消配置 String json=gsonToJson(maatBean); logger.info("ASN IP 业务的编译配置全部失效参数:"+json); long auditEnd=System.currentTimeMillis(); logger.warn("Cancle all ASN compile finish,cost:"+(auditEnd-startAudit)); ToMaatResult result = ConfigServiceUtil.put(json,1); logger.info("ASN IP所有编译取消返回结果:"+result.getMsg()); long resultEnd=System.currentTimeMillis(); logger.warn("Cancle all ASN compile finish,cost:"+(resultEnd-auditEnd)); } long end=System.currentTimeMillis(); logger.warn("Save group finish,cost:"+(end-start)); } public void batchSaveConfigGroupInfo(Set groupSet) { SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; try{ batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); if(groupSet.size()>0) { int index=0; List groupIds=ConfigServiceUtil.getId(2, groupSet.size()); for(String org:groupSet) { ConfigGroupInfo configGroupInfo=new ConfigGroupInfo(); configGroupInfo.setGroupName(org); configGroupInfo.setIsIssued(0); configGroupInfo.setIsUsed(0); configGroupInfo.setIsAuditAll(0); configGroupInfo.setGroupType(4); configGroupInfo.setInsertTime(new Date()); configGroupInfo.setGroupId(groupIds.get(index)); ((ConfigGroupInfoDao) batchSqlSession.getMapper(ConfigGroupInfoDao.class)).insertConfigGroupInfo(configGroupInfo); if(index%Constants.IMPORT_LIMIT==0) { batchSqlSession.commit(); } index++; } batchSqlSession.commit(); } }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } // public void deleteIps(Map asnNoMap){ // List toDelAndSendAsnIpCfgs=Lists.newArrayList(); // List asnIds=Lists.newArrayList(asnNoMap.size()); // for(Entry e:asnNoMap.entrySet()) { // AsnGroupInfo asnGroupInfo=e.getValue(); // if(asnGroupInfo==null) { // asnGroupInfo=this.getAsnGroupInfoByAsnNo(e.getKey()); // } // if(asnGroupInfo.getIsValid()==1) {//已下发 // List _toDelAsnIpCfgs=this.getByAsnNo(asnGroupInfo.getAsnId()); // toDelAndSendAsnIpCfgs.addAll(_toDelAsnIpCfgs); // }else { // asnIds.add(e.getKey()); // } // } // if(asnIds.size()>0) { // this.deleteByAsnNo(asnIds); // } // if(toDelAndSendAsnIpCfgs.size()>0) { // int pointsDataLimit = Constants.MAAT_JSON_SEND_SIZE;//限制条数 // Integer size = toDelAndSendAsnIpCfgs.size(); // //判断是否有必要分批 // if(pointsDataLimit listPage = toDelAndSendAsnIpCfgs.subList(0, pointsDataLimit); // delAndSend(listPage); // //剔除 // toDelAndSendAsnIpCfgs.subList(0, pointsDataLimit).clear(); // } // //最后剩下的 // if(!toDelAndSendAsnIpCfgs.isEmpty()){ // delAndSend(toDelAndSendAsnIpCfgs); // // } // }else { // delAndSend(toDelAndSendAsnIpCfgs); // } // } // } @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public void delAndSend(List entities) { StringBuilder sb=new StringBuilder(); Map asnDelCounts=Maps.newHashMap(); for(AsnIpCfg ip:entities) { sb.append(ip.getCfgId()); sb.append(","); if(asnDelCounts.containsKey(Long.parseLong(ip.getUserRegion1()))) { int count=asnDelCounts.get(Long.parseLong(ip.getUserRegion1()))+1; asnDelCounts.put(Long.parseLong(ip.getUserRegion1()), count); }else { asnDelCounts.put(Long.parseLong(ip.getUserRegion1()), 1); } } //跟新asn组的审核通过IP数量 for(Entry asnDelCount: asnDelCounts.entrySet()) { AsnGroupInfo info=new AsnGroupInfo(); info.setAsnId(asnDelCount.getKey()); info.setIssuedIPs(0l-asnDelCount.getValue()); asnGroupInfoDao.modifyIssuedIp(info); } sb.deleteCharAt(sb.toString().lastIndexOf(",")); asnIpCfgDao.delete(sb.toString()); asnIPRegionSendToMaat(entities,Constants.VALID_NO,Constants.OPACTION_PUT); } @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public void saveAsnIpCfg(CfgIndexInfo entity) { List auditAsnIpList=new ArrayList<>(); Date createTime=new Date(); //asn号 String userRegion1=entity.getUserRegion1(); AsnGroupInfo asnGroupInfo=new AsnGroupInfo(); asnGroupInfo.setAsnId(Long.parseLong(userRegion1)); asnGroupInfo=asnGroupInfoDao.getInfoByAsnNo(asnGroupInfo); //组织去除首尾空格 entity.setOrganization(asnGroupInfo.getOrganization().trim()); entity.setCountry(asnGroupInfo.getCountry().trim()); entity.setDetail(asnGroupInfo.getDetail().trim()); ConfigGroupInfo configGroupInfo=configGroupInfoDao.getAsnGroupByName(entity.getOrganization()); Integer orgGroup=0; Integer compileId=0; Integer asnIdGroup=0; if(configGroupInfo==null) { configGroupInfo=new ConfigGroupInfo(); configGroupInfo.setGroupName(entity.getOrganization()); configGroupInfo.setGroupType(4); configGroupInfo.setInsertTime(new Date()); configGroupInfo.setIsIssued(0); List groupIdList=ConfigServiceUtil.getId(2, 2); orgGroup=groupIdList.get(0); configGroupInfo.setGroupId(orgGroup); configGroupInfoDao.insertConfigGroupInfo(configGroupInfo); } asnIdGroup=asnGroupInfo.getGroupId(); entity.setAsnIpGroup(asnIdGroup); entity.setCompileId(asnGroupInfo.getCompileId()); List idList=ConfigServiceUtil.getId(3, entity.getAsnIpCfgs().size()); int index=0; if(entity.getAsnIpCfgs()!=null) { for(AsnIpCfg cfg:entity.getAsnIpCfgs()) { BeanUtils.copyProperties(entity, cfg, new String[]{"cfgId"}); cfg.setRequestId(0); cfg.setClassify("0"); cfg.setAttribute("0"); cfg.setLable("0"); cfg.setCreateTime(createTime); cfg.setCreatorId(entity.getCurrentUser().getId()); cfg.setAsnIpGroup(entity.getAsnIpGroup().intValue()); cfg.setRegionId(idList.get(index)); //TODO 注意:被策略引用并下发过的ASN NO,配置新增后直接下发【此功能暂时不做自动,asnip拥有审核功能】 /*if(asnGroupInfo.getIsUsed().equals(1)){ cfg.setIsValid(Constants.VALID_YES); cfg.setIsAudit(Constants.AUDIT_YES); cfg.setAuditorId(UserUtils.getUser().getId()); cfg.setAuditTime(createTime); auditAsnIpList.add(cfg); }else{*/ cfg.setIsValid(Constants.VALID_NO); cfg.setIsAudit(Constants.AUDIT_NOT_YET); /*}*/ index++; } } this.save(entity.getAsnIpCfgs()); //TODO 注意:被策略引用并下发过的ASN NO,配置新增后直接下发【此功能暂时不做自动,asnip拥有审核功能】 /*if(!StringUtil.isEmpty(auditAsnIpList)){ asnIPRegionSendToMaat(auditAsnIpList,Constants.VALID_YES,Constants.OPACTION_POST); }*/ } @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public void delete(String ids) { /*for(String id:ids.split(",")) { Long.parseLong(id); }*/ List issuedList=new ArrayList<>(); List asnIpCfgList= asnIpCfgDao.getByIds(ids); for(AsnIpCfg asnIpCfg:asnIpCfgList) { if(asnIpCfg.getIsValid()==Constants.VALID_YES) {//代表下发过了 asnIpCfg.setIsValid(Constants.VALID_DEL); issuedList.add(asnIpCfg); // groupId=asnIpCfg.getAsnIpGroup(); //List result=asnIpCfgDao.findOtherIps(groupId, asnIpCfg.getCfgId().intValue()); //if(result==null||result.size()==0) { // throw new RuntimeException("Cant not delete ip from asn group, there is only one ip left in the group!"); //} } } asnIpCfgDao.delete(ids); //已经下发过的,调用分组复用配置删除接口 // splitAndSend(issuedList,Constants.VALID_NO); if(issuedList.size() > 0){ asnIPRegionSendToMaat(issuedList,Constants.VALID_NO,Constants.OPACTION_PUT); } } /** * 选中组中是否含有只剩一个未删除IP的组 * @param serviceGroupIds * @return */ public boolean hasLastIp(String serviceGroupIds,String ids) { // TODO Auto-generated method stub for(String groupId:serviceGroupIds.split(",")) { Long.parseLong(groupId); } List countList=asnIpCfgDao.countValidIPs(serviceGroupIds,ids); if(countList.size()==0) { return true; } for(Integer count:countList) { if(count==0) { return true; } } return false; } public AsnGroupInfo getAsnGroupInfoByAsnNo(Long asnNo) { AsnGroupInfo configGroupInfo=new AsnGroupInfo(); configGroupInfo.setAsnId(asnNo); configGroupInfo=asnGroupInfoDao.getInfoByAsnNo(configGroupInfo); return configGroupInfo; } public List getByAsnNo(Long asnNo) { if(asnNo==null) { throw new RuntimeException("groupId or asnNo is null!"); } return asnIpCfgDao.getByAsnNo(asnNo.longValue()); } public List getByIds(String ids) { if(ids==null) { throw new RuntimeException("ids is null!"); } return asnIpCfgDao.getByIds(ids); } @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public void deleteByAsnNo(List asnNoList) { // for(Long asnNo:asnNoList) { // int result=0; // do { // result=asnIpCfgDao.deleteByAsnId(String.valueOf(asnNo)); // }while(result>0); // } int pointsDataLimit = 1000;//限制条数 Integer size = asnNoList.size(); if(pointsDataLimit listPage = asnNoList.subList(0, pointsDataLimit); StringBuilder asnNoStr=new StringBuilder(); for(Long asnNo:asnNoList) { asnNoStr.append(asnNo); asnNoStr.append(","); } int result=0; do { result=asnIpCfgDao.deleteByAsnId(asnNoStr.toString().substring(0,asnNoStr.toString().length()-1)); }while(result>0); //剔除 asnNoList.subList(0, pointsDataLimit).clear(); } if(!asnNoList.isEmpty()){ StringBuilder asnNoStr=new StringBuilder(); for(Long asnNo:asnNoList) { asnNoStr.append(asnNo); asnNoStr.append(","); } int result=0; do { result=asnIpCfgDao.deleteByAsnId(asnNoStr.toString().substring(0,asnNoStr.toString().length()-1)); }while(result>0); asnNoList.clear(); } }else { StringBuilder asnNoStr=new StringBuilder(); for(Long asnNo:asnNoList) { asnNoStr.append(asnNo); asnNoStr.append(","); } int result=0; do { result=asnIpCfgDao.deleteByAsnId(asnNoStr.toString().substring(0,asnNoStr.toString().length()-1)); }while(result>0); asnNoList.clear(); } } /*public void ajaxDeleteAsnIp(String ids) { asnIpCfgDao.ajaxDeleteAsnIp(ids); }*/ /** * * auditIpBatch(非IP类配置用,审核区域IP) * (这里描述这个方法适用条件 – 可选) * @param data *void * @exception * @since 1.0.0 */ @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public void auditIpBatch(List asnIpCfgs,Long asn,Integer isValid) { List auditAsnGroupList=new ArrayList<>(); SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); final SqlSession batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); Integer serviceId=0; try{ if(!StringUtil.isEmpty(asnIpCfgs)){ serviceId=asnIpCfgs.get(0).getServiceId(); int issuedNum=asnIpCfgs.size(); for(int index = 0; index < asnIpCfgs.size();index++){ AsnIpCfg t = asnIpCfgs.get(index); BaseIpCfg ipCfg=new BaseIpCfg(); BeanUtils.copyProperties(t, ipCfg); ipCfg.setTableName(AsnIpCfg.getTablename()); ((IpCfgDao) batchSqlSession.getMapper(IpCfgDao.class)).audit(ipCfg); } batchSqlSession.commit(); AsnGroupInfo asnGroupInfo=new AsnGroupInfo(); asnGroupInfo.setAsnId(asn); asnGroupInfo=asnGroupInfoDao.getInfoByAsnNo(asnGroupInfo); Integer groupId=asnGroupInfo.getGroupId(); MaatCfg maatCfg = new MaatCfg(); List configCompileList = new ArrayList(); List groupRelationList = new ArrayList(); List ipRegionList = new ArrayList(); List strRegionList = new ArrayList(); List numRegionList = new ArrayList(); List digestRegionList = new ArrayList(); List areaIpRegionList = new ArrayList(); if(isValid==Constants.VALID_YES) {//审核通过 if(asnGroupInfo.getIsValid()==0) {//ans组未下发过,下发编译配置 asnGroupInfo.setIsValid(1); asnGroupInfo.setEditorId(UserUtils.getUser().getId()); asnGroupInfo.setEditTime(new Date()); asnGroupInfo.setIssuedIPs(issuedNum+0L); asnGroupInfoDao.updateValid(asnGroupInfo); maatCfg.initDefaultValue(); ToMaatBean maatBean = new ToMaatBean(); //group GroupCfg groupCfg=new GroupCfg(); groupCfg.setCompileId(asnGroupInfo.getCompileId()); groupCfg.setGroupId(groupId); groupCfg.setIsValid(Constants.VALID_YES); //asnGroupId标记为公共组 groupCfg.setIsCommonGroup(1); groupCfg.setAuditTime(asnIpCfgs.get(0).getAuditTime()); groupRelationList.add(groupCfg); BeanUtils.copyProperties(asnIpCfgs.get(0), maatCfg); ipRegionList.addAll(groupReuseCfgAddRemoveConvert(asnIpCfgs,Constants.VALID_YES,groupId)); maatCfg.setCompileId(asnGroupInfo.getCompileId()); maatCfg.setAction(asnIpCfgs.get(0).getAction()); maatCfg.setAuditTime(asnIpCfgs.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(isValid); // 设置ASN自定义域 String userRegion = Constants.ASN_REGION_KEY+"=" +Constants.ASN_KEY+ asnIpCfgs.get(0).getUserRegion1(); maatCfg.setUserRegion(userRegion); configCompileList.add(maatCfg); maatBean.setConfigCompileList(configCompileList); maatBean.setAuditTime(asnIpCfgs.get(0).getAuditTime()); maatBean.setCreatorName(asnIpCfgs.get(0).getCurrentUser().getName()); maatBean.setVersion(Constants.MAAT_VERSION); maatBean.setOpAction(Constants.INSERT_ACTION); // 调用服务接口下发配置数据 String json = gsonToJson(maatBean); logger.info("ASN IP配置下发配置参数:" + json); // 调用服务接口下发配置 ToMaatResult result = ConfigServiceUtil.postMaatCfg(json); logger.info("ASN IP配置下发响应信息:" + result.getMsg()); }else if(asnGroupInfo.getIsValid()==1){//已经下发过,走分组复用 asnGroupInfo.setIssuedIPs(issuedNum+0l); asnGroupInfoDao.update(asnGroupInfo); asnIPRegionSendToMaat(asnIpCfgs,isValid,Constants.OPACTION_POST); }else { throw new RuntimeException("asnGroupInfo isValid value is "+asnGroupInfo.getIsValid()); } }else if(isValid==Constants.VALID_NO) {//取消审核通过 asnGroupInfo.setIssuedIPs(0L-issuedNum); asnGroupInfoDao.update(asnGroupInfo); //如果一个asn组下没有IP了,修改有效状态,并且删除 if(hasValidAsnIp(asn)) { //已经下发过的,调用分组复用配置删除接口 GroupReuseAddBean maatBean = new GroupReuseAddBean(); List groupReuseList=new ArrayList<>(); GroupReuseCfg groupReuseCfg=new GroupReuseCfg(); ipRegionList.addAll(groupReuseCfgAddRemoveConvert(asnIpCfgs,Constants.VALID_NO,groupId)); groupReuseCfg.setIpRegionList(ipRegionList); groupReuseCfg.setStrRegionList(strRegionList); groupReuseCfg.setNumRegionList(numRegionList); groupReuseList.add(groupReuseCfg); maatBean.setGroupReuseCfgList(groupReuseList); maatBean.setAuditTime(asnIpCfgs.get(0).getAuditTime()); maatBean.setCreatorName(asnIpCfgs.get(0).getCurrentUser().getName()); maatBean.setVersion(Constants.MAAT_VERSION); maatBean.setOpAction(Constants.UPDATE_ACTION); //调用服务接口下发配置数据 String json=gsonToJson(maatBean); logger.info("ASN IP域删除配置下发配置参数:"+json); //调用服务接口下发配置 ToMaatResult result = ConfigServiceUtil.auditCommonGroupRegionSources(json,3); logger.info("ASN IP域删除配置响应信息:"+result.getMsg()); }else{ asnGroupInfo.setIsValid(0); asnGroupInfo.setEditorId(UserUtils.getUser().getId()); asnGroupInfo.setEditTime(new Date()); asnGroupInfoDao.updateValid(asnGroupInfo); //asn group下没有asn ip之后,需要失效整个compileId,并且不保留公共组信息 ToMaatBean maatBean = new ToMaatBean(); maatCfg.setCompileId(asnGroupInfo.getCompileId()); maatCfg.setServiceId(serviceId); maatCfg.setIsValid(0);//无效 //configCompileList.add(addKeepGroupList(maatCfg,entity)); configCompileList.add(maatCfg); maatBean.setConfigCompileList(configCompileList); maatBean.setAuditTime(new Date()); maatBean.setCreatorName(UserUtils.getUser().getName()); maatBean.setVersion(Constants.MAAT_VERSION); maatBean.setOpAction(Constants.UPDATE_ACTION); //调用服务接口取消配置 String json=gsonToJson(maatBean); logger.info("asn ip配置下发配置参数:"+json); //调用服务接口下发配置 ToMaatResult result = ConfigServiceUtil.put(json,1); logger.info("asn ip配置取消配置响应信息:"+result.getMsg()); } } } }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } public AsnIpCfg getOne(AsnIpCfg cfg) { // TODO Auto-generated method stub return asnIpCfgDao.getOne(cfg); } }