231 lines
9.1 KiB
Java
231 lines
9.1 KiB
Java
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());
|
||
|
||
//¸üб£Ö¤½ðµÖ¿Û
|
||
params.put("CAUTION_DEDUCTION_MONEY",cb.getCautionDeductionMoney());
|
||
params.put("CAUTION_MONEY_REMAIN",cb.getCautionMoneyRemain());
|
||
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;
|
||
}
|
||
|
||
|
||
}
|