后台各模块功能实现
一、网络设备
-
功能说明
主要是添加交换机和路由器并生成相应的端口,用于与服务器或其他网络设备相连
-
类名和表名
Board——zq_ho_board(交换机),Cabnetport——zq_ho_cabnetport(端口关联),Ports——zq_ho_port(端口)
-
主页面路径
/exchange/board/list
-
功能难点
1.端口的生成
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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。