package com.nis.web.service.configuration; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.nis.domain.Page; import com.nis.domain.ServiceConfigInfo; import com.nis.domain.configuration.AppComplexKeywordCfg; import com.nis.domain.configuration.AppIdCfg; import com.nis.domain.configuration.AppStringCfg; import com.nis.domain.configuration.AreaIpCfg; import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.AppIdCfg.AppFeaturesIndex; import com.nis.domain.maat.AppMaatCfg; import com.nis.domain.specific.ConfigGroupInfo; import com.nis.domain.specific.SpecificServiceCfg; import com.nis.domain.specific.SpecificServiceHostCfg; import com.nis.main.ConvertTool; import com.nis.util.Constants; import com.nis.util.StringUtil; import com.nis.web.dao.configuration.AppCfgDao; import com.nis.web.dao.configuration.ComplexStringCfgDao; import com.nis.web.dao.configuration.IpCfgDao; import com.nis.web.dao.configuration.StringCfgDao; import com.nis.web.dao.specific.SpecificServiceCfgDao; import com.nis.web.dao.specific.SpecificServiceHostCfgDao; import com.nis.web.dao.systemService.ServiceConfigInfoDao; import com.nis.web.service.CrudService; /** * 特定协议相关配置事务类 * @author dell * */ @Service public class AppCfgService extends CrudService { @Autowired protected AppCfgDao appCfgDao; @Autowired protected ServiceConfigInfoDao serviceConfigInfoDao; @Autowired protected StringCfgDao stringCfgDao; @Autowired protected ComplexStringCfgDao complexStringCfgDao; @Autowired private SpecificServiceCfgDao specificServiceCfgDao; @Autowired private SpecificServiceHostCfgDao specificServiceHostCfgDao; @Autowired protected IpCfgDao ipCfgDao; public Page findPage(Page page, AppIdCfg entity) { entity.setPage(page); List list = dao.findList(entity); page.setList(list); return page; } public AppIdCfg findAppIdCfg(AppIdCfg entity) { //查询协议关联特征表 List featuresTableList = appCfgDao.getFeaturesTableListByAppCompileId(entity.getCompileId()); List complexList = new ArrayList(); List strList = new ArrayList(); if(!StringUtil.isEmpty(featuresTableList)){ for(AppFeaturesIndex features:featuresTableList){ if(features.getFeaturesTableType().equals(4)){//增强字符串特征配置 List complexFeaturesList = appCfgDao.getComplexkeywordFeaturesCfgListByCompileId( features.getFeaturesTable(),features.getFeaturesCompileId()); complexList.addAll(complexFeaturesList); }else if(features.getFeaturesTableType().equals(2)){//普通字符串特征配置 List strFeaturesCfgList = appCfgDao.getStrFeaturesCfgListByCompileId( features.getFeaturesTable(),features.getFeaturesCompileId()); strList.addAll(strFeaturesCfgList); } } } entity.setComplexFeaturesList(complexList); entity.setStrFeaturesCfgList(strList); return entity; } /** * * addAppCfg(新增IP类配置) * (继承AppIdCfg这个类方可使用) * @param cfg * @return *int * @throws Exception * @exception * @since 1.0.0 */ @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public int addAppCfg(AppIdCfg cfg) throws Exception{ //通过配置转换工具获取compileId Integer appCompileId = 0; int cfgId = 0; appCompileId = new ConvertTool().getCompileId(); cfg.setCompileId(appCompileId); cfgId = appCfgDao.insert(cfg); if(cfg.getComplexFeaturesList()!=null){ for(AppComplexKeywordCfg c:cfg.getComplexFeaturesList()){ Integer featuresCompileId = new ConvertTool().getCompileId(); AppFeaturesIndex f = new AppFeaturesIndex(); f.setAppCompileId(cfg.getCompileId()); f.setFeaturesCompileId(featuresCompileId); f.setFeaturesTableType(4); f.setFeaturesTable(c.getTableName()); appCfgDao.insertFeatures(f); c.setTableName(c.getTableName()); // c.initDefaultValue(); c.setAction(cfg.getAction()); c.setServiceId(cfg.getServiceId()); c.setCompileId(featuresCompileId); c.setCreateTime(cfg.getCreateTime()); c.setCreatorId(cfg.getCreatorId()); c.setIsAudit(cfg.getIsAudit()); c.setIsValid(cfg.getIsValid()); c.setIsAreaEffective(cfg.getIsAreaEffective()); c.setAreaEffectiveIds(cfg.getAreaEffectiveIds()); c.setAttribute(cfg.getAttribute()); c.setLable(cfg.getLable()); c.setClassify(cfg.getClassify()); c.setRequestId(cfg.getRequestId()); c.setCfgDesc(cfg.getCfgDesc()); complexStringCfgDao.insert(c); } } if(cfg.getStrFeaturesCfgList()!=null){ for(AppStringCfg s:cfg.getStrFeaturesCfgList()){ Integer featuresCompileId = new ConvertTool().getCompileId(); AppFeaturesIndex f = new AppFeaturesIndex(); f.setAppCompileId(cfg.getCompileId()); f.setFeaturesCompileId(featuresCompileId); f.setFeaturesTableType(2); f.setFeaturesTable(s.getTableName()); appCfgDao.insertFeatures(f); s.setTableName(s.getTableName()); // s.initDefaultValue(); s.setAction(cfg.getAction()); s.setServiceId(cfg.getServiceId()); s.setCompileId(featuresCompileId); s.setCreateTime(cfg.getCreateTime()); s.setCreatorId(cfg.getCreatorId()); s.setIsAudit(cfg.getIsAudit()); s.setIsValid(cfg.getIsValid()); s.setIsAreaEffective(cfg.getIsAreaEffective()); s.setAreaEffectiveIds(cfg.getAreaEffectiveIds()); s.setAttribute(cfg.getAttribute()); s.setLable(cfg.getLable()); s.setClassify(cfg.getClassify()); s.setRequestId(cfg.getRequestId()); s.setCfgDesc(cfg.getCfgDesc()); stringCfgDao.insert(s); } } return cfgId; } /** * * updateAppCfg(更新IP类配置) * (继承AppIdCfg这个类方可使用) * @param cfg * @return *int * @throws Exception * @exception * @since 1.0.0 */ @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public int updateAppCfg(AppIdCfg cfg) throws Exception{ if(cfg.getComplexFeaturesList()!=null){ for(AppComplexKeywordCfg c:cfg.getComplexFeaturesList()){ Integer featuresCompileId = 0; c.setIsAreaEffective(cfg.getIsAreaEffective()); c.setAreaEffectiveIds(cfg.getAreaEffectiveIds()); c.setAttribute(cfg.getAttribute()); c.setLable(cfg.getLable()); c.setClassify(cfg.getClassify()); c.setRequestId(cfg.getRequestId()); c.setCfgDesc(cfg.getCfgDesc()); c.setEditorId(cfg.getEditorId()); c.setEditTime(cfg.getEditTime()); if(c.getCompileId()==null){ featuresCompileId = new ConvertTool().getCompileId(); AppFeaturesIndex f = new AppFeaturesIndex(); f.setAppCompileId(cfg.getCompileId()); f.setFeaturesCompileId(featuresCompileId); f.setFeaturesTableType(4); f.setFeaturesTable(c.getTableName()); appCfgDao.insertFeatures(f); c.setTableName(c.getTableName()); c.setAction(cfg.getAction()); c.setServiceId(cfg.getServiceId()); c.setCompileId(featuresCompileId); c.setCreateTime(new Date()); c.setCreatorId(cfg.getCurrentUser().getId()); c.setIsAudit(cfg.getIsAudit()); c.setIsValid(cfg.getIsValid()); complexStringCfgDao.insert(c); }else{ complexStringCfgDao.updateByPrimaryKeySelective(c); } } } if(cfg.getStrFeaturesCfgList()!=null){ for(AppStringCfg s:cfg.getStrFeaturesCfgList()){ Integer featuresCompileId = 0; s.setIsAreaEffective(cfg.getIsAreaEffective()); s.setAreaEffectiveIds(cfg.getAreaEffectiveIds()); s.setAttribute(cfg.getAttribute()); s.setLable(cfg.getLable()); s.setClassify(cfg.getClassify()); s.setRequestId(cfg.getRequestId()); s.setCfgDesc(cfg.getCfgDesc()); s.setEditorId(cfg.getEditorId()); s.setEditTime(cfg.getEditTime()); if(s.getCompileId()==null){ featuresCompileId = new ConvertTool().getCompileId(); AppFeaturesIndex f = new AppFeaturesIndex(); f.setAppCompileId(cfg.getCompileId()); f.setFeaturesCompileId(featuresCompileId); f.setFeaturesTableType(2); f.setFeaturesTable(s.getTableName()); appCfgDao.insertFeatures(f); s.setTableName(s.getTableName()); s.setAction(cfg.getAction()); s.setServiceId(cfg.getServiceId()); s.setCompileId(featuresCompileId); s.setCreateTime(new Date()); s.setCreatorId(cfg.getCurrentUser().getId()); s.setIsAudit(cfg.getIsAudit()); s.setIsValid(cfg.getIsValid()); stringCfgDao.insert(s); }else{ stringCfgDao.updateByPrimaryKeySelective(s); } } } return appCfgDao.updateByPrimaryKeySelective(cfg); } /** * * auditAppCfg(审核IP类配置) * (继承AppIdCfg这个类方可使用) * @param cfg * @return *int * @throws Exception * @exception * @since 1.0.0 */ @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public int auditAppCfg(AppIdCfg entity) throws Exception{ boolean sendFlag = false; AppIdCfg appCfg = appCfgDao.getById(entity.getCfgId()); List featuresTableList = appCfgDao.getFeaturesTableListByAppCompileId(appCfg.getCompileId()); List strList = new ArrayList(); List complexList = new ArrayList(); List hostList =new ArrayList(); List areaList = new ArrayList(); ConfigGroupInfo group = null; Gson gson=new GsonBuilder().disableHtmlEscaping() .excludeFieldsWithoutExposeAnnotation() .create(); //配置审核状态即将改变后的状态 if(Constants.AUDIT_NOT_YES==entity.getIsAudit().intValue()|| Constants.AUDIT_YES==entity.getIsAudit().intValue()){//审核通过,取消审核通过需要发到maat if(Constants.AUDIT_YES==entity.getIsAudit().intValue()){//审核通过 if(StringUtil.isEmpty(featuresTableList)){ SpecificServiceCfg protocol = specificServiceCfgDao.getBySpecServiceId(appCfg.getAppId().intValue()); group = specificServiceCfgDao.getConfigGroupInfoByGroupId(protocol.getGroupId()); //featuresTableList为空的时候,该service只有特定服务IP一个配置表 ServiceConfigInfo serviceCfg=serviceConfigInfoDao.findSysServiceConfigInfo(appCfg.getServiceId()); if(group==null){ throw new RuntimeException("配置审核失败,未获取社交应用服务器IP所属分组信息"); }else{ if(group.getIsIssued()==0){ //如果分组信息尚未下发,则下发IP group.setGroupId(protocol.getGroupId()); group.setIsIssued(1); SpecificServiceHostCfg hostCfg = new SpecificServiceHostCfg(); hostCfg.setSpecServiceId(protocol.getSpecServiceId()); hostList = specificServiceHostCfgDao.findSpecHostList(hostCfg); for(SpecificServiceHostCfg host:hostList){ SpecificServiceCfg specServiceCfg = specificServiceCfgDao.getBySpecServiceId(host.getSpecServiceId()); host.setProtocolId(0); host.setGroupId(specServiceCfg.getGroupId()); if(StringUtil.isEmpty(serviceCfg)){ host.setMaatTable("DF_PROTOCOL_APP"); }else{ host.setMaatTable(serviceCfg.getMaatTable()); } } }else{ SpecificServiceHostCfg host = new SpecificServiceHostCfg(); host.setGroupId(protocol.getGroupId()); hostList.add(host); } } //生效区域列表信息 if(appCfg.getIsAreaEffective()==1){ if(StringUtil.isEmpty(appCfg.getAreaEffectiveIds())){ BaseIpCfg ipCfg = new BaseIpCfg(); ipCfg.setCompileId(appCfg.getCompileId()); ipCfg.setTableName("area_ip_cfg"); areaList = ipCfgDao.findList(ipCfg); } } }else{ for(AppFeaturesIndex featuresCfg:featuresTableList){ if(featuresCfg.getFeaturesTableType()==2){ List list =appCfgDao.getStrFeaturesCfgListByCompileId(featuresCfg.getFeaturesTable(), featuresCfg.getFeaturesCompileId()); for(AppStringCfg cfg:list){ List cList = serviceConfigInfoDao.findList(appCfg.getServiceId()); if(!StringUtil.isEmpty(cList)){ for(ServiceConfigInfo c:cList){ if(c.getTableName().equals(featuresCfg.getFeaturesTable())){ cfg.setMaatTable(c.getMaatTable()); } } } cfg.setCompileId(featuresCfg.getFeaturesCompileId()); strList.add(cfg); } } if(featuresCfg.getFeaturesTableType()==4){ List list = appCfgDao.getComplexkeywordFeaturesCfgListByCompileId(featuresCfg.getFeaturesTable(), featuresCfg.getFeaturesCompileId()); for(AppComplexKeywordCfg cfg:list){ List cList = serviceConfigInfoDao.findList(appCfg.getServiceId()); if(!StringUtil.isEmpty(cList)){ for(ServiceConfigInfo c:cList){ if(c.getTableName().equals(featuresCfg.getFeaturesTable())){ cfg.setMaatTable(c.getMaatTable()); } } } cfg.setCompileId(featuresCfg.getFeaturesCompileId()); complexList.add(cfg); } } } } AppMaatCfg maatCfg = new AppMaatCfg(); if(StringUtil.isEmpty(featuresTableList)){ maatCfg.setIpCfg(hostList); maatCfg.setAreaCfg(areaList); if(appCfg.getCompileId()==0){ throw new RuntimeException("转换出错,未获取到正确的compileId"); }else{ maatCfg.setCompileId(appCfg.getCompileId()); } }else{//特征配置 maatCfg.setStrCfg(strList); maatCfg.setComplexStrCfg(complexList); } if(appCfg.getAction()==null){ throw new RuntimeException("转换出错,未获取到正确的action"); }else{ maatCfg.setAction(appCfg.getAction()); } if(appCfg.getIsAreaEffective()==null){ throw new RuntimeException("转换出错,未获取到正确的isAreaEffective"); }else{ maatCfg.setIsAreaEffective(appCfg.getIsAreaEffective()); } if(appCfg.getIsValid()==null){ throw new RuntimeException("转换出错,未获取到正确的isValid"); }else{ maatCfg.setIsValid(appCfg.getIsValid()); } if(appCfg.getRequestId()==null){ throw new RuntimeException("转换出错,未获取到正确的requestId"); }else{ maatCfg.setRequestId(appCfg.getRequestId()); } if(appCfg.getServiceId()==null){ throw new RuntimeException("转换出错,未获取到正确的serviceId"); }else{ maatCfg.setServiceId(appCfg.getServiceId()); } maatCfg.setSpecificServiceId(appCfg.getAppId()); maatCfg.setAreaEffectiveIds(appCfg.getAreaEffectiveIds()==null?"":appCfg.getAreaEffectiveIds()); maatCfg.setAttribute(appCfg.getAttribute()==null?"":appCfg.getAttribute()); maatCfg.setClassify(appCfg.getClassify()==null?"":appCfg.getClassify()); maatCfg.setLable(appCfg.getLable()==null?"":appCfg.getLable()); String json=gson.toJson(maatCfg); //下发maat // new ConvertTool().saveAppConfig(json); sendFlag = true; }else{//取消审核通过 AppMaatCfg maatCfg = new AppMaatCfg(); if(StringUtil.isEmpty(featuresTableList)){ ServiceConfigInfo serviceCfg=serviceConfigInfoDao.findSysServiceConfigInfo(appCfg.getServiceId()); maatCfg.setMaatTable(serviceCfg.getMaatTable()); if(appCfg.getCompileId()==0){ throw new RuntimeException("转换出错,未获取到正确的compileId"); }else{ maatCfg.setCompileId(appCfg.getCompileId()); } }else{//特征配置 for(AppFeaturesIndex featuresCfg:featuresTableList){ if(featuresCfg.getFeaturesTableType()==2){ List list =appCfgDao.getStrFeaturesCfgListByCompileId(featuresCfg.getFeaturesTable(), featuresCfg.getFeaturesCompileId()); for(AppStringCfg cfg:list){ AppStringCfg strCfg = new AppStringCfg(); List cList = serviceConfigInfoDao.findList(appCfg.getServiceId()); if(!StringUtil.isEmpty(cList)){ for(ServiceConfigInfo c:cList){ if(c.getTableName().equals(featuresCfg.getFeaturesTable())){ strCfg.setMaatTable(c.getMaatTable()); } } } strCfg.setCompileId(featuresCfg.getFeaturesCompileId()); strList.add(strCfg); } } if(featuresCfg.getFeaturesTableType()==4){ List list = appCfgDao.getComplexkeywordFeaturesCfgListByCompileId(featuresCfg.getFeaturesTable(), featuresCfg.getFeaturesCompileId()); for(AppComplexKeywordCfg cfg:list){ AppComplexKeywordCfg complexCfg = new AppComplexKeywordCfg(); List cList = serviceConfigInfoDao.findList(appCfg.getServiceId()); if(!StringUtil.isEmpty(cList)){ for(ServiceConfigInfo c:cList){ if(c.getTableName().equals(featuresCfg.getFeaturesTable())){ complexCfg.setMaatTable(c.getMaatTable()); } } } complexCfg.setCompileId(featuresCfg.getFeaturesCompileId()); complexList.add(complexCfg); } } } maatCfg.setStrCfg(strList); maatCfg.setComplexStrCfg(complexList); } String json=gson.toJson(maatCfg); //下发maat // new ConvertTool().saveAppConfig(json); sendFlag = true; } }else{ sendFlag = false; } if(sendFlag){ //修改appId配置审核下发状态 appCfgDao.audit(entity); //修改特定服务IP分组下发状态 specificServiceCfgDao.updateConfigGroupInfobyGroupId(group); //修改特征表配置审核下发状态 for(AppFeaturesIndex cfg:featuresTableList){ appCfgDao.auditFeaturesTable(cfg.getFeaturesTable(), cfg.getFeaturesCompileId(), entity.getIsValid(), entity.getIsAudit(), entity.getAuditorId(), entity.getAuditTime()); } return 1; }else{ return 0; } } /** * * deleteAppCfg(删除IP类配置) * (继承AppIdCfg这个类方可使用) * @param cfg * @return *int * @exception * @since 1.0.0 */ @Transactional(readOnly=false,rollbackFor=RuntimeException.class) public int deleteAppCfg(AppIdCfg entity){ Integer status = appCfgDao.updateValid(entity); if(status==1){ List featuresTableList = appCfgDao.getFeaturesTableListByAppCompileId(entity.getCompileId()); for(AppFeaturesIndex cfg:featuresTableList){ status = appCfgDao.updateFeaturesTableValid(cfg.getFeaturesTable(), cfg.getFeaturesCompileId(), entity.getIsValid(), entity.getEditorId(), entity.getEditTime()); if(status==0){ return 0; } } return status; }else{ return status; } // return appCfgDao.updateValid(cfg); } /** * * getAppCfg(根据IP与类名获取IP配置) * (继承AppIdCfg这个类方可使用) * @param id * @return *AppIdCfg * @exception * @since 1.0.0 */ public AppIdCfg getAppCfgById(long id){ return appCfgDao.getById(id); } /** * * getAppCfg(根据IP与类名获取IP配置) * (继承AppIdCfg这个类方可使用) * @param id * @return *AppIdCfg * @exception * @since 1.0.0 */ public AppIdCfg getAppCfgById(AppIdCfg cfg){ cfg = appCfgDao.get(cfg); List featuresTableList = appCfgDao.getFeaturesTableListByAppCompileId(cfg.getCompileId()); List complexList = new ArrayList(); List strList = new ArrayList(); if(!StringUtil.isEmpty(featuresTableList)){ for(AppFeaturesIndex features:featuresTableList){ if(features.getFeaturesTableType().equals(4)){//增强字符串特征配置 List complexFeaturesList = appCfgDao.getComplexkeywordFeaturesCfgListByCompileId( features.getFeaturesTable(),features.getFeaturesCompileId()); complexList.addAll(complexFeaturesList); }else if(features.getFeaturesTableType().equals(2)){//普通字符串特征配置 List strFeaturesCfgList = appCfgDao.getStrFeaturesCfgListByCompileId( features.getFeaturesTable(),features.getFeaturesCompileId()); strList.addAll(strFeaturesCfgList); } } } cfg.setComplexFeaturesList(complexList); cfg.setStrFeaturesCfgList(strList); return cfg; } public Integer getIsValid(Long cfgId){ return appCfgDao.getIsValid(cfgId); } public Integer getIsValid(String tableName, long id){ return appCfgDao.getIsValid(tableName,id); } public Integer getIsAudit(Long cfgId){ return appCfgDao.getIsAudit(cfgId); } public Integer getIsAudit(String tableName, long id){ return appCfgDao.getIsAudit(tableName,id); } }