package com.nis.web.service.basics; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.nis.domain.Page; import com.nis.domain.basics.CommonGroupInfo; import com.nis.domain.basics.DomainCommCfg; import com.nis.domain.basics.IpCommCfg; import com.nis.domain.basics.PolicyGroupInfo; import com.nis.domain.basics.ProtectionListInfo; import com.nis.domain.basics.ScriberIdCommCfg; import com.nis.domain.basics.UrlCommCfg; import com.nis.exceptions.MaatConvertException; import com.nis.util.CacheUtils; import com.nis.util.ConfigServiceUtil; import com.nis.util.Constants; import com.nis.util.StringUtil; import com.nis.web.dao.basics.CommonGroupManageDao; import com.nis.web.dao.basics.DomainCommGroupDao; import com.nis.web.dao.basics.IpCommGroupCfgDao; import com.nis.web.dao.basics.ScriberIdCommGroupDao; import com.nis.web.dao.basics.UrlCommGroupDao; import com.nis.web.security.UserUtils; import com.nis.web.service.BaseService; @Service public class CommonGroupManageService extends BaseService{ @Autowired private CommonGroupManageDao commonGroupManageDao; @Autowired private IpCommGroupCfgDao ipCommGroupCfgDao; // 校验分组时使用 @Autowired private UrlCommGroupDao urlCommGroupDao; @Autowired private DomainCommGroupDao domainCommGroupDao; @Autowired private ScriberIdCommGroupDao scriberIdCommGroupDao; public Page findCommonGroupInfoList(Page page, CommonGroupInfo entity) { entity.getSqlMap().put("dsf", configScopeFilter(entity.getCurrentUser(),"r")); entity.setPage(page); List list=commonGroupManageDao.findCommonGroupInfoList(entity); page.setList(list); return page; } public CommonGroupInfo getById(int id) { CommonGroupInfo groupInfo=commonGroupManageDao.getById(id); return groupInfo; } @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public void saveOrUpdate(CommonGroupInfo entity) throws MaatConvertException{ entity.setIsValid(1); if(entity.getGroupId()==null){ // 新增 Date createTime=new Date(); entity.setCreatorId(UserUtils.getUser().getId()); entity.setCreateTime(createTime); // 获取GroupId int serviceGroupId=0; List groupIds= ConfigServiceUtil.getId(2,1); if(groupIds.size()>0) { serviceGroupId=groupIds.get(0).intValue(); }else { throw new MaatConvertException("Get group id failed"); } entity.setServiceGroupId(serviceGroupId); commonGroupManageDao.insert(entity); this.updatePolicyGroupDict(entity.getGroupType()+""); }else{ // 修改 Date editTime=new Date(); entity.setEditorId(UserUtils.getUser().getId()); entity.setEditTime(editTime); commonGroupManageDao.update(entity); } } @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public void deldete(String ids, int isValid, String groupTypes){ CommonGroupInfo entity=new CommonGroupInfo(); Date editTime=new Date(); entity.setEditorId(UserUtils.getUser().getId()); entity.setEditTime(editTime); entity.setIsValid(isValid); if(!StringUtil.isEmpty(ids)){ for (String id : ids.split(",")) { if(!StringUtil.isEmpty(id)){ entity.setGroupId(Integer.parseInt(id)); commonGroupManageDao.update(entity); } } } } // 分组配置界面使用 public List findCommonGroupInfosByType(int type) { List list=commonGroupManageDao.findCommonGroupInfosByType(type); return list; } // 导出时使用 public List findGroupInfoList(String ids) { List list=commonGroupManageDao.findGroupInfoList(ids); return list; } /** * 更新分组状态 policy_group_info ud_flag:0(无有效的域配置) 1(存在有效的域配置) * @param policyGroupInfos * @param groupType */ public void updateGroupStatus(List policyGroupInfos, Integer groupType) { /** * void updateUdFlag(String groupIds, Integer udFlag, Integer groupType); */ for(PolicyGroupInfo info:policyGroupInfos){ boolean update=false; Integer udFlag = 0; Integer size = 0; if(groupType == 5) { // IP size = ipCommGroupCfgDao.getCfgInfoByGroupIds(info.getServiceGroupId().toString()); }else if(groupType == 7) { // URL size = urlCommGroupDao.getCfgInfoByGroupIds(info.getServiceGroupId().toString()); }else if(groupType == 8) { // Domain size = domainCommGroupDao.getCfgInfoByGroupIds(info.getServiceGroupId().toString()); }else if(groupType == 9) { // ScriberId size = scriberIdCommGroupDao.getCfgInfoByGroupIds(info.getServiceGroupId().toString()); } if(size > 0 && info.getUdFlag().equals(0)) { update=true; udFlag = 1; }else if(size == 0 && !info.getUdFlag().equals(2)){ update=true; } if(update){ commonGroupManageDao.updateGroupStatus(info.getServiceGroupId().toString(), udFlag, groupType); } } } public CommonGroupInfo getGroupInfo(CommonGroupInfo searchCfg) { return commonGroupManageDao.getGroupInfo(searchCfg); } /** * 更新字典缓存 * @return */ private void updatePolicyGroupDict(String groupTypes) { String dictKey = Constants.CACHE_IPGROUP_DICT; if(groupTypes.contains(",")) { String[] split = groupTypes.split(","); List asList = Arrays.asList(split); HashSet strings = new HashSet<>(asList); for (String str : strings) { Integer groupType = Integer.valueOf(str); if(groupType.equals(7)) { dictKey = Constants.CACHE_URLGROUP_DICT; }else if(groupType.equals(8)) { dictKey = Constants.CACHE_DOMAINGROUP_DICT; }else if(groupType.equals(9)) { dictKey = Constants.CACHE_SCRIBERGROUP_DICT; } List groupInfo = findCommonGroupInfosByType(groupType); CacheUtils.put(dictKey, groupInfo); } }else { Integer groupType = Integer.valueOf(groupTypes); if(groupType.equals(7)) { dictKey = Constants.CACHE_URLGROUP_DICT; }else if(groupType.equals(8)) { dictKey = Constants.CACHE_DOMAINGROUP_DICT; }else if(groupType.equals(9)) { dictKey = Constants.CACHE_SCRIBERGROUP_DICT; } List groupInfo = findCommonGroupInfosByType(groupType); CacheUtils.put(dictKey, groupInfo); } } }