提交 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;
......
...@@ -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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论