树排序的存储过程

easyui树的拖拽排序功能

easyui树中有拖拽功能

树结构如下:

一个行政区域对应一个单位,一个单位对应多个部门,每个部门下有相关人员,功能要求:

(1)行政区域没有子节点,点击text加载部门;(2)点击部门的text,如果有下级部门则加载部门,没有则加载人员;(3)树都有拖拽排序功能

1、前台页面:

<script type="text/javascript" src = "js/lib/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src = "js/lib/jquery.easyui.min.js"></script>
<div data-options="region:‘center‘">
     <ul id="orgs_tree" class="easyui-tree" ></ul>
</div>
var orgs_tree_default = {
            url : ‘servlet/SearchServlet?dispatch=0‘,
            animate : true,
            onClick:function(node){
                var url = "servlet/SearchServlet?dispatch=1";//默认加载地区的树
                var isDeptTree = false;
                var unit_id ;
                //根据行政区划获取单位列表
                $.getJSON(url,{regions_id:node.attributes.regions_id},function(data){
                    if(data.length > 1){

                    }else if(data.length == 0){

                    }else{
                    //点击部门树的text,加载树
                    $("#dept_tree").tree({
                         url:"servlet/SearchServlet?dispatch=2&unit_id=" + unit_id+"&id=0",  //默认加载部门的树
                         onBeforeExpand:function(node,param){
                            $("#dept_tree").tree("options").url="servlet/SearchServlet?dispatch=2&unit_id=" + unit_id+"&id="+node.id;
                          },
                          onSelect:function(node){    //当点击text的时候,展开子节点
                             $(this).tree("expand",node.target);
                          }
                        });
                    }
                });
            },
            onDrop:function(target, source, point){ //行政区域树的拖拽功能
                var node = $("#orgs_tree").tree("getNode",target); // 将DOM对象转换为node
                //组装参数
                var param = {
                        //目标节点属性
                        targetId : node.attributes.regions_id ,
                        targetSort : node.attributes.regions_sort ,

                        //源节点属性
                        sourceId : source.attributes.regions_id ,
                        sourceSort : source.attributes.regions_sort,

                        //操作方式3种,append:变更父节点,top:平级-上 bottom:平级-下
                        point : point};

                //更新数据库,这个后台需要用到存储过程
                var url = "servlet/ManagerServlet?dispatch=0";
                $.post(url,param,function(data){
                    alert("success");
                });
            }
};

2、java后台调用方法

