diff --git a/src_tenwa/com/tenwa/lease/app/quartzmession/SplitInts2.java b/src_tenwa/com/tenwa/lease/app/quartzmession/SplitInts2.java index 0261b1092..c6b51e763 100644 --- a/src_tenwa/com/tenwa/lease/app/quartzmession/SplitInts2.java +++ b/src_tenwa/com/tenwa/lease/app/quartzmession/SplitInts2.java @@ -23,6 +23,7 @@ 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.log.Log; import com.amarsoft.are.util.StringFunction; import com.amarsoft.awe.util.ASResultSet; @@ -48,26 +49,43 @@ public class SplitInts2 implements Job{ Object userId = arg0.getTrigger().getJobDataMap().get("CurUserId"); String curUserId = userId == null? "system" : userId.toString(); - + JBOTransaction tx =null; try{ + //汽车业务 Sqlca = Transaction.createTransaction("als"); Sqlca.executeSQL(new SqlObject("{call proc_financial_interest()}")); Sqlca.commit(); + + //传统业务 + SplitInts3 s3=new SplitInts3(); + s3.contractRentMonth(tx); + s3.contractRentQuarter(tx); + tx.commit(); discountApportion(); QuartzUtil.insertLog(startime,"com.tenwa.lease.app.quartzmession.SplitInts", "success", "成功", curUserId); } catch (Exception e) { QuartzUtil.insertLog(startime,"com.tenwa.lease.app.quartzmession.SplitInts", "error", "失败", curUserId); logger.error(e.getMessage()); e.printStackTrace(); + try { + Sqlca.rollback(); + tx.rollback(); + } catch (JBOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } }finally{ + try { if(Sqlca!=null){ - try { - Sqlca.disConnect(); - } catch (JBOException e) { - e.printStackTrace(); - } + Sqlca.disConnect(); Sqlca = null; } + if(tx!=null){ + tx=null; + } + } catch (JBOException e) { + e.printStackTrace(); + } } } public void discountApportion() throws Exception{ diff --git a/src_tenwa/com/tenwa/lease/app/quartzmession/SplitInts3.java b/src_tenwa/com/tenwa/lease/app/quartzmession/SplitInts3.java new file mode 100644 index 000000000..a62cd2aa2 --- /dev/null +++ b/src_tenwa/com/tenwa/lease/app/quartzmession/SplitInts3.java @@ -0,0 +1,174 @@ +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(); + } + +} diff --git a/src_tenwa/com/tenwa/lease/util/MonthInterestEntity.java b/src_tenwa/com/tenwa/lease/util/MonthInterestEntity.java new file mode 100644 index 000000000..0ade5ef76 --- /dev/null +++ b/src_tenwa/com/tenwa/lease/util/MonthInterestEntity.java @@ -0,0 +1,375 @@ +package com.tenwa.lease.util; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import jbo.com.tenwa.lease.comm.CONTRACT_RENT_MONTH; + +import com.amarsoft.are.jbo.BizObject; +import com.amarsoft.are.jbo.BizObjectManager; +import com.amarsoft.are.jbo.JBOFactory; + +public class MonthInterestEntity { + private String handling_charge_money; + private String sum_interest; + private String tax_rate; + private String contract_id; + private String payment_number; + private List> rent_plan_list; + private String start_date; + private String n_interest="0.00";//上半部分利息 + private String p_interest="0.00";//下半部分利息 + private String over_sum_interest="0.00";//已计算出来的利息 + private String over_sum_handl="0.00";//已计算出来的手续费 + private String date= new SimpleDateFormat("yyyy/MM/dd").format(new Date()); + + + public List getBizObjList() throws Exception { + SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); + Calendar ca = Calendar.getInstance(); + List bizoList=new ArrayList(); + if(this.getRent_plan_list().size()>0){ + BizObjectManager bm=JBOFactory.getBizObjectManager(CONTRACT_RENT_MONTH.CLASS_NAME); + for(int i=0;i getBizObjListIn_three() throws Exception{ + SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); + Calendar ca = Calendar.getInstance(); + List bizoList=new ArrayList(); + if(this.getRent_plan_list().size()>0){ + BizObjectManager bm=JBOFactory.getBizObjectManager(CONTRACT_RENT_MONTH.CLASS_NAME); + for(int i=0;i> getRent_plan_list() { + return rent_plan_list; + } + + + public void setRent_plan_list(List> rent_plan_list) { + this.rent_plan_list = rent_plan_list; + } + + + public String getStart_date() { + return start_date; + } + + + public void setStart_date(String start_date) { + this.start_date = start_date; + } + + public void setOver_sum_handl(String over_sum_handl) { + this.over_sum_handl = over_sum_handl; + } + + + /*public void caculateExInterestOnHire(){ + BigDecimal bpi=new BigDecimal(previousInterest); + BigDecimal bni=new BigDecimal(nextInterest); + BigDecimal bopi=new BigDecimal(previousOvInterest); + int a=Integer.parseInt(nextDate.substring(8)); + if("trad_month".equals(exTpye)){ + n_interest=bpi.subtract(bopi).add(bni.divide(new BigDecimal(30)).multiply(new BigDecimal(30).subtract(new BigDecimal(a)))).toString(); + } + + this.setExtractInterest(n_interest); + } + + public void caculateN_Interest(String next,String plandate){ + BigDecimal bni=new BigDecimal(next); + int a=Integer.parseInt(plandate); + if("trad_month".equals(exTpye)){ + n_interest=bni.divide(new BigDecimal(30)).multiply(new BigDecimal(30).subtract(new BigDecimal(a))).setScale(2).toString(); + } + } + + + public void caculatP_Interest(String last,String plandate){ + BigDecimal bni=new BigDecimal(last); + int a=Integer.parseInt(plandate); + if("trad_month".equals(exTpye)){ + p_interest=bni.subtract(bni.divide(new BigDecimal(30)).multiply(new BigDecimal(30).subtract(new BigDecimal(a)))).setScale(2).toString(); + } + }*/ + + + + public static void main(String[] args) { + System.out.println(Integer.parseInt("2018/03/12".substring(0,7 ))); + } +}