提交 ef4430aa 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
...@@ -33,6 +33,7 @@ import com.clx.performance.model.loan.OwnerRepayment; ...@@ -33,6 +33,7 @@ import com.clx.performance.model.loan.OwnerRepayment;
import com.clx.performance.model.settle.SettlementDriverDetail; import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail; import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.loan.OwnerLoanRecordService; import com.clx.performance.service.loan.OwnerLoanRecordService;
import com.clx.performance.service.settle.NetworkDriverRunningWaterRecordService;
import com.clx.user.vo.feign.OwnerInfoFeignVO; import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -79,6 +80,8 @@ public class OrderChildLoanComponent { ...@@ -79,6 +80,8 @@ public class OrderChildLoanComponent {
private final SettlementDriverDetailDao settlementDriverDetailDao; private final SettlementDriverDetailDao settlementDriverDetailDao;
private final NetworkDriverRunningWaterRecordService networkDriverRunningWaterRecordService;
/** /**
...@@ -256,16 +259,48 @@ public class OrderChildLoanComponent { ...@@ -256,16 +259,48 @@ public class OrderChildLoanComponent {
} else if (alterationBalance.compareTo(settlementOwnerDetail.getSettlementFreight()) > 0) { } else if (alterationBalance.compareTo(settlementOwnerDetail.getSettlementFreight()) > 0) {
//大于,则生成核销后,释放冻结的借款 //大于,则生成核销后,释放冻结的借款
log.info("4.3 大于,则生成核销后,释放冻结的借款"); log.info("4.3 大于,则生成核销后,释放冻结的借款");
// 需求解冻的金额
BigDecimal thawBigdecimal = (settlementOwnerDetail.getSettlementFreight().subtract(alterationBalance)).negate();
BigDecimal alterationBalanceTemp = alterationBalance;
List<OwnerLoanAccountRunningWaterRecord> frozenList = new LinkedList<>();
List<OwnerLoanAccountRunningWaterRecord> thawList = new LinkedList<>();
for (int i = 0; i < runningWaterRecordList.size(); i++) {
OwnerLoanAccountRunningWaterRecord record = runningWaterRecordList.get(i);
BigDecimal balance = record.getAlterationBalance();
if (alterationBalanceTemp.compareTo(balance) >= 0) {
frozenList.add(record);
alterationBalanceTemp = alterationBalanceTemp.subtract(balance);
log.info("当前金额大于等于冻结金额,frozenList添加当前流水{},剩余alterationBalanceTemp{}", record.getRunningWaterNo(), alterationBalanceTemp.toString());
} else {
if (alterationBalanceTemp.compareTo(BigDecimal.ZERO) == 0) {
thawList.add(record);
log.info("当前alterationBalanceTemp已经为0,thawList直接加入当前流水{}", record.getRunningWaterNo());
} else {
record.setAlterationBalance(balance.subtract(alterationBalanceTemp));
thawList.add(record);
log.info("当前alterationBalanceTemp小于冻结金额,需要拆分,thawList存放流水记录为{}", JSONUtil.parse(record));
record.setAlterationBalance(alterationBalanceTemp);
alterationBalanceTemp = BigDecimal.ZERO;
frozenList.add(record);
log.info("当前alterationBalanceTemp小于冻结金额,需要拆分,frozenList存放流水记录为{}", JSONUtil.parse(record));
}
}
}
BigDecimal thawBigdecimal = settlementOwnerDetail.getSettlementFreight().subtract(alterationBalance);
OwnerLoanAccountRunningWaterRecord entity = runningWaterRecordList.get(runningWaterRecordList.size() - 1);
Long loanNo = entity.getLoanNo();
Integer loanType = entity.getLoanType();
entity.setAlterationBalance(entity.getAlterationBalance().subtract(thawBigdecimal.negate()));
//核销扣除 //核销扣除
childWriteOffOwnerLoanAccount(runningWaterRecordList); childWriteOffOwnerLoanAccount(frozenList);
//多余的金额需要生成解冻流水 if (CollectionUtil.isNotEmpty(thawList)) {
thawOwnerLoanAccount(loanNo, loanType, entity.getOwnerUserNo(), entity.getOwnerUserName(), entity.getMobile(), entity.getChildNo(), thawBigdecimal.negate()); OwnerLoanAccountRunningWaterRecord entity = runningWaterRecordList.get(0);
Long loanNo = entity.getLoanNo();
Integer loanType = entity.getLoanType();
//多余的金额需要生成解冻流水
thawOwnerLoanAccount(loanNo, loanType, entity.getOwnerUserNo(), entity.getOwnerUserName(), entity.getMobile(), entity.getChildNo(), thawBigdecimal);
}
} else { } else {
log.info("4.4 冻结的借款不够了"); log.info("4.4 冻结的借款不够了");
...@@ -294,7 +329,8 @@ public class OrderChildLoanComponent { ...@@ -294,7 +329,8 @@ public class OrderChildLoanComponent {
// 抵扣金额 // 抵扣金额
settlementOwnerDetail.setLoanFreight(settlementOwnerDetail.getSettlementFreight()); settlementOwnerDetail.setLoanFreight(settlementOwnerDetail.getSettlementFreight());
settlementOwnerDetail.setSettlementFreight(BigDecimal.ZERO); settlementOwnerDetail.setSettlementFreight(BigDecimal.ZERO);
//生成提现记录
networkDriverRunningWaterRecordService.generateNetworkCaseOutRecord(settlementDriverDetail);
} }
//归还借款单的剩余金额+解冻流水 //归还借款单的剩余金额+解冻流水
......
...@@ -205,4 +205,21 @@ public class RabbitBeanConfig { ...@@ -205,4 +205,21 @@ public class RabbitBeanConfig {
} }
/**
* 货主借款冻结释放队列
* @return
*/
@Bean
public Queue ownerLoanThawQueue() {
return new Queue(RabbitKeyConstants.OWNER_LOAN_THAW_QUEUE, true, false, false);
}
/**
* 货主还款bind
* @return
*/
@Bean
public Binding ownerLoanThawBind() {
return BindingBuilder.bind(ownerLoanThawQueue()).to(ownerLoanExchange()).with(RabbitKeyConstants.OWNER_LOAN_THAW_ROUTE_KEY);
}
} }
...@@ -90,9 +90,9 @@ public class RabbitKeyConstants { ...@@ -90,9 +90,9 @@ public class RabbitKeyConstants {
public static final String OWNER_LOAN_PAY_QUEUE ="clx-performance.loan.pay.queue"; public static final String OWNER_LOAN_PAY_QUEUE ="clx-performance.loan.pay.queue";
public static final String OWNER_LOAN_ROUTE_KEY ="clx-performance.loan.route.key"; public static final String OWNER_LOAN_THAW_ROUTE_KEY ="clx-performance.loan.thaw.route.key";
public static final String OWNER_LOAN_QUEUE ="clx-performance.loan.queue"; public static final String OWNER_LOAN_THAW_QUEUE ="clx-performance.loan.thaw.queue";
public static final String OWNER_REPAYMENT_QUEUE ="clx-performance.owner.repayment.queue"; public static final String OWNER_REPAYMENT_QUEUE ="clx-performance.owner.repayment.queue";
public static final String OWNER_REPAYMENT_ROUTE_KEY ="clx-performance.owner.repayment.route.key"; public static final String OWNER_REPAYMENT_ROUTE_KEY ="clx-performance.owner.repayment.route.key";
......
...@@ -98,8 +98,8 @@ public class OwnerLoanAccountRunningWaterRecordDaoImpl extends BaseDaoImpl<Owner ...@@ -98,8 +98,8 @@ public class OwnerLoanAccountRunningWaterRecordDaoImpl extends BaseDaoImpl<Owner
public List<OwnerLoanAccountRunningWaterRecord> getListByChildNoAndRunningWaterType(String childNo) { public List<OwnerLoanAccountRunningWaterRecord> getListByChildNoAndRunningWaterType(String childNo) {
return baseMapper.selectList(lQrWrapper().eq(OwnerLoanAccountRunningWaterRecord::getChildNo, childNo) return baseMapper.selectList(lQrWrapper().eq(OwnerLoanAccountRunningWaterRecord::getChildNo, childNo)
.in(OwnerLoanAccountRunningWaterRecord::getRunningWaterType, .in(OwnerLoanAccountRunningWaterRecord::getRunningWaterType,
OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode()
,OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_THAW ,OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_THAW.getCode()
) )
.orderByAsc(OwnerLoanAccountRunningWaterRecord::getId) .orderByAsc(OwnerLoanAccountRunningWaterRecord::getId)
); );
......
...@@ -107,5 +107,10 @@ public class OwnerLoanRecordDaoImpl extends BaseDaoImpl<OwnerLoanRecordMapper, O ...@@ -107,5 +107,10 @@ public class OwnerLoanRecordDaoImpl extends BaseDaoImpl<OwnerLoanRecordMapper, O
); );
} }
@Override
public OwnerLoanRecord selectOneByLoanNo(Long loanNo) {
return baseMapper.selectOne(lQrWrapper().eq(OwnerLoanRecord::getLoanNo, loanNo));
}
} }
...@@ -30,4 +30,5 @@ public interface OwnerLoanRecordDao extends BaseDao<OwnerLoanRecordMapper, Owner ...@@ -30,4 +30,5 @@ public interface OwnerLoanRecordDao extends BaseDao<OwnerLoanRecordMapper, Owner
boolean updateStatusById(OwnerLoanRecord item); boolean updateStatusById(OwnerLoanRecord item);
OwnerLoanRecord selectOneByLoanNo(Long loanNo);
} }
...@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; ...@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.exceptions.ExceptionUtil; import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.clx.performance.component.OrderChildLoanComponent; import com.clx.performance.component.OrderChildLoanComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.loan.OrderChildLoanRetryRecordDao; import com.clx.performance.dao.loan.OrderChildLoanRetryRecordDao;
import com.clx.performance.dao.loan.OwnerLoanAccountRunningWaterRecordDao; import com.clx.performance.dao.loan.OwnerLoanAccountRunningWaterRecordDao;
import com.clx.performance.dao.loan.OwnerRepaymentDao; import com.clx.performance.dao.loan.OwnerRepaymentDao;
...@@ -11,6 +12,7 @@ import com.clx.performance.dao.settle.SettlementDriverDao; ...@@ -11,6 +12,7 @@ import com.clx.performance.dao.settle.SettlementDriverDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao; import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao; import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.dto.OwnerLoanMqDTO; import com.clx.performance.dto.OwnerLoanMqDTO;
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;
import com.clx.performance.enums.loan.OwnerRePaymentEnum; import com.clx.performance.enums.loan.OwnerRePaymentEnum;
...@@ -24,14 +26,21 @@ import com.clx.performance.model.settle.SettlementOwnerDetail; ...@@ -24,14 +26,21 @@ import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.settle.SettlementMqService; import com.clx.performance.service.settle.SettlementMqService;
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.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -58,13 +67,14 @@ public class EventListenerComponent { ...@@ -58,13 +67,14 @@ public class EventListenerComponent {
private final OwnerLoanAccountRunningWaterRecordDao ownerLoanAccountRunningWaterRecordDao; private final OwnerLoanAccountRunningWaterRecordDao ownerLoanAccountRunningWaterRecordDao;
private final RabbitTemplate rabbitTemplate;
@EventListener(classes = {SettlementUpdateEvent.class}) @EventListener(classes = {SettlementUpdateEvent.class})
public void listen(SettlementUpdateEvent event) { public void listen(SettlementUpdateEvent event) {
log.info("SettlementUpdateEvent事件执行"); log.info("SettlementUpdateEvent事件执行");
SettlementOwnerDetail settlementOwnerDetail = event.getSettlementOwnerDetail(); SettlementOwnerDetail settlementOwnerDetail = event.getSettlementOwnerDetail();
SettlementDriverDetail settlementDriverDetail = event.getSettlementDriverDetail(); SettlementDriverDetail settlementDriverDetail = event.getSettlementDriverDetail();
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 ownerId = settlementOwnerDetail.getId();
...@@ -76,6 +86,7 @@ public class EventListenerComponent { ...@@ -76,6 +86,7 @@ public class EventListenerComponent {
entity.setSettlementOwnerId(ownerId); entity.setSettlementOwnerId(ownerId);
entity.setSettlementDriverId(driverId); entity.setSettlementDriverId(driverId);
entity.setOwnerUserNo(settlementOwnerDetail.getOwnerUserNo()); entity.setOwnerUserNo(settlementOwnerDetail.getOwnerUserNo());
log.info("当前货主结算信息{},车主结算信息:{}", JSONUtil.parse(settlementOwnerDetail), JSONUtil.parse(settlementDriverDetail));
// 保存重试记录 // 保存重试记录
orderChildLoanRetryRecordDao.saveEntity(entity); orderChildLoanRetryRecordDao.saveEntity(entity);
} }
...@@ -91,7 +102,8 @@ public class EventListenerComponent { ...@@ -91,7 +102,8 @@ public class EventListenerComponent {
ownerRepaymentDao.updateEntityByKey(update); ownerRepaymentDao.updateEntityByKey(update);
} }
@EventListener(classes = {OwnerLoanEvent.class}) @Async
@TransactionalEventListener(classes = {OwnerLoanEvent.class},phase = TransactionPhase.AFTER_COMMIT,fallbackExecution = true)
public void listen(OwnerLoanEvent event) { public void listen(OwnerLoanEvent event) {
log.info("OwnerLoanEvent事件执行"); log.info("OwnerLoanEvent事件执行");
OwnerLoanMqDTO param = event.getParam(); OwnerLoanMqDTO param = event.getParam();
...@@ -168,37 +180,17 @@ public class EventListenerComponent { ...@@ -168,37 +180,17 @@ public class EventListenerComponent {
} }
@EventListener(classes = {OwnerLoanThawEvent.class}) @Async
@TransactionalEventListener(classes = {OwnerLoanThawEvent.class},phase = TransactionPhase.BEFORE_COMMIT,fallbackExecution = true)
public void listen(OwnerLoanThawEvent event) { public void listen(OwnerLoanThawEvent event) {
log.info("OwnerLoanThawEvent事件执行"); log.info("OwnerLoanThawEvent事件执行");
log.info("需要解冻借款的的运单号:{}", event.getChildNo()); log.info("需要解冻借款的的运单号:{}", event.getChildNo());
Message message = MessageBuilder.withBody(event.getChildNo().getBytes()).build();
List<OwnerLoanAccountRunningWaterRecord> runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType(event.getChildNo());
if (CollectionUtil.isEmpty(runningWaterRecordList)) {
return;
}
Map<Integer, List<OwnerLoanAccountRunningWaterRecord>> listMap = runningWaterRecordList.stream().collect(Collectors.groupingBy(OwnerLoanAccountRunningWaterRecord::getRunningWaterType));
List<OwnerLoanAccountRunningWaterRecord> thawRecord = listMap.get(OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_THAW.getCode());
if (CollectionUtil.isNotEmpty(thawRecord)) {
log.info("3.1 有借款解冻记录,说明是是重复记录,直接返回");
return;
} else {
runningWaterRecordList = listMap.get(OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode());
}
Long ownerUserNo = runningWaterRecordList.get(0).getOwnerUserNo();
log.info("当前解冻货主:{},流水记录长度{},流水记录{}", ownerUserNo, runningWaterRecordList.size(), JSONUtil.parse(runningWaterRecordList));
for (OwnerLoanAccountRunningWaterRecord record : runningWaterRecordList) { rabbitTemplate.send(
Long loanNo = record.getLoanNo(); RabbitKeyConstants.OWNER_LOAN_EXCHANGE, RabbitKeyConstants.OWNER_LOAN_THAW_ROUTE_KEY, message
Integer loanType = record.getLoanType(); );
String ownerUserName = record.getOwnerUserName();
String childNo = record.getChildNo();
BigDecimal balance = record.getAlterationBalance();
//解冻借款
orderChildLoanComponent.thawOwnerLoanAccount(loanNo, loanType, ownerUserNo, record.getMobile(), ownerUserName, childNo, balance);
}
} }
} }
package com.clx.performance.event; package com.clx.performance.event;
import com.clx.performance.model.OrderChild;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEvent;
......
package com.clx.performance.listener;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.clx.performance.component.OrderChildLoanComponent;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.loan.OwnerLoanAccountRunningWaterRecordDao;
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.loan.OwnerLoanAccountRunningWaterRecordEnum;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.event.SettlementUpdateEvent;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.service.settle.SettlementMqService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 处理货主借款冻结释放监听器
*/
@Slf4j
@Component
@AllArgsConstructor
public class OwnerLoanAccountThawListener {
private final OrderChildLoanComponent orderChildLoanComponent;
private final OwnerLoanAccountRunningWaterRecordDao ownerLoanAccountRunningWaterRecordDao;
@RabbitListener(queues = RabbitKeyConstants.OWNER_LOAN_THAW_QUEUE)
public void onMessage(String message) {
log.info("货主借款冻结释放监听器{}", message);
List<OwnerLoanAccountRunningWaterRecord> runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType(message);
if (CollectionUtil.isEmpty(runningWaterRecordList)) {
return;
}
Map<Integer, List<OwnerLoanAccountRunningWaterRecord>> listMap = runningWaterRecordList.stream().collect(Collectors.groupingBy(OwnerLoanAccountRunningWaterRecord::getRunningWaterType));
List<OwnerLoanAccountRunningWaterRecord> thawRecord = listMap.get(OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_THAW.getCode());
if (CollectionUtil.isNotEmpty(thawRecord)) {
log.info("3.1 有借款解冻记录,说明是是重复记录,直接返回");
return;
} else {
runningWaterRecordList = listMap.get(OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode());
}
Long ownerUserNo = runningWaterRecordList.get(0).getOwnerUserNo();
log.info("当前解冻货主:{},流水记录长度{},流水记录{}", ownerUserNo, runningWaterRecordList.size(), JSONUtil.parse(runningWaterRecordList));
for (OwnerLoanAccountRunningWaterRecord record : runningWaterRecordList) {
Long loanNo = record.getLoanNo();
Integer loanType = record.getLoanType();
String ownerUserName = record.getOwnerUserName();
String childNo = record.getChildNo();
BigDecimal balance = record.getAlterationBalance();
//解冻借款
orderChildLoanComponent.thawOwnerLoanAccount(loanNo, loanType, ownerUserNo, record.getMobile(), ownerUserName, childNo, balance);
}
}
}
//package com.clx.performance.listener;
//
//import cn.hutool.json.JSONUtil;
//import com.clx.performance.component.OrderChildLoanComponent;
//import com.clx.performance.constant.RabbitKeyConstants;
//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.loan.OwnerLoanRecordEnum;
//import com.clx.performance.event.SettlementUpdateEvent;
//import com.clx.performance.model.OrderChild;
//import com.clx.performance.model.settle.SettlementDriverDetail;
//import com.clx.performance.model.settle.SettlementOwnerDetail;
//import com.clx.performance.service.settle.SettlementMqService;
//import lombok.AllArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
//import org.springframework.context.ApplicationEventPublisher;
//import org.springframework.stereotype.Component;
//import org.springframework.transaction.PlatformTransactionManager;
//import org.springframework.transaction.TransactionDefinition;
//import org.springframework.transaction.TransactionStatus;
//
///**
// * 处理货主借款监听器
// */
//@Slf4j
//@Component
//@AllArgsConstructor
//public class OwnerLoanListener {
//
// private final OrderChildLoanComponent orderChildLoanComponent;
//
// private final SettlementMqService settlementMqService;
//
// private final ApplicationEventPublisher applicationEventPublisher;
//
// private final SettlementOwnerDetailDao settlementOwnerDetailDao;
//
// private final SettlementDriverDetailDao settlementDriverDetailDao;
//
// private final PlatformTransactionManager platformTransactionManager;
//
// private final TransactionDefinition transactionDefinition;
//
// @RabbitListener(queues = RabbitKeyConstants.OWNER_LOAN_QUEUE)
// public void onMessage(String message) {
// TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
//
// log.info("处理货主借款监听器执行,数据为{}", message);
// OwnerLoanMqDTO param = JSONUtil.toBean(message, OwnerLoanMqDTO.class);
// SettlementOwnerDetail settlementOwnerDetail = param.getSettlementOwnerDetail();
// SettlementDriverDetail settlementDriverDetail = param.getSettlementDriverDetail();
// OrderChild orderChild = param.getOrderChild();
//
// try {
// //生成借款标识
// orderChildLoanComponent.childLoanConfirmAfterProcess(settlementDriverDetail, settlementOwnerDetail, orderChild);
// } catch (Exception e) {
// //未借款
// settlementDriverDetail.setLoanFlag(OwnerLoanRecordEnum.LoanFlag.NO_LOAN.getCode());
// applicationEventPublisher.publishEvent(new SettlementUpdateEvent(this, settlementDriverDetail, settlementOwnerDetail));
// log.error("处理货主借款监听器执行异常,数据为{}", message, e);
// platformTransactionManager.commit(transactionStatus);
//
// return;
// }
// log.info("处理货主借款监听器执行成功");
// settlementOwnerDetailDao.updateInvoiceType(settlementOwnerDetail);
// settlementDriverDetailDao.updateInvoiceTypeAndPrepayFreightFlag(settlementDriverDetail);
//
// // 发送mq 通过开票标识
// settlementMqService.invoiceTypeSync(settlementDriverDetail.getChildNo(), settlementDriverDetail.getInvoiceType());
// platformTransactionManager.commit(transactionStatus);
//
// }
//}
...@@ -185,7 +185,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -185,7 +185,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
@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.selectOneByLoanNo(param.getLoanNo());
if (!ownerLoanRecord.getStatus().equals(OwnerLoanRecordEnum.Status.APPROVE_WAIT.getCode())) { if (!ownerLoanRecord.getStatus().equals(OwnerLoanRecordEnum.Status.APPROVE_WAIT.getCode())) {
log.info("当前借款单单号:{},状态:{}", ownerLoanRecord.getLoanNo(), ownerLoanRecord.getStatus()); log.info("当前借款单单号:{},状态:{}", ownerLoanRecord.getLoanNo(), ownerLoanRecord.getStatus());
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND); throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND);
...@@ -500,8 +500,8 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -500,8 +500,8 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
updateList.add(ownerLoanRecord.setLoanResidueBalance(BigDecimal.ZERO)); updateList.add(ownerLoanRecord.setLoanResidueBalance(BigDecimal.ZERO));
orderChildPriceTemp = orderChildPriceTemp.subtract(loanResidueBalance); orderChildPriceTemp = orderChildPriceTemp.subtract(loanResidueBalance);
} }
log.info("当前虚拟币orderChildPriceTemp:{}", orderChildPriceTemp);
} }
log.info("当前虚拟币orderChildPriceTemp:{}", orderChildPriceTemp);
} }
List<OwnerLoanRecord> fundList = listMap.get(OwnerLoanRecordEnum.LoanType.FUND.getCode()); List<OwnerLoanRecord> fundList = listMap.get(OwnerLoanRecordEnum.LoanType.FUND.getCode());
...@@ -521,8 +521,8 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -521,8 +521,8 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
updateList.add(ownerLoanRecord.setLoanResidueBalance(BigDecimal.ZERO)); updateList.add(ownerLoanRecord.setLoanResidueBalance(BigDecimal.ZERO));
orderChildPriceTemp = orderChildPriceTemp.subtract(loanResidueBalance); orderChildPriceTemp = orderChildPriceTemp.subtract(loanResidueBalance);
} }
log.info("当前资金orderChildPriceTemp:{}", orderChildPriceTemp);
} }
log.info("当前资金orderChildPriceTemp:{}", orderChildPriceTemp);
} }
...@@ -732,8 +732,14 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -732,8 +732,14 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
log.info("宁波银行响应当前业务,不能取消{}", JSONUtil.parse(result)); log.info("宁波银行响应当前业务,不能取消{}", JSONUtil.parse(result));
throw new ServiceSystemException(PerformanceResultEnum.OWNER_LOAN_RECORD_CANCEL_STATUS_ERROR); throw new ServiceSystemException(PerformanceResultEnum.OWNER_LOAN_RECORD_CANCEL_STATUS_ERROR);
} }
log.info("借款记录取消,更新状态为待审批"); if (OwnerLoanRecordEnum.LoanType.FUND.getCode().equals(ownerLoanRecord.getLoanType())) {
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.APPROVE_WAIT.getCode()); log.info("借款记录取消,更新状态为待审批");
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.PAY_WAIT.getCode());
} else {
ownerLoanRecord.setStatus(OwnerLoanRecordEnum.Status.APPROVE_WAIT.getCode());
}
ownerLoanRecordDao.updateStatusById(ownerLoanRecord); ownerLoanRecordDao.updateStatusById(ownerLoanRecord);
if (OwnerLoanRecordEnum.PayChannel.ORDER_DIRECT_PAY.getCode().equals(ownerLoanRecord.getPayChannel())) { if (OwnerLoanRecordEnum.PayChannel.ORDER_DIRECT_PAY.getCode().equals(ownerLoanRecord.getPayChannel())) {
...@@ -765,6 +771,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService { ...@@ -765,6 +771,7 @@ public class OwnerLoanRecordServiceImpl implements OwnerLoanRecordService {
waterRecord.setLoanType(ownerLoanRecord.getLoanType()); waterRecord.setLoanType(ownerLoanRecord.getLoanType());
waterRecord.setRunningWaterNo(idGenerateSnowFlake.nextId(1L)); waterRecord.setRunningWaterNo(idGenerateSnowFlake.nextId(1L));
waterRecord.setChildNo(childNo); waterRecord.setChildNo(childNo);
waterRecord.setCreateTime(LocalDateTime.now());
waterRecord.setRunningWaterType(OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode()); waterRecord.setRunningWaterType(OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode());
waterRecord.setAlterationBalance(orderChildPrice); waterRecord.setAlterationBalance(orderChildPrice);
OwnerLoanAccount account = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo, OwnerLoanAccount account = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo,
......
...@@ -39,6 +39,7 @@ import com.clx.performance.vo.pc.loan.owner.OwnerTransferPaymentDetailVO; ...@@ -39,6 +39,7 @@ import com.clx.performance.vo.pc.loan.owner.OwnerTransferPaymentDetailVO;
import com.clx.performance.vo.pc.nbbank.NbBankOrderResultVO; import com.clx.performance.vo.pc.nbbank.NbBankOrderResultVO;
import com.clx.user.vo.feign.OwnerInfoFeignVO; import com.clx.user.vo.feign.OwnerInfoFeignVO;
import com.clx.user.vo.pc.owner.OwnerBindCardVO; import com.clx.user.vo.pc.owner.OwnerBindCardVO;
import com.msl.common.base.Optional;
import com.msl.common.exception.ServiceSystemException; import com.msl.common.exception.ServiceSystemException;
import com.msl.common.result.Result; import com.msl.common.result.Result;
import com.msl.common.utils.DateUtils; import com.msl.common.utils.DateUtils;
...@@ -270,7 +271,13 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService { ...@@ -270,7 +271,13 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService {
BankTrade bankTrade = bankTradeDao.getOneByField(BankTrade::getMerchantRunningWaterNo, merSeqNo) BankTrade bankTrade = bankTradeDao.getOneByField(BankTrade::getMerchantRunningWaterNo, merSeqNo)
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); .orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
// 查询还款信息 // 查询还款信息
OwnerRepayment ownerRepayment = ownerRepaymentDao.getOneByField(OwnerRepayment::getRepaymentNo, bankTrade.getRelationNo()).get(); Optional<OwnerRepayment> optional = ownerRepaymentDao.getOneByField(OwnerRepayment::getRepaymentNo, bankTrade.getRelationNo());
if (!optional.isPresent()){
log.error("还款信息不存在,通过流水号查询的bankTrade的relationNo未在还款中查询到,流水号{}", merSeqNo);
return;
}
OwnerRepayment ownerRepayment = optional.get();
ownerRepayment.setStatus(OwnerRePaymentEnum.Status.PAY_SUCCESS.getCode()); ownerRepayment.setStatus(OwnerRePaymentEnum.Status.PAY_SUCCESS.getCode());
// 更新还款信息 // 更新还款信息
ownerRepaymentDao.updateStatusById(ownerRepayment); ownerRepaymentDao.updateStatusById(ownerRepayment);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论