提交 df71db30 authored 作者: aiqingguo's avatar aiqingguo

承运借款流程

上级 24cc053e
...@@ -117,6 +117,7 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -117,6 +117,7 @@ public enum PerformanceResultEnum implements ResultEnum {
BORROWER_DELETE_ENABLE_ERROR(1702, "无法删除启用数据"), BORROWER_DELETE_ENABLE_ERROR(1702, "无法删除启用数据"),
BORROWER_CONFIG_BORROWER_ID_EXIST(1703, "数据重复,请核实后重新提交"), BORROWER_CONFIG_BORROWER_ID_EXIST(1703, "数据重复,请核实后重新提交"),
BORROWER_CONFIG_DELETE_ENABLE_ERROR(1704, "无法删除启用数据"), BORROWER_CONFIG_DELETE_ENABLE_ERROR(1704, "无法删除启用数据"),
BORROWER_CONFIG_TYPE_NOT_SUPPORT_ERROR(1705, "借款类型不支持"),
NB_BANK_API_ERROR(1800, "宁波银行api调用失败"), NB_BANK_API_ERROR(1800, "宁波银行api调用失败"),
NB_BANK_NOTIFY_ERROR(1801, "宁波银行回调失败"), NB_BANK_NOTIFY_ERROR(1801, "宁波银行回调失败"),
...@@ -125,6 +126,9 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -125,6 +126,9 @@ public enum PerformanceResultEnum implements ResultEnum {
GET_LOAN_RECORD(1901, "货主借款失败"), GET_LOAN_RECORD(1901, "货主借款失败"),
OWNER_LOAN_RECORD_PAY_STATUS_ERROR(1850, "状态已变更无法支付"),
; ;
private final int code; private final int code;
private final String msg; private final String msg;
......
package com.clx.performance.enums.loan;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
public enum BankTradeEnum {
;
@Getter
@AllArgsConstructor
public enum TradeType {
ORDER_DIRECT_PAY(1, "订单支付"),
ORDER_TRANSFER_PAY(2, "转账支付"),
;
private final Integer code;
private final String msg;
public static Optional<TradeType> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> Objects.equals(e.code , code)).findFirst();
}
public static String getMsgByCode(Integer code) {
return getByCode(code).map(TradeType::getMsg).orElse(null);
}
}
@Getter
@AllArgsConstructor
public enum OrderType {
OWNER_LOAN_RECORD(1, "货主借款"),
;
private final Integer code;
private final String msg;
public static Optional<OrderType> getByCode(Integer code) {
return Arrays.stream(values()).filter(e -> Objects.equals(e.code , code)).findFirst();
}
public static String getMsgByCode(Integer code) {
return getByCode(code).map(OrderType::getMsg).orElse(null);
}
}
}
...@@ -54,4 +54,24 @@ public enum OwnerLoanRecordEnum { ...@@ -54,4 +54,24 @@ public enum OwnerLoanRecordEnum {
} }
} }
@Getter
@AllArgsConstructor
public enum PayChannel {
ORDER_DIRECT_PAY(1, "订单支付"),
ORDER_TRANSFER_PAY(2, "转账支付"),
;
private final Integer code;
private final String msg;
public static Optional<PayChannel> getByCode(Integer code) {
return Arrays.stream(values()).filter(e ->Objects.equals(e.code, code)).findFirst();
}
public static String getMsgByCode(Integer code) {
return getByCode(code).map(PayChannel::getMsg).orElse(null);
}
}
} }
...@@ -20,4 +20,8 @@ public class CarrierOwnerLoanRecordApproveParam { ...@@ -20,4 +20,8 @@ public class CarrierOwnerLoanRecordApproveParam {
@ApiModelProperty("1:虚拟货币 2:资金") @ApiModelProperty("1:虚拟货币 2:资金")
private Integer loanType; private Integer loanType;
@ApiModelProperty("支付通道:1订单支付 2转账支付")
private Integer payChannel;
} }
package com.clx.performance.param.pc.loan.carrier;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CarrierOwnerLoanRecordPayCancelParam {
@ApiModelProperty("借款单号")
private Long loanNo;
}
package com.clx.performance.param.pc.loan.carrier;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CarrierOwnerLoanRecordPayParam {
@ApiModelProperty("借款单号")
private Long loanNo;
@ApiModelProperty("支付通道:1订单支付 2转账支付")
private Integer payChannel;
}
package com.clx.performance.param.pc.loan.carrier;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CarrierOwnerLoanRecordRepayParam {
@ApiModelProperty("借款单号")
private Long loanNo;
@ApiModelProperty("支付通道:1订单支付 2转账支付")
private Integer payChannel;
}
package com.clx.performance.controller.pc.loan.carrier; package com.clx.performance.controller.pc.loan.carrier;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.param.pc.loan.carrier.CarrierOwnerLoanRecordApproveParam; import com.clx.performance.param.pc.loan.carrier.*;
import com.clx.performance.param.pc.loan.carrier.PageCarrierOwnerLoanRecordParam;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanRecordOfOwner;
import com.clx.performance.param.pc.loan.owner.ExportPaymentApplicationFormParam; import com.clx.performance.param.pc.loan.owner.ExportPaymentApplicationFormParam;
import com.clx.performance.service.loan.OwnerLoanRecordService; import com.clx.performance.service.loan.OwnerLoanRecordService;
import com.clx.performance.vo.pc.loan.carrier.CarrierCashierInfoVO; import com.clx.performance.vo.pc.loan.carrier.CarrierCashierInfoVO;
...@@ -90,4 +88,25 @@ public class CarrierOwnerLoanRecordController { ...@@ -90,4 +88,25 @@ public class CarrierOwnerLoanRecordController {
return Result.ok(url); return Result.ok(url);
} }
@ApiOperation(value = "借款支付",notes = "<br>By:艾庆国")
@PostMapping("/updateOwnerLoanRecordPay")
public Result<Object> updateOwnerLoanRecordPay(@RequestBody @Validated CarrierOwnerLoanRecordPayParam param) {
ownerLoanRecordService.updateOwnerLoanRecordPay(param);
return Result.ok();
}
@ApiOperation(value = "借款重新支付",notes = "<br>By:艾庆国")
@PostMapping("/updateOwnerLoanRecordRepay")
public Result<Object> updateOwnerLoanRecordRepay(@RequestBody @Validated CarrierOwnerLoanRecordRepayParam param) {
ownerLoanRecordService.updateOwnerLoanRecordRepay(param);
return Result.ok();
}
@ApiOperation(value = "借款支付取消",notes = "<br>By:艾庆国")
@PostMapping("/updateOwnerLoanRecordPayCancel")
public Result<Object> updateOwnerLoanRecordPayCancel(@RequestBody @Validated CarrierOwnerLoanRecordPayCancelParam param) {
ownerLoanRecordService.updateOwnerLoanRecordPayCancel(param);
return Result.ok();
}
} }
package com.clx.performance.dao.impl.loan;
import com.clx.performance.dao.loan.BankTradeDao;
import com.clx.performance.mapper.loan.BankTradeMapper;
import com.clx.performance.model.loan.BankTrade;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Repository;
/**
* @Author: aiqinguo
* @Description:
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Repository
public class BankTradeDaoImpl extends BaseDaoImpl<BankTradeMapper, BankTrade, Integer> implements BankTradeDao {
@Override
public boolean updateStatus(BankTrade item) {
return update(lUdWrapper()
.eq(BankTrade::getId, item.getId())
.set(BankTrade::getStatus, item.getStatus())
);
}
@Override
public Optional<BankTrade> selectByMerchantRunningWaterNo(String merchantRunningWaterNo) {
return Optional.of(merchantRunningWaterNo)
.map(item -> lQrWrapper()
.eq(BankTrade::getMerchantRunningWaterNo, item)
.last("limit 1")
)
.map(super::getOne);
}
}
...@@ -10,6 +10,7 @@ import com.clx.performance.model.loan.OwnerLoanRecord; ...@@ -10,6 +10,7 @@ import com.clx.performance.model.loan.OwnerLoanRecord;
import com.clx.performance.param.pc.loan.carrier.PageCarrierOwnerLoanRecordParam; import com.clx.performance.param.pc.loan.carrier.PageCarrierOwnerLoanRecordParam;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanRecordOfOwner; import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanRecordOfOwner;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanRecordVO; import com.clx.performance.vo.pc.loan.carrier.OwnerLoanRecordVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl; import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -70,5 +71,40 @@ public class OwnerLoanRecordDaoImpl extends BaseDaoImpl<OwnerLoanRecordMapper, O ...@@ -70,5 +71,40 @@ public class OwnerLoanRecordDaoImpl extends BaseDaoImpl<OwnerLoanRecordMapper, O
); );
} }
@Override
public Optional<OwnerLoanRecord> selectByMerchantRunningWaterNo(String merchantRunningWaterNo) {
return Optional.of(merchantRunningWaterNo)
.map(item -> lQrWrapper()
.eq(OwnerLoanRecord::getMerchantRunningWaterNo, item)
)
.map(super::getOne);
}
@Override
public boolean updatePay(OwnerLoanRecord item) {
return update(lUdWrapper()
.eq(OwnerLoanRecord::getId, item.getId())
.set(OwnerLoanRecord::getStatus, item.getStatus())
.set(OwnerLoanRecord::getRunningWaterOpenNo, item.getRunningWaterOpenNo())
.set(OwnerLoanRecord::getMerchantRunningWaterNo, item.getMerchantRunningWaterNo())
.set(OwnerLoanRecord::getRemittanceIdentificationCode, item.getRemittanceIdentificationCode())
.set(OwnerLoanRecord::getLoanResidueBalance, item.getLoanResidueBalance())
.set(OwnerLoanRecord::getLendingParty, item.getLendingParty())
.set(OwnerLoanRecord::getLendingPartyAccount, item.getLendingPartyAccount())
);
}
@Override
public boolean updatePaySuccess(OwnerLoanRecord item) {
return false;
}
@Override
public boolean updatePayFail(OwnerLoanRecord item) {
return false;
}
} }
package com.clx.performance.dao.loan;
import com.clx.performance.mapper.loan.BankTradeMapper;
import com.clx.performance.model.loan.BankTrade;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
/**
* @Author: aiqinguo
* @Description:
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
public interface BankTradeDao extends BaseDao<BankTradeMapper, BankTrade, Integer> {
boolean updateStatus(BankTrade item);
Optional<BankTrade> selectByMerchantRunningWaterNo(String merchantRunningWaterNo);
}
...@@ -6,6 +6,7 @@ import com.clx.performance.model.loan.OwnerLoanRecord; ...@@ -6,6 +6,7 @@ import com.clx.performance.model.loan.OwnerLoanRecord;
import com.clx.performance.param.pc.loan.carrier.PageCarrierOwnerLoanRecordParam; import com.clx.performance.param.pc.loan.carrier.PageCarrierOwnerLoanRecordParam;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanRecordOfOwner; import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanRecordOfOwner;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanRecordVO; import com.clx.performance.vo.pc.loan.carrier.OwnerLoanRecordVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao; import com.msl.common.dao.BaseDao;
import java.util.List; import java.util.List;
...@@ -23,5 +24,10 @@ public interface OwnerLoanRecordDao extends BaseDao<OwnerLoanRecordMapper, Owner ...@@ -23,5 +24,10 @@ public interface OwnerLoanRecordDao extends BaseDao<OwnerLoanRecordMapper, Owner
List<OwnerLoanRecord> selectLoanBalance(Long userNo); List<OwnerLoanRecord> selectLoanBalance(Long userNo);
Optional<OwnerLoanRecord> selectByMerchantRunningWaterNo(String merchantRunningWaterNo);
boolean updatePay(OwnerLoanRecord item);
boolean updatePaySuccess(OwnerLoanRecord item);
boolean updatePayFail(OwnerLoanRecord item);
} }
package com.clx.performance.mapper.loan;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.loan.BankTrade;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author: aiqinguo
* @Description:
* @Date: 2024/01/17 13:42:57
* @Version: 1.0
*/
@Mapper
public interface BankTradeMapper extends BaseMapper<BankTrade> {
}
\ No newline at end of file
package com.clx.performance.model.loan;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.msl.common.config.KeyColumn;
import com.msl.common.model.HasKey;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* @Author: aiqinguo
* @Description:
* @Date: 2024/02/06 15:31:16
* @Version: 1.0
*/
@Getter
@Setter
@NoArgsConstructor
@TableName(autoResultMap = true)
public class BankTrade implements HasKey<Integer> {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; //id
private Integer orderType; //订单类型
private Integer tradeType; //交易类型
private String merchantRunningWaterNo; //商户流水号
private String runningWaterOpenNo; //交易流水号(第三方)
private BigDecimal amount; //金额
private Integer status; //状态
private String remark; //备注
private LocalDateTime createTime; //创建时间
private LocalDateTime modifiedTime; //修改时间
@KeyColumn("id")
@Override
public Integer gainKey() {
return id;
}
}
\ No newline at end of file
...@@ -68,6 +68,10 @@ public class OwnerLoanRecord implements HasKey<Integer> { ...@@ -68,6 +68,10 @@ public class OwnerLoanRecord implements HasKey<Integer> {
@ApiModelProperty("借款剩余金额") @ApiModelProperty("借款剩余金额")
private BigDecimal loanResidueBalance; private BigDecimal loanResidueBalance;
@TableField("borrower_id")
@ApiModelProperty("借款方Id")
private Integer borrowerId;
@TableField("borrower") @TableField("borrower")
@ApiModelProperty("借款方") @ApiModelProperty("借款方")
private String borrower; private String borrower;
......
...@@ -15,19 +15,16 @@ import com.clx.performance.dao.loan.OwnerLoanAccountRunningWaterRecordDao; ...@@ -15,19 +15,16 @@ 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.dto.LoanBalanceDTO; import com.clx.performance.dto.LoanBalanceDTO;
import com.clx.performance.dao.loan.*;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.RunningWaterTypeEnum; import com.clx.performance.enums.RunningWaterTypeEnum;
import com.clx.performance.enums.loan.BankTradeEnum;
import com.clx.performance.enums.loan.OwnerLoanAccountRunningWaterRecordEnum; import com.clx.performance.enums.loan.OwnerLoanAccountRunningWaterRecordEnum;
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.loan.OwnerLoanAccount; import com.clx.performance.model.loan.*;
import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord; import com.clx.performance.param.pc.loan.carrier.*;
import com.clx.performance.model.loan.OwnerLoanRecord;
import com.clx.performance.model.loan.OwnerRepayment;
import com.clx.performance.param.pc.loan.carrier.CarrierOwnerLoanRecordApproveParam;
import com.clx.performance.param.pc.loan.carrier.PageCarrierOwnerLoanRecordParam;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanRecordOfOwner;
import com.clx.performance.param.pc.loan.owner.ExportPaymentApplicationFormParam; import com.clx.performance.param.pc.loan.owner.ExportPaymentApplicationFormParam;
import com.clx.performance.param.pc.loan.owner.OwnerLoanRecordParam; import com.clx.performance.param.pc.loan.owner.OwnerLoanRecordParam;
import com.clx.performance.service.loan.OwnerLoanRecordService; import com.clx.performance.service.loan.OwnerLoanRecordService;
...@@ -76,6 +73,7 @@ import java.util.stream.Collectors; ...@@ -76,6 +73,7 @@ import java.util.stream.Collectors;
@AllArgsConstructor @AllArgsConstructor
public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
private final BorrowerConfigDao borrowerConfigDao;
private final OwnerLoanRecordDao ownerLoanRecordDao; private final OwnerLoanRecordDao ownerLoanRecordDao;
private final OwnerLoanRecordStruct ownerLoanRecordStruct; private final OwnerLoanRecordStruct ownerLoanRecordStruct;
...@@ -94,6 +92,8 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -94,6 +92,8 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
private final BorrowerDao borrowerDao; private final BorrowerDao borrowerDao;
private final BankTradeDao bankTradeDao;
private final OwnerFeign ownerFeign; private final OwnerFeign ownerFeign;
private final ContractEvidenceFeign contractEvidenceFeign; private final ContractEvidenceFeign contractEvidenceFeign;
...@@ -143,17 +143,52 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -143,17 +143,52 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
public void ownerLoanRecordApprove(CarrierOwnerLoanRecordApproveParam param) { public void ownerLoanRecordApprove(CarrierOwnerLoanRecordApproveParam param) {
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, param.getLoanNo()).get(); OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, param.getLoanNo()).get();
if (param.getStatus()) { if (param.getStatus()) {
borrowerConfigDao.selectByBorrowerIdAndType(ownerLoanRecord.getBorrowerId(), param.getLoanType())
.orElseThrow(PerformanceResultEnum.BORROWER_CONFIG_TYPE_NOT_SUPPORT_ERROR);
Borrower borrower = borrowerDao.getEntityByKey(ownerLoanRecord.getBorrowerId())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
//同意 //同意
ownerLoanRecord.setLoanType(param.getLoanType()); ownerLoanRecord.setLoanType(param.getLoanType());
if (OwnerLoanRecordEnum.LoanType.FUND.getCode().equals(param.getLoanType())) { if (OwnerLoanRecordEnum.LoanType.FUND.getCode().equals(param.getLoanType())) {
//资金 TODO 调宁波银企直连的产品,从诚联信账户中给鑫祥和执行转账 //资金 TODO 调宁波银企直连的产品,从诚联信账户中给鑫祥和执行转账
NbBankOrderPayResultVO orderPayResultVO = bankService.orderDirectPay(param.getLoanNo(), BankTrade bankTrade = new BankTrade();
ownerLoanRecord.getLoanBalance().intValue(), "", "", ""); if (OwnerLoanRecordEnum.PayChannel.ORDER_DIRECT_PAY.getCode().equals(param.getPayChannel())) {
ownerLoanRecord.setRunningWaterOpenNo(orderPayResultVO.getTransSeqNo()); // 订单支付
ownerLoanRecord.setMerchantRunningWaterNo(orderPayResultVO.getMerSeqNo()); NbBankOrderPayResultVO orderPayResultVO = bankService.orderDirectPay(param.getLoanNo(),
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAYING.getCode()); ownerLoanRecord.getLoanBalance().intValue(), borrower.getOpenBankId(), borrower.getBankCardNo(), borrower.getName());
ownerLoanRecord.setLoanResidueBalance(ownerLoanRecord.getLoanBalance()); ownerLoanRecord.setRunningWaterOpenNo(orderPayResultVO.getTransSeqNo());
ownerLoanRecord.setMerchantRunningWaterNo(orderPayResultVO.getMerSeqNo());
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAYING.getCode());
ownerLoanRecord.setLoanResidueBalance(ownerLoanRecord.getLoanBalance());
ownerLoanRecord.setLendingParty(borrower.getName());
ownerLoanRecord.setLendingPartyAccount(borrower.getBankCardNo());
bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_DIRECT_PAY.getCode());
}
else {
// 转账支付
NbBankOrderPayResultVO orderPayResultVO = bankService.orderTransferPay(ownerLoanRecord.getLoanBalance().intValue());
ownerLoanRecord.setRunningWaterOpenNo(orderPayResultVO.getTransSeqNo());
ownerLoanRecord.setMerchantRunningWaterNo(orderPayResultVO.getMerSeqNo());
ownerLoanRecord.setRemittanceIdentificationCode(orderPayResultVO.getSignNo());
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAYING.getCode());
ownerLoanRecord.setLoanResidueBalance(ownerLoanRecord.getLoanBalance());
bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_TRANSFER_PAY.getCode());
}
// 更新借款支付信息
ownerLoanRecordDao.updatePay(ownerLoanRecord);
bankTrade.setOrderType(BankTradeEnum.OrderType.OWNER_LOAN_RECORD.getCode());
bankTrade.setAmount(ownerLoanRecord.getLoanBalance());
bankTrade.setMerchantRunningWaterNo(ownerLoanRecord.getMerchantRunningWaterNo());
bankTrade.setRunningWaterOpenNo(ownerLoanRecord.getRunningWaterOpenNo());
// 保存银行交易记录
bankTradeDao.saveEntity(bankTrade);
} else { } else {
// 虚拟币 直接增加 更改状态审批通过 // 虚拟币 直接增加 更改状态审批通过
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.APPROVE_PASS.getCode()); ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.APPROVE_PASS.getCode());
...@@ -372,6 +407,110 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -372,6 +407,110 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
} }
@Override
public void updateOwnerLoanRecordPay(CarrierOwnerLoanRecordPayParam param) {
}
@Override
public void updateOwnerLoanRecordRepay(CarrierOwnerLoanRecordRepayParam param) {
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, param.getLoanNo())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (!Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAY_FAIL.getCode())){
throw new ServiceSystemException(PerformanceResultEnum.OWNER_LOAN_RECORD_PAY_STATUS_ERROR);
}
borrowerConfigDao.selectByBorrowerIdAndType(ownerLoanRecord.getBorrowerId(), OwnerLoanRecordEnum.LoanType.FUND.getCode())
.orElseThrow(PerformanceResultEnum.BORROWER_CONFIG_TYPE_NOT_SUPPORT_ERROR);
Borrower borrower = borrowerDao.getEntityByKey(ownerLoanRecord.getBorrowerId())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
BankTrade bankTrade = new BankTrade();
if (OwnerLoanRecordEnum.PayChannel.ORDER_DIRECT_PAY.getCode().equals(param.getPayChannel())) {
//资金 TODO 调宁波银企直连的产品,从诚联信账户中给鑫祥和执行转账
// 订单支付
NbBankOrderPayResultVO orderPayResultVO = bankService.orderDirectPay(param.getLoanNo(),
ownerLoanRecord.getLoanBalance().intValue(), borrower.getOpenBankId(), borrower.getBankCardNo(), borrower.getName());
ownerLoanRecord.setRunningWaterOpenNo(orderPayResultVO.getTransSeqNo());
ownerLoanRecord.setMerchantRunningWaterNo(orderPayResultVO.getMerSeqNo());
ownerLoanRecord.setRemittanceIdentificationCode(null);
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAYING.getCode());
ownerLoanRecord.setLoanResidueBalance(ownerLoanRecord.getLoanBalance());
ownerLoanRecord.setLendingParty(borrower.getName());
ownerLoanRecord.setLendingPartyAccount(borrower.getBankCardNo());
bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_DIRECT_PAY.getCode());
}
else {
//资金 TODO 调宁波银企直连的产品,从诚联信账户中给鑫祥和执行转账
// 转账支付
NbBankOrderPayResultVO orderPayResultVO = bankService.orderTransferPay(ownerLoanRecord.getLoanBalance().intValue());
ownerLoanRecord.setRunningWaterOpenNo(orderPayResultVO.getTransSeqNo());
ownerLoanRecord.setMerchantRunningWaterNo(orderPayResultVO.getMerSeqNo());
ownerLoanRecord.setRemittanceIdentificationCode(orderPayResultVO.getSignNo());
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAYING.getCode());
ownerLoanRecord.setLoanResidueBalance(ownerLoanRecord.getLoanBalance());
ownerLoanRecord.setLendingParty(null);
ownerLoanRecord.setLendingPartyAccount(null);
bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_TRANSFER_PAY.getCode());
}
// 更新借款支付信息
ownerLoanRecordDao.updatePay(ownerLoanRecord);
bankTrade.setOrderType(BankTradeEnum.OrderType.OWNER_LOAN_RECORD.getCode());
bankTrade.setAmount(ownerLoanRecord.getLoanBalance());
bankTrade.setMerchantRunningWaterNo(ownerLoanRecord.getMerchantRunningWaterNo());
bankTrade.setRunningWaterOpenNo(ownerLoanRecord.getRunningWaterOpenNo());
// 保存银行交易记录
bankTradeDao.saveEntity(bankTrade);
}
@Override
public void updateOwnerLoanRecordPayCancel(CarrierOwnerLoanRecordPayCancelParam param) {
}
@Override
public void payFail(String loanNo){
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, loanNo)
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAYING.getCode())){
log.info("借款单非支付中状态, loanNo:{}", loanNo);
return;
}
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAY_FAIL.getCode());
ownerLoanRecordDao.updatePaySuccess(ownerLoanRecord);
}
@Override
public void paySuccess(String loanNo){
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, loanNo)
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAYING.getCode())){
log.info("借款单非支付中状态, loanNo:{}", loanNo);
return;
}
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAY_SUCCESS.getCode());
ownerLoanRecordDao.updatePaySuccess(ownerLoanRecord);
}
public void generateFrozenOwnerLoanRunningWater(OwnerLoanRecord ownerLoanRecord, String childNo, BigDecimal orderChildPrice) { public void generateFrozenOwnerLoanRunningWater(OwnerLoanRecord ownerLoanRecord, String childNo, BigDecimal orderChildPrice) {
log.info("13.生成借款冻结流水"); log.info("13.生成借款冻结流水");
OwnerLoanAccount update = new OwnerLoanAccount(); OwnerLoanAccount update = new OwnerLoanAccount();
......
...@@ -2,8 +2,12 @@ package com.clx.performance.service.impl.thirdparty.nbbank; ...@@ -2,8 +2,12 @@ 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.dao.loan.BankTradeDao;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.loan.BankTradeEnum;
import com.clx.performance.enums.nbbank.NbBankStatusEnum; import com.clx.performance.enums.nbbank.NbBankStatusEnum;
import com.clx.performance.model.loan.BankTrade;
import com.clx.performance.service.loan.OwnerLoanRecordService;
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;
...@@ -16,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -16,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Objects;
/** /**
* 易付通 * 易付通
...@@ -24,12 +29,18 @@ import java.math.BigDecimal; ...@@ -24,12 +29,18 @@ import java.math.BigDecimal;
@Service @Service
public class NbBankServiceImpl implements NbBankService { public class NbBankServiceImpl implements NbBankService {
@Autowired
private BankTradeDao bankTradeDao;
@Autowired @Autowired
private NbBankThirdpartyService bankThirdpartyService; private NbBankThirdpartyService bankThirdpartyService;
@Autowired @Autowired
private IdGenerateSnowFlake idGenerateSnowFlake; private IdGenerateSnowFlake idGenerateSnowFlake;
@Autowired
private OwnerLoanRecordService ownerLoanRecordService;
/** /**
* 转账支付 * 转账支付
...@@ -214,6 +225,29 @@ public class NbBankServiceImpl implements NbBankService { ...@@ -214,6 +225,29 @@ public class NbBankServiceImpl implements NbBankService {
log.info("宁波银行支付回调, merSeqNo:{}, transSeqNo:{}, trxAmt:{}, realTrxAmt:{}, transSeqNo:{}, signNo:{}", log.info("宁波银行支付回调, merSeqNo:{}, transSeqNo:{}, trxAmt:{}, realTrxAmt:{}, transSeqNo:{}, signNo:{}",
merSeqNo, transSeqNo, trxAmt, realTrxAmt, transStatus, signNo); merSeqNo, transSeqNo, trxAmt, realTrxAmt, transStatus, signNo);
BankTrade bankTrade = bankTradeDao.selectByMerchantRunningWaterNo(merSeqNo).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
bankTrade.setStatus(transStatus);
// 更新状态
bankTradeDao.updateStatus(bankTrade);
// 货主借款支付回调
if (Objects.equals(bankTrade.getOrderType(), BankTradeEnum.OrderType.OWNER_LOAN_RECORD.getCode())){
if (Objects.equals(transStatus, NbBankStatusEnum.Status.SUCCESS.getCode())) {
ownerLoanRecordService.paySuccess(merSeqNo);
}
else if (Objects.equals(transStatus, NbBankStatusEnum.Status.FAIL.getCode())) {
ownerLoanRecordService.payFail(merSeqNo);
}
else {
// TODO 其它情况
}
}
else {
}
} }
/** /**
......
...@@ -2,16 +2,14 @@ package com.clx.performance.service.loan; ...@@ -2,16 +2,14 @@ package com.clx.performance.service.loan;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dto.LoanBalanceDTO; import com.clx.performance.dto.LoanBalanceDTO;
import com.clx.performance.param.pc.loan.carrier.CarrierOwnerLoanRecordApproveParam; import com.clx.performance.param.pc.loan.carrier.*;
import com.clx.performance.param.pc.loan.carrier.PageCarrierOwnerLoanRecordParam;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanRecordOfOwner;
import com.clx.performance.param.pc.loan.owner.ExportPaymentApplicationFormParam; import com.clx.performance.param.pc.loan.owner.ExportPaymentApplicationFormParam;
import com.clx.performance.param.pc.loan.owner.OwnerLoanRecordParam; import com.clx.performance.param.pc.loan.owner.OwnerLoanRecordParam;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanRecordVO;
import com.clx.performance.vo.pc.loan.carrier.CarrierCashierInfoVO; import com.clx.performance.vo.pc.loan.carrier.CarrierCashierInfoVO;
import com.clx.performance.vo.pc.loan.carrier.CarrierTransferPaymentDetailVO;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanRecordVO;
import com.clx.performance.vo.pc.loan.carrier.OwnerOrderPaymentDetailVO; import com.clx.performance.vo.pc.loan.carrier.OwnerOrderPaymentDetailVO;
import com.clx.performance.vo.pc.loan.owner.OwnerLoanRecordDetail; import com.clx.performance.vo.pc.loan.owner.OwnerLoanRecordDetail;
import com.clx.performance.vo.pc.loan.carrier.CarrierTransferPaymentDetailVO;
...@@ -40,4 +38,11 @@ public interface OwnerLoanRecordService { ...@@ -40,4 +38,11 @@ public interface OwnerLoanRecordService {
String savePaymentApplicationForm(ExportPaymentApplicationFormParam param); String savePaymentApplicationForm(ExportPaymentApplicationFormParam param);
void getLoanBalance(LoanBalanceDTO param); void getLoanBalance(LoanBalanceDTO param);
void updateOwnerLoanRecordPay(CarrierOwnerLoanRecordPayParam param);
void updateOwnerLoanRecordRepay(CarrierOwnerLoanRecordRepayParam param);
void updateOwnerLoanRecordPayCancel(CarrierOwnerLoanRecordPayCancelParam param);
void payFail(String loanNo);
void paySuccess(String loanNo);
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论