public String dragRegionsSort(int target_id, int target_sort,
            int source_id, int source_sort,String operation) {
        String result = "排序成功";
        conn= this.getConnection();
        CallableStatement statement = conn.prepareCall("{call PRO_UPDATE_REGION_SORT(?,?,?,?,?)}");
        try {
            statement.setInt(1, target_id);
            statement.setInt(2, target_sort);
            statement.setInt(3, source_id);
            statement.setInt(4, source_sort);
            statement.setString(5, operation);
            statement.execute();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return result ;

    }

3、存储过程

create or replace procedure "PRO_UPDATE_REGION_SORT"
(
       target_id in number,--目标id
       target_sort in number,--目标排序号
       source_id in number,     --源id
       source_sort in number , --源排序号
       operation  in varchar2     --操作类型,之前还是之后
)as
 p_tid   number;
  p_sid  number ;
begin
  select regions_id into p_tid from tbl_regions t where t.regions_id = target_id;
  select regions_id into p_sid from tbl_regions t where t.regions_id = source_id;
  dbms_output.put_line(‘---目标id--‘||p_tid||‘---源id---‘||p_sid);
  if target_sort - source_sort = 1 then
      if operation = ‘top‘ then
        null;
      else
        update tbl_regions t set t.regions_sort = target_sort WHERE t.regions_id = source_id ;
        update tbl_regions t set t.regions_sort = source_sort WHERE t.regions_id = target_id ;
      end if ;
   elsif target_sort - source_sort = -1 then
      if operation = ‘top‘ then
        update tbl_regions t set t.regions_sort = target_sort WHERE t.regions_id = source_id ;
        update tbl_regions t set t.regions_sort = source_sort WHERE t.regions_id = target_id ;
      else
        null;
      end if;
    elsif target_sort - source_sort < -1 then
      if operation = ‘top‘ then
        update tbl_regions t set t.regions_sort = t.regions_sort + 1 where t.regions_sort >= target_sort and t.regions_sort < source_sort;
        update tbl_regions t set t.regions_sort = target_sort where t.regions_id = source_id ;
        dbms_output.put_line(‘---排序前目标sort--‘||target_sort||‘---源sort---‘||source_sort);
        dbms_output.put_line(‘---排序后目标sort--‘||target_sort||‘---源sort---‘||source_sort);
      else
        update tbl_regions t set t.regions_sort = t.regions_sort + 1 where t.regions_sort > target_sort and t.regions_sort < source_sort;
        update tbl_regions t set t.regions_sort = target_sort+1 where t.regions_id = source_id ;
      end if ;
    elsif target_sort - source_sort > 1 then
      if operation =  ‘top‘ then
        update tbl_regions t set t.regions_sort = t.regions_sort - 1 where t.regions_sort > source_sort and t.regions_sort < target_sort;
        update tbl_regions t set t.regions_sort = target_sort - 1 where t.regions_id = source_id ;
      else
        update tbl_regions t set t.regions_sort = t.regions_sort - 1 where t.regions_sort > source_sort and t.regions_sort <= target_sort;
        update tbl_regions t set t.regions_sort = target_sort where t.regions_id = source_id ;
      end if;
    end if;
end;
时间: 2024-10-27 13:47:34

树排序的存储过程的相关文章

二叉 查找树 排序树 搜索树

二叉查找树 _ 二叉排序树 _ 二叉搜索树_C++ 一.数据结构背景+代码变量介绍 二叉查找树,又名二叉排序树,亦名二叉搜索树 它满足以下定义: 1.任意节点的子树又是一颗二叉查找树,且左子树的每个节点均小于该节点,右子树的每个节点均大于该节点. 2.由1可推出,任意节点的左孩子小于该节点,右孩子大于该节点 以上讨论的是左(右)孩子(子树)存在的情况 它的中序遍历是一个升序的排序 在参考代码中,我们定义有: 主程序中,k代表插入或删除或查找的节点的值 root,根节点位置:a[i],第 i 号节

【BZOJ-4653】区间 线段树 + 排序 + 离散化

4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 107  Solved: 70[Submit][Status][Discuss] Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x,使得对于每一个被选中的区间 [li,ri],都有 li≤x≤ri. 对于一个合法的选

B树排序算法之Python版

1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 # added by kangye, dependent on python27 4 5 class BTree: 6 def __init__(self,value): 7 self.left=None 8 self.data=value 9 self.right=None 10 11 def insertLeft(self,value): 12 self.left=BTree(value) 13

SQL 单表分页存储过程和单表多字段排序和任意字段分页存储过程

  第一种:单表多字段排序分页存储过程       --支持单表多字段查询,多字段排序 create PROCEDURE [dbo].[UP_GetByPageFiledOrder] ( @TableName varchar(50), --表名 @ReFieldsStr varchar(200) = '*', --字段名(全部字段为*) @OrderString varchar(200), --排序字段(必须!支持多字段不用加order by) @WhereString varchar(500)

[codeforces1284D]New Year and Conference 离散化+multiset【或排序+线段树】

[题目]:题目链接 time limit per test 2 seconds memory limit per test 1024 megabytes input standard input output standard output Filled with optimism, Hyunuk will host a conference about how great this new year will be! The conference will have nn lectures.

排序算法总结----比较类排序

概述:排序算法可分为比较性的排序,以及运算性的排序:这里详细介绍这些排序的原理,性能,实现,以及应用场合. 前面是维基百科的介绍,这里介绍几个比较典型的算法. 理论 计算复杂性理论 大O符号 全序关系 列表 稳定性 比较排序 自适应排序 排序网络 整数排序 交换排序 冒泡排序 鸡尾酒排序 奇偶排序 梳排序 侏儒排序 快速排序 臭皮匠排序 Bogo排序 选择排序 选择排序 堆排序 Smooth排序 笛卡尔树排序 锦标赛排序 循环排序 插入排序 插入排序 希尔排序 二叉查找树排序 图书馆排序 Pat

【排序】基数排序(计数排序、桶排序)

在此对于桶排序做出两种方法: 一.简化版桶排序 代码如下: <span style="font-size:18px;">/*简化版的桶排序*/ #include <stdio.h> int main() { int book[1001],i,j,t,n; for(i=0;i<=1000;i++) { book[i]=0; } scanf("%d",&n);//输入一个数n,表示接下来有n个数 for(i=1;i<=n;i+

九大基础排序算法总结

九大基础排序算法小结 一直想做份总结,总是抽不出时间,趁着周末闲着直接用了一整天做一份,一些内容参考了网上的一些博主的总结,还有网络上的一些图片. 好了,接下来就看看内容吧! 排序算法: 排序方法 时间复杂度 空间复杂度 稳定性 选用情况 平均情况 最坏情况 最好情况 Insertion Sort O(n^2) O(n^2) O(n) O(1) 稳定 n较小时 Selection Sort O(n^2) O(n^2) O(n^2) O(1) 不稳定 n较小时 Bubble Sort O(n^2)

数据库中复杂的联查+筛选条件+排序+分页

数据库中复杂的联查+筛选条件+排序+分页一直是比较头疼的问题 为了模拟这个问题,首先建立两个表 create table t_userType ( id int identity(1,1) not null primary key, name varchar(50) ) GO create table t_user ( id int identity(1,1) not null primary key, t_userTypeId int not null, name varchar(50), f