计提

CREATE OR REPLACE
procedure proc_contract_rent_month_test is
begin
  declare
       p_tax_rate number(22,2) default 1.06; -- 税率
       p_hand_formula varchar2(200 char) default 'ROUND(应收利息/'||p_tax_rate||'-ROUND(上个月剩余本金*年利率/100/360,2)*(上个月最后一天-上个月计划日期)/'||p_tax_rate||'+ROUND(这个月剩余本金*年利率/100/360,2)*(这个月最后一天-这个月计划日期)/'||p_tax_rate||',2)'; -- 计提公式
       p_interest number; -- 这期上半部分计提(扣税)
       n_interest number; -- 上期下半部分计提(扣税) 
             p_all_interest number;
       n_formula varchar2(200 char); -- 上期下半部分公式
       l_formula varchar2(200 char); -- 这期下半部分公式

       begin
         for contract_info in
             (select lcc.contract_id p_contract_id,lcc.payment_number p_payment_number,
                     nvl(lr.interest,0) p_all_interest,lcc.handling_charge_money/1.06 p_handling_charge_money,
                     (nvl(lcc.DEALER_DISCOUNT,0)+NVL(lcc.CASH_DISCOUNT_ITEM,0))/1.06 p_discount_money,
                     lr.last_date p_last_date,
                     lcc.clean_lease_money p_remain_corpus,lcc.start_date p_prev_plan_date,lcc.year_rate p_year_rate,lcc.year_rate/100/360 p_day_rate,
                     decode(sign((round(lcc.clean_lease_money*(lcc.year_rate/100/360),2)*(last_day(to_date(lcc.start_date,'yyyy/mm/dd'))-to_date(lcc.start_date,'yyyy/mm/dd')))-0),1,lcc.clean_lease_money*(lcc.year_rate/100/360)*(last_day(to_date(lcc.start_date,'yyyy/mm/dd'))-to_date(lcc.start_date,'yyyy/mm/dd')),0) p_month_interest,lcc.INCOME_NUMBER income_number
              from lc_calc_condition lcc left join lb_contract_info lci on lci.id = lcc.contract_id
              left join (select contract_id,sum(interest/1.06) interest,max(plan_date) last_date from lc_rent_plan group by contract_id) lr on lr.contract_id = lcc.contract_id
              where not exists (select 1 from contract_rent_month where contract_id = lcc.contract_id) and nvl(lr.interest,0) >= 0 and lci.contract_status between 31 and 100 and lci.id not in  (select contract_id from lc_fund_rent_adjust)) loop
         
                 declare
          al_apport_handling_money number(22,2) default 0.00;--已摊销手续费
          al_apport_discount_money number(22,2) default 0.00;--已摊销贴息
          rent_time_limit number(3) default 0;--租赁期限
          hc_money number(22,2) default 0.00;--手续费
          dis_money number(22,2) default 0.00;--贴息
           begin
             rent_time_limit:=contract_info.income_number;
             n_interest := contract_info.p_month_interest;
             -- 创建起租日当月的计提
             n_formula := 'ROUND(ROUND('||contract_info.p_remain_corpus||'*'||contract_info.p_year_rate||'/100/360,2)*('||to_char(last_day(to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd')),'yyyy/mm/dd')||'-'||contract_info.p_prev_plan_date
                          ||')/'||p_tax_rate||',2)';
            if contract_info.p_all_interest>0 then
                        
                        
             insert into contract_rent_month(id,interest,fee,discount,accrued_date,start_date,end_date,
                                             formula,hand_formula,create_date,contract_id,payment_number)
             values(sys_guid(),round(n_interest/p_tax_rate,2),round(decode(sign(contract_info.p_handling_charge_money*round(n_interest/p_tax_rate,2)-0.00001),1,contract_info.p_handling_charge_money*(n_interest/p_tax_rate)/contract_info.p_all_interest,-1,
             (last_day(to_date(contract_info.p_last_date,'yyyy/mm/dd'))-to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd'))*CONTRACT_INFO.P_HANDLING_CHARGE_MONEY,0),2),round(decode(sign(contract_info.p_discount_money*round(n_interest/p_tax_rate,2)-0.00001),1,contract_info.p_discount_money*(n_interest/p_tax_rate)/contract_info.p_all_interest,-1,(last_day(to_date(contract_info.p_last_date,'yyyy/mm/dd'))-to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd'))*CONTRACT_INFO.p_discount_money,0),2),
                    to_char(to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd'),'yyyy/mm'),to_char(trunc(to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd'),'mm'),'yyyy/mm/dd'),to_char(last_day(to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd')),'yyyy/mm/dd'),n_formula
                    ,'ROUND(ROUND(这个月剩余本金*年利率/100/360,2)*(这个月最后一天-这个月计划日期)/'||p_tax_rate||',2)',to_char(sysdate,'yyyy/mm/dd hh24:mi:ss'),contract_info.p_contract_id,contract_info.p_payment_number);

             al_apport_handling_money:=al_apport_handling_money+round((case when sign(contract_info.p_handling_charge_money*round(n_interest/p_tax_rate,2)-0.00001)=1 then  contract_info.p_handling_charge_money*(n_interest/p_tax_rate)/contract_info.p_all_interest WHEN sign(contract_info.p_handling_charge_money*round(n_interest/p_tax_rate,2)-0.00001)=-1 THEN (last_day(to_date(contract_info.p_last_date,'yyyy/mm/dd'))-to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd'))*CONTRACT_INFO.P_HANDLING_CHARGE_MONEY else 0 end),2);

             al_apport_discount_money:=al_apport_discount_money+round((case when sign(contract_info.p_discount_money*round(n_interest/p_tax_rate,2)-0.00001)=1 then  contract_info.p_discount_money*(n_interest/p_tax_rate)/contract_info.p_all_interest WHEN sign(contract_info.p_discount_money*round(n_interest/p_tax_rate,2)-0.00001)=-1 THEN (last_day(to_date(contract_info.p_last_date,'yyyy/mm/dd'))-to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd'))*contract_info.p_discount_money else 0 end),2);

             n_formula := 'ROUND('||contract_info.p_remain_corpus||'*'||contract_info.p_year_rate||'/100/360,2)*('||to_char(last_day(to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd')),'yyyy/mm/dd')||'-'||contract_info.p_prev_plan_date
                          ||')/'||p_tax_rate;
             for rent_info in
               (select * from lc_rent_plan where contract_id = contract_info.p_contract_id order by contract_id,plan_list) loop
               begin
                 p_interest := ((case when rent_info.interest = 0 then 0 else rent_info.interest end)-n_interest)/p_tax_rate;
                 n_interest := case when round(rent_info.all_remain_corpus*contract_info.p_day_rate,2)*(last_day(to_date(rent_info.plan_date,'yyyy/mm/dd'))-to_date(rent_info.plan_date,'yyyy/mm/dd')) = 0 then 0 else (rent_info.all_remain_corpus*contract_info.p_day_rate)*(last_day(to_date(rent_info.plan_date,'yyyy/mm/dd'))-to_date(rent_info.plan_date,'yyyy/mm/dd')) end;
                 l_formula := 'ROUND('||rent_info.all_remain_corpus||'*'||contract_info.p_year_rate||'/100/360,2)*('||to_char(last_day(to_date(rent_info.plan_date,'yyyy/mm/dd')),'yyyy/mm/dd')||'-'||rent_info.plan_date
                              ||')/'||p_tax_rate;
                 if  rent_info.plan_list=rent_time_limit then
                   hc_money:=contract_info.p_handling_charge_money-al_apport_handling_money;
                   dis_money:=contract_info.p_discount_money-al_apport_discount_money;
                   else hc_money:=round((case when sign(contract_info.p_handling_charge_money*round(p_interest+n_interest,2)-0.00001)=1 then  contract_info.p_handling_charge_money*(p_interest+n_interest/p_tax_rate)/contract_info.p_all_interest WHEN sign(contract_info.p_handling_charge_money*round(p_interest+n_interest,2)-0.00001)=-1 THEN (last_day(to_date(contract_info.p_last_date,'yyyy/mm/dd'))-to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd'))*CONTRACT_INFO.P_HANDLING_CHARGE_MONEY else 0 end),2);
                   dis_money:=round((case when sign(contract_info.p_discount_money*round(p_interest+n_interest,2)-0.00001)=1 then  contract_info.p_discount_money*(p_interest+n_interest/p_tax_rate)/contract_info.p_all_interest WHEN sign(contract_info.p_discount_money*round(p_interest+n_interest,2)-0.00001)=-1 THEN (last_day(to_date(contract_info.p_last_date,'yyyy/mm/dd'))-to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd'))*contract_info.p_discount_money else 0 end),2);
                   end if;
                 insert into contract_rent_month(id,interest,fee,discount,accrued_date,start_date,end_date,
                                                 formula,hand_formula,create_date,contract_id,payment_number)
                 values(sys_guid(),round(p_interest+n_interest/p_tax_rate,2),hc_money,dis_money,
                        to_char(to_date(rent_info.plan_date,'yyyy/mm/dd'),'yyyy/mm'),to_char(trunc(to_date(rent_info.plan_date,'yyyy/mm/dd'),'mm'),'yyyy/mm/dd'),to_char(last_day(to_date(rent_info.plan_date,'yyyy/mm/dd')),'yyyy/mm/dd'),
                        'ROUND('||rent_info.interest||'/'||p_tax_rate||'-'||n_formula||'+'||l_formula||',2)'
                        ,p_hand_formula,to_char(sysdate,'yyyy/mm/dd hh24:mi:ss'),contract_info.p_contract_id,contract_info.p_payment_number);

                 n_formula := l_formula;
                 al_apport_handling_money:=al_apport_handling_money+round((case when sign(contract_info.p_handling_charge_money*round(p_interest+n_interest,2)-0.00001)=1 then  contract_info.p_handling_charge_money*(p_interest+n_interest/p_tax_rate)/contract_info.p_all_interest WHEN sign(contract_info.p_handling_charge_money*round(p_interest+n_interest,2)-0.00001)=-1 THEN (last_day(to_date(contract_info.p_last_date,'yyyy/mm/dd'))-to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd'))*CONTRACT_INFO.P_HANDLING_CHARGE_MONEY else 0 end),2);
                 al_apport_discount_money:=al_apport_discount_money+round((case when sign(contract_info.p_discount_money*round(p_interest+n_interest,2)-0.00001)=1 then  contract_info.p_discount_money*(p_interest+n_interest/p_tax_rate)/contract_info.p_all_interest when sign(contract_info.p_discount_money*round(p_interest+n_interest,2)-0.00001)=-1 then (last_day(to_date(contract_info.p_last_date,'yyyy/mm/dd'))-to_date(contract_info.p_prev_plan_date,'yyyy/mm/dd'))*contract_info.p_discount_money else 0 end),2);
               end;
             end loop;
           end;
         end loop;
                 else
                   /**insert into contract_rent_month(id,interest,fee,discount,accrued_date,start_date,end_date,
                                                 formula,hand_formula,create_date,contract_id,payment_number)
                 values(sys_guid(),round(p_interest+n_interest/p_tax_rate,2),hc_money,dis_money,
                        to_char(to_date(rent_info.plan_date,'yyyy/mm/dd'),'yyyy/mm'),to_char(trunc(to_date(rent_info.plan_date,'yyyy/mm/dd'),'mm'),'yyyy/mm/dd'),to_char(last_day(to_date(rent_info.plan_date,'yyyy/mm/dd')),'yyyy/mm/dd'),
                        'ROUND('||rent_info.interest||'/'||p_tax_rate||'-'||n_formula||'+'||l_formula||',2)'
                        ,p_hand_formula,to_char(sysdate,'yyyy/mm/dd hh24:mi:ss'),contract_info.p_contract_id,contract_info.p_payment_number);
         **/
                 end;
       end;
    commit;
    Exception
      when others then
        dbms_output.put_line('事物回滚'||sqlerrm);
        raise_application_error(-20002,sqlerrm);
        rollback;
end;

考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调度和提升系统经济性。文中可能涉及不确定性建模(如场景生成与缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调度案例与代码资源,涵盖微电网调度、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真与优化调度的方法;③复现论文结果或开展相关课题研究,提升科研效率与创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建与求解过程,重点关注不确定性处理方法与需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习与交叉验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值