39 lines
1.6 KiB
SQL
39 lines
1.6 KiB
SQL
create procedure penalty_over_inint(IN r_plan_id varchar(32), IN r_plan_date varchar(32))
|
|
BEGIN
|
|
DECLARE r_contract_id VARCHAR(32);
|
|
DECLARE r_penaty_rate DECIMAL(18,2);
|
|
DECLARE r_all_penalty DECIMAL(18,2);
|
|
DECLARE r_penalty_adjust_date INT;
|
|
DECLARE r_over_date INT;
|
|
-- SET r_penaty_rate=0.05;
|
|
-- SET r_penalty_adjust_date=7;
|
|
SELECT contract_id INTO r_contract_id FROM lc_rent_plan WHERE id=r_plan_id;
|
|
SELECT PENA_RATE,FREE_DEFA_INTER_DAY INTO r_penaty_rate,r_penalty_adjust_date FROM lc_calc_condition
|
|
WHERE contract_id=r_contract_id;
|
|
SELECT SUM(CASE WHEN difday>0 THEN a.fact_rent*r_penaty_rate*difday/10000 ELSE 0 END),MAX(difday) INTO r_all_penalty,r_over_date
|
|
FROM (
|
|
SELECT DATEDIFF(fi.hire_date,cp.plan_date) difday,fi.fact_rent FROM lc_rent_plan cp
|
|
LEFT OUTER JOIN
|
|
(SELECT plan_id,rent fact_rent, hire_date FROM
|
|
lc_rent_income
|
|
WHERE plan_id=r_plan_id
|
|
UNION
|
|
SELECT cp.id paln_id,cp.rent-nvl(ci.rent,0) fact_rent,r_plan_date hiredate FROM
|
|
lc_rent_plan cp
|
|
LEFT OUTER JOIN(
|
|
SELECT plan_id,SUM(rent) rent FROM lc_rent_income
|
|
WHERE plan_id=r_plan_id
|
|
)ci ON cp.id=ci.plan_id
|
|
WHERE id=r_plan_id
|
|
)fi
|
|
ON cp.id=fi.plan_id
|
|
WHERE cp.id=r_plan_id
|
|
)a;
|
|
IF r_over_date<=r_penalty_adjust_date THEN
|
|
SET r_all_penalty=0;
|
|
END IF;
|
|
UPDATE lc_rent_plan SET penalty=r_all_penalty,penalty_overage=r_all_penalty-fact_penalty-fact_penalty_adjust,over_date=r_over_date WHERE id=r_plan_id;
|
|
-- select r_all_penalty,r_plan_id;
|
|
END;
|
|
|