后台各模块功能实现


一、网络设备

  1. 功能说明

      主要是添加交换机和路由器并生成相应的端口,用于与服务器或其他网络设备相连
  2. 类名和表名

      Board——zq_ho_board(交换机),Cabnetport——zq_ho_cabnetport(端口关联),Ports——zq_ho_port(端口)      
  3. 主页面路径

     /exchange/board/list
  4. 功能难点

    1.端口的生成   

    clipboard.png

     var arrList = new Array();
        function producePort(){
            var prefix=$("input[name='prefix']").val()//前缀
            var sult= $("select[name='sult']").val();//端口类型
            var start= $("input[name='start']").val();//端口起始
            var ends= $("input[name='ends']").val();//端口结束
            var speed= $("input[name='speed']").val();//端口速率
            var career= $("input[name='career']").val();//限制速率
           if(prefix=="" || sult =="" || start=="" || speed=="" ||career=="" || ends ==""){
             top.layer.alert('请填入参数!', {icon: 0, title:'警告'});
             return false;
            }
           var allcamres=prefix+"-"+sult+"-"+start+"-"+ends+"-"+speed+"-"+career;
           arrList.push(allcamres);//将参数放进数组
           var html ="";
           for(var i=0;i<=(ends-start);i++){
                  html+="<tr><td>"+prefix+(Number(start)+i)+"</td><td>${fns:getDictLabel( '1', 'line_type', '')}</td>";
               if(sult==0){
                  html+="<td> ${fns:getDictLabel('0', 'port_type', '')}</td>"; 
                 }
               if(sult==1){
                  html+="<td> ${fns:getDictLabel('1', 'port_type', '')}</td>"; 
                 }
                  html+="<td>"+speed+" </td><td>"+career+" </td></tr>";
             }
           $("#prottabal tbody").append(html);
     将给订的端口参数  arrList 取出并在保存交换机时保存端口信息。

2.交换机的统计
    sql语句部分
    SELECT      a.id as id,
             a.bo_arae as arae,
             substring_index(a.bo_machineroom,'/',1 ) as machineroom,
             substring_index(a.bo_machineroom,'/',2  )as storey,
             a.bo_machineroom as cabinetid,                                
             b.machnum as goodnum, <!--机房数量 -->
             c.lounum as louchen,<!--楼层数量 -->
             d.machnum as jifang,
             e.arenum as arenum,<!--区域数量 -->
             t.name AS modelnumber,<!--型号数量 -->                  
             f.modenum as num
  FROM zq_ho_board a 
  LEFT JOIN  zq_mhub_module_type t  on t.id=a.bo_modelnumber
<!-- 所有的 on 后的连接对象就应该和 GROUP BY 一致   -->  
  LEFT JOIN (SELECT b.bo_arae, b.bo_machineroom,COUNT(1) as machnum FROM zq_ho_board b  where  b.bo_camtype=#{camtype} GROUP BY b.bo_arae, b.bo_machineroom ) as b on  (b.bo_arae =a.bo_arae and  b.bo_machineroom =a.bo_machineroom) 
<!--截取字符串的函数 -->  
  LEFT JOIN (SELECT b.bo_arae, substring_index(b.bo_machineroom,'/',2 ) as louchen,COUNT(1) as lounum FROM zq_ho_board b  where  b.bo_camtype=#{camtype} GROUP BY b.bo_arae,louchen ) as c on (c.bo_arae =a.bo_arae  and  c.louchen =substring_index(a.bo_machineroom,'/',2 ))
  LEFT JOIN (SELECT b.bo_arae, substring_index(b.bo_machineroom,'/',1 ) as machineroom,COUNT(1) as machnum FROM zq_ho_board b where  b.bo_camtype=#{camtype}   GROUP BY b.bo_arae, machineroom ) as d on  (d.bo_arae =a.bo_arae  and  d.machineroom = substring_index(a.bo_machineroom,'/',1 )  )
  LEFT JOIN (SELECT b.bo_arae,COUNT(1) as arenum FROM zq_ho_board b  where  b.bo_camtype=#{camtype}   GROUP BY b.bo_arae ) as e on  e.bo_arae =a.bo_arae
  LEFT JOIN (SELECT b.bo_arae, b.bo_machineroom,b.bo_modelnumber,COUNT(1) as modenum FROM zq_ho_board b  where  b.bo_camtype=#{camtype} GROUP BY b.bo_arae,  b.bo_machineroom , b.bo_modelnumber ) as f on   ( f.bo_arae =a.bo_arae and  f.bo_modelnumber =a.bo_modelnumber and  f.bo_machineroom =a.bo_machineroom)
  <where>    a.del_flag = #{DEL_FLAG_NORMAL} AND a.bo_camtype= #{camtype}
         <if test="arae != null and arae != ''">
                AND a.bo_arae LIKE 
                    <if test="dbName == 'oracle'">'%'||#{arae}||'%'</if>
                    <if test="dbName == 'mssql'">'%'+#{arae}+'%'</if>
                    <if test="dbName == 'mysql'">concat('%',#{arae},'%')</if>
         </if>
         <if test="machineroom != null and machineroom != ''">
                AND a.bo_machineroom LIKE 
                    <if test="dbName == 'oracle'">'%'||#{machineroom}||'%'</if>
                    <if test="dbName == 'mssql'">'%'+#{machineroom}+'%'</if>
                    <if test="dbName == 'mysql'">concat('%',#{machineroom},'%')</if>
         </if>
      
  </where>
        
     
  GROUP BY  a.bo_arae, a.bo_machineroom ,substring_index(a.bo_machineroom,'/',2 ),substring_index(a.bo_machineroom,'/',1 ),a.bo_modelnumber
    

统计的合并单元格的设计思路

  计算出同一个区域下得数量,再分别计算出与该条记录相同的  机房,楼层,区域的各个数量以确定合并单元格的数量,并用数组中的唯一位置将数据存入。  
  代码如下
  
  public List<Board> findgoods(Board board) {
    // board.setPage(page);
    // page.setList(dao.findgoods(board));
    List<Board> lists = dao.findgoods(board);
    int i = 0;
    List<Board> tenpt = null;
    Board h = null;
    for (Board s : lists) {
        List<Board> list = new ArrayList<>();
        for (Board t : lists) {
            // 获得同一区域下的列
            if (t.getArae().equals(s.getArae())) {
                list.add(t);// 获得每个list
            }
        }

        List<Object> arry = new ArrayList<>();// 存储数量
        // 计算每个区域的数量
        Integer arae = 0, rooms = 0, torey = 0, distr = 0, tMode = 0;
        for (Board r : list) {
            if (r.getArae().equals(s.getArae())) { // 地区域
                arae++;
            }
            if (r.getArae().equals(s.getArae())
                    && r.getMachineroom().equals(s.getMachineroom())) {// 机房
                rooms++;
            }
            if (r.getArae().equals(s.getArae())
                    && r.getMachineroom().equals(s.getMachineroom())
                    && r.getStorey().equals(s.getStorey())) {// 楼层
                torey++;
            }
            if (r.getArae().equals(s.getArae())
                    && r.getMachineroom().equals(s.getMachineroom())
                    && r.getStorey().equals(s.getStorey())
                    && r.getCabinetid().equals(s.getCabinetid())) {// 区域
                distr++;
            }

        }
        if (h == null) {
            arry.add(0, arae);// 地区域
            arry.add(1, rooms);// 机房
            arry.add(2, torey); // 楼层
            arry.add(3, distr); // 区域

        } else {
            if (s.getArae().equals(h.getArae())) {
                // 合并标识如果为0就不会显示
                arry.add(0, 0);
            } else {
                arry.add(0, arae);
            }
            if (s.getArae().equals(h.getArae())
                    && s.getMachineroom().equals(h.getMachineroom())) {
                arry.add(1, 0);
            } else {
                arry.add(1, rooms);
            }
            if (s.getArae().equals(h.getArae())
                    && s.getMachineroom().equals(h.getMachineroom())
                    && s.getStorey().equals(h.getStorey())) {
                arry.add(2, 0);
            } else {
                arry.add(2, torey);
            }
            if (s.getArae().equals(h.getArae())
                    && s.getMachineroom().equals(h.getMachineroom())
                    && s.getStorey().equals(h.getStorey())
                    && s.getCabinetid().equals(h.getCabinetid())) {
                arry.add(3, 0);
            } else {
                arry.add(3, distr);
            }

        }
        // 得到每个对象的不重复的数量
        s.setPrames(arry.toArray());// 将list转换为数组
        h = s;
    }
    return lists;

}

meuser
1 声望0 粉丝