ASN IP全量+数据入库提交

This commit is contained in:
duandongmei
2019-01-23 19:32:47 +06:00
parent 9fbd60ddf0
commit 2e8d2cb7b2
10 changed files with 399 additions and 40 deletions

View File

@@ -2,6 +2,7 @@ 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;
@@ -18,9 +19,12 @@ 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;
@@ -36,6 +40,7 @@ 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;
@@ -167,50 +172,284 @@ public class AsnIpCfgService extends CrudService<CrudDao<AsnIpCfg>, AsnIpCfg> {
auditAllAsnRegionCfg(entity,auditAsnGroupList,null);
}*/
}
/**
*
* @param asnNoMaps 所有asn的信息
* @param configGroupInfos asn组织的数据库信息
* @param asnOrgMap asn和组织的关系
* @param isImportAll 是否导入全量
*/
@Transactional(readOnly=false,rollbackFor=RuntimeException.class)
public void processGroup(Map<Long,AsnGroupInfo> asnNoMap){
logger.warn("Start to save group");
public void processAsnIp(FunctionServiceDict service,FunctionRegionDict regionDict,List<BaseIpCfg> ipCfgList,List<Map<Long, AsnGroupInfo>> 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();
Date createTime=new Date();
int index=0;
//List<AsnIpCfg> asnIpCfgs=Lists.newArrayList(Constants.MAAT_JSON_SEND_SIZE);
Date date=new Date();
SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class);
SqlSession batchSqlSession = null;
Set<String> groupSet=new HashSet<>();
int index=0;
Map<Long,AsnGroupInfo> auditInfo=new HashMap<>();
//存储未下发的asno及asnIP
Map<Integer,List<AsnIpCfg>> noAuditGroupIds=new HashMap<>();
//存储已下发的asnno
Map<Integer,List<AsnIpCfg>> auditGroupIds=new HashMap<>();
//本次未下发的组信息
List<AsnGroupInfo> noAuditGroupList=new ArrayList<AsnGroupInfo>();
Long asno=0l;
try{
List<Integer> regionIds=ConfigServiceUtil.getId(3, ipCfgList.size());
batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
if(!asnNoMap.isEmpty()) {
List<Integer> compileIds=ConfigServiceUtil.getId(1, asnNoMap.size());
List<Integer> groupIds=ConfigServiceUtil.getId(2, asnNoMap.size());
List<Integer> regionIds=ConfigServiceUtil.getId(3, asnNoMap.size());
for(Entry<Long, AsnGroupInfo> e:asnNoMap.entrySet()) {
AsnGroupInfo info=e.getValue();
info.setAsnId(e.getKey());
info.setIsValid(0);
info.setIsUsed(0);
info.setCreatorId(UserUtils.getUser().getId());
info.setCreateTime(createTime);
info.setGroupId(groupIds.get(index));
info.setCompileId(compileIds.get(index));
info.setRegionId(regionIds.get(index));
if(!groupSet.contains(info.getOrganization())) {
groupSet.add(info.getOrganization());
}
((AsnGroupInfoDao) batchSqlSession.getMapper(AsnGroupInfoDao.class)).insert(info);
if(index%Constants.IMPORT_LIMIT==0) {
batchSqlSession.commit();
}
index++;
}
batchSqlSession.commit();
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();
}
}
batchSaveConfigGroupInfo(groupSet);
//刷新缓存
//AsnCacheUtils.init(true);
//6、配置取消所有编译[编译取消编译下的所有group和region都会取消(已和服务端确认)]
/*if(!StringUtil.isEmpty(deleteAsnCompile)){
long startAudit=System.currentTimeMillis();
ToMaatBean maatBean = new ToMaatBean();
MaatCfg maatCfg = new MaatCfg();
List<MaatCfg> configCompileList = new ArrayList();
List<GroupCfg> groupRelationList = new ArrayList();
List<IpCfg> ipRegionList = new ArrayList();
List<StringCfg> strRegionList = new ArrayList();
List<NumBoundaryCfg> numRegionList = new ArrayList();
List<DigestCfg> digestRegionList = new ArrayList();
List<IpCfg> areaIpRegionList = new ArrayList();
List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(600);
Integer serviceId=0;
serviceId=serviceList.get(0).getServiceId();
for(Entry<Long, AsnGroupInfo> 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<Map<Long, AsnGroupInfo>> asnNoMaps,List<Map<String, ConfigGroupInfo>> asnOrgList,String isSend,String isImportAll){
logger.warn("Start to save group");
long start=System.currentTimeMillis();
Map<Long, AsnGroupInfo> 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<String,ConfigGroupInfo> newOrgMap=asnOrgList.get(0);//【0】 新的config group info
Map<String,ConfigGroupInfo> oldOrgMap=asnOrgList.get(1);//【1】 旧的config group info
//入库旧的asn组织信息
if(!StringUtil.isEmpty(oldOrgMap)){
index=0;
for(Entry<String, ConfigGroupInfo> 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<Integer> groupIds=ConfigServiceUtil.getId(2, newOrgMap.size());
for(Entry<String, ConfigGroupInfo> 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<Long, AsnGroupInfo> newAsnGroup =asnNoMaps.get(0); //【0】 新的asn group info
Map<Long, AsnGroupInfo> oldAsnGroup =asnNoMaps.get(1); //【1】 旧的asn group info
Map<Long, AsnGroupInfo> allAsnGroup =asnNoMaps.get(2); //【2】 所有的asn group info
Map<Long, AsnGroupInfo> auditedAsnNoMap=asnNoMaps.get(3); //【3】已下发的所有asn信息【失效所有的asn 编译】
deleteAsnCompile=auditedAsnNoMap;
//保存新增的asn 信息
if(!newAsnGroup.isEmpty()){
index=0;
List<Integer> compileIds=ConfigServiceUtil.getId(1, newAsnGroup.size());
List<Integer> groupIds=ConfigServiceUtil.getId(2, newAsnGroup.size());
List<Integer> regionIds=ConfigServiceUtil.getId(3, newAsnGroup.size());
for(Entry<Long, AsnGroupInfo> 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<Long, AsnGroupInfo> 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<MaatCfg> configCompileList = new ArrayList();
List<GroupCfg> groupRelationList = new ArrayList();
List<IpCfg> ipRegionList = new ArrayList();
List<StringCfg> strRegionList = new ArrayList();
List<NumBoundaryCfg> numRegionList = new ArrayList();
List<DigestCfg> digestRegionList = new ArrayList();
List<IpCfg> areaIpRegionList = new ArrayList();
List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(600);
for(Entry<Long, AsnGroupInfo> 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));
}
@@ -226,6 +465,8 @@ public class AsnIpCfgService extends CrudService<CrudDao<AsnIpCfg>, AsnIpCfg> {
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));