package com.nis.web.service.basics; import java.util.ArrayList; import java.util.Date; import java.util.List; 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.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.web.dao.CrudDao; import com.nis.web.dao.basics.DomainCommGroupDao; import com.nis.web.dao.basics.PolicyGroupInfoDao; import com.nis.web.service.CrudService; import com.nis.web.service.SpringContextHolder; @Service public class DomainCommGroupService extends CrudService, DomainCommCfg>{ @Autowired private DomainCommGroupDao domainCommGroupDao; @Autowired private PolicyGroupInfoDao policyGroupInfoDao; private CommonGroupManageService groupManageService = SpringContextHolder.getBean(CommonGroupManageService.class); public Page findPage(Page page, DomainCommCfg entity) { entity.getSqlMap().put("dsf", configScopeFilter(entity.getCurrentUser(),"r")); entity.setPage(page); List 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 findByPage(String ids) { List 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 policyGroupInfos=policyGroupInfoDao.findPolicyByServiceGroupInfoList(serviceGroupId+""); for (DomainCommCfg cfg : entity.getDomainCommGroupList()) { BeanUtils.copyProperties(entity, cfg, new String[]{"cfgId"}); Integer regionId = 0; List 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 policyGroupInfos = new ArrayList(); 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) { List policyGroupInfos=policyGroupInfoDao.findPolicyByServiceGroupInfoList(groupIds); domainCommGroupDao.delete(ids); // 更新分组状态 groupManageService.updateGroupStatus(policyGroupInfos, Constants.DOMAIN_OBJ_GROUP_TYPE); transObjGroupToMaat(policyGroupInfos); } public List 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> cfgs) { logger.warn("Start to save Domain,size:"+cfgs.size()); long start=System.currentTimeMillis(); SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; // 需要通过新增域接口新增的ip集合 try{ String ids = ""; batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); for(BaseStringCfg cfg:cfgs) { DomainCommCfg domainCommCfg=new DomainCommCfg(); BeanUtils.copyProperties(cfg, domainCommCfg); Integer serviceGroupId = groupManageService.getServiceGroupId(domainCommCfg.getGroupName(), Constants.DOMAIN_OBJ_GROUP_TYPE); if(!ids.contains(serviceGroupId+"")) { ids += ","+serviceGroupId; } domainCommCfg.setGroupId(serviceGroupId); ((DomainCommGroupDao) batchSqlSession.getMapper(DomainCommGroupDao.class)).insertCommGroupCfg(domainCommCfg); } batchSqlSession.commit(); // 更新分组状态 String serviceGroupIds = ids.substring(1); List policyGroupInfos = policyGroupInfoDao.findPolicyByServiceGroupInfoList(serviceGroupIds); groupManageService.updateGroupStatus(policyGroupInfos, Constants.DOMAIN_OBJ_GROUP_TYPE); }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } long end=System.currentTimeMillis(); logger.warn("Save Domain finish,cost:"+(end-start)); cfgs.clear(); cfgs=null; } }