提交 86aa7059 authored 作者: huyufan's avatar huyufan

借款相关

上级 1c8ae207
...@@ -119,6 +119,7 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -119,6 +119,7 @@ public enum PerformanceResultEnum implements ResultEnum {
NB_BANK_API_ERROR(1800, "宁波银行api调用失败"), NB_BANK_API_ERROR(1800, "宁波银行api调用失败"),
NB_BANK_NOTIFY_ERROR(1801, "宁波银行回调失败"), NB_BANK_NOTIFY_ERROR(1801, "宁波银行回调失败"),
NB_BANK_PAY_TYPE_ERROR(1802, "支付方式不支持"), NB_BANK_PAY_TYPE_ERROR(1802, "支付方式不支持"),
NB_BANK_ORDER_PAY_ERROR(1803, "宁波银行订单支付失败"),
; ;
private final int code; private final int code;
......
...@@ -19,7 +19,9 @@ public enum RunningWaterTypeEnum { ...@@ -19,7 +19,9 @@ public enum RunningWaterTypeEnum {
TAKE_OUT(40, "扣除"), TAKE_OUT(40, "扣除"),
CASE_OUT_FROZEN(50, "提现冻结"), CASE_OUT_FROZEN(50, "提现冻结"),
CASE_OUT_SUCCESS(60, "提现成功"), CASE_OUT_SUCCESS(60, "提现成功"),
CASE_OUT_FAIL(70, "提现失败") CASE_OUT_FAIL(70, "提现失败"),
ORDER_CHILD_WRITE_OFF(80, "运单核销"),
LOAN(90, "借款"),
; ;
private final Integer code; private final Integer code;
private final String msg; private final String msg;
......
...@@ -37,7 +37,7 @@ public class TempBankController { ...@@ -37,7 +37,7 @@ public class TempBankController {
@RequestMapping(value = "/orderDirectPay", method = RequestMethod.POST) @RequestMapping(value = "/orderDirectPay", method = RequestMethod.POST)
public Result<NbBankOrderPayResultVO> orderDirectPay() { public Result<NbBankOrderPayResultVO> orderDirectPay() {
return Result.ok(bankService.orderDirectPay(2,"313332082914","86041110000076809", "黑玫瑰")); return Result.ok(bankService.orderDirectPay(null,2,"313332082914","86041110000076809", "黑玫瑰"));
} }
@ApiOperation(value = "查询", notes = "<br>By:艾庆国") @ApiOperation(value = "查询", notes = "<br>By:艾庆国")
......
...@@ -30,7 +30,7 @@ public class OwnerLoanAccountRunningWaterRecord implements HasKey<Integer> { ...@@ -30,7 +30,7 @@ public class OwnerLoanAccountRunningWaterRecord implements HasKey<Integer> {
@TableField("owner_user_no") @TableField("owner_user_no")
@ApiModelProperty("货主编码") @ApiModelProperty("货主编码")
private String ownerUserNo; private Long ownerUserNo;
@TableField("owner_user_name") @TableField("owner_user_name")
@ApiModelProperty("货主名称") @ApiModelProperty("货主名称")
......
...@@ -5,12 +5,16 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -5,12 +5,16 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.component.IdGenerateSnowFlake; import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.dao.OwnerBindCardRecordDao; import com.clx.performance.dao.OwnerBindCardRecordDao;
import com.clx.performance.dao.loan.OwnerLoanAccountDao; import com.clx.performance.dao.loan.OwnerLoanAccountDao;
import com.clx.performance.dao.loan.OwnerLoanAccountRunningWaterRecordDao;
import com.clx.performance.dao.loan.OwnerLoanRecordDao; import com.clx.performance.dao.loan.OwnerLoanRecordDao;
import com.clx.performance.dao.loan.OwnerRepaymentDao; import com.clx.performance.dao.loan.OwnerRepaymentDao;
import com.clx.performance.enums.RunningWaterTypeEnum;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum; import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.enums.loan.OwnerRePaymentEnum; import com.clx.performance.enums.loan.OwnerRePaymentEnum;
import com.clx.performance.model.OwnerBindCardRecord; import com.clx.performance.model.OwnerBindCardRecord;
import com.clx.performance.model.OwnerRunningWaterRecord;
import com.clx.performance.model.loan.OwnerLoanAccount; import com.clx.performance.model.loan.OwnerLoanAccount;
import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord;
import com.clx.performance.model.loan.OwnerLoanRecord; import com.clx.performance.model.loan.OwnerLoanRecord;
import com.clx.performance.model.loan.OwnerRepayment; import com.clx.performance.model.loan.OwnerRepayment;
import com.clx.performance.param.pc.loan.carrier.CarrierOwnerLoanRecordApproveParam; import com.clx.performance.param.pc.loan.carrier.CarrierOwnerLoanRecordApproveParam;
...@@ -57,6 +61,8 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -57,6 +61,8 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
private final NbBankService bankService; private final NbBankService bankService;
private final OwnerLoanAccountRunningWaterRecordDao ownerLoanAccountRunningWaterRecordDao;
@Override @Override
public IPage<OwnerLoanRecordVO> pageOwnerLoanRecord(PageCarrierOwnerLoanRecordParam param) { public IPage<OwnerLoanRecordVO> pageOwnerLoanRecord(PageCarrierOwnerLoanRecordParam param) {
IPage<OwnerLoanRecord> page = ownerLoanRecordDao.pageOwnerLoanRecord(param); IPage<OwnerLoanRecord> page = ownerLoanRecordDao.pageOwnerLoanRecord(param);
...@@ -107,53 +113,76 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -107,53 +113,76 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
if (OwnerLoanRecordEnum.LoanType.FUND.getCode().equals(param.getLoanType())) { if (OwnerLoanRecordEnum.LoanType.FUND.getCode().equals(param.getLoanType())) {
//资金 TODO 调中信银企直连的产品,从诚联信账户中给鑫祥和执行转账 //资金 TODO 调中信银企直连的产品,从诚联信账户中给鑫祥和执行转账
NbBankOrderPayResultVO orderPayResultVO = bankService.orderDirectPay(null, "", "", ""); NbBankOrderPayResultVO orderPayResultVO = bankService.orderDirectPay(param.getLoanNo() ,
ownerLoanRecord.getLoanBalance().intValue(), "", "", "");
ownerLoanRecord.setRunningWaterOpenNo(orderPayResultVO.getTransSeqNo()); ownerLoanRecord.setRunningWaterOpenNo(orderPayResultVO.getTransSeqNo());
ownerLoanRecord.setMerchantRunningWaterNo(orderPayResultVO.getMerSeqNo()); ownerLoanRecord.setMerchantRunningWaterNo(orderPayResultVO.getMerSeqNo());
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAYING.getCode()); ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAYING.getCode());
//创建还款记录
OwnerRepayment ownerRepayment = initOwnerRepayment(ownerLoanRecord);
ownerRepaymentDao.saveEntity(ownerRepayment);
ownerLoanRecordDao.updateEntityByKey(ownerLoanRecord);
} else { } else {
// 虚拟币 直接增加 更改状态审批通过
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.APPROVE_PASS.getCode()); ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.APPROVE_PASS.getCode());
}
// 虚拟币 直接增加
Long ownerUserNo = ownerLoanRecord.getOwnerUserNo();
BigDecimal loanBalance = ownerLoanRecord.getLoanBalance();
while (true) { while (true) {
OwnerLoanAccount ownerLoanAccount = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo, ownerUserNo).get(); OwnerLoanAccount ownerLoanAccount = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo,
ownerLoanRecord.getOwnerUserNo()).get();
OwnerLoanAccount entity = new OwnerLoanAccount(); OwnerLoanAccount entity = new OwnerLoanAccount();
entity.setId(ownerLoanAccount.getId()); entity.setId(ownerLoanAccount.getId());
entity.setVirtuallyAmount(loanBalance); entity.setVirtuallyAmount(ownerLoanRecord.getLoanBalance());
entity.setFundingAmount(BigDecimal.ZERO); entity.setFundingAmount(BigDecimal.ZERO);
entity.setModifiedTime(ownerLoanAccount.getModifiedTime()); entity.setModifiedTime(ownerLoanAccount.getModifiedTime());
Integer flag = ownerLoanAccountDao.updateAccountCAS(entity, LocalDateTime.now(), true); Integer flag = ownerLoanAccountDao.updateAccountCAS(entity, LocalDateTime.now(), true);
if (flag == 1) { if (flag == 1) {
ownerLoanRecordDao.updateEntityByKey(ownerLoanRecord); //生成借款流水
return; initOwnerLoanRunningWaterRecord(ownerLoanRecord);
//生成还款记录
initOwnerRepayment(ownerLoanRecord);
break;
} }
} }
}
} else { } else {
//拒绝 //拒绝
ownerLoanRecord.setLoanType(param.getLoanType());
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.APPROVE_REFUSE.getCode());
} }
//更新借款记录
ownerLoanRecordDao.updateEntityByKey(ownerLoanRecord);
} }
@Override @Override
public IPage<OwnerLoanRecordVO> pageOwnerLoanRecordOfOwner(PageOwnerLoanRecordOfOwner param) { public IPage<OwnerLoanRecordVO> pageOwnerLoanRecordOfOwner(PageOwnerLoanRecordOfOwner param) {
return ownerLoanRecordDao.pageByParam(param); return ownerLoanRecordDao.pageByParam(param);
} }
private OwnerRepayment initOwnerRepayment(OwnerLoanRecord ownerLoanRecord) { /**
* 生成借款流水
* @param ownerLoanRecord
*/
private void initOwnerLoanRunningWaterRecord(OwnerLoanRecord ownerLoanRecord) {
OwnerLoanAccount ownerLoanAccount;
ownerLoanAccount = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo, ownerLoanRecord.getOwnerUserNo()).get();
ownerLoanRecordDao.updateEntityByKey(ownerLoanRecord);
OwnerLoanAccountRunningWaterRecord record = new OwnerLoanAccountRunningWaterRecord()
.setOwnerUserNo(ownerLoanRecord.getOwnerUserNo())
.setOwnerUserName(ownerLoanRecord.getOwnerUserName())
.setMobile(ownerLoanRecord.getMobile())
.setRunningWaterNo(idGenerateSnowFlake.nextId(2L))
.setLoanNo(ownerLoanRecord.getLoanNo())
.setRunningWaterType(RunningWaterTypeEnum.Status.LOAN.getCode())
.setAlterationBalance(ownerLoanRecord.getLoanBalance())
.setAccountBalance(ownerLoanAccount.getFundingAmount().add(ownerLoanAccount.getVirtuallyAmount()))
.setCreateBy("系统");
ownerLoanAccountRunningWaterRecordDao.saveEntity(record);
}
/**
* 生成还款记录
* @param ownerLoanRecord
*/
private void initOwnerRepayment(OwnerLoanRecord ownerLoanRecord) {
OwnerRepayment ownerRepayment = new OwnerRepayment(); OwnerRepayment ownerRepayment = new OwnerRepayment();
ownerRepayment.setLoanRepaymentTime(ownerLoanRecord.getLoanRepaymentTime()); ownerRepayment.setLoanRepaymentTime(ownerLoanRecord.getLoanRepaymentTime());
ownerRepayment.setMobile(ownerLoanRecord.getMobile()); ownerRepayment.setMobile(ownerLoanRecord.getMobile());
...@@ -173,6 +202,6 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -173,6 +202,6 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
ownerRepayment.setBeOverdue(OwnerRePaymentEnum.BeOverdue.NO.getCode()); ownerRepayment.setBeOverdue(OwnerRePaymentEnum.BeOverdue.NO.getCode());
ownerRepayment.setCreateBy("系统"); ownerRepayment.setCreateBy("系统");
ownerRepayment.setStatus(OwnerRePaymentEnum.Status.PAY_WAIT.getCode()); ownerRepayment.setStatus(OwnerRePaymentEnum.Status.PAY_WAIT.getCode());
return ownerRepayment; ownerRepaymentDao.saveEntity(ownerRepayment);
} }
} }
...@@ -2,11 +2,13 @@ package com.clx.performance.service.impl.thirdparty.nbbank; ...@@ -2,11 +2,13 @@ package com.clx.performance.service.impl.thirdparty.nbbank;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.clx.performance.component.IdGenerateSnowFlake; import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.service.thirdparty.nbbank.NbBankService; import com.clx.performance.service.thirdparty.nbbank.NbBankService;
import com.clx.performance.service.thirdparty.nbbank.NbBankThirdpartyService; import com.clx.performance.service.thirdparty.nbbank.NbBankThirdpartyService;
import com.clx.performance.utils.LocalDateTimeUtils; import com.clx.performance.utils.LocalDateTimeUtils;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO; import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderResultVO; import com.clx.performance.vo.pc.nbbank.NbBankOrderResultVO;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -36,7 +38,7 @@ public class NbBankServiceImpl implements NbBankService { ...@@ -36,7 +38,7 @@ public class NbBankServiceImpl implements NbBankService {
*/ */
@Override @Override
public NbBankOrderPayResultVO orderTransferPay(Integer amount) { public NbBankOrderPayResultVO orderTransferPay(Integer amount) {
String merSeqNo = merSeqNoGenerate(); String merSeqNo = idGenerateSnowFlake.nextIdToString(3L);
String merDtTm = LocalDateTimeUtils.formatTime(); String merDtTm = LocalDateTimeUtils.formatTime();
JSONObject data = bankThirdpartyService.directBankTransferOrder(merSeqNo, merDtTm, amount); JSONObject data = bankThirdpartyService.directBankTransferOrder(merSeqNo, merDtTm, amount);
...@@ -56,13 +58,14 @@ public class NbBankServiceImpl implements NbBankService { ...@@ -56,13 +58,14 @@ public class NbBankServiceImpl implements NbBankService {
/** /**
* 订单支付 * 订单支付
* @param loanNo 借款单号
* @param amount 金额分 * @param amount 金额分
* @param payAcctOpenBankId 开户行号 * @param payAcctOpenBankId 开户行号
* @param payAcctNo 付款账号 * @param payAcctNo 付款账号
* @param payAcctNm 付款户名 * @param payAcctNm 付款户名
*/ */
@Override @Override
public NbBankOrderPayResultVO orderDirectPay(Integer amount, public NbBankOrderPayResultVO orderDirectPay(Long loanNo, Integer amount,
String payAcctOpenBankId, String payAcctNo, String payAcctNm) { String payAcctOpenBankId, String payAcctNo, String payAcctNm) {
String merSeqNo = idGenerateSnowFlake.nextIdToString(3L); String merSeqNo = idGenerateSnowFlake.nextIdToString(3L);
...@@ -71,6 +74,10 @@ public class NbBankServiceImpl implements NbBankService { ...@@ -71,6 +74,10 @@ public class NbBankServiceImpl implements NbBankService {
payAcctOpenBankId,payAcctNo, payAcctNm); payAcctOpenBankId,payAcctNo, payAcctNm);
String transSeqNo = data.getString("transSeqNo"); String transSeqNo = data.getString("transSeqNo");
if (StringUtils.isBlank(transSeqNo)) {
log.info("宁波银行订单支付失败,借款单号{},返回结果:{}", loanNo, data);
throw new ServiceSystemException(PerformanceResultEnum.NB_BANK_ORDER_PAY_ERROR);
}
NbBankOrderPayResultVO result = new NbBankOrderPayResultVO(); NbBankOrderPayResultVO result = new NbBankOrderPayResultVO();
result.setAmount(amount); result.setAmount(amount);
result.setMerDtTm(merDtTm); result.setMerDtTm(merDtTm);
...@@ -152,7 +159,7 @@ public class NbBankServiceImpl implements NbBankService { ...@@ -152,7 +159,7 @@ public class NbBankServiceImpl implements NbBankService {
*/ */
@Override @Override
public NbBankOrderResultVO refund(String orgMerSeqNo, Integer amount, String orgTransSeqNo) { public NbBankOrderResultVO refund(String orgMerSeqNo, Integer amount, String orgTransSeqNo) {
String merSeqNo = merSeqNoGenerate(); String merSeqNo = idGenerateSnowFlake.nextIdToString(3L);
String merDtTm = LocalDateTimeUtils.formatTime(); String merDtTm = LocalDateTimeUtils.formatTime();
JSONObject data = bankThirdpartyService.refund(merSeqNo, merDtTm, amount, JSONObject data = bankThirdpartyService.refund(merSeqNo, merDtTm, amount,
...@@ -217,11 +224,4 @@ public class NbBankServiceImpl implements NbBankService { ...@@ -217,11 +224,4 @@ public class NbBankServiceImpl implements NbBankService {
} }
/**
* 创建流水号
*/
private String merSeqNoGenerate(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
}
} }
...@@ -10,7 +10,7 @@ public interface NbBankService { ...@@ -10,7 +10,7 @@ public interface NbBankService {
NbBankOrderPayResultVO orderTransferPay(Integer amount); NbBankOrderPayResultVO orderTransferPay(Integer amount);
NbBankOrderPayResultVO orderDirectPay(Integer amount, NbBankOrderPayResultVO orderDirectPay(Long loanNo,Integer amount,
String payAcctOpenBankId, String payAcctNo, String payAcctNm); String payAcctOpenBankId, String payAcctNo, String payAcctNm);
NbBankOrderResultVO getResult(String merSeqNo); NbBankOrderResultVO getResult(String merSeqNo);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论