对象组提交
This commit is contained in:
@@ -16,11 +16,16 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import com.nis.domain.basics.*;
|
||||
import com.nis.domain.configuration.*;
|
||||
import com.nis.util.*;
|
||||
import com.nis.web.dao.CrudDao;
|
||||
import com.nis.web.dao.basics.*;
|
||||
import com.nis.web.dao.configuration.*;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringEscapeUtils;
|
||||
import org.apache.ibatis.executor.Executor;
|
||||
import org.apache.ibatis.mapping.MappedStatement;
|
||||
import org.apache.ibatis.session.Configuration;
|
||||
import org.apache.ibatis.session.ExecutorType;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
@@ -129,9 +134,7 @@ import com.nis.web.dao.configuration.StringCfgDao;
|
||||
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.basics.AsnGroupInfoService;
|
||||
import com.nis.web.service.basics.SysDictInfoService;
|
||||
import com.sun.org.apache.bcel.internal.generic.NEW;
|
||||
|
||||
/**
|
||||
* Service基类
|
||||
@@ -326,7 +329,7 @@ public abstract class BaseService {
|
||||
*
|
||||
* getTableName(获取表名对应的Class) (这里描述这个方法适用条件 – 可选)
|
||||
*
|
||||
* @param clazz
|
||||
* @param tableName
|
||||
* @return String
|
||||
* @exception @since
|
||||
* 1.0.0
|
||||
@@ -741,7 +744,6 @@ public abstract class BaseService {
|
||||
* @param dstList
|
||||
* @param srcList
|
||||
* @param cfgType,1为IP类型,2为字符串类型,3为增强字符串,4数值类型,5摘要类,6回调类[但字符串类域配置和增强字符串域配置在接口参数中同属于strRegionList]
|
||||
* @param baseCfg,配置基本信息
|
||||
* @param groupRelationList
|
||||
* 配置分组列表
|
||||
* @return
|
||||
@@ -1536,7 +1538,7 @@ public abstract class BaseService {
|
||||
* @param regionDict
|
||||
* @param serviceDict
|
||||
* @param specificServiceCfg
|
||||
* @param asnNoMap
|
||||
* @param asnNoMaps
|
||||
* @param list
|
||||
* @param cfgIndexInfos
|
||||
* @param appPolicyCfgs
|
||||
@@ -2420,7 +2422,7 @@ public abstract class BaseService {
|
||||
|
||||
/**
|
||||
* 导入配置保存App特征
|
||||
* @param appPolicyCfgs
|
||||
* @param appFeatures
|
||||
*/
|
||||
@Transactional(readOnly=false,rollbackFor=RuntimeException.class)
|
||||
public void saveAppFeatureList(List<AppFeatureIndex> appFeatures){
|
||||
@@ -2444,8 +2446,10 @@ public abstract class BaseService {
|
||||
/**
|
||||
* 导入配置时数据批量入库(IP配置)
|
||||
*
|
||||
* @param data
|
||||
* @param tableName
|
||||
* @param regionDict
|
||||
* @param serviceDict
|
||||
* @param cfgs
|
||||
* @param send
|
||||
*/
|
||||
@Transactional(readOnly = false, rollbackFor = RuntimeException.class)
|
||||
public void saveIpBatch(FunctionRegionDict regionDict, FunctionServiceDict serviceDict,List<BaseIpCfg> cfgs, boolean send) {
|
||||
@@ -3306,5 +3310,291 @@ public abstract class BaseService {
|
||||
userRegion = gsonToJson(actionParam);
|
||||
return StringEscapeUtils.unescapeJson(userRegion);
|
||||
}
|
||||
|
||||
/**
|
||||
*只会更新maat配置,公共分组删除时会取消配置
|
||||
* 调用场景(1)公共分组域增加(3)公共分组修改(2)公共分组域删除(3)公共分组删除
|
||||
* @param policyGroupInfos
|
||||
|
||||
* @return
|
||||
*/
|
||||
public boolean transObjGroupToMaat(List<PolicyGroupInfo> policyGroupInfos){
|
||||
IpCommGroupCfgDao ipCommGroupCfgDao=SpringContextHolder.getBean(IpCommGroupCfgDao.class);
|
||||
UrlCommGroupDao urlCommGroupCfgDao=SpringContextHolder.getBean(UrlCommGroupDao.class);
|
||||
ScriberIdCommGroupDao scriberIdCommGroupDao=SpringContextHolder.getBean(ScriberIdCommGroupDao.class);
|
||||
DomainCommGroupDao domainCommGroupDao=SpringContextHolder.getBean(DomainCommGroupDao.class);
|
||||
CommonPolicyDao commonPolicyDao=SpringContextHolder.getBean(CommonPolicyDao.class);
|
||||
AreaIpCfgDao areaIpCfgDao=SpringContextHolder.getBean(AreaIpCfgDao.class);
|
||||
Set<String> ipDeletedGroups=new HashSet<>();
|
||||
Set<String> urlDeletedGroups=new HashSet<>();
|
||||
Set<String> subIdDeletedGroups=new HashSet<>();
|
||||
Set<String> domainDeletedGroups=new HashSet<>();
|
||||
//遍历,获取需要下发配置的组
|
||||
StringBuffer realGroupIds=new StringBuffer();
|
||||
for(PolicyGroupInfo policyGroupInfo:policyGroupInfos){
|
||||
//删除的时候
|
||||
if(policyGroupInfo.getUdFlag().equals(2)){
|
||||
realGroupIds.append(policyGroupInfo.getServiceGroupId()).append(",");
|
||||
if(policyGroupInfo.getGroupType().equals(Constants.IP_OBJ_GROUP_TYPE)){
|
||||
if(policyGroupInfo.getIsValid().equals(0)){
|
||||
ipDeletedGroups.add(policyGroupInfo.getServiceGroupId().toString());
|
||||
}
|
||||
}
|
||||
if(policyGroupInfo.getGroupType().equals(Constants.URL_OBJ_GROUP_TYPE)){
|
||||
if(policyGroupInfo.getIsValid().equals(0)){
|
||||
urlDeletedGroups.add(policyGroupInfo.getServiceGroupId().toString());
|
||||
}
|
||||
}
|
||||
if(policyGroupInfo.getGroupType().equals(Constants.SUBID_OBJ_GROUP_TYPE)){
|
||||
if(policyGroupInfo.getIsValid().equals(0)){
|
||||
subIdDeletedGroups.add(policyGroupInfo.getServiceGroupId().toString());
|
||||
}
|
||||
}
|
||||
if(policyGroupInfo.getGroupType().equals(Constants.DOMAIN_OBJ_GROUP_TYPE)){
|
||||
if(policyGroupInfo.getIsValid().equals(0)){
|
||||
domainDeletedGroups.add(policyGroupInfo.getServiceGroupId().toString());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if(realGroupIds.toString().endsWith(",")){
|
||||
realGroupIds.deleteCharAt(realGroupIds.toString().length()-1);
|
||||
}
|
||||
List<CfgIndexInfo> toUpdateCfgIndexInfos=new ArrayList<>();
|
||||
//查询cfg_index_info表,获取所有用到了这个group_id的非删除配置
|
||||
List<CfgIndexInfo> cfgIndexInfos=commonPolicyDao.getObjGroupListByGroupIds(realGroupIds.toString(),null,null);
|
||||
|
||||
CfgIndexInfo auditCfg=new CfgIndexInfo();
|
||||
auditCfg.setTableName(CfgIndexInfo.getTablename());
|
||||
auditCfg.setIsAudit(Constants.AUDIT_YES);
|
||||
auditCfg.setAuditorId(UserUtils.getUser().getId());
|
||||
auditCfg.setAuditTime(new Date());
|
||||
List compileIds=new ArrayList();
|
||||
//组织一个大的json
|
||||
ToMaatBean maatBean = new ToMaatBean();
|
||||
ServiceConfigTemplateUtil templateUtil=new ServiceConfigTemplateUtil();
|
||||
Map<String,Object> interceptUserRegionMap=new HashMap<>();
|
||||
for(CfgIndexInfo cfgIndexInfo:cfgIndexInfos){
|
||||
Integer serviceId=cfgIndexInfo.getServiceId();
|
||||
if(serviceId!=null&&StringUtils.isNotBlank(cfgIndexInfo.getCommonGroupIds())){
|
||||
MaatCfg maatCfg = new MaatCfg();
|
||||
Set<Integer> groupIdSet=new HashSet<>();
|
||||
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();
|
||||
Map<String,Object> userRgionMap=gsonFromJson(cfgIndexInfo.getCommonGroupIds(),Map.class);
|
||||
cfgIndexInfo.setUserRegion(userRgionMap);
|
||||
String oldCommonGroupIds=cfgIndexInfo.getCommonGroupIds();
|
||||
|
||||
this.processUserRegionMap(userRgionMap,"ipGroup",ipDeletedGroups,cfgIndexInfo,ipCommGroupCfgDao,IpCommCfg.class);
|
||||
this.processUserRegionMap(userRgionMap,"urlGroup",urlDeletedGroups,cfgIndexInfo,urlCommGroupCfgDao,UrlCommCfg.class);
|
||||
this.processUserRegionMap(userRgionMap,"subscribeIdGroup",subIdDeletedGroups,cfgIndexInfo,scriberIdCommGroupDao,ScriberIdCommCfg.class);
|
||||
this.processUserRegionMap(userRgionMap,"domainGroup",domainDeletedGroups,cfgIndexInfo,domainCommGroupDao,DomainCommCfg.class);
|
||||
|
||||
//需要更新的组
|
||||
cfgIndexInfo.setCommonGroupIds(gsonToJson(userRgionMap));
|
||||
if(!oldCommonGroupIds.equals(cfgIndexInfo.getCommonGroupIds())){
|
||||
toUpdateCfgIndexInfos.add(cfgIndexInfo);
|
||||
//commonPolicyDao.updateCfgIndexCommonGroupIds(cfgIndexInfo);
|
||||
}
|
||||
if(cfgIndexInfo.getIsValid().equals(Constants.VALID_YES)){
|
||||
//没组了,取消配置
|
||||
if(userRgionMap.isEmpty()){
|
||||
maatCfg.setCompileId(cfgIndexInfo.getCompileId());
|
||||
maatCfg.setServiceId(cfgIndexInfo.getServiceId());
|
||||
maatCfg.setIsValid(0);//无效
|
||||
configCompileList.add(maatCfg);
|
||||
}else{//有组,重新下发配置
|
||||
//保存区域IP信息
|
||||
List<AreaIpCfg> areaIpCfgList=areaIpCfgDao.getByCompileId(cfgIndexInfo.getCompileId());
|
||||
if(!StringUtil.isEmpty(areaIpCfgList)){
|
||||
AreaIpCfg cfg = new AreaIpCfg();
|
||||
BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
|
||||
cfg.setTableName(AreaIpCfg.getTablename());
|
||||
commonPolicyDao.auditCfg(cfg);
|
||||
|
||||
Map<String,List> map = cfgConvert(areaIpRegionList,areaIpCfgList,1,cfgIndexInfo,groupRelationList);
|
||||
groupRelationList=map.get("groupList");
|
||||
areaIpRegionList=map.get("dstList");
|
||||
}
|
||||
|
||||
Map<String,Object> maatTableMap=new HashMap<>();
|
||||
StringBuffer userRegion=new StringBuffer();
|
||||
List<Map<String,Object>> list= templateUtil.getServiceListByServiceId(serviceId);
|
||||
//获取业务下的配置域
|
||||
List<Map<String,Object>> cfgList = new ArrayList<>();
|
||||
//获取业务下的自定义域
|
||||
List<Map<String,Object>> userRegionList = new ArrayList<>();
|
||||
for(Map<String,Object> service:list){
|
||||
String serviceType = service.get("serviceType").toString();
|
||||
//主表上有maatTable的一般是app的表
|
||||
// if(service.containsKey("maatTable")){ }
|
||||
if(service.containsKey("cfgList")) {
|
||||
cfgList=(List<Map<String, Object>>) service.get("cfgList");
|
||||
maatTableMap=ConfigConvertUtil.convertCommonGroupMaatTable(cfgIndexInfo,cfgList);
|
||||
}
|
||||
if(service.containsKey("userRegionList")){
|
||||
//Map<String,Object> userregionMap=new HashMap<>();
|
||||
//userRegionList=(List<Map<String, Object>>) service.get("userRegionList");
|
||||
if(serviceId.equals(576)){
|
||||
String _userregion=ConfigConvertUtil.generateCommonGroupDefaultUserRegion(interceptUserRegionMap,serviceId);
|
||||
userRegion.append(_userregion);
|
||||
}else if(serviceId.equals(512)){
|
||||
cfgIndexInfo.setAction(2);
|
||||
String _userregion=ConfigConvertUtil.generateCommonGroupDefaultUserRegion(interceptUserRegionMap,serviceId);
|
||||
userRegion.append(_userregion);
|
||||
}
|
||||
}
|
||||
}
|
||||
compileIds.add(cfgIndexInfo.getCompileId());
|
||||
//子表
|
||||
//IP公共分组
|
||||
if(CollectionUtils.isNotEmpty(cfgIndexInfo.getIpCommGroupCfgList())){
|
||||
IpPortCfg cfg = new IpPortCfg();
|
||||
BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
|
||||
Map<String,List> map = ConfigConvertUtil.objGroupCfgConvert(ipRegionList,cfgIndexInfo.getIpCommGroupCfgList(),1,cfgIndexInfo,groupRelationList,maatTableMap,groupIdSet);
|
||||
groupRelationList=map.get("groupList");
|
||||
ipRegionList=map.get("dstList");
|
||||
if(map.get("numRegionList")!=null){
|
||||
numRegionList.addAll(map.get("numRegionList"));
|
||||
}
|
||||
|
||||
}
|
||||
//URL公共分组
|
||||
if(CollectionUtils.isNotEmpty(cfgIndexInfo.getUrlCommGroupList())){
|
||||
CommonStringCfg cfg = new CommonStringCfg();
|
||||
BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
|
||||
Map<String,List> map =ConfigConvertUtil.objGroupCfgConvert(strRegionList,cfgIndexInfo.getUrlCommGroupList(),2,cfgIndexInfo,groupRelationList,maatTableMap,groupIdSet);
|
||||
groupRelationList=map.get("groupList");
|
||||
strRegionList=map.get("dstList");
|
||||
}
|
||||
//账号公共分组
|
||||
if(CollectionUtils.isNotEmpty(cfgIndexInfo.getScriberIdCommGroupList())){
|
||||
CommonStringCfg cfg = new CommonStringCfg();
|
||||
BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
|
||||
|
||||
Map<String,List> map =ConfigConvertUtil.objGroupCfgConvert(strRegionList,cfgIndexInfo.getScriberIdCommGroupList(),2,cfgIndexInfo,groupRelationList,maatTableMap,groupIdSet);
|
||||
groupRelationList=map.get("groupList");
|
||||
strRegionList=map.get("dstList");
|
||||
|
||||
}
|
||||
//域名公共分组
|
||||
if(CollectionUtils.isNotEmpty(cfgIndexInfo.getDomainCommGroupList())){
|
||||
CommonStringCfg cfg = new CommonStringCfg();
|
||||
BeanUtils.copyProperties(cfgIndexInfo, cfg, new String[]{"cfgId"});
|
||||
|
||||
Map<String,List> map =ConfigConvertUtil.objGroupCfgConvert(strRegionList,cfgIndexInfo.getDomainCommGroupList(),2,cfgIndexInfo,groupRelationList,maatTableMap,groupIdSet);
|
||||
groupRelationList=map.get("groupList");
|
||||
strRegionList=map.get("dstList");
|
||||
|
||||
}
|
||||
//构造提交综合服务参数格式
|
||||
maatCfg.initDefaultValue();
|
||||
BeanUtils.copyProperties(cfgIndexInfo, maatCfg);
|
||||
maatCfg.setAction(cfgIndexInfo.getAction());
|
||||
maatCfg.setAuditTime(cfgIndexInfo.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(Constants.VALID_YES);
|
||||
//设置用户自定义域
|
||||
String protpcolType=cfgIndexInfo.getUserRegion1();
|
||||
|
||||
if("HTTPS".equalsIgnoreCase(protpcolType)||"INTERCEPT".equalsIgnoreCase(protpcolType)){
|
||||
if(StringUtils.isBlank(userRegion.toString())){
|
||||
userRegion.append("{}");
|
||||
}
|
||||
}else if("HTTP".equalsIgnoreCase(protpcolType)){
|
||||
}
|
||||
maatCfg.setUserRegion(userRegion.toString());
|
||||
|
||||
configCompileList.add(maatCfg);
|
||||
}
|
||||
if(CollectionUtils.isEmpty(maatBean.getConfigCompileList())){
|
||||
maatBean.setConfigCompileList(configCompileList);
|
||||
maatBean.setAuditTime(cfgIndexInfo.getAuditTime());
|
||||
maatBean.setCreatorName(cfgIndexInfo.getCurrentUser().getName());
|
||||
maatBean.setVersion(Constants.MAAT_VERSION);
|
||||
maatBean.setOpAction(Constants.UPDATE_ACTION);
|
||||
}
|
||||
}
|
||||
|
||||
//下发maat配置
|
||||
//auditPolicy(cfgIndexInfo,cfgIndexInfo.getIsAudit(),Constants.UPDATE_ACTION);
|
||||
}
|
||||
}
|
||||
//需要更新的cfg_index_info数据库更新
|
||||
if(toUpdateCfgIndexInfos.size()>0){
|
||||
commonPolicyDao.updateCfgIndexCommonGroupIds(toUpdateCfgIndexInfos);
|
||||
}
|
||||
//向maat发送配置
|
||||
if(CollectionUtils.isNotEmpty(maatBean.getConfigCompileList())){
|
||||
//调用服务接口下发配置数据
|
||||
String json=gsonToJson(maatBean);
|
||||
logger.info("策略对象组下发配置参数:"+json);
|
||||
//调用服务接口下发配置
|
||||
ToMaatResult result = ConfigServiceUtil.postMaatCfg(json);
|
||||
logger.info("策略对象组下发响应信息:"+result.getMsg());
|
||||
}
|
||||
//commonPolicyDao.auditCfgBatch(CfgIndexInfo.getTablename(),auditCfg,compileIds,null);
|
||||
return true;
|
||||
}
|
||||
private void processUserRegionMap(Map<String,Object> userRgionMap, String key, Set deletedGroups, CfgIndexInfo cfgIndexInfo, CrudDao dao,Class clazz) {
|
||||
if(userRgionMap.containsKey(key)){
|
||||
//排除删除的组,添加新的组
|
||||
for(String urlGroup:((String)userRgionMap.get(key)).split(",")){
|
||||
if(deletedGroups.contains(urlGroup)){
|
||||
userRgionMap.put(key,((String) userRgionMap.get(key)).replace(","+urlGroup+",",","));
|
||||
}
|
||||
}
|
||||
boolean contains=true;
|
||||
//空了
|
||||
if(userRgionMap.get(key).toString().equals(",")){
|
||||
userRgionMap.remove(key);
|
||||
contains=false;
|
||||
}
|
||||
if(contains&&cfgIndexInfo.getIsValid()==Constants.VALID_YES){
|
||||
if("IpCommCfg".equals(clazz.getSimpleName())){
|
||||
IpCommCfg searchCfg=new IpCommCfg();
|
||||
searchCfg.setCommonGroupIds(userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1));
|
||||
List commCfgs=dao.findAllList(searchCfg);
|
||||
if(CollectionUtils.isNotEmpty(commCfgs)){
|
||||
cfgIndexInfo.setIpCommGroupCfgList(commCfgs);
|
||||
}
|
||||
}else if("ScriberIdCommCfg".equals(clazz.getSimpleName()) ){
|
||||
ScriberIdCommCfg searchCfg=new ScriberIdCommCfg();
|
||||
searchCfg.setCommonGroupIds(userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1));
|
||||
List commCfgs=dao.findAllList(searchCfg);
|
||||
if(CollectionUtils.isNotEmpty(commCfgs)){
|
||||
cfgIndexInfo.setScriberIdCommGroupList(commCfgs);
|
||||
}
|
||||
}else if("UrlCommCfg".equals(clazz.getSimpleName())){
|
||||
UrlCommCfg searchCfg=new UrlCommCfg();
|
||||
searchCfg.setCommonGroupIds(userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1));
|
||||
List commCfgs=dao.findAllList(searchCfg);
|
||||
if(CollectionUtils.isNotEmpty(commCfgs)){
|
||||
cfgIndexInfo.setUrlCommGroupList(commCfgs);
|
||||
}
|
||||
}else if("DomainCommCfg".equals(clazz.getSimpleName())){
|
||||
DomainCommCfg searchCfg=new DomainCommCfg();
|
||||
searchCfg.setCommonGroupIds(userRgionMap.get(key).toString().substring(1,userRgionMap.get(key).toString().length()-1));
|
||||
List commCfgs=dao.findAllList(searchCfg);
|
||||
if(CollectionUtils.isNotEmpty(commCfgs)){
|
||||
cfgIndexInfo.setDomainCommGroupList(commCfgs);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user