/** * 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(); // }catch (Exception e){ // batchSqlSession.rollback(); // throw e; }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } 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(); // }catch (Exception e){ // batchSqlSession.rollback(); // throw e; }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(); // }catch (Exception e){ // batchSqlSession.rollback(); // throw e; }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } @SuppressWarnings("unchecked") 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(); // }catch (Exception e){ // batchSqlSession.rollback(); // throw e; }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(); // }catch (Exception e){ // batchSqlSession.rollback(); // throw e; }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } 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(); // }catch (Exception e){ // batchSqlSession.rollback(); // throw e; }finally { if(batchSqlSession != null){ batchSqlSession.close(); } } } /** * * 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); } } }