apzl_leasing/calc/com/tenwa/reckon/help/ConditionHelper.java
2018-06-03 22:26:41 +08:00

227 lines
8.9 KiB
Java
Raw 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.

package com.tenwa.reckon.help;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.amarsoft.app.als.sys.tools.Tools;
import com.amarsoft.app.util.ProductParamUtil;
import com.amarsoft.are.jbo.BizObject;
import com.amarsoft.are.jbo.BizObjectManager;
import com.amarsoft.are.jbo.JBOFactory;
import com.amarsoft.are.jbo.JBOTransaction;
import com.amarsoft.are.util.json.JSONObject;
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
import com.tenwa.reckon.bean.ConditionBean;
import com.tenwa.reckon.bean.FundRentPlanBean;
import com.tenwa.reckon.bean.TabCalBean;
import com.tenwa.reckon.constant.Scale;
public class ConditionHelper {
private static ConditionHelper help;
private JBOTransaction tx;
private ConditionHelper(JBOTransaction tx){
this.tx=tx;
}
public static ConditionHelper getInstance(JBOTransaction tx){
if(help == null){
help = new ConditionHelper(tx);
}
return help;
}
public void run(JSONObject jsonObject,ConditionBean cb,TabCalBean bean,FundRentPlanBean rentPlan,Boolean flag) throws Exception{
Map<String, String> params = this.runPre(jsonObject,cb, bean, rentPlan,flag);
jsonObject.appendElement("info",params);
//ÏîÄ¿´ÖÀû
}
public Map<String, String> runPre(JSONObject jsonObject,ConditionBean cb,TabCalBean bean,FundRentPlanBean rentPlan,Boolean flag) throws Exception{
this.getGrossProfit(rentPlan, cb,bean);
this.getCleancreditmoney(rentPlan, cb,bean);
this.getFirstPaymentTotal(rentPlan, cb, bean);
Map<String, String> params = new HashMap<String, String>();
//irr ¼ÆË㷽ʽÐÞ¸Ä (1+irr/100)^12 -1
if ("STAGE_IRR".equals(cb.getIrrType())) {
String incomeNumberYear = cb.getIncomeNumberYear() ;
int incomeType = incomeNumberYear.contains("_") == true ? Integer.valueOf(incomeNumberYear.split("_")[1]):Integer.valueOf(incomeNumberYear);
//Integer.valueOf(incomeNumberYear.split("_")[1]);
double irr = new BigDecimal(Double.valueOf(cb.getIrr())/12).setScale(6, BigDecimal.ROUND_HALF_UP).divide(new BigDecimal(100)).add(new BigDecimal(1)).pow(incomeType).subtract(new BigDecimal(1)).multiply(new BigDecimal(100)).setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue();
params.put("irr", String.valueOf(irr));
}else{
params.put("irr", cb.getIrr());
}
if((!cb.getSettleMethod().equals("even_interest"))&&(!cb.getRentOrRate().equals("rate"))||flag){
params.put("year_rate", cb.getYearRate());
}
if(cb.getSettleMethod().equals("even_interest")&&cb.getRentOrRate().equals("rent")){
if(jsonObject.get("year_rate")!=null)
params.put("year_rate", jsonObject.get("year_rate").getValue().toString());
}
if(cb.getSettleMethod().equals("irregular_rent")){
params.put("INCOME_NUMBER",cb.getIncomeNumber()+"");
}
if((cb.getSettleMethod().equals("even_corpus")&&cb.getRentOrRate().equals("corpus_period"))||cb.getSettleMethod().equals("irregular_rent")||cb.getSettleMethod().equals("even_subsection")||(cb.getSettleMethod().equals("even_rent_day")&&(cb.getRentOrRate().equals("rent_period")||cb.getRentOrRate().equals("rent_period_360")))){
params.put("FIRST_PLAN_DATE", cb.getFirstPlanDate());
params.put("SECOND_PLAN_DATE", cb.getSecondPlanDate());
params.put("INCOME_NUMBER",cb.getIncomeNumber()+"");
}
params.put("gross_profit", cb.getGrossProfit().toString());
params.put("clean_credit_money", cb.getCleanCreditMoney().toString());
params.put("clean_credit_ratio", cb.getCleanCreditRatio().toString());
params.put("income_number", cb.getIncomeNumber() + "");
params.put("lease_term", cb.getLeaseTerm()+"");
params.put("FIRST_PAYMENT_TOTAL",cb.getFirstPaymentTotal());
this.updateCondition(bean, params);
return params;
}
/**
* @throws Exception
*
* @Title: getGrossProfit
* @author zhangc
* @Description: ÏîÄ¿´ÖÀû£º²ÆÎñÀûÏ¢×ܺÍ+ÊÖÐø·Ñ+¹ÜÀí·Ñ+·µµãÊÕÈë+ÀûÏ¢²¹Ìù-±£ÏÕ·Ñ£¨ÎÒ˾£©+×âǰϢ+ÃûÒå»õ¼Û+ÆäËûÊÕÈë-ÆäËûÖ§³ö
* @return
* @return BigDecimal
* @throws
*/
private void getGrossProfit(FundRentPlanBean fundRent,ConditionBean cb,TabCalBean bean) throws Exception{
String productId=bean.getProductId();
String formula= ProductParamUtil.getProductParameterValue(productId,"PRD0330","GrossProfit","Formula");
String FinanceInterest=ProductParamUtil.getProductParameterValue(productId,"PRD0330","GrossProfit","FinanceInterest");
BigDecimal money=BigDecimal.ZERO;
JBOTransaction jbotx=JBOFactory.createJBOTransaction();
try{
if(formula.length()>0){
String sql="select "+formula+" as total from "+Tools.getTable(bean.getCondition_tb())+" where flowunid='"+bean.getDocId()+"' and "+bean.getPlanCName()+"='"+bean.getPlanCValue()+"'";
List<Map<String,String>> list=DataOperatorUtil.getDataBySql(jbotx, sql, null);
if(list.size()>0){
money=money.add(new BigDecimal(list.get(0).get("TOTAL")));
}
}
}catch(Exception e){
//e.printStackTrace();
}
List<String> interest=fundRent.getInterestBusinessList();
if(FinanceInterest.equals("Y")){
for(int i=0;i<interest.size();i++){
money=money.add(new BigDecimal(interest.get(i)));
}
}
cb.setGrossProfit(money);
jbotx.commit();
}
/**
*
* <p>¼ÆË㾫ÊÚÐŶ</p>
* <p>¹«Ê½£º¾»ÊÚÐŶî = É豸¿î£­Ê׸¶¿î£­±£Ö¤½ð-ÆäËûÊÕÈë+ÆäËûÖ§³ö-ÆÚ³õµÚ1ÆÚ×â½ð+±£ÏÕ·Ñ-³§ÉÌ·µÀû-ÊÖÐø·Ñ - ¹ÜÀí·Ñ¡£</p>
* @author zhangc
* @param rentPlanList ×â½ð¼Æ»®¼¯ºÏ
* @param result ·µ»ØÇ°Ì¨µÄMAP¼¯ºÏ
* @return
* @throws Exception
*/
private void getCleancreditmoney(FundRentPlanBean rentPlan,ConditionBean cb,TabCalBean bean) throws Exception{
String productId=bean.getProductId();
String formula= ProductParamUtil.getProductParameterValue(productId,"PRD0330","CleanCreditMoney","Formula");
BigDecimal money=BigDecimal.ZERO;
JBOTransaction jbotx=JBOFactory.createJBOTransaction();
try{
if(formula.length()>0){
String sql="select "+formula+" as total from "+Tools.getTable(bean.getCondition_tb())+" where flowunid='"+bean.getDocId()+"' and "+bean.getPlanCName()+"='"+bean.getPlanCValue()+"'";
List<Map<String,String>> list=DataOperatorUtil.getDataBySql(jbotx, sql, null);
if(list.size()>0){
money=money.add(new BigDecimal(list.get(0).get("TOTAL")));
}
}
}catch(Exception e){
//e.printStackTrace();
}
/*//ÆÚ³õµÚ1ÆÚ×â½ð
String periodtype = cb.getPeriodType();
BigDecimal firstRent = BigDecimal.ZERO;
if("1".equals(periodtype) || "period_type_1".equals(periodtype)){
if(rentPlan != null && rentPlan.getRentList() != null && 0 < rentPlan.getRentList().size()){
firstRent = new BigDecimal(rentPlan.getRentList().get(0)) ;
}
}
String f= ProductParamUtil.getProductParameterValue(productId,"PRD0330","CleanCreditMoney","FirstRent");
if("Y".equals(f)){
money=money.subtract(firstRent);
}*/
cb.setCleanCreditMoney(money);
cb.setCleanCreditRatio(money.multiply(new BigDecimal(100)).divide(new BigDecimal(cb.getEquipAmt()), Scale.RATE_SCALE, BigDecimal.ROUND_HALF_UP));
jbotx.commit();
}
/**
* ¼ÆËãÆÚ³õ¸¶¿î×ܼÆ
* @param rentPlan
* @param cb
* @param bean
* @throws Exception
*/
private void getFirstPaymentTotal(FundRentPlanBean rentPlan,ConditionBean cb,TabCalBean bean) throws Exception{
String productId=bean.getProductId();
String formula= ProductParamUtil.getProductParameterValue(productId,"PRD0330","PeriodBeginPayMoney","Formula");
BigDecimal money=BigDecimal.ZERO;
JBOTransaction jbotx=JBOFactory.createJBOTransaction();
try{
if(formula.length()>0){
String sql="select "+formula+" as total from "+Tools.getTable(bean.getCondition_tb())+" where flowunid='"+bean.getDocId()+"' and "+bean.getPlanCName()+"='"+bean.getPlanCValue()+"'";
List<Map<String,String>> list=DataOperatorUtil.getDataBySql(jbotx, sql, null);
if(list.size()>0){
money=money.add(new BigDecimal(list.get(0).get("TOTAL")));
}
}
}catch(Exception e){
//e.printStackTrace();
}
//ÆÚ³õµÚ1ÆÚ×â½ð
String periodtype = cb.getPeriodType();
BigDecimal firstRent = BigDecimal.ZERO;
if("1".equals(periodtype) || "period_type_1".equals(periodtype)){
if(rentPlan != null && rentPlan.getRentList() != null && 0 < rentPlan.getRentList().size()){
firstRent = new BigDecimal(rentPlan.getRentList().get(0)) ;
}
}
String f= ProductParamUtil.getProductParameterValue(productId,"PRD0330","PeriodBeginPayMoney","FirstRent");
if("Y".equals(f)){
money=money.add(firstRent);
}
cb.setFirstPaymentTotal(money.toString());
jbotx.commit();
}
private void updateCondition(TabCalBean tcb,Map<String, String> params) throws Exception {
BizObjectManager bm=JBOFactory.getBizObjectManager(tcb.getCondition_tb());
BizObject condition=bm.createQuery("flowunid=:flowunid and "+tcb.getPlanCName()+"=:value").setParameter("flowunid", tcb.getDocId()).setParameter("value", tcb.getPlanCValue()).getSingleResult(true);
for(Map.Entry<String,String> entry:params.entrySet()){
condition.setAttributeValue(entry.getKey(), entry.getValue());
}
bm.saveObject(condition);
}
public JBOTransaction getTx() {
return tx;
}
public void setTx(JBOTransaction tx) {
this.tx = tx;
}
}