提交 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 {
}
}
@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
@AllArgsConstructor
public enum PayChannel {
......
......@@ -9,6 +9,7 @@ import com.clx.order.vo.pc.owner.OwnerQuotationDetailVO;
import com.clx.performance.constant.RedissonConstants;
import com.clx.performance.dao.OrderChildDao;
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.OwnerLoanAccountRunningWaterRecordDao;
import com.clx.performance.dao.loan.OwnerRepaymentDao;
......@@ -27,6 +28,7 @@ import com.clx.performance.event.OwnerRepaymentUpdateEvent;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
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.OwnerLoanAccountRunningWaterRecord;
import com.clx.performance.model.loan.OwnerRepayment;
......@@ -78,7 +80,7 @@ public class OrderChildLoanComponent {
private final ApplicationEventPublisher applicationEventPublisher;
private final SettlementDriverDetailDao settlementDriverDetailDao;
private final OrderChildLoanRetryRecordDao orderChildLoanRetryRecordDao;
private final NetworkDriverRunningWaterRecordService networkDriverRunningWaterRecordService;
......@@ -103,6 +105,13 @@ public class OrderChildLoanComponent {
log.info("2.百分百预付不需要考虑借款账户");
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 是
Integer overWeight = orderInfoVO.getOverWeight();
......@@ -172,11 +181,6 @@ public class OrderChildLoanComponent {
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();
param.setOrderChildPrice(orderChildPrice);
......@@ -217,7 +221,7 @@ public class OrderChildLoanComponent {
log.info("3.当前是网运单,但预付运费不为0,说明已经处理");
return;
}
Integer loanTypeFlag = null;
String childNo = settlementDriverDetail.getChildNo();
List<OwnerLoanAccountRunningWaterRecord> runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType(childNo);
......@@ -239,6 +243,7 @@ public class OrderChildLoanComponent {
runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType
(childNo, OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode());
loanTypeFlag = loanFlagTypeProcess(runningWaterRecordList);
childWriteOffOwnerLoanAccount(runningWaterRecordList);
......@@ -248,6 +253,7 @@ public class OrderChildLoanComponent {
log.info("4.2 相等直接生成运单核销");
//相等直接生成运单核销
childWriteOffOwnerLoanAccount(runningWaterRecordList);
loanTypeFlag = loanFlagTypeProcess(runningWaterRecordList);
} else if (alterationBalance.compareTo(settlementOwnerDetail.getSettlementFreight()) > 0) {
//大于,则生成核销后,释放冻结的借款
......@@ -288,6 +294,8 @@ public class OrderChildLoanComponent {
//核销扣除
childWriteOffOwnerLoanAccount(frozenList);
loanTypeFlag = loanFlagTypeProcess(frozenList);
if (CollectionUtil.isNotEmpty(thawList)) {
OwnerLoanAccountRunningWaterRecord entity = runningWaterRecordList.get(0);
Long loanNo = entity.getLoanNo();
......@@ -314,12 +322,15 @@ public class OrderChildLoanComponent {
runningWaterRecordList = ownerLoanAccountRunningWaterRecordDao.getListByChildNoAndRunningWaterType
(childNo, OwnerLoanAccountRunningWaterRecordEnum.RunWaterType.APPROVE_FROZEN.getCode());
log.info("4.5新查询出冻结借款记录:{}", JSONUtil.parse(runningWaterRecordList));
loanTypeFlag = loanFlagTypeProcess(runningWaterRecordList);
childWriteOffOwnerLoanAccount(runningWaterRecordList);
}
}
//已借款
settlementDriverDetail.setLoanFlag(OwnerLoanRecordEnum.LoanFlag.LOAN.getCode());
settlementDriverDetail.setLoanTypeFlag(loanTypeFlag);
// 抵扣金额
settlementOwnerDetail.setLoanFreight(settlementOwnerDetail.getSettlementFreight());
settlementOwnerDetail.setSettlementFreight(BigDecimal.ZERO);
......@@ -491,4 +502,28 @@ public class OrderChildLoanComponent {
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 {
orderFeign.saveOrderSettlementJobRecord(orderNo);
return;
}
//TODO 注意判断普通单还是网运单 普通单类型 1 网运单 2
Integer invoiceType = settlementOwnerDetailService.getInvoiceType(orderNo);
//1 网运单 2 普通单
log.info("invoiceType={}", invoiceType);
......
......@@ -111,10 +111,22 @@ public class OwnerLoanAccountRunningWaterRecordDaoImpl extends BaseDaoImpl<Owner
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
public List<OwnerLoanAccountRunningWaterRecord> getListByChildNoAndRunningWaterType(List<String> childNoList, Integer runningWaterType) {
return baseMapper.selectList(lQrWrapper().in(OwnerLoanAccountRunningWaterRecord::getChildNo, childNoList)
.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;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
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.model.settle.SettlementDriverDetail;
import com.clx.performance.param.pc.driver.PageCarrierSettlementDriverDetailParam;
......@@ -35,6 +36,7 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD
.set(SettlementDriverDetail::getPrepayFreight, item.getPrepayFreight())
.set(SettlementDriverDetail::getPrepayFreightFlag, item.getPrepayFreightFlag())
.set(SettlementDriverDetail::getLoanFlag, item.getLoanFlag())
.set(SettlementDriverDetail::getLoanTypeFlag, item.getLoanTypeFlag())
);
}
......@@ -96,8 +98,26 @@ public class SettlementDriverDetailDaoImpl extends BaseDaoImpl<SettlementDriverD
public SettlementDriverDetail selectLoanFlag(String orderNo) {
return baseMapper.selectOne(lQrWrapper().eq(SettlementDriverDetail::getOrderNo, orderNo)
.eq(SettlementDriverDetail::getLoanFlag, OwnerLoanRecordEnum.LoanFlag.NO_LOAN.getCode())
.eq(SettlementDriverDetail::getInvoiceType, SettlementOwnerEnum.InvoiceType.ONLINE.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
List<OwnerLoanAccountRunningWaterRecord> selectLoanRunningWatterRecord(Long loanNo);
List<OwnerLoanAccountRunningWaterRecord> selectLoanRunningWatterRecord(Long loanNo, 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
void updateLoanFlagByChildNoList(List<String> childNoList);
SettlementDriverDetail selectLoanFlag(String orderNo);
SettlementDriverDetail selectLoanTypeFlag(String orderNo);
List<SettlementDriverDetail> selectListByLoanFlag(Integer code);
}
......@@ -7,23 +7,24 @@ 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.OwnerLoanAccountRunningWaterRecordDao;
import com.clx.performance.dao.loan.OwnerLoanRecordDao;
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.OwnerLoanMqDTO;
import com.clx.performance.enums.loan.BankTradeEnum;
import com.clx.performance.enums.loan.OwnerLoanAccountRunningWaterRecordEnum;
import com.clx.performance.enums.loan.OwnerLoanRecordEnum;
import com.clx.performance.enums.loan.OwnerRePaymentEnum;
import com.clx.performance.model.OrderChild;
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.OwnerLoanRecord;
import com.clx.performance.model.loan.OwnerRepayment;
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 lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
......@@ -33,12 +34,13 @@ import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener;
import java.math.BigDecimal;
import java.util.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Component
......@@ -66,9 +68,11 @@ public class EventListenerComponent {
private final RabbitTemplate rabbitTemplate;
private final OwnerLoanRecordDao ownerLoanRecordDao;
@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) {
log.info("SettlementUpdateEvent事件执行");
SettlementOwnerDetail settlementOwnerDetail = event.getSettlementOwnerDetail();
......@@ -101,7 +105,7 @@ public class EventListenerComponent {
}
@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) {
log.info("OwnerLoanEvent事件执行");
OwnerLoanMqDTO param = event.getParam();
......@@ -132,25 +136,48 @@ public class EventListenerComponent {
public void listen(OwnerLoanFlagEvent event) {
log.info("OwnerLoanFlagEvent事件执行");
Long loanNo = event.getLoanNo();
List<OwnerLoanAccountRunningWaterRecord> records = ownerLoanAccountRunningWaterRecordDao.selectLoanRunningWatterRecord(loanNo);
if (CollectionUtil.isEmpty(records)) {
return;
}
List<OwnerLoanAccountRunningWaterRecord> records = ownerLoanAccountRunningWaterRecordDao.selectLoanRunningWatterRecordByLoanNoForRepay
(loanNo);
Map<String, List<OwnerLoanAccountRunningWaterRecord>> listMap = records.stream().collect(Collectors.groupingBy(OwnerLoanAccountRunningWaterRecord::getChildNo));
List<String> childNoList = new LinkedList<>();
for (Map.Entry<String, List<OwnerLoanAccountRunningWaterRecord>> entry : listMap.entrySet()) {
if (entry.getValue().size() == 1) {
childNoList.add(entry.getKey());
} 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);
settlementDriverDao.updateLoanFlagByChildNoList(childNoList);
log.info("需要更新计费明细借款标识为已还款的运单号:{}", JSONUtil.parse(childNoList));
if (CollectionUtil.isNotEmpty(childNoList)) {
settlementDriverDetailDao.updateLoanFlagByChildNoList(childNoList);
settlementDriverDao.updateLoanFlagByChildNoList(childNoList);
}
}
@EventListener(classes = {OrderChildCancelEvent.class})
......@@ -174,7 +201,7 @@ public class EventListenerComponent {
String ownerUserName = record.getOwnerUserName();
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 {
private final MongoTemplate mongoTemplate;
@Transactional(rollbackFor = Exception.class)
//@Transactional(rollbackFor = Exception.class)
@RabbitListener(queues = RabbitKeyConstants.ORDER_LARGE_SCREEN_QUEUE)
public void onMessage(String message) {
try {
......
......@@ -72,6 +72,12 @@ public class OrderChildDtsListener {
if(OrderChildEnum.SYNC_STATUS_lIST.contains(after.getStatus()) && !Objects.equals(before.getStatus(),after.getStatus())){
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())){
//数据删除
log.info("删除:{}"+before);
......@@ -96,10 +102,6 @@ public class OrderChildDtsListener {
//如果订单是取消操作,同步给交易平台统一 10000 的code
if(OrderChildEnum.DTS_LISTEN_CANCEL_lIST.contains(after.getStatus())){
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());
OpenCallBackClient client = new OpenCallBackClient(mslAppConfig.getUrl(),mslAppConfig.getAppId(),mslAppConfig.getSecret());
......
......@@ -10,6 +10,8 @@ import com.clx.performance.vo.pc.loan.carrier.OwnerLoanAccountRunningWaterRecord
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
import java.util.List;
/**
* @author kavin
* Date 2024-01-20
......@@ -23,4 +25,6 @@ public interface OwnerLoanAccountRunningWaterRecordMapper extends BaseMapper<Own
@SelectProvider(type = OwnerLoanAccountRunningWaterRecordSqlProvider.class, method = "pageByParam")
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> {
private BigDecimal prepayFreight; //预付运费金额(分)
private Integer prepayFreightFlag; //预付运费标示 0:未预付 1:已预付
private Integer loanFlag; //借款标示 0:未借款 1:已借款 2:已还款
private Integer loanTypeFlag; //借款类型标示 0:虚拟货币+资金 1:虚拟货币 2:资金
private BigDecimal settlementFreight; //结算金额(分)
private Integer invoiceType; //开票标识:1网运单 2普通单
private Integer status; //状态
......
......@@ -9,6 +9,7 @@ import com.clx.performance.dao.loan.OwnerRepaymentDao;
import com.clx.performance.enums.OwnerAccountEnum;
import com.clx.performance.enums.loan.BankTradeEnum;
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.model.OwnerBindCardRecord;
import com.clx.performance.model.loan.BankTrade;
......@@ -129,7 +130,7 @@ public class OwnerLoanAccountServiceImpl implements OwnerLoanAccountService {
ownerRepayment.setCloseOrderTime(orderPayResultVO.getCloseDtTm());
bankTrade.setTradeType(BankTradeEnum.TradeType.ORDER_TRANSFER_PAY.getCode());
}
ownerRepayment.setStatus(OwnerLoanRecordEnum.Status.PAYING.getCode());
ownerRepayment.setStatus(OwnerRePaymentEnum.Status.PAYING.getCode());
ownerRepayment.setPayChannel(param.getPayChannel());
OwnerInfoFeignVO ownerInfo = ownerInfoService.getOwnerInfo(TokenUtil.getLoginUserInfo().getUserNo());
ownerRepayment.setPayment(ownerBindCardRecord.getAccountBankName());
......
......@@ -273,10 +273,14 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService {
// 查询还款信息
Optional<OwnerRepayment> optional = ownerRepaymentDao.getOneByField(OwnerRepayment::getRepaymentNo, bankTrade.getRelationNo());
if (!optional.isPresent()){
log.error("还款信息不存在,通过流水号查询的bankTrade的relationNo未在还款中查询到,流水号{}", merSeqNo);
log.info("还款信息不存在,通过流水号查询的bankTrade的relationNo未在还款中查询到,流水号{}", merSeqNo);
return;
}
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());
// 更新还款信息
......@@ -285,6 +289,7 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService {
OwnerLoanRecord ownerLoanRecord = ownerLoanRecordDao.getOneByField(OwnerLoanRecord::getLoanNo,
ownerRepayment.getLoanNo()).orElseThrow(PerformanceResultEnum.DATA_NOT_FIND);
while (true) {
OwnerLoanAccount ownerLoanAccount = ownerLoanAccountDao.getOneByField(OwnerLoanAccount::getOwnerUserNo,
ownerLoanRecord.getOwnerUserNo()).get();
......@@ -306,7 +311,11 @@ public class OwnerRepaymentServiceImpl implements OwnerRepaymentService {
entity.setId(ownerLoanAccount.getId());
entity.setModifiedTime(ownerLoanAccount.getModifiedTime());
log.info("还款成功,清除货主欠款,当前货主虚拟币欠款={},当前货主资金账户欠款={},",
ownerLoanAccount.getVirtuallyAccountBalance(), ownerLoanAccount.getFundingAccountBalance()
);
log.info("还款更新账户参数为:{}", JSONUtil.parse(entity));
Integer flag = ownerLoanAccountDao.updateAccountCAS(entity, LocalDateTime.now(), false);
if (flag > 0) {
break;
......
......@@ -4,11 +4,13 @@ import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.performance.dao.OrderChildDao;
import com.clx.performance.dao.settle.SettlementDriverDetailDao;
import com.clx.performance.dao.settle.SettlementOwnerDetailDao;
import com.clx.performance.enums.settle.SettlementOwnerDetailEnum;
import com.clx.performance.enums.settle.SettlementWayEnum;
import com.clx.performance.model.OrderChild;
import com.clx.performance.model.OrderGoods;
import com.clx.performance.model.settle.SettlementDriverDetail;
import com.clx.performance.model.settle.SettlementOwnerDetail;
import com.clx.performance.param.pc.owner.PageCarrierSettlementOwnerDetailParam;
import com.clx.performance.param.pc.owner.PageOwnerSettlementOwnerDetailParam;
......@@ -45,6 +47,7 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
private final SettlementOwnerDetailDao settlementOwnerDetailDao;
private final SettlementOwnerDetailStruct settlementOwnerDetailStruct;
private final OrderChildDao orderChildDao;
private final SettlementDriverDetailDao settlementDriverDetailDao;
@Override
......@@ -257,17 +260,38 @@ public class SettlementOwnerDetailServiceImpl implements SettlementOwnerDetailS
public Boolean thawAndLockSettlement(String orderNo) {
boolean orderChildrenFlag = false;
boolean ownerDetailsFlag = false;
boolean loanFlag = false;
List<OrderChild> orderChildren = orderChildDao.selectInTransitOrderChildLtUnsettle(orderNo);
List<SettlementOwnerDetail> ownerDetails = settlementOwnerDetailDao.selectListByOrderNo(orderNo);
if (CollectionUtil.isNotEmpty(ownerDetails)) {
ownerDetailsFlag = true;
}
if (CollectionUtil.isNotEmpty(orderChildren)) {
log.info("当前订单{},存在在途运单,不予锁定", orderNo);
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;
} else {
return false;
......
package com.clx.performance.sqlProvider.loan;
import cn.hutool.core.util.ObjectUtil;
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.vo.pc.loan.carrier.OwnerLoanAccountRunningWaterRecordVO;
import org.apache.commons.lang3.StringUtils;
......@@ -34,4 +37,18 @@ public class OwnerLoanAccountRunningWaterRecordSqlProvider {
}}.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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论