package com.tenwa.lease.app.quartzmession; import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import jbo.com.tenwa.lease.comm.CONTRACT_RENT_MONTH; import jbo.com.tenwa.lease.comm.LB_CONTRACT_INFO; import com.amarsoft.are.jbo.BizObject; import com.amarsoft.are.jbo.BizObjectManager; import com.amarsoft.are.jbo.JBOException; import com.amarsoft.are.jbo.JBOFactory; import com.amarsoft.are.jbo.JBOTransaction; import com.amarsoft.are.util.StringFunction; import com.amarsoft.awe.util.Transaction; import com.tenwa.comm.util.jboutil.DataOperatorUtil; import com.tenwa.lease.util.MonthInterestEntity; /*** * 传统业务和汽车类传统业务的计提利息计算 * 分成月付和季付两种 * @author amarsoft * */ public class SplitInts3 implements Job{ @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { JBOTransaction tx =null; try{ contractRentMonth(tx); contractRentQuarter(tx); tx.commit(); discountApportion(); }catch(Exception e){ try { tx.rollback(); if(tx!=null)tx=null; } catch (JBOException e1) { e1.printStackTrace(); } e.printStackTrace(); } } public void contractRentMonth(JBOTransaction tx) throws Exception { Transaction Sqlca =null; List idList=new ArrayList(); tx =JBOFactory.createJBOTransaction(); Sqlca = Transaction.createTransaction(tx); //传统月付 String sql="SELECT lci.id AS ID ,lcc.PAYMENT_NUMBER,getTax(lci.leas_form,'租息',lcc.start_date) as TAX, lcc.START_DATE,lr.interest INTEREST, ROUND(lcc.HANDLING_CHARGE_MONEY/getTax(lci.LEAS_FORM,'手续费',lcc.start_date),2) AS HANDLING_CHARGE_MONEY FROM lb_contract_info lci LEFT JOIN lc_calc_condition lcc ON lcc.contract_id=lci.id LEFT JOIN (SELECT lrp.contract_id,ROUND(SUM(lrp.interest/getTax(lci.LEAS_FORM,'租息',lcc.start_date)),2) interest FROM lc_rent_plan lrp LEFT JOIN lb_contract_info lci ON lci.id=lrp.CONTRACT_ID LEFT JOIN lc_calc_condition lcc ON lcc.contract_id=lci.id GROUP BY lrp.contract_id) lr ON lr.contract_id=lci.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) AND lci.BUSINESSTYPE<>'1' AND lcc.INCOME_NUMBER_YEAR='income_1'"; Map map=new HashMap(); //传统月付 List> dataList=DataOperatorUtil.getDataBySql(Sqlca, sql, map); tx.commit(); for(Map ma:dataList){ MonthInterestEntity mit =new MonthInterestEntity(); String contract_id=ma.get("ID"); mit.setHandling_charge_money(ma.get("HANDLING_CHARGE_MONEY")); mit.setSum_interest(ma.get("INTEREST")); mit.setStart_date(ma.get("START_DATE")); mit.setTax_rate(ma.get("TAX")); mit.setContract_id(contract_id); mit.setPayment_number(ma.get("PAYMENT_NUMBER")); excuteSave(contract_id,mit); } } public void contractRentQuarter(JBOTransaction tx )throws Exception{ Transaction Sqlca =null; List idList=new ArrayList(); tx =JBOFactory.createJBOTransaction(); Sqlca = Transaction.createTransaction(tx); //传统季付 String sql="SELECT lci.id AS ID ,lcc.PAYMENT_NUMBER,getTax(lci.leas_form,'租息',lcc.start_date) as TAX, lcc.START_DATE,lr.interest INTEREST, ROUND(lcc.HANDLING_CHARGE_MONEY/getTax(lci.LEAS_FORM,'手续费',lcc.start_date),2) AS HANDLING_CHARGE_MONEY FROM lb_contract_info lci LEFT JOIN lc_calc_condition lcc ON lcc.contract_id=lci.id LEFT JOIN (SELECT lrp.contract_id,ROUND(SUM(lrp.interest/getTax(lci.LEAS_FORM,'租息',lcc.start_date)),2) interest FROM lc_rent_plan lrp LEFT JOIN lb_contract_info lci ON lci.id=lrp.CONTRACT_ID LEFT JOIN lc_calc_condition lcc ON lcc.contract_id=lci.id GROUP BY lrp.contract_id) lr ON lr.contract_id=lci.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) AND lci.BUSINESSTYPE<>'1' AND lcc.INCOME_NUMBER_YEAR='income_3'"; Map map=new HashMap(); //传统季付 List> dataList=DataOperatorUtil.getDataBySql(Sqlca, sql, map); tx.commit(); for(Map ma:dataList){ MonthInterestEntity mit =new MonthInterestEntity(); String contract_id=ma.get("ID"); mit.setHandling_charge_money(ma.get("HANDLING_CHARGE_MONEY")); mit.setSum_interest(ma.get("INTEREST")); mit.setStart_date(ma.get("START_DATE")); mit.setTax_rate(ma.get("TAX")); mit.setContract_id(contract_id); mit.setPayment_number(ma.get("PAYMENT_NUMBER")); excuteSave(contract_id,mit); } } public void excuteSave(String contract_id,MonthInterestEntity mit) throws Exception { JBOTransaction tx =null; Transaction Sqlca =null; tx =JBOFactory.createJBOTransaction(); Sqlca = Transaction.createTransaction(tx); String sql="SELECT lrp.plan_list L_PLAN_LIST,lrp.plan_date L_PLAN_DATE,ROUND(lrp.interest/getTax(lci.LEAS_FORM,'租息',lcc.START_DATE),2) L_INTEREST,lrp1.plan_list N_PLAN_LIST,lrp1.plan_date N_PLAN_DATE,ROUND(lrp1.interest/getTax(lci.LEAS_FORM,'租息',lcc.START_DATE),2) N_INTERST,lcc.START_DATE FROM lc_rent_plan lrp LEFT JOIN lc_rent_plan lrp1 ON lrp1.contract_id=lrp.contract_id AND lrp1.plan_list=lrp.plan_list+1 LEFT JOIN lc_calc_condition lcc ON lcc.contract_id=lrp.contract_id LEFT JOIN lb_contract_info lci ON lci.ID=lcc.contract_id WHERE lrp.contract_id=:ID ORDER BY lrp.plan_list"; Map map=new HashMap(); map.put("ID", contract_id); List> dataList=DataOperatorUtil.getDataBySql(Sqlca, sql, map); mit.setRent_plan_list(dataList); List bolist=mit.getBizObjList(); saveBM(tx,bolist); tx.commit(); } public void saveBM(JBOTransaction tx,List boList) throws Exception{ BizObjectManager bm=JBOFactory.getBizObjectManager(CONTRACT_RENT_MONTH.CLASS_NAME,tx); for(BizObject bo:boList){if(bo!=null){bm.saveObject(bo);}} } public void discountApportion() throws Exception{ Transaction Sqlca =null; DateFormat df = new SimpleDateFormat("yyyy/MM"); String startime = StringFunction.getTodayNow(); Date nowdate=df.parse(startime); String contract_id=""; String DISCOUNT_money=""; String suminterest=""; BigDecimal discount=new BigDecimal("0.00"); Sqlca = Transaction.createTransaction("als"); Map map=new HashMap(); String sql="SELECT lec.contract_id,ROUND(ld.DISCOUNT_money/CASE WHEN lci.leas_form='01' THEN 1.16 ELSE 1.06 END ,2) AS DISCOUNT_money,crm.interest FROM LB_DISCOUNT ld LEFT JOIN LB_EQUIPMENT_CAR lec ON lec.FRAME_NUMBER=ld.FRAME_NUMBER AND lec.contract_id IS NOT NULL AND lec.contract_id<>'' LEFT JOIN lb_contract_info lci ON lci.id=lec.contract_id INNER JOIN (SELECT contract_id,SUM(interest) interest FROM contract_rent_month GROUP BY contract_id) crm ON crm.contract_id=lec.contract_id WHERE DATE_FORMAT(ld.inputtime,'%Y/%m/%d')=DATE_FORMAT(SYSDATE(),'%Y/%m/%d')"; List> dataList=DataOperatorUtil.getDataBySql(Sqlca, sql, map); BizObjectManager bom=JBOFactory.getBizObjectManager(CONTRACT_RENT_MONTH.CLASS_NAME, Sqlca); for(Map ma:dataList){ contract_id=ma.get("contract_id"); DISCOUNT_money=ma.get("DISCOUNT_money"); suminterest=ma.get("interest"); BizObject bo=null; String accurte_date=""; Date accdate=null; BigDecimal Discount_apart=new BigDecimal("0.00"); BigDecimal Discount_apart_nom=new BigDecimal("0.00"); List bolist=bom.createQuery("contract_id=:contract_id order by rent_list").setParameter("contract_id", contract_id).getResultList(true); for(int i=0;inowdate.getTime()){ Discount_apart_nom=new BigDecimal(bo.getAttribute("interest").getString()).divide(new BigDecimal(suminterest),6,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(DISCOUNT_money)); bo.setAttributeValue("discount", Discount_apart_nom); } bom.saveObject(bo); } } Sqlca.commit(); } }