This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
k18-ntcs-web-ntc/src/main/java/com/nis/web/service/basics/DomainCommGroupService.java
zhangwenqing d587c67c03 代理-控制策略修改
1.白名单增加应答头域
2.操控:Redirect增加响应体域,Hijack/Inser增加SubscriberID域,修正URL必选
3.以上涉及导入相应修改
2019-07-02 17:24:27 +08:00

353 lines
15 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.nis.web.service.basics;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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.nis.domain.FunctionRegionDict;
import com.nis.domain.FunctionServiceDict;
import com.nis.domain.Page;
import com.nis.domain.basics.CommonGroupInfo;
import com.nis.domain.basics.DomainCommCfg;
import com.nis.domain.basics.PolicyGroupInfo;
import com.nis.domain.configuration.BaseStringCfg;
import com.nis.domain.configuration.CfgIndexInfo;
import com.nis.exceptions.MaatConvertException;
import com.nis.util.ConfigServiceUtil;
import com.nis.util.Constants;
import com.nis.util.StringUtil;
import com.nis.util.StringUtils;
import com.nis.web.controller.configuration.ObjectGroupController;
import com.nis.web.dao.CrudDao;
import com.nis.web.dao.basics.CommonGroupManageDao;
import com.nis.web.dao.basics.DomainCommGroupDao;
import com.nis.web.dao.basics.PolicyGroupInfoDao;
import com.nis.web.dao.configuration.CommonPolicyDao;
import com.nis.web.security.UserUtils;
import com.nis.web.service.CrudService;
import com.nis.web.service.SpringContextHolder;
@Service
public class DomainCommGroupService extends CrudService<CrudDao<DomainCommCfg>, DomainCommCfg>{
@Autowired
private DomainCommGroupDao domainCommGroupDao;
@Autowired
private PolicyGroupInfoDao policyGroupInfoDao;
@Autowired
private CommonPolicyDao commonPolicyDao;
@Autowired
private CommonGroupManageDao commonGroupManageDao;
private CommonGroupManageService groupManageService = SpringContextHolder.getBean(CommonGroupManageService.class);
public Page<DomainCommCfg> findPage(Page<DomainCommCfg> page, DomainCommCfg entity) {
entity.getSqlMap().put("dsf", configScopeFilter(entity.getCurrentUser(),"r"));
entity.setPage(page);
List<DomainCommCfg> list=domainCommGroupDao.findAllPageList(entity);
for (int i = 0; i < list.size(); i++) {
String key=list.get(i).getCfgKeywords().replace("***and***", " ");
list.get(i).setCfgKeywords(key);
}
page.setList(list);
return page;
}
public List<DomainCommCfg> findByPage(String ids) {
List<DomainCommCfg> list=domainCommGroupDao.findByPage(ids);
return list;
}
public DomainCommCfg get(Long id ) {
return domainCommGroupDao.get(id);
}
// 新增
@Transactional(readOnly=false,rollbackFor=RuntimeException.class)
public void saveCommGroupCfg(CfgIndexInfo entity) {
Date createTime=new Date();
if(entity.getDomainCommGroupList()!=null) {
// 获取分组ID
Integer serviceGroupId = groupManageService.getServiceGroupId(entity.getGroupName(), Constants.DOMAIN_OBJ_GROUP_TYPE);
List<PolicyGroupInfo> policyGroupInfos=policyGroupInfoDao.findPolicyByServiceGroupInfoList(serviceGroupId+"");
for (DomainCommCfg cfg : entity.getDomainCommGroupList()) {
BeanUtils.copyProperties(entity, cfg, new String[]{"cfgId"});
Integer regionId = 0;
List<Integer> regionIds = ConfigServiceUtil.getId(3, 1);
if(regionIds!=null && regionIds.size()>0){
regionId = regionIds.get(0);
}else {
throw new MaatConvertException("Get region id failed");
}
cfg.setRegionId(regionId);
cfg.setRequestId(0);
cfg.setClassify("0");
cfg.setAttribute("0");
cfg.setLable("0");
cfg.setIsHexbin(2);
cfg.setCreateTime(createTime);
cfg.setCreatorId(entity.getCurrentUser().getId());
cfg.setIsValid(Constants.VALID_NO);
cfg.setIsAudit(Constants.AUDIT_NOT_YET);
if(cfg.getCfgKeywords().contains("***and***")){
cfg.setExprType(1);
}else{
cfg.setExprType(0);
}
cfg.setGroupId(serviceGroupId);
domainCommGroupDao.insertCommGroupCfg(cfg);
}
// 更新分组状态
groupManageService.updateGroupStatus(policyGroupInfos, Constants.DOMAIN_OBJ_GROUP_TYPE);
transObjGroupToMaat(policyGroupInfos);
}
}
@Transactional(readOnly=false,rollbackFor=RuntimeException.class)
public void update(DomainCommCfg entity){
Date editTime=new Date();
entity.setIsValid(0);
entity.setIsAudit(0);
entity.setEditTime(editTime);
entity.setEditorId(entity.getCurrentUser().getId());
if(entity.getCfgKeywords().contains("***and***")){
entity.setExprType(1);
}else{
entity.setExprType(0);
}
// 获取分组ID
Integer serviceGroupId = groupManageService.getServiceGroupId(entity.getGroupName(), Constants.DOMAIN_OBJ_GROUP_TYPE);
entity.setGroupId(serviceGroupId);
domainCommGroupDao.update(entity);
// 更新分组状态
List<PolicyGroupInfo> policyGroupInfos = new ArrayList<PolicyGroupInfo>();
policyGroupInfos.addAll(policyGroupInfoDao.findPolicyByServiceGroupInfoList(entity.getUserRegion1())); // old
if(!entity.getUserRegion1().equals(entity.getGroupId().toString())) { // 分组已修改
policyGroupInfos.addAll(policyGroupInfoDao.findPolicyByServiceGroupInfoList(entity.getGroupId().toString())); // new
}
groupManageService.updateGroupStatus(policyGroupInfos, Constants.DOMAIN_OBJ_GROUP_TYPE);
transObjGroupToMaat(policyGroupInfos);
}
@Transactional(readOnly=false,rollbackFor=RuntimeException.class)
public void delete(String ids, String groupIds, DomainCommCfg cfg, HttpServletRequest request, HttpServletResponse response) throws Exception {
if(ids == null) {
long start = System.currentTimeMillis();
Page<DomainCommCfg> page = new Page<DomainCommCfg>(request, response, "r");
page.setOrderBy("");
page.setPageSize(Constants.MAAT_JSON_SEND_SIZE);
page.setPageNo(1);
page.setLastPage(false);
boolean hasData = true;
while(hasData){
page.setPageNo(1);
page.setLastPage(false);
cfg.setIsValid(null);
List<DomainCommCfg> list = this.findPage(page, cfg).getList();
if(!StringUtil.isEmpty(list)) {
groupIds = "";
String cfgIds = "";
String serviceGroupIds = "";
for (DomainCommCfg domainCommCfg : list) {
Integer groupId = domainCommCfg.getGroupId();
cfgIds += ","+domainCommCfg.getCfgId();
if(!serviceGroupIds.contains(groupId+"")) {
serviceGroupIds += ","+groupId;
}
}
cfgIds = cfgIds.substring(1);
serviceGroupIds = serviceGroupIds.substring(1);
domainCommGroupDao.delete(cfgIds);
// 删除操作后获取 ①需配置更新的分组(存在域配置)②需配置取消的分组(无域配置) -> 配置分别操作更新或取消
String[] strings = serviceGroupIds.split(",");
serviceGroupIds = "";
for (String groupId : strings) {
Integer size = domainCommGroupDao.getCfgInfoByGroupIds(groupId);
if(size == 0) {
boolean flag = groupManageService.checkCancelCfg(groupId, Constants.DOMAIN_OBJ_GROUP_TYPE);
if(flag) { // 需配置取消
serviceGroupIds += ","+groupId;
}else { // 需配置更新
groupIds += ","+groupId;
}
}else { // 需配置更新
groupIds += ","+groupId;
}
}
// 配置取消
if(StringUtils.isNotBlank(serviceGroupIds)) {
serviceGroupIds = serviceGroupIds.substring(1);
ObjectGroupController groupController = SpringContextHolder.getBean(ObjectGroupController.class);
Page<CfgIndexInfo> auditPage = new Page<CfgIndexInfo>(request,response,"r");
Properties props = groupController.getMsgProp();
// 组下无域配置common_group_ids -> "",ud_flag -> 0
CfgIndexInfo entity = new CfgIndexInfo();
entity.setUserRegion5(serviceGroupIds);
entity.setFunctionId(888);
entity.setCommonGroupIds("");
commonPolicyDao.updateCfgIndexCommonGroupIdsBatch(entity);
List<PolicyGroupInfo> policyGroupInfos=policyGroupInfoDao.findPolicyByServiceGroupInfoList(serviceGroupIds);
groupManageService.updateGroupStatus(policyGroupInfos, Constants.DOMAIN_OBJ_GROUP_TYPE);
entity.setServiceId(0);
entity.setIsValid(Constants.VALID_NO);
entity.setIsAudit(Constants.AUDIT_NOT_YES);
entity.setBatchAuditValue("1");
entity.setBatchValidValue("1,0");
groupController.auditAll(auditPage, Constants.AUDIT_NOT_YES, entity, props);
}
// 配置更新
if(StringUtils.isNotBlank(groupIds)) {
groupIds = groupIds.substring(1);
List<PolicyGroupInfo> policyGroupInfos = policyGroupInfoDao.findPolicyByServiceGroupInfoList(groupIds);
groupManageService.updateGroupStatus(policyGroupInfos, Constants.DOMAIN_OBJ_GROUP_TYPE);
transObjGroupToMaat(policyGroupInfos);
}
}else {
hasData = false;
}
}
long end = System.currentTimeMillis();
logger.warn("域名组域配置,批量删除耗时:"+(end-start));
}else {
List<PolicyGroupInfo> policyGroupInfos=policyGroupInfoDao.findPolicyByServiceGroupInfoList(groupIds);
domainCommGroupDao.delete(ids);
// 更新分组状态
groupManageService.updateGroupStatus(policyGroupInfos, Constants.DOMAIN_OBJ_GROUP_TYPE);
transObjGroupToMaat(policyGroupInfos);
}
}
public List<DomainCommCfg> getByIds(String ids) {
if(ids==null) {
throw new RuntimeException("ids is null!");
}
return domainCommGroupDao.getByIds(ids);
}
@Transactional(readOnly=false,rollbackFor=RuntimeException.class)
public void saveAndSend(FunctionRegionDict regionDict, FunctionServiceDict serviceDict, List<BaseStringCfg<?>> cfgs, Map<String, Integer> groupIdMap, List<CommonGroupInfo> insertGroupList) {
logger.warn("Start to save Domain,size:"+cfgs.size());
long start=System.currentTimeMillis();
SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class);
SqlSession batchSqlSession = null;
// 导入域配置 -> ①分组不存在新增分组并返回groupId ②分组存在获取groupId -> 数据 入库 -> 更新分组状态 -> 判断是否配置下发
try{
String ids = "";
batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
for(BaseStringCfg<?> cfg:cfgs) {
DomainCommCfg domainCommCfg=new DomainCommCfg();
BeanUtils.copyProperties(cfg, domainCommCfg);
Integer groupId = commonGroupManageDao.getGroupIdByGroupName(domainCommCfg.getGroupName(), Constants.DOMAIN_OBJ_GROUP_TYPE);
if(groupId == null) { // 分组不存在,新增 UdFlag为1
groupId = groupIdMap.get(domainCommCfg.getGroupName());
}else {
if(!ids.contains(groupId+"")) {
ids += ","+groupId;
}
}
domainCommCfg.setGroupId(groupId);
((DomainCommGroupDao) batchSqlSession.getMapper(DomainCommGroupDao.class)).insertCommGroupCfg(domainCommCfg);
}
batchSqlSession.commit();
if(insertGroupList.size() > 0) {
commonGroupManageDao.insertBatch(insertGroupList);
}
if(StringUtils.isNotBlank(ids)) {
// 更新分组状态
String serviceGroupIds = ids.substring(1);
List<PolicyGroupInfo> policyGroupInfos = policyGroupInfoDao.findPolicyByServiceGroupInfoList(serviceGroupIds);
groupManageService.updateGroupStatus(policyGroupInfos, Constants.DOMAIN_OBJ_GROUP_TYPE);
// 判断是否配置下发
transObjGroupToMaat(policyGroupInfos);
}
}finally {
if(batchSqlSession != null){
batchSqlSession.close();
}
}
long end=System.currentTimeMillis();
logger.warn("Save Domain finish,cost:"+(end-start));
cfgs.clear();
cfgs=null;
}
/**
* 获取会配置取消的CompileId
* @param searchCfg 携带列表检索条件
* @return List<Integer> CompileId集合
*/
public List<Integer> ajaxCheckIsLastOneCfgBatch(DomainCommCfg searchCfg) {
List<Integer> resultList = new ArrayList<Integer>();
// 获取所有准备删除的数据,并组织格式 {"groupId1":[cfgId1, cfgId2, ...], ...}
Map<Integer, String> map = new HashMap<Integer, String>();
List<DomainCommCfg> cfgList = domainCommGroupDao.findAllPageList(searchCfg);
for (DomainCommCfg cfg : cfgList) {
Integer groupId = cfg.getGroupId();
String value = "";
if(map.containsKey(groupId)) {
value = map.get(groupId);
}
value += ","+cfg.getCfgId();
map.put(groupId, value);
}
// 校验执行删除后分组下是否还有域配置若没有则获取引用该分组的CompileId
for (Integer groupId : map.keySet()) {
String cfgIds = map.get(groupId).substring(1);
Integer size = commonGroupManageDao.ajaxCheckIsLastOneCfg(groupId, cfgIds, DomainCommCfg.getTablename());
if(size == 0) { // 0为分组下的最后一条配置获取配置ID提示
Map<String,String> searchMap = new HashMap<String,String>();
searchMap.put("domainGroup", ","+groupId+",");
Integer compileId = commonGroupManageDao.getCompileIdByGroupId(gsonToJson(searchMap));
if(compileId != null) {
resultList.add(compileId);
}
}
}
return resultList;
}
}