提交 554f028a 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
...@@ -74,6 +74,26 @@ public enum OwnerLoanRecordEnum { ...@@ -74,6 +74,26 @@ public enum OwnerLoanRecordEnum {
} }
} }
@Getter
@AllArgsConstructor
public enum LoanTypeFlag {
V_F(0, "虚拟币+资金"),
VIRTUAL_CURRENCY(1, "虚拟币"),
FUND(2, "资金"),
;
private final Integer code;
private final String msg;
public static Optional<LoanTypeFlag> 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(LoanTypeFlag::getMsg).orElse("");
}
}
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum PayChannel { public enum PayChannel {
......
...@@ -9,6 +9,7 @@ import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO; ...@@ -9,6 +9,7 @@ import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO;
import com.clx.performance.constant.RedissonConstants; import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.OwnerRunningWaterRecordDao; import com.clx.performance.dao.OwnerRunningWaterRecordDao;
import com.clx.performance.dao.loan.OrderChildLoanRetryRecordDao;
import com.clx.performance.dao.loan.OwnerLoanAccountDao; import com.clx.performance.dao.loan.OwnerLoanAccountDao;
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;
...@@ -27,6 +28,7 @@ import com.clx.performance.event.OwnerRepaymentUpdateEvent; ...@@ -27,6 +28,7 @@ import com.clx.performance.event.OwnerRepaymentUpdateEvent;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.OwnerRunningWaterRecord; import com.clx.performance.model.OwnerRunningWaterRecord;
import com.clx.performance.model.loan.OrderChildLoanRetryRecord;
import com.clx.performance.model.loan.OwnerLoanAccount; import com.clx.performance.model.loan.OwnerLoanAccount;
import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord; import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord;
import com.clx.performance.model.loan.OwnerRepayment; import com.clx.performance.model.loan.OwnerRepayment;
...@@ -78,7 +80,7 @@ public class OrderChildLoanComponent { ...@@ -78,7 +80,7 @@ public class OrderChildLoanComponent {
private final ApplicationEventPublisher applicationEventPublisher; private final ApplicationEventPublisher applicationEventPublisher;
private final SettlementDriverDetailDao settlementDriverDetailDao; private final OrderChildLoanRetryRecordDao orderChildLoanRetryRecordDao;
private final NetworkDriverRunningWaterRecordService networkDriverRunningWaterRecordService; private final NetworkDriverRunningWaterRecordService networkDriverRunningWaterRecordService;
...@@ -103,6 +105,13 @@ public class OrderChildLoanComponent { ...@@ -103,6 +105,13 @@ public class OrderChildLoanComponent {
log.info("2.百分百预付不需要考虑借款账户"); log.info("2.百分百预付不需要考虑借款账户");
return; return;
} }
List<OrderChildLoanRetryRecord> orderChildLoanRetryRecordList = orderChildLoanRetryRecordDao.listByField(OrderChildLoanRetryRecord::getOwnerUserNo, ownerInfoFeignVO.getUserNo());
if (CollectionUtil.isNotEmpty(orderChildLoanRetryRecordList)) {
log.info("当前货主存在未借款,未预付的司机计费,货主编号为{}", ownerInfoFeignVO.getUserNo());
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL, "货主货款不足");
}
//发货-是否可超标准 0 否 1 是 //发货-是否可超标准 0 否 1 是
Integer overWeight = orderInfoVO.getOverWeight(); Integer overWeight = orderInfoVO.getOverWeight();
...@@ -172,11 +181,6 @@ public class OrderChildLoanComponent { ...@@ -172,11 +181,6 @@ public class OrderChildLoanComponent {
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL, "货主已欠款"); throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL, "货主已欠款");
} }
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.selectLoanFlag(orderGoods.getOrderNo());
if (settlementDriverDetail != null) {
log.info("当前订单存在未借款,未预付的司机计费,id{}", settlementDriverDetail.getId());
throw new ServiceSystemException(PerformanceResultEnum.ORDER_CHILD_SAVE_FAIL, "货主货款不足");
}
//查询审批通过并且未用完的借款 //查询审批通过并且未用完的借款
LoanBalanceDTO param = new LoanBalanceDTO(); LoanBalanceDTO param = new LoanBalanceDTO();
param.setOrderChildPrice(orderChildPrice); param.setOrderChildPrice(orderChildPrice);
...@@ -217,7 +221,7 @@ public class OrderChildLoanComponent { ...@@ -217,7 +221,7 @@ public class OrderChildLoanComponent {
log.info("3.当前是网运单,但预付运费不为0,说明已经处理"); log.info("3.当前是网运单,但预付运费不为0,说明已经处理");
return; return;
} }
Integer loanTypeFlag = null;
String childNo = settlementDriverDetail.getChildNo(); String childNo = settlementDriverDetail.getChildNo();
List<OwnerLoanAccountRunningWaterRecord> runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType(childNo); List<OwnerLoanAccountRunningWaterRecord> runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType(childNo);
...@@ -239,6 +243,7 @@ public class OrderChildLoanComponent { ...@@ -239,6 +243,7 @@ public class OrderChildLoanComponent {
runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType
(childNo, OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode()); (childNo, OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode());
loanTypeFlag = loanFlagTypeProcess(runningWaterRecordList);
childWriteOffOwnerLoanAccount(runningWaterRecordList); childWriteOffOwnerLoanAccount(runningWaterRecordList);
...@@ -248,6 +253,7 @@ public class OrderChildLoanComponent { ...@@ -248,6 +253,7 @@ public class OrderChildLoanComponent {
log.info("4.2 相等直接生成运单核销"); log.info("4.2 相等直接生成运单核销");
//相等直接生成运单核销 //相等直接生成运单核销
childWriteOffOwnerLoanAccount(runningWaterRecordList); childWriteOffOwnerLoanAccount(runningWaterRecordList);
loanTypeFlag = loanFlagTypeProcess(runningWaterRecordList);
} else if (alterationBalance.compareTo(settlementOwnerDetail.getSettlementFreight()) > 0) { } else if (alterationBalance.compareTo(settlementOwnerDetail.getSettlementFreight()) > 0) {
//大于,则生成核销后,释放冻结的借款 //大于,则生成核销后,释放冻结的借款
...@@ -288,6 +294,8 @@ public class OrderChildLoanComponent { ...@@ -288,6 +294,8 @@ public class OrderChildLoanComponent {
//核销扣除 //核销扣除
childWriteOffOwnerLoanAccount(frozenList); childWriteOffOwnerLoanAccount(frozenList);
loanTypeFlag = loanFlagTypeProcess(frozenList);
if (CollectionUtil.isNotEmpty(thawList)) { if (CollectionUtil.isNotEmpty(thawList)) {
OwnerLoanAccountRunningWaterRecord entity = runningWaterRecordList.get(0); OwnerLoanAccountRunningWaterRecord entity = runningWaterRecordList.get(0);
Long loanNo = entity.getLoanNo(); Long loanNo = entity.getLoanNo();
...@@ -314,12 +322,15 @@ public class OrderChildLoanComponent { ...@@ -314,12 +322,15 @@ public class OrderChildLoanComponent {
runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType
(childNo, OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode()); (childNo, OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode());
log.info("4.5新查询出冻结借款记录:{}", JSONUtil.parse(runningWaterRecordList)); log.info("4.5新查询出冻结借款记录:{}", JSONUtil.parse(runningWaterRecordList));
loanTypeFlag = loanFlagTypeProcess(runningWaterRecordList);
childWriteOffOwnerLoanAccount(runningWaterRecordList); childWriteOffOwnerLoanAccount(runningWaterRecordList);
} }
} }
//已借款 //已借款
settlementDriverDetail.setLoanFlag(OwnerLoanRecordEnum.LoanFlag.LOAN.getCode()); settlementDriverDetail.setLoanFlag(OwnerLoanRecordEnum.LoanFlag.LOAN.getCode());
settlementDriverDetail.setLoanTypeFlag(loanTypeFlag);
// 抵扣金额 // 抵扣金额
settlementOwnerDetail.setLoanFreight(settlementOwnerDetail.getSettlementFreight()); settlementOwnerDetail.setLoanFreight(settlementOwnerDetail.getSettlementFreight());
settlementOwnerDetail.setSettlementFreight(BigDecimal.ZERO); settlementOwnerDetail.setSettlementFreight(BigDecimal.ZERO);
...@@ -491,4 +502,28 @@ public class OrderChildLoanComponent { ...@@ -491,4 +502,28 @@ public class OrderChildLoanComponent {
return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).subtract(settlementOwnerDetail.getPrepayFreight()); return settlementOwnerDetail.getWeight().multiply(settlementOwnerDetail.getFreightPrice()).subtract(settlementOwnerDetail.getPrepayFreight());
} }
} }
public Integer loanFlagTypeProcess(List<OwnerLoanAccountRunningWaterRecord> runningWaterRecordList) {
Map<Integer, List<OwnerLoanAccountRunningWaterRecord>> listMap = runningWaterRecordList.stream().collect(Collectors.groupingBy(OwnerLoanAccountRunningWaterRecord::getLoanType));
List<OwnerLoanAccountRunningWaterRecord> vList = listMap.get(OwnerLoanRecordEnum.LoanType.VIRTUAL_CURRENCY.getCode());
List<OwnerLoanAccountRunningWaterRecord> fList = listMap.get(OwnerLoanRecordEnum.LoanType.FUND.getCode());
int vSize = 0;
int fSize = 0;
if (CollectionUtil.isNotEmpty(vList)) {
vSize = vList.size();
}
if (CollectionUtil.isNotEmpty(fList)) {
fSize = fList.size();
}
if (vSize >= 1
&& fSize >= 1
) {
return OwnerLoanRecordEnum.LoanTypeFlag.V_F.getCode();
} else if (vSize >= 1) {
return OwnerLoanRecordEnum.LoanTypeFlag.VIRTUAL_CURRENCY.getCode();
} else {
return OwnerLoanRecordEnum.LoanTypeFlag.FUND.getCode();
}
}
} }
...@@ -33,7 +33,6 @@ public class OwnerAccountComponent { ...@@ -33,7 +33,6 @@ public class OwnerAccountComponent {
orderFeign.saveOrderSettlementJobRecord(orderNo); orderFeign.saveOrderSettlementJobRecord(orderNo);
return; return;
} }
//TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2
Integer invoiceType = settlementOwnerDetailService.getInvoiceType(orderNo); Integer invoiceType = settlementOwnerDetailService.getInvoiceType(orderNo);
//1 网运单 2 普通单 //1 网运单 2 普通单
log.info("invoiceType={}", invoiceType); log.info("invoiceType={}", invoiceType);
......
...@@ -111,10 +111,22 @@ public class OwnerLoanAccountRunningWaterRecordDaoImpl extends BaseDaoImpl<Owner ...@@ -111,10 +111,22 @@ public class OwnerLoanAccountRunningWaterRecordDaoImpl extends BaseDaoImpl<Owner
OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode()) OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode())
); } ); }
@Override
public List<OwnerLoanAccountRunningWaterRecord> selectLoanRunningWatterRecord(Long loanNo, Integer runningWaterType) {
return baseMapper.selectList(lQrWrapper().eq(OwnerLoanAccountRunningWaterRecord::getLoanNo, loanNo)
.eq(OwnerLoanAccountRunningWaterRecord::getRunningWaterType, runningWaterType
)
); }
@Override @Override
public List<OwnerLoanAccountRunningWaterRecord> getListByChildNoAndRunningWaterType(List<String> childNoList, Integer runningWaterType) { public List<OwnerLoanAccountRunningWaterRecord> getListByChildNoAndRunningWaterType(List<String> childNoList, Integer runningWaterType) {
return baseMapper.selectList(lQrWrapper().in(OwnerLoanAccountRunningWaterRecord::getChildNo, childNoList) return baseMapper.selectList(lQrWrapper().in(OwnerLoanAccountRunningWaterRecord::getChildNo, childNoList)
.eq(OwnerLoanAccountRunningWaterRecord::getRunningWaterType, runningWaterType) .eq(OwnerLoanAccountRunningWaterRecord::getRunningWaterType, runningWaterType)
); );
} }
@Override
public List<OwnerLoanAccountRunningWaterRecord> selectLoanRunningWatterRecordByLoanNoForRepay(Long loanNo) {
return baseMapper.selectLoanRunningWatterRecordByLoanNoForRepay(loanNo);
}
} }
...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.settle.SettlementDriverDetailDao; import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum; import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.enums.settle.SettlementDriverEnum; import com.clx.performance.enums.settle.SettlementDriverEnum;
import com.clx.performance.enums.settle.SettlementOwnerEnum;
import com.clx.performance.mapper.settle.SettlementDriverDetailMapper; import com.clx.performance.mapper.settle.SettlementDriverDetailMapper;
import com.clx.performance.model.settle.SettlementDriverDetail; import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverDetailParam; import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverDetailParam;
...@@ -35,6 +36,7 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD ...@@ -35,6 +36,7 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD
.set(SettlementDriverDetail::getPrepayFreight, item.getPrepayFreight()) .set(SettlementDriverDetail::getPrepayFreight, item.getPrepayFreight())
.set(SettlementDriverDetail::getPrepayFreightFlag, item.getPrepayFreightFlag()) .set(SettlementDriverDetail::getPrepayFreightFlag, item.getPrepayFreightFlag())
.set(SettlementDriverDetail::getLoanFlag, item.getLoanFlag()) .set(SettlementDriverDetail::getLoanFlag, item.getLoanFlag())
.set(SettlementDriverDetail::getLoanTypeFlag, item.getLoanTypeFlag())
); );
} }
...@@ -96,8 +98,26 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD ...@@ -96,8 +98,26 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD
public SettlementDriverDetail selectLoanFlag(String orderNo) { public SettlementDriverDetail selectLoanFlag(String orderNo) {
return baseMapper.selectOne(lQrWrapper().eq(SettlementDriverDetail::getOrderNo, orderNo) return baseMapper.selectOne(lQrWrapper().eq(SettlementDriverDetail::getOrderNo, orderNo)
.eq(SettlementDriverDetail::getLoanFlag, OwnerLoanRecordEnum.LoanFlag.NO_LOAN.getCode()) .eq(SettlementDriverDetail::getLoanFlag, OwnerLoanRecordEnum.LoanFlag.NO_LOAN.getCode())
.eq(SettlementDriverDetail::getInvoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
.eq(SettlementDriverDetail::getPrepayFreightFlag, SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode()) .eq(SettlementDriverDetail::getPrepayFreightFlag, SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode())
.last("limit 1")
); );
} }
@Override
public SettlementDriverDetail selectLoanTypeFlag(String orderNo) {
return baseMapper.selectOne(lQrWrapper().eq(SettlementDriverDetail::getOrderNo, orderNo)
.eq(SettlementDriverDetail::getLoanFlag, OwnerLoanRecordEnum.LoanFlag.LOAN.getCode())
.eq(SettlementDriverDetail::getInvoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.getCode())
.ne(SettlementDriverDetail::getLoanTypeFlag, OwnerLoanRecordEnum.LoanTypeFlag.FUND.getCode())
.eq(SettlementDriverDetail::getPrepayFreightFlag, SettlementDriverEnum.PrepayFreightFlag.NO_PAY.getCode())
.last("limit 1")
);
}
@Override
public List<SettlementDriverDetail> selectListByLoanFlag(Integer code) {
return baseMapper.selectList(lQrWrapper().eq(SettlementDriverDetail::getLoanFlag, code));
}
} }
...@@ -31,6 +31,11 @@ public interface OwnerLoanAccountRunningWaterRecordDao extends BaseDao<OwnerLoan ...@@ -31,6 +31,11 @@ public interface OwnerLoanAccountRunningWaterRecordDao extends BaseDao<OwnerLoan
List<OwnerLoanAccountRunningWaterRecord> selectLoanRunningWatterRecord(Long loanNo); List<OwnerLoanAccountRunningWaterRecord> selectLoanRunningWatterRecord(Long loanNo);
List<OwnerLoanAccountRunningWaterRecord> selectLoanRunningWatterRecord(Long loanNo, Integer runningWaterType);
List<OwnerLoanAccountRunningWaterRecord> getListByChildNoAndRunningWaterType(List<String> childNoList, Integer runningWaterType); List<OwnerLoanAccountRunningWaterRecord> getListByChildNoAndRunningWaterType(List<String> childNoList, Integer runningWaterType);
//单独用,别复用
List<OwnerLoanAccountRunningWaterRecord> selectLoanRunningWatterRecordByLoanNoForRepay(Long loanNo);
} }
...@@ -35,4 +35,8 @@ public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetai ...@@ -35,4 +35,8 @@ public interface SettlementDriverDetailDao extends BaseDao<SettlementDriverDetai
void updateLoanFlagByChildNoList(List<String> childNoList); void updateLoanFlagByChildNoList(List<String> childNoList);
SettlementDriverDetail selectLoanFlag(String orderNo); SettlementDriverDetail selectLoanFlag(String orderNo);
SettlementDriverDetail selectLoanTypeFlag(String orderNo);
List<SettlementDriverDetail> selectListByLoanFlag(Integer code);
} }
...@@ -7,23 +7,24 @@ import com.clx.performance.component.OrderChildLoanComponent; ...@@ -7,23 +7,24 @@ import com.clx.performance.component.OrderChildLoanComponent;
import com.clx.performance.constant.RabbitKeyConstants; 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.OwnerLoanRecordDao;
import com.clx.performance.dao.loan.OwnerRepaymentDao; import com.clx.performance.dao.loan.OwnerRepaymentDao;
import com.clx.performance.dao.settle.SettlementDriverDao; 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;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.loan.OrderChildLoanRetryRecord; import com.clx.performance.model.loan.OrderChildLoanRetryRecord;
import com.clx.performance.model.loan.OwnerLoanAccount;
import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord; import com.clx.performance.model.loan.OwnerLoanAccountRunningWaterRecord;
import com.clx.performance.model.loan.OwnerLoanRecord;
import com.clx.performance.model.loan.OwnerRepayment; 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.settle.SettlementMqService; import com.clx.performance.service.settle.SettlementMqService;
import com.msl.common.base.Optional;
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.Message;
...@@ -33,12 +34,13 @@ import org.springframework.context.ApplicationEventPublisher; ...@@ -33,12 +34,13 @@ 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.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener; import org.springframework.transaction.event.TransactionalEventListener;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Component @Component
...@@ -66,9 +68,11 @@ public class EventListenerComponent { ...@@ -66,9 +68,11 @@ public class EventListenerComponent {
private final RabbitTemplate rabbitTemplate; private final RabbitTemplate rabbitTemplate;
private final OwnerLoanRecordDao ownerLoanRecordDao;
@Async @Async
@TransactionalEventListener(classes = {SettlementUpdateEvent.class},phase = TransactionPhase.AFTER_ROLLBACK,fallbackExecution = true) @TransactionalEventListener(classes = {SettlementUpdateEvent.class}, phase = TransactionPhase.AFTER_ROLLBACK, fallbackExecution = true)
public void listen(SettlementUpdateEvent event) { public void listen(SettlementUpdateEvent event) {
log.info("SettlementUpdateEvent事件执行"); log.info("SettlementUpdateEvent事件执行");
SettlementOwnerDetail settlementOwnerDetail = event.getSettlementOwnerDetail(); SettlementOwnerDetail settlementOwnerDetail = event.getSettlementOwnerDetail();
...@@ -101,7 +105,7 @@ public class EventListenerComponent { ...@@ -101,7 +105,7 @@ public class EventListenerComponent {
} }
@Async @Async
@TransactionalEventListener(classes = {OwnerLoanEvent.class},phase = TransactionPhase.AFTER_COMMIT,fallbackExecution = true) @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();
...@@ -132,25 +136,48 @@ public class EventListenerComponent { ...@@ -132,25 +136,48 @@ public class EventListenerComponent {
public void listen(OwnerLoanFlagEvent event) { public void listen(OwnerLoanFlagEvent event) {
log.info("OwnerLoanFlagEvent事件执行"); log.info("OwnerLoanFlagEvent事件执行");
Long loanNo = event.getLoanNo(); Long loanNo = event.getLoanNo();
List<OwnerLoanAccountRunningWaterRecord> records = ownerLoanAccountRunningWaterRecordDao.selectLoanRunningWatterRecord(loanNo); List<OwnerLoanAccountRunningWaterRecord> records = ownerLoanAccountRunningWaterRecordDao.selectLoanRunningWatterRecordByLoanNoForRepay
if (CollectionUtil.isEmpty(records)) { (loanNo);
return;
}
Map<String, List<OwnerLoanAccountRunningWaterRecord>> listMap = records.stream().collect(Collectors.groupingBy(OwnerLoanAccountRunningWaterRecord::getChildNo)); Map<String, List<OwnerLoanAccountRunningWaterRecord>> listMap = records.stream().collect(Collectors.groupingBy(OwnerLoanAccountRunningWaterRecord::getChildNo));
List<String> childNoList = new LinkedList<>(); List<String> childNoList = new LinkedList<>();
for (Map.Entry<String, List<OwnerLoanAccountRunningWaterRecord>> entry : listMap.entrySet()) { for (Map.Entry<String, List<OwnerLoanAccountRunningWaterRecord>> entry : listMap.entrySet()) {
if (entry.getValue().size() == 1) { if (entry.getValue().size() == 1) {
childNoList.add(entry.getKey()); childNoList.add(entry.getKey());
} else { } else {
log.info("当前运单:{} 存在多条运单流水记录,无法更新运单的贷款标识",entry.getKey()); boolean flag = true;
for (OwnerLoanAccountRunningWaterRecord record : entry.getValue()) {
if (record.getLoanNo().equals(loanNo)) {
continue;
}
Optional<OwnerRepayment> optional = ownerRepaymentDao.getOneByField(OwnerRepayment::getLoanNo, record.getLoanNo());
if (!optional.isPresent()) {
//没有还款记录
flag = false;
break;
} else {
OwnerRepayment ownerRepayment = optional.get();
//其他流水记录对应的还款单不是付款成功
if (!ownerRepayment.getStatus().equals(OwnerRePaymentEnum.Status.PAY_SUCCESS.getCode())) {
log.info("当前运单号{},对应多条流水,其中流水号:{},对应的还款单号{},未还款", entry.getKey(), record.getRunningWaterNo(), ownerRepayment.getRepaymentNo());
flag = false;
break;
}
}
}
if (flag) {
childNoList.add(entry.getKey());
}
} }
} }
log.info("当前需要更新的运单数量:{}", listMap.size());
settlementDriverDetailDao.updateLoanFlagByChildNoList(childNoList); log.info("需要更新计费明细借款标识为已还款的运单号:{}", JSONUtil.parse(childNoList));
settlementDriverDao.updateLoanFlagByChildNoList(childNoList); if (CollectionUtil.isNotEmpty(childNoList)) {
settlementDriverDetailDao.updateLoanFlagByChildNoList(childNoList);
settlementDriverDao.updateLoanFlagByChildNoList(childNoList);
}
} }
@EventListener(classes = {OrderChildCancelEvent.class}) @EventListener(classes = {OrderChildCancelEvent.class})
...@@ -174,7 +201,7 @@ public class EventListenerComponent { ...@@ -174,7 +201,7 @@ public class EventListenerComponent {
String ownerUserName = record.getOwnerUserName(); String ownerUserName = record.getOwnerUserName();
BigDecimal balance = record.getAlterationBalance(); BigDecimal balance = record.getAlterationBalance();
//解冻借款 //解冻借款
orderChildLoanComponent.thawOwnerLoanAccount(loanNo, loanType, ownerUserNo, record.getMobile(), ownerUserName, childNo, balance); orderChildLoanComponent.thawOwnerLoanAccount(loanNo, loanType, ownerUserNo, ownerUserName, record.getMobile(), childNo, balance);
} }
} }
......
...@@ -46,7 +46,7 @@ public class LargeScreenListener { ...@@ -46,7 +46,7 @@ public class LargeScreenListener {
private final MongoTemplate mongoTemplate; private final MongoTemplate mongoTemplate;
@Transactional(rollbackFor = Exception.class) //@Transactional(rollbackFor = Exception.class)
@RabbitListener(queues = RabbitKeyConstants.ORDER_LARGE_SCREEN_QUEUE) @RabbitListener(queues = RabbitKeyConstants.ORDER_LARGE_SCREEN_QUEUE)
public void onMessage(String message) { public void onMessage(String message) {
try { try {
......
...@@ -72,6 +72,12 @@ public class OrderChildDtsListener { ...@@ -72,6 +72,12 @@ public class OrderChildDtsListener {
if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) && !Objects.equals(before.getStatus(),after.getStatus())){ if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) && !Objects.equals(before.getStatus(),after.getStatus())){
orderChildChangeAfter(after); orderChildChangeAfter(after);
} }
if(OrderChildEnum.DTS_LISTEN_CANCEL_lIST.contains(after.getStatus())){
//运单取消释放借款冻结金额
log.info("DTS运单取消释放借款冻结金额");
applicationEventPublisher.publishEvent(new OrderChildCancelEvent(this, after.getChildNo()));
}
}else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){ }else if(Objects.equals(DtsOperationTypeEnum.DELETE.getCode(),dataTransportDTO.getOperationType().getCode())){
//数据删除 //数据删除
log.info("删除:{}"+before); log.info("删除:{}"+before);
...@@ -96,10 +102,6 @@ public class OrderChildDtsListener { ...@@ -96,10 +102,6 @@ public class OrderChildDtsListener {
//如果订单是取消操作,同步给交易平台统一 10000 的code //如果订单是取消操作,同步给交易平台统一 10000 的code
if(OrderChildEnum.DTS_LISTEN_CANCEL_lIST.contains(after.getStatus())){ if(OrderChildEnum.DTS_LISTEN_CANCEL_lIST.contains(after.getStatus())){
after.setStatus(com.clx.open.sdk.enums.OrderChildEnum.Status.COMMON_CANCEL.getCode()); after.setStatus(com.clx.open.sdk.enums.OrderChildEnum.Status.COMMON_CANCEL.getCode());
//运单取消释放借款冻结金额
log.info("DTS运单取消释放借款冻结金额");
applicationEventPublisher.publishEvent(new OrderChildCancelEvent(this, after.getChildNo()));
} }
after.setLastFlag(ResultStatusEnum.NO.getCode()); after.setLastFlag(ResultStatusEnum.NO.getCode());
OpenCallBackClient client = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret()); OpenCallBackClient client = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret());
......
...@@ -10,6 +10,8 @@ import com.clx.performance.vo.pc.loan.carrier.OwnerLoanAccountRunningWaterRecord ...@@ -10,6 +10,8 @@ import com.clx.performance.vo.pc.loan.carrier.OwnerLoanAccountRunningWaterRecord
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider; import org.apache.ibatis.annotations.SelectProvider;
import java.util.List;
/** /**
* @author kavin * @author kavin
* Date 2024-01-20 * Date 2024-01-20
...@@ -23,4 +25,6 @@ public interface OwnerLoanAccountRunningWaterRecordMapper extends BaseMapper<Own ...@@ -23,4 +25,6 @@ public interface OwnerLoanAccountRunningWaterRecordMapper extends BaseMapper<Own
@SelectProvider(type = OwnerLoanAccountRunningWaterRecordSqlProvider.class, method = "pageByParam") @SelectProvider(type = OwnerLoanAccountRunningWaterRecordSqlProvider.class, method = "pageByParam")
IPage<OwnerLoanAccountRunningWaterRecordVO> pageByParam(@Param("page") Page<OwnerLoanAccountRunningWaterRecordVO> page, @Param("param") PageOwnerLoanAccountWaterRecordOfOwnerParam param); IPage<OwnerLoanAccountRunningWaterRecordVO> pageByParam(@Param("page") Page<OwnerLoanAccountRunningWaterRecordVO> page, @Param("param") PageOwnerLoanAccountWaterRecordOfOwnerParam param);
@SelectProvider(type = OwnerLoanAccountRunningWaterRecordSqlProvider.class, method = "selectLoanRunningWatterRecordByLoanNoForRepay")
List<OwnerLoanAccountRunningWaterRecord> selectLoanRunningWatterRecordByLoanNoForRepay(@Param("loanNo")Long loanNo);
} }
...@@ -45,6 +45,7 @@ public class SettlementDriverDetail implements HasKey<Integer> { ...@@ -45,6 +45,7 @@ public class SettlementDriverDetail implements HasKey<Integer> {
private BigDecimal prepayFreight; //预付运费金额(分) private BigDecimal prepayFreight; //预付运费金额(分)
private Integer prepayFreightFlag; //预付运费标示 0:未预付 1:已预付 private Integer prepayFreightFlag; //预付运费标示 0:未预付 1:已预付
private Integer loanFlag; //借款标示 0:未借款 1:已借款 2:已还款 private Integer loanFlag; //借款标示 0:未借款 1:已借款 2:已还款
private Integer loanTypeFlag; //借款类型标示 0:虚拟货币+资金 1:虚拟货币 2:资金
private BigDecimal settlementFreight; //结算金额(分) private BigDecimal settlementFreight; //结算金额(分)
private Integer invoiceType; //开票标识:1网运单 2普通单 private Integer invoiceType; //开票标识:1网运单 2普通单
private Integer status; //状态 private Integer status; //状态
......
...@@ -9,6 +9,7 @@ import com.clx.performance.dao.loan.OwnerRepaymentDao; ...@@ -9,6 +9,7 @@ import com.clx.performance.dao.loan.OwnerRepaymentDao;
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.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.OwnerBindCardRecord; import com.clx.performance.model.OwnerBindCardRecord;
import com.clx.performance.model.loan.BankTrade; import com.clx.performance.model.loan.BankTrade;
...@@ -129,7 +130,7 @@ public class OwnerLoanAccountServiceImpl implements OwnerLoanAccountService { ...@@ -129,7 +130,7 @@ public class OwnerLoanAccountServiceImpl implements OwnerLoanAccountService {
ownerRepayment.setCloseOrderTime(orderPayResultVO.getCloseDtTm()); ownerRepayment.setCloseOrderTime(orderPayResultVO.getCloseDtTm());
bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_TRANSFER_PAY.getCode()); bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_TRANSFER_PAY.getCode());
} }
ownerRepayment.setStatus(OwnerLoanRecordEnum.Status.PAYING.getCode()); ownerRepayment.setStatus(OwnerRePaymentEnum.Status.PAYING.getCode());
ownerRepayment.setPayChannel(param.getPayChannel()); ownerRepayment.setPayChannel(param.getPayChannel());
OwnerInfoFeignVO ownerInfo = ownerInfoService.getOwnerInfo(TokenUtil.getLoginUserInfo().getUserNo()); OwnerInfoFeignVO ownerInfo = ownerInfoService.getOwnerInfo(TokenUtil.getLoginUserInfo().getUserNo());
ownerRepayment.setPayment(ownerBindCardRecord.getAccountBankName()); ownerRepayment.setPayment(ownerBindCardRecord.getAccountBankName());
......
...@@ -273,10 +273,14 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService { ...@@ -273,10 +273,14 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService {
// 查询还款信息 // 查询还款信息
Optional<OwnerRepayment> optional = ownerRepaymentDao.getOneByField(OwnerRepayment::getRepaymentNo, bankTrade.getRelationNo()); Optional<OwnerRepayment> optional = ownerRepaymentDao.getOneByField(OwnerRepayment::getRepaymentNo, bankTrade.getRelationNo());
if (!optional.isPresent()){ if (!optional.isPresent()){
log.error("还款信息不存在,通过流水号查询的bankTrade的relationNo未在还款中查询到,流水号{}", merSeqNo); log.info("还款信息不存在,通过流水号查询的bankTrade的relationNo未在还款中查询到,流水号{}", merSeqNo);
return; return;
} }
OwnerRepayment ownerRepayment = optional.get(); OwnerRepayment ownerRepayment = optional.get();
if (!ownerRepayment.getStatus().equals(OwnerRePaymentEnum.Status.PAYING.getCode())) {
log.info("当前还款信息状态不是付款中,数据为{}", JSONUtil.parse(ownerRepayment));
return;
}
ownerRepayment.setStatus(OwnerRePaymentEnum.Status.PAY_SUCCESS.getCode()); ownerRepayment.setStatus(OwnerRePaymentEnum.Status.PAY_SUCCESS.getCode());
// 更新还款信息 // 更新还款信息
...@@ -285,6 +289,7 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService { ...@@ -285,6 +289,7 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService {
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo, OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo,
ownerRepayment.getLoanNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND); ownerRepayment.getLoanNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
while (true) { while (true) {
OwnerLoanAccount ownerLoanAccount = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo, OwnerLoanAccount ownerLoanAccount = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo,
ownerLoanRecord.getOwnerUserNo()).get(); ownerLoanRecord.getOwnerUserNo()).get();
...@@ -306,7 +311,11 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService { ...@@ -306,7 +311,11 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService {
entity.setId(ownerLoanAccount.getId()); entity.setId(ownerLoanAccount.getId());
entity.setModifiedTime(ownerLoanAccount.getModifiedTime()); entity.setModifiedTime(ownerLoanAccount.getModifiedTime());
log.info("还款成功,清除货主欠款,当前货主虚拟币欠款={},当前货主资金账户欠款={},",
ownerLoanAccount.getVirtuallyAccountBalance(), ownerLoanAccount.getFundingAccountBalance()
);
log.info("还款更新账户参数为:{}", JSONUtil.parse(entity));
Integer flag = ownerLoanAccountDao.updateAccountCAS(entity, LocalDateTime.now(), false); Integer flag = ownerLoanAccountDao.updateAccountCAS(entity, LocalDateTime.now(), false);
if (flag > 0) { if (flag > 0) {
break; break;
......
...@@ -4,11 +4,13 @@ import cn.hutool.core.collection.CollectionUtil; ...@@ -4,11 +4,13 @@ import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.OrderChildDao; import com.clx.performance.dao.OrderChildDao;
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.enums.settle.SettlementOwnerDetailEnum; import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementWayEnum; import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.model.OrderChild; import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods; import com.clx.performance.model.OrderGoods;
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.param.pc.owner.PageCarrierSettlementOwnerDetailParam; import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam; import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
...@@ -45,6 +47,7 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -45,6 +47,7 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
private final SettlementOwnerDetailDao settlementOwnerDetailDao; private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final SettlementOwnerDetailStruct settlementOwnerDetailStruct; private final SettlementOwnerDetailStruct settlementOwnerDetailStruct;
private final OrderChildDao orderChildDao; private final OrderChildDao orderChildDao;
private final SettlementDriverDetailDao settlementDriverDetailDao;
@Override @Override
...@@ -257,17 +260,38 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS ...@@ -257,17 +260,38 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
public Boolean thawAndLockSettlement(String orderNo) { public Boolean thawAndLockSettlement(String orderNo) {
boolean orderChildrenFlag = false; boolean orderChildrenFlag = false;
boolean ownerDetailsFlag = false; boolean ownerDetailsFlag = false;
boolean loanFlag = false;
List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildLtUnsettle(orderNo); List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildLtUnsettle(orderNo);
List<SettlementOwnerDetail> ownerDetails = settlementOwnerDetailDao.selectListByOrderNo(orderNo);
if (CollectionUtil.isNotEmpty(ownerDetails)) {
ownerDetailsFlag = true;
}
if (CollectionUtil.isNotEmpty(orderChildren)) { if (CollectionUtil.isNotEmpty(orderChildren)) {
log.info("当前订单{},存在在途运单,不予锁定", orderNo);
orderChildrenFlag = true; orderChildrenFlag = true;
} else {
List<SettlementOwnerDetail> ownerDetails = settlementOwnerDetailDao.selectListByOrderNo(orderNo);
if (CollectionUtil.isNotEmpty(ownerDetails)) {
log.info("当前订单{},存在结算单编号是null的货主计费,不予锁定", orderNo);
ownerDetailsFlag = true;
} else {
//开票标识“网运单”,预付标识“未预付”,借款标识”未借款“的车主计费,如存在不允许锁定
SettlementDriverDetail settlementDriverDetail = settlementDriverDetailDao.selectLoanFlag(orderNo);
if (settlementDriverDetail != null) {
log.info("当前订单{},开票标识“网运单”,预付标识“未预付”,借款标识”未借款“的车主计费,不予锁定", orderNo);
loanFlag = true;
} else {
//开票标识“网运单”,预付标识“未预付”,借款类型“虚拟货币”,借款标识”已借款“的车主计费,如存在不允许锁定
settlementDriverDetail = settlementDriverDetailDao.selectLoanTypeFlag(orderNo);
if (settlementDriverDetail != null) {
log.info("当前订单{},开票标识“网运单”,预付标识“未预付”,借款标识”未借款“的车主计费,不予锁定", orderNo);
loanFlag = true;
}
}
}
} }
if (ownerDetailsFlag || orderChildrenFlag) { if (ownerDetailsFlag || orderChildrenFlag || loanFlag) {
return true; return true;
} else { } else {
return false; return false;
......
package com.clx.performance.sqlProvider.loan; package com.clx.performance.sqlProvider.loan;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.enums.loan.OwnerLoanAccountRunningWaterRecordEnum;
import com.clx.performance.param.pc.PageOwnerCaseOutListParam;
import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanAccountWaterRecordOfOwnerParam; import com.clx.performance.param.pc.loan.carrier.PageOwnerLoanAccountWaterRecordOfOwnerParam;
import com.clx.performance.vo.pc.loan.carrier.OwnerLoanAccountRunningWaterRecordVO; import com.clx.performance.vo.pc.loan.carrier.OwnerLoanAccountRunningWaterRecordVO;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -34,4 +37,18 @@ public class OwnerLoanAccountRunningWaterRecordSqlProvider { ...@@ -34,4 +37,18 @@ public class OwnerLoanAccountRunningWaterRecordSqlProvider {
}}.toString(); }}.toString();
} }
public String selectLoanRunningWatterRecordByLoanNoForRepay(@Param("loanNo") Long loanNo) {
String inSql ="(select distinct child_no from owner_loan_account_running_water_record where loan_no = #{loanNo} and running_water_type =" + OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_CHILD_WRITE_OFF.getCode() + ")";
String sql = "select id, owner_user_no as ownerUserNo, owner_user_name as ownerUserName, mobile, " +
" running_water_no as runningWaterNo, loan_no as loanNo, child_no as childNo, " +
" running_water_type as runningWaterType, " +
" alteration_balance as alterationBalance, use_able_balance as useAbleBalance, frozen_balance as frozenBalance, account_balance as accountBalance, " +
" create_by as createBy, " +
" date_format(create_time, '%Y-%m-%d %H:%i:%s') as createTime, " +
" date_format(modified_time, '%Y-%m-%d %H:%i:%s') as modifiedTime from owner_loan_account_running_water_record where running_water_type = " + OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_CHILD_WRITE_OFF.getCode()
+" and child_no in " + inSql;
return sql;
}
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论