提交 9944e1f0 authored 作者: huyufan's avatar huyufan

OwnerLoanEvent 加分布式锁进行判断

上级 554f028a
......@@ -14,5 +14,6 @@ public class RedissonConstants {
public static final String ORDER_CHILD_LOAN_RECORD_LOAN_NO_LOCK = "clx-performance:loanRecordApprove:loanNo:";
public static final String OWNER_LOAN_EVENT_USERID_LOCK = "clx-performance:ownerLoanEvent:ownerUserId:";
}
......@@ -5,6 +5,7 @@ import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.json.JSONUtil;
import com.clx.performance.component.OrderChildLoanComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.loan.OrderChildLoanRetryRecordDao;
import com.clx.performance.dao.loan.OwnerLoanAccountRunningWaterRecordDao;
import com.clx.performance.dao.loan.OwnerLoanRecordDao;
......@@ -12,7 +13,9 @@ import com.clx.performance.dao.loan.OwnerRepaymentDao;
import com.clx.performance.dao.settle.SettlementDriverDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.LoanBalanceDTO;
import com.clx.performance.dto.OwnerLoanMqDTO;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.enums.loan.OwnerLoanAccountRunningWaterRecordEnum;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.enums.loan.OwnerRePaymentEnum;
......@@ -25,8 +28,11 @@ import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.settle.SettlementMqService;
import com.msl.common.base.Optional;
import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
......@@ -41,6 +47,7 @@ import java.math.BigDecimal;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Component
......@@ -68,7 +75,7 @@ public class EventListenerComponent {
private final RabbitTemplate rabbitTemplate;
private final OwnerLoanRecordDao ownerLoanRecordDao;
private final RedissonClient redissonClient;
@Async
......@@ -109,6 +116,15 @@ public class EventListenerComponent {
public void listen(OwnerLoanEvent event) {
log.info("OwnerLoanEvent事件执行");
OwnerLoanMqDTO param = event.getParam();
RLock lock = null;
try {
lock = redissonClient.getLock(RedissonConstants.OWNER_LOAN_EVENT_USERID_LOCK + param.getSettlementOwnerDetail().getOwnerUserNo());
boolean flag = lock.tryLock(3, 10, TimeUnit.SECONDS);
if (!flag) {
throw new ServiceSystemException(PerformanceResultEnum.GET_LOAN_RECORD);
}
SettlementOwnerDetail settlementOwnerDetail = param.getSettlementOwnerDetail();
SettlementDriverDetail settlementDriverDetail = param.getSettlementDriverDetail();
OrderChild orderChild = param.getOrderChild();
......@@ -129,6 +145,14 @@ public class EventListenerComponent {
// 发送mq 通过开票标识
settlementMqService.invoiceTypeSync(settlementDriverDetail.getChildNo(), settlementDriverDetail.getInvoiceType());
} catch (Exception e) {
throw new ServiceSystemException(PerformanceResultEnum.GET_LOAN_RECORD, e.getMessage());
} finally {
if (lock != null && lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论