/** * Copyright © 2012-2014 JeeSite All rights reserved. */ package com.nis.web.service; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.ibatis.session.ExecutorType; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.beans.factory.annotation.Autowired; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.nis.domain.BaseEntity; import com.nis.domain.Page; import com.nis.domain.configuration.AreaIpCfg; import com.nis.domain.configuration.BaseCfg; import com.nis.domain.configuration.BaseIpCfg; import com.nis.domain.configuration.BaseStringCfg; import com.nis.domain.configuration.ComplexkeywordCfg; import com.nis.domain.configuration.NumBoundaryCfg; import com.nis.domain.maat.MaatCfg; import com.nis.domain.maat.ToMaatBean; import com.nis.domain.maat.ToMaatUnAuditBean; import com.nis.domain.maat.UnAuditBean; import com.nis.main.ConvertTool; import com.nis.util.Constants; import com.nis.web.dao.CrudDao; import com.nis.web.dao.configuration.IpCfgDao; /** * Service基类 * @author ThinkGem * @version 2014-05-16 */ public abstract class CrudService, T extends BaseEntity> extends BaseService { /** * 持久层对象 */ @Autowired protected D dao; /** * 获取单条数据 * @param id * @return */ public T get(Long id) { return dao.get(id); } /** * 获取单条数据 * @param entity * @return */ public T get(T entity) { return dao.get(entity); } /** * 查询列表数据 * @param entity * @return */ public List findList(T entity) { return dao.findList(entity); } /** * 查询分页数据 * @param page 分页对象 * @param entity * @return */ public Page findPage(Page page, T entity) { entity.setPage(page); page.setList(dao.findList(entity)); return page; } /** * 保存数据(插入或更新) * @param entity */ public void save(T entity) { if (entity.getIsNewRecord()){ dao.insert(entity); }else{ dao.update(entity); } } /** * 删除数据 * @param entity */ public void delete(T entity) { dao.delete(entity); } /** * * saveBatch(批量全部保存数据) * (这里描述这个方法适用条件 – 可选) * @param data 数据集合 * @param mClass 传入的dao.xml里的mapper * @author wx * @since 1.0.0 */ @SuppressWarnings("unchecked") public void saveBatch(List data,@SuppressWarnings("rawtypes")Class mClass) { SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; try{ batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); for(int index = 0; index < data.size();index++){ T t = data.get(index); ((CrudDao) batchSqlSession.getMapper(mClass)).insert(t); } batchSqlSession.commit(); }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } /** * * saveIpBatch(非Ip类配置调用,批量新增区域IP) * (这里描述这个方法适用条件 – 可选) * @param areaIpCfgs *void * @exception * @since 1.0.0 */ public void saveIpBatch(List areaIpCfgs) { SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; try{ batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); for(int index = 0; index < areaIpCfgs.size();index++){ BaseIpCfg t = areaIpCfgs.get(index); ((CrudDao) batchSqlSession.getMapper(IpCfgDao.class)).insert(t); } batchSqlSession.commit(); }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } /** * * updateBatch(批量更新全部数据) * (这里描述这个方法适用条件 – 可选) * @param areaCfg 数据集合 * @param mClass 传入的dao.xml里的mapper * @author wx * @since 1.0.0 */ @SuppressWarnings("unchecked") public void updateBatch(List data,@SuppressWarnings("rawtypes") Class mClass) { SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; try{ batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); for(int index = 0; index < data.size();index++){ T t = data.get(index); ((CrudDao) batchSqlSession.getMapper(mClass)).update(t); } batchSqlSession.commit(); }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } /** * * updateIpBatch(非IP类配置调用,批量更新区域IP) * (这里描述这个方法适用条件 – 可选) * @param areaCfg *void * @exception * @since 1.0.0 */ public void updateIpBatch(List areaCfg) { SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; try{ batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); for(int index = 0; index < areaCfg.size();index++){ BaseIpCfg t = areaCfg.get(index); ((CrudDao) batchSqlSession.getMapper(IpCfgDao.class)).update(t); } batchSqlSession.commit(); }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } /** * * deleteBatch(批量删除全部数据) * (这里描述这个方法适用条件 – 可选) * @param data 数据集合 * @param mClass 传入的dao.xml里的mapper * @author wx * @since 1.0.0 */ @SuppressWarnings("unchecked") public void deleteBatch(List data,@SuppressWarnings("rawtypes") Class mClass) { SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; try{ batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); for(int index = 0; index < data.size();index++){ T t = data.get(index); ((CrudDao) batchSqlSession.getMapper(mClass)).delete(t); } batchSqlSession.commit(); }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } /** * * auditBatch(批量审核) * (这里描述这个方法适用条件 – 可选) * @param data 数据集合 * @param mClass 传入的dao.xml里的mapper * @author wx * @since 1.0.0 */ @SuppressWarnings("unchecked") public void auditBatch(List data,@SuppressWarnings("rawtypes") Class mClass) { SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; try{ batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); for(int index = 0; index < data.size();index++){ T t = data.get(index); ((CrudDao) batchSqlSession.getMapper(mClass)).audit(t); } batchSqlSession.commit(); }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } /** * * auditIpBatch(非IP类配置用,审核区域IP) * (这里描述这个方法适用条件 – 可选) * @param data *void * @exception * @since 1.0.0 */ public void auditIpBatch(List data) { SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; try{ batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); for(int index = 0; index < data.size();index++){ BaseIpCfg t = data.get(index); ((CrudDao) batchSqlSession.getMapper(IpCfgDao.class)).audit(t); } batchSqlSession.commit(); }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } /** * * deleteIpBatch(非IP类配置调用,批量删除区域IP) * (这里描述这个方法适用条件 – 可选) * @param data *void * @exception * @since 1.0.0 */ public void deleteIpBatch(List data) { SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class); SqlSession batchSqlSession = null; try{ batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false); for(int index = 0; index < data.size();index++){ BaseIpCfg t = data.get(index); ((CrudDao) batchSqlSession.getMapper(IpCfgDao.class)).delete(t); } batchSqlSession.commit(); }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } /** * * sendToMaatConvertorBatch(批量转换配置到maat转换工具) * (这里描述这个方法适用条件 – 可选) * @param operation * @param cfgs * @return * @throws Exception *boolean * @exception * @since 1.0.0 */ public boolean sendToMaatConvertorBatch(int operation,List> cfgs) throws Exception{ if(cfgs==null){ throw new RuntimeException("转换出错,配置为空"); } Gson gson=new GsonBuilder().disableHtmlEscaping() /*.setPrettyPrinting().serializeNulls()*/ .excludeFieldsWithoutExposeAnnotation() .create(); if(Constants.AUDIT_NOT_YES==operation){ List beans=new ArrayList(); for(List cfg:cfgs){ ToMaatUnAuditBean toMaatUnAuditBean=new ToMaatUnAuditBean(); toMaatUnAuditBean.setServiceCfg(new ArrayList()); for(BaseCfg c:cfg){ if(c.getCompileId()==null||c.getCompileId()==0){ throw new RuntimeException("转换出错,未获取到正确的compileId"); } // if(StringUtils.isBlank(c.getMaatTable())){ // throw new RuntimeException("转换出错,未获取到正确的maatTalbe"); // } //针对含有多个maatTable的表 // if(c.getMaatTable().contains(",")){ // for(String maatTable:c.getMaatTable().split(",")){ // UnAuditBean bean=new UnAuditBean(); // bean.setCompileId(c.getCompileId()); // bean.setMaatTable(maatTable); // toMaatUnAuditBean.getServiceCfg().add(bean); // } // }else{ // UnAuditBean bean=new UnAuditBean(); // bean.setCompileId(c.getCompileId()); // toMaatUnAuditBean.getServiceCfg().add(bean); // } } beans.add(toMaatUnAuditBean); } String json=gson.toJson(beans); logger.info("to maat json:"+json); //发送至maat,待完成 return new ConvertTool().setConfigInValid(json); }else{ List beans=new ArrayList(); for(List cfg:cfgs){ int compileId=0; ToMaatBean toMaatBean=new ToMaatBean(); toMaatBean.setServiceCfg(new ArrayList()); MaatCfg maatCfg=new MaatCfg(); for(BaseCfg c:cfg){ if(c instanceof BaseIpCfg){ compileId=compileId==0?c.getCompileId():compileId; int protocolId= ((BaseIpCfg) c).getProtocolId().intValue(); // String maatTable=c.getMaatTable(); // if(maatTable.contains(",")){ // if(protocolId!=0){ // for(String _maatTable:maatTable.split(",")){ // if(_maatTable.toLowerCase().indexOf("ip")>-1){ // BaseIpCfg ipCfg=(BaseIpCfg)c.clone(); // ipCfg.setMaatTable(_maatTable); // if(maatCfg.getIpCfg()==null){ // List list=new ArrayList<>(); // list.add(ipCfg); // maatCfg.setIpCfg(list); // }else{ // List list=maatCfg.getIpCfg(); // list.add(ipCfg); // } // }else{ // NumBoundaryCfg numCfg=new NumBoundaryCfg(); // numCfg.initDefaultValue(); // numCfg.setLowBounadry((long)protocolId); // numCfg.setUpBoundary((long)protocolId); // numCfg.setMaatTable(_maatTable); // if(maatCfg.getNumCfg()==null){ // List numlist=new ArrayList<>(); // numlist.add(numCfg); // maatCfg.setNumCfg(numlist); // }else{ // List numlist=maatCfg.getNumCfg(); // numlist.add(numCfg); // } // } // } // }else{ // throw new RuntimeException("protocolId等于0,却对应两个maat_table "+maatTable); // } // }else{ // if(maatCfg.getIpCfg()==null){ // List list=new ArrayList<>(); // list.add((BaseIpCfg)c); // maatCfg.setIpCfg(list); // }else{ // List list=maatCfg.getIpCfg(); // list.add((BaseIpCfg)c); // } // } }else if(c instanceof BaseStringCfg){ compileId=compileId==0?c.getCompileId():compileId; // String maatTable=c.getMaatTable(); // if(maatTable.contains(",")){ // for(String _maatTable:maatTable.split(",")){ // BaseStringCfg strCfg=(BaseStringCfg)c.clone(); // strCfg.setMaatTable(_maatTable); // if(maatCfg.getStrCfg()==null){ // List list=new ArrayList(); // list.add(strCfg); // maatCfg.setStrCfg(list); // }else{ // List list=maatCfg.getStrCfg(); // list.add(strCfg); // } // } // }else{ // if(maatCfg.getStrCfg()==null){ // List list=new ArrayList(); // list.add((BaseStringCfg)c); // maatCfg.setStrCfg(list); // }else{ // List list=maatCfg.getStrCfg(); // list.add((BaseStringCfg)c); // } // } }else if(c instanceof ComplexkeywordCfg){ compileId=compileId==0?c.getCompileId():compileId; // String maatTable=c.getMaatTable(); // if(maatTable.contains(",")){ // for(String _maatTable:maatTable.split(",")){ // ComplexkeywordCfg complexCfg=(ComplexkeywordCfg)c.clone(); // complexCfg.setMaatTable(_maatTable); // if(maatCfg.getComplexStrCfg()==null){ // List list=new ArrayList(); // list.add(complexCfg); // maatCfg.setComplexStrCfg(list); // }else{ // List list=maatCfg.getComplexStrCfg(); // list.add(complexCfg); // } // } // }else{ // if(maatCfg.getComplexStrCfg()==null){ // List list=new ArrayList(); // list.add((ComplexkeywordCfg)c); // maatCfg.setComplexStrCfg(list); // }else{ // List list=maatCfg.getComplexStrCfg(); // list.add((ComplexkeywordCfg)c); // } // } }else if(c instanceof NumBoundaryCfg){ compileId=compileId==0?c.getCompileId():compileId; if(maatCfg.getNumCfg()==null){ List list=new ArrayList(); list.add((NumBoundaryCfg)c); maatCfg.setNumCfg(list); }else{ List list=maatCfg.getNumCfg(); list.add((NumBoundaryCfg)c); } } if(c.getAreaCfg()!=null){ if(toMaatBean.getAreaCfg()!=null){ toMaatBean.getAreaCfg().addAll(c.getAreaCfg()); }else{ toMaatBean.setAreaCfg(new ArrayList()); toMaatBean.getAreaCfg().addAll(c.getAreaCfg()); } } } toMaatBean.getServiceCfg().add(maatCfg); BaseCfg baseCfg=cfg.get(0); if(compileId==0){ throw new RuntimeException("转换出错,未获取到正确的compileId"); }else{ toMaatBean.setCompileId(compileId); } if(baseCfg.getAction()==null){ throw new RuntimeException("转换出错,未获取到正确的action"); }else{ toMaatBean.setAction(baseCfg.getAction()); } if(baseCfg.getIsAreaEffective()==null){ throw new RuntimeException("转换出错,未获取到正确的isAreaEffective"); }else{ toMaatBean.setIsAreaEffective(baseCfg.getIsAreaEffective()); } if(baseCfg.getIsValid()==null){ throw new RuntimeException("转换出错,未获取到正确的isValid"); }else{ toMaatBean.setIsValid(baseCfg.getIsValid()); } if(baseCfg.getRequestId()==null){ throw new RuntimeException("转换出错,未获取到正确的requestId"); }else{ toMaatBean.setRequestId(baseCfg.getRequestId()); } if(baseCfg.getServiceId()==null){ throw new RuntimeException("转换出错,未获取到正确的serviceId"); }else{ toMaatBean.setServiceId(baseCfg.getServiceId()); } toMaatBean.setAreaEffectiveIds(baseCfg.getAreaEffectiveIds()==null?"":baseCfg.getAreaEffectiveIds()); toMaatBean.setAttribute(baseCfg.getAttribute()==null?"":baseCfg.getAttribute()); toMaatBean.setClassify(baseCfg.getClassify()==null?"":baseCfg.getClassify()); toMaatBean.setLable(baseCfg.getLable()==null?"":baseCfg.getLable()); beans.add(toMaatBean); } String json=gson.toJson(beans); logger.info("to maat json:"+json); //发送至maat,待完成 return new ConvertTool().saveConfig(json); } } /** * * sendToMaatConvertor(转换配置为Maat格式) * (所有的配置需拥有一样的编译ID,action,serviceId,等属性) * @param cfg * @return *boolean * @throws Exception * @exception * @since 1.0.0 */ @SuppressWarnings("rawtypes") public boolean sendToMaatConvertor(int operation,List areaCfg,BaseCfg ... cfg) throws Exception{ if(cfg==null){ throw new RuntimeException("转换出错,配置为空"); } Gson gson=new GsonBuilder().disableHtmlEscaping() /*.setPrettyPrinting().serializeNulls()*/ .excludeFieldsWithoutExposeAnnotation() .create(); if(Constants.AUDIT_NOT_YES==operation){ ToMaatUnAuditBean toMaatUnAuditBean=new ToMaatUnAuditBean(); toMaatUnAuditBean.setServiceCfg(new ArrayList()); for(BaseCfg c:cfg){ if(c.getCompileId()==null||c.getCompileId()==0){ throw new RuntimeException("转换出错,未获取到正确的compileId"); } // if(StringUtils.isBlank(c.getMaatTable())){ // throw new RuntimeException("转换出错,未获取到正确的maatTalbe"); // } //针对含有多个maatTable的表 // if(c.getMaatTable().contains(",")){ // for(String maatTable:c.getMaatTable().split(",")){ // UnAuditBean bean=new UnAuditBean(); // bean.setCompileId(c.getCompileId()); // bean.setMaatTable(maatTable); // toMaatUnAuditBean.getServiceCfg().add(bean); // } // }else{ // UnAuditBean bean=new UnAuditBean(); // bean.setCompileId(c.getCompileId()); // bean.setMaatTable(c.getMaatTable()); // toMaatUnAuditBean.getServiceCfg().add(bean); // } } String json=gson.toJson(toMaatUnAuditBean); logger.info("to maat json:"+json); //发送至maat,待完成 return new ConvertTool().setConfigInValid(json); }else{ int compileId=0; ToMaatBean toMaatBean=new ToMaatBean(); toMaatBean.setServiceCfg(new ArrayList()); MaatCfg maatCfg=new MaatCfg(); for(BaseCfg c:cfg){ if(c instanceof BaseIpCfg){ compileId=compileId==0?c.getCompileId():compileId; int protocolId= ((BaseIpCfg) c).getProtocolId().intValue(); // String maatTable=c.getMaatTable(); // if(maatTable.contains(",")){ // if(protocolId!=0){ // for(String _maatTable:maatTable.split(",")){ // if(_maatTable.toLowerCase().indexOf("ip")>-1){ // BaseIpCfg ipCfg=(BaseIpCfg)c.clone(); // ipCfg.setMaatTable(_maatTable); // if(maatCfg.getIpCfg()==null){ // List list=new ArrayList<>(); // list.add(ipCfg); // maatCfg.setIpCfg(list); // }else{ // List list=maatCfg.getIpCfg(); // list.add(ipCfg); // } // }else{ // NumBoundaryCfg numCfg=new NumBoundaryCfg(); // numCfg.initDefaultValue(); // numCfg.setLowBounadry((long)protocolId); // numCfg.setUpBoundary((long)protocolId); // numCfg.setMaatTable(_maatTable); // if(maatCfg.getNumCfg()==null){ // List numlist=new ArrayList<>(); // numlist.add(numCfg); // maatCfg.setNumCfg(numlist); // }else{ // List numlist=maatCfg.getNumCfg(); // numlist.add(numCfg); // } // } // } // }else{ // throw new RuntimeException("protocolId等于0,却对应两个maat_table "+maatTable); // } // }else{ // if(maatCfg.getIpCfg()==null){ // List list=new ArrayList<>(); // list.add((BaseIpCfg)c); // maatCfg.setIpCfg(list); // }else{ // List list=maatCfg.getIpCfg(); // list.add((BaseIpCfg)c); // } // } }else if(c instanceof BaseStringCfg){ compileId=compileId==0?c.getCompileId():compileId; // String maatTable=c.getMaatTable(); // if(maatTable.contains(",")){ // for(String _maatTable:maatTable.split(",")){ // BaseStringCfg strCfg=(BaseStringCfg)c.clone(); // strCfg.setMaatTable(_maatTable); // if(maatCfg.getStrCfg()==null){ // List list=new ArrayList(); // list.add(strCfg); // maatCfg.setStrCfg(list); // }else{ // List list=maatCfg.getStrCfg(); // list.add(strCfg); // } // } // }else{ // if(maatCfg.getStrCfg()==null){ // List list=new ArrayList(); // list.add((BaseStringCfg)c); // maatCfg.setStrCfg(list); // }else{ // List list=maatCfg.getStrCfg(); // list.add((BaseStringCfg)c); // } // } }else if(c instanceof ComplexkeywordCfg){ compileId=compileId==0?c.getCompileId():compileId; // String maatTable=c.getMaatTable(); // if(maatTable.contains(",")){ // for(String _maatTable:maatTable.split(",")){ // ComplexkeywordCfg complexCfg=(ComplexkeywordCfg)c.clone(); // complexCfg.setMaatTable(_maatTable); // if(maatCfg.getComplexStrCfg()==null){ // List list=new ArrayList(); // list.add(complexCfg); // maatCfg.setComplexStrCfg(list); // }else{ // List list=maatCfg.getComplexStrCfg(); // list.add(complexCfg); // } // } // }else{ // if(maatCfg.getComplexStrCfg()==null){ // List list=new ArrayList(); // list.add((ComplexkeywordCfg)c); // maatCfg.setComplexStrCfg(list); // }else{ // List list=maatCfg.getComplexStrCfg(); // list.add((ComplexkeywordCfg)c); // } // } }else if(c instanceof NumBoundaryCfg){ compileId=compileId==0?c.getCompileId():compileId; if(maatCfg.getNumCfg()==null){ List list=new ArrayList(); list.add((NumBoundaryCfg)c); maatCfg.setNumCfg(list); }else{ List list=maatCfg.getNumCfg(); list.add((NumBoundaryCfg)c); } } } if(areaCfg!=null){ toMaatBean.setAreaCfg(areaCfg); }else{ toMaatBean.setAreaCfg(new ArrayList()); } toMaatBean.getServiceCfg().add(maatCfg); BaseCfg baseCfg=(BaseCfg)cfg[0]; if(compileId==0){ throw new RuntimeException("转换出错,未获取到正确的compileId"); }else{ toMaatBean.setCompileId(compileId); } if(baseCfg.getAction()==null){ throw new RuntimeException("转换出错,未获取到正确的action"); }else{ toMaatBean.setAction(baseCfg.getAction()); } if(baseCfg.getIsAreaEffective()==null){ throw new RuntimeException("转换出错,未获取到正确的isAreaEffective"); }else{ toMaatBean.setIsAreaEffective(baseCfg.getIsAreaEffective()); } if(baseCfg.getIsValid()==null){ throw new RuntimeException("转换出错,未获取到正确的isValid"); }else{ toMaatBean.setIsValid(baseCfg.getIsValid()); } if(baseCfg.getRequestId()==null){ throw new RuntimeException("转换出错,未获取到正确的requestId"); }else{ toMaatBean.setRequestId(baseCfg.getRequestId()); } if(baseCfg.getServiceId()==null){ throw new RuntimeException("转换出错,未获取到正确的serviceId"); }else{ toMaatBean.setServiceId(baseCfg.getServiceId()); } toMaatBean.setAreaEffectiveIds(baseCfg.getAreaEffectiveIds()==null?"":baseCfg.getAreaEffectiveIds()); toMaatBean.setAttribute(baseCfg.getAttribute()==null?"":baseCfg.getAttribute()); toMaatBean.setClassify(baseCfg.getClassify()==null?"":baseCfg.getClassify()); toMaatBean.setLable(baseCfg.getLable()==null?"":baseCfg.getLable()); String json=gson.toJson(toMaatBean); logger.info("to maat json:"+json); //发送至maat,待完成 return new ConvertTool().saveConfig(json); } } }