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

承运借款流程

上级 24cc053e
......@@ -117,6 +117,7 @@ public enum PerformanceResultEnum implements ResultEnum {
BORROWER_DELETE_ENABLE_ERROR(1702, "无法删除启用数据"),
BORROWER_CONFIG_BORROWER_ID_EXIST(1703, "数据重复,请核实后重新提交"),
BORROWER_CONFIG_DELETE_ENABLE_ERROR(1704, "无法删除启用数据"),
BORROWER_CONFIG_TYPE_NOT_SUPPORT_ERROR(1705, "借款类型不支持"),
NB_BANK_API_ERROR(1800, "宁波银行api调用失败"),
NB_BANK_NOTIFY_ERROR(1801, "宁波银行回调失败"),
......@@ -125,6 +126,9 @@ public enum PerformanceResultEnum implements ResultEnum {
GET_LOAN_RECORD(1901, "货主借款失败"),
OWNER_LOAN_RECORD_PAY_STATUS_ERROR(1850, "状态已变更无法支付"),
;
private final int code;
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 {
}
}
@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 {
@ApiModelProperty("1:虚拟货币 2:资金")
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;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.carrier.*;
import com.clx.performance.param.pc.loan.owner.ExportPaymentApplicationFormParam;
import com.clx.performance.service.loan.OwnerLoanRecordService;
import com.clx.performance.vo.pc.loan.carrier.CarrierCashierInfoVO;
......@@ -90,4 +88,25 @@ public class CarrierOwnerLoanRecordController {
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;
import com.clx.performance.param.pc.loan.carrier.PageCarrierOwnerLoanRecordParam;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanRecordOfOwner;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanRecordVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.impl.BaseDaoImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
......@@ -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;
import com.clx.performance.param.pc.loan.carrier.PageCarrierOwnerLoanRecordParam;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanRecordOfOwner;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanRecordVO;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import java.util.List;
......@@ -23,5 +24,10 @@ public interface OwnerLoanRecordDao extends BaseDao<OwnerLoanRecordMapper, Owner
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> {
@ApiModelProperty("借款剩余金额")
private BigDecimal loanResidueBalance;
@TableField("borrower_id")
@ApiModelProperty("借款方Id")
private Integer borrowerId;
@TableField("borrower")
@ApiModelProperty("借款方")
private String borrower;
......
......@@ -2,8 +2,12 @@ package com.clx.performance.service.impl.thirdparty.nbbank;
import com.alibaba.fastjson.JSONObject;
import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.dao.loan.BankTradeDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.loan.BankTradeEnum;
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.NbBankThirdpartyService;
import com.clx.performance.utils.LocalDateTimeUtils;
......@@ -16,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Objects;
/**
* 易付通
......@@ -24,12 +29,18 @@ import java.math.BigDecimal;
@Service
public class NbBankServiceImpl implements NbBankService {
@Autowired
private BankTradeDao bankTradeDao;
@Autowired
private NbBankThirdpartyService bankThirdpartyService;
@Autowired
private IdGenerateSnowFlake idGenerateSnowFlake;
@Autowired
private OwnerLoanRecordService ownerLoanRecordService;
/**
* 转账支付
......@@ -214,6 +225,29 @@ public class NbBankServiceImpl implements NbBankService {
log.info("宁波银行支付回调, merSeqNo:{}, transSeqNo:{}, trxAmt:{}, realTrxAmt:{}, transSeqNo:{}, 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;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.dto.LoanBalanceDTO;
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.carrier.*;
import com.clx.performance.param.pc.loan.owner.ExportPaymentApplicationFormParam;
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.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.owner.OwnerLoanRecordDetail;
import com.clx.performance.vo.pc.loan.carrier.CarrierTransferPaymentDetailVO;
......@@ -40,4 +38,11 @@ public interface OwnerLoanRecordService {
String savePaymentApplicationForm(ExportPaymentApplicationFormParam 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论