功能大体需求是通过平台获取该平台的所有节点(节点按省,运营商分组)以及节点的所有IP信息(地址和层级),表关系比较复杂,搞了两天才好,是自己一开始搞复杂了。
VO:存放所需元素实体类
public class PlatformIpVO implements Serializable {private String province;private String ISP;private List<PlatformMachineIp> platformMachineIps;private String platformNodes;getters and setters...
}
Service:
/**据平台查询区域数据,省,isp,ip等 */
public List<PlatformIpVO> getIpsAreaByPlatform(String platform);
@Override
public List<PlatformIpVO> getIpsAreaByPlatform(String pl_name_en) {pl_name_en = StringUtils.trimToEmpty(pl_name_en);if(pl_name_en.equals("")){return null;}List<PlatformIpVO> tempPlatformIpVOs = new ArrayList<PlatformIpVO>();List<PlatformIpVO> platformIpVOs = new ArrayList<PlatformIpVO>();PlatformInfo platformInfo = this.platformInfoMapper.findPlatformByEname(pl_name_en);//根据英文名获取平台idtempPlatformIpVOs = this.platformInfoMapper.getNodesByPlatform(platformInfo.getPlId());for(PlatformIpVO platformIpVO : tempPlatformIpVOs){//重新封装vo,添加ip信息platformIpVO = wrapPlatformIpVO(platformIpVO);platformIpVOs.add(platformIpVO);}return platformIpVOs;
}
Method:
/**重新封装platformIpVO,给PlatformMachineIps赋值*/
PlatformIpVO wrapPlatformIpVO(PlatformIpVO platformIpVO){String ispShortname = this.platformInfoMapper.getIspShortnameByid(platformIpVO.getISP());platformIpVO.setISP(ispShortname);String[] platformNodes = platformIpVO.getPlatformNodes().split(",");List<PlatformMachineIp> platformMachineIps = this.platformMachineMapper.getMachineIpsByNodes(platformNodes);platformIpVO.setPlatformMachineIps(platformMachineIps);return platformIpVO;
}
Mapper.java:
/** 根据平台id获取节点*/
List<PlatformIpVO> getNodesByPlatform(@Param("pl_id") Integer pl_id);/** 通过isp的id获取shortname */
String getIspShortnameByid(@Param("isp") String isp);
Mapper.xml:
<!-- 通过平台id获取平台节点vo对象,不包含ip fangguitang@dnion.com-->
<select id="getNodesByPlatform" resultType="PlatformIpVO">SELECT pn.province AS province,pn.nd_isp AS ISP,GROUP_CONCAT(pn.nd_id) AS platformNodesFROM platform_info pi LEFT JOIN platform_node_relation pnr ON pnr.pl_id = pi.pl_idLEFT JOIN platform_node pn ON pn.nd_id = pnr.nd_idWHERE pi.pl_id = #{pl_id}GROUP BY pn.province,pn.nd_isp
</select>
<!-- 通过isp的id获取shortname -->
<select id="getIspShortnameByid" resultType="STRING">SELECT si.shortnameFROM system_isp siWHERE si.id = #{isp}
</select>
Test:测试类:
//通过平台获取节点信息,ip信息
@Test
@Rollback
public void testGetIpsAreaByPlatform(){String platform = "XNOP060";try {ipPlatformService.getIpsAreaByPlatform(platform);} catch (Exception e) {e.printStackTrace();}
}