管道基础大数据平台系统开发-【后端】-Server
1
13693261870
2023-02-14 053c1e22ff6ea2ad9cfb91f5c88f1f866ce27ae3
1
已修改3个文件
164 ■■■■ 文件已修改
data/db_fn.sql 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
data/db_tab.sql 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
data/update.sql 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
data/db_fn.sql
@@ -18,7 +18,7 @@
select new_guid();
----------------------------------------------------------------------------------------------------- 02.递归查询函数
-- drop function rec_query_dep(id integer, tab varchar);
-- drop function rec_query_dep(integer, varchar);
create or replace function fn_rec_query(id integer, tab varchar)
returns varchar as $$
  declare
@@ -46,7 +46,45 @@
$$ language plpgsql;
select fn_rec_query(1, 'dep'); select fn_rec_query(null, 'dep'); select fn_rec_query(10, 'dir');
----------------------------------------------------------------------------------------------------- 03.查询用户名
----------------------------------------------------------------------------------------------------- 03.递归查询完整名
-- drop function fn_get_fullname(varchar, integer);
create or replace function fn_get_fullname(code varchar, genre integer)
returns varchar as $$
      declare
        rec varchar := '';
        str varchar := '';
        tab varchar := 'dep';
      begin
          if (code is null or genre is null) then
              return '';
        end if;
        if genre = 2 then
            tab := 'dir';
        end if;
        for rec in execute 'with recursive rs as (' ||
            'select code, pid, name from lf.sys_' || tab || ' where code = ''' || code || ''' ' ||
            'union select a.code, a.pid, a.name from lf.sys_' || tab || ' a, rs b where a.id = b.pid' ||
            ') select name from rs order by code'
        loop
              str = str || '\' || rec;
        end loop;
        if (char_length(str) > 1) then
              str = substring(str, 2);
        end if;
        return str;
      end;
$$ language plpgsql;
select fn_rec_query(55, 'dep');        select fn_rec_query(90, 'dir');
select fn_get_fullname('00030701', 1); select fn_get_fullname('01000000020000', 2);
/*with recursive rs as (
    select code, pid, name from lf.sys_dep where code = '00030701'
    union select a.code, a.pid, a.name from lf.sys_dep a, rs b where a.id = b.pid
) select name from rs order by code;*/
----------------------------------------------------------------------------------------------------- 04.查询用户名
-- execute format('select uname from lf.sys_user where id = %s', id) into str;
-- drop function fn_uname(id integer);
create or replace function fn_uname(id integer)
@@ -65,7 +103,7 @@
$$ language plpgsql;
select fn_uname(null); select fn_uname(1);
----------------------------------------------------------------------------------------------------- 04.查询版本名
----------------------------------------------------------------------------------------------------- 05.查询版本名
-- drop function fn_ver(id integer);
create or replace function fn_ver(id integer)
returns varchar as $$
@@ -83,7 +121,7 @@
$$ language plpgsql;
select fn_ver(0);
----------------------------------------------------------------------------------------------------- 05.递归查询ID数组
----------------------------------------------------------------------------------------------------- 06.递归查询ID数组
-- drop function fn_rec_array(id integer, tab varchar);
create or replace function fn_rec_array(id integer, tab varchar)
returns integer[] as $$
@@ -105,46 +143,7 @@
select fn_rec_array(1, 'dep'); select fn_rec_array(10, 'dir');
select * from lf.sys_user a where a.depid = ANY(fn_rec_array(15,'dep'));
----------------------------------------------------------------------------------------------------- 06.查询目录ID数组
-- drop function fn_dir_arrs(pids varchar);
create or replace function fn_dir_arrs(pids varchar) returns integer[] as $$
    declare
        ids integer[];
        sid integer;
      begin
        for sid in execute
              'with recursive rs as(select id, pid from lf.sys_dir where id in (' || pids || ') ' ||
              'union select a.id,a.pid from lf.sys_dir a, rs b where a.pid = b.id) ' ||
            'select distinct id from rs order by id'
        loop
              select array_append(ids, sid) into ids;
        end loop;
        return ids;
      end;
$$ language plpgsql;
select fn_dir_arrs('2,5,7,9,12');
select * from lf.sys_meta where dirid = ANY(fn_dir_arrs('2,5,7,9,12'));
----------------------------------------------------------------------------------------------------- 07.获取实体名
/*create or replace function fn_get_entity(tab varchar)
returns varchar as $$
  declare
    str varchar;
    rs varchar = '';
  begin
    foreach str in array (select string_to_array(tab, '_')) loop
      if (length(rs) = 0 or length(str) = 1) then
        rs = rs || str;
      else
        rs = rs || initcap(str);
      end if;
    end loop;
    return rs;
  end;
$$ language plpgsql;*/
create or replace function fn_get_entity(tab varchar)
returns varchar as $$
  declare
@@ -436,4 +435,45 @@
select ST_astext(ST_Union(geom)) as route from pgr_fromAtoB('lrdl'::text, 116.78999, 39.9468, 116.80458, 39.94758);
select st_astext(geom) route from pgr_fromAtoB('lrdl', 116.78999, 39.9468, 116.80458, 39.94758);
-----------------------------------------------------------------------------------------------------
/******************************************************************************** 以下为废弃函数 ********************************************************************************/
----------------------------------------------------------------------------------------------------- a.查询目录ID数组 *
-- drop function fn_dir_arrs(pids varchar);
create or replace function fn_dir_arrs(pids varchar) returns integer[] as $$
    declare
        ids integer[];
        sid integer;
      begin
        for sid in execute
              'with recursive rs as(select id, pid from lf.sys_dir where id in (' || pids || ') ' ||
              'union select a.id,a.pid from lf.sys_dir a, rs b where a.pid = b.id) ' ||
            'select distinct id from rs order by id'
        loop
              select array_append(ids, sid) into ids;
        end loop;
        return ids;
      end;
$$ language plpgsql;
select fn_dir_arrs('2,5,7,9,12');
select * from lf.sys_meta where dirid = ANY(fn_dir_arrs('2,5,7,9,12'));
----------------------------------------------------------------------------------------------------- b.获取实体名称
-- drop function fn_get_entity(varchar);
create or replace function fn_get_entity(tab varchar)
returns varchar as $$
  declare
    str varchar;
    rs varchar = '';
  begin
    foreach str in array (select string_to_array(tab, '_')) loop
      if (length(rs) = 0 or length(str) = 1) then
        rs = rs || str;
      else
        rs = rs || initcap(str);
      end if;
    end loop;
    return rs;
  end;
$$ language plpgsql;
-----------------------------------------------------------------------------------------------------
data/db_tab.sql
@@ -554,6 +554,8 @@
  metaid integer default 0,
  dirid integer default 0,
  depid integer default 0,
  depcode varchar(24) default '00',
  dircode varchar(24) default '00',
  verid integer default 0,
  name varchar(256),
  type varchar(100),
@@ -578,6 +580,8 @@
comment on column lf.sys_meta.metaid is '父元数据ID:0-没有';
comment on column lf.sys_meta.dirid is '目录ID';
comment on column lf.sys_meta.depid is '单位ID';
comment on column lf.sys_meta.depcode is '目录编码';
comment on column lf.sys_meta.dircode is '单位编码';
comment on column lf.sys_meta.verid is '版本ID';
comment on column lf.sys_meta.name is '名称';
comment on column lf.sys_meta.type is '类型:file-文件,shp-ShapeFile,gdb-GDB,zip-压缩包';
data/update.sql
@@ -98,7 +98,7 @@
select fn_rec_query(a.dirid,'dir'),a.* from lf.sys_meta_new a where dirid = ANY(fn_rec_array((select id from rs), 'dir'));
select * from lf.sys_meta where substr(path,1,2) = '2\';
--------------------------------------------------------- 01
--------------------------------------------------------- 01 lf.sys_dep
-- alter sequence lf.sys_meta_id_seq restart with 1;
update lf.sys_operate set modular2='源数据管理' where modular2='元数据';
@@ -110,7 +110,7 @@
alter table lf.sys_dep alter column code type varchar(24);
select id,pid,name,code,level,order_num from lf.sys_dep where code is not null order by code;
--------------------------------------------------------- 02
--------------------------------------------------------- 02 lf.sys_dir
select * from lf.sys_dir  order by id;
alter table lf.sys_dir alter column code type varchar(200);
@@ -125,14 +125,38 @@
comment on column lf.sys_dir.checks is '检查项';
select id,pid,name,code,level,order_num from lf.sys_dir where code is not null order by code;
--------------------------------------------------------- 03
--------------------------------------------------------- 03 lf.sys_user
alter table lf.sys_user add column depcode varchar(24);
comment on column lf.sys_user.depcode is '单位编码';
update lf.sys_user a set depcode = (select code from lf.sys_dep b where b.id = a.depid);
select * from lf.sys_user order by id;
--------------------------------------------------------- 04 lf.sys_meta
alter table lf.sys_meta add column depcode varchar(24) default '00';
alter table lf.sys_meta add column dircode varchar(24) default '00';
comment on column lf.sys_meta.depcode is '目录编码';
comment on column lf.sys_meta.dircode is '单位编码';
update lf.sys_meta a set depcode = (select code from lf.sys_dep b where b.id = a.depid);
update lf.sys_meta a set dircode = (select code from lf.sys_dir b where b.id = a.dirid);
alter table lf.sys_meta drop column depid;
alter table lf.sys_meta drop column dirid;
select id,name,depcode,dircode,type from lf.sys_meta order by id;
--------------------------------------------------------- 
select * from lf.sys_meta;