apzl_leasing/src_sql/procedure/proc_terminate_bill_income.sql

408 lines
12 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

DELIMITER $$
USE `apzl`$$
DROP PROCEDURE IF EXISTS `proc_terminate_bill_income`$$
CREATE DEFINER=`apzl`@`%` PROCEDURE `proc_terminate_bill_income`(
l_contract_id VARCHAR (200),
l_flowunid VARCHAR (200),
L_INPUTUSERID VARCHAR (200),
L_INPUTORGID VARCHAR (200)
)
BEGIN
DECLARE l_bill_money DOUBLE (22, 2) ;
-- 可核销金额
DECLARE l_adjust_type VARCHAR (32) ;
-- 提前结清类型
DECLARE l_payday_adjust VARCHAR (32) ;
-- 提前结清日
DECLARE l_handling_charge DOUBLE (22, 2) ; -- 违约手续费
DECLARE l_SDHANDLING_CHARGE DOUBLE(22,2); -- 商定违约金
DECLARE l_SDNOMINAL_PRICE DOUBLE(22,2); -- 商定留购价
DECLARE l_FIST_CORPUS DOUBLE (22, 2) ;-- 一年内剩余利息
DECLARE l_caution_money DOUBLE (22, 2) ;-- 客户保证金
DECLARE l_OTHER_IN DOUBLE (22, 2) ;-- 其他应收
DECLARE l_AGREED_DATEPENALTY DOUBLE (22, 2); -- 还款日差利息
-- 本方银行、账户、账号、流水号
DECLARE l_acc_number VARCHAR (32) ;
DECLARE l_acc_bank VARCHAR (32) ;
DECLARE l_acc_name VARCHAR (32) ;
DECLARE l_ebank_sn VARCHAR (32) ;
-- 对方本方银行、账户、账号
DECLARE l_client_bank VARCHAR (32) ;
DECLARE l_client_account VARCHAR (32) ;
DECLARE l_client_accnum VARCHAR (32) ;
DECLARE l_hire_date VARCHAR (32) ; -- 核销网银日期
-- 查询可核销的挂账金额
-- DECLARE done BOOLEAN DEFAULT FALSE;
-- DECLARE cur CURSOR FOR
SELECT
bill.fact_date,
bill.had_money,
bill.ownacc_number,
bill.own_bank,
bill.own_account,
-- bill.ebank_sn,
bill.id,
bill.client_bank,
bill.client_account,
bill.client_acc_number
INTO
l_hire_date,
l_bill_money,
l_acc_number,
l_acc_bank,
l_acc_name,
l_ebank_sn,
l_client_bank,
l_client_account,
l_client_accnum
FROM
(SELECT
lcebank.id,
-- le.ebank_number,
-- le.mayope_money,
-- le.contract_id,
-- le.payment_number,
MAX(le.fact_date) fact_date,
MAX(le.ownacc_number) ownacc_number,
MAX(le.own_bank) own_bank,
MAX(le.own_account) own_account,
-- le.client_name,
-- le.client_bank,
-- le.client_account,
-- le.client_acc_number,
SUM(le.had_money ) had_money,
MAX(le.ebank_sn) ebank_sn,
MAX(le.client_bank) client_bank,
MAX(le.client_account) client_account,
MAX(le.client_acc_number) client_acc_number
FROM
lc_ebank_temp le LEFT JOIN lc_ebank lcebank ON le.ebank_sn=lcebank.ebank_sn
WHERE le.flowunid = l_flowunid
AND NOT EXISTS
(SELECT
1
FROM
lc_occupy_rent_list lorl,
lc_calc_condition_status lccs
WHERE lorl.payment_number = lccs.payment_number
AND lccs.contract_id = le.contract_id)
) bill ;
-- DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=TRUE;
-- 提前结清是完整的核销,如果合同项下有租金被占用,则不核销
-- 获取提前结清信息
SELECT lfra.adjust_type,
lfra.payday_adjust,
lfra.SDHANDLING_CHARGE,
lfra.FIST_CORPUS,
lfra.OTHER_IN,
lfra.AGREED_DATEPENALTY,
lfra.OTHER_OUT,
lfra.SDNOMINAL_PRICE
INTO l_adjust_type,
l_payday_adjust,
l_SDHANDLING_CHARGE,
l_FIST_CORPUS,
l_OTHER_IN,
l_AGREED_DATEPENALTY,
l_caution_money,
l_SDNOMINAL_PRICE
FROM lc_fund_rent_adjust_temp lfra
WHERE lfra.flowunid=l_flowunid;
-- 如果有保证金指其他应退,在资金计划实收表核销保证金抵扣
IF (l_caution_money > 0) THEN
INSERT INTO lc_fund_income
(id,
project_id,
project_plan_number,
contract_id,
contract_plan_number,
payment_number,
plan_id,
fee_type,
plan_list,
settle_method,
charge_list,
pay_type,
fact_date,
fact_money,
fee_adjust,
EBANK_NUMBER,
bank,
account,
acc_number,
client_bank,
client_account,
client_accnumber,
pay_status,
ROLL_BACK,
INPUTUSERID,
INPUTORGID,
inputtime,
DEDUCTION_ID
)(
SELECT REPLACE(UUID(),'-',''),
lfi.project_id,
lfi.project_plan_number,
lfi.contract_id,
lfi.contract_plan_number,
lfi.payment_number,
lfi.id,
lfi.fee_type,
lfi.plan_list,
'settlemethod7',
'1',
'pay_type_out',
l_payday_adjust,
lfi.plan_money,
IFNULL(lfi.fee_adjust,0),
l_ebank_sn,
l_acc_bank,
l_acc_name,
l_acc_number,
l_client_bank,
l_client_account,
l_client_accnum,
'have_paid',
'0',
L_INPUTUSERID,
L_INPUTORGID,
REPLACE(CURDATE(),'-','/'),
''
FROM lc_fund_plan lfi
WHERE (lfi.fee_type='feetype16' OR lfi.fee_type='feetype17') AND lfi.contract_id=l_contract_id AND lfi.plan_list=1
) ;
-- COMMIT;
END IF;
-- 如果有其他应收,在资金计划表加入其他应收资金计划
IF l_OTHER_IN > 0 THEN
INSERT INTO lc_fund_income
(id,
project_id,
project_plan_number,
contract_id,
contract_plan_number,
payment_number,
plan_id,
fee_type,
plan_list,
settle_method,
charge_list,
pay_type,
fact_date,
fact_money,
fee_adjust,
EBANK_NUMBER,
bank,
account,
acc_number,
client_bank,
client_account,
client_accnumber,
pay_status,
ROLL_BACK,
INPUTUSERID,
INPUTORGID,
inputtime,
DEDUCTION_ID
)(
SELECT REPLACE(UUID(),'-',''),
lfi.project_id,
lfi.project_plan_number,
lfi.contract_id,
lfi.contract_plan_number,
lfi.payment_number,
lfi.id,
lfi.fee_type,
lfi.plan_list,
'settlemethod11',
'1',
'pay_type_in',
l_payday_adjust,
lfi.plan_money,
IFNULL(lfi.fee_adjust,0),
l_ebank_sn,
l_acc_bank,
l_acc_name,
l_acc_number,
l_client_bank,
l_client_account,
l_client_accnum,
'have_paid',
'0',
L_INPUTUSERID,
L_INPUTORGID,
REPLACE(CURDATE(),'-','/'),
''
FROM lc_fund_plan lfi
WHERE lfi.fee_type='feetype1' AND lfi.contract_id=l_contract_id AND lfi.plan_list=1
AND lfi.id NOT IN (SELECT plan_id FROM lc_fund_income)
) ;
-- COMMIT;
END IF;
-- 核销商定留购价
IF l_SDNOMINAL_PRICE > 0 THEN
INSERT INTO lc_fund_income
(id,
project_id,
project_plan_number,
contract_id,
contract_plan_number,
payment_number,
plan_id,
fee_type,
plan_list,
settle_method,
charge_list,
pay_type,
fact_date,
fact_money,
fee_adjust,
EBANK_NUMBER,
bank,
account,
acc_number,
client_bank,
client_account,
client_accnumber,
pay_status,
ROLL_BACK,
INPUTUSERID,
INPUTORGID,
inputtime,
DEDUCTION_ID
)(
SELECT REPLACE(UUID(),'-',''),
lfi.project_id,
lfi.project_plan_number,
lfi.contract_id,
lfi.contract_plan_number,
lfi.payment_number,
lfi.id,
lfi.fee_type,
lfi.plan_list,
'settlemethod11',
'1',
'pay_type_in',
l_payday_adjust,
l_SDNOMINAL_PRICE,
lfi.plan_money-l_SDNOMINAL_PRICE,
l_ebank_sn,
l_acc_bank,
l_acc_name,
l_acc_number,
l_client_bank,
l_client_account,
l_client_accnum,
'have_paid',
'0',
L_INPUTUSERID,
L_INPUTORGID,
REPLACE(CURDATE(),'-','/'),
''
FROM lc_fund_plan lfi
WHERE lfi.fee_type='feetype4' AND lfi.contract_id=l_contract_id AND lfi.plan_list=1
AND lfi.id NOT IN (SELECT plan_id FROM lc_fund_income)
) ;
-- COMMIT;
END IF;
-- 核销租金计划
INSERT INTO LC_RENT_INCOME (
ID,
QUOT_ID,
CUST_ID,
PROJECT_ID,
PROJECT_PLAN_NUMBER,
CONTRACT_ID,
CONTRACT_PLAN_NUMBER,
PAYMENT_NUMBER,
EBANK_NUMBER,
PLAN_ID,
PLAN_LIST,
INTEREST_ADJUST,
SETTLE_METHOD,
HIRE_LIST,
HIRE_DATE,
RENT,
CORPUS,
INTEREST,
PENALTY,
CORPUS_ADJUST,
PENALTY_ADJUST,
ROLL_BACK,
COIN,
hire_number,
hire_bank,
hire_account,
own_bank,
own_account,
own_number
)
(SELECT
REPLACE (UUID(), '-', '') AS id,
O.QUOT_ID AS QUOT_ID,
O.CUST_ID AS CUST_ID,
O.PROJECT_ID AS PROJECT_ID,
O.PROJECT_PLAN_NUMBER AS PROJECT_PLAN_NUMBER,
O.CONTRACT_ID AS CONTRACT_ID,
O.CONTRACT_PLAN_NUMBER AS CONTRACT_PLAN_NUMBER,
O.PAYMENT_NUMBER AS PAYMENT_NUMBER,
l_ebank_sn AS EBANK_NUMBER,
lrp.id AS PLAN_ID,
O.PLAN_LIST AS PLAN_LIST,
'0' AS INTEREST_ADJUST,
'settlemethod6' AS SETTLE_METHOD,
'1' AS HIRE_LIST,
DATE_FORMAT (l_hire_date,'%Y/%m/%d') AS HIRE_DATE,
o.rent AS RENT,
o.corpus AS CORPUS,
o.interest AS INTEREST,
'0' AS PENALTY,
'0' AS CORPUS_ADJUST,
'0' AS PENALTY_ADJUST,
'0' AS ROLL_BACK,
O.COIN AS COIN ,
l_client_accnum,
l_client_bank,
l_client_account,
l_acc_bank,
l_acc_name,
l_acc_number
FROM
LC_RENT_PLAN_temp O
LEFT JOIN lC_RENT_PLAN lrp ON o.contract_id=lrp.contract_id AND o.plan_list=lrp.plan_list
WHERE O.contract_id =l_contract_id
AND o.flowunid = l_flowunid
AND IFNULL(o.collect_status,'111')<>'手工收款'
AND IFNULL(o.collect_status,'111')<>'批量收款'
AND IFNULL(o.collect_status,'111')<>'微信'
AND IFNULL(o.collect_status,'1111')<>'网银收款'
AND IFNULL(o.collect_status,'1111')<>'提前结清'
) ;
-- 更新租金计划表核销状态
UPDATE LC_RENT_PLAN_temp SET collect_status='提前结清',collect_msg='提前结清'
WHERE flowunid = l_flowunid
AND IFNULL(collect_status,'1111')<>'手工收款'
AND IFNULL(collect_status,'111')<>'批量收款'
AND IFNULL(collect_status,'111')<>'微信'
AND IFNULL(collect_status,'1111')<>'网银收款'
AND IFNULL(collect_status,'1111')<>'提前结清'
;
-- 调试结果:参数赋值
SELECT '步骤1参数赋值','可核销金额',l_bill_money,'本方账号',l_acc_number,
'本分银行',l_acc_bank,'本分账户',l_acc_name,'应退保证金',l_caution_money,'违约金',l_SDHANDLING_CHARGE,'其他应收',l_OTHER_IN;
-- end loop myLoop;
-- close cur;
END$$
DELIMITER ;