/**
* @Project: hehenian-biz-service
* @Package com.hehenian.biz.service.loan.impl
* @Title: LoanDetailServiceImpl.java
* @Description: TODO
* @author: liuzgmf
* @date 2014年12月10日 下午7:03:07
* @Copyright: HEHENIAN Co.,Ltd. All rights reserved.
* @version V1.0
*/
package com.hehenian.biz.service.loan.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.hehenian.biz.common.base.dataobject.NPageDo;
import com.hehenian.biz.common.base.result.IResult;
import com.hehenian.biz.common.base.result.ResultSupport;
import com.hehenian.biz.common.exception.BusinessException;
import com.hehenian.biz.common.loan.ILoanPersonService;
import com.hehenian.biz.common.loan.dataobject.AuditLogDo;
import com.hehenian.biz.common.loan.dataobject.CertificateDo;
import com.hehenian.biz.common.loan.dataobject.JobDo;
import com.hehenian.biz.common.loan.dataobject.LoanDo;
import com.hehenian.biz.common.loan.dataobject.LoanPersonDo;
import com.hehenian.biz.common.loan.dataobject.PropertyDo;
import com.hehenian.biz.common.trade.dataobject.BorrowDo;
import com.hehenian.biz.common.trade.dataobject.RepaymentDo;
import com.hehenian.biz.component.account.IUserComponent;
import com.hehenian.biz.component.loan.IAuditLogComponent;
import com.hehenian.biz.component.loan.ILoanCertificateComponent;
import com.hehenian.biz.component.loan.ILoanComponent;
import com.hehenian.biz.component.loan.ILoanJobComponent;
import com.hehenian.biz.component.loan.ILoanPersonComponent;
import com.hehenian.biz.component.loan.ILoanPropertyComponent;
import com.hehenian.biz.component.loan.ILoanRelationComponent;
import com.hehenian.biz.component.trade.IBorrowComponent;
/**
*
* @author: xiexiang
*/
@Service("loanPersonService")
public class LoanPersonServiceImpl implements ILoanPersonService {
private final Logger logger = Logger.getLogger(this.getClass());
@Autowired
private ILoanPersonComponent loanPersonComponent;
@Autowired
private ILoanComponent loanComponent;
@Autowired
private IUserComponent userComponent;
@Autowired
private ILoanJobComponent loanJobComponent;
@Autowired
private ILoanRelationComponent loanRelationComponent;
@Autowired
private ILoanPropertyComponent loanPropertyComponent;
@Autowired
private ILoanCertificateComponent loanCertificateComponent;
@Autowired
private IBorrowComponent borrowComponent;
@Autowired
private IAuditLogComponent auditLogComponent;
@Override
public NPageDo<LoanPersonDo> getLoanPerson(Map searchItems) {
NPageDo<LoanPersonDo> loanDo = new NPageDo<LoanPersonDo>();
try {
long count = loanPersonComponent.getTotalCount(searchItems);
loanDo.setTotalCount(count);
if (count == 0) {
return loanDo;
}
List<LoanPersonDo> loanPersonDo = loanPersonComponent.queryLoanPerson(searchItems);
loanDo.setModelList(loanPersonDo);
return loanDo;
} catch (Exception e) {
logger.error(e.getMessage(), e);
loanDo.setTotalCount(0l);
return loanDo;
}
}
@Override
public IResult<?> updateLoanPerson(LoanPersonDo loanPersonDo) {
IResult<String> result = new ResultSupport<String>(true);
try {
logger.info("-----------更新或插入业务受理相关的表开始------------");
loanPersonComponent.updateLoanPerson(loanPersonDo);
logger.info("-----------更新或插入业务受理相关的表成功------------");
} catch (Exception e) {
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
}
return result;
}
/**
* 修改审核信息
*
* @param loanPersonDo
* @return
*/
@Override
public IResult<?> updateLoanShInfo(LoanPersonDo loanPersonDo) {
IResult<String> result = new ResultSupport<String>(true);
try {
LoanDo loanDo = loanPersonDo.getLoanDo();
if (loanDo != null && loanDo.getLoanId() != null) {
loanComponent.changeLoanStatus(loanDo);
}
} catch (Exception e) {
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
}
return result;
}
@Override
public IResult<?> updateLoanShInfo(LoanPersonDo loanPersonDo,String auditUser,String auditUserId,String preStatus,String reason) {
IResult<String> result = new ResultSupport<String>(true);
try {
LoanDo loanDo = loanPersonDo.getLoanDo();
if (loanDo != null && loanDo.getLoanId() != null) {
loanComponent.changeLoanStatus(loanDo);
//生成日志
AuditLogDo auditLog = new AuditLogDo();
auditLog.setLoanId(loanDo.getLoanId());
auditLog.setAfterStatus(loanDo.getLoanStatus().name());
auditLog.setPreStatus(preStatus);
auditLog.setAuditUser(auditUser);
auditLog.setAuditUserId(auditUserId);
auditLog.setReason(reason);
auditLogComponent.addAuditLog(auditLog);
}
} catch (Exception e) {
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
}
return result;
}
@Override
public AuditLogDo getOneAuditLogDoByLoanId(Long loanId){
return auditLogComponent.getOneAuditLogByLoanId(loanId);
}
@Override
public IResult<?> addLoanPerson(LoanPersonDo loanPersonDo) {
IResult<String> result = new ResultSupport<String>(true);
try {
loanPersonComponent.addLoanPerson(loanPersonDo);
} catch (Exception e) {
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
}
return result;
}
@Override
public LoanPersonDo getCountByIds(Long id) {
return loanPersonComponent.getCountByIds(id);
}
/**
* 初始化业务受理数据
*/
@Override
public LoanPersonDo getInitData(Long loanId) {
LoanPersonDo loanPersonDo = null;
try {
logger.info("---------初始化业务受理数据开始-----------");
loanPersonDo = loanPersonComponent.getCountByIds(loanId);
logger.info("---------初始化业务受理数据结束-----------");
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return loanPersonDo;
}
/**
* 初始化资产信息
* @author zhengyfmf
*/
@Override
public PropertyDo initPropertyData(Long loanId) {
PropertyDo propertyDo = null;
try {
logger.info("---------初始化资产信息开始-----------");
propertyDo = loanPropertyComponent.getCountByIds(loanId);
logger.info("---------初始资产信息结束-----------");
} catch (Exception e) {
logger.error(e.getMessage(), e);
e.printStackTrace();
}
return propertyDo;
}
/**
* 修改资产信息
* @author zhengyfmf
*/
@Override
public IResult<?> saveOrUpdateProperty(PropertyDo propertyDo) {
IResult<String> result = new ResultSupport<String>(true);
try {
logger.info("-----------更新或插入资产信息开始------------");
if(propertyDo.getPropertyId() != null && propertyDo.getPropertyId().intValue()>0){
loanPropertyComponent.updateProperty(propertyDo);
}else{
loanPropertyComponent.addProperty(propertyDo);
}
logger.info("-----------更新或插入资产信息成功------------");
} catch (Exception e) {
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
e.printStackTrace();
}
return result;
}
/**
* 初始 图片资料信息
* @author zhengyfmf
*/
@Override
public List<CertificateDo> initCertificateData(Long loanId) {
List<CertificateDo> certificateDoList = null;
try {
logger.info("---------初始化资产信息开始-----------");
certificateDoList = loanCertificateComponent.getCertificateByLoanId(loanId);
logger.info("---------初始资产信息结束-----------");
} catch (Exception e) {
logger.error(e.getMessage(), e);
e.printStackTrace();
}
return certificateDoList;
}
/**
* 修改 图片资产信息
* @author zhengyfmf
*/
@Override
public IResult<?> saveOrUpdateCertificate(List<CertificateDo> certificateDoList) {
IResult<String> result = new ResultSupport<String>(true);
if(certificateDoList != null && certificateDoList.size()>0){
for(int i=0;i<certificateDoList.size();i++){
CertificateDo cd = certificateDoList.get(i);
try {
if(cd.getCertificateId() != null){
loanCertificateComponent.updateCertificate(cd);
}else{
loanCertificateComponent.addCertificate(cd);
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
e.printStackTrace();
}
}
}else{
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
}
return result;
}
@Override
public IResult<?> saveOrUpdateCertificate(CertificateDo certificateDo) {
IResult<String> result = new ResultSupport<String>(true);
try {
//处理oanpersonId == null的情况
if(certificateDo.getLoanPersonId() == null){
LoanPersonDo personDo = this.getByLoanId(certificateDo.getLoanId());
certificateDo.setLoanPersonId(personDo.getLoanPersonId());
}
//end 处理oanpersonId == null的情况
if(certificateDo.getCertificateId() != null){
loanCertificateComponent.updateCertificate(certificateDo);
}else{
loanCertificateComponent.addCertificate(certificateDo);
}
} catch (Exception e) {
e.printStackTrace();
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
}
return result;
}
/**
* 查询上传的图片资料信息
* @param paraMap
* @return
*/
public CertificateDo getcertificate(Map<String, Object> paraMap){
String loanId = (String)paraMap.get("loanId");
String certificateName = (String)paraMap.get("certificateName");
List<CertificateDo> certificateList = loanCertificateComponent.getCertificateByLoanId(Long.valueOf(loanId));
if(null == certificateList || certificateList.size()<1 ){
return null;
}
for(CertificateDo certificate : certificateList){
if(certificateName.equals(certificate.getCertificateName())){
return certificate;
}
}
return null;
}
/**
* 删除上传的图片资料信息
* @param Long certificateId
* @return
*/
public IResult<?> deleteCertificateById(Long certificateId){
return loanCertificateComponent.deleteCertificateById(certificateId);
}
@Override
public IResult<?> changeloanStatus(LoanPersonDo loanPersonDo) {
IResult<String> result = new ResultSupport<String>(true);
try {
LoanDo loanDo = loanPersonDo.getLoanDo();
String idNo = loanPersonDo.getIdNo();
if(idNo!= null || !("".equals(idNo))) {
BorrowDo borrowDo = borrowComponent.getByIdNo(idNo);
if(borrowDo != null && borrowDo.getId() != null) {
loanDo.setBorrowId(borrowDo.getId());
}
}
if (loanDo != null && loanDo.getLoanId() != null) {
loanComponent.updateLoanDo(loanPersonDo.getLoanDo());
}
} catch (Exception e) {
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
}
return result;
}
/**
* 合约的信息
*
* @param searchItems
* @return
*/
@Override
public NPageDo<LoanPersonDo> queryLoanAuditeds(Map searchItems) {
NPageDo<LoanPersonDo> loanDo = new NPageDo<LoanPersonDo>();
try {
long count = loanPersonComponent.getAuditedTotalCount(searchItems);
loanDo.setTotalCount(count);
if (count == 0) {
return loanDo;
}
List<LoanPersonDo> loanPersonDo = loanPersonComponent.queryLoanAuditeds(searchItems);
loanDo.setModelList(loanPersonDo);
return loanDo;
} catch (Exception e) {
logger.error(e.getMessage(), e);
loanDo.setTotalCount(0l);
return loanDo;
}
}
@Override
public IResult<?> uploadFile(LoanPersonDo loanPersonDo) {
IResult<String> result = new ResultSupport<String>(true);
try {
List<CertificateDo> certificateDoList = loanPersonDo.getCertificateDoList();
if (certificateDoList != null && certificateDoList.size() > 0) {
for (CertificateDo certificateDo : certificateDoList) {
if (certificateDo.getCertificateId() != null) {
loanCertificateComponent.updateCertificate(certificateDo);
} else {
loanCertificateComponent.addCertificate(certificateDo);
}
}
}
} catch (Exception e) {
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
}
return result;
}
/**
* 自动上标
*/
@Override
public IResult<?> loanAutoSubject(LoanPersonDo loanPersonDo) {
IResult<String> result = new ResultSupport<String>(true);
try {
logger.info("-----------------自动上标开始------------------");
logger.info("-----------------自动上标结束------------------");
} catch (Exception e) {
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
}
return result;
}
@Override
public LoanPersonDo initTreatyData(Map<String, Object> searchItems) {
return loanPersonComponent.initTreatyData(searchItems);
}
@Override
public LoanPersonDo getByLoanId(Long loanId) {
return loanPersonComponent.getByLoanId(loanId);
}
@Override
public IResult<?> saveLoanPerson(LoanPersonDo loanPersonDo) {
IResult<String> result = new ResultSupport<String>(true);
try {
loanPersonComponent.saveLoanPerson(loanPersonDo);
} catch (BusinessException e) {
result.setSuccess(false);
result.setErrorMessage(e.getMessage());
logger.warn(e.getMessage(), e);
} catch (Exception e) {
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
}
return result;
}
@Override
public Map<String, Object> getYqsl(Map<String, Object> searchItems) {
Map<String,Object> map = loanPersonComponent.getYqsl(searchItems);
if(map != null){
map.put("slExpectedEarnings", map.get("slExpectedEarnings")+"");
map.put("hyExpectedEarnings", map.get("hyExpectedEarnings")+"");
}
return map;
}
@Override
public NPageDo<LoanPersonDo> getLoanManager(Map<String, Object> searchItems) {
NPageDo<LoanPersonDo> loanDo = new NPageDo<LoanPersonDo>();
try {
long count = loanPersonComponent.getManagerTotalCount(searchItems);
loanDo.setTotalCount(count);
if (count == 0) {
return loanDo;
}
List<LoanPersonDo> loanPersonDo = loanPersonComponent.getLoanManager(searchItems);
loanDo.setModelList(loanPersonDo);
return loanDo;
} catch (Exception e) {
logger.error(e.getMessage(), e);
loanDo.setTotalCount(0l);
return loanDo;
}
}
@Override
public NPageDo<RepaymentDo> getRepayMentByBwId(Long borrowId) {
NPageDo<RepaymentDo> reDo = new NPageDo<RepaymentDo>();
try {
List<RepaymentDo> repaymentDo = loanPersonComponent.getRepayMentByBwId(borrowId);
reDo.setModelList(repaymentDo);
return reDo;
} catch (Exception e) {
logger.error(e.getMessage(), e);
return reDo;
}
}
@Override
public Map<String, Object> getdLYqsl(Map<String, Object> searchItems) {
Map<String,Object> map = loanPersonComponent.getdLYqsl(searchItems);
if(map != null){
map.put("dhExpectedEarnings", map.get("dhExpectedEarnings")+"");
}
return map;
}
@Override
public Map<String, Object> getIncomeManager(Map<String, Object> searchItems) {
Map<String,Object> map = loanPersonComponent.getIncomeManager(searchItems);
if(map != null){
map.put("successDs", map.get("successDs")+"");
map.put("borrowAmount", map.get("borrowAmount")+"");
map.put("hasPI", map.get("hasPI")+"");
map.put("stillPI", map.get("stillPI")+"");
}
return map;
}
@Override
public IResult<?> saveJobInfo(JobDo jobDo) {
//界面注意传 loanId loanPersonId参数
IResult<String> result = new ResultSupport<String>(true);
try{
loanPersonComponent.saveJobInfo(jobDo);
}catch(Exception e){
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
}
return result;
}
@Override
public IResult<?> updateRelations(LoanPersonDo loanPerson) {
IResult<String> result = new ResultSupport<String>(true);
try{
loanPersonComponent.updateRelationList(loanPerson.getLoanRelationDoList(), loanPerson.getLoanId(), loanPerson.getLoanPersonId());
}catch(Exception e){
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
}
return result;
}
@Override
public IResult<?> updatePersonAndLoan(LoanPersonDo loanPersonDo) {
IResult<String> result = new ResultSupport<String>(true);
try {
loanPersonComponent.saveLoanPerson(loanPersonDo);
//借款用途需要更新
if(StringUtils.isNotBlank(loanPersonDo.getLoanUsage())){
LoanDo loanDo= new LoanDo();
loanDo.setLoanId(loanPersonDo.getLoanId());
loanDo.setLoanUsage(loanPersonDo.getLoanUsage());
loanComponent.updateLoanDo(loanDo);
}
} catch (BusinessException e) {
result.setSuccess(false);
result.setErrorMessage(e.getMessage());
logger.warn(e.getMessage(), e);
} catch (Exception e) {
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
}
return result;
}
@Override
public List<LoanPersonDo> queryLoanPersonByApp(
Map<String, Object> searchItems) {
try {
List<LoanPersonDo> loanPersonDo = loanPersonComponent.queryLoanPersonByApp(searchItems);
return loanPersonDo;
} catch (Exception e) {
logger.error(e.getMessage(), e);
//loanDo.setTotalCount(0l);
return null;
}
}
@Override
public Map<String, Object> getSumLoan(Map<String, Object> searchItems) {
Map<String,Object> map = loanPersonComponent.getSumLoan(searchItems);
if(map != null){
map.put("sumIds", map.get("sumIds")!=null?String.valueOf(map.get("sumIds")) : 0 );
map.put("sumApplyAmount", map.get("sumApplyAmount")!=null? String.valueOf(map.get("sumApplyAmount")): 0);
} else{
map =new HashMap<String,Object>();
map.put("sumIds", 0);
map.put("sumApplyAmount", 0);
}
return map;
}
@Override
public Map<String, Object> getSumBorrowing(Map<String, Object> searchItems) {
//repayStatus=1 未还款
searchItems.put("repayStatus", 1);
Map<String,Object> map = loanPersonComponent.getSumBorrowing(searchItems);
searchItems.put("repayStatus", 2);
Map<String,Object> map2 = loanPersonComponent.getSumBorrowing(searchItems);
if(map != null){
Long sumIds = (map.get("sumIds")!=null?(Long)map.get("sumIds") : 0);
map.put("sumIds",sumIds );
map.put("sumBorrowingAmount",map.get("borrowAmount")!=null? String.valueOf(map.get("borrowAmount")): 0);
map.put("sumBorrowedAmount", map2.get("borrowAmount")!=null?String.valueOf(map2.get("borrowAmount")):0);
}else{
map =new HashMap<String,Object>();
map.put("sumIds", 0);
map.put("sumBorrowingAmount", 0);
map.put("sumBorrowedAmount", 0);
}
return map;
}
@Override
public Map<String, Object> getSumBorrowed(Map<String, Object> searchItems) {
Map<String,Object> map = loanPersonComponent.getSumBorrowed(searchItems);
if(map != null){
map.put("sumIds", map.get("sumIds")!=null?String.valueOf(map.get("sumIds")) : 0 );
map.put("sumBorrowAmount",map.get("sumBorrowAmount")!=null?String.valueOf(map.get("sumBorrowAmount")):0);
}else{
map =new HashMap<String,Object>();
map.put("sumIds", 0);
map.put("sumApplyAmount", 0);
}
return map;
}
@Override
public List<LoanPersonDo> queryLoanBorrowByApp(
Map<String, Object> searchItems) {
try{
List<LoanPersonDo> list = loanPersonComponent.queryLoanBorrowByApp(searchItems);
return list;
}catch(Exception e){
logger.error("查询还款订单失败:"+e.getMessage());
return null;
}
}
@Override
public LoanPersonDo getLoanPersonById(Long loanId) {
return loanPersonComponent.getLoanPersonById(loanId);
}
@Override
public int getTotalCount(Map<String, Object> searchItems) {
return loanPersonComponent.getTotalCount(searchItems);
}
@Override
public IResult updateLoanPersonAndChild(LoanPersonDo loanPersonDo) {
IResult<String> result = new ResultSupport<String>(true);
try {
loanPersonComponent.saveLoanPersonChild(loanPersonDo);
} catch (BusinessException e) {
result.setSuccess(false);
result.setErrorMessage(e.getMessage());
logger.warn(e.getMessage(), e);
} catch (Exception e) {
result.setSuccess(false);
result.setErrorMessage("操作失败,请稍后再试!");
logger.error(e.getMessage(), e);
}
return result;
}
}