From 06492d128df5d7d0905539dd04faa9d475e9de59 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期一, 13 二月 2023 15:12:59 +0800
Subject: [PATCH] 1

---
 data/db_fn.sql |  147 ++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 121 insertions(+), 26 deletions(-)

diff --git a/data/db_fn.sql b/data/db_fn.sql
index afd9235..1aa9547 100644
--- a/data/db_fn.sql
+++ b/data/db_fn.sql
@@ -158,23 +158,7 @@
 $$ language plpgsql;
 
 select fn_get_entity('dlg_25w_boua_s');
------------------------------------------------------------------------------------------------------ 08.FME鏃ュ織瑙﹀彂鍣�
-create or replace function fn_meta_insert() returns trigger as $$
-  begin
-    update lf.sys_meta set tab = new.pg_ns || '.' || new.tcdm, layer = new.tcmc, rows = new.count where eventid = new.parentid;
-	
-	return new;
-  end;
-$$ language plpgsql;
-
-create or replace trigger fme_log_trigger after insert on lf.sys_fme_log
-for each row execute procedure fn_meta_insert();
-
-select * from lf.sys_meta;
-/*insert into lf.sys_fme_log (parentid,dirpath,pg_ns,tcmc,tcdm,count) values
-  ('8fb3c3dd-6a12-488d-80ae-a93cc7e8b2e3','','bs','涓嚎鎴愭灉琛�','m_pipelinepoint',0);
-select * from bs.m_pipelinepoint where parentid='8fb3c3dd-6a12-488d-80ae-a93cc7e8b2e3';*/
------------------------------------------------------------------------------------------------------ 09.鏌ヨ瀛楀吀琛ㄥ苟缁熻璁板綍
+----------------------------------------------------------------------------------------------------- 08.鏌ヨ瀛楀吀琛ㄥ苟缁熻璁板綍
 -- drop function fn_tab_count(varchar, varchar, varchar, integer); 
 create or replace function fn_tab_count(ns varchar, tab varchar, dirs varchar, depid integer)
 returns integer as $$
@@ -208,9 +192,9 @@
 select fn_rec_array(1, 'dep')
 select count(*) from lf.sys_meta where depid = ANY(fn_rec_array(1, 'dep'));
 select count(*) from bd.dlg_25w_lrdl where depid = ANY(fn_rec_array(1, 'dep'));
------------------------------------------------------------------------------------------------------ 10.10杩涘埗杞�62杩涘埗
--- drop function fn_10to62(numeric); 
-create or replace function fn_10to62(num numeric(30, 0))
+----------------------------------------------------------------------------------------------------- 09.10杩涘埗杞�62杩涘埗
+-- drop function fn_10_to_62(numeric);
+create or replace function fn_10_to_62(num numeric(30, 0))
 returns varchar as $$
 	declare
 		rs varchar;
@@ -230,10 +214,10 @@
 	end;
 $$ language plpgsql;
 
-select fn_10to62(3843); select fn_10to62(0); select fn_10to62(3844);
------------------------------------------------------------------------------------------------------ 11.62杩涘埗杞�10杩涘埗
--- drop function fn_62to10(numeric); 
-create or replace function fn_62to10(ch varchar)
+select fn_10_to_62(3843); select fn_10_to_62(0); select fn_10_to_62(3844);
+----------------------------------------------------------------------------------------------------- 10.62杩涘埗杞�10杩涘埗
+-- drop function fn_62_to_10(varchar); 
+create or replace function fn_62_to_10(ch varchar)
 returns numeric as $$
 	declare
 		rs numeric(30, 0);
@@ -249,8 +233,119 @@
 	end;
 $$ language plpgsql;
 
