/** * @Project: hehenian-biz-service * @Package com.hehenian.biz.component.loan.impl * @Title: LoanInfoComponentImpl.java * @Description: TODO * @author: liuzgmf * @date 2015年4月20日 下午2:52:52 * @Copyright: HEHENIAN Co.,Ltd. All rights reserved. * @version V1.0 */ package com.hehenian.biz.component.loan.impl; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.hehenian.biz.common.exception.BusinessException; import com.hehenian.biz.common.loan.dataobject.DepositLoanDetailDo; import com.hehenian.biz.common.loan.dataobject.FundProductDo; import com.hehenian.biz.common.loan.dataobject.FundUserAccountDo; import com.hehenian.biz.common.loan.dataobject.LoanInfoDo; import com.hehenian.biz.common.loan.dataobject.LoanInfoDo.LoanStatus; import com.hehenian.biz.component.account.IPersonComponent; import com.hehenian.biz.component.fund.Constants; import com.hehenian.biz.component.loan.ILoanDetailComponent; import com.hehenian.biz.component.loan.ILoanInfoComponent; import com.hehenian.biz.dal.loan.ILoanInfoDao; /** * * @author: liuzgmf * @date 2015年4月20日 下午2:52:52 */ @Component("loanInfoComponent") public class LoanInfoComponentImpl implements ILoanInfoComponent { @Autowired private ILoanInfoDao loanInfoDao; @Autowired private IPersonComponent personComponent; @Autowired private ILoanDetailComponent loanDetailComponent; @Override public int addLoanInfo(List<LoanInfoDo> loanInfoDoList) { if (loanInfoDoList == null || loanInfoDoList.size() == 0) { return 0; } for (LoanInfoDo loanInfoDo : loanInfoDoList) { loanInfoDao.addLoanInfo(loanInfoDo); } return loanInfoDoList.size(); } @Override public int updateLoanInfo(LoanInfoDo loanInfoDo) { int count = loanInfoDao.updateLoanInfo(loanInfoDo); if (count <= 0) { throw new BusinessException("修改借款标的[" + loanInfoDo.getLoanInfoId() + "]信息失败!"); } return count; } @Override public List<LoanInfoDo> queryLoanInfos(Map<String, Object> searchItems) { return loanInfoDao.queryLoanInfos(searchItems); } @Override public long countLoanInfo(Map<String, Object> searchItems) { return loanInfoDao.countLoanInfo(searchItems); } @Override public LoanInfoDo getByLoanInfoId(Long loanInfoId) { return loanInfoDao.getByLoanInfoId(loanInfoId); } @Override public List<LoanInfoDo> queryByLoanInfoIds(List<Long> loanInfoIdList) { return loanInfoDao.queryByLoanInfoIds(loanInfoIdList); } @Override public void addLoanDetail(LoanInfoDo loanInfoDo, Long userId) { // 借款信息详情 DepositLoanDetailDo detail = initDepositLoanDetail(loanInfoDo, userId); // 插入定存系统借款详细信息 Long loanId = loanDetailComponent.addDepositLoanDetail(detail); // 投资产品信息 FundProductDo prd = initFundProduct(loanInfoDo, userId, loanId); // 插入投资产品信息 loanDetailComponent.addFundProduct(prd); // 判断是否存在虚拟资金账户 int flag = loanDetailComponent.existUserAccount(userId); // 如果不存在,则插入虚拟账户 if (flag == 0) { // 虚拟账户信息 FundUserAccountDo account = new FundUserAccountDo(); account.setUserId(userId); account.setBalanceAmount(new BigDecimal(0)); loanDetailComponent.addFundUserAccount(account); } // 变更借款标的状态 LoanInfoDo updLoanInfoDo = new LoanInfoDo(); updLoanInfoDo.setLoanInfoId(loanInfoDo.getLoanInfoId()); updLoanInfoDo.setLoanStatus(LoanStatus.TOCHINAPNR); loanInfoDao.updateLoanInfo(updLoanInfoDo); } private DepositLoanDetailDo initDepositLoanDetail(LoanInfoDo loanInfoDo, Long userId) { DepositLoanDetailDo detail = new DepositLoanDetailDo(); detail.setCreateTime(new Date()); detail.setAnnualRate(BigDecimal.valueOf(loanInfoDo.getAnnualRate())); detail.setBorrowerType(Byte.valueOf("0"));// 借款人类型 TODO try { detail.setBorrowerType(Byte.valueOf(loanInfoDo.getBorrowGroup()));// 借款人类型 } catch (NumberFormatException ignore) { // 忽略 } detail.setBusinessNum(loanInfoDo.getBusinessNo().trim());// 业务编号 detail.setDepartment(loanInfoDo.getBorrowGroup());// 所属专区 detail.setIssuerBrunch(loanInfoDo.getConsultantBranch());// 咨询方分行 // detail.setLoanId(loanInfoDo.getLoanInfoId()); detail.setLoanAmount(BigDecimal.valueOf(loanInfoDo.getLoanAmt()));// 借款金额 detail.setLoanDesc(loanInfoDo.getConsultant()); // 借款描述 detail.setLoanPeriod(loanInfoDo.getLoanPeriod().shortValue());// 借款期限 detail.setLoanRate(BigDecimal.valueOf(loanInfoDo.getAnnualRate()));// 借款利率 detail.setLoanStatus(Byte.valueOf("2")); detail.setLoanTitle(loanInfoDo.getLoanUsage());// 借款标题 detail.setLoanUsage(loanInfoDo.getLoanUsage());// 借款用途 detail.setRemark(loanInfoDo.getRemark());// 借款描述 detail.setRepayPeriod(loanInfoDo.getLoanPeriod().shortValue());// 还款周期 detail.setRepayType(loanInfoDo.getRepayType().byteValue());// 还款方式 detail.setTenderDay(loanInfoDo.getTenderDay().shortValue());// 筹标期限 detail.setUserId(userId); return detail; } private FundProductDo initFundProduct(LoanInfoDo loanInfoDo, Long userId, Long loanId) { FundProductDo prd = new FundProductDo(); prd.setAnnualRate(BigDecimal.valueOf(loanInfoDo.getAnnualRate())); // prd.setBinLevel("A1");// 投标等级 prd.setCreateTime(new Date()); prd.setInvestAmount(BigDecimal.valueOf(loanInfoDo.getLoanAmt()));// 产品投资金额/借款金额 prd.setInvestedAmount(BigDecimal.ZERO);// 已投金额 prd.setLoanId(Long.valueOf(loanId)); prd.setLoanPeriod(loanInfoDo.getLoanPeriod().shortValue());// 借款期限 prd.setLoanRate(BigDecimal.valueOf(loanInfoDo.getAnnualRate()));// 给借款人的利率 prd.setLoanType(Byte.valueOf(loanInfoDo.getBorrowGroup()));// 借款类型(0-个人借款1-企业借款2-车易贷 // 3-房易贷 // 4-担保) TODO prd.setProductName(loanInfoDo.getLoanUsage());// 产品名称 prd.setProductStatus(Byte.valueOf("1"));// 产品状态(1-待发布,2-筹标中,3-已满标,4-已流标,5-还款中,6-已还款,7-冻结,8-废弃) // TODO prd.setProductUsage(loanInfoDo.getLoanUsage());// 产品资金用途 prd.setPublishTime(new Date()); prd.setRemark(loanInfoDo.getRemark()); prd.setRepayPeriod(loanInfoDo.getLoanPeriod().shortValue());// 还款周期 Byte repayType = Constants.getRepayTypeCode(loanInfoDo.getProductType()); prd.setRepayType(repayType == null ? 1 : repayType);// 还款方式 TODO // prd.setSecurityType(Byte.valueOf("1"));// 保障类型 prd.setTenderDay(loanInfoDo.getTenderDay().shortValue());// 筹标期限 prd.setUserId(userId); return prd; } }