CREATE DEFINER=root
@%
PROCEDURE ffpfun_calculateincome_2309
(p_hid varchar(200) CHARSET utf8) RETURNS varchar(2000) CHARSET utf8 BEGIN
#定义一个变量用于计录户总人数 DECLARE d_zrs INTEGER DEFAULT 0; #定义一个变量用于计录户类型 DECLARE d_hlx VARCHAR(255); #定义一个错误的变量,类型是整形,默认是0 DECLARE t_error INTEGER DEFAULT 0; #捕获到sql的错误,就设置t_error为1 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
#开启事务 START TRANSACTION;
# 取此户的总人数...
select IFNULL(jtrks,1),hlx into d_zrs,d_hlx from pcs2309_householdcode where id=p_hid ;
# 为保证算人均时不出错,如果户总人口数小于1,则改为1
IF d_zrs<1 THEN
SET d_zrs=1;
END IF;
# 计算收入情况
# 1.计算D5,D6
update pcs2309_tph_srqk t set t.D5 = IFNULL(t.D5a,0)+IFNULL(t.D5b,0)+IFNULL(t.D5c,0)+IFNULL(t.D5d,0)+IFNULL(t.D5e,0),
t.D6 = IFNULL(t.D6a,0)+IFNULL(t.D6b,0)+IFNULL(t.D6c,0)+IFNULL(t.D6d,0)+IFNULL(t.D6e,0)
+IFNULL(t.D6f,0)+IFNULL(t.D6g,0)+IFNULL(t.D6h,0)+IFNULL(t.D6i,0)+IFNULL(t.D6j,0)
+IFNULL(t.D6k,0)+IFNULL(t.D6l,0)+IFNULL(t.D6m,0)+IFNULL(t.D6n,0)+IFNULL(t.D6o,0)+IFNULL(t.D6p,0)
where t.hid=p_hid and t.nf='202309';
# 2.计算各项收入和支出大项
update pcs2309_tph_srqk t set t.A=IFNULL(t.A1,0)+IFNULL(t.A2,0)+IFNULL(t.A3,0)+IFNULL(t.A4,0)+IFNULL(t.A5,0),
t.B=IFNULL(t.B1,0)+IFNULL(t.B2,0)+IFNULL(t.B3,0)+IFNULL(t.B4,0),
t.C=IFNULL(t.C1,0)+IFNULL(t.C2,0)+IFNULL(t.C3,0)+IFNULL(t.C4,0)+IFNULL(t.C5,0),
t.D=IFNULL(t.D1,0)+IFNULL(t.D2,0)+IFNULL(t.D3,0)+IFNULL(t.D4,0)+IFNULL(t.D5,0)+IFNULL(t.D6,0),
t.E=IFNULL(t.E1,0)+IFNULL(t.E2,0)+IFNULL(t.E3,0)+IFNULL(t.E4,0)
where t.hid=p_hid and t.nf='202309';
# 3.计算总计
update pcs2309_tph_srqk t set t.nzsr = IFNULL(t.A,0)+IFNULL(t.B,0)+IFNULL(t.C,0)+IFNULL(t.D,0),
t.ncsr = IFNULL(t.A,0)+IFNULL(t.B,0)+IFNULL(t.C,0)+IFNULL(t.D,0) - IFNULL(t.E,0),
t.rjcsr = (IFNULL(t.A,0)+IFNULL(t.B,0)+IFNULL(t.C,0)+IFNULL(t.D,0) - IFNULL(t.E,0)) /d_zrs
where t.hid=p_hid and t.nf='202309';
# 4.如果是监测户,计算纳入监测收入范围
IF d_hlx='100B02002' THEN
update pcs2309_tph_srqk t set t.zsrckfw = IFNULL(t.ncsr,0) + IFNULL(t.lpsr,0) - IFNULL(t.hgzfzc,0),
t.rjsrckfw = (IFNULL(t.ncsr,0) + IFNULL(t.lpsr,0) - IFNULL(t.hgzfzc,0)) /d_zrs
where t.hid=p_hid and t.nf='202309';
END IF;
#如果捕获到错误 IF t_error=1 THEN #回滚 ROLLBACK; ELSE #提交 COMMIT; END IF; END