您的位置:首页 > 其它

树结构获取数据问题

2015-03-27 15:13 260 查看
系统结构如图:



功能要求:

1.统计单位面积用电量

2.统计人均用电量

建筑表结构(region)

RegionIdNameParentId
电表结构(device)

DeviceIdNameParentIdRegionId
关于建筑的面积和人数的设定问题:

开始时候想如果建筑节点没有子节点则提示用户录入面积和人数,如果有子节点则不允许录入面积和人数,该节点的面积和人数通过其子节点的数据汇总。这样存在一个问题是用户在添加一个节点的时候需要指定该节点是否有子节点,这一点很不方便,同时如果子节点修改一个数据则其所有上级节点都要Update,还有就是父节点的面积和人数数据无法修改。

于是做成每个节点都要求用户录入面积和人数数据。数据的准确性未作校验(可能会出现父节点的面积比子节点的面积总和小的情况,这个需要用户在录入数据的时候注意)。

页面前端采用easyui的combotree设计。提示用户勾选需要统计的区域。

例如勾选了2楼和401房间,则统计的区域和电表应该如下



之前在combotree中勾选后是直接将所有勾选的区域节点传到后台处理

应该这样处理:

1.获取区域面积和人数

从前台传入勾选的最上级区域节点,这里通过遍历所有勾选的节点实现。

function getCheckedNodes() {
var regionTree = $('#regionComboTree').combotree('tree');//combotree是继承自tree,这里先取到tree
var checkedRegionNodes = regionTree.tree('getChecked');  //获取选中的所有节点
var nodes = [];//用于保存提交节点的数组
$.each(checkedRegionNodes, function (i, val) {
         if(!parentNode.checked){
var parentNode = regionTree.tree('getParent', val.target);
if (parentNode != null && parentNode != undefined) {
var exist = false;
$.each(nodes, function (j, val1) {
if (val1.id == parentNode.id) { exist = true; return false; }
});
if (!exist) {
nodes.push(val);
}
            }
}
          else{
              nodes.push(val);
            }
});
//$.each(nodes, function (i,val) {alert(val.text) });
}


2.获取电表读数

a.先获取传入区域下所有电表

select * from Device where RegionId in (@Regions)--@Regions是处理过的前台传入的区域队列


b.选择那些ParentId不在集合里的电表

select * from 集合 where ParentId not in 集合


结合两点可以这样写

width td as
(
select DeviceId from Device where RegionId in (@Regions)
)
select * from td where ParentId not in td


然后与数据表关联查询出用电量,再做后续处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: