package com.sobey.cmop.mvc.service.basicdata.imports; import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.sobey.cmop.mvc.comm.BaseSevcie; import com.sobey.cmop.mvc.constant.IpPoolConstant; import com.sobey.cmop.mvc.entity.HostServer; import com.sobey.cmop.mvc.service.basicdata.PoiUtil; import com.sobey.framework.utils.Identities; @Service @Transactional(readOnly = true) public class ImportService extends BaseSevcie { private static Logger logger = LoggerFactory.getLogger(ImportService.class); @Transactional(readOnly = false) public boolean save(InputStream inputStream) { long start = System.currentTimeMillis(); logger.info("--->基础数据导入处理..."); try { logger.info("--->读取并解析Excel..."); List resultList = PoiUtil.parseExcel(inputStream); // 保存HostServer logger.info("--->保存已使用宿主机信息..."); String temp = ""; int index = 0; int ecsCount = 0; List<ServerBean> list1 = (List<ServerBean>) resultList.get(0); List<HostServer> hostServerList = new ArrayList<HostServer>(); HostServer hostServer = null; for (ServerBean serverInfo : list1) { // logger.info(serverInfo.toString()); index++; if (index == 0 || (index > 0 && !temp.equals(serverInfo.getDisplayName()))) { temp = serverInfo.getDisplayName(); if (!temp.equals("")) { hostServer = saveHostServer(hostServerList, serverInfo, 1); // 更新宿主机对应IP状态为:已使用 if (comm.ipPoolService.findIpPoolByIpAddress(hostServer.getIpAddress()) != null) { logger.info("已存在的宿主机IP:" + hostServer.getIpAddress()); } else { comm.ipPoolService.saveIpPool(hostServer.getIpAddress(), IpPoolConstant.PoolType.私网IP池.toInteger(), IpPoolConstant.IpStatus.已使用.toInteger(), comm.vlanService.getVlan(1), null); // 默认西安虚拟机内网VLAN } } } // 更新其关联虚拟机及其IP状态为:已使用 if (!serverInfo.getInnerIp().equals("")) { ecsCount++; if (comm.ipPoolService.findIpPoolByIpAddress(serverInfo.getInnerIp()) != null) { logger.info("已存在的虚拟机IP:" + serverInfo.getInnerIp()); comm.ipPoolService.updateIpPoolByIpAddress(serverInfo.getInnerIp(), IpPoolConstant.IpStatus.已使用.toInteger(), hostServer); } else { comm.ipPoolService.saveIpPool(serverInfo.getInnerIp(), IpPoolConstant.PoolType.私网IP池.toInteger(), IpPoolConstant.IpStatus.已使用.toInteger(), comm.vlanService.getVlan(1), hostServer); // 默认西安虚拟机内网VLAN } } } // 更新宿主机在OneCMDB中的别名 // Map serverMap = OneCmdbService.findCiAlias("Server"); // // DisplayName-Alias // updateHostServer(hostServerList, serverMap); // List<String> serverList = getServerAlias(serverMap); // // Server列表,以位置的形式 logger.info("--->共计宿主机数:" + hostServerList.size() + ",虚拟机数:" + ecsCount); /** * logger.info("--->保存已使用物理机信息..."); Map serverMap2 = OneCmdbUitl.findCiByText("Server"); // * Alias-DisplayName Map serverPortMap = OneCmdbUitl.findServerPortCi("ServerPort", "Location", "Hardware"); * Iterator iterator = (Iterator) serverPortMap.keySet().iterator(); String key = ""; ServerBean serverInfo * = null; hostServerList = new ArrayList<HostServer>(); while (iterator.hasNext()) { key = (String) * iterator.next(); serverInfo = (ServerBean) serverPortMap.get(key); serverInfo.setDisplayName((String) * serverMap2.get(serverInfo.getHardware())); * * hostServer = saveHostServer(hostServerList, serverInfo, 2); * * // 更新IP池关联的HostServer if (hostServer != null) { // * logger.info("--->HostServer.hostIp:"+serverInfo.getHostIp()); IpPool ipPool = * ipPoolManager.findIpPoolByIpAddress(serverInfo.getHostIp()); ipPool.setHostServer(hostServer); * ipPoolManager.saveIpPool(ipPool); } } updateHostServer(hostServerList, serverMap); * logger.info("--->共计Server数:" + hostServerList.size()); **/ logger.info("--->基础数据导入处理成功!耗时:" + (System.currentTimeMillis() - start) / 1000 + "s"); return true; } catch (Exception e) { e.printStackTrace(); logger.error("--->基础数据导入处理失败:" + e.getMessage()); return false; } } /** * 保存宿主机/物理机信息 * * @param hostServerList * @param serverInfo * @return */ @Transactional(readOnly = false) private HostServer saveHostServer(List<HostServer> hostServerList, ServerBean serverInfo, int serverType) { HostServer hostServer = comm.hostServerService.findByDisplayName(serverInfo.getDisplayName()); if (hostServer == null) { hostServer = new HostServer(serverType, IpPoolConstant.PoolType.私网IP池.toInteger(), serverInfo.getDisplayName(), new Date()); // IP池默认为私网IP池 hostServer.setAlias(Identities.uuid2()); hostServer.setIpAddress(serverInfo.getHostIp()); hostServer.setLocationAlias(comm.locationService.getLocation(2).getAlias()); // IDC别名默认西安IDC hostServer = comm.hostServerService.saveOrUpdate(hostServer); hostServerList.add(hostServer); } else { logger.info("已存在的宿主机:" + serverInfo.getDisplayName()); } return hostServer; } /** * 更新宿主机在OneCMDB中的别名 * * @param hostServerList */ @Transactional(readOnly = false) private void updateHostServer(List<HostServer> hostServerList, Map map) { for (HostServer hostServer : hostServerList) { hostServer.setAlias((String) map.get(hostServer.getDisplayName())); comm.hostServerService.saveOrUpdate(hostServer); } } /** * 从OneCMDB读取Server数据List */ @SuppressWarnings({ "unchecked", "rawtypes" }) private List<String> getServerAlias(Map map) { List<String> serverList = new ArrayList<String>(); Set<String> key = map.keySet(); for (Iterator it = key.iterator(); it.hasNext();) { serverList.add((String) map.get(it.next())); } return serverList; } }