提交 56237241 authored 作者: liuhaiquan's avatar liuhaiquan

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

Merge remote-tracking branch 'origin/v10.7_borrowing_and_repayment_20240118' into v10.7_borrowing_and_repayment_20240118
...@@ -132,7 +132,7 @@ public enum PerformanceResultEnum implements ResultEnum { ...@@ -132,7 +132,7 @@ public enum PerformanceResultEnum implements ResultEnum {
OWNER_LOAN_RECORD_CANCEL_STATUS_ERROR(1851, "状态已变更无法取消"), OWNER_LOAN_RECORD_CANCEL_STATUS_ERROR(1851, "状态已变更无法取消"),
OWNER_LOAN_RECORD_ADJUST_STATUS_ERROR(1851, "状态已变更无法核销"), OWNER_LOAN_RECORD_ADJUST_STATUS_ERROR(1851, "状态已变更无法核销"),
OWNER_LOAN_RECORD_PAY_WAIT_ERROR(1852,"当前借款单状态不是待付款"), OWNER_LOAN_RECORD_PAY_WAIT_ERROR(1852,"当前借款单状态不是待付款"),
OWNER_LOAN_PAYMENT_STATUS_ERROR(1851, "状态已变变更"), OWNER_LOAN_PAYMENT_STATUS_ERROR(1851, "执行借款审批失败,请稍后重试"),
; ;
private final int code; private final int code;
......
...@@ -179,6 +179,7 @@ public class OrderChildLoanComponent { ...@@ -179,6 +179,7 @@ public class OrderChildLoanComponent {
param.setOrderChildPrice(orderChildPrice); param.setOrderChildPrice(orderChildPrice);
param.setOwnerUserNo(ownerLoanAccount.getOwnerUserNo()); param.setOwnerUserNo(ownerLoanAccount.getOwnerUserNo());
param.setChildNo(childNo); param.setChildNo(childNo);
param.setEventFlag(false);
getLoanBalanceLock(param); getLoanBalanceLock(param);
} }
......
...@@ -12,4 +12,7 @@ public class RedissonConstants { ...@@ -12,4 +12,7 @@ public class RedissonConstants {
public static final String ORDER_CHILD_LOAN_OWNER_USERID_LOCK = "clx-performance:orderChild:loan:ownerUserId:"; public static final String ORDER_CHILD_LOAN_OWNER_USERID_LOCK = "clx-performance:orderChild:loan:ownerUserId:";
public static final String ORDER_CHILD_LOAN_RECORD_LOAN_NO_LOCK = "clx-performance:loanRecordApprove:loanNo:";
} }
package com.clx.performance.controller.pc.loan.carrier; package com.clx.performance.controller.pc.loan.carrier;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.param.pc.loan.carrier.*; 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.ExportPaymentApplicationFormParam;
import com.clx.performance.service.loan.OwnerLoanRecordService; import com.clx.performance.service.loan.OwnerLoanRecordService;
...@@ -10,17 +13,21 @@ import com.clx.performance.vo.pc.loan.carrier.OwnerLoanRecordVO; ...@@ -10,17 +13,21 @@ import com.clx.performance.vo.pc.loan.carrier.OwnerLoanRecordVO;
import com.clx.performance.vo.pc.loan.carrier.CarrierTransferPaymentDetailVO; import com.clx.performance.vo.pc.loan.carrier.CarrierTransferPaymentDetailVO;
import com.msl.common.base.PageData; import com.msl.common.base.PageData;
import com.msl.common.convertor.aspect.UnitCovert; import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
@RestController @RestController
...@@ -32,6 +39,8 @@ public class CarrierOwnerLoanRecordController { ...@@ -32,6 +39,8 @@ public class CarrierOwnerLoanRecordController {
private final OwnerLoanRecordService ownerLoanRecordService; private final OwnerLoanRecordService ownerLoanRecordService;
private final RedissonClient redissonClient;
@ApiOperation(value = "借款审批列表",notes = "<br>By:刘海泉") @ApiOperation(value = "借款审批列表",notes = "<br>By:刘海泉")
@PostMapping("/pageOwnerLoanRecord") @PostMapping("/pageOwnerLoanRecord")
...@@ -44,7 +53,24 @@ public class CarrierOwnerLoanRecordController { ...@@ -44,7 +53,24 @@ public class CarrierOwnerLoanRecordController {
@ApiOperation(value = "借款审批(虚拟币直接增加,资金需要跳收银台提交申请)",notes = "<br>By:胡宇帆") @ApiOperation(value = "借款审批(虚拟币直接增加,资金需要跳收银台提交申请)",notes = "<br>By:胡宇帆")
@PostMapping("/ownerLoanRecordApprove") @PostMapping("/ownerLoanRecordApprove")
public Result<Object> ownerLoanRecordApprove(@RequestBody @Validated CarrierOwnerLoanRecordApproveParam param) { public Result<Object> ownerLoanRecordApprove(@RequestBody @Validated CarrierOwnerLoanRecordApproveParam param) {
ownerLoanRecordService.ownerLoanRecordApprove(param); RLock lock = null;
try {
lock = redissonClient.getLock(RedissonConstants.ORDER_CHILD_LOAN_RECORD_LOAN_NO_LOCK + param.getLoanNo());
boolean flag = lock.tryLock(5, 4, TimeUnit.SECONDS);
if (!flag) {
throw new ServiceSystemException(PerformanceResultEnum.OWNER_LOAN_PAYMENT_STATUS_ERROR);
}
ownerLoanRecordService.ownerLoanRecordApprove(param);
} catch (Exception e) {
log.info("借款审批异常,param:{}, lock:{}", param, JSONUtil.parse(lock));
throw new ServiceSystemException(PerformanceResultEnum.OWNER_LOAN_PAYMENT_STATUS_ERROR, e.getMessage());
} finally {
if (lock != null && lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
return Result.ok(); return Result.ok();
} }
......
...@@ -20,4 +20,10 @@ public class OrderChildLoanRetryRecordDaoImpl extends BaseDaoImpl<OrderChildLoan ...@@ -20,4 +20,10 @@ public class OrderChildLoanRetryRecordDaoImpl extends BaseDaoImpl<OrderChildLoan
public List<OrderChildLoanRetryRecord> selectListByOwnerUserNoAndIdAsc(Long userNo) { public List<OrderChildLoanRetryRecord> selectListByOwnerUserNoAndIdAsc(Long userNo) {
return baseMapper.selectList(lQrWrapper().eq(OrderChildLoanRetryRecord::getOwnerUserNo, userNo).orderByAsc(OrderChildLoanRetryRecord::getId)); return baseMapper.selectList(lQrWrapper().eq(OrderChildLoanRetryRecord::getOwnerUserNo, userNo).orderByAsc(OrderChildLoanRetryRecord::getId));
} }
@Override
public OrderChildLoanRetryRecord selectOneByOwnerIdAndDriverId(Integer ownerId, Integer driverId) {
return baseMapper.selectOne(lQrWrapper().eq(OrderChildLoanRetryRecord::getSettlementOwnerId, ownerId)
.eq(OrderChildLoanRetryRecord::getSettlementDriverId, driverId));
}
} }
...@@ -79,6 +79,8 @@ public class OwnerRepaymentDaoImpl extends BaseDaoImpl<OwnerRepaymentMapper, Own ...@@ -79,6 +79,8 @@ public class OwnerRepaymentDaoImpl extends BaseDaoImpl<OwnerRepaymentMapper, Own
.set(OwnerRepayment::getCloseOrderTime, ownerRepayment.getCloseOrderTime()) .set(OwnerRepayment::getCloseOrderTime, ownerRepayment.getCloseOrderTime())
.set(OwnerRepayment::getPayment,ownerRepayment.getPayment()) .set(OwnerRepayment::getPayment,ownerRepayment.getPayment())
.set(OwnerRepayment::getPaymentAccount,ownerRepayment.getPaymentAccount()) .set(OwnerRepayment::getPaymentAccount,ownerRepayment.getPaymentAccount())
.set(OwnerRepayment::getOperateBy, ownerRepayment.getOperateBy())
.set(OwnerRepayment::getOperateTime, ownerRepayment.getOperateTime())
); );
......
...@@ -14,4 +14,6 @@ import java.util.List; ...@@ -14,4 +14,6 @@ import java.util.List;
public interface OrderChildLoanRetryRecordDao extends BaseDao<OrderChildLoanRetryRecordMapper, OrderChildLoanRetryRecord, Integer> { public interface OrderChildLoanRetryRecordDao extends BaseDao<OrderChildLoanRetryRecordMapper, OrderChildLoanRetryRecord, Integer> {
List<OrderChildLoanRetryRecord> selectListByOwnerUserNoAndIdAsc(Long userNo); List<OrderChildLoanRetryRecord> selectListByOwnerUserNoAndIdAsc(Long userNo);
OrderChildLoanRetryRecord selectOneByOwnerIdAndDriverId(Integer ownerId, Integer driverId);
} }
...@@ -67,13 +67,19 @@ public class EventListenerComponent { ...@@ -67,13 +67,19 @@ public class EventListenerComponent {
log.info("当前货主结算信息{},车主结算信息:{}", JSONUtil.parse(settlementOwnerDetail), JSONUtil.parse(settlementDriverDetail)); log.info("当前货主结算信息{},车主结算信息:{}", JSONUtil.parse(settlementOwnerDetail), JSONUtil.parse(settlementDriverDetail));
settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail); settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail);
settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail); settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail);
Integer ownerId = settlementOwnerDetail.getId();
Integer driverId = settlementDriverDetail.getId();
OrderChildLoanRetryRecord record = orderChildLoanRetryRecordDao.selectOneByOwnerIdAndDriverId(ownerId, driverId);
if (record == null) {
OrderChildLoanRetryRecord entity = new OrderChildLoanRetryRecord();
entity.setSettlementOwnerId(ownerId);
entity.setSettlementDriverId(driverId);
entity.setOwnerUserNo(settlementOwnerDetail.getOwnerUserNo());
// 保存重试记录
orderChildLoanRetryRecordDao.saveEntity(entity);
}
OrderChildLoanRetryRecord entity = new OrderChildLoanRetryRecord();
entity.setSettlementOwnerId(settlementOwnerDetail.getId());
entity.setSettlementDriverId(settlementDriverDetail.getId());
entity.setOwnerUserNo(settlementOwnerDetail.getOwnerUserNo());
// 保存重试记录
orderChildLoanRetryRecordDao.saveEntity(entity);
} }
@EventListener(classes = {OwnerRepaymentUpdateEvent.class}) @EventListener(classes = {OwnerRepaymentUpdateEvent.class})
......
package com.clx.performance.service.impl.loan; package com.clx.performance.service.impl.loan;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.clx.performance.component.OrderChildLoanComponent; import com.clx.performance.dao.loan.BankTradeDao;
import com.clx.performance.constant.RabbitKeyConstants; import com.clx.performance.dao.loan.OwnerLoanAccountDao;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.loan.OwnerLoanRecordDao;
import com.clx.performance.dao.loan.*; import com.clx.performance.dao.loan.OwnerRepaymentDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.OwnerLoanMqDTO;
import com.clx.performance.enums.OwnerAccountEnum; import com.clx.performance.enums.OwnerAccountEnum;
import com.clx.performance.enums.loan.BankTradeEnum; import com.clx.performance.enums.loan.BankTradeEnum;
import com.clx.performance.enums.loan.OwnerLoanAccountApproveEnum;
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.extranal.user.OwnerInfoService; import com.clx.performance.extranal.user.OwnerInfoService;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.loan.BankTrade;
import com.clx.performance.model.breakcontract.BreakContractSettlementDriver; import com.clx.performance.model.loan.OwnerLoanAccount;
import com.clx.performance.model.loan.*; import com.clx.performance.model.loan.OwnerLoanRecord;
import com.clx.performance.model.settle.SettlementDriverDetail; import com.clx.performance.model.loan.OwnerRepayment;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.loan.carrier.OwnerRepaymentParam; import com.clx.performance.param.pc.loan.carrier.OwnerRepaymentParam;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanAccountParam; import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanAccountParam;
import com.clx.performance.service.loan.OwnerLoanAccountService; import com.clx.performance.service.loan.OwnerLoanAccountService;
...@@ -33,18 +26,13 @@ import com.msl.common.base.Optional; ...@@ -33,18 +26,13 @@ import com.msl.common.base.Optional;
import com.msl.common.convertor.aspect.UnitCovert; import com.msl.common.convertor.aspect.UnitCovert;
import com.msl.user.data.UserSessionData; import com.msl.user.data.UserSessionData;
import com.msl.user.utils.TokenUtil; import com.msl.user.utils.TokenUtil;
import io.swagger.models.auth.In;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
/** /**
* @author kavin * @author kavin
...@@ -141,6 +129,9 @@ public class OwnerLoanAccountServiceImpl implements OwnerLoanAccountService { ...@@ -141,6 +129,9 @@ public class OwnerLoanAccountServiceImpl implements OwnerLoanAccountService {
ownerRepayment.setPayment(ownerInfo.getName()); ownerRepayment.setPayment(ownerInfo.getName());
ownerRepayment.setPaymentAccount(ownerInfo.getOwnerBankAccount()); ownerRepayment.setPaymentAccount(ownerInfo.getOwnerBankAccount());
ownerRepayment.setOperateBy(TokenUtil.getLoginUserInfo().getUserName());
ownerRepayment.setOperateTime(LocalDateTime.now());
// 更新还款支付信息 // 更新还款支付信息
ownerRepaymentDao.updateRePay(ownerRepayment); ownerRepaymentDao.updateRePay(ownerRepayment);
......
...@@ -29,7 +29,6 @@ import com.clx.performance.dto.LoanBalanceDTO; ...@@ -29,7 +29,6 @@ import com.clx.performance.dto.LoanBalanceDTO;
import com.clx.performance.dao.loan.*; import com.clx.performance.dao.loan.*;
import com.clx.performance.dto.OwnerLoanMqDTO; import com.clx.performance.dto.OwnerLoanMqDTO;
import com.clx.performance.enums.PerformanceResultEnum; import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.RunningWaterTypeEnum;
import com.clx.performance.enums.loan.BankTradeEnum; 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;
...@@ -185,7 +184,12 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -185,7 +184,12 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
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 (!ownerLoanRecord.getStatus().equals(OwnerLoanRecordEnum.Status.APPROVE_WAIT.getCode())) {
log.info("当前借款单单号:{},状态:{}", ownerLoanRecord.getLoanNo(), ownerLoanRecord.getStatus());
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
}
if (param.getStatus()) { if (param.getStatus()) {
borrowerConfigDao.selectByBorrowerIdAndType(ownerLoanRecord.getBorrowerId(), param.getLoanType()) borrowerConfigDao.selectByBorrowerIdAndType(ownerLoanRecord.getBorrowerId(), param.getLoanType())
.orElseThrow(PerformanceResultEnum.BORROWER_CONFIG_TYPE_NOT_SUPPORT_ERROR); .orElseThrow(PerformanceResultEnum.BORROWER_CONFIG_TYPE_NOT_SUPPORT_ERROR);
...@@ -315,7 +319,6 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -315,7 +319,6 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
*/ */
private void initOwnerLoanRunningWaterRecord(OwnerLoanRecord ownerLoanRecord) { private void initOwnerLoanRunningWaterRecord(OwnerLoanRecord ownerLoanRecord) {
OwnerLoanAccount ownerLoanAccount = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo, ownerLoanRecord.getOwnerUserNo()).get(); OwnerLoanAccount ownerLoanAccount = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo, ownerLoanRecord.getOwnerUserNo()).get();
log.info("当前ownerLoanAccount{}", JSONUtil.parse(ownerLoanAccount));
ownerLoanRecordDao.updateEntityByKey(ownerLoanRecord); ownerLoanRecordDao.updateEntityByKey(ownerLoanRecord);
OwnerLoanAccountRunningWaterRecord record = new OwnerLoanAccountRunningWaterRecord() OwnerLoanAccountRunningWaterRecord record = new OwnerLoanAccountRunningWaterRecord()
.setOwnerUserNo(ownerLoanRecord.getOwnerUserNo()) .setOwnerUserNo(ownerLoanRecord.getOwnerUserNo())
...@@ -526,10 +529,9 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -526,10 +529,9 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
if (orderChildPriceTemp.compareTo(BigDecimal.ZERO) != 0) { if (orderChildPriceTemp.compareTo(BigDecimal.ZERO) != 0) {
//当前钱不够,需要记录,流程卡死,不往下走 //当前钱不够,需要记录,流程卡死,不往下走
if (param.getEventFlag()) { log.info("当前运单货款不足,运单号{},开始执行解冻操作", childNo);
//此刻说明是确认收货后触发的逻辑,需要是否之前冻结的借款 applicationEventPublisher.publishEvent(new OwnerLoanThawEvent(this, childNo));
applicationEventPublisher.publishEvent(new OwnerLoanThawEvent(this, param.getChildNo()));
}
throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "执行借款发现:货主货款不足"); throw new ServiceSystemException(PerformanceResultEnum.HTTP_ERROR, "执行借款发现:货主货款不足");
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论