函数
--获取年月日 2022-03-01
select date(to_timestamp(round(1646103144959/1000)) + interval '1 hour' * 8 )
--获取当前年份
thisyear:=(select to_char(to_timestamp(floor(EXTRACT(epoch FROM (now()::timestamp with time zone)))),'yyyy')::integer);
--备注说明【获取工人今年总工作日(天)】--用户【CYL】--时间【2022-3-3】
CREATE OR REPLACE FUNCTION public.fx_get_worker_this_year_data
(
workerid integer --工人ID
)
RETURNS integer
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
AS $BODY$
declare returnvalue integer;
declare thisyear integer;
begin
thisyear:=(select to_char(to_timestamp(floor(EXTRACT(epoch FROM (now()::timestamp with time zone)))),'yyyy')::integer);
select count(distinct(date(to_timestamp(round(t_reimbursement_worker_info.add_time/1000)) + interval '1 hour' * 8 ))) into returnvalue
from t_reimbursement_worker_info
left join t_reimbursement_info on t_reimbursement_worker_info.reimbursement_id=t_reimbursement_info.reimbursement_id
where examine_state=2 and t_reimbursement_worker_info.worker_id=workerid and fx_get_year_by_timestamp(t_reimbursement_worker_info.add_time)=thisyear;
return returnvalue;
end;
$BODY$;
--备注说明【获取工人今年总住宿时间(天)】--用户【CYL】--时间【2022-3-3】
CREATE OR REPLACE FUNCTION public.fx_get_worker_accommodation_this_year_data
(
workerid integer --工人ID
)
RETURNS integer
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
AS $BODY$
declare returnvalue integer;
declare thisyear integer;
begin
thisyear:=(select to_char(to_timestamp(floor(EXTRACT(epoch FROM (now()::timestamp with time zone)))),'yyyy')::integer);
select sum(accommodation_num) into returnvalue from t_worker_accommodation_subsidy_record_info where fx_get_year_by_timestamp(add_time)=thisyear and worker_id=workerid;
return returnvalue;
end;
$BODY$;
--备注说明【获取工人今年住宿总补助额】--用户【CYL】--时间【2022-3-3】
CREATE OR REPLACE FUNCTION public.fx_get_worker_accommodation_money_this_year_data
(
workerid integer --工人ID
)
RETURNS numeric(18,2)
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
AS $BODY$
declare returnvalue integer;
declare thisyear integer;
begin
thisyear:=(select to_char(to_timestamp(floor(EXTRACT(epoch FROM (now()::timestamp with time zone)))),'yyyy')::integer);
select sum(accommodation_num * subsidy_amount) into returnvalue from t_worker_accommodation_subsidy_record_info where fx_get_year_by_timestamp(add_time)=thisyear and worker_id=workerid;
return returnvalue;
end;
$BODY$;
存储过程
--备注说明【工人列表】--用户【CYL】--时间【2022-3-3】
CREATE OR REPLACE PROCEDURE public.pr_worker_info_get_list_by_page(
startindex integer,
pagesize integer,
strwhere character varying,
strorder character varying,
INOUT workerinfocursor refcursor,
INOUT workerinfocountcursor refcursor)
LANGUAGE 'plpgsql'
AS $BODY$
declare exec_sql character varying;
declare exec_str_order character varying;
declare exec_recordcount_sql character varying;
begin
exec_str_order := ' t_worker_info.worker_id desc ';
if length(strorder)>0 then
exec_str_order := strorder;
end if;
exec_sql := ' select worker_id,head_img,nick_name,login_name,wage_amount,fx_get_worker_this_year_data(worker_id) as total_week_days,
fx_get_worker_accommodation_this_year_data(worker_id) as total_accommodation_days,
fx_get_worker_accommodation_money_this_year_data(worker_id) as total_accommodation_money_days
from t_worker_info ';
exec_recordcount_sql := ' select count(t_worker_info.worker_id) as record_count from t_worker_info ';
if length(strwhere)>0 then
exec_sql := format('%s where %s',exec_sql,strwhere);
exec_recordcount_sql := format(' %s where %s ',exec_recordcount_sql,strwhere);
end if;
exec_sql := format('%s order by %s limit %s offset %s ',exec_sql,exec_str_order,pagesize,startindex);
open workerinfocursor for execute exec_sql;
open workerinfocountcursor for execute exec_recordcount_sql;
end;
$BODY$;
--备注说明【新增工人信息】--用户【CYL】--时间【2022-3-3】
CREATE OR REPLACE PROCEDURE public.pr_worker_info_add(
loginname character varying,
headimg character varying,
nickname character varying,
wageamount numeric(18,2),
INOUT returnvalue integer)
LANGUAGE 'plpgsql'
AS $BODY$
declare stack text;
declare currenttime bigint;
begin
currenttime:=floor(EXTRACT(epoch FROM (now()::timestamp with time zone))*1000);
insert into t_worker_info(login_name,head_img,nick_name,add_time,wage_amount,is_show,is_del)
values(loginname,headimg,nickname,currenttime,wageamount,1,0);
returnvalue:=1;
exception
WHEN RAISE_EXCEPTION THEN
begin
GET STACKED DIAGNOSTICS stack = MESSAGE_TEXT;
RAISE NOTICE E'--- Call Stack ---\n%', stack ;
returnvalue = 0;
end;
end
$BODY$;
--备注说明【获取工人信息】--用户【CYL】--时间【2022-3-3】
CREATE OR REPLACE PROCEDURE public.pr_worker_info_get_model
(
workerid integer,
INOUT workerinfocursor refcursor
)
LANGUAGE 'plpgsql'
AS $BODY$
begin
open workerinfocursor for
select worker_id, login_name, head_img, nick_name, add_time, wage_amount, is_show, is_del
from t_worker_info where worker_id=workerid;
end
$BODY$;
--备注说明【编辑工人信息】--用户【CYL】--时间【2022-3-3】
CREATE OR REPLACE PROCEDURE public.pr_worker_info_edit(
workerid integer,
loginname character varying,
headimg character varying,
nickname character varying,
wageamount numeric,
isshow integer,
INOUT returnvalue integer)
LANGUAGE 'plpgsql'
AS $BODY$
declare stack text;
begin
update t_worker_info
set login_name=loginname,head_img=headimg,nick_name=nickname,wage_amount=wageamount,is_show=isshow
where worker_id=workerid;
returnvalue:=1;
exception
WHEN RAISE_EXCEPTION THEN
begin
GET STACKED DIAGNOSTICS stack = MESSAGE_TEXT;
RAISE NOTICE E'--- Call Stack ---\n%', stack ;
returnvalue = 0;
end;
end
$BODY$;
--备注说明【删除工人信息】--用户【CYL】--时间【2022-3-3】
CREATE OR REPLACE PROCEDURE public.pr_worker_info_del
(
workerid integer,
INOUT returnvalue integer
)
LANGUAGE 'plpgsql'
AS $BODY$
declare stack text;
begin
update t_worker_info set is_del=1 where worker_id=workerid;
returnvalue:=1;
exception
WHEN RAISE_EXCEPTION THEN
begin
GET STACKED DIAGNOSTICS stack = MESSAGE_TEXT;
RAISE NOTICE E'--- Call Stack ---\n%', stack ;
returnvalue = 0;
end;
end
$BODY$;