提交 f9dae10c authored 作者: huyufan's avatar huyufan

Merge remote-tracking branch 'origin/v10.7_borrowing_and_repayment_20240118' into test

package com.clx.performance;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class OwnerLoanPayNotifyMqParam {
@NotNull(message = "借款单号不能为空")
@ApiModelProperty("借款单号")
private String loanNo;
@ApiModelProperty("支付状态")
private Integer payStatus;
}
......@@ -137,6 +137,7 @@ public enum PerformanceResultEnum implements ResultEnum {
OWNER_LOAN_RECORD_PAY_STATUS_ERROR(1850, "状态已变更无法支付"),
OWNER_LOAN_RECORD_CANCEL_STATUS_ERROR(1851, "状态已变更无法取消"),
;
private final int code;
......
......@@ -67,7 +67,6 @@ public class RabbitBeanConfig {
/**
* 处理延迟消息货单挂单
* @return
*/
@Bean
public Queue orderGoodsOnDeadQueue() {
......@@ -93,7 +92,6 @@ public class RabbitBeanConfig {
/**
* 订单取消队列
* @return
*/
@Bean
public Queue orderCancelQueue() {
......@@ -118,7 +116,6 @@ public class RabbitBeanConfig {
/**
* 运单同步网络货运队列
* @return
*/
@Bean
public Queue orderChildSyncTransportQueue() {
......@@ -143,7 +140,6 @@ public class RabbitBeanConfig {
/**
* 处理延迟消息orderGoodsTruckBind
* @return
*/
@Bean
public Queue orderGoodsTruckBindQueue() {
......@@ -166,4 +162,28 @@ public class RabbitBeanConfig {
public Binding orderGoodsTruckBindBindingDelayedExchange(@Qualifier("orderGoodsTruckBindQueue")Queue queue,@Qualifier("orderGoodsTruckBindExchange")CustomExchange customExchange) {
return BindingBuilder.bind(queue).to(customExchange).with(RabbitKeyConstants.ORDER_TRUCK_BIND_LAZY_ROUTE_KEY).noargs();
}
/**
* 货主借款支付处理
*/
@Bean
public Queue ownerLoanPayQueue() {
return new Queue(RabbitKeyConstants.OWNER_LOAN_PAY_QUEUE, true, false, false);
}
/**
* 货主借款支付处理
**/
@Bean
public DirectExchange ownerLoanExchange() {
return new DirectExchange(RabbitKeyConstants.OWNER_LOAN_EXCHANGE);
}
/**
* 货主借款支付处理
*/
@Bean
public Binding ownerLoanBind() {
return BindingBuilder.bind(ownerLoanPayQueue()).to(ownerLoanExchange()).with(RabbitKeyConstants.OWNER_LOAN_PAY_ROUTE_KEY);
}
}
......@@ -83,4 +83,10 @@ public class RabbitKeyConstants {
public static final String ORDER_TRUCK_BIND_LAZY_QUEUE ="clx-order.truck.bind.lazy.queue";
public static final String ORDER_TRUCK_BIND_LAZY_ROUTE_KEY ="clx-order.truck.bind.lazy.route.key";
public static final String OWNER_LOAN_EXCHANGE ="clx-performance.loan.exchange";
public static final String OWNER_LOAN_PAY_ROUTE_KEY ="clx-performance.loan.pay.route.key";
public static final String OWNER_LOAN_PAY_QUEUE ="clx-performance.loan.pay.queue";
}
......@@ -55,6 +55,13 @@ public class CarrierOwnerLoanRecordController {
return Result.ok();
}
@ApiOperation(value = "取消支付",notes = "<br>By:胡宇帆")
@GetMapping("/ownerLoanRecordCancelPay")
public Result<Object> ownerLoanRecordCancelPay(@RequestParam(value = "loanNo") @NotBlank String loanNo) {
ownerLoanRecordService.ownerLoanRecordCancelPay(loanNo);
return Result.ok();
}
@ApiOperation(value = "分页搜索货主借款列表",notes = "<br>By:艾庆国")
@PostMapping("/pageOwnerLoanRecordOfOwner")
@UnitCovert(param = false)
......
package com.clx.performance.listener;
import cn.hutool.json.JSONUtil;
import com.clx.performance.OwnerLoanPayNotifyMqParam;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.enums.nbbank.NbBankStatusEnum;
import com.clx.performance.service.loan.OwnerLoanRecordService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.Objects;
/**
* 处理货主借款支付监听器
*/
@Slf4j
@Component
@AllArgsConstructor
public class OwnerLoanPayNotifyListener {
private final OwnerLoanRecordService ownerLoanRecordService;
@RabbitListener(queues = RabbitKeyConstants.OWNER_LOAN_PAY_QUEUE)
public void onMessage(String message) {
log.info("处理货主借款支付监听器执行,数据为{}", message);
OwnerLoanPayNotifyMqParam param = JSONUtil.toBean(message, OwnerLoanPayNotifyMqParam.class);
if (Objects.equals(param.getPayStatus(), NbBankStatusEnum.Status.SUCCESS.getCode())) {
// 支付成功
ownerLoanRecordService.paySuccess(param.getLoanNo());
}
else if (Objects.equals(param.getPayStatus(), NbBankStatusEnum.Status.FAIL.getCode())) {
// 支付失败
ownerLoanRecordService.payFail(param.getLoanNo());
}
}
}
......@@ -24,6 +24,7 @@ import com.clx.performance.enums.loan.BankTradeEnum;
import com.clx.performance.enums.loan.OwnerLoanAccountRunningWaterRecordEnum;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.enums.loan.OwnerRePaymentEnum;
import com.clx.performance.enums.nbbank.NbBankStatusEnum;
import com.clx.performance.model.OwnerBindCardRecord;
import com.clx.performance.model.loan.*;
import com.clx.performance.param.pc.loan.carrier.*;
......@@ -37,6 +38,7 @@ import com.clx.performance.vo.pc.loan.owner.BorrowerSelectVO;
import com.clx.performance.vo.pc.loan.owner.OwnerLoanRecordDetail;
import com.clx.performance.vo.pc.loan.carrier.CarrierTransferPaymentDetailVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderPayResultVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderResultVO;
import com.clx.user.feign.OwnerFeign;
import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.base.Optional;
......@@ -164,8 +166,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
ownerLoanRecord.setLendingPartyAccount(borrower.getBankCardNo());
bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_DIRECT_PAY.getCode());
}
else {
} else {
// 转账支付
NbBankOrderPayResultVO orderPayResultVO = bankService.orderTransferPay(ownerLoanRecord.getLoanBalance().intValue());
ownerLoanRecord.setRunningWaterOpenNo(orderPayResultVO.getTransSeqNo());
......@@ -265,13 +266,15 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
ownerRepayment.setCreateBy(ownerLoanRecord.getOwnerUserName());
ownerRepayment.setRepaymentBalance(ownerLoanRecord.getLoanBalance());
ownerRepayment.setRepaymentNo(idGenerateSnowFlake.nextId(2L));
ownerRepayment.setPayment(ownerLoanRecord.getBorrower());
ownerRepayment.setPaymentAccount(ownerLoanRecord.getBorrowerAccount());
OwnerInfoFeignVO ownerInfoFeignVO = ownerFeign.getOwnerInfo(ownerLoanRecord.getOwnerUserNo()).getData();
log.info("生成还款记录,查询到用户信息:{}", JSONUtil.parse(ownerInfoFeignVO));
ownerRepayment.setPayment(ownerInfoFeignVO.getCompanyName());
ownerRepayment.setPaymentAccount(ownerInfoFeignVO.getOwnerBankAccount());
ownerRepayment.setPayee(ownerRepayment.getPayee());
ownerRepayment.setPayeeAccount(ownerLoanRecord.getPayeeAccount());
ownerRepayment.setPayChannel(OwnerRePaymentEnum.Channel.ORDER.getCode());
ownerRepayment.setRunningWaterOpenNo(ownerLoanRecord.getRunningWaterOpenNo());
ownerRepayment.setMerchantRunningWaterNo(ownerLoanRecord.getMerchantRunningWaterNo());
ownerRepayment.setPayChannel(ownerLoanRecord.getPayChannel());
ownerRepayment.setBeOverdue(OwnerRePaymentEnum.BeOverdue.NO.getCode());
ownerRepayment.setCreateBy("系统");
ownerRepayment.setStatus(OwnerRePaymentEnum.Status.PAY_WAIT.getCode());
......@@ -317,12 +320,12 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
PerformanceResultEnum.DATA_NOT_FIND);
CarrierCashierInfoVO vo = ownerLoanRecordStruct.convertCashierInfo(ownerLoanRecord);
Borrower borrower = borrowerDao.getEntityByKey(ownerLoanRecord.getBorrowerId()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if(Objects.equals(borrower.getDeleteStatus(), DeleteStatusEnum.NO.getCode())){
if (Objects.equals(borrower.getDeleteStatus(), DeleteStatusEnum.NO.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
vo.setOrderPayWay(false);
String bankName = borrower.getBankName();
if(nbBankConfig.getOrderSupportBank().contains(bankName)){
if (nbBankConfig.getOrderSupportBank().contains(bankName)) {
vo.setOrderPayWay(true);
}
vo.setBankName(bankName);
......@@ -430,7 +433,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, param.getLoanNo())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (!Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAY_FAIL.getCode())){
if (!Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAY_FAIL.getCode())) {
throw new ServiceSystemException(PerformanceResultEnum.OWNER_LOAN_RECORD_PAY_STATUS_ERROR);
}
......@@ -455,8 +458,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
ownerLoanRecord.setLendingPartyAccount(borrower.getBankCardNo());
bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_DIRECT_PAY.getCode());
}
else {
} else {
//资金 TODO 调宁波银企直连的产品,从诚联信账户中给鑫祥和执行转账
// 转账支付
NbBankOrderPayResultVO orderPayResultVO = bankService.orderTransferPay(ownerLoanRecord.getLoanBalance().intValue());
......@@ -494,10 +496,10 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
@Override
@Transactional(rollbackFor = Exception.class)
public void payFail(String loanNo){
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())){
if (Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAYING.getCode())) {
log.info("借款单非支付中状态, loanNo:{}", loanNo);
return;
}
......@@ -510,11 +512,11 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
@Override
@Transactional(rollbackFor = Exception.class)
public void paySuccess(String loanNo){
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())){
if (Objects.equals(ownerLoanRecord.getStatus(), OwnerLoanRecordEnum.Status.PAYING.getCode())) {
log.info("借款单非支付中状态, loanNo:{}", loanNo);
return;
}
......@@ -555,6 +557,34 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
}
@Override
public void ownerLoanRecordCancelPay(String loanNo) {
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, loanNo)
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
if (!ownerLoanRecord.getStatus().equals(OwnerLoanRecordEnum.Status.APPROVE_WAIT.getCode())
&& !ownerLoanRecord.getStatus().equals(OwnerLoanRecordEnum.Status.PAYING.getCode())
) {
log.info("借款记录状态异常,不能取消");
throw new ServiceSystemException(PerformanceResultEnum.OWNER_LOAN_RECORD_CANCEL_STATUS_ERROR);
}
NbBankOrderResultVO result = bankService.getResult(loanNo);
Integer status = result.getStatus();
if (!NbBankStatusEnum.Status.INIT.getCode().equals(status)
&& !NbBankStatusEnum.Status.FAIL.getCode().equals(status)
&& !NbBankStatusEnum.Status.NOT_FOUND.getCode().equals(status)
) {
log.info("宁波银行响应当前业务,不能取消{}", JSONUtil.parse(result));
throw new ServiceSystemException(PerformanceResultEnum.OWNER_LOAN_RECORD_CANCEL_STATUS_ERROR);
}
log.info("借款记录取消,更新状态为待审批");
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.APPROVE_WAIT.getCode());
ownerLoanRecordDao.updateStatusById(ownerLoanRecord);
}
public void generateFrozenOwnerLoanRunningWater(OwnerLoanRecord ownerLoanRecord, String childNo, BigDecimal orderChildPrice) {
log.info("13.生成借款冻结流水");
OwnerLoanAccount update = new OwnerLoanAccount();
......
package com.clx.performance.service.impl.thirdparty.nbbank;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.clx.performance.OwnerLoanPayNotifyMqParam;
import com.clx.performance.component.IdGenerateSnowFlake;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.loan.BankTradeDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.loan.BankTradeEnum;
......@@ -17,6 +20,9 @@ import com.clx.performance.vo.pc.nbbank.NbBankOrderResultVO;
import com.msl.common.exception.ServiceSystemException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -39,6 +45,9 @@ public class NbBankServiceImpl implements NbBankService {
@Autowired
private IdGenerateSnowFlake idGenerateSnowFlake;
@Autowired
private RabbitTemplate rabbitTemplate;
/**
* 转账支付
......@@ -228,22 +237,17 @@ public class NbBankServiceImpl implements NbBankService {
// 更新状态
bankTradeDao.updateStatus(bankTrade);
// 货主借款支付回调
if (Objects.equals(bankTrade.getOrderType(), BankTradeEnum.OrderType.OWNER_LOAN_RECORD.getCode())){
if (Objects.equals(transStatus, NbBankStatusEnum.Status.SUCCESS.getCode())) {
SpringContextUtils.getBeanByClass(OwnerLoanRecordService.class).paySuccess(merSeqNo);
}
else if (Objects.equals(transStatus, NbBankStatusEnum.Status.FAIL.getCode())) {
SpringContextUtils.getBeanByClass(OwnerLoanRecordService.class).payFail(merSeqNo);
}
else {
// TODO 其它情况
}
}
else {
OwnerLoanPayNotifyMqParam param = new OwnerLoanPayNotifyMqParam();
param.setLoanNo(merSeqNo);
param.setPayStatus(transStatus);
Message message = MessageBuilder.withBody(JSONUtil.parse(param).toString().getBytes()).build();
//执行解绑自有车辆处理逻辑,将绑定记录正常改为取消
rabbitTemplate.send(
RabbitKeyConstants.OWNER_LOAN_EXCHANGE, RabbitKeyConstants.OWNER_LOAN_PAY_ROUTE_KEY, message
);
}
......
......@@ -47,4 +47,6 @@ public interface OwnerLoanRecordService {
void paySuccess(String loanNo);
void ownerLoanRecordRetryPay(String loanNo);
void ownerLoanRecordCancelPay(String loanNo);
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论