-select fn_62to10('zz'); select fn_62to10('0'); select fn_62to10('100');
------------------------------------------------------------------------------------------------------ 12.璺緞鍒嗘瀽
+select fn_62_to_10('zz'); select fn_62_to_10('0'); select fn_62_to_10('100');
+----------------------------------------------------------------------------------------------------- 11.鑾峰彇涓嬩竴涓紪鐮�
+-- drop function fn_get_next_code(integer, integer); 
+create or replace function fn_get_next_code(pid integer, genre integer)
+returns varchar as $$
+	declare
+	    cc    integer;
+		code  varchar;
+		pcode varchar;
+		tab   varchar := 'dep';
+	begin
+		if (pid is null or genre is null) then
+          	return '00';
+	    end if;
+		if genre = 2 then
+			tab := 'dir';
+		end if;
+		
+		execute 'select code from lf.sys_' || tab || ' where id = ' || pid into pcode;
+		if pcode is null then
+			pcode := '';
+		end if;
+		
+		for ii in 0..3843 loop
+			code := fn_10_to_62(ii);
+			if length(code) = 1 then
+				code := '0' || code;
+			end if;
+		
+			execute 'select count(*) from lf.sys_' || tab || ' where pid = ' || pid || ' and code = ''' || pcode || code || '''' into cc;
+			if cc = 0 then
+				return pcode || code;
+			end if;
+		end loop;
+		
+		return pcode || '00';
+	end;
+$$ language plpgsql;
+
+select fn_get_next_code(0, 1); select fn_get_next_code(0, 2);
+----------------------------------------------------------------------------------------------------- 12.璁剧疆琛ㄧ殑缂栫爜锛�1-鍗曚綅锛�2-鐩綍
+-- drop function fn_set_tab_codes(integer, integer); 
+create or replace function fn_set_tab_codes(pid integer, genre integer)
+returns integer as $$
+	declare
+		cc    integer;
+		rid   integer;
+		code  varchar;
+		tab   varchar := 'dep';
+	begin
+		if (pid is null or genre is null) then
+          	return 0;
+	    end if;
+		if genre = 2 then
+			tab := 'dir';
+		end if;
+		
+		execute 'select count(*) from lf.sys_' || tab || ' where pid = ' || pid into cc;
+		if cc = 0 then
+			return 0;
+		end if;
+		
+		for rid in execute 'select id from lf.sys_' || tab || ' where code is null and pid = ' || pid || ' order by order_num' loop
+			code := fn_get_next_code(pid, genre);
+			execute 'update lf.sys_' || tab || ' set code = ''' || code || ''' where id = ' || rid;
+			
+			cc := fn_set_tab_codes(rid, genre);
+		end loop;
+		
+		return 1;
+	end;
+$$ language plpgsql;
+
+select fn_set_tab_codes(1, 1); select fn_set_tab_codes(0, 2);
+----------------------------------------------------------------------------------------------------- 13.FME鏃ュ織琛ㄨЕ鍙戝櫒
+-- drop function fn_meta_insert();
+create or replace function fn_meta_insert() returns trigger as $$
+  begin
+    update lf.sys_meta set tab = new.pg_ns || '.' || new.tcdm, layer = new.tcmc, rows = new.count where eventid = new.parentid;
+	
+	return new;
+  end;
+$$ language plpgsql;
+
+-- drop trigger fme_log_trigger on lf.sys_fme_log;
+create or replace trigger fn_fme_log_trigger after insert on lf.sys_fme_log
+for each row execute procedure fn_meta_insert();
+
+select * from lf.sys_meta;
+/*insert into lf.sys_fme_log (parentid,dirpath,pg_ns,tcmc,tcdm,count) values
+  ('8fb3c3dd-6a12-488d-80ae-a93cc7e8b2e3','','bs','涓嚎鎴愭灉琛�','m_pipelinepoint',0);
+select * from bs.m_pipelinepoint where parentid='8fb3c3dd-6a12-488d-80ae-a93cc7e8b2e3';*/
+----------------------------------------------------------------------------------------------------- 14.鍗曚綅琛ㄨЕ鍙戝櫒
+-- drop function fn_dep_insert();
+create or replace function fn_dep_insert() returns trigger as $$
+  begin
+	update lf.sys_dep set code = fn_get_next_code(new.pid, 1) where id = new.id;
+	
+	return new;
+  end;
+$$ language plpgsql;
+
+-- drop trigger fn_dep_trigger on lf.sys_dep;
+create or replace trigger fn_dep_trigger after insert on lf.sys_dep
+for each row execute procedure fn_dep_insert();
+
+select * from lf.sys_dep where pid = 0 order by id;
+/*insert into lf.sys_dep (pid,name,level,order_num) values (0,'鏂板崟浣�',1,2);
+delete from lf.sys_dep where pid = 0 and id > 1;*/
+----------------------------------------------------------------------------------------------------- 15.鐩綍琛ㄨЕ鍙戝櫒
+
+
+----------------------------------------------------------------------------------------------------- 16.璺緞鍒嗘瀽
 -- 鍒犻櫎宸插瓨鍦ㄧ殑鍑芥暟
 drop function pgr_fromAtoB(varchar, double precision, double precision, double precision, double precision);
 

--
Gitblit v1.9.3